@seed-ship/mcp-ui-solid 1.0.31 → 1.0.33
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/dist/components/GenerativeUIErrorBoundary.cjs +23 -10
- package/dist/components/GenerativeUIErrorBoundary.cjs.map +1 -1
- package/dist/components/GenerativeUIErrorBoundary.d.ts.map +1 -1
- package/dist/components/GenerativeUIErrorBoundary.js +23 -10
- package/dist/components/GenerativeUIErrorBoundary.js.map +1 -1
- package/dist/components/UIResourceRenderer.cjs +13 -7
- package/dist/components/UIResourceRenderer.cjs.map +1 -1
- package/dist/components/UIResourceRenderer.d.ts.map +1 -1
- package/dist/components/UIResourceRenderer.js +14 -8
- package/dist/components/UIResourceRenderer.js.map +1 -1
- package/package.json +1 -1
- package/src/components/GenerativeUIErrorBoundary.tsx +36 -9
- package/src/components/UIResourceRenderer.tsx +16 -8
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -41,11 +41,30 @@ function DefaultErrorFallback(props) {
|
|
|
41
41
|
}
|
|
42
42
|
const GenerativeUIErrorBoundary = (props) => {
|
|
43
43
|
const [retryKey, setRetryKey] = solidJs.createSignal(0);
|
|
44
|
-
|
|
44
|
+
let initialRenderTime = 0;
|
|
45
|
+
if (!web.isServer && typeof performance !== "undefined") {
|
|
46
|
+
initialRenderTime = performance.now();
|
|
47
|
+
}
|
|
48
|
+
const [renderStartTime] = solidJs.createSignal(initialRenderTime);
|
|
45
49
|
const handleError = (error) => {
|
|
46
50
|
var _a;
|
|
47
|
-
|
|
51
|
+
let renderEndTime = 0;
|
|
52
|
+
if (!web.isServer && typeof performance !== "undefined") {
|
|
53
|
+
renderEndTime = performance.now();
|
|
54
|
+
}
|
|
48
55
|
const renderDuration = renderEndTime - renderStartTime();
|
|
56
|
+
let userAgent = "server";
|
|
57
|
+
let viewport = {
|
|
58
|
+
width: 0,
|
|
59
|
+
height: 0
|
|
60
|
+
};
|
|
61
|
+
if (!web.isServer && typeof window !== "undefined") {
|
|
62
|
+
userAgent = navigator.userAgent;
|
|
63
|
+
viewport = {
|
|
64
|
+
width: window.innerWidth,
|
|
65
|
+
height: window.innerHeight
|
|
66
|
+
};
|
|
67
|
+
}
|
|
49
68
|
const errorContext = {
|
|
50
69
|
componentId: props.componentId,
|
|
51
70
|
componentType: props.componentType,
|
|
@@ -54,14 +73,8 @@ const GenerativeUIErrorBoundary = (props) => {
|
|
|
54
73
|
renderDuration,
|
|
55
74
|
retryCount: retryKey(),
|
|
56
75
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
57
|
-
userAgent
|
|
58
|
-
viewport
|
|
59
|
-
width: 0,
|
|
60
|
-
height: 0
|
|
61
|
-
} : {
|
|
62
|
-
width: window.innerWidth,
|
|
63
|
-
height: window.innerHeight
|
|
64
|
-
}
|
|
76
|
+
userAgent,
|
|
77
|
+
viewport
|
|
65
78
|
};
|
|
66
79
|
logger.error(`Component render failed: ${props.componentType}`, errorContext);
|
|
67
80
|
(_a = props.onError) == null ? void 0 : _a.call(props, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenerativeUIErrorBoundary.cjs","sources":["../../src/components/GenerativeUIErrorBoundary.tsx"],"sourcesContent":["/**\n * Generative UI Error Boundary with Telemetry\n * Phase 0: Error isolation + structured logging\n *\n * Features:\n * - Component-level error isolation\n * - Structured logging with context\n * - Performance timing\n * - Retry mechanism\n * - User-friendly fallback UI\n */\n\nimport { Component, ErrorBoundary, createSignal, Show } from 'solid-js'\nimport { isServer } from 'solid-js/web'\nimport { createLogger } from '../utils/logger'\nimport type { RendererError } from '../types'\n\nconst logger = createLogger('generative-ui')\n\n/**\n * Props for GenerativeUIErrorBoundary\n */\nexport interface GenerativeUIErrorBoundaryProps {\n /**\n * Component identifier for telemetry\n */\n componentId: string\n\n /**\n * Component type for context\n */\n componentType: string\n\n /**\n * Error callback\n */\n onError?: (error: RendererError) => void\n\n /**\n * Allow retry on error\n */\n allowRetry?: boolean\n\n /**\n * Child components to wrap\n */\n children: any\n\n /**\n * Custom fallback UI (optional)\n */\n fallback?: (error: Error, retry?: () => void) => any\n}\n\n/**\n * Default fallback UI for errors\n */\nfunction DefaultErrorFallback(props: {\n error: Error\n componentId: string\n componentType: string\n allowRetry?: boolean\n onRetry?: () => void\n}) {\n return (\n <div class=\"w-full h-full bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 rounded-lg p-4\">\n <div class=\"flex items-start gap-3\">\n <div class=\"flex-shrink-0\">\n <svg\n class=\"w-5 h-5 text-yellow-600 dark:text-yellow-400\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"\n />\n </svg>\n </div>\n <div class=\"flex-1 min-w-0\">\n <p class=\"text-sm font-medium text-yellow-900 dark:text-yellow-100\">\n Component Failed to Render\n </p>\n <p class=\"text-xs text-yellow-700 dark:text-yellow-300 mt-1\">\n Type: {props.componentType || 'unknown'} | ID: {props.componentId?.slice(0, 8) || 'unknown'}...\n </p>\n <Show when={import.meta.env.DEV}>\n <p class=\"text-xs text-yellow-600 dark:text-yellow-400 mt-2 font-mono\">\n {props.error.message}\n </p>\n </Show>\n <Show when={props.allowRetry}>\n <button\n onClick={props.onRetry}\n class=\"mt-3 text-xs font-medium text-yellow-800 dark:text-yellow-200 hover:text-yellow-900 dark:hover:text-yellow-100 underline\"\n >\n Retry Rendering\n </button>\n </Show>\n </div>\n </div>\n </div>\n )\n}\n\n/**\n * Generative UI Error Boundary Component\n */\nexport const GenerativeUIErrorBoundary: Component<GenerativeUIErrorBoundaryProps> = (props) => {\n const [retryKey, setRetryKey] = createSignal(0)\n const [renderStartTime] = createSignal(isServer ? 0 : performance.now())\n\n // Handle error with telemetry\n const handleError = (error: Error) => {\n const renderEndTime = isServer ? 0 : performance.now()\n const renderDuration = renderEndTime - renderStartTime()\n\n // Structure error context\n const errorContext = {\n componentId: props.componentId,\n componentType: props.componentType,\n errorMessage: error.message,\n errorStack: error.stack,\n renderDuration,\n retryCount: retryKey(),\n timestamp: new Date().toISOString(),\n userAgent: isServer ? 'server' : navigator.userAgent,\n viewport: isServer\n ? { width: 0, height: 0 }\n : { width: window.innerWidth, height: window.innerHeight },\n }\n\n // Log to structured logger\n logger.error(`Component render failed: ${props.componentType}`, errorContext)\n\n // Call error callback\n props.onError?.({\n type: 'render',\n message: error.message,\n componentId: props.componentId,\n details: errorContext,\n })\n\n // In production, send to monitoring service\n if (import.meta.env.PROD) {\n // Future: Send to Sentry or other APM\n // Sentry.captureException(error, { contexts: { component: errorContext } })\n }\n }\n\n // Retry mechanism\n const handleRetry = () => {\n const newRetryCount = retryKey() + 1\n logger.info(`Retrying component render: ${props.componentType}`, {\n componentId: props.componentId,\n retryCount: newRetryCount,\n })\n setRetryKey(newRetryCount)\n }\n\n return (\n <ErrorBoundary\n fallback={(error) => {\n handleError(error)\n\n // Use custom fallback if provided\n if (props.fallback) {\n return props.fallback(error, props.allowRetry ? handleRetry : undefined)\n }\n\n // Default fallback\n return (\n <DefaultErrorFallback\n error={error}\n componentId={props.componentId}\n componentType={props.componentType}\n allowRetry={props.allowRetry}\n onRetry={handleRetry}\n />\n )\n }}\n >\n {/* Key prop for forcing remount on retry */}\n {(() => {\n const _ = retryKey() // Access signal to track changes\n return <>{props.children}</>\n })()}\n </ErrorBoundary>\n )\n}\n\n/**\n * Performance monitoring wrapper\n * Logs render times for performance analysis\n */\nexport function withPerformanceMonitoring<P extends { componentId: string; componentType: string }>(\n WrappedComponent: Component<P>\n) {\n return (props: P) => {\n const renderStart = isServer ? 0 : performance.now()\n\n // Log render start\n logger.debug(`Component render start: ${props.componentType}`, {\n componentId: props.componentId,\n timestamp: new Date().toISOString(),\n })\n\n // Measure on mount completion (client-side only)\n if (!isServer && typeof window !== 'undefined') {\n requestAnimationFrame(() => {\n const renderEnd = performance.now()\n const duration = renderEnd - renderStart\n\n logger.info(`Component rendered: ${props.componentType}`, {\n componentId: props.componentId,\n renderDuration: duration,\n timestamp: new Date().toISOString(),\n })\n\n // Warn if render is slow (>50ms target)\n if (duration > 50) {\n logger.warn(`Slow component render: ${props.componentType}`, {\n componentId: props.componentId,\n renderDuration: duration,\n threshold: 50,\n })\n }\n })\n }\n\n return <WrappedComponent {...props} />\n }\n}\n\n/**\n * Hook to track component lifecycle events\n */\nexport function useComponentTelemetry(componentId: string, componentType: string) {\n const mountTime = isServer ? 0 : performance.now()\n\n // Log mount\n logger.debug(`Component mounted: ${componentType}`, {\n componentId,\n timestamp: new Date().toISOString(),\n })\n\n // Return cleanup function for unmount\n return () => {\n const lifetime = isServer ? 0 : performance.now() - mountTime\n logger.debug(`Component unmounted: ${componentType}`, {\n componentId,\n lifetime,\n timestamp: new Date().toISOString(),\n })\n }\n}\n"],"names":["logger","createLogger","DefaultErrorFallback","props","_el$","_$getNextElement","_tmpl$3","_el$2","firstChild","_el$3","_el$4","nextSibling","_el$5","_el$6","_el$7","_el$0","_el$1","_co$","_$getNextMarker","_el$8","_el$10","_el$11","_co$2","_el$14","_el$15","_co$3","_el$16","_el$17","_co$4","_$insert","componentType","componentId","slice","_$createComponent","Show","when","import","children","_el$12","_tmpl$","error","message","allowRetry","_el$13","_tmpl$2","_$addEventListener","onRetry","_$runHydrationEvents","GenerativeUIErrorBoundary","retryKey","setRetryKey","createSignal","renderStartTime","isServer","performance","now","handleError","renderEndTime","renderDuration","errorContext","errorMessage","errorStack","stack","retryCount","timestamp","Date","toISOString","userAgent","navigator","viewport","width","height","window","innerWidth","innerHeight","onError","type","details","handleRetry","newRetryCount","info","ErrorBoundary","fallback","undefined","_$memo","_$delegateEvents"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GenerativeUIErrorBoundary.cjs","sources":["../../src/components/GenerativeUIErrorBoundary.tsx"],"sourcesContent":["/**\n * Generative UI Error Boundary with Telemetry\n * Phase 0: Error isolation + structured logging\n *\n * Features:\n * - Component-level error isolation\n * - Structured logging with context\n * - Performance timing\n * - Retry mechanism\n * - User-friendly fallback UI\n */\n\nimport { Component, ErrorBoundary, createSignal, Show } from 'solid-js'\nimport { isServer } from 'solid-js/web'\nimport { createLogger } from '../utils/logger'\nimport type { RendererError } from '../types'\n\nconst logger = createLogger('generative-ui')\n\n/**\n * Props for GenerativeUIErrorBoundary\n */\nexport interface GenerativeUIErrorBoundaryProps {\n /**\n * Component identifier for telemetry\n */\n componentId: string\n\n /**\n * Component type for context\n */\n componentType: string\n\n /**\n * Error callback\n */\n onError?: (error: RendererError) => void\n\n /**\n * Allow retry on error\n */\n allowRetry?: boolean\n\n /**\n * Child components to wrap\n */\n children: any\n\n /**\n * Custom fallback UI (optional)\n */\n fallback?: (error: Error, retry?: () => void) => any\n}\n\n/**\n * Default fallback UI for errors\n */\nfunction DefaultErrorFallback(props: {\n error: Error\n componentId: string\n componentType: string\n allowRetry?: boolean\n onRetry?: () => void\n}) {\n return (\n <div class=\"w-full h-full bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 rounded-lg p-4\">\n <div class=\"flex items-start gap-3\">\n <div class=\"flex-shrink-0\">\n <svg\n class=\"w-5 h-5 text-yellow-600 dark:text-yellow-400\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"\n />\n </svg>\n </div>\n <div class=\"flex-1 min-w-0\">\n <p class=\"text-sm font-medium text-yellow-900 dark:text-yellow-100\">\n Component Failed to Render\n </p>\n <p class=\"text-xs text-yellow-700 dark:text-yellow-300 mt-1\">\n Type: {props.componentType || 'unknown'} | ID: {props.componentId?.slice(0, 8) || 'unknown'}...\n </p>\n <Show when={import.meta.env.DEV}>\n <p class=\"text-xs text-yellow-600 dark:text-yellow-400 mt-2 font-mono\">\n {props.error.message}\n </p>\n </Show>\n <Show when={props.allowRetry}>\n <button\n onClick={props.onRetry}\n class=\"mt-3 text-xs font-medium text-yellow-800 dark:text-yellow-200 hover:text-yellow-900 dark:hover:text-yellow-100 underline\"\n >\n Retry Rendering\n </button>\n </Show>\n </div>\n </div>\n </div>\n )\n}\n\n/**\n * Generative UI Error Boundary Component\n */\nexport const GenerativeUIErrorBoundary: Component<GenerativeUIErrorBoundaryProps> = (props) => {\n const [retryKey, setRetryKey] = createSignal(0)\n // SSR-safe: Initialize performance timing\n let initialRenderTime = 0\n if (!isServer && typeof performance !== 'undefined') {\n initialRenderTime = performance.now()\n }\n const [renderStartTime] = createSignal(initialRenderTime)\n\n // Handle error with telemetry\n const handleError = (error: Error) => {\n // SSR-safe: Calculate render duration\n let renderEndTime = 0\n if (!isServer && typeof performance !== 'undefined') {\n renderEndTime = performance.now()\n }\n const renderDuration = renderEndTime - renderStartTime()\n\n // SSR-safe: Get client-only context\n let userAgent = 'server'\n let viewport = { width: 0, height: 0 }\n\n if (!isServer && typeof window !== 'undefined') {\n userAgent = navigator.userAgent\n viewport = { width: window.innerWidth, height: window.innerHeight }\n }\n\n // Structure error context\n const errorContext = {\n componentId: props.componentId,\n componentType: props.componentType,\n errorMessage: error.message,\n errorStack: error.stack,\n renderDuration,\n retryCount: retryKey(),\n timestamp: new Date().toISOString(),\n userAgent,\n viewport,\n }\n\n // Log to structured logger\n logger.error(`Component render failed: ${props.componentType}`, errorContext)\n\n // Call error callback\n props.onError?.({\n type: 'render',\n message: error.message,\n componentId: props.componentId,\n details: errorContext,\n })\n\n // In production, send to monitoring service\n if (import.meta.env.PROD) {\n // Future: Send to Sentry or other APM\n // Sentry.captureException(error, { contexts: { component: errorContext } })\n }\n }\n\n // Retry mechanism\n const handleRetry = () => {\n const newRetryCount = retryKey() + 1\n logger.info(`Retrying component render: ${props.componentType}`, {\n componentId: props.componentId,\n retryCount: newRetryCount,\n })\n setRetryKey(newRetryCount)\n }\n\n return (\n <ErrorBoundary\n fallback={(error) => {\n handleError(error)\n\n // Use custom fallback if provided\n if (props.fallback) {\n return props.fallback(error, props.allowRetry ? handleRetry : undefined)\n }\n\n // Default fallback\n return (\n <DefaultErrorFallback\n error={error}\n componentId={props.componentId}\n componentType={props.componentType}\n allowRetry={props.allowRetry}\n onRetry={handleRetry}\n />\n )\n }}\n >\n {/* Key prop for forcing remount on retry */}\n {(() => {\n const _ = retryKey() // Access signal to track changes\n return <>{props.children}</>\n })()}\n </ErrorBoundary>\n )\n}\n\n/**\n * Performance monitoring wrapper\n * Logs render times for performance analysis\n */\nexport function withPerformanceMonitoring<P extends { componentId: string; componentType: string }>(\n WrappedComponent: Component<P>\n) {\n return (props: P) => {\n // SSR-safe: Performance timing\n let renderStart = 0\n if (!isServer && typeof performance !== 'undefined') {\n renderStart = performance.now()\n }\n\n // Log render start\n logger.debug(`Component render start: ${props.componentType}`, {\n componentId: props.componentId,\n timestamp: new Date().toISOString(),\n })\n\n // Measure on mount completion (client-side only)\n if (!isServer && typeof window !== 'undefined') {\n requestAnimationFrame(() => {\n const renderEnd = performance.now()\n const duration = renderEnd - renderStart\n\n logger.info(`Component rendered: ${props.componentType}`, {\n componentId: props.componentId,\n renderDuration: duration,\n timestamp: new Date().toISOString(),\n })\n\n // Warn if render is slow (>50ms target)\n if (duration > 50) {\n logger.warn(`Slow component render: ${props.componentType}`, {\n componentId: props.componentId,\n renderDuration: duration,\n threshold: 50,\n })\n }\n })\n }\n\n return <WrappedComponent {...props} />\n }\n}\n\n/**\n * Hook to track component lifecycle events\n */\nexport function useComponentTelemetry(componentId: string, componentType: string) {\n // SSR-safe: Performance timing\n let mountTime = 0\n if (!isServer && typeof performance !== 'undefined') {\n mountTime = performance.now()\n }\n\n // Log mount\n logger.debug(`Component mounted: ${componentType}`, {\n componentId,\n timestamp: new Date().toISOString(),\n })\n\n // Return cleanup function for unmount\n return () => {\n let lifetime = 0\n if (!isServer && typeof performance !== 'undefined') {\n lifetime = performance.now() - mountTime\n }\n logger.debug(`Component unmounted: ${componentType}`, {\n componentId,\n lifetime,\n timestamp: new Date().toISOString(),\n })\n }\n}\n"],"names":["logger","createLogger","DefaultErrorFallback","props","_el$","_$getNextElement","_tmpl$3","_el$2","firstChild","_el$3","_el$4","nextSibling","_el$5","_el$6","_el$7","_el$0","_el$1","_co$","_$getNextMarker","_el$8","_el$10","_el$11","_co$2","_el$14","_el$15","_co$3","_el$16","_el$17","_co$4","_$insert","componentType","componentId","slice","_$createComponent","Show","when","import","children","_el$12","_tmpl$","error","message","allowRetry","_el$13","_tmpl$2","_$addEventListener","onRetry","_$runHydrationEvents","GenerativeUIErrorBoundary","retryKey","setRetryKey","createSignal","initialRenderTime","isServer","performance","now","renderStartTime","handleError","renderEndTime","renderDuration","userAgent","viewport","width","height","window","navigator","innerWidth","innerHeight","errorContext","errorMessage","errorStack","stack","retryCount","timestamp","Date","toISOString","onError","type","details","handleRetry","newRetryCount","info","ErrorBoundary","fallback","undefined","_$memo","_$delegateEvents"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenerativeUIErrorBoundary.d.ts","sourceRoot":"","sources":["../../src/components/GenerativeUIErrorBoundary.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAqC,MAAM,UAAU,CAAA;AAGvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAI7C;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAA;IAErB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;IAExC;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB;;OAEG;IACH,QAAQ,EAAE,GAAG,CAAA;IAEb;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,IAAI,KAAK,GAAG,CAAA;CACrD;AAwDD;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,SAAS,CAAC,8BAA8B,
|
|
1
|
+
{"version":3,"file":"GenerativeUIErrorBoundary.d.ts","sourceRoot":"","sources":["../../src/components/GenerativeUIErrorBoundary.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAqC,MAAM,UAAU,CAAA;AAGvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAI7C;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAA;IAErB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;IAExC;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB;;OAEG;IACH,QAAQ,EAAE,GAAG,CAAA;IAEb;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,IAAI,KAAK,GAAG,CAAA;CACrD;AAwDD;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,SAAS,CAAC,8BAA8B,CAiG/E,CAAA;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,SAAS;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,EAChG,gBAAgB,EAAE,SAAS,CAAC,CAAC,CAAC,IAEtB,OAAO,CAAC,oCAsCjB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,cAyB/E"}
|
|
@@ -39,11 +39,30 @@ function DefaultErrorFallback(props) {
|
|
|
39
39
|
}
|
|
40
40
|
const GenerativeUIErrorBoundary = (props) => {
|
|
41
41
|
const [retryKey, setRetryKey] = createSignal(0);
|
|
42
|
-
|
|
42
|
+
let initialRenderTime = 0;
|
|
43
|
+
if (!isServer && typeof performance !== "undefined") {
|
|
44
|
+
initialRenderTime = performance.now();
|
|
45
|
+
}
|
|
46
|
+
const [renderStartTime] = createSignal(initialRenderTime);
|
|
43
47
|
const handleError = (error) => {
|
|
44
48
|
var _a;
|
|
45
|
-
|
|
49
|
+
let renderEndTime = 0;
|
|
50
|
+
if (!isServer && typeof performance !== "undefined") {
|
|
51
|
+
renderEndTime = performance.now();
|
|
52
|
+
}
|
|
46
53
|
const renderDuration = renderEndTime - renderStartTime();
|
|
54
|
+
let userAgent = "server";
|
|
55
|
+
let viewport = {
|
|
56
|
+
width: 0,
|
|
57
|
+
height: 0
|
|
58
|
+
};
|
|
59
|
+
if (!isServer && typeof window !== "undefined") {
|
|
60
|
+
userAgent = navigator.userAgent;
|
|
61
|
+
viewport = {
|
|
62
|
+
width: window.innerWidth,
|
|
63
|
+
height: window.innerHeight
|
|
64
|
+
};
|
|
65
|
+
}
|
|
47
66
|
const errorContext = {
|
|
48
67
|
componentId: props.componentId,
|
|
49
68
|
componentType: props.componentType,
|
|
@@ -52,14 +71,8 @@ const GenerativeUIErrorBoundary = (props) => {
|
|
|
52
71
|
renderDuration,
|
|
53
72
|
retryCount: retryKey(),
|
|
54
73
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
55
|
-
userAgent
|
|
56
|
-
viewport
|
|
57
|
-
width: 0,
|
|
58
|
-
height: 0
|
|
59
|
-
} : {
|
|
60
|
-
width: window.innerWidth,
|
|
61
|
-
height: window.innerHeight
|
|
62
|
-
}
|
|
74
|
+
userAgent,
|
|
75
|
+
viewport
|
|
63
76
|
};
|
|
64
77
|
logger.error(`Component render failed: ${props.componentType}`, errorContext);
|
|
65
78
|
(_a = props.onError) == null ? void 0 : _a.call(props, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenerativeUIErrorBoundary.js","sources":["../../src/components/GenerativeUIErrorBoundary.tsx"],"sourcesContent":["/**\n * Generative UI Error Boundary with Telemetry\n * Phase 0: Error isolation + structured logging\n *\n * Features:\n * - Component-level error isolation\n * - Structured logging with context\n * - Performance timing\n * - Retry mechanism\n * - User-friendly fallback UI\n */\n\nimport { Component, ErrorBoundary, createSignal, Show } from 'solid-js'\nimport { isServer } from 'solid-js/web'\nimport { createLogger } from '../utils/logger'\nimport type { RendererError } from '../types'\n\nconst logger = createLogger('generative-ui')\n\n/**\n * Props for GenerativeUIErrorBoundary\n */\nexport interface GenerativeUIErrorBoundaryProps {\n /**\n * Component identifier for telemetry\n */\n componentId: string\n\n /**\n * Component type for context\n */\n componentType: string\n\n /**\n * Error callback\n */\n onError?: (error: RendererError) => void\n\n /**\n * Allow retry on error\n */\n allowRetry?: boolean\n\n /**\n * Child components to wrap\n */\n children: any\n\n /**\n * Custom fallback UI (optional)\n */\n fallback?: (error: Error, retry?: () => void) => any\n}\n\n/**\n * Default fallback UI for errors\n */\nfunction DefaultErrorFallback(props: {\n error: Error\n componentId: string\n componentType: string\n allowRetry?: boolean\n onRetry?: () => void\n}) {\n return (\n <div class=\"w-full h-full bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 rounded-lg p-4\">\n <div class=\"flex items-start gap-3\">\n <div class=\"flex-shrink-0\">\n <svg\n class=\"w-5 h-5 text-yellow-600 dark:text-yellow-400\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"\n />\n </svg>\n </div>\n <div class=\"flex-1 min-w-0\">\n <p class=\"text-sm font-medium text-yellow-900 dark:text-yellow-100\">\n Component Failed to Render\n </p>\n <p class=\"text-xs text-yellow-700 dark:text-yellow-300 mt-1\">\n Type: {props.componentType || 'unknown'} | ID: {props.componentId?.slice(0, 8) || 'unknown'}...\n </p>\n <Show when={import.meta.env.DEV}>\n <p class=\"text-xs text-yellow-600 dark:text-yellow-400 mt-2 font-mono\">\n {props.error.message}\n </p>\n </Show>\n <Show when={props.allowRetry}>\n <button\n onClick={props.onRetry}\n class=\"mt-3 text-xs font-medium text-yellow-800 dark:text-yellow-200 hover:text-yellow-900 dark:hover:text-yellow-100 underline\"\n >\n Retry Rendering\n </button>\n </Show>\n </div>\n </div>\n </div>\n )\n}\n\n/**\n * Generative UI Error Boundary Component\n */\nexport const GenerativeUIErrorBoundary: Component<GenerativeUIErrorBoundaryProps> = (props) => {\n const [retryKey, setRetryKey] = createSignal(0)\n const [renderStartTime] = createSignal(isServer ? 0 : performance.now())\n\n // Handle error with telemetry\n const handleError = (error: Error) => {\n const renderEndTime = isServer ? 0 : performance.now()\n const renderDuration = renderEndTime - renderStartTime()\n\n // Structure error context\n const errorContext = {\n componentId: props.componentId,\n componentType: props.componentType,\n errorMessage: error.message,\n errorStack: error.stack,\n renderDuration,\n retryCount: retryKey(),\n timestamp: new Date().toISOString(),\n userAgent: isServer ? 'server' : navigator.userAgent,\n viewport: isServer\n ? { width: 0, height: 0 }\n : { width: window.innerWidth, height: window.innerHeight },\n }\n\n // Log to structured logger\n logger.error(`Component render failed: ${props.componentType}`, errorContext)\n\n // Call error callback\n props.onError?.({\n type: 'render',\n message: error.message,\n componentId: props.componentId,\n details: errorContext,\n })\n\n // In production, send to monitoring service\n if (import.meta.env.PROD) {\n // Future: Send to Sentry or other APM\n // Sentry.captureException(error, { contexts: { component: errorContext } })\n }\n }\n\n // Retry mechanism\n const handleRetry = () => {\n const newRetryCount = retryKey() + 1\n logger.info(`Retrying component render: ${props.componentType}`, {\n componentId: props.componentId,\n retryCount: newRetryCount,\n })\n setRetryKey(newRetryCount)\n }\n\n return (\n <ErrorBoundary\n fallback={(error) => {\n handleError(error)\n\n // Use custom fallback if provided\n if (props.fallback) {\n return props.fallback(error, props.allowRetry ? handleRetry : undefined)\n }\n\n // Default fallback\n return (\n <DefaultErrorFallback\n error={error}\n componentId={props.componentId}\n componentType={props.componentType}\n allowRetry={props.allowRetry}\n onRetry={handleRetry}\n />\n )\n }}\n >\n {/* Key prop for forcing remount on retry */}\n {(() => {\n const _ = retryKey() // Access signal to track changes\n return <>{props.children}</>\n })()}\n </ErrorBoundary>\n )\n}\n\n/**\n * Performance monitoring wrapper\n * Logs render times for performance analysis\n */\nexport function withPerformanceMonitoring<P extends { componentId: string; componentType: string }>(\n WrappedComponent: Component<P>\n) {\n return (props: P) => {\n const renderStart = isServer ? 0 : performance.now()\n\n // Log render start\n logger.debug(`Component render start: ${props.componentType}`, {\n componentId: props.componentId,\n timestamp: new Date().toISOString(),\n })\n\n // Measure on mount completion (client-side only)\n if (!isServer && typeof window !== 'undefined') {\n requestAnimationFrame(() => {\n const renderEnd = performance.now()\n const duration = renderEnd - renderStart\n\n logger.info(`Component rendered: ${props.componentType}`, {\n componentId: props.componentId,\n renderDuration: duration,\n timestamp: new Date().toISOString(),\n })\n\n // Warn if render is slow (>50ms target)\n if (duration > 50) {\n logger.warn(`Slow component render: ${props.componentType}`, {\n componentId: props.componentId,\n renderDuration: duration,\n threshold: 50,\n })\n }\n })\n }\n\n return <WrappedComponent {...props} />\n }\n}\n\n/**\n * Hook to track component lifecycle events\n */\nexport function useComponentTelemetry(componentId: string, componentType: string) {\n const mountTime = isServer ? 0 : performance.now()\n\n // Log mount\n logger.debug(`Component mounted: ${componentType}`, {\n componentId,\n timestamp: new Date().toISOString(),\n })\n\n // Return cleanup function for unmount\n return () => {\n const lifetime = isServer ? 0 : performance.now() - mountTime\n logger.debug(`Component unmounted: ${componentType}`, {\n componentId,\n lifetime,\n timestamp: new Date().toISOString(),\n })\n }\n}\n"],"names":["logger","createLogger","DefaultErrorFallback","props","_el$","_$getNextElement","_tmpl$3","_el$2","firstChild","_el$3","_el$4","nextSibling","_el$5","_el$6","_el$7","_el$0","_el$1","_co$","_$getNextMarker","_el$8","_el$10","_el$11","_co$2","_el$14","_el$15","_co$3","_el$16","_el$17","_co$4","_$insert","componentType","componentId","slice","_$createComponent","Show","when","import","children","_el$12","_tmpl$","error","message","allowRetry","_el$13","_tmpl$2","_$addEventListener","onRetry","_$runHydrationEvents","GenerativeUIErrorBoundary","retryKey","setRetryKey","createSignal","renderStartTime","isServer","performance","now","handleError","renderEndTime","renderDuration","errorContext","errorMessage","errorStack","stack","retryCount","timestamp","Date","toISOString","userAgent","navigator","viewport","width","height","window","innerWidth","innerHeight","onError","type","details","handleRetry","newRetryCount","info","ErrorBoundary","fallback","undefined","_$memo","_$delegateEvents"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GenerativeUIErrorBoundary.js","sources":["../../src/components/GenerativeUIErrorBoundary.tsx"],"sourcesContent":["/**\n * Generative UI Error Boundary with Telemetry\n * Phase 0: Error isolation + structured logging\n *\n * Features:\n * - Component-level error isolation\n * - Structured logging with context\n * - Performance timing\n * - Retry mechanism\n * - User-friendly fallback UI\n */\n\nimport { Component, ErrorBoundary, createSignal, Show } from 'solid-js'\nimport { isServer } from 'solid-js/web'\nimport { createLogger } from '../utils/logger'\nimport type { RendererError } from '../types'\n\nconst logger = createLogger('generative-ui')\n\n/**\n * Props for GenerativeUIErrorBoundary\n */\nexport interface GenerativeUIErrorBoundaryProps {\n /**\n * Component identifier for telemetry\n */\n componentId: string\n\n /**\n * Component type for context\n */\n componentType: string\n\n /**\n * Error callback\n */\n onError?: (error: RendererError) => void\n\n /**\n * Allow retry on error\n */\n allowRetry?: boolean\n\n /**\n * Child components to wrap\n */\n children: any\n\n /**\n * Custom fallback UI (optional)\n */\n fallback?: (error: Error, retry?: () => void) => any\n}\n\n/**\n * Default fallback UI for errors\n */\nfunction DefaultErrorFallback(props: {\n error: Error\n componentId: string\n componentType: string\n allowRetry?: boolean\n onRetry?: () => void\n}) {\n return (\n <div class=\"w-full h-full bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 rounded-lg p-4\">\n <div class=\"flex items-start gap-3\">\n <div class=\"flex-shrink-0\">\n <svg\n class=\"w-5 h-5 text-yellow-600 dark:text-yellow-400\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"\n />\n </svg>\n </div>\n <div class=\"flex-1 min-w-0\">\n <p class=\"text-sm font-medium text-yellow-900 dark:text-yellow-100\">\n Component Failed to Render\n </p>\n <p class=\"text-xs text-yellow-700 dark:text-yellow-300 mt-1\">\n Type: {props.componentType || 'unknown'} | ID: {props.componentId?.slice(0, 8) || 'unknown'}...\n </p>\n <Show when={import.meta.env.DEV}>\n <p class=\"text-xs text-yellow-600 dark:text-yellow-400 mt-2 font-mono\">\n {props.error.message}\n </p>\n </Show>\n <Show when={props.allowRetry}>\n <button\n onClick={props.onRetry}\n class=\"mt-3 text-xs font-medium text-yellow-800 dark:text-yellow-200 hover:text-yellow-900 dark:hover:text-yellow-100 underline\"\n >\n Retry Rendering\n </button>\n </Show>\n </div>\n </div>\n </div>\n )\n}\n\n/**\n * Generative UI Error Boundary Component\n */\nexport const GenerativeUIErrorBoundary: Component<GenerativeUIErrorBoundaryProps> = (props) => {\n const [retryKey, setRetryKey] = createSignal(0)\n // SSR-safe: Initialize performance timing\n let initialRenderTime = 0\n if (!isServer && typeof performance !== 'undefined') {\n initialRenderTime = performance.now()\n }\n const [renderStartTime] = createSignal(initialRenderTime)\n\n // Handle error with telemetry\n const handleError = (error: Error) => {\n // SSR-safe: Calculate render duration\n let renderEndTime = 0\n if (!isServer && typeof performance !== 'undefined') {\n renderEndTime = performance.now()\n }\n const renderDuration = renderEndTime - renderStartTime()\n\n // SSR-safe: Get client-only context\n let userAgent = 'server'\n let viewport = { width: 0, height: 0 }\n\n if (!isServer && typeof window !== 'undefined') {\n userAgent = navigator.userAgent\n viewport = { width: window.innerWidth, height: window.innerHeight }\n }\n\n // Structure error context\n const errorContext = {\n componentId: props.componentId,\n componentType: props.componentType,\n errorMessage: error.message,\n errorStack: error.stack,\n renderDuration,\n retryCount: retryKey(),\n timestamp: new Date().toISOString(),\n userAgent,\n viewport,\n }\n\n // Log to structured logger\n logger.error(`Component render failed: ${props.componentType}`, errorContext)\n\n // Call error callback\n props.onError?.({\n type: 'render',\n message: error.message,\n componentId: props.componentId,\n details: errorContext,\n })\n\n // In production, send to monitoring service\n if (import.meta.env.PROD) {\n // Future: Send to Sentry or other APM\n // Sentry.captureException(error, { contexts: { component: errorContext } })\n }\n }\n\n // Retry mechanism\n const handleRetry = () => {\n const newRetryCount = retryKey() + 1\n logger.info(`Retrying component render: ${props.componentType}`, {\n componentId: props.componentId,\n retryCount: newRetryCount,\n })\n setRetryKey(newRetryCount)\n }\n\n return (\n <ErrorBoundary\n fallback={(error) => {\n handleError(error)\n\n // Use custom fallback if provided\n if (props.fallback) {\n return props.fallback(error, props.allowRetry ? handleRetry : undefined)\n }\n\n // Default fallback\n return (\n <DefaultErrorFallback\n error={error}\n componentId={props.componentId}\n componentType={props.componentType}\n allowRetry={props.allowRetry}\n onRetry={handleRetry}\n />\n )\n }}\n >\n {/* Key prop for forcing remount on retry */}\n {(() => {\n const _ = retryKey() // Access signal to track changes\n return <>{props.children}</>\n })()}\n </ErrorBoundary>\n )\n}\n\n/**\n * Performance monitoring wrapper\n * Logs render times for performance analysis\n */\nexport function withPerformanceMonitoring<P extends { componentId: string; componentType: string }>(\n WrappedComponent: Component<P>\n) {\n return (props: P) => {\n // SSR-safe: Performance timing\n let renderStart = 0\n if (!isServer && typeof performance !== 'undefined') {\n renderStart = performance.now()\n }\n\n // Log render start\n logger.debug(`Component render start: ${props.componentType}`, {\n componentId: props.componentId,\n timestamp: new Date().toISOString(),\n })\n\n // Measure on mount completion (client-side only)\n if (!isServer && typeof window !== 'undefined') {\n requestAnimationFrame(() => {\n const renderEnd = performance.now()\n const duration = renderEnd - renderStart\n\n logger.info(`Component rendered: ${props.componentType}`, {\n componentId: props.componentId,\n renderDuration: duration,\n timestamp: new Date().toISOString(),\n })\n\n // Warn if render is slow (>50ms target)\n if (duration > 50) {\n logger.warn(`Slow component render: ${props.componentType}`, {\n componentId: props.componentId,\n renderDuration: duration,\n threshold: 50,\n })\n }\n })\n }\n\n return <WrappedComponent {...props} />\n }\n}\n\n/**\n * Hook to track component lifecycle events\n */\nexport function useComponentTelemetry(componentId: string, componentType: string) {\n // SSR-safe: Performance timing\n let mountTime = 0\n if (!isServer && typeof performance !== 'undefined') {\n mountTime = performance.now()\n }\n\n // Log mount\n logger.debug(`Component mounted: ${componentType}`, {\n componentId,\n timestamp: new Date().toISOString(),\n })\n\n // Return cleanup function for unmount\n return () => {\n let lifetime = 0\n if (!isServer && typeof performance !== 'undefined') {\n lifetime = performance.now() - mountTime\n }\n logger.debug(`Component unmounted: ${componentType}`, {\n componentId,\n lifetime,\n timestamp: new Date().toISOString(),\n })\n }\n}\n"],"names":["logger","createLogger","DefaultErrorFallback","props","_el$","_$getNextElement","_tmpl$3","_el$2","firstChild","_el$3","_el$4","nextSibling","_el$5","_el$6","_el$7","_el$0","_el$1","_co$","_$getNextMarker","_el$8","_el$10","_el$11","_co$2","_el$14","_el$15","_co$3","_el$16","_el$17","_co$4","_$insert","componentType","componentId","slice","_$createComponent","Show","when","import","children","_el$12","_tmpl$","error","message","allowRetry","_el$13","_tmpl$2","_$addEventListener","onRetry","_$runHydrationEvents","GenerativeUIErrorBoundary","retryKey","setRetryKey","createSignal","initialRenderTime","isServer","performance","now","renderStartTime","handleError","renderEndTime","renderDuration","userAgent","viewport","width","height","window","navigator","innerWidth","innerHeight","errorContext","errorMessage","errorStack","stack","retryCount","timestamp","Date","toISOString","onError","type","details","handleRetry","newRetryCount","info","ErrorBoundary","fallback","undefined","_$memo","_$delegateEvents"],"mappings":"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"}
|
|
@@ -422,19 +422,25 @@ function ComponentRenderer(props) {
|
|
|
422
422
|
}
|
|
423
423
|
function ActionRenderer(props) {
|
|
424
424
|
const params = props.component.params;
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
425
|
+
let dispatchAction = null;
|
|
426
|
+
solidJs.onMount(() => {
|
|
427
|
+
if (typeof window !== "undefined") {
|
|
428
|
+
dispatchAction = (toolName, toolParams) => {
|
|
429
429
|
const event = new CustomEvent("mcp-action", {
|
|
430
430
|
detail: {
|
|
431
|
-
toolName
|
|
432
|
-
params:
|
|
431
|
+
toolName,
|
|
432
|
+
params: toolParams
|
|
433
433
|
},
|
|
434
434
|
bubbles: true
|
|
435
435
|
});
|
|
436
436
|
window.dispatchEvent(event);
|
|
437
|
-
}
|
|
437
|
+
};
|
|
438
|
+
}
|
|
439
|
+
});
|
|
440
|
+
const handleClick = (e) => {
|
|
441
|
+
if (params.action === "tool-call" && params.toolName) {
|
|
442
|
+
e.preventDefault();
|
|
443
|
+
dispatchAction == null ? void 0 : dispatchAction(params.toolName, params.params || {});
|
|
438
444
|
}
|
|
439
445
|
};
|
|
440
446
|
if (params.type === "link" || params.action === "link") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UIResourceRenderer.cjs","sources":["../../src/components/UIResourceRenderer.tsx"],"sourcesContent":["/**\n * UI Resource Renderer Component\n * Phase 0: Foundation with iframe sandbox and composite grid support\n */\n\nimport DOMPurify from 'dompurify'\nimport { Component, createSignal, onMount, Show, For, createMemo } from 'solid-js'\nimport { isServer } from 'solid-js/web'\nimport type { UIComponent, UILayout, RendererError, ComponentType } from '../types'\nimport { validateComponent, DEFAULT_RESOURCE_LIMITS } from '../services/validation'\nimport { GenerativeUIErrorBoundary } from './GenerativeUIErrorBoundary'\nimport { marked } from 'marked'\n\n/**\n * Props for UIResourceRenderer\n */\nexport interface UIResourceRendererProps {\n /**\n * Single component or full layout to render\n */\n content: UIComponent | UILayout\n\n /**\n * Lazy loading (default: true)\n */\n lazyLoad?: boolean\n\n /**\n * Error callback\n */\n onError?: (error: RendererError) => void\n\n /**\n * Custom CSS class\n */\n class?: string\n}\n\n/**\n * Render a single chart component in a sandboxed iframe\n */\nfunction ChartRenderer(props: {\n component: UIComponent\n onError?: (error: RendererError) => void\n}) {\n const [iframeUrl, setIframeUrl] = createSignal<string>()\n const [isLoading, setIsLoading] = createSignal(true)\n const [error, setError] = createSignal<string>()\n\n onMount(() => {\n const chartParams = props.component.params as any\n\n // Build Quickchart URL\n const chartConfig = {\n type: chartParams.type,\n data: chartParams.data,\n options: {\n ...chartParams.options,\n responsive: true,\n maintainAspectRatio: false,\n },\n }\n\n // Encode chart configuration for Quickchart API\n const configStr = encodeURIComponent(JSON.stringify(chartConfig))\n const url = `https://quickchart.io/chart?c=${configStr}&width=500&height=300&devicePixelRatio=2`\n\n // Validate domain (should always pass for quickchart.io)\n setIframeUrl(url)\n setIsLoading(false)\n })\n\n return (\n <div class=\"relative w-full h-full min-h-[300px] bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden\">\n <Show when={isLoading()}>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <div class=\"animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600\" />\n </div>\n </Show>\n\n <Show when={error()}>\n <div class=\"absolute inset-0 flex items-center justify-center p-4\">\n <div class=\"text-center\">\n <p class=\"text-red-600 dark:text-red-400 text-sm font-medium\">Chart Error</p>\n <p class=\"text-gray-600 dark:text-gray-400 text-xs mt-1\">{error()}</p>\n </div>\n </div>\n </Show>\n\n <Show when={iframeUrl() && !error()}>\n <div class=\"w-full h-full p-4\">\n <Show when={(props.component.params as any).title}>\n <h3 class=\"text-sm font-semibold text-gray-900 dark:text-white mb-3\">\n {(props.component.params as any).title}\n </h3>\n </Show>\n <div class=\"w-full h-full\">\n <img\n src={iframeUrl()}\n alt=\"Chart visualization\"\n class=\"w-full h-auto max-h-[300px] object-contain\"\n onError={() => {\n setError('Failed to load chart')\n props.onError?.({\n type: 'render',\n message: 'Chart rendering failed',\n componentId: props.component.id,\n })\n }}\n />\n </div>\n </div>\n </Show>\n </div>\n )\n}\n\n/**\n * Render a table component\n */\nfunction TableRenderer(props: {\n component: UIComponent\n onError?: (error: RendererError) => void\n}) {\n const tableParams = props.component.params as any\n\n return (\n <div class=\"w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden\">\n <div class=\"p-4\">\n <Show when={tableParams.title}>\n <h3 class=\"text-sm font-semibold text-gray-900 dark:text-white mb-3\">\n {tableParams.title}\n </h3>\n </Show>\n\n <div class=\"overflow-x-auto\">\n <table class=\"min-w-full divide-y divide-gray-200 dark:divide-gray-700 border-separate border-spacing-0\">\n <thead class=\"bg-gray-50 dark:bg-gray-900/50\">\n <tr>\n <For each={tableParams.columns}>\n {(column: any) => (\n <th\n scope=\"col\"\n class=\"px-6 py-3 text-left text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wider border-b border-gray-200 dark:border-gray-700 first:pl-6 last:pr-6\"\n style={column.width ? { width: column.width } : {}}\n >\n {column.label}\n </th>\n )}\n </For>\n </tr>\n </thead>\n <tbody class=\"bg-white dark:bg-gray-800 divide-y divide-gray-200 dark:divide-gray-700\">\n <For each={tableParams.rows.slice(0, DEFAULT_RESOURCE_LIMITS.maxTableRows)}>\n {(row: any, i) => (\n <tr class={`hover:bg-gray-50 dark:hover:bg-gray-700/50 transition-colors ${i() % 2 === 0 ? 'bg-white dark:bg-gray-800' : 'bg-gray-50/30 dark:bg-gray-800/50'}`}>\n <For each={tableParams.columns}>\n {(column: any) => (\n <td class=\"px-6 py-4 text-sm text-gray-700 dark:text-gray-200 whitespace-normal break-words leading-relaxed first:pl-6 last:pr-6\">\n <div\n innerHTML={\n typeof row[column.key] === 'string' && (row[column.key].includes('[') || row[column.key].includes('**') || row[column.key].includes('`'))\n ? DOMPurify.sanitize(marked.parse(row[column.key], { async: false }) as string, { ADD_ATTR: ['target', 'rel'] })\n : (row[column.key] || '-')\n }\n />\n </td>\n )}\n </For>\n </tr>\n )}\n </For>\n </tbody>\n </table>\n </div>\n\n <Show when={tableParams.pagination}>\n <div class=\"mt-3 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400\">\n <span>\n Showing {tableParams.pagination.currentPage * tableParams.pagination.pageSize + 1} -{' '}\n {Math.min(\n (tableParams.pagination.currentPage + 1) * tableParams.pagination.pageSize,\n tableParams.pagination.totalRows\n )}{' '}\n of {tableParams.pagination.totalRows}\n </span>\n </div>\n </Show>\n </div>\n </div>\n )\n}\n\n/**\n * Render a metric card component\n */\nfunction MetricRenderer(props: { component: UIComponent }) {\n const metricParams = props.component.params as any\n\n return (\n <div class=\"w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 p-4\">\n <div class=\"flex flex-col h-full justify-between\">\n <div>\n <p class=\"text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wide\">\n {metricParams.title}\n </p>\n <div class=\"mt-2 flex items-baseline\">\n <p class=\"text-2xl font-semibold text-gray-900 dark:text-white\">{metricParams.value}</p>\n <Show when={metricParams.unit}>\n <span class=\"ml-2 text-sm font-medium text-gray-500 dark:text-gray-400\">\n {metricParams.unit}\n </span>\n </Show>\n </div>\n </div>\n\n <Show when={metricParams.trend}>\n <div class=\"mt-3 flex items-center\">\n <span\n class={`text-sm font-medium ${metricParams.trend.direction === 'up'\n ? 'text-green-600 dark:text-green-400'\n : metricParams.trend.direction === 'down'\n ? 'text-red-600 dark:text-red-400'\n : 'text-gray-600 dark:text-gray-400'\n }`}\n >\n {metricParams.trend.direction === 'up'\n ? '�'\n : metricParams.trend.direction === 'down'\n ? '�'\n : '�'}{' '}\n {Math.abs(metricParams.trend.value)}%\n </span>\n </div>\n </Show>\n\n <Show when={metricParams.subtitle}>\n <p class=\"mt-2 text-xs text-gray-500 dark:text-gray-400\">{metricParams.subtitle}</p>\n </Show>\n </div>\n </div>\n )\n}\n\n/**\n * Render a text component (with optional markdown)\n */\nfunction TextRenderer(props: { component: UIComponent }) {\n const textParams = props.component.params as any\n\n // Convert markdown to HTML if markdown flag is true\n const htmlContent = createMemo(() => {\n if (textParams.markdown) {\n return marked.parse(textParams.content, { async: false }) as string\n }\n return textParams.content\n })\n\n return (\n <div class=\"w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 p-4\">\n <div\n class={`prose prose-sm dark:prose-invert max-w-none ${textParams.className || ''}`}\n innerHTML={htmlContent()}\n />\n </div>\n )\n}\n\n/**\n * Render an iframe component\n */\nfunction IframeRenderer(props: { component: UIComponent }) {\n const params = props.component.params as any\n return (\n <div class=\"w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden flex flex-col\">\n <Show when={params.title}>\n <div class=\"px-4 py-2 border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-900\">\n <h3 class=\"text-sm font-semibold text-gray-900 dark:text-white\">{params.title}</h3>\n </div>\n </Show>\n <iframe\n src={params.url}\n title={params.title || 'Embedded content'}\n class=\"w-full border-0 flex-1\"\n style={`height: ${params.height || '400px'}; min-height: 300px;`}\n sandbox=\"allow-scripts allow-same-origin allow-popups allow-forms\"\n loading=\"lazy\"\n />\n </div>\n )\n}\n\n/**\n * Render an image component\n */\nfunction ImageRenderer(props: { component: UIComponent }) {\n const params = props.component.params as any\n return (\n <div class=\"w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden flex flex-col\">\n <div class=\"flex-1 flex items-center justify-center p-4 bg-gray-50 dark:bg-gray-900 min-h-[200px]\">\n <a href={params.url} target=\"_blank\" rel=\"noopener noreferrer\" class=\"cursor-zoom-in\">\n <img\n src={params.url}\n alt={params.alt || 'Image'}\n class=\"max-w-full max-h-[500px] object-contain rounded shadow-sm hover:opacity-95 transition-opacity\"\n loading=\"lazy\"\n />\n </a>\n </div>\n <Show when={params.caption}>\n <div class=\"p-3 border-t border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800\">\n <p class=\"text-sm text-gray-600 dark:text-gray-400 text-center\">{params.caption}</p>\n </div>\n </Show>\n </div>\n )\n}\n\n/**\n * Render a link component\n */\n/**\n * Render a link component\n */\nfunction LinkRenderer(props: { component: UIComponent }) {\n const params = props.component.params as any\n return (\n <a\n href={params.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors group h-full\"\n onClick={(e) => e.stopPropagation()}\n >\n <div class=\"p-2 bg-blue-50 dark:bg-blue-900/30 rounded-full text-blue-600 dark:text-blue-400 group-hover:bg-blue-100 dark:group-hover:bg-blue-900/50 shrink-0 transition-colors\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"w-5 h-5\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" />\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\n </svg>\n </div>\n <div class=\"flex-1 min-w-0\">\n <h4 class=\"text-sm font-medium text-gray-900 dark:text-white truncate group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors\">\n {params.label || params.url}\n </h4>\n <Show when={params.description}>\n <p class=\"text-xs text-gray-500 dark:text-gray-400 truncate\">{params.description}</p>\n </Show>\n </div>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"w-4 h-4 text-gray-400 group-hover:text-gray-600 dark:group-hover:text-gray-300 shrink-0 transition-colors\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n <polyline points=\"15 3 21 3 21 9\" />\n <line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\" />\n </svg>\n </a>\n )\n}\n\n/**\n * Render a single component with error boundary\n */\nfunction ComponentRenderer(props: {\n component: UIComponent\n onError?: (error: RendererError) => void\n}) {\n // Validate component before rendering\n const validation = validateComponent(props.component)\n if (!validation.valid) {\n props.onError?.({\n type: 'validation',\n message: 'Component validation failed',\n componentId: props.component.id,\n details: validation.errors,\n })\n\n return (\n <div class=\"w-full h-full bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg p-4\">\n <p class=\"text-sm font-medium text-red-900 dark:text-red-100\">Validation Error</p>\n <p class=\"text-xs text-red-700 dark:text-red-300 mt-1\">\n {validation.errors?.[0]?.message || 'Unknown validation error'}\n </p>\n </div>\n )\n }\n\n // Render based on component type with enhanced error boundary\n return (\n <GenerativeUIErrorBoundary\n componentId={props.component.id}\n componentType={props.component.type}\n onError={props.onError}\n allowRetry={true}\n >\n <Show when={props.component.type === 'chart'}>\n <ChartRenderer component={props.component} onError={props.onError} />\n </Show>\n <Show when={props.component.type === 'table'}>\n <TableRenderer component={props.component} onError={props.onError} />\n </Show>\n <Show when={props.component.type === 'metric'}>\n <MetricRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'text'}>\n <TextRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'iframe'}>\n <IframeRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'image'}>\n <ImageRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'link'}>\n <LinkRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'action'}>\n <ActionRenderer component={props.component} />\n </Show>\n </GenerativeUIErrorBoundary>\n )\n}\n\n/**\n * Render an action component (button or link)\n */\nfunction ActionRenderer(props: { component: UIComponent }) {\n const params = props.component.params as any\n\n // Handle click to execute tool via window event\n const handleClick = (e: MouseEvent) => {\n if (params.action === 'tool-call' && params.toolName) {\n e.preventDefault()\n // Client-only: CustomEvent and window are not available in SSR\n if (!isServer && typeof window !== 'undefined') {\n const event = new CustomEvent('mcp-action', {\n detail: {\n toolName: params.toolName,\n params: params.params || {},\n },\n bubbles: true,\n })\n window.dispatchEvent(event)\n }\n }\n }\n\n if (params.type === 'link' || params.action === 'link') {\n return (\n <a\n href={params.url || '#'}\n target={params.url ? '_blank' : undefined}\n rel=\"noopener noreferrer\"\n class={`inline-flex items-center gap-2 px-4 py-2 rounded-md text-sm font-medium transition-colors\n ${params.variant === 'primary' ? 'bg-blue-600 text-white hover:bg-blue-700' :\n params.variant === 'outline' ? 'border border-gray-300 text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-800' :\n 'text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300'}`}\n onClick={handleClick}\n >\n <Show when={params.icon}>\n <span>{params.icon}</span>\n </Show>\n {params.label}\n </a>\n )\n }\n\n return (\n <button\n type={params.action === 'submit' ? 'submit' : 'button'}\n disabled={params.disabled}\n class={`inline-flex items-center gap-2 px-4 py-2 rounded-md text-sm font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500\n ${params.variant === 'primary' ? 'bg-blue-600 text-white hover:bg-blue-700 shadow-sm' :\n params.variant === 'secondary' ? 'bg-gray-100 text-gray-900 hover:bg-gray-200 dark:bg-gray-700 dark:text-white dark:hover:bg-gray-600' :\n params.variant === 'outline' ? 'border border-gray-300 text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-800' :\n params.variant === 'danger' ? 'bg-red-600 text-white hover:bg-red-700' :\n 'bg-transparent text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-800'}\n ${params.disabled ? 'opacity-50 cursor-not-allowed' : ''}\n ${params.size === 'sm' ? 'px-3 py-1.5 text-xs' : params.size === 'lg' ? 'px-6 py-3 text-base' : ''}`}\n onClick={handleClick}\n >\n <Show when={params.icon}>\n <span>{params.icon}</span>\n </Show>\n {params.label}\n </button>\n )\n}\n\n/**\n * Main UIResourceRenderer component\n */\nexport const UIResourceRenderer: Component<UIResourceRendererProps> = (props) => {\n const layout = () => {\n // ✅ PHASE 3.3 FIX: Check if content is a UIComponent (non-composite) vs UILayout (composite)\n // UILayout has type='composite', UIComponent has type='chart'|'table'|'metric'|'text'\n if ('type' in props.content && (props.content as any).type !== 'composite') {\n return {\n id: 'single-component',\n components: [props.content as UIComponent],\n grid: {\n columns: 12,\n gap: '1rem',\n },\n } as UILayout\n }\n return props.content as UILayout\n }\n\n // Grid position to CSS Grid styles\n const getGridStyles = (component: UIComponent) => {\n // ✅ PHASE 3 FIX: Defensive check for position field\n if (!component.position) {\n console.error('[UIResourceRenderer] Component missing position field:', component)\n return {\n 'grid-column': '1 / span 12',\n 'grid-row': 'auto',\n }\n }\n\n const { colStart, colSpan, rowStart, rowSpan = 1 } = component.position\n\n return {\n 'grid-column': `${colStart} / span ${colSpan}`,\n 'grid-row': rowStart ? `${rowStart} / span ${rowSpan}` : 'auto',\n }\n }\n\n // Convert grid styles to CSS string to avoid setStyleProperty\n const gridContainerStyle = () =>\n `grid-template-columns: repeat(${layout().grid.columns}, 1fr); gap: ${layout().grid.gap}`\n\n // Convert component grid styles to CSS string\n const getGridStyleString = (component: UIComponent) => {\n // ✅ PHASE 3 FIX: Defensive check for position field\n if (!component.position) {\n console.error('[UIResourceRenderer] Component missing position field:', component)\n return 'grid-column: 1 / span 12; grid-row: auto' // Default to full width\n }\n\n const { colStart, colSpan, rowStart, rowSpan = 1 } = component.position\n return `grid-column: ${colStart} / span ${colSpan}; grid-row: ${rowStart ? `${rowStart} / span ${rowSpan}` : 'auto'}`\n }\n\n return (\n <div class={`w-full ${props.class || ''}`}>\n <div class=\"grid gap-4\" style={gridContainerStyle()}>\n <For each={layout().components}>\n {(component) => (\n <div style={getGridStyleString(component)}>\n <ComponentRenderer component={component} onError={props.onError} />\n </div>\n )}\n </For>\n </div>\n </div>\n )\n}\n"],"names":["ChartRenderer","props","iframeUrl","setIframeUrl","createSignal","isLoading","setIsLoading","error","setError","onMount","chartParams","component","params","chartConfig","type","data","options","responsive","maintainAspectRatio","configStr","encodeURIComponent","JSON","stringify","url","_el$","_$getNextElement","_tmpl$5","_el$11","firstChild","_el$12","_co$2","_$getNextMarker","nextSibling","_el$13","_el$14","_co$3","_el$15","_el$16","_co$4","_$insert","_$createComponent","Show","when","children","_tmpl$","_el$3","_tmpl$2","_el$4","_el$5","_el$6","_$memo","_el$7","_tmpl$4","_el$1","_el$10","_co$","_el$9","_el$0","title","_el$8","_tmpl$3","addEventListener","onError","message","componentId","id","_$effect","_$setAttribute","TableRenderer","tableParams","_el$17","_tmpl$7","_el$18","_el$38","_el$39","_co$8","_el$20","_el$21","_el$22","_el$23","_el$24","_el$40","_el$41","_co$9","_el$19","For","each","columns","column","_el$42","_tmpl$8","label","_$p","_$style","width","rows","slice","DEFAULT_RESOURCE_LIMITS","maxTableRows","row","i","_el$43","_tmpl$9","_el$44","_tmpl$0","_el$45","_$setProperty","key","includes","DOMPurify","sanitize","marked","parse","async","ADD_ATTR","_$className","pagination","_el$25","_tmpl$6","_el$26","_el$27","_el$32","_el$33","_co$5","_el$28","_el$34","_el$35","_co$6","_el$30","_el$36","_el$37","_co$7","currentPage","pageSize","Math","min","totalRows","MetricRenderer","metricParams","_el$46","_tmpl$12","_el$47","_el$48","_el$49","_el$50","_el$51","_el$53","_el$54","_co$0","_el$64","_el$65","_co$11","_el$66","_el$67","_co$12","value","unit","_el$52","_tmpl$1","trend","_el$55","_tmpl$10","_el$56","_el$59","_el$60","_co$1","_el$57","_el$61","_el$62","_co$10","_c$","direction","abs","subtitle","_el$63","_tmpl$11","TextRenderer","textParams","htmlContent","createMemo","markdown","content","_el$68","_tmpl$13","_el$69","_p$","_v$","className","_v$2","e","t","undefined","IframeRenderer","_el$70","_tmpl$15","_el$74","_el$75","_co$13","_el$73","_el$71","_tmpl$14","_el$72","_v$3","_v$4","_v$5","height","a","ImageRenderer","_el$76","_tmpl$17","_el$77","_el$78","_el$79","_el$82","_el$83","_co$14","caption","_el$80","_tmpl$16","_el$81","_v$6","_v$7","_v$8","alt","LinkRenderer","_el$84","_tmpl$19","_el$85","_el$86","_el$87","_el$89","_el$90","_co$15","$$click","stopPropagation","description","_el$88","_tmpl$18","_$runHydrationEvents","ComponentRenderer","validation","validateComponent","valid","details","errors","_el$91","_tmpl$20","_el$92","_el$93","GenerativeUIErrorBoundary","componentType","allowRetry","ActionRenderer","handleClick","action","toolName","preventDefault","isServer","window","event","CustomEvent","detail","bubbles","dispatchEvent","_el$94","_tmpl$22","_el$96","_el$97","_co$16","_el$98","_el$99","_co$17","icon","_el$95","_tmpl$21","_v$9","_v$0","_v$1","variant","_el$100","_tmpl$23","_el$102","_el$103","_co$18","_el$104","_el$105","_co$19","_el$101","_v$10","_v$11","disabled","_v$12","size","UIResourceRenderer","layout","components","grid","gap","gridContainerStyle","getGridStyleString","position","console","colStart","colSpan","rowStart","rowSpan","_el$106","_tmpl$24","_el$107","_el$108","_tmpl$25","_v$13","class","_v$14","_$delegateEvents"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UIResourceRenderer.cjs","sources":["../../src/components/UIResourceRenderer.tsx"],"sourcesContent":["/**\n * UI Resource Renderer Component\n * Phase 0: Foundation with iframe sandbox and composite grid support\n */\n\nimport DOMPurify from 'dompurify'\nimport { Component, createSignal, onMount, Show, For, createMemo } from 'solid-js'\nimport { isServer } from 'solid-js/web'\nimport type { UIComponent, UILayout, RendererError, ComponentType } from '../types'\nimport { validateComponent, DEFAULT_RESOURCE_LIMITS } from '../services/validation'\nimport { GenerativeUIErrorBoundary } from './GenerativeUIErrorBoundary'\nimport { marked } from 'marked'\n\n/**\n * Props for UIResourceRenderer\n */\nexport interface UIResourceRendererProps {\n /**\n * Single component or full layout to render\n */\n content: UIComponent | UILayout\n\n /**\n * Lazy loading (default: true)\n */\n lazyLoad?: boolean\n\n /**\n * Error callback\n */\n onError?: (error: RendererError) => void\n\n /**\n * Custom CSS class\n */\n class?: string\n}\n\n/**\n * Render a single chart component in a sandboxed iframe\n */\nfunction ChartRenderer(props: {\n component: UIComponent\n onError?: (error: RendererError) => void\n}) {\n const [iframeUrl, setIframeUrl] = createSignal<string>()\n const [isLoading, setIsLoading] = createSignal(true)\n const [error, setError] = createSignal<string>()\n\n onMount(() => {\n const chartParams = props.component.params as any\n\n // Build Quickchart URL\n const chartConfig = {\n type: chartParams.type,\n data: chartParams.data,\n options: {\n ...chartParams.options,\n responsive: true,\n maintainAspectRatio: false,\n },\n }\n\n // Encode chart configuration for Quickchart API\n const configStr = encodeURIComponent(JSON.stringify(chartConfig))\n const url = `https://quickchart.io/chart?c=${configStr}&width=500&height=300&devicePixelRatio=2`\n\n // Validate domain (should always pass for quickchart.io)\n setIframeUrl(url)\n setIsLoading(false)\n })\n\n return (\n <div class=\"relative w-full h-full min-h-[300px] bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden\">\n <Show when={isLoading()}>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <div class=\"animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600\" />\n </div>\n </Show>\n\n <Show when={error()}>\n <div class=\"absolute inset-0 flex items-center justify-center p-4\">\n <div class=\"text-center\">\n <p class=\"text-red-600 dark:text-red-400 text-sm font-medium\">Chart Error</p>\n <p class=\"text-gray-600 dark:text-gray-400 text-xs mt-1\">{error()}</p>\n </div>\n </div>\n </Show>\n\n <Show when={iframeUrl() && !error()}>\n <div class=\"w-full h-full p-4\">\n <Show when={(props.component.params as any).title}>\n <h3 class=\"text-sm font-semibold text-gray-900 dark:text-white mb-3\">\n {(props.component.params as any).title}\n </h3>\n </Show>\n <div class=\"w-full h-full\">\n <img\n src={iframeUrl()}\n alt=\"Chart visualization\"\n class=\"w-full h-auto max-h-[300px] object-contain\"\n onError={() => {\n setError('Failed to load chart')\n props.onError?.({\n type: 'render',\n message: 'Chart rendering failed',\n componentId: props.component.id,\n })\n }}\n />\n </div>\n </div>\n </Show>\n </div>\n )\n}\n\n/**\n * Render a table component\n */\nfunction TableRenderer(props: {\n component: UIComponent\n onError?: (error: RendererError) => void\n}) {\n const tableParams = props.component.params as any\n\n return (\n <div class=\"w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden\">\n <div class=\"p-4\">\n <Show when={tableParams.title}>\n <h3 class=\"text-sm font-semibold text-gray-900 dark:text-white mb-3\">\n {tableParams.title}\n </h3>\n </Show>\n\n <div class=\"overflow-x-auto\">\n <table class=\"min-w-full divide-y divide-gray-200 dark:divide-gray-700 border-separate border-spacing-0\">\n <thead class=\"bg-gray-50 dark:bg-gray-900/50\">\n <tr>\n <For each={tableParams.columns}>\n {(column: any) => (\n <th\n scope=\"col\"\n class=\"px-6 py-3 text-left text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wider border-b border-gray-200 dark:border-gray-700 first:pl-6 last:pr-6\"\n style={column.width ? { width: column.width } : {}}\n >\n {column.label}\n </th>\n )}\n </For>\n </tr>\n </thead>\n <tbody class=\"bg-white dark:bg-gray-800 divide-y divide-gray-200 dark:divide-gray-700\">\n <For each={tableParams.rows.slice(0, DEFAULT_RESOURCE_LIMITS.maxTableRows)}>\n {(row: any, i) => (\n <tr class={`hover:bg-gray-50 dark:hover:bg-gray-700/50 transition-colors ${i() % 2 === 0 ? 'bg-white dark:bg-gray-800' : 'bg-gray-50/30 dark:bg-gray-800/50'}`}>\n <For each={tableParams.columns}>\n {(column: any) => (\n <td class=\"px-6 py-4 text-sm text-gray-700 dark:text-gray-200 whitespace-normal break-words leading-relaxed first:pl-6 last:pr-6\">\n <div\n innerHTML={\n typeof row[column.key] === 'string' && (row[column.key].includes('[') || row[column.key].includes('**') || row[column.key].includes('`'))\n ? DOMPurify.sanitize(marked.parse(row[column.key], { async: false }) as string, { ADD_ATTR: ['target', 'rel'] })\n : (row[column.key] || '-')\n }\n />\n </td>\n )}\n </For>\n </tr>\n )}\n </For>\n </tbody>\n </table>\n </div>\n\n <Show when={tableParams.pagination}>\n <div class=\"mt-3 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400\">\n <span>\n Showing {tableParams.pagination.currentPage * tableParams.pagination.pageSize + 1} -{' '}\n {Math.min(\n (tableParams.pagination.currentPage + 1) * tableParams.pagination.pageSize,\n tableParams.pagination.totalRows\n )}{' '}\n of {tableParams.pagination.totalRows}\n </span>\n </div>\n </Show>\n </div>\n </div>\n )\n}\n\n/**\n * Render a metric card component\n */\nfunction MetricRenderer(props: { component: UIComponent }) {\n const metricParams = props.component.params as any\n\n return (\n <div class=\"w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 p-4\">\n <div class=\"flex flex-col h-full justify-between\">\n <div>\n <p class=\"text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wide\">\n {metricParams.title}\n </p>\n <div class=\"mt-2 flex items-baseline\">\n <p class=\"text-2xl font-semibold text-gray-900 dark:text-white\">{metricParams.value}</p>\n <Show when={metricParams.unit}>\n <span class=\"ml-2 text-sm font-medium text-gray-500 dark:text-gray-400\">\n {metricParams.unit}\n </span>\n </Show>\n </div>\n </div>\n\n <Show when={metricParams.trend}>\n <div class=\"mt-3 flex items-center\">\n <span\n class={`text-sm font-medium ${metricParams.trend.direction === 'up'\n ? 'text-green-600 dark:text-green-400'\n : metricParams.trend.direction === 'down'\n ? 'text-red-600 dark:text-red-400'\n : 'text-gray-600 dark:text-gray-400'\n }`}\n >\n {metricParams.trend.direction === 'up'\n ? '�'\n : metricParams.trend.direction === 'down'\n ? '�'\n : '�'}{' '}\n {Math.abs(metricParams.trend.value)}%\n </span>\n </div>\n </Show>\n\n <Show when={metricParams.subtitle}>\n <p class=\"mt-2 text-xs text-gray-500 dark:text-gray-400\">{metricParams.subtitle}</p>\n </Show>\n </div>\n </div>\n )\n}\n\n/**\n * Render a text component (with optional markdown)\n */\nfunction TextRenderer(props: { component: UIComponent }) {\n const textParams = props.component.params as any\n\n // Convert markdown to HTML if markdown flag is true\n const htmlContent = createMemo(() => {\n if (textParams.markdown) {\n return marked.parse(textParams.content, { async: false }) as string\n }\n return textParams.content\n })\n\n return (\n <div class=\"w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 p-4\">\n <div\n class={`prose prose-sm dark:prose-invert max-w-none ${textParams.className || ''}`}\n innerHTML={htmlContent()}\n />\n </div>\n )\n}\n\n/**\n * Render an iframe component\n */\nfunction IframeRenderer(props: { component: UIComponent }) {\n const params = props.component.params as any\n return (\n <div class=\"w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden flex flex-col\">\n <Show when={params.title}>\n <div class=\"px-4 py-2 border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-900\">\n <h3 class=\"text-sm font-semibold text-gray-900 dark:text-white\">{params.title}</h3>\n </div>\n </Show>\n <iframe\n src={params.url}\n title={params.title || 'Embedded content'}\n class=\"w-full border-0 flex-1\"\n style={`height: ${params.height || '400px'}; min-height: 300px;`}\n sandbox=\"allow-scripts allow-same-origin allow-popups allow-forms\"\n loading=\"lazy\"\n />\n </div>\n )\n}\n\n/**\n * Render an image component\n */\nfunction ImageRenderer(props: { component: UIComponent }) {\n const params = props.component.params as any\n return (\n <div class=\"w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden flex flex-col\">\n <div class=\"flex-1 flex items-center justify-center p-4 bg-gray-50 dark:bg-gray-900 min-h-[200px]\">\n <a href={params.url} target=\"_blank\" rel=\"noopener noreferrer\" class=\"cursor-zoom-in\">\n <img\n src={params.url}\n alt={params.alt || 'Image'}\n class=\"max-w-full max-h-[500px] object-contain rounded shadow-sm hover:opacity-95 transition-opacity\"\n loading=\"lazy\"\n />\n </a>\n </div>\n <Show when={params.caption}>\n <div class=\"p-3 border-t border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800\">\n <p class=\"text-sm text-gray-600 dark:text-gray-400 text-center\">{params.caption}</p>\n </div>\n </Show>\n </div>\n )\n}\n\n/**\n * Render a link component\n */\n/**\n * Render a link component\n */\nfunction LinkRenderer(props: { component: UIComponent }) {\n const params = props.component.params as any\n return (\n <a\n href={params.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors group h-full\"\n onClick={(e) => e.stopPropagation()}\n >\n <div class=\"p-2 bg-blue-50 dark:bg-blue-900/30 rounded-full text-blue-600 dark:text-blue-400 group-hover:bg-blue-100 dark:group-hover:bg-blue-900/50 shrink-0 transition-colors\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"w-5 h-5\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" />\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\n </svg>\n </div>\n <div class=\"flex-1 min-w-0\">\n <h4 class=\"text-sm font-medium text-gray-900 dark:text-white truncate group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors\">\n {params.label || params.url}\n </h4>\n <Show when={params.description}>\n <p class=\"text-xs text-gray-500 dark:text-gray-400 truncate\">{params.description}</p>\n </Show>\n </div>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"w-4 h-4 text-gray-400 group-hover:text-gray-600 dark:group-hover:text-gray-300 shrink-0 transition-colors\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n <polyline points=\"15 3 21 3 21 9\" />\n <line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\" />\n </svg>\n </a>\n )\n}\n\n/**\n * Render a single component with error boundary\n */\nfunction ComponentRenderer(props: {\n component: UIComponent\n onError?: (error: RendererError) => void\n}) {\n // Validate component before rendering\n const validation = validateComponent(props.component)\n if (!validation.valid) {\n props.onError?.({\n type: 'validation',\n message: 'Component validation failed',\n componentId: props.component.id,\n details: validation.errors,\n })\n\n return (\n <div class=\"w-full h-full bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg p-4\">\n <p class=\"text-sm font-medium text-red-900 dark:text-red-100\">Validation Error</p>\n <p class=\"text-xs text-red-700 dark:text-red-300 mt-1\">\n {validation.errors?.[0]?.message || 'Unknown validation error'}\n </p>\n </div>\n )\n }\n\n // Render based on component type with enhanced error boundary\n return (\n <GenerativeUIErrorBoundary\n componentId={props.component.id}\n componentType={props.component.type}\n onError={props.onError}\n allowRetry={true}\n >\n <Show when={props.component.type === 'chart'}>\n <ChartRenderer component={props.component} onError={props.onError} />\n </Show>\n <Show when={props.component.type === 'table'}>\n <TableRenderer component={props.component} onError={props.onError} />\n </Show>\n <Show when={props.component.type === 'metric'}>\n <MetricRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'text'}>\n <TextRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'iframe'}>\n <IframeRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'image'}>\n <ImageRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'link'}>\n <LinkRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'action'}>\n <ActionRenderer component={props.component} />\n </Show>\n </GenerativeUIErrorBoundary>\n )\n}\n\n/**\n * Render an action component (button or link)\n */\nfunction ActionRenderer(props: { component: UIComponent }) {\n const params = props.component.params as any\n let dispatchAction: ((toolName: string, toolParams: any) => void) | null = null\n\n // Initialize CustomEvent dispatcher only on client-side\n onMount(() => {\n if (typeof window !== 'undefined') {\n dispatchAction = (toolName: string, toolParams: any) => {\n const event = new CustomEvent('mcp-action', {\n detail: {\n toolName,\n params: toolParams,\n },\n bubbles: true,\n })\n window.dispatchEvent(event)\n }\n }\n })\n\n // Handle click to execute tool via window event\n const handleClick = (e: MouseEvent) => {\n if (params.action === 'tool-call' && params.toolName) {\n e.preventDefault()\n // SSR-safe: Only call if dispatcher was initialized client-side\n dispatchAction?.(params.toolName, params.params || {})\n }\n }\n\n if (params.type === 'link' || params.action === 'link') {\n return (\n <a\n href={params.url || '#'}\n target={params.url ? '_blank' : undefined}\n rel=\"noopener noreferrer\"\n class={`inline-flex items-center gap-2 px-4 py-2 rounded-md text-sm font-medium transition-colors\n ${params.variant === 'primary' ? 'bg-blue-600 text-white hover:bg-blue-700' :\n params.variant === 'outline' ? 'border border-gray-300 text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-800' :\n 'text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300'}`}\n onClick={handleClick}\n >\n <Show when={params.icon}>\n <span>{params.icon}</span>\n </Show>\n {params.label}\n </a>\n )\n }\n\n return (\n <button\n type={params.action === 'submit' ? 'submit' : 'button'}\n disabled={params.disabled}\n class={`inline-flex items-center gap-2 px-4 py-2 rounded-md text-sm font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500\n ${params.variant === 'primary' ? 'bg-blue-600 text-white hover:bg-blue-700 shadow-sm' :\n params.variant === 'secondary' ? 'bg-gray-100 text-gray-900 hover:bg-gray-200 dark:bg-gray-700 dark:text-white dark:hover:bg-gray-600' :\n params.variant === 'outline' ? 'border border-gray-300 text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-800' :\n params.variant === 'danger' ? 'bg-red-600 text-white hover:bg-red-700' :\n 'bg-transparent text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-800'}\n ${params.disabled ? 'opacity-50 cursor-not-allowed' : ''}\n ${params.size === 'sm' ? 'px-3 py-1.5 text-xs' : params.size === 'lg' ? 'px-6 py-3 text-base' : ''}`}\n onClick={handleClick}\n >\n <Show when={params.icon}>\n <span>{params.icon}</span>\n </Show>\n {params.label}\n </button>\n )\n}\n\n/**\n * Main UIResourceRenderer component\n */\nexport const UIResourceRenderer: Component<UIResourceRendererProps> = (props) => {\n const layout = () => {\n // ✅ PHASE 3.3 FIX: Check if content is a UIComponent (non-composite) vs UILayout (composite)\n // UILayout has type='composite', UIComponent has type='chart'|'table'|'metric'|'text'\n if ('type' in props.content && (props.content as any).type !== 'composite') {\n return {\n id: 'single-component',\n components: [props.content as UIComponent],\n grid: {\n columns: 12,\n gap: '1rem',\n },\n } as UILayout\n }\n return props.content as UILayout\n }\n\n // Grid position to CSS Grid styles\n const getGridStyles = (component: UIComponent) => {\n // ✅ PHASE 3 FIX: Defensive check for position field\n if (!component.position) {\n console.error('[UIResourceRenderer] Component missing position field:', component)\n return {\n 'grid-column': '1 / span 12',\n 'grid-row': 'auto',\n }\n }\n\n const { colStart, colSpan, rowStart, rowSpan = 1 } = component.position\n\n return {\n 'grid-column': `${colStart} / span ${colSpan}`,\n 'grid-row': rowStart ? `${rowStart} / span ${rowSpan}` : 'auto',\n }\n }\n\n // Convert grid styles to CSS string to avoid setStyleProperty\n const gridContainerStyle = () =>\n `grid-template-columns: repeat(${layout().grid.columns}, 1fr); gap: ${layout().grid.gap}`\n\n // Convert component grid styles to CSS string\n const getGridStyleString = (component: UIComponent) => {\n // ✅ PHASE 3 FIX: Defensive check for position field\n if (!component.position) {\n console.error('[UIResourceRenderer] Component missing position field:', component)\n return 'grid-column: 1 / span 12; grid-row: auto' // Default to full width\n }\n\n const { colStart, colSpan, rowStart, rowSpan = 1 } = component.position\n return `grid-column: ${colStart} / span ${colSpan}; grid-row: ${rowStart ? `${rowStart} / span ${rowSpan}` : 'auto'}`\n }\n\n return (\n <div class={`w-full ${props.class || ''}`}>\n <div class=\"grid gap-4\" style={gridContainerStyle()}>\n <For each={layout().components}>\n {(component) => (\n <div style={getGridStyleString(component)}>\n <ComponentRenderer component={component} onError={props.onError} />\n </div>\n )}\n </For>\n </div>\n </div>\n )\n}\n"],"names":["ChartRenderer","props","iframeUrl","setIframeUrl","createSignal","isLoading","setIsLoading","error","setError","onMount","chartParams","component","params","chartConfig","type","data","options","responsive","maintainAspectRatio","configStr","encodeURIComponent","JSON","stringify","url","_el$","_$getNextElement","_tmpl$5","_el$11","firstChild","_el$12","_co$2","_$getNextMarker","nextSibling","_el$13","_el$14","_co$3","_el$15","_el$16","_co$4","_$insert","_$createComponent","Show","when","children","_tmpl$","_el$3","_tmpl$2","_el$4","_el$5","_el$6","_$memo","_el$7","_tmpl$4","_el$1","_el$10","_co$","_el$9","_el$0","title","_el$8","_tmpl$3","addEventListener","onError","message","componentId","id","_$effect","_$setAttribute","TableRenderer","tableParams","_el$17","_tmpl$7","_el$18","_el$38","_el$39","_co$8","_el$20","_el$21","_el$22","_el$23","_el$24","_el$40","_el$41","_co$9","_el$19","For","each","columns","column","_el$42","_tmpl$8","label","_$p","_$style","width","rows","slice","DEFAULT_RESOURCE_LIMITS","maxTableRows","row","i","_el$43","_tmpl$9","_el$44","_tmpl$0","_el$45","_$setProperty","key","includes","DOMPurify","sanitize","marked","parse","async","ADD_ATTR","_$className","pagination","_el$25","_tmpl$6","_el$26","_el$27","_el$32","_el$33","_co$5","_el$28","_el$34","_el$35","_co$6","_el$30","_el$36","_el$37","_co$7","currentPage","pageSize","Math","min","totalRows","MetricRenderer","metricParams","_el$46","_tmpl$12","_el$47","_el$48","_el$49","_el$50","_el$51","_el$53","_el$54","_co$0","_el$64","_el$65","_co$11","_el$66","_el$67","_co$12","value","unit","_el$52","_tmpl$1","trend","_el$55","_tmpl$10","_el$56","_el$59","_el$60","_co$1","_el$57","_el$61","_el$62","_co$10","_c$","direction","abs","subtitle","_el$63","_tmpl$11","TextRenderer","textParams","htmlContent","createMemo","markdown","content","_el$68","_tmpl$13","_el$69","_p$","_v$","className","_v$2","e","t","undefined","IframeRenderer","_el$70","_tmpl$15","_el$74","_el$75","_co$13","_el$73","_el$71","_tmpl$14","_el$72","_v$3","_v$4","_v$5","height","a","ImageRenderer","_el$76","_tmpl$17","_el$77","_el$78","_el$79","_el$82","_el$83","_co$14","caption","_el$80","_tmpl$16","_el$81","_v$6","_v$7","_v$8","alt","LinkRenderer","_el$84","_tmpl$19","_el$85","_el$86","_el$87","_el$89","_el$90","_co$15","$$click","stopPropagation","description","_el$88","_tmpl$18","_$runHydrationEvents","ComponentRenderer","validation","validateComponent","valid","details","errors","_el$91","_tmpl$20","_el$92","_el$93","GenerativeUIErrorBoundary","componentType","allowRetry","ActionRenderer","dispatchAction","window","toolName","toolParams","event","CustomEvent","detail","bubbles","dispatchEvent","handleClick","action","preventDefault","_el$94","_tmpl$22","_el$96","_el$97","_co$16","_el$98","_el$99","_co$17","icon","_el$95","_tmpl$21","_v$9","_v$0","_v$1","variant","_el$100","_tmpl$23","_el$102","_el$103","_co$18","_el$104","_el$105","_co$19","_el$101","_v$10","_v$11","disabled","_v$12","size","UIResourceRenderer","layout","components","grid","gap","gridContainerStyle","getGridStyleString","position","console","colStart","colSpan","rowStart","rowSpan","_el$106","_tmpl$24","_el$107","_el$108","_tmpl$25","_v$13","class","_v$14","_$delegateEvents"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UIResourceRenderer.d.ts","sourceRoot":"","sources":["../../src/components/UIResourceRenderer.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,SAAS,EAAgD,MAAM,UAAU,CAAA;AAElF,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAiB,MAAM,UAAU,CAAA;AAKnF;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,OAAO,EAAE,WAAW,GAAG,QAAQ,CAAA;IAE/B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;IAExC;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;
|
|
1
|
+
{"version":3,"file":"UIResourceRenderer.d.ts","sourceRoot":"","sources":["../../src/components/UIResourceRenderer.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,SAAS,EAAgD,MAAM,UAAU,CAAA;AAElF,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAiB,MAAM,UAAU,CAAA;AAKnF;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,OAAO,EAAE,WAAW,GAAG,QAAQ,CAAA;IAE/B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;IAExC;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AA4dD;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,CAAC,uBAAuB,CAiEjE,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { delegateEvents, getNextElement, template, insert, createComponent, effect, style, className, getNextMarker, setAttribute, memo, setProperty, runHydrationEvents
|
|
1
|
+
import { delegateEvents, getNextElement, template, insert, createComponent, effect, style, className, getNextMarker, setAttribute, memo, setProperty, runHydrationEvents } from "solid-js/web";
|
|
2
2
|
import purify from "../node_modules/.pnpm/dompurify@3.3.0/node_modules/dompurify/dist/purify.es.js";
|
|
3
3
|
import { For, Show, createSignal, onMount, createMemo } from "solid-js";
|
|
4
4
|
import { validateComponent, DEFAULT_RESOURCE_LIMITS } from "../services/validation.js";
|
|
@@ -420,19 +420,25 @@ function ComponentRenderer(props) {
|
|
|
420
420
|
}
|
|
421
421
|
function ActionRenderer(props) {
|
|
422
422
|
const params = props.component.params;
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
423
|
+
let dispatchAction = null;
|
|
424
|
+
onMount(() => {
|
|
425
|
+
if (typeof window !== "undefined") {
|
|
426
|
+
dispatchAction = (toolName, toolParams) => {
|
|
427
427
|
const event = new CustomEvent("mcp-action", {
|
|
428
428
|
detail: {
|
|
429
|
-
toolName
|
|
430
|
-
params:
|
|
429
|
+
toolName,
|
|
430
|
+
params: toolParams
|
|
431
431
|
},
|
|
432
432
|
bubbles: true
|
|
433
433
|
});
|
|
434
434
|
window.dispatchEvent(event);
|
|
435
|
-
}
|
|
435
|
+
};
|
|
436
|
+
}
|
|
437
|
+
});
|
|
438
|
+
const handleClick = (e) => {
|
|
439
|
+
if (params.action === "tool-call" && params.toolName) {
|
|
440
|
+
e.preventDefault();
|
|
441
|
+
dispatchAction == null ? void 0 : dispatchAction(params.toolName, params.params || {});
|
|
436
442
|
}
|
|
437
443
|
};
|
|
438
444
|
if (params.type === "link" || params.action === "link") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UIResourceRenderer.js","sources":["../../src/components/UIResourceRenderer.tsx"],"sourcesContent":["/**\n * UI Resource Renderer Component\n * Phase 0: Foundation with iframe sandbox and composite grid support\n */\n\nimport DOMPurify from 'dompurify'\nimport { Component, createSignal, onMount, Show, For, createMemo } from 'solid-js'\nimport { isServer } from 'solid-js/web'\nimport type { UIComponent, UILayout, RendererError, ComponentType } from '../types'\nimport { validateComponent, DEFAULT_RESOURCE_LIMITS } from '../services/validation'\nimport { GenerativeUIErrorBoundary } from './GenerativeUIErrorBoundary'\nimport { marked } from 'marked'\n\n/**\n * Props for UIResourceRenderer\n */\nexport interface UIResourceRendererProps {\n /**\n * Single component or full layout to render\n */\n content: UIComponent | UILayout\n\n /**\n * Lazy loading (default: true)\n */\n lazyLoad?: boolean\n\n /**\n * Error callback\n */\n onError?: (error: RendererError) => void\n\n /**\n * Custom CSS class\n */\n class?: string\n}\n\n/**\n * Render a single chart component in a sandboxed iframe\n */\nfunction ChartRenderer(props: {\n component: UIComponent\n onError?: (error: RendererError) => void\n}) {\n const [iframeUrl, setIframeUrl] = createSignal<string>()\n const [isLoading, setIsLoading] = createSignal(true)\n const [error, setError] = createSignal<string>()\n\n onMount(() => {\n const chartParams = props.component.params as any\n\n // Build Quickchart URL\n const chartConfig = {\n type: chartParams.type,\n data: chartParams.data,\n options: {\n ...chartParams.options,\n responsive: true,\n maintainAspectRatio: false,\n },\n }\n\n // Encode chart configuration for Quickchart API\n const configStr = encodeURIComponent(JSON.stringify(chartConfig))\n const url = `https://quickchart.io/chart?c=${configStr}&width=500&height=300&devicePixelRatio=2`\n\n // Validate domain (should always pass for quickchart.io)\n setIframeUrl(url)\n setIsLoading(false)\n })\n\n return (\n <div class=\"relative w-full h-full min-h-[300px] bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden\">\n <Show when={isLoading()}>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <div class=\"animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600\" />\n </div>\n </Show>\n\n <Show when={error()}>\n <div class=\"absolute inset-0 flex items-center justify-center p-4\">\n <div class=\"text-center\">\n <p class=\"text-red-600 dark:text-red-400 text-sm font-medium\">Chart Error</p>\n <p class=\"text-gray-600 dark:text-gray-400 text-xs mt-1\">{error()}</p>\n </div>\n </div>\n </Show>\n\n <Show when={iframeUrl() && !error()}>\n <div class=\"w-full h-full p-4\">\n <Show when={(props.component.params as any).title}>\n <h3 class=\"text-sm font-semibold text-gray-900 dark:text-white mb-3\">\n {(props.component.params as any).title}\n </h3>\n </Show>\n <div class=\"w-full h-full\">\n <img\n src={iframeUrl()}\n alt=\"Chart visualization\"\n class=\"w-full h-auto max-h-[300px] object-contain\"\n onError={() => {\n setError('Failed to load chart')\n props.onError?.({\n type: 'render',\n message: 'Chart rendering failed',\n componentId: props.component.id,\n })\n }}\n />\n </div>\n </div>\n </Show>\n </div>\n )\n}\n\n/**\n * Render a table component\n */\nfunction TableRenderer(props: {\n component: UIComponent\n onError?: (error: RendererError) => void\n}) {\n const tableParams = props.component.params as any\n\n return (\n <div class=\"w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden\">\n <div class=\"p-4\">\n <Show when={tableParams.title}>\n <h3 class=\"text-sm font-semibold text-gray-900 dark:text-white mb-3\">\n {tableParams.title}\n </h3>\n </Show>\n\n <div class=\"overflow-x-auto\">\n <table class=\"min-w-full divide-y divide-gray-200 dark:divide-gray-700 border-separate border-spacing-0\">\n <thead class=\"bg-gray-50 dark:bg-gray-900/50\">\n <tr>\n <For each={tableParams.columns}>\n {(column: any) => (\n <th\n scope=\"col\"\n class=\"px-6 py-3 text-left text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wider border-b border-gray-200 dark:border-gray-700 first:pl-6 last:pr-6\"\n style={column.width ? { width: column.width } : {}}\n >\n {column.label}\n </th>\n )}\n </For>\n </tr>\n </thead>\n <tbody class=\"bg-white dark:bg-gray-800 divide-y divide-gray-200 dark:divide-gray-700\">\n <For each={tableParams.rows.slice(0, DEFAULT_RESOURCE_LIMITS.maxTableRows)}>\n {(row: any, i) => (\n <tr class={`hover:bg-gray-50 dark:hover:bg-gray-700/50 transition-colors ${i() % 2 === 0 ? 'bg-white dark:bg-gray-800' : 'bg-gray-50/30 dark:bg-gray-800/50'}`}>\n <For each={tableParams.columns}>\n {(column: any) => (\n <td class=\"px-6 py-4 text-sm text-gray-700 dark:text-gray-200 whitespace-normal break-words leading-relaxed first:pl-6 last:pr-6\">\n <div\n innerHTML={\n typeof row[column.key] === 'string' && (row[column.key].includes('[') || row[column.key].includes('**') || row[column.key].includes('`'))\n ? DOMPurify.sanitize(marked.parse(row[column.key], { async: false }) as string, { ADD_ATTR: ['target', 'rel'] })\n : (row[column.key] || '-')\n }\n />\n </td>\n )}\n </For>\n </tr>\n )}\n </For>\n </tbody>\n </table>\n </div>\n\n <Show when={tableParams.pagination}>\n <div class=\"mt-3 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400\">\n <span>\n Showing {tableParams.pagination.currentPage * tableParams.pagination.pageSize + 1} -{' '}\n {Math.min(\n (tableParams.pagination.currentPage + 1) * tableParams.pagination.pageSize,\n tableParams.pagination.totalRows\n )}{' '}\n of {tableParams.pagination.totalRows}\n </span>\n </div>\n </Show>\n </div>\n </div>\n )\n}\n\n/**\n * Render a metric card component\n */\nfunction MetricRenderer(props: { component: UIComponent }) {\n const metricParams = props.component.params as any\n\n return (\n <div class=\"w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 p-4\">\n <div class=\"flex flex-col h-full justify-between\">\n <div>\n <p class=\"text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wide\">\n {metricParams.title}\n </p>\n <div class=\"mt-2 flex items-baseline\">\n <p class=\"text-2xl font-semibold text-gray-900 dark:text-white\">{metricParams.value}</p>\n <Show when={metricParams.unit}>\n <span class=\"ml-2 text-sm font-medium text-gray-500 dark:text-gray-400\">\n {metricParams.unit}\n </span>\n </Show>\n </div>\n </div>\n\n <Show when={metricParams.trend}>\n <div class=\"mt-3 flex items-center\">\n <span\n class={`text-sm font-medium ${metricParams.trend.direction === 'up'\n ? 'text-green-600 dark:text-green-400'\n : metricParams.trend.direction === 'down'\n ? 'text-red-600 dark:text-red-400'\n : 'text-gray-600 dark:text-gray-400'\n }`}\n >\n {metricParams.trend.direction === 'up'\n ? '�'\n : metricParams.trend.direction === 'down'\n ? '�'\n : '�'}{' '}\n {Math.abs(metricParams.trend.value)}%\n </span>\n </div>\n </Show>\n\n <Show when={metricParams.subtitle}>\n <p class=\"mt-2 text-xs text-gray-500 dark:text-gray-400\">{metricParams.subtitle}</p>\n </Show>\n </div>\n </div>\n )\n}\n\n/**\n * Render a text component (with optional markdown)\n */\nfunction TextRenderer(props: { component: UIComponent }) {\n const textParams = props.component.params as any\n\n // Convert markdown to HTML if markdown flag is true\n const htmlContent = createMemo(() => {\n if (textParams.markdown) {\n return marked.parse(textParams.content, { async: false }) as string\n }\n return textParams.content\n })\n\n return (\n <div class=\"w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 p-4\">\n <div\n class={`prose prose-sm dark:prose-invert max-w-none ${textParams.className || ''}`}\n innerHTML={htmlContent()}\n />\n </div>\n )\n}\n\n/**\n * Render an iframe component\n */\nfunction IframeRenderer(props: { component: UIComponent }) {\n const params = props.component.params as any\n return (\n <div class=\"w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden flex flex-col\">\n <Show when={params.title}>\n <div class=\"px-4 py-2 border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-900\">\n <h3 class=\"text-sm font-semibold text-gray-900 dark:text-white\">{params.title}</h3>\n </div>\n </Show>\n <iframe\n src={params.url}\n title={params.title || 'Embedded content'}\n class=\"w-full border-0 flex-1\"\n style={`height: ${params.height || '400px'}; min-height: 300px;`}\n sandbox=\"allow-scripts allow-same-origin allow-popups allow-forms\"\n loading=\"lazy\"\n />\n </div>\n )\n}\n\n/**\n * Render an image component\n */\nfunction ImageRenderer(props: { component: UIComponent }) {\n const params = props.component.params as any\n return (\n <div class=\"w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden flex flex-col\">\n <div class=\"flex-1 flex items-center justify-center p-4 bg-gray-50 dark:bg-gray-900 min-h-[200px]\">\n <a href={params.url} target=\"_blank\" rel=\"noopener noreferrer\" class=\"cursor-zoom-in\">\n <img\n src={params.url}\n alt={params.alt || 'Image'}\n class=\"max-w-full max-h-[500px] object-contain rounded shadow-sm hover:opacity-95 transition-opacity\"\n loading=\"lazy\"\n />\n </a>\n </div>\n <Show when={params.caption}>\n <div class=\"p-3 border-t border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800\">\n <p class=\"text-sm text-gray-600 dark:text-gray-400 text-center\">{params.caption}</p>\n </div>\n </Show>\n </div>\n )\n}\n\n/**\n * Render a link component\n */\n/**\n * Render a link component\n */\nfunction LinkRenderer(props: { component: UIComponent }) {\n const params = props.component.params as any\n return (\n <a\n href={params.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors group h-full\"\n onClick={(e) => e.stopPropagation()}\n >\n <div class=\"p-2 bg-blue-50 dark:bg-blue-900/30 rounded-full text-blue-600 dark:text-blue-400 group-hover:bg-blue-100 dark:group-hover:bg-blue-900/50 shrink-0 transition-colors\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"w-5 h-5\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" />\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\n </svg>\n </div>\n <div class=\"flex-1 min-w-0\">\n <h4 class=\"text-sm font-medium text-gray-900 dark:text-white truncate group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors\">\n {params.label || params.url}\n </h4>\n <Show when={params.description}>\n <p class=\"text-xs text-gray-500 dark:text-gray-400 truncate\">{params.description}</p>\n </Show>\n </div>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"w-4 h-4 text-gray-400 group-hover:text-gray-600 dark:group-hover:text-gray-300 shrink-0 transition-colors\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n <polyline points=\"15 3 21 3 21 9\" />\n <line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\" />\n </svg>\n </a>\n )\n}\n\n/**\n * Render a single component with error boundary\n */\nfunction ComponentRenderer(props: {\n component: UIComponent\n onError?: (error: RendererError) => void\n}) {\n // Validate component before rendering\n const validation = validateComponent(props.component)\n if (!validation.valid) {\n props.onError?.({\n type: 'validation',\n message: 'Component validation failed',\n componentId: props.component.id,\n details: validation.errors,\n })\n\n return (\n <div class=\"w-full h-full bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg p-4\">\n <p class=\"text-sm font-medium text-red-900 dark:text-red-100\">Validation Error</p>\n <p class=\"text-xs text-red-700 dark:text-red-300 mt-1\">\n {validation.errors?.[0]?.message || 'Unknown validation error'}\n </p>\n </div>\n )\n }\n\n // Render based on component type with enhanced error boundary\n return (\n <GenerativeUIErrorBoundary\n componentId={props.component.id}\n componentType={props.component.type}\n onError={props.onError}\n allowRetry={true}\n >\n <Show when={props.component.type === 'chart'}>\n <ChartRenderer component={props.component} onError={props.onError} />\n </Show>\n <Show when={props.component.type === 'table'}>\n <TableRenderer component={props.component} onError={props.onError} />\n </Show>\n <Show when={props.component.type === 'metric'}>\n <MetricRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'text'}>\n <TextRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'iframe'}>\n <IframeRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'image'}>\n <ImageRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'link'}>\n <LinkRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'action'}>\n <ActionRenderer component={props.component} />\n </Show>\n </GenerativeUIErrorBoundary>\n )\n}\n\n/**\n * Render an action component (button or link)\n */\nfunction ActionRenderer(props: { component: UIComponent }) {\n const params = props.component.params as any\n\n // Handle click to execute tool via window event\n const handleClick = (e: MouseEvent) => {\n if (params.action === 'tool-call' && params.toolName) {\n e.preventDefault()\n // Client-only: CustomEvent and window are not available in SSR\n if (!isServer && typeof window !== 'undefined') {\n const event = new CustomEvent('mcp-action', {\n detail: {\n toolName: params.toolName,\n params: params.params || {},\n },\n bubbles: true,\n })\n window.dispatchEvent(event)\n }\n }\n }\n\n if (params.type === 'link' || params.action === 'link') {\n return (\n <a\n href={params.url || '#'}\n target={params.url ? '_blank' : undefined}\n rel=\"noopener noreferrer\"\n class={`inline-flex items-center gap-2 px-4 py-2 rounded-md text-sm font-medium transition-colors\n ${params.variant === 'primary' ? 'bg-blue-600 text-white hover:bg-blue-700' :\n params.variant === 'outline' ? 'border border-gray-300 text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-800' :\n 'text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300'}`}\n onClick={handleClick}\n >\n <Show when={params.icon}>\n <span>{params.icon}</span>\n </Show>\n {params.label}\n </a>\n )\n }\n\n return (\n <button\n type={params.action === 'submit' ? 'submit' : 'button'}\n disabled={params.disabled}\n class={`inline-flex items-center gap-2 px-4 py-2 rounded-md text-sm font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500\n ${params.variant === 'primary' ? 'bg-blue-600 text-white hover:bg-blue-700 shadow-sm' :\n params.variant === 'secondary' ? 'bg-gray-100 text-gray-900 hover:bg-gray-200 dark:bg-gray-700 dark:text-white dark:hover:bg-gray-600' :\n params.variant === 'outline' ? 'border border-gray-300 text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-800' :\n params.variant === 'danger' ? 'bg-red-600 text-white hover:bg-red-700' :\n 'bg-transparent text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-800'}\n ${params.disabled ? 'opacity-50 cursor-not-allowed' : ''}\n ${params.size === 'sm' ? 'px-3 py-1.5 text-xs' : params.size === 'lg' ? 'px-6 py-3 text-base' : ''}`}\n onClick={handleClick}\n >\n <Show when={params.icon}>\n <span>{params.icon}</span>\n </Show>\n {params.label}\n </button>\n )\n}\n\n/**\n * Main UIResourceRenderer component\n */\nexport const UIResourceRenderer: Component<UIResourceRendererProps> = (props) => {\n const layout = () => {\n // ✅ PHASE 3.3 FIX: Check if content is a UIComponent (non-composite) vs UILayout (composite)\n // UILayout has type='composite', UIComponent has type='chart'|'table'|'metric'|'text'\n if ('type' in props.content && (props.content as any).type !== 'composite') {\n return {\n id: 'single-component',\n components: [props.content as UIComponent],\n grid: {\n columns: 12,\n gap: '1rem',\n },\n } as UILayout\n }\n return props.content as UILayout\n }\n\n // Grid position to CSS Grid styles\n const getGridStyles = (component: UIComponent) => {\n // ✅ PHASE 3 FIX: Defensive check for position field\n if (!component.position) {\n console.error('[UIResourceRenderer] Component missing position field:', component)\n return {\n 'grid-column': '1 / span 12',\n 'grid-row': 'auto',\n }\n }\n\n const { colStart, colSpan, rowStart, rowSpan = 1 } = component.position\n\n return {\n 'grid-column': `${colStart} / span ${colSpan}`,\n 'grid-row': rowStart ? `${rowStart} / span ${rowSpan}` : 'auto',\n }\n }\n\n // Convert grid styles to CSS string to avoid setStyleProperty\n const gridContainerStyle = () =>\n `grid-template-columns: repeat(${layout().grid.columns}, 1fr); gap: ${layout().grid.gap}`\n\n // Convert component grid styles to CSS string\n const getGridStyleString = (component: UIComponent) => {\n // ✅ PHASE 3 FIX: Defensive check for position field\n if (!component.position) {\n console.error('[UIResourceRenderer] Component missing position field:', component)\n return 'grid-column: 1 / span 12; grid-row: auto' // Default to full width\n }\n\n const { colStart, colSpan, rowStart, rowSpan = 1 } = component.position\n return `grid-column: ${colStart} / span ${colSpan}; grid-row: ${rowStart ? `${rowStart} / span ${rowSpan}` : 'auto'}`\n }\n\n return (\n <div class={`w-full ${props.class || ''}`}>\n <div class=\"grid gap-4\" style={gridContainerStyle()}>\n <For each={layout().components}>\n {(component) => (\n <div style={getGridStyleString(component)}>\n <ComponentRenderer component={component} onError={props.onError} />\n </div>\n )}\n </For>\n </div>\n </div>\n )\n}\n"],"names":["ChartRenderer","props","iframeUrl","setIframeUrl","createSignal","isLoading","setIsLoading","error","setError","onMount","chartParams","component","params","chartConfig","type","data","options","responsive","maintainAspectRatio","configStr","encodeURIComponent","JSON","stringify","url","_el$","_$getNextElement","_tmpl$5","_el$11","firstChild","_el$12","_co$2","_$getNextMarker","nextSibling","_el$13","_el$14","_co$3","_el$15","_el$16","_co$4","_$insert","_$createComponent","Show","when","children","_tmpl$","_el$3","_tmpl$2","_el$4","_el$5","_el$6","_$memo","_el$7","_tmpl$4","_el$1","_el$10","_co$","_el$9","_el$0","title","_el$8","_tmpl$3","addEventListener","onError","message","componentId","id","_$effect","_$setAttribute","TableRenderer","tableParams","_el$17","_tmpl$7","_el$18","_el$38","_el$39","_co$8","_el$20","_el$21","_el$22","_el$23","_el$24","_el$40","_el$41","_co$9","_el$19","For","each","columns","column","_el$42","_tmpl$8","label","_$p","_$style","width","rows","slice","DEFAULT_RESOURCE_LIMITS","maxTableRows","row","i","_el$43","_tmpl$9","_el$44","_tmpl$0","_el$45","_$setProperty","key","includes","DOMPurify","sanitize","marked","parse","async","ADD_ATTR","_$className","pagination","_el$25","_tmpl$6","_el$26","_el$27","_el$32","_el$33","_co$5","_el$28","_el$34","_el$35","_co$6","_el$30","_el$36","_el$37","_co$7","currentPage","pageSize","Math","min","totalRows","MetricRenderer","metricParams","_el$46","_tmpl$12","_el$47","_el$48","_el$49","_el$50","_el$51","_el$53","_el$54","_co$0","_el$64","_el$65","_co$11","_el$66","_el$67","_co$12","value","unit","_el$52","_tmpl$1","trend","_el$55","_tmpl$10","_el$56","_el$59","_el$60","_co$1","_el$57","_el$61","_el$62","_co$10","_c$","direction","abs","subtitle","_el$63","_tmpl$11","TextRenderer","textParams","htmlContent","createMemo","markdown","content","_el$68","_tmpl$13","_el$69","_p$","_v$","className","_v$2","e","t","undefined","IframeRenderer","_el$70","_tmpl$15","_el$74","_el$75","_co$13","_el$73","_el$71","_tmpl$14","_el$72","_v$3","_v$4","_v$5","height","a","ImageRenderer","_el$76","_tmpl$17","_el$77","_el$78","_el$79","_el$82","_el$83","_co$14","caption","_el$80","_tmpl$16","_el$81","_v$6","_v$7","_v$8","alt","LinkRenderer","_el$84","_tmpl$19","_el$85","_el$86","_el$87","_el$89","_el$90","_co$15","$$click","stopPropagation","description","_el$88","_tmpl$18","_$runHydrationEvents","ComponentRenderer","validation","validateComponent","valid","details","errors","_el$91","_tmpl$20","_el$92","_el$93","GenerativeUIErrorBoundary","componentType","allowRetry","ActionRenderer","handleClick","action","toolName","preventDefault","isServer","window","event","CustomEvent","detail","bubbles","dispatchEvent","_el$94","_tmpl$22","_el$96","_el$97","_co$16","_el$98","_el$99","_co$17","icon","_el$95","_tmpl$21","_v$9","_v$0","_v$1","variant","_el$100","_tmpl$23","_el$102","_el$103","_co$18","_el$104","_el$105","_co$19","_el$101","_v$10","_v$11","disabled","_v$12","size","UIResourceRenderer","layout","components","grid","gap","gridContainerStyle","getGridStyleString","position","console","colStart","colSpan","rowStart","rowSpan","_el$106","_tmpl$24","_el$107","_el$108","_tmpl$25","_v$13","class","_v$14","_$delegateEvents"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UIResourceRenderer.js","sources":["../../src/components/UIResourceRenderer.tsx"],"sourcesContent":["/**\n * UI Resource Renderer Component\n * Phase 0: Foundation with iframe sandbox and composite grid support\n */\n\nimport DOMPurify from 'dompurify'\nimport { Component, createSignal, onMount, Show, For, createMemo } from 'solid-js'\nimport { isServer } from 'solid-js/web'\nimport type { UIComponent, UILayout, RendererError, ComponentType } from '../types'\nimport { validateComponent, DEFAULT_RESOURCE_LIMITS } from '../services/validation'\nimport { GenerativeUIErrorBoundary } from './GenerativeUIErrorBoundary'\nimport { marked } from 'marked'\n\n/**\n * Props for UIResourceRenderer\n */\nexport interface UIResourceRendererProps {\n /**\n * Single component or full layout to render\n */\n content: UIComponent | UILayout\n\n /**\n * Lazy loading (default: true)\n */\n lazyLoad?: boolean\n\n /**\n * Error callback\n */\n onError?: (error: RendererError) => void\n\n /**\n * Custom CSS class\n */\n class?: string\n}\n\n/**\n * Render a single chart component in a sandboxed iframe\n */\nfunction ChartRenderer(props: {\n component: UIComponent\n onError?: (error: RendererError) => void\n}) {\n const [iframeUrl, setIframeUrl] = createSignal<string>()\n const [isLoading, setIsLoading] = createSignal(true)\n const [error, setError] = createSignal<string>()\n\n onMount(() => {\n const chartParams = props.component.params as any\n\n // Build Quickchart URL\n const chartConfig = {\n type: chartParams.type,\n data: chartParams.data,\n options: {\n ...chartParams.options,\n responsive: true,\n maintainAspectRatio: false,\n },\n }\n\n // Encode chart configuration for Quickchart API\n const configStr = encodeURIComponent(JSON.stringify(chartConfig))\n const url = `https://quickchart.io/chart?c=${configStr}&width=500&height=300&devicePixelRatio=2`\n\n // Validate domain (should always pass for quickchart.io)\n setIframeUrl(url)\n setIsLoading(false)\n })\n\n return (\n <div class=\"relative w-full h-full min-h-[300px] bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden\">\n <Show when={isLoading()}>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <div class=\"animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600\" />\n </div>\n </Show>\n\n <Show when={error()}>\n <div class=\"absolute inset-0 flex items-center justify-center p-4\">\n <div class=\"text-center\">\n <p class=\"text-red-600 dark:text-red-400 text-sm font-medium\">Chart Error</p>\n <p class=\"text-gray-600 dark:text-gray-400 text-xs mt-1\">{error()}</p>\n </div>\n </div>\n </Show>\n\n <Show when={iframeUrl() && !error()}>\n <div class=\"w-full h-full p-4\">\n <Show when={(props.component.params as any).title}>\n <h3 class=\"text-sm font-semibold text-gray-900 dark:text-white mb-3\">\n {(props.component.params as any).title}\n </h3>\n </Show>\n <div class=\"w-full h-full\">\n <img\n src={iframeUrl()}\n alt=\"Chart visualization\"\n class=\"w-full h-auto max-h-[300px] object-contain\"\n onError={() => {\n setError('Failed to load chart')\n props.onError?.({\n type: 'render',\n message: 'Chart rendering failed',\n componentId: props.component.id,\n })\n }}\n />\n </div>\n </div>\n </Show>\n </div>\n )\n}\n\n/**\n * Render a table component\n */\nfunction TableRenderer(props: {\n component: UIComponent\n onError?: (error: RendererError) => void\n}) {\n const tableParams = props.component.params as any\n\n return (\n <div class=\"w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden\">\n <div class=\"p-4\">\n <Show when={tableParams.title}>\n <h3 class=\"text-sm font-semibold text-gray-900 dark:text-white mb-3\">\n {tableParams.title}\n </h3>\n </Show>\n\n <div class=\"overflow-x-auto\">\n <table class=\"min-w-full divide-y divide-gray-200 dark:divide-gray-700 border-separate border-spacing-0\">\n <thead class=\"bg-gray-50 dark:bg-gray-900/50\">\n <tr>\n <For each={tableParams.columns}>\n {(column: any) => (\n <th\n scope=\"col\"\n class=\"px-6 py-3 text-left text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wider border-b border-gray-200 dark:border-gray-700 first:pl-6 last:pr-6\"\n style={column.width ? { width: column.width } : {}}\n >\n {column.label}\n </th>\n )}\n </For>\n </tr>\n </thead>\n <tbody class=\"bg-white dark:bg-gray-800 divide-y divide-gray-200 dark:divide-gray-700\">\n <For each={tableParams.rows.slice(0, DEFAULT_RESOURCE_LIMITS.maxTableRows)}>\n {(row: any, i) => (\n <tr class={`hover:bg-gray-50 dark:hover:bg-gray-700/50 transition-colors ${i() % 2 === 0 ? 'bg-white dark:bg-gray-800' : 'bg-gray-50/30 dark:bg-gray-800/50'}`}>\n <For each={tableParams.columns}>\n {(column: any) => (\n <td class=\"px-6 py-4 text-sm text-gray-700 dark:text-gray-200 whitespace-normal break-words leading-relaxed first:pl-6 last:pr-6\">\n <div\n innerHTML={\n typeof row[column.key] === 'string' && (row[column.key].includes('[') || row[column.key].includes('**') || row[column.key].includes('`'))\n ? DOMPurify.sanitize(marked.parse(row[column.key], { async: false }) as string, { ADD_ATTR: ['target', 'rel'] })\n : (row[column.key] || '-')\n }\n />\n </td>\n )}\n </For>\n </tr>\n )}\n </For>\n </tbody>\n </table>\n </div>\n\n <Show when={tableParams.pagination}>\n <div class=\"mt-3 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400\">\n <span>\n Showing {tableParams.pagination.currentPage * tableParams.pagination.pageSize + 1} -{' '}\n {Math.min(\n (tableParams.pagination.currentPage + 1) * tableParams.pagination.pageSize,\n tableParams.pagination.totalRows\n )}{' '}\n of {tableParams.pagination.totalRows}\n </span>\n </div>\n </Show>\n </div>\n </div>\n )\n}\n\n/**\n * Render a metric card component\n */\nfunction MetricRenderer(props: { component: UIComponent }) {\n const metricParams = props.component.params as any\n\n return (\n <div class=\"w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 p-4\">\n <div class=\"flex flex-col h-full justify-between\">\n <div>\n <p class=\"text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wide\">\n {metricParams.title}\n </p>\n <div class=\"mt-2 flex items-baseline\">\n <p class=\"text-2xl font-semibold text-gray-900 dark:text-white\">{metricParams.value}</p>\n <Show when={metricParams.unit}>\n <span class=\"ml-2 text-sm font-medium text-gray-500 dark:text-gray-400\">\n {metricParams.unit}\n </span>\n </Show>\n </div>\n </div>\n\n <Show when={metricParams.trend}>\n <div class=\"mt-3 flex items-center\">\n <span\n class={`text-sm font-medium ${metricParams.trend.direction === 'up'\n ? 'text-green-600 dark:text-green-400'\n : metricParams.trend.direction === 'down'\n ? 'text-red-600 dark:text-red-400'\n : 'text-gray-600 dark:text-gray-400'\n }`}\n >\n {metricParams.trend.direction === 'up'\n ? '�'\n : metricParams.trend.direction === 'down'\n ? '�'\n : '�'}{' '}\n {Math.abs(metricParams.trend.value)}%\n </span>\n </div>\n </Show>\n\n <Show when={metricParams.subtitle}>\n <p class=\"mt-2 text-xs text-gray-500 dark:text-gray-400\">{metricParams.subtitle}</p>\n </Show>\n </div>\n </div>\n )\n}\n\n/**\n * Render a text component (with optional markdown)\n */\nfunction TextRenderer(props: { component: UIComponent }) {\n const textParams = props.component.params as any\n\n // Convert markdown to HTML if markdown flag is true\n const htmlContent = createMemo(() => {\n if (textParams.markdown) {\n return marked.parse(textParams.content, { async: false }) as string\n }\n return textParams.content\n })\n\n return (\n <div class=\"w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 p-4\">\n <div\n class={`prose prose-sm dark:prose-invert max-w-none ${textParams.className || ''}`}\n innerHTML={htmlContent()}\n />\n </div>\n )\n}\n\n/**\n * Render an iframe component\n */\nfunction IframeRenderer(props: { component: UIComponent }) {\n const params = props.component.params as any\n return (\n <div class=\"w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden flex flex-col\">\n <Show when={params.title}>\n <div class=\"px-4 py-2 border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-900\">\n <h3 class=\"text-sm font-semibold text-gray-900 dark:text-white\">{params.title}</h3>\n </div>\n </Show>\n <iframe\n src={params.url}\n title={params.title || 'Embedded content'}\n class=\"w-full border-0 flex-1\"\n style={`height: ${params.height || '400px'}; min-height: 300px;`}\n sandbox=\"allow-scripts allow-same-origin allow-popups allow-forms\"\n loading=\"lazy\"\n />\n </div>\n )\n}\n\n/**\n * Render an image component\n */\nfunction ImageRenderer(props: { component: UIComponent }) {\n const params = props.component.params as any\n return (\n <div class=\"w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden flex flex-col\">\n <div class=\"flex-1 flex items-center justify-center p-4 bg-gray-50 dark:bg-gray-900 min-h-[200px]\">\n <a href={params.url} target=\"_blank\" rel=\"noopener noreferrer\" class=\"cursor-zoom-in\">\n <img\n src={params.url}\n alt={params.alt || 'Image'}\n class=\"max-w-full max-h-[500px] object-contain rounded shadow-sm hover:opacity-95 transition-opacity\"\n loading=\"lazy\"\n />\n </a>\n </div>\n <Show when={params.caption}>\n <div class=\"p-3 border-t border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800\">\n <p class=\"text-sm text-gray-600 dark:text-gray-400 text-center\">{params.caption}</p>\n </div>\n </Show>\n </div>\n )\n}\n\n/**\n * Render a link component\n */\n/**\n * Render a link component\n */\nfunction LinkRenderer(props: { component: UIComponent }) {\n const params = props.component.params as any\n return (\n <a\n href={params.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors group h-full\"\n onClick={(e) => e.stopPropagation()}\n >\n <div class=\"p-2 bg-blue-50 dark:bg-blue-900/30 rounded-full text-blue-600 dark:text-blue-400 group-hover:bg-blue-100 dark:group-hover:bg-blue-900/50 shrink-0 transition-colors\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"w-5 h-5\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" />\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\n </svg>\n </div>\n <div class=\"flex-1 min-w-0\">\n <h4 class=\"text-sm font-medium text-gray-900 dark:text-white truncate group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors\">\n {params.label || params.url}\n </h4>\n <Show when={params.description}>\n <p class=\"text-xs text-gray-500 dark:text-gray-400 truncate\">{params.description}</p>\n </Show>\n </div>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"w-4 h-4 text-gray-400 group-hover:text-gray-600 dark:group-hover:text-gray-300 shrink-0 transition-colors\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n <polyline points=\"15 3 21 3 21 9\" />\n <line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\" />\n </svg>\n </a>\n )\n}\n\n/**\n * Render a single component with error boundary\n */\nfunction ComponentRenderer(props: {\n component: UIComponent\n onError?: (error: RendererError) => void\n}) {\n // Validate component before rendering\n const validation = validateComponent(props.component)\n if (!validation.valid) {\n props.onError?.({\n type: 'validation',\n message: 'Component validation failed',\n componentId: props.component.id,\n details: validation.errors,\n })\n\n return (\n <div class=\"w-full h-full bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg p-4\">\n <p class=\"text-sm font-medium text-red-900 dark:text-red-100\">Validation Error</p>\n <p class=\"text-xs text-red-700 dark:text-red-300 mt-1\">\n {validation.errors?.[0]?.message || 'Unknown validation error'}\n </p>\n </div>\n )\n }\n\n // Render based on component type with enhanced error boundary\n return (\n <GenerativeUIErrorBoundary\n componentId={props.component.id}\n componentType={props.component.type}\n onError={props.onError}\n allowRetry={true}\n >\n <Show when={props.component.type === 'chart'}>\n <ChartRenderer component={props.component} onError={props.onError} />\n </Show>\n <Show when={props.component.type === 'table'}>\n <TableRenderer component={props.component} onError={props.onError} />\n </Show>\n <Show when={props.component.type === 'metric'}>\n <MetricRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'text'}>\n <TextRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'iframe'}>\n <IframeRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'image'}>\n <ImageRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'link'}>\n <LinkRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'action'}>\n <ActionRenderer component={props.component} />\n </Show>\n </GenerativeUIErrorBoundary>\n )\n}\n\n/**\n * Render an action component (button or link)\n */\nfunction ActionRenderer(props: { component: UIComponent }) {\n const params = props.component.params as any\n let dispatchAction: ((toolName: string, toolParams: any) => void) | null = null\n\n // Initialize CustomEvent dispatcher only on client-side\n onMount(() => {\n if (typeof window !== 'undefined') {\n dispatchAction = (toolName: string, toolParams: any) => {\n const event = new CustomEvent('mcp-action', {\n detail: {\n toolName,\n params: toolParams,\n },\n bubbles: true,\n })\n window.dispatchEvent(event)\n }\n }\n })\n\n // Handle click to execute tool via window event\n const handleClick = (e: MouseEvent) => {\n if (params.action === 'tool-call' && params.toolName) {\n e.preventDefault()\n // SSR-safe: Only call if dispatcher was initialized client-side\n dispatchAction?.(params.toolName, params.params || {})\n }\n }\n\n if (params.type === 'link' || params.action === 'link') {\n return (\n <a\n href={params.url || '#'}\n target={params.url ? '_blank' : undefined}\n rel=\"noopener noreferrer\"\n class={`inline-flex items-center gap-2 px-4 py-2 rounded-md text-sm font-medium transition-colors\n ${params.variant === 'primary' ? 'bg-blue-600 text-white hover:bg-blue-700' :\n params.variant === 'outline' ? 'border border-gray-300 text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-800' :\n 'text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300'}`}\n onClick={handleClick}\n >\n <Show when={params.icon}>\n <span>{params.icon}</span>\n </Show>\n {params.label}\n </a>\n )\n }\n\n return (\n <button\n type={params.action === 'submit' ? 'submit' : 'button'}\n disabled={params.disabled}\n class={`inline-flex items-center gap-2 px-4 py-2 rounded-md text-sm font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500\n ${params.variant === 'primary' ? 'bg-blue-600 text-white hover:bg-blue-700 shadow-sm' :\n params.variant === 'secondary' ? 'bg-gray-100 text-gray-900 hover:bg-gray-200 dark:bg-gray-700 dark:text-white dark:hover:bg-gray-600' :\n params.variant === 'outline' ? 'border border-gray-300 text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-800' :\n params.variant === 'danger' ? 'bg-red-600 text-white hover:bg-red-700' :\n 'bg-transparent text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-800'}\n ${params.disabled ? 'opacity-50 cursor-not-allowed' : ''}\n ${params.size === 'sm' ? 'px-3 py-1.5 text-xs' : params.size === 'lg' ? 'px-6 py-3 text-base' : ''}`}\n onClick={handleClick}\n >\n <Show when={params.icon}>\n <span>{params.icon}</span>\n </Show>\n {params.label}\n </button>\n )\n}\n\n/**\n * Main UIResourceRenderer component\n */\nexport const UIResourceRenderer: Component<UIResourceRendererProps> = (props) => {\n const layout = () => {\n // ✅ PHASE 3.3 FIX: Check if content is a UIComponent (non-composite) vs UILayout (composite)\n // UILayout has type='composite', UIComponent has type='chart'|'table'|'metric'|'text'\n if ('type' in props.content && (props.content as any).type !== 'composite') {\n return {\n id: 'single-component',\n components: [props.content as UIComponent],\n grid: {\n columns: 12,\n gap: '1rem',\n },\n } as UILayout\n }\n return props.content as UILayout\n }\n\n // Grid position to CSS Grid styles\n const getGridStyles = (component: UIComponent) => {\n // ✅ PHASE 3 FIX: Defensive check for position field\n if (!component.position) {\n console.error('[UIResourceRenderer] Component missing position field:', component)\n return {\n 'grid-column': '1 / span 12',\n 'grid-row': 'auto',\n }\n }\n\n const { colStart, colSpan, rowStart, rowSpan = 1 } = component.position\n\n return {\n 'grid-column': `${colStart} / span ${colSpan}`,\n 'grid-row': rowStart ? `${rowStart} / span ${rowSpan}` : 'auto',\n }\n }\n\n // Convert grid styles to CSS string to avoid setStyleProperty\n const gridContainerStyle = () =>\n `grid-template-columns: repeat(${layout().grid.columns}, 1fr); gap: ${layout().grid.gap}`\n\n // Convert component grid styles to CSS string\n const getGridStyleString = (component: UIComponent) => {\n // ✅ PHASE 3 FIX: Defensive check for position field\n if (!component.position) {\n console.error('[UIResourceRenderer] Component missing position field:', component)\n return 'grid-column: 1 / span 12; grid-row: auto' // Default to full width\n }\n\n const { colStart, colSpan, rowStart, rowSpan = 1 } = component.position\n return `grid-column: ${colStart} / span ${colSpan}; grid-row: ${rowStart ? `${rowStart} / span ${rowSpan}` : 'auto'}`\n }\n\n return (\n <div class={`w-full ${props.class || ''}`}>\n <div class=\"grid gap-4\" style={gridContainerStyle()}>\n <For each={layout().components}>\n {(component) => (\n <div style={getGridStyleString(component)}>\n <ComponentRenderer component={component} onError={props.onError} />\n </div>\n )}\n </For>\n </div>\n </div>\n )\n}\n"],"names":["ChartRenderer","props","iframeUrl","setIframeUrl","createSignal","isLoading","setIsLoading","error","setError","onMount","chartParams","component","params","chartConfig","type","data","options","responsive","maintainAspectRatio","configStr","encodeURIComponent","JSON","stringify","url","_el$","_$getNextElement","_tmpl$5","_el$11","firstChild","_el$12","_co$2","_$getNextMarker","nextSibling","_el$13","_el$14","_co$3","_el$15","_el$16","_co$4","_$insert","_$createComponent","Show","when","children","_tmpl$","_el$3","_tmpl$2","_el$4","_el$5","_el$6","_$memo","_el$7","_tmpl$4","_el$1","_el$10","_co$","_el$9","_el$0","title","_el$8","_tmpl$3","addEventListener","onError","message","componentId","id","_$effect","_$setAttribute","TableRenderer","tableParams","_el$17","_tmpl$7","_el$18","_el$38","_el$39","_co$8","_el$20","_el$21","_el$22","_el$23","_el$24","_el$40","_el$41","_co$9","_el$19","For","each","columns","column","_el$42","_tmpl$8","label","_$p","_$style","width","rows","slice","DEFAULT_RESOURCE_LIMITS","maxTableRows","row","i","_el$43","_tmpl$9","_el$44","_tmpl$0","_el$45","_$setProperty","key","includes","DOMPurify","sanitize","marked","parse","async","ADD_ATTR","_$className","pagination","_el$25","_tmpl$6","_el$26","_el$27","_el$32","_el$33","_co$5","_el$28","_el$34","_el$35","_co$6","_el$30","_el$36","_el$37","_co$7","currentPage","pageSize","Math","min","totalRows","MetricRenderer","metricParams","_el$46","_tmpl$12","_el$47","_el$48","_el$49","_el$50","_el$51","_el$53","_el$54","_co$0","_el$64","_el$65","_co$11","_el$66","_el$67","_co$12","value","unit","_el$52","_tmpl$1","trend","_el$55","_tmpl$10","_el$56","_el$59","_el$60","_co$1","_el$57","_el$61","_el$62","_co$10","_c$","direction","abs","subtitle","_el$63","_tmpl$11","TextRenderer","textParams","htmlContent","createMemo","markdown","content","_el$68","_tmpl$13","_el$69","_p$","_v$","className","_v$2","e","t","undefined","IframeRenderer","_el$70","_tmpl$15","_el$74","_el$75","_co$13","_el$73","_el$71","_tmpl$14","_el$72","_v$3","_v$4","_v$5","height","a","ImageRenderer","_el$76","_tmpl$17","_el$77","_el$78","_el$79","_el$82","_el$83","_co$14","caption","_el$80","_tmpl$16","_el$81","_v$6","_v$7","_v$8","alt","LinkRenderer","_el$84","_tmpl$19","_el$85","_el$86","_el$87","_el$89","_el$90","_co$15","$$click","stopPropagation","description","_el$88","_tmpl$18","_$runHydrationEvents","ComponentRenderer","validation","validateComponent","valid","details","errors","_el$91","_tmpl$20","_el$92","_el$93","GenerativeUIErrorBoundary","componentType","allowRetry","ActionRenderer","dispatchAction","window","toolName","toolParams","event","CustomEvent","detail","bubbles","dispatchEvent","handleClick","action","preventDefault","_el$94","_tmpl$22","_el$96","_el$97","_co$16","_el$98","_el$99","_co$17","icon","_el$95","_tmpl$21","_v$9","_v$0","_v$1","variant","_el$100","_tmpl$23","_el$102","_el$103","_co$18","_el$104","_el$105","_co$19","_el$101","_v$10","_v$11","disabled","_v$12","size","UIResourceRenderer","layout","components","grid","gap","gridContainerStyle","getGridStyleString","position","console","colStart","colSpan","rowStart","rowSpan","_el$106","_tmpl$24","_el$107","_el$108","_tmpl$25","_v$13","class","_v$14","_$delegateEvents"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -111,13 +111,31 @@ function DefaultErrorFallback(props: {
|
|
|
111
111
|
*/
|
|
112
112
|
export const GenerativeUIErrorBoundary: Component<GenerativeUIErrorBoundaryProps> = (props) => {
|
|
113
113
|
const [retryKey, setRetryKey] = createSignal(0)
|
|
114
|
-
|
|
114
|
+
// SSR-safe: Initialize performance timing
|
|
115
|
+
let initialRenderTime = 0
|
|
116
|
+
if (!isServer && typeof performance !== 'undefined') {
|
|
117
|
+
initialRenderTime = performance.now()
|
|
118
|
+
}
|
|
119
|
+
const [renderStartTime] = createSignal(initialRenderTime)
|
|
115
120
|
|
|
116
121
|
// Handle error with telemetry
|
|
117
122
|
const handleError = (error: Error) => {
|
|
118
|
-
|
|
123
|
+
// SSR-safe: Calculate render duration
|
|
124
|
+
let renderEndTime = 0
|
|
125
|
+
if (!isServer && typeof performance !== 'undefined') {
|
|
126
|
+
renderEndTime = performance.now()
|
|
127
|
+
}
|
|
119
128
|
const renderDuration = renderEndTime - renderStartTime()
|
|
120
129
|
|
|
130
|
+
// SSR-safe: Get client-only context
|
|
131
|
+
let userAgent = 'server'
|
|
132
|
+
let viewport = { width: 0, height: 0 }
|
|
133
|
+
|
|
134
|
+
if (!isServer && typeof window !== 'undefined') {
|
|
135
|
+
userAgent = navigator.userAgent
|
|
136
|
+
viewport = { width: window.innerWidth, height: window.innerHeight }
|
|
137
|
+
}
|
|
138
|
+
|
|
121
139
|
// Structure error context
|
|
122
140
|
const errorContext = {
|
|
123
141
|
componentId: props.componentId,
|
|
@@ -127,10 +145,8 @@ export const GenerativeUIErrorBoundary: Component<GenerativeUIErrorBoundaryProps
|
|
|
127
145
|
renderDuration,
|
|
128
146
|
retryCount: retryKey(),
|
|
129
147
|
timestamp: new Date().toISOString(),
|
|
130
|
-
userAgent
|
|
131
|
-
viewport
|
|
132
|
-
? { width: 0, height: 0 }
|
|
133
|
-
: { width: window.innerWidth, height: window.innerHeight },
|
|
148
|
+
userAgent,
|
|
149
|
+
viewport,
|
|
134
150
|
}
|
|
135
151
|
|
|
136
152
|
// Log to structured logger
|
|
@@ -200,7 +216,11 @@ export function withPerformanceMonitoring<P extends { componentId: string; compo
|
|
|
200
216
|
WrappedComponent: Component<P>
|
|
201
217
|
) {
|
|
202
218
|
return (props: P) => {
|
|
203
|
-
|
|
219
|
+
// SSR-safe: Performance timing
|
|
220
|
+
let renderStart = 0
|
|
221
|
+
if (!isServer && typeof performance !== 'undefined') {
|
|
222
|
+
renderStart = performance.now()
|
|
223
|
+
}
|
|
204
224
|
|
|
205
225
|
// Log render start
|
|
206
226
|
logger.debug(`Component render start: ${props.componentType}`, {
|
|
@@ -239,7 +259,11 @@ export function withPerformanceMonitoring<P extends { componentId: string; compo
|
|
|
239
259
|
* Hook to track component lifecycle events
|
|
240
260
|
*/
|
|
241
261
|
export function useComponentTelemetry(componentId: string, componentType: string) {
|
|
242
|
-
|
|
262
|
+
// SSR-safe: Performance timing
|
|
263
|
+
let mountTime = 0
|
|
264
|
+
if (!isServer && typeof performance !== 'undefined') {
|
|
265
|
+
mountTime = performance.now()
|
|
266
|
+
}
|
|
243
267
|
|
|
244
268
|
// Log mount
|
|
245
269
|
logger.debug(`Component mounted: ${componentType}`, {
|
|
@@ -249,7 +273,10 @@ export function useComponentTelemetry(componentId: string, componentType: string
|
|
|
249
273
|
|
|
250
274
|
// Return cleanup function for unmount
|
|
251
275
|
return () => {
|
|
252
|
-
|
|
276
|
+
let lifetime = 0
|
|
277
|
+
if (!isServer && typeof performance !== 'undefined') {
|
|
278
|
+
lifetime = performance.now() - mountTime
|
|
279
|
+
}
|
|
253
280
|
logger.debug(`Component unmounted: ${componentType}`, {
|
|
254
281
|
componentId,
|
|
255
282
|
lifetime,
|
|
@@ -441,23 +441,31 @@ function ComponentRenderer(props: {
|
|
|
441
441
|
*/
|
|
442
442
|
function ActionRenderer(props: { component: UIComponent }) {
|
|
443
443
|
const params = props.component.params as any
|
|
444
|
+
let dispatchAction: ((toolName: string, toolParams: any) => void) | null = null
|
|
444
445
|
|
|
445
|
-
//
|
|
446
|
-
|
|
447
|
-
if (
|
|
448
|
-
|
|
449
|
-
// Client-only: CustomEvent and window are not available in SSR
|
|
450
|
-
if (!isServer && typeof window !== 'undefined') {
|
|
446
|
+
// Initialize CustomEvent dispatcher only on client-side
|
|
447
|
+
onMount(() => {
|
|
448
|
+
if (typeof window !== 'undefined') {
|
|
449
|
+
dispatchAction = (toolName: string, toolParams: any) => {
|
|
451
450
|
const event = new CustomEvent('mcp-action', {
|
|
452
451
|
detail: {
|
|
453
|
-
toolName
|
|
454
|
-
params:
|
|
452
|
+
toolName,
|
|
453
|
+
params: toolParams,
|
|
455
454
|
},
|
|
456
455
|
bubbles: true,
|
|
457
456
|
})
|
|
458
457
|
window.dispatchEvent(event)
|
|
459
458
|
}
|
|
460
459
|
}
|
|
460
|
+
})
|
|
461
|
+
|
|
462
|
+
// Handle click to execute tool via window event
|
|
463
|
+
const handleClick = (e: MouseEvent) => {
|
|
464
|
+
if (params.action === 'tool-call' && params.toolName) {
|
|
465
|
+
e.preventDefault()
|
|
466
|
+
// SSR-safe: Only call if dispatcher was initialized client-side
|
|
467
|
+
dispatchAction?.(params.toolName, params.params || {})
|
|
468
|
+
}
|
|
461
469
|
}
|
|
462
470
|
|
|
463
471
|
if (params.type === 'link' || params.action === 'link') {
|
package/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"fileNames":["../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/.pnpm/csstype@3.2.1/node_modules/csstype/index.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/types/jsx.d.ts","../node_modules/.pnpm/@types+trusted-types@2.0.7/node_modules/@types/trusted-types/lib/index.d.ts","../node_modules/.pnpm/dompurify@3.3.0/node_modules/dompurify/dist/purify.es.d.mts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/types/reactive/scheduler.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/types/render/component.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/types/render/flow.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/types/render/Suspense.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/types/render/hydration.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/types/render/index.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/types/reactive/signal.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/types/reactive/observable.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/types/reactive/array.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/types/index.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/web/types/jsx.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/web/types/client.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/web/types/server-mock.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/web/types/index.d.ts","./src/types/index.ts","./src/services/validation.ts","./src/utils/logger.ts","./src/components/GenerativeUIErrorBoundary.tsx","../node_modules/.pnpm/marked@16.4.2/node_modules/marked/lib/marked.d.ts","./src/components/UIResourceRenderer.tsx","./src/hooks/useStreamingUI.ts","./src/components/StreamingUIRenderer.tsx","./src/components/index.ts","./src/hooks/index.ts","./src/services/component-registry.ts","./src/services/index.ts","./src/index.ts","./src/types-export.ts","./src/validation.ts","../node_modules/.pnpm/vite@6.4.1_@types+node@20.19.25/node_modules/vite/types/hmrPayload.d.ts","../node_modules/.pnpm/vite@6.4.1_@types+node@20.19.25/node_modules/vite/types/customEvent.d.ts","../node_modules/.pnpm/vite@6.4.1_@types+node@20.19.25/node_modules/vite/types/hot.d.ts","../node_modules/.pnpm/vite@6.4.1_@types+node@20.19.25/node_modules/vite/types/importGlob.d.ts","../node_modules/.pnpm/vite@6.4.1_@types+node@20.19.25/node_modules/vite/types/importMeta.d.ts","../node_modules/.pnpm/vite@6.4.1_@types+node@20.19.25/node_modules/vite/client.d.ts","./src/vite-env.d.ts","./src/components/ActionRenderer.tsx","./src/components/ArtifactRenderer.tsx","./src/components/CarouselRenderer.tsx","./src/components/FooterRenderer.tsx","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/compatibility/disposable.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/compatibility/indexable.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/compatibility/iterators.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/compatibility/index.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/globals.typedarray.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/buffer.buffer.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/globals.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/web-globals/abortcontroller.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/web-globals/domexception.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/web-globals/events.d.ts","../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/web-globals/fetch.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/assert.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/assert/strict.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/async_hooks.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/buffer.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/child_process.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/cluster.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/console.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/constants.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/crypto.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/dgram.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/dns.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/dns/promises.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/domain.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/events.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/fs.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/fs/promises.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/http.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/http2.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/https.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/inspector.generated.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/module.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/net.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/os.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/path.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/perf_hooks.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/process.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/punycode.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/querystring.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/readline.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/readline/promises.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/repl.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/sea.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/stream.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/stream/promises.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/stream/consumers.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/stream/web.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/string_decoder.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/test.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/timers.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/timers/promises.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/tls.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/trace_events.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/tty.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/url.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/util.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/v8.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/vm.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/wasi.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/worker_threads.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/zlib.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/index.d.ts"],"fileIdsList":[[61,73,109,156],[61,73,77,83,109,156],[61,73,77,78,80,109,156],[61,73,78,79,81,84,109,156],[61,63,73,77,78,79,81,82,109,156],[61,81,83,85,109,156],[61,84,109,156],[61,73,78,80,109,156],[61,78,86,87,89,109,156],[61,78,79,109,156],[61,79,88,109,156],[61,78,109,156],[61,109,156],[98,109,156],[109,153,156],[109,155,156],[156],[109,156,161,189],[109,156,157,162,167,175,186,197],[109,156,157,158,167,175],[109,156],[104,105,106,109,156],[109,156,159,198],[109,156,160,161,168,176],[109,156,161,186,194],[109,156,162,164,167,175],[109,155,156,163],[109,156,164,165],[109,156,166,167],[109,155,156,167],[109,156,167,168,169,186,197],[109,156,167,168,169,182,186,189],[109,156,164,167,170,175,186,197],[109,156,167,168,170,171,175,186,194,197],[109,156,170,172,186,194,197],[107,108,109,110,111,112,113,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203],[109,156,167,173],[109,156,174,197,202],[109,156,164,167,175,186],[109,156,176],[109,156,177],[109,155,156,178],[109,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203],[109,156,180],[109,156,181],[109,156,167,182,183],[109,156,182,184,198,200],[109,156,167,186,187,189],[109,156,188,189],[109,156,186,187],[109,156,189],[109,156,190],[109,153,156,186,191],[109,156,167,192,193],[109,156,192,193],[109,156,161,175,186,194],[109,156,195],[109,156,175,196],[109,156,170,181,197],[109,156,161,198],[109,156,186,199],[109,156,174,200],[109,156,201],[109,151,156],[109,151,156,167,169,178,186,189,197,200,202],[109,156,186,203],[62,109,156],[61,64,69,70,71,72,109,156],[60,109,156],[70,109,156],[61,64,69,109,156],[61,70,109,156],[65,66,67,68,109,156],[74,109,156],[73,75,76,109,156],[109,123,127,156,197],[109,123,156,186,197],[109,118,156],[109,120,123,156,194,197],[109,156,175,194],[109,156,204],[109,118,156,204],[109,120,123,156,175,197],[109,115,116,119,122,156,167,186,197],[109,123,130,156],[109,115,121,156],[109,123,144,145,156],[109,119,123,156,189,197,204],[109,144,156,204],[109,117,118,156,204],[109,123,156],[109,117,118,119,120,121,122,123,124,125,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,145,146,147,148,149,150,156],[109,123,138,156],[109,123,130,131,156],[109,121,123,131,132,156],[109,122,156],[109,115,118,123,156],[109,123,127,131,132,156],[109,127,156],[109,121,123,126,156,197],[109,115,120,123,130,156],[109,156,186],[109,118,123,144,156,202,204],[97,109,156],[93,109,156],[94,109,156],[95,96,109,156]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"3da4cd58ec690f79203a86d5e973d9e73fc67d113c1f7dd06049839f89782995","impliedFormat":1},{"version":"5ad3e58181b335ff8794bcc3161a1506dbe8cebbce71a15b3dc7bfe56f076679","impliedFormat":99},{"version":"15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e","impliedFormat":1},{"version":"2c2abae36b5a9319abf6a057f34bf2cc63d93b5135b4e8471eaa9519d24e51d5","impliedFormat":99},{"version":"a6d2eb77f390448a229ca63b4adadbcc549d203b8c038f1f7627a118f732969d","impliedFormat":99},{"version":"b886cc0d907b31ae7484a85da375bc8ac42f9986ec1e49c9c7c854956b0a928b","impliedFormat":99},{"version":"46b432f55912daaf98d11b81c5d06f8b78231c9ef101306ca5b3ef2cc7b6e9f0","impliedFormat":99},{"version":"8ab288ca80e5f2a9dab19955fcd9e81a244432cd7d256fdb5ea198ed5a44f0a4","impliedFormat":99},{"version":"0caadd121b8965f24d5c647a2ed01f5fc352772e4cea4bbca2ab78adedfdd921","impliedFormat":99},{"version":"b642b6a4b9b670338bc50281a6dd192fb7cc0b2f9d63d38c250bb1f02e828bbc","impliedFormat":99},{"version":"8e6b36766cbd3eed84e874fa9d1205f7b5e987fdf90d2574436be65040b2db91","impliedFormat":99},{"version":"c2e65a549ac9d227a9002d077af67bb1c77557a72bf39a85c4354831879078ed","affectsGlobalScope":true,"impliedFormat":99},{"version":"38f11ad59dfc38750b789f9f250742d0ce0da44e28f790a032cd15665b70f239","impliedFormat":99},{"version":"6e70da1429948b2ca8201ccc248bd2cb77cd6bbc4cf33f639c4b0f8f6a35cbd1","affectsGlobalScope":true,"impliedFormat":99},{"version":"601520abcca03c5fa2dc578075b1c0b560d6de0859832aabb7a567118034969d","impliedFormat":99},{"version":"91fce4c8d9954d0e9a48303e925541d8954bd468f532945d546eaf3654fdedb9","impliedFormat":99},{"version":"1da0ad9df4532256d79263966e73b04981e8563533142afbd214647a7bc14ec4","impliedFormat":99},{"version":"f8db03cdd070621b978744c04d42fc50232317bdfb114c2d1815bd5c8aef7386","impliedFormat":99},"c42add66cf3ee86c9fb5eb1fae22849cf38cf791581011e69de869742f71f824","4216d7e1fea8993693138286f0aef19ce00b3edeb457e3e0f5d13362eefaa3a3","1c60d5e6dbc713c4c8da52c42379367161869dfc8b32f4d1853406a4e0e4e1ee","447a7cedefb273ec9107e809d9b908a343051a282d90f19c048bd1e18fc586ef",{"version":"7dcb8433fd192c5f9612bd13252c5390b25417e22d6a7c18039976b24603331e","impliedFormat":99},"b52e133cc9883617f2a190857553272f522f6829d0540866be9df4bc6272e384","945fae9df3f33d659deda8767b30e203623c6444341bbc9309704fbb21a61537","29fda32f8c7bdeace48162b8619ea00b466d8eb1909e6fc627bc6c4df235cf6c","a81c80396536d6dae28e779c1154023e436a79032f0b9cbb43226715ca2b924d","d08c3587c249b44f68c9ecbd38a02275a9c1efc475dc46c5cbca52921d661f9d","9f8d1d938a4f64b5266fab13d5d78d662e4babed1f6121720b53c3882e1c3bff","5332f4525ac4c7922d945f0186bf1a7f95c27f0be2a3fd90b5f1d74c19fe5405","d03b56edc7a0b70687ed92c719446aad4ad8adbad4f02690f46c6daab15ef899","53431ed95a601d2e4e181ac666cedae641f18de7074809f0bbd2206ad56014c6","2eab445d025e2322370f372b4650a8b269d24292a626e17597d46f00ff6079b2",{"version":"a7ca8df4f2931bef2aa4118078584d84a0b16539598eaadf7dce9104dfaa381c","impliedFormat":1},{"version":"11443a1dcfaaa404c68d53368b5b818712b95dd19f188cab1669c39bee8b84b3","impliedFormat":1},{"version":"36977c14a7f7bfc8c0426ae4343875689949fb699f3f84ecbe5b300ebf9a2c55","impliedFormat":1},{"version":"7f698624bbbb060ece7c0e51b7236520ebada74b747d7523c7df376453ed6fea","impliedFormat":1},{"version":"19efad8495a7a6b064483fccd1d2b427403dd84e67819f86d1c6ee3d7abf749c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1eef826bc4a19de22155487984e345a34c9cd511dd1170edc7a447cb8231dd4a","affectsGlobalScope":true,"impliedFormat":99},{"version":"5e2848c1cdc5564166091c2daaf8bee2ad09deddb3e79cad070685b12927a0c8","affectsGlobalScope":true},"e4851c2cf94cae60b87018f526c93dae3c102038d8697dbd4ab7f31a970258a2","73bef279ca5d043ef109dc2328130dc3f180293c8ee741d245e4305ce479ae1c","e665f536e1e68e576719c4224752ef4611d97ae499c2e97451c870e46251aa56","dc279a3f5102d8c836169ac99203f3945f574a4e39b0554bccfcbbb61f67b7c1",{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"2cbe0621042e2a68c7cbce5dfed3906a1862a16a7d496010636cdbdb91341c0f","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"2fd4c143eff88dabb57701e6a40e02a4dbc36d5eb1362e7964d32028056a782b","impliedFormat":1},{"version":"714435130b9015fae551788df2a88038471a5a11eb471f27c4ede86552842bc9","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"27fdb0da0daf3b337c5530c5f266efe046a6ceb606e395b346974e4360c36419","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"00877fef624f3171c2e44944fb63a55e2a9f9120d7c8b5eb4181c263c9a077cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"47ab634529c5955b6ad793474ae188fce3e6163e3a3fb5edd7e0e48f14435333","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"0225ecb9ed86bdb7a2c7fd01f1556906902929377b44483dc4b83e03b3ef227d","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"f9ab232778f2842ffd6955f88b1049982fa2ecb764d129ee4893cbc290f41977","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"05db535df8bdc30d9116fe754a3473d1b6479afbc14ae8eb18b605c62677d518","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1}],"root":[[78,81],[83,92],[99,103]],"options":{"allowImportingTsExtensions":false,"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"jsx":1,"jsxImportSource":"solid-js","module":99,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9},"referencedMap":[[100,1],[101,1],[102,2],[103,1],[81,3],[85,4],[83,5],[86,6],[87,7],[84,8],[90,9],[88,10],[89,11],[79,12],[91,12],[78,13],[80,13],[92,10],[99,14],[153,15],[154,15],[155,16],[109,17],[156,18],[157,19],[158,20],[104,21],[107,22],[105,21],[106,21],[159,23],[160,24],[161,25],[162,26],[163,27],[164,28],[165,28],[166,29],[167,30],[168,31],[169,32],[110,21],[108,21],[170,33],[171,34],[172,35],[204,36],[173,37],[174,38],[175,39],[176,40],[177,41],[178,42],[179,43],[180,44],[181,45],[182,46],[183,46],[184,47],[185,21],[186,48],[188,49],[187,50],[189,51],[190,52],[191,53],[192,54],[193,55],[194,56],[195,57],[196,58],[197,59],[198,60],[199,61],[200,62],[201,63],[111,21],[112,21],[113,21],[152,64],[202,65],[203,66],[62,21],[114,21],[60,21],[63,67],[82,21],[73,68],[61,69],[72,70],[71,70],[64,21],[70,71],[67,13],[65,13],[66,72],[68,70],[69,73],[75,74],[77,75],[74,13],[76,21],[58,21],[59,21],[10,21],[11,21],[13,21],[12,21],[2,21],[14,21],[15,21],[16,21],[17,21],[18,21],[19,21],[20,21],[21,21],[3,21],[22,21],[23,21],[4,21],[24,21],[28,21],[25,21],[26,21],[27,21],[29,21],[30,21],[31,21],[5,21],[32,21],[33,21],[34,21],[35,21],[6,21],[39,21],[36,21],[37,21],[38,21],[40,21],[7,21],[41,21],[46,21],[47,21],[42,21],[43,21],[44,21],[45,21],[8,21],[51,21],[48,21],[49,21],[50,21],[52,21],[9,21],[53,21],[54,21],[55,21],[57,21],[56,21],[1,21],[130,76],[140,77],[129,76],[150,78],[121,79],[120,80],[149,81],[143,82],[148,83],[123,84],[137,85],[122,86],[146,87],[118,88],[117,81],[147,89],[119,90],[124,91],[125,21],[128,91],[115,21],[151,92],[141,93],[132,94],[133,95],[135,96],[131,97],[134,98],[144,81],[126,99],[127,100],[136,101],[116,102],[139,93],[138,91],[142,21],[145,103],[98,104],[94,105],[93,21],[95,106],[96,21],[97,107]],"affectedFilesPendingEmit":[[100,51],[101,51],[102,51],[103,51],[81,51],[85,51],[83,51],[86,51],[87,51],[84,51],[90,51],[88,51],[89,51],[79,51],[91,51],[78,51],[80,51],[92,51]],"emitSignatures":[78,79,80,81,83,84,85,86,87,88,89,90,91,92,100,101,102,103],"version":"5.9.3"}
|
|
1
|
+
{"fileNames":["../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/.pnpm/csstype@3.2.1/node_modules/csstype/index.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/types/jsx.d.ts","../node_modules/.pnpm/@types+trusted-types@2.0.7/node_modules/@types/trusted-types/lib/index.d.ts","../node_modules/.pnpm/dompurify@3.3.0/node_modules/dompurify/dist/purify.es.d.mts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/types/reactive/scheduler.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/types/render/component.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/types/render/flow.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/types/render/Suspense.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/types/render/hydration.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/types/render/index.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/types/reactive/signal.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/types/reactive/observable.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/types/reactive/array.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/types/index.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/web/types/jsx.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/web/types/client.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/web/types/server-mock.d.ts","../node_modules/.pnpm/solid-js@1.9.10/node_modules/solid-js/web/types/index.d.ts","./src/types/index.ts","./src/services/validation.ts","./src/utils/logger.ts","./src/components/GenerativeUIErrorBoundary.tsx","../node_modules/.pnpm/marked@16.4.2/node_modules/marked/lib/marked.d.ts","./src/components/UIResourceRenderer.tsx","./src/hooks/useStreamingUI.ts","./src/components/StreamingUIRenderer.tsx","./src/components/index.ts","./src/hooks/index.ts","./src/services/component-registry.ts","./src/services/index.ts","./src/index.ts","./src/types-export.ts","./src/validation.ts","../node_modules/.pnpm/vite@6.4.1_@types+node@20.19.25/node_modules/vite/types/hmrPayload.d.ts","../node_modules/.pnpm/vite@6.4.1_@types+node@20.19.25/node_modules/vite/types/customEvent.d.ts","../node_modules/.pnpm/vite@6.4.1_@types+node@20.19.25/node_modules/vite/types/hot.d.ts","../node_modules/.pnpm/vite@6.4.1_@types+node@20.19.25/node_modules/vite/types/importGlob.d.ts","../node_modules/.pnpm/vite@6.4.1_@types+node@20.19.25/node_modules/vite/types/importMeta.d.ts","../node_modules/.pnpm/vite@6.4.1_@types+node@20.19.25/node_modules/vite/client.d.ts","./src/vite-env.d.ts","./src/components/ActionRenderer.tsx","./src/components/ArtifactRenderer.tsx","./src/components/CarouselRenderer.tsx","./src/components/FooterRenderer.tsx","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/compatibility/disposable.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/compatibility/indexable.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/compatibility/iterators.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/compatibility/index.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/globals.typedarray.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/buffer.buffer.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/globals.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/web-globals/abortcontroller.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/web-globals/domexception.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/web-globals/events.d.ts","../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/web-globals/fetch.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/assert.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/assert/strict.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/async_hooks.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/buffer.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/child_process.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/cluster.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/console.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/constants.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/crypto.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/dgram.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/dns.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/dns/promises.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/domain.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/events.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/fs.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/fs/promises.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/http.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/http2.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/https.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/inspector.generated.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/module.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/net.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/os.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/path.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/perf_hooks.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/process.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/punycode.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/querystring.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/readline.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/readline/promises.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/repl.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/sea.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/stream.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/stream/promises.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/stream/consumers.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/stream/web.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/string_decoder.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/test.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/timers.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/timers/promises.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/tls.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/trace_events.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/tty.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/url.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/util.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/v8.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/vm.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/wasi.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/worker_threads.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/zlib.d.ts","../node_modules/.pnpm/@types+node@20.19.25/node_modules/@types/node/index.d.ts"],"fileIdsList":[[61,73,109,156],[61,73,77,83,109,156],[61,73,77,78,80,109,156],[61,73,78,79,81,84,109,156],[61,63,73,77,78,79,81,82,109,156],[61,81,83,85,109,156],[61,84,109,156],[61,73,78,80,109,156],[61,78,86,87,89,109,156],[61,78,79,109,156],[61,79,88,109,156],[61,78,109,156],[61,109,156],[98,109,156],[109,153,156],[109,155,156],[156],[109,156,161,189],[109,156,157,162,167,175,186,197],[109,156,157,158,167,175],[109,156],[104,105,106,109,156],[109,156,159,198],[109,156,160,161,168,176],[109,156,161,186,194],[109,156,162,164,167,175],[109,155,156,163],[109,156,164,165],[109,156,166,167],[109,155,156,167],[109,156,167,168,169,186,197],[109,156,167,168,169,182,186,189],[109,156,164,167,170,175,186,197],[109,156,167,168,170,171,175,186,194,197],[109,156,170,172,186,194,197],[107,108,109,110,111,112,113,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203],[109,156,167,173],[109,156,174,197,202],[109,156,164,167,175,186],[109,156,176],[109,156,177],[109,155,156,178],[109,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203],[109,156,180],[109,156,181],[109,156,167,182,183],[109,156,182,184,198,200],[109,156,167,186,187,189],[109,156,188,189],[109,156,186,187],[109,156,189],[109,156,190],[109,153,156,186,191],[109,156,167,192,193],[109,156,192,193],[109,156,161,175,186,194],[109,156,195],[109,156,175,196],[109,156,170,181,197],[109,156,161,198],[109,156,186,199],[109,156,174,200],[109,156,201],[109,151,156],[109,151,156,167,169,178,186,189,197,200,202],[109,156,186,203],[62,109,156],[61,64,69,70,71,72,109,156],[60,109,156],[70,109,156],[61,64,69,109,156],[61,70,109,156],[65,66,67,68,109,156],[74,109,156],[73,75,76,109,156],[109,123,127,156,197],[109,123,156,186,197],[109,118,156],[109,120,123,156,194,197],[109,156,175,194],[109,156,204],[109,118,156,204],[109,120,123,156,175,197],[109,115,116,119,122,156,167,186,197],[109,123,130,156],[109,115,121,156],[109,123,144,145,156],[109,119,123,156,189,197,204],[109,144,156,204],[109,117,118,156,204],[109,123,156],[109,117,118,119,120,121,122,123,124,125,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,145,146,147,148,149,150,156],[109,123,138,156],[109,123,130,131,156],[109,121,123,131,132,156],[109,122,156],[109,115,118,123,156],[109,123,127,131,132,156],[109,127,156],[109,121,123,126,156,197],[109,115,120,123,130,156],[109,156,186],[109,118,123,144,156,202,204],[97,109,156],[93,109,156],[94,109,156],[95,96,109,156]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"3da4cd58ec690f79203a86d5e973d9e73fc67d113c1f7dd06049839f89782995","impliedFormat":1},{"version":"5ad3e58181b335ff8794bcc3161a1506dbe8cebbce71a15b3dc7bfe56f076679","impliedFormat":99},{"version":"15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e","impliedFormat":1},{"version":"2c2abae36b5a9319abf6a057f34bf2cc63d93b5135b4e8471eaa9519d24e51d5","impliedFormat":99},{"version":"a6d2eb77f390448a229ca63b4adadbcc549d203b8c038f1f7627a118f732969d","impliedFormat":99},{"version":"b886cc0d907b31ae7484a85da375bc8ac42f9986ec1e49c9c7c854956b0a928b","impliedFormat":99},{"version":"46b432f55912daaf98d11b81c5d06f8b78231c9ef101306ca5b3ef2cc7b6e9f0","impliedFormat":99},{"version":"8ab288ca80e5f2a9dab19955fcd9e81a244432cd7d256fdb5ea198ed5a44f0a4","impliedFormat":99},{"version":"0caadd121b8965f24d5c647a2ed01f5fc352772e4cea4bbca2ab78adedfdd921","impliedFormat":99},{"version":"b642b6a4b9b670338bc50281a6dd192fb7cc0b2f9d63d38c250bb1f02e828bbc","impliedFormat":99},{"version":"8e6b36766cbd3eed84e874fa9d1205f7b5e987fdf90d2574436be65040b2db91","impliedFormat":99},{"version":"c2e65a549ac9d227a9002d077af67bb1c77557a72bf39a85c4354831879078ed","affectsGlobalScope":true,"impliedFormat":99},{"version":"38f11ad59dfc38750b789f9f250742d0ce0da44e28f790a032cd15665b70f239","impliedFormat":99},{"version":"6e70da1429948b2ca8201ccc248bd2cb77cd6bbc4cf33f639c4b0f8f6a35cbd1","affectsGlobalScope":true,"impliedFormat":99},{"version":"601520abcca03c5fa2dc578075b1c0b560d6de0859832aabb7a567118034969d","impliedFormat":99},{"version":"91fce4c8d9954d0e9a48303e925541d8954bd468f532945d546eaf3654fdedb9","impliedFormat":99},{"version":"1da0ad9df4532256d79263966e73b04981e8563533142afbd214647a7bc14ec4","impliedFormat":99},{"version":"f8db03cdd070621b978744c04d42fc50232317bdfb114c2d1815bd5c8aef7386","impliedFormat":99},"c42add66cf3ee86c9fb5eb1fae22849cf38cf791581011e69de869742f71f824","4216d7e1fea8993693138286f0aef19ce00b3edeb457e3e0f5d13362eefaa3a3","1c60d5e6dbc713c4c8da52c42379367161869dfc8b32f4d1853406a4e0e4e1ee","067a8a4707b21e5ae71abe1b604e8f9d66095b4fc549f5dcdc31fcc26345ea30",{"version":"7dcb8433fd192c5f9612bd13252c5390b25417e22d6a7c18039976b24603331e","impliedFormat":99},"e20d96ae0b96fec42e20fe22a7062fecdd4b5026ddc49e49c09b908877b75435","945fae9df3f33d659deda8767b30e203623c6444341bbc9309704fbb21a61537","29fda32f8c7bdeace48162b8619ea00b466d8eb1909e6fc627bc6c4df235cf6c","a81c80396536d6dae28e779c1154023e436a79032f0b9cbb43226715ca2b924d","d08c3587c249b44f68c9ecbd38a02275a9c1efc475dc46c5cbca52921d661f9d","9f8d1d938a4f64b5266fab13d5d78d662e4babed1f6121720b53c3882e1c3bff","5332f4525ac4c7922d945f0186bf1a7f95c27f0be2a3fd90b5f1d74c19fe5405","d03b56edc7a0b70687ed92c719446aad4ad8adbad4f02690f46c6daab15ef899","53431ed95a601d2e4e181ac666cedae641f18de7074809f0bbd2206ad56014c6","2eab445d025e2322370f372b4650a8b269d24292a626e17597d46f00ff6079b2",{"version":"a7ca8df4f2931bef2aa4118078584d84a0b16539598eaadf7dce9104dfaa381c","impliedFormat":1},{"version":"11443a1dcfaaa404c68d53368b5b818712b95dd19f188cab1669c39bee8b84b3","impliedFormat":1},{"version":"36977c14a7f7bfc8c0426ae4343875689949fb699f3f84ecbe5b300ebf9a2c55","impliedFormat":1},{"version":"7f698624bbbb060ece7c0e51b7236520ebada74b747d7523c7df376453ed6fea","impliedFormat":1},{"version":"19efad8495a7a6b064483fccd1d2b427403dd84e67819f86d1c6ee3d7abf749c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1eef826bc4a19de22155487984e345a34c9cd511dd1170edc7a447cb8231dd4a","affectsGlobalScope":true,"impliedFormat":99},{"version":"5e2848c1cdc5564166091c2daaf8bee2ad09deddb3e79cad070685b12927a0c8","affectsGlobalScope":true},"e4851c2cf94cae60b87018f526c93dae3c102038d8697dbd4ab7f31a970258a2","73bef279ca5d043ef109dc2328130dc3f180293c8ee741d245e4305ce479ae1c","e665f536e1e68e576719c4224752ef4611d97ae499c2e97451c870e46251aa56","dc279a3f5102d8c836169ac99203f3945f574a4e39b0554bccfcbbb61f67b7c1",{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"2cbe0621042e2a68c7cbce5dfed3906a1862a16a7d496010636cdbdb91341c0f","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"2fd4c143eff88dabb57701e6a40e02a4dbc36d5eb1362e7964d32028056a782b","impliedFormat":1},{"version":"714435130b9015fae551788df2a88038471a5a11eb471f27c4ede86552842bc9","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"27fdb0da0daf3b337c5530c5f266efe046a6ceb606e395b346974e4360c36419","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"00877fef624f3171c2e44944fb63a55e2a9f9120d7c8b5eb4181c263c9a077cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"47ab634529c5955b6ad793474ae188fce3e6163e3a3fb5edd7e0e48f14435333","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"0225ecb9ed86bdb7a2c7fd01f1556906902929377b44483dc4b83e03b3ef227d","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"f9ab232778f2842ffd6955f88b1049982fa2ecb764d129ee4893cbc290f41977","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"05db535df8bdc30d9116fe754a3473d1b6479afbc14ae8eb18b605c62677d518","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1}],"root":[[78,81],[83,92],[99,103]],"options":{"allowImportingTsExtensions":false,"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"jsx":1,"jsxImportSource":"solid-js","module":99,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9},"referencedMap":[[100,1],[101,1],[102,2],[103,1],[81,3],[85,4],[83,5],[86,6],[87,7],[84,8],[90,9],[88,10],[89,11],[79,12],[91,12],[78,13],[80,13],[92,10],[99,14],[153,15],[154,15],[155,16],[109,17],[156,18],[157,19],[158,20],[104,21],[107,22],[105,21],[106,21],[159,23],[160,24],[161,25],[162,26],[163,27],[164,28],[165,28],[166,29],[167,30],[168,31],[169,32],[110,21],[108,21],[170,33],[171,34],[172,35],[204,36],[173,37],[174,38],[175,39],[176,40],[177,41],[178,42],[179,43],[180,44],[181,45],[182,46],[183,46],[184,47],[185,21],[186,48],[188,49],[187,50],[189,51],[190,52],[191,53],[192,54],[193,55],[194,56],[195,57],[196,58],[197,59],[198,60],[199,61],[200,62],[201,63],[111,21],[112,21],[113,21],[152,64],[202,65],[203,66],[62,21],[114,21],[60,21],[63,67],[82,21],[73,68],[61,69],[72,70],[71,70],[64,21],[70,71],[67,13],[65,13],[66,72],[68,70],[69,73],[75,74],[77,75],[74,13],[76,21],[58,21],[59,21],[10,21],[11,21],[13,21],[12,21],[2,21],[14,21],[15,21],[16,21],[17,21],[18,21],[19,21],[20,21],[21,21],[3,21],[22,21],[23,21],[4,21],[24,21],[28,21],[25,21],[26,21],[27,21],[29,21],[30,21],[31,21],[5,21],[32,21],[33,21],[34,21],[35,21],[6,21],[39,21],[36,21],[37,21],[38,21],[40,21],[7,21],[41,21],[46,21],[47,21],[42,21],[43,21],[44,21],[45,21],[8,21],[51,21],[48,21],[49,21],[50,21],[52,21],[9,21],[53,21],[54,21],[55,21],[57,21],[56,21],[1,21],[130,76],[140,77],[129,76],[150,78],[121,79],[120,80],[149,81],[143,82],[148,83],[123,84],[137,85],[122,86],[146,87],[118,88],[117,81],[147,89],[119,90],[124,91],[125,21],[128,91],[115,21],[151,92],[141,93],[132,94],[133,95],[135,96],[131,97],[134,98],[144,81],[126,99],[127,100],[136,101],[116,102],[139,93],[138,91],[142,21],[145,103],[98,104],[94,105],[93,21],[95,106],[96,21],[97,107]],"affectedFilesPendingEmit":[[100,51],[101,51],[102,51],[103,51],[81,51],[85,51],[83,51],[86,51],[87,51],[84,51],[90,51],[88,51],[89,51],[79,51],[91,51],[78,51],[80,51],[92,51]],"emitSignatures":[78,79,80,81,83,84,85,86,87,88,89,90,91,92,100,101,102,103],"version":"5.9.3"}
|