sunpeak 0.14.3 → 0.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -28
- package/bin/commands/build.mjs +2 -1
- package/bin/commands/dev.mjs +72 -2
- package/dist/chatgpt/{conversation.d.ts → chatgpt-conversation.d.ts} +1 -1
- package/dist/chatgpt/chatgpt-host.d.ts +1 -0
- package/dist/chatgpt/globals.css +618 -6156
- package/dist/chatgpt/index.cjs +11 -8
- package/dist/chatgpt/index.cjs.map +1 -1
- package/dist/chatgpt/index.d.ts +10 -32
- package/dist/chatgpt/index.js +15 -12
- package/dist/chatgpt/index.js.map +1 -1
- package/dist/claude/claude-conversation.d.ts +23 -0
- package/dist/claude/claude-host.d.ts +1 -0
- package/dist/claude/index.cjs +6 -0
- package/dist/claude/index.cjs.map +1 -0
- package/dist/claude/index.d.ts +1 -0
- package/dist/claude/index.js +6 -0
- package/dist/claude/index.js.map +1 -0
- package/dist/claude-host-C7KPfOM8.cjs +284 -0
- package/dist/claude-host-C7KPfOM8.cjs.map +1 -0
- package/dist/claude-host-CaD7ptbt.js +283 -0
- package/dist/claude-host-CaD7ptbt.js.map +1 -0
- package/dist/{discovery-COZUnY6a.js → discovery-DzV3HLXs.js} +5 -5
- package/dist/{discovery-COZUnY6a.js.map → discovery-DzV3HLXs.js.map} +1 -1
- package/dist/hooks/index.d.ts +4 -0
- package/dist/hooks/use-app-tools.d.ts +44 -0
- package/dist/hooks/use-update-model-context.d.ts +29 -0
- package/dist/index-BKrboRah.js +44 -0
- package/dist/index-BKrboRah.js.map +1 -0
- package/dist/index-BSKuY-oH.cjs +527 -0
- package/dist/index-BSKuY-oH.cjs.map +1 -0
- package/dist/index-CiqvXo8n.js +512 -0
- package/dist/index-CiqvXo8n.js.map +1 -0
- package/dist/index-Dr-L0Nb3.cjs +43 -0
- package/dist/index-Dr-L0Nb3.cjs.map +1 -0
- package/dist/index.cjs +1705 -1647
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2732 -2675
- package/dist/index.js.map +1 -1
- package/dist/lib/default-style-variables.d.ts +2 -0
- package/dist/lib/discovery-cli.js +1 -1
- package/dist/mcp/index.cjs +86 -27
- package/dist/mcp/index.cjs.map +1 -1
- package/dist/mcp/index.d.ts +3 -1
- package/dist/mcp/index.js +85 -26
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/server.d.ts +4 -3
- package/dist/mcp/types.d.ts +11 -0
- package/dist/platform/chatgpt/index.cjs +1 -1
- package/dist/platform/chatgpt/index.js +1 -1
- package/dist/platform/index.cjs +3 -0
- package/dist/platform/index.cjs.map +1 -1
- package/dist/platform/index.d.ts +3 -1
- package/dist/platform/index.js +3 -0
- package/dist/platform/index.js.map +1 -1
- package/dist/{protocol-BQCnIrc9.js → protocol-DFbsCx7E.js} +29 -29
- package/dist/{protocol-BQCnIrc9.js.map → protocol-DFbsCx7E.js.map} +1 -1
- package/dist/simulator/host-styles.d.ts +5 -0
- package/dist/simulator/hosts.d.ts +73 -0
- package/dist/{chatgpt → simulator}/iframe-resource.d.ts +27 -3
- package/dist/simulator/index.cjs +40 -0
- package/dist/simulator/index.cjs.map +1 -0
- package/dist/simulator/index.d.ts +18 -0
- package/dist/simulator/index.js +40 -0
- package/dist/simulator/index.js.map +1 -0
- package/dist/{chatgpt → simulator}/mcp-app-host.d.ts +8 -1
- package/dist/simulator/mock-openai-runtime.d.ts +20 -0
- package/dist/{chatgpt → simulator}/simulator-url.d.ts +8 -1
- package/dist/simulator/simulator.d.ts +12 -0
- package/dist/{chatgpt → simulator}/theme-provider.d.ts +3 -1
- package/dist/simulator/use-simulator-state.d.ts +91 -0
- package/dist/simulator-BqZmzFVR.cjs +8214 -0
- package/dist/simulator-BqZmzFVR.cjs.map +1 -0
- package/dist/simulator-CMgCGNuD.js +8199 -0
- package/dist/simulator-CMgCGNuD.js.map +1 -0
- package/dist/simulator-url-BQ-7SMht.js +335 -0
- package/dist/simulator-url-BQ-7SMht.js.map +1 -0
- package/dist/simulator-url-uNqOCaPJ.cjs +334 -0
- package/dist/simulator-url-uNqOCaPJ.cjs.map +1 -0
- package/dist/style.css +558 -6143
- package/dist/types/runtime.d.ts +1 -1
- package/dist/{use-app-D7kRAPSG.cjs → use-app-BnoSPiUT.cjs} +2 -1
- package/dist/{use-app-D7kRAPSG.cjs.map → use-app-BnoSPiUT.cjs.map} +1 -1
- package/dist/{use-app-Dvr4LKs2.js → use-app-D_TeaMFG.js} +4 -3
- package/dist/{use-app-Dvr4LKs2.js.map → use-app-D_TeaMFG.js.map} +1 -1
- package/package.json +18 -3
- package/template/.sunpeak/dev.tsx +4 -4
- package/template/.sunpeak/resource-loader.html +1 -1
- package/template/node_modules/.bin/nodemon +2 -2
- package/template/node_modules/.bin/playwright +2 -2
- package/template/node_modules/.bin/sunpeak +2 -2
- package/template/node_modules/.bin/tsc +2 -2
- package/template/node_modules/.bin/tsserver +2 -2
- package/template/node_modules/.bin/tsx +2 -2
- package/template/node_modules/.bin/vite +2 -2
- package/template/src/components/avatar.tsx +4 -1
- package/template/src/components/button.tsx +17 -20
- package/template/src/resources/albums/albums-resource.tsx +2 -3
- package/template/src/resources/albums/components/album-card.tsx +4 -2
- package/template/src/resources/albums/components/film-strip.test.tsx +2 -2
- package/template/src/resources/albums/components/film-strip.tsx +2 -2
- package/template/src/resources/albums/components/fullscreen-viewer.tsx +7 -5
- package/template/src/resources/carousel/carousel-resource.tsx +2 -3
- package/template/src/resources/carousel/components/card.test.tsx +3 -2
- package/template/src/resources/carousel/components/card.tsx +8 -4
- package/template/src/resources/map/components/map-view.tsx +1 -1
- package/template/src/resources/map/components/map.tsx +1 -1
- package/template/src/resources/map/components/place-card.tsx +8 -4
- package/template/src/resources/map/components/place-carousel.tsx +1 -1
- package/template/src/resources/map/components/place-inspector.tsx +15 -7
- package/template/src/resources/map/components/place-list.tsx +7 -4
- package/template/src/resources/map/map-resource.tsx +0 -2
- package/template/src/resources/review/review-resource.tsx +61 -27
- package/template/tests/e2e/albums.spec.ts +118 -102
- package/template/tests/e2e/carousel.spec.ts +103 -100
- package/template/tests/e2e/map.spec.ts +220 -181
- package/template/tests/e2e/review.spec.ts +224 -198
- package/dist/_commonjsHelpers-Bc2YnDe1.cjs +0 -8
- package/dist/_commonjsHelpers-Bc2YnDe1.cjs.map +0 -1
- package/dist/_commonjsHelpers-DWwsNxpa.js +0 -9
- package/dist/_commonjsHelpers-DWwsNxpa.js.map +0 -1
- package/dist/index-CJ3jfcjj.js +0 -15131
- package/dist/index-CJ3jfcjj.js.map +0 -1
- package/dist/index-Cdeg96So.cjs +0 -15147
- package/dist/index-Cdeg96So.cjs.map +0 -1
- /package/dist/{chatgpt → simulator}/simple-sidebar.d.ts +0 -0
- /package/dist/{chatgpt/chatgpt-simulator-types.d.ts → simulator/simulator-types.d.ts} +0 -0
package/dist/chatgpt/index.cjs
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const
|
|
3
|
+
const simulatorUrl = require("../simulator-url-uNqOCaPJ.cjs");
|
|
4
|
+
const chatgpt_index = require("../index-BSKuY-oH.cjs");
|
|
5
|
+
const simulator = require("../simulator-BqZmzFVR.cjs");
|
|
4
6
|
const discovery = require("../discovery-CRR3SlyI.cjs");
|
|
7
|
+
exports.createSimulatorUrl = simulatorUrl.createSimulatorUrl;
|
|
5
8
|
exports.ChatGPTSimulator = chatgpt_index.ChatGPTSimulator;
|
|
6
|
-
exports.IframeResource =
|
|
7
|
-
exports.McpAppHost =
|
|
8
|
-
exports.SCREEN_WIDTHS =
|
|
9
|
-
exports.
|
|
10
|
-
exports.
|
|
11
|
-
exports.extractResourceCSP =
|
|
12
|
-
exports.useThemeContext =
|
|
9
|
+
exports.IframeResource = simulator.IframeResource;
|
|
10
|
+
exports.McpAppHost = simulator.McpAppHost;
|
|
11
|
+
exports.SCREEN_WIDTHS = simulator.SCREEN_WIDTHS;
|
|
12
|
+
exports.Simulator = simulator.Simulator;
|
|
13
|
+
exports.ThemeProvider = simulator.ThemeProvider;
|
|
14
|
+
exports.extractResourceCSP = simulator.extractResourceCSP;
|
|
15
|
+
exports.useThemeContext = simulator.useThemeContext;
|
|
13
16
|
exports.buildDevSimulations = discovery.buildDevSimulations;
|
|
14
17
|
exports.buildResourceMap = discovery.buildResourceMap;
|
|
15
18
|
exports.buildSimulations = discovery.buildSimulations;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/chatgpt/index.d.ts
CHANGED
|
@@ -1,36 +1,14 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ChatGPT-specific exports for the Sunpeak simulator.
|
|
3
|
-
*
|
|
4
|
-
* These components and utilities are designed for local development and testing,
|
|
5
|
-
* simulating how resources render in ChatGPT's environment.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```tsx
|
|
9
|
-
* import { chatgpt, isChatGPT } from 'sunpeak';
|
|
10
|
-
*
|
|
11
|
-
* // Use the simulator for local development
|
|
12
|
-
* function App() {
|
|
13
|
-
* return <chatgpt.ChatGPTSimulator simulations={simulations} />;
|
|
14
|
-
* }
|
|
15
|
-
*
|
|
16
|
-
* // Check platform at runtime
|
|
17
|
-
* if (isChatGPT()) {
|
|
18
|
-
* // Running in ChatGPT
|
|
19
|
-
* }
|
|
20
|
-
* ```
|
|
21
|
-
*
|
|
22
|
-
* @module sunpeak/chatgpt
|
|
23
|
-
*/
|
|
24
1
|
export { ChatGPTSimulator } from './chatgpt-simulator';
|
|
2
|
+
export { Simulator } from '../simulator/simulator';
|
|
25
3
|
export type { Simulation } from '../types/simulation';
|
|
26
|
-
export type { ScreenWidth, SimulatorConfig } from '
|
|
27
|
-
export { SCREEN_WIDTHS } from '
|
|
28
|
-
export { McpAppHost } from '
|
|
29
|
-
export type { McpAppHostOptions } from '
|
|
30
|
-
export { IframeResource, extractResourceCSP } from '
|
|
31
|
-
export type { ResourceCSP } from '
|
|
32
|
-
export * from '
|
|
33
|
-
export { createSimulatorUrl } from '
|
|
34
|
-
export type { SimulatorUrlParams } from '
|
|
4
|
+
export type { ScreenWidth, SimulatorConfig } from '../simulator/simulator-types';
|
|
5
|
+
export { SCREEN_WIDTHS } from '../simulator/simulator-types';
|
|
6
|
+
export { McpAppHost } from '../simulator/mcp-app-host';
|
|
7
|
+
export type { McpAppHostOptions } from '../simulator/mcp-app-host';
|
|
8
|
+
export { IframeResource, extractResourceCSP } from '../simulator/iframe-resource';
|
|
9
|
+
export type { ResourceCSP } from '../simulator/iframe-resource';
|
|
10
|
+
export * from '../simulator/theme-provider';
|
|
11
|
+
export { createSimulatorUrl } from '../simulator/simulator-url';
|
|
12
|
+
export type { SimulatorUrlParams } from '../simulator/simulator-url';
|
|
35
13
|
export { buildDevSimulations, buildSimulations, buildResourceMap, createResourceExports, toPascalCase, extractResourceKey, extractSimulationKey, findResourceKey, getComponentName, findResourceDirs, isSimulationFile, extractSimulationName, findSimulationFiles, } from '../lib/discovery';
|
|
36
14
|
export type { BuildSimulationsOptions, BuildDevSimulationsOptions, ResourceMetadata, ResourceDirInfo, FsOps, } from '../lib/discovery';
|
package/dist/chatgpt/index.js
CHANGED
|
@@ -1,26 +1,29 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { c } from "../simulator-url-BQ-7SMht.js";
|
|
2
|
+
import { C } from "../index-CiqvXo8n.js";
|
|
3
|
+
import { I, M, a, S, T, j, m } from "../simulator-CMgCGNuD.js";
|
|
4
|
+
import { b, a as a2, c as c2, d, e, f, g, h, i, j as j2, k, l, t } from "../discovery-DzV3HLXs.js";
|
|
3
5
|
export {
|
|
4
6
|
C as ChatGPTSimulator,
|
|
5
7
|
I as IframeResource,
|
|
6
8
|
M as McpAppHost,
|
|
7
|
-
|
|
9
|
+
a as SCREEN_WIDTHS,
|
|
10
|
+
S as Simulator,
|
|
8
11
|
T as ThemeProvider,
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
b as buildDevSimulations,
|
|
13
|
+
a2 as buildResourceMap,
|
|
14
|
+
c2 as buildSimulations,
|
|
15
|
+
d as createResourceExports,
|
|
16
|
+
c as createSimulatorUrl,
|
|
17
|
+
j as extractResourceCSP,
|
|
18
|
+
e as extractResourceKey,
|
|
16
19
|
f as extractSimulationKey,
|
|
17
20
|
g as extractSimulationName,
|
|
18
21
|
h as findResourceDirs,
|
|
19
22
|
i as findResourceKey,
|
|
20
|
-
|
|
23
|
+
j2 as findSimulationFiles,
|
|
21
24
|
k as getComponentName,
|
|
22
25
|
l as isSimulationFile,
|
|
23
26
|
t as toPascalCase,
|
|
24
|
-
|
|
27
|
+
m as useThemeContext
|
|
25
28
|
};
|
|
26
29
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ScreenWidth } from '../simulator/simulator-types';
|
|
2
|
+
import { McpUiDisplayMode, McpUiHostContext } from '@modelcontextprotocol/ext-apps';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
type Platform = NonNullable<McpUiHostContext['platform']>;
|
|
5
|
+
interface ClaudeConversationProps {
|
|
6
|
+
children?: React.ReactNode;
|
|
7
|
+
screenWidth: ScreenWidth;
|
|
8
|
+
displayMode: McpUiDisplayMode;
|
|
9
|
+
platform: Platform;
|
|
10
|
+
onRequestDisplayMode?: (mode: McpUiDisplayMode) => void;
|
|
11
|
+
appName?: string;
|
|
12
|
+
appIcon?: string;
|
|
13
|
+
userMessage?: string;
|
|
14
|
+
isTransitioning?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Claude conversation shell — mimics Claude's chat UI chrome.
|
|
18
|
+
*
|
|
19
|
+
* All three display modes (inline, pip, fullscreen) share the same React tree
|
|
20
|
+
* shape so that the iframe never unmounts when switching modes.
|
|
21
|
+
*/
|
|
22
|
+
export declare function ClaudeConversation({ children, screenWidth, displayMode, platform, onRequestDisplayMode, appName, appIcon, userMessage, isTransitioning, }: ClaudeConversationProps): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
require("../claude-host-C7KPfOM8.cjs");
|
|
4
|
+
const simulator = require("../simulator-BqZmzFVR.cjs");
|
|
5
|
+
exports.ClaudeSimulator = simulator.Simulator;
|
|
6
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Simulator as ClaudeSimulator } from '../simulator/simulator';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const simulator = require("./simulator-BqZmzFVR.cjs");
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
function CloseIcon() {
|
|
5
|
+
return /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
6
|
+
"path",
|
|
7
|
+
{
|
|
8
|
+
d: "M12 4L4 12M4 4L12 12",
|
|
9
|
+
stroke: "currentColor",
|
|
10
|
+
strokeWidth: "1.5",
|
|
11
|
+
strokeLinecap: "round"
|
|
12
|
+
}
|
|
13
|
+
) });
|
|
14
|
+
}
|
|
15
|
+
function BackIcon() {
|
|
16
|
+
return /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
17
|
+
"path",
|
|
18
|
+
{
|
|
19
|
+
d: "M10 3L5 8L10 13",
|
|
20
|
+
stroke: "currentColor",
|
|
21
|
+
strokeWidth: "1.5",
|
|
22
|
+
strokeLinecap: "round",
|
|
23
|
+
strokeLinejoin: "round"
|
|
24
|
+
}
|
|
25
|
+
) });
|
|
26
|
+
}
|
|
27
|
+
function ClaudeConversation({
|
|
28
|
+
children,
|
|
29
|
+
screenWidth,
|
|
30
|
+
displayMode,
|
|
31
|
+
platform,
|
|
32
|
+
onRequestDisplayMode,
|
|
33
|
+
appName = "Sunpeak",
|
|
34
|
+
appIcon,
|
|
35
|
+
userMessage = "What have you got for me today?",
|
|
36
|
+
isTransitioning = false
|
|
37
|
+
}) {
|
|
38
|
+
const isDesktop = platform === "desktop";
|
|
39
|
+
const containerWidth = screenWidth === "full" ? "100%" : `${simulator.SCREEN_WIDTHS[screenWidth]}px`;
|
|
40
|
+
const isFullscreen = displayMode === "fullscreen";
|
|
41
|
+
const isPip = displayMode === "pip";
|
|
42
|
+
const handleClose = () => onRequestDisplayMode?.("inline");
|
|
43
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
44
|
+
"div",
|
|
45
|
+
{
|
|
46
|
+
className: "flex flex-col w-full h-full flex-1 items-center relative",
|
|
47
|
+
style: {
|
|
48
|
+
transform: "translate(0)",
|
|
49
|
+
backgroundColor: "var(--sim-bg-conversation, var(--color-background-primary))",
|
|
50
|
+
color: "var(--color-text-primary)"
|
|
51
|
+
},
|
|
52
|
+
children: [
|
|
53
|
+
isFullscreen && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
54
|
+
"div",
|
|
55
|
+
{
|
|
56
|
+
className: "fixed start-0 end-0 top-0 bottom-0 z-[51] mx-auto flex flex-col pointer-events-none",
|
|
57
|
+
style: { maxWidth: containerWidth },
|
|
58
|
+
children: [
|
|
59
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
60
|
+
"div",
|
|
61
|
+
{
|
|
62
|
+
className: "z-10 flex items-center h-12 border-b px-3 pointer-events-auto",
|
|
63
|
+
style: {
|
|
64
|
+
borderColor: "var(--color-border-primary)",
|
|
65
|
+
backgroundColor: "var(--sim-bg-conversation, var(--color-background-primary))"
|
|
66
|
+
},
|
|
67
|
+
children: [
|
|
68
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
69
|
+
"button",
|
|
70
|
+
{
|
|
71
|
+
onClick: handleClose,
|
|
72
|
+
"aria-label": "Back",
|
|
73
|
+
className: "h-8 w-8 flex items-center justify-center rounded-lg transition-colors hover:opacity-70",
|
|
74
|
+
type: "button",
|
|
75
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(BackIcon, {})
|
|
76
|
+
}
|
|
77
|
+
),
|
|
78
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 text-center text-sm font-medium", children: appName }),
|
|
79
|
+
isDesktop && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-8" })
|
|
80
|
+
]
|
|
81
|
+
}
|
|
82
|
+
),
|
|
83
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1" }),
|
|
84
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
85
|
+
"footer",
|
|
86
|
+
{
|
|
87
|
+
className: "pointer-events-auto p-3",
|
|
88
|
+
style: {
|
|
89
|
+
backgroundColor: "var(--sim-bg-conversation, var(--color-background-primary))"
|
|
90
|
+
},
|
|
91
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-w-[48rem] mx-auto", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
92
|
+
"input",
|
|
93
|
+
{
|
|
94
|
+
type: "text",
|
|
95
|
+
name: "userInput",
|
|
96
|
+
disabled: true,
|
|
97
|
+
placeholder: "Reply to sunpeak...",
|
|
98
|
+
className: "w-full rounded-xl px-4 py-2.5 text-sm",
|
|
99
|
+
style: {
|
|
100
|
+
backgroundColor: "var(--sim-bg-reply-input, var(--color-background-secondary))",
|
|
101
|
+
border: "1px solid var(--color-border-primary)",
|
|
102
|
+
color: "var(--color-text-primary)"
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
) })
|
|
106
|
+
}
|
|
107
|
+
)
|
|
108
|
+
]
|
|
109
|
+
}
|
|
110
|
+
),
|
|
111
|
+
!isFullscreen && /* @__PURE__ */ jsxRuntime.jsx(
|
|
112
|
+
"header",
|
|
113
|
+
{
|
|
114
|
+
className: "h-12 flex items-center px-4 text-sm font-medium sticky top-0 z-40 w-full",
|
|
115
|
+
style: {
|
|
116
|
+
maxWidth: containerWidth,
|
|
117
|
+
backgroundColor: "var(--sim-bg-conversation, var(--color-background-primary))"
|
|
118
|
+
},
|
|
119
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: "sunpeak.ai" })
|
|
120
|
+
}
|
|
121
|
+
),
|
|
122
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
123
|
+
"div",
|
|
124
|
+
{
|
|
125
|
+
className: "flex flex-col flex-1 w-full transition-all duration-200 overflow-hidden",
|
|
126
|
+
style: { maxWidth: containerWidth },
|
|
127
|
+
children: [
|
|
128
|
+
/* @__PURE__ */ jsxRuntime.jsxs("main", { className: "flex-1 overflow-y-auto overflow-x-hidden", children: [
|
|
129
|
+
!isFullscreen && /* @__PURE__ */ jsxRuntime.jsx("article", { className: "w-full", dir: "auto", "data-turn": "user", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 py-4", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-w-[48rem] mx-auto flex justify-end", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
130
|
+
"div",
|
|
131
|
+
{
|
|
132
|
+
className: "inline-block rounded-2xl px-4 py-2.5 text-sm max-w-[85%]",
|
|
133
|
+
style: {
|
|
134
|
+
backgroundColor: "var(--sim-bg-user-bubble, var(--color-background-tertiary))"
|
|
135
|
+
},
|
|
136
|
+
children: userMessage
|
|
137
|
+
}
|
|
138
|
+
) }) }) }),
|
|
139
|
+
/* @__PURE__ */ jsxRuntime.jsxs("article", { className: "w-full", dir: "auto", "data-turn": "assistant", children: [
|
|
140
|
+
/* @__PURE__ */ jsxRuntime.jsxs("h6", { className: "sr-only", children: [
|
|
141
|
+
appName,
|
|
142
|
+
" said:"
|
|
143
|
+
] }),
|
|
144
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 py-2", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-[48rem] mx-auto", children: [
|
|
145
|
+
!isFullscreen && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 mb-3", children: [
|
|
146
|
+
appIcon ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "size-6 flex items-center justify-center text-base", children: appIcon }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
147
|
+
"div",
|
|
148
|
+
{
|
|
149
|
+
className: "size-6 rounded-full flex items-center justify-center text-xs font-medium text-white",
|
|
150
|
+
style: { backgroundColor: "#c55a30" },
|
|
151
|
+
children: "C"
|
|
152
|
+
}
|
|
153
|
+
),
|
|
154
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium", children: appName })
|
|
155
|
+
] }),
|
|
156
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
157
|
+
"div",
|
|
158
|
+
{
|
|
159
|
+
className: isPip ? "fixed start-4 end-4 top-12 z-50 mx-auto max-w-[40rem] lg:max-w-[48rem] sm:start-0 sm:end-0 sm:top-[3rem] sm:w-full overflow-visible" : isFullscreen ? "fixed inset-x-0 top-[3rem] bottom-0 z-50 mx-auto" : "relative mb-2 w-full overflow-visible",
|
|
160
|
+
style: {
|
|
161
|
+
...isPip ? { maxHeight: "480px" } : {},
|
|
162
|
+
...isFullscreen ? { maxWidth: containerWidth } : {}
|
|
163
|
+
},
|
|
164
|
+
children: [
|
|
165
|
+
isPip && /* @__PURE__ */ jsxRuntime.jsx(
|
|
166
|
+
"button",
|
|
167
|
+
{
|
|
168
|
+
onClick: handleClose,
|
|
169
|
+
className: "absolute -start-2 -top-1.5 z-10 rounded-full p-1.5 text-white shadow-md",
|
|
170
|
+
style: { backgroundColor: "#4a4a4a" },
|
|
171
|
+
"aria-label": "Close picture-in-picture",
|
|
172
|
+
type: "button",
|
|
173
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(CloseIcon, {})
|
|
174
|
+
},
|
|
175
|
+
"pip-close"
|
|
176
|
+
),
|
|
177
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
178
|
+
"div",
|
|
179
|
+
{
|
|
180
|
+
className: isPip ? "relative overflow-hidden h-full rounded-2xl shadow-lg" : "relative overflow-hidden h-full",
|
|
181
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
182
|
+
"div",
|
|
183
|
+
{
|
|
184
|
+
className: "h-full w-full max-w-full",
|
|
185
|
+
style: {
|
|
186
|
+
...isPip ? {
|
|
187
|
+
overflow: "auto",
|
|
188
|
+
backgroundColor: "var(--color-background-secondary)"
|
|
189
|
+
} : isFullscreen ? {
|
|
190
|
+
overflow: "auto",
|
|
191
|
+
backgroundColor: "var(--color-background-primary)"
|
|
192
|
+
} : { backgroundColor: "transparent" },
|
|
193
|
+
opacity: isTransitioning ? 0 : 1,
|
|
194
|
+
transition: isTransitioning ? "none" : "opacity 100ms"
|
|
195
|
+
},
|
|
196
|
+
children
|
|
197
|
+
}
|
|
198
|
+
)
|
|
199
|
+
},
|
|
200
|
+
"content"
|
|
201
|
+
)
|
|
202
|
+
]
|
|
203
|
+
}
|
|
204
|
+
)
|
|
205
|
+
] }) })
|
|
206
|
+
] })
|
|
207
|
+
] }),
|
|
208
|
+
!isFullscreen && /* @__PURE__ */ jsxRuntime.jsx(
|
|
209
|
+
"footer",
|
|
210
|
+
{
|
|
211
|
+
style: {
|
|
212
|
+
backgroundColor: "var(--sim-bg-conversation, var(--color-background-primary))"
|
|
213
|
+
},
|
|
214
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-w-[48rem] mx-auto px-4 py-4", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
215
|
+
"input",
|
|
216
|
+
{
|
|
217
|
+
type: "text",
|
|
218
|
+
name: "userInput",
|
|
219
|
+
disabled: true,
|
|
220
|
+
placeholder: "Reply to sunpeak...",
|
|
221
|
+
className: "w-full rounded-xl px-4 py-2.5 text-sm",
|
|
222
|
+
style: {
|
|
223
|
+
backgroundColor: "var(--sim-bg-reply-input, var(--color-background-secondary))",
|
|
224
|
+
border: "1px solid var(--color-border-primary)"
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
) }) })
|
|
228
|
+
}
|
|
229
|
+
)
|
|
230
|
+
]
|
|
231
|
+
}
|
|
232
|
+
)
|
|
233
|
+
]
|
|
234
|
+
}
|
|
235
|
+
);
|
|
236
|
+
}
|
|
237
|
+
const CLAUDE_HOST_INFO = {
|
|
238
|
+
name: "Claude",
|
|
239
|
+
version: "1.0.0"
|
|
240
|
+
};
|
|
241
|
+
const CLAUDE_HOST_CAPABILITIES = {
|
|
242
|
+
openLinks: {},
|
|
243
|
+
serverTools: {},
|
|
244
|
+
logging: {},
|
|
245
|
+
updateModelContext: { text: {} },
|
|
246
|
+
message: { text: {} }
|
|
247
|
+
};
|
|
248
|
+
function applyClaudeTheme(theme) {
|
|
249
|
+
document.documentElement.setAttribute("data-theme", theme);
|
|
250
|
+
document.documentElement.style.colorScheme = theme;
|
|
251
|
+
}
|
|
252
|
+
const CLAUDE_STYLE_VARIABLES = {
|
|
253
|
+
...simulator.DEFAULT_STYLE_VARIABLES,
|
|
254
|
+
// Background colors — warm beige/cream palette
|
|
255
|
+
"--color-background-primary": "light-dark(#faf9f5, #262624)",
|
|
256
|
+
"--color-background-secondary": "light-dark(#ffffff, #3a3935)",
|
|
257
|
+
"--color-background-tertiary": "light-dark(#e8e4dc, #4a4843)",
|
|
258
|
+
"--color-background-inverse": "light-dark(#2b2a27, #f3f0e8)",
|
|
259
|
+
// Text colors
|
|
260
|
+
"--color-text-primary": "light-dark(#2d2b27, #e8e4dc)",
|
|
261
|
+
"--color-text-secondary": "light-dark(#6b6560, #9b9690)",
|
|
262
|
+
"--color-text-tertiary": "light-dark(#9b9690, #6b6560)",
|
|
263
|
+
"--color-text-inverse": "light-dark(#e8e4dc, #2d2b27)",
|
|
264
|
+
// Border colors
|
|
265
|
+
"--color-border-primary": "light-dark(#e0ddd5, #4a4843)",
|
|
266
|
+
"--color-border-secondary": "light-dark(#d5d1c8, #5a5753)",
|
|
267
|
+
"--color-border-tertiary": "light-dark(#f0ede5, #3a3935)"
|
|
268
|
+
};
|
|
269
|
+
simulator.registerHostShell({
|
|
270
|
+
id: "claude",
|
|
271
|
+
label: "Claude",
|
|
272
|
+
Conversation: ClaudeConversation,
|
|
273
|
+
applyTheme: applyClaudeTheme,
|
|
274
|
+
hostInfo: CLAUDE_HOST_INFO,
|
|
275
|
+
hostCapabilities: CLAUDE_HOST_CAPABILITIES,
|
|
276
|
+
styleVariables: CLAUDE_STYLE_VARIABLES,
|
|
277
|
+
pageStyles: {
|
|
278
|
+
"--sim-bg-sidebar": "light-dark(#f9f8f3, #252523)",
|
|
279
|
+
"--sim-bg-conversation": "light-dark(#faf9f5, #262624)",
|
|
280
|
+
"--sim-bg-user-bubble": "light-dark(#f1eee6, #141413)",
|
|
281
|
+
"--sim-bg-reply-input": "light-dark(#ffffff, #30302e)"
|
|
282
|
+
}
|
|
283
|
+
});
|
|
284
|
+
//# sourceMappingURL=claude-host-C7KPfOM8.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-host-C7KPfOM8.cjs","sources":["../src/claude/claude-conversation.tsx","../src/claude/claude-host.ts"],"sourcesContent":["import * as React from 'react';\nimport { SCREEN_WIDTHS, type ScreenWidth } from '../simulator/simulator-types';\nimport type { McpUiDisplayMode, McpUiHostContext } from '@modelcontextprotocol/ext-apps';\n\ntype Platform = NonNullable<McpUiHostContext['platform']>;\n\ninterface ClaudeConversationProps {\n children?: React.ReactNode;\n screenWidth: ScreenWidth;\n displayMode: McpUiDisplayMode;\n platform: Platform;\n onRequestDisplayMode?: (mode: McpUiDisplayMode) => void;\n appName?: string;\n appIcon?: string;\n userMessage?: string;\n isTransitioning?: boolean;\n}\n\nfunction CloseIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M12 4L4 12M4 4L12 12\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\nfunction BackIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M10 3L5 8L10 13\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\n/**\n * Claude conversation shell — mimics Claude's chat UI chrome.\n *\n * All three display modes (inline, pip, fullscreen) share the same React tree\n * shape so that the iframe never unmounts when switching modes.\n */\nexport function ClaudeConversation({\n children,\n screenWidth,\n displayMode,\n platform,\n onRequestDisplayMode,\n appName = 'Sunpeak',\n appIcon,\n userMessage = 'What have you got for me today?',\n isTransitioning = false,\n}: ClaudeConversationProps) {\n const isDesktop = platform === 'desktop';\n const containerWidth = screenWidth === 'full' ? '100%' : `${SCREEN_WIDTHS[screenWidth]}px`;\n const isFullscreen = displayMode === 'fullscreen';\n const isPip = displayMode === 'pip';\n\n const handleClose = () => onRequestDisplayMode?.('inline');\n\n return (\n <div\n className=\"flex flex-col w-full h-full flex-1 items-center relative\"\n style={{\n transform: 'translate(0)',\n backgroundColor: 'var(--sim-bg-conversation, var(--color-background-primary))',\n color: 'var(--color-text-primary)',\n }}\n >\n {/* ─── Fullscreen chrome overlay ─── */}\n {isFullscreen && (\n <div\n className=\"fixed start-0 end-0 top-0 bottom-0 z-[51] mx-auto flex flex-col pointer-events-none\"\n style={{ maxWidth: containerWidth }}\n >\n <div\n className=\"z-10 flex items-center h-12 border-b px-3 pointer-events-auto\"\n style={{\n borderColor: 'var(--color-border-primary)',\n backgroundColor: 'var(--sim-bg-conversation, var(--color-background-primary))',\n }}\n >\n <button\n onClick={handleClose}\n aria-label=\"Back\"\n className=\"h-8 w-8 flex items-center justify-center rounded-lg transition-colors hover:opacity-70\"\n type=\"button\"\n >\n <BackIcon />\n </button>\n <div className=\"flex-1 text-center text-sm font-medium\">{appName}</div>\n {isDesktop && <div className=\"w-8\" />}\n </div>\n <div className=\"flex-1\" />\n <footer\n className=\"pointer-events-auto p-3\"\n style={{\n backgroundColor: 'var(--sim-bg-conversation, var(--color-background-primary))',\n }}\n >\n <div className=\"max-w-[48rem] mx-auto\">\n <input\n type=\"text\"\n name=\"userInput\"\n disabled\n placeholder=\"Reply to sunpeak...\"\n className=\"w-full rounded-xl px-4 py-2.5 text-sm\"\n style={{\n backgroundColor: 'var(--sim-bg-reply-input, var(--color-background-secondary))',\n border: '1px solid var(--color-border-primary)',\n color: 'var(--color-text-primary)',\n }}\n />\n </div>\n </footer>\n </div>\n )}\n\n {/* ─── Conversation header ─── */}\n {!isFullscreen && (\n <header\n className=\"h-12 flex items-center px-4 text-sm font-medium sticky top-0 z-40 w-full\"\n style={{\n maxWidth: containerWidth,\n backgroundColor: 'var(--sim-bg-conversation, var(--color-background-primary))',\n }}\n >\n <span>sunpeak.ai</span>\n </header>\n )}\n\n {/* ─── Conversation container ─── */}\n <div\n className=\"flex flex-col flex-1 w-full transition-all duration-200 overflow-hidden\"\n style={{ maxWidth: containerWidth }}\n >\n <main className=\"flex-1 overflow-y-auto overflow-x-hidden\">\n {/* User turn */}\n {!isFullscreen && (\n <article className=\"w-full\" dir=\"auto\" data-turn=\"user\">\n <div className=\"px-4 py-4\">\n <div className=\"max-w-[48rem] mx-auto flex justify-end\">\n <div\n className=\"inline-block rounded-2xl px-4 py-2.5 text-sm max-w-[85%]\"\n style={{\n backgroundColor:\n 'var(--sim-bg-user-bubble, var(--color-background-tertiary))',\n }}\n >\n {userMessage}\n </div>\n </div>\n </div>\n </article>\n )}\n\n {/* Assistant turn */}\n <article className=\"w-full\" dir=\"auto\" data-turn=\"assistant\">\n <h6 className=\"sr-only\">{appName} said:</h6>\n <div className=\"px-4 py-2\">\n <div className=\"max-w-[48rem] mx-auto\">\n {/* Claude avatar + name */}\n {!isFullscreen && (\n <div className=\"flex items-center gap-2 mb-3\">\n {appIcon ? (\n <div className=\"size-6 flex items-center justify-center text-base\">\n {appIcon}\n </div>\n ) : (\n <div\n className=\"size-6 rounded-full flex items-center justify-center text-xs font-medium text-white\"\n style={{ backgroundColor: '#c55a30' }}\n >\n C\n </div>\n )}\n <span className=\"text-sm font-medium\">{appName}</span>\n </div>\n )}\n\n {/* ─── CONTENT AREA ─── */}\n <div\n className={\n isPip\n ? 'fixed start-4 end-4 top-12 z-50 mx-auto max-w-[40rem] lg:max-w-[48rem] sm:start-0 sm:end-0 sm:top-[3rem] sm:w-full overflow-visible'\n : isFullscreen\n ? 'fixed inset-x-0 top-[3rem] bottom-0 z-50 mx-auto'\n : 'relative mb-2 w-full overflow-visible'\n }\n style={{\n ...(isPip ? { maxHeight: '480px' } : {}),\n ...(isFullscreen ? { maxWidth: containerWidth } : {}),\n }}\n >\n {/* PiP close button */}\n {isPip && (\n <button\n key=\"pip-close\"\n onClick={handleClose}\n className=\"absolute -start-2 -top-1.5 z-10 rounded-full p-1.5 text-white shadow-md\"\n style={{ backgroundColor: '#4a4a4a' }}\n aria-label=\"Close picture-in-picture\"\n type=\"button\"\n >\n <CloseIcon />\n </button>\n )}\n <div\n key=\"content\"\n className={\n isPip\n ? 'relative overflow-hidden h-full rounded-2xl shadow-lg'\n : 'relative overflow-hidden h-full'\n }\n >\n <div\n className=\"h-full w-full max-w-full\"\n style={{\n ...(isPip\n ? {\n overflow: 'auto',\n backgroundColor: 'var(--color-background-secondary)',\n }\n : isFullscreen\n ? {\n overflow: 'auto',\n backgroundColor: 'var(--color-background-primary)',\n }\n : { backgroundColor: 'transparent' }),\n opacity: isTransitioning ? 0 : 1,\n transition: isTransitioning ? 'none' : 'opacity 100ms',\n }}\n >\n {children}\n </div>\n </div>\n </div>\n </div>\n </div>\n </article>\n </main>\n\n {/* Input area */}\n {!isFullscreen && (\n <footer\n style={{\n backgroundColor: 'var(--sim-bg-conversation, var(--color-background-primary))',\n }}\n >\n <div className=\"max-w-[48rem] mx-auto px-4 py-4\">\n <div className=\"relative\">\n <input\n type=\"text\"\n name=\"userInput\"\n disabled\n placeholder=\"Reply to sunpeak...\"\n className=\"w-full rounded-xl px-4 py-2.5 text-sm\"\n style={{\n backgroundColor: 'var(--sim-bg-reply-input, var(--color-background-secondary))',\n border: '1px solid var(--color-border-primary)',\n }}\n />\n </div>\n </div>\n </footer>\n )}\n </div>\n </div>\n );\n}\n","import type { McpUiHostCapabilities } from '@modelcontextprotocol/ext-apps';\nimport { registerHostShell } from '../simulator/hosts';\nimport { DEFAULT_STYLE_VARIABLES } from '../simulator/host-styles';\nimport { ClaudeConversation } from './claude-conversation';\n\nconst CLAUDE_HOST_INFO = {\n name: 'Claude',\n version: '1.0.0',\n};\n\n/**\n * Claude starts with the baseline MCP App capabilities.\n * Host-specific capabilities (if any) can be added here as Claude's\n * MCP App integration evolves.\n */\nconst CLAUDE_HOST_CAPABILITIES: McpUiHostCapabilities = {\n openLinks: {},\n serverTools: {},\n logging: {},\n updateModelContext: { text: {} },\n message: { text: {} },\n};\n\n/**\n * Apply Claude-style theming to the document.\n * Sets data-theme attribute and color-scheme so CSS light-dark() resolves correctly.\n */\nfunction applyClaudeTheme(theme: 'light' | 'dark'): void {\n document.documentElement.setAttribute('data-theme', theme);\n document.documentElement.style.colorScheme = theme;\n}\n\n/**\n * Claude-specific style variable overrides (warm beige/cream palette).\n * Inherits defaults from DEFAULT_STYLE_VARIABLES, overriding only colors.\n */\nconst CLAUDE_STYLE_VARIABLES = {\n ...DEFAULT_STYLE_VARIABLES,\n // Background colors — warm beige/cream palette\n '--color-background-primary': 'light-dark(#faf9f5, #262624)',\n '--color-background-secondary': 'light-dark(#ffffff, #3a3935)',\n '--color-background-tertiary': 'light-dark(#e8e4dc, #4a4843)',\n '--color-background-inverse': 'light-dark(#2b2a27, #f3f0e8)',\n // Text colors\n '--color-text-primary': 'light-dark(#2d2b27, #e8e4dc)',\n '--color-text-secondary': 'light-dark(#6b6560, #9b9690)',\n '--color-text-tertiary': 'light-dark(#9b9690, #6b6560)',\n '--color-text-inverse': 'light-dark(#e8e4dc, #2d2b27)',\n // Border colors\n '--color-border-primary': 'light-dark(#e0ddd5, #4a4843)',\n '--color-border-secondary': 'light-dark(#d5d1c8, #5a5753)',\n '--color-border-tertiary': 'light-dark(#f0ede5, #3a3935)',\n};\n\nregisterHostShell({\n id: 'claude',\n label: 'Claude',\n Conversation: ClaudeConversation,\n applyTheme: applyClaudeTheme,\n hostInfo: CLAUDE_HOST_INFO,\n hostCapabilities: CLAUDE_HOST_CAPABILITIES,\n styleVariables: CLAUDE_STYLE_VARIABLES,\n pageStyles: {\n '--sim-bg-sidebar': 'light-dark(#f9f8f3, #252523)',\n '--sim-bg-conversation': 'light-dark(#faf9f5, #262624)',\n '--sim-bg-user-bubble': 'light-dark(#f1eee6, #141413)',\n '--sim-bg-reply-input': 'light-dark(#ffffff, #30302e)',\n },\n});\n"],"names":["jsx","SCREEN_WIDTHS","jsxs","DEFAULT_STYLE_VARIABLES","registerHostShell"],"mappings":"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"}
|