sunpeak 0.1.17 → 0.1.19
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 +1 -1
- package/dist/index.cjs +22 -28
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +23 -29
- package/dist/index.js.map +1 -1
- package/package.json +9 -10
package/README.md
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var clsx = require('clsx');
|
|
4
3
|
var material = require('@mui/material');
|
|
5
4
|
var react = require('react');
|
|
6
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
@@ -230,11 +229,6 @@ var Card = ({
|
|
|
230
229
|
...muiProps,
|
|
231
230
|
variant: isPrimary ? "contained" : "outlined",
|
|
232
231
|
onClick: handleClick,
|
|
233
|
-
className: clsx.clsx(
|
|
234
|
-
"sp-button",
|
|
235
|
-
isPrimary ? "sp-button-primary" : "sp-button-secondary",
|
|
236
|
-
muiProps.className
|
|
237
|
-
),
|
|
238
232
|
children: children2
|
|
239
233
|
}
|
|
240
234
|
);
|
|
@@ -384,6 +378,26 @@ var Card = ({
|
|
|
384
378
|
}
|
|
385
379
|
);
|
|
386
380
|
};
|
|
381
|
+
var ChevronLeftIcon = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
382
|
+
"path",
|
|
383
|
+
{
|
|
384
|
+
d: "M15 18L9 12L15 6",
|
|
385
|
+
stroke: "currentColor",
|
|
386
|
+
strokeWidth: "1.5",
|
|
387
|
+
strokeLinecap: "round",
|
|
388
|
+
strokeLinejoin: "round"
|
|
389
|
+
}
|
|
390
|
+
) });
|
|
391
|
+
var ChevronRightIcon = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
392
|
+
"path",
|
|
393
|
+
{
|
|
394
|
+
d: "M9 18L15 12L9 6",
|
|
395
|
+
stroke: "currentColor",
|
|
396
|
+
strokeWidth: "1.5",
|
|
397
|
+
strokeLinecap: "round",
|
|
398
|
+
strokeLinejoin: "round"
|
|
399
|
+
}
|
|
400
|
+
) });
|
|
387
401
|
var Carousel = ({
|
|
388
402
|
children,
|
|
389
403
|
gap = 16,
|
|
@@ -453,26 +467,6 @@ var Carousel = ({
|
|
|
453
467
|
const handleMouseUpOrLeave = () => {
|
|
454
468
|
setIsDragging(false);
|
|
455
469
|
};
|
|
456
|
-
const ChevronLeftIcon = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
457
|
-
"path",
|
|
458
|
-
{
|
|
459
|
-
d: "M15 18L9 12L15 6",
|
|
460
|
-
stroke: "currentColor",
|
|
461
|
-
strokeWidth: "1.5",
|
|
462
|
-
strokeLinecap: "round",
|
|
463
|
-
strokeLinejoin: "round"
|
|
464
|
-
}
|
|
465
|
-
) });
|
|
466
|
-
const ChevronRightIcon = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
467
|
-
"path",
|
|
468
|
-
{
|
|
469
|
-
d: "M9 18L15 12L9 6",
|
|
470
|
-
stroke: "currentColor",
|
|
471
|
-
strokeWidth: "1.5",
|
|
472
|
-
strokeLinecap: "round",
|
|
473
|
-
strokeLinejoin: "round"
|
|
474
|
-
}
|
|
475
|
-
) });
|
|
476
470
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
477
471
|
material.Box,
|
|
478
472
|
{
|
|
@@ -949,7 +943,7 @@ function GenAI(renderFn) {
|
|
|
949
943
|
...rest
|
|
950
944
|
} = props;
|
|
951
945
|
const colorScheme = overrideMode || detectedColorScheme || "light";
|
|
952
|
-
const theme =
|
|
946
|
+
const theme = getTheme(colorScheme);
|
|
953
947
|
return /* @__PURE__ */ jsxRuntime.jsxs(styles.ThemeProvider, { theme, children: [
|
|
954
948
|
enableCssBaseline && /* @__PURE__ */ jsxRuntime.jsx(CssBaseline__default.default, {}),
|
|
955
949
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -991,7 +985,7 @@ function ChatGPTSimulator({
|
|
|
991
985
|
);
|
|
992
986
|
const [viewportHeight, setViewportHeight] = react.useState(window.innerHeight);
|
|
993
987
|
const [colorScheme, setColorScheme] = react.useState(initialColorScheme);
|
|
994
|
-
const theme =
|
|
988
|
+
const theme = getTheme(colorScheme);
|
|
995
989
|
react.useEffect(() => {
|
|
996
990
|
const handleSetGlobals = (event) => {
|
|
997
991
|
const customEvent = event;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/chatgpt.ts","../src/platforms/chatgpt.ts","../src/platforms/registry.ts","../src/context/PlatformContext.tsx","../src/hooks/usePlatformGlobal.ts","../src/hooks/useDisplayMode.ts","../src/hooks/useMaxHeight.ts","../src/hooks/useRequestDisplayMode.ts","../src/hooks/useColorScheme.ts","../src/hooks/useWidgetProps.ts","../src/hooks/useWidgetState.ts","../src/components/Card/Card.tsx","../src/components/Carousel/Carousel.tsx","../src/themes/base.ts","../src/themes/chatgpt.ts","../src/themes/index.ts","../src/components/GenAI/GenAI.tsx","../src/components/ChatGPTSimulator/ChatGPTSimulator.tsx"],"names":["createContext","jsx","useContext","useSyncExternalStore","useState","useEffect","useCallback","useTheme","children","Button","clsx","jsxs","Box","useRef","cardWidth","Children","IconButton","createTheme","useMemo","ThemeProvider","CssBaseline","Typography","FormControl","InputLabel","Select","MenuItem","CloseIcon","Fragment","TextField"],"mappings":"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","file":"index.cjs","sourcesContent":["export type UnknownObject = Record<string, unknown>;\n\nexport type Theme = 'light' | 'dark';\n\nexport type SafeAreaInsets = {\n top: number;\n bottom: number;\n left: number;\n right: number;\n};\n\nexport type SafeArea = {\n insets: SafeAreaInsets;\n};\n\nexport type DeviceType = 'mobile' | 'tablet' | 'desktop' | 'unknown';\n\nexport type UserAgent = {\n device: { type: DeviceType };\n capabilities: {\n hover: boolean;\n touch: boolean;\n };\n};\n\n/** Display mode */\nexport type DisplayMode = 'pip' | 'inline' | 'fullscreen';\n\nexport type RequestDisplayMode = (args: { mode: DisplayMode }) => Promise<{\n /**\n * The granted display mode. The host may reject the request.\n * For mobile, PiP is always coerced to fullscreen.\n */\n mode: DisplayMode;\n}>;\n\nexport type CallToolResponse = {\n result: string;\n};\n\n/** Calling APIs */\nexport type CallTool = (\n name: string,\n args: Record<string, unknown>\n) => Promise<CallToolResponse>;\n\nexport type ChatGPTGlobals<\n ToolInput = UnknownObject,\n ToolOutput = UnknownObject,\n ToolResponseMetadata = UnknownObject,\n WidgetState = UnknownObject\n> = {\n // visuals\n colorScheme: Theme;\n userAgent: UserAgent;\n locale: string;\n\n // layout\n maxHeight: number;\n displayMode: DisplayMode;\n safeArea: SafeArea;\n\n // state\n toolInput: ToolInput;\n toolOutput: ToolOutput | null;\n toolResponseMetadata: ToolResponseMetadata | null;\n widgetState: WidgetState | null;\n setWidgetState: (state: WidgetState) => Promise<void>;\n};\n\ntype API = {\n callTool: CallTool;\n sendFollowUpMessage: (args: { prompt: string }) => Promise<void>;\n openExternal(payload: { href: string }): void;\n\n // Layout controls\n requestDisplayMode: RequestDisplayMode;\n};\n\n/** Extra events */\nexport const SET_GLOBALS_EVENT_TYPE = 'chatgpt:set_globals';\n\nexport class SetGlobalsEvent extends CustomEvent<{\n globals: Partial<ChatGPTGlobals>;\n}> {\n readonly type = SET_GLOBALS_EVENT_TYPE;\n}\n\n/**\n * Global openai object injected by the web sandbox for communicating with ChatGPT host page.\n */\ndeclare global {\n interface Window {\n openai?: API & ChatGPTGlobals;\n }\n\n interface WindowEventMap {\n [SET_GLOBALS_EVENT_TYPE]: SetGlobalsEvent;\n }\n}\n","/**\n * OpenAI ChatGPT Apps SDK Platform Adapter\n *\n * Implements the PlatformAdapter interface for OpenAI's ChatGPT Apps SDK.\n * https://developers.openai.com/apps-sdk\n */\n\nimport type { PlatformAdapter, PlatformGlobals } from '../types/platform';\nimport { SET_GLOBALS_EVENT_TYPE, type SetGlobalsEvent } from '../types/chatgpt';\n\nexport class ChatGPTPlatformAdapter implements PlatformAdapter {\n readonly name = 'chatgpt';\n\n isAvailable(): boolean {\n return typeof window !== 'undefined' && 'openai' in window;\n }\n\n getGlobal<K extends keyof PlatformGlobals>(key: K): PlatformGlobals[K] | null {\n if (!this.isAvailable()) {\n return null;\n }\n return (window.openai?.[key] as PlatformGlobals[K]) ?? null;\n }\n\n getGlobals() {\n if (!this.isAvailable()) {\n return null;\n }\n return window.openai ?? null;\n }\n\n subscribe(callback: () => void): () => void {\n if (typeof window === 'undefined') {\n return () => {};\n }\n\n const handleSetGlobal = (_event: SetGlobalsEvent) => {\n callback();\n };\n\n window.addEventListener(SET_GLOBALS_EVENT_TYPE, handleSetGlobal, {\n passive: true,\n });\n\n return () => {\n window.removeEventListener(SET_GLOBALS_EVENT_TYPE, handleSetGlobal);\n };\n }\n}\n\n/**\n * Singleton instance of the ChatGPT platform adapter\n */\nexport const chatgptPlatform = new ChatGPTPlatformAdapter();\n","/**\n * Platform Registry\n *\n * Manages multiple platform adapters and auto-detects the active platform.\n */\n\nimport type { PlatformAdapter } from '../types/platform';\nimport { chatgptPlatform } from './chatgpt';\n\nexport interface PlatformRegistry {\n /**\n * Register a platform adapter\n */\n register(adapter: PlatformAdapter): void;\n\n /**\n * Get a specific platform adapter by name\n */\n get(name: string): PlatformAdapter | null;\n\n /**\n * Auto-detect and return the active platform\n * Returns the first available platform in the registry\n */\n detect(): PlatformAdapter | null;\n\n /**\n * Get all registered platforms\n */\n getAll(): PlatformAdapter[];\n}\n\nclass DefaultPlatformRegistry implements PlatformRegistry {\n private adapters = new Map<string, PlatformAdapter>();\n\n constructor() {\n // Register default platforms\n this.register(chatgptPlatform);\n }\n\n register(adapter: PlatformAdapter): void {\n this.adapters.set(adapter.name, adapter);\n }\n\n get(name: string): PlatformAdapter | null {\n return this.adapters.get(name) ?? null;\n }\n\n detect(): PlatformAdapter | null {\n // Return the first available platform\n for (const adapter of this.adapters.values()) {\n if (adapter.isAvailable()) {\n return adapter;\n }\n }\n return null;\n }\n\n getAll(): PlatformAdapter[] {\n return Array.from(this.adapters.values());\n }\n}\n\n/**\n * Create a new platform registry\n */\nexport function createPlatformRegistry(): PlatformRegistry {\n return new DefaultPlatformRegistry();\n}\n\n/**\n * Default platform registry instance\n */\nexport const defaultPlatformRegistry = createPlatformRegistry();\n","/**\n * Platform Context\n *\n * Provides the active platform adapter to all Sunpeak components and hooks.\n */\n\nimport { createContext, useContext, type ReactNode } from 'react';\nimport type { PlatformAdapter } from '../types/platform';\nimport { defaultPlatformRegistry } from '../platforms/registry';\n\nexport interface PlatformContextValue {\n adapter: PlatformAdapter | null;\n}\n\nconst PlatformContext = createContext<PlatformContextValue | null>(null);\n\nexport interface PlatformProviderProps {\n /**\n * The platform adapter to use. If not provided, will auto-detect.\n */\n adapter?: PlatformAdapter;\n\n /**\n * Platform name to use (e.g., 'chatgpt', 'gemini'). If not provided, will auto-detect.\n */\n platform?: string;\n\n children: ReactNode;\n}\n\n/**\n * Platform Provider\n *\n * Wrap your app with this provider to specify which genAI platform to use.\n * If no platform is specified, it will auto-detect the available platform.\n *\n * @example\n * ```tsx\n * import { PlatformProvider } from 'sunpeak';\n *\n * // Auto-detect platform\n * <PlatformProvider>\n * <App />\n * </PlatformProvider>\n *\n * // Explicitly use ChatGPT\n * <PlatformProvider platform=\"chatgpt\">\n * <App />\n * </PlatformProvider>\n * ```\n */\nexport function PlatformProvider({ adapter, platform, children }: PlatformProviderProps) {\n const resolvedAdapter =\n adapter ?? (platform ? defaultPlatformRegistry.get(platform) : null) ?? defaultPlatformRegistry.detect();\n\n return <PlatformContext.Provider value={{ adapter: resolvedAdapter }}>{children}</PlatformContext.Provider>;\n}\n\n/**\n * Hook to access the current platform adapter\n *\n * @internal\n */\nexport function usePlatformContext(): PlatformContextValue {\n const context = useContext(PlatformContext);\n\n // If no provider is found, auto-detect the platform\n if (!context) {\n return {\n adapter: defaultPlatformRegistry.detect(),\n };\n }\n\n return context;\n}\n\n/**\n * Hook to access the current platform adapter\n *\n * Returns null if no platform is available or detected.\n */\nexport function usePlatform(): PlatformAdapter | null {\n const { adapter } = usePlatformContext();\n return adapter;\n}\n","import { useSyncExternalStore } from 'react';\nimport type { PlatformGlobals } from '../types/platform';\nimport { usePlatform } from '../context/PlatformContext';\n\n/**\n * Hook to access platform global state in a platform-agnostic way.\n * Works with any genAI platform (ChatGPT, Gemini, Claude, etc.)\n *\n * Uses React's useSyncExternalStore to efficiently subscribe to changes.\n *\n * @param key - The key of the global state to access\n * @returns The value of the global state, or null if not available\n *\n * @example\n * ```tsx\n * function MyWidget() {\n * const colorScheme = usePlatformGlobal('colorScheme');\n * const displayMode = usePlatformGlobal('displayMode');\n *\n * return <div className={colorScheme === 'dark' ? 'dark' : 'light'}>...</div>;\n * }\n * ```\n */\nexport function usePlatformGlobal<K extends keyof PlatformGlobals>(\n key: K\n): PlatformGlobals[K] | null {\n const platform = usePlatform();\n\n return useSyncExternalStore(\n (onChange) => {\n if (!platform) {\n return () => {};\n }\n\n return platform.subscribe(onChange);\n },\n () => platform?.getGlobal(key) ?? null,\n () => platform?.getGlobal(key) ?? null\n );\n}\n","import { usePlatformGlobal } from './usePlatformGlobal';\nimport { type DisplayMode } from '../types';\n\n/**\n * Hook to get the current display mode from the active genAI platform.\n * Display modes include: 'inline', 'fullscreen', and 'pip' (picture-in-picture).\n *\n * Works with any supported genAI platform (ChatGPT, Gemini, Claude, etc.)\n *\n * @returns The current display mode, or null if not in a supported environment\n */\nexport const useDisplayMode = (): DisplayMode | null => {\n return usePlatformGlobal('displayMode');\n};\n","import { usePlatformGlobal } from './usePlatformGlobal';\n\n/**\n * Hook to get the maximum height constraint from the active genAI platform.\n * Useful for ensuring your widget doesn't exceed the available space.\n *\n * Works with any supported genAI platform (ChatGPT, Gemini, Claude, etc.)\n *\n * @returns The maximum height in pixels, or null if not available\n */\nexport const useMaxHeight = (): number | null => {\n return usePlatformGlobal('maxHeight');\n};\n","import { usePlatform } from '../context/PlatformContext';\nimport type { DisplayMode, RequestDisplayMode } from '../types';\n\n/**\n * Hook to request a specific display mode from the platform\n *\n * @example\n * ```tsx\n * const requestDisplayMode = useRequestDisplayMode();\n *\n * const handleClick = async () => {\n * await requestDisplayMode({ mode: 'fullscreen' });\n * };\n * ```\n */\nexport function useRequestDisplayMode(): RequestDisplayMode {\n const platform = usePlatform();\n\n return async (args: { mode: DisplayMode }) => {\n const globals = platform?.getGlobals();\n\n if (globals?.requestDisplayMode) {\n return await globals.requestDisplayMode(args);\n }\n\n // Fallback if platform doesn't support requestDisplayMode\n console.warn('requestDisplayMode is not available on this platform');\n return { mode: args.mode };\n };\n}\n","import { usePlatformGlobal } from './usePlatformGlobal';\nimport { type Theme } from '../types';\n\n/**\n * Hook to get the current color scheme from the active genAI platform.\n * Color scheme can be 'light' or 'dark'.\n *\n * Works with any supported genAI platform (ChatGPT, Gemini, Claude, etc.)\n *\n * @returns The current color scheme, or null if not in a supported environment\n */\nexport const useColorScheme = (): Theme | null => {\n return usePlatformGlobal('colorScheme');\n};\n","import { usePlatformGlobal } from './usePlatformGlobal';\n\n/**\n * Hook to get widget props (tool output) from the active genAI platform.\n * This contains the data returned by your server's tool.\n *\n * Works with any supported genAI platform (ChatGPT, Gemini, Claude, etc.)\n *\n * @param defaultState - Default state to use if no props are available\n * @returns The widget props from the tool output\n */\nexport function useWidgetProps<T extends Record<string, unknown>>(\n defaultState?: T | (() => T)\n): T {\n const props = usePlatformGlobal('toolOutput') as T;\n\n const fallback =\n typeof defaultState === 'function'\n ? (defaultState as () => T | null)()\n : defaultState ?? null;\n\n return props ?? fallback;\n}\n","import { useCallback, useEffect, useState, type SetStateAction } from 'react';\nimport { usePlatformGlobal } from './usePlatformGlobal';\nimport { usePlatform } from '../context/PlatformContext';\nimport type { UnknownObject } from '../types';\n\n/**\n * Hook to manage widget state that persists in the active genAI platform.\n * Similar to useState, but syncs with the platform host page.\n *\n * Works with any supported genAI platform (ChatGPT, Gemini, Claude, etc.)\n *\n * @param defaultState - Default state value or function to generate it\n * @returns A tuple of [state, setState] similar to useState\n */\nexport function useWidgetState<T extends UnknownObject>(\n defaultState: T | (() => T)\n): readonly [T, (state: SetStateAction<T>) => void];\nexport function useWidgetState<T extends UnknownObject>(\n defaultState?: T | (() => T | null) | null\n): readonly [T | null, (state: SetStateAction<T | null>) => void];\nexport function useWidgetState<T extends UnknownObject>(\n defaultState?: T | (() => T | null) | null\n): readonly [T | null, (state: SetStateAction<T | null>) => void] {\n const widgetStateFromWindow = usePlatformGlobal('widgetState') as T;\n const platform = usePlatform();\n\n const [widgetState, _setWidgetState] = useState<T | null>(() => {\n if (widgetStateFromWindow != null) {\n return widgetStateFromWindow;\n }\n\n return typeof defaultState === 'function' ? defaultState() : defaultState ?? null;\n });\n\n useEffect(() => {\n _setWidgetState(widgetStateFromWindow);\n }, [widgetStateFromWindow]);\n\n const setWidgetState = useCallback(\n (state: SetStateAction<T | null>) => {\n _setWidgetState((prevState) => {\n const newState = typeof state === 'function' ? state(prevState) : state;\n\n if (newState != null && platform) {\n const globals = platform.getGlobals();\n if (globals?.setWidgetState) {\n globals.setWidgetState(newState);\n }\n }\n\n return newState;\n });\n },\n [platform]\n );\n\n return [widgetState, setWidgetState] as const;\n}\n","import { type ReactNode, type HTMLAttributes } from 'react';\nimport { clsx } from 'clsx';\nimport { Button, type ButtonProps as MuiButtonProps, Box, useTheme } from '@mui/material';\nimport { useRequestDisplayMode, useDisplayMode, useMaxHeight, useWidgetState } from '../../hooks';\nimport type { GenAIProps } from '../GenAI';\n\nexport interface ButtonProps extends Omit<MuiButtonProps, 'onClick'> {\n /**\n * Whether to use primary styling (accent color) or secondary (outlined)\n */\n isPrimary?: boolean;\n /**\n * Click handler (required)\n */\n onClick: () => void;\n}\n\nexport interface CardProps extends Omit<GenAIProps, 'children'>, HTMLAttributes<HTMLDivElement> {\n /**\n * Card content\n */\n children?: ReactNode;\n /**\n * Image to display at the top of the card\n */\n image: string;\n /**\n * Alt text for the image\n */\n imageAlt: string;\n /**\n * Maximum width for the image in pixels\n */\n imageMaxWidth: number;\n /**\n * Maximum height for the image in pixels\n */\n imageMaxHeight: number;\n /**\n * Optional header text (title)\n */\n header?: ReactNode;\n /**\n * Optional metadata text (e.g., rating, category)\n */\n metadata?: ReactNode;\n /**\n * First action button (0-1)\n */\n button1?: ButtonProps;\n /**\n * Second action button (0-1)\n */\n button2?: ButtonProps;\n /**\n * Card variant\n */\n variant?: 'default' | 'bordered' | 'elevated';\n}\n\n/**\n * Card - A responsive card component that adapts to display mode.\n *\n * In inline mode:\n * - Fixed width for carousel consistency\n * - Compact layout optimized for horizontal scrolling\n * - Clickable to request fullscreen mode\n *\n * In fullscreen mode:\n * - Full width layout\n * - Expanded content display\n * - More breathing room for content\n *\n * Design specs:\n * - Image: aspect-square with 24px border radius\n * - Typography: 16px medium for header, 12px for metadata, 14px for description\n * - Spacing: 12px between sections\n * - Max 2 actions in footer (design guideline)\n */\nexport const Card = ({\n children,\n image,\n imageAlt,\n imageMaxWidth,\n imageMaxHeight,\n header,\n metadata,\n button1,\n button2,\n variant = 'default',\n className,\n onClick,\n id,\n ...props\n}: CardProps) => {\n const requestDisplayMode = useRequestDisplayMode();\n const displayMode = useDisplayMode();\n const maxHeight = useMaxHeight();\n const theme = useTheme();\n const [widgetState, setWidgetState] = useWidgetState<{ selectedCardId?: string }>({});\n\n // Default to inline mode if display mode is not detected\n const isInline = displayMode !== 'fullscreen' && displayMode !== 'pip';\n\n const hasButtons = button1 || button2;\n\n const handleCardClick = async (e: React.MouseEvent<HTMLDivElement>) => {\n // Call custom onClick if provided\n onClick?.(e);\n\n // Only request fullscreen if we're in inline mode\n if (isInline && !e.defaultPrevented) {\n try {\n // Store the selected card ID in widget state\n if (id) {\n setWidgetState({ ...widgetState, selectedCardId: id });\n }\n await requestDisplayMode({ mode: 'fullscreen' });\n } catch (error) {\n console.error('Failed to request fullscreen mode:', error);\n }\n }\n };\n\n const renderButton = (buttonProps: ButtonProps) => {\n const { isPrimary = false, onClick: buttonOnClick, children, ...muiProps } = buttonProps;\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n buttonOnClick();\n };\n\n return (\n <Button\n {...muiProps}\n variant={isPrimary ? 'contained' : 'outlined'}\n onClick={handleClick}\n className={clsx(\n 'sp-button',\n isPrimary ? 'sp-button-primary' : 'sp-button-secondary',\n muiProps.className\n )}\n >\n {children}\n </Button>\n );\n };\n\n return (\n <Box\n id={id}\n className={className}\n onClick={handleCardClick}\n sx={{\n backgroundColor: theme.palette.background.default,\n borderRadius: theme.spacing(3),\n overflow: 'auto',\n display: 'flex',\n flexDirection: 'column',\n fontFamily: theme.typography.fontFamily,\n width: isInline ? '220px' : '100%',\n maxWidth: isInline ? '220px' : `${imageMaxWidth}px`,\n maxHeight: maxHeight ? `${maxHeight}px` : undefined,\n cursor: isInline ? 'pointer' : 'default',\n userSelect: 'none',\n marginLeft: isInline ? undefined : 'auto',\n marginRight: isInline ? undefined : 'auto',\n ...(variant === 'bordered' && {\n border: `1px solid ${theme.palette.divider}`,\n }),\n ...(variant === 'elevated' && {\n boxShadow: theme.shadows[2],\n border: `1px solid ${theme.palette.divider}`,\n }),\n }}\n {...props}\n >\n {image && (\n <Box>\n <Box\n component=\"img\"\n src={image}\n alt={imageAlt}\n loading=\"lazy\"\n sx={{\n width: '100%',\n height: 'auto',\n aspectRatio: '1',\n objectFit: 'cover',\n borderRadius: theme.spacing(3),\n display: 'block',\n maxWidth: `${imageMaxWidth}px`,\n maxHeight: `${imageMaxHeight}px`,\n }}\n />\n </Box>\n )}\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n gap: isInline ? theme.spacing(3) : theme.spacing(4),\n padding: isInline ? theme.spacing(4) : theme.spacing(6),\n ...(image && {\n paddingTop: isInline ? theme.spacing(3) : theme.spacing(4),\n }),\n }}\n >\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n gap: isInline ? theme.spacing(1) : theme.spacing(2),\n }}\n >\n {header && (\n <Box\n sx={{\n fontSize: theme.typography.body1.fontSize,\n fontWeight: theme.typography.fontWeightMedium,\n color: theme.palette.text.primary,\n lineHeight: 1.25,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {header}\n </Box>\n )}\n {metadata && (\n <Box\n sx={{\n fontSize: theme.typography.caption.fontSize,\n color: theme.palette.text.secondary,\n lineHeight: 1.5,\n }}\n >\n {metadata}\n </Box>\n )}\n {children && (\n <Box\n sx={{\n fontSize: theme.typography.body2.fontSize,\n color: theme.palette.text.primary,\n lineHeight: 1.5,\n display: '-webkit-box',\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n ...(isInline && (metadata || header) && {\n marginTop: theme.spacing(1),\n WebkitLineClamp: 2,\n }),\n ...(!isInline && (metadata || header) && {\n marginTop: theme.spacing(2),\n WebkitLineClamp: 'unset',\n }),\n }}\n >\n {children}\n </Box>\n )}\n </Box>\n {hasButtons && (\n <Box\n sx={{\n display: 'flex',\n gap: theme.spacing(2),\n flexWrap: 'wrap',\n }}\n >\n {button1 && renderButton(button1)}\n {button2 && renderButton(button2)}\n </Box>\n )}\n </Box>\n </Box>\n );\n};\n","import { type ReactNode, type HTMLAttributes, useRef, useState, useEffect, Children } from 'react';\nimport { Box, IconButton, useTheme } from '@mui/material';\nimport { useMaxHeight, useDisplayMode } from '../../hooks';\nimport type { GenAIProps } from '../GenAI';\n\nexport interface CarouselProps extends Omit<GenAIProps, 'children'>, HTMLAttributes<HTMLDivElement> {\n /**\n * Carousel items (typically Card components)\n */\n children: ReactNode;\n /**\n * Gap between items in pixels\n * @default 16\n */\n gap?: number;\n /**\n * Show navigation arrows\n * @default true\n */\n showArrows?: boolean;\n /**\n * Show edge gradients to indicate more content\n * @default true\n */\n showEdgeGradients?: boolean;\n}\n\n/**\n * Carousel - MUI-based carousel for displaying cards side-by-side.\n * Follows OpenAI ChatGPT Apps SDK design guidelines.\n */\nexport const Carousel = ({\n children,\n gap = 16,\n maxWidth = 800,\n showArrows = true,\n showEdgeGradients = true,\n className,\n ...props\n}: CarouselProps) => {\n const scrollRef = useRef<HTMLDivElement>(null);\n const [canScrollLeft, setCanScrollLeft] = useState(false);\n const [canScrollRight, setCanScrollRight] = useState(false);\n const [isDragging, setIsDragging] = useState(false);\n const [startX, setStartX] = useState(0);\n const [scrollLeft, setScrollLeft] = useState(0);\n const maxHeight = useMaxHeight();\n const displayMode = useDisplayMode();\n const theme = useTheme();\n\n // In fullscreen mode, ensure all cards have equal width\n const isFullscreen = displayMode === 'fullscreen';\n const cardWidth = isFullscreen ? 340 : undefined;\n\n const checkScroll = () => {\n const el = scrollRef.current;\n if (!el) return;\n\n setCanScrollLeft(el.scrollLeft > 0);\n setCanScrollRight(el.scrollLeft < el.scrollWidth - el.clientWidth - 1);\n };\n\n useEffect(() => {\n checkScroll();\n const el = scrollRef.current;\n if (!el) return;\n\n el.addEventListener('scroll', checkScroll);\n window.addEventListener('resize', checkScroll);\n\n return () => {\n el.removeEventListener('scroll', checkScroll);\n window.removeEventListener('resize', checkScroll);\n };\n }, []);\n\n const scroll = (direction: 'left' | 'right') => {\n const el = scrollRef.current;\n if (!el) return;\n\n // Get the first card element to calculate card width\n const firstCard = el.children[0] as HTMLElement;\n if (!firstCard) return;\n\n // Card width + gap = scroll amount for one complete card\n const cardWidth = firstCard.offsetWidth;\n const scrollAmount = cardWidth + gap;\n\n const targetScroll =\n direction === 'left' ? el.scrollLeft - scrollAmount : el.scrollLeft + scrollAmount;\n\n el.scrollTo({\n left: targetScroll,\n behavior: 'smooth',\n });\n };\n\n const handleMouseDown = (e: React.MouseEvent<HTMLDivElement>) => {\n const el = scrollRef.current;\n if (!el) return;\n\n setIsDragging(true);\n setStartX(e.pageX - el.offsetLeft);\n setScrollLeft(el.scrollLeft);\n };\n\n const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\n if (!isDragging) return;\n\n e.preventDefault();\n const el = scrollRef.current;\n if (!el) return;\n\n const x = e.pageX - el.offsetLeft;\n const walk = (x - startX) * 2; // Multiply for faster scrolling\n el.scrollLeft = scrollLeft - walk;\n };\n\n const handleMouseUpOrLeave = () => {\n setIsDragging(false);\n };\n\n const ChevronLeftIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M15 18L9 12L15 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n\n const ChevronRightIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M9 18L15 12L9 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n\n return (\n <Box\n className={className}\n sx={{\n position: 'relative',\n width: '100%',\n maxWidth: `${maxWidth}px`,\n maxHeight: maxHeight ? `${maxHeight}px` : undefined,\n }}\n {...props}\n >\n <Box sx={{ overflow: 'hidden' }}>\n <Box\n ref={scrollRef}\n onMouseDown={handleMouseDown}\n onMouseMove={handleMouseMove}\n onMouseUp={handleMouseUpOrLeave}\n onMouseLeave={handleMouseUpOrLeave}\n sx={{\n display: 'flex',\n gap: `${gap}px`,\n overflowX: 'auto',\n overflowY: 'hidden',\n scrollBehavior: isDragging ? 'auto' : 'smooth',\n scrollbarWidth: 'none',\n msOverflowStyle: 'none',\n userSelect: 'none',\n cursor: isDragging ? 'grabbing' : 'grab',\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n }}\n >\n {isFullscreen\n ? Children.map(children, (child) => (\n <Box\n sx={{\n flexShrink: 0,\n width: `${cardWidth}px`,\n '& > *': {\n width: '100%',\n maxWidth: '100%',\n },\n }}\n >\n {child}\n </Box>\n ))\n : children}\n </Box>\n </Box>\n\n {/* Edge gradients */}\n {showEdgeGradients && canScrollLeft && (\n <Box\n aria-hidden=\"true\"\n sx={{\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n width: '80px',\n pointerEvents: 'none',\n background: `linear-gradient(to right, ${theme.palette.background.default} 0%, transparent 100%)`,\n opacity: canScrollLeft ? 1 : 0,\n transition: 'opacity 0.2s ease',\n zIndex: 1,\n }}\n />\n )}\n\n {showEdgeGradients && canScrollRight && (\n <Box\n aria-hidden=\"true\"\n sx={{\n position: 'absolute',\n top: 0,\n bottom: 0,\n right: 0,\n width: '80px',\n pointerEvents: 'none',\n background: `linear-gradient(to left, ${theme.palette.background.default} 0%, transparent 100%)`,\n opacity: canScrollRight ? 1 : 0,\n transition: 'opacity 0.2s ease',\n zIndex: 1,\n }}\n />\n )}\n\n {/* Navigation buttons */}\n {showArrows && canScrollLeft && (\n <IconButton\n aria-label=\"Previous\"\n onClick={() => scroll('left')}\n sx={{\n position: 'absolute',\n top: '50%',\n left: theme.spacing(0.5),\n transform: 'translateY(-50%)',\n width: 32,\n height: 32,\n backgroundColor: theme.palette.background.default,\n boxShadow: theme.shadows[2],\n zIndex: 2,\n '&:hover': {\n boxShadow: theme.shadows[3],\n transform: 'translateY(-50%) scale(1.05)',\n },\n '&:active': {\n transform: 'translateY(-50%) scale(0.95)',\n },\n transition: 'all 0.2s ease',\n }}\n >\n <ChevronLeftIcon />\n </IconButton>\n )}\n\n {showArrows && canScrollRight && (\n <IconButton\n aria-label=\"Next\"\n onClick={() => scroll('right')}\n sx={{\n position: 'absolute',\n top: '50%',\n right: theme.spacing(0.5),\n transform: 'translateY(-50%)',\n width: 32,\n height: 32,\n backgroundColor: theme.palette.background.default,\n boxShadow: theme.shadows[2],\n zIndex: 2,\n '&:hover': {\n boxShadow: theme.shadows[3],\n transform: 'translateY(-50%) scale(1.05)',\n },\n '&:active': {\n transform: 'translateY(-50%) scale(0.95)',\n },\n transition: 'all 0.2s ease',\n }}\n >\n <ChevronRightIcon />\n </IconButton>\n )}\n </Box>\n );\n};\n","/**\n * Base Theme Configuration\n *\n * Common theme configuration shared across all platforms.\n * Platform-specific themes extend this base configuration.\n */\n\nimport { createTheme, type ThemeOptions } from '@mui/material/styles';\n\n/**\n * Base theme options that all platform themes extend\n */\nexport const baseThemeOptions: ThemeOptions = {\n spacing: 4, // 4px base unit\n\n shape: {\n borderRadius: 8, // Default border radius in pixels\n },\n\n typography: {\n fontFamily: [\n '-apple-system',\n 'BlinkMacSystemFont',\n '\"Segoe UI\"',\n 'Roboto',\n '\"Helvetica Neue\"',\n 'Arial',\n 'sans-serif',\n ].join(','),\n },\n\n // Common breakpoints for responsive design\n breakpoints: {\n values: {\n xs: 0,\n sm: 600,\n md: 900,\n lg: 1200,\n xl: 1536,\n },\n },\n};\n\n/**\n * Creates a base theme with common configuration\n */\nexport const createBaseTheme = () => createTheme(baseThemeOptions);\n","/**\n * ChatGPT Theme\n *\n * Material UI theme implementing OpenAI ChatGPT Apps SDK design guidelines.\n *\n * @see https://developers.openai.com/apps-sdk/concepts/design-guidelines\n */\n\nimport { createTheme } from '@mui/material/styles';\nimport { baseThemeOptions } from './base';\n\n/**\n * ChatGPT Light Mode Colors\n */\nconst lightPalette = {\n mode: 'light' as const,\n primary: {\n main: '#f46c21',\n dark: '#d45e1c',\n light: 'rgba(244, 108, 33, 0.9)',\n contrastText: '#ffffff',\n },\n secondary: {\n main: '#5d5d5d',\n contrastText: '#ffffff',\n },\n error: {\n main: '#e02e2a',\n contrastText: '#ffffff',\n },\n warning: {\n main: '#e25507',\n contrastText: '#ffffff',\n },\n info: {\n main: '#0285ff',\n contrastText: '#ffffff',\n },\n success: {\n main: '#008635',\n contrastText: '#ffffff',\n },\n background: {\n default: '#ffffff',\n paper: '#f3f3f3',\n },\n text: {\n primary: '#0d0d0d',\n secondary: '#5d5d5d',\n disabled: '#8f8f8f',\n },\n divider: 'rgba(0, 0, 0, 0.15)',\n action: {\n hover: 'rgba(0, 0, 0, 0.04)',\n selected: 'rgba(0, 0, 0, 0.08)',\n disabled: '#8f8f8f',\n disabledBackground: 'rgba(0, 0, 0, 0.12)',\n },\n grey: {\n 50: '#f3f3f3',\n 100: '#e8e8e8',\n 200: 'rgba(0, 0, 0, 0.05)',\n 300: 'rgba(0, 0, 0, 0.15)',\n 400: '#8f8f8f',\n 500: '#5d5d5d',\n 900: '#0d0d0d',\n },\n};\n\n/**\n * ChatGPT Dark Mode Colors\n */\nconst darkPalette = {\n mode: 'dark' as const,\n primary: {\n main: '#f46c21',\n dark: '#d45e1c',\n light: 'rgba(244, 108, 33, 0.9)',\n contrastText: '#ffffff',\n },\n secondary: {\n main: '#cdcdcd',\n contrastText: '#212121',\n },\n error: {\n main: '#ff8583',\n contrastText: '#212121',\n },\n warning: {\n main: '#ff9e6c',\n contrastText: '#212121',\n },\n info: {\n main: '#0285ff',\n contrastText: '#ffffff',\n },\n success: {\n main: '#40c977',\n contrastText: '#212121',\n },\n background: {\n default: '#212121',\n paper: '#414141',\n },\n text: {\n primary: '#ffffff',\n secondary: '#cdcdcd',\n disabled: '#afafaf',\n },\n divider: 'rgba(0, 0, 0, 0.15)',\n action: {\n hover: 'rgba(255, 255, 255, 0.08)',\n selected: 'rgba(255, 255, 255, 0.16)',\n disabled: '#afafaf',\n disabledBackground: 'rgba(255, 255, 255, 0.12)',\n },\n grey: {\n 50: '#414141',\n 100: '#303030',\n 200: 'rgba(0, 0, 0, 0.05)',\n 300: 'rgba(0, 0, 0, 0.15)',\n 400: '#afafaf',\n 500: '#cdcdcd',\n 900: '#ffffff',\n 800: '#212121',\n },\n};\n\n/**\n * ChatGPT Typography System\n * System font stack with platform-native fonts\n */\nconst typography = {\n fontFamily: [\n '-apple-system',\n 'BlinkMacSystemFont',\n '\"Segoe UI\"',\n 'Roboto',\n '\"Helvetica Neue\"',\n 'Arial',\n 'sans-serif',\n ].join(','),\n fontSize: 16,\n fontWeightLight: 300,\n fontWeightRegular: 400,\n fontWeightMedium: 500,\n fontWeightBold: 600,\n h1: {\n fontSize: '1.25rem',\n fontWeight: 600,\n lineHeight: 1.25,\n },\n h2: {\n fontSize: '1.125rem',\n fontWeight: 600,\n lineHeight: 1.25,\n },\n h3: {\n fontSize: '1rem',\n fontWeight: 600,\n lineHeight: 1.25,\n },\n h4: {\n fontSize: '1rem',\n fontWeight: 500,\n lineHeight: 1.25,\n },\n h5: {\n fontSize: '0.875rem',\n fontWeight: 600,\n lineHeight: 1.25,\n },\n h6: {\n fontSize: '0.75rem',\n fontWeight: 600,\n lineHeight: 1.25,\n },\n body1: {\n fontSize: '1rem',\n lineHeight: 1.5,\n },\n body2: {\n fontSize: '0.875rem',\n lineHeight: 1.5,\n },\n button: {\n fontSize: '0.875rem',\n fontWeight: 500,\n lineHeight: 1.25,\n textTransform: 'none' as const,\n },\n caption: {\n fontSize: '0.75rem',\n lineHeight: 1.5,\n },\n overline: {\n fontSize: '0.75rem',\n fontWeight: 500,\n lineHeight: 1.5,\n textTransform: 'uppercase' as const,\n },\n};\n\n/**\n * ChatGPT Spacing System\n * 4px base unit (1 unit = 4px)\n */\nconst spacing = 4;\n\n/**\n * ChatGPT Shape/Border Radius\n */\nconst shape = {\n borderRadius: 8,\n};\n\n/**\n * ChatGPT Shadows\n */\nconst shadows: [\n 'none',\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n] = [\n 'none',\n '0px 1px 2px rgba(0, 0, 0, 0.05)',\n '0px 2px 6px rgba(0, 0, 0, 0.06)',\n '0px 4px 12px rgba(0, 0, 0, 0.1)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n];\n\n/**\n * Component-specific overrides following ChatGPT design guidelines\n */\nconst components = {\n MuiButton: {\n styleOverrides: {\n root: {\n borderRadius: '0.5rem',\n padding: '0.375rem 1rem',\n fontSize: '0.875rem',\n fontWeight: 500,\n textTransform: 'none' as const,\n transition: 'all 0.2s ease',\n },\n contained: {\n boxShadow: 'none',\n '&:hover': {\n boxShadow: 'none',\n },\n },\n },\n },\n MuiCard: {\n styleOverrides: {\n root: {\n borderRadius: '0.75rem',\n overflow: 'hidden',\n },\n },\n },\n MuiPaper: {\n styleOverrides: {\n rounded: {\n borderRadius: '0.75rem',\n },\n },\n },\n};\n\n/**\n * Create ChatGPT Light Theme\n */\nexport const chatgptLightTheme = createTheme({\n ...baseThemeOptions,\n palette: lightPalette,\n typography,\n spacing,\n shape,\n shadows,\n components,\n});\n\n/**\n * Create ChatGPT Dark Theme\n */\nexport const chatgptDarkTheme = createTheme({\n ...baseThemeOptions,\n palette: darkPalette,\n typography,\n spacing,\n shape,\n shadows,\n components,\n});\n\n/**\n * Get ChatGPT theme based on mode\n */\nexport const getChatGPTTheme = (mode: 'light' | 'dark') => {\n return mode === 'dark' ? chatgptDarkTheme : chatgptLightTheme;\n};\n","/**\n * Theme System - Multi-Platform Support\n *\n * This module provides build-time theme substitution for multi-platform support.\n * The active theme is determined by the SUNPEAK_PLATFORM environment variable.\n *\n * Supported platforms:\n * - chatgpt (default): OpenAI ChatGPT Apps SDK\n * - Add more platforms as needed\n *\n * Usage:\n * ```bash\n * # Build for ChatGPT platform (default)\n * SUNPEAK_PLATFORM=chatgpt npm run build\n *\n * # Build for another platform (future)\n * SUNPEAK_PLATFORM=gemini npm run build\n * ```\n */\n\nimport type { Theme } from '@mui/material/styles';\n\n// Platform theme imports\nimport { getChatGPTTheme, chatgptLightTheme, chatgptDarkTheme } from './chatgpt';\n\n/**\n * Platform identifier type\n */\nexport type Platform = 'chatgpt';\n\n/**\n * Get the current platform\n * Currently only supports 'chatgpt'\n * Future: Can be extended to support multiple platforms via build-time configuration\n */\nexport const getCurrentPlatform = (): Platform => {\n return 'chatgpt';\n};\n\n/**\n * Theme getter function type\n */\nexport type ThemeGetter = (mode: 'light' | 'dark') => Theme;\n\n/**\n * Platform theme registry\n * Maps platform names to their theme getter functions\n */\nconst platformThemes: Record<Platform, ThemeGetter> = {\n chatgpt: getChatGPTTheme,\n // Add more platforms here:\n // gemini: getGeminiTheme,\n // claude: getClaudeTheme,\n};\n\n/**\n * Get theme for current platform\n * This is the main function used by components\n *\n * @param mode - Light or dark mode\n * @returns MUI Theme object for the current platform\n */\nexport const getTheme = (mode: 'light' | 'dark'): Theme => {\n const platform = getCurrentPlatform();\n const themeGetter = platformThemes[platform];\n\n if (!themeGetter) {\n console.warn(`Unknown platform \"${platform}\", falling back to chatgpt theme`);\n return getChatGPTTheme(mode);\n }\n\n return themeGetter(mode);\n};\n\n/**\n * Get light theme for current platform\n */\nexport const getLightTheme = (): Theme => getTheme('light');\n\n/**\n * Get dark theme for current platform\n */\nexport const getDarkTheme = (): Theme => getTheme('dark');\n\n// Export specific platform themes for direct access if needed\nexport { chatgptLightTheme, chatgptDarkTheme, getChatGPTTheme };\n\n// Export base theme utilities\nexport { baseThemeOptions, createBaseTheme } from './base';\n\n// Export types\nexport type { Theme } from '@mui/material/styles';\n","import { type ReactNode, type HTMLAttributes, useMemo } from 'react';\nimport { Box } from '@mui/material';\nimport { ThemeProvider } from '@mui/material/styles';\nimport CssBaseline from '@mui/material/CssBaseline';\nimport { useMaxHeight, useColorScheme } from '../../hooks';\nimport { getTheme } from '../../themes';\n\nexport interface GenAIProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Maximum width in pixels\n * @default 800\n */\n maxWidth?: number;\n\n /**\n * Override the color scheme detection\n * If not provided, uses window.openai.colorScheme\n */\n mode?: 'light' | 'dark';\n\n /**\n * Whether to inject MUI's CssBaseline component\n * @default true\n */\n enableCssBaseline?: boolean;\n}\n\nexport interface GenAIRenderProps {\n /**\n * Maximum height from platform (in pixels)\n */\n maxHeight: number | null;\n /**\n * Color scheme from platform\n */\n colorScheme: 'light' | 'dark' | null;\n}\n\n/**\n * GenAI - Create platform-aware genAI Apps with automatic theming and constraints.\n *\n * This is the single interface for building genAI Apps. It automatically provides:\n * - MUI theming (light/dark mode from platform)\n * - Platform constraints (maxHeight)\n * - Color scheme information\n *\n * @example\n * ```tsx\n * export const MyApp = GenAI(({ maxHeight, colorScheme }) => (\n * <div>\n * <h2>My App</h2>\n * <p>Theme: {colorScheme}</p>\n * <p>Max height: {maxHeight}px</p>\n * </div>\n * ));\n * ```\n */\nexport function GenAI(\n renderFn: (props: GenAIRenderProps) => ReactNode\n) {\n const GenAIComponent = (props: GenAIProps = {}) => {\n const maxHeight = useMaxHeight();\n const detectedColorScheme = useColorScheme();\n const {\n className,\n maxWidth = 800,\n mode: overrideMode,\n enableCssBaseline = true,\n ...rest\n } = props;\n\n // Determine effective color scheme\n const colorScheme = overrideMode || detectedColorScheme || 'light';\n\n // Create theme based on current mode\n const theme = useMemo(() => getTheme(colorScheme), [colorScheme]);\n\n return (\n <ThemeProvider theme={theme}>\n {enableCssBaseline && <CssBaseline />}\n <Box\n className={className}\n sx={{\n maxWidth: `${maxWidth}px`,\n maxHeight: maxHeight ? `${maxHeight}px` : undefined,\n }}\n {...rest}\n >\n {renderFn({ maxHeight, colorScheme })}\n </Box>\n </ThemeProvider>\n );\n };\n\n GenAIComponent.displayName = 'GenAI';\n return GenAIComponent;\n}\n","import { useEffect, useState, useMemo, type ReactNode } from 'react';\nimport {\n Box,\n Typography,\n Select,\n MenuItem,\n FormControl,\n InputLabel,\n TextField,\n IconButton,\n} from '@mui/material';\nimport { ThemeProvider } from '@mui/material/styles';\nimport CloseIcon from '@mui/icons-material/Close';\nimport type { DisplayMode, Theme, ChatGPTGlobals } from '../../types';\nimport { SET_GLOBALS_EVENT_TYPE, SetGlobalsEvent } from '../../types/chatgpt';\nimport { getTheme } from '../../themes';\n\nexport interface ChatGPTSimulatorProps {\n /**\n * The component to render in the ChatGPT message\n * Can be a function that receives the selected App UI\n */\n children: ReactNode | ((uiSimulation: string) => ReactNode);\n\n /**\n * Initial display mode\n */\n displayMode?: DisplayMode;\n\n /**\n * Initial color scheme\n */\n colorScheme?: Theme;\n\n /**\n * Initial tool input\n */\n toolInput?: Record<string, unknown>;\n\n /**\n * Initial tool output\n */\n toolOutput?: Record<string, unknown> | null;\n\n /**\n * Initial widget state\n */\n widgetState?: Record<string, unknown> | null;\n\n /**\n * User message to display above the component\n */\n userMessage?: string;\n\n /**\n * Show simulator controls\n */\n showControls?: boolean;\n\n /**\n * App UIs for the App UI selector\n */\n uiSimulations?: string[];\n\n /**\n * Initial App UI\n */\n initialUISimulation?: string;\n}\n\n/**\n * ChatGPT Simulator Component\n *\n * Emulates the ChatGPT environment for testing components locally.\n * Provides window.openai API and renders components in a ChatGPT-like UI.\n */\nexport function ChatGPTSimulator({\n children,\n displayMode: initialDisplayMode = 'inline',\n colorScheme: initialColorScheme = 'dark',\n toolInput = {},\n toolOutput = null,\n widgetState: initialWidgetState = null,\n userMessage = 'Show me some recommendations',\n showControls = true,\n uiSimulations,\n initialUISimulation,\n}: ChatGPTSimulatorProps) {\n const [displayMode, setDisplayMode] = useState<DisplayMode>(initialDisplayMode);\n const [widgetState, setWidgetStateInternal] = useState<Record<string, unknown> | null>(\n initialWidgetState\n );\n const [bodyWidth, setBodyWidth] = useState<string>('100%');\n const [selectedUISimulation, setSelectedUISimulation] = useState<string>(\n initialUISimulation || uiSimulations?.[0] || ''\n );\n const [viewportHeight, setViewportHeight] = useState<number>(window.innerHeight);\n\n // Sync colorScheme with window.openai.colorScheme as source of truth\n const [colorScheme, setColorScheme] = useState<Theme>(initialColorScheme);\n\n // Create theme based on color scheme\n const theme = useMemo(() => getTheme(colorScheme), [colorScheme]);\n\n // Listen to changes in window.openai.colorScheme\n useEffect(() => {\n const handleSetGlobals = (event: Event) => {\n const customEvent = event as SetGlobalsEvent;\n if (customEvent.detail?.globals?.colorScheme) {\n setColorScheme(customEvent.detail.globals.colorScheme);\n }\n };\n\n window.addEventListener(SET_GLOBALS_EVENT_TYPE, handleSetGlobals);\n return () => window.removeEventListener(SET_GLOBALS_EVENT_TYPE, handleSetGlobals);\n }, []);\n\n // Track viewport height for fullscreen mode\n useEffect(() => {\n const handleResize = () => {\n setViewportHeight(window.innerHeight);\n };\n\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n // Initialize window.openai\n useEffect(() => {\n // In fullscreen, subtract input bar height (~80px) from viewport\n const inputBarHeight = 80;\n const openaiGlobals: ChatGPTGlobals = {\n colorScheme,\n displayMode,\n locale: 'en-US',\n maxHeight: displayMode === 'fullscreen' ? viewportHeight - inputBarHeight : 600,\n userAgent: {\n device: { type: 'desktop' },\n capabilities: { hover: true, touch: false },\n },\n safeArea: {\n insets: { top: 0, bottom: 0, left: 0, right: 0 },\n },\n toolInput,\n toolOutput,\n toolResponseMetadata: null,\n widgetState,\n setWidgetState: async (state: Record<string, unknown>) => {\n console.log('[ChatGPT Simulator] setWidgetState called:', state);\n setWidgetStateInternal(state);\n },\n };\n\n const openaiAPI = {\n callTool: async (name: string, args: Record<string, unknown>) => {\n console.log('[ChatGPT Simulator] callTool called:', name, args);\n return { result: 'Mock tool result' };\n },\n sendFollowUpMessage: async (args: { prompt: string }) => {\n console.log('[ChatGPT Simulator] sendFollowUpMessage called:', args);\n },\n openExternal: (payload: { href: string }) => {\n console.log('[ChatGPT Simulator] openExternal called:', payload);\n window.open(payload.href, '_blank');\n },\n requestDisplayMode: async (args: { mode: DisplayMode }) => {\n console.log('[ChatGPT Simulator] requestDisplayMode called:', args);\n setDisplayMode(args.mode);\n return { mode: args.mode };\n },\n };\n\n window.openai = { ...openaiGlobals, ...openaiAPI };\n\n // Dispatch initial event\n window.dispatchEvent(\n new CustomEvent(SET_GLOBALS_EVENT_TYPE, {\n detail: { globals: openaiGlobals },\n }) as SetGlobalsEvent\n );\n\n return () => {\n delete window.openai;\n };\n }, [colorScheme, displayMode, toolInput, toolOutput, widgetState, viewportHeight]);\n\n // Update window.openai when state changes\n useEffect(() => {\n if (window.openai) {\n const inputBarHeight = 80;\n const calculatedMaxHeight = displayMode === 'fullscreen' ? viewportHeight - inputBarHeight : 600;\n\n window.openai.colorScheme = colorScheme;\n window.openai.displayMode = displayMode;\n window.openai.widgetState = widgetState;\n window.openai.maxHeight = calculatedMaxHeight;\n\n window.dispatchEvent(\n new CustomEvent(SET_GLOBALS_EVENT_TYPE, {\n detail: {\n globals: { colorScheme, displayMode, widgetState, maxHeight: calculatedMaxHeight },\n },\n }) as SetGlobalsEvent\n );\n }\n }, [colorScheme, displayMode, widgetState, viewportHeight]);\n\n const isFullscreen = displayMode === 'fullscreen';\n\n // Render children based on whether it's a function or ReactNode\n const renderChildren = () => {\n if (typeof children === 'function') {\n return children(selectedUISimulation);\n }\n return children;\n };\n\n return (\n <ThemeProvider theme={theme}>\n <Box\n sx={{\n minHeight: '100vh',\n display: 'flex',\n fontFamily: theme.typography.fontFamily,\n backgroundColor: theme.palette.background.default,\n color: theme.palette.text.primary,\n }}\n >\n {showControls && (\n <Box\n sx={{\n width: '250px',\n minWidth: '250px',\n padding: theme.spacing(5),\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(5),\n overflowY: 'auto',\n backgroundColor: theme.palette.mode === 'light'\n ? theme.palette.background.paper\n : theme.palette.background.default,\n borderRight: `1px solid ${theme.palette.divider}`,\n '@media (max-width: 768px)': {\n width: '100%',\n minWidth: 'unset',\n borderRight: 'none',\n borderBottom: `1px solid ${theme.palette.divider}`,\n padding: theme.spacing(4),\n },\n }}\n >\n <Box>\n <Typography variant=\"h6\" sx={{ fontWeight: 600 }}>\n Controls\n </Typography>\n </Box>\n\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: theme.spacing(3) }}>\n {uiSimulations && uiSimulations.length > 0 && (\n <FormControl fullWidth size=\"small\">\n <InputLabel>App UI</InputLabel>\n <Select\n value={selectedUISimulation}\n onChange={(e) => setSelectedUISimulation(e.target.value)}\n label=\"App UI\"\n >\n {uiSimulations.map((simulation) => (\n <MenuItem key={simulation} value={simulation}>\n {simulation}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n )}\n\n <FormControl fullWidth size=\"small\">\n <InputLabel>Color Scheme</InputLabel>\n <Select\n value={colorScheme}\n onChange={(e) => setColorScheme(e.target.value as Theme)}\n label=\"Color Scheme\"\n >\n <MenuItem value=\"light\">Light</MenuItem>\n <MenuItem value=\"dark\">Dark</MenuItem>\n </Select>\n </FormControl>\n\n <FormControl fullWidth size=\"small\">\n <InputLabel>Display Mode</InputLabel>\n <Select\n value={displayMode}\n onChange={(e) => setDisplayMode(e.target.value as DisplayMode)}\n label=\"Display Mode\"\n >\n <MenuItem value=\"inline\">Inline</MenuItem>\n <MenuItem value=\"fullscreen\">Fullscreen</MenuItem>\n <MenuItem value=\"pip\">Picture-in-Picture</MenuItem>\n </Select>\n </FormControl>\n\n <FormControl fullWidth size=\"small\">\n <InputLabel>Body Width</InputLabel>\n <Select\n value={bodyWidth}\n onChange={(e) => setBodyWidth(e.target.value)}\n label=\"Body Width\"\n >\n <MenuItem value=\"100%\">100% (Full)</MenuItem>\n <MenuItem value=\"1024px\">1024px (Laptop)</MenuItem>\n <MenuItem value=\"768px\">768px (Tablet)</MenuItem>\n <MenuItem value=\"425px\">425px (Mobile L)</MenuItem>\n <MenuItem value=\"320px\">320px (Mobile S)</MenuItem>\n </Select>\n </FormControl>\n </Box>\n </Box>\n )}\n\n <Box\n sx={{\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n margin: '0 auto',\n overflowY: 'auto',\n padding: isFullscreen ? 0 : `${theme.spacing(4)} 0 ${theme.spacing(4)} ${theme.spacing(6)}`,\n position: 'relative',\n width: bodyWidth,\n maxWidth: bodyWidth,\n height: isFullscreen ? '100vh' : 'auto',\n }}\n >\n {isFullscreen && (\n <IconButton\n onClick={() => setDisplayMode('inline')}\n aria-label=\"Exit fullscreen\"\n sx={{\n position: 'absolute',\n top: theme.spacing(4),\n left: theme.spacing(4),\n width: 40,\n height: 40,\n backgroundColor: theme.palette.background.paper,\n zIndex: 10,\n '&:hover': {\n backgroundColor: theme.palette.mode === 'light'\n ? theme.palette.grey[200]\n : theme.palette.grey[800],\n },\n }}\n >\n <CloseIcon />\n </IconButton>\n )}\n\n {!isFullscreen && (\n <Box sx={{ mb: theme.spacing(4) }}>\n <Typography variant=\"h4\" sx={{ fontWeight: 600, margin: 0 }}>\n ChatGPT\n </Typography>\n </Box>\n )}\n\n <Box\n sx={{\n maxWidth: '48rem',\n mx: 'auto',\n flex: 1,\n position: 'relative',\n display: 'flex',\n width: '100%',\n minWidth: 0,\n flexDirection: 'column',\n }}\n >\n <Box sx={{ display: 'flex', maxWidth: '100%', flexDirection: 'column', flexGrow: 1 }}>\n {!isFullscreen && (\n <>\n {/* User Message */}\n <Box\n sx={{\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'flex-end',\n marginLeft: 'auto',\n marginRight: theme.spacing(6),\n maxWidth: '70%',\n '@media (max-width: 768px)': {\n maxWidth: '85%',\n },\n }}\n >\n <Box\n sx={{\n flex: '0 1 auto',\n padding: `${theme.spacing(2)} ${theme.spacing(4)}`,\n borderRadius: theme.spacing(3),\n lineHeight: 1.5,\n fontSize: theme.typography.body1.fontSize,\n overflow: 'hidden',\n minWidth: '100px',\n backgroundColor: theme.palette.mode === 'light'\n ? theme.palette.grey[100]\n : theme.palette.grey[800],\n color: theme.palette.text.primary,\n }}\n >\n {userMessage}\n </Box>\n </Box>\n\n {/* Assistant Message with Component */}\n <Box\n sx={{\n minHeight: '32px',\n position: 'relative',\n display: 'flex',\n width: '100%',\n flexDirection: 'column',\n alignItems: 'flex-end',\n gap: theme.spacing(2),\n textAlign: 'start',\n wordBreak: 'break-word',\n whiteSpace: 'normal',\n }}\n >\n <Box\n sx={{\n display: 'flex',\n width: '100%',\n flexDirection: 'column',\n gap: theme.spacing(1),\n '&:empty': { display: 'none' },\n '&:first-of-type': { pt: '1px' },\n }}\n >\n <Box sx={{ width: '100%', wordBreak: 'break-word' }}>\n {/* App Title */}\n <Box\n sx={{\n color: theme.palette.text.secondary,\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(2),\n margin: `${theme.spacing(4)} 0`,\n fontSize: theme.typography.body2.fontSize,\n fontWeight: 500,\n opacity: 0.7,\n }}\n >\n <Box component=\"span\" sx={{ fontSize: theme.typography.body1.fontSize, lineHeight: 1 }}>\n ✈️\n </Box>\n <Box component=\"span\" sx={{ lineHeight: 1 }}>\n Splorin\n </Box>\n </Box>\n <Box\n sx={{\n overflow: 'hidden',\n minWidth: '300px',\n maxWidth: '100%',\n '@media (max-width: 768px)': {\n minWidth: '200px',\n },\n }}\n >\n {renderChildren()}\n </Box>\n </Box>\n </Box>\n </Box>\n </>\n )}\n {isFullscreen && (\n <Box\n sx={{\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n height: '100%',\n overflowY: 'auto',\n paddingBottom: '80px',\n }}\n >\n {renderChildren()}\n </Box>\n )}\n </Box>\n <Box\n sx={{\n position: 'absolute',\n bottom: 0,\n left: 0,\n right: 0,\n margin: `${theme.spacing(4)} 0`,\n display: 'flex',\n justifyContent: 'center',\n pointerEvents: 'none',\n }}\n >\n <TextField\n placeholder=\"Message ChatGPT\"\n disabled\n sx={{\n pointerEvents: 'auto',\n width: '100%',\n maxWidth: '800px',\n '& .MuiOutlinedInput-root': {\n borderRadius: theme.spacing(8),\n backgroundColor: theme.palette.mode === 'light'\n ? theme.palette.grey[100]\n : theme.palette.grey[800],\n '& fieldset': {\n borderColor: theme.palette.mode === 'light'\n ? theme.palette.grey[300]\n : theme.palette.grey[700],\n },\n '&.Mui-disabled': {\n cursor: 'not-allowed',\n opacity: 0.6,\n },\n },\n '& .MuiInputBase-input::placeholder': {\n color: theme.palette.text.secondary,\n opacity: 0.7,\n },\n }}\n />\n </Box>\n </Box>\n </Box>\n </Box>\n </ThemeProvider>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types/chatgpt.ts","../src/platforms/chatgpt.ts","../src/platforms/registry.ts","../src/context/PlatformContext.tsx","../src/hooks/usePlatformGlobal.ts","../src/hooks/useDisplayMode.ts","../src/hooks/useMaxHeight.ts","../src/hooks/useRequestDisplayMode.ts","../src/hooks/useColorScheme.ts","../src/hooks/useWidgetProps.ts","../src/hooks/useWidgetState.ts","../src/components/Card/Card.tsx","../src/components/Carousel/Carousel.tsx","../src/themes/base.ts","../src/themes/chatgpt.ts","../src/themes/index.ts","../src/components/GenAI/GenAI.tsx","../src/components/ChatGPTSimulator/ChatGPTSimulator.tsx"],"names":["createContext","jsx","useContext","useSyncExternalStore","useState","useEffect","useCallback","useTheme","children","Button","jsxs","Box","useRef","cardWidth","Children","IconButton","createTheme","ThemeProvider","CssBaseline","Typography","FormControl","InputLabel","Select","MenuItem","CloseIcon","Fragment","TextField"],"mappings":"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","file":"index.cjs","sourcesContent":["export type UnknownObject = Record<string, unknown>;\n\nexport type Theme = 'light' | 'dark';\n\nexport type SafeAreaInsets = {\n top: number;\n bottom: number;\n left: number;\n right: number;\n};\n\nexport type SafeArea = {\n insets: SafeAreaInsets;\n};\n\nexport type DeviceType = 'mobile' | 'tablet' | 'desktop' | 'unknown';\n\nexport type UserAgent = {\n device: { type: DeviceType };\n capabilities: {\n hover: boolean;\n touch: boolean;\n };\n};\n\n/** Display mode */\nexport type DisplayMode = 'pip' | 'inline' | 'fullscreen';\n\nexport type RequestDisplayMode = (args: { mode: DisplayMode }) => Promise<{\n /**\n * The granted display mode. The host may reject the request.\n * For mobile, PiP is always coerced to fullscreen.\n */\n mode: DisplayMode;\n}>;\n\nexport type CallToolResponse = {\n result: string;\n};\n\n/** Calling APIs */\nexport type CallTool = (\n name: string,\n args: Record<string, unknown>\n) => Promise<CallToolResponse>;\n\nexport type ChatGPTGlobals<\n ToolInput = UnknownObject,\n ToolOutput = UnknownObject,\n ToolResponseMetadata = UnknownObject,\n WidgetState = UnknownObject\n> = {\n // visuals\n colorScheme: Theme;\n userAgent: UserAgent;\n locale: string;\n\n // layout\n maxHeight: number;\n displayMode: DisplayMode;\n safeArea: SafeArea;\n\n // state\n toolInput: ToolInput;\n toolOutput: ToolOutput | null;\n toolResponseMetadata: ToolResponseMetadata | null;\n widgetState: WidgetState | null;\n setWidgetState: (state: WidgetState) => Promise<void>;\n};\n\ntype API = {\n callTool: CallTool;\n sendFollowUpMessage: (args: { prompt: string }) => Promise<void>;\n openExternal(payload: { href: string }): void;\n\n // Layout controls\n requestDisplayMode: RequestDisplayMode;\n};\n\n/** Extra events */\nexport const SET_GLOBALS_EVENT_TYPE = 'chatgpt:set_globals';\n\nexport class SetGlobalsEvent extends CustomEvent<{\n globals: Partial<ChatGPTGlobals>;\n}> {\n readonly type = SET_GLOBALS_EVENT_TYPE;\n}\n\n/**\n * Global openai object injected by the web sandbox for communicating with ChatGPT host page.\n */\ndeclare global {\n interface Window {\n openai?: API & ChatGPTGlobals;\n }\n\n interface WindowEventMap {\n [SET_GLOBALS_EVENT_TYPE]: SetGlobalsEvent;\n }\n}\n","/**\n * OpenAI ChatGPT Apps SDK Platform Adapter\n *\n * Implements the PlatformAdapter interface for OpenAI's ChatGPT Apps SDK.\n * https://developers.openai.com/apps-sdk\n */\n\nimport type { PlatformAdapter, PlatformGlobals } from '../types/platform';\nimport { SET_GLOBALS_EVENT_TYPE, type SetGlobalsEvent } from '../types/chatgpt';\n\nexport class ChatGPTPlatformAdapter implements PlatformAdapter {\n readonly name = 'chatgpt';\n\n isAvailable(): boolean {\n return typeof window !== 'undefined' && 'openai' in window;\n }\n\n getGlobal<K extends keyof PlatformGlobals>(key: K): PlatformGlobals[K] | null {\n if (!this.isAvailable()) {\n return null;\n }\n return (window.openai?.[key] as PlatformGlobals[K]) ?? null;\n }\n\n getGlobals() {\n if (!this.isAvailable()) {\n return null;\n }\n return window.openai ?? null;\n }\n\n subscribe(callback: () => void): () => void {\n if (typeof window === 'undefined') {\n return () => {};\n }\n\n const handleSetGlobal = (_event: SetGlobalsEvent) => {\n callback();\n };\n\n window.addEventListener(SET_GLOBALS_EVENT_TYPE, handleSetGlobal, {\n passive: true,\n });\n\n return () => {\n window.removeEventListener(SET_GLOBALS_EVENT_TYPE, handleSetGlobal);\n };\n }\n}\n\n/**\n * Singleton instance of the ChatGPT platform adapter\n */\nexport const chatgptPlatform = new ChatGPTPlatformAdapter();\n","/**\n * Platform Registry\n *\n * Manages multiple platform adapters and auto-detects the active platform.\n */\n\nimport type { PlatformAdapter } from '../types/platform';\nimport { chatgptPlatform } from './chatgpt';\n\nexport interface PlatformRegistry {\n /**\n * Register a platform adapter\n */\n register(adapter: PlatformAdapter): void;\n\n /**\n * Get a specific platform adapter by name\n */\n get(name: string): PlatformAdapter | null;\n\n /**\n * Auto-detect and return the active platform\n * Returns the first available platform in the registry\n */\n detect(): PlatformAdapter | null;\n\n /**\n * Get all registered platforms\n */\n getAll(): PlatformAdapter[];\n}\n\nclass DefaultPlatformRegistry implements PlatformRegistry {\n private adapters = new Map<string, PlatformAdapter>();\n\n constructor() {\n // Register default platforms\n this.register(chatgptPlatform);\n }\n\n register(adapter: PlatformAdapter): void {\n this.adapters.set(adapter.name, adapter);\n }\n\n get(name: string): PlatformAdapter | null {\n return this.adapters.get(name) ?? null;\n }\n\n detect(): PlatformAdapter | null {\n // Return the first available platform\n for (const adapter of this.adapters.values()) {\n if (adapter.isAvailable()) {\n return adapter;\n }\n }\n return null;\n }\n\n getAll(): PlatformAdapter[] {\n return Array.from(this.adapters.values());\n }\n}\n\n/**\n * Create a new platform registry\n */\nexport function createPlatformRegistry(): PlatformRegistry {\n return new DefaultPlatformRegistry();\n}\n\n/**\n * Default platform registry instance\n */\nexport const defaultPlatformRegistry = createPlatformRegistry();\n","/**\n * Platform Context\n *\n * Provides the active platform adapter to all Sunpeak components and hooks.\n */\n\nimport { createContext, useContext, type ReactNode } from 'react';\nimport type { PlatformAdapter } from '../types/platform';\nimport { defaultPlatformRegistry } from '../platforms/registry';\n\nexport interface PlatformContextValue {\n adapter: PlatformAdapter | null;\n}\n\nconst PlatformContext = createContext<PlatformContextValue | null>(null);\n\nexport interface PlatformProviderProps {\n /**\n * The platform adapter to use. If not provided, will auto-detect.\n */\n adapter?: PlatformAdapter;\n\n /**\n * Platform name to use (e.g., 'chatgpt', 'gemini'). If not provided, will auto-detect.\n */\n platform?: string;\n\n children: ReactNode;\n}\n\n/**\n * Platform Provider\n *\n * Wrap your app with this provider to specify which genAI platform to use.\n * If no platform is specified, it will auto-detect the available platform.\n *\n * @example\n * ```tsx\n * import { PlatformProvider } from 'sunpeak';\n *\n * // Auto-detect platform\n * <PlatformProvider>\n * <App />\n * </PlatformProvider>\n *\n * // Explicitly use ChatGPT\n * <PlatformProvider platform=\"chatgpt\">\n * <App />\n * </PlatformProvider>\n * ```\n */\nexport function PlatformProvider({ adapter, platform, children }: PlatformProviderProps) {\n const resolvedAdapter =\n adapter ?? (platform ? defaultPlatformRegistry.get(platform) : null) ?? defaultPlatformRegistry.detect();\n\n return <PlatformContext.Provider value={{ adapter: resolvedAdapter }}>{children}</PlatformContext.Provider>;\n}\n\n/**\n * Hook to access the current platform adapter\n *\n * @internal\n */\nexport function usePlatformContext(): PlatformContextValue {\n const context = useContext(PlatformContext);\n\n // If no provider is found, auto-detect the platform\n if (!context) {\n return {\n adapter: defaultPlatformRegistry.detect(),\n };\n }\n\n return context;\n}\n\n/**\n * Hook to access the current platform adapter\n *\n * Returns null if no platform is available or detected.\n */\nexport function usePlatform(): PlatformAdapter | null {\n const { adapter } = usePlatformContext();\n return adapter;\n}\n","import { useSyncExternalStore } from 'react';\nimport type { PlatformGlobals } from '../types/platform';\nimport { usePlatform } from '../context/PlatformContext';\n\n/**\n * Hook to access platform global state in a platform-agnostic way.\n * Works with any genAI platform (ChatGPT, Gemini, Claude, etc.)\n *\n * Uses React's useSyncExternalStore to efficiently subscribe to changes.\n *\n * @param key - The key of the global state to access\n * @returns The value of the global state, or null if not available\n *\n * @example\n * ```tsx\n * function MyWidget() {\n * const colorScheme = usePlatformGlobal('colorScheme');\n * const displayMode = usePlatformGlobal('displayMode');\n *\n * return <div className={colorScheme === 'dark' ? 'dark' : 'light'}>...</div>;\n * }\n * ```\n */\nexport function usePlatformGlobal<K extends keyof PlatformGlobals>(\n key: K\n): PlatformGlobals[K] | null {\n const platform = usePlatform();\n\n return useSyncExternalStore(\n (onChange) => {\n if (!platform) {\n return () => {};\n }\n\n return platform.subscribe(onChange);\n },\n () => platform?.getGlobal(key) ?? null,\n () => platform?.getGlobal(key) ?? null\n );\n}\n","import { usePlatformGlobal } from './usePlatformGlobal';\nimport { type DisplayMode } from '../types';\n\n/**\n * Hook to get the current display mode from the active genAI platform.\n * Display modes include: 'inline', 'fullscreen', and 'pip' (picture-in-picture).\n *\n * Works with any supported genAI platform (ChatGPT, Gemini, Claude, etc.)\n *\n * @returns The current display mode, or null if not in a supported environment\n */\nexport const useDisplayMode = (): DisplayMode | null => {\n return usePlatformGlobal('displayMode');\n};\n","import { usePlatformGlobal } from './usePlatformGlobal';\n\n/**\n * Hook to get the maximum height constraint from the active genAI platform.\n * Useful for ensuring your widget doesn't exceed the available space.\n *\n * Works with any supported genAI platform (ChatGPT, Gemini, Claude, etc.)\n *\n * @returns The maximum height in pixels, or null if not available\n */\nexport const useMaxHeight = (): number | null => {\n return usePlatformGlobal('maxHeight');\n};\n","import { usePlatform } from '../context/PlatformContext';\nimport type { DisplayMode, RequestDisplayMode } from '../types';\n\n/**\n * Hook to request a specific display mode from the platform\n *\n * @example\n * ```tsx\n * const requestDisplayMode = useRequestDisplayMode();\n *\n * const handleClick = async () => {\n * await requestDisplayMode({ mode: 'fullscreen' });\n * };\n * ```\n */\nexport function useRequestDisplayMode(): RequestDisplayMode {\n const platform = usePlatform();\n\n return async (args: { mode: DisplayMode }) => {\n const globals = platform?.getGlobals();\n\n if (globals?.requestDisplayMode) {\n return await globals.requestDisplayMode(args);\n }\n\n // Fallback if platform doesn't support requestDisplayMode\n console.warn('requestDisplayMode is not available on this platform');\n return { mode: args.mode };\n };\n}\n","import { usePlatformGlobal } from './usePlatformGlobal';\nimport { type Theme } from '../types';\n\n/**\n * Hook to get the current color scheme from the active genAI platform.\n * Color scheme can be 'light' or 'dark'.\n *\n * Works with any supported genAI platform (ChatGPT, Gemini, Claude, etc.)\n *\n * @returns The current color scheme, or null if not in a supported environment\n */\nexport const useColorScheme = (): Theme | null => {\n return usePlatformGlobal('colorScheme');\n};\n","import { usePlatformGlobal } from './usePlatformGlobal';\n\n/**\n * Hook to get widget props (tool output) from the active genAI platform.\n * This contains the data returned by your server's tool.\n *\n * Works with any supported genAI platform (ChatGPT, Gemini, Claude, etc.)\n *\n * @param defaultState - Default state to use if no props are available\n * @returns The widget props from the tool output\n */\nexport function useWidgetProps<T extends Record<string, unknown>>(\n defaultState?: T | (() => T)\n): T {\n const props = usePlatformGlobal('toolOutput') as T;\n\n const fallback =\n typeof defaultState === 'function'\n ? (defaultState as () => T | null)()\n : defaultState ?? null;\n\n return props ?? fallback;\n}\n","import { useCallback, useEffect, useState, type SetStateAction } from 'react';\nimport { usePlatformGlobal } from './usePlatformGlobal';\nimport { usePlatform } from '../context/PlatformContext';\nimport type { UnknownObject } from '../types';\n\n/**\n * Hook to manage widget state that persists in the active genAI platform.\n * Similar to useState, but syncs with the platform host page.\n *\n * Works with any supported genAI platform (ChatGPT, Gemini, Claude, etc.)\n *\n * @param defaultState - Default state value or function to generate it\n * @returns A tuple of [state, setState] similar to useState\n */\nexport function useWidgetState<T extends UnknownObject>(\n defaultState: T | (() => T)\n): readonly [T, (state: SetStateAction<T>) => void];\nexport function useWidgetState<T extends UnknownObject>(\n defaultState?: T | (() => T | null) | null\n): readonly [T | null, (state: SetStateAction<T | null>) => void];\nexport function useWidgetState<T extends UnknownObject>(\n defaultState?: T | (() => T | null) | null\n): readonly [T | null, (state: SetStateAction<T | null>) => void] {\n const widgetStateFromWindow = usePlatformGlobal('widgetState') as T;\n const platform = usePlatform();\n\n const [widgetState, _setWidgetState] = useState<T | null>(() => {\n if (widgetStateFromWindow != null) {\n return widgetStateFromWindow;\n }\n\n return typeof defaultState === 'function' ? defaultState() : defaultState ?? null;\n });\n\n useEffect(() => {\n _setWidgetState(widgetStateFromWindow);\n }, [widgetStateFromWindow]);\n\n const setWidgetState = useCallback(\n (state: SetStateAction<T | null>) => {\n _setWidgetState((prevState) => {\n const newState = typeof state === 'function' ? state(prevState) : state;\n\n if (newState != null && platform) {\n const globals = platform.getGlobals();\n if (globals?.setWidgetState) {\n globals.setWidgetState(newState);\n }\n }\n\n return newState;\n });\n },\n [platform]\n );\n\n return [widgetState, setWidgetState] as const;\n}\n","import { type ReactNode, type HTMLAttributes } from 'react';\nimport { Button, type ButtonProps as MuiButtonProps, Box, useTheme } from '@mui/material';\nimport { useRequestDisplayMode, useDisplayMode, useMaxHeight, useWidgetState } from '../../hooks';\nimport type { GenAIProps } from '../GenAI';\n\nexport interface ButtonProps extends Omit<MuiButtonProps, 'onClick'> {\n /**\n * Whether to use primary styling (accent color) or secondary (outlined)\n */\n isPrimary?: boolean;\n /**\n * Click handler (required)\n */\n onClick: () => void;\n}\n\nexport interface CardProps extends Omit<GenAIProps, 'children'>, HTMLAttributes<HTMLDivElement> {\n /**\n * Card content\n */\n children?: ReactNode;\n /**\n * Image to display at the top of the card\n */\n image: string;\n /**\n * Alt text for the image\n */\n imageAlt: string;\n /**\n * Maximum width for the image in pixels\n */\n imageMaxWidth: number;\n /**\n * Maximum height for the image in pixels\n */\n imageMaxHeight: number;\n /**\n * Optional header text (title)\n */\n header?: ReactNode;\n /**\n * Optional metadata text (e.g., rating, category)\n */\n metadata?: ReactNode;\n /**\n * First action button (0-1)\n */\n button1?: ButtonProps;\n /**\n * Second action button (0-1)\n */\n button2?: ButtonProps;\n /**\n * Card variant\n */\n variant?: 'default' | 'bordered' | 'elevated';\n}\n\n/**\n * Card - A responsive card component that adapts to display mode.\n *\n * In inline mode:\n * - Fixed width for carousel consistency\n * - Compact layout optimized for horizontal scrolling\n * - Clickable to request fullscreen mode\n *\n * In fullscreen mode:\n * - Full width layout\n * - Expanded content display\n * - More breathing room for content\n *\n * Design specs:\n * - Image: aspect-square with 24px border radius\n * - Typography: 16px medium for header, 12px for metadata, 14px for description\n * - Spacing: 12px between sections\n * - Max 2 actions in footer (design guideline)\n */\nexport const Card = ({\n children,\n image,\n imageAlt,\n imageMaxWidth,\n imageMaxHeight,\n header,\n metadata,\n button1,\n button2,\n variant = 'default',\n className,\n onClick,\n id,\n ...props\n}: CardProps) => {\n const requestDisplayMode = useRequestDisplayMode();\n const displayMode = useDisplayMode();\n const maxHeight = useMaxHeight();\n const theme = useTheme();\n const [widgetState, setWidgetState] = useWidgetState<{ selectedCardId?: string }>({});\n\n // Default to inline mode if display mode is not detected\n const isInline = displayMode !== 'fullscreen' && displayMode !== 'pip';\n\n const hasButtons = button1 || button2;\n\n const handleCardClick = async (e: React.MouseEvent<HTMLDivElement>) => {\n // Call custom onClick if provided\n onClick?.(e);\n\n // Only request fullscreen if we're in inline mode\n if (isInline && !e.defaultPrevented) {\n try {\n // Store the selected card ID in widget state\n if (id) {\n setWidgetState({ ...widgetState, selectedCardId: id });\n }\n await requestDisplayMode({ mode: 'fullscreen' });\n } catch (error) {\n console.error('Failed to request fullscreen mode:', error);\n }\n }\n };\n\n const renderButton = (buttonProps: ButtonProps) => {\n const { isPrimary = false, onClick: buttonOnClick, children, ...muiProps } = buttonProps;\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n buttonOnClick();\n };\n\n return (\n <Button\n {...muiProps}\n variant={isPrimary ? 'contained' : 'outlined'}\n onClick={handleClick}\n >\n {children}\n </Button>\n );\n };\n\n return (\n <Box\n id={id}\n className={className}\n onClick={handleCardClick}\n sx={{\n backgroundColor: theme.palette.background.default,\n borderRadius: theme.spacing(3),\n overflow: 'auto',\n display: 'flex',\n flexDirection: 'column',\n fontFamily: theme.typography.fontFamily,\n width: isInline ? '220px' : '100%',\n maxWidth: isInline ? '220px' : `${imageMaxWidth}px`,\n maxHeight: maxHeight ? `${maxHeight}px` : undefined,\n cursor: isInline ? 'pointer' : 'default',\n userSelect: 'none',\n marginLeft: isInline ? undefined : 'auto',\n marginRight: isInline ? undefined : 'auto',\n ...(variant === 'bordered' && {\n border: `1px solid ${theme.palette.divider}`,\n }),\n ...(variant === 'elevated' && {\n boxShadow: theme.shadows[2],\n border: `1px solid ${theme.palette.divider}`,\n }),\n }}\n {...props}\n >\n {image && (\n <Box>\n <Box\n component=\"img\"\n src={image}\n alt={imageAlt}\n loading=\"lazy\"\n sx={{\n width: '100%',\n height: 'auto',\n aspectRatio: '1',\n objectFit: 'cover',\n borderRadius: theme.spacing(3),\n display: 'block',\n maxWidth: `${imageMaxWidth}px`,\n maxHeight: `${imageMaxHeight}px`,\n }}\n />\n </Box>\n )}\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n gap: isInline ? theme.spacing(3) : theme.spacing(4),\n padding: isInline ? theme.spacing(4) : theme.spacing(6),\n ...(image && {\n paddingTop: isInline ? theme.spacing(3) : theme.spacing(4),\n }),\n }}\n >\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n gap: isInline ? theme.spacing(1) : theme.spacing(2),\n }}\n >\n {header && (\n <Box\n sx={{\n fontSize: theme.typography.body1.fontSize,\n fontWeight: theme.typography.fontWeightMedium,\n color: theme.palette.text.primary,\n lineHeight: 1.25,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {header}\n </Box>\n )}\n {metadata && (\n <Box\n sx={{\n fontSize: theme.typography.caption.fontSize,\n color: theme.palette.text.secondary,\n lineHeight: 1.5,\n }}\n >\n {metadata}\n </Box>\n )}\n {children && (\n <Box\n sx={{\n fontSize: theme.typography.body2.fontSize,\n color: theme.palette.text.primary,\n lineHeight: 1.5,\n display: '-webkit-box',\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n ...(isInline && (metadata || header) && {\n marginTop: theme.spacing(1),\n WebkitLineClamp: 2,\n }),\n ...(!isInline && (metadata || header) && {\n marginTop: theme.spacing(2),\n WebkitLineClamp: 'unset',\n }),\n }}\n >\n {children}\n </Box>\n )}\n </Box>\n {hasButtons && (\n <Box\n sx={{\n display: 'flex',\n gap: theme.spacing(2),\n flexWrap: 'wrap',\n }}\n >\n {button1 && renderButton(button1)}\n {button2 && renderButton(button2)}\n </Box>\n )}\n </Box>\n </Box>\n );\n};\n","import { type ReactNode, type HTMLAttributes, useRef, useState, useEffect, Children } from 'react';\nimport { Box, IconButton, useTheme } from '@mui/material';\nimport { useMaxHeight, useDisplayMode } from '../../hooks';\nimport type { GenAIProps } from '../GenAI';\n\nconst ChevronLeftIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M15 18L9 12L15 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nconst ChevronRightIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M9 18L15 12L9 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nexport interface CarouselProps extends Omit<GenAIProps, 'children'>, HTMLAttributes<HTMLDivElement> {\n /**\n * Carousel items (typically Card components)\n */\n children: ReactNode;\n /**\n * Gap between items in pixels\n * @default 16\n */\n gap?: number;\n /**\n * Show navigation arrows\n * @default true\n */\n showArrows?: boolean;\n /**\n * Show edge gradients to indicate more content\n * @default true\n */\n showEdgeGradients?: boolean;\n}\n\n/**\n * Carousel - MUI-based carousel for displaying cards side-by-side.\n * Follows OpenAI ChatGPT Apps SDK design guidelines.\n */\nexport const Carousel = ({\n children,\n gap = 16,\n maxWidth = 800,\n showArrows = true,\n showEdgeGradients = true,\n className,\n ...props\n}: CarouselProps) => {\n const scrollRef = useRef<HTMLDivElement>(null);\n const [canScrollLeft, setCanScrollLeft] = useState(false);\n const [canScrollRight, setCanScrollRight] = useState(false);\n const [isDragging, setIsDragging] = useState(false);\n const [startX, setStartX] = useState(0);\n const [scrollLeft, setScrollLeft] = useState(0);\n const maxHeight = useMaxHeight();\n const displayMode = useDisplayMode();\n const theme = useTheme();\n\n // In fullscreen mode, ensure all cards have equal width\n const isFullscreen = displayMode === 'fullscreen';\n const cardWidth = isFullscreen ? 340 : undefined;\n\n const checkScroll = () => {\n const el = scrollRef.current;\n if (!el) return;\n\n setCanScrollLeft(el.scrollLeft > 0);\n setCanScrollRight(el.scrollLeft < el.scrollWidth - el.clientWidth - 1);\n };\n\n useEffect(() => {\n checkScroll();\n const el = scrollRef.current;\n if (!el) return;\n\n el.addEventListener('scroll', checkScroll);\n window.addEventListener('resize', checkScroll);\n\n return () => {\n el.removeEventListener('scroll', checkScroll);\n window.removeEventListener('resize', checkScroll);\n };\n }, []);\n\n const scroll = (direction: 'left' | 'right') => {\n const el = scrollRef.current;\n if (!el) return;\n\n // Get the first card element to calculate card width\n const firstCard = el.children[0] as HTMLElement;\n if (!firstCard) return;\n\n // Card width + gap = scroll amount for one complete card\n const cardWidth = firstCard.offsetWidth;\n const scrollAmount = cardWidth + gap;\n\n const targetScroll =\n direction === 'left' ? el.scrollLeft - scrollAmount : el.scrollLeft + scrollAmount;\n\n el.scrollTo({\n left: targetScroll,\n behavior: 'smooth',\n });\n };\n\n const handleMouseDown = (e: React.MouseEvent<HTMLDivElement>) => {\n const el = scrollRef.current;\n if (!el) return;\n\n setIsDragging(true);\n setStartX(e.pageX - el.offsetLeft);\n setScrollLeft(el.scrollLeft);\n };\n\n const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\n if (!isDragging) return;\n\n e.preventDefault();\n const el = scrollRef.current;\n if (!el) return;\n\n const x = e.pageX - el.offsetLeft;\n const walk = (x - startX) * 2; // Multiply for faster scrolling\n el.scrollLeft = scrollLeft - walk;\n };\n\n const handleMouseUpOrLeave = () => {\n setIsDragging(false);\n };\n\n return (\n <Box\n className={className}\n sx={{\n position: 'relative',\n width: '100%',\n maxWidth: `${maxWidth}px`,\n maxHeight: maxHeight ? `${maxHeight}px` : undefined,\n }}\n {...props}\n >\n <Box sx={{ overflow: 'hidden' }}>\n <Box\n ref={scrollRef}\n onMouseDown={handleMouseDown}\n onMouseMove={handleMouseMove}\n onMouseUp={handleMouseUpOrLeave}\n onMouseLeave={handleMouseUpOrLeave}\n sx={{\n display: 'flex',\n gap: `${gap}px`,\n overflowX: 'auto',\n overflowY: 'hidden',\n scrollBehavior: isDragging ? 'auto' : 'smooth',\n scrollbarWidth: 'none',\n msOverflowStyle: 'none',\n userSelect: 'none',\n cursor: isDragging ? 'grabbing' : 'grab',\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n }}\n >\n {isFullscreen\n ? Children.map(children, (child) => (\n <Box\n sx={{\n flexShrink: 0,\n width: `${cardWidth}px`,\n '& > *': {\n width: '100%',\n maxWidth: '100%',\n },\n }}\n >\n {child}\n </Box>\n ))\n : children}\n </Box>\n </Box>\n\n {/* Edge gradients */}\n {showEdgeGradients && canScrollLeft && (\n <Box\n aria-hidden=\"true\"\n sx={{\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n width: '80px',\n pointerEvents: 'none',\n background: `linear-gradient(to right, ${theme.palette.background.default} 0%, transparent 100%)`,\n opacity: canScrollLeft ? 1 : 0,\n transition: 'opacity 0.2s ease',\n zIndex: 1,\n }}\n />\n )}\n\n {showEdgeGradients && canScrollRight && (\n <Box\n aria-hidden=\"true\"\n sx={{\n position: 'absolute',\n top: 0,\n bottom: 0,\n right: 0,\n width: '80px',\n pointerEvents: 'none',\n background: `linear-gradient(to left, ${theme.palette.background.default} 0%, transparent 100%)`,\n opacity: canScrollRight ? 1 : 0,\n transition: 'opacity 0.2s ease',\n zIndex: 1,\n }}\n />\n )}\n\n {/* Navigation buttons */}\n {showArrows && canScrollLeft && (\n <IconButton\n aria-label=\"Previous\"\n onClick={() => scroll('left')}\n sx={{\n position: 'absolute',\n top: '50%',\n left: theme.spacing(0.5),\n transform: 'translateY(-50%)',\n width: 32,\n height: 32,\n backgroundColor: theme.palette.background.default,\n boxShadow: theme.shadows[2],\n zIndex: 2,\n '&:hover': {\n boxShadow: theme.shadows[3],\n transform: 'translateY(-50%) scale(1.05)',\n },\n '&:active': {\n transform: 'translateY(-50%) scale(0.95)',\n },\n transition: 'all 0.2s ease',\n }}\n >\n <ChevronLeftIcon />\n </IconButton>\n )}\n\n {showArrows && canScrollRight && (\n <IconButton\n aria-label=\"Next\"\n onClick={() => scroll('right')}\n sx={{\n position: 'absolute',\n top: '50%',\n right: theme.spacing(0.5),\n transform: 'translateY(-50%)',\n width: 32,\n height: 32,\n backgroundColor: theme.palette.background.default,\n boxShadow: theme.shadows[2],\n zIndex: 2,\n '&:hover': {\n boxShadow: theme.shadows[3],\n transform: 'translateY(-50%) scale(1.05)',\n },\n '&:active': {\n transform: 'translateY(-50%) scale(0.95)',\n },\n transition: 'all 0.2s ease',\n }}\n >\n <ChevronRightIcon />\n </IconButton>\n )}\n </Box>\n );\n};\n","/**\n * Base Theme Configuration\n *\n * Common theme configuration shared across all platforms.\n * Platform-specific themes extend this base configuration.\n */\n\nimport { createTheme, type ThemeOptions } from '@mui/material/styles';\n\n/**\n * Base theme options that all platform themes extend\n */\nexport const baseThemeOptions: ThemeOptions = {\n spacing: 4, // 4px base unit\n\n shape: {\n borderRadius: 8, // Default border radius in pixels\n },\n\n typography: {\n fontFamily: [\n '-apple-system',\n 'BlinkMacSystemFont',\n '\"Segoe UI\"',\n 'Roboto',\n '\"Helvetica Neue\"',\n 'Arial',\n 'sans-serif',\n ].join(','),\n },\n\n // Common breakpoints for responsive design\n breakpoints: {\n values: {\n xs: 0,\n sm: 600,\n md: 900,\n lg: 1200,\n xl: 1536,\n },\n },\n};\n\n/**\n * Creates a base theme with common configuration\n */\nexport const createBaseTheme = () => createTheme(baseThemeOptions);\n","/**\n * ChatGPT Theme\n *\n * Material UI theme implementing OpenAI ChatGPT Apps SDK design guidelines.\n *\n * @see https://developers.openai.com/apps-sdk/concepts/design-guidelines\n */\n\nimport { createTheme } from '@mui/material/styles';\nimport { baseThemeOptions } from './base';\n\n/**\n * ChatGPT Light Mode Colors\n */\nconst lightPalette = {\n mode: 'light' as const,\n primary: {\n main: '#f46c21',\n dark: '#d45e1c',\n light: 'rgba(244, 108, 33, 0.9)',\n contrastText: '#ffffff',\n },\n secondary: {\n main: '#5d5d5d',\n contrastText: '#ffffff',\n },\n error: {\n main: '#e02e2a',\n contrastText: '#ffffff',\n },\n warning: {\n main: '#e25507',\n contrastText: '#ffffff',\n },\n info: {\n main: '#0285ff',\n contrastText: '#ffffff',\n },\n success: {\n main: '#008635',\n contrastText: '#ffffff',\n },\n background: {\n default: '#ffffff',\n paper: '#f3f3f3',\n },\n text: {\n primary: '#0d0d0d',\n secondary: '#5d5d5d',\n disabled: '#8f8f8f',\n },\n divider: 'rgba(0, 0, 0, 0.15)',\n action: {\n hover: 'rgba(0, 0, 0, 0.04)',\n selected: 'rgba(0, 0, 0, 0.08)',\n disabled: '#8f8f8f',\n disabledBackground: 'rgba(0, 0, 0, 0.12)',\n },\n grey: {\n 50: '#f3f3f3',\n 100: '#e8e8e8',\n 200: 'rgba(0, 0, 0, 0.05)',\n 300: 'rgba(0, 0, 0, 0.15)',\n 400: '#8f8f8f',\n 500: '#5d5d5d',\n 900: '#0d0d0d',\n },\n};\n\n/**\n * ChatGPT Dark Mode Colors\n */\nconst darkPalette = {\n mode: 'dark' as const,\n primary: {\n main: '#f46c21',\n dark: '#d45e1c',\n light: 'rgba(244, 108, 33, 0.9)',\n contrastText: '#ffffff',\n },\n secondary: {\n main: '#cdcdcd',\n contrastText: '#212121',\n },\n error: {\n main: '#ff8583',\n contrastText: '#212121',\n },\n warning: {\n main: '#ff9e6c',\n contrastText: '#212121',\n },\n info: {\n main: '#0285ff',\n contrastText: '#ffffff',\n },\n success: {\n main: '#40c977',\n contrastText: '#212121',\n },\n background: {\n default: '#212121',\n paper: '#414141',\n },\n text: {\n primary: '#ffffff',\n secondary: '#cdcdcd',\n disabled: '#afafaf',\n },\n divider: 'rgba(0, 0, 0, 0.15)',\n action: {\n hover: 'rgba(255, 255, 255, 0.08)',\n selected: 'rgba(255, 255, 255, 0.16)',\n disabled: '#afafaf',\n disabledBackground: 'rgba(255, 255, 255, 0.12)',\n },\n grey: {\n 50: '#414141',\n 100: '#303030',\n 200: 'rgba(0, 0, 0, 0.05)',\n 300: 'rgba(0, 0, 0, 0.15)',\n 400: '#afafaf',\n 500: '#cdcdcd',\n 900: '#ffffff',\n 800: '#212121',\n },\n};\n\n/**\n * ChatGPT Typography System\n * System font stack with platform-native fonts\n */\nconst typography = {\n fontFamily: [\n '-apple-system',\n 'BlinkMacSystemFont',\n '\"Segoe UI\"',\n 'Roboto',\n '\"Helvetica Neue\"',\n 'Arial',\n 'sans-serif',\n ].join(','),\n fontSize: 16,\n fontWeightLight: 300,\n fontWeightRegular: 400,\n fontWeightMedium: 500,\n fontWeightBold: 600,\n h1: {\n fontSize: '1.25rem',\n fontWeight: 600,\n lineHeight: 1.25,\n },\n h2: {\n fontSize: '1.125rem',\n fontWeight: 600,\n lineHeight: 1.25,\n },\n h3: {\n fontSize: '1rem',\n fontWeight: 600,\n lineHeight: 1.25,\n },\n h4: {\n fontSize: '1rem',\n fontWeight: 500,\n lineHeight: 1.25,\n },\n h5: {\n fontSize: '0.875rem',\n fontWeight: 600,\n lineHeight: 1.25,\n },\n h6: {\n fontSize: '0.75rem',\n fontWeight: 600,\n lineHeight: 1.25,\n },\n body1: {\n fontSize: '1rem',\n lineHeight: 1.5,\n },\n body2: {\n fontSize: '0.875rem',\n lineHeight: 1.5,\n },\n button: {\n fontSize: '0.875rem',\n fontWeight: 500,\n lineHeight: 1.25,\n textTransform: 'none' as const,\n },\n caption: {\n fontSize: '0.75rem',\n lineHeight: 1.5,\n },\n overline: {\n fontSize: '0.75rem',\n fontWeight: 500,\n lineHeight: 1.5,\n textTransform: 'uppercase' as const,\n },\n};\n\n/**\n * ChatGPT Spacing System\n * 4px base unit (1 unit = 4px)\n */\nconst spacing = 4;\n\n/**\n * ChatGPT Shape/Border Radius\n */\nconst shape = {\n borderRadius: 8,\n};\n\n/**\n * ChatGPT Shadows\n */\nconst shadows: [\n 'none',\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n] = [\n 'none',\n '0px 1px 2px rgba(0, 0, 0, 0.05)',\n '0px 2px 6px rgba(0, 0, 0, 0.06)',\n '0px 4px 12px rgba(0, 0, 0, 0.1)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n '0px 8px 24px rgba(0, 0, 0, 0.12)',\n];\n\n/**\n * Component-specific overrides following ChatGPT design guidelines\n */\nconst components = {\n MuiButton: {\n styleOverrides: {\n root: {\n borderRadius: '0.5rem',\n padding: '0.375rem 1rem',\n fontSize: '0.875rem',\n fontWeight: 500,\n textTransform: 'none' as const,\n transition: 'all 0.2s ease',\n },\n contained: {\n boxShadow: 'none',\n '&:hover': {\n boxShadow: 'none',\n },\n },\n },\n },\n MuiCard: {\n styleOverrides: {\n root: {\n borderRadius: '0.75rem',\n overflow: 'hidden',\n },\n },\n },\n MuiPaper: {\n styleOverrides: {\n rounded: {\n borderRadius: '0.75rem',\n },\n },\n },\n};\n\n/**\n * Create ChatGPT Light Theme\n */\nexport const chatgptLightTheme = createTheme({\n ...baseThemeOptions,\n palette: lightPalette,\n typography,\n spacing,\n shape,\n shadows,\n components,\n});\n\n/**\n * Create ChatGPT Dark Theme\n */\nexport const chatgptDarkTheme = createTheme({\n ...baseThemeOptions,\n palette: darkPalette,\n typography,\n spacing,\n shape,\n shadows,\n components,\n});\n\n/**\n * Get ChatGPT theme based on mode\n */\nexport const getChatGPTTheme = (mode: 'light' | 'dark') => {\n return mode === 'dark' ? chatgptDarkTheme : chatgptLightTheme;\n};\n","/**\n * Theme System - Multi-Platform Support\n *\n * This module provides build-time theme substitution for multi-platform support.\n * The active theme is determined by the SUNPEAK_PLATFORM environment variable.\n *\n * Supported platforms:\n * - chatgpt (default): OpenAI ChatGPT Apps SDK\n * - Add more platforms as needed\n *\n * Usage:\n * ```bash\n * # Build for ChatGPT platform (default)\n * SUNPEAK_PLATFORM=chatgpt npm run build\n *\n * # Build for another platform (future)\n * SUNPEAK_PLATFORM=gemini npm run build\n * ```\n */\n\nimport type { Theme } from '@mui/material/styles';\n\n// Platform theme imports\nimport { getChatGPTTheme, chatgptLightTheme, chatgptDarkTheme } from './chatgpt';\n\n/**\n * Platform identifier type\n */\nexport type Platform = 'chatgpt';\n\n/**\n * Get the current platform\n * Currently only supports 'chatgpt'\n * Future: Can be extended to support multiple platforms via build-time configuration\n */\nexport const getCurrentPlatform = (): Platform => {\n return 'chatgpt';\n};\n\n/**\n * Theme getter function type\n */\nexport type ThemeGetter = (mode: 'light' | 'dark') => Theme;\n\n/**\n * Platform theme registry\n * Maps platform names to their theme getter functions\n */\nconst platformThemes: Record<Platform, ThemeGetter> = {\n chatgpt: getChatGPTTheme,\n // Add more platforms here:\n // gemini: getGeminiTheme,\n // claude: getClaudeTheme,\n};\n\n/**\n * Get theme for current platform\n * This is the main function used by components\n *\n * @param mode - Light or dark mode\n * @returns MUI Theme object for the current platform\n */\nexport const getTheme = (mode: 'light' | 'dark'): Theme => {\n const platform = getCurrentPlatform();\n const themeGetter = platformThemes[platform];\n\n if (!themeGetter) {\n console.warn(`Unknown platform \"${platform}\", falling back to chatgpt theme`);\n return getChatGPTTheme(mode);\n }\n\n return themeGetter(mode);\n};\n\n/**\n * Get light theme for current platform\n */\nexport const getLightTheme = (): Theme => getTheme('light');\n\n/**\n * Get dark theme for current platform\n */\nexport const getDarkTheme = (): Theme => getTheme('dark');\n\n// Export specific platform themes for direct access if needed\nexport { chatgptLightTheme, chatgptDarkTheme, getChatGPTTheme };\n\n// Export base theme utilities\nexport { baseThemeOptions, createBaseTheme } from './base';\n\n// Export types\nexport type { Theme } from '@mui/material/styles';\n","import { type ReactNode, type HTMLAttributes } from 'react';\nimport { Box } from '@mui/material';\nimport { ThemeProvider } from '@mui/material/styles';\nimport CssBaseline from '@mui/material/CssBaseline';\nimport { useMaxHeight, useColorScheme } from '../../hooks';\nimport { getTheme } from '../../themes';\n\nexport interface GenAIProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Maximum width in pixels\n * @default 800\n */\n maxWidth?: number;\n\n /**\n * Override the color scheme detection\n * If not provided, uses window.openai.colorScheme\n */\n mode?: 'light' | 'dark';\n\n /**\n * Whether to inject MUI's CssBaseline component\n * @default true\n */\n enableCssBaseline?: boolean;\n}\n\nexport interface GenAIRenderProps {\n /**\n * Maximum height from platform (in pixels)\n */\n maxHeight: number | null;\n /**\n * Color scheme from platform\n */\n colorScheme: 'light' | 'dark' | null;\n}\n\n/**\n * GenAI - Create platform-aware genAI Apps with automatic theming and constraints.\n *\n * This is the single interface for building genAI Apps. It automatically provides:\n * - MUI theming (light/dark mode from platform)\n * - Platform constraints (maxHeight)\n * - Color scheme information\n *\n * @example\n * ```tsx\n * export const MyApp = GenAI(({ maxHeight, colorScheme }) => (\n * <div>\n * <h2>My App</h2>\n * <p>Theme: {colorScheme}</p>\n * <p>Max height: {maxHeight}px</p>\n * </div>\n * ));\n * ```\n */\nexport function GenAI(\n renderFn: (props: GenAIRenderProps) => ReactNode\n) {\n const GenAIComponent = (props: GenAIProps = {}) => {\n const maxHeight = useMaxHeight();\n const detectedColorScheme = useColorScheme();\n const {\n className,\n maxWidth = 800,\n mode: overrideMode,\n enableCssBaseline = true,\n ...rest\n } = props;\n\n // Determine effective color scheme\n const colorScheme = overrideMode || detectedColorScheme || 'light';\n\n const theme = getTheme(colorScheme);\n\n return (\n <ThemeProvider theme={theme}>\n {enableCssBaseline && <CssBaseline />}\n <Box\n className={className}\n sx={{\n maxWidth: `${maxWidth}px`,\n maxHeight: maxHeight ? `${maxHeight}px` : undefined,\n }}\n {...rest}\n >\n {renderFn({ maxHeight, colorScheme })}\n </Box>\n </ThemeProvider>\n );\n };\n\n GenAIComponent.displayName = 'GenAI';\n return GenAIComponent;\n}\n","import { useEffect, useState, type ReactNode } from 'react';\nimport {\n Box,\n Typography,\n Select,\n MenuItem,\n FormControl,\n InputLabel,\n TextField,\n IconButton,\n} from '@mui/material';\nimport { ThemeProvider } from '@mui/material/styles';\nimport CloseIcon from '@mui/icons-material/Close';\nimport type { DisplayMode, Theme, ChatGPTGlobals } from '../../types';\nimport { SET_GLOBALS_EVENT_TYPE, SetGlobalsEvent } from '../../types/chatgpt';\nimport { getTheme } from '../../themes';\n\nexport interface ChatGPTSimulatorProps {\n /**\n * The component to render in the ChatGPT message\n * Can be a function that receives the selected App UI\n */\n children: ReactNode | ((uiSimulation: string) => ReactNode);\n\n /**\n * Initial display mode\n */\n displayMode?: DisplayMode;\n\n /**\n * Initial color scheme\n */\n colorScheme?: Theme;\n\n /**\n * Initial tool input\n */\n toolInput?: Record<string, unknown>;\n\n /**\n * Initial tool output\n */\n toolOutput?: Record<string, unknown> | null;\n\n /**\n * Initial widget state\n */\n widgetState?: Record<string, unknown> | null;\n\n /**\n * User message to display above the component\n */\n userMessage?: string;\n\n /**\n * Show simulator controls\n */\n showControls?: boolean;\n\n /**\n * App UIs for the App UI selector\n */\n uiSimulations?: string[];\n\n /**\n * Initial App UI\n */\n initialUISimulation?: string;\n}\n\n/**\n * ChatGPT Simulator Component\n *\n * Emulates the ChatGPT environment for testing components locally.\n * Provides window.openai API and renders components in a ChatGPT-like UI.\n */\nexport function ChatGPTSimulator({\n children,\n displayMode: initialDisplayMode = 'inline',\n colorScheme: initialColorScheme = 'dark',\n toolInput = {},\n toolOutput = null,\n widgetState: initialWidgetState = null,\n userMessage = 'Show me some recommendations',\n showControls = true,\n uiSimulations,\n initialUISimulation,\n}: ChatGPTSimulatorProps) {\n const [displayMode, setDisplayMode] = useState<DisplayMode>(initialDisplayMode);\n const [widgetState, setWidgetStateInternal] = useState<Record<string, unknown> | null>(\n initialWidgetState\n );\n const [bodyWidth, setBodyWidth] = useState<string>('100%');\n const [selectedUISimulation, setSelectedUISimulation] = useState<string>(\n initialUISimulation || uiSimulations?.[0] || ''\n );\n const [viewportHeight, setViewportHeight] = useState<number>(window.innerHeight);\n\n // Sync colorScheme with window.openai.colorScheme as source of truth\n const [colorScheme, setColorScheme] = useState<Theme>(initialColorScheme);\n\n const theme = getTheme(colorScheme);\n\n // Listen to changes in window.openai.colorScheme\n useEffect(() => {\n const handleSetGlobals = (event: Event) => {\n const customEvent = event as SetGlobalsEvent;\n if (customEvent.detail?.globals?.colorScheme) {\n setColorScheme(customEvent.detail.globals.colorScheme);\n }\n };\n\n window.addEventListener(SET_GLOBALS_EVENT_TYPE, handleSetGlobals);\n return () => window.removeEventListener(SET_GLOBALS_EVENT_TYPE, handleSetGlobals);\n }, []);\n\n // Track viewport height for fullscreen mode\n useEffect(() => {\n const handleResize = () => {\n setViewportHeight(window.innerHeight);\n };\n\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n // Initialize window.openai\n useEffect(() => {\n // In fullscreen, subtract input bar height (~80px) from viewport\n const inputBarHeight = 80;\n const openaiGlobals: ChatGPTGlobals = {\n colorScheme,\n displayMode,\n locale: 'en-US',\n maxHeight: displayMode === 'fullscreen' ? viewportHeight - inputBarHeight : 600,\n userAgent: {\n device: { type: 'desktop' },\n capabilities: { hover: true, touch: false },\n },\n safeArea: {\n insets: { top: 0, bottom: 0, left: 0, right: 0 },\n },\n toolInput,\n toolOutput,\n toolResponseMetadata: null,\n widgetState,\n setWidgetState: async (state: Record<string, unknown>) => {\n console.log('[ChatGPT Simulator] setWidgetState called:', state);\n setWidgetStateInternal(state);\n },\n };\n\n const openaiAPI = {\n callTool: async (name: string, args: Record<string, unknown>) => {\n console.log('[ChatGPT Simulator] callTool called:', name, args);\n return { result: 'Mock tool result' };\n },\n sendFollowUpMessage: async (args: { prompt: string }) => {\n console.log('[ChatGPT Simulator] sendFollowUpMessage called:', args);\n },\n openExternal: (payload: { href: string }) => {\n console.log('[ChatGPT Simulator] openExternal called:', payload);\n window.open(payload.href, '_blank');\n },\n requestDisplayMode: async (args: { mode: DisplayMode }) => {\n console.log('[ChatGPT Simulator] requestDisplayMode called:', args);\n setDisplayMode(args.mode);\n return { mode: args.mode };\n },\n };\n\n window.openai = { ...openaiGlobals, ...openaiAPI };\n\n // Dispatch initial event\n window.dispatchEvent(\n new CustomEvent(SET_GLOBALS_EVENT_TYPE, {\n detail: { globals: openaiGlobals },\n }) as SetGlobalsEvent\n );\n\n return () => {\n delete window.openai;\n };\n }, [colorScheme, displayMode, toolInput, toolOutput, widgetState, viewportHeight]);\n\n // Update window.openai when state changes\n useEffect(() => {\n if (window.openai) {\n const inputBarHeight = 80;\n const calculatedMaxHeight = displayMode === 'fullscreen' ? viewportHeight - inputBarHeight : 600;\n\n window.openai.colorScheme = colorScheme;\n window.openai.displayMode = displayMode;\n window.openai.widgetState = widgetState;\n window.openai.maxHeight = calculatedMaxHeight;\n\n window.dispatchEvent(\n new CustomEvent(SET_GLOBALS_EVENT_TYPE, {\n detail: {\n globals: { colorScheme, displayMode, widgetState, maxHeight: calculatedMaxHeight },\n },\n }) as SetGlobalsEvent\n );\n }\n }, [colorScheme, displayMode, widgetState, viewportHeight]);\n\n const isFullscreen = displayMode === 'fullscreen';\n\n // Render children based on whether it's a function or ReactNode\n const renderChildren = () => {\n if (typeof children === 'function') {\n return children(selectedUISimulation);\n }\n return children;\n };\n\n return (\n <ThemeProvider theme={theme}>\n <Box\n sx={{\n minHeight: '100vh',\n display: 'flex',\n fontFamily: theme.typography.fontFamily,\n backgroundColor: theme.palette.background.default,\n color: theme.palette.text.primary,\n }}\n >\n {showControls && (\n <Box\n sx={{\n width: '250px',\n minWidth: '250px',\n padding: theme.spacing(5),\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(5),\n overflowY: 'auto',\n backgroundColor: theme.palette.mode === 'light'\n ? theme.palette.background.paper\n : theme.palette.background.default,\n borderRight: `1px solid ${theme.palette.divider}`,\n '@media (max-width: 768px)': {\n width: '100%',\n minWidth: 'unset',\n borderRight: 'none',\n borderBottom: `1px solid ${theme.palette.divider}`,\n padding: theme.spacing(4),\n },\n }}\n >\n <Box>\n <Typography variant=\"h6\" sx={{ fontWeight: 600 }}>\n Controls\n </Typography>\n </Box>\n\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: theme.spacing(3) }}>\n {uiSimulations && uiSimulations.length > 0 && (\n <FormControl fullWidth size=\"small\">\n <InputLabel>App UI</InputLabel>\n <Select\n value={selectedUISimulation}\n onChange={(e) => setSelectedUISimulation(e.target.value)}\n label=\"App UI\"\n >\n {uiSimulations.map((simulation) => (\n <MenuItem key={simulation} value={simulation}>\n {simulation}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n )}\n\n <FormControl fullWidth size=\"small\">\n <InputLabel>Color Scheme</InputLabel>\n <Select\n value={colorScheme}\n onChange={(e) => setColorScheme(e.target.value as Theme)}\n label=\"Color Scheme\"\n >\n <MenuItem value=\"light\">Light</MenuItem>\n <MenuItem value=\"dark\">Dark</MenuItem>\n </Select>\n </FormControl>\n\n <FormControl fullWidth size=\"small\">\n <InputLabel>Display Mode</InputLabel>\n <Select\n value={displayMode}\n onChange={(e) => setDisplayMode(e.target.value as DisplayMode)}\n label=\"Display Mode\"\n >\n <MenuItem value=\"inline\">Inline</MenuItem>\n <MenuItem value=\"fullscreen\">Fullscreen</MenuItem>\n <MenuItem value=\"pip\">Picture-in-Picture</MenuItem>\n </Select>\n </FormControl>\n\n <FormControl fullWidth size=\"small\">\n <InputLabel>Body Width</InputLabel>\n <Select\n value={bodyWidth}\n onChange={(e) => setBodyWidth(e.target.value)}\n label=\"Body Width\"\n >\n <MenuItem value=\"100%\">100% (Full)</MenuItem>\n <MenuItem value=\"1024px\">1024px (Laptop)</MenuItem>\n <MenuItem value=\"768px\">768px (Tablet)</MenuItem>\n <MenuItem value=\"425px\">425px (Mobile L)</MenuItem>\n <MenuItem value=\"320px\">320px (Mobile S)</MenuItem>\n </Select>\n </FormControl>\n </Box>\n </Box>\n )}\n\n <Box\n sx={{\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n margin: '0 auto',\n overflowY: 'auto',\n padding: isFullscreen ? 0 : `${theme.spacing(4)} 0 ${theme.spacing(4)} ${theme.spacing(6)}`,\n position: 'relative',\n width: bodyWidth,\n maxWidth: bodyWidth,\n height: isFullscreen ? '100vh' : 'auto',\n }}\n >\n {isFullscreen && (\n <IconButton\n onClick={() => setDisplayMode('inline')}\n aria-label=\"Exit fullscreen\"\n sx={{\n position: 'absolute',\n top: theme.spacing(4),\n left: theme.spacing(4),\n width: 40,\n height: 40,\n backgroundColor: theme.palette.background.paper,\n zIndex: 10,\n '&:hover': {\n backgroundColor: theme.palette.mode === 'light'\n ? theme.palette.grey[200]\n : theme.palette.grey[800],\n },\n }}\n >\n <CloseIcon />\n </IconButton>\n )}\n\n {!isFullscreen && (\n <Box sx={{ mb: theme.spacing(4) }}>\n <Typography variant=\"h4\" sx={{ fontWeight: 600, margin: 0 }}>\n ChatGPT\n </Typography>\n </Box>\n )}\n\n <Box\n sx={{\n maxWidth: '48rem',\n mx: 'auto',\n flex: 1,\n position: 'relative',\n display: 'flex',\n width: '100%',\n minWidth: 0,\n flexDirection: 'column',\n }}\n >\n <Box sx={{ display: 'flex', maxWidth: '100%', flexDirection: 'column', flexGrow: 1 }}>\n {!isFullscreen && (\n <>\n {/* User Message */}\n <Box\n sx={{\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'flex-end',\n marginLeft: 'auto',\n marginRight: theme.spacing(6),\n maxWidth: '70%',\n '@media (max-width: 768px)': {\n maxWidth: '85%',\n },\n }}\n >\n <Box\n sx={{\n flex: '0 1 auto',\n padding: `${theme.spacing(2)} ${theme.spacing(4)}`,\n borderRadius: theme.spacing(3),\n lineHeight: 1.5,\n fontSize: theme.typography.body1.fontSize,\n overflow: 'hidden',\n minWidth: '100px',\n backgroundColor: theme.palette.mode === 'light'\n ? theme.palette.grey[100]\n : theme.palette.grey[800],\n color: theme.palette.text.primary,\n }}\n >\n {userMessage}\n </Box>\n </Box>\n\n {/* Assistant Message with Component */}\n <Box\n sx={{\n minHeight: '32px',\n position: 'relative',\n display: 'flex',\n width: '100%',\n flexDirection: 'column',\n alignItems: 'flex-end',\n gap: theme.spacing(2),\n textAlign: 'start',\n wordBreak: 'break-word',\n whiteSpace: 'normal',\n }}\n >\n <Box\n sx={{\n display: 'flex',\n width: '100%',\n flexDirection: 'column',\n gap: theme.spacing(1),\n '&:empty': { display: 'none' },\n '&:first-of-type': { pt: '1px' },\n }}\n >\n <Box sx={{ width: '100%', wordBreak: 'break-word' }}>\n {/* App Title */}\n <Box\n sx={{\n color: theme.palette.text.secondary,\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(2),\n margin: `${theme.spacing(4)} 0`,\n fontSize: theme.typography.body2.fontSize,\n fontWeight: 500,\n opacity: 0.7,\n }}\n >\n <Box component=\"span\" sx={{ fontSize: theme.typography.body1.fontSize, lineHeight: 1 }}>\n ✈️\n </Box>\n <Box component=\"span\" sx={{ lineHeight: 1 }}>\n Splorin\n </Box>\n </Box>\n <Box\n sx={{\n overflow: 'hidden',\n minWidth: '300px',\n maxWidth: '100%',\n '@media (max-width: 768px)': {\n minWidth: '200px',\n },\n }}\n >\n {renderChildren()}\n </Box>\n </Box>\n </Box>\n </Box>\n </>\n )}\n {isFullscreen && (\n <Box\n sx={{\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n height: '100%',\n overflowY: 'auto',\n paddingBottom: '80px',\n }}\n >\n {renderChildren()}\n </Box>\n )}\n </Box>\n <Box\n sx={{\n position: 'absolute',\n bottom: 0,\n left: 0,\n right: 0,\n margin: `${theme.spacing(4)} 0`,\n display: 'flex',\n justifyContent: 'center',\n pointerEvents: 'none',\n }}\n >\n <TextField\n placeholder=\"Message ChatGPT\"\n disabled\n sx={{\n pointerEvents: 'auto',\n width: '100%',\n maxWidth: '800px',\n '& .MuiOutlinedInput-root': {\n borderRadius: theme.spacing(8),\n backgroundColor: theme.palette.mode === 'light'\n ? theme.palette.grey[100]\n : theme.palette.grey[800],\n '& fieldset': {\n borderColor: theme.palette.mode === 'light'\n ? theme.palette.grey[300]\n : theme.palette.grey[700],\n },\n '&.Mui-disabled': {\n cursor: 'not-allowed',\n opacity: 0.6,\n },\n },\n '& .MuiInputBase-input::placeholder': {\n color: theme.palette.text.secondary,\n opacity: 0.7,\n },\n }}\n />\n </Box>\n </Box>\n </Box>\n </Box>\n </ThemeProvider>\n );\n}\n"]}
|