-
+
{{ viewer.snapshot.value.url }}
diff --git a/plugins/og/app/app/components/previews/TelegramPreview.vue b/plugins/og/app/app/components/previews/TelegramPreview.vue
index 107b4ac84..ee6ad7999 100644
--- a/plugins/og/app/app/components/previews/TelegramPreview.vue
+++ b/plugins/og/app/app/components/previews/TelegramPreview.vue
@@ -11,12 +11,12 @@ const time = new Intl.DateTimeFormat(undefined, { hour: '2-digit', minute: '2-di
- {{ card.url }}
+ {{ card.url }}
-
+
-
+
{{ card.hostname }}
diff --git a/plugins/og/app/main.ts b/plugins/og/app/main.ts
index 41492cdef..bb7a8a788 100644
--- a/plugins/og/app/main.ts
+++ b/plugins/og/app/main.ts
@@ -1,4 +1,5 @@
import { createApp } from 'vue'
+import { syncPanelTheme } from '../../../design/panel-theme'
import App from './app/app.vue'
const media = window.matchMedia('(prefers-color-scheme: dark)')
@@ -10,3 +11,6 @@ applyScheme(media.matches)
media.addEventListener('change', event => applyScheme(event.matches))
createApp(App).mount('#app')
+
+const stopPanelTheme = syncPanelTheme()
+import.meta.hot?.dispose(stopPanelTheme)
diff --git a/plugins/terminals/app/main.ts b/plugins/terminals/app/main.ts
index d545c981c..4987fc077 100644
--- a/plugins/terminals/app/main.ts
+++ b/plugins/terminals/app/main.ts
@@ -1,3 +1,6 @@
+///
+
+import { syncPanelTheme } from '../../../design/panel-theme'
import { mountTerminals } from './client/index'
const app = document.getElementById('app')
@@ -7,3 +10,6 @@ if (!app)
mountTerminals(app).catch((error) => {
app.textContent = `Failed to connect: ${error instanceof Error ? error.message : String(error)}`
})
+
+const stopPanelTheme = syncPanelTheme()
+import.meta.hot?.dispose(stopPanelTheme)
diff --git a/tests/__snapshots__/tsnapi/devframe/client.snapshot.d.ts b/tests/__snapshots__/tsnapi/devframe/client.snapshot.d.ts
index 0eebf21b1..5aab5f959 100644
--- a/tests/__snapshots__/tsnapi/devframe/client.snapshot.d.ts
+++ b/tests/__snapshots__/tsnapi/devframe/client.snapshot.d.ts
@@ -111,6 +111,13 @@ export interface DevframeServicesClient {
keys: () => string[];
state: () => Promise>;
}
+export interface DevframeTheme {
+ primaryColor?: string;
+}
+export interface DevframeThemeProvider {
+ update: (_: DevframeTheme) => void;
+ dispose: () => void;
+}
export interface RegisterWebMcpToolsOptions {
modelContext?: WebMcpModelContext;
}
@@ -208,6 +215,7 @@ export declare function createScopedClientContext(_:
export declare function getDevframeConnection(): DevframeConnection | undefined;
export declare function getDevframeRpcClient(_?: DevframeRpcClientOptions): Promise;
export declare function isCallableStatus(_: DevframeConnectionStatus): boolean;
+export declare function provideDevframeTheme(_: HTMLIFrameElement, _: DevframeTheme): DevframeThemeProvider;
export declare function readOtpFromUrl(_?: string): string | undefined;
export declare function registerDevframeViewerOrigin(_: DevframeConnection, _?: any): Promise;
export declare function registerWebMcpTools(_: RpcFunctionsCollector, _?: RegisterWebMcpToolsOptions): () => void;
@@ -216,6 +224,7 @@ export declare function resolveSseUrl(_: ConnectionMeta['sse'], _: string, _: Ws
export declare function resolveWebMcpModelContext(): WebMcpModelContext | undefined;
export declare function resolveWsUrl(_: ConnectionMeta['websocket'], _: string, _: WsUrlLocation): string;
export declare function setupDevframeConnection(_?: SetupDevframeConnectionOptions): Promise;
+export declare function watchDevframeTheme(_: (_: DevframeTheme) => void): () => void;
// #endregion
// #region Variables
diff --git a/tests/__snapshots__/tsnapi/devframe/client.snapshot.js b/tests/__snapshots__/tsnapi/devframe/client.snapshot.js
index 5624d64ba..b77abd471 100644
--- a/tests/__snapshots__/tsnapi/devframe/client.snapshot.js
+++ b/tests/__snapshots__/tsnapi/devframe/client.snapshot.js
@@ -18,6 +18,7 @@ export function createScopedClientContext(_, _) {}
export function getDevframeConnection() {}
export async function getDevframeRpcClient(_) {}
export function isCallableStatus(_) {}
+export function provideDevframeTheme(_, _) {}
export function readOtpFromUrl(_) {}
export async function registerDevframeViewerOrigin(_, _) {}
export function registerWebMcpTools(_, _) {}
@@ -26,6 +27,7 @@ export function resolveSseUrl(_, _, _) {}
export function resolveWebMcpModelContext() {}
export function resolveWsUrl(_, _, _) {}
export async function setupDevframeConnection(_) {}
+export function watchDevframeTheme(_) {}
// #endregion
// #region Variables
diff --git a/tests/__snapshots__/tsnapi/devframe/constants.snapshot.d.ts b/tests/__snapshots__/tsnapi/devframe/constants.snapshot.d.ts
index d3f0cf78c..8129c5831 100644
--- a/tests/__snapshots__/tsnapi/devframe/constants.snapshot.d.ts
+++ b/tests/__snapshots__/tsnapi/devframe/constants.snapshot.d.ts
@@ -38,6 +38,7 @@ export declare const DEVFRAME_EVENTS: {
readonly panelStatePatch: "devframe:in-page:panel-state:patch";
};
readonly postMessage: {
+ readonly theme: "devframe:theme";
readonly remoteAssetsError: "devframe:remote-assets-error";
readonly inPageChannel: "devframe:in-page-channel";
};