@seed-ship/mcp-ui-solid 5.5.1 → 5.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/dist/components/FormRenderer.cjs +13 -2
  3. package/dist/components/FormRenderer.cjs.map +1 -1
  4. package/dist/components/FormRenderer.d.ts.map +1 -1
  5. package/dist/components/FormRenderer.js +13 -2
  6. package/dist/components/FormRenderer.js.map +1 -1
  7. package/dist/components/GenerativeUIErrorBoundary.cjs +11 -0
  8. package/dist/components/GenerativeUIErrorBoundary.cjs.map +1 -1
  9. package/dist/components/GenerativeUIErrorBoundary.d.ts.map +1 -1
  10. package/dist/components/GenerativeUIErrorBoundary.js +11 -0
  11. package/dist/components/GenerativeUIErrorBoundary.js.map +1 -1
  12. package/dist/components/StreamingUIRenderer.cjs +49 -3
  13. package/dist/components/StreamingUIRenderer.cjs.map +1 -1
  14. package/dist/components/StreamingUIRenderer.d.ts.map +1 -1
  15. package/dist/components/StreamingUIRenderer.js +51 -5
  16. package/dist/components/StreamingUIRenderer.js.map +1 -1
  17. package/dist/components/UIResourceRenderer.cjs +102 -14
  18. package/dist/components/UIResourceRenderer.cjs.map +1 -1
  19. package/dist/components/UIResourceRenderer.d.ts +36 -1
  20. package/dist/components/UIResourceRenderer.d.ts.map +1 -1
  21. package/dist/components/UIResourceRenderer.js +104 -16
  22. package/dist/components/UIResourceRenderer.js.map +1 -1
  23. package/dist/context/MCPUITelemetryContext.cjs +25 -0
  24. package/dist/context/MCPUITelemetryContext.cjs.map +1 -0
  25. package/dist/context/MCPUITelemetryContext.d.ts +36 -0
  26. package/dist/context/MCPUITelemetryContext.d.ts.map +1 -0
  27. package/dist/context/MCPUITelemetryContext.js +25 -0
  28. package/dist/context/MCPUITelemetryContext.js.map +1 -0
  29. package/dist/index.cjs +7 -0
  30. package/dist/index.cjs.map +1 -1
  31. package/dist/index.d.cts +7 -0
  32. package/dist/index.d.ts +7 -0
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +8 -1
  35. package/dist/index.js.map +1 -1
  36. package/dist/mcp-ui-spec/dist/schemas.cjs +25 -6
  37. package/dist/mcp-ui-spec/dist/schemas.cjs.map +1 -1
  38. package/dist/mcp-ui-spec/dist/schemas.js +25 -6
  39. package/dist/mcp-ui-spec/dist/schemas.js.map +1 -1
  40. package/dist/services/telemetry.cjs +56 -0
  41. package/dist/services/telemetry.cjs.map +1 -0
  42. package/dist/services/telemetry.d.ts +87 -0
  43. package/dist/services/telemetry.d.ts.map +1 -0
  44. package/dist/services/telemetry.js +56 -0
  45. package/dist/services/telemetry.js.map +1 -0
  46. package/dist/services/validation.cjs +25 -24
  47. package/dist/services/validation.cjs.map +1 -1
  48. package/dist/services/validation.d.ts.map +1 -1
  49. package/dist/services/validation.js +26 -25
  50. package/dist/services/validation.js.map +1 -1
  51. package/dist/types/index.d.ts +26 -0
  52. package/dist/types/index.d.ts.map +1 -1
  53. package/dist/types.d.cts +26 -0
  54. package/dist/types.d.ts +26 -0
  55. package/docs/briefs/BRIEF-citations-in-table-cells.md +365 -0
  56. package/package.json +3 -3
  57. package/src/components/FormRenderer.tsx +14 -0
  58. package/src/components/GenerativeUIErrorBoundary.tsx +17 -1
  59. package/src/components/StreamingUIRenderer.tsx +55 -3
  60. package/src/components/TableRenderer.citation.test.tsx +157 -0
  61. package/src/components/UIResourceRenderer.tsx +212 -15
  62. package/src/context/MCPUITelemetryContext.test.tsx +119 -0
  63. package/src/context/MCPUITelemetryContext.tsx +71 -0
  64. package/src/index.ts +20 -0
  65. package/src/services/telemetry.test.ts +134 -0
  66. package/src/services/telemetry.ts +149 -0
  67. package/src/services/validation.ts +43 -41
  68. package/src/types/index.ts +30 -0
  69. package/tsconfig.tsbuildinfo +1 -1
@@ -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, Show, For, createMemo, createEffect, onMount } from 'solid-js'\nimport { isServer } from 'solid-js/web'\nimport type { UIComponent, UILayout, RendererError, TableVirtualizeOptions } from '../types'\nimport { validateComponent, DEFAULT_RESOURCE_LIMITS, getIframeSandbox } from '../services/validation'\nimport { GenerativeUIErrorBoundary } from './GenerativeUIErrorBoundary'\nimport { markRenderStart, markRenderEnd } from '../utils/perf'\n\n/**\n * How `<UIResourceRenderer>` reacts when `validateComponent()` rejects a\n * component (v5.4.0).\n *\n * - `'block'` : full-slot red error card (default — backward compatible)\n * - `'inline-warn'` : compact yellow chip in the slot, tooltip carries the\n * error message — keeps the surrounding layout clean\n * (e.g. inside a chat message)\n * - `'silent'` : render nothing in the slot; `onError` still fires so the\n * consumer can log/alert\n *\n * Runtime errors caught by `<GenerativeUIErrorBoundary>` are NOT affected by\n * this prop — they always show the boundary's fallback UI.\n */\nexport type ValidationErrorMode = 'block' | 'inline-warn' | 'silent'\nimport { GridRenderer } from './GridRenderer'\nimport { FooterRenderer } from './FooterRenderer'\nimport { CarouselRenderer } from './CarouselRenderer'\nimport { ArtifactRenderer } from './ArtifactRenderer'\nimport { FormRenderer } from './FormRenderer'\nimport { ModalRenderer } from './ModalRenderer'\nimport { ActionGroupRenderer } from './ActionGroupRenderer'\nimport { ChartJSRenderer, isChartJSAvailable } from './ChartJSRenderer'\nimport { ImageGalleryRenderer } from './ImageGalleryRenderer'\nimport { VideoRenderer } from './VideoRenderer'\nimport { CodeBlockRenderer } from './CodeBlockRenderer'\nimport { MapRenderer } from './MapRenderer'\nimport { ExpandableWrapper, useExpanded } from './ExpandableWrapper'\nimport { RenderProvider } from './RenderContext'\nimport { useAction } from '../hooks/useAction'\nimport { marked } from 'marked'\n\n/**\n * Copy button component with visual feedback\n */\nfunction CopyButton(props: { getText: () => string; title?: string; position?: 'top-right' | 'bottom-right' }) {\n const [copied, setCopied] = createSignal(false)\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(props.getText())\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n } catch (err) {\n console.error('Failed to copy:', err)\n }\n }\n\n const positionClasses = () => {\n return props.position === 'bottom-right'\n ? 'absolute -right-2 -bottom-3'\n : 'absolute right-2 top-2'\n }\n\n return (\n <button\n onClick={handleCopy}\n class={`${positionClasses()} opacity-60 hover:opacity-100 px-2 py-1 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-600 rounded-full hover:bg-gray-100 dark:hover:bg-gray-700 transition-all shadow-sm z-10`}\n title={props.title || 'Copy'}\n >\n <Show\n when={!copied()}\n fallback={\n <svg class=\"w-3 h-3 text-green-500\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 13l4 4L19 7\" />\n </svg>\n }\n >\n <svg class=\"w-3 h-3 text-gray-500 dark:text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\" />\n </svg>\n </Show>\n </button>\n )\n}\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 * How to react when a component fails `validateComponent()` (v5.4.0).\n * Defaults to `'block'` (replaces the slot with a red error card —\n * the pre-v5.4.0 behavior).\n *\n * @see ValidationErrorMode\n */\n errorMode?: ValidationErrorMode\n}\n\n/**\n * Render a single chart component in a sandboxed iframe\n */\n/**\n * Smart Chart Renderer - Sprint 4\n * Supports native Chart.js or Quickchart.io iframe fallback\n */\nfunction ChartRenderer(props: {\n component: UIComponent\n onError?: (error: RendererError) => void\n}) {\n const [useNative, setUseNative] = createSignal(false)\n const [iframeUrl, setIframeUrl] = createSignal<string>()\n const [isLoading, setIsLoading] = createSignal(true)\n const [error, setError] = createSignal<string>()\n\n const params = () => props.component.params as any\n const rendererPref = () => params()?.renderer || 'auto'\n\n // Guard: if data or datasets missing, show error instead of crashing Chart.js\n if (!params()?.data?.datasets) {\n return (\n <div class=\"p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700\">\n <p class=\"text-red-500 dark:text-red-400 text-sm\">Invalid chart data: missing data.datasets</p>\n </div>\n )\n }\n\n // Check renderer preference and Chart.js availability\n createEffect(async () => {\n const pref = rendererPref()\n\n if (pref === 'iframe') {\n // Force iframe mode\n setUseNative(false)\n buildIframeUrl()\n } else if (pref === 'native') {\n // Force native mode - will show error if Chart.js not available\n const available = await isChartJSAvailable()\n if (available) {\n setUseNative(true)\n setIsLoading(false)\n } else {\n setError('Chart.js is not available. Install chart.js peer dependency.')\n setIsLoading(false)\n }\n } else {\n // Auto mode - use native if available, otherwise iframe\n const available = await isChartJSAvailable()\n if (available) {\n setUseNative(true)\n setIsLoading(false)\n } else {\n setUseNative(false)\n buildIframeUrl()\n }\n }\n })\n\n const buildIframeUrl = () => {\n const chartParams = params()\n if (!chartParams) return\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 setIframeUrl(url)\n setIsLoading(false)\n }\n\n // Reactive switch between native Chart.js and iframe fallback\n // Must use <Show> — signals in component body are not reactive in SolidJS\n return (\n <Show\n when={useNative()}\n fallback={\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={params()?.title}>\n <h3 class=\"text-sm font-semibold text-gray-900 dark:text-white mb-3\">\n {params()?.title}\n </h3>\n </Show>\n <div class=\"w-full h-full\" role=\"img\" aria-label={params()?.title ? `Chart: ${params()?.title}` : 'Chart visualization'}>\n <img\n src={iframeUrl()}\n alt={params()?.title ? `Chart: ${params()?.title}` : '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 <ChartJSRenderer\n component={props.component}\n onError={(err) => props.onError?.({\n type: 'render',\n message: err.message,\n componentId: props.component.id,\n })}\n />\n </Show>\n )\n}\n\n/**\n * Smart cell value renderer that handles markdown links and other formats\n */\n/**\n * Wrap matches of `query` in <mark> tags within an HTML string.\n * Case-insensitive. Skips content inside HTML tag attributes to avoid corruption.\n * v4.3.8\n */\nexport function highlightQuery(html: string, query: string): string {\n const q = query.trim()\n if (!q) return html\n // Escape regex metacharacters\n const escaped = q.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n const regex = new RegExp(`(${escaped})`, 'gi')\n // Process text segments only (skip inside tags)\n return html.replace(/(<[^>]+>)|([^<]+)/g, (_m, tag, text) => {\n if (tag) return tag\n if (!text) return ''\n return text.replace(regex, '<mark class=\"bg-yellow-200 dark:bg-[#222F49] text-inherit rounded px-0.5\">$1</mark>')\n })\n}\n\nexport function renderCellValue(value: any): string {\n // Handle null/undefined\n if (value === null || value === undefined) {\n return '-'\n }\n\n // Handle object with url/name properties (common source/link format from LLM)\n if (typeof value === 'object' && value !== null) {\n // Check for link-like objects: { url: \"...\", name/label/title: \"...\" }\n if (value.url) {\n const label = value.name || value.label || value.title || value.url\n const sanitizedLabel = DOMPurify.sanitize(String(label))\n const sanitizedUrl = DOMPurify.sanitize(String(value.url))\n return `<a href=\"${sanitizedUrl}\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"text-blue-600 dark:text-blue-400 hover:underline\">${sanitizedLabel}</a>`\n }\n // Fallback: extract meaningful text from object properties\n if (value.name || value.label || value.title) {\n return DOMPurify.sanitize(String(value.name || value.label || value.title))\n }\n // Last resort: JSON stringify for debugging (better than [object Object])\n try {\n return JSON.stringify(value)\n } catch {\n return '-'\n }\n }\n\n // Convert to string\n let strValue = String(value)\n\n // Clean up \"undefined\" patterns from backend data\n // Pattern 1: \"Text – undefined\" or \"Text - undefined\" → \"Text\"\n strValue = strValue.replace(/\\s*[–-]\\s*undefined\\s*$/gi, '')\n // Pattern 2: \"undefined – Text\" or \"undefined - Text\" → \"Text\"\n strValue = strValue.replace(/^undefined\\s*[–-]\\s*/gi, '')\n // Pattern 3: standalone \"undefined\" → \"-\"\n if (strValue.trim().toLowerCase() === 'undefined') {\n return '-'\n }\n // Pattern 4: empty string after cleanup → \"-\"\n if (strValue.trim() === '') {\n return '-'\n }\n\n // Detect and convert markdown links: [text](url)\n const markdownLinkRegex = /\\[([^\\]]+)\\]\\(([^)]+)\\)/g\n if (markdownLinkRegex.test(strValue)) {\n // Replace all markdown links with HTML links\n const htmlValue = strValue.replace(\n /\\[([^\\]]+)\\]\\(([^)]+)\\)/g,\n '<a href=\"$2\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"text-blue-600 dark:text-blue-400 hover:underline\">$1</a>'\n )\n return DOMPurify.sanitize(htmlValue, { ADD_ATTR: ['target', 'rel'] })\n }\n\n // Detect raw HTML in cell values (e.g. <a href=\"...\" data-citation-page=\"5\">text</a>)\n // This handles cases where cell data comes from innerHTML extraction\n const hasHtml = /<[a-z][\\s\\S]*>/i.test(strValue)\n if (hasHtml) {\n return DOMPurify.sanitize(strValue, {\n ALLOWED_TAGS: ['a', 'strong', 'em', 'b', 'i', 'code', 'span', 'br', 'button', 'svg', 'path'],\n ALLOWED_ATTR: ['href', 'target', 'rel', 'class', 'data-citation-page', 'data-citation-source', 'data-citation-doc', 'data-citation-verified', 'title', 'fill', 'stroke', 'viewBox', 'stroke-linecap', 'stroke-linejoin', 'stroke-width', 'd'],\n ADD_ATTR: ['target', 'rel'],\n })\n }\n\n // Check if value contains markdown formatting (bold, italic, code, etc.)\n const hasMarkdown = /[*_`[\\]#]/.test(strValue)\n if (hasMarkdown) {\n // Parse with marked and sanitize\n const parsed = marked.parse(strValue, { async: false }) as string\n return DOMPurify.sanitize(parsed, { ADD_ATTR: ['target', 'rel'] })\n }\n\n // Plain text — sanitize to prevent XSS via innerHTML\n return DOMPurify.sanitize(strValue)\n}\n\n/**\n * Render a table component\n * Sprint Ultimate U.3: Added virtualization support for large datasets\n */\nfunction TableRenderer(props: {\n component: UIComponent\n onError?: (error: RendererError) => void\n}) {\n const tableParams = props.component.params as any\n let scrollContainerRef: HTMLDivElement | undefined\n\n // ─── Client-side sorting (v4.0.5) ────────────────────────\n const allRows = () => tableParams.rows || []\n const columns = () => tableParams.columns || []\n const [sortKey, setSortKey] = createSignal<string | null>(null)\n const [sortDir, setSortDir] = createSignal<'asc' | 'desc' | null>(null)\n\n const handleSort = (key: string) => {\n if (sortKey() === key) {\n if (sortDir() === 'asc') setSortDir('desc')\n else { setSortKey(null); setSortDir(null) }\n } else {\n setSortKey(key)\n setSortDir('asc')\n }\n setClientPage(0)\n }\n\n const sortedRows = createMemo(() => {\n const r = allRows()\n const key = sortKey()\n const dir = sortDir()\n if (!key || !dir) return r\n const col = columns().find((c: any) => c.key === key)\n const isNum = col?.type === 'number' || (r.length > 0 && typeof r[0]?.[key] === 'number')\n return [...r].sort((a: any, b: any) => {\n const va = a[key], vb = b[key]\n if (va == null && vb == null) return 0\n if (va == null) return 1\n if (vb == null) return -1\n let cmp: number\n if (isNum) {\n cmp = (Number(va) || 0) - (Number(vb) || 0)\n } else {\n cmp = String(va).localeCompare(String(vb), 'fr', { sensitivity: 'base' })\n }\n return dir === 'desc' ? -cmp : cmp\n })\n })\n\n const sortIndicator = (key: string) => {\n if (sortKey() !== key) return '\\u2195'\n return sortDir() === 'asc' ? '\\u2191' : '\\u2193'\n }\n\n // ─── Client-side search filter (v4.3.3) ─────────────────────\n const [searchQuery, setSearchQuery] = createSignal('')\n const [debouncedQuery, setDebouncedQuery] = createSignal('')\n let searchTimer: ReturnType<typeof setTimeout> | null = null\n\n const isSearchable = () => tableParams.searchable === true || (tableParams.searchable !== false && allRows().length > 10)\n const searchPlaceholder = () => tableParams.searchPlaceholder || 'Rechercher dans le tableau...'\n\n const handleSearch = (value: string) => {\n setSearchQuery(value)\n if (searchTimer) clearTimeout(searchTimer)\n searchTimer = setTimeout(() => {\n setDebouncedQuery(value)\n setClientPage(0)\n }, 200)\n }\n\n /** Normalize string for accent-insensitive matching */\n const normalize = (s: string) => s.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '').toLowerCase()\n\n const filteredRows = createMemo(() => {\n const q = normalize(debouncedQuery())\n if (!q) return sortedRows()\n const cols = columns()\n return sortedRows().filter((row: any) =>\n cols.some((col: any) => {\n const val = row[col.key]\n if (val == null) return false\n return normalize(String(val)).includes(q)\n })\n )\n })\n\n // ─── Client-side pagination (v4.0.4, context-aware v4.3.4, selector v4.3.7) ─────\n const isExpanded = useExpanded()\n const defaultPageSize = () => tableParams.pageSize ?? 25\n const chatDefault = () => tableParams.chatPageSize ?? Math.min(10, defaultPageSize())\n const [userPageSize, setUserPageSize] = createSignal<number | null>(null) // null = use default\n const clientPageSize = () => {\n const ups = userPageSize()\n if (ups !== null) return ups // user chose a size\n return isExpanded() ? defaultPageSize() : chatDefault()\n }\n const showAll = () => userPageSize() === 0\n const hasServerPagination = () => !!tableParams.pagination\n const needsClientPagination = () =>\n !hasServerPagination() && !showAll() && clientPageSize() > 0 && filteredRows().length > clientPageSize()\n const [clientPage, setClientPage] = createSignal(tableParams.initialPage ?? 0)\n const clientTotalPages = () => needsClientPagination() ? Math.ceil(filteredRows().length / clientPageSize()) : 1\n const clientVisibleRows = createMemo(() => {\n if (showAll() || !needsClientPagination()) return filteredRows()\n const start = clientPage() * clientPageSize()\n return filteredRows().slice(start, start + clientPageSize())\n })\n const clientRangeStart = () => needsClientPagination() ? clientPage() * clientPageSize() + 1 : 1\n const clientRangeEnd = () => needsClientPagination()\n ? Math.min((clientPage() + 1) * clientPageSize(), filteredRows().length)\n : filteredRows().length\n\n // Page size options for selector (fullscreen)\n const pageSizeOptions = () => {\n const total = filteredRows().length\n const opts: Array<{ value: number; label: string }> = []\n for (const n of [10, 30, 60, 100]) {\n if (n < total) opts.push({ value: n, label: String(n) })\n }\n opts.push({ value: 0, label: 'All' })\n return opts\n }\n\n const handlePageSizeChange = (val: number) => {\n setUserPageSize(val === 0 ? 0 : val)\n setClientPage(0)\n }\n\n // ─── Virtualization ──────────────────────────────────────\n const [virtualizer, setVirtualizer] = createSignal<any>(null)\n const [isVirtualizing, setIsVirtualizing] = createSignal(false)\n\n // Disable virtualization when client pagination is active (they conflict)\n const shouldVirtualize = createMemo(() => {\n if (needsClientPagination()) return false // pagination handles slicing\n const opts = tableParams.virtualize\n if (opts === false) return false\n if (opts === true) return true\n if (typeof opts === 'object') {\n if (opts.enabled !== undefined) return opts.enabled\n const threshold = opts.threshold ?? 100\n return (tableParams.rows?.length ?? 0) > threshold\n }\n return (tableParams.rows?.length ?? 0) > 100\n })\n\n // Get virtualization options\n const virtualizeOpts = createMemo((): TableVirtualizeOptions => {\n const opts = tableParams.virtualize\n if (typeof opts === 'object') return opts\n return {}\n })\n\n // Initialize virtualizer when needed\n createEffect(async () => {\n if (isServer || !shouldVirtualize()) {\n setIsVirtualizing(false)\n return\n }\n\n try {\n const { createVirtualizer } = await import('@tanstack/solid-virtual')\n const opts = virtualizeOpts()\n const rowHeight = opts.rowHeight ?? 48\n const overscan = opts.overscan ?? 5\n\n const v = createVirtualizer({\n get count() { return tableParams.rows?.length ?? 0 },\n getScrollElement: () => scrollContainerRef ?? null,\n estimateSize: () => rowHeight,\n overscan,\n })\n\n setVirtualizer(v)\n setIsVirtualizing(true)\n } catch (e) {\n console.warn('Failed to load @tanstack/solid-virtual, falling back to regular table', e)\n setIsVirtualizing(false)\n }\n })\n\n // Cell value extraction helper\n const getCellValue = (row: any, key: string): string => {\n const value = row[key]\n if (value === null || value === undefined) return ''\n if (typeof value === 'object') return value.name || value.label || JSON.stringify(value)\n return String(value)\n }\n\n // Generate copyable text from table data (TSV format for spreadsheet compatibility)\n const getTableText = () => {\n const columns = tableParams.columns || []\n const rows = tableParams.rows || []\n const header = columns.map((c: any) => c.label).join('\\t')\n const dataRows = rows.map((row: any) =>\n columns.map((c: any) => getCellValue(row, c.key)).join('\\t')\n ).join('\\n')\n return `${header}\\n${dataRows}`\n }\n\n // CSV generation (RFC 4180 compliant)\n const getTableCSV = () => {\n const columns = tableParams.columns || []\n const rows = tableParams.rows || []\n const escapeCSV = (val: string) => {\n if (val.includes(',') || val.includes('\"') || val.includes('\\n')) {\n return `\"${val.replace(/\"/g, '\"\"')}\"`\n }\n return val\n }\n const header = columns.map((c: any) => escapeCSV(c.label)).join(',')\n const dataRows = rows.map((row: any) =>\n columns.map((c: any) => escapeCSV(getCellValue(row, c.key))).join(',')\n ).join('\\n')\n return `${header}\\n${dataRows}`\n }\n\n // JSON generation\n const getTableJSON = () => {\n const columns = tableParams.columns || []\n const rows = tableParams.rows || []\n return JSON.stringify({ columns: columns.map((c: any) => ({ key: c.key, label: c.label })), rows }, null, 2)\n }\n\n // Download helper\n const downloadFile = (content: string, filename: string, mimeType: string) => {\n const blob = new Blob([content], { type: mimeType })\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = filename\n a.click()\n URL.revokeObjectURL(url)\n }\n\n // Export config\n const exportable = tableParams.exportable\n const exportFormats = typeof exportable === 'object' && exportable?.formats\n ? exportable.formats\n : ['csv', 'json']\n const exportFilename = (typeof exportable === 'object' && exportable?.filename) || `table-${Math.random().toString(36).slice(2, 9)}`\n\n // Export dropdown state\n const [showExportMenu, setShowExportMenu] = createSignal(false)\n\n const handleExport = (format: string) => {\n setShowExportMenu(false)\n switch (format) {\n case 'tsv':\n navigator.clipboard.writeText(getTableText())\n break\n case 'csv':\n downloadFile(getTableCSV(), `${exportFilename}.csv`, 'text/csv')\n break\n case 'json':\n downloadFile(getTableJSON(), `${exportFilename}.json`, 'application/json')\n break\n }\n }\n\n const tableId = `table-${Math.random().toString(36).slice(2, 9)}`\n\n // Standard table body (non-virtualized) — uses client pagination when active\n const StandardTableBody = () => (\n <tbody class=\"bg-white dark:bg-gray-800 divide-y divide-gray-200 dark:divide-gray-700\">\n <For each={clientVisibleRows().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 innerHTML={highlightQuery(renderCellValue(row[column.key]), debouncedQuery())} />\n </td>\n )}\n </For>\n </tr>\n )}\n </For>\n </tbody>\n )\n\n // Virtualized table body\n const VirtualizedTableBody = () => {\n const v = virtualizer()\n if (!v) return null\n\n const items = v.getVirtualItems()\n const totalSize = v.getTotalSize()\n const opts = virtualizeOpts()\n const rowHeight = opts.rowHeight ?? 48\n\n return (\n <tbody\n class=\"bg-white dark:bg-gray-800 relative\"\n style={{ height: `${totalSize}px` }}\n >\n <For each={items}>\n {(virtualRow: any) => {\n const row = tableParams.rows[virtualRow.index]\n return (\n <tr\n class={`hover:bg-gray-50 dark:hover:bg-gray-700/50 transition-colors absolute left-0 right-0 ${virtualRow.index % 2 === 0 ? 'bg-white dark:bg-gray-800' : 'bg-gray-50/30 dark:bg-gray-800/50'}`}\n style={{\n height: `${rowHeight}px`,\n transform: `translateY(${virtualRow.start}px)`\n }}\n >\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 innerHTML={highlightQuery(renderCellValue(row[column.key]), debouncedQuery())} />\n </td>\n )}\n </For>\n </tr>\n )\n }}\n </For>\n </tbody>\n )\n }\n\n return (\n <ExpandableWrapper title={tableParams.title || 'Table'} copyData={getTableCSV()} copyLabel=\"Copy table (CSV)\">\n <div class={`relative w-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden group ${isExpanded() ? '' : 'h-full'}`}>\n <Show when={exportable} fallback={<CopyButton getText={getTableCSV} title=\"Copy table (CSV)\" position=\"top-right\" />}>\n <div class=\"absolute right-10 top-2 z-10\">\n <button\n onClick={() => setShowExportMenu(!showExportMenu())}\n class=\"opacity-60 hover:opacity-100 px-2 py-1 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-600 rounded-full hover:bg-gray-100 dark:hover:bg-gray-700 transition-all shadow-sm\"\n title=\"Export table\"\n aria-label=\"Export table\"\n >\n <svg class=\"w-3 h-3 text-gray-500 dark:text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\n </svg>\n </button>\n <Show when={showExportMenu()}>\n <div class=\"absolute right-0 mt-1 w-36 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-600 rounded-lg shadow-lg py-1 text-sm\">\n <Show when={(exportFormats as string[]).includes('tsv')}>\n <button onClick={() => handleExport('tsv')} class=\"w-full text-left px-3 py-1.5 hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300\">Copy TSV</button>\n </Show>\n <Show when={(exportFormats as string[]).includes('csv')}>\n <button onClick={() => handleExport('csv')} class=\"w-full text-left px-3 py-1.5 hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300\">Download CSV</button>\n </Show>\n <Show when={(exportFormats as string[]).includes('json')}>\n <button onClick={() => handleExport('json')} class=\"w-full text-left px-3 py-1.5 hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300\">Download JSON</button>\n </Show>\n </div>\n </Show>\n </div>\n </Show>\n <div class=\"p-4\">\n <Show when={tableParams.title}>\n <h3 id={`${tableId}-title`} class=\"text-sm font-semibold text-gray-900 dark:text-white mb-3\">\n {tableParams.title}\n <Show when={isVirtualizing()}>\n <span class=\"ml-2 text-xs font-normal text-gray-400\">(virtualized: {tableParams.rows?.length} rows)</span>\n </Show>\n </h3>\n </Show>\n\n {/* Search input (v4.3.3) */}\n <Show when={isSearchable()}>\n <div class=\"relative mb-3\">\n <span class=\"absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 pointer-events-none text-sm\">{'\\uD83D\\uDD0D'}</span>\n <input\n type=\"text\"\n value={searchQuery()}\n onInput={(e) => handleSearch(e.currentTarget.value)}\n placeholder={searchPlaceholder()}\n class=\"w-full max-w-xs min-w-[200px] pl-8 pr-8 py-1.5 text-sm border border-gray-200 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-400 focus:border-blue-400 focus:ring-1 focus:ring-blue-400 outline-none\"\n />\n <Show when={searchQuery()}>\n <button\n type=\"button\"\n onClick={() => { handleSearch(''); setSearchQuery(''); setDebouncedQuery('') }}\n class=\"absolute right-2 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 text-sm\"\n aria-label=\"Clear search\"\n >&times;</button>\n </Show>\n </div>\n <Show when={debouncedQuery() && filteredRows().length !== sortedRows().length}>\n <p class=\"text-xs text-gray-500 dark:text-gray-400 mb-2\">\n {filteredRows().length} result{filteredRows().length !== 1 ? 's' : ''} on {sortedRows().length}\n </p>\n </Show>\n </Show>\n\n <div\n ref={scrollContainerRef}\n class=\"overflow-x-auto\"\n style={\n isVirtualizing()\n ? { 'max-height': '500px', 'overflow-y': 'auto' }\n : !isExpanded() && clientVisibleRows().length > 8\n ? { 'max-height': '400px', 'overflow-y': 'auto' }\n : {}\n }\n role=\"region\"\n aria-label={tableParams.title || 'Data table'}\n tabindex=\"0\"\n >\n <table\n class=\"min-w-full divide-y divide-gray-200 dark:divide-gray-700 border-separate border-spacing-0\"\n aria-labelledby={tableParams.title ? `${tableId}-title` : undefined}\n >\n <thead class=\"bg-gray-100 dark:bg-gray-900 sticky top-0 z-10\">\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 bg-gray-100 dark:bg-gray-900 cursor-pointer select-none hover:bg-gray-200 dark:hover:bg-gray-800 transition-colors\"\n style={column.width ? { width: column.width } : {}}\n on:click={() => handleSort(column.key)}\n title={`Sort by ${column.label}`}\n >\n <span class=\"inline-flex items-center gap-1\">\n {column.label}\n <span\n class=\"text-[10px] leading-none\"\n classList={{\n 'opacity-30': sortKey() !== column.key,\n 'opacity-100 text-blue-600 dark:text-blue-400': sortKey() === column.key,\n }}\n >\n {sortIndicator(column.key)}\n </span>\n </span>\n </th>\n )}\n </For>\n </tr>\n </thead>\n <Show when={isVirtualizing()} fallback={<StandardTableBody />}>\n <VirtualizedTableBody />\n </Show>\n </table>\n </div>\n\n {/* Server-side pagination (legacy) */}\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\n {/* Client-side pagination (v4.3.7) */}\n <Show when={needsClientPagination()}>\n <div class=\"mt-3 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400\">\n <span>\n {clientRangeStart()}&ndash;{clientRangeEnd()} / {filteredRows().length.toLocaleString('fr-FR')}\n </span>\n <div class=\"flex items-center gap-2\">\n <button\n class=\"px-2 py-1 rounded hover:bg-gray-100 dark:hover:bg-gray-700 disabled:opacity-40 disabled:cursor-not-allowed transition-colors\"\n disabled={clientPage() === 0}\n onClick={() => setClientPage(p => p - 1)}\n >\n &#x25C0;\n </button>\n <span>{clientPage() + 1} / {clientTotalPages()}</span>\n <button\n class=\"px-2 py-1 rounded hover:bg-gray-100 dark:hover:bg-gray-700 disabled:opacity-40 disabled:cursor-not-allowed transition-colors\"\n disabled={clientPage() >= clientTotalPages() - 1}\n onClick={() => setClientPage(p => p + 1)}\n >\n &#x25B6;\n </button>\n {/* Page size selector — fullscreen only */}\n <Show when={isExpanded() && filteredRows().length > 10}>\n <select\n class=\"ml-2 px-1 py-0.5 text-xs border border-gray-200 dark:border-gray-600 rounded bg-white dark:bg-gray-700 text-gray-700 dark:text-gray-300\"\n value={clientPageSize()}\n onChange={(e) => handlePageSizeChange(Number(e.currentTarget.value))}\n >\n <For each={pageSizeOptions()}>\n {(opt) => <option value={opt.value}>{opt.label}</option>}\n </For>\n </select>\n <span class=\"text-gray-400\">/ page</span>\n </Show>\n </div>\n </div>\n </Show>\n </div>\n </div>\n </ExpandableWrapper>\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 // Generate copyable text for metric\n const getMetricText = () => {\n const title = metricParams.title || metricParams.label || ''\n const value = metricParams.value\n const unit = metricParams.unit || ''\n return `${title}: ${value}${unit ? ' ' + unit : ''}`\n }\n\n return (\n <div class=\"relative w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 p-4 group\">\n <CopyButton getText={getMetricText} title=\"Copy metric\" position=\"top-right\" />\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 * Extract image data from markdown image link format\n * Pattern: [![alt](image-url)](link-url)\\n*Photo by Author*\n */\nfunction extractImageFromMarkdown(content: string): { alt: string; imageUrl: string; linkUrl: string; credit: string } | null {\n // Pattern: [![alt text](image-url)](link-url) followed by optional credit line\n const imagePattern = /\\[!\\[([^\\]]*)\\]\\(([^)]+)\\)\\]\\(([^)]+)\\)\\s*\\*([^*]+)\\*/\n const match = content.match(imagePattern)\n\n if (match) {\n return {\n alt: match[1] || 'Image',\n imageUrl: match[2],\n linkUrl: match[3],\n credit: match[4].trim()\n }\n }\n\n return null\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 // Check if this is an image markdown that should be rendered as image component\n const imageData = createMemo(() => {\n if (textParams.markdown && textParams.content) {\n return extractImageFromMarkdown(textParams.content)\n }\n return null\n })\n\n // Convert markdown to HTML if markdown flag is true (and not an image component)\n const htmlContent = createMemo(() => {\n if (textParams.markdown && !imageData()) {\n return marked.parse(textParams.content, { async: false }) as string\n }\n return textParams.content\n })\n\n // Get plain text content for copying (strip markdown/HTML)\n const getTextContent = () => {\n return textParams.content || ''\n }\n\n // Render as image component if we extracted image data\n return (\n <Show\n when={imageData()}\n fallback={\n <div class=\"relative w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 p-4 group\">\n <CopyButton getText={getTextContent} title=\"Copy text\" position=\"top-right\" />\n <div\n class={`prose prose-sm dark:prose-invert max-w-none ${textParams.className || ''}`}\n innerHTML={htmlContent()}\n />\n </div>\n }\n >\n {(data) => (\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={data().linkUrl} target=\"_blank\" rel=\"noopener noreferrer\" class=\"cursor-zoom-in\">\n <img\n src={data().imageUrl}\n alt={data().alt}\n class=\"max-w-full max-h-[400px] object-contain rounded shadow-sm hover:opacity-90 transition-opacity\"\n loading=\"lazy\"\n />\n </a>\n </div>\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 italic\">{data().credit}</p>\n </div>\n </div>\n )}\n </Show>\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={getIframeSandbox(params.url)}\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\n return (\n <figure 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 ${params.className || ''}`}>\n <div class=\"flex-1 flex items-center justify-center p-4 bg-gray-50 dark:bg-gray-900 min-h-[200px]\">\n <a\n href={params.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"cursor-zoom-in focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 rounded\"\n aria-label={`View full size: ${params.alt || 'image'}`}\n >\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 <figcaption 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 </figcaption>\n </Show>\n </figure>\n )\n}\n\n/**\n * Render a link component\n */\nfunction LinkRenderer(props: { component: UIComponent }) {\n const params = props.component.params as any\n\n return (\n <a\n href={params.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label={`${params.label || 'Link'}: ${params.description || params.url} (opens in new tab)`}\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 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 ${params.className || ''}`}\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\" aria-hidden=\"true\">\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 aria-hidden=\"true\"\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 errorMode?: ValidationErrorMode\n}) {\n // Performance marks — visible in Chrome DevTools \"Performance\" panel under\n // user timings. Always-on, SSR-safe (see utils/perf.ts).\n markRenderStart(props.component.id)\n onMount(() => markRenderEnd(props.component.id))\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 const mode: ValidationErrorMode = props.errorMode ?? 'block'\n const firstError = validation.errors?.[0]?.message || 'Unknown validation error'\n\n if (mode === 'silent') {\n return null\n }\n\n if (mode === 'inline-warn') {\n return (\n <div\n class=\"inline-flex items-center gap-1.5 px-2 py-1 rounded-md bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 text-xs text-yellow-800 dark:text-yellow-200\"\n role=\"alert\"\n aria-label=\"Component validation warning\"\n title={firstError}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"w-3.5 h-3.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 aria-hidden=\"true\"\n >\n <path d=\"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n <span>Invalid {props.component.type}</span>\n </div>\n )\n }\n\n // mode === 'block' (default, pre-v5.4.0 behavior)\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 {firstError}\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 <Show when={props.component.type === 'grid'}>\n <GridRenderer component={props.component} onError={props.onError} />\n </Show>\n <Show when={props.component.type === 'carousel'}>\n <CarouselRenderer items={(props.component.params as any)?.items || []} height={(props.component.params as any)?.height} />\n </Show>\n <Show when={props.component.type === 'artifact'}>\n <ArtifactRenderer params={props.component.params as any} />\n </Show>\n <Show when={props.component.type === 'form'}>\n <FormRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'modal'}>\n <ModalRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'action-group'}>\n <ActionGroupRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'image-gallery'}>\n <ImageGalleryRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'video'}>\n <VideoRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'code'}>\n <CodeBlockRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'map'}>\n <MapRenderer component={props.component} />\n </Show>\n </GenerativeUIErrorBoundary>\n )\n}\n\n/**\n * Render an action component (button or link)\n * Refactored in Phase 5.0 to use useAction hook for Context-based execution\n */\nfunction ActionRenderer(props: { component: UIComponent }) {\n const params = props.component.params as any\n const { execute, isExecuting } = useAction()\n\n // Handle click to execute tool via Context (falls back to CustomEvent if no provider)\n const handleClick = async (e: MouseEvent) => {\n if (params.action === 'tool-call' && params.toolName) {\n e.preventDefault()\n await execute(params.toolName, params.params || {})\n }\n }\n\n // Determine if button should be disabled (explicit disable or currently executing)\n const isDisabled = () => params.disabled || (params.action === 'tool-call' && isExecuting())\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 aria-label={params.ariaLabel || params.label}\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' :\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 ${params.className || ''}`}\n onClick={handleClick}\n >\n <Show when={params.icon}>\n <span aria-hidden=\"true\">{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={isDisabled()}\n aria-busy={isExecuting() && params.action === 'tool-call'}\n aria-label={params.ariaLabel || params.label}\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 ${isDisabled() ? '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 ${params.className || ''}`}\n onClick={handleClick}\n >\n <Show when={isExecuting() && params.action === 'tool-call'}>\n <span class=\"animate-spin h-4 w-4 border-2 border-current border-t-transparent rounded-full\" aria-hidden=\"true\" />\n </Show>\n <Show when={params.icon && !(isExecuting() && params.action === 'tool-call')}>\n <span aria-hidden=\"true\">{params.icon}</span>\n </Show>\n {params.label}\n </button>\n )\n}\n\n/**\n * Error card renderer for tool execution errors\n * Handles {error: true, message: \"...\", tool: \"...\", suggestions: [...]} format\n */\nfunction ErrorCardRenderer(props: { error: any }) {\n const getErrorText = () => {\n return `Error in ${props.error.tool || 'unknown tool'}: ${props.error.message || 'Unknown error'}`\n }\n\n return (\n <div class=\"relative w-full bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg p-4 group\">\n <CopyButton getText={getErrorText} title=\"Copy error details\" position=\"top-right\" />\n <div class=\"flex items-start gap-3\">\n <div class=\"p-2 bg-red-100 dark:bg-red-900/40 rounded-full shrink-0\">\n <svg class=\"w-5 h-5 text-red-600 dark:text-red-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" 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 </svg>\n </div>\n <div class=\"flex-1 min-w-0\">\n <h4 class=\"text-sm font-semibold text-red-800 dark:text-red-200\">\n Tool Error: {props.error.tool || 'Unknown'}\n </h4>\n <p class=\"text-sm text-red-700 dark:text-red-300 mt-1\">\n {props.error.message || 'An error occurred during tool execution'}\n </p>\n <Show when={props.error.type}>\n <p class=\"text-xs text-red-600 dark:text-red-400 mt-1\">\n Type: {props.error.type}\n </p>\n </Show>\n <Show when={props.error.suggestions?.length}>\n <div class=\"mt-3\">\n <p class=\"text-xs font-medium text-red-700 dark:text-red-300\">Suggestions:</p>\n <ul class=\"mt-1 text-xs text-red-600 dark:text-red-400 list-disc list-inside\">\n <For each={props.error.suggestions}>\n {(suggestion: string) => <li>{suggestion}</li>}\n </For>\n </ul>\n </div>\n </Show>\n <Show when={props.error.timestamp}>\n <p class=\"text-xs text-red-500 dark:text-red-500 mt-2\">\n {new Date(props.error.timestamp).toLocaleString()}\n </p>\n </Show>\n </div>\n </div>\n </div>\n )\n}\n\n/**\n * Check if content is an error response from MCP tool\n */\nfunction isErrorResponse(content: any): boolean {\n return content && typeof content === 'object' && content.error === true\n}\n\n/**\n * Check if content is a UIResource (raw HTML or URI-based resource)\n * UIResource has: { uri, content: { type: 'rawHtml', htmlString }, encoding, metadata }\n */\nfunction isUIResource(content: any): boolean {\n return content && typeof content === 'object' && (\n content.uri?.startsWith('ui://') ||\n content.content?.type === 'rawHtml' ||\n content.content?.htmlString\n )\n}\n\n/**\n * Render UIResource (raw HTML) content\n * Handles HTML resources returned by tools like ui_show_dashboard, ui_show_health\n */\nfunction UIResourceHtmlRenderer(props: { resource: any }) {\n const htmlContent = () => {\n if (props.resource.content?.htmlString) {\n return DOMPurify.sanitize(props.resource.content.htmlString)\n }\n return ''\n }\n\n const resourceTitle = () => {\n return props.resource.metadata?.title || props.resource.uri?.replace('ui://deposium/', '') || 'Resource'\n }\n\n return (\n <div class=\"w-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden\">\n <Show when={props.resource.metadata?.title || props.resource.uri}>\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 capitalize\">\n {resourceTitle()}\n </h3>\n </div>\n </Show>\n <div\n class=\"p-4 prose prose-sm dark:prose-invert max-w-none\"\n innerHTML={htmlContent()}\n />\n </div>\n )\n}\n\n/**\n * Main UIResourceRenderer component\n */\nexport const UIResourceRenderer: Component<UIResourceRendererProps> = (props) => {\n // Handle error responses early (Sprint 9b fix)\n if (isErrorResponse(props.content)) {\n return <ErrorCardRenderer error={props.content} />\n }\n\n // Handle UIResource (raw HTML) - skip grid validation (Sprint 9c fix)\n if (isUIResource(props.content)) {\n return <UIResourceHtmlRenderer resource={props.content} />\n }\n\n const layout = () => {\n // Check if content is a UIComponent (non-composite) vs UILayout (composite)\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 // Convert grid styles to CSS string\n const gridContainerStyle = () => {\n const layoutData = layout()\n return `grid-template-columns: repeat(${layoutData.grid.columns}, 1fr); gap: ${layoutData.grid.gap}`\n }\n\n // Convert component grid styles to CSS string\n const getGridStyleString = (component: UIComponent) => {\n // Defensive check for position field - default to full width\n if (!component.position) {\n return 'grid-column: 1 / span 12; grid-row: auto'\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 // Auto-footer logic (Phase 5.0)\n // Automatically inject footer when metadata is present and no explicit footer exists\n const shouldShowAutoFooter = createMemo(() => {\n const layoutData = layout()\n\n // Don't show if explicitly hidden\n if (layoutData.metadata?.hideFooter) {\n return false\n }\n\n // Don't show if no metadata (nothing to display)\n if (!layoutData.metadata) {\n return false\n }\n\n // Don't show if explicit footer component exists\n const hasExplicitFooter = layoutData.components.some((c) => c.type === 'footer')\n if (hasExplicitFooter) {\n return false\n }\n\n // Show auto-footer if metadata has relevant info\n return !!(\n layoutData.metadata.executionTime ||\n layoutData.metadata.sourceCount ||\n layoutData.metadata.llmModel\n )\n })\n\n // Build auto-footer params from metadata\n const autoFooterParams = createMemo(() => {\n const layoutData = layout()\n return {\n poweredBy: 'Deposium',\n executionTime: layoutData.metadata?.executionTime,\n model: layoutData.metadata?.llmModel,\n sourceCount: layoutData.metadata?.sourceCount,\n }\n })\n\n const layoutData = layout()\n\n // Wrapper function for RenderContext (breaks circular dependency)\n const renderComponent = (component: UIComponent, onError?: (error: RendererError) => void) => (\n <ComponentRenderer component={component} onError={onError} errorMode={props.errorMode} />\n )\n\n return (\n <RenderProvider renderComponent={renderComponent}>\n <div class={`w-full ${props.class || ''}`}>\n <div class=\"grid gap-4\" style={gridContainerStyle()}>\n <For each={layoutData.components}>\n {(component) => (\n <div style={getGridStyleString(component)}>\n <ComponentRenderer component={component} onError={props.onError} errorMode={props.errorMode} />\n </div>\n )}\n </For>\n </div>\n\n {/* Auto-injected footer (Phase 5.0) */}\n <Show when={shouldShowAutoFooter()}>\n <FooterRenderer params={autoFooterParams()} />\n </Show>\n </div>\n </RenderProvider>\n )\n}\n"],"names":["CopyButton","props","copied","setCopied","createSignal","handleCopy","navigator","clipboard","writeText","getText","setTimeout","err","console","error","positionClasses","position","_el$","_$getNextElement","_tmpl$2","$$click","_$insert","_$createComponent","Show","when","fallback","_tmpl$3","children","_tmpl$","_$effect","_p$","_v$","_v$2","title","e","_$className","t","_$setAttribute","undefined","_$runHydrationEvents","ChartRenderer","useNative","setUseNative","iframeUrl","setIframeUrl","isLoading","setIsLoading","setError","params","component","rendererPref","renderer","data","datasets","_tmpl$4","createEffect","pref","buildIframeUrl","available","isChartJSAvailable","chartParams","chartConfig","type","options","responsive","maintainAspectRatio","configStr","encodeURIComponent","JSON","stringify","url","_el$5","_tmpl$9","_el$15","firstChild","_el$16","_co$2","_$getNextMarker","nextSibling","_el$17","_el$18","_co$3","_el$19","_el$20","_co$4","_tmpl$5","_el$7","_tmpl$6","_el$8","_el$9","_el$0","_$memo","_el$1","_tmpl$8","_el$13","_el$14","_co$","_el$11","_el$12","_el$10","_tmpl$7","addEventListener","onError","message","componentId","id","_v$3","_v$4","_v$5","a","ChartJSRenderer","highlightQuery","html","query","q","trim","escaped","replace","regex","RegExp","_m","tag","text","renderCellValue","value","label","name","sanitizedLabel","DOMPurify","sanitize","String","sanitizedUrl","strValue","toLowerCase","markdownLinkRegex","test","htmlValue","ADD_ATTR","hasHtml","ALLOWED_TAGS","ALLOWED_ATTR","hasMarkdown","parsed","marked","parse","async","TableRenderer","tableParams","scrollContainerRef","allRows","rows","columns","sortKey","setSortKey","sortDir","setSortDir","handleSort","key","setClientPage","sortedRows","createMemo","r","dir","col","find","c","isNum","length","sort","b","va","vb","cmp","Number","localeCompare","sensitivity","sortIndicator","searchQuery","setSearchQuery","debouncedQuery","setDebouncedQuery","searchTimer","isSearchable","searchable","searchPlaceholder","handleSearch","normalize","s","filteredRows","cols","filter","row","some","val","includes","isExpanded","useExpanded","defaultPageSize","pageSize","chatDefault","chatPageSize","Math","min","userPageSize","setUserPageSize","clientPageSize","ups","showAll","hasServerPagination","pagination","needsClientPagination","clientPage","initialPage","clientTotalPages","ceil","clientVisibleRows","start","slice","clientRangeStart","clientRangeEnd","pageSizeOptions","total","opts","n","push","handlePageSizeChange","virtualizer","setVirtualizer","isVirtualizing","setIsVirtualizing","shouldVirtualize","virtualize","enabled","threshold","virtualizeOpts","isServer","createVirtualizer","rowHeight","overscan","v","count","getScrollElement","estimateSize","warn","getCellValue","getTableText","header","map","join","dataRows","getTableCSV","escapeCSV","getTableJSON","downloadFile","content","filename","mimeType","blob","Blob","URL","createObjectURL","document","createElement","href","download","click","revokeObjectURL","exportable","exportFormats","formats","exportFilename","random","toString","showExportMenu","setShowExportMenu","handleExport","format","tableId","StandardTableBody","_el$21","_tmpl$0","For","each","DEFAULT_RESOURCE_LIMITS","maxTableRows","i","_el$22","_tmpl$1","column","_el$23","_tmpl$10","_el$24","_$setProperty","VirtualizedTableBody","items","getVirtualItems","totalSize","getTotalSize","_el$25","_tmpl$11","_$setStyleProperty","virtualRow","index","_el$26","_el$27","_el$28","_v$6","_v$7","ExpandableWrapper","copyData","copyLabel","_el$29","_tmpl$26","_el$120","_el$121","_co$28","_el$44","_el$112","_el$113","_co$24","_el$114","_el$115","_co$25","_el$70","_el$71","_el$72","_el$73","_el$74","_el$75","_co$14","_el$116","_el$117","_co$26","_el$118","_el$119","_co$27","_el$30","_tmpl$16","_el$31","_el$42","_el$43","_co$8","_el$32","_tmpl$15","_el$36","_el$37","_co$5","_el$38","_el$39","_co$6","_el$40","_el$41","_co$7","_el$33","_tmpl$12","_el$34","_tmpl$13","_el$35","_tmpl$14","_el$45","_tmpl$18","_el$51","_el$52","_co$0","_el$53","_el$54","_co$1","_el$46","_tmpl$17","_el$47","_el$49","_el$50","_co$9","_el$55","_tmpl$20","_el$56","_el$57","_el$59","_el$60","_co$10","$$input","currentTarget","_el$58","_tmpl$19","_el$61","_tmpl$21","_el$64","_el$65","_co$11","_el$62","_el$66","_el$67","_co$12","_el$63","_el$68","_el$69","_co$13","_ref$","_$use","_el$122","_tmpl$27","_el$123","_el$125","_el$126","_co$29","_el$124","_$addEventListener","_v$12","width","_v$13","_v$14","_$style","_$classList","_el$76","_tmpl$22","_el$77","_el$78","_el$83","_el$84","_co$15","_el$79","_el$85","_el$86","_co$16","_el$81","_el$87","_el$88","_co$17","currentPage","totalRows","_el$89","_tmpl$25","_el$90","_el$93","_el$94","_co$18","_el$91","_el$95","_el$96","_co$19","_el$92","_el$97","_el$98","_co$20","_el$99","_el$100","_el$101","_el$103","_el$104","_co$21","_el$102","_el$105","_el$106","_co$22","_el$107","_el$110","_el$111","_co$23","toLocaleString","p","_el$108","_tmpl$23","opt","_el$127","_tmpl$28","_tmpl$24","_v$8","_v$9","_v$0","_v$1","_v$10","_v$11","o","MetricRenderer","metricParams","getMetricText","unit","_el$128","_tmpl$32","_el$150","_el$151","_co$35","_el$129","_el$130","_el$131","_el$132","_el$133","_el$135","_el$136","_co$30","_el$146","_el$147","_co$33","_el$148","_el$149","_co$34","_el$134","_tmpl$29","trend","_el$137","_tmpl$30","_el$138","_el$141","_el$142","_co$31","_el$139","_el$143","_el$144","_co$32","_c$","direction","abs","subtitle","_el$145","_tmpl$31","extractImageFromMarkdown","imagePattern","match","alt","imageUrl","linkUrl","credit","TextRenderer","textParams","imageData","markdown","htmlContent","getTextContent","_el$152","_tmpl$33","_el$154","_el$155","_co$36","_el$153","_v$15","className","_v$16","_el$156","_tmpl$34","_el$157","_el$158","_el$159","_el$160","_el$161","_v$17","_v$18","_v$19","IframeRenderer","_el$162","_tmpl$36","_el$166","_el$167","_co$37","_el$165","_el$163","_tmpl$35","_el$164","_v$20","_v$21","_v$22","height","_v$23","getIframeSandbox","ImageRenderer","_el$168","_tmpl$38","_el$169","_el$170","_el$171","_el$174","_el$175","_co$38","caption","_el$172","_tmpl$37","_el$173","_v$24","_v$25","_v$26","_v$27","_v$28","LinkRenderer","_el$176","_tmpl$40","_el$177","_el$178","_el$179","_el$181","_el$182","_co$39","stopPropagation","description","_el$180","_tmpl$39","_v$29","_v$30","_v$31","ComponentRenderer","markRenderStart","onMount","markRenderEnd","validation","validateComponent","valid","details","errors","mode","errorMode","firstError","_el$183","_tmpl$41","_el$184","_el$185","_el$186","_el$187","_el$188","_co$40","_el$189","_tmpl$42","_el$190","_el$191","GenerativeUIErrorBoundary","componentType","allowRetry","ActionRenderer","GridRenderer","CarouselRenderer","ArtifactRenderer","FormRenderer","ModalRenderer","ActionGroupRenderer","ImageGalleryRenderer","VideoRenderer","CodeBlockRenderer","MapRenderer","execute","isExecuting","useAction","handleClick","action","toolName","preventDefault","isDisabled","disabled","_el$192","_tmpl$44","_el$194","_el$195","_co$41","_el$196","_el$197","_co$42","icon","_el$193","_tmpl$43","_v$32","_v$33","_v$34","ariaLabel","_v$35","variant","_el$198","_tmpl$46","_el$201","_el$202","_co$43","_el$203","_el$204","_co$44","_el$205","_el$206","_co$45","_tmpl$45","_el$200","_v$36","_v$37","_v$38","_v$39","_v$40","size","ErrorCardRenderer","getErrorText","tool","_el$207","_tmpl$50","_el$230","_el$231","_co$51","_el$208","_el$209","_el$210","_el$211","_el$212","_el$213","_el$214","_co$46","_el$215","_el$224","_el$225","_co$48","_el$226","_el$227","_co$49","_el$228","_el$229","_co$50","_el$216","_tmpl$47","_el$217","_el$218","_el$219","_co$47","suggestions","_el$220","_tmpl$48","_el$221","_el$222","suggestion","_el$232","_tmpl$51","timestamp","_el$223","_tmpl$49","Date","isErrorResponse","isUIResource","uri","startsWith","htmlString","UIResourceHtmlRenderer","resource","resourceTitle","metadata","_el$233","_tmpl$53","_el$237","_el$238","_co$52","_el$236","_el$234","_tmpl$52","_el$235","UIResourceRenderer","layout","components","grid","gap","gridContainerStyle","layoutData","getGridStyleString","colStart","colSpan","rowStart","rowSpan","shouldShowAutoFooter","hideFooter","hasExplicitFooter","executionTime","sourceCount","llmModel","autoFooterParams","poweredBy","model","renderComponent","RenderProvider","_el$239","_tmpl$54","_el$240","_el$241","_el$242","_co$53","_el$243","_tmpl$55","_$p","FooterRenderer","_v$41","class","_v$42","_$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, Show, For, createMemo, createEffect, onMount, onCleanup } from 'solid-js'\nimport { isServer } from 'solid-js/web'\nimport type { UIComponent, UILayout, RendererError, TableVirtualizeOptions } from '../types'\nimport { validateComponent, DEFAULT_RESOURCE_LIMITS, getIframeSandbox } from '../services/validation'\nimport { GenerativeUIErrorBoundary } from './GenerativeUIErrorBoundary'\nimport { markRenderStart, markRenderEnd, PERF_PREFIX } from '../utils/perf'\nimport { useTelemetry } from '../context/MCPUITelemetryContext'\n\n/**\n * How `<UIResourceRenderer>` reacts when `validateComponent()` rejects a\n * component (v5.4.0).\n *\n * - `'block'` : full-slot red error card (default — backward compatible)\n * - `'inline-warn'` : compact yellow chip in the slot, tooltip carries the\n * error message — keeps the surrounding layout clean\n * (e.g. inside a chat message)\n * - `'silent'` : render nothing in the slot; `onError` still fires so the\n * consumer can log/alert\n *\n * Runtime errors caught by `<GenerativeUIErrorBoundary>` are NOT affected by\n * this prop — they always show the boundary's fallback UI.\n */\nexport type ValidationErrorMode = 'block' | 'inline-warn' | 'silent'\nimport { GridRenderer } from './GridRenderer'\nimport { FooterRenderer } from './FooterRenderer'\nimport { CarouselRenderer } from './CarouselRenderer'\nimport { ArtifactRenderer } from './ArtifactRenderer'\nimport { FormRenderer } from './FormRenderer'\nimport { ModalRenderer } from './ModalRenderer'\nimport { ActionGroupRenderer } from './ActionGroupRenderer'\nimport { ChartJSRenderer, isChartJSAvailable } from './ChartJSRenderer'\nimport { ImageGalleryRenderer } from './ImageGalleryRenderer'\nimport { VideoRenderer } from './VideoRenderer'\nimport { CodeBlockRenderer } from './CodeBlockRenderer'\nimport { MapRenderer } from './MapRenderer'\nimport { ExpandableWrapper, useExpanded } from './ExpandableWrapper'\nimport { RenderProvider } from './RenderContext'\nimport { useAction } from '../hooks/useAction'\nimport { marked } from 'marked'\n\n/**\n * Copy button component with visual feedback\n */\nfunction CopyButton(props: { getText: () => string; title?: string; position?: 'top-right' | 'bottom-right' }) {\n const [copied, setCopied] = createSignal(false)\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(props.getText())\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n } catch (err) {\n console.error('Failed to copy:', err)\n }\n }\n\n const positionClasses = () => {\n return props.position === 'bottom-right'\n ? 'absolute -right-2 -bottom-3'\n : 'absolute right-2 top-2'\n }\n\n return (\n <button\n onClick={handleCopy}\n class={`${positionClasses()} opacity-60 hover:opacity-100 px-2 py-1 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-600 rounded-full hover:bg-gray-100 dark:hover:bg-gray-700 transition-all shadow-sm z-10`}\n title={props.title || 'Copy'}\n >\n <Show\n when={!copied()}\n fallback={\n <svg class=\"w-3 h-3 text-green-500\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 13l4 4L19 7\" />\n </svg>\n }\n >\n <svg class=\"w-3 h-3 text-gray-500 dark:text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\" />\n </svg>\n </Show>\n </button>\n )\n}\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 * How to react when a component fails `validateComponent()` (v5.4.0).\n * Defaults to `'block'` (replaces the slot with a red error card —\n * the pre-v5.4.0 behavior).\n *\n * @see ValidationErrorMode\n */\n errorMode?: ValidationErrorMode\n}\n\n/**\n * Render a single chart component in a sandboxed iframe\n */\n/**\n * Smart Chart Renderer - Sprint 4\n * Supports native Chart.js or Quickchart.io iframe fallback\n */\nfunction ChartRenderer(props: {\n component: UIComponent\n onError?: (error: RendererError) => void\n}) {\n const [useNative, setUseNative] = createSignal(false)\n const [iframeUrl, setIframeUrl] = createSignal<string>()\n const [isLoading, setIsLoading] = createSignal(true)\n const [error, setError] = createSignal<string>()\n\n const params = () => props.component.params as any\n const rendererPref = () => params()?.renderer || 'auto'\n\n // Guard: if data or datasets missing, show error instead of crashing Chart.js\n if (!params()?.data?.datasets) {\n return (\n <div class=\"p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700\">\n <p class=\"text-red-500 dark:text-red-400 text-sm\">Invalid chart data: missing data.datasets</p>\n </div>\n )\n }\n\n // Check renderer preference and Chart.js availability\n createEffect(async () => {\n const pref = rendererPref()\n\n if (pref === 'iframe') {\n // Force iframe mode\n setUseNative(false)\n buildIframeUrl()\n } else if (pref === 'native') {\n // Force native mode - will show error if Chart.js not available\n const available = await isChartJSAvailable()\n if (available) {\n setUseNative(true)\n setIsLoading(false)\n } else {\n setError('Chart.js is not available. Install chart.js peer dependency.')\n setIsLoading(false)\n }\n } else {\n // Auto mode - use native if available, otherwise iframe\n const available = await isChartJSAvailable()\n if (available) {\n setUseNative(true)\n setIsLoading(false)\n } else {\n setUseNative(false)\n buildIframeUrl()\n }\n }\n })\n\n const buildIframeUrl = () => {\n const chartParams = params()\n if (!chartParams) return\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 setIframeUrl(url)\n setIsLoading(false)\n }\n\n // Reactive switch between native Chart.js and iframe fallback\n // Must use <Show> — signals in component body are not reactive in SolidJS\n return (\n <Show\n when={useNative()}\n fallback={\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={params()?.title}>\n <h3 class=\"text-sm font-semibold text-gray-900 dark:text-white mb-3\">\n {params()?.title}\n </h3>\n </Show>\n <div class=\"w-full h-full\" role=\"img\" aria-label={params()?.title ? `Chart: ${params()?.title}` : 'Chart visualization'}>\n <img\n src={iframeUrl()}\n alt={params()?.title ? `Chart: ${params()?.title}` : '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 <ChartJSRenderer\n component={props.component}\n onError={(err) => props.onError?.({\n type: 'render',\n message: err.message,\n componentId: props.component.id,\n })}\n />\n </Show>\n )\n}\n\n/**\n * Smart cell value renderer that handles markdown links and other formats\n */\n/**\n * Wrap matches of `query` in <mark> tags within an HTML string.\n * Case-insensitive. Skips content inside HTML tag attributes to avoid corruption.\n * v4.3.8\n */\nexport function highlightQuery(html: string, query: string): string {\n const q = query.trim()\n if (!q) return html\n // Escape regex metacharacters\n const escaped = q.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n const regex = new RegExp(`(${escaped})`, 'gi')\n // Process text segments only (skip inside tags)\n return html.replace(/(<[^>]+>)|([^<]+)/g, (_m, tag, text) => {\n if (tag) return tag\n if (!text) return ''\n return text.replace(regex, '<mark class=\"bg-yellow-200 dark:bg-[#222F49] text-inherit rounded px-0.5\">$1</mark>')\n })\n}\n\n/**\n * Citation context — opt-in input to `renderCellValue` (v5.7.0).\n *\n * When passed, `[N]`, `Citation [N]`, `[CITATION N]` and `[📄 CITATION N]`\n * markers in the cell text are normalized then replaced with chip HTML.\n * Chips carry `data-citation-page`, `data-citation-doc`, and\n * `data-citation-verified` attributes (already in the DOMPurify whitelist\n * since v5.6.0) so a host's `target.closest('[data-citation-page]')`\n * delegated click handler routes the click to the source-doc panel.\n *\n * See `mcp-ui-solid/docs/briefs/BRIEF-citations-in-table-cells.md`.\n */\nexport interface CitationCtx {\n /**\n * `Record<id, mapping>` keyed by the citation marker number (string-keyed\n * because JSON serialization always produces strings; the runtime call\n * sites accept either number or string ids and normalize internally).\n */\n map: Record<string | number, { page: number | string; file?: string; file_id?: number | string }>\n /**\n * Optional override returning sanitized chip HTML for one marker. Wins\n * over the default `defaultCitationChip` shape. Function inputs are\n * intentionally `any`-loose so consumers can swap shapes (e.g. web\n * citations vs doc citations) without subtyping the entry shape here.\n */\n render?: (\n id: number,\n mapping: { page: number | string; file?: string; file_id?: number | string } | undefined\n ) => string\n}\n\n/**\n * Default chip HTML emitted by `transformCellCitations` when no\n * `citationRender` override is supplied. Neutral Tailwind classes — hosts\n * can override visual styling via the `.citation-ref` CSS class without\n * passing a render override.\n */\nfunction defaultCitationChip(\n pageNum: number | string,\n fileName: string,\n verified = true\n): string {\n const safeDocName = encodeURIComponent(fileName || '')\n const label = fileName ? `${fileName} - ${pageNum}` : `${pageNum}`\n if (!verified) {\n return `<span class=\"citation-ref inline-flex items-center gap-0.5 align-middle opacity-60\"><span class=\"text-gray-500 line-through\">[${label}]</span></span>`\n }\n return [\n '<span class=\"citation-ref inline-flex items-center gap-0.5 align-middle\">',\n `<span class=\"text-gray-500\">[${label}]</span>`,\n '<button class=\"inline-flex items-center ml-0.5 px-1 py-0.5 text-xs bg-gray-800 hover:bg-gray-700 border border-gray-600 hover:border-teal-500 rounded cursor-pointer transition-colors align-middle\"',\n ` data-citation-page=\"${pageNum}\"`,\n ` data-citation-doc=\"${safeDocName}\"`,\n ' data-citation-verified=\"true\"',\n ` title=\"View source - ${label}\">`,\n '<svg class=\"w-3 h-3\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/><polyline points=\"14 2 14 8 20 8\"/></svg>',\n '</button>',\n '</span>',\n ].join('')\n}\n\n/**\n * Normalize bare `[N]`, `Citation [N]`, `[CITATION N]` markers to canonical\n * `[📄 CITATION N]` then replace each canonical marker with chip HTML.\n *\n * Negative lookbehind `(?<![p.])` skips `[p.5]` (page form). Negative\n * lookahead `(?!\\()` skips `[text](url)` markdown links.\n */\nfunction transformCellCitations(text: string, ctx: CitationCtx): string {\n // 1. normalize bare [N] / Citation [N] / [CITATION N] → [📄 CITATION N]\n let out = text.replace(/(?<![p.])\\[(\\d{1,2})\\](?!\\()/g, '[📄 CITATION $1]')\n out = out.replace(/\\bCitations?\\s*\\[(\\d+)\\]/gi, '[📄 CITATION $1]')\n out = out.replace(/\\[CITATION\\s+(\\d+)\\]/gi, '[📄 CITATION $1]')\n\n // 2. replace each canonical marker with chip HTML\n return out.replace(\n /[【[]\\s*📄\\s*CITATION\\s*(\\d+)\\s*[】\\]]/gi,\n (_m, idStr) => {\n const id = parseInt(idStr, 10)\n const mapping = ctx.map[id] ?? ctx.map[String(id)]\n if (ctx.render) return ctx.render(id, mapping)\n if (mapping) return defaultCitationChip(mapping.page, mapping.file ?? '', true)\n // Unresolved id: when the map is non-empty (consumer claims to know\n // the citations), drop silently — it's likely an LLM hallucination.\n // When the map is empty (consumer didn't supply one), preserve a\n // human-visible placeholder so the marker isn't lost.\n return Object.keys(ctx.map).length > 0 ? '' : `[réf. ${id}]`\n }\n )\n}\n\nexport function renderCellValue(value: any, citationCtx?: CitationCtx): string {\n // Handle null/undefined\n if (value === null || value === undefined) {\n return '-'\n }\n\n // Handle object with url/name properties (common source/link format from LLM)\n if (typeof value === 'object' && value !== null) {\n // Check for link-like objects: { url: \"...\", name/label/title: \"...\" }\n if (value.url) {\n const label = value.name || value.label || value.title || value.url\n const sanitizedLabel = DOMPurify.sanitize(String(label))\n const sanitizedUrl = DOMPurify.sanitize(String(value.url))\n return `<a href=\"${sanitizedUrl}\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"text-blue-600 dark:text-blue-400 hover:underline\">${sanitizedLabel}</a>`\n }\n // Fallback: extract meaningful text from object properties\n if (value.name || value.label || value.title) {\n return DOMPurify.sanitize(String(value.name || value.label || value.title))\n }\n // Last resort: JSON stringify for debugging (better than [object Object])\n try {\n return JSON.stringify(value)\n } catch {\n return '-'\n }\n }\n\n // Convert to string\n let strValue = String(value)\n\n // Clean up \"undefined\" patterns from backend data\n // Pattern 1: \"Text – undefined\" or \"Text - undefined\" → \"Text\"\n strValue = strValue.replace(/\\s*[–-]\\s*undefined\\s*$/gi, '')\n // Pattern 2: \"undefined – Text\" or \"undefined - Text\" → \"Text\"\n strValue = strValue.replace(/^undefined\\s*[–-]\\s*/gi, '')\n // Pattern 3: standalone \"undefined\" → \"-\"\n if (strValue.trim().toLowerCase() === 'undefined') {\n return '-'\n }\n // Pattern 4: empty string after cleanup → \"-\"\n if (strValue.trim() === '') {\n return '-'\n }\n\n // Detect and convert markdown links: [text](url) — runs FIRST because\n // the citation transform's negative lookahead `(?!\\()` would also skip\n // these, but handling them here keeps the existing return path.\n const markdownLinkRegex = /\\[([^\\]]+)\\]\\(([^)]+)\\)/g\n if (markdownLinkRegex.test(strValue)) {\n // Replace all markdown links with HTML links\n const htmlValue = strValue.replace(\n /\\[([^\\]]+)\\]\\(([^)]+)\\)/g,\n '<a href=\"$2\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"text-blue-600 dark:text-blue-400 hover:underline\">$1</a>'\n )\n return DOMPurify.sanitize(htmlValue, { ADD_ATTR: ['target', 'rel'] })\n }\n\n // v5.7.0 — citation transform (opt-in). Replaces `[N]` style markers\n // with chip HTML carrying `data-citation-*` attrs. Runs BEFORE the\n // hasHtml / hasMarkdown branches so the resulting string flows through\n // them naturally (chips are inline HTML; surviving markdown like\n // **bold** is preserved by marked.parse since marked passes inline HTML\n // through unchanged).\n if (citationCtx) {\n strValue = transformCellCitations(strValue, citationCtx)\n }\n\n // Markdown markers WITHOUT square brackets — `[` and `]` were excluded\n // because chip labels (`[Doc - 5]`) and unresolved-marker fallbacks\n // (`[réf. 12]`) would otherwise force a marked.parse for cells that\n // have no actual markdown. The hasMarkdown check ALSO runs before\n // hasHtml so that mixed cells (`**bold** [1]` → `**bold** <chip>`)\n // get marked first; marked preserves the inline chip HTML, then\n // DOMPurify keeps the citation attrs via the extended whitelist.\n const hasMarkdown = /[*_`#]/.test(strValue)\n if (hasMarkdown) {\n const parsed = marked.parse(strValue, { async: false }) as string\n return DOMPurify.sanitize(parsed, {\n ALLOWED_TAGS: ['a', 'strong', 'em', 'b', 'i', 'code', 'span', 'br', 'button', 'svg', 'path', 'p', 'ul', 'ol', 'li', 'pre', 'blockquote', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'],\n ALLOWED_ATTR: ['href', 'target', 'rel', 'class', 'data-citation-page', 'data-citation-source', 'data-citation-doc', 'data-citation-verified', 'title', 'fill', 'stroke', 'viewBox', 'stroke-linecap', 'stroke-linejoin', 'stroke-width', 'd'],\n ADD_ATTR: ['target', 'rel'],\n })\n }\n\n // Detect raw HTML in cell values (e.g. <a href=\"...\" data-citation-page=\"5\">text</a>)\n // This handles cases where cell data comes from innerHTML extraction\n // OR where the citation transform above injected chip HTML.\n const hasHtml = /<[a-z][\\s\\S]*>/i.test(strValue)\n if (hasHtml) {\n return DOMPurify.sanitize(strValue, {\n ALLOWED_TAGS: ['a', 'strong', 'em', 'b', 'i', 'code', 'span', 'br', 'button', 'svg', 'path'],\n ALLOWED_ATTR: ['href', 'target', 'rel', 'class', 'data-citation-page', 'data-citation-source', 'data-citation-doc', 'data-citation-verified', 'title', 'fill', 'stroke', 'viewBox', 'stroke-linecap', 'stroke-linejoin', 'stroke-width', 'd'],\n ADD_ATTR: ['target', 'rel'],\n })\n }\n\n // Plain text — sanitize to prevent XSS via innerHTML\n return DOMPurify.sanitize(strValue)\n}\n\n/**\n * Render a table component\n * Sprint Ultimate U.3: Added virtualization support for large datasets\n */\nfunction TableRenderer(props: {\n component: UIComponent\n onError?: (error: RendererError) => void\n}) {\n const tableParams = props.component.params as any\n let scrollContainerRef: HTMLDivElement | undefined\n\n // v5.7.0 — opt-in citation chip rendering inside cells. When `citationMap`\n // is present in params, build a CitationCtx once and thread it through\n // every `renderCellValue` call below. Absent → undefined → cells render\n // as before (regression-safe).\n const citationCtx: CitationCtx | undefined = tableParams.citationMap\n ? { map: tableParams.citationMap, render: tableParams.citationRender }\n : undefined\n\n // ─── Client-side sorting (v4.0.5) ────────────────────────\n const allRows = () => tableParams.rows || []\n const columns = () => tableParams.columns || []\n const [sortKey, setSortKey] = createSignal<string | null>(null)\n const [sortDir, setSortDir] = createSignal<'asc' | 'desc' | null>(null)\n\n const handleSort = (key: string) => {\n if (sortKey() === key) {\n if (sortDir() === 'asc') setSortDir('desc')\n else { setSortKey(null); setSortDir(null) }\n } else {\n setSortKey(key)\n setSortDir('asc')\n }\n setClientPage(0)\n }\n\n const sortedRows = createMemo(() => {\n const r = allRows()\n const key = sortKey()\n const dir = sortDir()\n if (!key || !dir) return r\n const col = columns().find((c: any) => c.key === key)\n const isNum = col?.type === 'number' || (r.length > 0 && typeof r[0]?.[key] === 'number')\n return [...r].sort((a: any, b: any) => {\n const va = a[key], vb = b[key]\n if (va == null && vb == null) return 0\n if (va == null) return 1\n if (vb == null) return -1\n let cmp: number\n if (isNum) {\n cmp = (Number(va) || 0) - (Number(vb) || 0)\n } else {\n cmp = String(va).localeCompare(String(vb), 'fr', { sensitivity: 'base' })\n }\n return dir === 'desc' ? -cmp : cmp\n })\n })\n\n const sortIndicator = (key: string) => {\n if (sortKey() !== key) return '\\u2195'\n return sortDir() === 'asc' ? '\\u2191' : '\\u2193'\n }\n\n // ─── Client-side search filter (v4.3.3) ─────────────────────\n const [searchQuery, setSearchQuery] = createSignal('')\n const [debouncedQuery, setDebouncedQuery] = createSignal('')\n let searchTimer: ReturnType<typeof setTimeout> | null = null\n\n const isSearchable = () => tableParams.searchable === true || (tableParams.searchable !== false && allRows().length > 10)\n const searchPlaceholder = () => tableParams.searchPlaceholder || 'Rechercher dans le tableau...'\n\n const handleSearch = (value: string) => {\n setSearchQuery(value)\n if (searchTimer) clearTimeout(searchTimer)\n searchTimer = setTimeout(() => {\n setDebouncedQuery(value)\n setClientPage(0)\n }, 200)\n }\n\n /** Normalize string for accent-insensitive matching */\n const normalize = (s: string) => s.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '').toLowerCase()\n\n const filteredRows = createMemo(() => {\n const q = normalize(debouncedQuery())\n if (!q) return sortedRows()\n const cols = columns()\n return sortedRows().filter((row: any) =>\n cols.some((col: any) => {\n const val = row[col.key]\n if (val == null) return false\n return normalize(String(val)).includes(q)\n })\n )\n })\n\n // ─── Client-side pagination (v4.0.4, context-aware v4.3.4, selector v4.3.7) ─────\n const isExpanded = useExpanded()\n const defaultPageSize = () => tableParams.pageSize ?? 25\n const chatDefault = () => tableParams.chatPageSize ?? Math.min(10, defaultPageSize())\n const [userPageSize, setUserPageSize] = createSignal<number | null>(null) // null = use default\n const clientPageSize = () => {\n const ups = userPageSize()\n if (ups !== null) return ups // user chose a size\n return isExpanded() ? defaultPageSize() : chatDefault()\n }\n const showAll = () => userPageSize() === 0\n const hasServerPagination = () => !!tableParams.pagination\n const needsClientPagination = () =>\n !hasServerPagination() && !showAll() && clientPageSize() > 0 && filteredRows().length > clientPageSize()\n const [clientPage, setClientPage] = createSignal(tableParams.initialPage ?? 0)\n const clientTotalPages = () => needsClientPagination() ? Math.ceil(filteredRows().length / clientPageSize()) : 1\n const clientVisibleRows = createMemo(() => {\n if (showAll() || !needsClientPagination()) return filteredRows()\n const start = clientPage() * clientPageSize()\n return filteredRows().slice(start, start + clientPageSize())\n })\n const clientRangeStart = () => needsClientPagination() ? clientPage() * clientPageSize() + 1 : 1\n const clientRangeEnd = () => needsClientPagination()\n ? Math.min((clientPage() + 1) * clientPageSize(), filteredRows().length)\n : filteredRows().length\n\n // Page size options for selector (fullscreen)\n const pageSizeOptions = () => {\n const total = filteredRows().length\n const opts: Array<{ value: number; label: string }> = []\n for (const n of [10, 30, 60, 100]) {\n if (n < total) opts.push({ value: n, label: String(n) })\n }\n opts.push({ value: 0, label: 'All' })\n return opts\n }\n\n const handlePageSizeChange = (val: number) => {\n setUserPageSize(val === 0 ? 0 : val)\n setClientPage(0)\n }\n\n // ─── Virtualization ──────────────────────────────────────\n const [virtualizer, setVirtualizer] = createSignal<any>(null)\n const [isVirtualizing, setIsVirtualizing] = createSignal(false)\n\n // Disable virtualization when client pagination is active (they conflict)\n const shouldVirtualize = createMemo(() => {\n if (needsClientPagination()) return false // pagination handles slicing\n const opts = tableParams.virtualize\n if (opts === false) return false\n if (opts === true) return true\n if (typeof opts === 'object') {\n if (opts.enabled !== undefined) return opts.enabled\n const threshold = opts.threshold ?? 100\n return (tableParams.rows?.length ?? 0) > threshold\n }\n return (tableParams.rows?.length ?? 0) > 100\n })\n\n // Get virtualization options\n const virtualizeOpts = createMemo((): TableVirtualizeOptions => {\n const opts = tableParams.virtualize\n if (typeof opts === 'object') return opts\n return {}\n })\n\n // Initialize virtualizer when needed\n createEffect(async () => {\n if (isServer || !shouldVirtualize()) {\n setIsVirtualizing(false)\n return\n }\n\n try {\n const { createVirtualizer } = await import('@tanstack/solid-virtual')\n const opts = virtualizeOpts()\n const rowHeight = opts.rowHeight ?? 48\n const overscan = opts.overscan ?? 5\n\n const v = createVirtualizer({\n get count() { return tableParams.rows?.length ?? 0 },\n getScrollElement: () => scrollContainerRef ?? null,\n estimateSize: () => rowHeight,\n overscan,\n })\n\n setVirtualizer(v)\n setIsVirtualizing(true)\n } catch (e) {\n console.warn('Failed to load @tanstack/solid-virtual, falling back to regular table', e)\n setIsVirtualizing(false)\n }\n })\n\n // Cell value extraction helper\n const getCellValue = (row: any, key: string): string => {\n const value = row[key]\n if (value === null || value === undefined) return ''\n if (typeof value === 'object') return value.name || value.label || JSON.stringify(value)\n return String(value)\n }\n\n // Generate copyable text from table data (TSV format for spreadsheet compatibility)\n const getTableText = () => {\n const columns = tableParams.columns || []\n const rows = tableParams.rows || []\n const header = columns.map((c: any) => c.label).join('\\t')\n const dataRows = rows.map((row: any) =>\n columns.map((c: any) => getCellValue(row, c.key)).join('\\t')\n ).join('\\n')\n return `${header}\\n${dataRows}`\n }\n\n // CSV generation (RFC 4180 compliant)\n const getTableCSV = () => {\n const columns = tableParams.columns || []\n const rows = tableParams.rows || []\n const escapeCSV = (val: string) => {\n if (val.includes(',') || val.includes('\"') || val.includes('\\n')) {\n return `\"${val.replace(/\"/g, '\"\"')}\"`\n }\n return val\n }\n const header = columns.map((c: any) => escapeCSV(c.label)).join(',')\n const dataRows = rows.map((row: any) =>\n columns.map((c: any) => escapeCSV(getCellValue(row, c.key))).join(',')\n ).join('\\n')\n return `${header}\\n${dataRows}`\n }\n\n // JSON generation\n const getTableJSON = () => {\n const columns = tableParams.columns || []\n const rows = tableParams.rows || []\n return JSON.stringify({ columns: columns.map((c: any) => ({ key: c.key, label: c.label })), rows }, null, 2)\n }\n\n // Download helper\n const downloadFile = (content: string, filename: string, mimeType: string) => {\n const blob = new Blob([content], { type: mimeType })\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = filename\n a.click()\n URL.revokeObjectURL(url)\n }\n\n // Export config\n const exportable = tableParams.exportable\n const exportFormats = typeof exportable === 'object' && exportable?.formats\n ? exportable.formats\n : ['csv', 'json']\n const exportFilename = (typeof exportable === 'object' && exportable?.filename) || `table-${Math.random().toString(36).slice(2, 9)}`\n\n // Export dropdown state\n const [showExportMenu, setShowExportMenu] = createSignal(false)\n\n const handleExport = (format: string) => {\n setShowExportMenu(false)\n switch (format) {\n case 'tsv':\n navigator.clipboard.writeText(getTableText())\n break\n case 'csv':\n downloadFile(getTableCSV(), `${exportFilename}.csv`, 'text/csv')\n break\n case 'json':\n downloadFile(getTableJSON(), `${exportFilename}.json`, 'application/json')\n break\n }\n }\n\n const tableId = `table-${Math.random().toString(36).slice(2, 9)}`\n\n // Standard table body (non-virtualized) — uses client pagination when active\n const StandardTableBody = () => (\n <tbody class=\"bg-white dark:bg-gray-800 divide-y divide-gray-200 dark:divide-gray-700\">\n <For each={clientVisibleRows().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 innerHTML={highlightQuery(renderCellValue(row[column.key], citationCtx), debouncedQuery())} />\n </td>\n )}\n </For>\n </tr>\n )}\n </For>\n </tbody>\n )\n\n // Virtualized table body\n const VirtualizedTableBody = () => {\n const v = virtualizer()\n if (!v) return null\n\n const items = v.getVirtualItems()\n const totalSize = v.getTotalSize()\n const opts = virtualizeOpts()\n const rowHeight = opts.rowHeight ?? 48\n\n return (\n <tbody\n class=\"bg-white dark:bg-gray-800 relative\"\n style={{ height: `${totalSize}px` }}\n >\n <For each={items}>\n {(virtualRow: any) => {\n const row = tableParams.rows[virtualRow.index]\n return (\n <tr\n class={`hover:bg-gray-50 dark:hover:bg-gray-700/50 transition-colors absolute left-0 right-0 ${virtualRow.index % 2 === 0 ? 'bg-white dark:bg-gray-800' : 'bg-gray-50/30 dark:bg-gray-800/50'}`}\n style={{\n height: `${rowHeight}px`,\n transform: `translateY(${virtualRow.start}px)`\n }}\n >\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 innerHTML={highlightQuery(renderCellValue(row[column.key], citationCtx), debouncedQuery())} />\n </td>\n )}\n </For>\n </tr>\n )\n }}\n </For>\n </tbody>\n )\n }\n\n return (\n <ExpandableWrapper title={tableParams.title || 'Table'} copyData={getTableCSV()} copyLabel=\"Copy table (CSV)\">\n <div class={`relative w-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden group ${isExpanded() ? '' : 'h-full'}`}>\n <Show when={exportable} fallback={<CopyButton getText={getTableCSV} title=\"Copy table (CSV)\" position=\"top-right\" />}>\n <div class=\"absolute right-10 top-2 z-10\">\n <button\n onClick={() => setShowExportMenu(!showExportMenu())}\n class=\"opacity-60 hover:opacity-100 px-2 py-1 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-600 rounded-full hover:bg-gray-100 dark:hover:bg-gray-700 transition-all shadow-sm\"\n title=\"Export table\"\n aria-label=\"Export table\"\n >\n <svg class=\"w-3 h-3 text-gray-500 dark:text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\n </svg>\n </button>\n <Show when={showExportMenu()}>\n <div class=\"absolute right-0 mt-1 w-36 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-600 rounded-lg shadow-lg py-1 text-sm\">\n <Show when={(exportFormats as string[]).includes('tsv')}>\n <button onClick={() => handleExport('tsv')} class=\"w-full text-left px-3 py-1.5 hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300\">Copy TSV</button>\n </Show>\n <Show when={(exportFormats as string[]).includes('csv')}>\n <button onClick={() => handleExport('csv')} class=\"w-full text-left px-3 py-1.5 hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300\">Download CSV</button>\n </Show>\n <Show when={(exportFormats as string[]).includes('json')}>\n <button onClick={() => handleExport('json')} class=\"w-full text-left px-3 py-1.5 hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300\">Download JSON</button>\n </Show>\n </div>\n </Show>\n </div>\n </Show>\n <div class=\"p-4\">\n <Show when={tableParams.title}>\n <h3 id={`${tableId}-title`} class=\"text-sm font-semibold text-gray-900 dark:text-white mb-3\">\n {tableParams.title}\n <Show when={isVirtualizing()}>\n <span class=\"ml-2 text-xs font-normal text-gray-400\">(virtualized: {tableParams.rows?.length} rows)</span>\n </Show>\n </h3>\n </Show>\n\n {/* Search input (v4.3.3) */}\n <Show when={isSearchable()}>\n <div class=\"relative mb-3\">\n <span class=\"absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 pointer-events-none text-sm\">{'\\uD83D\\uDD0D'}</span>\n <input\n type=\"text\"\n value={searchQuery()}\n onInput={(e) => handleSearch(e.currentTarget.value)}\n placeholder={searchPlaceholder()}\n class=\"w-full max-w-xs min-w-[200px] pl-8 pr-8 py-1.5 text-sm border border-gray-200 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-400 focus:border-blue-400 focus:ring-1 focus:ring-blue-400 outline-none\"\n />\n <Show when={searchQuery()}>\n <button\n type=\"button\"\n onClick={() => { handleSearch(''); setSearchQuery(''); setDebouncedQuery('') }}\n class=\"absolute right-2 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 text-sm\"\n aria-label=\"Clear search\"\n >&times;</button>\n </Show>\n </div>\n <Show when={debouncedQuery() && filteredRows().length !== sortedRows().length}>\n <p class=\"text-xs text-gray-500 dark:text-gray-400 mb-2\">\n {filteredRows().length} result{filteredRows().length !== 1 ? 's' : ''} on {sortedRows().length}\n </p>\n </Show>\n </Show>\n\n <div\n ref={scrollContainerRef}\n class=\"overflow-x-auto\"\n style={\n isVirtualizing()\n ? { 'max-height': '500px', 'overflow-y': 'auto' }\n : !isExpanded() && clientVisibleRows().length > 8\n ? { 'max-height': '400px', 'overflow-y': 'auto' }\n : {}\n }\n role=\"region\"\n aria-label={tableParams.title || 'Data table'}\n tabindex=\"0\"\n >\n <table\n class=\"min-w-full divide-y divide-gray-200 dark:divide-gray-700 border-separate border-spacing-0\"\n aria-labelledby={tableParams.title ? `${tableId}-title` : undefined}\n >\n <thead class=\"bg-gray-100 dark:bg-gray-900 sticky top-0 z-10\">\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 bg-gray-100 dark:bg-gray-900 cursor-pointer select-none hover:bg-gray-200 dark:hover:bg-gray-800 transition-colors\"\n style={column.width ? { width: column.width } : {}}\n on:click={() => handleSort(column.key)}\n title={`Sort by ${column.label}`}\n >\n <span class=\"inline-flex items-center gap-1\">\n {column.label}\n <span\n class=\"text-[10px] leading-none\"\n classList={{\n 'opacity-30': sortKey() !== column.key,\n 'opacity-100 text-blue-600 dark:text-blue-400': sortKey() === column.key,\n }}\n >\n {sortIndicator(column.key)}\n </span>\n </span>\n </th>\n )}\n </For>\n </tr>\n </thead>\n <Show when={isVirtualizing()} fallback={<StandardTableBody />}>\n <VirtualizedTableBody />\n </Show>\n </table>\n </div>\n\n {/* Server-side pagination (legacy) */}\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\n {/* Client-side pagination (v4.3.7) */}\n <Show when={needsClientPagination()}>\n <div class=\"mt-3 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400\">\n <span>\n {clientRangeStart()}&ndash;{clientRangeEnd()} / {filteredRows().length.toLocaleString('fr-FR')}\n </span>\n <div class=\"flex items-center gap-2\">\n <button\n class=\"px-2 py-1 rounded hover:bg-gray-100 dark:hover:bg-gray-700 disabled:opacity-40 disabled:cursor-not-allowed transition-colors\"\n disabled={clientPage() === 0}\n onClick={() => setClientPage(p => p - 1)}\n >\n &#x25C0;\n </button>\n <span>{clientPage() + 1} / {clientTotalPages()}</span>\n <button\n class=\"px-2 py-1 rounded hover:bg-gray-100 dark:hover:bg-gray-700 disabled:opacity-40 disabled:cursor-not-allowed transition-colors\"\n disabled={clientPage() >= clientTotalPages() - 1}\n onClick={() => setClientPage(p => p + 1)}\n >\n &#x25B6;\n </button>\n {/* Page size selector — fullscreen only */}\n <Show when={isExpanded() && filteredRows().length > 10}>\n <select\n class=\"ml-2 px-1 py-0.5 text-xs border border-gray-200 dark:border-gray-600 rounded bg-white dark:bg-gray-700 text-gray-700 dark:text-gray-300\"\n value={clientPageSize()}\n onChange={(e) => handlePageSizeChange(Number(e.currentTarget.value))}\n >\n <For each={pageSizeOptions()}>\n {(opt) => <option value={opt.value}>{opt.label}</option>}\n </For>\n </select>\n <span class=\"text-gray-400\">/ page</span>\n </Show>\n </div>\n </div>\n </Show>\n </div>\n </div>\n </ExpandableWrapper>\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 // Generate copyable text for metric\n const getMetricText = () => {\n const title = metricParams.title || metricParams.label || ''\n const value = metricParams.value\n const unit = metricParams.unit || ''\n return `${title}: ${value}${unit ? ' ' + unit : ''}`\n }\n\n return (\n <div class=\"relative w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 p-4 group\">\n <CopyButton getText={getMetricText} title=\"Copy metric\" position=\"top-right\" />\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 * Extract image data from markdown image link format\n * Pattern: [![alt](image-url)](link-url)\\n*Photo by Author*\n */\nfunction extractImageFromMarkdown(content: string): { alt: string; imageUrl: string; linkUrl: string; credit: string } | null {\n // Pattern: [![alt text](image-url)](link-url) followed by optional credit line\n const imagePattern = /\\[!\\[([^\\]]*)\\]\\(([^)]+)\\)\\]\\(([^)]+)\\)\\s*\\*([^*]+)\\*/\n const match = content.match(imagePattern)\n\n if (match) {\n return {\n alt: match[1] || 'Image',\n imageUrl: match[2],\n linkUrl: match[3],\n credit: match[4].trim()\n }\n }\n\n return null\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 // Check if this is an image markdown that should be rendered as image component\n const imageData = createMemo(() => {\n if (textParams.markdown && textParams.content) {\n return extractImageFromMarkdown(textParams.content)\n }\n return null\n })\n\n // Convert markdown to HTML if markdown flag is true (and not an image component)\n const htmlContent = createMemo(() => {\n if (textParams.markdown && !imageData()) {\n return marked.parse(textParams.content, { async: false }) as string\n }\n return textParams.content\n })\n\n // Get plain text content for copying (strip markdown/HTML)\n const getTextContent = () => {\n return textParams.content || ''\n }\n\n // Render as image component if we extracted image data\n return (\n <Show\n when={imageData()}\n fallback={\n <div class=\"relative w-full h-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 p-4 group\">\n <CopyButton getText={getTextContent} title=\"Copy text\" position=\"top-right\" />\n <div\n class={`prose prose-sm dark:prose-invert max-w-none ${textParams.className || ''}`}\n innerHTML={htmlContent()}\n />\n </div>\n }\n >\n {(data) => (\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={data().linkUrl} target=\"_blank\" rel=\"noopener noreferrer\" class=\"cursor-zoom-in\">\n <img\n src={data().imageUrl}\n alt={data().alt}\n class=\"max-w-full max-h-[400px] object-contain rounded shadow-sm hover:opacity-90 transition-opacity\"\n loading=\"lazy\"\n />\n </a>\n </div>\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 italic\">{data().credit}</p>\n </div>\n </div>\n )}\n </Show>\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={getIframeSandbox(params.url)}\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\n return (\n <figure 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 ${params.className || ''}`}>\n <div class=\"flex-1 flex items-center justify-center p-4 bg-gray-50 dark:bg-gray-900 min-h-[200px]\">\n <a\n href={params.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"cursor-zoom-in focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 rounded\"\n aria-label={`View full size: ${params.alt || 'image'}`}\n >\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 <figcaption 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 </figcaption>\n </Show>\n </figure>\n )\n}\n\n/**\n * Render a link component\n */\nfunction LinkRenderer(props: { component: UIComponent }) {\n const params = props.component.params as any\n\n return (\n <a\n href={params.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label={`${params.label || 'Link'}: ${params.description || params.url} (opens in new tab)`}\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 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 ${params.className || ''}`}\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\" aria-hidden=\"true\">\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 aria-hidden=\"true\"\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 errorMode?: ValidationErrorMode\n}) {\n // Performance marks — visible in Chrome DevTools \"Performance\" panel under\n // user timings. Always-on, SSR-safe (see utils/perf.ts).\n markRenderStart(props.component.id)\n\n // Telemetry sink (B.5 — v5.6.0). null when no MCPUITelemetryProvider is\n // mounted above; null-checked at every dispatch site so apps that don't\n // opt in see zero behavior change.\n const telemetry = useTelemetry()\n\n onMount(() => {\n markRenderEnd(props.component.id)\n if (telemetry) {\n const ts = Date.now()\n telemetry.dispatch({\n type: 'component:mounted',\n id: props.component.id,\n componentType: props.component.type,\n ts,\n })\n // Read the perf measure we just emitted to surface durationMs without\n // double-measuring. The measure may be missing if `performance` is\n // unavailable (SSR) — skip rendered event in that case.\n if (typeof performance !== 'undefined' && typeof performance.getEntriesByName === 'function') {\n const entries = performance.getEntriesByName(`${PERF_PREFIX}${props.component.id}:render`, 'measure')\n const last = entries[entries.length - 1]\n if (last) {\n telemetry.dispatch({\n type: 'component:rendered',\n id: props.component.id,\n componentType: props.component.type,\n durationMs: last.duration,\n ts,\n })\n }\n }\n }\n })\n\n onCleanup(() => {\n if (telemetry) {\n telemetry.dispatch({\n type: 'component:unmounted',\n id: props.component.id,\n componentType: props.component.type,\n ts: Date.now(),\n })\n }\n })\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 // Privacy: only counts + first error code, NO error messages or paths\n // (which could leak payload data — §M.6.2 hard rule).\n if (telemetry) {\n telemetry.dispatch({\n type: 'validation:failed',\n id: props.component.id,\n componentType: props.component.type,\n errorCount: validation.errors?.length ?? 0,\n firstErrorCode: validation.errors?.[0]?.code ?? null,\n ts: Date.now(),\n })\n }\n\n const mode: ValidationErrorMode = props.errorMode ?? 'block'\n const firstError = validation.errors?.[0]?.message || 'Unknown validation error'\n\n if (mode === 'silent') {\n return null\n }\n\n if (mode === 'inline-warn') {\n return (\n <div\n class=\"inline-flex items-center gap-1.5 px-2 py-1 rounded-md bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 text-xs text-yellow-800 dark:text-yellow-200\"\n role=\"alert\"\n aria-label=\"Component validation warning\"\n title={firstError}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"w-3.5 h-3.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 aria-hidden=\"true\"\n >\n <path d=\"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n <span>Invalid {props.component.type}</span>\n </div>\n )\n }\n\n // mode === 'block' (default, pre-v5.4.0 behavior)\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 {firstError}\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 <Show when={props.component.type === 'grid'}>\n <GridRenderer component={props.component} onError={props.onError} />\n </Show>\n <Show when={props.component.type === 'carousel'}>\n <CarouselRenderer items={(props.component.params as any)?.items || []} height={(props.component.params as any)?.height} />\n </Show>\n <Show when={props.component.type === 'artifact'}>\n <ArtifactRenderer params={props.component.params as any} />\n </Show>\n <Show when={props.component.type === 'form'}>\n <FormRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'modal'}>\n <ModalRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'action-group'}>\n <ActionGroupRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'image-gallery'}>\n <ImageGalleryRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'video'}>\n <VideoRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'code'}>\n <CodeBlockRenderer component={props.component} />\n </Show>\n <Show when={props.component.type === 'map'}>\n <MapRenderer component={props.component} />\n </Show>\n </GenerativeUIErrorBoundary>\n )\n}\n\n/**\n * Render an action component (button or link)\n * Refactored in Phase 5.0 to use useAction hook for Context-based execution\n */\nfunction ActionRenderer(props: { component: UIComponent }) {\n const params = props.component.params as any\n const { execute, isExecuting } = useAction()\n const telemetry = useTelemetry()\n\n // Telemetry: action:dispatched on click (B.5 — v5.6.0). Fires for every\n // click attempt (tool-call or link), regardless of execute success.\n // Privacy: actionName is `toolName` (tool-call) or the action kind\n // (link/submit) — NO `params.params` payload, NO URL.\n function dispatchTelemetry() {\n if (!telemetry) return\n const actionName: string = params.toolName ?? params.action ?? 'unknown'\n telemetry.dispatch({\n type: 'action:dispatched',\n id: props.component.id,\n componentType: 'action',\n actionName,\n ts: Date.now(),\n })\n }\n\n // Handle click to execute tool via Context (falls back to CustomEvent if no provider)\n const handleClick = async (e: MouseEvent) => {\n dispatchTelemetry()\n if (params.action === 'tool-call' && params.toolName) {\n e.preventDefault()\n await execute(params.toolName, params.params || {})\n }\n }\n\n // Determine if button should be disabled (explicit disable or currently executing)\n const isDisabled = () => params.disabled || (params.action === 'tool-call' && isExecuting())\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 aria-label={params.ariaLabel || params.label}\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' :\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 ${params.className || ''}`}\n onClick={handleClick}\n >\n <Show when={params.icon}>\n <span aria-hidden=\"true\">{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={isDisabled()}\n aria-busy={isExecuting() && params.action === 'tool-call'}\n aria-label={params.ariaLabel || params.label}\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 ${isDisabled() ? '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 ${params.className || ''}`}\n onClick={handleClick}\n >\n <Show when={isExecuting() && params.action === 'tool-call'}>\n <span class=\"animate-spin h-4 w-4 border-2 border-current border-t-transparent rounded-full\" aria-hidden=\"true\" />\n </Show>\n <Show when={params.icon && !(isExecuting() && params.action === 'tool-call')}>\n <span aria-hidden=\"true\">{params.icon}</span>\n </Show>\n {params.label}\n </button>\n )\n}\n\n/**\n * Error card renderer for tool execution errors\n * Handles {error: true, message: \"...\", tool: \"...\", suggestions: [...]} format\n */\nfunction ErrorCardRenderer(props: { error: any }) {\n const getErrorText = () => {\n return `Error in ${props.error.tool || 'unknown tool'}: ${props.error.message || 'Unknown error'}`\n }\n\n return (\n <div class=\"relative w-full bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg p-4 group\">\n <CopyButton getText={getErrorText} title=\"Copy error details\" position=\"top-right\" />\n <div class=\"flex items-start gap-3\">\n <div class=\"p-2 bg-red-100 dark:bg-red-900/40 rounded-full shrink-0\">\n <svg class=\"w-5 h-5 text-red-600 dark:text-red-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" 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 </svg>\n </div>\n <div class=\"flex-1 min-w-0\">\n <h4 class=\"text-sm font-semibold text-red-800 dark:text-red-200\">\n Tool Error: {props.error.tool || 'Unknown'}\n </h4>\n <p class=\"text-sm text-red-700 dark:text-red-300 mt-1\">\n {props.error.message || 'An error occurred during tool execution'}\n </p>\n <Show when={props.error.type}>\n <p class=\"text-xs text-red-600 dark:text-red-400 mt-1\">\n Type: {props.error.type}\n </p>\n </Show>\n <Show when={props.error.suggestions?.length}>\n <div class=\"mt-3\">\n <p class=\"text-xs font-medium text-red-700 dark:text-red-300\">Suggestions:</p>\n <ul class=\"mt-1 text-xs text-red-600 dark:text-red-400 list-disc list-inside\">\n <For each={props.error.suggestions}>\n {(suggestion: string) => <li>{suggestion}</li>}\n </For>\n </ul>\n </div>\n </Show>\n <Show when={props.error.timestamp}>\n <p class=\"text-xs text-red-500 dark:text-red-500 mt-2\">\n {new Date(props.error.timestamp).toLocaleString()}\n </p>\n </Show>\n </div>\n </div>\n </div>\n )\n}\n\n/**\n * Check if content is an error response from MCP tool\n */\nfunction isErrorResponse(content: any): boolean {\n return content && typeof content === 'object' && content.error === true\n}\n\n/**\n * Check if content is a UIResource (raw HTML or URI-based resource)\n * UIResource has: { uri, content: { type: 'rawHtml', htmlString }, encoding, metadata }\n */\nfunction isUIResource(content: any): boolean {\n return content && typeof content === 'object' && (\n content.uri?.startsWith('ui://') ||\n content.content?.type === 'rawHtml' ||\n content.content?.htmlString\n )\n}\n\n/**\n * Render UIResource (raw HTML) content\n * Handles HTML resources returned by tools like ui_show_dashboard, ui_show_health\n */\nfunction UIResourceHtmlRenderer(props: { resource: any }) {\n const htmlContent = () => {\n if (props.resource.content?.htmlString) {\n return DOMPurify.sanitize(props.resource.content.htmlString)\n }\n return ''\n }\n\n const resourceTitle = () => {\n return props.resource.metadata?.title || props.resource.uri?.replace('ui://deposium/', '') || 'Resource'\n }\n\n return (\n <div class=\"w-full bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 overflow-hidden\">\n <Show when={props.resource.metadata?.title || props.resource.uri}>\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 capitalize\">\n {resourceTitle()}\n </h3>\n </div>\n </Show>\n <div\n class=\"p-4 prose prose-sm dark:prose-invert max-w-none\"\n innerHTML={htmlContent()}\n />\n </div>\n )\n}\n\n/**\n * Main UIResourceRenderer component\n */\nexport const UIResourceRenderer: Component<UIResourceRendererProps> = (props) => {\n // Handle error responses early (Sprint 9b fix)\n if (isErrorResponse(props.content)) {\n return <ErrorCardRenderer error={props.content} />\n }\n\n // Handle UIResource (raw HTML) - skip grid validation (Sprint 9c fix)\n if (isUIResource(props.content)) {\n return <UIResourceHtmlRenderer resource={props.content} />\n }\n\n const layout = () => {\n // Check if content is a UIComponent (non-composite) vs UILayout (composite)\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 // Convert grid styles to CSS string\n const gridContainerStyle = () => {\n const layoutData = layout()\n return `grid-template-columns: repeat(${layoutData.grid.columns}, 1fr); gap: ${layoutData.grid.gap}`\n }\n\n // Convert component grid styles to CSS string\n const getGridStyleString = (component: UIComponent) => {\n // Defensive check for position field - default to full width\n if (!component.position) {\n return 'grid-column: 1 / span 12; grid-row: auto'\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 // Auto-footer logic (Phase 5.0)\n // Automatically inject footer when metadata is present and no explicit footer exists\n const shouldShowAutoFooter = createMemo(() => {\n const layoutData = layout()\n\n // Don't show if explicitly hidden\n if (layoutData.metadata?.hideFooter) {\n return false\n }\n\n // Don't show if no metadata (nothing to display)\n if (!layoutData.metadata) {\n return false\n }\n\n // Don't show if explicit footer component exists\n const hasExplicitFooter = layoutData.components.some((c) => c.type === 'footer')\n if (hasExplicitFooter) {\n return false\n }\n\n // Show auto-footer if metadata has relevant info\n return !!(\n layoutData.metadata.executionTime ||\n layoutData.metadata.sourceCount ||\n layoutData.metadata.llmModel\n )\n })\n\n // Build auto-footer params from metadata\n const autoFooterParams = createMemo(() => {\n const layoutData = layout()\n return {\n poweredBy: 'Deposium',\n executionTime: layoutData.metadata?.executionTime,\n model: layoutData.metadata?.llmModel,\n sourceCount: layoutData.metadata?.sourceCount,\n }\n })\n\n const layoutData = layout()\n\n // Wrapper function for RenderContext (breaks circular dependency)\n const renderComponent = (component: UIComponent, onError?: (error: RendererError) => void) => (\n <ComponentRenderer component={component} onError={onError} errorMode={props.errorMode} />\n )\n\n return (\n <RenderProvider renderComponent={renderComponent}>\n <div class={`w-full ${props.class || ''}`}>\n <div class=\"grid gap-4\" style={gridContainerStyle()}>\n <For each={layoutData.components}>\n {(component) => (\n <div style={getGridStyleString(component)}>\n <ComponentRenderer component={component} onError={props.onError} errorMode={props.errorMode} />\n </div>\n )}\n </For>\n </div>\n\n {/* Auto-injected footer (Phase 5.0) */}\n <Show when={shouldShowAutoFooter()}>\n <FooterRenderer params={autoFooterParams()} />\n </Show>\n </div>\n </RenderProvider>\n )\n}\n"],"names":["CopyButton","props","copied","setCopied","createSignal","handleCopy","navigator","clipboard","writeText","getText","setTimeout","err","console","error","positionClasses","position","_el$","_$getNextElement","_tmpl$2","$$click","_$insert","_$createComponent","Show","when","fallback","_tmpl$3","children","_tmpl$","_$effect","_p$","_v$","_v$2","title","e","_$className","t","_$setAttribute","undefined","_$runHydrationEvents","ChartRenderer","useNative","setUseNative","iframeUrl","setIframeUrl","isLoading","setIsLoading","setError","params","component","rendererPref","renderer","data","datasets","_tmpl$4","createEffect","pref","buildIframeUrl","available","isChartJSAvailable","chartParams","chartConfig","type","options","responsive","maintainAspectRatio","configStr","encodeURIComponent","JSON","stringify","url","_el$5","_tmpl$9","_el$15","firstChild","_el$16","_co$2","_$getNextMarker","nextSibling","_el$17","_el$18","_co$3","_el$19","_el$20","_co$4","_tmpl$5","_el$7","_tmpl$6","_el$8","_el$9","_el$0","_$memo","_el$1","_tmpl$8","_el$13","_el$14","_co$","_el$11","_el$12","_el$10","_tmpl$7","addEventListener","onError","message","componentId","id","_v$3","_v$4","_v$5","a","ChartJSRenderer","highlightQuery","html","query","q","trim","escaped","replace","regex","RegExp","_m","tag","text","defaultCitationChip","pageNum","fileName","verified","safeDocName","label","join","transformCellCitations","ctx","out","idStr","parseInt","mapping","map","String","render","page","file","Object","keys","length","renderCellValue","value","citationCtx","name","sanitizedLabel","DOMPurify","sanitize","sanitizedUrl","strValue","toLowerCase","markdownLinkRegex","test","htmlValue","ADD_ATTR","hasMarkdown","parsed","marked","parse","async","ALLOWED_TAGS","ALLOWED_ATTR","hasHtml","TableRenderer","tableParams","scrollContainerRef","citationMap","citationRender","allRows","rows","columns","sortKey","setSortKey","sortDir","setSortDir","handleSort","key","setClientPage","sortedRows","createMemo","r","dir","col","find","c","isNum","sort","b","va","vb","cmp","Number","localeCompare","sensitivity","sortIndicator","searchQuery","setSearchQuery","debouncedQuery","setDebouncedQuery","searchTimer","isSearchable","searchable","searchPlaceholder","handleSearch","normalize","s","filteredRows","cols","filter","row","some","val","includes","isExpanded","useExpanded","defaultPageSize","pageSize","chatDefault","chatPageSize","Math","min","userPageSize","setUserPageSize","clientPageSize","ups","showAll","hasServerPagination","pagination","needsClientPagination","clientPage","initialPage","clientTotalPages","ceil","clientVisibleRows","start","slice","clientRangeStart","clientRangeEnd","pageSizeOptions","total","opts","n","push","handlePageSizeChange","virtualizer","setVirtualizer","isVirtualizing","setIsVirtualizing","shouldVirtualize","virtualize","enabled","threshold","virtualizeOpts","isServer","createVirtualizer","rowHeight","overscan","v","count","getScrollElement","estimateSize","warn","getCellValue","getTableText","header","dataRows","getTableCSV","escapeCSV","getTableJSON","downloadFile","content","filename","mimeType","blob","Blob","URL","createObjectURL","document","createElement","href","download","click","revokeObjectURL","exportable","exportFormats","formats","exportFilename","random","toString","showExportMenu","setShowExportMenu","handleExport","format","tableId","StandardTableBody","_el$21","_tmpl$0","For","each","DEFAULT_RESOURCE_LIMITS","maxTableRows","i","_el$22","_tmpl$1","column","_el$23","_tmpl$10","_el$24","_$setProperty","VirtualizedTableBody","items","getVirtualItems","totalSize","getTotalSize","_el$25","_tmpl$11","_$setStyleProperty","virtualRow","index","_el$26","_el$27","_el$28","_v$6","_v$7","ExpandableWrapper","copyData","copyLabel","_el$29","_tmpl$26","_el$120","_el$121","_co$28","_el$44","_el$112","_el$113","_co$24","_el$114","_el$115","_co$25","_el$70","_el$71","_el$72","_el$73","_el$74","_el$75","_co$14","_el$116","_el$117","_co$26","_el$118","_el$119","_co$27","_el$30","_tmpl$16","_el$31","_el$42","_el$43","_co$8","_el$32","_tmpl$15","_el$36","_el$37","_co$5","_el$38","_el$39","_co$6","_el$40","_el$41","_co$7","_el$33","_tmpl$12","_el$34","_tmpl$13","_el$35","_tmpl$14","_el$45","_tmpl$18","_el$51","_el$52","_co$0","_el$53","_el$54","_co$1","_el$46","_tmpl$17","_el$47","_el$49","_el$50","_co$9","_el$55","_tmpl$20","_el$56","_el$57","_el$59","_el$60","_co$10","$$input","currentTarget","_el$58","_tmpl$19","_el$61","_tmpl$21","_el$64","_el$65","_co$11","_el$62","_el$66","_el$67","_co$12","_el$63","_el$68","_el$69","_co$13","_ref$","_$use","_el$122","_tmpl$27","_el$123","_el$125","_el$126","_co$29","_el$124","_$addEventListener","_v$12","width","_v$13","_v$14","_$style","_$classList","_el$76","_tmpl$22","_el$77","_el$78","_el$83","_el$84","_co$15","_el$79","_el$85","_el$86","_co$16","_el$81","_el$87","_el$88","_co$17","currentPage","totalRows","_el$89","_tmpl$25","_el$90","_el$93","_el$94","_co$18","_el$91","_el$95","_el$96","_co$19","_el$92","_el$97","_el$98","_co$20","_el$99","_el$100","_el$101","_el$103","_el$104","_co$21","_el$102","_el$105","_el$106","_co$22","_el$107","_el$110","_el$111","_co$23","toLocaleString","p","_el$108","_tmpl$23","opt","_el$127","_tmpl$28","_tmpl$24","_v$8","_v$9","_v$0","_v$1","_v$10","_v$11","o","MetricRenderer","metricParams","getMetricText","unit","_el$128","_tmpl$32","_el$150","_el$151","_co$35","_el$129","_el$130","_el$131","_el$132","_el$133","_el$135","_el$136","_co$30","_el$146","_el$147","_co$33","_el$148","_el$149","_co$34","_el$134","_tmpl$29","trend","_el$137","_tmpl$30","_el$138","_el$141","_el$142","_co$31","_el$139","_el$143","_el$144","_co$32","_c$","direction","abs","subtitle","_el$145","_tmpl$31","extractImageFromMarkdown","imagePattern","match","alt","imageUrl","linkUrl","credit","TextRenderer","textParams","imageData","markdown","htmlContent","getTextContent","_el$152","_tmpl$33","_el$154","_el$155","_co$36","_el$153","_v$15","className","_v$16","_el$156","_tmpl$34","_el$157","_el$158","_el$159","_el$160","_el$161","_v$17","_v$18","_v$19","IframeRenderer","_el$162","_tmpl$36","_el$166","_el$167","_co$37","_el$165","_el$163","_tmpl$35","_el$164","_v$20","_v$21","_v$22","height","_v$23","getIframeSandbox","ImageRenderer","_el$168","_tmpl$38","_el$169","_el$170","_el$171","_el$174","_el$175","_co$38","caption","_el$172","_tmpl$37","_el$173","_v$24","_v$25","_v$26","_v$27","_v$28","LinkRenderer","_el$176","_tmpl$40","_el$177","_el$178","_el$179","_el$181","_el$182","_co$39","stopPropagation","description","_el$180","_tmpl$39","_v$29","_v$30","_v$31","ComponentRenderer","markRenderStart","telemetry","useTelemetry","onMount","markRenderEnd","ts","Date","now","dispatch","componentType","performance","getEntriesByName","entries","PERF_PREFIX","last","durationMs","duration","onCleanup","validation","validateComponent","valid","details","errors","errorCount","firstErrorCode","code","mode","errorMode","firstError","_el$183","_tmpl$41","_el$184","_el$185","_el$186","_el$187","_el$188","_co$40","_el$189","_tmpl$42","_el$190","_el$191","GenerativeUIErrorBoundary","allowRetry","ActionRenderer","GridRenderer","CarouselRenderer","ArtifactRenderer","FormRenderer","ModalRenderer","ActionGroupRenderer","ImageGalleryRenderer","VideoRenderer","CodeBlockRenderer","MapRenderer","execute","isExecuting","useAction","dispatchTelemetry","actionName","toolName","action","handleClick","preventDefault","isDisabled","disabled","_el$192","_tmpl$44","_el$194","_el$195","_co$41","_el$196","_el$197","_co$42","icon","_el$193","_tmpl$43","_v$32","_v$33","_v$34","ariaLabel","_v$35","variant","_el$198","_tmpl$46","_el$201","_el$202","_co$43","_el$203","_el$204","_co$44","_el$205","_el$206","_co$45","_tmpl$45","_el$200","_v$36","_v$37","_v$38","_v$39","_v$40","size","ErrorCardRenderer","getErrorText","tool","_el$207","_tmpl$50","_el$230","_el$231","_co$51","_el$208","_el$209","_el$210","_el$211","_el$212","_el$213","_el$214","_co$46","_el$215","_el$224","_el$225","_co$48","_el$226","_el$227","_co$49","_el$228","_el$229","_co$50","_el$216","_tmpl$47","_el$217","_el$218","_el$219","_co$47","suggestions","_el$220","_tmpl$48","_el$221","_el$222","suggestion","_el$232","_tmpl$51","timestamp","_el$223","_tmpl$49","isErrorResponse","isUIResource","uri","startsWith","htmlString","UIResourceHtmlRenderer","resource","resourceTitle","metadata","_el$233","_tmpl$53","_el$237","_el$238","_co$52","_el$236","_el$234","_tmpl$52","_el$235","UIResourceRenderer","layout","components","grid","gap","gridContainerStyle","layoutData","getGridStyleString","colStart","colSpan","rowStart","rowSpan","shouldShowAutoFooter","hideFooter","hasExplicitFooter","executionTime","sourceCount","llmModel","autoFooterParams","poweredBy","model","renderComponent","RenderProvider","_el$239","_tmpl$54","_el$240","_el$241","_el$242","_co$53","_el$243","_tmpl$55","_$p","FooterRenderer","_v$41","class","_v$42","_$delegateEvents"],"mappings":"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"}