@molecule/app-ide-react 1.0.0

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.
Files changed (250) hide show
  1. package/LICENSE +115 -0
  2. package/dist/chatTimelineOrdering.d.ts +50 -0
  3. package/dist/chatTimelineOrdering.d.ts.map +1 -0
  4. package/dist/chatTimelineOrdering.js +46 -0
  5. package/dist/chatTimelineOrdering.js.map +1 -0
  6. package/dist/command-metadata.d.ts +78 -0
  7. package/dist/command-metadata.d.ts.map +1 -0
  8. package/dist/command-metadata.js +214 -0
  9. package/dist/command-metadata.js.map +1 -0
  10. package/dist/components/ActivityCard.d.ts +28 -0
  11. package/dist/components/ActivityCard.d.ts.map +1 -0
  12. package/dist/components/ActivityCard.js +62 -0
  13. package/dist/components/ActivityCard.js.map +1 -0
  14. package/dist/components/AutoCommitBadge.d.ts +58 -0
  15. package/dist/components/AutoCommitBadge.d.ts.map +1 -0
  16. package/dist/components/AutoCommitBadge.js +78 -0
  17. package/dist/components/AutoCommitBadge.js.map +1 -0
  18. package/dist/components/ChatPanel.d.ts +184 -0
  19. package/dist/components/ChatPanel.d.ts.map +1 -0
  20. package/dist/components/ChatPanel.js +6691 -0
  21. package/dist/components/ChatPanel.js.map +1 -0
  22. package/dist/components/CommandPalette.d.ts +18 -0
  23. package/dist/components/CommandPalette.d.ts.map +1 -0
  24. package/dist/components/CommandPalette.js +33 -0
  25. package/dist/components/CommandPalette.js.map +1 -0
  26. package/dist/components/DeviceFrameSelector.d.ts +60 -0
  27. package/dist/components/DeviceFrameSelector.d.ts.map +1 -0
  28. package/dist/components/DeviceFrameSelector.js +230 -0
  29. package/dist/components/DeviceFrameSelector.js.map +1 -0
  30. package/dist/components/EditorPanel.d.ts +17 -0
  31. package/dist/components/EditorPanel.d.ts.map +1 -0
  32. package/dist/components/EditorPanel.js +241 -0
  33. package/dist/components/EditorPanel.js.map +1 -0
  34. package/dist/components/FileExplorer.d.ts +64 -0
  35. package/dist/components/FileExplorer.d.ts.map +1 -0
  36. package/dist/components/FileExplorer.js +1111 -0
  37. package/dist/components/FileExplorer.js.map +1 -0
  38. package/dist/components/FileExplorerContextMenu.d.ts +37 -0
  39. package/dist/components/FileExplorerContextMenu.d.ts.map +1 -0
  40. package/dist/components/FileExplorerContextMenu.js +241 -0
  41. package/dist/components/FileExplorerContextMenu.js.map +1 -0
  42. package/dist/components/HelpCard.d.ts +34 -0
  43. package/dist/components/HelpCard.d.ts.map +1 -0
  44. package/dist/components/HelpCard.js +28 -0
  45. package/dist/components/HelpCard.js.map +1 -0
  46. package/dist/components/Icon.d.ts +50 -0
  47. package/dist/components/Icon.d.ts.map +1 -0
  48. package/dist/components/Icon.js +25 -0
  49. package/dist/components/Icon.js.map +1 -0
  50. package/dist/components/KeyboardShortcutsPanel.d.ts +19 -0
  51. package/dist/components/KeyboardShortcutsPanel.d.ts.map +1 -0
  52. package/dist/components/KeyboardShortcutsPanel.js +187 -0
  53. package/dist/components/KeyboardShortcutsPanel.js.map +1 -0
  54. package/dist/components/MarkdownContent.d.ts +52 -0
  55. package/dist/components/MarkdownContent.d.ts.map +1 -0
  56. package/dist/components/MarkdownContent.js +303 -0
  57. package/dist/components/MarkdownContent.js.map +1 -0
  58. package/dist/components/ModelsTable.d.ts +38 -0
  59. package/dist/components/ModelsTable.d.ts.map +1 -0
  60. package/dist/components/ModelsTable.js +96 -0
  61. package/dist/components/ModelsTable.js.map +1 -0
  62. package/dist/components/PreviewPanel.d.ts +66 -0
  63. package/dist/components/PreviewPanel.d.ts.map +1 -0
  64. package/dist/components/PreviewPanel.js +1752 -0
  65. package/dist/components/PreviewPanel.js.map +1 -0
  66. package/dist/components/QuickOpen.d.ts +20 -0
  67. package/dist/components/QuickOpen.d.ts.map +1 -0
  68. package/dist/components/QuickOpen.js +72 -0
  69. package/dist/components/QuickOpen.js.map +1 -0
  70. package/dist/components/QuickPicker.d.ts +21 -0
  71. package/dist/components/QuickPicker.d.ts.map +1 -0
  72. package/dist/components/QuickPicker.js +174 -0
  73. package/dist/components/QuickPicker.js.map +1 -0
  74. package/dist/components/RelevantSkillSuggestion.d.ts +41 -0
  75. package/dist/components/RelevantSkillSuggestion.d.ts.map +1 -0
  76. package/dist/components/RelevantSkillSuggestion.js +85 -0
  77. package/dist/components/RelevantSkillSuggestion.js.map +1 -0
  78. package/dist/components/ReportModal.d.ts +35 -0
  79. package/dist/components/ReportModal.d.ts.map +1 -0
  80. package/dist/components/ReportModal.js +112 -0
  81. package/dist/components/ReportModal.js.map +1 -0
  82. package/dist/components/ResizeHandle.d.ts +21 -0
  83. package/dist/components/ResizeHandle.d.ts.map +1 -0
  84. package/dist/components/ResizeHandle.js +109 -0
  85. package/dist/components/ResizeHandle.js.map +1 -0
  86. package/dist/components/ScriptsCard.d.ts +37 -0
  87. package/dist/components/ScriptsCard.d.ts.map +1 -0
  88. package/dist/components/ScriptsCard.js +177 -0
  89. package/dist/components/ScriptsCard.js.map +1 -0
  90. package/dist/components/SearchPanel.d.ts +18 -0
  91. package/dist/components/SearchPanel.d.ts.map +1 -0
  92. package/dist/components/SearchPanel.js +449 -0
  93. package/dist/components/SearchPanel.js.map +1 -0
  94. package/dist/components/SettingsCard.d.ts +49 -0
  95. package/dist/components/SettingsCard.d.ts.map +1 -0
  96. package/dist/components/SettingsCard.js +59 -0
  97. package/dist/components/SettingsCard.js.map +1 -0
  98. package/dist/components/ShareModal.d.ts +32 -0
  99. package/dist/components/ShareModal.d.ts.map +1 -0
  100. package/dist/components/ShareModal.js +126 -0
  101. package/dist/components/ShareModal.js.map +1 -0
  102. package/dist/components/SidebarTabs.d.ts +18 -0
  103. package/dist/components/SidebarTabs.d.ts.map +1 -0
  104. package/dist/components/SidebarTabs.js +20 -0
  105. package/dist/components/SidebarTabs.js.map +1 -0
  106. package/dist/components/SkillsCard.d.ts +86 -0
  107. package/dist/components/SkillsCard.d.ts.map +1 -0
  108. package/dist/components/SkillsCard.js +227 -0
  109. package/dist/components/SkillsCard.js.map +1 -0
  110. package/dist/components/StreamingIndicator.d.ts +50 -0
  111. package/dist/components/StreamingIndicator.d.ts.map +1 -0
  112. package/dist/components/StreamingIndicator.js +142 -0
  113. package/dist/components/StreamingIndicator.js.map +1 -0
  114. package/dist/components/TabBar.d.ts +37 -0
  115. package/dist/components/TabBar.d.ts.map +1 -0
  116. package/dist/components/TabBar.js +187 -0
  117. package/dist/components/TabBar.js.map +1 -0
  118. package/dist/components/TipCard.d.ts +22 -0
  119. package/dist/components/TipCard.d.ts.map +1 -0
  120. package/dist/components/TipCard.js +73 -0
  121. package/dist/components/TipCard.js.map +1 -0
  122. package/dist/components/ToolCallCard.d.ts +18 -0
  123. package/dist/components/ToolCallCard.d.ts.map +1 -0
  124. package/dist/components/ToolCallCard.js +716 -0
  125. package/dist/components/ToolCallCard.js.map +1 -0
  126. package/dist/components/UserAvatar.d.ts +45 -0
  127. package/dist/components/UserAvatar.d.ts.map +1 -0
  128. package/dist/components/UserAvatar.js +80 -0
  129. package/dist/components/UserAvatar.js.map +1 -0
  130. package/dist/components/WorkspaceLayout.d.ts +19 -0
  131. package/dist/components/WorkspaceLayout.d.ts.map +1 -0
  132. package/dist/components/WorkspaceLayout.js +56 -0
  133. package/dist/components/WorkspaceLayout.js.map +1 -0
  134. package/dist/components/activity-utilities.d.ts +107 -0
  135. package/dist/components/activity-utilities.d.ts.map +1 -0
  136. package/dist/components/activity-utilities.js +154 -0
  137. package/dist/components/activity-utilities.js.map +1 -0
  138. package/dist/components/chat-autocommit-utilities.d.ts +172 -0
  139. package/dist/components/chat-autocommit-utilities.d.ts.map +1 -0
  140. package/dist/components/chat-autocommit-utilities.js +185 -0
  141. package/dist/components/chat-autocommit-utilities.js.map +1 -0
  142. package/dist/components/chat-card-style.d.ts +64 -0
  143. package/dist/components/chat-card-style.d.ts.map +1 -0
  144. package/dist/components/chat-card-style.js +74 -0
  145. package/dist/components/chat-card-style.js.map +1 -0
  146. package/dist/components/chat-commands.d.ts +17 -0
  147. package/dist/components/chat-commands.d.ts.map +1 -0
  148. package/dist/components/chat-commands.js +17 -0
  149. package/dist/components/chat-commands.js.map +1 -0
  150. package/dist/components/chat-commit-utilities.d.ts +29 -0
  151. package/dist/components/chat-commit-utilities.d.ts.map +1 -0
  152. package/dist/components/chat-commit-utilities.js +31 -0
  153. package/dist/components/chat-commit-utilities.js.map +1 -0
  154. package/dist/components/chat-cost-utilities.d.ts +62 -0
  155. package/dist/components/chat-cost-utilities.d.ts.map +1 -0
  156. package/dist/components/chat-cost-utilities.js +66 -0
  157. package/dist/components/chat-cost-utilities.js.map +1 -0
  158. package/dist/components/chat-effort-utilities.d.ts +96 -0
  159. package/dist/components/chat-effort-utilities.d.ts.map +1 -0
  160. package/dist/components/chat-effort-utilities.js +97 -0
  161. package/dist/components/chat-effort-utilities.js.map +1 -0
  162. package/dist/components/chat-help-utilities.d.ts +89 -0
  163. package/dist/components/chat-help-utilities.d.ts.map +1 -0
  164. package/dist/components/chat-help-utilities.js +131 -0
  165. package/dist/components/chat-help-utilities.js.map +1 -0
  166. package/dist/components/chat-model-mode-utilities.d.ts +143 -0
  167. package/dist/components/chat-model-mode-utilities.d.ts.map +1 -0
  168. package/dist/components/chat-model-mode-utilities.js +191 -0
  169. package/dist/components/chat-model-mode-utilities.js.map +1 -0
  170. package/dist/components/chat-models-utilities.d.ts +98 -0
  171. package/dist/components/chat-models-utilities.d.ts.map +1 -0
  172. package/dist/components/chat-models-utilities.js +136 -0
  173. package/dist/components/chat-models-utilities.js.map +1 -0
  174. package/dist/components/chat-report-utilities.d.ts +149 -0
  175. package/dist/components/chat-report-utilities.d.ts.map +1 -0
  176. package/dist/components/chat-report-utilities.js +151 -0
  177. package/dist/components/chat-report-utilities.js.map +1 -0
  178. package/dist/components/chat-scripts-utilities.d.ts +140 -0
  179. package/dist/components/chat-scripts-utilities.d.ts.map +1 -0
  180. package/dist/components/chat-scripts-utilities.js +158 -0
  181. package/dist/components/chat-scripts-utilities.js.map +1 -0
  182. package/dist/components/chat-settings-utilities.d.ts +72 -0
  183. package/dist/components/chat-settings-utilities.d.ts.map +1 -0
  184. package/dist/components/chat-settings-utilities.js +56 -0
  185. package/dist/components/chat-settings-utilities.js.map +1 -0
  186. package/dist/components/chat-share-utilities.d.ts +104 -0
  187. package/dist/components/chat-share-utilities.d.ts.map +1 -0
  188. package/dist/components/chat-share-utilities.js +90 -0
  189. package/dist/components/chat-share-utilities.js.map +1 -0
  190. package/dist/components/chat-skills-utilities.d.ts +242 -0
  191. package/dist/components/chat-skills-utilities.d.ts.map +1 -0
  192. package/dist/components/chat-skills-utilities.js +433 -0
  193. package/dist/components/chat-skills-utilities.js.map +1 -0
  194. package/dist/components/chat-stream-utilities.d.ts +74 -0
  195. package/dist/components/chat-stream-utilities.d.ts.map +1 -0
  196. package/dist/components/chat-stream-utilities.js +103 -0
  197. package/dist/components/chat-stream-utilities.js.map +1 -0
  198. package/dist/components/chat-tips-utilities.d.ts +108 -0
  199. package/dist/components/chat-tips-utilities.d.ts.map +1 -0
  200. package/dist/components/chat-tips-utilities.js +137 -0
  201. package/dist/components/chat-tips-utilities.js.map +1 -0
  202. package/dist/components/device-cycle.d.ts +84 -0
  203. package/dist/components/device-cycle.d.ts.map +1 -0
  204. package/dist/components/device-cycle.js +77 -0
  205. package/dist/components/device-cycle.js.map +1 -0
  206. package/dist/components/index.d.ts +36 -0
  207. package/dist/components/index.d.ts.map +1 -0
  208. package/dist/components/index.js +33 -0
  209. package/dist/components/index.js.map +1 -0
  210. package/dist/components/tool-call-utilities.d.ts +69 -0
  211. package/dist/components/tool-call-utilities.d.ts.map +1 -0
  212. package/dist/components/tool-call-utilities.js +368 -0
  213. package/dist/components/tool-call-utilities.js.map +1 -0
  214. package/dist/components/user-avatar-utilities.d.ts +41 -0
  215. package/dist/components/user-avatar-utilities.d.ts.map +1 -0
  216. package/dist/components/user-avatar-utilities.js +56 -0
  217. package/dist/components/user-avatar-utilities.js.map +1 -0
  218. package/dist/components/workspace-layout-utilities.d.ts +37 -0
  219. package/dist/components/workspace-layout-utilities.d.ts.map +1 -0
  220. package/dist/components/workspace-layout-utilities.js +58 -0
  221. package/dist/components/workspace-layout-utilities.js.map +1 -0
  222. package/dist/customEventCards.d.ts +117 -0
  223. package/dist/customEventCards.d.ts.map +1 -0
  224. package/dist/customEventCards.js +36 -0
  225. package/dist/customEventCards.js.map +1 -0
  226. package/dist/hooks/index.d.ts +8 -0
  227. package/dist/hooks/index.d.ts.map +1 -0
  228. package/dist/hooks/index.js +8 -0
  229. package/dist/hooks/index.js.map +1 -0
  230. package/dist/hooks/useKeyboardShortcuts.d.ts +48 -0
  231. package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  232. package/dist/hooks/useKeyboardShortcuts.js +112 -0
  233. package/dist/hooks/useKeyboardShortcuts.js.map +1 -0
  234. package/dist/hooks/useViewport.d.ts +42 -0
  235. package/dist/hooks/useViewport.d.ts.map +1 -0
  236. package/dist/hooks/useViewport.js +61 -0
  237. package/dist/hooks/useViewport.js.map +1 -0
  238. package/dist/index.d.ts +75 -0
  239. package/dist/index.d.ts.map +1 -0
  240. package/dist/index.js +74 -0
  241. package/dist/index.js.map +1 -0
  242. package/dist/settings-metadata.d.ts +78 -0
  243. package/dist/settings-metadata.d.ts.map +1 -0
  244. package/dist/settings-metadata.js +131 -0
  245. package/dist/settings-metadata.js.map +1 -0
  246. package/dist/types.d.ts +751 -0
  247. package/dist/types.d.ts.map +1 -0
  248. package/dist/types.js +25 -0
  249. package/dist/types.js.map +1 -0
  250. package/package.json +90 -0
@@ -0,0 +1,96 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo, useState } from 'react';
3
+ import { formatTokenCount, PROVIDER_BRAND_COLORS } from '@molecule/app-ai-models';
4
+ import { t } from '@molecule/app-i18n';
5
+ import { getClassMap } from '@molecule/app-ui';
6
+ import { Tooltip } from '@molecule/app-ui-react/components/Tooltip.js';
7
+ import { modelTotalCost, sortModels } from './chat-models-utilities.js';
8
+ import { Icon } from './Icon.js';
9
+ /**
10
+ * Picks the SVG sort glyph for a header: the neutral `chevrons-up-down` when the
11
+ * column is not the active sort, or a single up/down chevron matching the active
12
+ * direction. Keeps one consistent icon family across every header.
13
+ *
14
+ * @param active - Whether this column is the current sort column.
15
+ * @param direction - The current sort direction (only meaningful when `active`).
16
+ * @returns The icon-set glyph name to render.
17
+ */
18
+ function sortGlyph(active, direction) {
19
+ if (!active)
20
+ return 'chevrons-up-down';
21
+ return direction === 'asc' ? 'chevron-up' : 'chevron-down';
22
+ }
23
+ /**
24
+ * Sortable comparison table of available AI models.
25
+ *
26
+ * @param root0 - Component props.
27
+ * @param root0.models - Models to display (already filtered to the current catalog).
28
+ * @param root0.currentModelId - The id of the project's active model, badged as "current".
29
+ * @param root0.isLight - Whether the current theme is light mode (drives highlight tints).
30
+ * @returns The rendered models table.
31
+ */
32
+ export function ModelsTable({ models, currentModelId, isLight, }) {
33
+ const cm = getClassMap();
34
+ const [sort, setSort] = useState({
35
+ column: 'name',
36
+ direction: 'asc',
37
+ });
38
+ const sorted = useMemo(() => sortModels(models, sort.column, sort.direction), [models, sort.column, sort.direction]);
39
+ const columns = [
40
+ { key: 'name', label: t('ide.chat.models.colName', undefined, { defaultValue: 'Model' }) },
41
+ {
42
+ key: 'context',
43
+ label: t('ide.chat.models.colContext', undefined, { defaultValue: 'Context' }),
44
+ },
45
+ {
46
+ key: 'cost',
47
+ label: t('ide.chat.models.colCost', undefined, { defaultValue: 'Cost / 1M' }),
48
+ },
49
+ {
50
+ key: 'cutoff',
51
+ label: t('ide.chat.models.colCutoff', undefined, { defaultValue: 'Cutoff' }),
52
+ },
53
+ { key: 'free', label: t('ide.chat.models.colFree', undefined, { defaultValue: 'Free' }) },
54
+ ];
55
+ const freeHighlightBg = isLight ? 'rgba(34,197,94,0.10)' : 'rgba(34,197,94,0.14)';
56
+ const freeBadgeFg = isLight ? 'rgb(21,128,61)' : 'rgb(74,222,128)';
57
+ const cellPad = cm.sp('px', 2);
58
+ const cellPadY = cm.sp('py', 1);
59
+ return (_jsx("div", { "data-mol-id": "models-table", className: cm.cn(cm.surfaceSecondary, cm.textSize('xs')), style: {
60
+ margin: '6px 0',
61
+ borderRadius: 6,
62
+ overflowX: 'auto',
63
+ }, children: _jsxs("table", { style: { width: '100%', borderCollapse: 'collapse', textAlign: 'left' }, children: [_jsx("thead", { children: _jsx("tr", { children: columns.map((col) => {
64
+ const active = sort.column === col.key;
65
+ return (_jsx("th", { className: cm.cn(cellPad, cellPadY, cm.fontWeight('medium')), style: { whiteSpace: 'nowrap' }, children: _jsxs("button", { type: "button", "data-mol-id": `models-sort-${col.key}`, "aria-label": t('ide.chat.models.sortBy', { column: col.label }, { defaultValue: 'Sort by {{column}}' }), onClick: () => setSort((prev) => prev.column === col.key
66
+ ? {
67
+ column: col.key,
68
+ direction: prev.direction === 'asc' ? 'desc' : 'asc',
69
+ }
70
+ : { column: col.key, direction: 'asc' }), className: cm.cn(cm.fontWeight('medium'), active ? undefined : cm.textMuted), style: {
71
+ display: 'inline-flex',
72
+ alignItems: 'center',
73
+ gap: 3,
74
+ background: 'none',
75
+ border: 'none',
76
+ cursor: 'pointer',
77
+ color: active ? 'var(--color-primary)' : 'inherit',
78
+ font: 'inherit',
79
+ padding: 0,
80
+ }, children: [col.label, _jsx(Icon, { name: sortGlyph(active, sort.direction), size: 12, "aria-hidden": "true", "data-mol-id": `models-sort-glyph-${col.key}`, style: { flexShrink: 0, opacity: active ? 1 : 0.6 } })] }) }, col.key));
81
+ }) }) }), _jsx("tbody", { children: sorted.map((model) => {
82
+ const accent = PROVIDER_BRAND_COLORS[model.provider] ?? '#888';
83
+ const isCurrent = model.id === currentModelId;
84
+ return (_jsxs("tr", { className: cm.borderT, style: model.freeTier ? { background: freeHighlightBg } : undefined, children: [_jsxs("td", { className: cm.cn(cellPad, cellPadY), style: { borderLeft: `3px solid ${accent}` }, children: [_jsx("span", { className: cm.fontWeight('medium'), children: model.label }), ' ', _jsx("span", { className: cm.textMuted, style: { fontSize: 10 }, children: model.provider }), isCurrent && (_jsx("span", { className: cm.textMuted, style: {
85
+ marginLeft: 4,
86
+ fontSize: 10,
87
+ background: 'rgba(128,128,128,0.2)',
88
+ padding: '0 4px',
89
+ borderRadius: 3,
90
+ }, children: t('ide.chat.currentBadge', undefined, { defaultValue: 'current' }) }))] }), _jsx("td", { className: cm.cn(cellPad, cellPadY), style: { whiteSpace: 'nowrap' }, children: formatTokenCount(model.contextWindow) }), _jsx("td", { className: cm.cn(cellPad, cellPadY), style: { whiteSpace: 'nowrap' }, children: _jsx(Tooltip, { content: t('ide.chat.models.costBreakdown', {
91
+ input: model.inputPricePerMTok.toFixed(2),
92
+ output: model.outputPricePerMTok.toFixed(2),
93
+ }, { defaultValue: 'Input ${{input}} + output ${{output}} per 1M tokens' }), placement: "top", children: _jsxs("span", { "data-mol-id": `models-cost-${model.id}`, children: ["$", modelTotalCost(model).toFixed(2)] }) }) }), _jsx("td", { className: cm.cn(cellPad, cellPadY), style: { whiteSpace: 'nowrap' }, children: model.knowledgeCutoff }), _jsx("td", { className: cm.cn(cellPad, cellPadY), children: model.freeTier ? (_jsx("span", { style: { color: freeBadgeFg, fontWeight: 600 }, children: t('ide.chat.models.freeYes', undefined, { defaultValue: '✓ Free' }) })) : (_jsx("span", { className: cm.textMuted, children: t('ide.chat.models.freeNo', undefined, { defaultValue: '—' }) })) })] }, model.id));
94
+ }) })] }) }));
95
+ }
96
+ //# sourceMappingURL=ModelsTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelsTable.js","sourceRoot":"","sources":["../../src/components/ModelsTable.tsx"],"names":[],"mappings":";AAuBA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAGzC,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,8CAA8C,CAAA;AAGtE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAQhC;;;;;;;;GAQG;AACH,SAAS,SAAS,CAAC,MAAe,EAAE,SAAwB;IAC1D,IAAI,CAAC,MAAM;QAAE,OAAO,kBAAkB,CAAA;IACtC,OAAO,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAA;AAC5D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,MAAM,EACN,cAAc,EACd,OAAO,GAKR;IACC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAA;IACxB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAwD;QACtF,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,KAAK;KACjB,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,OAAO,CACpB,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,EACrD,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CACtC,CAAA;IAED,MAAM,OAAO,GAAgB;QAC3B,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,yBAAyB,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,EAAE;QAC1F;YACE,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,CAAC,CAAC,4BAA4B,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;SAC/E;QACD;YACE,GAAG,EAAE,MAAM;YACX,KAAK,EAAE,CAAC,CAAC,yBAAyB,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;SAC9E;QACD;YACE,GAAG,EAAE,QAAQ;YACb,KAAK,EAAE,CAAC,CAAC,2BAA2B,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;SAC7E;QACD,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,yBAAyB,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,EAAE;KAC1F,CAAA;IAED,MAAM,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,sBAAsB,CAAA;IACjF,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,CAAA;IAElE,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAC9B,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAE/B,OAAO,CACL,6BACc,cAAc,EAC1B,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EACxD,KAAK,EAAE;YACL,MAAM,EAAE,OAAO;YACf,YAAY,EAAE,CAAC;YACf,SAAS,EAAE,MAAM;SAClB,YAED,iBAAO,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,aAC5E,0BACE,uBACG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;4BACnB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC,GAAG,CAAA;4BACtC,OAAO,CACL,aAEE,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAC5D,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,YAE/B,kBACE,IAAI,EAAC,QAAQ,iBACA,eAAe,GAAG,CAAC,GAAG,EAAE,gBACzB,CAAC,CACX,wBAAwB,EACxB,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,EACrB,EAAE,YAAY,EAAE,oBAAoB,EAAE,CACvC,EACD,OAAO,EAAE,GAAG,EAAE,CACZ,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CACf,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC,GAAG;wCACrB,CAAC,CAAC;4CACE,MAAM,EAAE,GAAG,CAAC,GAAG;4CACf,SAAS,EAAE,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;yCACrD;wCACH,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAC1C,EAEH,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAC5E,KAAK,EAAE;wCACL,OAAO,EAAE,aAAa;wCACtB,UAAU,EAAE,QAAQ;wCACpB,GAAG,EAAE,CAAC;wCACN,UAAU,EAAE,MAAM;wCAClB,MAAM,EAAE,MAAM;wCACd,MAAM,EAAE,SAAS;wCACjB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS;wCAClD,IAAI,EAAE,SAAS;wCACf,OAAO,EAAE,CAAC;qCACX,aAEA,GAAG,CAAC,KAAK,EACV,KAAC,IAAI,IACH,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,EACvC,IAAI,EAAE,EAAE,iBACI,MAAM,iBACL,qBAAqB,GAAG,CAAC,GAAG,EAAE,EAC3C,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GACnD,IACK,IA3CJ,GAAG,CAAC,GAAG,CA4CT,CACN,CAAA;wBACH,CAAC,CAAC,GACC,GACC,EACR,0BACG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;wBACpB,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAA;wBAC9D,MAAM,SAAS,GAAG,KAAK,CAAC,EAAE,KAAK,cAAc,CAAA;wBAC7C,OAAO,CACL,cAEE,SAAS,EAAE,EAAE,CAAC,OAAO,EACrB,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,SAAS,aAEnE,cACE,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EACnC,KAAK,EAAE,EAAE,UAAU,EAAE,aAAa,MAAM,EAAE,EAAE,aAE5C,eAAM,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAG,KAAK,CAAC,KAAK,GAAQ,EAAC,GAAG,EAClE,eAAM,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,YACnD,KAAK,CAAC,QAAQ,GACV,EACN,SAAS,IAAI,CACZ,eACE,SAAS,EAAE,EAAE,CAAC,SAAS,EACvB,KAAK,EAAE;gDACL,UAAU,EAAE,CAAC;gDACb,QAAQ,EAAE,EAAE;gDACZ,UAAU,EAAE,uBAAuB;gDACnC,OAAO,EAAE,OAAO;gDAChB,YAAY,EAAE,CAAC;6CAChB,YAEA,CAAC,CAAC,uBAAuB,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,GAC9D,CACR,IACE,EACL,aAAI,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,YACrE,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC,GACnC,EACL,aAAI,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,YAOtE,KAAC,OAAO,IACN,OAAO,EAAE,CAAC,CACR,+BAA+B,EAC/B;4CACE,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;4CACzC,MAAM,EAAE,KAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;yCAC5C,EACD,EAAE,YAAY,EAAE,qDAAqD,EAAE,CACxE,EACD,SAAS,EAAC,KAAK,YAEf,+BAAmB,eAAe,KAAK,CAAC,EAAE,EAAE,kBACxC,cAAc,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAC7B,GACC,GACP,EACL,aAAI,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,YACrE,KAAK,CAAC,eAAe,GACnB,EACL,aAAI,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,YACpC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAChB,eAAM,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,EAAE,YACjD,CAAC,CAAC,yBAAyB,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,GAC/D,CACR,CAAC,CAAC,CAAC,CACF,eAAM,SAAS,EAAE,EAAE,CAAC,SAAS,YAC1B,CAAC,CAAC,wBAAwB,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,GACzD,CACR,GACE,KAlEA,KAAK,CAAC,EAAE,CAmEV,CACN,CAAA;oBACH,CAAC,CAAC,GACI,IACF,GACJ,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Live preview panel with iframe and device frame selection.
3
+ *
4
+ * Two states:
5
+ * 1. "Loading preview" — polling until the first successful fetch
6
+ * 2. "Loading preview" — server was up before but fetch is now failing
7
+ *
8
+ * The iframe is always mounted (behind the overlay) once we have a URL. The overlay REVEAL is
9
+ * driven by TWO regimes, keyed on whether this load target has rendered before this session
10
+ * (`hasEverRendered`):
11
+ * - FIRST cold boot (never rendered yet): reveal ONLY on the `molecule:ready` handshake. A fresh
12
+ * project's cold Vite server can take many seconds to pre-bundle deps + compile the app before
13
+ * React mounts; `onLoad` fires on the shell HTML long BEFORE that, so revealing on `onLoad`
14
+ * here would flash a white, still-compiling iframe and then let a naive timer falsely accuse it
15
+ * of being "blank"/"unable to load" (with an "Open in new tab" button) — the exact reason a
16
+ * fresh preview "wouldn't load until I opened it in a new tab and refreshed the IDE". Instead we
17
+ * keep an honest "Starting your app…" overlay until the scaffold's inline bridge posts
18
+ * `molecule:ready` the instant #root mounts (reliable — verified to fire even while the overlay
19
+ * occludes the cross-origin iframe; the old "rAF frozen under occlusion" deadlock was actually
20
+ * the overlay's `backdrop-filter` freezing the whole renderer, since removed).
21
+ * - RELOAD of an app that already rendered (`hasEverRendered`): reveal on `onLoad` (+ a short
22
+ * grace) as a flash-free fast path, with `molecule:ready` faster still.
23
+ * A genuinely blank/broken app is surfaced by the app's OWN signals — an explicit `molecule:blank`,
24
+ * a crash, a dead (no-heartbeat) document, or an alive-but-never-mounts backstop — never by a
25
+ * timer that can't tell "still cold-compiling" from "rendered nothing".
26
+ *
27
+ * Recovery features:
28
+ * - Never-give-up polling with exponential backoff, single-chain (epoch-guarded +
29
+ * AbortController) so leaked poll chains can't starve the preview's connections
30
+ * - onLoad grace fallback: clears the overlay when the document loaded but the
31
+ * ready handshake never came (and no crash fired)
32
+ * - Stuck-load detection: gated on the document NOT having loaded (so it never
33
+ * interrupts a progressing load), backs off, and is CAPPED — after the cap it
34
+ * stops thrashing and shows a themed "Preview can't load here" loop-breaker
35
+ * panel (Reload + Open in new tab) instead of remounting forever
36
+ * - Last-good-frame: stores the sandbox's `molecule:snapshot` data-URL and shows
37
+ * it blurred behind the overlay while the app is rebuilding / blank
38
+ * - Pre-render error forwarding: module/import errors sent to the agent for auto-fix
39
+ * - Freeze watchdog: the scaffold heartbeats every ~3s; if its thread locks up the
40
+ * beats stop, so we surface a reload banner (the IDE stays responsive because the
41
+ * preview origin is isolated via Origin-Agent-Cluster)
42
+ * - Blank page detection: catches pages that render but show nothing
43
+ * - Wake patience: when the preview server restarts (detected by the load-target URL
44
+ * changing — a wake always reassigns the sandbox's docker port — or the host's `wakeAt`
45
+ * hint), the fast blank accusations stand down and the patient cold-boot regime governs
46
+ * for WAKE_PATIENCE_MS: a post-wake reload that renders nothing for a while is expected,
47
+ * not blank; only the generous never-rendered ceiling may accuse
48
+ * - Trust boundary: inbound `molecule:*` postMessages are accepted only from the
49
+ * preview iframe's own window (`event.source === iframe.contentWindow`) — a window-
50
+ * identity check, robust to origin-string divergence (Origin-Agent-Cluster, IP host,
51
+ * cache-buster, redirect) and unforgeable by any other window
52
+ *
53
+ * @module
54
+ */
55
+ import { type JSX } from 'react';
56
+ import type { PreviewPanelProps } from '../types.js';
57
+ /**
58
+ * Live preview panel with iframe, device frame selector, and URL bar.
59
+ * @param props - Component props.
60
+ * @returns The rendered preview panel element.
61
+ */
62
+ export declare function PreviewPanel({ loadingIndicator, restartingIndicator, className, onPreviewError, onPreviewStuck, onRenderState, uiCommand, onUiResult, fileChangeTick, buildingHint, isBuilding, wakeAt, }: PreviewPanelProps): JSX.Element;
63
+ export declare namespace PreviewPanel {
64
+ var displayName: string;
65
+ }
66
+ //# sourceMappingURL=PreviewPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PreviewPanel.d.ts","sourceRoot":"","sources":["../../src/components/PreviewPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AAEH,OAAO,EAAE,KAAK,GAAG,EAA4C,MAAM,OAAO,CAAA;AAW1E,OAAO,KAAK,EAAE,iBAAiB,EAAuC,MAAM,aAAa,CAAA;AA8NzF;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAC3B,gBAAgB,EAChB,mBAAmB,EACnB,SAAS,EACT,cAAc,EACd,cAAc,EACd,aAAa,EACb,SAAS,EACT,UAAU,EACV,cAAc,EACd,YAAY,EACZ,UAAU,EACV,MAAM,GACP,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,CA+lDjC;yBA5mDe,YAAY"}