@altertable/data-app 0.65.0 → 0.67.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 (202) hide show
  1. package/AGENTS.md +38 -1
  2. package/CONTRIBUTING.md +54 -14
  3. package/README.md +1 -1
  4. package/dist/chunks/index-23dktynd.js +80 -0
  5. package/dist/chunks/index-23dktynd.js.map +10 -0
  6. package/dist/chunks/index-8qfxv0h5.js +14160 -0
  7. package/dist/chunks/index-8qfxv0h5.js.map +108 -0
  8. package/dist/chunks/index-ag0cgnvq.js +639 -0
  9. package/dist/chunks/index-ag0cgnvq.js.map +13 -0
  10. package/dist/chunks/index-dq7b35fn.js +307 -0
  11. package/dist/chunks/index-dq7b35fn.js.map +13 -0
  12. package/dist/chunks/{contract-a061yj6r.js → index-ev2b5aaf.js} +41 -72
  13. package/dist/chunks/index-ev2b5aaf.js.map +12 -0
  14. package/dist/chunks/{contract-awa2d5b1.js → index-f5cnbrjz.js} +19 -2
  15. package/dist/chunks/{contract-awa2d5b1.js.map → index-f5cnbrjz.js.map} +4 -3
  16. package/dist/chunks/{contract-sm7j7k95.js → index-ktmvs916.js} +9 -150
  17. package/dist/chunks/index-ktmvs916.js.map +13 -0
  18. package/dist/chunks/{contract-txjy0en2.js → index-m6n8ctfc.js} +64 -72
  19. package/dist/chunks/index-m6n8ctfc.js.map +10 -0
  20. package/dist/chunks/index-mt93ff2b.js +28 -0
  21. package/dist/chunks/index-mt93ff2b.js.map +10 -0
  22. package/dist/chunks/{contract-tf8c3qpv.js → index-qd5xgx6y.js} +46 -5
  23. package/dist/chunks/index-qd5xgx6y.js.map +13 -0
  24. package/dist/chunks/index-x69p7cv7.js +149 -0
  25. package/dist/chunks/index-x69p7cv7.js.map +10 -0
  26. package/dist/client/index.js +12 -7
  27. package/dist/client/index.js.map +1 -1
  28. package/dist/core/appearance.js +1 -1
  29. package/dist/core/config.js +7 -3
  30. package/dist/core/config.js.map +1 -1
  31. package/dist/core/contract.js +24 -6
  32. package/dist/core/contract.js.map +1 -1
  33. package/dist/core/format.js +1 -1
  34. package/dist/embed/index.js +16 -12
  35. package/dist/embed/index.js.map +4 -4
  36. package/dist/index.js +12 -0
  37. package/dist/index.js.map +9 -0
  38. package/dist/local.js +20 -30
  39. package/dist/local.js.map +7 -8
  40. package/dist/react/embed/index.js +1 -1
  41. package/dist/react/embed/index.js.map +2 -2
  42. package/dist/react/index.js +2567 -11542
  43. package/dist/react/index.js.map +16 -91
  44. package/dist/react/ui/index.js +2272 -0
  45. package/dist/react/ui/index.js.map +28 -0
  46. package/dist/server.js +13 -26
  47. package/dist/server.js.map +6 -7
  48. package/dist/types/client/annotations.d.ts +27 -0
  49. package/dist/types/client/data-client.d.ts +1 -2
  50. package/dist/types/client/iframe.d.ts +4 -2
  51. package/dist/types/client/index.d.ts +1 -0
  52. package/dist/types/core/annotations.d.ts +94 -0
  53. package/dist/types/core/appearance.d.ts +2 -2
  54. package/dist/types/core/config.d.ts +48 -4
  55. package/dist/types/core/contract.d.ts +21 -11
  56. package/dist/types/core/dimension.d.ts +6 -4
  57. package/dist/types/core/filters.d.ts +44 -0
  58. package/dist/types/core/messages.d.ts +2 -0
  59. package/dist/types/core/operation-types.d.ts +5 -2
  60. package/dist/types/core/operation.d.ts +3 -4
  61. package/dist/types/core/presentation.d.ts +2 -0
  62. package/dist/types/core/queries.d.ts +16 -0
  63. package/dist/types/core/uuid.d.ts +2 -0
  64. package/dist/types/core/variables.d.ts +34 -18
  65. package/dist/types/embed/runtime-html.d.ts +2 -0
  66. package/dist/types/embed/source.d.ts +2 -1
  67. package/dist/types/index.d.ts +3 -0
  68. package/dist/types/react/annotations/AnnotationBar.d.ts +30 -0
  69. package/dist/types/react/annotations/AnnotationControls.d.ts +10 -0
  70. package/dist/types/react/annotations/AnnotationEditor.d.ts +16 -0
  71. package/dist/types/react/annotations/AnnotationMarkers.d.ts +19 -0
  72. package/dist/types/react/annotations/AnnotationSelectionLayer.d.ts +12 -0
  73. package/dist/types/react/annotations/AnnotationTarget.d.ts +9 -0
  74. package/dist/types/react/annotations/AnnotationTooltip.d.ts +9 -0
  75. package/dist/types/react/annotations/AnnotationTrigger.d.ts +10 -0
  76. package/dist/types/react/annotations/annotation-editor-state.d.ts +56 -0
  77. package/dist/types/react/annotations/annotation-screenshot.d.ts +4 -0
  78. package/dist/types/react/annotations/annotation-targets.d.ts +33 -0
  79. package/dist/types/react/annotations/getAnnotationProps.d.ts +15 -0
  80. package/dist/types/react/annotations/styles.d.ts +3 -0
  81. package/dist/types/react/annotations/useAnnotationGeometry.d.ts +22 -0
  82. package/dist/types/react/annotations/useDataAppAnnotations.d.ts +22 -0
  83. package/dist/types/react/app-context.d.ts +3 -0
  84. package/dist/types/react/bindings.d.ts +110 -0
  85. package/dist/types/react/content.d.ts +24 -11
  86. package/dist/types/react/hooks.d.ts +29 -787
  87. package/dist/types/react/index.d.ts +31 -106
  88. package/dist/types/react/mount.d.ts +6 -4
  89. package/dist/types/react/source-owner.d.ts +2 -0
  90. package/dist/types/react/style-contract.d.ts +80 -0
  91. package/dist/types/react/style-validation.d.ts +2 -0
  92. package/dist/types/react/ui/AboutData.d.ts +9 -1
  93. package/dist/types/react/ui/AppHeader.d.ts +1 -2
  94. package/dist/types/react/ui/AppLayout.d.ts +3 -9
  95. package/dist/types/react/ui/AppToolbar.d.ts +5 -8
  96. package/dist/types/react/ui/AreaChart.d.ts +7 -0
  97. package/dist/types/react/ui/BarChart.d.ts +6 -0
  98. package/dist/types/react/ui/Button.d.ts +3 -3
  99. package/dist/types/react/ui/ChartLegend.d.ts +31 -0
  100. package/dist/types/react/ui/Checkbox.d.ts +15 -4
  101. package/dist/types/react/ui/CheckboxGroup.d.ts +7 -0
  102. package/dist/types/react/ui/{Combobox.d.ts → ChoicePicker.d.ts} +10 -15
  103. package/dist/types/react/ui/{ComparisonVisual.d.ts → Comparison.d.ts} +3 -3
  104. package/dist/types/react/ui/ComposedChart.d.ts +41 -0
  105. package/dist/types/react/ui/ComposedChartLegend.d.ts +8 -0
  106. package/dist/types/react/ui/ContentSkeleton.d.ts +2 -0
  107. package/dist/types/react/ui/DataApp.d.ts +17 -58
  108. package/dist/types/react/ui/DataAppFrame.d.ts +41 -0
  109. package/dist/types/react/ui/DataBoundary.d.ts +4 -5
  110. package/dist/types/react/ui/DataSection.d.ts +6 -18
  111. package/dist/types/react/ui/DataSectionBoundary.d.ts +30 -0
  112. package/dist/types/react/ui/DataValue.d.ts +9 -0
  113. package/dist/types/react/ui/DataWidget.d.ts +2 -1
  114. package/dist/types/react/ui/DateTimeTooltip.d.ts +1 -1
  115. package/dist/types/react/ui/DimensionPicker.d.ts +1 -1
  116. package/dist/types/react/ui/ExportControl.d.ts +1 -1
  117. package/dist/types/react/ui/FilterActions.d.ts +10 -0
  118. package/dist/types/react/ui/FilterBar.d.ts +3 -0
  119. package/dist/types/react/ui/GettingStarted.d.ts +2 -4
  120. package/dist/types/react/ui/HelpPopover.d.ts +3 -4
  121. package/dist/types/react/ui/InspectionContext.d.ts +2 -0
  122. package/dist/types/react/ui/InspectionProvider.d.ts +29 -0
  123. package/dist/types/react/ui/LineChart.d.ts +7 -0
  124. package/dist/types/react/ui/Menu.d.ts +12 -0
  125. package/dist/types/react/ui/MetricWidget.d.ts +4 -3
  126. package/dist/types/react/ui/NumberField.d.ts +27 -0
  127. package/dist/types/react/ui/NumberFilterPicker.d.ts +9 -0
  128. package/dist/types/react/ui/PieChart.d.ts +11 -0
  129. package/dist/types/react/ui/PresentStory.d.ts +2 -5
  130. package/dist/types/react/ui/RadioGroup.d.ts +18 -0
  131. package/dist/types/react/ui/RefreshControl.d.ts +1 -2
  132. package/dist/types/react/ui/ScatterChart.d.ts +17 -0
  133. package/dist/types/react/ui/SearchField.d.ts +1 -2
  134. package/dist/types/react/ui/SearchInput.d.ts +3 -1
  135. package/dist/types/react/ui/Select.d.ts +14 -0
  136. package/dist/types/react/ui/SelectionMark.d.ts +2 -1
  137. package/dist/types/react/ui/Sheet.d.ts +2 -1
  138. package/dist/types/react/ui/Skeleton.d.ts +5 -2
  139. package/dist/types/react/ui/StaticDataApp.d.ts +4 -0
  140. package/dist/types/react/ui/TableWidget.d.ts +19 -16
  141. package/dist/types/react/ui/Tabs.d.ts +6 -2
  142. package/dist/types/react/ui/TextWidget.d.ts +2 -1
  143. package/dist/types/react/ui/Tooltip.d.ts +4 -3
  144. package/dist/types/react/ui/TooltipSurface.d.ts +3 -0
  145. package/dist/types/react/ui/TrendChart.d.ts +5 -0
  146. package/dist/types/react/ui/UpdatedAt.d.ts +1 -1
  147. package/dist/types/react/ui/VisualizationWidget.d.ts +12 -13
  148. package/dist/types/react/ui/WidgetViewTabs.d.ts +1 -1
  149. package/dist/types/react/ui/chart-data.d.ts +25 -0
  150. package/dist/types/react/ui/chart-primitives.d.ts +20 -0
  151. package/dist/types/react/ui/data-context.d.ts +18 -7
  152. package/dist/types/react/ui/icons.d.ts +2 -0
  153. package/dist/types/react/ui/index.d.ts +98 -0
  154. package/dist/types/react/ui/keyboard.d.ts +6 -0
  155. package/dist/types/react/ui/metric.d.ts +1 -1
  156. package/dist/types/react/ui/presentation.d.ts +5 -1
  157. package/dist/types/react/ui/shortcuts.d.ts +14 -1
  158. package/dist/types/react/ui/useAppAppearance.d.ts +1 -1
  159. package/dist/types/react/ui/variables.d.ts +4 -2
  160. package/dist/types/react/view-controls.d.ts +3 -1
  161. package/dist/types/react/view-runtime.d.ts +29 -0
  162. package/dist/types/react/view.d.ts +21 -4
  163. package/dist/types/react/widgets.d.ts +79 -0
  164. package/dist/types/server/handler.d.ts +4 -4
  165. package/dist/worker.js +20 -737
  166. package/docs/app-authoring.md +72 -50
  167. package/docs/client.md +8 -8
  168. package/docs/contract.md +42 -20
  169. package/docs/data-context.md +91 -0
  170. package/docs/embed.md +10 -2
  171. package/docs/formatting-and-appearance.md +68 -0
  172. package/docs/hosted-apps.md +9 -15
  173. package/docs/layout.md +5 -3
  174. package/docs/react-embed.md +5 -4
  175. package/docs/react.md +22 -317
  176. package/docs/server-bun.md +1 -1
  177. package/docs/server.md +4 -4
  178. package/docs/stories-and-export.md +52 -0
  179. package/docs/styling.md +62 -0
  180. package/docs/ui-quality.md +20 -0
  181. package/docs/ui.md +196 -0
  182. package/docs/variables.md +171 -0
  183. package/docs/views.md +123 -0
  184. package/docs/widgets.md +145 -0
  185. package/examples/starter-data-app/index.tsx +115 -86
  186. package/package.json +25 -12
  187. package/dist/chunks/contract-a061yj6r.js.map +0 -12
  188. package/dist/chunks/contract-g6hky7x6.js +0 -282
  189. package/dist/chunks/contract-g6hky7x6.js.map +0 -12
  190. package/dist/chunks/contract-sm7j7k95.js.map +0 -14
  191. package/dist/chunks/contract-tf8c3qpv.js.map +0 -11
  192. package/dist/chunks/contract-txjy0en2.js.map +0 -10
  193. package/dist/chunks/contract-wz59z8pq.js +0 -8
  194. package/dist/chunks/contract-wz59z8pq.js.map +0 -10
  195. package/dist/chunks/contract-yxbjea23.js +0 -328
  196. package/dist/chunks/contract-yxbjea23.js.map +0 -12
  197. package/dist/types/react/ui/RefreshRegion.d.ts +0 -9
  198. package/dist/types/react/ui/SelectableBarChart.d.ts +0 -15
  199. package/docs/releasing.md +0 -79
  200. /package/dist/chunks/{contract-mev09s5v.js → index-mev09s5v.js} +0 -0
  201. /package/dist/chunks/{contract-mev09s5v.js.map → index-mev09s5v.js.map} +0 -0
  202. /package/dist/types/react/ui/{comparison.d.ts → metric-comparison.d.ts} +0 -0
@@ -1,102 +1,27 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/react/injectStyles.ts", "../src/react/styles.ts", "../src/react/shellStyles.ts", "../src/react/mount.tsx", "../src/react/hooks.ts", "../src/core/data-view.ts", "../src/react/ui/classNames.ts", "../src/react/ui/icons.ts", "../src/react/ui/PeriodSummary.tsx", "../src/core/date-range.ts", "../src/core/variables.ts", "../src/react/ui/variables.ts", "../src/react/ui/search.ts", "../src/react/content.ts", "../src/react/view.ts", "../src/react/view-controls.tsx", "../src/react/ui/SearchField.tsx", "../src/react/ui/SearchInput.tsx", "../src/react/ui/Button.tsx", "../src/react/ui/Combobox.tsx", "../src/react/ui/Skeleton.tsx", "../src/react/ui/Tooltip.tsx", "../src/react/ui/RequestHint.tsx", "../src/react/ui/GradientScroll.tsx", "../src/react/ui/SelectionMark.tsx", "../src/react/ui/SearchMatch.tsx", "../src/react/ui/searchItems.ts", "../src/react/ui/DateRangePicker.tsx", "../src/react/ui/Checkbox.tsx", "../src/react/ui/DimensionPicker.tsx", "../src/react/ui/useDataAppPresentation.ts", "../src/core/presentation.ts", "../src/react/ui/DataApp.tsx", "../src/react/ui/useAppAppearance.ts", "../src/react/ui/AboutData.tsx", "../src/react/ui/EmptyState.tsx", "../src/react/ui/shortcuts.ts", "../src/react/ui/Kbd.tsx", "../src/react/ui/QueryList.tsx", "../src/react/ui/Sheet.tsx", "../src/react/ui/Tabs.tsx", "../src/react/ui/InspectionContext.tsx", "../src/react/ui/AppHeader.tsx", "../src/react/ui/AltertableLogo.tsx", "../src/react/ui/AppFooter.tsx", "../src/react/ui/AppLayout.tsx", "../src/react/ui/AppScope.tsx", "../src/react/ui/ExportControl.tsx", "../src/react/ui/csv-export.ts", "../src/react/ui/IconButton.tsx", "../src/react/ui/Toast.tsx", "../src/react/ui/LiveControl.tsx", "../src/react/ui/PresentStory.tsx", "../src/react/ui/ThemeSelector.tsx", "../src/react/ui/story.ts", "../src/react/ui/RefreshControl.tsx", "../src/react/ui/AppToolbar.tsx", "../src/react/ui/VariableBar.tsx", "../src/react/ui/DataViewToast.tsx", "../src/react/ui/ContentSkeleton.tsx", "../src/react/ui/DataBoundary.tsx", "../src/react/ui/StatusPanel.tsx", "../src/react/ui/DataSection.tsx", "../src/react/ui/GettingStarted.tsx", "../src/react/ui/Stack.tsx", "../src/react/ui/Grid.tsx", "../src/react/ui/GridItem.tsx", "../src/react/ui/DataWidget.tsx", "../src/react/ui/TextContent.tsx", "../src/react/ui/TextWidget.tsx", "../src/react/ui/VisualizationWidget.tsx", "../src/react/ui/widget-views.ts", "../src/react/ui/WidgetViewTabs.tsx", "../src/react/ui/TableWidget.tsx", "../src/react/ui/DateTimeTooltip.tsx", "../src/react/ui/HelpPopover.tsx", "../src/react/ui/DataTable.tsx", "../src/react/ui/chartColor.ts", "../src/react/ui/Breakdown.tsx", "../src/react/ui/Ranking.tsx", "../src/react/ui/WidgetDisclosure.tsx", "../src/react/ui/comparison.ts", "../src/react/ui/metric.ts", "../src/react/ui/ComparisonVisual.tsx", "../src/react/ui/MetricWidget.tsx", "../src/react/ui/SelectableBarChart.tsx", "../src/react/ui/DataAppSkeleton.tsx", "../src/react/ui/RefreshRegion.tsx", "../src/react/ui/UpdatedAt.tsx", "../src/react/ui/data-context.ts", "../src/react/ui/data-identifiers.tsx", "../src/react/ui/GlossaryExplanation.tsx", "../src/react/ui/GlossaryDefinition.tsx"],
3
+ "sources": ["../src/react/ui/DataApp.tsx", "../src/react/ui/Stack.tsx", "../src/react/ui/GridItem.tsx", "../src/react/widgets.tsx", "../src/react/ui/chartColor.ts", "../src/react/ui/Breakdown.tsx", "../src/react/ui/Ranking.tsx", "../src/react/ui/Comparison.tsx", "../src/react/ui/DataSection.tsx", "../src/react/ui/DataBoundary.tsx", "../src/react/ui/StatusPanel.tsx", "../src/react/ui/DataSectionBoundary.tsx", "../src/react/ui/UpdatedAt.tsx", "../src/react/ui/PeriodSummary.tsx", "../src/react/ui/data-identifiers.tsx", "../src/react/annotations/AnnotationTarget.tsx", "../src/react/annotations/AnnotationBar.tsx", "../src/react/annotations/styles.ts"],
4
4
  "sourcesContent": [
5
- "import type { DataAppStylesOptions } from '@/src/react/styles';\n\nexport function injectStyles({\n name,\n attribute,\n css,\n options,\n}: {\n name: string;\n attribute: string;\n css: string;\n options: DataAppStylesOptions;\n}): HTMLStyleElement {\n const target =\n options.document ??\n (typeof document === 'undefined' ? undefined : document);\n if (!target) throw new Error(`${name} requires a browser document.`);\n const existing = target.querySelector<HTMLStyleElement>(\n `style[${attribute}]`\n );\n if (existing) return existing;\n const style = target.createElement('style');\n style.setAttribute(attribute, '');\n if (options.nonce !== undefined) style.nonce = options.nonce;\n style.textContent = css;\n target.head.append(style);\n\n return style;\n}\n",
6
- "import { injectStyles } from '@/src/react/injectStyles';\n\n// Replaced with the compiled stylesheet by the package build.\ndeclare const DATA_APP_STYLES: string;\n\nexport interface DataAppStylesOptions {\n /** Defaults to the current browser document. */\n document?: Document;\n /** Nonce permitted by the document's style-src CSP. */\n nonce?: string;\n}\n\n/** Install the complete UI stylesheet once per document, before mounting. */\nexport function injectDataAppStyles(\n options: DataAppStylesOptions = {}\n): HTMLStyleElement {\n return injectStyles({\n name: 'injectDataAppStyles',\n attribute: 'data-altertable-styles',\n css: DATA_APP_STYLES,\n options,\n });\n}\n",
7
- "import { injectStyles } from '@/src/react/injectStyles';\nimport type { DataAppStylesOptions } from '@/src/react/styles';\n\n// Replaced with the compiled shell stylesheet by the package build.\ndeclare const SHELL_STYLES: string;\n\n/** Install shared layout, widget surface, and skeleton styles once per document, before mounting. */\nexport function injectDataAppShellStyles(\n options: DataAppStylesOptions = {}\n): HTMLStyleElement {\n return injectStyles({\n name: 'injectDataAppShellStyles',\n attribute: 'data-altertable-shell-styles',\n css: SHELL_STYLES,\n options,\n });\n}\n",
8
- "import { useState, type ComponentType, type ReactNode } from 'react';\nimport { getDataAppTransport } from '@/src/client/iframe';\nimport { getDataAppNavigation } from '@/src/client/navigation';\nimport { createRoot } from 'react-dom/client';\nimport { invariant } from '@/src/core/invariant';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { dataAppTitle, type DataAppConfig } from '@/src/core/config';\n\n/** Mount once per document; installs document identity and the shared request provider. */\nexport function mountDataApp({\n config,\n component: Component,\n root = document.getElementById('root'),\n}: {\n config: DataAppConfig;\n component: ComponentType;\n root?: HTMLElement | null;\n}): void {\n invariant(root, 'Data app root element is missing.');\n document.documentElement.lang = navigator.language;\n document.title = dataAppTitle(config);\n getDataAppNavigation();\n createRoot(root, {\n onUncaughtError(error) {\n console.error(error);\n getDataAppTransport()?.fail();\n },\n }).render(\n <DataAppProvider>\n <Component />\n </DataAppProvider>\n );\n}\n\nexport function DataAppProvider({ children }: { children: ReactNode }) {\n const [client] = useState(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: {\n retry: false,\n refetchOnWindowFocus: false,\n staleTime: 30_000,\n },\n },\n })\n );\n\n return <QueryClientProvider client={client}>{children}</QueryClientProvider>;\n}\n",
9
- "import { useState, type ReactNode } from 'react';\nimport { hashKey, useQuery, useQueryClient } from '@tanstack/react-query';\nimport type { DataOperations, DateRangeRequest } from '@/src/core/contract';\nimport type { DataClient } from '@/src/client/data-client';\nimport type { InputOf, OutputOf } from '@/src/core/operation-types';\nimport { displayedSnapshot, resolveDataView } from '@/src/core/data-view';\nimport {\n reportingPeriodText,\n type ReportingPeriod,\n} from '@/src/react/ui/PeriodSummary';\nimport {\n defineAppVariables,\n type VariableCollection,\n} from '@/src/core/variables';\nimport {\n dateRangeVariable,\n type DateRangeVariableOptions,\n} from '@/src/react/ui/variables';\nimport {\n dimensionFilter,\n type DimensionFilterOptions,\n type DimensionOption,\n type DimensionValue,\n} from '@/src/core/dimension';\nimport type { EmptyContent } from '@/src/react/ui/presentation';\nimport { defineDataContent, type DataContentState } from '@/src/react/content';\nimport {\n describeViewInput,\n resolveViewInput,\n type DataViewDefinition,\n type ResolvedVariables,\n type ViewBindings,\n} from '@/src/react/view';\nimport { useViewVariables } from '@/src/react/view-controls';\n\nconst clientScopes = new WeakMap<object, string>();\n\nfunction getClientScope(client: object): string {\n let scope = clientScopes.get(client);\n if (!scope) {\n scope = crypto.randomUUID();\n clientScopes.set(client, scope);\n }\n\n return scope;\n}\n\ntype TimeVariables<Additional extends VariableCollection> = {\n period: ReturnType<typeof dateRangeVariable>;\n} & Additional;\ntype TimeInput<Additional extends VariableCollection> =\n keyof Additional extends never\n ? DateRangeRequest\n : ResolvedVariables<TimeVariables<Additional>>;\ntype TimeInputMapping<Additional extends VariableCollection, Input> =\n TimeInput<Additional> extends Input\n ? {\n input?: (values: ResolvedVariables<TimeVariables<Additional>>) => Input;\n }\n : {\n input: (values: ResolvedVariables<TimeVariables<Additional>>) => Input;\n };\n\n/**\n * `placeholderData` may belong to an earlier input. Use `useDataView` to distinguish initial\n * loading, refreshes, and changed-input requests.\n */\nexport function createDataHooks<Operations extends DataOperations>(\n client: DataClient<Operations>\n) {\n const clientScope = getClientScope(client);\n\n type QueryOptions = {\n enabled?: boolean;\n staleTime?: number;\n gcTime?: number;\n refetchOnWindowFocus?: boolean;\n };\n\n function useDataQuery<Name extends keyof Operations & string>(\n name: Name,\n input: InputOf<Operations[Name]>,\n options?: QueryOptions\n ) {\n const queryClient = useQueryClient();\n const queryKey = ['data-operation', clientScope, name, input] as const;\n const query = useQuery({\n queryKey,\n queryFn({ signal }) {\n return client.query(name, input, { signal });\n },\n placeholderData(previousData, previousQuery) {\n return previousQuery?.queryKey[1] === clientScope &&\n previousQuery.queryKey[2] === name\n ? previousData\n : undefined;\n },\n enabled: options?.enabled,\n ...(options?.staleTime !== undefined && { staleTime: options.staleTime }),\n ...(options?.gcTime !== undefined && { gcTime: options.gcTime }),\n ...(options?.refetchOnWindowFocus !== undefined && {\n refetchOnWindowFocus: options.refetchOnWindowFocus,\n }),\n });\n\n return {\n ...query,\n /** Abort the current request and restore its prior query state. */\n cancel(this: void) {\n return queryClient.cancelQueries({ queryKey, exact: true });\n },\n };\n }\n\n /** Join a typed request with its displayed-data state. Pass the result to\n * `DataApp.request` or `DataSection.result`.\n * `isEmpty` is app-owned so a measured zero remains valid. Previous-input data\n * stays labeled through refreshes and errors. Input equality uses React Query's\n * stable key hash by default; override `sameInput` for a custom equivalence rule. */\n\n function useDataView<Name extends keyof Operations & string>(\n name: Name,\n input: InputOf<Operations[Name]>,\n options: QueryOptions & {\n isEmpty: (data: OutputOf<Operations[Name]>) => boolean;\n describeInput?: (input: InputOf<Operations[Name]>) => string;\n period?: (input: InputOf<Operations[Name]>) => ReportingPeriod;\n sameInput?: (\n left: InputOf<Operations[Name]>,\n right: InputOf<Operations[Name]>\n ) => boolean;\n }\n ) {\n const query = useDataQuery(name, input, options);\n const [last, setLast] = useState<{\n clientScope: string;\n name: Name;\n response: NonNullable<typeof query.data>;\n }>();\n if (\n query.isSuccess &&\n !query.isPlaceholderData &&\n query.data &&\n (last?.clientScope !== clientScope ||\n last.name !== name ||\n last.response !== query.data)\n ) {\n setLast({ clientScope, name, response: query.data });\n }\n const sameInput =\n options.sameInput ??\n ((left: InputOf<Operations[Name]>, right: InputOf<Operations[Name]>) =>\n hashKey([left]) === hashKey([right]));\n const response =\n query.data ??\n (last?.clientScope === clientScope && last.name === name\n ? last.response\n : undefined);\n const snapshot = response && { data: response.data, input: response.input };\n const view = resolveDataView({\n requestedInput: input,\n current:\n snapshot && !query.isPlaceholderData && sameInput(snapshot.input, input)\n ? snapshot\n : undefined,\n previous: snapshot,\n pending: query.isFetching,\n error: query.error instanceof Error ? query.error : undefined,\n sameInput,\n describe:\n options.describeInput ??\n (input =>\n options.period\n ? reportingPeriodText(options.period(input))\n : 'this view'),\n isEmpty: options.isEmpty,\n });\n\n return {\n ...query,\n view,\n snapshot: displayedSnapshot(view),\n response,\n queries: response?.queries,\n refresh: {\n refreshing: query.isFetching,\n onRefresh() {\n return void query.refetch();\n },\n onCancel: query.cancel,\n },\n };\n }\n\n function defineDataView<\n Name extends keyof Operations & string,\n const Variables extends VariableCollection,\n >(\n definition: DataViewDefinition<\n Name,\n Variables,\n InputOf<Operations[Name]>,\n OutputOf<Operations[Name]>\n >\n ) {\n const variables = defineAppVariables(definition.variables);\n\n return {\n ...definition,\n variables,\n describeInput: describeViewInput<InputOf<Operations[Name]>>(definition),\n content(\n render: (\n state: DataContentState<\n OutputOf<Operations[Name]>,\n InputOf<Operations[Name]>\n >\n ) => ReactNode\n ) {\n return defineDataContent(render, { date: definition.date?.input });\n },\n };\n }\n\n /** One time declaration owns the URL picker, operation input, and displayed-period label.\n * Without extra variables, the default input is the DateRangeRequest; with them it is\n * { period, ...variables }. Other operation shapes require an input mapper.\n * Mappers must preserve the period and dimension selections; bindings extract nested inputs.\n * Use defineDataView with describeInput for deliberately fixed-period views. */\n\n function defineTimeView<\n Name extends keyof Operations & string,\n const Additional extends VariableCollection = {},\n >(\n definition: {\n operation: Name;\n time: Omit<DateRangeVariableOptions, 'key'>;\n variables?: Additional & { period?: never };\n bindings?: ViewBindings<\n { period: ReturnType<typeof dateRangeVariable> } & NoInfer<Additional>,\n InputOf<Operations[Name]>\n >;\n isEmpty: (data: OutputOf<Operations[Name]>) => boolean;\n empty: EmptyContent;\n } & TimeInputMapping<NoInfer<Additional>, InputOf<Operations[Name]>>\n ) {\n const period = dateRangeVariable({ ...definition.time, key: 'period' });\n\n return defineDataView<Name, { period: typeof period } & Additional>({\n operation: definition.operation,\n variables: { period, ...definition.variables } as {\n period: typeof period;\n } & Additional,\n bindings: definition.bindings,\n input(values) {\n if (definition.input) return definition.input(values);\n if (!definition.variables || !Object.keys(definition.variables).length)\n return values.period as InputOf<Operations[Name]>;\n\n return { ...values } as InputOf<Operations[Name]>;\n },\n date: {\n variable: 'period' as never,\n input(input) {\n return definition.bindings?.period\n ? (definition.bindings.period(input) as DateRangeRequest)\n : ((input && typeof input === 'object' && 'period' in input\n ? input.period\n : input) as DateRangeRequest);\n },\n },\n isEmpty: definition.isEmpty,\n empty: definition.empty,\n });\n }\n\n /** Bind a facet source to a declared operation and its typed input.\n * Options are cached for 60 seconds; known values survive refreshes and errors.\n * Selected values absent from a new result remain available with a zero count. */\n\n function defineFacetFilter<\n Name extends keyof Operations & string,\n const T extends DimensionValue,\n >(\n config: Omit<DimensionFilterOptions<T>, 'options' | 'facet'> & {\n facet: {\n operation: Name;\n input: (values: Record<string, unknown>) => InputOf<Operations[Name]>;\n };\n } & (OutputOf<Operations[Name]> extends readonly DimensionOption<T>[]\n ? object\n : never)\n ) {\n return dimensionFilter<T>(config);\n }\n\n function useView<\n Name extends keyof Operations & string,\n const Variables extends VariableCollection,\n >(\n definition: DataViewDefinition<\n Name,\n Variables,\n InputOf<Operations[Name]>,\n OutputOf<Operations[Name]>\n >\n ) {\n const variables = useViewVariables(\n definition.variables,\n clientScope,\n (operation, input, signal) =>\n client\n .query(operation as keyof Operations & string, input as never, {\n signal,\n })\n .then(response => response.data)\n );\n const request = useDataView(\n definition.operation,\n resolveViewInput(definition, variables.resolved),\n {\n ...definition,\n describeInput: describeViewInput<InputOf<Operations[Name]>>(definition),\n }\n );\n\n return {\n ...request,\n view: request.view,\n snapshot: request.snapshot,\n refetch: request.refetch,\n refresh: request.refresh,\n queries: request.queries,\n empty: definition.empty,\n controls: variables.controls,\n variables,\n };\n }\n\n return {\n useDataQuery,\n useDataView,\n defineDataView,\n defineTimeView,\n defineFacetFilter,\n useView,\n };\n}\n",
10
- "export type DataView<T, Input = unknown> =\n | { kind: 'loading' }\n | { kind: 'empty'; input: Input }\n | { kind: 'error'; error: Error }\n | { kind: 'ready'; data: T; input: Input }\n | {\n kind: 'updating';\n data: T;\n requestedInput: Input;\n displayedInput: Input;\n message: string;\n }\n | {\n kind: 'stale-error';\n data: T;\n requestedInput: Input;\n displayedInput: Input;\n error: Error;\n message: string;\n };\n\nexport type DataSnapshot<Data, Input> = { data: Data; input: Input };\nexport type DisplayedSnapshot<Data, Input> = DataSnapshot<Data, Input> & {\n state: 'ready' | 'updating' | 'stale-error';\n};\n\n/** The result currently shown to the reader, including the input that produced it. */\nexport function displayedSnapshot<Data, Input>(\n view: DataView<Data, Input>\n): DisplayedSnapshot<Data, Input> | undefined {\n if (view.kind === 'ready')\n return { data: view.data, input: view.input, state: view.kind };\n if (view.kind === 'updating' || view.kind === 'stale-error')\n return { data: view.data, input: view.displayedInput, state: view.kind };\n\n return undefined;\n}\n\n/** Keep the requested input separate from the input that produced visible data. */\nexport function resolveDataView<Data, Input>({\n requestedInput,\n current,\n previous,\n pending,\n error,\n sameInput,\n describe,\n isEmpty,\n}: {\n requestedInput: Input;\n current?: DataSnapshot<Data, Input>;\n previous?: DataSnapshot<Data, Input>;\n pending: boolean;\n error?: Error;\n sameInput: (a: Input, b: Input) => boolean;\n describe: (input: Input) => string;\n isEmpty: (data: Data) => boolean;\n}): DataView<Data, Input> {\n const shown = current ?? previous;\n if (!shown) return error ? { kind: 'error', error } : { kind: 'loading' };\n const currentInput = sameInput(shown.input, requestedInput);\n if (error)\n return {\n kind: 'stale-error',\n data: shown.data,\n displayedInput: shown.input,\n requestedInput,\n error,\n message: currentInput\n ? `Couldn’t refresh. Showing the last result for ${describe(shown.input)}.`\n : `Couldn’t refresh. Showing ${describe(shown.input)} while ${describe(requestedInput)} is unavailable.`,\n };\n if (pending || !currentInput)\n return {\n kind: 'updating',\n data: shown.data,\n displayedInput: shown.input,\n requestedInput,\n message: currentInput\n ? `Updating ${describe(requestedInput)}…`\n : `Showing ${describe(shown.input)} while loading ${describe(requestedInput)}…`,\n };\n\n return isEmpty(shown.data)\n ? { kind: 'empty', input: shown.input }\n : { kind: 'ready', data: shown.data, input: shown.input };\n}\n",
11
- "export function classNames(\n ...values: Array<string | false | null | undefined>\n): string {\n return values.filter(Boolean).join(' ');\n}\n",
12
- "import { createElement, type CSSProperties } from 'react';\nimport {\n ArrowDownRight,\n ArrowLeft,\n ArrowRight,\n ArrowUpRight,\n BookOpenText,\n Check,\n CalendarDays,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n CircleAlert,\n Clock3,\n Copy,\n FileCode2,\n Download,\n Info,\n LoaderCircle,\n Minus,\n Moon,\n Presentation,\n Radio,\n RotateCw,\n Search,\n Square,\n Sun,\n TextWrap,\n X,\n type LucideProps,\n} from 'lucide-react';\n\n/** Use semantic names to keep icon meaning and optical size consistent across controls. */\nconst brandedIcons = {\n cancel: X,\n calendar: CalendarDays,\n clock: Clock3,\n check: Check,\n disclosure: ChevronDown,\n previousMonth: ChevronLeft,\n nextMonth: ChevronRight,\n explore: BookOpenText,\n /** @deprecated Use openDetails for inspection triggers. */\n inspect: ChevronRight,\n info: Info,\n openDetails: ChevronRight,\n present: Presentation,\n export: Download,\n error: CircleAlert,\n close: X,\n previous: ArrowLeft,\n next: ArrowRight,\n lightTheme: Sun,\n darkTheme: Moon,\n live: Radio,\n loading: LoaderCircle,\n refresh: RotateCw,\n stop: Square,\n reset: X,\n search: Search,\n copy: Copy,\n sql: FileCode2,\n wrap: TextWrap,\n trendDown: ArrowDownRight,\n trendFlat: Minus,\n trendUp: ArrowUpRight,\n} as const;\n\nexport type AppIconName = keyof typeof brandedIcons;\nexport type AppIconProps = Omit<LucideProps, 'size'> & {\n name: AppIconName;\n size?: number;\n};\n\nexport function AppIcon({\n name,\n size = 18,\n strokeWidth = 1.8,\n style,\n ...props\n}: AppIconProps) {\n const Icon = brandedIcons[name];\n const fixedSize: CSSProperties = {\n ...style,\n width: size,\n height: size,\n minWidth: size,\n minHeight: size,\n maxWidth: size,\n maxHeight: size,\n flexShrink: 0,\n };\n\n return createElement(Icon, {\n 'aria-hidden': true,\n focusable: 'false',\n ...props,\n size,\n strokeWidth,\n style: fixedSize,\n });\n}\n",
13
- "import { classNames } from '@/src/react/ui/classNames';\nimport { AppIcon } from '@/src/react/ui/icons';\nimport type { ReportingPeriod } from '@/src/core/contract';\nimport { formatDateRange } from '@/src/core/format';\n\nexport type { ReportingPeriod } from '@/src/core/contract';\n\nexport type PeriodComparison =\n | { kind: 'previous' }\n | { kind: 'period'; period: ReportingPeriod };\n\nexport type PeriodSummaryProps = {\n period: ReportingPeriod;\n comparison?: PeriodComparison;\n className?: string;\n};\n\nfunction duration(\n period: Extract<ReportingPeriod, { kind: 'rolling' }>\n): string {\n return `${period.amount} ${period.unit}${period.amount === 1 ? '' : 's'}`;\n}\n\nfunction label(period: ReportingPeriod): string {\n if (period.kind === 'rolling') return `Last ${duration(period)}`;\n\n return formatDateRange(period);\n}\n\nfunction comparisonLabel(\n period: ReportingPeriod,\n comparison: PeriodComparison\n): string {\n if (comparison.kind === 'period') {\n if (comparison.period.kind === 'calendar') return label(comparison.period);\n\n return `${duration(comparison.period)} ending ${new Date(comparison.period.end).toLocaleString(undefined, { dateStyle: 'medium', timeStyle: 'short' })}`;\n }\n\n return period.kind === 'rolling'\n ? `Previous ${duration(period)}`\n : 'Previous period';\n}\n\nexport function reportingPeriodText(period: ReportingPeriod): string {\n if (period.kind === 'calendar')\n return `${label(period)} in ${period.timeZone}`;\n const end = new Date(period.end);\n if (Number.isNaN(end.getTime())) return label(period);\n const start = new Date(\n end.getTime() -\n period.amount * (period.unit === 'hour' ? 3_600_000 : 86_400_000)\n );\n\n return `${label(period)}, ${start.toISOString()} to ${end.toISOString()}`;\n}\n\n/** Read-only period context for the variable bar, including exact bounds for assistive technology. */\nexport function PeriodSummary({\n period,\n comparison,\n className,\n}: PeriodSummaryProps) {\n const comparisonText = comparison\n ? comparisonLabel(period, comparison)\n : null;\n const comparisonDetail =\n comparison?.kind === 'period'\n ? reportingPeriodText(comparison.period)\n : comparisonText;\n\n return (\n <p className={classNames('altertable-period-summary', className)}>\n <span className=\"altertable-sr-only\">\n {`Reporting period: ${reportingPeriodText(period)}${comparisonDetail ? `, compared with ${comparisonDetail}` : ''}`}\n </span>\n <span aria-hidden=\"true\" className=\"altertable-period-summary-visible\">\n <AppIcon\n name={period.kind === 'rolling' ? 'clock' : 'calendar'}\n size={16}\n />\n <span className=\"altertable-period-summary-current\">\n {label(period)}\n </span>\n {comparisonText && (\n <>\n <span className=\"altertable-period-summary-vs\" aria-hidden=\"true\">\n vs\n </span>\n <span>{comparisonText}</span>\n </>\n )}\n </span>\n </p>\n );\n}\n",
14
- "import { parseDate, today, type CalendarDate } from '@internationalized/date';\n\n/** ISO calendar dates; the app operation defines timezone and inclusive bounds. */\nexport type DateRange = { start: string; end: string };\n\nexport type DatePresetId =\n | 'day'\n | 'last-3'\n | 'last-7'\n | 'last-14'\n | 'last-30'\n | 'last-90'\n | 'this-week'\n | 'previous-week'\n | 'this-month'\n | 'previous-month';\nexport type DatePreset = { id: DatePresetId; label: string; range: DateRange };\n\nexport function inclusiveDays(range: DateRange): number {\n return (\n (parseDate(range.end).toDate('UTC').getTime() -\n parseDate(range.start).toDate('UTC').getTime()) /\n 86_400_000 +\n 1\n );\n}\n\nfunction monday(date: CalendarDate): CalendarDate {\n return date.subtract({ days: (date.toDate('UTC').getUTCDay() + 6) % 7 });\n}\n\nexport function withinBounds(\n range: DateRange,\n minDate?: string,\n maxDate?: string,\n maxRangeDays?: number\n): boolean {\n try {\n const start = parseDate(range.start);\n const end = parseDate(range.end);\n const days = inclusiveDays(range);\n\n return (\n days >= 1 &&\n (!maxRangeDays || days <= maxRangeDays) &&\n (!minDate || start.compare(parseDate(minDate)) >= 0) &&\n (!maxDate || end.compare(parseDate(maxDate)) <= 0)\n );\n } catch {\n return false;\n }\n}\n\n/** Only offer ranges the app says it can query. Dates and range lengths are inclusive. */\nexport function availableDatePresets({\n minDate,\n maxDate,\n maxRangeDays,\n timeZone = 'UTC',\n}: {\n minDate?: string;\n maxDate?: string;\n maxRangeDays?: number;\n timeZone?: string;\n}): DatePreset[] {\n const currentDay = today(timeZone);\n const latest =\n maxDate && parseDate(maxDate).compare(currentDay) < 0\n ? parseDate(maxDate)\n : currentDay;\n const earliest = minDate ? parseDate(minDate) : null;\n const completeDays = latest.compare(currentDay.subtract({ days: 1 })) === 0;\n const historical = latest.compare(currentDay.subtract({ days: 1 })) < 0;\n const options: DatePreset[] = [];\n const seen = new Set<string>();\n\n function add(\n id: DatePresetId,\n label: string,\n start: CalendarDate,\n end = latest\n ) {\n const days =\n (end.toDate('UTC').getTime() - start.toDate('UTC').getTime()) /\n 86_400_000 +\n 1;\n const range = { start: start.toString(), end: end.toString() };\n const key = `${range.start}/${range.end}`;\n if (\n days < 1 ||\n (maxRangeDays && days > maxRangeDays) ||\n (earliest && start.compare(earliest) < 0) ||\n end.compare(latest) > 0 ||\n seen.has(key)\n )\n return;\n seen.add(key);\n options.push({ id, label, range });\n }\n\n add(\n 'day',\n historical ? 'Latest available day' : completeDays ? 'Yesterday' : 'Today',\n latest\n );\n for (const days of [3, 7, 14, 30, 90]) {\n add(\n `last-${days}` as DatePresetId,\n historical\n ? `Latest ${days} available days`\n : completeDays\n ? `Last ${days} complete days`\n : `Last ${days} days`,\n latest.subtract({ days: days - 1 })\n );\n }\n const weekStart = monday(currentDay);\n if (latest.compare(weekStart) >= 0)\n add(\n 'this-week',\n completeDays ? 'This week through yesterday' : 'This week',\n weekStart\n );\n add(\n 'previous-week',\n 'Previous week',\n weekStart.subtract({ days: 7 }),\n weekStart.subtract({ days: 1 })\n );\n const monthStart = currentDay.set({ day: 1 });\n if (latest.compare(monthStart) >= 0)\n add(\n 'this-month',\n completeDays ? 'This month through yesterday' : 'This month',\n monthStart\n );\n const previousMonthEnd = monthStart.subtract({ days: 1 });\n add(\n 'previous-month',\n 'Previous month',\n previousMonthEnd.set({ day: 1 }),\n previousMonthEnd\n );\n\n return options;\n}\n",
15
- "import {\n availableDatePresets,\n type DatePresetId,\n type DateRange,\n} from '@/src/core/date-range';\nimport type { DateRangeContract, DateRangeRequest } from '@/src/core/contract';\nimport type {\n DimensionSelection,\n DimensionVariable,\n} from '@/src/core/dimension';\nimport { invariant } from '@/src/core/invariant';\n\nimport type { HistoryMode } from '@/src/core/navigation';\nexport type { HistoryMode } from '@/src/core/navigation';\n\n/** An app-owned value with one URL representation. Controls never parse or write routes. */\nexport type AppVariable<\n Value,\n Kind extends string = Value extends string ? 'text' | 'select' : 'dateRange',\n> = {\n kind: Kind;\n label?: string;\n options?: readonly { id: string; label: string }[];\n urlKeys: readonly string[];\n defaultValue: Value;\n history: HistoryMode;\n read: (params: URLSearchParams) => Value;\n write: (value: Value) => Record<string, string | null>;\n valid: (value: Value) => boolean;\n same: (left: Value, right: Value) => boolean;\n};\n\nexport type VariableCollection = Record<\n string,\n AppVariable<string> | DateRangeVariable | DimensionVariable<any>\n>;\nexport type AppVariableValues<Variables> = {\n [Key in keyof Variables]: Variables[Key] extends DimensionVariable<\n infer Value\n >\n ? DimensionSelection<Value>\n : Variables[Key] extends AppVariable<infer Value, string>\n ? Value\n : never;\n};\n\n/** Name variables once in the app. URL keys must be unique across its controls. */\nexport function defineAppVariables<const Variables extends VariableCollection>(\n variables: Variables\n): Variables {\n const owners = new Map<string, string>();\n for (const [name, variable] of Object.entries(variables)) {\n for (const key of variable.urlKeys) {\n invariant(\n !['view', 'about', 'tab', 'present', 'step'].includes(key),\n `Variable ${name} uses reserved URL key: ${key}.`\n );\n invariant(\n !!key && !owners.has(key),\n `Variable ${name} has an empty or duplicate URL key: ${key}.`\n );\n owners.set(key, name);\n }\n }\n\n return variables;\n}\n\ntype ScalarVariableOptions = {\n label?: string;\n key: string;\n defaultValue?: string;\n history?: HistoryMode;\n};\n\n/** A local text filter. Typing replaces the current history entry by default. */\nexport function textVariable({\n key,\n label,\n defaultValue = '',\n history = 'replace',\n}: ScalarVariableOptions): AppVariable<string> {\n return {\n kind: 'text',\n label: label ?? key,\n urlKeys: [key],\n defaultValue,\n history,\n read(params) {\n return params.get(key) ?? defaultValue;\n },\n write(value) {\n return { [key]: value === defaultValue ? null : value };\n },\n valid(value) {\n return typeof value === 'string';\n },\n same(left, right) {\n return left === right;\n },\n };\n}\n\n/** A single choice. Supply values when the option set is known before data loads. */\nexport function selectVariable({\n key,\n label,\n defaultValue,\n values,\n history = 'push',\n}: ScalarVariableOptions & {\n defaultValue: string;\n values?: readonly string[];\n}): AppVariable<string> {\n invariant(\n !values || values.includes(defaultValue),\n `Select variable ${key} must include its default value.`\n );\n\n function valid(value: string) {\n return typeof value === 'string' && (!values || values.includes(value));\n }\n\n return {\n kind: 'select',\n label: label ?? key,\n options: values?.map(id => ({ id, label: id })),\n urlKeys: [key],\n defaultValue,\n history,\n read(params) {\n const value = params.get(key);\n\n return value !== null && valid(value) ? value : defaultValue;\n },\n write(value) {\n return { [key]: value === defaultValue ? null : value };\n },\n valid,\n same(left, right) {\n return left === right;\n },\n };\n}\n\nexport type DateRangeSelection =\n | { kind: 'preset'; id: DatePresetId; comparison?: 'previous' }\n | { kind: 'dates'; start: string; end: string; comparison?: 'previous' };\n\nexport type DateRangeVariableOptions = {\n label?: string;\n /** URL key for a relative preset; explicit dates use startKey and endKey. */\n key: string;\n startKey?: string;\n endKey?: string;\n defaultValue: DateRangeSelection & { comparison?: never };\n contract: DateRangeContract;\n history?: HistoryMode;\n /** Opt into a URL-backed comparison with the preceding equal-length range. */\n comparison?: boolean;\n comparisonKey?: string;\n};\n\nexport type DateRangeVariable = AppVariable<DateRangeSelection> & {\n kind: 'dateRange';\n supportsComparison: boolean;\n input: (selection: DateRangeSelection) => DateRangeRequest;\n describeInput: (input: DateRangeRequest) => string;\n bounds: () => {\n minDate?: string;\n maxDate: string;\n maxRangeDays: number;\n timeZone: string;\n };\n resolve: (selection: DateRangeSelection) => DateRange;\n previous: (selection: DateRangeSelection) => DateRange | null;\n comparisonRange: (selection: DateRangeSelection) => DateRange | null;\n};\n\nconst PRESET_IDS = new Set<DatePresetId>([\n 'day',\n 'last-3',\n 'last-7',\n 'last-14',\n 'last-30',\n 'last-90',\n 'this-week',\n 'previous-week',\n 'this-month',\n 'previous-month',\n]);\n\n/** A date variable keeps relative presets relative and validates exact dates against source coverage. */\nexport function dateRangeVariable({\n key,\n label = 'Date range',\n startKey = 'start',\n endKey = 'end',\n defaultValue,\n contract,\n history = 'push',\n comparison = false,\n comparisonKey = 'compare',\n}: DateRangeVariableOptions): DateRangeVariable {\n const bounds = contract.bounds;\n\n function resolve(selection: DateRangeSelection): DateRange {\n const limits = bounds();\n if (selection.kind === 'preset') {\n const preset = availableDatePresets(limits).find(\n item => item.id === selection.id\n );\n if (preset) return preset.range;\n } else {\n try {\n return contract.parse(selection);\n } catch {\n // Invalid URL values fall back to the app default.\n }\n }\n invariant(\n false,\n `Date variable ${key} is outside its available data range.`\n );\n }\n\n function same(left: DateRangeSelection, right: DateRangeSelection) {\n return (\n left.kind === right.kind &&\n left.comparison === right.comparison &&\n (left.kind === 'preset' && right.kind === 'preset'\n ? left.id === right.id\n : left.kind === 'dates' &&\n right.kind === 'dates' &&\n left.start === right.start &&\n left.end === right.end)\n );\n }\n const variable: DateRangeVariable = {\n kind: 'dateRange',\n label,\n supportsComparison: comparison,\n input(selection) {\n return contract.request(\n resolve(selection),\n selection.comparison === 'previous' && comparison\n );\n },\n describeInput(input) {\n return contract.describeInput(input.range);\n },\n urlKeys: comparison\n ? [key, startKey, endKey, comparisonKey]\n : [key, startKey, endKey],\n defaultValue,\n history,\n bounds,\n resolve,\n previous(selection) {\n return comparison ? contract.comparison(resolve(selection)) : null;\n },\n comparisonRange(selection) {\n return selection.comparison === 'previous' && comparison\n ? contract.comparison(resolve(selection))\n : null;\n },\n same,\n valid(value) {\n try {\n const range = resolve(value);\n\n return (\n value.comparison === undefined ||\n (value.comparison === 'previous' &&\n comparison &&\n contract.comparison(range) !== null)\n );\n } catch {\n return false;\n }\n },\n read(params) {\n function withComparison(\n selection: DateRangeSelection\n ): DateRangeSelection {\n if (!comparison || params.get(comparisonKey) !== 'previous')\n return selection;\n const selected = { ...selection, comparison: 'previous' as const };\n\n return variable.valid(selected) ? selected : selection;\n }\n const presetId = params.get(key);\n if (presetId && PRESET_IDS.has(presetId as DatePresetId)) {\n const selection = {\n kind: 'preset',\n id: presetId as DatePresetId,\n } as const;\n if (variable.valid(selection)) return withComparison(selection);\n }\n const start = params.get(startKey);\n const end = params.get(endKey);\n if (start && end) {\n const selection = { kind: 'dates', start, end } as const;\n if (variable.valid(selection)) return withComparison(selection);\n }\n\n return withComparison(defaultValue);\n },\n write(value) {\n return {\n ...(same(value, defaultValue)\n ? { [key]: null, [startKey]: null, [endKey]: null }\n : value.kind === 'preset'\n ? { [key]: value.id, [startKey]: null, [endKey]: null }\n : { [key]: null, [startKey]: value.start, [endKey]: value.end }),\n ...(comparison ? { [comparisonKey]: value.comparison ?? null } : {}),\n };\n },\n };\n invariant(\n variable.valid(defaultValue),\n `Date variable ${key} has a default outside its available data range.`\n );\n\n return variable;\n}\n",
16
- "import { useEffect, useReducer, useSyncExternalStore } from 'react';\nimport { today } from '@internationalized/date';\nimport { invariant } from '@/src/core/invariant';\nimport {\n searchParams,\n subscribeSearch,\n writeSearch,\n} from '@/src/react/ui/search';\nimport type { DatePresetId, DateRange } from '@/src/core/date-range';\nimport {\n defineAppVariables,\n type AppVariable,\n type AppVariableValues,\n type DateRangeSelection,\n type DateRangeVariable,\n type HistoryMode,\n type VariableCollection,\n} from '@/src/core/variables';\nexport {\n defineAppVariables,\n textVariable,\n selectVariable,\n dateRangeVariable,\n} from '@/src/core/variables';\nexport type {\n AppVariable,\n AppVariableValues,\n DateRangeSelection,\n DateRangeVariable,\n DateRangeVariableOptions,\n VariableCollection,\n} from '@/src/core/variables';\n\n/** Adapt one date variable to the controlled picker without giving the picker URL ownership. */\nexport function dateRangeControl(\n variable: DateRangeVariable,\n selection: DateRangeSelection,\n onChange: (selection: DateRangeSelection) => void\n) {\n const value = variable.resolve(selection);\n\n function update(next: DateRangeSelection) {\n return onChange(\n selection.comparison && variable.previous(next)\n ? { ...next, comparison: 'previous' }\n : next\n );\n }\n\n return {\n value,\n label: variable.label,\n onChange(range: DateRange | null) {\n return update(\n range ? { kind: 'dates', ...range } : variable.defaultValue\n );\n },\n onPresetChange(id: DatePresetId) {\n return update({ kind: 'preset', id });\n },\n selectedPresetId: selection.kind === 'preset' ? selection.id : null,\n onReset() {\n return onChange(variable.defaultValue);\n },\n isDefault: variable.same(selection, variable.defaultValue),\n resetValue: variable.resolve(variable.defaultValue),\n ...(variable.supportsComparison\n ? {\n comparison: {\n enabled: selection.comparison === 'previous',\n range: variable.previous(selection),\n onChange(enabled: boolean) {\n return onChange(\n enabled\n ? { ...selection, comparison: 'previous' }\n : { ...selection, comparison: undefined }\n );\n },\n },\n }\n : {}),\n ...variable.bounds(),\n };\n}\n\nfunction currentSearch() {\n return searchParams().toString();\n}\n\nfunction serverSearch() {\n return '';\n}\n\n/** URL is the source of truth for app variables; one update can change dependent values atomically. */\nexport function useAppVariables<const Variables extends VariableCollection>(\n definitions: Variables\n) {\n defineAppVariables(definitions);\n const search = useSyncExternalStore(\n subscribeSearch,\n currentSearch,\n serverSearch\n );\n const zones = Object.values(definitions)\n .filter(item => item.kind === 'dateRange')\n .map(item => (item as DateRangeVariable).bounds().timeZone);\n const zoneKey = [...new Set(zones)].sort().join('|');\n const [, bumpDay] = useReducer(value => value + 1, 0);\n\n useEffect(() => {\n if (!zoneKey) return;\n const timeZones = zoneKey.split('|');\n let day = timeZones.map(zone => today(zone).toString()).join('|');\n const timer = window.setInterval(() => {\n const next = timeZones.map(zone => today(zone).toString()).join('|');\n if (next !== day) {\n day = next;\n bumpDay();\n }\n }, 30_000);\n\n return () => window.clearInterval(timer);\n }, [zoneKey]);\n\n const params = new URLSearchParams(search);\n const values = {} as AppVariableValues<Variables>;\n const canonical: Record<string, string | null> = {};\n for (const name of Object.keys(definitions) as (keyof Variables & string)[]) {\n const variable = definitions[name] as unknown as AppVariable<\n AppVariableValues<Variables>[typeof name]\n >;\n const value = variable.read(params);\n values[name] = value;\n Object.assign(canonical, variable.write(value));\n }\n\n useEffect(() => {\n if (\n Object.entries(canonical).some(\n ([key, value]) => params.get(key) !== value\n )\n )\n writeSearch(canonical);\n });\n\n function update(\n next: Partial<AppVariableValues<Variables>>,\n history?: HistoryMode\n ) {\n const changes: Record<string, string | null> = {};\n let mode: HistoryMode = history ?? 'replace';\n for (const name of Object.keys(next) as (keyof Variables & string)[]) {\n const variable = definitions[name] as unknown as AppVariable<\n AppVariableValues<Variables>[typeof name]\n >;\n const value = next[name]!;\n invariant(variable.valid(value), `Invalid value for variable ${name}.`);\n Object.assign(changes, variable.write(value));\n if (!history && variable.history === 'push') mode = 'push';\n }\n writeSearch(changes, mode);\n }\n\n function set<Key extends keyof Variables & string>(\n name: Key,\n value: AppVariableValues<Variables>[Key]\n ) {\n update({ [name]: value } as Partial<AppVariableValues<Variables>>);\n }\n\n function reset<Key extends keyof Variables & string>(name: Key) {\n const variable = definitions[name] as unknown as AppVariable<\n AppVariableValues<Variables>[Key]\n >;\n set(name, variable.defaultValue);\n }\n\n function bind<Key extends keyof Variables & string>(name: Key) {\n const variable = definitions[name] as unknown as AppVariable<\n AppVariableValues<Variables>[Key]\n >;\n\n return {\n value: values[name],\n onChange(value: AppVariableValues<Variables>[Key]) {\n return set(name, value);\n },\n resetValue: variable.defaultValue,\n };\n }\n\n return { values, set, reset, update, bind };\n}\n",
17
- "import { getDataAppNavigation } from '@/src/client/navigation';\nconst SEARCH_CHANGE = 'altertable:searchchange';\n\nexport function searchParams(): URLSearchParams {\n return new URLSearchParams(\n typeof window === 'undefined'\n ? ''\n : (getDataAppNavigation()?.snapshot().search ?? window.location.search)\n );\n}\n\n/** Listen to Back/Forward and writes made by another runtime control. */\nexport function subscribeSearch(listener: () => void): () => void {\n const location = getDataAppNavigation();\n if (location) return location.subscribe(listener);\n window.addEventListener('popstate', listener);\n window.addEventListener(SEARCH_CHANGE, listener);\n\n return () => {\n window.removeEventListener('popstate', listener);\n window.removeEventListener(SEARCH_CHANGE, listener);\n };\n}\n\n/** Write search keys. `null` removes a key. Skips the history write when nothing changed. */\nexport function writeSearch(\n update: Record<string, string | null>,\n mode: 'replace' | 'push' = 'replace'\n): void {\n const location = getDataAppNavigation();\n const currentState = location?.snapshot();\n const url = new URL(window.location.href);\n if (currentState) {\n url.search = currentState.search;\n url.hash = currentState.hash;\n }\n for (const [key, value] of Object.entries(update)) {\n if (value == null || value === '') url.searchParams.delete(key);\n else url.searchParams.set(key, value);\n }\n if (location) {\n location.update({ search: url.search, hash: url.hash }, mode);\n\n return;\n }\n const next = `${url.pathname}${url.search}${url.hash}`;\n const current = `${window.location.pathname}${window.location.search}${window.location.hash}`;\n if (next === current) return;\n window.history[mode === 'push' ? 'pushState' : 'replaceState'](\n null,\n '',\n next\n );\n window.dispatchEvent(new Event(SEARCH_CHANGE));\n}\n\nexport function slug(value: string): string {\n return (\n value\n .normalize('NFKD')\n .replace(/[^\\w]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .toLowerCase() || 'item'\n );\n}\n",
18
- "import type { ReactNode } from 'react';\nimport type {\n DataReading,\n MetricReading,\n MetricValues,\n} from '@/src/core/reading';\nimport type { DateRangeRequest } from '@/src/core/contract';\nimport { invariant } from '@/src/core/invariant';\n\nexport type DataContentHelpers<Data, Input> = {\n select: <Value>(\n select: (data: Data, input: Input) => Value\n ) => DataReading<Value>;\n metric: (select: (data: Data) => MetricValues) => MetricReading;\n};\n\nexport type DataContentState<Data, Input> = DataContentHelpers<Data, Input> &\n (\n | { loading: true; data?: never; input?: never }\n | { loading: false; data: Data; input: Input }\n );\n\n/** Selectors run only for displayed data. Date comparisons inherit that result's input. */\nexport function defineDataContent<Data, Input>(\n render: (state: DataContentState<Data, Input>) => ReactNode,\n options: { date?: (input: Input) => DateRangeRequest } = {}\n) {\n return {\n loading: render({\n loading: true,\n select() {\n return { loading: true };\n },\n metric() {\n return { loading: true };\n },\n }),\n children(data: Data, input: Input) {\n return render({\n loading: false,\n data,\n input,\n select(select) {\n return { loading: false, value: select(data, input) };\n },\n metric(select) {\n const values = select(data);\n invariant(\n values.previous === undefined || options.date,\n 'Metric comparisons require a view date binding.'\n );\n\n return {\n loading: false,\n value: { ...values, period: options.date?.(input) },\n };\n },\n });\n },\n };\n}\n",
19
- "import type { EmptyContent } from '@/src/react/ui/presentation';\nimport type {\n AppVariableValues,\n DateRangeVariable,\n VariableCollection,\n} from '@/src/core/variables';\nimport type { DateRangeRequest } from '@/src/core/contract';\nimport type { DimensionVariable } from '@/src/core/dimension';\nimport { invariant } from '@/src/core/invariant';\n\nexport type ResolvedVariables<Variables extends VariableCollection> = {\n [Key in keyof Variables]: Variables[Key] extends DateRangeVariable\n ? DateRangeRequest\n : AppVariableValues<Variables>[Key];\n};\n\ntype DateVariableKey<Variables extends VariableCollection> = {\n [Key in keyof Variables]: Variables[Key] extends DateRangeVariable\n ? Key\n : never;\n}[keyof Variables] &\n string;\n\nexport type ViewDate<Variables extends VariableCollection, Input> = {\n variable: DateVariableKey<Variables>;\n /** Extract the selected range and comparison unchanged, including from nested inputs. */\n input: (input: Input) => DateRangeRequest;\n};\n\n/** Read variable values from a custom operation input; omitted keys use top-level fields. */\nexport type ViewBindings<\n Variables extends VariableCollection,\n Input,\n> = Partial<{\n [Key in keyof Variables]: (input: Input) => ResolvedVariables<Variables>[Key];\n}>;\n\nexport type DataViewDefinition<\n Name extends string,\n Variables extends VariableCollection,\n Input,\n Data,\n> = {\n operation: Name;\n variables: Variables;\n input: (values: ResolvedVariables<Variables>) => Input;\n bindings?: ViewBindings<Variables, Input>;\n /** App-owned semantics: measured zero need not mean an empty result. */\n isEmpty: (data: Data) => boolean;\n empty: EmptyContent;\n} & (\n | {\n date: ViewDate<Variables, Input>;\n describeInput?: (input: Input) => string;\n }\n | { date?: never; describeInput: (input: Input) => string }\n);\n\nexport function describeViewInput<Input>(definition: {\n variables: VariableCollection;\n bindings?: Partial<Record<string, (input: Input) => unknown>>;\n date?: { variable: string; input: (input: Input) => DateRangeRequest };\n describeInput?: (input: Input) => string;\n}): (input: Input) => string {\n const date = definition.date;\n const variable = date && definition.variables[date.variable];\n invariant(\n !date || variable?.kind === 'dateRange',\n 'The view date must reference a date range variable.'\n );\n if (definition.describeInput) return definition.describeInput;\n invariant(date && variable, 'A view needs a date binding or describeInput.');\n const dateBinding = date;\n\n function describeInput(input: Input) {\n const period = (variable as DateRangeVariable).describeInput(\n dateBinding.input(input)\n );\n const filters = Object.entries(definition.variables)\n .filter(([, variable]) => variable.kind === 'dimension')\n .map(([key, filter]) => {\n const dimension = filter as DimensionVariable<any>;\n const selected = readViewBinding(definition, key, input);\n\n return dimension.valid(selected as never)\n ? `${dimension.label}: ${dimension.describe(selected as never)}`\n : null;\n })\n .filter(Boolean);\n\n return [period, ...filters].join(' · ');\n }\n\n return describeInput;\n}\n\nexport function resolveViewInput<Variables extends VariableCollection, Input>(\n definition: {\n input: (values: ResolvedVariables<Variables>) => Input;\n date?: ViewDate<Variables, Input>;\n variables: Variables;\n bindings?: ViewBindings<Variables, Input>;\n },\n values: ResolvedVariables<Variables>\n): Input {\n const input = definition.input(values);\n if (definition.date) {\n const selected = values[definition.date.variable] as DateRangeRequest;\n const mapped = definition.date.input(input);\n invariant(\n mapped && mapped.range && 'comparison' in mapped,\n 'The operation input must preserve the selected date range and comparison.'\n );\n\n function sameRange(\n a: DateRangeRequest['comparison'],\n b: DateRangeRequest['comparison']\n ) {\n return a === b || (!!a && !!b && a.start === b.start && a.end === b.end);\n }\n invariant(\n sameRange(selected.range, mapped.range) &&\n sameRange(selected.comparison, mapped.comparison),\n 'The operation input must preserve the selected date range and comparison.'\n );\n }\n for (const [key, variable] of Object.entries(definition.variables)) {\n if (variable.kind !== 'dimension') continue;\n const filter = variable as DimensionVariable<any>;\n const selected = values[key] as never;\n const mapped = readViewBinding(definition, key, input);\n invariant(\n filter.valid(mapped as never) && filter.same(selected, mapped as never),\n `The operation input must preserve the ${key} dimension selection.`\n );\n }\n\n return input;\n}\n\nfunction readViewBinding<Input>(\n definition: { bindings?: Partial<Record<string, (input: Input) => unknown>> },\n key: string,\n input: Input\n): unknown {\n const read = definition.bindings?.[key];\n if (read) return read(input);\n\n return input && typeof input === 'object'\n ? (input as Record<string, unknown>)[key]\n : undefined;\n}\n",
20
- "import type { ReactNode } from 'react';\nimport { useQueries } from '@tanstack/react-query';\nimport { SearchField } from '@/src/react/ui/SearchField';\nimport { Combobox } from '@/src/react/ui/Combobox';\nimport { DateRangePicker } from '@/src/react/ui/DateRangePicker';\nimport { DimensionPicker } from '@/src/react/ui/DimensionPicker';\nimport {\n parseFacetOptions,\n type DimensionSelection,\n type DimensionVariable,\n} from '@/src/core/dimension';\nimport {\n dateRangeControl,\n useAppVariables,\n type AppVariableValues,\n type VariableCollection,\n type DateRangeSelection,\n} from '@/src/react/ui/variables';\nimport type { ResolvedVariables } from '@/src/react/view';\n\n/** URL values resolve before facets; facet keys include their dependent inputs for cached, bounded loading. */\nexport function useViewVariables<Variables extends VariableCollection>(\n definitions: Variables,\n clientScope: string,\n loadFacet: (\n operation: string,\n input: unknown,\n signal: AbortSignal\n ) => Promise<unknown>\n) {\n const variables = useAppVariables(definitions);\n const resolved = {} as ResolvedVariables<Variables>;\n for (const name of Object.keys(definitions) as (keyof Variables & string)[]) {\n const definition = definitions[name]!;\n const value = variables.values[name];\n resolved[name] = (\n definition.kind === 'dateRange'\n ? definition.input(value as DateRangeSelection)\n : value\n ) as ResolvedVariables<Variables>[typeof name];\n }\n const facets = Object.entries(definitions).filter(\n (entry): entry is [string, DimensionVariable<any>] =>\n entry[1].kind === 'dimension' && !!entry[1].facet\n );\n const facetQueries = useQueries({\n queries: facets.map(([name, filter]) => {\n const facet = filter.facet!;\n const input = facet.input({ ...resolved, [name]: { kind: 'all' } });\n\n return {\n queryKey: [\n 'dimension-facet',\n clientScope,\n name,\n facet.operation,\n input,\n ],\n queryFn({ signal }: { signal: AbortSignal }) {\n return loadFacet(facet.operation, input, signal).then(result =>\n parseFacetOptions(result, filter)\n );\n },\n staleTime: 60_000,\n gcTime: 300_000,\n };\n }),\n });\n const facetState = new Map(\n facets.map(([name], index) => [name, facetQueries[index]!])\n );\n const controls: ReactNode[] = [];\n for (const name of Object.keys(definitions) as (keyof Variables & string)[]) {\n const definition = definitions[name]!;\n const value = variables.values[name];\n if (definition.kind === 'dateRange') {\n const selection = value as DateRangeSelection;\n controls.push(\n <DateRangePicker\n key={name}\n {...dateRangeControl(definition, selection, next =>\n variables.set(\n name,\n next as AppVariableValues<Variables>[typeof name]\n )\n )}\n />\n );\n } else if (definition.kind === 'dimension') {\n const filter = definition as DimensionVariable;\n const facet = facetState.get(name);\n controls.push(\n <DimensionPicker\n key={name}\n filter={filter}\n value={value as DimensionSelection}\n options={facet?.data ?? filter.options}\n loading={!!facet?.isPending}\n error={!!facet?.isError}\n onRetry={() => void facet?.refetch()}\n onChange={next =>\n variables.set(\n name,\n next as AppVariableValues<Variables>[typeof name]\n )\n }\n />\n );\n } else {\n const binding = {\n label: definition.label ?? name,\n value: value as string,\n onChange(next: string) {\n return variables.set(\n name,\n next as AppVariableValues<Variables>[typeof name]\n );\n },\n resetValue: definition.defaultValue,\n };\n if (definition.kind === 'select' && definition.options)\n controls.push(\n <Combobox key={name} {...binding} options={[...definition.options]} />\n );\n else if (definition.kind === 'text')\n controls.push(<SearchField key={name} {...binding} />);\n }\n }\n\n return {\n ...variables,\n resolved,\n controls: controls.length ? controls : null,\n };\n}\n",
21
- "import { useId, type ComponentPropsWithRef, type ReactNode } from 'react';\nimport { classNames } from '@/src/react/ui/classNames';\nimport { SearchInput } from '@/src/react/ui/SearchInput';\nimport { Button } from '@/src/react/ui/Button';\nimport { AppIcon } from '@/src/react/ui/icons';\n\nexport type SearchFieldProps = {\n label: string;\n value: string;\n onChange: (value: string) => void;\n onSubmit?: (value: string) => void;\n placeholder?: string;\n showLabel?: boolean;\n size?: 'default' | 'compact';\n description?: ReactNode;\n status?: ReactNode;\n busy?: boolean;\n resetValue?: string;\n inputProps?: Omit<\n ComponentPropsWithRef<'input'>,\n 'type' | 'value' | 'children'\n >;\n clearButtonProps?: Omit<ComponentPropsWithRef<'button'>, 'type' | 'children'>;\n children?: ReactNode;\n} & Omit<ComponentPropsWithRef<'form'>, 'onChange' | 'onSubmit' | 'children'>;\n\n/**\n * The caller owns filtering, URL state, and whether search runs while typing or on submit.\n * Escape and Clear reset the query.\n */\nexport function SearchField({\n label,\n value,\n onChange,\n onSubmit,\n placeholder,\n showLabel = false,\n size = 'default',\n description,\n status,\n busy,\n resetValue = '',\n inputProps,\n clearButtonProps,\n children,\n className,\n ...props\n}: SearchFieldProps) {\n const id = useId();\n const inputId = inputProps?.id ?? id;\n const descriptionId = description ? `${id}-description` : undefined;\n const statusId = status ? `${id}-status` : undefined;\n\n return (\n <search\n className=\"altertable-search-landmark\"\n aria-label={props['aria-label'] ?? label}\n >\n <form\n {...props}\n className={classNames('altertable-search', className)}\n data-size={size}\n onSubmit={event => {\n event.preventDefault();\n onSubmit?.(value);\n }}\n >\n <label\n htmlFor={inputId}\n className={classNames(\n 'altertable-search-label',\n !showLabel && 'altertable-sr-only'\n )}\n >\n {label}\n </label>\n <div className=\"altertable-search-row\">\n <SearchInput\n {...inputProps}\n size={size}\n id={inputId}\n type=\"search\"\n value={value}\n placeholder={placeholder ?? 'Search'}\n enterKeyHint=\"search\"\n aria-busy={busy || undefined}\n aria-describedby={\n [descriptionId, statusId, inputProps?.['aria-describedby']]\n .filter(Boolean)\n .join(' ') || undefined\n }\n className={classNames(\n 'altertable-search-input',\n inputProps?.className\n )}\n onChange={event => {\n inputProps?.onChange?.(event);\n if (!event.defaultPrevented) onChange(event.currentTarget.value);\n }}\n onKeyDown={event => {\n inputProps?.onKeyDown?.(event);\n if (\n !event.defaultPrevented &&\n event.key === 'Escape' &&\n value !== resetValue\n ) {\n event.preventDefault();\n onChange(resetValue);\n }\n }}\n endAction={\n value !== resetValue && (\n <Button\n {...clearButtonProps}\n variant=\"ghost\"\n size=\"icon-compact\"\n className={clearButtonProps?.className}\n aria-label={\n clearButtonProps?.['aria-label'] ??\n `Clear ${label.toLowerCase()}`\n }\n onClick={event => {\n clearButtonProps?.onClick?.(event);\n if (!event.defaultPrevented) onChange(resetValue);\n }}\n >\n <AppIcon name=\"reset\" size={16} />\n </Button>\n )\n }\n />\n {children}\n </div>\n {description && (\n <p id={descriptionId} className=\"altertable-search-description\">\n {description}\n </p>\n )}\n {status && (\n <output id={statusId} className=\"altertable-search-status\">\n {status}\n </output>\n )}\n </form>\n </search>\n );\n}\n",
22
- "import type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { AppIcon } from '@/src/react/ui/icons';\nimport { classNames } from '@/src/react/ui/classNames';\n\n/** One search control surface for picker search and table/page search. */\nexport function SearchInput({\n size = 'default',\n endAction,\n loading = false,\n className,\n onKeyDown,\n ...props\n}: Omit<ComponentPropsWithRef<'input'>, 'size' | 'children'> & {\n size?: 'default' | 'compact';\n endAction?: ReactNode;\n /** Replaces the search glyph in its existing space; input and results remain usable. */\n loading?: boolean;\n}) {\n return (\n <div className=\"altertable-search-input-wrap\" data-size={size}>\n <AppIcon\n name={loading ? 'loading' : 'search'}\n size={17}\n className={loading ? 'altertable-search-input-spinner' : undefined}\n />\n <input\n {...props}\n onKeyDown={event => {\n onKeyDown?.(event);\n if (\n !event.defaultPrevented &&\n event.key === 'Escape' &&\n !event.currentTarget.value\n ) {\n event.preventDefault();\n event.stopPropagation();\n event.currentTarget.blur();\n // Keep keyboard dismissal within a modal menu after leaving its search field.\n event.currentTarget\n .closest<HTMLElement>('[role=\"dialog\"]')\n ?.focus();\n }\n }}\n type=\"search\"\n className={classNames('altertable-search-input', className)}\n />\n {endAction}\n </div>\n );\n}\n",
23
- "import type { ComponentPropsWithRef } from 'react';\nimport {\n Button as AriaButton,\n type ButtonProps as AriaButtonProps,\n} from 'react-aria-components';\nimport { classNames } from '@/src/react/ui/classNames';\n\nexport type ButtonProps = ComponentPropsWithRef<'button'> & {\n variant?: 'elevated' | 'outline' | 'ghost';\n size?: 'default' | 'compact' | 'icon' | 'icon-compact';\n};\n\nexport function Button({\n className,\n type = 'button',\n variant = 'outline',\n size = 'default',\n disabled,\n ...props\n}: ButtonProps) {\n return (\n <button\n {...props}\n type={type}\n disabled={disabled}\n data-variant={variant}\n data-size={size}\n className={classNames('altertable-button', className)}\n />\n );\n}\n\n/** React Aria trigger behavior with the same presentation as the native Button. */\nexport function PressButton({\n variant = 'outline',\n size = 'default',\n className,\n ...props\n}: Omit<AriaButtonProps, 'className'> &\n Pick<ButtonProps, 'variant' | 'size'> & { className?: string }) {\n return (\n <AriaButton\n {...props}\n data-variant={variant}\n data-size={size}\n className={classNames('altertable-button', className)}\n />\n );\n}\n",
24
- "import { useEffect, useId, useRef, useState } from 'react';\nimport {\n Dialog,\n DialogTrigger,\n ListBox,\n ListBoxItem,\n Popover,\n type Selection,\n} from 'react-aria-components';\nimport { invariant } from '@/src/core/invariant';\nimport { PressButton as Button } from '@/src/react/ui/Button';\nimport { Skeleton } from '@/src/react/ui/Skeleton';\nimport { RequestHint } from '@/src/react/ui/RequestHint';\nimport { SearchInput } from '@/src/react/ui/SearchInput';\nimport { AppIcon } from '@/src/react/ui/icons';\nimport { GradientScroll } from '@/src/react/ui/GradientScroll';\nimport { SelectionMark } from '@/src/react/ui/SelectionMark';\nimport { SearchMatch } from '@/src/react/ui/SearchMatch';\nimport { searchItems } from '@/src/react/ui/searchItems';\n\n/** IDs are nonempty and unique across ordinary and missing options. */\nexport type ComboboxOption = {\n id: string;\n label: string;\n description?: string;\n};\ntype SharedProps = {\n label: string;\n options: ComboboxOption[];\n /** Separate source state, rendered last with a divider and the shared option component. */\n missingOption?: ComboboxOption;\n disabled?: boolean;\n placeholder?: string;\n emptyMessage?: string;\n /** Known options remain selectable while refreshing; unavailable selected IDs are retained. */\n loading?: boolean;\n /** Shows failure feedback without removing known options or unavailable selections. */\n error?: boolean;\n onRetry?: () => void;\n};\nexport type SingleComboboxProps = SharedProps & {\n value: string;\n onChange: (value: string) => void;\n resetValue?: string;\n values?: never;\n maxSelected?: never;\n emptySelectionLabel?: never;\n};\nexport type MultiComboboxProps = SharedProps & {\n values: readonly string[];\n onChange: (values: string[]) => void;\n /** Positive integer; at capacity, only unselected options are disabled. */\n maxSelected: number;\n /** Meaning of an empty selection belongs to the caller, e.g. All or Select a value. */\n emptySelectionLabel: string;\n value?: never;\n resetValue?: never;\n};\nexport type ComboboxProps = SingleComboboxProps | MultiComboboxProps;\n\n/** Searchable selection picker with one focus and popup model for single and multiple values. */\nexport function Combobox(props: ComboboxProps) {\n const multiple = 'values' in props && props.values !== undefined;\n const { label, options, missingOption, disabled, loading, error, onRetry } =\n props;\n const [open, setOpen] = useState(false);\n const [search, setSearch] = useState('');\n const searchRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const statusId = useId();\n const popupId = useId();\n const chosen = multiple ? props.values : [props.value];\n const selected = new Set(chosen);\n const selectedOptions = [\n ...options,\n ...(missingOption ? [missingOption] : []),\n ];\n const labels = chosen.map(\n id => selectedOptions.find(option => option.id === id)?.label ?? id\n );\n const ids = selectedOptions.map(option => option.id);\n invariant(\n ids.every(id => !!id.trim()) && new Set(ids).size === ids.length,\n 'Combobox option IDs must be nonempty and unique.'\n );\n invariant(\n !multiple ||\n (Number.isSafeInteger(props.maxSelected) && props.maxSelected >= 1),\n 'Combobox maxSelected must be a positive integer.'\n );\n invariant(\n !multiple ||\n (new Set(chosen).size === chosen.length &&\n chosen.length <= props.maxSelected),\n 'Combobox selection must be unique and within maxSelected.'\n );\n invariant(\n loading || error || chosen.every(id => ids.includes(id)),\n 'Combobox selection must refer to available option IDs.'\n );\n invariant(\n multiple ||\n props.resetValue === undefined ||\n ids.includes(props.resetValue),\n 'Combobox resetValue must refer to an available option ID.'\n );\n invariant(\n !multiple || !!props.emptySelectionLabel.trim(),\n 'Combobox emptySelectionLabel must describe the empty selection.'\n );\n const display = multiple\n ? labels.join(', ') || props.emptySelectionLabel\n : labels[0];\n const matches = searchItems(selectedOptions, search.trim(), {\n attributes: [\n {\n name: 'label',\n getter(option) {\n return option.label;\n },\n },\n {\n name: 'description',\n getter(option) {\n return option.description ?? '';\n },\n },\n ],\n });\n const atLimit = multiple && chosen.length >= props.maxSelected;\n const canClear = multiple\n ? chosen.length > 0\n : props.resetValue !== undefined && props.value !== props.resetValue;\n const feedback = error\n ? 'Couldn’t load values'\n : loading\n ? 'Loading values…'\n : matches.length\n ? `${matches.length} ${matches.length === 1 ? 'value' : 'values'}`\n : (props.emptyMessage ?? 'No matching values');\n\n useEffect(() => {\n if (open) searchRef.current?.focus();\n }, [open]);\n\n function select(selection: Selection) {\n if (selection === 'all') return;\n const ids = [...selection].map(String);\n if (multiple) {\n if (ids.length <= props.maxSelected) props.onChange(ids);\n } else {\n const id = ids[0];\n if (id !== undefined) {\n props.onChange(id);\n setOpen(false);\n }\n }\n }\n\n function clear() {\n if (multiple) props.onChange([]);\n else if (props.resetValue !== undefined) props.onChange(props.resetValue);\n setOpen(false);\n setSearch('');\n }\n\n return (\n <DialogTrigger\n isOpen={open}\n onOpenChange={next => {\n setOpen(next);\n if (!next) setSearch('');\n }}\n >\n <Button\n aria-haspopup=\"dialog\"\n aria-controls={open ? popupId : undefined}\n className=\"altertable-combobox-trigger\"\n isDisabled={disabled}\n aria-label={`${label}: ${display}`}\n >\n <span className=\"altertable-combobox-label\" aria-hidden=\"true\">\n {label}\n </span>\n <strong className=\"altertable-combobox-value\" aria-hidden=\"true\">\n {display}\n </strong>\n <AppIcon name=\"disclosure\" size={14} />\n </Button>\n <Popover className=\"altertable-combobox-popover\" placement=\"bottom start\">\n <Dialog\n id={popupId}\n aria-label={`${label} options`}\n className=\"altertable-combobox-dialog\"\n >\n <SearchInput\n size=\"compact\"\n loading={loading}\n ref={searchRef}\n aria-label={`Search ${label.toLocaleLowerCase()} values`}\n aria-describedby={statusId}\n placeholder={props.placeholder ?? 'Search values'}\n value={search}\n onChange={event => setSearch(event.currentTarget.value)}\n onKeyDown={event => {\n if (event.key !== 'ArrowDown' || !matches.length) return;\n event.preventDefault();\n listRef.current?.focus();\n }}\n />\n <output\n id={statusId}\n className=\"altertable-combobox-status\"\n aria-live={error ? 'off' : 'polite'}\n >\n {error ? `${matches.length} available values` : feedback}\n {atLimit\n ? `. Maximum of ${props.maxSelected} selections reached.`\n : ''}\n </output>\n <GradientScroll className=\"altertable-combobox-options\">\n {matches.length > 0 ? (\n <ListBox\n aria-busy={loading || undefined}\n ref={listRef}\n items={matches}\n aria-label={`${label} values`}\n aria-describedby={statusId}\n selectionMode={multiple ? 'multiple' : 'single'}\n selectionBehavior={multiple ? 'toggle' : 'replace'}\n selectedKeys={selected}\n onSelectionChange={select}\n >\n {hit => (\n <ListBoxItem\n id={hit.item.id}\n data-missing={\n hit.item.id === missingOption?.id || undefined\n }\n textValue={hit.item.label}\n isDisabled={atLimit && !selected.has(hit.item.id)}\n >\n <SelectionMark selected={selected.has(hit.item.id)} />\n <span className=\"altertable-combobox-option-content\">\n <span>\n <SearchMatch match={hit.matches.label} />\n </span>\n {hit.item.description && (\n <small>\n <SearchMatch match={hit.matches.description} />\n </small>\n )}\n </span>\n </ListBoxItem>\n )}\n </ListBox>\n ) : loading && !error ? (\n <div className=\"altertable-combobox-skeletons\" aria-hidden=\"true\">\n {[0, 1, 2].map(row => (\n <Skeleton key={row} />\n ))}\n </div>\n ) : (\n <div className=\"altertable-combobox-empty\">\n {error ? 'Values are unavailable' : feedback}\n </div>\n )}\n </GradientScroll>\n {error && (\n <RequestHint\n status={{\n kind: 'error',\n message: 'Couldn’t load values',\n onRetry,\n }}\n retryLabel=\"Try again\"\n />\n )}\n {canClear && (\n <div className=\"altertable-combobox-actions\">\n <Button variant=\"ghost\" size=\"compact\" onPress={clear}>\n Clear selection\n </Button>\n </div>\n )}\n </Dialog>\n </Popover>\n </DialogTrigger>\n );\n}\n",
25
- "import type { ComponentPropsWithRef } from 'react';\nimport { classNames } from '@/src/react/ui/classNames';\n\nexport type SkeletonProps = Omit<\n ComponentPropsWithRef<'span'>,\n 'children' | 'aria-hidden'\n>;\n\n/** Decorative loading placeholder that fades in only when loading takes a moment.\n * Put the accessible status on its container. */\nexport function Skeleton({ className, ...props }: SkeletonProps) {\n return (\n <span\n {...props}\n aria-hidden=\"true\"\n className={classNames('altertable-skeleton', className)}\n />\n );\n}\n",
26
- "import {\n createContext,\n useId,\n Children,\n cloneElement,\n isValidElement,\n useContext,\n useEffect,\n useEffectEvent,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithRef,\n type ReactNode,\n type RefObject,\n} from 'react';\nimport {\n autoUpdate,\n flip,\n FloatingPortal,\n offset,\n shift,\n useFloating,\n useMergeRefs,\n} from '@floating-ui/react';\nimport { classNames } from '@/src/react/ui/classNames';\n\ntype TooltipTiming = { hoverDelay: () => number; rememberClose: () => void };\nconst TooltipContext = /* @__PURE__ */ createContext<TooltipTiming | null>(\n null\n);\n\nexport type TooltipProviderProps = {\n children: ReactNode;\n delay?: number;\n skipDelayDuration?: number;\n};\n\n/** Delay the first hover, then open nearby tooltips without waiting during the skip window.\n * Keyboard focus always opens immediately. AppLayout provides this by default. */\nexport function TooltipProvider({\n children,\n delay = 500,\n skipDelayDuration = 300,\n}: TooltipProviderProps) {\n const skipUntil = useRef(0);\n\n const timing = useMemo(\n () => ({\n hoverDelay() {\n return Date.now() < skipUntil.current ? 0 : delay;\n },\n rememberClose() {\n skipUntil.current = Date.now() + skipDelayDuration;\n },\n }),\n [delay, skipDelayDuration]\n );\n\n return (\n <TooltipContext.Provider value={timing}>{children}</TooltipContext.Provider>\n );\n}\n\nexport type TooltipProps = {\n content: ReactNode;\n children: ReactNode;\n variant?: 'hint' | 'chart';\n align?: 'start' | 'center' | 'end';\n placement?: 'top' | 'bottom';\n portalRoot?: RefObject<HTMLElement | null>;\n tooltipProps?: Omit<ComponentPropsWithRef<'span'>, 'children' | 'role'>;\n} & Omit<ComponentPropsWithRef<'span'>, 'children' | 'content'>;\n\n/** Short visual hint for an already labeled control. variant=\"chart\" follows the cursor\n * on hover and toggles on tap so a bar or point can show the period and value. Hint\n * tooltips hide once the control is pressed. Escape closes either. */\nexport function Tooltip({\n content,\n children,\n variant = 'hint',\n align = 'center',\n placement,\n portalRoot,\n tooltipProps,\n className,\n ref,\n onPointerEnter,\n onPointerMove,\n onPointerLeave,\n onPointerDown,\n onFocusCapture,\n onBlurCapture,\n ...props\n}: TooltipProps) {\n const tooltipId = useId();\n const describedBy = tooltipProps?.id ?? tooltipId;\n const timing = useContext(TooltipContext);\n const [open, setOpen] = useState(false);\n const [dialogRoot, setDialogRoot] = useState<HTMLDialogElement | null>(null);\n const hoverTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const suppressed = useRef(false);\n const side = placement ?? (variant === 'chart' ? 'top' : 'bottom');\n\n function cancelHover() {\n if (hoverTimer.current !== null) clearTimeout(hoverTimer.current);\n hoverTimer.current = null;\n }\n\n function close() {\n cancelHover();\n if (open) timing?.rememberClose();\n setOpen(false);\n }\n\n const closeFromEffect = useEffectEvent(close);\n\n useEffect(() => cancelHover, []);\n\n useEffect(() => {\n if (!open) return;\n\n function onKeyDown(event: KeyboardEvent) {\n if (event.key !== 'Escape') return;\n suppressed.current = true;\n closeFromEffect();\n }\n\n document.addEventListener('keydown', onKeyDown);\n\n return () => document.removeEventListener('keydown', onKeyDown);\n }, [open]);\n\n const { refs, floatingStyles, update } = useFloating({\n open,\n onOpenChange: setOpen,\n placement: align === 'center' ? side : `${side}-${align}`,\n strategy: 'fixed',\n whileElementsMounted: autoUpdate,\n middleware: [\n offset(variant === 'chart' ? 16 : 8),\n flip(),\n shift({ padding: 12 }),\n ],\n });\n\n const closeOnOutsidePointer = useEffectEvent((event: PointerEvent) => {\n const node = event.target as Node;\n if (\n refs.domReference.current?.contains(node) ||\n refs.floating.current?.contains(node)\n )\n return;\n close();\n });\n\n function followCursor(event: { clientX: number; clientY: number }) {\n const { clientX: x, clientY: y } = event;\n refs.setPositionReference({\n getBoundingClientRect() {\n return {\n x,\n y,\n top: y,\n left: x,\n right: x,\n bottom: y,\n width: 0,\n height: 0,\n toJSON() {\n return {};\n },\n };\n },\n });\n update();\n }\n\n useEffect(() => {\n if (!open || variant !== 'chart') return;\n\n function onDocPointerDown(event: PointerEvent) {\n closeOnOutsidePointer(event);\n }\n\n document.addEventListener('pointerdown', onDocPointerDown);\n\n return () => document.removeEventListener('pointerdown', onDocPointerDown);\n }, [open, variant]);\n\n const triggerRef = useMergeRefs([\n refs.setReference,\n ref,\n (element: HTMLSpanElement | null) =>\n setDialogRoot(element?.closest('dialog') ?? null),\n ]);\n const floatingRef = useMergeRefs([refs.setFloating, tooltipProps?.ref]);\n\n return (\n <>\n <span\n {...props}\n ref={triggerRef}\n data-variant={variant}\n className={classNames('altertable-tooltip-trigger', className)}\n onPointerEnter={event => {\n onPointerEnter?.(event);\n if (\n event.defaultPrevented ||\n event.pointerType !== 'mouse' ||\n suppressed.current\n )\n return;\n if (variant === 'chart') followCursor(event);\n if (open) return;\n cancelHover();\n const delay = variant === 'chart' ? 0 : (timing?.hoverDelay() ?? 500);\n if (delay === 0) setOpen(true);\n else\n hoverTimer.current = setTimeout(() => {\n hoverTimer.current = null;\n setOpen(true);\n }, delay);\n }}\n onPointerMove={event => {\n onPointerMove?.(event);\n if (\n event.defaultPrevented ||\n variant !== 'chart' ||\n event.pointerType !== 'mouse'\n )\n return;\n followCursor(event);\n }}\n onPointerLeave={event => {\n onPointerLeave?.(event);\n suppressed.current = false;\n if (variant === 'chart' && event.pointerType !== 'mouse') return;\n if (\n !event.defaultPrevented &&\n !event.currentTarget.contains(document.activeElement)\n )\n close();\n else cancelHover();\n }}\n onPointerDown={event => {\n onPointerDown?.(event);\n if (event.defaultPrevented) return;\n if (variant === 'chart' && event.pointerType !== 'mouse') {\n setOpen(wasOpen => !wasOpen);\n\n return;\n }\n suppressed.current = true;\n close();\n }}\n onFocusCapture={event => {\n onFocusCapture?.(event);\n if (\n event.defaultPrevented ||\n suppressed.current ||\n !event.target.matches(':focus-visible')\n )\n return;\n cancelHover();\n setOpen(true);\n }}\n onBlurCapture={event => {\n onBlurCapture?.(event);\n if (\n event.defaultPrevented ||\n event.currentTarget.contains(event.relatedTarget)\n )\n return;\n suppressed.current = false;\n if (!event.currentTarget.matches(':hover')) close();\n }}\n >\n {Children.map(children, child =>\n isValidElement<{ 'aria-describedby'?: string }>(child)\n ? cloneElement(child, {\n 'aria-describedby':\n [\n child.props['aria-describedby'],\n open ? describedBy : undefined,\n ]\n .filter(Boolean)\n .join(' ') || undefined,\n })\n : child\n )}\n </span>\n {open && (\n <FloatingPortal root={portalRoot ?? dialogRoot ?? undefined}>\n <span\n {...tooltipProps}\n ref={floatingRef}\n data-variant={variant}\n className={classNames(\n 'altertable-tooltip-content',\n tooltipProps?.className\n )}\n style={{ ...tooltipProps?.style, ...floatingStyles }}\n role=\"tooltip\"\n id={describedBy}\n >\n {content}\n </span>\n </FloatingPortal>\n )}\n </>\n );\n}\n",
27
- "import { AppIcon } from '@/src/react/ui/icons';\nimport { Tooltip } from '@/src/react/ui/Tooltip';\nimport { Button } from '@/src/react/ui/Button';\n\n/** Idle keeps the same reserved space as refresh and failure. Initial loading belongs to skeletons. */\nexport type WidgetStatus =\n | { kind: 'idle' }\n | { kind: 'updating'; message?: string }\n | { kind: 'error'; message?: string; onRetry?: () => void };\n\n/** Fixed-height feedback keeps data in place; the retry belongs beside its failure message. */\nexport function RequestHint({\n status,\n retryLabel = 'Retry',\n}: {\n status?: WidgetStatus;\n retryLabel?: string;\n}) {\n const active = status && status.kind !== 'idle';\n const message = active\n ? (status.message ??\n (status.kind === 'error' ? 'Couldn’t refresh' : 'Refreshing…'))\n : '';\n\n return (\n <div\n className=\"altertable-request-hint\"\n data-state={status?.kind ?? 'idle'}\n role={status?.kind === 'error' ? 'alert' : 'status'}\n aria-atomic=\"true\"\n >\n {active && (\n <>\n <span className=\"altertable-request-hint-copy\">\n <AppIcon\n name={status.kind === 'error' ? 'error' : 'loading'}\n size={14}\n className={\n status.kind === 'updating'\n ? 'altertable-request-hint-spinner'\n : undefined\n }\n />\n <span className=\"altertable-request-hint-message\" title={message}>\n {message}\n </span>\n </span>\n {status.kind === 'error' && status.onRetry && (\n <Button variant=\"ghost\" size=\"compact\" onClick={status.onRetry}>\n {retryLabel}\n </Button>\n )}\n </>\n )}\n </div>\n );\n}\n\n/** Fixed toolbar footprint preserves the title and action positions across request states. */\nexport function WidgetStatusControl({ status }: { status?: WidgetStatus }) {\n const kind = status?.kind ?? 'idle';\n const message =\n status?.kind === 'error'\n ? (status.message ?? 'Couldn’t refresh')\n : 'Refreshing';\n\n return (\n <div\n className=\"altertable-widget-status\"\n data-state={kind}\n role={kind === 'error' ? 'alert' : 'status'}\n aria-atomic=\"true\"\n >\n {kind === 'updating' && (\n <span className=\"altertable-widget-status-shimmer\">\n <span className=\"altertable-widget-status-base\">Refreshing</span>\n <span className=\"altertable-widget-status-sweep\" aria-hidden=\"true\">\n <span data-text=\"Refreshing\" />\n </span>\n </span>\n )}\n {status?.kind === 'error' && (\n <>\n <span className=\"altertable-widget-status-announcement\">\n {message}\n </span>\n <Tooltip\n content={`${message}. ${status.onRetry ? 'Try again to refresh these results.' : 'Refresh this view to try again.'}`}\n >\n <Button\n variant=\"ghost\"\n size=\"compact\"\n onClick={status.onRetry}\n disabled={!status.onRetry}\n >\n <AppIcon name=\"error\" size={14} />\n Retry\n </Button>\n </Tooltip>\n </>\n )}\n </div>\n );\n}\n",
28
- "import {\n useCallback,\n useEffect,\n useState,\n type ComponentPropsWithRef,\n} from 'react';\nimport { useMergeRefs } from '@floating-ui/react';\nimport { classNames } from '@/src/react/ui/classNames';\n\nexport type GradientScrollProps = ComponentPropsWithRef<'div'> & {\n axis?: 'vertical' | 'horizontal';\n /** Disable the start fade when sticky controls share the scrollport. */\n fadeStart?: boolean;\n};\n\ntype ScrollMetrics = Pick<\n HTMLElement,\n | 'scrollTop'\n | 'scrollHeight'\n | 'clientHeight'\n | 'scrollLeft'\n | 'scrollWidth'\n | 'clientWidth'\n>;\n\n/** The visible edges that still have content beyond them. */\nexport function scrollFadeEdges(\n metrics: ScrollMetrics,\n axis: 'vertical' | 'horizontal'\n) {\n const position = axis === 'vertical' ? metrics.scrollTop : metrics.scrollLeft;\n const viewport =\n axis === 'vertical' ? metrics.clientHeight : metrics.clientWidth;\n const content =\n axis === 'vertical' ? metrics.scrollHeight : metrics.scrollWidth;\n\n return { start: position > 0, end: position + viewport < content - 1 };\n}\n\n/** Fades only scrollable edges; content, size, and scroll changes update the mask. */\nexport function GradientScroll({\n axis = 'vertical',\n fadeStart = true,\n className,\n children,\n ref,\n ...props\n}: GradientScrollProps) {\n const [element, setElement] = useState<HTMLDivElement | null>(null);\n const [edges, setEdges] = useState({ start: false, end: false });\n const mergedRef = useMergeRefs([setElement, ref]);\n\n const measure = useCallback(() => {\n if (!element) return;\n const next = scrollFadeEdges(element, axis);\n setEdges(current =>\n current.start === next.start && current.end === next.end ? current : next\n );\n }, [element, axis]);\n\n useEffect(() => {\n if (!element) return;\n const scrollElement = element;\n const observer = new ResizeObserver(measure);\n\n function observeChildren() {\n for (const child of scrollElement.children) observer.observe(child);\n }\n observer.observe(element);\n observeChildren();\n const mutations = new MutationObserver(() => {\n observeChildren();\n measure();\n });\n mutations.observe(element, { childList: true });\n element.addEventListener('scroll', measure, { passive: true });\n window.addEventListener('resize', measure);\n const frame = requestAnimationFrame(measure);\n const delayed = window.setTimeout(measure, 100);\n\n return () => {\n cancelAnimationFrame(frame);\n window.clearTimeout(delayed);\n mutations.disconnect();\n observer.disconnect();\n element.removeEventListener('scroll', measure);\n window.removeEventListener('resize', measure);\n };\n }, [element, measure]);\n\n return (\n <div\n {...props}\n ref={mergedRef}\n className={classNames('altertable-gradient-scroll', className)}\n data-axis={axis}\n data-fade-start={fadeStart && edges.start ? '' : undefined}\n data-fade-end={edges.end ? '' : undefined}\n >\n {children}\n </div>\n );\n}\n",
29
- "/** Decorative selection indicator; the containing control owns its accessible semantics. */\nexport function SelectionMark({ selected }: { selected: boolean }) {\n return (\n <span\n className=\"altertable-selection-mark\"\n data-selected={selected || undefined}\n aria-hidden=\"true\"\n />\n );\n}\n",
30
- "import type { ComponentPropsWithRef } from 'react';\nimport { classNames } from '@/src/react/ui/classNames';\nimport type { SearchMatchValue } from '@/src/react/ui/searchItems';\n\nexport type SearchMatchProps = {\n match: SearchMatchValue;\n} & Omit<ComponentPropsWithRef<'span'>, 'children'>;\n\nexport function SearchMatch({ match, className, ...props }: SearchMatchProps) {\n const { text, ranges } = match;\n const parts = [];\n let position = 0;\n for (const range of ranges) {\n const start = Math.max(position, Math.min(text.length, range.start));\n const end = Math.max(start, Math.min(text.length, range.end));\n if (start > position) parts.push(text.slice(position, start));\n if (end > start)\n parts.push(<mark key={`${start}-${end}`}>{text.slice(start, end)}</mark>);\n position = end;\n }\n if (position < text.length) parts.push(text.slice(position));\n\n return (\n <span\n {...props}\n className={classNames('altertable-search-match', className)}\n >\n {parts}\n </span>\n );\n}\n",
31
- "import fuzzysort from 'fuzzysort';\n\nexport type SearchRange = { start: number; end: number };\n/** The exact displayed text and its offsets stay together for safe rendering. */\nexport type SearchMatchValue = { text: string; ranges: readonly SearchRange[] };\nexport type SearchAttribute<Item> = {\n name: string;\n getter: (item: Item) => string;\n weight?: number;\n};\nexport type SearchHit<Item> = {\n item: Item;\n score: number;\n /** Render displayed fields with <SearchMatch match={hit.matches.fieldName} />. */\n matches: Record<string, SearchMatchValue>;\n};\nexport type SearchItemsOptions<Item> = {\n attributes: readonly [SearchAttribute<Item>, ...SearchAttribute<Item>[]];\n /** Literal filtering preserves source order; fuzzy search ranks discovery results. */\n mode?: 'literal' | 'fuzzy';\n limit?: number;\n fuzzyThreshold?: number;\n};\n\nfunction mergeRanges(ranges: SearchRange[]): SearchRange[] {\n const sorted = ranges.sort((a, b) => a.start - b.start || a.end - b.end);\n const merged: SearchRange[] = [];\n for (const range of sorted) {\n const previous = merged.at(-1);\n if (previous && range.start <= previous.end)\n previous.end = Math.max(previous.end, range.end);\n else merged.push({ ...range });\n }\n\n return merged;\n}\n\n/** Fold accents without losing offsets into the original string. */\nfunction fold(text: string) {\n let value = '';\n const offsets: SearchRange[] = [];\n for (let start = 0; start < text.length;) {\n const point = text.codePointAt(start)!;\n const original = String.fromCodePoint(point);\n const end = start + original.length;\n const normalized = original\n .normalize('NFD')\n .replace(/\\p{Diacritic}/gu, '')\n .toLocaleLowerCase();\n for (let index = 0; index < normalized.length; index++)\n offsets.push({ start, end });\n value += normalized;\n start = end;\n }\n\n return { value, offsets };\n}\n\nfunction literalRanges(\n text: string,\n terms: readonly string[]\n): SearchRange[][] {\n const folded = fold(text);\n\n return terms.map(term => {\n const ranges: SearchRange[] = [];\n for (\n let index = folded.value.indexOf(term);\n index !== -1;\n index = folded.value.indexOf(term, index + term.length)\n ) {\n const first = folded.offsets[index];\n const last = folded.offsets[index + term.length - 1];\n if (first && last) ranges.push({ start: first.start, end: last.end });\n }\n\n return ranges;\n });\n}\n\n/**\n * Search only a complete local collection. Empty queries retain every item.\n * When a searched field is displayed, render its match with SearchMatch:\n * `hits.map(hit => <SearchMatch match={hit.matches.name} />)`.\n * Fields used only to find a row need no visible highlight.\n */\nexport function searchItems<Item>(\n items: readonly Item[],\n query: string,\n options: SearchItemsOptions<Item>\n): SearchHit<Item>[] {\n const normalizedQuery = fold(query.trim()).value;\n const terms = normalizedQuery.split(/\\s+/).filter(Boolean);\n const mode = options.mode ?? 'literal';\n const hits: SearchHit<Item>[] = [];\n\n for (const item of items) {\n const matches: Record<string, SearchMatchValue> = {};\n let score = 0;\n let matched = terms.length === 0;\n const matchedTerms = new Set<number>();\n\n for (const attribute of options.attributes) {\n const value = attribute.getter(item);\n const fuzzy =\n mode === 'fuzzy' && normalizedQuery\n ? fuzzysort.single(query.trim(), value)\n : null;\n if (fuzzy && fuzzy.score >= (options.fuzzyThreshold ?? 0.3)) {\n matched = true;\n score = Math.max(score, fuzzy.score * (attribute.weight ?? 1));\n matches[attribute.name] = {\n text: value,\n ranges: mergeRanges(\n [...fuzzy.indexes].map(index => ({ start: index, end: index + 1 }))\n ),\n };\n } else if (mode === 'literal' && terms.length) {\n const termMatches = literalRanges(value, terms);\n termMatches.forEach((ranges, index) => {\n if (ranges.length) matchedTerms.add(index);\n });\n matches[attribute.name] = {\n text: value,\n ranges: mergeRanges(termMatches.flat()),\n };\n } else {\n matches[attribute.name] = { text: value, ranges: [] };\n }\n }\n\n if (mode === 'literal' && terms.length)\n matched = matchedTerms.size === terms.length;\n if (matched) hits.push({ item, score, matches });\n }\n if (mode === 'fuzzy' && terms.length) hits.sort((a, b) => b.score - a.score);\n\n return options.limit === undefined\n ? hits\n : hits.slice(0, Math.max(0, options.limit));\n}\n",
32
- "import { useState, type ComponentProps, type ReactNode } from 'react';\nimport { parseDate, type CalendarDate } from '@internationalized/date';\nimport {\n Button,\n CalendarCell,\n CalendarGrid,\n CalendarGridBody,\n CalendarGridHeader,\n CalendarHeaderCell,\n CalendarMonthPicker,\n CalendarYearPicker,\n DateInput,\n DateRangePicker as AriaDateRangePicker,\n DateSegment,\n Dialog,\n Group,\n ListBox,\n ListBoxItem,\n Popover,\n RangeCalendar,\n Select,\n SelectValue,\n type RangeValue,\n} from 'react-aria-components';\nimport { classNames } from '@/src/react/ui/classNames';\nimport { AppIcon } from '@/src/react/ui/icons';\nimport { formatDateRange, pluralize } from '@/src/core/format';\nimport { Checkbox } from '@/src/react/ui/Checkbox';\n\nimport {\n availableDatePresets,\n inclusiveDays,\n withinBounds,\n type DatePreset,\n type DatePresetId,\n type DateRange,\n} from '@/src/core/date-range';\nexport type { DatePresetId, DateRange } from '@/src/core/date-range';\n\nexport type DateRangePickerProps = {\n label?: string;\n value: DateRange | null;\n onChange: (range: DateRange | null) => void;\n minDate?: string;\n maxDate?: string;\n maxRangeDays?: number;\n timeZone?: string;\n /** Used to display the reset affordance. The app variable owns the URL and reset meaning. */\n resetValue?: DateRange;\n isDefault?: boolean;\n onReset?: () => void;\n onPresetChange?: (id: DatePresetId) => void;\n selectedPresetId?: DatePresetId | null;\n calendarFooter?: ReactNode;\n comparison?: {\n enabled: boolean;\n range: DateRange | null;\n onChange: (enabled: boolean) => void;\n };\n} & Omit<\n ComponentProps<typeof AriaDateRangePicker<CalendarDate>>,\n | 'children'\n | 'value'\n | 'onChange'\n | 'minValue'\n | 'maxValue'\n | 'isOpen'\n | 'onOpenChange'\n | 'defaultValue'\n | 'defaultOpen'\n>;\n\n/** The app owns URL state; `dateRangeControl` binds a date variable to this picker. */\nexport function DateRangePicker({\n label = 'Date range',\n value,\n onChange,\n minDate,\n maxDate,\n maxRangeDays,\n timeZone,\n resetValue,\n isDefault,\n onReset,\n onPresetChange,\n selectedPresetId,\n calendarFooter,\n comparison,\n className,\n ...props\n}: DateRangePickerProps) {\n const [error, setError] = useState('');\n const [open, setOpen] = useState(false);\n const selected: RangeValue<CalendarDate> | null = value\n ? { start: parseDate(value.start), end: parseDate(value.end) }\n : null;\n const presets = availableDatePresets({\n minDate,\n maxDate,\n maxRangeDays,\n timeZone,\n });\n const selectedDays = value ? inclusiveDays(value) : 0;\n\n function choosePreset(preset: DatePreset) {\n setError('');\n if (onPresetChange) onPresetChange(preset.id);\n else onChange(preset.range);\n setOpen(false);\n }\n\n return (\n <AriaDateRangePicker\n {...props}\n isOpen={open}\n onOpenChange={next => {\n setOpen(next);\n if (next) setError('');\n }}\n aria-label={`${props['aria-label'] ?? label}${comparison?.enabled ? ', compared with previous period' : ''}`}\n className={values =>\n classNames(\n 'altertable-date-range',\n typeof className === 'function' ? className(values) : className\n )\n }\n value={selected}\n onChange={range => {\n const next = range\n ? { start: range.start.toString(), end: range.end.toString() }\n : null;\n if (next && !withinBounds(next, minDate, maxDate, maxRangeDays)) {\n setError(\n maxRangeDays\n ? `Choose up to ${maxRangeDays} available days.`\n : 'Choose dates within the available range.'\n );\n\n return;\n }\n setError('');\n onChange(next);\n }}\n minValue={minDate ? parseDate(minDate) : undefined}\n maxValue={maxDate ? parseDate(maxDate) : undefined}\n >\n <Group>\n <DateInput slot=\"start\">\n {segment => <DateSegment segment={segment} />}\n </DateInput>\n <span aria-hidden=\"true\">–</span>\n <DateInput slot=\"end\">\n {segment => <DateSegment segment={segment} />}\n </DateInput>\n {comparison?.enabled && (\n <span className=\"altertable-date-range-comparison\">vs prior</span>\n )}\n {(onReset || resetValue) &&\n value &&\n !(\n isDefault ??\n (resetValue &&\n value.start === resetValue.start &&\n value.end === resetValue.end)\n ) && (\n <button\n type=\"button\"\n className=\"altertable-date-range-reset\"\n aria-label=\"Reset date range\"\n onClick={() =>\n onReset ? onReset() : onChange(resetValue ?? null)\n }\n >\n <AppIcon name=\"reset\" size={14} />\n </button>\n )}\n <Button aria-label=\"Choose dates\">\n <AppIcon name=\"calendar\" size={16} />\n </Button>\n </Group>\n {error && (\n <span className=\"altertable-date-range-error\" role=\"alert\">\n {error}\n </span>\n )}\n <Popover className=\"altertable-date-range-popover\">\n <Dialog>\n <div className=\"altertable-date-range-content\">\n {presets.length > 0 && (\n <fieldset className=\"altertable-date-range-presets\">\n <legend className=\"altertable-date-range-heading\">\n Quick ranges\n </legend>\n <div className=\"altertable-date-range-preset-list\">\n {presets.map(preset => (\n <Button\n key={preset.id}\n className=\"altertable-date-range-preset\"\n aria-current={\n (\n selectedPresetId === undefined\n ? value?.start === preset.range.start &&\n value?.end === preset.range.end\n : selectedPresetId === preset.id\n )\n ? 'true'\n : undefined\n }\n onPress={() => choosePreset(preset)}\n >\n {preset.label}\n </Button>\n ))}\n </div>\n </fieldset>\n )}\n <div className=\"altertable-date-range-custom\">\n <span className=\"altertable-date-range-heading\">\n Custom range\n </span>\n <RangeCalendar\n isDateUnavailable={(date, anchorDate) =>\n !!maxRangeDays &&\n !!anchorDate &&\n Math.abs(\n date.toDate('UTC').getTime() -\n anchorDate.toDate('UTC').getTime()\n ) >=\n maxRangeDays * 86_400_000\n }\n >\n <header>\n <Button slot=\"previous\" aria-label=\"Previous month\">\n <AppIcon name=\"previousMonth\" size={16} />\n </Button>\n <CalendarMonthPicker format=\"short\">\n {picker => (\n <Select\n aria-label={picker['aria-label']}\n selectedKey={String(picker.value)}\n onSelectionChange={key => picker.onChange(Number(key))}\n className=\"altertable-calendar-select\"\n >\n <Button>\n <SelectValue />\n <AppIcon name=\"disclosure\" size={14} />\n </Button>\n <Popover\n className=\"altertable-calendar-select-popover\"\n placement=\"bottom start\"\n >\n <ListBox items={picker.items}>\n {month => (\n <ListBoxItem\n id={String(month.id)}\n textValue={month.formatted}\n >\n {month.formatted}\n </ListBoxItem>\n )}\n </ListBox>\n </Popover>\n </Select>\n )}\n </CalendarMonthPicker>\n <CalendarYearPicker>\n {picker => (\n <Select\n aria-label={picker['aria-label']}\n selectedKey={String(picker.value)}\n onSelectionChange={key => picker.onChange(Number(key))}\n className=\"altertable-calendar-select\"\n >\n <Button>\n <SelectValue />\n <AppIcon name=\"disclosure\" size={14} />\n </Button>\n <Popover\n className=\"altertable-calendar-select-popover\"\n placement=\"bottom start\"\n >\n <ListBox items={picker.items}>\n {year => (\n <ListBoxItem\n id={String(year.id)}\n textValue={year.formatted}\n >\n {year.formatted}\n </ListBoxItem>\n )}\n </ListBox>\n </Popover>\n </Select>\n )}\n </CalendarYearPicker>\n <Button slot=\"next\" aria-label=\"Next month\">\n <AppIcon name=\"nextMonth\" size={16} />\n </Button>\n </header>\n <CalendarGrid>\n <CalendarGridHeader>\n {day => <CalendarHeaderCell>{day}</CalendarHeaderCell>}\n </CalendarGridHeader>\n <CalendarGridBody>\n {date => <CalendarCell date={date} />}\n </CalendarGridBody>\n </CalendarGrid>\n </RangeCalendar>\n <div className=\"altertable-date-range-footer\">\n <div>\n <span className=\"altertable-date-range-footer-label\">\n Selected dates\n </span>\n <strong>\n {value\n ? formatDateRange(value)\n : 'Select a start and end date'}\n </strong>\n </div>\n {value && (\n <span className=\"altertable-date-range-footer-meta\">\n {selectedDays} {pluralize(selectedDays, 'day')}\n {timeZone ? ` · ${timeZone}` : ''}\n </span>\n )}\n </div>\n {comparison && (\n <Checkbox\n className=\"altertable-date-range-compare\"\n label=\"Compare with previous period\"\n checked={comparison.enabled}\n disabled={!comparison.range}\n onChange={comparison.onChange}\n description={\n comparison.range && formatDateRange(comparison.range)\n }\n />\n )}\n </div>\n </div>\n {calendarFooter}\n </Dialog>\n </Popover>\n </AriaDateRangePicker>\n );\n}\n",
33
- "import { useId, type ReactNode } from 'react';\nimport { SelectionMark } from '@/src/react/ui/SelectionMark';\nimport { classNames } from '@/src/react/ui/classNames';\n\nexport type CheckboxProps = {\n label: string;\n description?: ReactNode;\n checked: boolean;\n onChange: (checked: boolean) => void;\n disabled?: boolean;\n className?: string;\n};\n\nexport function Checkbox({\n label,\n description,\n checked,\n onChange,\n disabled,\n className,\n}: CheckboxProps) {\n const descriptionId = useId();\n\n return (\n <label className={classNames('altertable-checkbox', className)}>\n <input\n type=\"checkbox\"\n aria-label={label}\n checked={checked}\n disabled={disabled}\n aria-describedby={description ? descriptionId : undefined}\n onChange={event => onChange(event.currentTarget.checked)}\n />\n <SelectionMark selected={checked} />\n <span>\n {label}\n {description && <small id={descriptionId}>{description}</small>}\n </span>\n </label>\n );\n}\n",
34
- "import type {\n DimensionMember,\n DimensionOption,\n DimensionSelection,\n DimensionValue,\n DimensionVariable,\n} from '@/src/core/dimension';\nimport { dimensionMemberKey } from '@/src/core/dimension';\nimport { invariant } from '@/src/core/invariant';\nimport { Combobox, type ComboboxOption } from '@/src/react/ui/Combobox';\n\nconst allKey = 'all';\n\n/** Adapts the typed dimension contract to the shared Combobox control. */\nexport function DimensionPicker<T extends DimensionValue>({\n filter,\n value,\n onChange,\n options: suppliedOptions,\n loading = false,\n error = false,\n onRetry,\n}: {\n filter: DimensionVariable<T>;\n value: DimensionSelection<T>;\n onChange: (value: DimensionSelection<T>) => void;\n options?: readonly DimensionOption<T>[];\n loading?: boolean;\n error?: boolean;\n onRetry?: () => void;\n}) {\n const members = value.kind === 'include' ? value.members : [];\n const available = [...(suppliedOptions ?? filter.options)];\n for (const member of members)\n if (\n member.kind === 'value' &&\n !available.some(option => option.value === member.value)\n )\n available.unshift({\n value: member.value,\n label: String(member.value),\n count: 0,\n });\n\n const byKey = new Map<string, DimensionMember<T>>();\n const choices: ComboboxOption[] = available.map(option => {\n const member = { kind: 'value' as const, value: option.value };\n const id = dimensionMemberKey(member);\n byKey.set(id, member);\n\n return {\n id,\n label: option.label,\n description:\n option.count === undefined\n ? undefined\n : `${option.count.toLocaleString()} matches`,\n };\n });\n if (filter.allowMissing) {\n const member = { kind: 'missing' as const };\n const id = dimensionMemberKey(member);\n byKey.set(id, member);\n }\n const missingOption = filter.allowMissing\n ? {\n id: dimensionMemberKey({ kind: 'missing' }),\n label: 'No value',\n description: `Records without a ${filter.label.toLocaleLowerCase()} value`,\n }\n : undefined;\n\n if (filter.selection === 'single') {\n return (\n <Combobox\n label={filter.label}\n value={members.length ? dimensionMemberKey(members[0]!) : allKey}\n onChange={(id: string) => {\n if (id === allKey) return onChange({ kind: 'all' });\n const member = byKey.get(id);\n invariant(member, `Unknown ${filter.label} option.`);\n onChange({ kind: 'include', members: [member] });\n }}\n options={[{ id: allKey, label: 'All' }, ...choices]}\n missingOption={missingOption}\n resetValue={allKey}\n loading={loading}\n error={error}\n onRetry={onRetry}\n emptyMessage={error ? 'Couldn’t load values' : 'No matching values'}\n />\n );\n }\n\n return (\n <Combobox\n label={filter.label}\n values={members.map(dimensionMemberKey)}\n onChange={(ids: string[]) => {\n if (!ids.length) return onChange({ kind: 'all' });\n const selected = ids.map(id => {\n const member = byKey.get(id);\n invariant(member, `Unknown ${filter.label} option.`);\n\n return member;\n });\n onChange({ kind: 'include', members: selected });\n }}\n options={choices}\n missingOption={missingOption}\n maxSelected={filter.maxSelected}\n emptySelectionLabel=\"All\"\n loading={loading}\n error={error}\n onRetry={onRetry}\n />\n );\n}\n",
35
- "import { useEffect, useState } from 'react';\nimport {\n getDataAppTransport,\n localFrameBridge,\n type IframeTransport,\n} from '@/src/client/iframe';\nimport {\n isDataAppPresentation,\n type DataAppPresentation,\n} from '@/src/core/presentation';\n\nfunction presentationFromBridgeState(state: unknown) {\n const presentation =\n state && typeof state === 'object'\n ? (state as { presentation?: unknown }).presentation\n : undefined;\n\n return isDataAppPresentation(presentation) ? presentation : undefined;\n}\n\n/** Local preview verifies its parent before accepting presentation context. */\nexport function useDataAppPresentation() {\n const [presentation, setPresentation] = useState<\n DataAppPresentation | undefined\n >(() => presentationFromBridgeState(getDataAppTransport()?.snapshot()));\n\n useEffect(() => {\n let disposed = false;\n let unsubscribe: (() => void) | undefined;\n\n function attach(bridge: IframeTransport) {\n if (disposed) return;\n unsubscribe = bridge.subscribe(state =>\n setPresentation(presentationFromBridgeState(state))\n );\n setPresentation(presentationFromBridgeState(bridge.snapshot()));\n }\n\n const bridge = getDataAppTransport();\n if (bridge) attach(bridge);\n else\n void localFrameBridge()\n ?.connect?.()\n .then(attach)\n .catch(() => {});\n\n return () => {\n disposed = true;\n unsubscribe?.();\n };\n }, []);\n\n return presentation;\n}\n",
36
- "import type { Theme } from '@/src/core/appearance';\n\n/** Presentation owned by the parent shell, delivered only over a trusted bridge. */\nexport type DataAppPresentation = {\n surface: 'embedded' | 'standalone';\n theme: Theme;\n};\n\nexport function isDataAppPresentation(\n value: unknown\n): value is DataAppPresentation {\n if (!value || typeof value !== 'object') return false;\n const presentation = value as DataAppPresentation;\n\n return (\n (presentation.surface === 'embedded' ||\n presentation.surface === 'standalone') &&\n (presentation.theme === 'light' || presentation.theme === 'dark')\n );\n}\n",
37
- "import { useDataAppPresentation } from '@/src/react/ui/useDataAppPresentation';\nimport { useEffect, useRef, type ComponentProps, type ReactNode } from 'react';\nimport { useAppAppearance } from '@/src/react/ui/useAppAppearance';\nimport type { DisclosedQuery } from '@/src/core/contract';\nimport type { DataAppConfig } from '@/src/core/config';\nimport type { CsvExport } from '@/src/react/ui/csv-export';\nimport {\n displayedSnapshot,\n type DisplayedSnapshot,\n} from '@/src/core/data-view';\nimport { AboutData, type AboutEmpty } from '@/src/react/ui/AboutData';\nimport { AppHeader } from '@/src/react/ui/AppHeader';\nimport { AppLayout } from '@/src/react/ui/AppLayout';\nimport { AppScope } from '@/src/react/ui/AppScope';\nimport { AppToolbar, type AppToolbarProps } from '@/src/react/ui/AppToolbar';\nimport type { DataContext } from '@/src/react/ui/data-context';\nimport type { BoundStory } from '@/src/react/ui/story';\nimport { ThemeToggle } from '@/src/react/ui/ThemeSelector';\nimport { VariableBar } from '@/src/react/ui/VariableBar';\nimport { DataViewToast } from '@/src/react/ui/DataViewToast';\nimport { InspectionContext } from '@/src/react/ui/InspectionContext';\nimport { DataSection, type SectionResult } from '@/src/react/ui/DataSection';\nimport type { EmptyContent } from '@/src/react/ui/presentation';\n\ntype DataAppBaseProps = {\n config: DataAppConfig;\n dataContext: DataContext;\n aboutEmpty?: AboutEmpty;\n description?: ReactNode;\n /** Display names only; config.scope remains the connection identity. */\n scopeLabels?: { organization?: string; environment?: string };\n toolbarActions?: ReactNode;\n footerActions?: ReactNode;\n layoutProps?: Omit<\n ComponentProps<typeof AppLayout>,\n 'children' | 'footerActions'\n >;\n};\n\nexport type DataAppRequest<Data, Input> = SectionResult<Data, Input> & {\n queries?: DisclosedQuery[];\n refresh?: AppToolbarProps['refresh'];\n empty: EmptyContent;\n controls?: ReactNode;\n};\n\nexport type DataAppProps<Data = unknown, Input = unknown> = DataAppBaseProps &\n (\n | {\n request: DataAppRequest<Data, Input>;\n /** Findings are always derived from the result currently visible to the reader. */\n story: BoundStory<Data, Input>;\n /** Every analytical view exports every distinct dataset in its displayed result. */\n csvExport: (snapshot: DisplayedSnapshot<Data, Input>) => CsvExport;\n children: (data: Data, displayedInput: Input) => ReactNode;\n loading?: ReactNode;\n label?: string;\n queries?: never;\n refresh?: never;\n variables?: never;\n }\n | {\n request?: never;\n story?: never;\n csvExport?: CsvExport;\n children: ReactNode;\n queries?: DisclosedQuery[];\n refresh?: AppToolbarProps['refresh'];\n variables?: ReactNode;\n loading?: never;\n empty?: never;\n label?: never;\n }\n );\n\n/** Owns the page title, header, gutter, and width; body content uses section headings.\n * The primary request owns controls, empty state, displayed input, refresh, and inspection.\n * Without a request, the shell accepts authored children for setup or static views. */\nexport function DataApp<Data, Input>(props: DataAppProps<Data, Input>) {\n const {\n config,\n dataContext,\n aboutEmpty,\n description,\n scopeLabels,\n request,\n queries,\n refresh,\n toolbarActions,\n footerActions,\n layoutProps,\n } = props;\n const presentation = useDataAppPresentation();\n const isEmbedded = presentation?.surface === 'embedded';\n const themeController = useAppAppearance(\n config.appearance,\n presentation?.theme\n );\n const bodyRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (import.meta.env?.DEV && bodyRef.current?.querySelector('h1'))\n console.warn(\n 'DataApp owns the page title. Use section headings (h2) in its body.'\n );\n });\n\n const snapshot = request && displayedSnapshot(request.view);\n const findings = request && snapshot ? props.story(snapshot) : undefined;\n const story = findings?.length ? { findings } : undefined;\n const scope = (\n <AppScope\n organization={scopeLabels?.organization ?? config.scope.organization}\n environment={scopeLabels?.environment ?? config.scope.environment}\n />\n );\n const toolbar = (\n <AppToolbar\n csvExport={\n request\n ? snapshot\n ? props.csvExport(snapshot)\n : undefined\n : props.csvExport\n }\n requestState={request?.view.kind}\n refresh={refresh ?? request?.refresh}\n story={\n story && {\n ...story,\n title: config.title,\n scope,\n dataContext,\n empty: aboutEmpty,\n theme: themeController,\n }\n }\n aboutData={\n <AboutData\n id=\"data\"\n shortcut\n dataContext={dataContext}\n empty={aboutEmpty}\n queries={queries ?? request?.queries}\n iconOnly\n variant=\"elevated\"\n />\n }\n >\n {toolbarActions}\n </AppToolbar>\n );\n\n return (\n <InspectionContext\n value={{\n dataContext,\n empty: aboutEmpty,\n queries: queries ?? request?.queries,\n }}\n >\n <AppLayout\n {...layoutProps}\n footer={isEmbedded ? null : layoutProps?.footer}\n footerActions={\n footerActions ??\n (themeController && <ThemeToggle theme={themeController} />)\n }\n >\n {isEmbedded ? (\n toolbar\n ) : (\n <AppHeader\n scope={scope}\n title={config.title}\n description={description}\n toolbar={toolbar}\n />\n )}\n {(request?.controls ?? props.variables) && (\n <VariableBar>{request?.controls ?? props.variables}</VariableBar>\n )}\n <div ref={bodyRef} className=\"altertable-app-body\">\n {request ? (\n <DataSection\n result={request}\n notice=\"none\"\n dimOnUpdate={false}\n loading={props.loading}\n empty={request.empty}\n label={props.label}\n >\n {(data, displayedInput) => props.children(data, displayedInput)}\n </DataSection>\n ) : (\n props.children\n )}\n </div>\n {request && (\n <DataViewToast\n view={request.view}\n onRetry={() => void request.refetch()}\n />\n )}\n </AppLayout>\n </InspectionContext>\n );\n}\n",
38
- "import { useLayoutEffect, useState, useSyncExternalStore } from 'react';\nimport {\n applyAppearance,\n createThemeController,\n normalizeAppearance,\n type Theme,\n type AppearanceOptions,\n} from '@/src/core/appearance';\n\n/** The parent theme takes precedence; only standalone viewers receive controls. */\nexport function useAppAppearance(\n appearance: AppearanceOptions,\n hostTheme?: Theme\n) {\n const [controller] = useState(() =>\n createThemeController(normalizeAppearance(appearance).theme)\n );\n const viewerPreference = useSyncExternalStore(\n controller.subscribe,\n controller.getTheme,\n controller.getTheme\n );\n\n useLayoutEffect(\n () =>\n applyAppearance({\n ...normalizeAppearance(appearance),\n theme: hostTheme ?? viewerPreference,\n }),\n [appearance, hostTheme, viewerPreference]\n );\n\n return hostTheme ? undefined : controller;\n}\n",
39
- "import {\n useEffect,\n useRef,\n useState,\n type ComponentPropsWithRef,\n type ReactNode,\n type RefObject,\n} from 'react';\nimport { invariant } from '@/src/core/invariant';\nimport { useMergeRefs } from '@floating-ui/react';\nimport { AppIcon } from '@/src/react/ui/icons';\nimport type { DisclosedQuery } from '@/src/core/contract';\nimport type { DataContext, GlossaryEntry } from '@/src/react/ui/data-context';\nimport { Button, type ButtonProps } from '@/src/react/ui/Button';\nimport { EmptyState } from '@/src/react/ui/EmptyState';\nimport { Kbd } from '@/src/react/ui/Kbd';\nimport { QueryList } from '@/src/react/ui/QueryList';\nimport {\n searchParams,\n slug,\n subscribeSearch,\n writeSearch,\n} from '@/src/react/ui/search';\nimport { Sheet, type SheetDialogProps } from '@/src/react/ui/Sheet';\nimport { Tabs, TabList, Tab, TabPanels, TabPanel } from '@/src/react/ui/Tabs';\nimport {\n ariaKeyShortcuts,\n shortcuts,\n useShortcut,\n} from '@/src/react/ui/shortcuts';\nimport { Tooltip } from '@/src/react/ui/Tooltip';\nimport { useInspectionDefaults } from '@/src/react/ui/InspectionContext';\n\nexport type AboutTab = 'glossary' | 'queries';\nexport type AboutEmpty = {\n glossary: { title: string; description?: string };\n queries: { title: string; description?: string };\n};\n\nexport const defaultAboutEmpty: AboutEmpty = {\n glossary: { title: 'No glossary terms for this view' },\n queries: { title: 'SQL is not available for this view' },\n};\n\nexport type AboutSubject = {\n empty?: AboutEmpty;\n id?: string;\n title?: ReactNode;\n description?: ReactNode;\n visual?: ReactNode;\n visualKind?: 'metric' | 'chart' | 'widget';\n dataContext?: DataContext;\n references?:\n | {\n kind: 'ids';\n glossaryIds?: readonly string[];\n queryNames?: readonly string[];\n }\n | { kind: 'entries'; entries: readonly GlossaryEntry[] };\n queries?: DisclosedQuery[];\n};\n\nexport type AboutDataProps = AboutSubject & {\n variant?: ButtonProps['variant'];\n iconOnly?: boolean;\n /**\n * Register the global inspect shortcut. Defaults on for existing toolbar triggers; local\n * triggers set false.\n */\n shortcut?: boolean;\n tooltip?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n portalRoot?: RefObject<HTMLElement | null>;\n sheetProps?: SheetDialogProps;\n headerActions?: ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Initial inspect tab. While open, the URL's `tab` parameter tracks selection. */\n tab?: AboutTab;\n trigger?: boolean;\n} & Omit<ComponentPropsWithRef<'button'>, 'children' | 'title'>;\n\nfunction namedGlossaryEntries(\n dataContext: DataContext | undefined,\n ids: readonly string[]\n): GlossaryEntry[] {\n return ids.map(id => {\n const entry = dataContext?.glossary[id];\n invariant(entry, `Unknown glossary entry: ${id}.`);\n\n return entry;\n });\n}\n\nfunction listedGlossaryEntries({\n references,\n dataContext,\n}: AboutSubject): GlossaryEntry[] {\n if (references?.kind === 'entries') return [...references.entries];\n if (references?.kind === 'ids' && references.glossaryIds)\n return namedGlossaryEntries(dataContext, references.glossaryIds);\n\n return Object.values(dataContext?.glossary ?? {});\n}\n\nfunction glossaryQueries(subject: AboutSubject): string[] | undefined {\n if (\n subject.references?.kind === 'ids' &&\n subject.references.queryNames?.length\n )\n return [...subject.references.queryNames];\n const names = listedGlossaryEntries(subject).flatMap(\n item => item.queryNames ?? []\n );\n\n return names.length ? names : undefined;\n}\n\nfunction subjectId({ id, title }: AboutSubject): string {\n if (id) return id;\n\n return typeof title === 'string' ? slug(title) : 'data';\n}\n\nfunction GlossaryDetail({ entry }: { entry: GlossaryEntry }) {\n return (\n <article className=\"altertable-about-glossary-entry\">\n <h3>{entry.term}</h3>\n {entry.definition ? <p>{entry.definition}</p> : null}\n </article>\n );\n}\n\nfunction resolveTab(tab: string | null | undefined): AboutTab {\n return tab === 'queries' ? 'queries' : 'glossary';\n}\n\n/**\n * Open state uses `?about=`; tab selection uses `?tab=`. Enable the global shortcut only on the\n * page-level trigger.\n */\nexport function AboutData({\n id,\n title,\n description,\n visual,\n visualKind,\n variant,\n dataContext,\n references,\n queries,\n empty,\n iconOnly = false,\n shortcut = true,\n tooltip,\n children,\n footer,\n portalRoot,\n sheetProps,\n headerActions,\n open: openProp,\n onOpenChange,\n tab,\n trigger = true,\n className,\n onClick,\n ref,\n ...props\n}: AboutDataProps) {\n const defaults = useInspectionDefaults();\n const resolvedContext = dataContext ?? defaults?.dataContext;\n const resolvedQueries = queries ?? defaults?.queries;\n const resolvedEmpty = empty ?? defaults?.empty ?? defaultAboutEmpty;\n const subject = {\n id,\n title,\n description,\n visual,\n dataContext: resolvedContext,\n references,\n queries: resolvedQueries,\n empty: resolvedEmpty,\n };\n const listed = listedGlossaryEntries(subject);\n const names = glossaryQueries(subject);\n if (names && resolvedQueries?.length) {\n for (const name of names) {\n invariant(\n resolvedQueries.some(query => query.name === name),\n `Unknown query name: ${name}.`\n );\n }\n }\n const hasQueries = (resolvedQueries ?? []).some(\n query => !names || names.includes(query.name)\n );\n const sheetId = subjectId(subject);\n const initialTab = resolveTab(tab ?? searchParams().get('tab'));\n const [uncontrolledOpen, setUncontrolledOpen] = useState(\n () => searchParams().get('about') === sheetId\n );\n const [selectedTab, setSelectedTab] = useState(initialTab);\n const open = openProp ?? uncontrolledOpen;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const mergedTrigger = useMergeRefs([triggerRef, ref]);\n const heading = title ?? 'About the data';\n const summary =\n description ??\n resolvedContext?.description ??\n 'Glossary and queries for this view.';\n const shortcutEnabled = trigger && shortcut && !props.disabled;\n const hint =\n tooltip ??\n (iconOnly && shortcutEnabled ? (\n <>\n Explore data <Kbd shortcut={shortcuts.aboutData} />\n </>\n ) : (\n 'Explore data'\n ));\n\n function setOpen(next: boolean) {\n onOpenChange?.(next);\n if (openProp === undefined) setUncontrolledOpen(next);\n if (next)\n writeSearch(\n { about: sheetId, tab: selectedTab },\n searchParams().get('about') === sheetId ? 'replace' : 'push'\n );\n else if (searchParams().get('about') === sheetId)\n writeSearch({ about: null, tab: null });\n }\n\n function selectTab(next: string | number) {\n const id = resolveTab(String(next));\n setSelectedTab(id);\n if (open) writeSearch({ about: sheetId, tab: id });\n }\n\n useEffect(() => {\n function sync() {\n const about = searchParams().get('about');\n const urlTab = searchParams().get('tab');\n if (about === sheetId) {\n if (openProp === undefined) setUncontrolledOpen(true);\n if (urlTab) setSelectedTab(resolveTab(urlTab));\n onOpenChange?.(true);\n } else if (openProp === undefined) {\n setUncontrolledOpen(false);\n }\n }\n\n return subscribeSearch(sync);\n }, [sheetId, openProp, onOpenChange]);\n\n useShortcut(shortcuts.aboutData, () => setOpen(true), shortcutEnabled);\n const triggerButton = (\n <Button\n {...props}\n ref={mergedTrigger}\n variant={variant}\n size={iconOnly ? 'icon' : 'default'}\n className={className}\n data-open={open || undefined}\n aria-label={\n props['aria-label'] ??\n (iconOnly\n ? title && typeof title === 'string'\n ? `Explore ${title}`\n : 'Explore data'\n : undefined)\n }\n aria-keyshortcuts={\n props['aria-keyshortcuts'] ??\n (shortcutEnabled ? ariaKeyShortcuts(shortcuts.aboutData) : undefined)\n }\n onClick={event => {\n onClick?.(event);\n if (!event.defaultPrevented) setOpen(true);\n }}\n >\n {children ?? (\n <>\n <AppIcon name=\"info\" />\n {!iconOnly && 'Explore details'}\n </>\n )}\n </Button>\n );\n\n return (\n <>\n {trigger ? (\n <Tooltip content={hint} portalRoot={portalRoot}>\n {triggerButton}\n </Tooltip>\n ) : null}\n <Sheet\n {...sheetProps}\n open={open}\n onOpenChange={setOpen}\n title={heading}\n description={summary}\n wide={!!visual && visualKind !== 'metric'}\n returnFocus={triggerRef}\n footer={footer}\n headerActions={headerActions}\n >\n {visual && (\n <div className=\"altertable-about-visual\" data-kind={visualKind}>\n {visual}\n </div>\n )}\n <div className=\"altertable-about-body\">\n <Tabs\n selectedKey={selectedTab}\n onSelectionChange={selectTab}\n className=\"altertable-about-tabs\"\n >\n <div className=\"altertable-about-tabbar\">\n <TabList\n aria-label={\n typeof heading === 'string' ? heading : 'About the data'\n }\n >\n <Tab id=\"glossary\">Glossary</Tab>\n <Tab id=\"queries\">Queries</Tab>\n </TabList>\n </div>\n <TabPanels>\n <TabPanel id=\"glossary\">\n {listed.length ? (\n <div className=\"altertable-about-glossary-list\">\n {listed.map(entry => (\n <GlossaryDetail key={entry.term} entry={entry} />\n ))}\n </div>\n ) : (\n <EmptyState {...resolvedEmpty.glossary} />\n )}\n </TabPanel>\n <TabPanel id=\"queries\">\n {hasQueries ? (\n <QueryList queries={resolvedQueries} names={names} expanded />\n ) : (\n <EmptyState {...resolvedEmpty.queries} />\n )}\n </TabPanel>\n </TabPanels>\n </Tabs>\n </div>\n </Sheet>\n </>\n );\n}\n",
40
- "import type { EmptyContent } from '@/src/react/ui/presentation';\nimport { classNames } from '@/src/react/ui/classNames';\n\nexport type EmptyStateProps = EmptyContent & {\n variant?: 'visual' | 'table';\n className?: string;\n};\n\nexport function EmptyState({\n title,\n description,\n variant = 'visual',\n className,\n}: EmptyStateProps) {\n return (\n <div\n className={classNames('altertable-empty-state', className)}\n data-variant={variant}\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {description ? (\n <>\n <strong>{title}</strong>\n <p>{description}</p>\n </>\n ) : (\n <p>{title}</p>\n )}\n </div>\n );\n}\n",
41
- "import { useEffect } from 'react';\n\n/**\n * `alt` is Alt/Option, leaving character keys and browser refresh untouched; `mod` is ⌘ on Apple\n * platforms and Ctrl elsewhere.\n */\nexport type Shortcut = {\n modifier: 'alt' | 'mod';\n shift?: boolean;\n code: string;\n key: string;\n};\n\nexport const shortcuts = {\n refresh: { modifier: 'alt', code: 'KeyR', key: 'R' },\n aboutData: { modifier: 'alt', code: 'KeyI', key: 'I' },\n playStory: { modifier: 'mod', code: 'Enter', key: 'Enter' },\n} as const satisfies Record<string, Shortcut>;\n\nfunction isApple(): boolean {\n return (\n typeof navigator !== 'undefined' &&\n /Macintosh|Mac OS X|iPhone|iPad/.test(navigator.userAgent)\n );\n}\n\nexport function shortcutLabel({ modifier, shift, key }: Shortcut): string {\n const platform = isApple() ? 'apple' : 'other';\n const modifierLabel = {\n apple: { alt: '⌥', mod: '⌘' },\n other: { alt: 'Alt+', mod: 'Ctrl+' },\n }[platform][modifier];\n const shiftLabel = shift ? { apple: '⇧', other: 'Shift+' }[platform] : '';\n const keyLabel =\n platform === 'apple'\n ? (({ Enter: '↩' } as Record<string, string>)[key] ?? key)\n : key;\n\n return `${modifierLabel}${shiftLabel}${keyLabel}`;\n}\n\nexport function ariaKeyShortcuts({ modifier, shift, key }: Shortcut): string {\n const modifiers = { alt: ['Alt'], mod: ['Meta', 'Control'] }[modifier];\n\n return modifiers\n .map(name => `${name}+${shift ? 'Shift+' : ''}${key}`)\n .join(' ');\n}\n\nexport function isEditingTarget(target: EventTarget | null): boolean {\n return (\n target instanceof HTMLElement &&\n !!target.closest(\n \"input, textarea, select, [contenteditable], [role='textbox']\"\n )\n );\n}\n\n/** Bind a page-level shortcut. Ignored while typing or while a modal layer is open. */\nexport function useShortcut(\n shortcut: Shortcut,\n action: () => void,\n enabled = true\n): void {\n const { modifier, shift = false, code } = shortcut;\n\n useEffect(() => {\n if (!enabled) return;\n\n function onKeyDown(event: KeyboardEvent) {\n if (\n event.defaultPrevented ||\n event.repeat ||\n event.isComposing ||\n event.shiftKey !== shift ||\n event.code !== code\n )\n return;\n const apple = isApple();\n const mod = apple ? event.metaKey : event.ctrlKey;\n const pressed = {\n alt: event.altKey && !event.ctrlKey && !event.metaKey,\n mod: mod && !event.altKey && !(apple ? event.ctrlKey : event.metaKey),\n }[modifier];\n if (\n !pressed ||\n document.querySelector('dialog:modal') ||\n isEditingTarget(event.target)\n )\n return;\n event.preventDefault();\n action();\n }\n\n document.addEventListener('keydown', onKeyDown);\n\n return () => document.removeEventListener('keydown', onKeyDown);\n }, [modifier, shift, code, enabled, action]);\n}\n",
42
- "import type { ComponentPropsWithRef } from 'react';\nimport { classNames } from '@/src/react/ui/classNames';\nimport { shortcutLabel, type Shortcut } from '@/src/react/ui/shortcuts';\n\nexport type KbdProps = ComponentPropsWithRef<'kbd'> & { shortcut?: Shortcut };\n\n/** A visible key or shortcut. Keep aria-keyshortcuts on the associated control. */\nexport function Kbd({ shortcut, children, className, ...props }: KbdProps) {\n return (\n <kbd {...props} className={classNames('altertable-kbd', className)}>\n {shortcut ? shortcutLabel(shortcut) : children}\n </kbd>\n );\n}\n",
43
- "import {\n useEffect,\n useState,\n type ComponentPropsWithRef,\n type ReactNode,\n} from 'react';\nimport type { DisclosedQuery } from '@/src/core/contract';\nimport { Button } from '@/src/react/ui/Button';\nimport { classNames } from '@/src/react/ui/classNames';\nimport { AppIcon } from '@/src/react/ui/icons';\nimport { Tooltip } from '@/src/react/ui/Tooltip';\n\nexport type QueryListProps = {\n queries?: DisclosedQuery[];\n names?: string[];\n summary?: ReactNode;\n expanded?: boolean;\n} & Omit<ComponentPropsWithRef<'details'>, 'children'>;\n\nconst KEYWORD =\n /\\b(WITH|SELECT|FROM|WHERE|AND|OR|NOT|IN|AS|ON|JOIN|LEFT|RIGHT|INNER|FULL|OUTER|CROSS|GROUP BY|ORDER BY|HAVING|LIMIT|UNION|ALL|DISTINCT|CASE|WHEN|THEN|ELSE|END|NULL|TRUE|FALSE|BETWEEN|LIKE|ILIKE|EXISTS|VALUES|CAST|COUNT|SUM|AVG|MIN|MAX|QUALIFY|WINDOW|OVER|PARTITION|BY)\\b/gi;\n\nexport function formatSql(statement: string): string {\n return statement.trim();\n}\n\nfunction SqlCode({ statement }: { statement: string }) {\n const formatted = formatSql(statement);\n const parts = formatted.split(KEYWORD);\n\n return (\n <code>\n {parts.map((part, index) =>\n index % 2 === 1 ? (\n <span key={index} className=\"altertable-sql-keyword\">\n {part}\n </span>\n ) : (\n part\n )\n )}\n </code>\n );\n}\n\nfunction QueryFigure({ name, statement }: { name: string; statement: string }) {\n const [copyState, setCopyState] = useState<'idle' | 'copied' | 'error'>(\n 'idle'\n );\n\n useEffect(() => {\n if (copyState === 'idle') return;\n const timer = window.setTimeout(() => setCopyState('idle'), 1500);\n\n return () => window.clearTimeout(timer);\n }, [copyState]);\n\n async function copySql() {\n try {\n await navigator.clipboard.writeText(formatSql(statement));\n setCopyState('copied');\n } catch {\n setCopyState('error');\n }\n }\n\n return (\n <figure>\n <figcaption>\n <span className=\"altertable-query-filename\">\n {name.endsWith('.sql') ? name : `${name}.sql`}\n </span>\n <span className=\"altertable-query-actions\">\n <Tooltip\n content={\n copyState === 'copied'\n ? 'Copied SQL'\n : copyState === 'error'\n ? 'Could not copy SQL'\n : 'Copy SQL'\n }\n >\n <Button\n className=\"altertable-query-action\"\n aria-label={\n copyState === 'copied' ? 'Copied SQL' : `Copy SQL for ${name}`\n }\n onClick={() => void copySql()}\n >\n <AppIcon\n name={copyState === 'copied' ? 'check' : 'copy'}\n size={16}\n />\n </Button>\n </Tooltip>\n {copyState === 'error' && <output>Could not copy SQL</output>}\n </span>\n </figcaption>\n <pre>\n <SqlCode statement={statement} />\n </pre>\n </figure>\n );\n}\n\nfunction QueryNotebook({\n queries,\n className,\n}: {\n queries: DisclosedQuery[];\n className?: string;\n}) {\n const [copyState, setCopyState] = useState<'idle' | 'copied' | 'error'>(\n 'idle'\n );\n\n useEffect(() => {\n if (copyState === 'idle') return;\n const timer = window.setTimeout(() => setCopyState('idle'), 1500);\n\n return () => window.clearTimeout(timer);\n }, [copyState]);\n\n async function copyAll() {\n const sql = queries\n .map(({ name, statement }) => {\n const formatted = formatSql(statement);\n\n return `-- ${name.endsWith('.sql') ? name : `${name}.sql`}\\n${formatted.endsWith(';') ? formatted : `${formatted};`}`;\n })\n .join('\\n\\n');\n try {\n await navigator.clipboard.writeText(sql);\n setCopyState('copied');\n } catch {\n setCopyState('error');\n }\n }\n\n return (\n <section\n className={classNames(\n 'altertable-query-list',\n 'altertable-query-notebook',\n className\n )}\n aria-label=\"Query notebook\"\n >\n <header className=\"altertable-query-notebook-header\">\n <span>\n {queries.length} {queries.length === 1 ? 'SQL query' : 'SQL queries'}\n </span>\n <Button\n aria-label={copyState === 'copied' ? 'Copied all' : 'Copy all'}\n onClick={() => void copyAll()}\n >\n <AppIcon name={copyState === 'copied' ? 'check' : 'copy'} size={16} />\n {copyState === 'copied' ? 'Copied' : 'Copy all'}\n </Button>\n </header>\n {copyState === 'error' && (\n <output className=\"altertable-query-notebook-error\">\n Could not copy SQL\n </output>\n )}\n {queries.map(query => (\n <QueryFigure\n key={query.name}\n name={query.name}\n statement={query.statement}\n />\n ))}\n </section>\n );\n}\n\n/**\n * `names` selects supporting queries. Missing query evidence is shown explicitly; `expanded`\n * skips the disclosure in a dedicated Queries view.\n */\nexport function QueryList({\n queries,\n names,\n summary = 'Show SQL',\n expanded = false,\n className,\n ...props\n}: QueryListProps) {\n const shown = names\n ? (queries ?? []).filter(query => names.includes(query.name))\n : (queries ?? []);\n if (!shown.length) {\n if (names?.length)\n return (\n <p className=\"altertable-query-unavailable\">\n SQL was not included with this result.\n </p>\n );\n\n return expanded ? (\n <p className=\"altertable-query-unavailable\">No queries in this view.</p>\n ) : null;\n }\n const figures = shown.map(query => (\n <QueryFigure\n key={query.name}\n name={query.name}\n statement={query.statement}\n />\n ));\n if (expanded) return <QueryNotebook queries={shown} className={className} />;\n\n return (\n <details\n {...props}\n className={classNames('altertable-query-list', className)}\n >\n <summary>{summary}</summary>\n {figures}\n </details>\n );\n}\n",
44
- "import {\n useEffect,\n useId,\n useRef,\n type ComponentPropsWithRef,\n type ReactNode,\n type RefObject,\n} from 'react';\nimport { useMergeRefs } from '@floating-ui/react';\nimport { classNames } from '@/src/react/ui/classNames';\nimport { Button } from '@/src/react/ui/Button';\nimport { AppIcon } from '@/src/react/ui/icons';\nimport { GradientScroll } from '@/src/react/ui/GradientScroll';\n\nexport type SheetDialogProps = Omit<\n ComponentPropsWithRef<'dialog'>,\n 'children' | 'open' | 'title' | 'aria-labelledby'\n>;\n\nexport type SheetProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: ReactNode;\n description?: ReactNode;\n children: ReactNode;\n headerActions?: ReactNode;\n footer?: ReactNode;\n wide?: boolean;\n returnFocus?: RefObject<HTMLElement | null>;\n} & SheetDialogProps;\n\n/**\n * Uses the native dialog top layer and focus trap. Closing keeps the modal mounted until its\n * exit transition completes.\n */\nexport function Sheet({\n open,\n onOpenChange,\n title,\n description,\n children,\n headerActions,\n footer,\n wide,\n returnFocus,\n className,\n onCancel,\n onClose,\n onClick,\n onTransitionEnd,\n ref,\n ...props\n}: SheetProps) {\n const dialog = useRef<HTMLDialogElement>(null);\n const closeTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const titleId = useId();\n const descriptionId = useId();\n const dialogRef = useMergeRefs([dialog, ref]);\n\n useEffect(() => {\n const element = dialog.current;\n if (!element) return;\n if (closeTimer.current) clearTimeout(closeTimer.current);\n if (open) {\n delete element.dataset.closing;\n if (!element.open) element.showModal();\n } else if (element.open) {\n if (window.matchMedia('(prefers-reduced-motion: reduce)').matches)\n element.close();\n else {\n element.dataset.closing = '';\n // Keep the native modal mounted until its exit transition completes.\n closeTimer.current = setTimeout(() => element.close(), 320);\n }\n }\n\n return () => {\n if (closeTimer.current) clearTimeout(closeTimer.current);\n };\n }, [open]);\n\n // Native dialog backdrop clicks close the sheet; its contents remain keyboard accessible.\n /* oxlint-disable jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions */\n\n return (\n <dialog\n {...props}\n ref={dialogRef}\n className={classNames('altertable-sheet', className)}\n data-wide={wide || undefined}\n aria-labelledby={titleId}\n aria-describedby={\n props['aria-describedby'] ?? (description ? descriptionId : undefined)\n }\n onCancel={event => {\n onCancel?.(event);\n if (event.defaultPrevented) return;\n event.preventDefault();\n onOpenChange(false);\n }}\n onTransitionEnd={event => {\n onTransitionEnd?.(event);\n if (event.defaultPrevented) return;\n if (\n event.target !== event.currentTarget ||\n event.propertyName !== 'translate' ||\n !('closing' in event.currentTarget.dataset)\n )\n return;\n if (closeTimer.current) clearTimeout(closeTimer.current);\n event.currentTarget.close();\n }}\n onClose={event => {\n if (event.target !== event.currentTarget) return;\n delete event.currentTarget.dataset.closing;\n if (open) onOpenChange(false);\n returnFocus?.current?.focus({ preventScroll: true });\n onClose?.(event);\n }}\n onClick={event => {\n onClick?.(event);\n if (event.defaultPrevented || event.target !== event.currentTarget)\n return;\n if (event.clientX < event.currentTarget.getBoundingClientRect().left)\n onOpenChange(false);\n }}\n >\n <div className=\"altertable-sheet-shell\">\n <header className=\"altertable-sheet-header\">\n <div>\n <h2 id={titleId}>{title}</h2>\n {description && <p id={descriptionId}>{description}</p>}\n </div>\n <div className=\"altertable-sheet-actions\">\n {headerActions}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"altertable-sheet-close\"\n aria-label=\"Close panel\"\n onClick={() => onOpenChange(false)}\n >\n <AppIcon name=\"close\" />\n </Button>\n </div>\n </header>\n <GradientScroll className=\"altertable-sheet-body\" fadeStart={false}>\n {children}\n </GradientScroll>\n {footer && (\n <footer className=\"altertable-sheet-footer\">{footer}</footer>\n )}\n </div>\n </dialog>\n );\n /* oxlint-enable jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions */\n}\n",
45
- "import { useCallback, useEffect, useState } from 'react';\nimport {\n Tabs,\n TabList,\n Tab,\n TabPanels,\n TabPanel,\n} from 'react-aria-components/Tabs';\nimport {\n searchParams,\n subscribeSearch,\n writeSearch,\n} from '@/src/react/ui/search';\n\n/** React Aria tabs with keyboard and ARIA behavior; pair each Tab and TabPanel by stable id. */\nexport { Tabs, TabList, Tab, TabPanels, TabPanel };\n\n/** Keep a page-level tab in `?view=`; reserve `?tab=` for the inspect sheet. */\nexport function useViewTab<View extends string>(\n views: readonly View[],\n fallback: View\n): [View, (key: string | number) => void] {\n const currentView = useCallback((): View => {\n const requested = searchParams().get('view') as View;\n\n return views.includes(requested) ? requested : fallback;\n }, [views, fallback]);\n\n const [selected, setSelected] = useState<View>(currentView);\n\n useEffect(() => {\n function sync() {\n const view = currentView();\n setSelected(view);\n if (searchParams().get('view') !== view) writeSearch({ view });\n }\n\n sync();\n\n return subscribeSearch(sync);\n }, [currentView]);\n\n function select(key: string | number) {\n const view = String(key) as View;\n if (!views.includes(view)) return;\n setSelected(view);\n writeSearch({ view }, 'push');\n }\n\n return [selected, select];\n}\n",
46
- "import { createContext, useContext } from 'react';\nimport type { DisclosedQuery } from '@/src/core/contract';\nimport type { AboutEmpty } from '@/src/react/ui/AboutData';\nimport type { DataContext } from '@/src/react/ui/data-context';\n\nexport type InspectionDefaults = {\n dataContext: DataContext;\n empty?: AboutEmpty;\n queries?: DisclosedQuery[];\n};\n\nexport const InspectionContext =\n /* @__PURE__ */ createContext<InspectionDefaults | null>(null);\n\nexport function useInspectionDefaults(): InspectionDefaults | null {\n return useContext(InspectionContext);\n}\n",
47
- "import type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { classNames } from '@/src/react/ui/classNames';\n\nexport type AppHeaderProps = {\n scope?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n toolbar?: ReactNode;\n children?: ReactNode;\n headingProps?: Omit<ComponentPropsWithRef<'div'>, 'children'>;\n} & Omit<ComponentPropsWithRef<'header'>, 'children' | 'title'>;\n\n/** Page identity and actions; on narrow screens the scope shares a row with actions. */\nexport function AppHeader({\n scope,\n title,\n description,\n toolbar,\n children,\n headingProps,\n className,\n ...props\n}: AppHeaderProps) {\n return (\n <header\n {...props}\n className={classNames('altertable-app-header', className)}\n >\n <div\n {...headingProps}\n className={classNames(\n 'altertable-app-header-heading',\n headingProps?.className\n )}\n >\n <div className=\"altertable-app-header-primary\">\n <h1>{title}</h1>\n {scope && (\n <div className=\"altertable-app-header-context\">\n <span\n className=\"altertable-app-header-connector\"\n aria-hidden=\"true\"\n >\n /\n </span>\n {scope}\n </div>\n )}\n {toolbar && (\n <div className=\"altertable-app-header-toolbar\">{toolbar}</div>\n )}\n </div>\n {description && <p>{description}</p>}\n {children}\n </div>\n </header>\n );\n}\n",
48
- "import type { SVGProps } from 'react';\n\nexport type AltertableLogoProps = SVGProps<SVGSVGElement>;\n\nexport function AltertableLogo(props: AltertableLogoProps) {\n /* oxlint-disable jsx-a11y/prefer-tag-over-role -- Inline SVG needs an image role and accessible name. */\n return (\n <svg\n viewBox=\"0 0 294 44\"\n fill=\"none\"\n role=\"img\"\n aria-label=\"Altertable\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M40.8274 28.9788L36.4663 28.8378L35.4541 28.6881L18.6066 10.301L24.6073 0L27.3738 0.545413L42.0212 25.6848L40.8274 28.9788ZM21.0319 20.1112L18.6894 15.6731L15.1154 16.2904L0.5 41.378L1.39458 44H13.4453L21.0769 20.4134L21.0319 20.1112ZM45.4804 31.6253L20.8808 36.9197L18.0838 41.2974L20.4001 44H49.7036L51.5 41.9551L45.4804 31.6253Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M110.266 2.97656H114.516V36.7174H119.518V40.1715H116.641C115.84 40.1715 115.137 40.123 114.516 40.0211C111.207 39.4923 110.266 37.5324 110.266 33.957V2.97656ZM87.4166 4.83434L73.9736 40.1712H78.4368L81.891 31.1381H99.375L102.829 40.1712H107.346L93.9561 4.83434H87.4214H87.4166ZM83.2202 27.5772L90.6573 8.02165L98.0409 27.5772H83.2202ZM126.358 7.70686H124.083L122.487 13.2325L117.014 14.5618V16.9534H122.113V33.9573C122.113 38.207 123.442 40.1718 128.488 40.1718H134.756V36.7176H126.358V16.9534H135.124V13.606H126.358V7.70686ZM263.029 2.97656H258.779V33.957C258.779 37.5324 259.72 39.4923 263.029 40.0211C263.65 40.123 264.353 40.1715 265.153 40.1715H268.03V36.7174H263.029V2.97656ZM149.586 12.756C157.557 12.756 162.073 18.2283 162.073 25.9855V25.9904C162.073 26.6793 162.073 27.2129 161.967 27.8484H140.606C140.927 35.1254 144.541 37.7839 149.746 37.7839C154.952 37.7839 157.343 35.3389 158.139 31.9915H162.02C161.486 36.0326 158.726 41.0246 149.586 41.0246C140.446 41.0246 136.41 34.8634 136.41 26.8394C136.41 18.9221 140.766 12.756 149.586 12.756ZM149.639 15.9967C144.594 15.9967 141.3 18.3884 140.713 24.6563H157.93C157.717 18.5485 154.685 15.9967 149.639 15.9967ZM189.861 7.70686H187.576L185.893 13.5381H179.819C174.72 13.5381 171.635 16.2112 170.044 20.6744V13.606H165.847V40.1718H170.097V30.3964C170.097 22.906 171.746 16.6818 179.61 16.9486H180.513L180.78 16.9534H185.616V33.9573C185.616 38.207 186.946 40.1718 191.991 40.1718H198.259V36.7176H189.861V16.9534H198.627V13.606H189.861V7.70686ZM212.284 12.6992C219.566 12.6992 222.807 16.0466 222.807 20.83L222.802 20.8252V33.5792C222.802 35.4907 222.909 37.5622 223.122 40.1673H219.294C219.028 37.8823 218.921 35.9176 218.921 33.9528C217.912 37.1401 215.098 40.861 208.932 40.861C203.833 40.861 200.166 38.2074 200.166 33.1572C200.166 28.8541 202.451 26.1422 208.243 25.1865L214.991 24.0707C217.752 23.5953 218.921 22.8482 218.921 20.83C218.921 18.1181 217.538 16.0466 212.386 16.0466C207.234 16.0466 205.269 18.4917 205.003 21.9458H200.753C200.913 16.3135 205.003 12.6992 212.284 12.6992ZM204.479 32.9971C204.479 36.0243 206.657 37.5136 209.737 37.5136C216.064 37.5136 218.931 32.6284 218.931 27.5782V25.2932C217.601 26.2489 216.165 26.671 214.147 27.0979L209.737 28.0002C206.128 28.7473 204.479 30.1251 204.479 32.9971ZM242.415 12.7519C237.525 12.7519 234.178 14.8768 232.373 18.5444V2.97656H228.123V40.1715H232.373V35.1746C234.178 38.8956 237.525 41.0205 242.415 41.0205C250.76 41.0205 254.582 35.0146 254.582 26.8886C254.582 18.7045 250.755 12.7568 242.415 12.7568V12.7519ZM241.562 37.5663C235.929 37.5663 232.368 34.379 232.368 26.8886C232.368 19.3982 235.929 16.2109 241.562 16.2109C247.568 16.2109 250.221 19.7184 250.221 26.8886C250.221 34.0103 247.563 37.5663 241.562 37.5663ZM272.29 27.8436C272.61 35.1205 276.118 37.7791 281.43 37.7791V37.7839C286.635 37.7839 289.027 35.3389 289.822 31.9915H293.704C293.17 36.0326 290.409 41.0246 281.27 41.0246C272.13 41.0246 268.094 34.7567 268.094 26.8394C268.094 18.9221 272.45 12.756 281.27 12.756C289.24 12.756 293.757 18.2283 293.757 25.9855V25.9858C293.757 26.6746 293.757 27.2082 293.65 27.8436H272.29ZM289.614 24.6514C289.4 18.5437 286.266 15.9919 281.323 15.9919C276.278 15.9919 272.984 18.3836 272.397 24.6514H289.614Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n /* oxlint-enable jsx-a11y/prefer-tag-over-role */\n}\n",
49
- "import type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { AltertableLogo } from '@/src/react/ui/AltertableLogo';\nimport { classNames } from '@/src/react/ui/classNames';\n\nexport type AppFooterProps = ComponentPropsWithRef<'footer'> & {\n attribution?: ReactNode;\n};\n\n/** `children` fills the action slot; `attribution` replaces the default link. */\nexport function AppFooter({\n children,\n attribution,\n className,\n ...props\n}: AppFooterProps) {\n return (\n <footer\n {...props}\n className={classNames('altertable-app-footer', className)}\n >\n <div className=\"altertable-app-footer-inner\">\n <div className=\"altertable-app-footer-actions\">{children}</div>\n {attribution === undefined ? (\n <a\n href=\"https://altertable.ai/?utm_source=data_app&utm_medium=referral&utm_campaign=powered_by\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label=\"Powered by Altertable\"\n >\n <span>Powered by</span>\n <AltertableLogo className=\"altertable-app-footer-logo\" />\n </a>\n ) : (\n attribution\n )}\n </div>\n </footer>\n );\n}\n",
50
- "import type { ComponentProps, ComponentPropsWithRef, ReactNode } from 'react';\nimport { classNames } from '@/src/react/ui/classNames';\nimport { AppFooter } from '@/src/react/ui/AppFooter';\nimport {\n TooltipProvider,\n type TooltipProviderProps,\n} from '@/src/react/ui/Tooltip';\n\nexport type AppLayoutProps = {\n children: ReactNode;\n footerActions?: ReactNode;\n footer?: ReactNode;\n footerProps?: Omit<ComponentProps<typeof AppFooter>, 'children'>;\n layoutProps?: Omit<ComponentPropsWithRef<'div'>, 'children'>;\n tooltipProviderProps?: Omit<TooltipProviderProps, 'children'>;\n} & Omit<ComponentPropsWithRef<'main'>, 'children'>;\n\n/**\n * Native props target `<main>`. `layoutProps` targets the outer wrapper; `footer` replaces the\n * default footer, while `footerActions` fills it.\n */\nexport function AppLayout({\n children,\n footerActions,\n footer,\n footerProps,\n layoutProps,\n tooltipProviderProps,\n className,\n ...props\n}: AppLayoutProps) {\n return (\n <TooltipProvider {...tooltipProviderProps}>\n <div\n {...layoutProps}\n className={classNames('altertable-app-layout', layoutProps?.className)}\n >\n <main\n {...props}\n className={classNames('altertable-app-main', className)}\n >\n {children}\n </main>\n {footer === undefined ? (\n <AppFooter {...footerProps}>{footerActions}</AppFooter>\n ) : (\n footer\n )}\n </div>\n </TooltipProvider>\n );\n}\n",
51
- "import type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { classNames } from '@/src/react/ui/classNames';\n\nexport type AppScopeProps = {\n organization: string;\n environment: string;\n children?: ReactNode;\n} & Omit<ComponentPropsWithRef<'div'>, 'children'>;\n\nexport function AppScope({\n organization,\n environment,\n children,\n className,\n ...props\n}: AppScopeProps) {\n return (\n <div {...props} className={classNames('altertable-app-scope', className)}>\n <span className=\"altertable-app-scope-organization\">{organization}</span>\n <span className=\"altertable-app-scope-environment\">{environment}</span>\n {children}\n </div>\n );\n}\n",
52
- "import { useState } from 'react';\nimport {\n exportCsv,\n type CsvExport,\n type CsvTable,\n} from '@/src/react/ui/csv-export';\nimport { IconButton } from '@/src/react/ui/IconButton';\nimport { Menu, MenuItem, MenuTrigger, Popover } from 'react-aria-components';\nimport { PressButton } from '@/src/react/ui/Button';\nimport { AppIcon } from '@/src/react/ui/icons';\nimport { Toast } from '@/src/react/ui/Toast';\n\nexport function ExportControl({ csv }: { csv: CsvExport }) {\n const [open, setOpen] = useState(false);\n const [status, setStatus] = useState<'idle' | 'pending' | 'error'>('idle');\n\n const [retryTableName, setRetryTableName] = useState<string>();\n async function download(table?: CsvTable) {\n setOpen(false);\n setRetryTableName(table?.name);\n setStatus('pending');\n try {\n await exportCsv(csv, table);\n setStatus('idle');\n } catch {\n setStatus('error');\n }\n }\n\n return (\n <>\n {status === 'error' && (\n <Toast\n state=\"error\"\n position=\"top\"\n onRetry={() =>\n void download(\n csv.tables.find(table => table.name === retryTableName)\n )\n }\n >\n Couldn’t export data.\n </Toast>\n )}\n {csv.tables.length === 1 ? (\n <IconButton\n icon=\"export\"\n variant=\"elevated\"\n label=\"Export CSV\"\n disabled={status === 'pending'}\n aria-busy={status === 'pending'}\n onClick={() => void download()}\n />\n ) : (\n <MenuTrigger isOpen={open} onOpenChange={setOpen}>\n <PressButton\n variant=\"elevated\"\n size=\"icon\"\n aria-label=\"Export\"\n isDisabled={status === 'pending'}\n aria-busy={status === 'pending'}\n >\n <AppIcon name=\"export\" />\n </PressButton>\n <Popover placement=\"bottom end\" className=\"altertable-export-popover\">\n <Menu aria-label=\"Export data\">\n {csv.tables.map((table, index) => (\n <MenuItem\n key={index}\n id={index}\n onAction={() => void download(table)}\n >\n Export {table.name} (CSV)\n </MenuItem>\n ))}\n <MenuItem id=\"all\" onAction={() => void download()}>\n Export all (ZIP)\n </MenuItem>\n </Menu>\n </Popover>\n </MenuTrigger>\n )}\n </>\n );\n}\n",
53
- "import { strToU8, zipSync } from 'fflate';\nimport { getDataAppTransport } from '@/src/client/iframe';\n\nexport type CsvCell = string | number | boolean | null | undefined;\n\n/** One named dataset with ordered columns and raw displayed values. */\nexport type CsvTable = {\n name: string;\n columns: readonly string[];\n rows: readonly (readonly CsvCell[])[];\n};\n\n/** All distinct datasets in the displayed result; filename names the download. */\nexport type CsvExport = {\n filename: string;\n tables: readonly [CsvTable, ...CsvTable[]];\n};\n\nexport function formatCsv({\n columns,\n rows,\n}: Pick<CsvTable, 'columns' | 'rows'>): string {\n if (!columns.length) throw new Error('CSV export needs at least one column.');\n if (rows.some(row => row.length !== columns.length))\n throw new Error('CSV rows must match the export columns.');\n function cell(value: CsvCell): string {\n if (value === null || value === undefined) return '';\n let text = String(value);\n if (typeof value === 'string' && /^[\\s]*[=+\\-@]|^[\\t\\r\\n]/.test(text))\n text = `'${text}`;\n return /[\",\\r\\n]/.test(text) ? `\"${text.replaceAll('\"', '\"\"')}\"` : text;\n }\n return (\n [columns, ...rows].map(row => row.map(cell).join(',')).join('\\r\\n') + '\\r\\n'\n );\n}\n\nfunction filenameWithExtension(name: string, extension: 'csv' | 'zip'): string {\n const filename = name.toLowerCase().endsWith(`.${extension}`)\n ? name\n : `${name.replace(/\\.(?:csv|zip)$/i, '')}.${extension}`;\n if (!name.trim() || filename.length > 255 || /[\\p{Cc}\\\\/]/u.test(filename))\n throw new Error('Export filenames must be nonempty names without paths.');\n return filename;\n}\n\nexport function createCsvDownload(\n data: CsvExport,\n selectedTable?: CsvTable\n): { filename: string; blob: Blob; route: 'export:csv' | 'export:zip' } {\n if (!data.tables.length)\n throw new Error('CSV export needs at least one dataset.');\n const names = data.tables.map(table =>\n filenameWithExtension(table.name, 'csv')\n );\n if (new Set(names.map(name => name.toLowerCase())).size !== names.length)\n throw new Error('CSV dataset names must be unique.');\n const table =\n selectedTable ?? (data.tables.length === 1 ? data.tables[0] : undefined);\n if (table)\n return {\n filename: filenameWithExtension(\n selectedTable ? table.name : data.filename,\n 'csv'\n ),\n blob: new Blob(['\\uFEFF' + formatCsv(table)], {\n type: 'text/csv;charset=utf-8',\n }),\n route: 'export:csv',\n };\n const files = Object.fromEntries(\n data.tables.map((dataset, index) => [\n names[index]!,\n strToU8('\\uFEFF' + formatCsv(dataset)),\n ])\n );\n return {\n filename: filenameWithExtension(data.filename, 'zip'),\n blob: new Blob([zipSync(files, { level: 1 })], { type: 'application/zip' }),\n route: 'export:zip',\n };\n}\n\nexport async function exportCsv(\n data: CsvExport,\n table?: CsvTable\n): Promise<void> {\n const { filename, blob, route } = createCsvDownload(data, table);\n const transport = getDataAppTransport();\n if (transport) {\n await transport.request({ route, payload: { filename, blob } });\n return;\n }\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n document.body.append(link);\n try {\n link.click();\n } finally {\n link.remove();\n setTimeout(() => URL.revokeObjectURL(url), 1000);\n }\n}\n",
54
- "import type { ComponentPropsWithRef, ReactNode, RefObject } from 'react';\nimport { Button, type ButtonProps } from '@/src/react/ui/Button';\nimport { AppIcon, type AppIconName } from '@/src/react/ui/icons';\nimport { Kbd } from '@/src/react/ui/Kbd';\nimport { ariaKeyShortcuts, type Shortcut } from '@/src/react/ui/shortcuts';\nimport { Tooltip } from '@/src/react/ui/Tooltip';\n\nexport type IconButtonProps = Omit<\n ComponentPropsWithRef<'button'>,\n 'children' | 'aria-label'\n> & {\n icon: AppIconName;\n label: string;\n variant?: ButtonProps['variant'];\n shortcut?: Shortcut | { label: string; aria: string };\n tooltip?: ReactNode;\n portalRoot?: RefObject<HTMLElement | null>;\n tooltipPlacement?: 'top' | 'bottom';\n tooltipAlign?: 'start' | 'center' | 'end';\n children?: ReactNode;\n};\n\nexport function IconButton({\n icon,\n label,\n variant = 'outline',\n shortcut,\n tooltip,\n portalRoot,\n tooltipPlacement,\n tooltipAlign,\n children,\n type = 'button',\n ...props\n}: IconButtonProps) {\n const keyHint =\n shortcut &&\n ('modifier' in shortcut ? (\n <Kbd shortcut={shortcut} />\n ) : (\n <Kbd>{shortcut.label}</Kbd>\n ));\n const keyAria =\n shortcut &&\n ('modifier' in shortcut ? ariaKeyShortcuts(shortcut) : shortcut.aria);\n\n return (\n <Tooltip\n content={\n tooltip ?? (\n <>\n {label}\n {keyHint && <> {keyHint}</>}\n </>\n )\n }\n portalRoot={portalRoot}\n placement={tooltipPlacement}\n align={tooltipAlign}\n >\n <Button\n {...props}\n type={type}\n variant={variant}\n size=\"icon\"\n aria-label={label}\n aria-keyshortcuts={props['aria-keyshortcuts'] ?? keyAria}\n >\n {children ?? <AppIcon name={icon} />}\n </Button>\n </Tooltip>\n );\n}\n",
55
- "import type { ReactNode } from 'react';\nimport { AppIcon } from '@/src/react/ui/icons';\nimport { Button } from '@/src/react/ui/Button';\n\n/** Shared page-level feedback for requests and toolbar actions. */\nexport function Toast({\n state,\n children,\n onRetry,\n position = 'bottom',\n}: {\n state: 'updating' | 'error' | 'notice';\n children: ReactNode;\n onRetry?: () => void;\n position?: 'top' | 'bottom';\n}) {\n const failed = state === 'error';\n const updating = state === 'updating';\n return (\n <div className=\"altertable-data-view-toast-region\" data-position={position}>\n <div\n className=\"altertable-data-view-toast\"\n data-state={state}\n role={failed ? 'alert' : 'status'}\n >\n <AppIcon\n name={failed ? 'error' : updating ? 'loading' : 'live'}\n size={16}\n className={\n updating ? 'altertable-data-view-toast-spinner' : undefined\n }\n />\n <span>{children}</span>\n {failed && onRetry && <Button onClick={onRetry}>Try again</Button>}\n </div>\n </div>\n );\n}\n",
56
- "import type { ComponentPropsWithRef } from 'react';\nimport { invariant } from '@/src/core/invariant';\nimport {\n Button as AriaButton,\n ListBox,\n ListBoxItem,\n Popover,\n Select,\n SelectValue,\n} from 'react-aria-components';\nimport { IconButton } from '@/src/react/ui/IconButton';\nimport { AppIcon } from '@/src/react/ui/icons';\nimport { classNames } from '@/src/react/ui/classNames';\n\nexport type LiveIntervalSeconds = 30 | 60 | 300;\n\nconst intervals = [\n { seconds: 30, label: 'Every 30 seconds', description: 'every 30 seconds' },\n { seconds: 60, label: 'Every minute', description: 'every minute' },\n { seconds: 300, label: 'Every 5 minutes', description: 'every 5 minutes' },\n] as const;\n\nexport type LiveControlProps = {\n enabled: boolean;\n onChange: (enabled: boolean) => void;\n intervalSeconds: LiveIntervalSeconds;\n onIntervalChange: (seconds: LiveIntervalSeconds) => void;\n} & Omit<ComponentPropsWithRef<'button'>, 'children' | 'onClick' | 'onChange'>;\n\n/** Toggle an app-owned recurring refresh. The app supplies the timer and its cadence. */\nexport function LiveControl({\n enabled,\n onChange,\n intervalSeconds,\n onIntervalChange,\n className,\n ...props\n}: LiveControlProps) {\n const frequency = intervals.find(\n interval => interval.seconds === intervalSeconds\n )?.description;\n invariant(frequency, 'LiveControl requires a supported update interval.');\n\n return (\n <div\n className={classNames('altertable-live-control', className)}\n data-active={enabled}\n >\n <IconButton\n {...props}\n icon=\"live\"\n variant=\"ghost\"\n label={\n props['aria-label'] ??\n (enabled ? 'Pause live updates' : 'Start live updates')\n }\n aria-pressed={enabled}\n onClick={() => onChange(!enabled)}\n />\n <Select\n aria-label={`Live update frequency: ${frequency}`}\n selectedKey={String(intervalSeconds)}\n onSelectionChange={key => {\n const interval = intervals.find(\n option => option.seconds === Number(key)\n );\n if (interval) onIntervalChange(interval.seconds);\n }}\n className=\"altertable-live-frequency\"\n >\n <AriaButton aria-label={`Live update frequency: ${frequency}`}>\n <SelectValue className=\"altertable-visually-hidden\" />\n <AppIcon name=\"disclosure\" size={14} />\n </AriaButton>\n <Popover\n placement=\"bottom end\"\n className=\"altertable-live-frequency-popover\"\n >\n <ListBox aria-label=\"Live update frequency\">\n {intervals.map(interval => (\n <ListBoxItem\n key={interval.seconds}\n id={String(interval.seconds)}\n textValue={interval.label}\n >\n {interval.label}\n <AppIcon name=\"check\" size={15} />\n </ListBoxItem>\n ))}\n </ListBox>\n </Popover>\n </Select>\n </div>\n );\n}\n",
57
- "import {\n useEffect,\n useEffectEvent,\n useId,\n useRef,\n useState,\n type ComponentPropsWithRef,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { useMergeRefs } from '@floating-ui/react';\nimport type { ThemeController } from '@/src/core/appearance';\nimport { AboutData, type AboutEmpty } from '@/src/react/ui/AboutData';\nimport type { DataContext } from '@/src/react/ui/data-context';\nimport { AppIcon } from '@/src/react/ui/icons';\nimport { IconButton } from '@/src/react/ui/IconButton';\nimport { GradientScroll } from '@/src/react/ui/GradientScroll';\nimport { classNames } from '@/src/react/ui/classNames';\nimport {\n searchParams,\n subscribeSearch,\n writeSearch,\n} from '@/src/react/ui/search';\nimport {\n isEditingTarget,\n shortcuts,\n useShortcut,\n} from '@/src/react/ui/shortcuts';\nimport { Tooltip } from '@/src/react/ui/Tooltip';\nimport { ThemeToggle } from '@/src/react/ui/ThemeSelector';\nimport { storySteps, type StoryFinding } from '@/src/react/ui/story';\n\nexport type StoryStep = {\n id: string;\n empty?: AboutEmpty;\n headline: string;\n context?: string;\n glossaryIds?: string[];\n queryNames?: string[];\n visual: ReactNode;\n visualKind?: 'metric' | 'chart';\n};\n\nexport type PresentStoryProps = {\n title: string;\n findings: readonly StoryFinding[];\n empty?: AboutEmpty;\n scope?: ReactNode;\n dataContext: DataContext;\n theme?: ThemeController;\n launcherProps?: Omit<ComponentPropsWithRef<'span'>, 'children'>;\n dialogProps?: Omit<\n ComponentPropsWithRef<'dialog'>,\n 'children' | 'aria-labelledby' | 'open'\n >;\n headerActions?: ReactNode;\n footer?: ReactNode;\n} & Omit<ComponentPropsWithRef<'button'>, 'title'>;\n\nconst stepKeys: Record<string, (index: number, last: number) => number> = {\n ArrowRight(index) {\n return index + 1;\n },\n PageDown(index) {\n return index + 1;\n },\n ArrowLeft(index) {\n return index - 1;\n },\n PageUp(index) {\n return index - 1;\n },\n Home() {\n return 0;\n },\n End(_, last) {\n return last;\n },\n};\n\n/**\n * Uses an already loaded snapshot. Navigation is stored in `?present=1&step=`, and step\n * inspection uses `?about=`. `launcherProps` targets the outer span; `dialogProps` targets the\n * modal.\n */\nexport function PresentStory({\n title,\n findings,\n empty,\n scope,\n dataContext,\n theme,\n launcherProps,\n dialogProps,\n headerActions,\n footer,\n children,\n className,\n onClick,\n disabled,\n ref,\n ...props\n}: PresentStoryProps) {\n const steps = storySteps(findings, dataContext);\n const dialog = useRef<HTMLDialogElement>(null);\n const trigger = useRef<HTMLButtonElement>(null);\n const headline = useRef<HTMLHeadingElement>(null);\n const ownedFullscreenElement = useRef<HTMLElement | null>(null);\n const isOpening = useRef(false);\n const headlineId = useId();\n const contextId = useId();\n const [stepId, setStepId] = useState(steps[0]?.id);\n const triggerRef = useMergeRefs([trigger, ref]);\n const dialogRef = useMergeRefs([dialog, dialogProps?.ref]);\n const index = Math.max(\n 0,\n steps.findIndex(step => step.id === stepId)\n );\n const step = steps[index];\n const stepIds = steps.map(item => item.id).join('\\u0000');\n const unavailable = !steps.length || !!disabled;\n const currentSteps = useEffectEvent(() => steps);\n\n useEffect(() => {\n function syncFromUrl() {\n const params = searchParams();\n const availableSteps = currentSteps();\n if (params.get('present') === '1' && availableSteps.length) {\n const requested = params.get('step');\n setStepId(\n availableSteps.find(item => item.id === requested)?.id ??\n availableSteps[0]!.id\n );\n if (!dialog.current?.open) dialog.current?.showModal();\n } else if (dialog.current?.open) {\n dialog.current.close();\n }\n }\n syncFromUrl();\n\n return subscribeSearch(syncFromUrl);\n }, [stepIds]);\n\n useEffect(() => {\n if (dialog.current?.open) headline.current?.focus({ preventScroll: true });\n }, [stepId]);\n\n useEffect(() => {\n const presentationDialog = dialog.current;\n if (!presentationDialog) return;\n const ownerDocument = presentationDialog.ownerDocument;\n function handleFullscreenChange() {\n const fullscreenElement = ownedFullscreenElement.current;\n if (\n !fullscreenElement ||\n ownerDocument.fullscreenElement === fullscreenElement\n )\n return;\n ownedFullscreenElement.current = null;\n dialog.current?.close();\n }\n ownerDocument.addEventListener('fullscreenchange', handleFullscreenChange);\n return () => {\n ownerDocument.removeEventListener(\n 'fullscreenchange',\n handleFullscreenChange\n );\n exitPresentationFullscreen();\n };\n }, []);\n\n function exitPresentationFullscreen() {\n const fullscreenElement = ownedFullscreenElement.current;\n ownedFullscreenElement.current = null;\n if (!fullscreenElement) return;\n const ownerDocument = fullscreenElement.ownerDocument;\n if (ownerDocument.fullscreenElement === fullscreenElement)\n void ownerDocument.exitFullscreen().catch(() => {});\n }\n\n function writePresentation(\n id?: string,\n mode: 'replace' | 'push' = 'replace'\n ) {\n writeSearch({ present: id ? '1' : null, step: id ?? null }, mode);\n }\n\n async function openPresentation() {\n const presentationDialog = dialog.current;\n const firstStep = steps[0];\n if (unavailable || isOpening.current || !presentationDialog || !firstStep)\n return;\n const ownerDocument = presentationDialog.ownerDocument;\n const fullscreenElement = ownerDocument.documentElement;\n isOpening.current = true;\n try {\n if (!ownerDocument.fullscreenElement && ownerDocument.fullscreenEnabled) {\n await fullscreenElement.requestFullscreen();\n ownedFullscreenElement.current = fullscreenElement;\n }\n } catch {\n // Keep the presentation available when fullscreen is denied.\n } finally {\n isOpening.current = false;\n }\n if (!presentationDialog.isConnected) {\n exitPresentationFullscreen();\n return;\n }\n setStepId(firstStep.id);\n presentationDialog.showModal();\n headline.current?.focus({ preventScroll: true });\n writePresentation(firstStep.id, 'push');\n }\n\n useShortcut(shortcuts.playStory, openPresentation, !unavailable);\n\n function goTo(nextIndex: number) {\n const next = steps[nextIndex];\n if (!next) return;\n setStepId(next.id);\n writePresentation(next.id);\n }\n\n function handleKeyDown(event: KeyboardEvent<HTMLDialogElement>) {\n if (\n !(event.target instanceof HTMLElement) ||\n event.target.closest('dialog') !== event.currentTarget\n )\n return;\n const move = stepKeys[event.key];\n if (\n !move ||\n isEditingTarget(event.target) ||\n event.altKey ||\n event.ctrlKey ||\n event.metaKey\n )\n return;\n event.preventDefault();\n goTo(move(index, steps.length - 1));\n }\n\n return (\n <>\n <span\n {...launcherProps}\n className={classNames(\n 'altertable-present-launch',\n launcherProps?.className\n )}\n >\n <IconButton\n {...props}\n ref={triggerRef}\n icon=\"present\"\n variant=\"elevated\"\n label={props['aria-label'] ?? 'Present story'}\n shortcut={shortcuts.playStory}\n tooltipAlign=\"end\"\n className={className}\n disabled={unavailable}\n onClick={event => {\n onClick?.(event);\n if (!event.defaultPrevented) void openPresentation();\n }}\n >\n {children}\n </IconButton>\n </span>\n <dialog\n {...dialogProps}\n ref={dialogRef}\n className={classNames(\n 'altertable-present-dialog',\n dialogProps?.className\n )}\n aria-labelledby={headlineId}\n aria-describedby={\n dialogProps?.['aria-describedby'] ??\n (step?.context ? contextId : undefined)\n }\n onClose={event => {\n if (event.target !== event.currentTarget) return;\n exitPresentationFullscreen();\n if (searchParams().get('present') === '1') writePresentation();\n trigger.current?.focus({ preventScroll: true });\n dialogProps?.onClose?.(event);\n }}\n onKeyDown={event => {\n dialogProps?.onKeyDown?.(event);\n if (!event.defaultPrevented) handleKeyDown(event);\n }}\n >\n {step && (\n <div className=\"altertable-present-shell\">\n <header className=\"altertable-present-header\">\n <div className=\"altertable-present-title\">\n <strong>{title}</strong>\n {scope && (\n <>\n <span\n className=\"altertable-present-connector\"\n aria-hidden=\"true\"\n >\n /\n </span>\n {scope}\n </>\n )}\n </div>\n <div className=\"altertable-present-actions\">\n <span\n className=\"altertable-present-count\"\n aria-label={`Finding ${index + 1} of ${steps.length}`}\n >\n {index + 1} / {steps.length}\n </span>\n {theme && (\n <span className=\"altertable-present-theme\">\n <ThemeToggle theme={theme} portalRoot={dialog} />\n </span>\n )}\n {headerActions}\n <IconButton\n icon=\"close\"\n variant=\"ghost\"\n label=\"Exit presentation\"\n shortcut={{ label: 'Esc', aria: 'Escape' }}\n tooltipAlign=\"end\"\n portalRoot={dialog}\n onClick={() => dialog.current?.close()}\n />\n </div>\n </header>\n <GradientScroll className=\"altertable-present-main\" key={step.id}>\n <div className=\"altertable-present-copy\">\n <h2 id={headlineId} ref={headline} tabIndex={-1}>\n {step.headline}\n </h2>\n {step.context && <p id={contextId}>{step.context}</p>}\n <div className=\"altertable-present-explore\">\n <AboutData\n shortcut={false}\n key={step.id}\n id={step.id}\n empty={step.empty ?? empty}\n title={step.headline}\n description={step.context}\n visual={step.visual}\n visualKind={step.visualKind}\n dataContext={dataContext}\n tab={step.glossaryIds?.length ? 'glossary' : 'queries'}\n references={{\n kind: 'ids',\n glossaryIds: step.glossaryIds,\n queryNames: step.queryNames,\n }}\n tooltip=\"Explore this finding\"\n variant=\"outline\"\n portalRoot={dialog}\n >\n <AppIcon name=\"explore\" /> Explore sources\n </AboutData>\n </div>\n </div>\n <div\n className=\"altertable-present-visual\"\n data-kind={step.visualKind}\n >\n {step.visual}\n </div>\n </GradientScroll>\n <nav className=\"altertable-present-nav\" aria-label=\"Story findings\">\n <IconButton\n icon=\"previous\"\n variant=\"ghost\"\n label=\"Previous step\"\n shortcut={{ label: '←', aria: 'ArrowLeft' }}\n tooltipPlacement=\"top\"\n tooltipAlign=\"start\"\n portalRoot={dialog}\n onClick={() => goTo(index - 1)}\n disabled={index === 0}\n />\n <div className=\"altertable-present-dots\">\n {steps.map((item, itemIndex) => (\n <Tooltip\n key={item.id}\n content={item.headline}\n placement=\"top\"\n portalRoot={dialog}\n >\n <button\n type=\"button\"\n aria-label={`Finding ${itemIndex + 1}: ${item.headline}`}\n aria-current={itemIndex === index ? 'step' : undefined}\n onClick={() => goTo(itemIndex)}\n />\n </Tooltip>\n ))}\n </div>\n <IconButton\n icon=\"next\"\n variant=\"ghost\"\n label=\"Next step\"\n shortcut={{ label: '→', aria: 'ArrowRight' }}\n tooltipPlacement=\"top\"\n tooltipAlign=\"end\"\n portalRoot={dialog}\n onClick={() => goTo(index + 1)}\n disabled={index === steps.length - 1}\n />\n </nav>\n {footer}\n </div>\n )}\n </dialog>\n </>\n );\n}\n",
58
- "import {\n useCallback,\n useId,\n useSyncExternalStore,\n type ComponentPropsWithRef,\n type ReactNode,\n type RefObject,\n} from 'react';\nimport type { ThemeController } from '@/src/core/appearance';\nimport { IconButton } from '@/src/react/ui/IconButton';\nimport { AppIcon } from '@/src/react/ui/icons';\nimport { classNames } from '@/src/react/ui/classNames';\nimport { Tooltip } from '@/src/react/ui/Tooltip';\n\nconst themes = [\n { value: 'light', label: 'Light', icon: 'lightTheme' },\n { value: 'dark', label: 'Dark', icon: 'darkTheme' },\n] as const;\n\nexport type ThemeSelectorProps = {\n theme: ThemeController;\n children?: ReactNode;\n} & Omit<ComponentPropsWithRef<'fieldset'>, 'children'>;\n\nfunction useResolvedTheme(theme: ThemeController) {\n const subscribe = useCallback(\n (notify: () => void) => {\n const preference = window.matchMedia('(prefers-color-scheme: dark)');\n const unsubscribe = theme.subscribe(notify);\n preference.addEventListener('change', notify);\n\n return () => {\n unsubscribe();\n preference.removeEventListener('change', notify);\n };\n },\n [theme]\n );\n\n const snapshot = useCallback(() => {\n const preference = theme.getTheme();\n\n return preference === 'system'\n ? window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n : preference;\n }, [theme]);\n\n return useSyncExternalStore(subscribe, snapshot, () => 'light');\n}\n\n/** Viewer color preference. Brand tokens remain app-owned. */\nexport function ThemeSelector({\n theme,\n children,\n className,\n ...props\n}: ThemeSelectorProps) {\n const selected = useResolvedTheme(theme);\n const name = useId();\n\n return (\n <fieldset\n {...props}\n className={classNames('altertable-theme-selector', className)}\n >\n <legend className=\"altertable-theme-legend\">Color theme</legend>\n {themes.map(({ value, label, icon }) => (\n <Tooltip key={value} content={`${label} theme`}>\n <label>\n <input\n type=\"radio\"\n name={name}\n value={value}\n checked={selected === value}\n aria-label={`${label} theme`}\n onChange={() => theme.setTheme(value)}\n />\n <AppIcon name={icon} size={16} />\n </label>\n </Tooltip>\n ))}\n {children}\n </fieldset>\n );\n}\n\nexport function ThemeToggle({\n theme,\n portalRoot,\n}: {\n theme: ThemeController;\n portalRoot?: RefObject<HTMLElement | null>;\n}) {\n const selected = useResolvedTheme(theme);\n const next = selected === 'dark' ? 'light' : 'dark';\n const icon = next === 'dark' ? 'darkTheme' : 'lightTheme';\n\n return (\n <IconButton\n icon={icon}\n variant=\"ghost\"\n label={`Switch to ${next} theme`}\n portalRoot={portalRoot}\n onClick={() => theme.setTheme(next)}\n />\n );\n}\n",
59
- "import type { ReactNode } from 'react';\nimport type { DisplayedSnapshot } from '@/src/core/data-view';\nimport { invariant } from '@/src/core/invariant';\nimport type { MetricDefinition } from '@/src/react/ui/metric';\nimport type { StoryStep } from '@/src/react/ui/PresentStory';\nimport type { WidgetEvidence } from '@/src/react/ui/WidgetEvidence';\nimport type { DataContext } from '@/src/react/ui/data-context';\n\n/** One consequential, inspectable finding from the displayed result. */\nexport type StoryFinding = {\n id: string;\n headline: string;\n context?: string;\n visual: ReactNode;\n visualKind?: 'metric' | 'chart';\n evidence: WidgetEvidence | MetricDefinition;\n};\n\n/** One to four findings with unique, nonempty IDs and registered evidence.\n * Receives the displayed result and its original input during refresh or failure. */\nexport type BoundStory<Data, Input> = (\n snapshot: DisplayedSnapshot<Data, Input>\n) => readonly StoryFinding[];\n\n/** Validate the authored findings before handing them to the presentation UI. */\nexport function storySteps(\n findings: readonly StoryFinding[],\n context: DataContext\n): StoryStep[] {\n invariant(\n findings.length >= 1 && findings.length <= 4,\n 'A story needs one to four findings.'\n );\n const ids = new Set<string>();\n const knownQueries =\n context.queryNames && new Set(Object.values(context.queryNames));\n\n return findings.map(finding => {\n invariant(\n !!finding.id.trim() && !ids.has(finding.id),\n `Story finding IDs must be nonempty and unique: ${finding.id}.`\n );\n invariant(\n !!finding.headline.trim(),\n `Story finding ${finding.id} needs a headline.`\n );\n ids.add(finding.id);\n const evidence =\n 'evidence' in finding.evidence\n ? finding.evidence.evidence\n : finding.evidence;\n invariant(\n !!evidence.glossaryIds?.length || !!evidence.queryNames?.length,\n `Story finding ${finding.id} needs source evidence.`\n );\n for (const id of evidence.glossaryIds ?? [])\n invariant(context.glossary[id], `Unknown glossary entry: ${id}.`);\n for (const name of evidence.queryNames ?? [])\n invariant(\n !knownQueries || knownQueries.has(name),\n `Unknown query name: ${name}.`\n );\n\n return {\n id: finding.id,\n headline: finding.headline,\n context: finding.context,\n visual: finding.visual,\n visualKind: finding.visualKind,\n glossaryIds: evidence.glossaryIds,\n queryNames: evidence.queryNames,\n };\n });\n}\n",
60
- "import {\n useEffect,\n useState,\n type ComponentPropsWithRef,\n type ReactNode,\n} from 'react';\nimport { classNames } from '@/src/react/ui/classNames';\n\nexport type RefreshControlProps = {\n refreshing: boolean;\n children: ReactNode;\n label?: string;\n statusProps?: Omit<ComponentPropsWithRef<'div'>, 'children' | 'role'>;\n status?: ReactNode;\n} & Omit<ComponentPropsWithRef<'div'>, 'children'>;\n\n/** Show refresh progress just before its action after a short delay. */\nexport function RefreshControl({\n refreshing,\n children,\n label = 'Refreshing data',\n statusProps,\n status,\n className,\n ...props\n}: RefreshControlProps) {\n const [refreshDelay, setRefreshDelay] = useState({\n refreshing,\n elapsed: false,\n });\n if (refreshDelay.refreshing !== refreshing)\n setRefreshDelay({ refreshing, elapsed: false });\n\n useEffect(() => {\n if (!refreshing) return;\n const timer = window.setTimeout(\n () => setRefreshDelay({ refreshing: true, elapsed: true }),\n 300\n );\n\n return () => window.clearTimeout(timer);\n }, [refreshing]);\n\n const showProgress =\n refreshing && refreshDelay.refreshing && refreshDelay.elapsed;\n\n return (\n <div\n {...props}\n className={classNames('altertable-refresh-control', className)}\n data-refreshing={showProgress ? '' : undefined}\n >\n <div\n {...statusProps}\n className={classNames(\n 'altertable-refresh-status',\n statusProps?.className\n )}\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {showProgress ? (status ?? label) : null}\n </div>\n {children}\n </div>\n );\n}\n",
61
- "import type { ComponentProps, ComponentPropsWithRef, ReactNode } from 'react';\nimport type { DataView } from '@/src/core/data-view';\nimport { ExportControl } from '@/src/react/ui/ExportControl';\nimport type { CsvExport } from '@/src/react/ui/csv-export';\nimport { LiveControl, type LiveControlProps } from '@/src/react/ui/LiveControl';\nimport { AppIcon } from '@/src/react/ui/icons';\nimport { IconButton } from '@/src/react/ui/IconButton';\nimport { PresentStory } from '@/src/react/ui/PresentStory';\nimport { RefreshControl } from '@/src/react/ui/RefreshControl';\nimport { classNames } from '@/src/react/ui/classNames';\nimport { shortcuts, useShortcut } from '@/src/react/ui/shortcuts';\n\nexport type AppToolbarProps = {\n children?: ReactNode;\n end?: ReactNode;\n controlsProps?: Omit<ComponentPropsWithRef<'div'>, 'children'>;\n updatedAt?: ReactNode;\n initialLoading?: boolean;\n requestState?: DataView<unknown, unknown>['kind'];\n refresh?: {\n refreshing: boolean;\n onRefresh: () => void;\n onCancel?: () => void;\n label?: string;\n tooltip?: ReactNode;\n buttonProps?: Omit<ComponentPropsWithRef<'button'>, 'children' | 'onClick'>;\n statusProps?: ComponentProps<typeof RefreshControl>['statusProps'];\n };\n live?: LiveControlProps;\n aboutData?: ReactNode;\n story?: ComponentProps<typeof PresentStory>;\n csvExport?: CsvExport;\n} & Omit<ComponentPropsWithRef<'div'>, 'children'>;\n\n/** Header actions only. Put reader-controlled inputs in DataApp.variables below the header.\n * Observation time, or an initial loading status, sits before Refresh. Children prepend app controls in the right\n * cluster; end follows the built-in actions. Live sits beside Refresh when supplied. Refresh also\n * answers Alt/Option+R and uses the button to cancel a running request when onCancel is provided;\n * refresh.tooltip overrides its static label. All built-in controls are optional. */\nexport function AppToolbar({\n children,\n updatedAt,\n initialLoading = false,\n requestState,\n refresh,\n live,\n aboutData,\n story,\n csvExport,\n end,\n controlsProps,\n className,\n role = 'group',\n 'aria-label': ariaLabel = 'Page actions',\n ...props\n}: AppToolbarProps) {\n const refreshLabel =\n refresh?.refreshing && refresh.onCancel\n ? 'Cancel refresh'\n : (refresh?.buttonProps?.['aria-label'] ?? 'Refresh data');\n\n function runRefresh() {\n if (refresh && !refresh.refreshing) refresh.onRefresh();\n }\n\n function activateRefresh() {\n if (!refresh) return;\n if (refresh.refreshing) refresh.onCancel?.();\n else refresh.onRefresh();\n }\n useShortcut(shortcuts.refresh, runRefresh, !!refresh);\n\n return (\n <div\n {...props}\n className={classNames('altertable-app-toolbar', className)}\n role={role}\n aria-label={ariaLabel}\n >\n <div\n {...controlsProps}\n className={classNames(\n 'altertable-app-toolbar-actions',\n controlsProps?.className\n )}\n >\n {children}\n {(initialLoading || updatedAt) && (\n <span className=\"altertable-app-toolbar-updated\">\n {initialLoading ? <output>Loading data</output> : updatedAt}\n </span>\n )}\n {refresh && (\n <RefreshControl\n refreshing={refresh.refreshing}\n label={\n requestState === 'loading'\n ? 'Loading data'\n : requestState === 'updating'\n ? 'Updating data'\n : refresh.label\n }\n statusProps={refresh.statusProps}\n >\n <IconButton\n {...refresh.buttonProps}\n icon=\"refresh\"\n variant=\"elevated\"\n label={refreshLabel}\n shortcut={shortcuts.refresh}\n tooltip={\n refresh.refreshing && refresh.onCancel\n ? 'Cancel refresh'\n : refresh.tooltip\n }\n onClick={activateRefresh}\n >\n <AppIcon\n name=\"refresh\"\n className=\"altertable-refresh-idle\"\n size={17}\n />\n <AppIcon\n name=\"loading\"\n className=\"altertable-refresh-loading\"\n size={17}\n />\n {refresh.onCancel && (\n <AppIcon\n name=\"stop\"\n className=\"altertable-refresh-cancel\"\n size={17}\n fill=\"currentColor\"\n strokeWidth={0}\n />\n )}\n </IconButton>\n </RefreshControl>\n )}\n {live && <LiveControl {...live} />}\n {aboutData}\n {!!csvExport?.tables.length && <ExportControl csv={csvExport} />}\n {story && <PresentStory {...story} />}\n {end}\n </div>\n </div>\n );\n}\n",
62
- "import type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { classNames } from '@/src/react/ui/classNames';\n\nexport type VariableBarProps = {\n children: ReactNode;\n} & Omit<ComponentPropsWithRef<'div'>, 'children'>;\n\n/** Reader-controlled inputs below the page header. */\nexport function VariableBar({\n children,\n className,\n role = 'group',\n 'aria-label': ariaLabel = 'View variables',\n ...props\n}: VariableBarProps) {\n return (\n <div\n {...props}\n className={classNames('altertable-variable-bar', className)}\n role={role}\n aria-label={ariaLabel}\n >\n {children}\n </div>\n );\n}\n",
63
- "import { useEffect, useState, type ReactNode } from 'react';\nimport type { DataView } from '@/src/core/data-view';\nimport { Toast } from '@/src/react/ui/Toast';\n\nexport type DataViewToastProps<Data, Input> = {\n view: DataView<Data, Input>;\n message?: ReactNode;\n notice?: ReactNode;\n onRetry?: () => void;\n};\n\n/** One page-level refresh status. Updating waits briefly; a failed refresh waits\n * long enough to avoid interrupting the displayed result before showing retry. */\nexport function DataViewToast<Data, Input>({\n view,\n message,\n notice,\n onRetry,\n}: DataViewToastProps<Data, Input>) {\n const [delay, setDelay] = useState({ kind: view.kind, elapsed: false });\n if (delay.kind !== view.kind) setDelay({ kind: view.kind, elapsed: false });\n\n useEffect(() => {\n if (view.kind !== 'updating' && view.kind !== 'stale-error') return;\n const kind = view.kind;\n const timer = window.setTimeout(\n () => setDelay({ kind, elapsed: true }),\n kind === 'stale-error' ? 3_000 : 450\n );\n\n return () => window.clearTimeout(timer);\n }, [view.kind]);\n\n const showUpdating =\n view.kind === 'updating' && delay.kind === 'updating' && delay.elapsed;\n const showStaleError =\n view.kind === 'stale-error' &&\n delay.kind === 'stale-error' &&\n delay.elapsed;\n\n if (!showStaleError && !showUpdating && !notice) return null;\n const failed = showStaleError;\n const showingUpdate = view.kind === 'updating' && showUpdating;\n const detail =\n view.kind === 'stale-error' || view.kind === 'updating'\n ? view.message\n : undefined;\n const state = failed ? 'error' : showingUpdate ? 'updating' : 'notice';\n\n return (\n <Toast state={state} onRetry={onRetry}>\n {failed || showingUpdate ? (message ?? detail) : notice}\n </Toast>\n );\n}\n",
64
- "import type { ComponentPropsWithRef } from 'react';\nimport type { SkeletonContent } from '@/src/react/ui/presentation';\nimport { invariant } from '@/src/core/invariant';\nimport { classNames } from '@/src/react/ui/classNames';\nimport { Skeleton } from '@/src/react/ui/Skeleton';\n\nexport type ContentSkeletonProps = SkeletonContent &\n Omit<ComponentPropsWithRef<'div'>, 'children'>;\n\n/** A metric, panel, or ranking placeholder to compose in the same layout as live content. */\nexport function ContentSkeleton({\n variant,\n rows = 4,\n className,\n ...props\n}: ContentSkeletonProps) {\n invariant(\n Number.isInteger(rows) && rows >= 0 && rows <= 100,\n 'Skeleton rows must be between 0 and 100.'\n );\n\n return (\n <div\n {...props}\n aria-hidden=\"true\"\n className={classNames(\n `altertable-${variant === 'metric' ? 'metric-widget' : 'data-widget'}`,\n 'altertable-content-skeleton',\n className\n )}\n >\n <Skeleton className=\"altertable-content-skeleton-label\" />\n <Skeleton\n className={\n variant === 'metric'\n ? 'altertable-content-skeleton-value'\n : variant === 'ranking'\n ? 'altertable-content-skeleton-subtitle'\n : 'altertable-content-skeleton-chart'\n }\n />\n {variant === 'panel' && (\n <Skeleton className=\"altertable-content-skeleton-foot\" />\n )}\n {variant === 'ranking' && (\n <div className=\"altertable-content-skeleton-rows\">\n {Array.from({ length: rows }, (_, index) => index).map(row => (\n <div className=\"altertable-content-skeleton-row\" key={row}>\n <Skeleton className=\"altertable-content-skeleton-row-label\" />\n <Skeleton className=\"altertable-content-skeleton-row-track\" />\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n",
65
- "import type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { classNames } from '@/src/react/ui/classNames';\nimport { AppIcon } from '@/src/react/ui/icons';\n\nimport type { DataView } from '@/src/core/data-view';\n\nexport type DataBoundaryProps<T, Input = unknown> = {\n view: DataView<T, Input>;\n loading: ReactNode;\n empty: ReactNode;\n error: (error: Error) => ReactNode;\n staleError?: (error: Error) => ReactNode;\n notice?: 'inline' | 'none';\n dimOnUpdate?: boolean;\n children: (data: T, displayedInput: Input) => ReactNode;\n} & Omit<ComponentPropsWithRef<'div'>, 'children'>;\n\n/** Render one request state at a time. Prior content remains readable during an update.\n * Local boundaries can opt into an inline notice and delayed dimming. */\nexport function DataBoundary<T, Input>({\n view,\n loading,\n empty,\n error,\n staleError,\n notice = 'none',\n dimOnUpdate = false,\n children,\n className,\n ...props\n}: DataBoundaryProps<T, Input>) {\n if (view.kind === 'loading' || view.kind === 'empty' || view.kind === 'error')\n return (\n <div\n {...props}\n className={classNames('altertable-data-boundary', className)}\n >\n {view.kind === 'loading'\n ? loading\n : view.kind === 'empty'\n ? empty\n : error(view.error)}\n </div>\n );\n\n const updating = view.kind === 'updating';\n const hasStaleError = view.kind === 'stale-error';\n\n return (\n <div\n {...props}\n className={classNames('altertable-data-boundary', className)}\n >\n {notice === 'inline' && (updating || hasStaleError) && (\n <div\n className=\"altertable-data-boundary-notice\"\n data-state={view.kind}\n role={hasStaleError ? 'alert' : 'status'}\n >\n {updating ? (\n <AppIcon\n name=\"loading\"\n size={16}\n className=\"altertable-data-boundary-spinner\"\n />\n ) : (\n <AppIcon name=\"error\" size={16} />\n )}\n <span className=\"altertable-data-boundary-message\">\n {view.message}\n </span>\n {staleError && view.kind === 'stale-error' && (\n <span className=\"altertable-data-boundary-action\">\n {staleError(view.error)}\n </span>\n )}\n </div>\n )}\n <div\n className=\"altertable-data-boundary-content\"\n data-updating={(updating && dimOnUpdate) || undefined}\n >\n {children(\n view.data,\n view.kind === 'ready' ? view.input : view.displayedInput\n )}\n </div>\n </div>\n );\n}\n",
66
- "import type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { classNames } from '@/src/react/ui/classNames';\nimport { AppIcon } from '@/src/react/ui/icons';\n\nexport type StatusPanelProps = {\n status: 'loading' | 'empty' | 'error';\n title: ReactNode;\n description?: ReactNode;\n details?: ReactNode;\n action?: ReactNode;\n children?: ReactNode;\n} & Omit<ComponentPropsWithRef<'div'>, 'children' | 'title'>;\n\nexport function StatusPanel({\n status,\n title,\n description,\n details,\n action,\n children,\n className,\n role,\n ...props\n}: StatusPanelProps) {\n return (\n <div\n {...props}\n className={classNames('altertable-status-panel', className)}\n data-status={status}\n role={role ?? (status === 'error' ? 'alert' : 'status')}\n >\n {status === 'error' && <AppIcon name=\"error\" size={18} />}\n <div className=\"altertable-status-copy\">\n <strong>{title}</strong>\n {description && <p>{description}</p>}\n {details && <small>{details}</small>}\n {children}\n </div>\n {action && <div className=\"altertable-status-action\">{action}</div>}\n </div>\n );\n}\n",
67
- "import type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { DataAppError } from '@/src/client/transport';\nimport { Button } from '@/src/react/ui/Button';\nimport { ContentSkeleton } from '@/src/react/ui/ContentSkeleton';\nimport { DataBoundary } from '@/src/react/ui/DataBoundary';\nimport type { DataView } from '@/src/core/data-view';\nimport { EmptyState } from '@/src/react/ui/EmptyState';\nimport type { EmptyContent } from '@/src/react/ui/presentation';\nimport { StatusPanel } from '@/src/react/ui/StatusPanel';\n\nfunction errorPresentation(cause: Error) {\n const code = cause instanceof DataAppError ? cause.code : 'request_failed';\n switch (code) {\n case 'source_unauthorized':\n return {\n title: 'Connection needs attention',\n description: 'Ask the app owner to reconnect the lakehouse.',\n retryable: false,\n };\n case 'source_forbidden':\n return {\n title: 'Data access denied',\n description:\n 'The selected profile cannot read this data. Ask the app owner for access.',\n retryable: false,\n };\n case 'source_query_rejected':\n return {\n title: 'This view cannot run its query',\n description: 'Ask the app owner to check the data operation.',\n retryable: false,\n };\n case 'source_rate_limited':\n return {\n title: 'Data source is busy',\n description: 'The lakehouse is handling too many requests.',\n retryable: true,\n };\n case 'timeout':\n return {\n title: 'Request timed out',\n description: 'The lakehouse took too long to respond.',\n retryable: true,\n };\n case 'source_unavailable':\n return {\n title: 'Couldn’t load results',\n description: 'The lakehouse isn’t responding.',\n retryable: true,\n };\n default:\n return {\n title: 'Couldn’t load results',\n description: 'The data request failed.',\n retryable: true,\n };\n }\n}\n\nexport type SectionResult<Data, Input> = {\n view: DataView<Data, Input>;\n refetch: () => unknown;\n};\n\nexport type DataSectionProps<Data, Input = unknown> = {\n result: SectionResult<Data, Input>;\n empty: EmptyContent;\n children: (data: Data, displayedInput: Input) => ReactNode;\n /** Placeholder layout for an initial request; use the ready view's grid without copied values. */\n loading?: ReactNode;\n error?: { title: ReactNode; description?: ReactNode; onRetry?: () => void };\n label?: string;\n /** DataApp suppresses this local notice in favor of its page-level toast. */\n notice?: 'inline' | 'none';\n dimOnUpdate?: boolean;\n} & Omit<ComponentPropsWithRef<'div'>, 'children'>;\n\n/** One request boundary for any number of cards. `DataBoundary` exposes the lower-level\n * view-state slots for custom composition. */\nexport function DataSection<Data, Input>({\n result,\n children,\n empty,\n loading,\n error,\n label,\n notice = 'inline',\n dimOnUpdate = false,\n ...props\n}: DataSectionProps<Data, Input>) {\n return (\n <DataBoundary\n {...props}\n view={result.view}\n role={label ? 'region' : undefined}\n aria-label={label}\n notice={notice}\n dimOnUpdate={dimOnUpdate}\n loading={loading ?? <ContentSkeleton variant=\"panel\" />}\n empty={<EmptyState {...empty} />}\n error={cause => {\n const presentation = errorPresentation(cause);\n const retryAction =\n error?.onRetry ??\n (presentation.retryable ? () => void result.refetch() : undefined);\n\n return (\n <StatusPanel\n status=\"error\"\n title={error?.title ?? presentation.title}\n description={error?.description ?? presentation.description}\n action={retryAction && <Button onClick={retryAction}>Retry</Button>}\n />\n );\n }}\n staleError={() => (\n <Button onClick={error?.onRetry ?? (() => void result.refetch())}>\n Retry\n </Button>\n )}\n >\n {children}\n </DataBoundary>\n );\n}\n",
68
- "import { createDataClient } from '@/src/client/data-client';\nimport type { DataAppConfig } from '@/src/core/config';\nimport { connectionCheck } from '@/src/core/contract';\nimport { createDataHooks } from '@/src/react/hooks';\nimport { AppIcon } from '@/src/react/ui/icons';\nimport { Button } from '@/src/react/ui/Button';\nimport { DataApp } from '@/src/react/ui/DataApp';\nimport type { DataContext } from '@/src/react/ui/data-context';\n\nconst client = /* @__PURE__ */ createDataClient();\nconst { useDataQuery } = /* @__PURE__ */ createDataHooks<{\n connection: ReturnType<typeof connectionCheck>;\n}>(client);\n\n/** Query-backed connection state and next steps for a newly created app. Mount within\n * `DataAppProvider` and register `connection: connectionCheck()` on the server. */\nexport function GettingStarted({\n config,\n dataContext,\n}: {\n config: DataAppConfig;\n dataContext: DataContext;\n}) {\n const connection = useDataQuery('connection', {});\n const state = connection.error\n ? 'error'\n : connection.isFetching || !connection.data\n ? 'checking'\n : 'connected';\n\n return (\n <DataApp\n config={config}\n dataContext={dataContext}\n description=\"Check your lakehouse connection, then build a view around a real question.\"\n queries={connection.data?.queries}\n refresh={{\n refreshing: connection.isFetching,\n onRefresh() {\n return void connection.refetch();\n },\n tooltip: 'Check connection',\n buttonProps: { 'aria-label': 'Check connection' },\n }}\n >\n <section\n className=\"starter-connection\"\n data-state={state}\n role={state === 'error' ? 'alert' : 'status'}\n >\n <div className=\"starter-connection-icon\">\n <AppIcon\n name={\n state === 'connected'\n ? 'check'\n : state === 'error'\n ? 'error'\n : 'loading'\n }\n size={24}\n />\n </div>\n <div className=\"starter-connection-copy\">\n <span className=\"starter-eyebrow\">Lakehouse connection</span>\n <h2>\n {state === 'connected'\n ? 'Connected'\n : state === 'error'\n ? 'Connection not verified'\n : 'Checking connection…'}\n </h2>\n <p>\n {state === 'connected'\n ? 'A query completed successfully using this app’s current profile. You’re ready to build your first view.'\n : state === 'error'\n ? connection.data\n ? 'An earlier query succeeded, but the latest check failed. Check the profile and try again.'\n : 'The query could not complete. Check the profile and lakehouse access, then try again.'\n : 'Running a lightweight query with this app’s current profile.'}\n </p>\n {state === 'connected' && (\n <small>This check does not verify access to every dataset.</small>\n )}\n </div>\n {state === 'error' && (\n <Button onClick={() => void connection.refetch()}>Try again</Button>\n )}\n </section>\n\n <section className=\"starter-next\" aria-labelledby=\"starter-next-title\">\n <div className=\"starter-next-heading\">\n <span className=\"starter-eyebrow\">Next steps</span>\n <h2 id=\"starter-next-title\">Turn this starter into a useful app</h2>\n <p>Start with one question your readers need answered.</p>\n </div>\n <ol className=\"starter-steps\">\n <li>\n <strong>Choose a question</strong>\n <p>\n Decide what someone should learn or do after opening this app.\n </p>\n </li>\n <li>\n <strong>Find the right data</strong>\n <p>\n Inspect the relevant catalogs, tables, and columns before writing\n the query.\n </p>\n </li>\n <li>\n <strong>Build the first view</strong>\n <p>\n Replace the connection check in <code>src/operations.ts</code>,\n then render its result in <code>src/App.tsx</code>.\n </p>\n </li>\n </ol>\n </section>\n </DataApp>\n );\n}\n",
5
+ "import { useDataApp } from '@/src/react/app-context';\nimport { ownedSource } from '@/src/react/source-owner';\nimport {\n registeredEvidence,\n type RegisteredBinding,\n} from '@/src/react/bindings';\nimport type { DisplayedSnapshot } from '@/src/core/data-view';\nimport { exportDatasets, type ExportDataset } from '@/src/react/bindings';\nimport type { StoryFinding } from '@/src/react/ui/story';\nimport {\n DataAppFrame,\n type DataAppBaseProps,\n} from '@/src/react/ui/DataAppFrame';\nimport {\n PrimaryViewContext,\n type DeclaredView,\n useDeclaredResult,\n} from '@/src/react/view-runtime';\n\nexport type DataAppProps<Data, Input = unknown> = Omit<\n DataAppBaseProps,\n 'dataContext'\n> & {\n view: DeclaredView<Data, Input> & {\n scope(snapshot: DisplayedSnapshot<Data, Input>): string;\n };\n story: (snapshot: DisplayedSnapshot<Data, Input>) => readonly (Omit<\n StoryFinding,\n 'evidence'\n > & {\n evidence: RegisteredBinding;\n })[];\n datasets: readonly [\n ExportDataset<Data, Input>,\n ...ExportDataset<Data, Input>[],\n ];\n};\n\n/** Executes the primary view and owns its controls, inspection, exports, and stories. */\nexport function DataApp<Data, Input>(props: DataAppProps<Data, Input>) {\n const { view, datasets, story, ...frame } = props;\n const app = useDataApp();\n const result = useDeclaredResult(view);\n return (\n <PrimaryViewContext value={{ declaration: view, result }}>\n <DataAppFrame\n {...frame}\n request={result}\n dataContext={result.dataContext}\n story={snapshot =>\n story(ownedSource(view, snapshot)).map(finding => ({\n ...finding,\n evidence: registeredEvidence(finding.evidence, view),\n }))\n }\n csvExport={(snapshot: DisplayedSnapshot<Data, Input>) =>\n exportDatasets(\n datasets,\n ownedSource(view, snapshot),\n view.scope(snapshot),\n app.title\n )\n }\n />\n </PrimaryViewContext>\n );\n}\n",
69
6
  "import type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { classNames } from '@/src/react/ui/classNames';\n\nexport type StackProps = {\n children: ReactNode;\n gap?: 'sm' | 'md' | 'lg';\n} & Omit<ComponentPropsWithRef<'div'>, 'children'>;\n\n/** Vertical layout for peer sections or request boundaries, with the page's section gap. */\nexport function Stack({\n children,\n gap = 'lg',\n className,\n ...props\n}: StackProps) {\n return (\n <div\n {...props}\n className={classNames('altertable-stack', className)}\n data-gap={gap}\n >\n {children}\n </div>\n );\n}\n",
70
- "import type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { classNames } from '@/src/react/ui/classNames';\n\nexport type GridProps = {\n children: ReactNode;\n /** Maximum columns; cards wrap sooner when the container cannot fit their minimum width. */\n columns?: 1 | 2 | 3 | 4;\n minItemWidth?: 'compact' | 'regular' | 'wide';\n gap?: 'sm' | 'md' | 'lg';\n /** Stretch peer cards to the tallest item in their row only when needed. */\n align?: 'stretch' | 'start';\n} & Omit<ComponentPropsWithRef<'div'>, 'children'>;\n\n/** Responsive layout for peer cards and panels. Cards keep their content height by default. */\nexport function Grid({\n children,\n columns = 1,\n minItemWidth = 'regular',\n gap = 'lg',\n align = 'start',\n className,\n ...props\n}: GridProps) {\n return (\n <div\n {...props}\n className={classNames('altertable-grid', className)}\n data-columns={columns}\n data-min-item-width={minItemWidth}\n data-gap={gap}\n data-align={align}\n >\n {children}\n </div>\n );\n}\n",
71
7
  "import type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { classNames } from '@/src/react/ui/classNames';\n\nexport type GridItemProps = {\n children: ReactNode;\n /** Maximum tracks occupied; collapses to one when the grid container is narrow. */\n span?: 1 | 2;\n} & Omit<ComponentPropsWithRef<'div'>, 'children'>;\n\nexport function GridItem({\n children,\n span = 1,\n className,\n ...props\n}: GridItemProps) {\n return (\n <div\n {...props}\n className={classNames('altertable-grid-item', className)}\n data-span={span}\n >\n {children}\n </div>\n );\n}\n",
72
- "import { useId, type ComponentPropsWithRef, type ReactNode } from 'react';\nimport { formatCount } from '@/src/core/format';\nimport { AboutData } from '@/src/react/ui/AboutData';\nimport { AppIcon } from '@/src/react/ui/icons';\nimport {\n WidgetStatusControl,\n type WidgetStatus,\n} from '@/src/react/ui/RequestHint';\nimport { classNames } from '@/src/react/ui/classNames';\nimport { ContentSkeleton } from '@/src/react/ui/ContentSkeleton';\nimport { EmptyState } from '@/src/react/ui/EmptyState';\nimport type {\n EmptyContent,\n BoundWidgetReading,\n} from '@/src/react/ui/presentation';\nimport type { WidgetEvidence } from '@/src/react/ui/WidgetEvidence';\n\ntype DataWidgetBaseProps = {\n title: ReactNode;\n count?: number;\n description?: ReactNode;\n evidence?: WidgetEvidence;\n action?: ReactNode;\n /** Reserved feedback slot; retain displayed content while refreshing or after failure. */\n status?: WidgetStatus;\n footer?: ReactNode;\n bodyPadding?: 'inset' | 'flush';\n} & Omit<ComponentPropsWithRef<'section'>, 'about' | 'title' | 'children'>;\n\n/** Owns loading, empty content, actions, and inspection. Page and sheet mount the same\n * body and footer; hold interactive child state above the widget to share it across mounts.\n * A bound reading requires evidence; its child renderer runs only for nonempty ready data. */\nexport type DataWidgetProps<Data = unknown> = DataWidgetBaseProps &\n (\n | (BoundWidgetReading<Data> & {\n children: (data: Data) => ReactNode;\n })\n | {\n reading?: never;\n isEmpty?: never;\n skeleton?: never;\n empty?: EmptyContent;\n children: ReactNode;\n }\n );\n\nexport function DataWidget<Data>(props: DataWidgetProps<Data>) {\n if (props.reading) {\n const { reading, isEmpty, empty, skeleton, children, ...shell } = props;\n if (reading.loading)\n return (\n <ContentSkeleton\n variant=\"panel\"\n {...skeleton}\n className={shell.className}\n />\n );\n const noData = isEmpty(reading.value);\n\n return (\n <DataWidgetContent {...shell} empty={noData ? empty : undefined}>\n {noData ? null : children(reading.value)}\n </DataWidgetContent>\n );\n }\n\n return <DataWidgetContent {...props} />;\n}\n\nfunction DataWidgetContent({\n title,\n count,\n description,\n evidence,\n action,\n status,\n footer,\n empty,\n bodyPadding = 'inset',\n children,\n className,\n ...props\n}: DataWidgetBaseProps & { empty?: EmptyContent; children: ReactNode }) {\n const titleId = useId();\n const content = empty ? <EmptyState {...empty} /> : children;\n const visual = (\n <WidgetContent\n bodyPadding={empty ? 'flush' : bodyPadding}\n footer={empty ? undefined : footer}\n status={status}\n >\n {content}\n </WidgetContent>\n );\n const help = evidence && (\n <AboutData\n id={evidence.id}\n references={{\n kind: 'ids',\n glossaryIds: evidence.glossaryIds,\n queryNames: evidence.queryNames,\n }}\n aria-label={\n typeof title === 'string' ? `Explore ${title}` : 'Explore this widget'\n }\n variant=\"ghost\"\n className=\"altertable-widget-heading-trigger\"\n tooltip=\"Explore this widget\"\n shortcut={false}\n title={title}\n headerActions={<WidgetStatusControl status={status} />}\n description={description}\n visual={visual}\n visualKind=\"widget\"\n >\n {title}\n <AppIcon name=\"openDetails\" />\n </AboutData>\n );\n\n return (\n <section\n {...props}\n className={classNames('altertable-data-widget', className)}\n aria-labelledby={props['aria-labelledby'] ?? titleId}\n >\n <header className=\"altertable-data-widget-header\">\n <div>\n <h2\n id={titleId}\n aria-label={typeof title === 'string' ? title : undefined}\n >\n {help ?? title}\n {count !== undefined && (\n <span className=\"altertable-data-widget-count\">\n {formatCount(count)}\n </span>\n )}\n </h2>\n {description && <p>{description}</p>}\n </div>\n <div className=\"altertable-data-widget-help\">\n <WidgetStatusControl status={status} />\n {action}\n </div>\n </header>\n {visual}\n </section>\n );\n}\n\n/** The page and inspection sheet render the same body and footer, with the same spacing. */\nfunction WidgetContent({\n bodyPadding,\n footer,\n status,\n children,\n}: {\n bodyPadding: 'inset' | 'flush';\n footer?: ReactNode;\n status?: WidgetStatus;\n children: ReactNode;\n}) {\n return (\n <>\n <div\n className=\"altertable-data-widget-body\"\n data-padding={bodyPadding}\n aria-busy={status?.kind === 'updating' || undefined}\n >\n {children}\n </div>\n {footer && (\n <footer className=\"altertable-data-widget-footer\">{footer}</footer>\n )}\n </>\n );\n}\n",
73
- "import type { ComponentPropsWithRef } from 'react';\nimport { classNames } from '@/src/react/ui/classNames';\n\nexport type TextContentProps = ComponentPropsWithRef<'div'>;\n\n/** Prose typography for page introductions, widget bodies, and inspection content. */\nexport function TextContent({ className, ...props }: TextContentProps) {\n return (\n <div\n {...props}\n className={classNames('altertable-text-content', className)}\n />\n );\n}\n",
74
- "import type { ReactNode } from 'react';\nimport type { DataReading } from '@/src/core/reading';\nimport { DataWidget, type DataWidgetProps } from '@/src/react/ui/DataWidget';\nimport { classNames } from '@/src/react/ui/classNames';\nimport { Skeleton } from '@/src/react/ui/Skeleton';\nimport { TextContent } from '@/src/react/ui/TextContent';\nimport type { WidgetEvidence } from '@/src/react/ui/WidgetEvidence';\n\ntype TextWidgetBaseProps = Omit<\n Extract<DataWidgetProps, { reading?: never }>,\n 'reading' | 'children' | 'isEmpty' | 'empty' | 'skeleton' | 'bodyPadding'\n>;\n\n/** Framed narrative context. Bind claims and scope to the same displayed reading.\n * The renderer handles every ready value, including zero and empty collections. */\nexport type TextWidgetProps<Data = unknown> = TextWidgetBaseProps &\n (\n | {\n reading: DataReading<Data>;\n evidence: WidgetEvidence;\n children: (data: Data) => ReactNode;\n }\n | { reading?: never; children: ReactNode }\n );\n\nexport function TextWidget<Data>(props: TextWidgetProps<Data>) {\n const content = props.reading\n ? props.reading.loading\n ? null\n : props.children(props.reading.value)\n : props.children;\n const { reading, children: _, className, ...shell } = props;\n const loading = reading?.loading === true;\n\n return (\n <DataWidget\n {...shell}\n className={classNames('altertable-text-widget', className)}\n evidence={loading ? undefined : shell.evidence}\n aria-busy={loading || shell['aria-busy']}\n >\n <TextContent>\n {loading ? (\n <div className=\"altertable-text-widget-skeleton\" aria-hidden=\"true\">\n <Skeleton />\n <Skeleton />\n <Skeleton />\n </div>\n ) : (\n content\n )}\n </TextContent>\n </DataWidget>\n );\n}\n",
75
- "import { useState, type ComponentPropsWithRef, type ReactNode } from 'react';\nimport type { WidgetEvidence } from '@/src/react/ui/WidgetEvidence';\nimport { DataWidget } from '@/src/react/ui/DataWidget';\nimport type { WidgetStatus } from '@/src/react/ui/RequestHint';\nimport type {\n EmptyContent,\n BoundWidgetReading,\n} from '@/src/react/ui/presentation';\nimport { ContentSkeleton } from '@/src/react/ui/ContentSkeleton';\nimport { validateWidgetViews } from '@/src/react/ui/widget-views';\nimport { WidgetViewTabs } from '@/src/react/ui/WidgetViewTabs';\n\ntype VisualizationWidgetBaseProps = {\n title: ReactNode;\n description?: ReactNode;\n insight?: ReactNode;\n action?: ReactNode;\n evidence?: WidgetEvidence;\n status?: WidgetStatus;\n empty?: EmptyContent;\n} & Omit<ComponentPropsWithRef<'section'>, 'about' | 'title' | 'children'>;\n\ntype UnboundVisualizationWidgetProps = VisualizationWidgetBaseProps &\n ({ loading: true; visual?: never } | { loading?: false; visual: ReactNode });\n\nexport type VisualizationWidgetView<Data> = {\n /** Stable, nonempty identity; unique within this widget. */\n id: string;\n label: ReactNode;\n render: (data: Data) => ReactNode;\n};\n\ntype BoundVisualizationWidgetBase<Data> = VisualizationWidgetBaseProps &\n BoundWidgetReading<Data> & {\n visual?: never;\n loading?: never;\n };\n\n/** The widget owns alternate-view selection and shares it with inspection.\n * Custom chart interactions remain controlled by the caller, above both mounts. */\nexport type VisualizationWidgetProps<Data = unknown> =\n | UnboundVisualizationWidgetProps\n | (BoundVisualizationWidgetBase<Data> & {\n children: (data: Data) => ReactNode;\n views?: never;\n })\n | (BoundVisualizationWidgetBase<Data> & {\n views: readonly VisualizationWidgetView<Data>[];\n viewLabel: string;\n /** An existing view ID; defaults to the first view. Validated while loading too. */\n initialView?: string;\n children?: never;\n });\n\nexport function VisualizationWidget<Data>(\n props: VisualizationWidgetProps<Data>\n) {\n if ('views' in props && props.views)\n return <VisualizationWidgetWithViews {...props} />;\n if ('reading' in props) {\n const { reading, children, isEmpty, empty, skeleton, insight, ...shell } =\n props;\n\n return (\n <DataWidget\n {...shell}\n reading={reading}\n isEmpty={isEmpty}\n empty={empty}\n skeleton={skeleton}\n footer={insight}\n >\n {data => (\n <div className=\"altertable-visualization-widget-content\">\n {children(data)}\n </div>\n )}\n </DataWidget>\n );\n }\n const { visual, loading = false, insight, ...shell } = props;\n if (loading)\n return <ContentSkeleton variant=\"panel\" className={shell.className} />;\n\n return (\n <DataWidget {...shell} footer={insight}>\n <div className=\"altertable-visualization-widget-content\">{visual}</div>\n </DataWidget>\n );\n}\n\nfunction VisualizationWidgetWithViews<Data>({\n reading,\n views,\n viewLabel,\n initialView,\n isEmpty,\n empty,\n skeleton,\n insight,\n ...shell\n}: BoundVisualizationWidgetBase<Data> & {\n views: readonly VisualizationWidgetView<Data>[];\n viewLabel: string;\n initialView?: string;\n}) {\n const [selected, setSelected] = useState(initialView ?? views[0]?.id ?? '');\n validateWidgetViews(views, selected);\n\n return (\n <DataWidget\n {...shell}\n reading={reading}\n isEmpty={isEmpty}\n empty={empty}\n skeleton={skeleton}\n footer={insight}\n >\n {data => (\n <div className=\"altertable-visualization-widget-content\">\n <WidgetViewTabs\n label={viewLabel}\n views={views.map(view => ({\n id: view.id,\n label: view.label,\n content: view.render(data),\n isEmpty: false,\n empty,\n }))}\n selectedKey={selected}\n onSelectionChange={setSelected}\n />\n </div>\n )}\n </DataWidget>\n );\n}\n",
76
- "import { invariant } from '@/src/core/invariant';\n\nexport function validateWidgetViews(\n views: readonly { id: string }[],\n selected: string\n) {\n const ids = new Set(views.map(view => view.id));\n invariant(\n views.length > 0 &&\n ids.size === views.length &&\n views.every(view => !!view.id.trim()),\n 'Widget tab IDs must be nonempty and unique.'\n );\n invariant(ids.has(selected), `Unknown widget tab: ${selected}.`);\n}\n",
77
- "import type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { Tab, TabList, TabPanel, TabPanels, Tabs } from '@/src/react/ui/Tabs';\nimport { EmptyState } from '@/src/react/ui/EmptyState';\nimport type { EmptyContent } from '@/src/react/ui/presentation';\nimport { classNames } from '@/src/react/ui/classNames';\nimport { validateWidgetViews } from '@/src/react/ui/widget-views';\n\nexport type WidgetView = {\n id: string;\n label: ReactNode;\n content: ReactNode;\n empty: EmptyContent;\n isEmpty: boolean;\n};\nexport type WidgetViewTabsProps<\n Views extends readonly WidgetView[] = readonly WidgetView[],\n> = {\n label: string;\n views: Views;\n selectedKey: NoInfer<Views[number]['id']>;\n onSelectionChange: (key: Views[number]['id']) => void;\n} & Omit<ComponentPropsWithRef<'div'>, 'children'>;\n\nexport function WidgetViewTabs<const Views extends readonly WidgetView[]>({\n label,\n views,\n selectedKey,\n onSelectionChange,\n className,\n ...props\n}: WidgetViewTabsProps<Views>) {\n validateWidgetViews(views, selectedKey);\n\n return (\n <div\n {...props}\n className={classNames('altertable-widget-view-tabs', className)}\n >\n <Tabs\n selectedKey={selectedKey}\n onSelectionChange={key => onSelectionChange(String(key))}\n >\n <TabList aria-label={label}>\n {views.map(view => (\n <Tab key={view.id} id={view.id}>\n {view.label}\n </Tab>\n ))}\n </TabList>\n <TabPanels>\n {views.map(view => (\n <TabPanel key={view.id} id={view.id}>\n {view.isEmpty ? <EmptyState {...view.empty} /> : view.content}\n </TabPanel>\n ))}\n </TabPanels>\n </Tabs>\n </div>\n );\n}\n",
78
- "import { useState, type ComponentPropsWithRef, type ReactNode } from 'react';\nimport { invariant } from '@/src/core/invariant';\nimport type { WidgetEvidence } from '@/src/react/ui/WidgetEvidence';\nimport type { WidgetStatus } from '@/src/react/ui/RequestHint';\nimport { DataWidget } from '@/src/react/ui/DataWidget';\nimport {\n DataTable,\n DataTableEmptyRow,\n type DataTableSearch,\n} from '@/src/react/ui/DataTable';\nimport type { EmptyContent } from '@/src/react/ui/presentation';\nimport {\n searchItems,\n type SearchHit,\n type SearchItemsOptions,\n} from '@/src/react/ui/searchItems';\nimport type { DataReading } from '@/src/core/reading';\nimport { formatCount, pluralize } from '@/src/core/format';\nimport { ContentSkeleton } from '@/src/react/ui/ContentSkeleton';\nimport { AppIcon } from '@/src/react/ui/icons';\nimport { Button } from '@/src/react/ui/Button';\nimport { Tooltip } from '@/src/react/ui/Tooltip';\n\nexport type TableWidgetColumn<Row> = {\n /** Stable, nonempty identity; unique within this table. */\n id: string;\n header: ReactNode;\n type?: 'number' | 'datetime';\n /** Render this column's value for one row. The table owns its cell element and semantics. */\n cell: (row: Row, hit?: SearchHit<Row>) => ReactNode;\n};\n\nexport type TableWidgetSearch<Row> = Omit<DataTableSearch, 'itemCount'> &\n Pick<SearchItemsOptions<Row>, 'attributes' | 'mode' | 'fuzzyThreshold'>;\n\ntype TableWidgetBaseProps<Row> = {\n title: ReactNode;\n count?: number;\n description?: ReactNode;\n columns: readonly [TableWidgetColumn<Row>, ...TableWidgetColumn<Row>[]];\n /** Unique, nonempty row identity. Numeric keys must be finite; 1 and \"1\" collide. */\n rowKey: (row: Row) => string | number;\n insight?: ReactNode;\n status?: WidgetStatus;\n action?: ReactNode;\n evidence?: WidgetEvidence;\n search?: TableWidgetSearch<Row>;\n /** Valid result with no rows; the header remains visible. */\n empty: EmptyContent;\n} & (\n | {\n /** Positive integer preview cap after search; disables pagination. */\n limit: number;\n pagination?: never;\n }\n | {\n /** Local pagination after search: 10 rows by default, false shows all supplied rows.\n * pageSize must be a positive integer. Counts refer only to supplied rows.\n * The widget owns bottom-footer controls and shares the current page with inspection. */\n pagination?: { pageSize: number } | false;\n limit?: never;\n }\n) &\n Omit<ComponentPropsWithRef<'section'>, 'about' | 'title' | 'children'>;\n\n/** Column definitions own both header and body semantics; the first column is the row header. */\nexport type TableWidgetProps<Row> = TableWidgetBaseProps<Row> &\n (\n | { rows: readonly Row[]; reading?: never; skeletonRows?: never }\n | {\n reading: DataReading<readonly Row[]>;\n rows?: never;\n skeletonRows?: number;\n evidence: WidgetEvidence;\n }\n );\n\nexport function TableWidget<Row>(props: TableWidgetProps<Row>) {\n const { pagination, limit, columns } = props;\n invariant(\n !pagination ||\n (Number.isSafeInteger(pagination.pageSize) && pagination.pageSize >= 1),\n 'TableWidget pagination.pageSize must be a positive integer.'\n );\n invariant(\n limit === undefined || (Number.isSafeInteger(limit) && limit >= 1),\n 'TableWidget limit must be a positive integer.'\n );\n const columnIds = columns.map(column => column.id);\n invariant(\n columnIds.length > 0 &&\n columnIds.every(id => !!id.trim()) &&\n new Set(columnIds).size === columnIds.length,\n 'TableWidget column IDs must be nonempty and unique.'\n );\n\n if (props.reading) {\n const { reading, skeletonRows = 5, ...rest } = props;\n if (reading.loading)\n return (\n <ContentSkeleton\n variant=\"ranking\"\n rows={skeletonRows}\n className={rest.className}\n />\n );\n\n return <TableWidgetContent {...rest} rows={reading.value} />;\n }\n\n return <TableWidgetContent {...props} />;\n}\n\nfunction TableWidgetContent<Row>({\n title,\n count,\n description,\n columns,\n rows,\n rowKey,\n insight,\n action,\n evidence,\n search,\n limit,\n pagination,\n empty,\n ...props\n}: TableWidgetBaseProps<Row> & { rows: readonly Row[] }) {\n const keys = rows.map(rowKey);\n invariant(\n keys.every(key =>\n typeof key === 'string' ? !!key.trim() : Number.isFinite(key)\n ) && new Set(keys.map(String)).size === keys.length,\n 'TableWidget row keys must be nonempty and unique.'\n );\n const rowKeys = JSON.stringify(keys);\n\n const pageSize =\n pagination === false || limit !== undefined\n ? null\n : (pagination?.pageSize ?? 10);\n const [pageState, setPageState] = useState({\n page: 0,\n rowKeys,\n searchValue: search?.value,\n pageSize,\n });\n if (\n pageState.rowKeys !== rowKeys ||\n pageState.searchValue !== search?.value ||\n pageState.pageSize !== pageSize\n ) {\n setPageState({ page: 0, rowKeys, searchValue: search?.value, pageSize });\n }\n const hits = search\n ? searchItems(rows, search.value, {\n attributes: search.attributes,\n mode: search.mode,\n fuzzyThreshold: search.fuzzyThreshold,\n })\n : rows.map(item => ({ item, score: 0, matches: {} }));\n const pageCount = pageSize\n ? Math.max(1, Math.ceil(hits.length / pageSize))\n : 1;\n const page = Math.min(pageState.page, pageCount - 1);\n const start = pageSize ? page * pageSize : 0;\n const visible = hits.slice(\n start,\n pageSize ? start + pageSize : Math.max(0, limit ?? hits.length)\n );\n const searchable = search && {\n label: search.label,\n placeholder: search.placeholder,\n value: search.value,\n onChange: search.onChange,\n resetValue: search.resetValue,\n itemCount: rows.length,\n };\n const table = (\n <>\n <DataTable searchable={searchable}>\n <thead>\n <tr>\n {columns.map(column => (\n <th key={column.id} scope=\"col\" data-type={column.type}>\n {column.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {visible.length === 0 ? (\n <DataTableEmptyRow colSpan={columns.length} {...empty} />\n ) : (\n visible.map(hit => (\n <tr key={rowKey(hit.item)}>\n {columns.map((column, index) =>\n index === 0 ? (\n <th key={column.id} scope=\"row\" data-type={column.type}>\n {column.cell(hit.item, hit)}\n </th>\n ) : (\n <td key={column.id} data-type={column.type}>\n {column.cell(hit.item, hit)}\n </td>\n )\n )}\n </tr>\n ))\n )}\n </tbody>\n </DataTable>\n </>\n );\n const pager = pageSize && pageCount > 1 && (\n <nav className=\"altertable-table-pagination\" aria-label=\"Table pages\">\n <span className=\"altertable-table-pagination-range\">\n {formatCount(start + 1)}–{formatCount(start + visible.length)} of{' '}\n {formatCount(hits.length)} {pluralize(hits.length, 'result')}\n </span>\n <span className=\"altertable-table-pagination-controls\">\n <span>\n Page {page + 1} of {pageCount}\n </span>\n <Tooltip content=\"Previous page\">\n <Button\n size=\"icon-compact\"\n aria-label=\"Previous page\"\n disabled={page === 0}\n onClick={() =>\n setPageState({\n page: page - 1,\n rowKeys,\n searchValue: search?.value,\n pageSize,\n })\n }\n >\n <AppIcon name=\"previousMonth\" size={16} />\n </Button>\n </Tooltip>\n <Tooltip content=\"Next page\">\n <Button\n size=\"icon-compact\"\n aria-label=\"Next page\"\n disabled={page >= pageCount - 1}\n onClick={() =>\n setPageState({\n page: page + 1,\n rowKeys,\n searchValue: search?.value,\n pageSize,\n })\n }\n >\n <AppIcon name=\"nextMonth\" size={16} />\n </Button>\n </Tooltip>\n </span>\n </nav>\n );\n\n return (\n <DataWidget\n {...props}\n title={title}\n count={count}\n description={description}\n action={action}\n evidence={evidence}\n footer={\n (pager || insight) && (\n <>\n {pager}\n {insight}\n </>\n )\n }\n >\n <div className=\"altertable-table-widget-content\">{table}</div>\n </DataWidget>\n );\n}\n",
79
- "import { useEffect, useState, type ReactNode } from 'react';\nimport { HelpPopover, type HelpPopoverProps } from '@/src/react/ui/HelpPopover';\n\nexport type DateTimeTooltipProps = {\n date: Date;\n\n timeZone?: string;\n children?: ReactNode;\n} & Omit<HelpPopoverProps, 'trigger' | 'triggerLabel' | 'label' | 'children'>;\n\nfunction formattedDate(date: Date, timeZone: string): string {\n return new Intl.DateTimeFormat(undefined, {\n timeZone,\n dateStyle: 'medium',\n timeStyle: 'medium',\n }).format(date);\n}\n\nfunction relativeDate(date: Date, now: number): string {\n const seconds = Math.round((date.getTime() - now) / 1000);\n const absolute = Math.abs(seconds);\n const [value, unit]: [number, Intl.RelativeTimeFormatUnit] =\n absolute < 60\n ? [seconds, 'second']\n : absolute < 3600\n ? [Math.round(seconds / 60), 'minute']\n : absolute < 86_400\n ? [Math.round(seconds / 3600), 'hour']\n : [Math.round(seconds / 86_400), 'day'];\n\n return new Intl.RelativeTimeFormat(undefined, { numeric: 'auto' }).format(\n value,\n unit\n );\n}\n\n/** Pass the viewer's account time zone when known; the popover also exposes UTC and Unix time. */\nexport function DateTimeTooltip({\n date,\n timeZone,\n children,\n triggerClassName,\n panelClassName,\n ...props\n}: DateTimeTooltipProps) {\n const [now, setNow] = useState(Date.now);\n\n useEffect(() => {\n const interval = window.setInterval(() => setNow(Date.now()), 30_000);\n\n return () => window.clearInterval(interval);\n }, []);\n\n const browserTimeZone =\n Intl.DateTimeFormat().resolvedOptions().timeZone || 'UTC';\n const primaryTimeZone = timeZone ?? browserTimeZone;\n const rows = [\n {\n label: timeZone\n ? `Account · ${timeZone}`\n : `Browser · ${browserTimeZone}`,\n zone: primaryTimeZone,\n },\n ...(primaryTimeZone === 'UTC' ? [] : [{ label: 'UTC', zone: 'UTC' }]),\n ...(timeZone && timeZone !== browserTimeZone\n ? [{ label: `Browser · ${browserTimeZone}`, zone: browserTimeZone }]\n : []),\n ];\n const timestamp = date.toISOString();\n\n return (\n <HelpPopover\n {...props}\n placement={props.placement ?? 'bottom'}\n triggerClassName={triggerClassName}\n panelClassName={['altertable-date-time-tooltip', panelClassName]\n .filter(Boolean)\n .join(' ')}\n triggerLabel=\"Show exact date and time\"\n label=\"Date and time details\"\n trigger={\n children ?? (\n <time dateTime={timestamp}>\n {formattedDate(date, timeZone ?? browserTimeZone)}\n </time>\n )\n }\n >\n <div className=\"altertable-date-time-rows\">\n {rows.map(({ label, zone }) => (\n <span className=\"altertable-date-time-row\" key={label}>\n <span className=\"altertable-date-time-label\">{label}</span>\n <time dateTime={timestamp}>{formattedDate(date, zone)}</time>\n </span>\n ))}\n <span className=\"altertable-date-time-row\">\n <span className=\"altertable-date-time-label\">Relative</span>\n <time dateTime={timestamp}>{relativeDate(date, now)}</time>\n </span>\n <span className=\"altertable-date-time-row\">\n <span className=\"altertable-date-time-label\">Timestamp</span>\n <time dateTime={timestamp}>{date.getTime()}</time>\n </span>\n </div>\n </HelpPopover>\n );\n}\n",
80
- "import {\n useState,\n type ComponentPropsWithRef,\n type ReactNode,\n type RefObject,\n} from 'react';\nimport {\n autoUpdate,\n flip,\n FloatingFocusManager,\n FloatingPortal,\n offset,\n safePolygon,\n shift,\n useClick,\n useDismiss,\n useFloating,\n useHover,\n useInteractions,\n useMergeRefs,\n useRole,\n type Placement,\n} from '@floating-ui/react';\nimport { classNames } from '@/src/react/ui/classNames';\n\nexport type HelpPopoverTriggerProps = Omit<\n ComponentPropsWithRef<'button'>,\n 'children' | 'type'\n>;\nexport type HelpPopoverPanelProps = Omit<\n ComponentPropsWithRef<'section'>,\n 'children' | 'role'\n>;\n\nexport type HelpPopoverProps = {\n trigger: ReactNode;\n triggerLabel: string;\n label: string;\n children: ReactNode;\n triggerClassName?: string;\n panelClassName?: string;\n placement?: Placement;\n portalRoot?: RefObject<HTMLElement | null>;\n triggerProps?: HelpPopoverTriggerProps;\n panelProps?: HelpPopoverPanelProps;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n};\n\n/** A supplemental explanation that opens on click, Enter, or a deliberate mouse hover. Tabbing\n * past the trigger does not open it, and a click keeps a hover-opened panel in place.\n * triggerProps and panelProps target its two surfaces. */\nexport function HelpPopover({\n trigger,\n triggerLabel,\n label,\n children,\n triggerClassName,\n panelClassName,\n portalRoot,\n triggerProps,\n panelProps,\n placement = 'bottom-start',\n open: openProp,\n onOpenChange,\n}: HelpPopoverProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(false);\n const [dialogRoot, setDialogRoot] = useState<HTMLDialogElement | null>(null);\n const open = openProp ?? uncontrolledOpen;\n\n function setOpen(next: boolean) {\n onOpenChange?.(next);\n if (openProp === undefined) setUncontrolledOpen(next);\n }\n const { refs, floatingStyles, context } = useFloating({\n open,\n onOpenChange: setOpen,\n placement,\n strategy: 'fixed',\n whileElementsMounted: autoUpdate,\n middleware: [offset(8), flip(), shift({ padding: 12 })],\n });\n const { getReferenceProps, getFloatingProps } = useInteractions([\n useHover(context, {\n mouseOnly: true,\n delay: { open: 400, close: 120 },\n handleClose: safePolygon(),\n }),\n useClick(context),\n useDismiss(context),\n useRole(context, { role: 'dialog' }),\n ]);\n const mergedTriggerRef = useMergeRefs([\n refs.setReference,\n triggerProps?.ref,\n (element: HTMLButtonElement | null) =>\n setDialogRoot(element?.closest('dialog') ?? null),\n ]);\n const mergedPanelRef = useMergeRefs([refs.setFloating, panelProps?.ref]);\n\n return (\n <>\n <button\n {...getReferenceProps({\n ...triggerProps,\n 'aria-label': triggerProps?.['aria-label'] ?? triggerLabel,\n })}\n ref={mergedTriggerRef}\n type=\"button\"\n className={classNames(\n triggerClassName ?? 'altertable-button',\n triggerProps?.className\n )}\n data-variant={triggerClassName ? undefined : 'outline'}\n data-size={triggerClassName ? undefined : 'compact'}\n data-open={open}\n >\n {trigger}\n </button>\n {open && (\n <FloatingPortal root={portalRoot ?? dialogRoot ?? undefined}>\n <FloatingFocusManager\n context={context}\n modal={false}\n initialFocus={-1}\n >\n <section\n {...getFloatingProps(panelProps ?? {})}\n ref={mergedPanelRef}\n className={classNames(\n 'altertable-help-popover',\n panelClassName,\n panelProps?.className\n )}\n style={{ ...panelProps?.style, ...floatingStyles }}\n aria-label={panelProps?.['aria-label'] ?? label}\n >\n {children}\n </section>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </>\n );\n}\n",
81
- "import type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { classNames } from '@/src/react/ui/classNames';\nimport { DateTimeTooltip } from '@/src/react/ui/DateTimeTooltip';\nimport { EmptyState } from '@/src/react/ui/EmptyState';\nimport type { EmptyContent } from '@/src/react/ui/presentation';\nimport { SearchField, type SearchFieldProps } from '@/src/react/ui/SearchField';\n\nexport type DataTableSearch = Pick<\n SearchFieldProps,\n 'label' | 'placeholder' | 'value' | 'onChange' | 'resetValue'\n> & {\n /** Number of available records before filtering or a display limit. */\n itemCount: number;\n};\nexport type DataTableProps = ComponentPropsWithRef<'table'> & {\n searchable?: DataTableSearch;\n};\n\n/** Scrollable native table. Mark quantitative th/td cells with data-type=\"number\";\n * the runtime aligns them to the end and uses tabular digits. */\nexport function DataTable({\n className,\n ref,\n searchable,\n ...props\n}: DataTableProps) {\n return (\n <>\n {searchable &&\n (searchable.itemCount > 5 ||\n searchable.value !== (searchable.resetValue ?? '')) && (\n <SearchField\n label={searchable.label}\n placeholder={searchable.placeholder}\n value={searchable.value}\n onChange={searchable.onChange}\n resetValue={searchable.resetValue}\n size=\"compact\"\n className=\"altertable-data-table-search\"\n />\n )}\n <div className=\"altertable-data-table-scroll\">\n <table\n {...props}\n ref={ref}\n className={classNames('altertable-data-table', className)}\n />\n </div>\n </>\n );\n}\n\n/** Accepts a fraction of the stated whole, using `formatPercent` semantics. */\nexport function DataTableShare({ value }: { value: number }) {\n const ratio = Number.isFinite(value) ? Math.max(0, Math.min(1, value)) : 0;\n const label = new Intl.NumberFormat('en-US', {\n style: 'percent',\n minimumFractionDigits: 1,\n maximumFractionDigits: 1,\n }).format(ratio);\n\n return <span className=\"altertable-data-table-share\">{label}</span>;\n}\n\nexport type DataTableEmptyRowProps = EmptyContent & {\n colSpan: number;\n};\n\nexport function DataTableEmptyRow({\n colSpan,\n title,\n description,\n}: DataTableEmptyRowProps) {\n return (\n <tr className=\"altertable-data-table-empty-row\">\n <td colSpan={colSpan}>\n <EmptyState title={title} description={description} variant=\"table\" />\n </td>\n </tr>\n );\n}\n\nexport type DataTableTimestampProps = {\n value: string | Date;\n children?: ReactNode;\n timeZone?: string;\n};\n\nexport function DataTableTimestamp({\n value,\n children,\n timeZone,\n}: DataTableTimestampProps) {\n const date = value instanceof Date ? value : new Date(value);\n if (Number.isNaN(date.getTime())) return <>{children ?? value.toString()}</>;\n const timestamp = date.toISOString();\n\n return (\n <DateTimeTooltip\n date={date}\n timeZone={timeZone}\n triggerClassName=\"altertable-data-table-timestamp\"\n >\n <time dateTime={timestamp}>{children ?? timestamp}</time>\n </DateTimeTooltip>\n );\n}\n",
82
- "export function chartColor(id: string): string {\n let hash = 2166136261;\n for (const codePoint of id)\n hash = Math.imul(hash ^ codePoint.codePointAt(0)!, 16777619);\n\n return `var(--at-chart-${((hash >>> 0) % 8) + 1}, var(--at-accent, #4779dc))`;\n}\n",
8
+ "import {\n datasetTable,\n type Dataset,\n type Metric,\n type ViewSource,\n} from '@/src/react/bindings';\nimport {\n MetricWidget as DisplayMetric,\n type MetricWidgetProps as DisplayMetricProps,\n} from '@/src/react/ui/MetricWidget';\nimport {\n TableWidget as DisplayTable,\n type TableWidgetProps as DisplayTableProps,\n type TableDisplayMode,\n} from '@/src/react/ui/TableWidget';\nimport {\n VisualizationWidget as DisplayVisual,\n type VisualizationWidgetProps as DisplayVisualProps,\n type VisualizationWidgetView as DisplayVisualizationView,\n} from '@/src/react/ui/VisualizationWidget';\nimport {\n TextWidget as DisplayText,\n type TextWidgetProps as DisplayTextProps,\n} from '@/src/react/ui/TextWidget';\nimport { formatMetric } from '@/src/core/format';\nimport {\n DataValue as DisplayValue,\n type DataValueProps as DisplayValueProps,\n} from '@/src/react/ui/DataValue';\nimport { Skeleton } from '@/src/react/ui/Skeleton';\nimport type { MetricValues } from '@/src/core/reading';\nimport type { MetricDefinition } from '@/src/react/ui/metric';\nimport type { ReactNode } from 'react';\nimport type { DataReading } from '@/src/core/reading';\n\nexport type MetricWidgetProps<Data = unknown, Input = unknown> = Omit<\n Extract<DisplayMetricProps, { metric: MetricDefinition }>,\n 'metric' | 'reading'\n> & { metric: Metric<Data, Input>; source: ViewSource<Data, Input> };\nexport function MetricWidget<Data, Input>({\n metric,\n source,\n ...presentation\n}: MetricWidgetProps<Data, Input>) {\n return (\n <DisplayMetric\n {...presentation}\n metric={metric.definition}\n reading={metric.read(source)}\n />\n );\n}\n\ntype BoundTableProps<Row> = Extract<\n DisplayTableProps<Row>,\n { reading: DataReading<readonly Row[]> }\n>;\ntype TablePresentation<Row> = Pick<\n BoundTableProps<Row>,\n 'title' | 'columns' | 'rowKey' | 'reading' | 'evidence' | 'emptyFallback'\n>;\nexport type TableWidgetProps<Row, Data = unknown, Input = unknown> = Omit<\n BoundTableProps<Row>,\n keyof TablePresentation<Row> | 'limit' | 'pagination'\n> &\n TableDisplayMode & {\n dataset: Dataset<Data, Input, Row>;\n source: ViewSource<Data, Input>;\n title?: ReactNode;\n };\nexport function TableWidget<Row, Data, Input>({\n dataset,\n source,\n title,\n ...presentation\n}: TableWidgetProps<Row, Data, Input>) {\n const data = datasetTable(dataset, source);\n return (\n <DisplayTable {...presentation} {...data} title={title ?? data.title} />\n );\n}\ntype BoundVisual<Row> = Extract<\n DisplayVisualProps<readonly Row[]>,\n { reading: DataReading<readonly Row[]> }\n>;\nexport type VisualizationWidgetView<Row> = DisplayVisualizationView<\n readonly Row[]\n>;\ntype VisualContent<Row> =\n | {\n children: (rows: readonly Row[]) => ReactNode;\n views?: never;\n viewLabel?: never;\n initialView?: never;\n }\n | {\n children?: never;\n views: readonly VisualizationWidgetView<Row>[];\n viewLabel: string;\n initialView?: string;\n };\nexport type VisualizationWidgetProps<\n Row,\n Data = unknown,\n Input = unknown,\n> = Omit<\n BoundVisual<Row>,\n | 'reading'\n | 'isEmpty'\n | 'emptyFallback'\n | 'evidence'\n | 'title'\n | 'children'\n | 'views'\n | 'viewLabel'\n | 'initialView'\n> &\n VisualContent<Row> & {\n dataset: Dataset<Data, Input, Row>;\n source: ViewSource<Data, Input>;\n title?: ReactNode;\n };\nexport function VisualizationWidget<Row, Data, Input>({\n dataset,\n source,\n title,\n ...presentation\n}: VisualizationWidgetProps<Row, Data, Input>) {\n const data = datasetTable(dataset, source);\n return (\n <DisplayVisual\n {...presentation}\n title={title ?? data.title}\n reading={data.reading}\n evidence={data.evidence}\n emptyFallback={data.emptyFallback}\n isEmpty={rows => rows.length === 0}\n />\n );\n}\ntype NarrativeBinding<Data, Input, Row> =\n | {\n metric: Metric<Data, Input>;\n dataset?: never;\n source: ViewSource<Data, Input>;\n children?: (values: MetricValues) => ReactNode;\n }\n | {\n metric?: never;\n dataset: Dataset<Data, Input, Row>;\n source: ViewSource<Data, Input>;\n children: (rows: readonly Row[]) => ReactNode;\n };\nexport type TextWidgetProps<\n Data = unknown,\n Input = unknown,\n Row = never,\n> = Omit<\n Extract<DisplayTextProps<unknown>, { reading: DataReading<unknown> }>,\n 'reading' | 'evidence' | 'children' | 'title' | 'emptyFallback'\n> &\n NarrativeBinding<Data, Input, Row> & { title?: ReactNode };\nexport function TextWidget<Data, Input, Row>(\n props: TextWidgetProps<Data, Input, Row>\n) {\n if (props.metric) {\n const { metric, source, title, children, ...presentation } = props;\n return (\n <DisplayText\n {...presentation}\n title={title ?? metric.definition.label}\n evidence={metric.definition.evidence}\n reading={metric.read(source)}\n >\n {children ??\n (values => formatMetric(values.current, metric.definition.format))}\n </DisplayText>\n );\n }\n const { dataset, source, title, children, ...presentation } = props;\n return (\n <DisplayText\n {...presentation}\n title={title ?? dataset.name}\n evidence={dataset.evidence}\n reading={dataset.read(source)}\n >\n {children}\n </DisplayText>\n );\n}\n\ntype InlinePresentation = Omit<\n DisplayValueProps<unknown>,\n 'reading' | 'children' | 'loadingFallback'\n> & { loadingFallback?: ReactNode };\nexport type DataValueProps<\n Data = unknown,\n Input = unknown,\n Row = never,\n> = InlinePresentation &\n (\n | (NarrativeBinding<Data, Input, Row> & { scope?: never })\n | {\n metric?: never;\n dataset?: never;\n source?: never;\n scope: DataReading<string>;\n children?: (scope: string) => ReactNode;\n }\n );\nexport function DataValue<Data, Input, Row>(\n props: DataValueProps<Data, Input, Row>\n) {\n if (props.metric) {\n const {\n metric,\n source,\n children,\n loadingFallback = <Skeleton inline />,\n ...presentation\n } = props;\n return (\n <DisplayValue\n {...presentation}\n reading={metric.read(source)}\n loadingFallback={loadingFallback}\n >\n {children ??\n (values => formatMetric(values.current, metric.definition.format))}\n </DisplayValue>\n );\n }\n if (props.dataset) {\n const {\n dataset,\n source,\n children,\n loadingFallback = <Skeleton inline />,\n ...presentation\n } = props;\n return (\n <DisplayValue\n {...presentation}\n reading={dataset.read(source)}\n loadingFallback={loadingFallback}\n >\n {children}\n </DisplayValue>\n );\n }\n const {\n scope,\n children,\n loadingFallback = <Skeleton inline />,\n ...presentation\n } = props;\n return (\n <DisplayValue\n {...presentation}\n reading={scope}\n loadingFallback={loadingFallback}\n >\n {children ?? (value => value)}\n </DisplayValue>\n );\n}\n",
9
+ "export function chartColor(id: string): string {\n let hash = 2166136261;\n for (const codePoint of id)\n hash = Math.imul(hash ^ codePoint.codePointAt(0)!, 16777619);\n\n return `var(--atbl-chart-${((hash >>> 0) % 8) + 1})`;\n}\n",
83
10
  "import type { ComponentPropsWithRef, CSSProperties, ReactNode } from 'react';\nimport { formatCount, formatPercent } from '@/src/core/format';\nimport { invariant } from '@/src/core/invariant';\nimport { classNames } from '@/src/react/ui/classNames';\nimport { chartColor } from '@/src/react/ui/chartColor';\n\nexport type BreakdownItem = { id: string; label: ReactNode; value: number };\nexport type BreakdownProps = {\n total: number;\n items: readonly BreakdownItem[];\n formatValue?: (value: number) => ReactNode;\n} & Omit<ComponentPropsWithRef<'div'>, 'children'>;\n\n/** Mutually exclusive parts of one observed whole. Every share uses the supplied total. */\nexport function Breakdown({\n total,\n items,\n formatValue = formatCount,\n className,\n ...props\n}: BreakdownProps) {\n invariant(\n Number.isFinite(total) &&\n total >= 0 &&\n items.every(item => Number.isFinite(item.value) && item.value >= 0) &&\n items.reduce((sum, item) => sum + item.value, 0) <= total,\n 'Breakdown items must be nonnegative parts of the observed total.'\n );\n const dominant = total > 0 && items.some(item => item.value / total >= 0.85);\n\n return (\n <div\n {...props}\n className={classNames('altertable-breakdown', className)}\n data-dominant={dominant || undefined}\n >\n <div className=\"altertable-breakdown-summary\">\n <span>Share of total</span>\n <strong>{formatValue(total)} total</strong>\n </div>\n <div className=\"altertable-breakdown-bar\" aria-hidden=\"true\">\n {items.map(item => (\n <span\n key={item.id}\n style={{\n width: `${total ? (item.value / total) * 100 : 0}%`,\n backgroundColor: chartColor(item.id),\n }}\n />\n ))}\n </div>\n <dl className=\"altertable-breakdown-list\">\n {items.map(item => {\n const share = total ? item.value / total : 0;\n const color = {\n '--altertable-breakdown-color': chartColor(item.id),\n } as CSSProperties;\n\n return (\n <div\n className=\"altertable-breakdown-row\"\n data-empty={item.value === 0 || undefined}\n key={item.id}\n style={color}\n >\n <dt>\n <span\n className=\"altertable-breakdown-swatch\"\n aria-hidden=\"true\"\n />\n {item.label}\n </dt>\n <dd className=\"altertable-breakdown-value\">\n {formatValue(item.value)}\n </dd>\n <dd className=\"altertable-breakdown-share\">\n {formatPercent(share)}\n </dd>\n </div>\n );\n })}\n </dl>\n </div>\n );\n}\n",
84
11
  "import type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { formatCount } from '@/src/core/format';\nimport { invariant } from '@/src/core/invariant';\nimport { classNames } from '@/src/react/ui/classNames';\n\nexport type RankingItem = {\n id: string;\n label: ReactNode;\n value: number;\n detail?: ReactNode;\n};\nexport type RankingProps = {\n items: readonly RankingItem[];\n formatValue?: (value: number) => ReactNode;\n} & Omit<ComponentPropsWithRef<'ol'>, 'children'>;\n\n/** Ordered values scaled to the largest visible item, not shares of a whole. */\nexport function Ranking({\n items,\n formatValue = formatCount,\n className,\n ...props\n}: RankingProps) {\n invariant(\n items.every(item => Number.isFinite(item.value) && item.value >= 0),\n 'Ranking values must be finite and nonnegative.'\n );\n const max = Math.max(0, ...items.map(item => item.value));\n\n return (\n <ol {...props} className={classNames('altertable-ranking', className)}>\n {items.map(item => (\n <li key={item.id}>\n <div className=\"altertable-ranking-reading\">\n <span>{item.label}</span>\n <strong>{formatValue(item.value)}</strong>\n </div>\n <div className=\"altertable-ranking-track\" aria-hidden=\"true\">\n <span style={{ width: `${max ? (item.value / max) * 100 : 0}%` }} />\n </div>\n {item.detail != null && (\n <div className=\"altertable-ranking-detail\">{item.detail}</div>\n )}\n </li>\n ))}\n </ol>\n );\n}\n",
85
- "import type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { classNames } from '@/src/react/ui/classNames';\nimport { AppIcon } from '@/src/react/ui/icons';\n\nexport type WidgetDisclosureProps = {\n label: ReactNode;\n children: ReactNode;\n} & Omit<ComponentPropsWithRef<'details'>, 'children'>;\n\nexport function WidgetDisclosure({\n label,\n children,\n className,\n ...props\n}: WidgetDisclosureProps) {\n return (\n <details\n {...props}\n className={classNames('altertable-widget-disclosure', className)}\n >\n <summary>\n {label}\n <AppIcon name=\"disclosure\" size={16} />\n </summary>\n <div className=\"altertable-widget-disclosure-content\">{children}</div>\n </details>\n );\n}\n",
86
- "import type { DateRangeRequest } from '@/src/core/contract';\nimport {\n formatDateRange,\n formatMetric,\n type MetricFormat,\n} from '@/src/core/format';\n\nexport type MetricComparison = {\n current: { value: number; formattedValue: string; periodLabel?: string };\n previous?: {\n value: number | null;\n formattedValue: string;\n periodLabel?: string;\n };\n favorableDirection?: 'up' | 'down';\n};\n\n/** Label a comparison from the input that produced the displayed result. Null means the\n * requested previous period has no comparable value; zero remains a measured value. */\nexport function calendarMetricComparison(\n displayedInput: DateRangeRequest,\n values: {\n current: number;\n previous: number | null;\n format: MetricFormat;\n favorableDirection?: MetricComparison['favorableDirection'];\n }\n): MetricComparison | undefined {\n if (!displayedInput.comparison) return undefined;\n\n return {\n current: {\n value: values.current,\n formattedValue: formatMetric(values.current, values.format),\n periodLabel: formatDateRange(displayedInput.range),\n },\n previous: {\n value: values.previous,\n formattedValue:\n values.previous === null\n ? 'Not available'\n : formatMetric(values.previous, values.format),\n periodLabel: formatDateRange(displayedInput.comparison),\n },\n favorableDirection: values.favorableDirection,\n };\n}\n\n/** A zero or missing baseline has no meaningful relative percentage. */\nexport function comparisonChange({\n current,\n previous,\n favorableDirection,\n}: MetricComparison) {\n const percent = previous?.value\n ? (current.value / previous.value - 1) * 100\n : null;\n const direction =\n percent === null || Math.abs(percent) < 0.05\n ? 'flat'\n : percent > 0\n ? 'up'\n : 'down';\n const tone =\n direction === 'flat' || !favorableDirection\n ? 'neutral'\n : direction === favorableDirection\n ? 'good'\n : 'bad';\n const icon =\n direction === 'up'\n ? 'trendUp'\n : direction === 'down'\n ? 'trendDown'\n : 'trendFlat';\n\n return { percent, direction, tone, icon } as const;\n}\n",
87
- "import type { MetricFormat } from '@/src/core/format';\nimport type { WidgetEvidence } from '@/src/react/ui/WidgetEvidence';\nimport type { MetricReading } from '@/src/core/reading';\nimport { calendarMetricComparison } from '@/src/react/ui/comparison';\n\nexport type MetricDefinition = {\n id: string;\n label: string;\n format: MetricFormat;\n favorableDirection?: 'up' | 'down';\n evidence: WidgetEvidence;\n};\n\nexport function metricComparison(\n metric: MetricDefinition,\n reading: MetricReading\n) {\n if (reading.loading || !reading.value.period) return undefined;\n\n return calendarMetricComparison(reading.value.period, {\n current: reading.value.current,\n previous: reading.value.previous ?? null,\n format: metric.format,\n favorableDirection: metric.favorableDirection,\n });\n}\n",
88
- "import { AppIcon } from '@/src/react/ui/icons';\nimport {\n comparisonChange,\n type MetricComparison,\n} from '@/src/react/ui/comparison';\nimport type { MetricDefinition } from '@/src/react/ui/metric';\nimport { metricComparison } from '@/src/react/ui/metric';\nimport type { MetricReading } from '@/src/core/reading';\nimport { ContentSkeleton } from '@/src/react/ui/ContentSkeleton';\n\ntype UnboundComparisonProps = MetricComparison & {\n label: string;\n emphasis?: 'standard' | 'story';\n};\n\nexport type ComparisonVisualProps =\n | UnboundComparisonProps\n | {\n metric: MetricDefinition;\n reading: MetricReading;\n emphasis?: 'standard' | 'story';\n };\n\nexport function ComparisonVisual(props: ComparisonVisualProps) {\n if ('metric' in props) {\n if (props.reading.loading) return <ContentSkeleton variant=\"panel\" />;\n const comparison = metricComparison(props.metric, props.reading);\n if (!comparison) return null;\n\n return (\n <ComparisonContent\n {...comparison}\n label={props.metric.label}\n emphasis={props.emphasis}\n />\n );\n }\n\n return <ComparisonContent {...props} />;\n}\n\nfunction ComparisonContent({\n label,\n current,\n previous,\n favorableDirection,\n emphasis = 'standard',\n}: UnboundComparisonProps) {\n const max = Math.max(current.value, previous?.value ?? 0, 1);\n const { percent, tone, icon } = comparisonChange({\n current,\n previous,\n favorableDirection,\n });\n\n return (\n <figure\n className=\"altertable-comparison-visual\"\n data-emphasis={emphasis}\n aria-label={`${label} comparison`}\n >\n <figcaption>{label}</figcaption>\n <div className=\"altertable-comparison-row\" data-period=\"current\">\n <div>\n <span>{current.periodLabel ?? 'Current period'}</span>\n <strong>{current.formattedValue}</strong>\n </div>\n <span className=\"altertable-comparison-track\">\n <span style={{ width: `${(current.value / max) * 100}%` }} />\n </span>\n </div>\n {previous && (\n <div className=\"altertable-comparison-row\" data-period=\"previous\">\n <div>\n <span>{previous.periodLabel ?? 'Previous period'}</span>\n <strong>{previous.formattedValue}</strong>\n </div>\n <span className=\"altertable-comparison-track\">\n <span\n style={{ width: `${((previous.value ?? 0) / max) * 100}%` }}\n />\n </span>\n </div>\n )}\n <p className=\"altertable-comparison-change\" data-tone={tone}>\n {percent === null ? (\n 'No comparable previous value'\n ) : (\n <>\n <AppIcon name={icon} size={17} />\n {Math.abs(percent).toFixed(1)}% vs{' '}\n {previous?.periodLabel?.toLowerCase() ?? 'previous period'}\n </>\n )}\n </p>\n </figure>\n );\n}\n",
89
- "import type { ComponentPropsWithRef, ReactNode } from 'react';\nimport {\n WidgetStatusControl,\n type WidgetStatus,\n} from '@/src/react/ui/RequestHint';\nimport { AboutData } from '@/src/react/ui/AboutData';\nimport type { WidgetEvidence } from '@/src/react/ui/WidgetEvidence';\nimport { AppIcon } from '@/src/react/ui/icons';\nimport {\n comparisonChange,\n type MetricComparison,\n} from '@/src/react/ui/comparison';\nimport { classNames } from '@/src/react/ui/classNames';\nimport { formatMetric, type MetricFormat } from '@/src/core/format';\nimport { ContentSkeleton } from '@/src/react/ui/ContentSkeleton';\nimport type { MetricReading } from '@/src/core/reading';\nimport { metricComparison, type MetricDefinition } from '@/src/react/ui/metric';\n\ntype MetricWidgetBaseProps = {\n label: string;\n description?: ReactNode;\n comparison?: MetricComparison;\n evidence?: WidgetEvidence;\n action?: ReactNode;\n insight?: ReactNode;\n status?: WidgetStatus;\n visual?: ReactNode;\n} & Omit<ComponentPropsWithRef<'div'>, 'about' | 'children'>;\n\ntype UnboundMetricWidgetProps = MetricWidgetBaseProps &\n (\n | { loading: true; value?: never; format?: never; content?: never }\n | ({ loading?: false } & (\n | { value: number; format: MetricFormat; content?: never }\n | { content: ReactNode; value?: never; format?: never }\n ))\n );\n\nexport type MetricWidgetProps =\n | UnboundMetricWidgetProps\n | (Omit<MetricWidgetBaseProps, 'label' | 'comparison' | 'evidence'> & {\n metric: MetricDefinition;\n reading: MetricReading;\n label?: never;\n value?: never;\n format?: never;\n content?: never;\n comparison?: never;\n evidence?: never;\n loading?: never;\n });\n\nexport function MetricWidget(props: MetricWidgetProps) {\n if ('metric' in props) {\n const { metric, reading, ...rest } = props;\n if (reading.loading)\n return <MetricWidgetContent {...rest} label={metric.label} loading />;\n\n return (\n <MetricWidgetContent\n {...rest}\n label={metric.label}\n value={reading.value.current}\n format={metric.format}\n evidence={metric.evidence}\n comparison={metricComparison(metric, reading)}\n />\n );\n }\n\n return <MetricWidgetContent {...props} />;\n}\n\nfunction MetricWidgetContent({\n label,\n value,\n content,\n format,\n loading = false,\n description,\n comparison,\n evidence,\n action,\n insight,\n status,\n visual,\n className,\n ...props\n}: UnboundMetricWidgetProps) {\n if (loading)\n return <ContentSkeleton variant=\"metric\" className={className} />;\n const shownValue = format ? formatMetric(value as number, format) : content;\n const change = comparison ? comparisonChange(comparison) : null;\n const shownTrend =\n change?.percent != null ? (\n <span className=\"altertable-metric-change\" data-tone={change.tone}>\n <AppIcon name={change.icon} size={14} />\n {Math.abs(change.percent).toFixed(1)}% vs{' '}\n {comparison?.previous?.periodLabel?.toLowerCase() ?? 'previous period'}\n </span>\n ) : comparison?.previous?.value === null ? (\n <span className=\"altertable-metric-change\" data-tone=\"neutral\">\n Previous period unavailable\n </span>\n ) : null;\n const reading = (\n <div className=\"altertable-metric-reading\">\n <strong\n className=\"altertable-metric-value\"\n data-unavailable={shownValue === '—' || undefined}\n >\n {shownValue}\n </strong>\n {shownTrend && (\n <span className=\"altertable-metric-trend\">{shownTrend}</span>\n )}\n </div>\n );\n const visualization = visual && (\n <div className=\"altertable-metric-visual\">{visual}</div>\n );\n const feedback = <WidgetStatusControl status={status} />;\n const help = evidence ? (\n <AboutData\n aria-label={`Explore ${label}`}\n variant=\"ghost\"\n className=\"altertable-widget-heading-trigger\"\n tooltip=\"Explore this metric\"\n references={{\n kind: 'ids',\n glossaryIds: evidence.glossaryIds,\n queryNames: evidence.queryNames,\n }}\n shortcut={false}\n id={evidence.id}\n title={label}\n headerActions={feedback}\n description={description}\n visual={\n <div className=\"altertable-metric-evidence\">\n {reading}\n {visualization}\n </div>\n }\n visualKind=\"metric\"\n >\n {label}\n <AppIcon name=\"openDetails\" />\n </AboutData>\n ) : null;\n\n return (\n <div\n {...props}\n className={classNames('altertable-metric-widget', className)}\n >\n <div className=\"altertable-metric-label\">\n <span>{help ?? label}</span>\n <div className=\"altertable-metric-help\">\n {feedback}\n {action}\n </div>\n </div>\n {reading}\n {description && (\n <small className=\"altertable-metric-description\">{description}</small>\n )}\n {visualization}\n {insight && <div className=\"altertable-metric-insight\">{insight}</div>}\n </div>\n );\n}\n",
90
- "import { useLayoutEffect, useRef, useState, type KeyboardEvent } from 'react';\n\nexport type SelectableBarItem = { id: string; label: string; value: number };\n\nexport type SelectableBarChartProps = {\n items: readonly SelectableBarItem[];\n selectedId: string | null;\n onSelectionChange: (id: string | null) => void;\n unit: string;\n ariaLabel: string;\n formatValue?: (value: number) => string;\n};\n\n/** Selection inspects a bar; it never silently filters the rest of the page. */\nexport function SelectableBarChart({\n items,\n selectedId,\n onSelectionChange,\n unit,\n ariaLabel,\n formatValue = value => new Intl.NumberFormat().format(value),\n}: SelectableBarChartProps) {\n const [previewId, setPreviewId] = useState<string | null>(null);\n const scrollport = useRef<HTMLDivElement>(null);\n const buttons = useRef<(HTMLButtonElement | null)[]>([]);\n\n useLayoutEffect(() => {\n const element = scrollport.current;\n if (element) element.scrollLeft = element.scrollWidth - element.clientWidth;\n }, [items]);\n\n const selected = items.find(item => item.id === selectedId);\n const preview =\n items.find(item => item.id === previewId) ?? selected ?? items.at(-1);\n const maximum = Math.max(1, ...items.map(item => item.value));\n\n function onKeyDown(event: KeyboardEvent<HTMLButtonElement>, index: number) {\n if (event.key === 'Escape' && selectedId) {\n event.preventDefault();\n onSelectionChange(null);\n }\n if (\n event.key !== 'ArrowRight' &&\n event.key !== 'ArrowLeft' &&\n event.key !== 'Home' &&\n event.key !== 'End'\n )\n return;\n event.preventDefault();\n const next =\n event.key === 'Home'\n ? 0\n : event.key === 'End'\n ? items.length - 1\n : Math.max(\n 0,\n Math.min(\n items.length - 1,\n index + (event.key === 'ArrowRight' ? 1 : -1)\n )\n );\n buttons.current[next]?.focus();\n }\n\n return (\n <div className=\"altertable-selectable-bars\">\n <div className=\"altertable-selectable-bars-preview\" aria-live=\"polite\">\n {preview ? (\n <span>\n <small>\n {previewId && previewId !== selectedId\n ? 'Preview'\n : selected\n ? 'Selected'\n : 'Latest'}\n </small>{' '}\n <strong>{preview.label}</strong> · {formatValue(preview.value)}{' '}\n {unit}\n </span>\n ) : (\n <span>No data</span>\n )}\n {selected && (\n <button type=\"button\" onClick={() => onSelectionChange(null)}>\n Clear selection\n </button>\n )}\n </div>\n <div\n className=\"altertable-selectable-bars-scroll\"\n ref={scrollport}\n aria-label={ariaLabel}\n >\n {items.map((item, index) => (\n <button\n key={item.id}\n ref={node => {\n buttons.current[index] = node;\n }}\n type=\"button\"\n className=\"altertable-selectable-bars-item\"\n aria-label={`${item.label}: ${formatValue(item.value)} ${unit}`}\n aria-pressed={selectedId === item.id}\n onClick={() =>\n onSelectionChange(selectedId === item.id ? null : item.id)\n }\n onMouseEnter={() => setPreviewId(item.id)}\n onMouseLeave={() => setPreviewId(null)}\n onFocus={() => setPreviewId(item.id)}\n onBlur={() => setPreviewId(null)}\n onKeyDown={event => onKeyDown(event, index)}\n >\n <span className=\"altertable-selectable-bars-area\">\n <span\n className=\"altertable-selectable-bars-bar\"\n style={{\n height: `${Math.max(item.value > 0 ? 3 : 0, (item.value / maximum) * 100)}%`,\n }}\n />\n </span>\n <span className=\"altertable-selectable-bars-label\">\n {item.label}\n </span>\n </button>\n ))}\n </div>\n {items.length > 0 && (\n <p className=\"altertable-selectable-bars-help\">\n Select a bar to inspect its day. Use arrow keys to move; press Escape\n to clear.\n </p>\n )}\n </div>\n );\n}\n",
91
- "import type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { DataWidget } from '@/src/react/ui/DataWidget';\nimport { Grid } from '@/src/react/ui/Grid';\nimport { MetricWidget } from '@/src/react/ui/MetricWidget';\nimport { Skeleton } from '@/src/react/ui/Skeleton';\nimport { VisualizationWidget } from '@/src/react/ui/VisualizationWidget';\nimport { classNames } from '@/src/react/ui/classNames';\n\nexport type DataAppSkeletonProps = Omit<\n ComponentPropsWithRef<'output'>,\n 'children' | 'role' | 'aria-busy'\n> & {\n header?: ReactNode;\n footer?: ReactNode;\n};\n\nconst chartHeights = [40, 60, 50, 80, 60, 100, 80, 60];\n\n/** Host-side placeholder while a data app starts. Header and footer slots remain host-owned; widget placeholders are decorative. */\nexport function DataAppSkeleton({\n header,\n footer,\n className,\n ...props\n}: DataAppSkeletonProps) {\n return (\n <output\n aria-label=\"Loading data app\"\n {...props}\n aria-busy=\"true\"\n className={classNames('altertable-data-app-skeleton', className)}\n >\n <div className=\"altertable-data-app-skeleton-content\">\n {header != null && header !== false && (\n <div className=\"altertable-data-app-skeleton-header\">{header}</div>\n )}\n <div className=\"altertable-data-app-skeleton-body\" aria-hidden=\"true\">\n <Grid columns={3} gap=\"md\">\n {[0, 1, 2].map(item => (\n <MetricWidget key={item} label=\"\" loading />\n ))}\n </Grid>\n <VisualizationWidget\n title={\n <Skeleton className=\"altertable-data-app-skeleton-widget-title\" />\n }\n visual={\n <div className=\"altertable-data-app-skeleton-chart\">\n {chartHeights.map((height, index) => (\n <Skeleton key={index} style={{ height: `${height}%` }} />\n ))}\n </div>\n }\n />\n <DataWidget\n title={\n <Skeleton className=\"altertable-data-app-skeleton-widget-title\" />\n }\n >\n <div className=\"altertable-data-app-skeleton-rows\">\n {[0, 1, 2].map(row => (\n <div className=\"altertable-data-app-skeleton-row\" key={row}>\n <Skeleton />\n <Skeleton />\n <Skeleton />\n </div>\n ))}\n </div>\n </DataWidget>\n </div>\n {footer != null && footer !== false && (\n <div className=\"altertable-data-app-skeleton-footer\">{footer}</div>\n )}\n </div>\n </output>\n );\n}\n",
92
- "import type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { classNames } from '@/src/react/ui/classNames';\n\nexport type RefreshRegionProps = {\n refreshing: boolean;\n dimOnUpdate?: boolean;\n children: ReactNode;\n contentProps?: Omit<ComponentPropsWithRef<'div'>, 'children' | 'aria-busy'>;\n} & Omit<ComponentPropsWithRef<'div'>, 'children'>;\n\n/** Keep prior content in place while a fresh result loads. Local results can opt into dimming. */\nexport function RefreshRegion({\n refreshing,\n dimOnUpdate = false,\n children,\n contentProps,\n className,\n ...props\n}: RefreshRegionProps) {\n return (\n <div\n {...props}\n className={classNames('altertable-refresh-region', className)}\n >\n <div\n {...contentProps}\n className={classNames(\n 'altertable-refresh-content',\n contentProps?.className\n )}\n data-refreshing={refreshing && dimOnUpdate}\n aria-busy={refreshing}\n >\n {children}\n </div>\n </div>\n );\n}\n",
93
- "import { useEffect, useState, type ReactNode } from 'react';\nimport {\n DateTimeTooltip,\n type DateTimeTooltipProps,\n} from '@/src/react/ui/DateTimeTooltip';\n\nexport type UpdatedAtProps = {\n timestamp: number;\n locale?: string;\n label?: string;\n children?: ReactNode;\n} & Omit<DateTimeTooltipProps, 'date' | 'children'>;\n\nexport function UpdatedAt({\n timestamp,\n locale,\n label = 'Updated',\n children,\n triggerClassName,\n ...props\n}: UpdatedAtProps) {\n const [now, setNow] = useState(Date.now);\n\n useEffect(() => {\n const interval = window.setInterval(() => setNow(Date.now()), 30_000);\n\n return () => window.clearInterval(interval);\n }, []);\n\n const elapsedMinutes = Math.floor(Math.max(0, now - timestamp) / 60_000);\n const relative = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' });\n let age = 'just now';\n if (elapsedMinutes >= 1_440)\n age = relative.format(-Math.floor(elapsedMinutes / 1_440), 'day');\n else if (elapsedMinutes >= 60)\n age = relative.format(-Math.floor(elapsedMinutes / 60), 'hour');\n else if (elapsedMinutes >= 1)\n age = relative.format(-elapsedMinutes, 'minute');\n\n const date = new Date(timestamp);\n\n return (\n <DateTimeTooltip\n {...props}\n date={date}\n triggerClassName={['altertable-updated-at', triggerClassName]\n .filter(Boolean)\n .join(' ')}\n >\n {children ?? (\n <time dateTime={date.toISOString()}>\n {label} {age}\n </time>\n )}\n </DateTimeTooltip>\n );\n}\n",
94
- "import { defineQueryNames } from '@/src/core/contract';\nimport { invariant } from '@/src/core/invariant';\nimport type { ReactNode } from 'react';\nimport type { DataIdentifierDefinition } from '@/src/react/ui/data-identifiers';\nimport type { MetricFormat } from '@/src/core/format';\nimport type { MetricDefinition } from '@/src/react/ui/metric';\nimport type { StoryFinding } from '@/src/react/ui/story';\nimport type { WidgetEvidence } from '@/src/react/ui/WidgetEvidence';\n\nexport type GlossaryEntry = {\n term: string;\n definition: ReactNode;\n queryNames?: string[];\n};\n\nexport type DataContext = {\n description: ReactNode;\n glossary: Record<string, GlossaryEntry>;\n identifiers?: Readonly<Record<string, DataIdentifierDefinition>>;\n queryNames?: Readonly<Record<string, string>>;\n};\n\nexport function defineDataContext<const Context extends DataContext>(\n context: Context\n): Context {\n return context;\n}\n\nexport function evidenceFor<\n const Context extends DataContext,\n const Names extends Record<string, string> = Record<string, string>,\n>(context: Context, names?: Names) {\n function validateEvidence(evidence: {\n id: string;\n glossaryIds?: readonly (keyof Context['glossary'] & string)[];\n queryNames?: readonly Names[keyof Names][];\n }) {\n for (const id of evidence.glossaryIds ?? []) {\n invariant(context.glossary[id], `Unknown glossary entry: ${id}.`);\n }\n if (names)\n for (const name of evidence.queryNames ?? []) {\n invariant(\n Object.values(names).includes(name),\n `Unknown query name: ${name}.`\n );\n }\n\n return {\n id: evidence.id,\n glossaryIds: evidence.glossaryIds ? [...evidence.glossaryIds] : undefined,\n queryNames: evidence.queryNames ? [...evidence.queryNames] : undefined,\n };\n }\n\n return validateEvidence;\n}\n\n/** Bind glossary query references and card evidence to the same registry. */\nexport function createDataContext<const Names extends Record<string, string>>(\n queryNames: Names\n) {\n defineQueryNames(queryNames);\n\n function bindDataContext<\n const Context extends Omit<DataContext, 'glossary'> & {\n glossary: Record<\n string,\n Omit<GlossaryEntry, 'queryNames'> & {\n queryNames?: Names[keyof Names][];\n }\n >;\n },\n >(context: Context) {\n const known = new Set(Object.values(queryNames));\n for (const [id, entry] of Object.entries(context.glossary)) {\n for (const query of entry.queryNames ?? []) {\n invariant(\n known.has(query),\n `Unknown query ${query} for glossary entry ${id}.`\n );\n }\n }\n const references = evidenceFor(context, queryNames);\n type GlossaryId = keyof Context['glossary'] & string;\n type QueryName = Names[keyof Names];\n\n function evidence(\n input: { id: string } & (\n | {\n glossaryIds: readonly [GlossaryId, ...GlossaryId[]];\n queryNames?: readonly QueryName[];\n }\n | {\n queryNames: readonly [QueryName, ...QueryName[]];\n glossaryIds?: readonly GlossaryId[];\n }\n )\n ): WidgetEvidence {\n invariant(!!input.id.trim(), 'Evidence needs a nonempty ID.');\n invariant(\n !!input.glossaryIds?.length || !!input.queryNames?.length,\n `Evidence ${input.id} needs a glossary entry or query name.`\n );\n const validated = references(input);\n if (validated.glossaryIds?.length)\n return {\n ...validated,\n glossaryIds: [\n validated.glossaryIds[0]!,\n ...validated.glossaryIds.slice(1),\n ],\n };\n\n return {\n ...validated,\n queryNames: [\n validated.queryNames![0]!,\n ...validated.queryNames!.slice(1),\n ],\n };\n }\n\n function finding(\n input: Omit<StoryFinding, 'evidence'> & {\n evidence: Parameters<typeof evidence>[0];\n }\n ): StoryFinding & { evidence: WidgetEvidence } {\n return { ...input, evidence: evidence(input.evidence) };\n }\n\n function metric(definition: {\n id: string;\n glossaryId: keyof Context['glossary'] & string;\n label?: string;\n format: MetricFormat;\n favorableDirection?: 'up' | 'down';\n queryNames?: readonly Names[keyof Names][];\n }): MetricDefinition {\n const references = evidence({\n id: definition.id,\n glossaryIds: [definition.glossaryId],\n queryNames:\n definition.queryNames ??\n context.glossary[definition.glossaryId]?.queryNames,\n });\n\n return {\n id: definition.id,\n label:\n definition.label ?? context.glossary[definition.glossaryId]!.term,\n format: definition.format,\n favorableDirection: definition.favorableDirection,\n evidence: references,\n };\n }\n\n return { ...context, queryNames, evidence, finding, metric };\n }\n\n return bindDataContext;\n}\n",
12
+ "import { AppIcon } from '@/src/react/ui/icons';\nimport {\n comparisonChange,\n type MetricComparison,\n} from '@/src/react/ui/metric-comparison';\nimport type { MetricDefinition } from '@/src/react/ui/metric';\nimport { metricComparison } from '@/src/react/ui/metric';\nimport type { MetricReading } from '@/src/core/reading';\nimport { ContentSkeleton } from '@/src/react/ui/ContentSkeleton';\n\ntype UnboundComparisonProps = MetricComparison & {\n label: string;\n emphasis?: 'standard' | 'story';\n};\n\nexport type ComparisonProps =\n | UnboundComparisonProps\n | {\n metric: MetricDefinition;\n reading: MetricReading;\n emphasis?: 'standard' | 'story';\n };\n\nexport function Comparison(props: ComparisonProps) {\n if ('metric' in props) {\n if (props.reading.loading) return <ContentSkeleton variant=\"panel\" />;\n const comparison = metricComparison(props.metric, props.reading);\n if (!comparison) return null;\n\n return (\n <ComparisonContent\n {...comparison}\n label={props.metric.label}\n emphasis={props.emphasis}\n />\n );\n }\n\n return <ComparisonContent {...props} />;\n}\n\nfunction ComparisonContent({\n label,\n current,\n previous,\n favorableDirection,\n emphasis = 'standard',\n}: UnboundComparisonProps) {\n const max = Math.max(current.value, previous?.value ?? 0, 1);\n const { percent, tone, icon } = comparisonChange({\n current,\n previous,\n favorableDirection,\n });\n\n return (\n <figure\n className=\"altertable-comparison-visual\"\n data-emphasis={emphasis}\n aria-label={`${label} comparison`}\n >\n <figcaption>{label}</figcaption>\n <div className=\"altertable-comparison-row\" data-period=\"current\">\n <div>\n <span>{current.periodLabel ?? 'Current period'}</span>\n <strong>{current.formattedValue}</strong>\n </div>\n <span className=\"altertable-comparison-track\">\n <span style={{ width: `${(current.value / max) * 100}%` }} />\n </span>\n </div>\n {previous && (\n <div className=\"altertable-comparison-row\" data-period=\"previous\">\n <div>\n <span>{previous.periodLabel ?? 'Previous period'}</span>\n <strong>{previous.formattedValue}</strong>\n </div>\n <span className=\"altertable-comparison-track\">\n <span\n style={{ width: `${((previous.value ?? 0) / max) * 100}%` }}\n />\n </span>\n </div>\n )}\n <p className=\"altertable-comparison-change\" data-tone={tone}>\n {percent === null ? (\n 'No comparable previous value'\n ) : (\n <>\n <AppIcon name={icon} size={17} />\n {Math.abs(percent).toFixed(1)}% vs{' '}\n {previous?.periodLabel?.toLowerCase() ?? 'previous period'}\n </>\n )}\n </p>\n </figure>\n );\n}\n",
13
+ "import { sectionContent, type ViewContent } from '@/src/react/content';\nimport { useContext, type ComponentPropsWithRef, type ReactNode } from 'react';\nimport { DataSectionBoundary } from '@/src/react/ui/DataSectionBoundary';\nimport {\n InspectionContext,\n useInspectionDefaults,\n} from '@/src/react/ui/InspectionContext';\nimport {\n PrimaryViewContext,\n type ViewResult,\n useDeclaredResult,\n} from '@/src/react/view-runtime';\nimport type { EmptyContent } from '@/src/react/ui/presentation';\n\nexport type DataSectionProps<Data, Input = unknown> = {\n content: ViewContent<Data, Input>;\n emptyFallback?: EmptyContent;\n error?: { title: ReactNode; description?: ReactNode; onRetry?: () => void };\n label?: string;\n} & Omit<ComponentPropsWithRef<'div'>, 'children' | 'content'>;\n\nexport function DataSection<Data, Input>({\n content,\n ...presentation\n}: DataSectionProps<Data, Input>) {\n const primary = useContext(PrimaryViewContext);\n const { view, ...section } = sectionContent(content);\n if (primary?.declaration === view) {\n // Identity proves the shared result belongs to this content's declaration.\n const result = primary.result as ViewResult<Data, Input>;\n return (\n <DataSectionBoundary\n {...section}\n {...presentation}\n result={result}\n notice=\"none\"\n />\n );\n }\n return <IndependentSection view={view} {...section} {...presentation} />;\n}\n\nfunction IndependentSection<Data, Input>({\n view,\n ...props\n}: Omit<DataSectionProps<Data, Input>, 'content'> &\n ReturnType<typeof sectionContent<Data, Input>>) {\n const result = useDeclaredResult(view);\n const defaults = useInspectionDefaults();\n const section = (\n <DataSectionBoundary {...props} result={result} notice=\"inline\" />\n );\n return (\n <InspectionContext\n value={{\n ...defaults,\n dataContext: result.dataContext,\n queries: result.queries,\n }}\n >\n {section}\n </InspectionContext>\n );\n}\n",
14
+ "import type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { classNames } from '@/src/react/ui/classNames';\nimport { AppIcon } from '@/src/react/ui/icons';\n\nimport type { DataView } from '@/src/core/data-view';\n\nexport type DataBoundaryProps<T, Input = unknown> = {\n view: DataView<T, Input>;\n loadingFallback: ReactNode;\n emptyFallback: ReactNode;\n error: (error: Error) => ReactNode;\n staleError?: (error: Error) => ReactNode;\n notice?: 'inline' | 'none';\n children: (data: T, displayedInput: Input) => ReactNode;\n} & Omit<ComponentPropsWithRef<'div'>, 'children'>;\n\n/** Render one request state at a time. Prior content remains readable during an update.\n * Feedback ownership is supplied by the containing section. */\nexport function DataBoundary<T, Input>({\n view,\n loadingFallback,\n emptyFallback,\n error,\n staleError,\n notice = 'none',\n children,\n className,\n ...props\n}: DataBoundaryProps<T, Input>) {\n if (view.kind === 'loading' || view.kind === 'empty' || view.kind === 'error')\n return (\n <div\n {...props}\n className={classNames('altertable-data-boundary', className)}\n >\n {view.kind === 'loading'\n ? loadingFallback\n : view.kind === 'empty'\n ? emptyFallback\n : error(view.error)}\n </div>\n );\n\n const updating = view.kind === 'updating';\n const hasStaleError = view.kind === 'stale-error';\n\n return (\n <div\n {...props}\n className={classNames('altertable-data-boundary', className)}\n >\n {notice === 'inline' && (updating || hasStaleError) && (\n <div\n className=\"altertable-data-boundary-notice\"\n data-state={view.kind}\n role={hasStaleError ? 'alert' : 'status'}\n >\n {updating ? (\n <AppIcon\n name=\"loading\"\n size={16}\n className=\"altertable-data-boundary-spinner\"\n />\n ) : (\n <AppIcon name=\"error\" size={16} />\n )}\n <span className=\"altertable-data-boundary-message\">\n {view.message}\n </span>\n {staleError && view.kind === 'stale-error' && (\n <span className=\"altertable-data-boundary-action\">\n {staleError(view.error)}\n </span>\n )}\n </div>\n )}\n <div className=\"altertable-data-boundary-content\" aria-busy={updating}>\n {children(\n view.data,\n view.kind === 'ready' ? view.input : view.displayedInput\n )}\n </div>\n </div>\n );\n}\n",
15
+ "import type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { classNames } from '@/src/react/ui/classNames';\nimport { AppIcon } from '@/src/react/ui/icons';\n\nexport type StatusPanelProps = {\n status: 'loading' | 'empty' | 'error';\n title: ReactNode;\n description?: ReactNode;\n details?: ReactNode;\n action?: ReactNode;\n children?: ReactNode;\n} & Omit<ComponentPropsWithRef<'div'>, 'children' | 'title'>;\n\nexport function StatusPanel({\n status,\n title,\n description,\n details,\n action,\n children,\n className,\n role,\n ...props\n}: StatusPanelProps) {\n return (\n <div\n {...props}\n className={classNames('altertable-status-panel', className)}\n data-status={status}\n role={role ?? (status === 'error' ? 'alert' : 'status')}\n >\n {status === 'error' && <AppIcon name=\"error\" size={18} />}\n <div className=\"altertable-status-copy\">\n <strong>{title}</strong>\n {description && <p>{description}</p>}\n {details && <small>{details}</small>}\n {children}\n </div>\n {action && <div className=\"altertable-status-action\">{action}</div>}\n </div>\n );\n}\n",
16
+ "import type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { DataAppError } from '@/src/client/transport';\nimport { Button } from '@/src/react/ui/Button';\nimport { useInspectionDefaults } from '@/src/react/ui/InspectionContext';\nimport { DataBoundary } from '@/src/react/ui/DataBoundary';\nimport type { DataView } from '@/src/core/data-view';\nimport { invariant } from '@/src/core/invariant';\nimport { EmptyState } from '@/src/react/ui/EmptyState';\nimport type { EmptyContent } from '@/src/react/ui/presentation';\nimport { StatusPanel } from '@/src/react/ui/StatusPanel';\n\nfunction errorPresentation(cause: Error) {\n const code = cause instanceof DataAppError ? cause.code : 'request_failed';\n switch (code) {\n case 'source_unauthorized':\n return {\n title: 'Connection needs attention',\n description: 'Ask the app owner to reconnect the lakehouse.',\n retryable: false,\n };\n case 'source_forbidden':\n return {\n title: 'Data access denied',\n description:\n 'The selected profile cannot read this data. Ask the app owner for access.',\n retryable: false,\n };\n case 'source_query_rejected':\n return {\n title: 'This view cannot run its query',\n description: 'Ask the app owner to check the data operation.',\n retryable: false,\n };\n case 'source_rate_limited':\n return {\n title: 'Data source is busy',\n description: 'The lakehouse is handling too many requests.',\n retryable: true,\n };\n case 'timeout':\n return {\n title: 'Request timed out',\n description: 'The lakehouse took too long to respond.',\n retryable: true,\n };\n case 'source_unavailable':\n return {\n title: 'Couldn’t load results',\n description: 'The lakehouse isn’t responding.',\n retryable: true,\n };\n default:\n return {\n title: 'Couldn’t load results',\n description: 'The data request failed.',\n retryable: true,\n };\n }\n}\n\nexport type SectionResult<Data, Input> = {\n view: DataView<Data, Input>;\n refetch: () => unknown;\n};\n\nexport type DataSectionProps<Data, Input = unknown> = {\n children: (data: Data, displayedInput: Input) => ReactNode;\n /** Placeholder layout for an initial request; use the ready view's grid without copied values. */\n loadingFallback: ReactNode;\n error?: { title: ReactNode; description?: ReactNode; onRetry?: () => void };\n label?: string;\n notice?: 'none' | 'inline';\n} & (\n | {\n result: SectionResult<Data, Input> & { emptyFallback: EmptyContent };\n emptyFallback?: EmptyContent;\n }\n | { result: SectionResult<Data, Input>; emptyFallback: EmptyContent }\n) &\n Omit<ComponentPropsWithRef<'div'>, 'children'>;\n\n/** One request boundary for any number of cards. `DataBoundary` exposes the lower-level\n * view-state slots internally. The primary DataApp request uses page-level feedback. */\nexport function DataSectionBoundary<Data, Input>({\n result,\n children,\n emptyFallback,\n loadingFallback,\n error,\n label,\n notice: feedback,\n ...props\n}: DataSectionProps<Data, Input>) {\n const fallback =\n emptyFallback ??\n ('emptyFallback' in result ? result.emptyFallback : undefined);\n invariant(\n fallback,\n 'A section needs an empty fallback from its result or props.'\n );\n const defaults = useInspectionDefaults();\n const notice =\n feedback ?? (defaults?.primaryView === result.view ? 'none' : 'inline');\n return (\n <DataBoundary\n {...props}\n view={result.view}\n role={label ? 'region' : undefined}\n aria-label={label}\n notice={notice}\n loadingFallback={loadingFallback}\n emptyFallback={<EmptyState {...fallback} />}\n error={cause => {\n const presentation = errorPresentation(cause);\n const retryAction =\n error?.onRetry ??\n (presentation.retryable ? () => void result.refetch() : undefined);\n\n return (\n <StatusPanel\n status=\"error\"\n title={error?.title ?? presentation.title}\n description={error?.description ?? presentation.description}\n action={retryAction && <Button onClick={retryAction}>Retry</Button>}\n />\n );\n }}\n staleError={() => (\n <Button onClick={error?.onRetry ?? (() => void result.refetch())}>\n Retry\n </Button>\n )}\n >\n {children}\n </DataBoundary>\n );\n}\n",
17
+ "import { useEffect, useState, type ReactNode } from 'react';\nimport {\n DateTimeTooltip,\n type DateTimeTooltipProps,\n} from '@/src/react/ui/DateTimeTooltip';\n\nexport type UpdatedAtProps = {\n timestamp: number;\n locale?: string;\n label?: string;\n children?: ReactNode;\n} & Omit<DateTimeTooltipProps, 'date' | 'children'>;\n\nexport function UpdatedAt({\n timestamp,\n locale,\n label = 'Updated',\n children,\n triggerProps,\n ...props\n}: UpdatedAtProps) {\n const [now, setNow] = useState(Date.now);\n\n useEffect(() => {\n const interval = window.setInterval(() => setNow(Date.now()), 30_000);\n\n return () => window.clearInterval(interval);\n }, []);\n\n const elapsedMinutes = Math.floor(Math.max(0, now - timestamp) / 60_000);\n const relative = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' });\n let age = 'just now';\n if (elapsedMinutes >= 1_440)\n age = relative.format(-Math.floor(elapsedMinutes / 1_440), 'day');\n else if (elapsedMinutes >= 60)\n age = relative.format(-Math.floor(elapsedMinutes / 60), 'hour');\n else if (elapsedMinutes >= 1)\n age = relative.format(-elapsedMinutes, 'minute');\n\n const date = new Date(timestamp);\n\n return (\n <DateTimeTooltip\n {...props}\n date={date}\n triggerProps={{\n ...triggerProps,\n className: ['altertable-updated-at', triggerProps?.className]\n .filter(Boolean)\n .join(' '),\n }}\n >\n {children ?? (\n <time dateTime={date.toISOString()}>\n {label} {age}\n </time>\n )}\n </DateTimeTooltip>\n );\n}\n",
18
+ "import { classNames } from '@/src/react/ui/classNames';\nimport { AppIcon } from '@/src/react/ui/icons';\nimport type { ReportingPeriod } from '@/src/core/contract';\nimport { formatDateRange } from '@/src/core/format';\n\nexport type { ReportingPeriod } from '@/src/core/contract';\n\nexport type PeriodComparison =\n | { kind: 'previous' }\n | { kind: 'period'; period: ReportingPeriod };\n\nexport type PeriodSummaryProps = {\n period: ReportingPeriod;\n comparison?: PeriodComparison;\n className?: string;\n};\n\nfunction duration(\n period: Extract<ReportingPeriod, { kind: 'rolling' }>\n): string {\n return `${period.amount} ${period.unit}${period.amount === 1 ? '' : 's'}`;\n}\n\nfunction label(period: ReportingPeriod): string {\n if (period.kind === 'rolling') return `Last ${duration(period)}`;\n\n return formatDateRange(period);\n}\n\nfunction comparisonLabel(\n period: ReportingPeriod,\n comparison: PeriodComparison\n): string {\n if (comparison.kind === 'period') {\n if (comparison.period.kind === 'calendar') return label(comparison.period);\n\n return `${duration(comparison.period)} ending ${new Date(comparison.period.end).toLocaleString(undefined, { dateStyle: 'medium', timeStyle: 'short' })}`;\n }\n\n return period.kind === 'rolling'\n ? `Previous ${duration(period)}`\n : 'Previous period';\n}\n\nexport function reportingPeriodText(period: ReportingPeriod): string {\n if (period.kind === 'calendar')\n return `${label(period)} in ${period.timeZone}`;\n const end = new Date(period.end);\n if (Number.isNaN(end.getTime())) return label(period);\n const start = new Date(\n end.getTime() -\n period.amount * (period.unit === 'hour' ? 3_600_000 : 86_400_000)\n );\n\n return `${label(period)}, ${start.toISOString()} to ${end.toISOString()}`;\n}\n\n/** Read-only period context for the variable bar, including exact bounds for assistive technology. */\nexport function PeriodSummary({\n period,\n comparison,\n className,\n}: PeriodSummaryProps) {\n const comparisonText = comparison\n ? comparisonLabel(period, comparison)\n : null;\n const comparisonDetail =\n comparison?.kind === 'period'\n ? reportingPeriodText(comparison.period)\n : comparisonText;\n\n return (\n <p className={classNames('altertable-period-summary', className)}>\n <span className=\"altertable-sr-only\">\n {`Reporting period: ${reportingPeriodText(period)}${comparisonDetail ? `, compared with ${comparisonDetail}` : ''}`}\n </span>\n <span aria-hidden=\"true\" className=\"altertable-period-summary-visible\">\n <AppIcon\n name={period.kind === 'rolling' ? 'clock' : 'calendar'}\n size={16}\n />\n <span className=\"altertable-period-summary-current\">\n {label(period)}\n </span>\n {comparisonText && (\n <>\n <span className=\"altertable-period-summary-vs\" aria-hidden=\"true\">\n vs\n </span>\n <span>{comparisonText}</span>\n </>\n )}\n </span>\n </p>\n );\n}\n",
95
19
  "import { invariant } from '@/src/core/invariant';\n\nexport type TableIdentifier = { catalog: string; schema: string; name: string };\nexport type ColumnIdentifier<TableId extends string = string> = {\n table: TableId;\n name: string;\n};\n\nexport type DataIdentifierDefinition =\n | ({ kind: 'table' } & TableIdentifier)\n | {\n kind: 'column';\n tableId: `tables.${string}`;\n table: TableIdentifier;\n name: string;\n };\n\ntype IdentifierId<\n Tables extends Record<string, TableIdentifier>,\n Columns extends Record<\n string,\n ColumnIdentifier<Extract<keyof Tables, string>>\n >,\n> =\n | `tables.${Extract<keyof Tables, string>}`\n | {\n [\n Id in Extract<keyof Columns, string>\n ]: `columns.${Columns[Id]['table']}.${Id}`;\n }[Extract<keyof Columns, string>];\n\nfunction qualifiedName(definition: DataIdentifierDefinition): string {\n const table = definition.kind === 'table' ? definition : definition.table;\n const path = [table.catalog, table.schema, table.name].join('.');\n\n return definition.kind === 'column' ? `${path}.${definition.name}` : path;\n}\n\nfunction assertAlias(id: string) {\n invariant(!!id && !id.includes('.'), `Invalid data identifier alias ${id}.`);\n}\n\n/** Register exact source names once; returned JSX IDs are checked against this registry. */\nexport function defineDataIdentifiers<\n const Tables extends Record<string, TableIdentifier>,\n const Columns extends Record<\n string,\n ColumnIdentifier<Extract<keyof Tables, string>>\n >,\n>({ tables, columns }: { tables: Tables; columns: Columns }) {\n type Id = IdentifierId<Tables, Columns>;\n const definitions: Record<string, DataIdentifierDefinition> =\n Object.create(null);\n\n for (const [id, table] of Object.entries(tables)) {\n assertAlias(id);\n definitions[`tables.${id}`] = { kind: 'table', ...table };\n }\n for (const [id, column] of Object.entries(columns)) {\n assertAlias(id);\n const table = tables[column.table];\n invariant(table, `Unknown table ${column.table} for column ${id}.`);\n definitions[`columns.${column.table}.${id}`] = {\n kind: 'column',\n tableId: `tables.${column.table}`,\n table,\n name: column.name,\n };\n }\n\n function DataIdentifier({\n id,\n display,\n }: {\n id: Id;\n display?: 'short' | 'qualified';\n }) {\n const definition = definitions[id];\n invariant(definition, `Unknown data identifier ${id}.`);\n const qualified = qualifiedName(definition);\n const shown =\n display ?? (definition.kind === 'table' ? 'qualified' : 'short');\n const table = definition.kind === 'table' ? definition : definition.table;\n const prefix =\n definition.kind === 'table'\n ? [table.catalog, table.schema]\n : [table.catalog, table.schema, table.name];\n\n return (\n <code\n className=\"altertable-data-identifier\"\n data-kind={definition.kind}\n title={qualified}\n data-identifier-id={id}\n >\n {shown === 'qualified' && (\n <span className=\"altertable-data-identifier-path\">\n {prefix.map((segment, index) => (\n <span key={index}>\n {segment}.<wbr />\n </span>\n ))}\n </span>\n )}\n <span className=\"altertable-data-identifier-name\">\n {definition.name}\n </span>\n </code>\n );\n }\n\n return {\n definitions: definitions as Readonly<Record<Id, DataIdentifierDefinition>>,\n DataIdentifier,\n };\n}\n",
96
- "import { AppIcon } from '@/src/react/ui/icons';\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\nimport type { DisclosedQuery } from '@/src/core/contract';\nimport type { DataContext, GlossaryEntry } from '@/src/react/ui/data-context';\nimport { AboutData, type AboutEmpty } from '@/src/react/ui/AboutData';\n\nexport type GlossaryExplanationProps = {\n entry: GlossaryEntry;\n empty?: AboutEmpty;\n title?: ReactNode;\n description?: ReactNode;\n visual?: ReactNode;\n queries?: DisclosedQuery[];\n dataContext?: DataContext;\n} & Omit<ComponentPropsWithRef<'button'>, 'children' | 'title'>;\n\n/** Opens the inspect sheet for one glossary term. Prefer a card's evidence slot\n * when the surface already has a title, description, and visual. */\nexport function GlossaryExplanation({\n entry,\n empty,\n title,\n description,\n visual,\n queries,\n dataContext,\n className,\n ...props\n}: GlossaryExplanationProps) {\n return (\n <AboutData\n {...props}\n shortcut={false}\n iconOnly\n variant=\"ghost\"\n title={title ?? entry.term}\n description={description}\n visual={visual}\n references={{ kind: 'entries', entries: [entry] }}\n empty={empty}\n dataContext={dataContext}\n queries={queries}\n className={className ?? 'altertable-inspect-trigger'}\n tooltip=\"Explore this term\"\n aria-label={props['aria-label'] ?? `Explore ${entry.term}`}\n >\n <AppIcon name=\"openDetails\" />\n </AboutData>\n );\n}\n",
97
- "import type { ReactNode } from 'react';\nimport type { GlossaryEntry } from '@/src/react/ui/data-context';\nimport { HelpPopover } from '@/src/react/ui/HelpPopover';\n\nexport type GlossaryDefinitionProps = {\n entry: GlossaryEntry;\n children?: ReactNode;\n};\n\nexport function GlossaryDefinition({\n entry,\n children,\n}: GlossaryDefinitionProps) {\n return (\n <HelpPopover\n trigger={children ?? entry.term}\n triggerLabel={`Explain ${entry.term}`}\n label={entry.term}\n triggerClassName=\"altertable-glossary-definition-trigger\"\n panelClassName=\"altertable-glossary-definition-popover\"\n >\n <strong>{entry.term}</strong>\n <div>{entry.definition}</div>\n </HelpPopover>\n );\n}\n"
20
+ "import type { ComponentPropsWithRef } from 'react';\nimport type { WidgetEvidence } from '@/src/react/ui/WidgetEvidence';\n\nimport { getAnnotationProps } from '@/src/react/annotations/getAnnotationProps';\n\nexport type AnnotationTargetProps = ComponentPropsWithRef<'div'> & {\n annotationId: string;\n label: string;\n evidence?: WidgetEvidence;\n};\n\n/** A stable feedback target for app-owned content outside the built-in widgets. */\nexport function AnnotationTarget({\n annotationId,\n label,\n evidence,\n ...props\n}: AnnotationTargetProps) {\n return (\n <div\n {...props}\n {...getAnnotationProps({\n id: annotationId,\n label,\n evidence,\n kind: 'element',\n })}\n />\n );\n}\n",
21
+ "import {\n useEffect,\n useEffectEvent,\n useRef,\n useReducer,\n useImperativeHandle,\n type Ref,\n type ComponentRef,\n type CSSProperties,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport {\n autoUpdate,\n flip,\n offset,\n shift,\n useFloating,\n useMergeRefs,\n} from '@floating-ui/react';\nimport {\n GripVertical,\n Eye,\n EyeOff,\n Trash2,\n X,\n Minus,\n LoaderCircle,\n} from 'lucide-react';\nimport type { Theme } from '@/src/core/appearance';\nimport {\n parseDataAppAnnotationDraft,\n type DataAppAnnotationDraft,\n} from '@/src/core/annotations';\nimport { Button } from '@/src/react/ui/Button';\nimport { TooltipProvider } from '@/src/react/ui/Tooltip';\nimport { AnnotationTooltip } from '@/src/react/annotations/AnnotationTooltip';\nimport { Sheet } from '@/src/react/ui/Sheet';\nimport { Kbd } from '@/src/react/ui/Kbd';\nimport { shortcuts } from '@/src/react/ui/shortcuts';\n\nexport type AnnotationBarHandle = {\n /** Submit through the same guards, pending state, and retry feedback as the Send button. */\n send: () => Promise<void>;\n};\n\nexport type AnnotationBarProps = {\n ref?: Ref<AnnotationBarHandle>;\n annotations: readonly DataAppAnnotationDraft[];\n active?: boolean;\n theme?: Theme;\n disabled?: boolean;\n deletedAnnotationId?: string;\n onUndoDelete?: (id: string) => void;\n onDismissUndo?: () => void;\n hasUnsavedChanges?: boolean;\n pinsVisible: boolean;\n onPinsVisibleChange: (visible: boolean) => void;\n onSelect: (id: string) => void;\n onDelete: (id: string) => void;\n onClear: () => void;\n /** Let host apps use their existing confirmation dialog. */\n requestDiscard?: (discard: () => void) => void;\n /** Resolve only after the outer application's agent API accepts this snapshot. */\n onSend: (annotations: readonly DataAppAnnotationDraft[]) => Promise<void>;\n onClose: () => void;\n};\n\ntype AnnotationBarState = {\n position?: { left: number; top: number };\n reviewOpen: boolean;\n pending: boolean;\n error: string;\n discardOpen: boolean;\n previewId?: string;\n observedActive: boolean;\n};\ntype AnnotationBarAction =\n | {\n type: 'positionMoved';\n position: NonNullable<AnnotationBarState['position']>;\n }\n | { type: 'reviewToggled' }\n | { type: 'reviewClosed' }\n | { type: 'previewOpened'; id: string }\n | { type: 'previewClosed' }\n | { type: 'discardDialogChanged'; open: boolean }\n | { type: 'annotationsDiscarded' }\n | { type: 'submissionStarted' }\n | { type: 'submissionAccepted' }\n | { type: 'submissionFailed' }\n | { type: 'submissionFinished' }\n | { type: 'annotationModeObserved'; active: boolean };\n\nfunction annotationBarReducer(\n state: AnnotationBarState,\n action: AnnotationBarAction\n): AnnotationBarState {\n switch (action.type) {\n case 'positionMoved':\n return { ...state, position: action.position };\n case 'reviewToggled':\n return { ...state, reviewOpen: !state.reviewOpen };\n case 'reviewClosed':\n return { ...state, reviewOpen: false };\n case 'previewOpened':\n return { ...state, previewId: action.id };\n case 'previewClosed':\n return { ...state, previewId: undefined };\n case 'discardDialogChanged':\n return { ...state, discardOpen: action.open };\n case 'annotationsDiscarded':\n return { ...state, discardOpen: false, reviewOpen: false };\n case 'submissionStarted':\n return { ...state, pending: true, error: '' };\n case 'submissionAccepted':\n return { ...state, reviewOpen: false };\n case 'submissionFailed':\n return { ...state, error: 'Could not send annotations. Try again.' };\n case 'submissionFinished':\n return { ...state, pending: false };\n case 'annotationModeObserved':\n return {\n ...state,\n observedActive: action.active,\n ...(!action.active ? { reviewOpen: false, previewId: undefined } : {}),\n };\n }\n}\n\n/** Host-owned batch controls. Collection changes and agent submission stay with the outer app. */\nexport function AnnotationBar({\n ref,\n annotations,\n active = true,\n theme = 'light',\n disabled = false,\n deletedAnnotationId,\n onUndoDelete,\n onDismissUndo,\n hasUnsavedChanges = false,\n pinsVisible,\n onPinsVisibleChange,\n onSelect,\n onDelete,\n onClear,\n requestDiscard,\n onSend,\n onClose,\n}: AnnotationBarProps) {\n const reviewElement = useRef<ComponentRef<'dialog'>>(null);\n const reviewTrigger = useRef<ComponentRef<'button'>>(null);\n const cancelDiscard = useRef<ComponentRef<'button'>>(null);\n const barRef = useRef<ComponentRef<'div'>>(null);\n const drag = useRef<\n { x: number; y: number; left: number; top: number } | undefined\n >(undefined);\n const submitting = useRef(false);\n const [state, dispatch] = useReducer(annotationBarReducer, {\n reviewOpen: false,\n pending: false,\n error: '',\n discardOpen: false,\n observedActive: active,\n });\n const { position, reviewOpen, pending, error, discardOpen, previewId } =\n state;\n const preview = annotations.find(annotation => annotation.id === previewId);\n const locked = disabled || pending;\n const canSend =\n active && !locked && !hasUnsavedChanges && annotations.length > 0;\n const { refs, floatingStyles } = useFloating({\n placement: 'top',\n strategy: 'fixed',\n middleware: [offset(10), flip(), shift({ padding: 12 })],\n whileElementsMounted: autoUpdate,\n });\n\n const barElementRef = useMergeRefs([refs.setReference, barRef]);\n const reviewRef = useMergeRefs([refs.setFloating, reviewElement]);\n\n function move(left: number, top: number) {\n const rect = barRef.current?.getBoundingClientRect();\n if (!rect) return;\n dispatch({\n type: 'positionMoved',\n position: {\n left: Math.max(12, Math.min(left, window.innerWidth - rect.width - 12)),\n top: Math.max(12, Math.min(top, window.innerHeight - rect.height - 12)),\n },\n });\n }\n const keepInViewport = useEffectEvent(() => {\n if (position) move(position.left, position.top);\n });\n useEffect(() => {\n window.addEventListener('resize', keepInViewport);\n return () => window.removeEventListener('resize', keepInViewport);\n }, []);\n useEffect(() => {\n if (reviewOpen)\n reviewElement.current\n ?.querySelector<ComponentRef<'button'>>('button')\n ?.focus();\n }, [reviewOpen]);\n if (state.observedActive !== active)\n dispatch({ type: 'annotationModeObserved', active });\n function closeReview() {\n dispatch({ type: 'reviewClosed' });\n reviewTrigger.current?.focus();\n }\n async function send() {\n if (submitting.current || !canSend) return;\n submitting.current = true;\n dispatch({ type: 'submissionStarted' });\n try {\n const snapshot = annotations.map(parseDataAppAnnotationDraft);\n await onSend(snapshot);\n dispatch({ type: 'submissionAccepted' });\n } catch {\n dispatch({ type: 'submissionFailed' });\n } finally {\n submitting.current = false;\n dispatch({ type: 'submissionFinished' });\n }\n }\n useImperativeHandle(ref, () => ({ send }));\n useEffect(() => {\n if (discardOpen) cancelDiscard.current?.focus();\n }, [discardOpen]);\n function discardAnnotations() {\n dispatch({ type: 'annotationsDiscarded' });\n onClear();\n onClose();\n }\n const undo =\n deletedAnnotationId && onUndoDelete ? (\n <div\n className=\"altertable-annotation-undo\"\n data-theme={theme}\n data-inline={\n (active && reviewOpen && annotations.length > 0) || undefined\n }\n data-bar-visible={(active && annotations.length > 0) || undefined}\n >\n <output>Annotation deleted</output>\n <Button\n variant=\"ghost\"\n onClick={() => onUndoDelete(deletedAnnotationId)}\n >\n Undo\n </Button>\n {onDismissUndo && (\n <Button\n variant=\"ghost\"\n size=\"icon-compact\"\n aria-label=\"Dismiss deleted annotation\"\n onClick={onDismissUndo}\n >\n <X size={14} aria-hidden />\n </Button>\n )}\n </div>\n ) : null;\n if (annotations.length === 0 && !deletedAnnotationId) return null;\n const style: CSSProperties = position\n ? {\n left: position.left,\n top: position.top,\n bottom: 'auto',\n transform: 'none',\n }\n : {};\n\n return (\n <TooltipProvider>\n {active && annotations.length > 0 && (\n <div\n ref={barElementRef}\n className=\"altertable-annotation-bar\"\n data-theme={theme}\n style={style}\n tabIndex={-1}\n role=\"toolbar\"\n aria-label=\"Annotations\"\n onKeyDown={event => {\n if (event.key !== 'Escape' || locked || hasUnsavedChanges) return;\n event.preventDefault();\n if (reviewOpen) closeReview();\n else onClose();\n }}\n >\n <Button\n variant=\"ghost\"\n size=\"icon-compact\"\n aria-label=\"Move annotation bar\"\n data-atbl-internal-drag-handle\n disabled={locked}\n onPointerDown={event => {\n const rect = barRef.current?.getBoundingClientRect();\n if (!rect) return;\n drag.current = {\n x: event.clientX,\n y: event.clientY,\n left: rect.left,\n top: rect.top,\n };\n event.currentTarget.setPointerCapture(event.pointerId);\n }}\n onPointerMove={event => {\n const origin = drag.current;\n if (origin)\n move(\n origin.left + event.clientX - origin.x,\n origin.top + event.clientY - origin.y\n );\n }}\n onPointerUp={() => {\n drag.current = undefined;\n }}\n onPointerCancel={() => {\n drag.current = undefined;\n }}\n onKeyDown={event => {\n const delta = {\n ArrowLeft: [-10, 0],\n ArrowRight: [10, 0],\n ArrowUp: [0, -10],\n ArrowDown: [0, 10],\n }[event.key];\n const rect = barRef.current?.getBoundingClientRect();\n if (!delta || !rect) return;\n event.preventDefault();\n move(rect.left + delta[0]!, rect.top + delta[1]!);\n }}\n >\n <GripVertical size={16} aria-hidden />\n </Button>\n <Button\n ref={reviewTrigger}\n className=\"altertable-annotation-bar-count\"\n variant=\"ghost\"\n size=\"compact\"\n aria-label=\"Review annotations\"\n aria-expanded={reviewOpen && annotations.length > 0}\n aria-haspopup=\"dialog\"\n disabled={locked || !annotations.length}\n onClick={() => dispatch({ type: 'reviewToggled' })}\n >\n Annotating · {annotations.length}\n </Button>\n <AnnotationTooltip\n content={\n pinsVisible ? 'Hide annotation pins' : 'Show annotation pins'\n }\n theme={theme}\n >\n <Button\n variant=\"ghost\"\n size=\"icon-compact\"\n aria-label={\n pinsVisible ? 'Hide annotation pins' : 'Show annotation pins'\n }\n aria-pressed={!pinsVisible}\n disabled={locked}\n onClick={() => onPinsVisibleChange(!pinsVisible)}\n >\n {pinsVisible ? (\n <EyeOff size={16} aria-hidden />\n ) : (\n <Eye size={16} aria-hidden />\n )}\n </Button>\n </AnnotationTooltip>\n <AnnotationTooltip content=\"Discard all annotations\" theme={theme}>\n <Button\n variant=\"ghost\"\n size=\"icon-compact\"\n aria-label=\"Discard all annotations\"\n disabled={locked}\n onClick={() =>\n requestDiscard\n ? requestDiscard(discardAnnotations)\n : dispatch({ type: 'discardDialogChanged', open: true })\n }\n >\n <Trash2 size={16} aria-hidden />\n </Button>\n </AnnotationTooltip>\n <AnnotationTooltip\n content={\n hasUnsavedChanges ? (\n 'Save the open annotation before sending'\n ) : (\n <>\n Send annotations <Kbd shortcut={shortcuts.sendAnnotations} />\n </>\n )\n }\n theme={theme}\n >\n <Button\n className=\"altertable-annotation-bar-send\"\n data-pending={pending || undefined}\n aria-busy={pending}\n size=\"compact\"\n aria-label=\"Send annotations\"\n disabled={!canSend}\n onClick={() => void send()}\n >\n <span className=\"altertable-annotation-bar-send-label\">Send</span>\n {pending && (\n <LoaderCircle\n className=\"altertable-annotation-bar-spinner\"\n size={16}\n aria-hidden\n />\n )}\n </Button>\n </AnnotationTooltip>\n <AnnotationTooltip\n content={\n <>\n {hasUnsavedChanges\n ? 'Save or discard the open annotation first'\n : 'Exit annotation mode'}{' '}\n <Kbd>Esc</Kbd>\n </>\n }\n theme={theme}\n >\n <Button\n variant=\"ghost\"\n size=\"icon-compact\"\n aria-label=\"Exit annotation mode\"\n disabled={locked || hasUnsavedChanges}\n onClick={onClose}\n >\n <X size={16} aria-hidden />\n </Button>\n </AnnotationTooltip>\n {error && (\n <output className=\"altertable-annotation-bar-error\" role=\"alert\">\n {error}\n </output>\n )}\n </div>\n )}\n {(!active || !reviewOpen || annotations.length === 0) &&\n undo &&\n createPortal(undo, document.body)}\n {active &&\n reviewOpen &&\n annotations.length > 0 &&\n createPortal(\n <dialog\n open\n ref={reviewRef}\n className=\"altertable-annotation-bar-panel\"\n data-theme={theme}\n style={floatingStyles}\n aria-label=\"Review annotations\"\n onKeyDown={event => {\n if (event.key === 'Escape') {\n event.preventDefault();\n closeReview();\n }\n }}\n >\n <header>\n <strong>Annotations</strong>\n <Button\n variant=\"ghost\"\n size=\"icon-compact\"\n aria-label=\"Minimize annotation review\"\n onClick={closeReview}\n >\n <Minus size={16} aria-hidden />\n </Button>\n </header>\n <div aria-label=\"Annotation drafts\">\n {annotations.map((annotation, index) => (\n <div\n key={annotation.id}\n className=\"altertable-annotation-bar-row\"\n >\n {annotation.context.screenshot && (\n <button\n data-atbl-focus=\"ring\"\n data-atbl-control=\"action\"\n type=\"button\"\n className=\"altertable-annotation-thumbnail\"\n aria-label={`View screenshot of ${annotation.target.label}`}\n onClick={() =>\n dispatch({ type: 'previewOpened', id: annotation.id })\n }\n >\n <img src={annotation.context.screenshot.dataUrl} alt=\"\" />\n </button>\n )}\n <Button\n variant=\"ghost\"\n className=\"altertable-annotation-bar-open\"\n aria-label={`Open annotation ${index + 1}`}\n disabled={locked}\n onClick={() => {\n onPinsVisibleChange(true);\n onSelect(annotation.id);\n dispatch({ type: 'reviewClosed' });\n }}\n >\n <strong>{annotation.target.label}</strong>\n <span>{annotation.comment}</span>\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon-compact\"\n aria-label={`Delete annotation ${index + 1}`}\n disabled={locked}\n onClick={() => onDelete(annotation.id)}\n >\n <Trash2 size={16} aria-hidden />\n </Button>\n </div>\n ))}\n </div>\n {undo}\n </dialog>,\n document.body\n )}\n <Sheet\n open={Boolean(preview)}\n onOpenChange={open => {\n if (!open) dispatch({ type: 'previewClosed' });\n }}\n placement=\"center\"\n className=\"altertable-annotation-image-dialog\"\n title={preview?.target.label ?? 'Screenshot'}\n description={preview?.comment}\n returnFocus={reviewTrigger}\n >\n {preview?.context.screenshot && (\n <img\n className=\"altertable-annotation-preview\"\n src={preview.context.screenshot.dataUrl}\n alt={`Captured area for ${preview.target.label}`}\n />\n )}\n </Sheet>\n {!requestDiscard && (\n <Sheet\n open={discardOpen}\n onOpenChange={open =>\n dispatch({ type: 'discardDialogChanged', open })\n }\n placement=\"center\"\n title=\"Discard all pending annotations?\"\n returnFocus={barRef}\n footer={\n <>\n <Button\n ref={cancelDiscard}\n variant=\"ghost\"\n onClick={() =>\n dispatch({ type: 'discardDialogChanged', open: false })\n }\n >\n Cancel\n </Button>\n <Button\n className=\"altertable-annotation-discard-confirm\"\n disabled={locked}\n onClick={discardAnnotations}\n >\n Discard\n </Button>\n </>\n }\n >\n <p className=\"altertable-annotation-discard-description\">\n These annotations will be removed and won’t be sent to the agent.\n </p>\n </Sheet>\n )}\n </TooltipProvider>\n );\n}\n",
22
+ "import { injectStyles } from '@/src/react/injectStyles';\nimport type { DataAppStylesOptions } from '@/src/react/styles';\n\ndeclare const ANNOTATION_STYLES: string;\n\n/** Install only the outer-frame annotation controls; leave host page typography and layout intact. */\nexport function injectDataAppAnnotationStyles(\n options: DataAppStylesOptions = {}\n): HTMLStyleElement {\n return injectStyles({\n name: 'injectDataAppAnnotationStyles',\n attribute: 'data-altertable-annotation-styles',\n css: ANNOTATION_STYLES,\n options,\n });\n}\n"
98
23
  ],
99
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,GAMmB;AAAA,EACnB,MAAM,SACJ,QAAQ,aACP,OAAO,aAAa,cAAc,YAAY;AAAA,EACjD,IAAI,CAAC;AAAA,IAAQ,MAAM,IAAI,MAAM,GAAG,mCAAmC;AAAA,EACnE,MAAM,WAAW,OAAO,cACtB,SAAS,YACX;AAAA,EACA,IAAI;AAAA,IAAU,OAAO;AAAA,EACrB,MAAM,QAAQ,OAAO,cAAc,OAAO;AAAA,EAC1C,MAAM,aAAa,WAAW,EAAE;AAAA,EAChC,IAAI,QAAQ,UAAU;AAAA,IAAW,MAAM,QAAQ,QAAQ;AAAA,EACvD,MAAM,cAAc;AAAA,EACpB,OAAO,KAAK,OAAO,KAAK;AAAA,EAExB,OAAO;AAAA;;;ACdF,SAAS,mBAAmB,CACjC,UAAgC,CAAC,GACf;AAAA,EAClB,OAAO,aAAa;AAAA,IAClB,MAAM;AAAA,IACN,WAAW;AAAA,IACX,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IACL;AAAA,EACF,CAAC;AAAA;;ACdI,SAAS,wBAAwB,CACtC,UAAgC,CAAC,GACf;AAAA,EAClB,OAAO,aAAa;AAAA,IAClB,MAAM;AAAA,IACN,WAAW;AAAA,IACX,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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",
100
- "debugId": "A6B15262EAC6BE2D64756E2164756E21",
24
+ "mappings": "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,aAAa;AAAA,IAClB,MAAM;AAAA,IACN,WAAW;AAAA,IACX,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IACL;AAAA,EACF,CAAC;AAAA;",
25
+ "debugId": "B42CA52493E1105C64756E2164756E21",
101
26
  "names": []
102
27
  }