@xemahq/ui-kernel 0.9.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (238) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +1 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/biome-host/biome-registry.d.ts.map +1 -1
  6. package/dist/lib/biome-host/biome-registry.js +14 -9
  7. package/dist/lib/biome-host/biome-registry.js.map +1 -1
  8. package/dist/lib/contribution-registry/contribution-registry.d.ts +24 -0
  9. package/dist/lib/contribution-registry/contribution-registry.d.ts.map +1 -0
  10. package/dist/lib/contribution-registry/contribution-registry.js +67 -0
  11. package/dist/lib/contribution-registry/contribution-registry.js.map +1 -0
  12. package/dist/lib/contribution-registry/index.d.ts +3 -0
  13. package/dist/lib/contribution-registry/index.d.ts.map +1 -0
  14. package/dist/lib/contribution-registry/index.js +3 -0
  15. package/dist/lib/contribution-registry/index.js.map +1 -0
  16. package/dist/lib/contribution-registry/renderable-registry.d.ts +33 -0
  17. package/dist/lib/contribution-registry/renderable-registry.d.ts.map +1 -0
  18. package/dist/lib/contribution-registry/renderable-registry.js +51 -0
  19. package/dist/lib/contribution-registry/renderable-registry.js.map +1 -0
  20. package/dist/ui/capture/field-spec-to-zod.d.ts +1 -0
  21. package/dist/ui/capture/field-spec-to-zod.d.ts.map +1 -1
  22. package/dist/ui/capture/field-spec-to-zod.js +19 -0
  23. package/dist/ui/capture/field-spec-to-zod.js.map +1 -1
  24. package/dist/ui/capture/field-spec-validate.d.ts +4 -0
  25. package/dist/ui/capture/field-spec-validate.d.ts.map +1 -0
  26. package/dist/ui/capture/field-spec-validate.js +129 -0
  27. package/dist/ui/capture/field-spec-validate.js.map +1 -0
  28. package/dist/ui/capture/field-spec.d.ts +13 -1
  29. package/dist/ui/capture/field-spec.d.ts.map +1 -1
  30. package/dist/ui/capture/field-spec.js +25 -0
  31. package/dist/ui/capture/field-spec.js.map +1 -1
  32. package/dist/ui/capture/index.d.ts +4 -2
  33. package/dist/ui/capture/index.d.ts.map +1 -1
  34. package/dist/ui/capture/index.js +4 -2
  35. package/dist/ui/capture/index.js.map +1 -1
  36. package/dist/ui/capture/schema-field-input.d.ts.map +1 -1
  37. package/dist/ui/capture/schema-field-input.js +39 -12
  38. package/dist/ui/capture/schema-field-input.js.map +1 -1
  39. package/dist/ui/capture/submit-values.d.ts +6 -0
  40. package/dist/ui/capture/submit-values.d.ts.map +1 -0
  41. package/dist/ui/capture/submit-values.js +28 -0
  42. package/dist/ui/capture/submit-values.js.map +1 -0
  43. package/dist/ui/index.d.ts +1 -0
  44. package/dist/ui/index.d.ts.map +1 -1
  45. package/dist/ui/index.js +1 -0
  46. package/dist/ui/index.js.map +1 -1
  47. package/dist/ui/primitives/overflow-tabs.d.ts +5 -0
  48. package/dist/ui/primitives/overflow-tabs.d.ts.map +1 -1
  49. package/dist/ui/primitives/overflow-tabs.js +4 -4
  50. package/dist/ui/primitives/overflow-tabs.js.map +1 -1
  51. package/dist/ui/primitives/url-preview-chrome.d.ts +8 -0
  52. package/dist/ui/primitives/url-preview-chrome.d.ts.map +1 -0
  53. package/dist/ui/primitives/url-preview-chrome.js +40 -0
  54. package/dist/ui/primitives/url-preview-chrome.js.map +1 -0
  55. package/dist/vista/GenericCatalogueSurface.d.ts +10 -0
  56. package/dist/vista/GenericCatalogueSurface.d.ts.map +1 -0
  57. package/dist/vista/GenericCatalogueSurface.js +80 -0
  58. package/dist/vista/GenericCatalogueSurface.js.map +1 -0
  59. package/dist/vista/SurfaceFallbackCard.d.ts +9 -0
  60. package/dist/vista/SurfaceFallbackCard.d.ts.map +1 -0
  61. package/dist/vista/SurfaceFallbackCard.js +44 -0
  62. package/dist/vista/SurfaceFallbackCard.js.map +1 -0
  63. package/dist/vista/VistaPanel.d.ts +21 -0
  64. package/dist/vista/VistaPanel.d.ts.map +1 -0
  65. package/dist/vista/VistaPanel.js +31 -0
  66. package/dist/vista/VistaPanel.js.map +1 -0
  67. package/dist/vista/html/CustomUiFrame.d.ts +20 -0
  68. package/dist/vista/html/CustomUiFrame.d.ts.map +1 -0
  69. package/dist/vista/html/CustomUiFrame.js +69 -0
  70. package/dist/vista/html/CustomUiFrame.js.map +1 -0
  71. package/dist/vista/html/custom-ui-frame-bridge.d.ts +13 -0
  72. package/dist/vista/html/custom-ui-frame-bridge.d.ts.map +1 -0
  73. package/dist/vista/html/custom-ui-frame-bridge.js +30 -0
  74. package/dist/vista/html/custom-ui-frame-bridge.js.map +1 -0
  75. package/dist/vista/html/custom-ui-frame-contract.d.ts +29 -0
  76. package/dist/vista/html/custom-ui-frame-contract.d.ts.map +1 -0
  77. package/dist/vista/html/custom-ui-frame-contract.js +16 -0
  78. package/dist/vista/html/custom-ui-frame-contract.js.map +1 -0
  79. package/dist/vista/html/custom-ui-intents.d.ts +20 -0
  80. package/dist/vista/html/custom-ui-intents.d.ts.map +1 -0
  81. package/dist/vista/html/custom-ui-intents.js +57 -0
  82. package/dist/vista/html/custom-ui-intents.js.map +1 -0
  83. package/dist/vista/html/custom-ui-srcdoc.d.ts +17 -0
  84. package/dist/vista/html/custom-ui-srcdoc.d.ts.map +1 -0
  85. package/dist/vista/html/custom-ui-srcdoc.js +70 -0
  86. package/dist/vista/html/custom-ui-srcdoc.js.map +1 -0
  87. package/dist/vista/html/index.d.ts +6 -0
  88. package/dist/vista/html/index.d.ts.map +1 -0
  89. package/dist/vista/html/index.js +6 -0
  90. package/dist/vista/html/index.js.map +1 -0
  91. package/dist/vista/index.d.ts +18 -0
  92. package/dist/vista/index.d.ts.map +1 -0
  93. package/dist/vista/index.js +18 -0
  94. package/dist/vista/index.js.map +1 -0
  95. package/dist/vista/surface-catalogue.d.ts +5 -0
  96. package/dist/vista/surface-catalogue.d.ts.map +1 -0
  97. package/dist/vista/surface-catalogue.js +30 -0
  98. package/dist/vista/surface-catalogue.js.map +1 -0
  99. package/dist/vista/surface-icons.d.ts +7 -0
  100. package/dist/vista/surface-icons.d.ts.map +1 -0
  101. package/dist/vista/surface-icons.js +26 -0
  102. package/dist/vista/surface-icons.js.map +1 -0
  103. package/dist/vista/surface-registry.d.ts +7 -0
  104. package/dist/vista/surface-registry.d.ts.map +1 -0
  105. package/dist/vista/surface-registry.js +7 -0
  106. package/dist/vista/surface-registry.js.map +1 -0
  107. package/dist/vista/surfaces/ChartSurface.d.ts +4 -0
  108. package/dist/vista/surfaces/ChartSurface.d.ts.map +1 -0
  109. package/dist/vista/surfaces/ChartSurface.js +17 -0
  110. package/dist/vista/surfaces/ChartSurface.js.map +1 -0
  111. package/dist/vista/surfaces/FilesSurface.d.ts +15 -0
  112. package/dist/vista/surfaces/FilesSurface.d.ts.map +1 -0
  113. package/dist/vista/surfaces/FilesSurface.js +121 -0
  114. package/dist/vista/surfaces/FilesSurface.js.map +1 -0
  115. package/dist/vista/surfaces/FormSurface.d.ts +4 -0
  116. package/dist/vista/surfaces/FormSurface.d.ts.map +1 -0
  117. package/dist/vista/surfaces/FormSurface.js +97 -0
  118. package/dist/vista/surfaces/FormSurface.js.map +1 -0
  119. package/dist/vista/surfaces/HtmlSurface.d.ts +4 -0
  120. package/dist/vista/surfaces/HtmlSurface.d.ts.map +1 -0
  121. package/dist/vista/surfaces/HtmlSurface.js +11 -0
  122. package/dist/vista/surfaces/HtmlSurface.js.map +1 -0
  123. package/dist/vista/surfaces/TableSurface.d.ts +4 -0
  124. package/dist/vista/surfaces/TableSurface.d.ts.map +1 -0
  125. package/dist/vista/surfaces/TableSurface.js +42 -0
  126. package/dist/vista/surfaces/TableSurface.js.map +1 -0
  127. package/dist/vista/surfaces/UrlSurface.d.ts +4 -0
  128. package/dist/vista/surfaces/UrlSurface.d.ts.map +1 -0
  129. package/dist/vista/surfaces/UrlSurface.js +7 -0
  130. package/dist/vista/surfaces/UrlSurface.js.map +1 -0
  131. package/dist/vista/surfaces/blob-surfaces.d.ts +6 -0
  132. package/dist/vista/surfaces/blob-surfaces.d.ts.map +1 -0
  133. package/dist/vista/surfaces/blob-surfaces.js +38 -0
  134. package/dist/vista/surfaces/blob-surfaces.js.map +1 -0
  135. package/dist/vista/surfaces/elicitation-transport.d.ts +18 -0
  136. package/dist/vista/surfaces/elicitation-transport.d.ts.map +1 -0
  137. package/dist/vista/surfaces/elicitation-transport.js +100 -0
  138. package/dist/vista/surfaces/elicitation-transport.js.map +1 -0
  139. package/dist/vista/surfaces/index.d.ts +11 -0
  140. package/dist/vista/surfaces/index.d.ts.map +1 -0
  141. package/dist/vista/surfaces/index.js +89 -0
  142. package/dist/vista/surfaces/index.js.map +1 -0
  143. package/dist/vista/surfaces/text-surfaces.d.ts +8 -0
  144. package/dist/vista/surfaces/text-surfaces.d.ts.map +1 -0
  145. package/dist/vista/surfaces/text-surfaces.js +54 -0
  146. package/dist/vista/surfaces/text-surfaces.js.map +1 -0
  147. package/dist/vista/use-vista-tabs.d.ts +30 -0
  148. package/dist/vista/use-vista-tabs.d.ts.map +1 -0
  149. package/dist/vista/use-vista-tabs.js +77 -0
  150. package/dist/vista/use-vista-tabs.js.map +1 -0
  151. package/dist/vista/vista-code-renderer.d.ts +12 -0
  152. package/dist/vista/vista-code-renderer.d.ts.map +1 -0
  153. package/dist/vista/vista-code-renderer.js +10 -0
  154. package/dist/vista/vista-code-renderer.js.map +1 -0
  155. package/dist/vista/vista-file-source.d.ts +20 -0
  156. package/dist/vista/vista-file-source.d.ts.map +1 -0
  157. package/dist/vista/vista-file-source.js +69 -0
  158. package/dist/vista/vista-file-source.js.map +1 -0
  159. package/dist/vista/vista-form-host.d.ts +16 -0
  160. package/dist/vista/vista-form-host.d.ts.map +1 -0
  161. package/dist/vista/vista-form-host.js +10 -0
  162. package/dist/vista/vista-form-host.js.map +1 -0
  163. package/dist/vista/vista-model.d.ts +12 -0
  164. package/dist/vista/vista-model.d.ts.map +1 -0
  165. package/dist/vista/vista-model.js +72 -0
  166. package/dist/vista/vista-model.js.map +1 -0
  167. package/dist/vista/vista-open-context.d.ts +9 -0
  168. package/dist/vista/vista-open-context.d.ts.map +1 -0
  169. package/dist/vista/vista-open-context.js +10 -0
  170. package/dist/vista/vista-open-context.js.map +1 -0
  171. package/dist/vista/vista-payloads.d.ts +107 -0
  172. package/dist/vista/vista-payloads.d.ts.map +1 -0
  173. package/dist/vista/vista-payloads.js +305 -0
  174. package/dist/vista/vista-payloads.js.map +1 -0
  175. package/dist/vista/vista-tabs-manifest.d.ts +17 -0
  176. package/dist/vista/vista-tabs-manifest.d.ts.map +1 -0
  177. package/dist/vista/vista-tabs-manifest.js +60 -0
  178. package/dist/vista/vista-tabs-manifest.js.map +1 -0
  179. package/dist/vista/vista-tools.d.ts +41 -0
  180. package/dist/vista/vista-tools.d.ts.map +1 -0
  181. package/dist/vista/vista-tools.js +113 -0
  182. package/dist/vista/vista-tools.js.map +1 -0
  183. package/package.json +3 -3
  184. package/src/index.ts +5 -0
  185. package/src/lib/biome-host/biome-registry.ts +31 -11
  186. package/src/lib/contribution-registry/contribution-registry.spec.ts +141 -0
  187. package/src/lib/contribution-registry/contribution-registry.ts +202 -0
  188. package/src/lib/contribution-registry/index.ts +9 -0
  189. package/src/lib/contribution-registry/renderable-registry.ts +142 -0
  190. package/src/ui/capture/field-spec-to-zod.ts +22 -0
  191. package/src/ui/capture/field-spec-validate.ts +147 -0
  192. package/src/ui/capture/field-spec.ts +62 -0
  193. package/src/ui/capture/index.ts +9 -1
  194. package/src/ui/capture/schema-field-input.tsx +134 -14
  195. package/src/ui/capture/submit-values.test.ts +70 -0
  196. package/src/ui/capture/submit-values.ts +63 -0
  197. package/src/ui/index.ts +4 -0
  198. package/src/ui/primitives/overflow-tabs.tsx +24 -4
  199. package/src/ui/primitives/url-preview-chrome.tsx +102 -0
  200. package/src/vista/GenericCatalogueSurface.tsx +177 -0
  201. package/src/vista/SurfaceFallbackCard.tsx +109 -0
  202. package/src/vista/VistaPanel.tsx +155 -0
  203. package/src/vista/form-payload.spec.ts +93 -0
  204. package/src/vista/html/CustomUiFrame.spec.tsx +125 -0
  205. package/src/vista/html/CustomUiFrame.tsx +204 -0
  206. package/src/vista/html/custom-ui-frame-bridge.spec.ts +191 -0
  207. package/src/vista/html/custom-ui-frame-bridge.ts +92 -0
  208. package/src/vista/html/custom-ui-frame-contract.ts +88 -0
  209. package/src/vista/html/custom-ui-intents.spec.ts +133 -0
  210. package/src/vista/html/custom-ui-intents.ts +151 -0
  211. package/src/vista/html/custom-ui-srcdoc.spec.ts +151 -0
  212. package/src/vista/html/custom-ui-srcdoc.ts +193 -0
  213. package/src/vista/html/index.ts +13 -0
  214. package/src/vista/index.ts +48 -0
  215. package/src/vista/surface-catalogue.spec.ts +140 -0
  216. package/src/vista/surface-catalogue.ts +84 -0
  217. package/src/vista/surface-icons.ts +57 -0
  218. package/src/vista/surface-registry.ts +56 -0
  219. package/src/vista/surfaces/ChartSurface.tsx +34 -0
  220. package/src/vista/surfaces/FilesSurface.tsx +268 -0
  221. package/src/vista/surfaces/FormSurface.tsx +264 -0
  222. package/src/vista/surfaces/HtmlSurface.tsx +43 -0
  223. package/src/vista/surfaces/TableSurface.tsx +99 -0
  224. package/src/vista/surfaces/UrlSurface.tsx +40 -0
  225. package/src/vista/surfaces/blob-surfaces.tsx +129 -0
  226. package/src/vista/surfaces/elicitation-transport.spec.ts +187 -0
  227. package/src/vista/surfaces/elicitation-transport.ts +175 -0
  228. package/src/vista/surfaces/index.tsx +157 -0
  229. package/src/vista/surfaces/text-surfaces.tsx +119 -0
  230. package/src/vista/use-vista-tabs.ts +188 -0
  231. package/src/vista/vista-code-renderer.tsx +46 -0
  232. package/src/vista/vista-file-source.tsx +163 -0
  233. package/src/vista/vista-form-host.tsx +78 -0
  234. package/src/vista/vista-model.ts +130 -0
  235. package/src/vista/vista-open-context.tsx +42 -0
  236. package/src/vista/vista-payloads.ts +514 -0
  237. package/src/vista/vista-tabs-manifest.ts +123 -0
  238. package/src/vista/vista-tools.ts +220 -0
@@ -0,0 +1,44 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { AlertTriangle, ChevronDown, ChevronRight } from 'lucide-react';
3
+ import { useState } from 'react';
4
+ import { ContributionFallbackReason } from '../lib/contribution-registry';
5
+ const REASON_LABEL = {
6
+ [ContributionFallbackReason.UnknownKind]: "This view isn't available in your client.",
7
+ [ContributionFallbackReason.InvalidPayload]: "This view couldn't be displayed (its data didn't match the expected shape).",
8
+ [ContributionFallbackReason.UnsupportedVersion]: 'This view needs a newer client — refresh to see it.',
9
+ };
10
+ export function SurfaceFallbackCard({ kind, reason, payload, title, }) {
11
+ const [open, setOpen] = useState(false);
12
+ let raw;
13
+ try {
14
+ raw = JSON.stringify(payload, null, 2);
15
+ }
16
+ catch {
17
+ raw = String(payload);
18
+ }
19
+ return (_jsxs("div", { style: {
20
+ margin: 9,
21
+ border: '1px solid hsl(var(--rule))',
22
+ borderRadius: 9,
23
+ background: 'hsl(var(--paper-elev))',
24
+ overflow: 'hidden',
25
+ }, children: [_jsxs("button", { type: "button", onClick: () => setOpen((v) => !v), style: {
26
+ display: 'flex',
27
+ alignItems: 'center',
28
+ gap: 9,
29
+ width: '100%',
30
+ padding: '9px 11px',
31
+ textAlign: 'left',
32
+ cursor: 'pointer',
33
+ }, children: [_jsx(AlertTriangle, { size: 14, style: { color: 'hsl(var(--warning))', flexShrink: 0 } }), _jsxs("div", { style: { flex: 1, minWidth: 0 }, children: [_jsx("div", { style: { fontSize: 12.5, fontWeight: 600, color: 'hsl(var(--ink-2))' }, children: title ?? 'Unsupported view' }), _jsx("div", { style: { fontSize: 11.5, color: 'hsl(var(--ink-4))', marginTop: 1 }, children: REASON_LABEL[reason] })] }), _jsx("span", { className: "mono", style: { fontSize: 10.5, color: 'hsl(var(--ink-4))', flexShrink: 0 }, children: kind }), open ? _jsx(ChevronDown, { size: 12 }) : _jsx(ChevronRight, { size: 12 })] }), open && (_jsx("pre", { className: "mono", style: {
34
+ margin: 0,
35
+ padding: '8px 11px',
36
+ borderTop: '1px solid hsl(var(--rule))',
37
+ fontSize: 11,
38
+ lineHeight: 1.55,
39
+ color: 'hsl(var(--ink-3))',
40
+ whiteSpace: 'pre-wrap',
41
+ overflowX: 'auto',
42
+ }, children: raw }))] }));
43
+ }
44
+ //# sourceMappingURL=SurfaceFallbackCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SurfaceFallbackCard.js","sourceRoot":"","sources":["../../src/vista/SurfaceFallbackCard.tsx"],"names":[],"mappings":";AAWA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAqB,MAAM,OAAO,CAAC;AAEpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,MAAM,YAAY,GAA+C;IAC/D,CAAC,0BAA0B,CAAC,WAAW,CAAC,EACtC,2CAA2C;IAC7C,CAAC,0BAA0B,CAAC,cAAc,CAAC,EACzC,6EAA6E;IAC/E,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,EAC7C,qDAAqD;CACxD,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,EAClC,IAAI,EACJ,MAAM,EACN,OAAO,EACP,KAAK,GAOL;IACA,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,CACL,eACE,KAAK,EAAE;YACL,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,4BAA4B;YACpC,YAAY,EAAE,CAAC;YACf,UAAU,EAAE,wBAAwB;YACpC,QAAQ,EAAE,QAAQ;SACnB,aAED,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EACjC,KAAK,EAAE;oBACL,OAAO,EAAE,MAAM;oBACf,UAAU,EAAE,QAAQ;oBACpB,GAAG,EAAE,CAAC;oBACN,KAAK,EAAE,MAAM;oBACb,OAAO,EAAE,UAAU;oBACnB,SAAS,EAAE,MAAM;oBACjB,MAAM,EAAE,SAAS;iBAClB,aAED,KAAC,aAAa,IACZ,IAAI,EAAE,EAAE,EACR,KAAK,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,CAAC,EAAE,GACtD,EACF,eAAK,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,aAClC,cACE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,mBAAmB,EAAE,YAErE,KAAK,IAAI,kBAAkB,GACxB,EACN,cAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,CAAC,EAAE,YACrE,YAAY,CAAC,MAAM,CAAC,GACjB,IACF,EACN,eACE,SAAS,EAAC,MAAM,EAChB,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC,EAAE,YAEnE,IAAI,GACA,EACN,IAAI,CAAC,CAAC,CAAC,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,GAAI,CAAC,CAAC,CAAC,KAAC,YAAY,IAAC,IAAI,EAAE,EAAE,GAAI,IACvD,EACR,IAAI,IAAI,CACP,cACE,SAAS,EAAC,MAAM,EAChB,KAAK,EAAE;oBACL,MAAM,EAAE,CAAC;oBACT,OAAO,EAAE,UAAU;oBACnB,SAAS,EAAE,4BAA4B;oBACvC,QAAQ,EAAE,EAAE;oBACZ,UAAU,EAAE,IAAI;oBAChB,KAAK,EAAE,mBAAmB;oBAC1B,UAAU,EAAE,UAAU;oBACtB,SAAS,EAAE,MAAM;iBAClB,YAEA,GAAG,GACA,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { type ReactElement, type ReactNode } from 'react';
2
+ import type { VistaTab } from './vista-model';
3
+ export interface VistaPanelProps {
4
+ readonly tabs: readonly VistaTab[];
5
+ readonly activeTabId: string | null;
6
+ readonly onActivate: (tabId: string) => void;
7
+ readonly onClose?: (tabId: string) => void;
8
+ readonly tabBarAction?: ReactNode;
9
+ readonly indicatorTabIds?: readonly string[];
10
+ readonly emptyState?: ReactNode;
11
+ readonly className?: string;
12
+ }
13
+ export declare function VistaPanel({ tabs, activeTabId, onActivate, onClose, tabBarAction, indicatorTabIds, emptyState, className, }: VistaPanelProps): ReactElement;
14
+ export type VistaTabBarProps = Omit<VistaPanelProps, 'emptyState' | 'className'> & {
15
+ readonly className?: string;
16
+ };
17
+ export declare function VistaTabBar({ tabs, activeTabId, onActivate, onClose, tabBarAction, indicatorTabIds, className, }: VistaTabBarProps): ReactElement;
18
+ export declare function VistaSurfaceBody({ tab, }: Readonly<{
19
+ tab: VistaTab;
20
+ }>): ReactElement;
21
+ //# sourceMappingURL=VistaPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VistaPanel.d.ts","sourceRoot":"","sources":["../../src/vista/VistaPanel.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAQ1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,WAAW,eAAe;IAE9B,QAAQ,CAAC,IAAI,EAAE,SAAS,QAAQ,EAAE,CAAC;IAEnC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAK7C,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAE3C,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC;IAMlC,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAE7C,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,WAAW,EACX,UAAU,EACV,OAAO,EACP,YAAY,EACZ,eAAe,EACf,UAAU,EACV,SAAS,GACV,EAAE,eAAe,GAAG,YAAY,CA0BhC;AAED,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,eAAe,EACf,YAAY,GAAG,WAAW,CAC3B,GAAG;IAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AASpC,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,WAAW,EACX,UAAU,EACV,OAAO,EACP,YAAY,EACZ,eAAe,EACf,SAAS,GACV,EAAE,gBAAgB,GAAG,YAAY,CA4BjC;AAMD,wBAAgB,gBAAgB,CAAC,EAC/B,GAAG,GACJ,EAAE,QAAQ,CAAC;IAAE,GAAG,EAAE,QAAQ,CAAA;CAAE,CAAC,GAAG,YAAY,CAW5C"}
@@ -0,0 +1,31 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { surfaceKindIcon } from './surface-icons';
3
+ import { vistaSurfaceRegistry } from './surface-registry';
4
+ import { SurfaceFallbackCard } from './SurfaceFallbackCard';
5
+ import { cn } from '../ui/cn';
6
+ import { OverflowTabs } from '../ui/primitives/overflow-tabs';
7
+ export function VistaPanel({ tabs, activeTabId, onActivate, onClose, tabBarAction, indicatorTabIds, emptyState, className, }) {
8
+ const active = tabs.find((t) => t.tabId === activeTabId) ?? null;
9
+ return (_jsxs("div", { className: cn('flex h-full min-h-0 min-w-0 flex-1 flex-col overflow-hidden', className), children: [_jsx(VistaTabBar, { tabs: tabs, activeTabId: activeTabId, onActivate: onActivate, ...(onClose ? { onClose } : {}), ...(tabBarAction === undefined ? {} : { tabBarAction }), ...(indicatorTabIds === undefined ? {} : { indicatorTabIds }) }), _jsx("div", { className: "min-h-0 flex-1 overflow-hidden", children: active === null ? (_jsx(_Fragment, { children: emptyState ?? null })) : (_jsx(VistaSurfaceBody, { tab: active })) })] }));
10
+ }
11
+ export function VistaTabBar({ tabs, activeTabId, onActivate, onClose, tabBarAction, indicatorTabIds, className, }) {
12
+ const overflowTabs = tabs.map((tab) => {
13
+ const entry = { value: tab.tabId, label: tab.title };
14
+ if (tab.pinned === true)
15
+ entry.pinned = true;
16
+ if (indicatorTabIds?.includes(tab.tabId) === true)
17
+ entry.indicator = true;
18
+ const icon = surfaceKindIcon(tab.kind);
19
+ if (icon !== undefined)
20
+ entry.icon = icon;
21
+ return entry;
22
+ });
23
+ return (_jsxs("div", { className: cn('flex shrink-0 items-end gap-2 px-2', className), children: [_jsx("div", { className: "min-w-0 flex-1", children: _jsx(OverflowTabs, { tabs: overflowTabs, value: activeTabId ?? '', onChange: onActivate, ...(onClose ? { onClose } : {}) }) }), tabBarAction] }));
24
+ }
25
+ export function VistaSurfaceBody({ tab, }) {
26
+ const resolution = vistaSurfaceRegistry.resolve(tab);
27
+ if (resolution.matched)
28
+ return resolution.rendered;
29
+ return (_jsx(SurfaceFallbackCard, { kind: resolution.kind, reason: resolution.reason, payload: tab.payload, title: tab.title }));
30
+ }
31
+ //# sourceMappingURL=VistaPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VistaPanel.js","sourceRoot":"","sources":["../../src/vista/VistaPanel.tsx"],"names":[],"mappings":";AAkBA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAoB,MAAM,gCAAgC,CAAC;AA4BhF,MAAM,UAAU,UAAU,CAAC,EACzB,IAAI,EACJ,WAAW,EACX,UAAU,EACV,OAAO,EACP,YAAY,EACZ,eAAe,EACf,UAAU,EACV,SAAS,GACO;IAChB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,IAAI,IAAI,CAAC;IACjE,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,6DAA6D,EAC7D,SAAS,CACV,aAED,KAAC,WAAW,IACV,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,KAClB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC5B,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,KACpD,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,GAC9D,EACF,cAAK,SAAS,EAAC,gCAAgC,YAC5C,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CACjB,4BAAG,UAAU,IAAI,IAAI,GAAI,CAC1B,CAAC,CAAC,CAAC,CACF,KAAC,gBAAgB,IAAC,GAAG,EAAE,MAAM,GAAI,CAClC,GACG,IACF,CACP,CAAC;AACJ,CAAC;AAcD,MAAM,UAAU,WAAW,CAAC,EAC1B,IAAI,EACJ,WAAW,EACX,UAAU,EACV,OAAO,EACP,YAAY,EACZ,eAAe,EACf,SAAS,GACQ;IACjB,MAAM,YAAY,GAAkB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACnD,MAAM,KAAK,GAMP,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;QAC3C,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI;YAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;QAC7C,IAAI,eAAe,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI;YAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;QAC1E,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,IAAI,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IACH,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,oCAAoC,EAAE,SAAS,CAAC,aACjE,cAAK,SAAS,EAAC,gBAAgB,YAC7B,KAAC,YAAY,IACX,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,WAAW,IAAI,EAAE,EACxB,QAAQ,EAAE,UAAU,KAChB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAChC,GACE,EACL,YAAY,IACT,CACP,CAAC;AACJ,CAAC;AAMD,MAAM,UAAU,gBAAgB,CAAC,EAC/B,GAAG,GACyB;IAC5B,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrD,IAAI,UAAU,CAAC,OAAO;QAAE,OAAO,UAAU,CAAC,QAAQ,CAAC;IACnD,OAAO,CACL,KAAC,mBAAmB,IAClB,IAAI,EAAE,UAAU,CAAC,IAAI,EACrB,MAAM,EAAE,UAAU,CAAC,MAAM,EACzB,OAAO,EAAE,GAAG,CAAC,OAAO,EACpB,KAAK,EAAE,GAAG,CAAC,KAAK,GAChB,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { type ReactElement } from 'react';
2
+ import { type CustomUiComponentProps } from './custom-ui-frame-contract';
3
+ import { type CustomUiIntentSet } from './custom-ui-intents';
4
+ export type CustomUiFrameContent = {
5
+ readonly compiledOutput: string;
6
+ readonly integrity: string;
7
+ } | {
8
+ readonly document: string;
9
+ };
10
+ export interface CustomUiFrameProps<TIntent> {
11
+ readonly content: CustomUiFrameContent;
12
+ readonly componentProps?: CustomUiComponentProps;
13
+ readonly intents: CustomUiIntentSet<TIntent>;
14
+ readonly styleCss?: string;
15
+ readonly title: string;
16
+ readonly className?: string;
17
+ }
18
+ export declare function CustomUiFrame<TIntent>({ content, componentProps, intents, styleCss, title, className, }: CustomUiFrameProps<TIntent>): ReactElement;
19
+ export default CustomUiFrame;
20
+ //# sourceMappingURL=CustomUiFrame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CustomUiFrame.d.ts","sourceRoot":"","sources":["../../../src/vista/html/CustomUiFrame.tsx"],"names":[],"mappings":"AA4BA,OAAO,EAAwC,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAGhF,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAS7D,MAAM,MAAM,oBAAoB,GAC5B;IAEE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAEhC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,GACD;IAEE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEN,MAAM,WAAW,kBAAkB,CAAC,OAAO;IAEzC,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;IAEvC,QAAQ,CAAC,cAAc,CAAC,EAAE,sBAAsB,CAAC;IAEjD,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAM7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAE3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAID,wBAAgB,aAAa,CAAC,OAAO,EAAE,EACrC,OAAO,EACP,cAA4B,EAC5B,OAAO,EACP,QAAoC,EACpC,KAAK,EACL,SAAS,GACV,EAAE,kBAAkB,CAAC,OAAO,CAAC,GAAG,YAAY,CAsH5C;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,69 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { AlertTriangle } from 'lucide-react';
3
+ import { useEffect, useMemo, useRef, useState } from 'react';
4
+ import { classifyFrameMessage } from './custom-ui-frame-bridge';
5
+ import { hostPropsMessage, } from './custom-ui-frame-contract';
6
+ import { CUSTOM_UI_FRAME_RESET_CSS, buildCustomUiSrcDoc, buildUntrustedHtmlSrcDoc, } from './custom-ui-srcdoc';
7
+ import { cn } from '../../ui/cn';
8
+ const EMPTY_PROPS = {};
9
+ export function CustomUiFrame({ content, componentProps = EMPTY_PROPS, intents, styleCss = CUSTOM_UI_FRAME_RESET_CSS, title, className, }) {
10
+ const iframeRef = useRef(null);
11
+ const [frameError, setFrameError] = useState(null);
12
+ const propsRef = useRef(componentProps);
13
+ propsRef.current = componentProps;
14
+ const intentsRef = useRef(intents);
15
+ intentsRef.current = intents;
16
+ const readyRef = useRef(false);
17
+ const isCompiled = 'compiledOutput' in content;
18
+ const compiledOutput = isCompiled ? content.compiledOutput : null;
19
+ const integrity = isCompiled ? content.integrity : null;
20
+ const document = isCompiled ? null : content.document;
21
+ const srcDoc = useMemo(() => {
22
+ try {
23
+ return compiledOutput !== null && integrity !== null
24
+ ? buildCustomUiSrcDoc({ compiledOutput, integrity, styleCss })
25
+ : buildUntrustedHtmlSrcDoc({ document: document ?? '', styleCss });
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }, [compiledOutput, integrity, document, styleCss]);
31
+ useEffect(() => {
32
+ readyRef.current = false;
33
+ setFrameError(null);
34
+ }, [srcDoc]);
35
+ useEffect(() => {
36
+ function onMessage(event) {
37
+ const frameWindow = iframeRef.current?.contentWindow ?? null;
38
+ const classified = classifyFrameMessage(event, frameWindow, intentsRef.current.parse);
39
+ switch (classified.kind) {
40
+ case 'ready':
41
+ readyRef.current = true;
42
+ setFrameError(null);
43
+ frameWindow?.postMessage(hostPropsMessage(propsRef.current), '*');
44
+ return;
45
+ case 'intent':
46
+ intentsRef.current.perform(classified.intent);
47
+ return;
48
+ case 'error':
49
+ setFrameError(classified.message);
50
+ return;
51
+ case 'ignored':
52
+ return;
53
+ }
54
+ }
55
+ window.addEventListener('message', onMessage);
56
+ return () => window.removeEventListener('message', onMessage);
57
+ }, []);
58
+ useEffect(() => {
59
+ if (!readyRef.current)
60
+ return;
61
+ iframeRef.current?.contentWindow?.postMessage(hostPropsMessage(componentProps), '*');
62
+ }, [componentProps]);
63
+ if (srcDoc === null) {
64
+ return (_jsx("div", { className: className, children: _jsxs("div", { role: "alert", className: "flex items-start gap-2 rounded border border-destructive/40 bg-destructive/5 p-3 text-sm text-destructive", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-4 w-4 shrink-0" }), _jsx("span", { children: "This custom view could not be prepared safely and was not rendered." })] }) }));
65
+ }
66
+ return (_jsxs("div", { className: cn('flex h-full min-h-0 flex-col', className), children: [frameError !== null ? (_jsxs("div", { role: "alert", className: "mb-2 flex items-start gap-2 rounded border border-destructive/40 bg-destructive/5 p-3 text-sm text-destructive", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-4 w-4 shrink-0" }), _jsxs("span", { children: ["This custom view failed to render: ", frameError] })] })) : null, _jsx("iframe", { ref: iframeRef, title: title, sandbox: "allow-scripts", srcDoc: srcDoc, className: "min-h-[24rem] w-full flex-1 rounded border border-rule bg-paper" })] }));
67
+ }
68
+ export default CustomUiFrame;
69
+ //# sourceMappingURL=CustomUiFrame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CustomUiFrame.js","sourceRoot":"","sources":["../../../src/vista/html/CustomUiFrame.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export type ClassifiedFrameMessage<TIntent> = {
2
+ readonly kind: 'ready';
3
+ } | {
4
+ readonly kind: 'intent';
5
+ readonly intent: TIntent;
6
+ } | {
7
+ readonly kind: 'error';
8
+ readonly message: string;
9
+ } | {
10
+ readonly kind: 'ignored';
11
+ };
12
+ export declare function classifyFrameMessage<TIntent>(event: Pick<MessageEvent, 'source' | 'data'>, frameWindow: Window | null, parseIntent: (raw: unknown) => TIntent | null): ClassifiedFrameMessage<TIntent>;
13
+ //# sourceMappingURL=custom-ui-frame-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-ui-frame-bridge.d.ts","sourceRoot":"","sources":["../../../src/vista/html/custom-ui-frame-bridge.ts"],"names":[],"mappings":"AAgCA,MAAM,MAAM,sBAAsB,CAAC,OAAO,IACtC;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAWjC,wBAAgB,oBAAoB,CAAC,OAAO,EAC1C,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,MAAM,CAAC,EAC5C,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,WAAW,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,GAAG,IAAI,GAC5C,sBAAsB,CAAC,OAAO,CAAC,CAwCjC"}
@@ -0,0 +1,30 @@
1
+ import { CUSTOM_UI_FRAME_PROTOCOL, CustomUiFrameMessageType, } from './custom-ui-frame-contract';
2
+ const IGNORED = { kind: 'ignored' };
3
+ export function classifyFrameMessage(event, frameWindow, parseIntent) {
4
+ if (frameWindow === null || event.source !== frameWindow)
5
+ return IGNORED;
6
+ const data = event.data;
7
+ if (data === null || typeof data !== 'object')
8
+ return IGNORED;
9
+ const envelope = data;
10
+ if (envelope.protocol !== CUSTOM_UI_FRAME_PROTOCOL)
11
+ return IGNORED;
12
+ switch (envelope.type) {
13
+ case CustomUiFrameMessageType.FrameReady:
14
+ return { kind: 'ready' };
15
+ case CustomUiFrameMessageType.FrameIntent: {
16
+ const intent = parseIntent(envelope.intent);
17
+ return intent === null ? IGNORED : { kind: 'intent', intent };
18
+ }
19
+ case CustomUiFrameMessageType.FrameError:
20
+ return {
21
+ kind: 'error',
22
+ message: typeof envelope.message === 'string'
23
+ ? envelope.message
24
+ : 'The custom view failed to render.',
25
+ };
26
+ default:
27
+ return IGNORED;
28
+ }
29
+ }
30
+ //# sourceMappingURL=custom-ui-frame-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-ui-frame-bridge.js","sourceRoot":"","sources":["../../../src/vista/html/custom-ui-frame-bridge.ts"],"names":[],"mappings":"AA0BA,OAAO,EACL,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AASpC,MAAM,OAAO,GAAkC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AASnE,MAAM,UAAU,oBAAoB,CAClC,KAA4C,EAC5C,WAA0B,EAC1B,WAA6C;IAI7C,IAAI,WAAW,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,OAAO,CAAC;IAEzE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAC9D,MAAM,QAAQ,GAAG,IAKhB,CAAC;IAGF,IAAI,QAAQ,CAAC,QAAQ,KAAK,wBAAwB;QAAE,OAAO,OAAO,CAAC;IAGnE,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,wBAAwB,CAAC,UAAU;YACtC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC3B,KAAK,wBAAwB,CAAC,WAAW,CAAC,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAG5C,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAChE,CAAC;QACD,KAAK,wBAAwB,CAAC,UAAU;YACtC,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,OAAO,EACL,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ;oBAClC,CAAC,CAAC,QAAQ,CAAC,OAAO;oBAClB,CAAC,CAAC,mCAAmC;aAC1C,CAAC;QACJ;YAGE,OAAO,OAAO,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,29 @@
1
+ export declare const CUSTOM_UI_FRAME_PROTOCOL: 1;
2
+ export declare enum CustomUiFrameMessageType {
3
+ FrameReady = "xema.customui.frameReady",
4
+ HostProps = "xema.customui.hostProps",
5
+ FrameIntent = "xema.customui.frameIntent",
6
+ FrameError = "xema.customui.frameError"
7
+ }
8
+ export interface FrameReadyMessage {
9
+ readonly type: CustomUiFrameMessageType.FrameReady;
10
+ readonly protocol: typeof CUSTOM_UI_FRAME_PROTOCOL;
11
+ }
12
+ export interface HostPropsMessage {
13
+ readonly type: CustomUiFrameMessageType.HostProps;
14
+ readonly protocol: typeof CUSTOM_UI_FRAME_PROTOCOL;
15
+ readonly props: CustomUiComponentProps;
16
+ }
17
+ export interface FrameIntentMessage {
18
+ readonly type: CustomUiFrameMessageType.FrameIntent;
19
+ readonly protocol: typeof CUSTOM_UI_FRAME_PROTOCOL;
20
+ readonly intent: unknown;
21
+ }
22
+ export interface FrameErrorMessage {
23
+ readonly type: CustomUiFrameMessageType.FrameError;
24
+ readonly protocol: typeof CUSTOM_UI_FRAME_PROTOCOL;
25
+ readonly message: string;
26
+ }
27
+ export type CustomUiComponentProps = Record<string, unknown>;
28
+ export declare function hostPropsMessage(props: CustomUiComponentProps): HostPropsMessage;
29
+ //# sourceMappingURL=custom-ui-frame-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-ui-frame-contract.d.ts","sourceRoot":"","sources":["../../../src/vista/html/custom-ui-frame-contract.ts"],"names":[],"mappings":"AAwBA,eAAO,MAAM,wBAAwB,EAAG,CAAU,CAAC;AAWnD,oBAAY,wBAAwB;IAClC,UAAU,6BAA6B;IACvC,SAAS,4BAA4B;IACrC,WAAW,8BAA8B;IACzC,UAAU,6BAA6B;CACxC;AAGD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC,UAAU,CAAC;IACnD,QAAQ,CAAC,QAAQ,EAAE,OAAO,wBAAwB,CAAC;CACpD;AAGD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC,SAAS,CAAC;IAClD,QAAQ,CAAC,QAAQ,EAAE,OAAO,wBAAwB,CAAC;IACnD,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC;CACxC;AAGD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC,WAAW,CAAC;IACpD,QAAQ,CAAC,QAAQ,EAAE,OAAO,wBAAwB,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAGD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC,UAAU,CAAC;IACnD,QAAQ,CAAC,QAAQ,EAAE,OAAO,wBAAwB,CAAC;IACnD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AASD,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAG7D,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,sBAAsB,GAC5B,gBAAgB,CAMlB"}
@@ -0,0 +1,16 @@
1
+ export const CUSTOM_UI_FRAME_PROTOCOL = 1;
2
+ export var CustomUiFrameMessageType;
3
+ (function (CustomUiFrameMessageType) {
4
+ CustomUiFrameMessageType["FrameReady"] = "xema.customui.frameReady";
5
+ CustomUiFrameMessageType["HostProps"] = "xema.customui.hostProps";
6
+ CustomUiFrameMessageType["FrameIntent"] = "xema.customui.frameIntent";
7
+ CustomUiFrameMessageType["FrameError"] = "xema.customui.frameError";
8
+ })(CustomUiFrameMessageType || (CustomUiFrameMessageType = {}));
9
+ export function hostPropsMessage(props) {
10
+ return {
11
+ type: CustomUiFrameMessageType.HostProps,
12
+ protocol: CUSTOM_UI_FRAME_PROTOCOL,
13
+ props,
14
+ };
15
+ }
16
+ //# sourceMappingURL=custom-ui-frame-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-ui-frame-contract.js","sourceRoot":"","sources":["../../../src/vista/html/custom-ui-frame-contract.ts"],"names":[],"mappings":"AAwBA,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAU,CAAC;AAWnD,MAAM,CAAN,IAAY,wBAKX;AALD,WAAY,wBAAwB;IAClC,mEAAuC,CAAA;IACvC,iEAAqC,CAAA;IACrC,qEAAyC,CAAA;IACzC,mEAAuC,CAAA;AACzC,CAAC,EALW,wBAAwB,KAAxB,wBAAwB,QAKnC;AAuCD,MAAM,UAAU,gBAAgB,CAC9B,KAA6B;IAE7B,OAAO;QACL,IAAI,EAAE,wBAAwB,CAAC,SAAS;QACxC,QAAQ,EAAE,wBAAwB;QAClC,KAAK;KACN,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ export interface CustomUiIntentSet<TIntent> {
2
+ parse(raw: unknown): TIntent | null;
3
+ perform(intent: TIntent): void;
4
+ }
5
+ export declare enum CustomUiIntentKind {
6
+ Navigate = "navigate"
7
+ }
8
+ export interface NavigateIntent {
9
+ readonly kind: CustomUiIntentKind.Navigate;
10
+ readonly href: string;
11
+ }
12
+ export type CustomUiIntent = NavigateIntent;
13
+ export interface CustomUiIntentHandlers {
14
+ readonly [CustomUiIntentKind.Navigate]: (intent: NavigateIntent) => void;
15
+ }
16
+ export declare function parseCustomUiIntent(raw: unknown): CustomUiIntent | null;
17
+ export declare function performCustomUiIntent(intent: CustomUiIntent, handlers: CustomUiIntentHandlers): void;
18
+ export declare function createNavigateIntentSet(handlers: CustomUiIntentHandlers): CustomUiIntentSet<CustomUiIntent>;
19
+ export declare const NO_CUSTOM_UI_INTENTS: CustomUiIntentSet<never>;
20
+ //# sourceMappingURL=custom-ui-intents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-ui-intents.d.ts","sourceRoot":"","sources":["../../../src/vista/html/custom-ui-intents.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,iBAAiB,CAAC,OAAO;IACxC,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;CAChC;AAGD,oBAAY,kBAAkB;IAE5B,QAAQ,aAAa;CACtB;AAOD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC,QAAQ,CAAC;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAGD,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC;AAQ5C,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;CAC1E;AA0CD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CAWvE;AAQD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,sBAAsB,GAC/B,IAAI,CAUN;AAGD,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,sBAAsB,GAC/B,iBAAiB,CAAC,cAAc,CAAC,CAKnC;AAQD,eAAO,MAAM,oBAAoB,EAAE,iBAAiB,CAAC,KAAK,CAGzD,CAAC"}
@@ -0,0 +1,57 @@
1
+ export var CustomUiIntentKind;
2
+ (function (CustomUiIntentKind) {
3
+ CustomUiIntentKind["Navigate"] = "navigate";
4
+ })(CustomUiIntentKind || (CustomUiIntentKind = {}));
5
+ function isHostRelativePath(href) {
6
+ if (!href.startsWith('/'))
7
+ return false;
8
+ if (href.includes('\\'))
9
+ return false;
10
+ if (/[\u0000-\u0020\u007f]/.test(href))
11
+ return false;
12
+ let resolved;
13
+ try {
14
+ resolved = new URL(href, window.location.origin);
15
+ }
16
+ catch {
17
+ return false;
18
+ }
19
+ return resolved.origin === window.location.origin;
20
+ }
21
+ export function parseCustomUiIntent(raw) {
22
+ if (raw === null || typeof raw !== 'object')
23
+ return null;
24
+ const candidate = raw;
25
+ switch (candidate.kind) {
26
+ case CustomUiIntentKind.Navigate:
27
+ if (typeof candidate.href !== 'string')
28
+ return null;
29
+ if (!isHostRelativePath(candidate.href))
30
+ return null;
31
+ return { kind: CustomUiIntentKind.Navigate, href: candidate.href };
32
+ default:
33
+ return null;
34
+ }
35
+ }
36
+ export function performCustomUiIntent(intent, handlers) {
37
+ switch (intent.kind) {
38
+ case CustomUiIntentKind.Navigate:
39
+ handlers[CustomUiIntentKind.Navigate](intent);
40
+ return;
41
+ default: {
42
+ const exhaustive = intent.kind;
43
+ throw new Error(`Unhandled custom-UI intent kind: ${String(exhaustive)}`);
44
+ }
45
+ }
46
+ }
47
+ export function createNavigateIntentSet(handlers) {
48
+ return {
49
+ parse: parseCustomUiIntent,
50
+ perform: (intent) => performCustomUiIntent(intent, handlers),
51
+ };
52
+ }
53
+ export const NO_CUSTOM_UI_INTENTS = {
54
+ parse: () => null,
55
+ perform: () => undefined,
56
+ };
57
+ //# sourceMappingURL=custom-ui-intents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-ui-intents.js","sourceRoot":"","sources":["../../../src/vista/html/custom-ui-intents.ts"],"names":[],"mappings":"AA6BA,MAAM,CAAN,IAAY,kBAGX;AAHD,WAAY,kBAAkB;IAE5B,2CAAqB,CAAA;AACvB,CAAC,EAHW,kBAAkB,KAAlB,kBAAkB,QAG7B;AAwCD,SAAS,kBAAkB,CAAC,IAAY;IAEtC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAIxC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAEtC,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACrD,IAAI,QAAa,CAAC;IAClB,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AACpD,CAAC;AAQD,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzD,MAAM,SAAS,GAAG,GAAyC,CAAC;IAC5D,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;QACvB,KAAK,kBAAkB,CAAC,QAAQ;YAC9B,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YACpD,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YACrD,OAAO,EAAE,IAAI,EAAE,kBAAkB,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;QACrE;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAQD,MAAM,UAAU,qBAAqB,CACnC,MAAsB,EACtB,QAAgC;IAEhC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,kBAAkB,CAAC,QAAQ;YAC9B,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;YAC9C,OAAO;QACT,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,UAAU,GAAU,MAAM,CAAC,IAAI,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,oCAAoC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;AACH,CAAC;AAGD,MAAM,UAAU,uBAAuB,CACrC,QAAgC;IAEhC,OAAO;QACL,KAAK,EAAE,mBAAmB;QAC1B,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC;KAC7D,CAAC;AACJ,CAAC;AAQD,MAAM,CAAC,MAAM,oBAAoB,GAA6B;IAC5D,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI;IACjB,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;CACzB,CAAC"}
@@ -0,0 +1,17 @@
1
+ export declare const CUSTOM_UI_FRAME_RESET_CSS = "\n*, *::before, *::after { box-sizing: border-box; }\nhtml, body { margin: 0; padding: 0; }\nbody {\n font-family: ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif;\n color: hsl(var(--foreground, 228 14% 11%));\n background: transparent;\n}\n#root { min-height: 100%; }\n";
2
+ export declare function buildCustomUiFrameCsp(integrity: string): string;
3
+ export declare function buildUntrustedHtmlFrameCsp(): string;
4
+ export interface CustomUiSrcDocInput {
5
+ readonly compiledOutput: string;
6
+ readonly integrity: string;
7
+ readonly styleCss: string;
8
+ }
9
+ export declare class CustomUiSrcDocError extends Error {
10
+ }
11
+ export declare function buildCustomUiSrcDoc({ compiledOutput, integrity, styleCss, }: CustomUiSrcDocInput): string;
12
+ export interface UntrustedHtmlSrcDocInput {
13
+ readonly document: string;
14
+ readonly styleCss: string;
15
+ }
16
+ export declare function buildUntrustedHtmlSrcDoc({ document, styleCss, }: UntrustedHtmlSrcDocInput): string;
17
+ //# sourceMappingURL=custom-ui-srcdoc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-ui-srcdoc.d.ts","sourceRoot":"","sources":["../../../src/vista/html/custom-ui-srcdoc.ts"],"names":[],"mappings":"AAkCA,eAAO,MAAM,yBAAyB,gTASrC,CAAC;AAwBF,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE/D;AAMD,wBAAgB,0BAA0B,IAAI,MAAM,CAEnD;AAGD,MAAM,WAAW,mBAAmB;IAElC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAEhC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAM3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAMD,qBAAa,mBAAoB,SAAQ,KAAK;CAAG;AA+BjD,wBAAgB,mBAAmB,CAAC,EAClC,cAAc,EACd,SAAS,EACT,QAAQ,GACT,EAAE,mBAAmB,GAAG,MAAM,CAiB9B;AAGD,MAAM,WAAW,wBAAwB;IAEvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAgBD,wBAAgB,wBAAwB,CAAC,EACvC,QAAQ,EACR,QAAQ,GACT,EAAE,wBAAwB,GAAG,MAAM,CAgBnC"}
@@ -0,0 +1,70 @@
1
+ export const CUSTOM_UI_FRAME_RESET_CSS = `
2
+ *, *::before, *::after { box-sizing: border-box; }
3
+ html, body { margin: 0; padding: 0; }
4
+ body {
5
+ font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
6
+ color: hsl(var(--foreground, 228 14% 11%));
7
+ background: transparent;
8
+ }
9
+ #root { min-height: 100%; }
10
+ `;
11
+ function buildFrameCsp(scriptSource) {
12
+ return [
13
+ `default-src 'none'`,
14
+ `script-src ${scriptSource}`,
15
+ `style-src 'unsafe-inline'`,
16
+ `base-uri 'none'`,
17
+ `form-action 'none'`,
18
+ ].join('; ');
19
+ }
20
+ export function buildCustomUiFrameCsp(integrity) {
21
+ return buildFrameCsp(`'${integrity}'`);
22
+ }
23
+ export function buildUntrustedHtmlFrameCsp() {
24
+ return buildFrameCsp(`'none'`);
25
+ }
26
+ export class CustomUiSrcDocError extends Error {
27
+ }
28
+ function assertNoScriptTerminator(source, what) {
29
+ if (/<\/script/i.test(source)) {
30
+ throw new CustomUiSrcDocError(`${what} contains a literal "</script" — it would truncate the inline ` +
31
+ 'module. The producer must emit escaped bytes; refusing to build a ' +
32
+ 'mis-rendered frame.');
33
+ }
34
+ }
35
+ export function buildCustomUiSrcDoc({ compiledOutput, integrity, styleCss, }) {
36
+ assertNoScriptTerminator(compiledOutput, 'compiled custom-UI chunk');
37
+ const csp = buildCustomUiFrameCsp(integrity);
38
+ return [
39
+ `<!doctype html>`,
40
+ `<html>`,
41
+ `<head>`,
42
+ `<meta charset="utf-8" />`,
43
+ `<meta http-equiv="Content-Security-Policy" content="${csp}" />`,
44
+ `<style>${styleCss}</style>`,
45
+ `</head>`,
46
+ `<body>`,
47
+ `<div id="root"></div>`,
48
+ `<script type="module">${compiledOutput}</script>`,
49
+ `</body>`,
50
+ `</html>`,
51
+ ].join('\n');
52
+ }
53
+ export function buildUntrustedHtmlSrcDoc({ document, styleCss, }) {
54
+ assertNoScriptTerminator(document, 'untrusted HTML document');
55
+ const csp = buildUntrustedHtmlFrameCsp();
56
+ return [
57
+ `<!doctype html>`,
58
+ `<html>`,
59
+ `<head>`,
60
+ `<meta charset="utf-8" />`,
61
+ `<meta http-equiv="Content-Security-Policy" content="${csp}" />`,
62
+ `<style>${styleCss}</style>`,
63
+ `</head>`,
64
+ `<body>`,
65
+ document,
66
+ `</body>`,
67
+ `</html>`,
68
+ ].join('\n');
69
+ }
70
+ //# sourceMappingURL=custom-ui-srcdoc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-ui-srcdoc.js","sourceRoot":"","sources":["../../../src/vista/html/custom-ui-srcdoc.ts"],"names":[],"mappings":"AAkCA,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;;;;;;CASxC,CAAC;AAQF,SAAS,aAAa,CAAC,YAAoB;IACzC,OAAO;QACL,oBAAoB;QACpB,cAAc,YAAY,EAAE;QAC5B,2BAA2B;QAC3B,iBAAiB;QACjB,oBAAoB;KACrB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAQD,MAAM,UAAU,qBAAqB,CAAC,SAAiB;IACrD,OAAO,aAAa,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC;AACzC,CAAC;AAMD,MAAM,UAAU,0BAA0B;IACxC,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAoBD,MAAM,OAAO,mBAAoB,SAAQ,KAAK;CAAG;AAWjD,SAAS,wBAAwB,CAAC,MAAc,EAAE,IAAY;IAC5D,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,mBAAmB,CAC3B,GAAG,IAAI,gEAAgE;YACrE,oEAAoE;YACpE,qBAAqB,CACxB,CAAC;IACJ,CAAC;AACH,CAAC;AAYD,MAAM,UAAU,mBAAmB,CAAC,EAClC,cAAc,EACd,SAAS,EACT,QAAQ,GACY;IACpB,wBAAwB,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;IACrE,MAAM,GAAG,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC7C,OAAO;QACL,iBAAiB;QACjB,QAAQ;QACR,QAAQ;QACR,0BAA0B;QAC1B,uDAAuD,GAAG,MAAM;QAChE,UAAU,QAAQ,UAAU;QAC5B,SAAS;QACT,QAAQ;QACR,uBAAuB;QACvB,yBAAyB,cAAc,WAAW;QAClD,SAAS;QACT,SAAS;KACV,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAwBD,MAAM,UAAU,wBAAwB,CAAC,EACvC,QAAQ,EACR,QAAQ,GACiB;IACzB,wBAAwB,CAAC,QAAQ,EAAE,yBAAyB,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,0BAA0B,EAAE,CAAC;IACzC,OAAO;QACL,iBAAiB;QACjB,QAAQ;QACR,QAAQ;QACR,0BAA0B;QAC1B,uDAAuD,GAAG,MAAM;QAChE,UAAU,QAAQ,UAAU;QAC5B,SAAS;QACT,QAAQ;QACR,QAAQ;QACR,SAAS;QACT,SAAS;KACV,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from './custom-ui-frame-contract';
2
+ export * from './custom-ui-intents';
3
+ export * from './custom-ui-srcdoc';
4
+ export * from './custom-ui-frame-bridge';
5
+ export * from './CustomUiFrame';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/vista/html/index.ts"],"names":[],"mappings":"AAQA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from './custom-ui-frame-contract';
2
+ export * from './custom-ui-intents';
3
+ export * from './custom-ui-srcdoc';
4
+ export * from './custom-ui-frame-bridge';
5
+ export * from './CustomUiFrame';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/vista/html/index.ts"],"names":[],"mappings":"AAQA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,18 @@
1
+ export * from './surface-registry';
2
+ export * from './surface-catalogue';
3
+ export * from './surface-icons';
4
+ export * from './GenericCatalogueSurface';
5
+ export * from './SurfaceFallbackCard';
6
+ export * from './vista-model';
7
+ export * from './vista-payloads';
8
+ export * from './vista-tabs-manifest';
9
+ export * from './vista-file-source';
10
+ export * from './vista-form-host';
11
+ export * from './vista-code-renderer';
12
+ export * from './vista-open-context';
13
+ export * from './use-vista-tabs';
14
+ export * from './VistaPanel';
15
+ export * from './vista-tools';
16
+ export * from './html';
17
+ export * from './surfaces';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vista/index.ts"],"names":[],"mappings":"AA6BA,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AAGvB,cAAc,YAAY,CAAC"}
@@ -0,0 +1,18 @@
1
+ export * from './surface-registry';
2
+ export * from './surface-catalogue';
3
+ export * from './surface-icons';
4
+ export * from './GenericCatalogueSurface';
5
+ export * from './SurfaceFallbackCard';
6
+ export * from './vista-model';
7
+ export * from './vista-payloads';
8
+ export * from './vista-tabs-manifest';
9
+ export * from './vista-file-source';
10
+ export * from './vista-form-host';
11
+ export * from './vista-code-renderer';
12
+ export * from './vista-open-context';
13
+ export * from './use-vista-tabs';
14
+ export * from './VistaPanel';
15
+ export * from './vista-tools';
16
+ export * from './html';
17
+ export * from './surfaces';
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vista/index.ts"],"names":[],"mappings":"AA6BA,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AAGvB,cAAc,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { type SurfaceKindCatalogueEntry } from '@xemahq/kernel-contracts/surface';
2
+ export type SurfaceCatalogueFetcher = () => Promise<readonly SurfaceKindCatalogueEntry[]>;
3
+ export declare function __resetSurfaceCatalogueSyncForTests(): void;
4
+ export declare function syncSurfaceCatalogue(fetchCatalogue: SurfaceCatalogueFetcher): Promise<void>;
5
+ //# sourceMappingURL=surface-catalogue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface-catalogue.d.ts","sourceRoot":"","sources":["../../src/vista/surface-catalogue.ts"],"names":[],"mappings":"AA6BA,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,kCAAkC,CAAC;AAM1C,MAAM,MAAM,uBAAuB,GAAG,MAAM,OAAO,CACjD,SAAS,yBAAyB,EAAE,CACrC,CAAC;AAKF,wBAAgB,mCAAmC,IAAI,IAAI,CAE1D;AAOD,wBAAsB,oBAAoB,CACxC,cAAc,EAAE,uBAAuB,GACtC,OAAO,CAAC,IAAI,CAAC,CA2Bf"}