@servicetitan/json-render-react 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/catalog/context/catalog-prompt.md +229 -0
- package/dist/catalog/context/schema.json +56 -0
- package/dist/catalog/core/catalog-prompt.md +104 -90
- package/dist/catalog/core/schema.json +0 -1
- package/dist/catalog/marketing/catalog-prompt.md +104 -90
- package/dist/catalog/marketing/schema.json +0 -1
- package/dist/context/catalog/catalog-def.d.ts +50 -0
- package/dist/context/catalog/context-card.catalog.d.ts +19 -0
- package/dist/context/catalog/context-card.d.ts +8 -0
- package/dist/context/catalog/context-data-table.catalog.d.ts +34 -0
- package/dist/context/catalog/context-data-table.css.d.ts +2 -0
- package/dist/context/catalog/context-data-table.d.ts +6 -0
- package/dist/context/catalog/context-file-list.catalog.d.ts +11 -0
- package/dist/context/catalog/context-file-list.css.d.ts +16 -0
- package/dist/context/catalog/context-file-list.d.ts +6 -0
- package/dist/context/catalog/context-list.catalog.d.ts +48 -0
- package/dist/context/catalog/context-list.css.d.ts +16 -0
- package/dist/context/catalog/context-list.d.ts +6 -0
- package/dist/context/catalog/context-metric-grid.catalog.d.ts +22 -0
- package/dist/context/catalog/context-metric-grid.css.d.ts +13 -0
- package/dist/context/catalog/context-metric-grid.d.ts +6 -0
- package/dist/context/catalog/context-note-list.catalog.d.ts +15 -0
- package/dist/context/catalog/context-note-list.d.ts +6 -0
- package/dist/context/catalog/context-overview.catalog.d.ts +8 -0
- package/dist/context/catalog/context-overview.css.d.ts +2 -0
- package/dist/context/catalog/context-overview.d.ts +6 -0
- package/dist/context/catalog/context-panel.catalog.d.ts +6 -0
- package/dist/context/catalog/context-panel.css.d.ts +1 -0
- package/dist/context/catalog/context-panel.d.ts +6 -0
- package/dist/context/catalog/context-tabular-list.catalog.d.ts +19 -0
- package/dist/context/catalog/context-tabular-list.css.d.ts +17 -0
- package/dist/context/catalog/context-tabular-list.d.ts +6 -0
- package/dist/context/catalog/index.d.ts +10 -0
- package/dist/context/catalog/schemas.d.ts +151 -0
- package/dist/context/components/collapsible-card.css.d.ts +41 -0
- package/dist/context/components/collapsible-card.d.ts +14 -0
- package/dist/context/components/context-ai-summary.css.d.ts +5 -0
- package/dist/context/components/context-ai-summary.d.ts +4 -0
- package/dist/context/components/context-chip-tone.d.ts +10 -0
- package/dist/context/components/context-note-list.css.d.ts +10 -0
- package/dist/context/components/context-render-error-boundary.d.ts +21 -0
- package/dist/context/constants.d.ts +6 -0
- package/dist/context/index.d.ts +4 -0
- package/dist/context/validate-context-spec-deep.d.ts +9 -0
- package/dist/context/validate-context-spec.d.ts +11 -0
- package/dist/core/catalog/alert.catalog.d.ts +2 -0
- package/dist/core/catalog/button.catalog.d.ts +3 -0
- package/dist/core/catalog/card.catalog.d.ts +2 -0
- package/dist/core/catalog/catalog-def.d.ts +33 -19
- package/dist/core/catalog/checkbox.catalog.d.ts +1 -0
- package/dist/core/catalog/chip.catalog.d.ts +1 -0
- package/dist/core/catalog/flex.catalog.d.ts +13 -0
- package/dist/core/catalog/grid.catalog.d.ts +4 -0
- package/dist/core/catalog/input.catalog.d.ts +1 -0
- package/dist/core/catalog/link.catalog.d.ts +2 -0
- package/dist/core/catalog/listbox.catalog.d.ts +1 -0
- package/dist/core/catalog/radio-group.catalog.d.ts +1 -0
- package/dist/core/catalog/schemas.d.ts +33 -19
- package/dist/core/catalog/switch.catalog.d.ts +1 -0
- package/dist/core/catalog/text.catalog.d.ts +0 -8
- package/dist/core/catalog/textarea.catalog.d.ts +1 -0
- package/dist/generate.d.ts +4 -4
- package/dist/index.d.ts +6 -3
- package/dist/index.js +2298 -0
- package/dist/index.js.map +1 -0
- package/dist/marketing/catalog/catalog.d.ts +1 -1
- package/dist/marketing/catalog/index.d.ts +1 -1
- package/dist/marketing/catalog/scoped-catalogs.d.ts +4 -0
- package/dist/registry-utils.d.ts +1 -1
- package/dist/registry.d.ts +1 -0
- package/dist/renderers/context-spec-renderer.d.ts +6 -0
- package/dist/renderers/sectioned-context-renderer.css.d.ts +1 -0
- package/dist/renderers/sectioned-context-renderer.d.ts +36 -0
- package/dist/renderers/spec-renderer.d.ts +6 -1
- package/dist/renderers/types.d.ts +2 -1
- package/dist/renderers/wrap-context-registry.d.ts +3 -0
- package/dist/scoped-catalog.d.ts +64 -0
- package/dist/styles.css +1 -1
- package/dist/test/setup-dom.d.ts +1 -0
- package/dist/types.d.ts +6 -3
- package/package.json +7 -4
- package/dist/core/catalog/badge.catalog.d.ts +0 -12
- package/dist/core/catalog/badge.css.d.ts +0 -1
- package/dist/core/catalog/badge.d.ts +0 -8
- package/dist/json-render-react.js +0 -1183
- package/dist/json-render-react.js.map +0 -1
- package/dist/marketing/catalog/teams.d.ts +0 -4
- package/dist/team-catalog.d.ts +0 -26
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"json-render-react.js","names":[],"sources":["../src/core/actions.ts","../src/types.ts","../src/core/catalog/alert.catalog.ts","../src/core/catalog/alert.tsx","../src/utils/defined-props.ts","../src/core/catalog/badge.catalog.ts","../src/core/catalog/badge.css.ts","../src/core/catalog/badge.tsx","../src/core/catalog/bar-chart.catalog.ts","../src/core/catalog/chart.css.ts","../src/core/catalog/chart-utils.ts","../src/core/catalog/bar-chart.tsx","../src/core/catalog/button.catalog.ts","../src/core/catalog/button.tsx","../src/core/catalog/card.catalog.ts","../src/core/catalog/card.tsx","../src/core/catalog/checkbox.catalog.ts","../src/core/catalog/chip.catalog.ts","../src/core/catalog/divider.catalog.ts","../src/core/catalog/donut-chart.catalog.ts","../src/core/catalog/flex.catalog.ts","../src/core/catalog/grid.catalog.ts","../src/core/catalog/icon.catalog.ts","../src/core/catalog/input.catalog.ts","../src/core/catalog/line-chart.catalog.ts","../src/core/catalog/link.catalog.ts","../src/core/catalog/listbox.catalog.ts","../src/core/catalog/progress-bar.catalog.ts","../src/core/catalog/radio-group.catalog.ts","../src/core/catalog/switch.catalog.ts","../src/core/catalog/text.catalog.ts","../src/core/catalog/textarea.catalog.ts","../src/core/catalog/schemas.ts","../src/core/catalog/catalog-def.ts","../src/core/catalog/checkbox.tsx","../src/core/catalog/chip.tsx","../src/core/catalog/divider.tsx","../src/core/catalog/donut-chart.tsx","../src/core/catalog/flex.tsx","../../../tooling/tools/src/cx.ts","../src/core/catalog/grid.css.ts","../src/core/catalog/grid.tsx","../src/core/catalog/icon.tsx","../src/core/catalog/input.tsx","../src/core/catalog/line-chart.tsx","../src/core/catalog/link.tsx","../../../node_modules/.pnpm/@vanilla-extract+recipes@0.5.7_@vanilla-extract+css@1.20.1/node_modules/@vanilla-extract/recipes/dist/createRuntimeFn-62c9670f.esm.js","../src/core/catalog/listbox.css.ts","../src/core/catalog/listbox.tsx","../src/core/catalog/progress-bar.tsx","../src/core/catalog/radio-group.tsx","../src/core/catalog/switch.tsx","../src/core/catalog/text.tsx","../src/core/catalog/textarea.tsx","../src/core/catalog/index.ts","../src/team-catalog.ts","../src/marketing/catalog/components/revenue-card.catalog.ts","../src/marketing/catalog/components/revenue-card.css.ts","../src/marketing/catalog/components/revenue-card.tsx","../src/marketing/catalog/index.ts","../src/registry-utils.ts","../src/registry.ts","../src/renderers/internal/enrichments/button-actions.ts","../src/renderers/internal/enrichments/useEnrichedSpec.ts","../src/renderers/spec-renderer.tsx"],"sourcesContent":["import { z } from \"zod\";\n\nexport const actionsCatalog = {\n \"atlas.submitUserAction\": {\n params: z.object({\n data: z.record(z.string(), z.unknown()).optional(),\n actionId: z.string().optional(),\n }),\n description: 'Submit form data. actionId overrides default \"form_submit\" identifier.',\n },\n \"atlas.navigate\": {\n params: z.object({ url: z.string() }),\n description:\n \"Navigate to a URL or internal route. External URLs (http/https) open in a new tab; internal route strings navigate within the app.\",\n },\n \"atlas.toolCall\": {\n params: z.object({\n tool: z.string(),\n args: z.record(z.string(), z.unknown()).optional(),\n }),\n description:\n \"Invoke a tool on the active artifact panel app (an MCP-backed MFE). args is the tool argument payload; if omitted the current form state is sent.\",\n },\n};\n\nexport const actionsHandlers = {\n \"atlas.submitUserAction\": async (_params: unknown) => {\n // no-op default — host overrides via SpecRenderer `actions` factory\n },\n \"atlas.navigate\": async (_params: unknown) => {\n // no-op default — host overrides via SpecRenderer `actions` factory\n },\n \"atlas.toolCall\": async (_params: unknown) => {\n // no-op default — host overrides via SpecRenderer `actions` factory\n },\n};\n","import type { z } from \"zod\";\n\nimport type { ComponentCatalogDef } from \"./team-catalog\";\n\nexport type RendererContext = \"chat\" | \"panel\" | \"app\";\n\nexport const ALL_RENDERERS: RendererContext[] = [\"chat\", \"panel\", \"app\"];\n\nexport interface CatalogEntry {\n name: string;\n catalog: ComponentCatalogDef;\n /** json-render component renderer — typed at defineRegistry boundary. */\n renderer: unknown;\n renderers: RendererContext[];\n}\n\nexport type InferCatalogProps<T extends { props: z.ZodType }> = z.infer<T[\"props\"]>;\n","import { z } from \"zod\";\n\nexport const alertCatalog = {\n props: z.object({\n title: z.string(),\n status: z.enum([\"info\", \"success\", \"warning\", \"danger\"]).optional(),\n dismissible: z.boolean().optional(),\n }),\n slots: [\"default\"],\n description:\n 'Alert/notification banner. dismissible: true adds a close button that emits a \"close\" event.',\n};\n","import { Alert } from \"@servicetitan/anvil2\";\nimport type { ReactNode } from \"react\";\nimport type { z } from \"zod\";\n\nimport { alertCatalog } from \"./alert.catalog\";\n\nexport { alertCatalog };\n\nexport const AlertRenderer = ({\n props,\n emit,\n children,\n}: {\n props: z.infer<typeof alertCatalog.props>;\n emit: (event: string) => void;\n children?: ReactNode;\n}) => (\n <Alert\n title={props.title}\n status={props.status ?? \"info\"}\n {...(props.dismissible ? { onClose: () => emit(\"close\") } : {})}\n >\n {children}\n </Alert>\n);\n","type DefinedProps<T extends Record<string, unknown>> = {\n [K in keyof T as T[K] extends undefined ? never : K]: Exclude<T[K], undefined>;\n};\n\n/** Omit keys whose values are `undefined` — required for exactOptionalPropertyTypes spreads. */\nexport function definedProps<T extends Record<string, unknown>>(props: T): DefinedProps<T> {\n const result = {} as DefinedProps<T>;\n for (const key of Object.keys(props) as Array<keyof T>) {\n const value = props[key];\n if (value !== undefined) {\n result[key as keyof DefinedProps<T>] = value as DefinedProps<T>[keyof DefinedProps<T>];\n }\n }\n return result;\n}\n","import { z } from \"zod\";\n\nexport const badgeCatalog = {\n props: z.object({\n content: z.string().optional(),\n offset: z\n .object({\n x: z.string().optional(),\n y: z.string().optional(),\n })\n .optional(),\n }),\n slots: [\"default\"],\n description:\n \"Unread notification count on a Button or Link. Wrap the interactive element as a child of Badge (the renderer adds position:relative). content: numerical count only (e.g. 3, 99+); omit for dot-only. offset: {x, y} CSS values to fine-tune position on non-square anchors like links.\",\n};\n","import { style } from \"@vanilla-extract/css\";\n\nexport const badgeAnchor = style({\n position: \"relative\",\n display: \"inline-block\",\n});\n","import { Badge } from \"@servicetitan/anvil2\";\nimport type { ReactNode } from \"react\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { badgeCatalog } from \"./badge.catalog\";\nimport { badgeAnchor } from \"./badge.css\";\n\nexport { badgeCatalog };\n\nexport const BadgeRenderer = ({\n props,\n children,\n}: {\n props: z.infer<typeof badgeCatalog.props>;\n children?: ReactNode;\n}) => {\n const offset = props.offset ? definedProps({ x: props.offset.x, y: props.offset.y }) : undefined;\n\n const badge = offset ? (\n <Badge offset={offset}>{props.content}</Badge>\n ) : (\n <Badge>{props.content}</Badge>\n );\n\n if (children) {\n return (\n <div className={badgeAnchor}>\n {children}\n {badge}\n </div>\n );\n }\n\n return badge;\n};\n","import { z } from \"zod\";\n\nexport const barChartCatalog = {\n props: z.object({\n data: z.array(z.object({ category: z.string(), value: z.number() })),\n orientation: z.enum([\"vertical\", \"horizontal\"]).optional(),\n theme: z.enum([\"monochrome\", \"categorical\", \"semantic\"]).optional(),\n height: z.number().optional(),\n unit: z.string().optional(),\n }),\n slots: [],\n description:\n \"Bar chart (vertical or horizontal) with Anvil2 theme. data: [{category, value}]. theme: monochrome (default, ≤4 vars), categorical (5-9 distinct), semantic (success/neutral/warning/danger order). unit: tooltip suffix.\",\n};\n","import { style } from \"@vanilla-extract/css\";\n\nexport const chartContainer = style({\n width: \"100%\",\n});\n","import type * as am5 from \"@amcharts/amcharts5\";\nimport am5themes_Animated from \"@amcharts/amcharts5/themes/Animated\";\nimport {\n ThemeCategorical,\n ThemeMonochrome,\n ThemeSemantic,\n} from \"@servicetitan/anvil2-ext-charts/am5\";\n\nexport function applyChartTheme(root: am5.Root, theme: string = \"monochrome\") {\n const themeMap: Record<string, typeof am5.Theme> = {\n monochrome: ThemeMonochrome,\n categorical: ThemeCategorical,\n semantic: ThemeSemantic,\n };\n const T = themeMap[theme] ?? ThemeMonochrome;\n root.setThemes([am5themes_Animated.new(root), T.new(root)]);\n}\n","import * as am5 from \"@amcharts/amcharts5\";\nimport * as am5xy from \"@amcharts/amcharts5/xy\";\nimport { useEffect, useRef } from \"react\";\nimport type { z } from \"zod\";\n\nimport { barChartCatalog } from \"./bar-chart.catalog\";\nimport { chartContainer } from \"./chart.css\";\nimport { applyChartTheme } from \"./chart-utils\";\n\nexport { barChartCatalog };\n\nexport const BarChartRenderer = ({ props }: { props: z.infer<typeof barChartCatalog.props> }) => {\n const divRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const el = divRef.current;\n if (!el) {\n return;\n }\n\n let root: am5.Root | undefined;\n\n const init = () => {\n if (root) {\n root.dispose();\n }\n root = am5.Root.new(el);\n applyChartTheme(root, props.theme);\n const chart = root.container.children.push(am5xy.XYChart.new(root, { paddingLeft: 0 }));\n\n if (props.orientation === \"horizontal\") {\n const yAxis = chart.yAxes.push(\n am5xy.CategoryAxis.new(root, {\n categoryField: \"category\",\n renderer: am5xy.AxisRendererY.new(root, { minGridDistance: 20 }),\n }),\n );\n const xAxis = chart.xAxes.push(\n am5xy.ValueAxis.new(root, {\n renderer: am5xy.AxisRendererX.new(root, {}),\n }),\n );\n const series = chart.series.push(\n am5xy.ColumnSeries.new(root, {\n xAxis,\n yAxis,\n valueXField: \"value\",\n categoryYField: \"category\",\n }),\n );\n series.columns.template.setAll({\n tooltipText: `{categoryY}: ${props.unit ?? \"\"}{valueX}`,\n });\n yAxis.data.setAll(props.data);\n series.data.setAll(props.data);\n } else {\n const xAxis = chart.xAxes.push(\n am5xy.CategoryAxis.new(root, {\n categoryField: \"category\",\n renderer: am5xy.AxisRendererX.new(root, { minGridDistance: 30 }),\n }),\n );\n const yAxis = chart.yAxes.push(\n am5xy.ValueAxis.new(root, {\n renderer: am5xy.AxisRendererY.new(root, {}),\n }),\n );\n const series = chart.series.push(\n am5xy.ColumnSeries.new(root, {\n xAxis,\n yAxis,\n valueYField: \"value\",\n categoryXField: \"category\",\n }),\n );\n series.columns.template.setAll({\n tooltipText: `{categoryX}: ${props.unit ?? \"\"}{valueY}`,\n });\n xAxis.data.setAll(props.data);\n series.data.setAll(props.data);\n }\n };\n\n // Defer init until the element has a real width\n const observer = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width ?? 0;\n if (width > 0 && !root) {\n init();\n }\n });\n observer.observe(el);\n\n // Also try immediately in case it's already laid out\n if (el.offsetWidth > 0) {\n init();\n }\n\n return () => {\n observer.disconnect();\n root?.dispose();\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n return <div ref={divRef} className={chartContainer} style={{ height: props.height ?? 300 }} />;\n};\n","import { z } from \"zod\";\n\nexport const buttonCatalog = {\n props: z.object({\n label: z.string(),\n appearance: z.enum([\"primary\", \"secondary\", \"ghost\"]).optional(),\n size: z.enum([\"xsmall\", \"small\", \"medium\", \"large\"]).optional(),\n loading: z.boolean().optional(),\n disabled: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Clickable button. Every button automatically submits form data when pressed — the element key is used as the actionId to identify which button was clicked. loading: true shows a spinner. disabled: true prevents interaction. size: xsmall | small | medium (default) | large.\",\n};\n","import { Button } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { buttonCatalog } from \"./button.catalog\";\n\nexport { buttonCatalog };\n\nexport const ButtonRenderer = ({\n props,\n emit,\n}: {\n props: z.infer<typeof buttonCatalog.props>;\n emit: (event: string) => void;\n}) => (\n <Button\n appearance={props.appearance ?? \"secondary\"}\n {...definedProps({\n size: props.size,\n loading: props.loading,\n disabled: props.disabled,\n })}\n onClick={() => emit(\"press\")}\n >\n {props.label}\n </Button>\n);\n","import { z } from \"zod\";\n\nexport const cardCatalog = {\n props: z.object({\n background: z.enum([\"strong\", \"stronger\"]).optional(),\n padding: z.enum([\"0\", \"xsmall\", \"small\", \"medium\", \"large\"]).optional(),\n }),\n slots: [\"default\"],\n description:\n \"White surface with padding; groups related content. background: strong | stronger for elevated surfaces. padding: 0 | xsmall | small | medium (default) | large.\",\n};\n","import { Card } from \"@servicetitan/anvil2\";\nimport type { ReactNode } from \"react\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { cardCatalog } from \"./card.catalog\";\n\nexport { cardCatalog };\n\nexport const CardRenderer = ({\n props,\n children,\n}: {\n props: z.infer<typeof cardCatalog.props>;\n children?: ReactNode;\n}) => (\n <Card {...definedProps({ background: props.background, padding: props.padding })}>\n {children}\n </Card>\n);\n","import { z } from \"zod\";\n\nexport const checkboxCatalog = {\n props: z.object({\n label: z.string(),\n checked: z.boolean().optional(),\n disabled: z.boolean().optional(),\n }),\n slots: [],\n description: \"Checkbox input with label. Use $bindState on checked to track state.\",\n};\n","import { z } from \"zod\";\n\nexport const chipCatalog = {\n props: z.object({\n label: z.string(),\n size: z.enum([\"small\", \"medium\"]).optional(),\n color: z.string().optional(),\n icon: z.enum([\"check-circle\", \"in-progress\", \"radio-button-unchecked\"]).optional(),\n removable: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Inline label pill for metadata, tags, or categories — use for job statuses, not notification counts (use Badge for those). size: small | medium (default). color: any CSS color. icon: optional leading icon. removable: true adds a close button (not available for size=small).\",\n};\n","import { z } from \"zod\";\n\nexport const dividerCatalog = {\n props: z.object({\n vertical: z.boolean().optional(),\n spacing: z.enum([\"0\", \"half\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"8\", \"12\"]).optional(),\n alignContent: z.enum([\"start\", \"center\", \"end\"]).optional(),\n }),\n slots: [],\n description:\n \"Divider between sections. vertical: true for vertical separator. spacing: gap around the divider. alignContent: alignment of content within the divider.\",\n};\n","import { z } from \"zod\";\n\nexport const donutChartCatalog = {\n props: z.object({\n data: z.array(z.object({ category: z.string(), value: z.number() })),\n theme: z.enum([\"monochrome\", \"categorical\", \"semantic\"]).optional(),\n showLegend: z.boolean().optional(),\n height: z.number().optional(),\n unit: z.string().optional(),\n }),\n slots: [],\n description:\n \"Donut chart with optional legend and Anvil2 theme. data: [{category, value}]. theme: monochrome (≤4 vars), categorical (5-9 distinct), semantic (status values).\",\n};\n","import { z } from \"zod\";\n\nexport const flexCatalog = {\n props: z.object({\n direction: z.enum([\"row\", \"column\"]).optional(),\n gap: z.enum([\"1\", \"2\", \"3\", \"4\", \"5\", \"6\"]).optional(),\n alignItems: z.enum([\"center\", \"flex-start\", \"flex-end\", \"stretch\", \"baseline\"]).optional(),\n justifyContent: z\n .enum([\"center\", \"flex-start\", \"flex-end\", \"space-between\", \"space-around\", \"space-evenly\"])\n .optional(),\n wrap: z.enum([\"wrap\", \"nowrap\", \"wrap-reverse\"]).optional(),\n grow: z.number().optional(),\n shrink: z.number().optional(),\n inline: z.boolean().optional(),\n }),\n slots: [\"default\"],\n description:\n \"Flex layout container. gap: 1=4px 2=8px 3=12px 4=16px 5=20px 6=24px. grow: 1=fill available width. alignItems: vertical alignment. justifyContent: horizontal distribution.\",\n};\n","import { z } from \"zod\";\n\nexport const gridCatalog = {\n props: z.object({\n templateColumns: z.string().optional(),\n gap: z.enum([\"1\", \"2\", \"3\", \"4\", \"5\", \"6\"]).optional(),\n bordered: z.boolean().optional(),\n }),\n slots: [\"default\"],\n description:\n 'CSS Grid layout. templateColumns: CSS grid-template-columns value — \"repeat(3, 1fr)\" for equal columns, \"200px 1fr\" for fixed+flex two-column (e.g. key-value tables), \"1fr 1fr 80px\" for multi-column tables. Children flow into grid cells left-to-right, top-to-bottom. gap: 1=4px … 6=24px. bordered: true renders a bordered table with row separators and cell padding — use for key-value and data tables.',\n};\n","import { z } from \"zod\";\n\nexport const iconCatalog = {\n props: z.object({\n name: z.enum([\"check-circle\", \"in-progress\", \"radio-button-unchecked\"]),\n size: z.enum([\"small\", \"medium\", \"large\", \"xlarge\"]).optional(),\n color: z.string().optional(),\n }),\n slots: [],\n description:\n \"Anvil2 icon. name: check-circle=completed checkmark, in-progress=spinning partial circle, radio-button-unchecked=empty circle (pending)\",\n};\n","import { z } from \"zod\";\n\nexport const inputCatalog = {\n props: z.object({\n label: z.string(),\n placeholder: z.string().optional(),\n type: z.enum([\"text\", \"password\", \"email\", \"tel\", \"url\", \"number\"]).optional(),\n value: z.string().optional(),\n disabled: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Free-text input field for user-typed values (names, notes, numbers, etc). type: text (default), password (masked), email, tel (phone), url, number. Use $bindState on value to bind to state. Prefer this over Select when the value is not from a fixed list.\",\n};\n","import { z } from \"zod\";\n\nexport const lineChartCatalog = {\n props: z.object({\n data: z.array(z.record(z.string(), z.union([z.string(), z.number()]))),\n series: z.array(z.string()).optional(),\n theme: z.enum([\"monochrome\", \"categorical\", \"semantic\"]).optional(),\n showLegend: z.boolean().optional(),\n showDots: z.boolean().optional(),\n height: z.number().optional(),\n unit: z.string().optional(),\n }),\n slots: [],\n description:\n 'Line chart for tracking trends over time with optional multiple series. data: array of objects with a \"category\" key (x-axis label) and one numeric key per series (e.g. [{category: \"Jan\", revenue: 100, cost: 60}]). series: explicit list of series keys to plot (inferred from data keys if omitted, max 6). theme: monochrome (1-2 series), categorical (3-6 distinct). showLegend: true when multiple series (default true for 2+ series). showDots: true adds data-point markers (default true). unit: tooltip value suffix.',\n};\n","import { z } from \"zod\";\n\nexport const linkCatalog = {\n props: z.object({\n label: z.string(),\n href: z.string(),\n appearance: z.enum([\"primary\", \"secondary\"]).optional(),\n target: z.enum([\"_blank\", \"_self\"]).optional(),\n ghost: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Inline navigation link. href: destination URL. appearance: primary (default) | secondary. target: _blank opens in new tab (shows external-link icon). ghost: quieter styling (primary only).\",\n};\n","import { z } from \"zod\";\n\nexport const listboxCatalog = {\n props: z.object({\n label: z.string(),\n options: z.array(z.object({ value: z.string(), label: z.string() })),\n value: z.string().optional(),\n disabled: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Listbox for choosing from a fixed list of known options. Use only when options are predefined. For free-text user input use Input instead.\",\n};\n","import { z } from \"zod\";\n\nexport const progressBarCatalog = {\n props: z.object({\n label: z.string(),\n value: z.number().min(0).max(100).optional(),\n description: z.string().optional(),\n indeterminate: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Progress bar showing task completion. value: 0–100 (percentage). Omit value and set indeterminate=true for unknown progress.\",\n};\n","import { z } from \"zod\";\n\nexport const radioGroupCatalog = {\n props: z.object({\n label: z.string(),\n options: z.array(z.object({ value: z.string(), label: z.string() })),\n value: z.string().optional(),\n disabled: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Group of radio buttons for single selection. Use $bindState on value to capture selection.\",\n};\n","import { z } from \"zod\";\n\nexport const switchCatalog = {\n props: z.object({\n label: z.string(),\n checked: z.boolean().optional(),\n disabled: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Toggle switch for binary on/off settings. Prefer over Checkbox for enabling/disabling features. Use $bindState on checked to track state.\",\n};\n","import { z } from \"zod\";\n\nexport const textCatalog = {\n props: z.object({\n content: z.string(),\n variant: z.enum([\"headline\", \"body\", \"eyebrow\"]).optional(),\n size: z.enum([\"small\", \"medium\", \"large\", \"xlarge\"]).optional(),\n subdued: z.boolean().optional(),\n el: z.enum([\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"]).optional(),\n }),\n slots: [],\n description:\n \"Display text. variant: headline=bold title, eyebrow=small label, body=default. size: small/medium/large/xlarge (headline and body only). subdued: deemphasized body text. el: heading element for variant=headline (default h3).\",\n};\n","import { z } from \"zod\";\n\nexport const textareaCatalog = {\n props: z.object({\n label: z.string(),\n placeholder: z.string().optional(),\n description: z.string().optional(),\n moreInfo: z.string().optional(),\n value: z.string().optional(),\n rows: z.number().optional(),\n disabled: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Multi-line free-text input for long values (notes, descriptions, email body). Use $bindState on value to bind to state. rows: visible row count (default 3).\",\n};\n","import { alertCatalog } from \"./alert.catalog\";\nimport { badgeCatalog } from \"./badge.catalog\";\nimport { barChartCatalog } from \"./bar-chart.catalog\";\nimport { buttonCatalog } from \"./button.catalog\";\nimport { cardCatalog } from \"./card.catalog\";\nimport { checkboxCatalog } from \"./checkbox.catalog\";\nimport { chipCatalog } from \"./chip.catalog\";\nimport { dividerCatalog } from \"./divider.catalog\";\nimport { donutChartCatalog } from \"./donut-chart.catalog\";\nimport { flexCatalog } from \"./flex.catalog\";\nimport { gridCatalog } from \"./grid.catalog\";\nimport { iconCatalog } from \"./icon.catalog\";\nimport { inputCatalog } from \"./input.catalog\";\nimport { lineChartCatalog } from \"./line-chart.catalog\";\nimport { linkCatalog } from \"./link.catalog\";\nimport { listboxCatalog } from \"./listbox.catalog\";\nimport { progressBarCatalog } from \"./progress-bar.catalog\";\nimport { radioGroupCatalog } from \"./radio-group.catalog\";\nimport { switchCatalog } from \"./switch.catalog\";\nimport { textCatalog } from \"./text.catalog\";\nimport { textareaCatalog } from \"./textarea.catalog\";\n\nexport const baseComponents = {\n Text: textCatalog,\n Card: cardCatalog,\n Flex: flexCatalog,\n Grid: gridCatalog,\n Alert: alertCatalog,\n Divider: dividerCatalog,\n Icon: iconCatalog,\n Badge: badgeCatalog,\n Chip: chipCatalog,\n Link: linkCatalog,\n ProgressBar: progressBarCatalog,\n BarChart: barChartCatalog,\n DonutChart: donutChartCatalog,\n LineChart: lineChartCatalog,\n Button: buttonCatalog,\n Checkbox: checkboxCatalog,\n Input: inputCatalog,\n Textarea: textareaCatalog,\n Listbox: listboxCatalog,\n RadioGroup: radioGroupCatalog,\n Switch: switchCatalog,\n};\n","import { defineCatalog } from \"@json-render/core\";\nimport { schema } from \"@json-render/react/schema\";\n\nimport { actionsCatalog } from \"../actions\";\n\nimport { baseComponents } from \"./schemas\";\n\nexport { baseComponents };\n\nexport const catalog = defineCatalog(schema, {\n components: baseComponents,\n actions: actionsCatalog,\n});\n","import { getByPath } from \"@json-render/core\";\nimport { useStateStore } from \"@json-render/react\";\nimport { Checkbox } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { checkboxCatalog } from \"./checkbox.catalog\";\n\nexport { checkboxCatalog };\n\nexport const CheckboxRenderer = ({\n props,\n bindings,\n emit,\n}: {\n props: z.infer<typeof checkboxCatalog.props>;\n bindings?: Record<string, string>;\n emit: (event: string) => void;\n}) => {\n const bindingPath = bindings?.checked;\n const { state, set } = useStateStore();\n const stateChecked = bindingPath\n ? (getByPath(state, bindingPath) as boolean | undefined)\n : undefined;\n const checked = bindingPath ? (stateChecked ?? props.checked ?? false) : (props.checked ?? false);\n\n return (\n <Checkbox\n label={props.label}\n checked={checked}\n onClick={(_e, state) => {\n if (bindingPath) {\n set(bindingPath, !(state?.checked ?? false));\n }\n emit(\"change\");\n }}\n />\n );\n};\n","import { Chip } from \"@servicetitan/anvil2\";\nimport CheckCircle from \"@servicetitan/anvil2/assets/icons/material/round/check_circle.svg\";\nimport RadioButtonUnchecked from \"@servicetitan/anvil2/assets/icons/material/round/radio_button_unchecked.svg\";\nimport InProgress from \"@servicetitan/anvil2/assets/icons/st/in_progress.svg\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { chipCatalog } from \"./chip.catalog\";\n\nexport { chipCatalog };\n\nconst CHIP_ICON_MAP = {\n \"check-circle\": CheckCircle,\n \"in-progress\": InProgress,\n \"radio-button-unchecked\": RadioButtonUnchecked,\n} as const;\n\nexport const ChipRenderer = ({\n props,\n emit,\n}: {\n props: z.infer<typeof chipCatalog.props>;\n emit: (event: string) => void;\n}) => {\n const icon = props.icon ? CHIP_ICON_MAP[props.icon] : undefined;\n const onClose = props.removable && props.size !== \"small\" ? () => emit(\"close\") : undefined;\n return (\n <Chip\n label={props.label}\n {...definedProps({ size: props.size, color: props.color, icon, onClose })}\n />\n );\n};\n","import { Divider } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { dividerCatalog } from \"./divider.catalog\";\n\nexport { dividerCatalog };\n\nexport const DividerRenderer = ({ props }: { props: z.infer<typeof dividerCatalog.props> }) => (\n <Divider\n {...definedProps({\n vertical: props.vertical,\n spacing: props.spacing,\n alignContent: props.alignContent,\n })}\n />\n);\n","import * as am5 from \"@amcharts/amcharts5\";\nimport * as am5percent from \"@amcharts/amcharts5/percent\";\nimport { useEffect, useRef } from \"react\";\nimport type { z } from \"zod\";\nimport { chartContainer } from \"./chart.css\";\nimport { applyChartTheme } from \"./chart-utils\";\nimport { donutChartCatalog } from \"./donut-chart.catalog\";\n\nexport { donutChartCatalog };\n\nexport const DonutChartRenderer = ({\n props,\n}: {\n props: z.infer<typeof donutChartCatalog.props>;\n}) => {\n const divRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const el = divRef.current;\n if (!el) {\n return;\n }\n\n let root: am5.Root | undefined;\n\n const init = () => {\n if (root) {\n root.dispose();\n }\n root = am5.Root.new(el);\n applyChartTheme(root, props.theme);\n const chart = root.container.children.push(\n am5percent.PieChart.new(root, {\n layout: root.horizontalLayout,\n innerRadius: am5.percent(50),\n }),\n );\n const series = chart.series.push(\n am5percent.PieSeries.new(root, {\n valueField: \"value\",\n categoryField: \"category\",\n legendValueText: \"\",\n }),\n );\n series.labels.template.set(\"text\", \"{valuePercentTotal.formatNumber('#.')}%\");\n series.data.setAll(props.data);\n\n if (props.showLegend ?? true) {\n const legend = chart.children.push(\n am5.Legend.new(root, {\n centerY: am5.percent(50),\n y: am5.percent(50),\n layout: root.verticalLayout,\n }),\n );\n legend.data.setAll(series.dataItems);\n }\n };\n\n // Defer init until the element has a real width\n const observer = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width ?? 0;\n if (width > 0 && !root) {\n init();\n }\n });\n observer.observe(el);\n\n // Also try immediately in case it's already laid out\n if (el.offsetWidth > 0) {\n init();\n }\n\n return () => {\n observer.disconnect();\n root?.dispose();\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n return <div ref={divRef} className={chartContainer} style={{ height: props.height ?? 300 }} />;\n};\n","import { Flex } from \"@servicetitan/anvil2\";\nimport type { ReactNode } from \"react\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { flexCatalog } from \"./flex.catalog\";\n\nexport { flexCatalog };\n\nexport const FlexRenderer = ({\n props,\n children,\n}: {\n props: z.infer<typeof flexCatalog.props>;\n children?: ReactNode;\n}) => (\n <Flex\n {...definedProps({\n direction: props.direction,\n gap: props.gap,\n alignItems: props.alignItems,\n justifyContent: props.justifyContent,\n wrap: props.wrap,\n grow: props.grow,\n shrink: props.shrink,\n inline: props.inline,\n })}\n >\n {children}\n </Flex>\n);\n","/**\n * Join class names, dropping any falsy entry. The de-facto `clsx`-shaped\n * helper but kept dependency-free — vendored via `@carto-internal/tools` and\n * compiled into consuming packages at build time.\n */\nexport const cx = (...classes: Array<string | false | null | undefined>): string =>\n classes.filter(Boolean).join(\" \");\n","import { primitive, semantic } from \"@servicetitan/carto-tokens/vanilla-extract\";\nimport { style } from \"@vanilla-extract/css\";\n\nexport const borderedGrid = style({\n display: \"grid\",\n borderWidth: primitive.size[\"25\"],\n borderStyle: \"solid\",\n borderColor: semantic.border.color.standard,\n borderRadius: semantic.radius.trim,\n overflow: \"hidden\",\n});\n\nexport const borderedGridCell = style({\n paddingBlock: primitive.size[\"200\"],\n paddingInline: primitive.size[\"300\"],\n});\n\n/** Row separator — omit on the last row so it does not stack on the container bottom edge. */\nexport const borderedGridRowDivider = style({\n borderBottomWidth: primitive.size[\"25\"],\n borderBottomStyle: \"solid\",\n borderBottomColor: semantic.border.color.standard,\n});\n","import { cx } from \"@carto-internal/tools/cx\";\nimport { Grid } from \"@servicetitan/anvil2\";\nimport { Children, type ReactNode } from \"react\";\nimport type { z } from \"zod\";\nimport { gridCatalog } from \"./grid.catalog\";\nimport { borderedGrid, borderedGridCell, borderedGridRowDivider } from \"./grid.css\";\n\nexport { gridCatalog };\n\n/** Best-effort column count for catalog templateColumns strings (e.g. `1fr 1fr`, `repeat(3, 1fr)`). */\nfunction estimateColumnCount(templateColumns: string): number {\n const repeatMatch = templateColumns.match(/repeat\\(\\s*(\\d+)/);\n if (repeatMatch?.[1]) {\n return Number(repeatMatch[1]);\n }\n return templateColumns.trim().split(/\\s+/).length;\n}\n\nexport const GridRenderer = ({\n props,\n children,\n}: {\n props: z.infer<typeof gridCatalog.props>;\n children?: ReactNode;\n}) => {\n if (props.bordered) {\n const templateColumns = props.templateColumns ?? \"1fr\";\n const childCount = Children.count(children);\n const columnCount = Math.max(1, estimateColumnCount(templateColumns));\n const lastRowStartIndex = Math.max(0, childCount - (childCount % columnCount || columnCount));\n\n return (\n <div className={borderedGrid} style={{ gridTemplateColumns: templateColumns }}>\n {Children.map(children, (child, index) => (\n <div\n className={cx(borderedGridCell, index < lastRowStartIndex && borderedGridRowDivider)}\n >\n {child}\n </div>\n ))}\n </div>\n );\n }\n\n return (\n <Grid templateColumns={props.templateColumns} gap={props.gap ?? \"2\"}>\n {children}\n </Grid>\n );\n};\n","import { Icon } from \"@servicetitan/anvil2\";\nimport CheckCircle from \"@servicetitan/anvil2/assets/icons/material/round/check_circle.svg\";\nimport RadioButtonUnchecked from \"@servicetitan/anvil2/assets/icons/material/round/radio_button_unchecked.svg\";\nimport InProgress from \"@servicetitan/anvil2/assets/icons/st/in_progress.svg\";\nimport type { ComponentProps } from \"react\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { iconCatalog } from \"./icon.catalog\";\n\nexport { iconCatalog };\n\ntype IconName = z.infer<typeof iconCatalog.props>[\"name\"];\ntype IconSvg = NonNullable<ComponentProps<typeof Icon>[\"svg\"]>;\n\nconst SVG_MAP = {\n \"check-circle\": CheckCircle,\n \"in-progress\": InProgress,\n \"radio-button-unchecked\": RadioButtonUnchecked,\n} satisfies Record<IconName, IconSvg>;\n\nexport const IconRenderer = ({ props }: { props: z.infer<typeof iconCatalog.props> }) => {\n const svg = SVG_MAP[props.name];\n if (!svg) {\n return null;\n }\n return <Icon svg={svg} {...definedProps({ size: props.size, color: props.color })} />;\n};\n","import { getByPath } from \"@json-render/core\";\nimport { useStateStore } from \"@json-render/react\";\nimport { TextField } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { inputCatalog } from \"./input.catalog\";\n\nexport { inputCatalog };\n\nexport const InputRenderer = ({\n props,\n bindings,\n emit,\n}: {\n props: z.infer<typeof inputCatalog.props>;\n bindings?: Record<string, string>;\n emit: (event: string) => void;\n}) => {\n const bindingPath = bindings?.value;\n const { state, set } = useStateStore();\n const stateValue = bindingPath\n ? (getByPath(state, bindingPath) as string | undefined)\n : undefined;\n const value = bindingPath ? (stateValue ?? props.value ?? \"\") : (props.value ?? \"\");\n\n return (\n <TextField\n label={props.label}\n type={props.type ?? \"text\"}\n value={value}\n {...definedProps({ placeholder: props.placeholder, disabled: props.disabled })}\n onChange={(e) => {\n if (bindingPath) {\n set(bindingPath, e.target.value);\n }\n emit(\"change\");\n }}\n />\n );\n};\n","import * as am5 from \"@amcharts/amcharts5\";\nimport * as am5xy from \"@amcharts/amcharts5/xy\";\nimport { useEffect, useRef } from \"react\";\nimport type { z } from \"zod\";\nimport { chartContainer } from \"./chart.css\";\nimport { applyChartTheme } from \"./chart-utils\";\nimport { lineChartCatalog } from \"./line-chart.catalog\";\n\nexport { lineChartCatalog };\n\nexport const LineChartRenderer = ({ props }: { props: z.infer<typeof lineChartCatalog.props> }) => {\n const divRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const el = divRef.current;\n if (!el) {\n return;\n }\n\n let root: am5.Root | undefined;\n\n const init = () => {\n if (root) {\n root.dispose();\n }\n root = am5.Root.new(el);\n applyChartTheme(root, props.theme);\n\n const chart = root.container.children.push(am5xy.XYChart.new(root, { paddingLeft: 0 }));\n\n const xAxis = chart.xAxes.push(\n am5xy.CategoryAxis.new(root, {\n categoryField: \"category\",\n renderer: am5xy.AxisRendererX.new(root, { minGridDistance: 30 }),\n }),\n );\n\n const yAxis = chart.yAxes.push(\n am5xy.ValueAxis.new(root, {\n renderer: am5xy.AxisRendererY.new(root, {}),\n }),\n );\n\n const firstRow = props.data[0];\n const seriesKeys =\n props.series ?? (firstRow ? Object.keys(firstRow).filter((k) => k !== \"category\") : []);\n\n for (const key of seriesKeys) {\n const series = chart.series.push(\n am5xy.LineSeries.new(root, {\n name: key,\n xAxis,\n yAxis,\n valueYField: key,\n categoryXField: \"category\",\n tooltip: am5.Tooltip.new(root, {\n labelText: `${key}: ${props.unit ?? \"\"}{valueY}`,\n }),\n }),\n );\n\n series.strokes.template.setAll({ strokeWidth: 2 });\n\n if (props.showDots ?? true) {\n series.bullets.push(() => {\n if (!root) {\n throw new Error(\"Chart root is not initialized\");\n }\n const fill = series.get(\"fill\");\n return am5.Bullet.new(root, {\n sprite: am5.Circle.new(root, {\n radius: 4,\n ...(fill ? { fill } : {}),\n strokeWidth: 0,\n }),\n });\n });\n }\n\n series.data.setAll(props.data);\n }\n\n xAxis.data.setAll(props.data);\n\n const showLegend = props.showLegend ?? seriesKeys.length > 1;\n if (showLegend) {\n chart.children\n .push(\n am5.Legend.new(root, {\n centerX: am5.percent(50),\n x: am5.percent(50),\n marginTop: 8,\n }),\n )\n .data.setAll(chart.series.values);\n }\n };\n\n const observer = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width ?? 0;\n if (width > 0 && !root) {\n init();\n }\n });\n observer.observe(el);\n\n if (el.offsetWidth > 0) {\n init();\n }\n\n return () => {\n observer.disconnect();\n root?.dispose();\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n return <div ref={divRef} className={chartContainer} style={{ height: props.height ?? 300 }} />;\n};\n","import { Link } from \"@servicetitan/anvil2\";\nimport type { MouseEvent } from \"react\";\nimport type { z } from \"zod\";\n\nimport { linkCatalog } from \"./link.catalog\";\n\nexport { linkCatalog };\n\nexport const LinkRenderer = ({\n props,\n emit,\n}: {\n props: z.infer<typeof linkCatalog.props>;\n emit: (event: string) => void;\n}) => {\n const { label, href, appearance, target, ghost } = props;\n const onClick = (e: MouseEvent<HTMLAnchorElement>) => {\n e.preventDefault();\n emit(\"press\");\n };\n\n if (appearance === \"secondary\") {\n return (\n <Link\n appearance=\"secondary\"\n ghost={false}\n href={href}\n {...(target ? { target } : {})}\n onClick={onClick}\n >\n {label}\n </Link>\n );\n }\n\n if (ghost !== undefined) {\n return (\n <Link\n appearance=\"primary\"\n ghost={ghost}\n href={href}\n {...(target ? { target } : {})}\n onClick={onClick}\n >\n {label}\n </Link>\n );\n }\n\n return (\n <Link appearance=\"primary\" href={href} {...(target ? { target } : {})} onClick={onClick}>\n {label}\n </Link>\n );\n};\n","function toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\n\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : String(i);\n}\n\nfunction _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\n\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\n\nfunction mapValues(input, fn) {\n var result = {};\n for (var _key in input) {\n result[_key] = fn(input[_key], _key);\n }\n return result;\n}\n\nvar shouldApplyCompound = (compoundCheck, selections, defaultVariants) => {\n for (var key of Object.keys(compoundCheck)) {\n var _selections$key;\n if (compoundCheck[key] !== ((_selections$key = selections[key]) !== null && _selections$key !== void 0 ? _selections$key : defaultVariants[key])) {\n return false;\n }\n }\n return true;\n};\nvar createRuntimeFn = config => {\n var runtimeFn = options => {\n var className = config.defaultClassName;\n var selections = _objectSpread2(_objectSpread2({}, config.defaultVariants), options);\n for (var variantName in selections) {\n var _selections$variantNa;\n var variantSelection = (_selections$variantNa = selections[variantName]) !== null && _selections$variantNa !== void 0 ? _selections$variantNa : config.defaultVariants[variantName];\n if (variantSelection != null) {\n var selection = variantSelection;\n if (typeof selection === 'boolean') {\n // @ts-expect-error\n selection = selection === true ? 'true' : 'false';\n }\n var selectionClassName =\n // @ts-expect-error\n config.variantClassNames[variantName][selection];\n if (selectionClassName) {\n className += ' ' + selectionClassName;\n }\n }\n }\n for (var [compoundCheck, compoundClassName] of config.compoundVariants) {\n if (shouldApplyCompound(compoundCheck, selections, config.defaultVariants)) {\n className += ' ' + compoundClassName;\n }\n }\n return className;\n };\n runtimeFn.variants = () => Object.keys(config.variantClassNames);\n runtimeFn.classNames = {\n get base() {\n return config.defaultClassName.split(' ')[0];\n },\n get variants() {\n return mapValues(config.variantClassNames, classNames => mapValues(classNames, className => className.split(' ')[0]));\n }\n };\n return runtimeFn;\n};\n\nexport { createRuntimeFn as c, mapValues as m };\n","import { semantic } from \"@servicetitan/carto-tokens/vanilla-extract\";\nimport { recipe } from \"@vanilla-extract/recipes\";\n\nexport const listboxWrapper = recipe({\n base: {},\n variants: {\n disabled: {\n true: {\n pointerEvents: \"none\",\n opacity: semantic.opacity.disabled,\n },\n false: {},\n },\n },\n});\n","import { getByPath } from \"@json-render/core\";\nimport { useStateStore } from \"@json-render/react\";\nimport { FieldLabel, Listbox } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { listboxCatalog } from \"./listbox.catalog\";\nimport { listboxWrapper } from \"./listbox.css\";\n\nexport { listboxCatalog };\n\nexport const ListboxRenderer = ({\n props,\n bindings,\n emit,\n}: {\n props: z.infer<typeof listboxCatalog.props>;\n bindings?: Record<string, string>;\n emit: (event: string) => void;\n}) => {\n const bindingPath = bindings?.value;\n const { state, set } = useStateStore();\n const stateSelected = bindingPath\n ? (getByPath(state, bindingPath) as string | undefined)\n : undefined;\n const selected = bindingPath ? (stateSelected ?? props.value ?? \"\") : (props.value ?? \"\");\n\n const items = props.options.map((o) => ({ id: o.value, label: o.label }));\n const selectedItem = items.find((i) => i.id === selected);\n\n return (\n <div className={listboxWrapper({ disabled: props.disabled ?? false })}>\n <FieldLabel>{props.label}</FieldLabel>\n <Listbox\n items={items}\n {...(selectedItem ? { selected: selectedItem } : {})}\n onSelectionChange={(item: { id: string } | undefined) => {\n const val = item?.id ?? \"\";\n if (bindingPath) {\n set(bindingPath, val);\n }\n emit(\"change\");\n }}\n >\n {({ items: renderedItems }: { items: typeof items }) =>\n renderedItems.map((item) => (\n <Listbox.Option key={item.id} item={item}>\n {item.label}\n </Listbox.Option>\n ))\n }\n </Listbox>\n </div>\n );\n};\n","import { ProgressBar } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { progressBarCatalog } from \"./progress-bar.catalog\";\n\nexport { progressBarCatalog };\n\nexport const ProgressBarRenderer = ({\n props,\n}: {\n props: z.infer<typeof progressBarCatalog.props>;\n}) => {\n const descriptionProps = definedProps({ description: props.description });\n\n if (props.indeterminate) {\n return <ProgressBar label={props.label} indeterminate {...descriptionProps} />;\n }\n\n if (props.value !== undefined) {\n return <ProgressBar label={props.label} value={props.value} {...descriptionProps} />;\n }\n\n return <ProgressBar label={props.label} indeterminate {...descriptionProps} />;\n};\n","import { getByPath } from \"@json-render/core\";\nimport { useStateStore } from \"@json-render/react\";\nimport { Radio } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { radioGroupCatalog } from \"./radio-group.catalog\";\n\nexport { radioGroupCatalog };\n\nexport const RadioGroupRenderer = ({\n props,\n bindings,\n emit,\n}: {\n props: z.infer<typeof radioGroupCatalog.props>;\n bindings?: Record<string, string>;\n emit: (event: string) => void;\n}) => {\n const bindingPath = bindings?.value;\n const { state, set } = useStateStore();\n const stateSelected = bindingPath\n ? (getByPath(state, bindingPath) as string | undefined)\n : undefined;\n const selected = bindingPath ? (stateSelected ?? props.value ?? \"\") : (props.value ?? \"\");\n\n return (\n <Radio.Group legend={props.label}>\n {props.options.map((o) => (\n <Radio\n key={o.value}\n label={o.label}\n value={o.value}\n checked={selected === o.value}\n onChange={() => {\n if (bindingPath) {\n set(bindingPath, o.value);\n }\n emit(\"change\");\n }}\n />\n ))}\n </Radio.Group>\n );\n};\n","import { getByPath } from \"@json-render/core\";\nimport { useStateStore } from \"@json-render/react\";\nimport { Switch } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { switchCatalog } from \"./switch.catalog\";\n\nexport { switchCatalog };\n\nexport const SwitchRenderer = ({\n props,\n bindings,\n emit,\n}: {\n props: z.infer<typeof switchCatalog.props>;\n bindings?: Record<string, string>;\n emit: (event: string) => void;\n}) => {\n const bindingPath = bindings?.checked;\n const { state, set } = useStateStore();\n const stateChecked = bindingPath\n ? (getByPath(state, bindingPath) as boolean | undefined)\n : undefined;\n const checked = bindingPath ? (stateChecked ?? props.checked ?? false) : (props.checked ?? false);\n\n return (\n <Switch\n label={props.label}\n value={props.label}\n checked={checked}\n onChange={(_e, state) => {\n if (bindingPath) {\n set(bindingPath, state?.checked ?? false);\n }\n emit(\"change\");\n }}\n />\n );\n};\n","import { Text } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { textCatalog } from \"./text.catalog\";\n\nexport { textCatalog };\n\nexport const TextRenderer = ({ props }: { props: z.infer<typeof textCatalog.props> }) => {\n if (props.variant === \"headline\") {\n const el = props.el ?? \"h3\";\n if (props.size !== undefined) {\n return (\n <Text variant=\"headline\" el={el} size={props.size}>\n {props.content}\n </Text>\n );\n }\n return (\n <Text variant=\"headline\" el={el}>\n {props.content}\n </Text>\n );\n }\n if (props.variant === \"eyebrow\") {\n return <Text variant=\"eyebrow\">{props.content}</Text>;\n }\n if (props.size !== undefined && props.subdued !== undefined) {\n return (\n <Text variant=\"body\" size={props.size} subdued={props.subdued}>\n {props.content}\n </Text>\n );\n }\n if (props.size !== undefined) {\n return (\n <Text variant=\"body\" size={props.size}>\n {props.content}\n </Text>\n );\n }\n if (props.subdued !== undefined) {\n return (\n <Text variant=\"body\" subdued={props.subdued}>\n {props.content}\n </Text>\n );\n }\n return <Text variant=\"body\">{props.content}</Text>;\n};\n","import { getByPath } from \"@json-render/core\";\nimport { useStateStore } from \"@json-render/react\";\nimport { Textarea } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { textareaCatalog } from \"./textarea.catalog\";\n\nexport { textareaCatalog };\n\nexport const TextareaRenderer = ({\n props,\n bindings,\n emit,\n}: {\n props: z.infer<typeof textareaCatalog.props>;\n bindings?: Record<string, string>;\n emit: (event: string) => void;\n}) => {\n const bindingPath = bindings?.value;\n const { state, set } = useStateStore();\n const stateValue = bindingPath\n ? (getByPath(state, bindingPath) as string | undefined)\n : undefined;\n const value = bindingPath ? (stateValue ?? props.value ?? \"\") : (props.value ?? \"\");\n\n return (\n <Textarea\n label={props.label}\n value={value}\n {...definedProps({\n placeholder: props.placeholder,\n description: props.description,\n moreInfo: props.moreInfo,\n rows: props.rows,\n disabled: props.disabled,\n })}\n onChange={(e) => {\n if (bindingPath) {\n set(bindingPath, e.target.value);\n }\n emit(\"change\");\n }}\n />\n );\n};\n","import type { CatalogEntry } from \"../../types\";\nimport { ALL_RENDERERS } from \"../../types\";\n\nimport { AlertRenderer, alertCatalog } from \"./alert\";\nimport { BadgeRenderer, badgeCatalog } from \"./badge\";\nimport { BarChartRenderer, barChartCatalog } from \"./bar-chart\";\nimport { ButtonRenderer, buttonCatalog } from \"./button\";\nimport { CardRenderer, cardCatalog } from \"./card\";\nimport { baseComponents, catalog } from \"./catalog-def\";\nimport { CheckboxRenderer, checkboxCatalog } from \"./checkbox\";\nimport { ChipRenderer, chipCatalog } from \"./chip\";\nimport { DividerRenderer, dividerCatalog } from \"./divider\";\nimport { DonutChartRenderer, donutChartCatalog } from \"./donut-chart\";\nimport { FlexRenderer, flexCatalog } from \"./flex\";\nimport { GridRenderer, gridCatalog } from \"./grid\";\nimport { IconRenderer, iconCatalog } from \"./icon\";\nimport { InputRenderer, inputCatalog } from \"./input\";\nimport { LineChartRenderer, lineChartCatalog } from \"./line-chart\";\nimport { LinkRenderer, linkCatalog } from \"./link\";\nimport { ListboxRenderer, listboxCatalog } from \"./listbox\";\nimport { ProgressBarRenderer, progressBarCatalog } from \"./progress-bar\";\nimport { RadioGroupRenderer, radioGroupCatalog } from \"./radio-group\";\nimport { SwitchRenderer, switchCatalog } from \"./switch\";\nimport { TextRenderer, textCatalog } from \"./text\";\nimport { TextareaRenderer, textareaCatalog } from \"./textarea\";\n\nexport { baseComponents, catalog };\n\nexport const coreCatalogEntries: CatalogEntry[] = [\n { name: \"Text\", catalog: textCatalog, renderer: TextRenderer, renderers: ALL_RENDERERS },\n { name: \"Card\", catalog: cardCatalog, renderer: CardRenderer, renderers: ALL_RENDERERS },\n { name: \"Flex\", catalog: flexCatalog, renderer: FlexRenderer, renderers: ALL_RENDERERS },\n { name: \"Grid\", catalog: gridCatalog, renderer: GridRenderer, renderers: ALL_RENDERERS },\n { name: \"Alert\", catalog: alertCatalog, renderer: AlertRenderer, renderers: ALL_RENDERERS },\n { name: \"Divider\", catalog: dividerCatalog, renderer: DividerRenderer, renderers: ALL_RENDERERS },\n { name: \"Icon\", catalog: iconCatalog, renderer: IconRenderer, renderers: ALL_RENDERERS },\n { name: \"Badge\", catalog: badgeCatalog, renderer: BadgeRenderer, renderers: ALL_RENDERERS },\n { name: \"Chip\", catalog: chipCatalog, renderer: ChipRenderer, renderers: ALL_RENDERERS },\n { name: \"Link\", catalog: linkCatalog, renderer: LinkRenderer, renderers: ALL_RENDERERS },\n {\n name: \"ProgressBar\",\n catalog: progressBarCatalog,\n renderer: ProgressBarRenderer,\n renderers: ALL_RENDERERS,\n },\n {\n name: \"BarChart\",\n catalog: barChartCatalog,\n renderer: BarChartRenderer,\n renderers: ALL_RENDERERS,\n },\n {\n name: \"DonutChart\",\n catalog: donutChartCatalog,\n renderer: DonutChartRenderer,\n renderers: ALL_RENDERERS,\n },\n {\n name: \"LineChart\",\n catalog: lineChartCatalog,\n renderer: LineChartRenderer,\n renderers: ALL_RENDERERS,\n },\n { name: \"Button\", catalog: buttonCatalog, renderer: ButtonRenderer, renderers: ALL_RENDERERS },\n {\n name: \"Checkbox\",\n catalog: checkboxCatalog,\n renderer: CheckboxRenderer,\n renderers: ALL_RENDERERS,\n },\n { name: \"Input\", catalog: inputCatalog, renderer: InputRenderer, renderers: ALL_RENDERERS },\n {\n name: \"Textarea\",\n catalog: textareaCatalog,\n renderer: TextareaRenderer,\n renderers: ALL_RENDERERS,\n },\n { name: \"Listbox\", catalog: listboxCatalog, renderer: ListboxRenderer, renderers: ALL_RENDERERS },\n {\n name: \"RadioGroup\",\n catalog: radioGroupCatalog,\n renderer: RadioGroupRenderer,\n renderers: ALL_RENDERERS,\n },\n { name: \"Switch\", catalog: switchCatalog, renderer: SwitchRenderer, renderers: ALL_RENDERERS },\n];\n\nexport const baseRenderers = Object.fromEntries(\n coreCatalogEntries.map(({ name, renderer }) => [name, renderer]),\n);\n","import { type Catalog, defineCatalog } from \"@json-render/core\";\nimport { schema } from \"@json-render/react/schema\";\nimport type { z } from \"zod\";\n\nimport { actionsCatalog } from \"./core/actions\";\nimport { baseComponents } from \"./core/catalog/schemas\";\n\nexport interface ComponentCatalogDef {\n props: z.ZodType;\n slots: string[];\n description: string;\n}\n\nexport interface ActionCatalogDef {\n params: z.ZodType;\n description: string;\n}\n\nexport interface TeamCatalogDef {\n prefix: string;\n components?: Record<string, ComponentCatalogDef>;\n actions?: Record<string, ActionCatalogDef>;\n /** Appended to base rules in generated prompt */\n rules?: string;\n}\n\nexport interface MergedCatalog {\n prefix: string;\n catalog: Catalog;\n prompt(baseRules: string): string;\n jsonSchema(): object;\n}\n\nexport function createTeamCatalog(def: TeamCatalogDef): TeamCatalogDef {\n return def;\n}\n\nexport function mergeCatalogs(teamDef: TeamCatalogDef): MergedCatalog {\n const mergedComponents = {\n ...baseComponents,\n ...(teamDef.components ?? {}),\n } as Record<string, ComponentCatalogDef>;\n\n const prefixedTeamActions = Object.fromEntries(\n Object.entries(teamDef.actions ?? {}).map(([key, val]) => [`${teamDef.prefix}.${key}`, val]),\n );\n\n const mergedActions = {\n ...actionsCatalog,\n ...prefixedTeamActions,\n } as Record<string, ActionCatalogDef>;\n\n const mergedCatalog = defineCatalog(schema, {\n components: mergedComponents,\n actions: mergedActions,\n });\n\n return {\n prefix: teamDef.prefix,\n catalog: mergedCatalog,\n prompt(baseRules: string): string {\n const parts = [mergedCatalog.prompt(), \"\\n\", baseRules];\n if (teamDef.rules) {\n parts.push(\"\\n\", teamDef.rules);\n }\n return parts.join(\"\");\n },\n jsonSchema(): object {\n return mergedCatalog.jsonSchema();\n },\n };\n}\n","import { z } from \"zod\";\n\nexport const revenueCardCatalog = {\n props: z.object({\n title: z.string(),\n value: z.string(),\n trend: z.enum([\"up\", \"down\", \"flat\"]).optional(),\n delta: z.string().optional(),\n }),\n slots: [] as string[],\n description:\n 'KPI metric card. trend: up=green↑ down=red↓ flat=grey→. delta e.g. \"+12% vs last month\". Leaf node — no children.',\n};\n","import { primitive, semantic } from \"@servicetitan/carto-tokens/vanilla-extract\";\nimport { type RecipeVariants, recipe } from \"@vanilla-extract/recipes\";\n\nexport const trendText = recipe({\n base: {\n fontWeight: primitive.font.weight[\"600\"],\n // TODO(carto-tokens): adopt a component/semantic typography token for 13px eyebrow-adjacent sizing.\n fontSize: \"13px\",\n },\n variants: {\n trend: {\n up: { color: primitive.color.green[\"600\"] },\n down: { color: primitive.color.red[\"600\"] },\n flat: { color: semantic.foreground.color.subtle },\n },\n },\n});\n\nexport type TrendTextVariants = RecipeVariants<typeof trendText>;\n","import { Card, Flex, Text } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { revenueCardCatalog } from \"./revenue-card.catalog\";\nimport { trendText } from \"./revenue-card.css\";\n\nexport { revenueCardCatalog };\n\nexport const RevenueCardRenderer = ({\n props,\n}: {\n props: z.infer<typeof revenueCardCatalog.props>;\n}) => {\n const trend = props.trend ?? \"flat\";\n const trendIcon = props.trend === \"up\" ? \"↑\" : props.trend === \"down\" ? \"↓\" : \"→\";\n const trendClassName = trendText({ trend });\n\n return (\n <Card>\n <Flex direction=\"column\" gap=\"2\">\n <Text variant=\"eyebrow\">{props.title}</Text>\n <Text variant=\"headline\" el=\"h3\">\n {props.value}\n </Text>\n {props.delta && (\n <Flex direction=\"row\" gap=\"1\" alignItems=\"center\">\n <span className={trendClassName}>{trendIcon}</span>\n <Text variant=\"eyebrow\" className={trendClassName}>\n {props.delta}\n </Text>\n </Flex>\n )}\n </Flex>\n </Card>\n );\n};\n","import type { CatalogEntry } from \"../../types\";\nimport { ALL_RENDERERS } from \"../../types\";\n\nimport { marketingCatalog } from \"./catalog\";\nimport { RevenueCardRenderer } from \"./components/revenue-card\";\nimport { revenueCardCatalog } from \"./components/revenue-card.catalog\";\n\nexport { marketingRenderers } from \"./components\";\nexport { marketingCatalog };\n\nexport const marketingCatalogEntries: CatalogEntry[] = [\n {\n name: \"RevenueCard\",\n catalog: revenueCardCatalog,\n renderer: RevenueCardRenderer,\n renderers: ALL_RENDERERS,\n },\n];\n\nexport { teams } from \"./teams\";\n","import type { AllComponentRenderers } from \"./renderers/types\";\nimport type { ComponentCatalogDef } from \"./team-catalog\";\nimport type { CatalogEntry, RendererContext } from \"./types\";\n\nexport function filterCatalogEntries(\n entries: CatalogEntry[],\n renderer: RendererContext,\n): CatalogEntry[] {\n return entries.filter(({ renderers }) => renderers.includes(renderer));\n}\n\nexport function toComponentCatalogMap(\n entries: CatalogEntry[],\n): Record<string, ComponentCatalogDef> {\n return Object.fromEntries(entries.map(({ name, catalog }) => [name, catalog]));\n}\n\nexport function toComponentRendererMap(entries: CatalogEntry[]): AllComponentRenderers {\n return Object.fromEntries(\n entries.map(({ name, renderer }) => [name, renderer]),\n ) as AllComponentRenderers;\n}\n","import { defineCatalog } from \"@json-render/core\";\nimport { type Components, defineRegistry } from \"@json-render/react\";\nimport { schema } from \"@json-render/react/schema\";\n\nimport { actionsCatalog, actionsHandlers } from \"./core/actions\";\nimport { coreCatalogEntries } from \"./core/catalog\";\nimport { catalog as coreCatalog } from \"./core/catalog/catalog-def\";\nimport { marketingCatalogEntries } from \"./marketing/catalog\";\nimport {\n filterCatalogEntries,\n toComponentCatalogMap,\n toComponentRendererMap,\n} from \"./registry-utils\";\nimport type { RendererContext } from \"./types\";\n\nconst allCatalogEntries = [...coreCatalogEntries, ...marketingCatalogEntries];\n\nexport function getRegistry(renderer: RendererContext = \"chat\") {\n const filtered = filterCatalogEntries(allCatalogEntries, renderer);\n const components = toComponentCatalogMap(filtered);\n const renderers = toComponentRendererMap(filtered);\n\n const catalog = defineCatalog(schema, {\n components,\n actions: actionsCatalog,\n });\n\n return defineRegistry(catalog, {\n components: renderers as Components<typeof catalog>,\n actions: actionsHandlers,\n });\n}\n\n/** Default chat registry — preserves parity with the original flat registry export. */\nconst defaultRegistry = getRegistry(\"chat\");\n\nexport const registry = defaultRegistry.registry;\nexport const handlers = defaultRegistry.handlers;\nexport const executeAction = defaultRegistry.executeAction;\n\n/** Core catalog used for schema generation and prompt artifacts. */\nexport { coreCatalog as catalog };\n","import type { Spec } from \"@json-render/core\";\n\n/**\n * Enrich the spec so every Button element automatically gets\n * on.press → submitUserAction wired up, using the button's element key\n * as actionId. Buttons that already have on.press are left untouched.\n */\nexport function enrichButtonActions(spec: Spec): Spec {\n const elements = { ...spec.elements };\n for (const [key, element] of Object.entries(elements)) {\n if (element.type !== \"Button\") {\n continue;\n }\n if (element.on?.press) {\n continue;\n }\n const actionId = key;\n elements[key] = {\n ...element,\n on: {\n ...element.on,\n press: { action: \"atlas.submitUserAction\", params: { actionId } },\n },\n };\n }\n return { ...spec, elements };\n}\n","import type { Spec } from \"@json-render/core\";\nimport { useMemo } from \"react\";\n\nexport type SpecEnrichment = (spec: Spec) => Spec;\n\nexport function useEnrichedSpec(spec: Spec, enrichments: SpecEnrichment[]): Spec {\n return useMemo(\n () => enrichments.reduce((enriched, enrich) => enrich(enriched), spec),\n [spec, enrichments],\n );\n}\n","import type { Spec } from \"@json-render/core\";\nimport {\n type ComponentRegistry,\n createStateStore,\n type DefineRegistryResult,\n JSONUIProvider,\n Renderer,\n} from \"@json-render/react\";\nimport { useMemo, useRef } from \"react\";\nimport { enrichButtonActions } from \"./internal/enrichments/button-actions\";\nimport { useEnrichedSpec } from \"./internal/enrichments/useEnrichedSpec\";\n\nconst SPEC_ENRICHMENTS = [enrichButtonActions];\n\ntype SetState = (path: string, value: unknown) => void;\n\nexport interface SpecActionHelpers {\n setState: SetState;\n getSnapshot: () => Record<string, unknown>;\n}\n\nexport type SpecActionHandler = (params: unknown) => void | Promise<void>;\n\nexport type SpecActionsFactory = (helpers: SpecActionHelpers) => Record<string, SpecActionHandler>;\n\nexport interface SpecRendererProps {\n spec: Spec;\n registry: ComponentRegistry;\n handlers: DefineRegistryResult[\"handlers\"];\n /**\n * Build the runtime action handlers for this spec. Called with helpers that\n * expose the spec's local state store (`setState` for writing back,\n * `getSnapshot` for reading the current form data). Handlers returned here\n * are merged on top of the catalog defaults from `handlers`, so hosts can\n * implement any action declared in the catalog (e.g. `atlas.submitUserAction`,\n * `atlas.navigate`, `atlas.toolCall`) without changes to this package.\n */\n actions?: SpecActionsFactory;\n}\n\nexport const SpecRenderer = ({ spec, registry, handlers, actions }: SpecRendererProps) => {\n const enrichedSpec = useEnrichedSpec(spec, SPEC_ENRICHMENTS);\n\n const specRef = useRef<Spec | null>(null);\n const storeRef = useRef<ReturnType<typeof createStateStore> | null>(null);\n if (specRef.current !== spec) {\n specRef.current = spec;\n const specState = (enrichedSpec as unknown as { state?: Record<string, unknown> }).state ?? {};\n storeRef.current = createStateStore(specState);\n }\n if (storeRef.current === null) {\n throw new Error(\"State store is not initialized\");\n }\n const store = storeRef.current;\n\n const resolvedHandlers = useMemo(() => {\n const base = handlers(\n () => undefined,\n () => store.getSnapshot(),\n );\n const hostActions = actions\n ? actions({ setState: store.set, getSnapshot: () => store.getSnapshot() })\n : {};\n return { ...base, ...hostActions };\n }, [handlers, actions, store]);\n\n const functions = useMemo(\n () => ({\n computeTotal: (args: Record<string, unknown>) => {\n const qty = Number.parseFloat(String((args.quantity as number | string) ?? 0)) || 0;\n const price =\n Number.parseFloat(\n String((args.unitPrice as number | string) ?? \"0\").replace(/[^0-9.]/g, \"\"),\n ) || 0;\n return `$${(qty * price).toFixed(2)}`;\n },\n }),\n [],\n );\n\n return (\n <JSONUIProvider\n registry={registry}\n store={store}\n handlers={resolvedHandlers}\n functions={functions}\n >\n <Renderer spec={enrichedSpec} registry={registry} />\n </JSONUIProvider>\n );\n};\n"],"x_google_ignoreList":[46],"mappings":"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"}
|
package/dist/team-catalog.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { Catalog } from '@json-render/core';
|
|
2
|
-
import { z } from 'zod';
|
|
3
|
-
export interface ComponentCatalogDef {
|
|
4
|
-
props: z.ZodType;
|
|
5
|
-
slots: string[];
|
|
6
|
-
description: string;
|
|
7
|
-
}
|
|
8
|
-
export interface ActionCatalogDef {
|
|
9
|
-
params: z.ZodType;
|
|
10
|
-
description: string;
|
|
11
|
-
}
|
|
12
|
-
export interface TeamCatalogDef {
|
|
13
|
-
prefix: string;
|
|
14
|
-
components?: Record<string, ComponentCatalogDef>;
|
|
15
|
-
actions?: Record<string, ActionCatalogDef>;
|
|
16
|
-
/** Appended to base rules in generated prompt */
|
|
17
|
-
rules?: string;
|
|
18
|
-
}
|
|
19
|
-
export interface MergedCatalog {
|
|
20
|
-
prefix: string;
|
|
21
|
-
catalog: Catalog;
|
|
22
|
-
prompt(baseRules: string): string;
|
|
23
|
-
jsonSchema(): object;
|
|
24
|
-
}
|
|
25
|
-
export declare function createTeamCatalog(def: TeamCatalogDef): TeamCatalogDef;
|
|
26
|
-
export declare function mergeCatalogs(teamDef: TeamCatalogDef): MergedCatalog;
|