@altertable/data-app 0.66.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 (131) hide show
  1. package/CONTRIBUTING.md +22 -16
  2. package/dist/chunks/{contract-19ckn3n7.js → index-23dktynd.js} +8 -6
  3. package/dist/chunks/index-23dktynd.js.map +10 -0
  4. package/dist/chunks/{contract-havnjmdr.js → index-8qfxv0h5.js} +2272 -1123
  5. package/dist/chunks/index-8qfxv0h5.js.map +108 -0
  6. package/dist/chunks/{contract-rfbakka4.js → index-ag0cgnvq.js} +169 -35
  7. package/dist/chunks/index-ag0cgnvq.js.map +13 -0
  8. package/dist/chunks/index-dq7b35fn.js +307 -0
  9. package/dist/chunks/index-dq7b35fn.js.map +13 -0
  10. package/dist/chunks/{contract-e11m4y7f.js → index-ev2b5aaf.js} +11 -6
  11. package/dist/chunks/{contract-e11m4y7f.js.map → index-ev2b5aaf.js.map} +3 -3
  12. package/dist/chunks/{contract-awa2d5b1.js → index-f5cnbrjz.js} +19 -2
  13. package/dist/chunks/{contract-awa2d5b1.js.map → index-f5cnbrjz.js.map} +4 -3
  14. package/dist/chunks/{contract-13j5zb3c.js → index-ktmvs916.js} +8 -7
  15. package/dist/chunks/index-ktmvs916.js.map +13 -0
  16. package/dist/chunks/index-mt93ff2b.js +28 -0
  17. package/dist/chunks/index-mt93ff2b.js.map +10 -0
  18. package/dist/chunks/{contract-tf8c3qpv.js → index-qd5xgx6y.js} +46 -5
  19. package/dist/chunks/index-qd5xgx6y.js.map +13 -0
  20. package/dist/chunks/{contract-pk603qj7.js → index-x69p7cv7.js} +12 -9
  21. package/dist/chunks/index-x69p7cv7.js.map +10 -0
  22. package/dist/client/index.js +6 -6
  23. package/dist/core/appearance.js +1 -1
  24. package/dist/core/config.js +7 -3
  25. package/dist/core/config.js.map +1 -1
  26. package/dist/core/contract.js +14 -6
  27. package/dist/core/contract.js.map +1 -1
  28. package/dist/core/format.js +1 -1
  29. package/dist/embed/index.js +12 -10
  30. package/dist/embed/index.js.map +4 -4
  31. package/dist/index.js +12 -0
  32. package/dist/index.js.map +9 -0
  33. package/dist/local.js +20 -30
  34. package/dist/local.js.map +7 -8
  35. package/dist/react/embed/index.js +1 -1
  36. package/dist/react/embed/index.js.map +2 -2
  37. package/dist/react/index.js +57 -19
  38. package/dist/react/index.js.map +4 -4
  39. package/dist/react/ui/index.js +836 -178
  40. package/dist/react/ui/index.js.map +15 -9
  41. package/dist/server.js +13 -26
  42. package/dist/server.js.map +6 -7
  43. package/dist/types/client/annotations.d.ts +4 -0
  44. package/dist/types/client/data-client.d.ts +1 -2
  45. package/dist/types/client/iframe.d.ts +4 -2
  46. package/dist/types/core/annotations.d.ts +2 -0
  47. package/dist/types/core/config.d.ts +48 -4
  48. package/dist/types/core/contract.d.ts +20 -12
  49. package/dist/types/core/dimension.d.ts +6 -4
  50. package/dist/types/core/filters.d.ts +44 -0
  51. package/dist/types/core/messages.d.ts +2 -0
  52. package/dist/types/core/operation-types.d.ts +5 -2
  53. package/dist/types/core/operation.d.ts +3 -4
  54. package/dist/types/core/queries.d.ts +16 -0
  55. package/dist/types/core/uuid.d.ts +2 -0
  56. package/dist/types/core/variables.d.ts +32 -13
  57. package/dist/types/embed/runtime-html.d.ts +2 -0
  58. package/dist/types/embed/source.d.ts +2 -1
  59. package/dist/types/index.d.ts +3 -0
  60. package/dist/types/react/annotations/AnnotationBar.d.ts +7 -1
  61. package/dist/types/react/annotations/AnnotationEditor.d.ts +2 -1
  62. package/dist/types/react/annotations/useDataAppAnnotations.d.ts +3 -0
  63. package/dist/types/react/app-context.d.ts +3 -0
  64. package/dist/types/react/index.d.ts +3 -3
  65. package/dist/types/react/mount.d.ts +6 -4
  66. package/dist/types/react/style-contract.d.ts +22 -2
  67. package/dist/types/react/ui/Button.d.ts +3 -3
  68. package/dist/types/react/ui/ChartLegend.d.ts +31 -0
  69. package/dist/types/react/ui/Checkbox.d.ts +15 -4
  70. package/dist/types/react/ui/CheckboxGroup.d.ts +7 -0
  71. package/dist/types/react/ui/{Combobox.d.ts → ChoicePicker.d.ts} +10 -15
  72. package/dist/types/react/ui/ComposedChart.d.ts +41 -0
  73. package/dist/types/react/ui/ComposedChartLegend.d.ts +8 -0
  74. package/dist/types/react/ui/DataAppFrame.d.ts +1 -2
  75. package/dist/types/react/ui/DimensionPicker.d.ts +1 -1
  76. package/dist/types/react/ui/FilterActions.d.ts +10 -0
  77. package/dist/types/react/ui/FilterBar.d.ts +3 -0
  78. package/dist/types/react/ui/GettingStarted.d.ts +2 -4
  79. package/dist/types/react/ui/Menu.d.ts +12 -0
  80. package/dist/types/react/ui/NumberField.d.ts +27 -0
  81. package/dist/types/react/ui/NumberFilterPicker.d.ts +9 -0
  82. package/dist/types/react/ui/PieChart.d.ts +5 -2
  83. package/dist/types/react/ui/RadioGroup.d.ts +18 -0
  84. package/dist/types/react/ui/SearchInput.d.ts +2 -2
  85. package/dist/types/react/ui/Select.d.ts +14 -0
  86. package/dist/types/react/ui/SelectionMark.d.ts +2 -1
  87. package/dist/types/react/ui/TooltipSurface.d.ts +3 -0
  88. package/dist/types/react/ui/chart-data.d.ts +1 -1
  89. package/dist/types/react/ui/chart-primitives.d.ts +20 -0
  90. package/dist/types/react/ui/icons.d.ts +1 -0
  91. package/dist/types/react/ui/index.d.ts +26 -2
  92. package/dist/types/react/ui/keyboard.d.ts +6 -0
  93. package/dist/types/react/ui/shortcuts.d.ts +7 -0
  94. package/dist/types/react/ui/useAppAppearance.d.ts +1 -1
  95. package/dist/types/react/ui/variables.d.ts +4 -2
  96. package/dist/types/react/view-controls.d.ts +3 -1
  97. package/dist/types/server/handler.d.ts +4 -4
  98. package/dist/worker.js +20 -737
  99. package/docs/app-authoring.md +15 -1
  100. package/docs/client.md +8 -8
  101. package/docs/contract.md +42 -20
  102. package/docs/data-context.md +8 -6
  103. package/docs/embed.md +10 -2
  104. package/docs/formatting-and-appearance.md +23 -7
  105. package/docs/hosted-apps.md +9 -2
  106. package/docs/layout.md +1 -1
  107. package/docs/react-embed.md +3 -2
  108. package/docs/react.md +4 -3
  109. package/docs/server-bun.md +1 -1
  110. package/docs/server.md +4 -4
  111. package/docs/styling.md +10 -3
  112. package/docs/ui.md +158 -3
  113. package/docs/variables.md +80 -7
  114. package/docs/views.md +4 -8
  115. package/docs/widgets.md +16 -13
  116. package/examples/starter-data-app/index.tsx +34 -32
  117. package/package.json +16 -11
  118. package/dist/chunks/contract-13j5zb3c.js.map +0 -13
  119. package/dist/chunks/contract-19ckn3n7.js.map +0 -10
  120. package/dist/chunks/contract-h8a6f559.js +0 -286
  121. package/dist/chunks/contract-h8a6f559.js.map +0 -12
  122. package/dist/chunks/contract-havnjmdr.js.map +0 -99
  123. package/dist/chunks/contract-pk603qj7.js.map +0 -10
  124. package/dist/chunks/contract-rfbakka4.js.map +0 -13
  125. package/dist/chunks/contract-tf8c3qpv.js.map +0 -11
  126. package/dist/chunks/contract-wz59z8pq.js +0 -8
  127. package/dist/chunks/contract-wz59z8pq.js.map +0 -10
  128. /package/dist/chunks/{contract-m6n8ctfc.js → index-m6n8ctfc.js} +0 -0
  129. /package/dist/chunks/{contract-m6n8ctfc.js.map → index-m6n8ctfc.js.map} +0 -0
  130. /package/dist/chunks/{contract-mev09s5v.js → index-mev09s5v.js} +0 -0
  131. /package/dist/chunks/{contract-mev09s5v.js.map → index-mev09s5v.js.map} +0 -0
@@ -0,0 +1,108 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/react/injectStyles.ts", "../src/react/styles.ts", "../src/react/ui/icons.ts", "../src/react/ui/Button.tsx", "../src/react/ui/classNames.ts", "../src/react/ui/EmptyState.tsx", "../src/react/ui/Tooltip.tsx", "../src/react/ui/TooltipSurface.tsx", "../src/react/ui/GradientScroll.tsx", "../src/react/ui/Sheet.tsx", "../src/react/ui/Tabs.tsx", "../src/react/ui/search.ts", "../src/react/ui/AboutData.tsx", "../src/react/ui/shortcuts.ts", "../src/react/ui/Kbd.tsx", "../src/react/ui/QueryList.tsx", "../src/react/ui/InspectionProvider.tsx", "../src/react/ui/InspectionContext.tsx", "../src/react/mount.tsx", "../src/react/app-context.ts", "../src/core/date-range.ts", "../src/core/variables.ts", "../src/react/ui/variables.ts", "../src/react/ui/Select.tsx", "../src/react/ui/SelectionMark.tsx", "../src/react/ui/IconButton.tsx", "../src/react/ui/FilterActions.tsx", "../src/react/ui/NumberField.tsx", "../src/react/ui/NumberFilterPicker.tsx", "../src/react/ui/SearchField.tsx", "../src/react/ui/SearchInput.tsx", "../src/react/ui/Skeleton.tsx", "../src/react/ui/SearchMatch.tsx", "../src/react/ui/searchItems.ts", "../src/react/ui/ChoicePicker.tsx", "../src/react/ui/RequestHint.tsx", "../src/react/ui/Checkbox.tsx", "../src/react/ui/DateRangePicker.tsx", "../src/react/ui/FilterBar.tsx", "../src/react/ui/DimensionPicker.tsx", "../src/react/view-runtime.tsx", "../src/react/source-owner.ts", "../src/react/bindings.ts", "../src/react/hooks.ts", "../src/core/data-view.ts", "../src/react/content.ts", "../src/react/view.ts", "../src/react/view-controls.tsx", "../src/react/annotations/useDataAppAnnotations.ts", "../src/react/ui/keyboard.ts", "../src/react/ui/Menu.tsx", "../src/react/ui/LiveControl.tsx", "../src/react/ui/PresentStory.tsx", "../src/react/ui/ThemeSelector.tsx", "../src/react/ui/story.ts", "../src/react/ui/VariableBar.tsx", "../src/react/ui/Grid.tsx", "../src/react/ui/TextContent.tsx", "../src/react/annotations/getAnnotationProps.ts", "../src/react/ui/DataWidget.tsx", "../src/react/ui/ContentSkeleton.tsx", "../src/react/ui/VisualizationWidget.tsx", "../src/react/ui/widget-views.ts", "../src/react/ui/WidgetViewTabs.tsx", "../src/react/ui/metric-comparison.ts", "../src/react/ui/metric.ts", "../src/react/ui/MetricWidget.tsx", "../src/react/ui/HelpPopover.tsx", "../src/react/ui/DateTimeTooltip.tsx", "../src/react/ui/DataTable.tsx", "../src/react/ui/TableWidget.tsx", "../src/react/ui/TextWidget.tsx", "../src/react/ui/DataValue.tsx", "../src/react/ui/data-context.ts", "../src/react/annotations/AnnotationTooltip.tsx", "../src/react/annotations/AnnotationControls.tsx", "../src/react/annotations/annotation-targets.ts", "../src/react/annotations/annotation-screenshot.ts", "../src/react/annotations/AnnotationSelectionLayer.tsx", "../src/react/annotations/AnnotationTrigger.tsx", "../src/react/annotations/AnnotationEditor.tsx", "../src/react/annotations/AnnotationMarkers.tsx", "../src/react/annotations/useAnnotationGeometry.ts", "../src/react/annotations/annotation-editor-state.ts", "../src/react/ui/useDataAppPresentation.ts", "../src/core/presentation.ts", "../src/react/ui/DataAppFrame.tsx", "../src/react/ui/useAppAppearance.ts", "../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/Toast.tsx", "../src/react/ui/RefreshControl.tsx", "../src/react/ui/AppToolbar.tsx", "../src/react/ui/DataViewToast.tsx"],
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 { 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 FilterX,\n Download,\n Info,\n LoaderCircle,\n Minus,\n Moon,\n Presentation,\n Radio,\n RotateCw,\n Search,\n Square,\n SquareDashedMousePointer,\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 annotate: SquareDashedMousePointer,\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 clearFilters: FilterX,\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",
8
+ "import type { ComponentPropsWithRef } from 'react';\nimport { Button as AriaButton } from 'react-aria-components';\nimport { classNames } from '@/src/react/ui/classNames';\n\nexport type ButtonProps = ComponentPropsWithRef<'button'> & {\n variant?: 'primary' | '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 data-atbl-focus=\"ring\"\n data-atbl-control=\"action\"\n data-atbl-internal-surface=\"control\"\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<ComponentPropsWithRef<typeof AriaButton>, 'className'> &\n Pick<ButtonProps, 'variant' | 'size'> & { className?: string }) {\n return (\n <AriaButton\n data-atbl-focus=\"ring\"\n data-atbl-control=\"action\"\n data-atbl-internal-surface=\"control\"\n {...props}\n data-variant={variant}\n data-size={size}\n className={classNames('altertable-button', className)}\n />\n );\n}\n",
9
+ "export function classNames(\n ...values: Array<string | false | null | undefined>\n): string {\n return values.filter(Boolean).join(' ');\n}\n",
10
+ "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",
11
+ "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 { TooltipSurface } from '@/src/react/ui/TooltipSurface';\nimport { classNames } from '@/src/react/ui/classNames';\n\nconst chartPointerPositions = new WeakMap<Document, { x: number; y: number }>();\n\nfunction chartPointerMoved(document: Document, x: number, y: number) {\n const previous = chartPointerPositions.get(document);\n chartPointerPositions.set(document, { x, y });\n return !previous || previous.x !== x || previous.y !== y;\n}\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 onOpenChange?: (open: boolean) => void;\n align?: 'start' | 'center' | 'end';\n placement?: 'top' | 'bottom';\n portalRoot?: RefObject<HTMLElement | null>;\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. Chart\n * tooltips dismiss on scroll and do not open on keyboard focus. Hint\n * tooltips hide once the control is pressed. Escape closes either. */\nexport function Tooltip({\n content,\n children,\n onOpenChange,\n variant = 'hint',\n align = 'center',\n placement,\n portalRoot,\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 = tooltipId;\n const timing = useContext(TooltipContext);\n const [open, setOpen] = useState(false);\n const visible = open && content != null;\n const notifyOpenChange = useEffectEvent((value: boolean) =>\n onOpenChange?.(value)\n );\n useEffect(() => {\n notifyOpenChange(visible);\n }, [visible]);\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 (!visible) return;\n\n function onKeyDown(event: KeyboardEvent) {\n if (event.key !== 'Escape') return;\n if (variant === 'chart') event.preventDefault();\n suppressed.current = true;\n closeFromEffect();\n }\n\n document.addEventListener('keydown', onKeyDown);\n\n return () => document.removeEventListener('keydown', onKeyDown);\n }, [visible, variant]);\n\n useEffect(() => {\n if (!visible || variant !== 'chart') return;\n function onScroll() {\n suppressed.current = false;\n closeFromEffect();\n }\n window.addEventListener('scroll', onScroll, true);\n return () => window.removeEventListener('scroll', onScroll, true);\n }, [visible, variant]);\n\n const { refs, floatingStyles, update } = useFloating({\n open: visible,\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 (!visible || variant !== 'chart') return;\n\n function onDocPointerDown(event: PointerEvent) {\n closeOnOutsidePointer(event);\n }\n\n document.addEventListener('pointerdown', onDocPointerDown, true);\n\n return () =>\n document.removeEventListener('pointerdown', onDocPointerDown, true);\n }, [visible, 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]);\n\n return (\n <>\n <span\n {...props}\n ref={triggerRef}\n data-variant={variant}\n data-open={visible || undefined}\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') {\n if (\n chartPointerMoved(\n event.currentTarget.ownerDocument,\n event.clientX,\n event.clientY\n )\n ) {\n followCursor(event);\n setOpen(true);\n }\n return;\n }\n if (open) return;\n cancelHover();\n const delay = 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 if (\n !chartPointerMoved(\n event.currentTarget.ownerDocument,\n event.clientX,\n event.clientY\n )\n )\n return;\n followCursor(event);\n if (!suppressed.current) setOpen(true);\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 !(\n event.currentTarget.contains(document.activeElement) &&\n variant !== 'chart'\n )\n )\n close();\n else cancelHover();\n }}\n onPointerDown={event => {\n onPointerDown?.(event);\n if (event.defaultPrevented) return;\n if (variant === 'chart') {\n if (event.pointerType !== 'mouse') {\n followCursor(event);\n setOpen(wasOpen => !wasOpen);\n }\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 variant === 'chart' ||\n !event.target.matches(':focus-visible')\n )\n return;\n cancelHover();\n refs.setPositionReference(refs.domReference.current);\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 visible ? describedBy : undefined,\n ]\n .filter(Boolean)\n .join(' ') || undefined,\n })\n : child\n )}\n </span>\n {visible && (\n <FloatingPortal root={portalRoot ?? dialogRoot ?? undefined}>\n <TooltipSurface\n ref={floatingRef}\n data-variant={variant}\n style={floatingStyles}\n role=\"tooltip\"\n id={describedBy}\n >\n {content}\n </TooltipSurface>\n </FloatingPortal>\n )}\n </>\n );\n}\n",
12
+ "import type { ComponentPropsWithRef } from 'react';\nimport { classNames } from '@/src/react/ui/classNames';\n\n/** Shared surface for floating hints and chart value inspection. */\nexport function TooltipSurface({\n className,\n ...props\n}: ComponentPropsWithRef<'span'>) {\n return (\n <span\n {...props}\n className={classNames('altertable-tooltip-content', className)}\n />\n );\n}\n",
13
+ "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",
14
+ "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 placement?: 'side' | 'center';\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 placement = 'side',\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 data-placement={placement}\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",
15
+ "import {\n useCallback,\n useEffect,\n useState,\n type ComponentPropsWithRef,\n} from 'react';\nimport { classNames } from '@/src/react/ui/classNames';\nimport {\n Tabs as AriaTabs,\n TabList,\n Tab as AriaTab,\n TabPanels,\n TabPanel as AriaTabPanel,\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 { TabList, TabPanels };\n\nexport function Tab(props: ComponentPropsWithRef<typeof AriaTab>) {\n return (\n <AriaTab\n data-atbl-internal-surface=\"tab\"\n data-atbl-focus=\"ring\"\n data-atbl-control=\"action\"\n {...props}\n />\n );\n}\n\nexport function TabPanel(props: ComponentPropsWithRef<typeof AriaTabPanel>) {\n return <AriaTabPanel data-atbl-focus=\"ring\" {...props} />;\n}\n\nexport function Tabs({\n className,\n ...props\n}: ComponentPropsWithRef<typeof AriaTabs>) {\n return (\n <AriaTabs\n {...props}\n className={state =>\n classNames(\n 'altertable-tabs',\n typeof className === 'function'\n ? className(state)\n : (className ?? 'react-aria-Tabs')\n )\n }\n />\n );\n}\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",
16
+ "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",
17
+ "import {\n useEffect,\n useEffectEvent,\n useRef,\n useContext,\n useId,\n useSyncExternalStore,\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 { slug } 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 {\n InspectionOwner,\n InspectionVisual,\n} from '@/src/react/ui/InspectionProvider';\nimport { useInspectionDefaults } from '@/src/react/ui/InspectionContext';\n\nexport type AboutTab = 'glossary' | 'queries';\n\nconst aboutTabs = new Map<string, AboutTab>([\n ['glossary', 'glossary'],\n ['queries', 'queries'],\n]);\n\nexport function resolveAboutTab(tab: string | null | undefined): AboutTab {\n return aboutTabs.get(tab ?? '') ?? 'glossary';\n}\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\n/**\n * Open state uses `?about=`; tab selection uses `?tab=`. Enable the global shortcut only on the\n * page-level trigger.\n */\nexport function InspectionSheet({\n id,\n title,\n description,\n visual,\n visualKind,\n dataContext,\n references,\n queries,\n empty,\n footer,\n sheetProps,\n headerActions,\n open,\n onOpenChange,\n tab,\n onTabChange,\n returnFocus,\n}: AboutDataProps & {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n tab: AboutTab;\n onTabChange: (tab: AboutTab) => void;\n returnFocus: RefObject<HTMLButtonElement | null>;\n}) {\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 heading = title ?? 'About the data';\n const summary =\n description ??\n resolvedContext?.description ??\n 'Glossary and queries for this view.';\n return (\n <Sheet\n {...sheetProps}\n open={open}\n onOpenChange={onOpenChange}\n title={heading}\n description={summary}\n wide={!!visual && visualKind !== 'metric'}\n returnFocus={returnFocus}\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={tab}\n onSelectionChange={key => onTabChange(resolveAboutTab(String(key)))}\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\nexport function AboutData(props: AboutDataProps) {\n const owner = useContext(InspectionOwner);\n const visual = useContext(InspectionVisual);\n if (visual) return <span>{props.children ?? props.title}</span>;\n invariant(owner, 'Inspection requires DataApp or DataAppProvider.');\n return <InspectionTrigger {...props} />;\n}\n\nfunction InspectionTrigger({\n variant = 'ghost',\n iconOnly = false,\n shortcut = true,\n tooltip,\n children,\n portalRoot,\n trigger = true,\n className,\n onClick,\n ref,\n ...props\n}: AboutDataProps) {\n const owner = useContext(InspectionOwner)!;\n const defaults = useInspectionDefaults();\n const triggerRef = useRef<HTMLButtonElement>(null);\n const mergedTrigger = useMergeRefs([triggerRef, ref]);\n const key = useId();\n const id = subjectId(props);\n const isOpen = useSyncExternalStore(\n owner.subscribe,\n () => {\n const selection = owner.snapshot();\n return !!selection?.open && selection.inspection.key === key;\n },\n () => false\n );\n const inspection = {\n key,\n id,\n trigger: triggerRef,\n props: {\n ...props,\n dataContext: props.dataContext ?? defaults?.dataContext,\n queries: props.queries ?? defaults?.queries,\n empty: props.empty ?? defaults?.empty,\n },\n };\n useEffect(() => owner.register(inspection));\n useEffect(() => () => owner.remove(key), [owner, key]);\n const syncControlled = useEffectEvent((open: boolean | undefined) => {\n owner.controlled(inspection, open);\n });\n useEffect(() => syncControlled(props.open), [props.open]);\n const enabled = trigger && shortcut && !props.disabled;\n useShortcut(shortcuts.aboutData, () => owner.open(inspection), enabled);\n const hint =\n tooltip ??\n (iconOnly ? (\n enabled ? (\n <>\n Explore data <Kbd shortcut={shortcuts.aboutData} />\n </>\n ) : (\n 'Explore data'\n )\n ) : null);\n if (!trigger) return null;\n const {\n id: _subjectId,\n title,\n description: _description,\n visual: _visual,\n visualKind: _visualKind,\n dataContext: _dataContext,\n references: _references,\n queries: _queries,\n empty: _empty,\n footer: _footer,\n sheetProps: _sheetProps,\n headerActions: _headerActions,\n open: _open,\n onOpenChange: _onOpenChange,\n tab: _tab,\n ...buttonProps\n } = props;\n const button = (\n <Button\n {...buttonProps}\n ref={mergedTrigger}\n variant={variant}\n size={iconOnly ? 'icon' : 'default'}\n className={className}\n data-open={isOpen || undefined}\n aria-label={\n buttonProps['aria-label'] ??\n (iconOnly\n ? typeof title === 'string'\n ? `Explore ${title}`\n : 'Explore data'\n : undefined)\n }\n aria-keyshortcuts={\n buttonProps['aria-keyshortcuts'] ??\n (enabled ? ariaKeyShortcuts(shortcuts.aboutData) : undefined)\n }\n onClick={event => {\n onClick?.(event);\n if (!event.defaultPrevented) owner.open(inspection);\n }}\n >\n {children ?? (\n <>\n <AppIcon name=\"info\" />\n {!iconOnly && 'Explore details'}\n </>\n )}\n </Button>\n );\n return hint == null ? (\n button\n ) : (\n <Tooltip content={hint} portalRoot={portalRoot}>\n {button}\n </Tooltip>\n );\n}\n",
18
+ "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 annotate: { modifier: 'mod', shift: true, code: 'Period', key: '.' },\n sendAnnotations: { modifier: 'mod', code: 'Enter', key: 'Enter' },\n refresh: { modifier: 'alt', code: 'KeyR', key: 'R' },\n aboutData: { modifier: 'alt', code: 'KeyI', key: 'I' },\n playStory: { modifier: 'mod', shift: true, 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\nexport function matchesShortcut(\n event: KeyboardEvent,\n shortcut: Shortcut\n): boolean {\n if (\n event.defaultPrevented ||\n event.repeat ||\n event.isComposing ||\n event.shiftKey !== (shortcut.shift ?? false) ||\n event.code !== shortcut.code\n )\n return false;\n const apple = isApple();\n const mod = apple ? event.metaKey : event.ctrlKey;\n return shortcut.modifier === 'alt'\n ? event.altKey && !event.ctrlKey && !event.metaKey\n : mod && !event.altKey && !(apple ? event.ctrlKey : event.metaKey);\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 allowWhileEditing = false\n): void {\n useEffect(() => {\n if (!enabled) return;\n\n function onKeyDown(event: KeyboardEvent) {\n if (\n !matchesShortcut(event, shortcut) ||\n document.querySelector('dialog:modal') ||\n (!allowWhileEditing && isEditingTarget(event.target))\n )\n return;\n event.preventDefault();\n event.stopImmediatePropagation();\n action();\n }\n\n document.addEventListener('keydown', onKeyDown, true);\n\n return () => document.removeEventListener('keydown', onKeyDown, true);\n }, [shortcut, enabled, allowWhileEditing, action]);\n}\n",
19
+ "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",
20
+ "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 queryText({ statement, params }: DisclosedQuery): string {\n const sql = formatSql(statement);\n return params && Object.keys(params).length\n ? `-- Parameters: ${JSON.stringify(params)}\\n${sql}`\n : sql;\n}\n\nfunction QueryFigure(query: DisclosedQuery) {\n const { name, statement, params } = query;\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(queryText(query));\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 {params && Object.keys(params).length > 0 && (\n <div className=\"altertable-query-parameters\">\n <span>Parameters</span>\n <dl aria-label={`Parameters for ${name}`}>\n {Object.entries(params).map(([key, value]) => (\n <div key={key}>\n <dt>\n <code>${key}</code>\n </dt>\n <dd>\n <code>{JSON.stringify(value)}</code>\n </dd>\n </div>\n ))}\n </dl>\n </div>\n )}\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(query => {\n const { name } = query;\n const formatted = queryText(query);\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 key={query.name} {...query} />\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 key={query.name} {...query} />\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 data-atbl-focus=\"ring\" data-atbl-control=\"action\">\n {summary}\n </summary>\n {figures}\n </details>\n );\n}\n",
21
+ "import {\n createContext,\n useContext,\n useEffect,\n useState,\n useSyncExternalStore,\n type ReactNode,\n type RefObject,\n} from 'react';\nimport {\n searchParams,\n subscribeSearch,\n writeSearch,\n} from '@/src/react/ui/search';\nimport {\n InspectionSheet,\n resolveAboutTab,\n type AboutDataProps,\n type AboutTab,\n} from '@/src/react/ui/AboutData';\n\ntype Inspection = {\n key: string;\n id: string;\n props: AboutDataProps;\n trigger: RefObject<HTMLButtonElement | null>;\n};\ntype Selection = {\n inspection: Inspection;\n open: boolean;\n tab: AboutTab;\n} | null;\n\n/** One selected subject and one sheet, even when several widgets reuse its evidence. */\nfunction createInspectionStore() {\n const subjects = new Map<string, Inspection>();\n const listeners = new Set<() => void>();\n let selection: Selection = null;\n function publish(next: Selection) {\n if (next === selection) return;\n const previous = selection;\n selection = next;\n if (\n previous?.open &&\n previous.inspection.props.open === undefined &&\n (!next?.open || previous.inspection.key !== next.inspection.key)\n )\n previous.inspection.props.onOpenChange?.(false);\n if (\n next?.open &&\n next.inspection.props.open === undefined &&\n (!previous?.open || previous.inspection.key !== next.inspection.key)\n )\n next.inspection.props.onOpenChange?.(true);\n listeners.forEach(listener => listener());\n }\n function sync() {\n const params = searchParams();\n const id = params.get('about');\n const inspection =\n selection && subjects.get(selection.inspection.key)?.id === id\n ? subjects.get(selection.inspection.key)\n : [...subjects.values()].find(subject => subject.id === id);\n const tab = resolveAboutTab(params.get('tab'));\n if (inspection?.props.open === false) inspection.props.onOpenChange?.(true);\n else if (inspection) publish({ inspection, open: true, tab });\n else if (selection?.open) {\n if (selection.inspection.props.open === true)\n selection.inspection.props.onOpenChange?.(false);\n else publish({ ...selection, open: false });\n }\n }\n function show(inspection: Inspection) {\n const tab = inspection.props.tab ?? 'glossary';\n publish({ inspection, open: true, tab });\n writeSearch(\n { about: inspection.id, tab },\n searchParams().get('about') === inspection.id ? 'replace' : 'push'\n );\n }\n function dismiss(key: string) {\n if (!selection?.open || selection.inspection.key !== key) return;\n publish({ ...selection, open: false });\n if (searchParams().get('about') === selection.inspection.id)\n writeSearch({ about: null, tab: null });\n }\n return {\n subscribe(this: void, listener: () => void) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n snapshot: () => selection,\n sync,\n register(inspection: Inspection) {\n const previous = subjects.get(inspection.key);\n subjects.set(inspection.key, inspection);\n if (selection?.inspection.key === inspection.key)\n publish({ ...selection, inspection });\n else if (\n (!previous || previous.id !== inspection.id) &&\n !selection?.open &&\n searchParams().get('about') === inspection.id\n )\n sync();\n },\n remove(key: string) {\n subjects.delete(key);\n if (selection?.inspection.key === key)\n publish({ ...selection, open: false });\n },\n open(inspection: Inspection) {\n if (inspection.props.open !== undefined)\n inspection.props.onOpenChange?.(true);\n else show(inspection);\n },\n close(key: string) {\n if (!selection?.open || selection.inspection.key !== key) return;\n if (selection.inspection.props.open !== undefined)\n selection.inspection.props.onOpenChange?.(false);\n else dismiss(key);\n },\n controlled(inspection: Inspection, open: boolean | undefined) {\n if (open === true) show(inspection);\n else if (open === false) dismiss(inspection.key);\n },\n selectTab(this: void, tab: AboutTab) {\n if (!selection) return;\n publish({ ...selection, tab });\n if (selection.open) writeSearch({ about: selection.inspection.id, tab });\n },\n };\n}\n\nexport const InspectionOwner = createContext<ReturnType<\n typeof createInspectionStore\n> | null>(null);\nexport const InspectionVisual = createContext(false);\n\nexport function InspectionProvider({ children }: { children: ReactNode }) {\n const parent = useContext(InspectionOwner);\n const [store] = useState(createInspectionStore);\n if (parent) return children;\n return (\n <InspectionOwner value={store}>\n {children}\n <InspectionHost />\n </InspectionOwner>\n );\n}\n\nfunction InspectionHost() {\n const store = useContext(InspectionOwner)!;\n const selection = useSyncExternalStore(\n store.subscribe,\n store.snapshot,\n () => null\n );\n useEffect(() => subscribeSearch(store.sync), [store]);\n if (!selection) return null;\n const { inspection, open, tab } = selection;\n return (\n <InspectionVisual value={true}>\n <InspectionSheet\n {...inspection.props}\n open={open}\n tab={tab}\n returnFocus={inspection.trigger}\n onOpenChange={next =>\n next ? store.open(inspection) : store.close(inspection.key)\n }\n onTabChange={store.selectTab}\n />\n </InspectionVisual>\n );\n}\n",
22
+ "import type { DataView } from '@/src/core/data-view';\nimport { 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 primaryView?: DataView<unknown, unknown>;\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",
23
+ "import { useState, type ComponentType, type ReactNode } from 'react';\nimport { DataAppContext } from '@/src/react/app-context';\nimport { InspectionProvider } from '@/src/react/ui/InspectionProvider';\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 {\n dataAppTitle,\n type DataAppDefinition,\n type QueryDefinitions,\n} from '@/src/core/config';\n\n/** Mount once per document; installs document identity and the shared request provider. */\nexport function mountDataApp<const Queries extends QueryDefinitions>({\n app,\n component: Component,\n root = document.getElementById('root'),\n}: {\n app: DataAppDefinition<Queries>;\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(app);\n getDataAppNavigation();\n createRoot(root, {\n onUncaughtError(error) {\n console.error(error);\n getDataAppTransport()?.fail();\n },\n }).render(\n <DataAppProvider app={app}>\n <Component />\n </DataAppProvider>\n );\n}\n\n/** Provide one app identity and shared requests to a custom React root. */\nexport function DataAppProvider<const Queries extends QueryDefinitions>({\n app,\n children,\n}: {\n app: DataAppDefinition<Queries>;\n children: ReactNode;\n}) {\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 (\n <DataAppContext value={app}>\n <QueryClientProvider client={client}>\n <InspectionProvider>{children}</InspectionProvider>\n </QueryClientProvider>\n </DataAppContext>\n );\n}\n",
24
+ "import { createContext, useContext } from 'react';\nimport type { DataAppConfig } from '@/src/core/config';\nimport { invariant } from '@/src/core/invariant';\n\nexport const DataAppContext = createContext<DataAppConfig | null>(null);\n\nexport function useDataApp() {\n const app = useContext(DataAppContext);\n invariant(app, 'Data app components require <DataAppProvider>.');\n return app;\n}\n",
25
+ "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",
26
+ "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 type { NumberFilter, BooleanFilter } from '@/src/core/filters';\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<Value, Kind extends string = string> = {\n kind: Kind;\n label?: string;\n urlKeys: readonly string[];\n defaultValue: Value;\n /** Unrestricted value, when this variable represents a filter. */\n clearValue?: Value;\n describe?: (value: Value) => string;\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 | SearchVariable\n | ChoiceVariable\n | MultiChoiceVariable\n | DateRangeVariable\n | DimensionVariable<any>\n | NumberFilter\n | BooleanFilter\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\nexport type SearchVariable = AppVariable<string, 'search'>;\nexport type ChoiceOption = { id: string; label: string; description?: string };\nexport type ChoiceVariable = AppVariable<string, 'choice'> & {\n options: readonly ChoiceOption[];\n};\nexport type MultiChoiceVariable = AppVariable<\n readonly string[],\n 'multiChoice'\n> & { options: readonly ChoiceOption[]; maxSelected: number };\n\n/** Search query state; typing replaces history by default. */\nexport function searchVariable({\n key,\n label,\n defaultValue = '',\n history = 'replace',\n}: ScalarVariableOptions): SearchVariable {\n return {\n kind: 'search',\n label: label ?? key,\n urlKeys: [key],\n defaultValue,\n clearValue: '',\n describe: value => value,\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/** Validate labeled choices before controls or URL state consume them. */\nexport function validateChoiceOptions(options: readonly ChoiceOption[]) {\n invariant(\n options.length > 0 &&\n options.every(option => !!option.id.trim() && !!option.label.trim()) &&\n new Set(options.map(option => option.id)).size === options.length,\n 'Choices require nonempty, unique IDs and labels.'\n );\n}\n\nexport function choiceVariable({\n key,\n label,\n defaultValue,\n options,\n history = 'push',\n}: ScalarVariableOptions & {\n defaultValue: string;\n options: readonly ChoiceOption[];\n}): ChoiceVariable {\n validateChoiceOptions(options);\n function valid(value: string) {\n return (\n typeof value === 'string' && options.some(option => option.id === value)\n );\n }\n invariant(\n valid(defaultValue),\n `Choice variable ${key} must include its default value.`\n );\n return {\n kind: 'choice',\n label: label ?? key,\n options,\n urlKeys: [key],\n defaultValue,\n history,\n describe: value => options.find(option => option.id === value)!.label,\n read(params) {\n const value = params.get(key);\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) => left === right,\n };\n}\n\nexport function multiChoiceVariable({\n key,\n label,\n defaultValue = [],\n options,\n maxSelected = options.length,\n history = 'push',\n}: Omit<ScalarVariableOptions, 'defaultValue'> & {\n defaultValue?: readonly string[];\n options: readonly ChoiceOption[];\n maxSelected?: number;\n}): MultiChoiceVariable {\n validateChoiceOptions(options);\n invariant(\n Number.isSafeInteger(maxSelected) &&\n maxSelected >= 1 &&\n maxSelected <= options.length,\n 'Invalid choice selection limit.'\n );\n function valid(value: readonly string[]) {\n return (\n Array.isArray(value) &&\n value.length <= maxSelected &&\n new Set(value).size === value.length &&\n value.every(id => options.some(option => option.id === id))\n );\n }\n function same(left: readonly string[], right: readonly string[]) {\n return left.length === right.length && left.every(id => right.includes(id));\n }\n invariant(valid(defaultValue), `Invalid default choices for ${key}.`);\n return {\n kind: 'multiChoice',\n label: label ?? key,\n options,\n maxSelected,\n urlKeys: [key],\n defaultValue,\n history,\n describe: values =>\n values\n .map(id => options.find(option => option.id === id)!.label)\n .join(', ') || 'None',\n read(params) {\n const raw = params.get(key);\n if (raw === null || raw.length > 4096) return defaultValue;\n try {\n const values = JSON.parse(raw);\n return valid(values) ? values : defaultValue;\n } catch {\n return defaultValue;\n }\n },\n write(value) {\n return {\n [key]: same(value, defaultValue)\n ? null\n : JSON.stringify(\n options\n .filter(option => value.includes(option.id))\n .map(option => option.id)\n ),\n };\n },\n valid,\n same,\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 start/end for period, otherwise key-prefixed fields. */\n key: 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};\n\nexport type DateRangeVariable = AppVariable<DateRangeSelection, 'dateRange'> & {\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 defaultValue,\n contract,\n history = 'push',\n comparison = false,\n}: DateRangeVariableOptions): DateRangeVariable {\n const startKey = key === 'period' ? 'start' : `${key}-start`;\n const endKey = key === 'period' ? 'end' : `${key}-end`;\n const comparisonKey = key === 'period' ? 'compare' : `${key}-compare`;\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 describe: selection =>\n contract.describeInput(variable.input(selection).range),\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",
27
+ "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 searchVariable,\n choiceVariable,\n multiChoiceVariable,\n dateRangeVariable,\n} from '@/src/core/variables';\nexport type {\n AppVariable,\n AppVariableValues,\n ChoiceOption,\n ChoiceVariable,\n MultiChoiceVariable,\n SearchVariable,\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 resetAll() {\n update(\n Object.fromEntries(\n Object.entries(definitions).map(([name, variable]) => [\n name,\n variable.defaultValue,\n ])\n ) as AppVariableValues<Variables>,\n 'push'\n );\n }\n\n function clearAll() {\n update(\n Object.fromEntries(\n Object.entries(definitions)\n .filter(([, variable]) => variable.clearValue !== undefined)\n .map(([name, variable]) => [name, variable.clearValue])\n ) as Partial<AppVariableValues<Variables>>,\n 'push'\n );\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, resetAll, clearAll, update, bind };\n}\n",
28
+ "import {\n Select as AriaSelect,\n Label,\n SelectValue,\n Popover,\n ListBox,\n ListBoxItem,\n} from 'react-aria-components';\nimport { PressButton } from '@/src/react/ui/Button';\nimport { AppIcon } from '@/src/react/ui/icons';\nimport { SelectionMark } from '@/src/react/ui/SelectionMark';\nimport { validateChoiceOptions, type ChoiceOption } from '@/src/core/variables';\nimport { invariant } from '@/src/core/invariant';\nimport { classNames } from '@/src/react/ui/classNames';\n\nexport type SelectProps = {\n label: string;\n options: readonly ChoiceOption[];\n value: string;\n onChange: (value: string) => void;\n disabled?: boolean;\n required?: boolean;\n name?: string;\n id?: string;\n className?: string;\n};\n/** Labeled single selection with keyboard navigation and a styled listbox. */\nexport function Select({\n label,\n options,\n value,\n onChange,\n disabled,\n required,\n className,\n ...props\n}: SelectProps) {\n validateChoiceOptions(options);\n const selected = options.find(option => option.id === value);\n invariant(selected, 'Select value must refer to an available option.');\n return (\n <AriaSelect\n {...props}\n selectedKey={value}\n onSelectionChange={key => {\n if (key !== null) onChange(String(key));\n }}\n isDisabled={disabled}\n isRequired={required}\n className={classNames('altertable-select', className)}\n >\n <Label>{label}</Label>\n <PressButton className=\"altertable-select-trigger\">\n <SelectValue>{selected.label}</SelectValue>\n <AppIcon name=\"disclosure\" size={14} />\n </PressButton>\n <Popover className=\"altertable-select-popover\" placement=\"bottom start\">\n <ListBox\n items={options}\n aria-label={`${label} values`}\n className=\"altertable-select-options\"\n >\n {option => (\n <ListBoxItem\n id={option.id}\n textValue={option.label}\n className=\"altertable-select-option\"\n data-atbl-control=\"action\"\n data-atbl-internal-surface=\"option\"\n data-atbl-focus=\"inset\"\n >\n {({ isSelected }) => (\n <>\n <SelectionMark selected={isSelected} multiple={false} />\n <span>\n {option.label}\n {option.description && <small>{option.description}</small>}\n </span>\n </>\n )}\n </ListBoxItem>\n )}\n </ListBox>\n </Popover>\n </AriaSelect>\n );\n}\n",
29
+ "/** Decorative selection indicator; the containing control owns its accessible semantics. */\nexport function SelectionMark({\n selected,\n multiple = true,\n}: {\n selected: boolean;\n multiple?: boolean;\n}) {\n return (\n <span\n className=\"altertable-selection-mark\"\n data-selected={selected || undefined}\n data-multiple={multiple || undefined}\n aria-hidden=\"true\"\n />\n );\n}\n",
30
+ "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",
31
+ "import { Button } from '@/src/react/ui/Button';\nimport { IconButton } from '@/src/react/ui/IconButton';\nexport type FilterActionsProps = {\n onClear?: () => void;\n} & (\n | { onApply: () => void; onCancel: () => void }\n | { onApply?: never; onCancel?: never }\n);\nexport function FilterActions({\n onClear,\n onApply,\n onCancel,\n}: FilterActionsProps) {\n return (\n <fieldset className=\"altertable-filter-actions\">\n <legend className=\"altertable-sr-only\">Filter actions</legend>\n {onClear && (\n <IconButton\n icon=\"clearFilters\"\n label=\"Clear filters\"\n variant=\"ghost\"\n onClick={onClear}\n />\n )}\n {onCancel && <Button onClick={onCancel}>Cancel</Button>}\n {onApply && (\n <Button variant=\"primary\" onClick={onApply}>\n Apply filters\n </Button>\n )}\n </fieldset>\n );\n}\n",
32
+ "import { useState } from 'react';\nimport type { ComponentPropsWithRef } from 'react';\nimport {\n NumberField as AriaNumberField,\n Label,\n Input,\n Group,\n} from 'react-aria-components';\nimport { classNames } from '@/src/react/ui/classNames';\n\nexport type NumberFieldProps = Omit<\n ComponentPropsWithRef<typeof AriaNumberField>,\n 'value' | 'onChange' | 'className'\n> & {\n label: string;\n value: number | null;\n onChange: (value: number | null) => void;\n className?: string;\n};\n/** Localized numeric entry. Empty input is null rather than zero. */\nexport function NumberField({\n label,\n value,\n onChange,\n className,\n ...props\n}: NumberFieldProps) {\n return (\n <AriaNumberField\n {...props}\n value={value ?? NaN}\n onChange={value => onChange(Number.isFinite(value) ? value : null)}\n className={classNames('altertable-number-field', className)}\n >\n <Label>{label}</Label>\n <Group data-atbl-internal-surface=\"field\" data-atbl-focus=\"group\">\n <Input data-atbl-control=\"text\" />\n </Group>\n </AriaNumberField>\n );\n}\nexport type NumberRange = { min?: number; max?: number };\nexport type NumberRangeFieldProps = {\n label: string;\n value: NumberRange;\n onChange: (value: NumberRange) => void;\n /** Reports whether the current draft interval can be committed. */\n onValidityChange?: (valid: boolean) => void;\n min?: number;\n max?: number;\n disabled?: boolean;\n className?: string;\n};\n/** Commit valid intervals; retain invalid draft bounds so users can correct them. */\nexport function NumberRangeField({\n label,\n value,\n onChange,\n onValidityChange,\n min,\n max,\n disabled,\n className,\n}: NumberRangeFieldProps) {\n const [draft, setDraft] = useState(value);\n const [previous, setPrevious] = useState(value);\n if (previous.min !== value.min || previous.max !== value.max) {\n setPrevious(value);\n setDraft(value);\n }\n const invalid =\n draft.min !== undefined && draft.max !== undefined && draft.min > draft.max;\n function change(bound: 'min' | 'max', number: number | null) {\n const next = { ...draft, [bound]: number ?? undefined };\n setDraft(next);\n const valid =\n next.min === undefined || next.max === undefined || next.min <= next.max;\n onValidityChange?.(valid);\n if (valid) onChange(next);\n }\n return (\n <fieldset\n className={classNames('altertable-number-range-field', className)}\n disabled={disabled}\n >\n <legend>{label}</legend>\n <NumberField\n label=\"Minimum\"\n value={draft.min ?? null}\n onChange={number => change('min', number)}\n minValue={min}\n maxValue={max}\n isInvalid={invalid}\n />\n <NumberField\n label=\"Maximum\"\n value={draft.max ?? null}\n onChange={number => change('max', number)}\n minValue={min}\n maxValue={max}\n isInvalid={invalid}\n />\n {invalid && <p role=\"alert\">Minimum must not exceed maximum.</p>}\n </fieldset>\n );\n}\n",
33
+ "import { useState } from 'react';\nimport { DialogTrigger, Dialog, Popover } from 'react-aria-components';\nimport { PressButton } from '@/src/react/ui/Button';\nimport { AppIcon } from '@/src/react/ui/icons';\nimport { Select } from '@/src/react/ui/Select';\nimport {\n NumberField,\n NumberRangeField,\n type NumberRange,\n} from '@/src/react/ui/NumberField';\nimport {\n numberOperatorLabels,\n type NumberFilter,\n type NumberOperator,\n type NumberSelection,\n} from '@/src/core/filters';\n\nexport type NumberFilterPickerProps = {\n filter: NumberFilter;\n value: NumberSelection;\n onChange: (value: NumberSelection) => void;\n disabled?: boolean;\n};\ntype NumberCondition = 'all' | 'range' | NumberOperator;\n\nconst conditionOptions = [\n { id: 'all', label: 'Any value' },\n { id: 'range', label: 'Between' },\n ...Object.entries(numberOperatorLabels).map(([id, label]) => ({ id, label })),\n];\n\n/** Edit a numeric predicate in a panel. Apply commits one complete value; dismissing discards the draft. */\nexport function NumberFilterPicker({\n filter,\n value,\n onChange,\n disabled,\n}: NumberFilterPickerProps) {\n const [open, setOpen] = useState(false);\n const summary = filter.describe?.(value);\n return (\n <DialogTrigger isOpen={open} onOpenChange={setOpen}>\n <PressButton\n className=\"altertable-picker-trigger\"\n aria-label={`${filter.label}: ${summary}`}\n isDisabled={disabled}\n >\n <span className=\"altertable-picker-label\">{filter.label}</span>\n <strong className=\"altertable-picker-value\">{summary}</strong>\n <AppIcon name=\"disclosure\" size={14} />\n </PressButton>\n <Popover\n className=\"altertable-number-filter-popover\"\n placement=\"bottom start\"\n >\n <Dialog\n aria-label={`${filter.label} filter`}\n className=\"altertable-number-filter-dialog\"\n >\n <NumberFilterEditor\n key={JSON.stringify(value)}\n filter={filter}\n value={value}\n onApply={next => {\n onChange(next);\n setOpen(false);\n }}\n onCancel={() => setOpen(false)}\n />\n </Dialog>\n </Popover>\n </DialogTrigger>\n );\n}\nfunction NumberFilterEditor({\n filter,\n value,\n onApply,\n onCancel,\n}: {\n filter: NumberFilter;\n value: NumberSelection;\n onApply: (value: NumberSelection) => void;\n onCancel: () => void;\n}) {\n const [condition, setCondition] = useState<NumberCondition>(\n value.kind === 'comparison' ? value.operator : value.kind\n );\n const [comparisonValue, setComparisonValue] = useState<number | null>(\n value.kind === 'comparison'\n ? value.value\n : value.kind === 'range'\n ? (value.min ?? value.max ?? null)\n : null\n );\n const [range, setRange] = useState<NumberRange>(\n value.kind === 'range' ? { min: value.min, max: value.max } : {}\n );\n const [rangeValid, setRangeValid] = useState(true);\n const [submitted, setSubmitted] = useState(false);\n const selection: NumberSelection =\n condition === 'all'\n ? { kind: 'all' }\n : condition === 'range'\n ? { kind: 'range', ...range }\n : {\n kind: 'comparison',\n operator: condition,\n value: comparisonValue ?? NaN,\n };\n const valid =\n filter.valid(selection) && (condition !== 'range' || rangeValid);\n return (\n <form\n className=\"altertable-number-filter-editor\"\n onSubmit={event => {\n event.preventDefault();\n if (valid) onApply(selection);\n else setSubmitted(true);\n }}\n >\n <h3>{filter.label}</h3>\n <Select\n label=\"Condition\"\n value={condition}\n onChange={next => {\n setCondition(next as NumberCondition);\n setRangeValid(true);\n setSubmitted(false);\n }}\n options={conditionOptions}\n />\n {condition === 'range' ? (\n <NumberRangeField\n label=\"Bounds\"\n value={range}\n onChange={setRange}\n onValidityChange={setRangeValid}\n min={filter.min}\n max={filter.max}\n />\n ) : condition !== 'all' ? (\n <NumberField\n label=\"Value\"\n value={comparisonValue}\n onChange={setComparisonValue}\n minValue={filter.min}\n maxValue={filter.max}\n />\n ) : null}\n {submitted && (\n <p role=\"alert\" className=\"altertable-number-filter-feedback\">\n {!valid\n ? condition === 'range'\n ? 'Enter at least one bound.'\n : 'Enter a value.'\n : null}\n </p>\n )}\n <div className=\"altertable-number-filter-actions\">\n {value.kind !== 'all' && (\n <PressButton variant=\"ghost\" onPress={() => onApply({ kind: 'all' })}>\n Clear\n </PressButton>\n )}\n <PressButton onPress={onCancel}>Cancel</PressButton>\n <PressButton\n type=\"submit\"\n variant=\"primary\"\n isDisabled={condition === 'range' && !rangeValid}\n >\n Apply\n </PressButton>\n </div>\n </form>\n );\n}\n",
34
+ "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 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 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 variant=\"ghost\"\n size=\"icon-compact\"\n aria-label={`Clear ${label.toLowerCase()}`}\n onClick={() => onChange(resetValue)}\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",
35
+ "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 focusRing = true,\n size = 'default',\n endAction,\n loading = false,\n className,\n ...props\n}: Omit<ComponentPropsWithRef<'input'>, 'size' | 'children'> & {\n size?: 'default' | 'compact';\n /** Picker search delegates focus indication to the active option. */\n focusRing?: boolean;\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\n data-atbl-internal-surface={focusRing ? 'field' : undefined}\n data-atbl-focus={focusRing ? 'group' : undefined}\n className=\"altertable-search-input-wrap\"\n data-size={size}\n >\n <AppIcon\n name={loading ? 'loading' : 'search'}\n size={17}\n className={loading ? 'altertable-search-input-spinner' : undefined}\n />\n <input\n data-atbl-control=\"text\"\n {...props}\n type=\"search\"\n className={classNames('altertable-search-input', className)}\n />\n {endAction}\n </div>\n );\n}\n",
36
+ "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 /** Align a text-sized placeholder with surrounding prose. */\n inline?: boolean;\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({ inline, className, ...props }: SkeletonProps) {\n return (\n <span\n {...props}\n aria-hidden=\"true\"\n data-inline={inline || undefined}\n className={classNames('altertable-skeleton', className)}\n />\n );\n}\n",
37
+ "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",
38
+ "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",
39
+ "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\nimport type { ChoiceOption } from '@/src/core/variables';\nexport type { ChoiceOption } from '@/src/core/variables';\n\ntype SharedProps = {\n label: string;\n options: readonly ChoiceOption[];\n /** Separate source state, rendered last with a divider and the shared option component. */\n missingOption?: ChoiceOption;\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 SingleChoicePickerProps = SharedProps & {\n selectionMode: 'single';\n value: string;\n onChange: (value: string) => void;\n values?: never;\n maxSelected?: never;\n emptySelectionLabel?: never;\n};\nexport type MultiChoicePickerProps = SharedProps & {\n selectionMode: 'multiple';\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};\nexport type ChoicePickerProps =\n | SingleChoicePickerProps\n | MultiChoicePickerProps;\n\n/** Searchable selection picker with one focus and popup model for single and multiple values. */\nexport function ChoicePicker(props: ChoicePickerProps) {\n const multiple = props.selectionMode === 'multiple';\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 'ChoicePicker option IDs must be nonempty and unique.'\n );\n invariant(\n !multiple ||\n (Number.isSafeInteger(props.maxSelected) && props.maxSelected >= 1),\n 'ChoicePicker maxSelected must be a positive integer.'\n );\n invariant(\n !multiple ||\n (new Set(chosen).size === chosen.length &&\n chosen.length <= props.maxSelected),\n 'ChoicePicker selection must be unique and within maxSelected.'\n );\n invariant(\n loading || error || chosen.every(id => ids.includes(id)),\n 'ChoicePicker selection must refer to available option IDs.'\n );\n invariant(\n !multiple || !!props.emptySelectionLabel.trim(),\n 'ChoicePicker 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 && chosen.length > 0;\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 setSearch('');\n }\n }\n }\n\n function clear() {\n if (multiple) props.onChange([]);\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-picker-trigger\"\n isDisabled={disabled}\n aria-label={`${label}: ${display}`}\n >\n <span className=\"altertable-picker-label\" aria-hidden=\"true\">\n {label}\n </span>\n <strong className=\"altertable-picker-value\" aria-hidden=\"true\">\n {display}\n </strong>\n <AppIcon name=\"disclosure\" size={14} />\n </Button>\n <Popover\n className=\"altertable-choice-picker-popover\"\n placement=\"bottom start\"\n >\n <Dialog\n id={popupId}\n aria-label={`${label} options`}\n className=\"altertable-choice-picker-dialog\"\n >\n <SearchInput\n focusRing={false}\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-choice-picker-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-choice-picker-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=\"toggle\"\n escapeKeyBehavior=\"none\"\n disallowEmptySelection={!multiple}\n selectedKeys={selected}\n onSelectionChange={select}\n >\n {hit => (\n <ListBoxItem\n data-atbl-internal-surface=\"option\"\n data-atbl-focus=\"inset\"\n data-atbl-control=\"action\"\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\n selected={selected.has(hit.item.id)}\n multiple={multiple}\n />\n <span className=\"altertable-choice-picker-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\n className=\"altertable-choice-picker-skeletons\"\n aria-hidden=\"true\"\n >\n {[0, 1, 2].map(row => (\n <Skeleton key={row} />\n ))}\n </div>\n ) : (\n <div className=\"altertable-choice-picker-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-choice-picker-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",
40
+ "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",
41
+ "import { createContext, useContext, useId, type ReactNode } from 'react';\nimport { invariant } from '@/src/core/invariant';\nimport { SelectionMark } from '@/src/react/ui/SelectionMark';\nimport { classNames } from '@/src/react/ui/classNames';\n\nexport const CheckboxGroupContext = createContext<{\n values: readonly string[];\n disabled?: boolean;\n onChange: (value: string, checked: boolean) => void;\n} | null>(null);\nexport type CheckboxProps = {\n label: string;\n description?: ReactNode;\n disabled?: boolean;\n className?: string;\n} & (\n | { value: string; checked?: never; onChange?: never }\n | { value?: never; checked: boolean; onChange: (checked: boolean) => void }\n);\nexport function Checkbox({\n label,\n description,\n checked,\n value,\n onChange,\n disabled,\n className,\n}: CheckboxProps) {\n const group = useContext(CheckboxGroupContext);\n const descriptionId = useId();\n invariant(\n value === undefined || group,\n 'A checkbox with value must belong to a CheckboxGroup.'\n );\n const selected =\n value === undefined ? checked : group!.values.includes(value);\n return (\n <label\n data-atbl-focus=\"ring\"\n data-atbl-control=\"action\"\n className={classNames('altertable-checkbox', className)}\n >\n <input\n type=\"checkbox\"\n value={value}\n checked={selected}\n aria-label={label}\n aria-describedby={description ? descriptionId : undefined}\n disabled={disabled || group?.disabled}\n onChange={event => {\n if (value === undefined) onChange!(event.currentTarget.checked);\n else group!.onChange(value, event.currentTarget.checked);\n }}\n />\n <SelectionMark selected={selected} />\n <span>\n {label}\n {description && <small id={descriptionId}>{description}</small>}\n </span>\n </label>\n );\n}\n",
42
+ "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 data-invalid={error || props.isInvalid ? true : undefined}\n data-disabled={props.isDisabled || undefined}\n data-atbl-internal-surface=\"field\"\n data-atbl-focus=\"group\"\n >\n <DateInput slot=\"start\">\n {segment => (\n <DateSegment\n data-atbl-focus=\"inset\"\n data-atbl-internal-focus-state=\"focused\"\n data-atbl-control=\"text\"\n segment={segment}\n />\n )}\n </DateInput>\n <span aria-hidden=\"true\">–</span>\n <DateInput slot=\"end\">\n {segment => (\n <DateSegment\n data-atbl-focus=\"inset\"\n data-atbl-internal-focus-state=\"focused\"\n data-atbl-control=\"text\"\n segment={segment}\n />\n )}\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 data-atbl-focus=\"ring\"\n data-atbl-control=\"action\"\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\n data-atbl-internal-surface=\"control\"\n data-atbl-focus=\"ring\"\n data-atbl-control=\"action\"\n aria-label=\"Choose dates\"\n >\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 data-atbl-internal-surface=\"option\"\n data-atbl-focus=\"inset\"\n data-atbl-control=\"action\"\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\n data-atbl-internal-surface=\"control\"\n data-atbl-focus=\"ring\"\n data-atbl-control=\"action\"\n slot=\"previous\"\n aria-label=\"Previous month\"\n >\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 data-atbl-internal-surface=\"control\"\n data-atbl-focus=\"ring\"\n data-atbl-control=\"action\"\n >\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 data-atbl-internal-surface=\"option\"\n data-atbl-focus=\"inset\"\n data-atbl-control=\"action\"\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 data-atbl-internal-surface=\"control\"\n data-atbl-focus=\"ring\"\n data-atbl-control=\"action\"\n >\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 data-atbl-internal-surface=\"option\"\n data-atbl-focus=\"inset\"\n data-atbl-control=\"action\"\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\n data-atbl-internal-surface=\"control\"\n data-atbl-focus=\"ring\"\n data-atbl-control=\"action\"\n slot=\"next\"\n aria-label=\"Next month\"\n >\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 => (\n <CalendarCell\n data-atbl-focus=\"inset\"\n data-atbl-control=\"action\"\n date={date}\n />\n )}\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",
43
+ "import type { ComponentPropsWithRef } from 'react';\nimport { classNames } from '@/src/react/ui/classNames';\nexport type FilterBarProps = ComponentPropsWithRef<'div'>;\nexport function FilterBar({\n className,\n role = 'group',\n 'aria-label': label = 'Filters',\n ...props\n}: FilterBarProps) {\n return (\n <div\n {...props}\n role={role}\n aria-label={label}\n className={classNames('altertable-filter-bar', className)}\n />\n );\n}\n",
44
+ "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 { ChoicePicker, type ChoiceOption } from '@/src/react/ui/ChoicePicker';\nimport { Select } from '@/src/react/ui/Select';\nimport { FilterBar } from '@/src/react/ui/FilterBar';\n\nconst allKey = 'all';\n\n/** Adapts the typed dimension contract to the shared ChoicePicker 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 === 'all' ? [] : value.members;\n const mode = value.kind === 'exclude' ? 'exclude' : 'include';\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: ChoiceOption[] = 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 let missingOption: ChoiceOption | undefined;\n if (filter.allowMissing) {\n const member = { kind: 'missing' as const };\n const id = dimensionMemberKey(member);\n byKey.set(id, member);\n missingOption = {\n id,\n label: 'No value',\n description: `Records without a ${filter.label.toLocaleLowerCase()} value`,\n };\n }\n\n const picker =\n filter.selectionMode === 'single' ? (\n <ChoicePicker\n selectionMode=\"single\"\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: mode, members: [member] });\n }}\n options={[{ id: allKey, label: 'All' }, ...choices]}\n missingOption={missingOption}\n loading={loading}\n error={error}\n onRetry={onRetry}\n emptyMessage={error ? 'Couldn’t load values' : 'No matching values'}\n />\n ) : (\n <ChoicePicker\n selectionMode=\"multiple\"\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: mode, 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 return filter.allowExclusion ? (\n <FilterBar aria-label={`${filter.label} filter`}>\n <Select\n label={`${filter.label} matching`}\n value={mode}\n options={[\n { id: 'include', label: 'Include' },\n { id: 'exclude', label: 'Exclude' },\n ]}\n onChange={next => {\n if (members.length)\n onChange({ kind: next as 'include' | 'exclude', members });\n }}\n disabled={!members.length}\n />\n {picker}\n </FilterBar>\n ) : (\n picker\n );\n}\n",
45
+ "import type { DataContext } from '@/src/react/ui/data-context';\nimport { createContext } from 'react';\nimport type { ReactNode } from 'react';\nimport type { DataView, DisplayedSnapshot } from '@/src/core/data-view';\nimport type { DisclosedQuery } from '@/src/core/contract';\nimport type { EmptyContent } from '@/src/react/ui/presentation';\n\nexport type ViewResult<Data, Input> = {\n dataContext: DataContext;\n view: DataView<Data, Input>;\n snapshot?: DisplayedSnapshot<Data, Input>;\n refetch: () => unknown;\n cancel: () => unknown;\n refreshing: boolean;\n queries?: DisclosedQuery[];\n controls?: ReactNode;\n emptyFallback: EmptyContent;\n};\n\n/** The executor is private; declarations expose data composition, not subscription hooks. */\nexport class DeclaredView<Data, Input, Definition = unknown> {\n #definition: Definition | undefined;\n #useResult: () => ViewResult<Data, Input>;\n constructor(\n useResult: () => ViewResult<Data, Input>,\n definition?: Definition\n ) {\n this.#definition = definition;\n this.#useResult = useResult;\n }\n static definition<Data, Input, Definition>(\n view: DeclaredView<Data, Input, Definition>\n ): Definition {\n if (view.#definition === undefined)\n throw new Error('Missing view definition.');\n return view.#definition;\n }\n static useResult<Data, Input>(\n view: DeclaredView<Data, Input>\n ): ViewResult<Data, Input> {\n return view.#useResult();\n }\n}\n\nexport function useDeclaredResult<Data, Input>(\n view: DeclaredView<Data, Input>\n): ViewResult<Data, Input> {\n return DeclaredView.useResult(view);\n}\n\nexport const PrimaryViewContext = createContext<{\n declaration: object;\n result: ViewResult<unknown, unknown>;\n} | null>(null);\n\nexport function getViewDefinition<Data, Input, Definition>(\n view: DeclaredView<Data, Input, Definition>\n): Definition {\n return DeclaredView.definition(view);\n}\n",
46
+ "import { invariant } from '@/src/core/invariant';\n\n// Ownership follows the source object supplied by content, stories, or exports.\nconst owners = new WeakMap<object, object>();\n\nexport function ownedSource<Source extends object>(\n owner: object,\n source: Source\n): Source {\n const displayed = { ...source };\n owners.set(displayed, owner);\n return displayed;\n}\n\nexport function assertSourceOwner(owner: object, source: object): void {\n invariant(\n owners.get(source) === owner,\n 'A binding requires the displayed source from its own view.'\n );\n}\n",
47
+ "import { assertSourceOwner } from '@/src/react/source-owner';\nimport type { EvidenceDeclaration } from '@/src/react/ui/data-context';\nimport type { ReactNode } from 'react';\nimport type { DateRangeRequest } from '@/src/core/contract';\nimport type { DataView, DisplayedSnapshot } from '@/src/core/data-view';\nimport { formatMetric } from '@/src/core/format';\nimport type { MetricFormat } from '@/src/core/format';\nimport type { DataReading, MetricValues } from '@/src/core/reading';\nimport { invariant } from '@/src/core/invariant';\nimport type { CsvCell, CsvTable, CsvExport } from '@/src/react/ui/csv-export';\nimport type { MetricDefinition } from '@/src/react/ui/metric';\nimport type { EmptyContent } from '@/src/react/ui/presentation';\nimport type { TableWidgetColumn } from '@/src/react/ui/TableWidget';\nimport type { WidgetEvidence } from '@/src/react/ui/WidgetEvidence';\n\n/** Displayed data, or an initial loading reading. Pending filter values are never a source. */\nexport type ViewSource<Data, Input> =\n | { loading: true }\n | { loading?: false; data: Data; input: Input };\ntype SourceReading<Source, Value> = Source extends { loading: true }\n ? { loading: true }\n : { loading: false; value: Value };\n\nfunction readSource<Data, Input, Value, Source extends ViewSource<Data, Input>>(\n source: Source,\n select: (data: Data, input: Input) => Value\n): SourceReading<Source, Value> {\n // The generic return preserves a ready snapshot's value for story authors.\n return (\n source.loading\n ? { loading: true }\n : { loading: false, value: select(source.data, source.input) }\n ) as SourceReading<Source, Value>;\n}\n\n/** Keys supply IDs; accessors supply raw CSV values. Formats affect display only. */\nexport type DatasetColumn<Row> = { label?: string } & (\n | { value: (row: Row) => CsvCell; format?: (row: Row) => ReactNode }\n | { value: (row: Row) => number | null | undefined; format: MetricFormat }\n);\n\nexport type DatasetDefinition<Data, Input, Row, Evidence = WidgetEvidence> = {\n name: string;\n select: (data: Data, input: Input) => readonly Row[];\n columns: Record<string, DatasetColumn<NoInfer<Row>>>;\n rowKey: (row: NoInfer<Row>) => string | number;\n evidence: Evidence;\n emptyFallback?: EmptyContent;\n};\n\n/** Authoring references are registered by the owning view. */\nexport type DatasetDeclaration<Data, Input, Row> = DatasetDefinition<\n Data,\n Input,\n Row,\n EvidenceDeclaration\n>;\n\n/** Real view ownership and registered references, shared by metrics and datasets. */\nexport class RegisteredBinding {\n #owner?: object;\n #evidence?: WidgetEvidence;\n constructor(owner?: object, evidence?: WidgetEvidence) {\n this.#owner = owner;\n this.#evidence = evidence;\n }\n protected assertSource(source: object) {\n if (this.#owner) assertSourceOwner(this.#owner, source);\n }\n static evidence(binding: RegisteredBinding, owner: object): WidgetEvidence {\n invariant(\n binding instanceof RegisteredBinding,\n 'Story evidence must be a registered metric or dataset binding.'\n );\n invariant(\n binding.#owner === owner,\n 'Story evidence must belong to the story view.'\n );\n invariant(\n binding.#evidence,\n 'Story evidence must have registered references.'\n );\n return binding.#evidence;\n }\n}\nexport function registeredEvidence(\n binding: RegisteredBinding,\n owner: object\n): WidgetEvidence {\n return RegisteredBinding.evidence(binding, owner);\n}\n\nexport class ExportDataset<Data, Input> extends RegisteredBinding {\n #csv: (snapshot: DisplayedSnapshot<Data, Input>) => CsvTable;\n constructor(\n readonly name: string,\n csv: (snapshot: DisplayedSnapshot<Data, Input>) => CsvTable,\n owner?: object,\n evidence?: WidgetEvidence\n ) {\n super(owner, evidence);\n this.#csv = csv;\n }\n static csv<Data, Input>(\n dataset: ExportDataset<Data, Input>,\n snapshot: DisplayedSnapshot<Data, Input>\n ) {\n dataset.assertSource(snapshot);\n return dataset.#csv(snapshot);\n }\n}\n\nexport class Dataset<Data, Input, Row> extends ExportDataset<Data, Input> {\n readonly evidence: WidgetEvidence;\n #select: (data: Data, input: Input) => readonly Row[];\n #table: {\n title: string;\n columns: [TableWidgetColumn<Row>, ...TableWidgetColumn<Row>[]];\n rowKey: (row: Row) => string | number;\n evidence: WidgetEvidence;\n emptyFallback: EmptyContent;\n };\n constructor(definition: DatasetDefinition<Data, Input, Row>, owner?: object) {\n invariant(!!definition.name.trim(), 'A dataset needs a name.');\n const ids = Object.keys(definition.columns);\n invariant(\n ids.length > 0 && ids.every(id => !!id.trim()),\n 'A dataset needs nonempty column IDs.'\n );\n const { select, rowKey } = definition;\n const fields = Object.entries(definition.columns).map(([id, column]) => ({\n ...column,\n id,\n label:\n column.label?.trim() ||\n id\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/[_-]+/g, ' ')\n .trim()\n .toLowerCase()\n .replace(/^./u, letter => letter.toUpperCase()) ||\n id,\n }));\n const columns = fields.map(column => ({\n id: column.id,\n header: column.label,\n type:\n column.format && typeof column.format !== 'function'\n ? ('number' as const)\n : undefined,\n cell(row: Row): ReactNode {\n if (typeof column.format === 'function') return column.format(row);\n const value = column.value(row);\n if (value === null || value === undefined) return '—';\n return column.format\n ? formatMetric(value as number, column.format)\n : String(value);\n },\n })) as [TableWidgetColumn<Row>, ...TableWidgetColumn<Row>[]];\n\n super(\n definition.name,\n snapshot => ({\n name: definition.name,\n columns: fields.map(column => column.label),\n rows: select(snapshot.data, snapshot.input).map(row =>\n fields.map(column => column.value(row))\n ),\n }),\n owner,\n definition.evidence\n );\n this.evidence = definition.evidence;\n this.#select = select;\n this.#table = {\n title: definition.name,\n columns,\n rowKey,\n evidence: definition.evidence,\n emptyFallback: definition.emptyFallback ?? { title: 'No results' },\n };\n }\n read = <Source extends ViewSource<Data, Input>>(source: Source) => {\n this.assertSource(source);\n return readSource<Data, Input, readonly Row[], Source>(\n source,\n this.#select\n );\n };\n static table<Data, Input, Row>(\n dataset: Dataset<Data, Input, Row>,\n source: ViewSource<Data, Input>\n ) {\n return { ...dataset.#table, reading: dataset.read(source) };\n }\n}\n\nexport function bindDataset<Data, Input, Row>(\n definition: DatasetDefinition<Data, Input, Row>,\n owner?: object\n) {\n return new Dataset(definition, owner);\n}\n\nexport function datasetTable<Data, Input, Row>(\n dataset: Dataset<Data, Input, Row>,\n source: ViewSource<Data, Input>\n) {\n return Dataset.table(dataset, source);\n}\nexport function datasetCsv<Data, Input>(\n dataset: ExportDataset<Data, Input>,\n snapshot: DisplayedSnapshot<Data, Input>\n) {\n return ExportDataset.csv(dataset, snapshot);\n}\n\nexport class Metric<Data, Input> extends RegisteredBinding {\n #select: (data: Data, input: Input) => MetricValues;\n #date?: (input: Input) => DateRangeRequest;\n constructor(\n readonly definition: MetricDefinition,\n select: (data: Data, input: Input) => MetricValues,\n date?: (input: Input) => DateRangeRequest,\n owner?: object\n ) {\n super(owner, definition.evidence);\n this.#select = select;\n this.#date = date;\n }\n read = <Source extends ViewSource<Data, Input>>(source: Source) => {\n this.assertSource(source);\n return readSource<\n Data,\n Input,\n MetricValues & { period?: DateRangeRequest },\n Source\n >(source, (data, input) => {\n const values = this.#select(data, input);\n invariant(\n values.previous === undefined || this.#date,\n 'Metric comparisons require a view date binding.'\n );\n return { ...values, period: this.#date?.(input) };\n });\n };\n}\nexport function bindMetric<Data, Input>(\n definition: MetricDefinition,\n select: (data: Data, input: Input) => MetricValues,\n date?: (input: Input) => DateRangeRequest,\n owner?: object\n) {\n return new Metric(definition, select, date, owner);\n}\n\nexport function displayedScope<Data, Input>(\n view: DataView<Data, Input>,\n describeInput: (input: Input) => string\n): DataReading<string> {\n if (view.kind === 'loading' || view.kind === 'error')\n return { loading: true };\n const input =\n view.kind === 'updating' || view.kind === 'stale-error'\n ? view.displayedInput\n : view.input;\n return { loading: false, value: describeInput(input) };\n}\n\nexport function exportDatasets<Data, Input>(\n datasets: readonly [\n ExportDataset<Data, Input>,\n ...ExportDataset<Data, Input>[],\n ],\n snapshot: DisplayedSnapshot<Data, Input>,\n scope: string,\n appTitle: string\n): CsvExport {\n const name = datasets.length === 1 ? datasets[0].name : appTitle;\n const filename =\n `${name}-${scope}`\n .toLowerCase()\n .replace(/[^\\p{L}\\p{N}]+/gu, '-')\n .replace(/^-|-$/g, '')\n .slice(0, 200) || 'data';\n return {\n filename,\n tables: datasets.map(dataset => datasetCsv(dataset, snapshot)) as [\n CsvTable,\n ...CsvTable[],\n ],\n };\n}\n",
48
+ "import { randomUuid } from '@/src/core/uuid';\nimport { DeclaredView } from '@/src/react/view-runtime';\nimport {\n bindDataset,\n bindMetric,\n displayedScope,\n type DatasetDefinition,\n} from '@/src/react/bindings';\nimport type { AuthoringDataContext } from '@/src/react/ui/data-context';\nimport type { MetricValues } from '@/src/core/reading';\nimport type { DisplayedSnapshot } from '@/src/core/data-view';\nimport { 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 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 { ViewContent, type DataContentState } from '@/src/react/content';\nimport {\n describeViewInput,\n resolveViewInput,\n type DataViewDefinition,\n type ResolvedDataViewDefinition,\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 = 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/** Bind declared operations to URL variables, displayed readings, and request feedback. */\nexport function createDataHooks<Operations extends DataOperations>(\n client: DataClient<Operations>\n) {\n const clientScope = getClientScope(client);\n\n function useDataQuery<Name extends keyof Operations & string>(\n name: Name,\n input: InputOf<Operations[Name]>\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 });\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. */\n\n function useDataView<Name extends keyof Operations & string>(\n name: Name,\n input: InputOf<Operations[Name]>,\n options: {\n isEmpty: (data: OutputOf<Operations[Name]>) => boolean;\n describeInput?: (input: InputOf<Operations[Name]>) => string;\n }\n ) {\n const query = useDataQuery(name, input);\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 function sameInput(\n left: InputOf<Operations[Name]>,\n right: InputOf<Operations[Name]>\n ) {\n return hashKey([left]) === hashKey([right]);\n }\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: options.describeInput ?? (() => '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 refreshing: query.isFetching,\n };\n }\n\n /** Omitted variables resolve to {}; matching operation inputs derive from those values.\n * Supply a mapper for nested or different input shapes. */\n function defineDataView<\n Name extends keyof Operations & string,\n const Variables extends VariableCollection = {},\n const Context extends AuthoringDataContext = AuthoringDataContext,\n >(\n definition: DataViewDefinition<\n Name,\n Variables,\n InputOf<Operations[Name]>,\n OutputOf<Operations[Name]>\n > & { dataContext: Context }\n ) {\n const variables = defineAppVariables(\n definition.variables ?? {}\n ) as Variables;\n const input =\n definition.input ??\n ((values: ResolvedVariables<Variables>) =>\n values as unknown as InputOf<Operations[Name]>);\n\n const describeInput = describeViewInput<InputOf<Operations[Name]>>({\n ...definition,\n variables,\n });\n type Data = OutputOf<Operations[Name]>;\n type Input = InputOf<Operations[Name]>;\n const metadata: Omit<\n DataViewDefinition<Name, Variables, Input, Data>,\n 'variables' | 'input'\n > = definition;\n const normalized = { ...metadata, variables, input, describeInput };\n const view = Object.assign(\n new DeclaredView(() => useView(normalized), normalized),\n {\n dataset<Row>(\n dataset: DatasetDefinition<\n Data,\n Input,\n Row,\n Parameters<Context['evidence']>[0]\n >\n ) {\n return bindDataset(\n {\n ...dataset,\n evidence: definition.dataContext.evidence(dataset.evidence),\n },\n view\n );\n },\n metric(\n metric: Parameters<Context['metric']>[0],\n select: (data: Data, input: Input) => MetricValues\n ) {\n return bindMetric(\n definition.dataContext.metric(metric),\n select,\n definition.date?.input,\n view\n );\n },\n scope(snapshot: DisplayedSnapshot<Data, Input>) {\n return describeInput(snapshot.input);\n },\n content(\n render: (\n state: DataContentState<\n OutputOf<Operations[Name]>,\n InputOf<Operations[Name]>\n >\n ) => ReactNode\n ): ViewContent<Data, Input> {\n return new ViewContent(view, render, describeInput);\n },\n }\n );\n return view;\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 const Context extends AuthoringDataContext = AuthoringDataContext,\n >(\n definition: {\n operation: Name;\n dataContext: Context;\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 emptyFallback: EmptyContent;\n } & TimeInputMapping<NoInfer<Additional>, InputOf<Operations[Name]>>\n ) {\n const period = dateRangeVariable({ ...definition.time, key: 'period' });\n\n return defineDataView<\n Name,\n { period: typeof period } & Additional,\n Context\n >({\n operation: definition.operation,\n dataContext: definition.dataContext,\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 emptyFallback: definition.emptyFallback,\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: ResolvedDataViewDefinition<\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 describeInput =\n describeViewInput<InputOf<Operations[Name]>>(definition);\n const request = useDataView(\n definition.operation,\n resolveViewInput(definition, variables.resolved),\n {\n ...definition,\n describeInput,\n }\n );\n\n return {\n view: request.view,\n dataContext: definition.dataContext,\n snapshot: request.snapshot,\n scope: displayedScope(request.view, describeInput),\n refetch() {\n void request.refetch();\n },\n cancel: request.cancel,\n refreshing: request.refreshing,\n queries: request.queries,\n emptyFallback: definition.emptyFallback,\n controls: variables.controls,\n variables,\n };\n }\n\n return {\n defineDataView,\n defineTimeView,\n defineFacetFilter,\n };\n}\n",
49
+ "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",
50
+ "import { ownedSource } from '@/src/react/source-owner';\nimport type { DeclaredView } from '@/src/react/view-runtime';\nimport type { ReactNode } from 'react';\nimport type { DataReading } from '@/src/core/reading';\n\nexport type DataContentState<Data, Input> = { scope: DataReading<string> } & (\n | { loading: true; data?: never; input?: never }\n | { loading: false; data: Data; input: Input }\n);\n\n/** Content receives only displayed data, its original input, and the derived scope. */\nexport function defineDataContent<Data, Input>(\n render: (state: DataContentState<Data, Input>) => ReactNode,\n options: {\n describeInput?: (input: Input) => string;\n } = {}\n) {\n return {\n loadingFallback: render({\n loading: true,\n scope: { loading: true },\n }),\n children(this: void, data: Data, input: Input) {\n return render({\n loading: false,\n data,\n input,\n scope: {\n loading: false,\n value: options.describeInput?.(input) ?? 'this view',\n },\n });\n },\n };\n}\n\n/** A section's request owner and render layout are declared together. */\nexport class ViewContent<Data, Input> {\n #view: DeclaredView<Data, Input>;\n #layout: ReturnType<typeof defineDataContent<Data, Input>>;\n constructor(\n view: DeclaredView<Data, Input>,\n render: (source: DataContentState<Data, Input>) => ReactNode,\n describeInput: (input: Input) => string\n ) {\n this.#view = view;\n this.#layout = defineDataContent(\n source => render(ownedSource(view, source)),\n { describeInput }\n );\n }\n static section<Data, Input>(content: ViewContent<Data, Input>) {\n return { view: content.#view, ...content.#layout };\n }\n}\nexport function sectionContent<Data, Input>(content: ViewContent<Data, Input>) {\n return ViewContent.section(content);\n}\n",
51
+ "import type { DataContext } from '@/src/react/ui/data-context';\nimport type { EmptyContent } from '@/src/react/ui/presentation';\nimport type {\n AppVariable,\n AppVariableValues,\n DateRangeVariable,\n VariableCollection,\n} from '@/src/core/variables';\nimport type { DateRangeRequest } from '@/src/core/contract';\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\ntype SameViewInput<Variables extends VariableCollection, Input> = [\n ResolvedVariables<Variables>,\n] extends [Input]\n ? [Input] extends [ResolvedVariables<Variables>]\n ? [Input] extends [Record<string, never>]\n ? true\n : [keyof Input] extends [keyof Variables]\n ? true\n : false\n : false\n : false;\ntype ViewInputMapping<Variables extends VariableCollection, Input> =\n SameViewInput<Variables, Input> extends true\n ? { input?: (values: ResolvedVariables<Variables>) => Input }\n : { input: (values: ResolvedVariables<Variables>) => Input };\n\nexport type DataViewDefinition<\n Name extends string,\n Variables extends VariableCollection,\n Input,\n Data,\n> = {\n operation: Name;\n dataContext: DataContext;\n bindings?: ViewBindings<Variables, Input>;\n /** App-owned semantics: measured zero need not mean an empty result. */\n isEmpty: (data: Data) => boolean;\n /** Inherited by DataSection unless it supplies its own copy. */\n emptyFallback: EmptyContent;\n} & (keyof Variables extends never\n ? { variables?: Variables }\n : { variables: Variables }) &\n ViewInputMapping<NoInfer<Variables>, Input> &\n (\n | {\n date: ViewDate<Variables, Input>;\n describeInput?: (input: Input) => string;\n }\n | { date?: never; describeInput: (input: Input) => string }\n );\n\nexport type ResolvedDataViewDefinition<\n Name extends string,\n Variables extends VariableCollection,\n Input,\n Data,\n> = Omit<\n DataViewDefinition<Name, Variables, Input, Data>,\n 'variables' | 'input'\n> & {\n variables: Variables;\n input: (values: ResolvedVariables<Variables>) => Input;\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]) =>\n ['dimension', 'numberFilter', 'booleanFilter'].includes(variable.kind)\n )\n .map(([key, filter]) => {\n const variable = filter as AppVariable<any>;\n const selected = readViewBinding(definition, key, input);\n\n return variable.valid(selected as never)\n ? `${variable.label}: ${variable.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 (!['dimension', 'numberFilter', 'booleanFilter'].includes(variable.kind))\n continue;\n const filter = variable as AppVariable<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} filter 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",
52
+ "import type { ReactNode } from 'react';\nimport { useQueries } from '@tanstack/react-query';\nimport { Select } from '@/src/react/ui/Select';\nimport { FilterActions } from '@/src/react/ui/FilterActions';\nimport { NumberFilterPicker } from '@/src/react/ui/NumberFilterPicker';\nimport type {\n NumberFilter,\n NumberSelection,\n BooleanSelection,\n} from '@/src/core/filters';\nimport type { AppVariable } from '@/src/core/variables';\nimport { SearchField } from '@/src/react/ui/SearchField';\nimport { ChoicePicker } from '@/src/react/ui/ChoicePicker';\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 if (definition.kind === 'numberFilter') {\n controls.push(\n <NumberFilterPicker\n key={name}\n filter={definition as NumberFilter}\n value={value as NumberSelection}\n onChange={next =>\n variables.set(\n name,\n next as AppVariableValues<Variables>[typeof name]\n )\n }\n />\n );\n } else if (definition.kind === 'booleanFilter') {\n const selected = value as BooleanSelection;\n controls.push(\n <Select\n key={name}\n label={definition.label}\n value={selected.kind === 'all' ? 'all' : String(selected.value)}\n options={[\n { id: 'all', label: 'Any' },\n { id: 'true', label: 'Yes' },\n { id: 'false', label: 'No' },\n ]}\n onChange={next =>\n variables.set(\n name,\n (next === 'all'\n ? { kind: 'all' }\n : {\n kind: 'is',\n value: next === 'true',\n }) as AppVariableValues<Variables>[typeof name]\n )\n }\n />\n );\n } else if (definition.kind === 'multiChoice') {\n controls.push(\n <ChoicePicker\n key={name}\n selectionMode=\"multiple\"\n label={definition.label ?? name}\n options={definition.options}\n values={value as readonly string[]}\n maxSelected={definition.maxSelected}\n emptySelectionLabel=\"None\"\n onChange={next =>\n variables.set(\n name,\n next as AppVariableValues<Variables>[typeof name]\n )\n }\n />\n );\n } else if (definition.kind === 'choice') {\n controls.push(\n <Select\n key={name}\n label={definition.label ?? name}\n value={value as string}\n options={definition.options}\n onChange={next =>\n variables.set(\n name,\n next as AppVariableValues<Variables>[typeof name]\n )\n }\n />\n );\n } else if (definition.kind === 'search') {\n controls.push(\n <SearchField\n key={name}\n label={definition.label ?? name}\n value={value as string}\n resetValue={definition.defaultValue}\n onChange={next =>\n variables.set(\n name,\n next as AppVariableValues<Variables>[typeof name]\n )\n }\n />\n );\n }\n }\n const hasActiveFilters = Object.entries(definitions).some(\n ([name, definition]) => {\n const variable = definition as AppVariable<any>;\n return (\n variable.clearValue !== undefined &&\n !variable.same(variables.values[name], variable.clearValue)\n );\n }\n );\n if (hasActiveFilters)\n controls.push(\n <FilterActions key=\"filter-actions\" onClear={variables.clearAll} />\n );\n\n return {\n ...variables,\n resolved,\n controls: controls.length ? controls : null,\n };\n}\n",
53
+ "import { useState } from 'react';\nimport { createAnnotationClient } from '@/src/client/annotations';\nimport { getDataAppTransport } from '@/src/client/iframe';\nimport { MessageRoutingError } from '@/src/core/messages';\n\n/** Bind annotation delivery to this app's current iframe bridge. The host owns storage and submission. */\nexport function useDataAppAnnotations() {\n const [client] = useState(() =>\n createAnnotationClient((message, signal) => {\n const transport = getDataAppTransport();\n if (!transport)\n throw new MessageRoutingError(\n 'unsupported_route',\n 'Annotations are unavailable in this app.'\n );\n return transport.request(message, signal);\n })\n );\n return client;\n}\n",
54
+ "type KeyEvent = Pick<\n KeyboardEvent,\n 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey' | 'isComposing'\n>;\n\n/** Keep local key actions separate from shortcuts and IME composition. Pass React's nativeEvent. */\nexport function isPlainKeyEvent(\n event: KeyEvent,\n { allowShift = false }: { allowShift?: boolean } = {}\n): boolean {\n return (\n !event.isComposing &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.metaKey &&\n (allowShift || !event.shiftKey)\n );\n}\n",
55
+ "import type { ComponentPropsWithRef } from 'react';\nimport {\n MenuTrigger,\n Menu as AriaMenu,\n MenuItem as AriaMenuItem,\n MenuSection,\n Popover,\n Separator,\n type MenuProps,\n type MenuItemProps,\n type MenuTriggerProps,\n} from 'react-aria-components';\nimport { SelectionMark } from '@/src/react/ui/SelectionMark';\nimport { classNames } from '@/src/react/ui/classNames';\n\nexport { MenuTrigger, MenuSection };\nexport { PressButton as MenuButton } from '@/src/react/ui/Button';\nexport type { MenuProps, MenuItemProps, MenuTriggerProps };\n\nexport type MenuPopoverProps = ComponentPropsWithRef<typeof Popover>;\n\n/** Anchored popup for a Menu; the surrounding MenuTrigger owns focus and dismissal. */\nexport function MenuPopover({\n className,\n placement = 'bottom start',\n ...props\n}: MenuPopoverProps) {\n return (\n <Popover\n {...props}\n placement={placement}\n className={state =>\n classNames(\n 'altertable-menu-popover',\n typeof className === 'function' ? className(state) : className\n )\n }\n />\n );\n}\n\n/** Actions by default; single selection creates radio items, multiple creates checkbox items. */\nexport function Menu<T extends object>({ className, ...props }: MenuProps<T>) {\n return (\n <AriaMenu\n {...props}\n className={state =>\n classNames(\n 'altertable-menu',\n typeof className === 'function' ? className(state) : className\n )\n }\n />\n );\n}\n\nexport function MenuItem<T extends object>({\n className,\n children,\n ...props\n}: MenuItemProps<T>) {\n return (\n <AriaMenuItem\n data-atbl-internal-surface=\"option\"\n data-atbl-focus=\"inset\"\n data-atbl-control=\"action\"\n {...props}\n className={state =>\n classNames(\n 'altertable-menu-item',\n typeof className === 'function' ? className(state) : className\n )\n }\n >\n {state => (\n <>\n {state.selectionMode !== 'none' && (\n <SelectionMark\n selected={state.isSelected}\n multiple={state.selectionMode === 'multiple'}\n />\n )}\n {typeof children === 'function' ? children(state) : children}\n </>\n )}\n </AriaMenuItem>\n );\n}\n\nexport function MenuSeparator({\n className,\n ...props\n}: ComponentPropsWithRef<typeof Separator>) {\n return (\n <Separator\n {...props}\n className={classNames('altertable-menu-separator', className)}\n />\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 data-atbl-focus=\"inset\"\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\n data-atbl-internal-surface=\"control\"\n data-atbl-focus=\"inset\"\n data-atbl-control=\"action\"\n aria-label={`Live update frequency: ${frequency}`}\n >\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 data-atbl-internal-surface=\"option\"\n data-atbl-focus=\"inset\"\n data-atbl-control=\"action\"\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 {\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 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=`. The presentation owns its modal structure.\n */\nexport function PresentStory({\n title,\n findings,\n empty,\n scope,\n dataContext,\n theme,\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 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 className=\"altertable-present-launch\">\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 ref={dialog}\n className=\"altertable-present-dialog\"\n aria-labelledby={headlineId}\n aria-describedby={step?.context ? contextId : undefined}\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 }}\n 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 data-atbl-focus=\"ring\"\n data-atbl-control=\"action\"\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 data-atbl-internal-surface=\"option\"\n data-atbl-focus=\"ring\"\n data-atbl-control=\"action\"\n >\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 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",
61
+ "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",
62
+ "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 data-atbl-internal-prose\n {...props}\n className={classNames('altertable-text-content', className)}\n />\n );\n}\n",
63
+ "import type { WidgetEvidence } from '@/src/react/ui/WidgetEvidence';\n\ntype AnnotationPropsOptions = {\n id?: string;\n label?: string;\n evidence?: WidgetEvidence;\n kind?: 'widget' | 'element';\n};\n\nexport function getAnnotationProps({\n id,\n label,\n evidence,\n kind = 'widget',\n}: AnnotationPropsOptions) {\n return {\n 'data-annotation-id': id ?? evidence?.id,\n 'data-annotation-label': label?.slice(0, 256),\n 'data-annotation-kind': kind,\n 'data-annotation-queries': JSON.stringify(evidence?.queryNames ?? []),\n 'data-annotation-glossary': JSON.stringify(evidence?.glossaryIds ?? []),\n };\n}\n",
64
+ "import { getAnnotationProps } from '@/src/react/annotations/getAnnotationProps';\nimport { 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 { ContentSkeletonBody } 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 annotationId?: string;\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 emptyFallback?: EmptyContent;\n children: ReactNode;\n }\n );\n\nexport function DataWidget<Data>(props: DataWidgetProps<Data>) {\n if (props.reading) {\n const { reading, isEmpty, emptyFallback, skeleton, children, ...shell } =\n props;\n if (reading.loading)\n return (\n <DataWidgetContent\n {...shell}\n annotationId={shell.annotationId ?? shell.evidence?.id}\n evidence={undefined}\n aria-busy\n >\n <ContentSkeletonBody variant=\"panel\" {...skeleton} />\n </DataWidgetContent>\n );\n const noData = isEmpty(reading.value);\n\n return (\n <DataWidgetContent\n {...shell}\n emptyFallback={noData ? emptyFallback : undefined}\n >\n {noData ? null : children(reading.value)}\n </DataWidgetContent>\n );\n }\n\n return <DataWidgetContent {...props} />;\n}\n\nfunction DataWidgetContent({\n title,\n annotationId,\n count,\n description,\n evidence,\n action,\n status,\n footer,\n emptyFallback,\n bodyPadding = 'inset',\n children,\n className,\n ...props\n}: DataWidgetBaseProps & {\n emptyFallback?: EmptyContent;\n children: ReactNode;\n}) {\n const titleId = useId();\n const content = emptyFallback ? <EmptyState {...emptyFallback} /> : children;\n const visual = (\n <WidgetContent\n bodyPadding={emptyFallback ? 'flush' : bodyPadding}\n footer={emptyFallback ? 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 shortcut={false}\n title={title}\n headerActions={<WidgetStatusControl status={status} />}\n description={description}\n visual={visual}\n visualKind=\"widget\"\n >\n <span className=\"altertable-widget-heading-label\">{title}</span>\n <AppIcon name=\"openDetails\" />\n </AboutData>\n );\n\n return (\n <section\n {...props}\n {...getAnnotationProps({\n id: annotationId ?? props.id ?? evidence?.id ?? titleId,\n label: typeof title === 'string' ? title : undefined,\n evidence,\n })}\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",
65
+ "import type { ComponentPropsWithRef } from 'react';\nimport type { SkeletonContent } from '@/src/react/ui/presentation';\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 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 <ContentSkeletonBody variant={variant} rows={rows} />\n {variant === 'panel' && (\n <Skeleton className=\"altertable-content-skeleton-foot\" />\n )}\n </div>\n );\n}\n\n/** Placeholder for a widget body; static headings stay outside it. */\nexport function ContentSkeletonBody({ variant, rows = 4 }: SkeletonContent) {\n const rowCount = Math.min(100, Math.max(0, Math.trunc(rows) || 0));\n return (\n <div className=\"altertable-content-skeleton-body\" aria-hidden=\"true\">\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 === 'ranking' && (\n <div className=\"altertable-content-skeleton-rows\">\n {Array.from({ length: rowCount }, (_, 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",
66
+ "import { useState, type ComponentPropsWithRef, type ReactNode } from 'react';\nimport { DataWidget, type DataWidgetProps } from '@/src/react/ui/DataWidget';\nimport type { BoundWidgetReading } from '@/src/react/ui/presentation';\nimport { ContentSkeletonBody } from '@/src/react/ui/ContentSkeleton';\nimport { validateWidgetViews } from '@/src/react/ui/widget-views';\nimport { WidgetViewTabs } from '@/src/react/ui/WidgetViewTabs';\n\ntype VisualizationWidgetBaseProps = Pick<\n DataWidgetProps,\n | 'title'\n | 'annotationId'\n | 'description'\n | 'count'\n | 'action'\n | 'evidence'\n | 'status'\n | 'emptyFallback'\n> & {\n /** Footer controls, such as table pagination. */\n footer?: ReactNode;\n} & Omit<ComponentPropsWithRef<'section'>, 'about' | 'title' | 'children'>;\n\ntype UnboundVisualizationWidgetProps = VisualizationWidgetBaseProps &\n (\n | { loading: true; loadingContent?: ReactNode; visual?: never }\n | { loading?: false; visual: ReactNode; loadingContent?: never }\n );\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/** DataWidget frame for charts, DataTable, metrics, or a custom data display.\n * Owns alternate-view selection and shares it with inspection. Built-in charts own\n * transient tooltips; lift persistent custom interactions above both mounts.\n * For narrative prose use the sibling TextWidget, which composes DataWidget directly. */\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\n/** Compose an unframed visual with the shared heading and inspection. */\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 {\n reading,\n children,\n isEmpty,\n emptyFallback,\n skeleton,\n footer,\n ...shell\n } = props;\n\n return (\n <DataWidget\n {...shell}\n reading={reading}\n isEmpty={isEmpty}\n emptyFallback={emptyFallback}\n skeleton={skeleton}\n footer={footer}\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, loadingContent, footer, ...shell } = props;\n if (loading)\n return (\n <DataWidget {...shell} evidence={undefined} footer={footer} aria-busy>\n <div className=\"altertable-visualization-widget-content\">\n {loadingContent ?? <ContentSkeletonBody variant=\"panel\" />}\n </div>\n </DataWidget>\n );\n\n return (\n <DataWidget {...shell} footer={footer}>\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 emptyFallback,\n skeleton,\n footer,\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 emptyFallback={emptyFallback}\n skeleton={skeleton}\n footer={footer}\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 emptyFallback,\n }))}\n selectedKey={selected}\n onSelectionChange={setSelected}\n />\n </div>\n )}\n </DataWidget>\n );\n}\n",
67
+ "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",
68
+ "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 emptyFallback: 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 ? (\n <EmptyState {...view.emptyFallback} />\n ) : (\n view.content\n )}\n </TabPanel>\n ))}\n </TabPanels>\n </Tabs>\n </div>\n );\n}\n",
69
+ "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",
70
+ "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/metric-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",
71
+ "import type { ComponentPropsWithRef, ReactNode } from 'react';\nimport type { WidgetStatus } from '@/src/react/ui/RequestHint';\nimport { VisualizationWidget } from '@/src/react/ui/VisualizationWidget';\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/metric-comparison';\nimport { classNames } from '@/src/react/ui/classNames';\nimport { formatMetric, type MetricFormat } from '@/src/core/format';\nimport { Skeleton } from '@/src/react/ui/Skeleton';\nimport type { MetricReading } from '@/src/core/reading';\nimport { metricComparison, type MetricDefinition } from '@/src/react/ui/metric';\n\ntype MetricWidgetBaseProps = {\n label: string;\n annotationId?: string;\n description?: ReactNode;\n comparison?: MetricComparison;\n evidence?: WidgetEvidence;\n action?: 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\n/** VisualizationWidget with a formatted metric, optional comparison, and evidence. */\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 (\n <MetricWidgetContent\n {...rest}\n annotationId={rest.annotationId ?? metric.evidence?.id}\n label={metric.label}\n loading\n />\n );\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 annotationId,\n value,\n content,\n format,\n loading = false,\n description,\n comparison,\n evidence,\n action,\n status,\n visual,\n className,\n ...props\n}: UnboundMetricWidgetProps) {\n return (\n <VisualizationWidget\n {...props}\n className={classNames('altertable-metric-widget', className)}\n title={label}\n annotationId={annotationId}\n evidence={loading ? undefined : evidence}\n aria-busy={loading || props['aria-busy']}\n action={action}\n status={status}\n visual={\n <MetricVisual\n loading={loading}\n value={value}\n content={content}\n format={format}\n comparison={comparison}\n description={description}\n visual={visual}\n />\n }\n />\n );\n}\n\nfunction MetricVisual({\n loading,\n value,\n content,\n format,\n comparison,\n description,\n visual,\n}: {\n loading: boolean;\n value?: number;\n content?: ReactNode;\n format?: MetricFormat;\n comparison?: MetricComparison;\n description?: ReactNode;\n visual?: ReactNode;\n}) {\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 {loading ? (\n <Skeleton className=\"altertable-metric-loading-value\" />\n ) : (\n shownValue\n )}\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 return (\n <>\n {reading}\n {description && (\n <small className=\"altertable-metric-description\">{description}</small>\n )}\n {visualization}\n </>\n );\n}\n",
72
+ "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 type { DataAppStyleHooks } from '@/src/react/style-contract';\nimport { classNames } from '@/src/react/ui/classNames';\n\nexport type HelpPopoverTriggerProps = Omit<\n ComponentPropsWithRef<'button'>,\n 'children' | 'type'\n> &\n DataAppStyleHooks;\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 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 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 data-atbl-internal-surface={\n triggerProps?.className ? undefined : 'control'\n }\n data-atbl-focus=\"ring\"\n data-atbl-control=\"action\"\n {...getReferenceProps({\n ...triggerProps,\n 'aria-label': triggerProps?.['aria-label'] ?? triggerLabel,\n })}\n ref={mergedTriggerRef}\n type=\"button\"\n className={classNames(\n triggerProps?.className ? undefined : 'altertable-button',\n triggerProps?.className\n )}\n data-variant={triggerProps?.className ? undefined : 'outline'}\n data-size={triggerProps?.className ? 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 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",
73
+ "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 panelProps,\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 panelProps={{\n ...panelProps,\n className: ['altertable-date-time-tooltip', panelProps?.className]\n .filter(Boolean)\n .join(' '),\n }}\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",
74
+ "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 triggerProps={{\n className: 'altertable-data-table-timestamp',\n 'data-atbl-control': 'help',\n }}\n >\n <time dateTime={timestamp}>{children ?? timestamp}</time>\n </DateTimeTooltip>\n );\n}\n",
75
+ "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 { VisualizationWidget } from '@/src/react/ui/VisualizationWidget';\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 { Skeleton } from '@/src/react/ui/Skeleton';\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\nexport type TableDisplayMode =\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\ntype TableWidgetBaseProps<Row> = {\n title: ReactNode;\n annotationId?: string;\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 status?: WidgetStatus;\n action?: ReactNode;\n evidence?: WidgetEvidence;\n search?: TableWidgetSearch<Row>;\n /** Valid result with no rows; the header remains visible. */\n emptyFallback: EmptyContent;\n} & TableDisplayMode &\n Omit<ComponentPropsWithRef<'section'>, 'about' | 'title' | 'children'>;\n\n/** Composes VisualizationWidget with DataTable, search, and local pagination.\n * Columns own header and body semantics; the first column is the row header.\n * Use DataTable inside VisualizationWidget directly for custom table markup. */\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, ...rest } = props;\n return (\n <TableWidgetContent\n {...rest}\n rows={reading.loading ? [] : reading.value}\n loading={reading.loading}\n skeletonRows={skeletonRows}\n />\n );\n }\n\n return <TableWidgetContent {...props} />;\n}\n\nfunction TableWidgetContent<Row>({\n title,\n count,\n description,\n columns,\n rows,\n rowKey,\n action,\n evidence,\n search,\n limit,\n pagination,\n emptyFallback,\n loading = false,\n skeletonRows = 5,\n ...props\n}: TableWidgetBaseProps<Row> & {\n rows: readonly Row[];\n loading?: boolean;\n skeletonRows?: number;\n}) {\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\n searchable={loading ? undefined : searchable}\n aria-busy={loading || undefined}\n >\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 aria-hidden={loading || undefined}>\n {loading ? (\n Array.from(\n {\n length: Math.min(\n 100,\n Math.max(0, Math.trunc(skeletonRows) || 0)\n ),\n },\n (_, row) => (\n <tr key={row}>\n {columns.map(column => (\n <td key={column.id} data-type={column.type}>\n <Skeleton style={{ width: '70%', height: '1em' }} />\n </td>\n ))}\n </tr>\n )\n )\n ) : visible.length === 0 ? (\n <DataTableEmptyRow colSpan={columns.length} {...emptyFallback} />\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 <VisualizationWidget\n {...props}\n title={title}\n annotationId={props.annotationId ?? evidence?.id}\n count={loading ? undefined : count}\n description={description}\n action={action}\n evidence={loading ? undefined : evidence}\n aria-busy={loading || props['aria-busy']}\n footer={pager}\n visual={<div className=\"altertable-table-widget-content\">{table}</div>}\n />\n );\n}\n",
76
+ "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/** Narrative sibling of VisualizationWidget, composing DataWidget with TextContent.\n * Use TextContent directly for borderless prose. 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",
77
+ "import type { ComponentPropsWithRef, ReactNode } from 'react';\nimport type { DataReading } from '@/src/core/reading';\n\nexport type DataValueProps<Value> = {\n reading: DataReading<Value>;\n loadingFallback: ReactNode;\n children: (value: Value) => ReactNode;\n} & Omit<ComponentPropsWithRef<'span'>, 'children'>;\n\n/** Bind inline content to displayed data. Keep static wording outside this span. */\nexport function DataValue<Value>({\n reading,\n loadingFallback,\n children,\n ...props\n}: DataValueProps<Value>) {\n return (\n <span {...props} aria-busy={reading.loading || props['aria-busy']}>\n {reading.loading ? loadingFallback : children(reading.value)}\n </span>\n );\n}\n",
78
+ "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 type MetricDeclaration = {\n id: string;\n glossaryId: string;\n label?: string;\n format: MetricFormat;\n favorableDirection?: 'up' | 'down';\n queryNames?: readonly string[];\n};\nexport type EvidenceDeclaration = { id: string } & (\n | {\n glossaryIds: readonly [string, ...string[]];\n queryNames?: readonly string[];\n }\n | {\n queryNames: readonly [string, ...string[]];\n glossaryIds?: readonly string[];\n }\n);\nexport type AuthoringDataContext = DataContext & {\n metric(definition: MetricDeclaration): MetricDefinition;\n evidence(definition: EvidenceDeclaration): WidgetEvidence;\n};\n\nfunction 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",
79
+ "import type { ReactNode } from 'react';\nimport type { Theme } from '@/src/core/appearance';\nimport { Tooltip } from '@/src/react/ui/Tooltip';\n\ntype AnnotationTooltipProps = {\n content: ReactNode;\n children: ReactNode;\n theme?: Theme;\n};\n\nexport function AnnotationTooltip({\n content,\n children,\n theme,\n}: AnnotationTooltipProps) {\n return (\n <Tooltip\n content={\n <span\n className={\n theme\n ? 'altertable-annotation-bar-tooltip'\n : 'altertable-annotation-tooltip'\n }\n data-theme={theme}\n >\n {content}\n </span>\n }\n >\n {children}\n </Tooltip>\n );\n}\n",
80
+ "import { randomUuid } from '@/src/core/uuid';\nimport {\n useEffect,\n useEffectEvent,\n useRef,\n useMemo,\n useReducer,\n type ComponentRef,\n type RefObject,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport {\n autoUpdate,\n flip,\n offset,\n shift,\n useFloating,\n} from '@floating-ui/react';\nimport { MessageRoutingError } from '@/src/core/messages';\nimport { DataAppError } from '@/src/client/transport';\nimport { getDataAppNavigation } from '@/src/client/navigation';\nimport type {\n DataAppAnnotationDraft,\n DataAppAnnotationPresentation,\n} from '@/src/core/annotations';\nimport { useDataAppAnnotations } from '@/src/react/annotations/useDataAppAnnotations';\nimport {\n findAnnotationTarget,\n normalizeAnnotationRect,\n projectAnnotationRect,\n annotationGeometry,\n annotationPoint,\n type AnnotationRect,\n type AnnotationTargetElement,\n type AnnotationPoint,\n} from '@/src/react/annotations/annotation-targets';\nimport { captureAnnotationScreenshot } from '@/src/react/annotations/annotation-screenshot';\nimport { AnnotationSelectionLayer } from '@/src/react/annotations/AnnotationSelectionLayer';\nimport { AnnotationTrigger } from '@/src/react/annotations/AnnotationTrigger';\nimport { AnnotationEditor } from '@/src/react/annotations/AnnotationEditor';\nimport { AnnotationMarkers } from '@/src/react/annotations/AnnotationMarkers';\nimport {\n useAnnotationTargets,\n useAnnotationGeometry,\n} from '@/src/react/annotations/useAnnotationGeometry';\nimport {\n annotationControlsReducer,\n createAnnotationControlsState,\n} from '@/src/react/annotations/annotation-editor-state';\nimport { shortcuts, useShortcut } from '@/src/react/ui/shortcuts';\n\ntype AnnotationControlsProps = {\n rootRef: RefObject<ComponentRef<'div'> | null>;\n presentation: DataAppAnnotationPresentation;\n displayedInput?: unknown;\n view?: string;\n};\ntype AnnotationSelection = {\n target: AnnotationTargetElement;\n cursor?: AnnotationPoint;\n region?: AnnotationRect;\n annotation?: NonNullable<DataAppAnnotationPresentation['targets']>[number];\n comment?: string;\n};\ntype AnnotationScreenshot = NonNullable<\n DataAppAnnotationDraft['context']['screenshot']\n>;\ntype ScreenshotCapture = {\n draftId: string;\n result: Promise<AnnotationScreenshot | undefined>;\n};\n\nexport function AnnotationControls({\n rootRef,\n presentation,\n displayedInput,\n view,\n}: AnnotationControlsProps) {\n const annotationClient = useDataAppAnnotations();\n const [state, dispatch] = useReducer(\n annotationControlsReducer,\n presentation.active ?? false,\n createAnnotationControlsState\n );\n const { editor, hoveredTarget, saving } = state;\n const active = presentation.active ?? state.annotationModeActive;\n const pending = saving || presentation.readOnly === true;\n const editing = Boolean(editor);\n const editorDraftId = editor?.draft.id;\n const selectedTarget = editor?.target;\n const anchor = editor?.draft.context.anchor;\n const savedComment =\n presentation.targets?.find(pin => pin.id === editor?.annotationId)\n ?.comment ?? '';\n const hasUnsavedChanges = Boolean(editor) && editor?.comment !== savedComment;\n const screenshot = useRef<ScreenshotCapture | undefined>(undefined);\n const toolbarRef = useRef<ComponentRef<'button'>>(null);\n const textareaRef = useRef<ComponentRef<'textarea'>>(null);\n const discovery = useAnnotationTargets(rootRef, active);\n const geometry = useAnnotationGeometry({\n rootRef,\n target: editor?.target ?? hoveredTarget,\n region: editor?.draft.context.region,\n targets: presentation.targets,\n });\n if (state.observedActive !== active)\n dispatch({ type: 'externalModeObserved', active });\n if (\n editor?.annotationId &&\n !presentation.targets?.some(pin => pin.id === editor.annotationId)\n ) {\n dispatch({ type: 'editorClosed' });\n }\n\n useEffect(() => {\n void annotationClient\n .reportAnnotationEditorState({ hasUnsavedChanges })\n .catch(() => {});\n }, [annotationClient, hasUnsavedChanges]);\n useEffect(() => {\n if (editorDraftId) textareaRef.current?.focus();\n else screenshot.current = undefined;\n }, [editorDraftId, active]);\n\n const reference = useMemo(() => {\n if (!selectedTarget || !anchor) return selectedTarget?.element;\n return {\n contextElement: selectedTarget.element,\n getBoundingClientRect() {\n const rect = annotationGeometry(selectedTarget.element);\n return new DOMRect(\n rect.x + rect.width * anchor.x,\n rect.y + rect.height * anchor.y,\n 0,\n 0\n );\n },\n };\n }, [selectedTarget, anchor]);\n const { refs, floatingStyles } = useFloating({\n placement: 'right-start',\n strategy: 'fixed',\n middleware: [offset(8), flip(), shift({ padding: 12, crossAxis: true })],\n whileElementsMounted: autoUpdate,\n });\n useEffect(() => {\n refs.setPositionReference(reference ?? null);\n }, [refs, reference]);\n\n function openEditor({\n target,\n cursor,\n region,\n annotation,\n comment,\n }: AnnotationSelection) {\n const location = getDataAppNavigation()?.snapshot();\n const rect = annotationGeometry(target.element);\n const point = annotationPoint(rect, cursor);\n const draft: DataAppAnnotationDraft = {\n id: randomUuid(),\n target: {\n id: target.id,\n label: region ? 'Selected area' : target.label.slice(0, 256),\n kind: target.kind,\n text: (target.element.textContent ?? '')\n .replace(/\\s+/g, ' ')\n .trim()\n .slice(0, 1024),\n queryNames: JSON.parse(\n target.element.dataset.annotationQueries ?? '[]'\n ) as string[],\n glossaryIds: JSON.parse(\n target.element.dataset.annotationGlossary ?? '[]'\n ) as string[],\n },\n context: {\n ...point,\n ...(region ? { region: normalizeAnnotationRect(region, rect) } : {}),\n search: (location?.search ?? window.location.search).slice(0, 2048),\n hash: (location?.hash ?? window.location.hash).slice(0, 1024),\n displayedInput:\n displayedInput === undefined\n ? undefined\n : (JSON.parse(JSON.stringify(displayedInput)) as unknown),\n view:\n target.element\n .querySelector('[role=tab][aria-selected=true]')\n ?.textContent?.slice(0, 128) ?? view,\n viewport: { width: window.innerWidth, height: window.innerHeight },\n rect: region ?? rect,\n },\n comment: '',\n };\n dispatch({\n type: 'editorOpened',\n editor: {\n target,\n draft,\n annotationId: annotation?.id,\n comment: comment ?? annotation?.comment ?? '',\n captureStatus: annotation ? 'ready' : 'capturing',\n error: '',\n discardArmed: false,\n shaking: false,\n },\n });\n screenshot.current = annotation\n ? undefined\n : {\n draftId: draft.id,\n result: captureAnnotationScreenshot(target.element, region).then(\n image => {\n dispatch({\n type: 'captureCompleted',\n draftId: draft.id,\n succeeded: true,\n });\n return image;\n },\n () => {\n dispatch({\n type: 'captureCompleted',\n draftId: draft.id,\n succeeded: false,\n });\n return undefined;\n }\n ),\n };\n }\n\n function setAnnotationMode(active: boolean) {\n dispatch({ type: 'annotationModeChanged', active });\n if (presentation.active !== undefined) {\n void annotationClient\n .requestAnnotationModeChange({ active })\n .catch(() => {});\n }\n }\n function closeAnnotationMode() {\n screenshot.current = undefined;\n setAnnotationMode(false);\n toolbarRef.current?.focus();\n }\n function toggleAnnotationMode() {\n if (active) closeAnnotationMode();\n else setAnnotationMode(true);\n }\n useShortcut(shortcuts.annotate, toggleAnnotationMode, !pending, true);\n\n function openAnnotation(id: string) {\n const annotation = presentation.targets?.find(pin => pin.id === id);\n const target = findAnnotationTarget(rootRef.current, annotation?.targetId);\n if (!annotation || !target || pending) return;\n setAnnotationMode(true);\n const rect = annotationGeometry(target.element);\n const cursor = annotation.anchor\n ? {\n x: rect.x + rect.width * annotation.anchor.x,\n y: rect.y + rect.height * annotation.anchor.y,\n }\n : undefined;\n const pointY = cursor?.y ?? rect.y + rect.height / 2;\n if (pointY < 0 || pointY > window.innerHeight) {\n window.scrollBy({\n top: pointY - window.innerHeight / 2,\n behavior: 'smooth',\n });\n }\n openEditor({\n target,\n cursor,\n annotation,\n region: annotation.region\n ? projectAnnotationRect(annotation.region, rect)\n : undefined,\n });\n }\n function retryScreenshot() {\n if (!editor || pending) return;\n const rect = annotationGeometry(editor.target.element);\n const { anchor, region } = editor.draft.context;\n openEditor({\n target: editor.target,\n comment: editor.comment,\n cursor: anchor\n ? {\n x: rect.x + rect.width * anchor.x,\n y: rect.y + rect.height * anchor.y,\n }\n : undefined,\n region: region ? projectAnnotationRect(region, rect) : undefined,\n });\n }\n const openFromHost = useEffectEvent(openAnnotation);\n const selectFromLayer = useEffectEvent(openEditor);\n const escapeFromKeyboard = useEffectEvent(() => {\n if (editor) dispatch({ type: 'editorEscaped', hasUnsavedChanges });\n else closeAnnotationMode();\n });\n useEffect(() => {\n if (!active) return;\n function escape(event: KeyboardEvent) {\n if (event.key !== 'Escape' || (pending && editing)) return;\n if (\n document.querySelector('dialog[open], [data-selecting]') ||\n event.isComposing\n )\n return;\n event.preventDefault();\n event.stopPropagation();\n if (!event.repeat) escapeFromKeyboard();\n }\n document.addEventListener('keydown', escape, true);\n return () => document.removeEventListener('keydown', escape, true);\n }, [active, pending, editing]);\n useEffect(() => {\n if (presentation.selectedAnnotationId) {\n openFromHost(presentation.selectedAnnotationId);\n return;\n }\n const target = findAnnotationTarget(\n rootRef.current,\n presentation.selectedTargetId\n );\n target?.element.scrollIntoView({ block: 'center', behavior: 'smooth' });\n dispatch({ type: 'targetHovered', target });\n }, [\n presentation.selectedTargetId,\n presentation.selectedAnnotationId,\n presentation.selectionId,\n rootRef,\n ]);\n\n async function saveAnnotation() {\n if (!editor || pending) return;\n dispatch({ type: 'saveStarted' });\n try {\n if (editor.annotationId)\n await annotationClient.updateAnnotation(\n editor.annotationId,\n editor.comment\n );\n else {\n const capture = screenshot.current;\n if (!capture || capture.draftId !== editor.draft.id)\n throw new Error('Annotation capture is unavailable.');\n const image = await capture.result;\n if (!image) {\n dispatch({\n type: 'captureCompleted',\n draftId: editor.draft.id,\n succeeded: false,\n });\n return;\n }\n await annotationClient.addAnnotation({\n ...editor.draft,\n comment: editor.comment,\n context: { ...editor.draft.context, screenshot: image },\n });\n }\n screenshot.current = undefined;\n dispatch({ type: 'editorClosed' });\n } catch (error) {\n dispatch({\n type: 'saveFailed',\n error:\n (error instanceof DataAppError ||\n error instanceof MessageRoutingError) &&\n error.code === 'annotation_limit'\n ? error.message\n : 'Could not save annotation. Try again.',\n });\n } finally {\n dispatch({ type: 'saveFinished' });\n }\n }\n\n return (\n <>\n {presentation.active === undefined && (\n <AnnotationTrigger\n buttonRef={toolbarRef}\n active={active}\n disabled={pending}\n count={presentation.targets?.length ?? 0}\n onToggle={toggleAnnotationMode}\n />\n )}\n {createPortal(\n <>\n {active && discovery.scope && (\n <AnnotationSelectionLayer\n scope={discovery.scope}\n targets={discovery.targets}\n disabled={pending}\n editing={Boolean(editor)}\n onHover={target => dispatch({ type: 'targetHovered', target })}\n onSelect={(target, cursor, region) =>\n selectFromLayer({ target, cursor, region })\n }\n />\n )}\n <AnnotationMarkers\n outline={active ? geometry.outline : undefined}\n rounded={\n (editor?.target ?? hoveredTarget)?.kind === 'widget' &&\n !editor?.draft.context.region\n }\n pins={geometry.pins}\n pinsVisible={presentation.pinsVisible !== false}\n disabled={pending || Boolean(editor)}\n showHint={active && !editor && presentation.showHint !== false}\n hasDuplicateIds={discovery.hasDuplicateIds}\n onOpenAnnotation={openAnnotation}\n />\n {active && editor && (\n <AnnotationEditor\n editor={editor}\n editorRef={refs.setFloating}\n textareaRef={textareaRef}\n style={floatingStyles}\n disabled={pending}\n onCommentChange={comment =>\n dispatch({ type: 'commentChanged', comment })\n }\n onSubmit={() => void saveAnnotation()}\n onSend={() => {\n if (\n pending ||\n hasUnsavedChanges ||\n !presentation.targets?.length\n )\n return;\n void annotationClient.requestSendAnnotations().catch(() => {});\n }}\n onRetryScreenshot={retryScreenshot}\n onShakeEnd={() => dispatch({ type: 'shakeFinished' })}\n />\n )}\n </>,\n document.body\n )}\n </>\n );\n}\n",
81
+ "export type AnnotationPoint = { x: number; y: number };\nexport type AnnotationRect = {\n x: number;\n y: number;\n width: number;\n height: number;\n};\nexport type AnnotationTargetElement = {\n element: HTMLElement;\n id: string;\n label: string;\n kind: 'widget' | 'element' | 'app';\n};\n\nexport function discoverAnnotationTargets(root: HTMLElement | null): {\n targets: AnnotationTargetElement[];\n hasDuplicateIds: boolean;\n} {\n const found: AnnotationTargetElement[] = Array.from(\n root?.querySelectorAll<HTMLElement>('[data-annotation-id]') ?? []\n ).flatMap(element => {\n if (\n element.closest('[aria-hidden=\"true\"]') ||\n !element.checkVisibility({\n checkOpacity: true,\n checkVisibilityCSS: true,\n contentVisibilityAuto: true,\n })\n )\n return [];\n const rect = element.getBoundingClientRect();\n if (!rect.width || !rect.height) return [];\n const id = element.dataset.annotationId;\n const label =\n element.dataset.annotationLabel ??\n element.querySelector('h2')?.textContent ??\n 'App item';\n return id\n ? [\n {\n element,\n id,\n label,\n kind:\n element.dataset.annotationKind === 'element'\n ? ('element' as const)\n : ('widget' as const),\n },\n ]\n : [];\n });\n const counts = new Map<string, number>();\n for (const target of found)\n counts.set(target.id, (counts.get(target.id) ?? 0) + 1);\n return {\n targets: found.filter(target => counts.get(target.id) === 1),\n hasDuplicateIds: [...counts.values()].some(count => count > 1),\n };\n}\nexport function annotationGeometry(element: HTMLElement): AnnotationRect {\n const rect = element.getBoundingClientRect();\n return { x: rect.x, y: rect.y, width: rect.width, height: rect.height };\n}\nexport function annotationPoint(rect: AnnotationRect, point?: AnnotationPoint) {\n const cursor = point ?? {\n x:\n (Math.max(0, rect.x) + Math.min(window.innerWidth, rect.x + rect.width)) /\n 2,\n y:\n (Math.max(0, rect.y) +\n Math.min(window.innerHeight, rect.y + rect.height)) /\n 2,\n };\n return {\n cursor,\n anchor: {\n x: Math.max(\n 0,\n Math.min(1, (cursor.x - rect.x) / Math.max(1, rect.width))\n ),\n y: Math.max(\n 0,\n Math.min(1, (cursor.y - rect.y) / Math.max(1, rect.height))\n ),\n },\n };\n}\n\n/** The iframe document is a crop surface, never a selectable global-layout target. */\nexport function annotationRoot(\n root: HTMLElement | null\n): AnnotationTargetElement | undefined {\n const element = root?.ownerDocument.body;\n return element\n ? { element, id: '__data-app-root', label: 'Selected area', kind: 'app' }\n : undefined;\n}\nexport function findAnnotationTarget(\n root: HTMLElement | null,\n id: string | undefined\n) {\n return id === '__data-app-root'\n ? annotationRoot(root)\n : discoverAnnotationTargets(root).targets.find(target => target.id === id);\n}\n\nexport function normalizeAnnotationRect(\n area: AnnotationRect,\n target: AnnotationRect\n): AnnotationRect {\n return {\n x: (area.x - target.x) / target.width,\n y: (area.y - target.y) / target.height,\n width: area.width / target.width,\n height: area.height / target.height,\n };\n}\nexport function projectAnnotationRect(\n area: AnnotationRect,\n target: AnnotationRect\n): AnnotationRect {\n return {\n x: target.x + target.width * area.x,\n y: target.y + target.height * area.y,\n width: target.width * area.width,\n height: target.height * area.height,\n };\n}\n",
82
+ "import { toCanvas } from 'html-to-image';\nimport type { AnnotationRect } from '@/src/react/annotations/annotation-targets';\nimport type { DataAppAnnotationDraft } from '@/src/core/annotations';\n\n/** Capture the visible target at selection time; never include annotation controls. */\nexport async function captureAnnotationScreenshot(\n element: HTMLElement,\n region?: AnnotationRect\n): Promise<NonNullable<DataAppAnnotationDraft['context']['screenshot']>> {\n const rect = element.getBoundingClientRect();\n const left = Math.max(0, region?.x ?? rect.left);\n const top = Math.max(0, region?.y ?? rect.top);\n const width =\n Math.min(window.innerWidth, region ? region.x + region.width : rect.right) -\n left;\n const height =\n Math.min(\n window.innerHeight,\n region ? region.y + region.height : rect.bottom\n ) - top;\n if (width <= 0 || height <= 0)\n throw new Error('The annotation area is not visible.');\n const scale = Math.min(1, 1024 / width, 1024 / height);\n const source = await toCanvas(element, {\n width,\n height,\n canvasWidth: Math.max(1, Math.round(width * scale)),\n canvasHeight: Math.max(1, Math.round(height * scale)),\n pixelRatio: 1,\n skipFonts: true,\n style: {\n width: `${rect.width}px`,\n height: `${rect.height}px`,\n margin: '0',\n position: 'relative',\n top: '0',\n left: '0',\n right: 'auto',\n bottom: 'auto',\n transformOrigin: 'top left',\n transform: `translate(${rect.left - left}px, ${rect.top - top}px)`,\n },\n backgroundColor:\n getComputedStyle(document.documentElement)\n .getPropertyValue('--atbl-background')\n .trim() || '#fff',\n filter: node =>\n !(node instanceof Element && node.closest('[data-annotation-ui]')),\n });\n let outputScale = 1;\n for (let attempt = 0; attempt < 5; attempt++) {\n const canvas = document.createElement('canvas');\n canvas.width = Math.max(1, Math.round(source.width * outputScale));\n canvas.height = Math.max(1, Math.round(source.height * outputScale));\n canvas\n .getContext('2d')!\n .drawImage(source, 0, 0, canvas.width, canvas.height);\n const dataUrl = canvas.toDataURL('image/png');\n if (dataUrl.length <= 349_550)\n return {\n mimeType: 'image/png',\n dataUrl,\n width: canvas.width,\n height: canvas.height,\n };\n outputScale *= 0.75;\n }\n throw new Error('The annotation image is too large.');\n}\n",
83
+ "import { useEffect, useId, useRef, useState, type ComponentRef } from 'react';\nimport { annotationRoot } from '@/src/react/annotations/annotation-targets';\nimport { Kbd } from '@/src/react/ui/Kbd';\nimport { isPlainKeyEvent } from '@/src/react/ui/keyboard';\nimport type {\n AnnotationTargetElement,\n AnnotationPoint,\n AnnotationRect,\n} from '@/src/react/annotations/annotation-targets';\n\ntype AnnotationSelectionLayerProps = {\n scope: HTMLElement;\n targets: AnnotationTargetElement[];\n onHover: (target: AnnotationTargetElement | undefined) => void;\n onSelect: (\n target: AnnotationTargetElement,\n point?: AnnotationPoint,\n region?: AnnotationRect\n ) => void;\n disabled: boolean;\n editing: boolean;\n};\n\n/** Own pointer selection and keyboard focus while the app underneath is inert. */\nexport function AnnotationSelectionLayer({\n scope,\n targets,\n onHover,\n onSelect,\n disabled,\n editing,\n}: AnnotationSelectionLayerProps) {\n const instructionsId = useId();\n const layer = useRef<ComponentRef<'button'>>(null);\n const start = useRef<AnnotationPoint | undefined>(undefined);\n const keyboardEnd = useRef<AnnotationPoint | undefined>(undefined);\n const [region, setRegion] = useState<AnnotationRect>();\n const [targetIndex, setTargetIndex] = useState(-1);\n const current = targets[targetIndex];\n useEffect(() => {\n const previouslyFocused = document.activeElement;\n const app = scope.closest<HTMLElement>('.altertable-app-layout') ?? scope;\n const wasInert = app.inert;\n app.toggleAttribute('inert', true);\n function blockScroll(event: WheelEvent) {\n if (event.target === layer.current && !event.ctrlKey && !event.metaKey)\n event.preventDefault();\n }\n document.addEventListener('wheel', blockScroll, {\n passive: false,\n capture: true,\n });\n layer.current?.focus({ preventScroll: true });\n return () => {\n document.removeEventListener('wheel', blockScroll, true);\n app.toggleAttribute('inert', wasInert);\n if (\n previouslyFocused instanceof HTMLElement &&\n previouslyFocused.isConnected\n )\n previouslyFocused.focus({ preventScroll: true });\n };\n }, [scope]);\n useEffect(() => {\n if (!editing) layer.current?.focus({ preventScroll: true });\n }, [editing]);\n function targetAtPoint(point: AnnotationPoint) {\n let targetAtPointer: AnnotationTargetElement | undefined;\n let smallestArea = Infinity;\n for (const target of targets) {\n const rect = target.element.getBoundingClientRect();\n if (\n point.x < rect.left ||\n point.x > rect.right ||\n point.y < rect.top ||\n point.y > rect.bottom\n )\n continue;\n const area = rect.width * rect.height;\n if (area < smallestArea) {\n smallestArea = area;\n targetAtPointer = target;\n }\n }\n return targetAtPointer;\n }\n function areaBetween(point: AnnotationPoint): AnnotationRect | undefined {\n if (!start.current) return undefined;\n // A reserved scrollbar gutter is outside the captured body.\n const documentRect = annotationRoot(scope)?.element.getBoundingClientRect();\n const minX = Math.max(0, documentRect?.left ?? 0);\n const minY = Math.max(0, documentRect?.top ?? 0);\n const maxX = Math.min(\n window.innerWidth,\n document.documentElement.clientWidth,\n documentRect?.right ?? window.innerWidth\n );\n const maxY = Math.min(\n window.innerHeight,\n document.documentElement.clientHeight,\n documentRect?.bottom ?? window.innerHeight\n );\n const left = Math.min(\n maxX,\n Math.max(minX, Math.min(start.current.x, point.x))\n );\n const top = Math.min(\n maxY,\n Math.max(minY, Math.min(start.current.y, point.y))\n );\n const right = Math.max(\n minX,\n Math.min(maxX, Math.max(start.current.x, point.x))\n );\n const bottom = Math.max(\n minY,\n Math.min(maxY, Math.max(start.current.y, point.y))\n );\n return {\n x: left,\n y: top,\n width: Math.max(0, right - left),\n height: Math.max(0, bottom - top),\n };\n }\n function resetAreaSelection() {\n start.current = undefined;\n keyboardEnd.current = undefined;\n setRegion(undefined);\n }\n function finishSelection(point: AnnotationPoint) {\n const area = areaBetween(point);\n resetAreaSelection();\n if (disabled) return;\n if (area && area.width >= 8 && area.height >= 8) {\n const root = annotationRoot(scope);\n if (root) onSelect(root, point, area);\n } else {\n const target = targetAtPoint(point);\n if (target) {\n setTargetIndex(\n targets.findIndex(candidate => candidate.id === target.id)\n );\n onSelect(target, point);\n }\n }\n }\n return (\n <>\n <button\n data-atbl-focus=\"ring\"\n data-atbl-control=\"action\"\n type=\"button\"\n ref={layer}\n data-annotation-ui\n data-selecting={Boolean(region) || undefined}\n data-editing={editing || undefined}\n className=\"altertable-annotation-selection-layer\"\n aria-label=\"Annotation selection\"\n aria-describedby={instructionsId}\n aria-disabled={disabled || editing || undefined}\n tabIndex={disabled || editing ? -1 : 0}\n onKeyDown={event => {\n if (!isPlainKeyEvent(event.nativeEvent, { allowShift: true })) return;\n if (event.key === 'Escape' && start.current) {\n event.preventDefault();\n event.stopPropagation();\n resetAreaSelection();\n return;\n }\n if (disabled || editing) return;\n if (event.key === 'PageDown' || event.key === 'PageUp') {\n event.preventDefault();\n return;\n }\n if (event.key === 'Enter' && event.shiftKey && !keyboardEnd.current) {\n event.preventDefault();\n start.current = { x: 20, y: 20 };\n keyboardEnd.current = {\n x: start.current.x + 100,\n y: start.current.y + 80,\n };\n setRegion(areaBetween(keyboardEnd.current));\n onHover(undefined);\n return;\n }\n if (keyboardEnd.current) {\n if (event.key === 'Enter') {\n event.preventDefault();\n finishSelection(keyboardEnd.current);\n } else if (event.key.startsWith('Arrow')) {\n event.preventDefault();\n const movement = {\n x:\n event.key === 'ArrowRight'\n ? 10\n : event.key === 'ArrowLeft'\n ? -10\n : 0,\n y:\n event.key === 'ArrowDown'\n ? 10\n : event.key === 'ArrowUp'\n ? -10\n : 0,\n };\n keyboardEnd.current = {\n x: keyboardEnd.current.x + movement.x,\n y: keyboardEnd.current.y + movement.y,\n };\n if (event.shiftKey && start.current)\n start.current = {\n x: start.current.x + movement.x,\n y: start.current.y + movement.y,\n };\n setRegion(areaBetween(keyboardEnd.current));\n }\n return;\n }\n if (\n [\n 'ArrowRight',\n 'ArrowLeft',\n 'ArrowDown',\n 'ArrowUp',\n 'Home',\n 'End',\n ].includes(event.key)\n ) {\n event.preventDefault();\n if (!targets.length) return;\n const direction = ['ArrowLeft', 'ArrowUp'].includes(event.key)\n ? -1\n : 1;\n let next: number;\n if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = targets.length - 1;\n else if (targetIndex < 0)\n next = direction < 0 ? targets.length - 1 : 0;\n else\n next =\n (targetIndex + direction + targets.length) % targets.length;\n setTargetIndex(next);\n const target = targets[next];\n target?.element.scrollIntoView({ block: 'nearest' });\n onHover(target);\n } else if ((event.key === 'Enter' || event.key === ' ') && current) {\n event.preventDefault();\n onSelect(current);\n }\n }}\n onPointerDown={event => {\n if (disabled || editing) {\n event.preventDefault();\n return;\n }\n if (event.button !== 0) return;\n event.preventDefault();\n layer.current?.focus({ preventScroll: true });\n keyboardEnd.current = undefined;\n start.current = { x: event.clientX, y: event.clientY };\n setRegion({ ...start.current, width: 0, height: 0 });\n event.currentTarget.setPointerCapture(event.pointerId);\n }}\n onPointerMove={event => {\n if (disabled || editing) return;\n const point = { x: event.clientX, y: event.clientY };\n if (!start.current) {\n const target = targetAtPoint(point);\n setTargetIndex(\n target\n ? targets.findIndex(candidate => candidate.id === target.id)\n : -1\n );\n onHover(target);\n return;\n }\n setRegion(areaBetween(point));\n }}\n onPointerUp={event => {\n if (disabled || editing) return;\n const point = { x: event.clientX, y: event.clientY };\n if (!start.current) return;\n if (event.currentTarget.hasPointerCapture(event.pointerId))\n event.currentTarget.releasePointerCapture(event.pointerId);\n finishSelection(point);\n }}\n onPointerCancel={resetAreaSelection}\n />\n <span id={instructionsId} className=\"altertable-sr-only\">\n Click an item or drag to select an area. Use arrow keys to choose an\n item and <Kbd>Enter</Kbd> to annotate it. <Kbd>Shift+Enter</Kbd> starts\n a custom area; arrows resize it, Shift+arrows move it, and{' '}\n <Kbd>Enter</Kbd> confirms. <Kbd>Esc</Kbd> cancels an area, closes the\n editor, then exits annotation mode.\n </span>\n <output\n className=\"altertable-sr-only\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {region\n ? `Selected area ${Math.round(region.width)} by ${Math.round(region.height)} pixels.`\n : current\n ? `${current.label}, ${targetIndex + 1} of ${targets.length}`\n : 'Annotation mode'}\n </output>\n {region && (\n <div\n data-annotation-ui\n aria-hidden\n className=\"altertable-annotation-outline\"\n style={{\n left: region.x,\n top: region.y,\n width: region.width,\n height: region.height,\n }}\n />\n )}\n </>\n );\n}\n",
84
+ "import type { ComponentRef, Ref } from 'react';\nimport { AppIcon } from '@/src/react/ui/icons';\nimport { Button } from '@/src/react/ui/Button';\nimport { Kbd } from '@/src/react/ui/Kbd';\nimport { AnnotationTooltip } from '@/src/react/annotations/AnnotationTooltip';\nimport { shortcuts, ariaKeyShortcuts } from '@/src/react/ui/shortcuts';\n\ntype AnnotationTriggerProps = {\n buttonRef: Ref<ComponentRef<'button'>>;\n active: boolean;\n disabled: boolean;\n count: number;\n onToggle: () => void;\n};\n\nexport function AnnotationTrigger({\n buttonRef,\n active,\n disabled,\n count,\n onToggle,\n}: AnnotationTriggerProps) {\n return (\n <AnnotationTooltip\n content={\n <>\n Point at items to change the data app{' '}\n <Kbd shortcut={shortcuts.annotate} />\n </>\n }\n >\n <Button\n data-annotation-ui\n className=\"altertable-annotation-trigger\"\n aria-label=\"Annotate\"\n aria-keyshortcuts={ariaKeyShortcuts(shortcuts.annotate)}\n size=\"compact\"\n variant=\"elevated\"\n ref={buttonRef}\n aria-pressed={active}\n disabled={disabled}\n onClick={onToggle}\n >\n <AppIcon name=\"annotate\" size={16} /> Annotate{' '}\n {count > 0 && (\n <span className=\"altertable-annotation-count\">{count}</span>\n )}\n </Button>\n </AnnotationTooltip>\n );\n}\n",
85
+ "import type { ComponentRef, CSSProperties, Ref } from 'react';\nimport { ArrowUp } from 'lucide-react';\nimport type { AnnotationEditorState } from '@/src/react/annotations/annotation-editor-state';\nimport { Button } from '@/src/react/ui/Button';\nimport { Kbd } from '@/src/react/ui/Kbd';\nimport { isPlainKeyEvent } from '@/src/react/ui/keyboard';\nimport {\n ariaKeyShortcuts,\n matchesShortcut,\n shortcuts,\n} from '@/src/react/ui/shortcuts';\nimport { AnnotationTooltip } from '@/src/react/annotations/AnnotationTooltip';\n\ntype AnnotationEditorProps = {\n editor: AnnotationEditorState;\n editorRef: Ref<ComponentRef<'section'>>;\n textareaRef: Ref<ComponentRef<'textarea'>>;\n style: CSSProperties;\n disabled: boolean;\n onCommentChange: (comment: string) => void;\n onSubmit: () => void;\n onSend: () => void;\n onRetryScreenshot: () => void;\n onShakeEnd: () => void;\n};\n\nexport function AnnotationEditor({\n editor,\n editorRef,\n textareaRef,\n style,\n disabled,\n onCommentChange,\n onSubmit,\n onSend,\n onRetryScreenshot,\n onShakeEnd,\n}: AnnotationEditorProps) {\n const submitLabel = editor.annotationId\n ? 'Save annotation'\n : 'Add annotation';\n return (\n <section\n data-annotation-ui\n ref={editorRef}\n style={style}\n className=\"altertable-annotation-composer\"\n data-shaking={editor.shaking || undefined}\n onAnimationEnd={onShakeEnd}\n aria-label=\"Annotation editor\"\n >\n <textarea\n data-atbl-control=\"text\"\n aria-label=\"Annotation text\"\n aria-keyshortcuts={`Enter ${ariaKeyShortcuts(shortcuts.sendAnnotations)}`}\n placeholder=\"Describe what to change…\"\n ref={textareaRef}\n rows={1}\n maxLength={2000}\n value={editor.comment}\n disabled={disabled}\n onChange={event => onCommentChange(event.target.value)}\n onKeyDown={event => {\n if (matchesShortcut(event.nativeEvent, shortcuts.sendAnnotations)) {\n event.preventDefault();\n event.stopPropagation();\n event.nativeEvent.stopImmediatePropagation();\n onSend();\n return;\n }\n if (event.key === 'Enter' && isPlainKeyEvent(event.nativeEvent)) {\n event.preventDefault();\n if (editor.comment.trim()) onSubmit();\n }\n }}\n />\n <AnnotationTooltip\n content={\n <>\n {submitLabel} <Kbd>Enter</Kbd>\n </>\n }\n >\n <Button\n aria-label={submitLabel}\n onClick={onSubmit}\n className=\"altertable-annotation-submit\"\n size=\"icon-compact\"\n variant=\"elevated\"\n disabled={\n disabled ||\n !editor.comment.trim() ||\n editor.captureStatus !== 'ready'\n }\n >\n <ArrowUp size={16} aria-hidden />\n </Button>\n </AnnotationTooltip>\n {editor.captureStatus === 'capturing' && (\n <output className=\"altertable-annotation-capture-status\">\n Capturing screenshot…\n </output>\n )}\n {editor.captureStatus === 'failed' && (\n <div className=\"altertable-annotation-capture-status\">\n <p role=\"alert\">Screenshot capture failed. Your text is preserved.</p>\n <Button\n size=\"compact\"\n disabled={disabled}\n onClick={onRetryScreenshot}\n >\n Retry screenshot\n </Button>\n </div>\n )}\n {editor.error && <p role=\"alert\">{editor.error}</p>}\n </section>\n );\n}\n",
86
+ "import type {\n AnnotationPoint,\n AnnotationRect,\n} from '@/src/react/annotations/annotation-targets';\nimport { Kbd } from '@/src/react/ui/Kbd';\n\nexport type AnnotationPin = {\n id: string;\n number: number;\n anchor: AnnotationPoint;\n rect: AnnotationRect;\n};\n\ntype AnnotationMarkersProps = {\n outline?: AnnotationRect;\n rounded: boolean;\n pins: AnnotationPin[];\n pinsVisible: boolean;\n disabled: boolean;\n showHint: boolean;\n hasDuplicateIds: boolean;\n onOpenAnnotation: (id: string) => void;\n};\n\nexport function AnnotationMarkers({\n outline,\n rounded,\n pins,\n pinsVisible,\n disabled,\n showHint,\n hasDuplicateIds,\n onOpenAnnotation,\n}: AnnotationMarkersProps) {\n return (\n <>\n {outline && pinsVisible && (\n <div\n aria-hidden\n data-annotation-ui\n data-widget={rounded || undefined}\n className=\"altertable-annotation-outline\"\n style={{\n left: outline.x,\n top: outline.y,\n width: outline.width,\n height: outline.height,\n }}\n />\n )}\n {pinsVisible &&\n pins.map(pin => (\n <button\n data-atbl-focus=\"ring\"\n data-atbl-control=\"action\"\n type=\"button\"\n data-annotation-ui\n key={pin.id}\n disabled={disabled}\n onClick={() => onOpenAnnotation(pin.id)}\n className=\"altertable-annotation-pin\"\n aria-label={`Annotation ${pin.number}`}\n style={{\n left: pin.rect.x + pin.rect.width * pin.anchor.x - 12,\n top: pin.rect.y + pin.rect.height * pin.anchor.y - 12,\n }}\n >\n {pin.number}\n </button>\n ))}\n {showHint && (\n <output data-annotation-ui className=\"altertable-annotation-hint\">\n {hasDuplicateIds ? (\n 'Some items cannot be annotated.'\n ) : (\n <>\n Point at an item or drag to select <Kbd>Esc</Kbd> to exit\n </>\n )}\n </output>\n )}\n </>\n );\n}\n",
87
+ "import { useEffect, useState, type ComponentRef, type RefObject } from 'react';\nimport type { DataAppAnnotationPresentation } from '@/src/core/annotations';\nimport {\n annotationGeometry,\n discoverAnnotationTargets,\n findAnnotationTarget,\n projectAnnotationRect,\n type AnnotationRect,\n type AnnotationTargetElement,\n} from '@/src/react/annotations/annotation-targets';\nimport type { AnnotationPin } from '@/src/react/annotations/AnnotationMarkers';\n\ntype AnnotationRootRef = RefObject<ComponentRef<'div'> | null>;\n\nexport function useAnnotationTargets(\n rootRef: AnnotationRootRef,\n active: boolean\n) {\n const [discovery, setDiscovery] = useState<\n ReturnType<typeof discoverAnnotationTargets> & { scope?: HTMLElement }\n >({ targets: [], hasDuplicateIds: false });\n useEffect(() => {\n if (!active) return;\n const root = rootRef.current;\n function discover() {\n setDiscovery({\n ...discoverAnnotationTargets(root),\n scope:\n root?.closest<HTMLElement>('.altertable-app-main') ??\n root ??\n undefined,\n });\n }\n discover();\n const observer = new MutationObserver(discover);\n if (root)\n observer.observe(root, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: [\n 'data-annotation-id',\n 'data-annotation-label',\n 'hidden',\n 'aria-hidden',\n 'style',\n 'class',\n ],\n });\n window.addEventListener('resize', discover);\n return () => {\n observer.disconnect();\n window.removeEventListener('resize', discover);\n };\n }, [rootRef, active]);\n return discovery;\n}\n\ntype AnnotationGeometryOptions = {\n rootRef: AnnotationRootRef;\n target?: AnnotationTargetElement;\n region?: AnnotationRect;\n targets: DataAppAnnotationPresentation['targets'];\n};\n\nexport function useAnnotationGeometry({\n rootRef,\n target,\n region,\n targets,\n}: AnnotationGeometryOptions) {\n const [geometry, setGeometry] = useState<{\n pins: AnnotationPin[];\n outline?: AnnotationRect;\n }>({ pins: [] });\n useEffect(() => {\n function measure() {\n const pins = (targets ?? []).flatMap(pin => {\n const target = findAnnotationTarget(rootRef.current, pin.targetId);\n return target\n ? [\n {\n id: pin.id,\n number: pin.number,\n rect: annotationGeometry(target.element),\n anchor: pin.anchor ?? { x: 1, y: 0 },\n },\n ]\n : [];\n });\n const rect = target?.element.isConnected\n ? annotationGeometry(target.element)\n : undefined;\n setGeometry({\n pins,\n outline: rect && region ? projectAnnotationRect(region, rect) : rect,\n });\n }\n measure();\n const observer = new ResizeObserver(measure);\n if (rootRef.current) observer.observe(rootRef.current);\n window.addEventListener('resize', measure);\n document.addEventListener('scroll', measure, true);\n return () => {\n observer.disconnect();\n window.removeEventListener('resize', measure);\n document.removeEventListener('scroll', measure, true);\n };\n }, [rootRef, target, region, targets]);\n return geometry;\n}\n",
88
+ "import type { DataAppAnnotationDraft } from '@/src/core/annotations';\nimport type { AnnotationTargetElement } from '@/src/react/annotations/annotation-targets';\n\nexport type AnnotationEditorState = {\n target: AnnotationTargetElement;\n draft: DataAppAnnotationDraft;\n annotationId?: string;\n comment: string;\n captureStatus: 'capturing' | 'ready' | 'failed';\n error: string;\n discardArmed: boolean;\n shaking: boolean;\n};\n\ntype AnnotationControlsState = {\n annotationModeActive: boolean;\n observedActive: boolean;\n hoveredTarget?: AnnotationTargetElement;\n editor?: AnnotationEditorState;\n saving: boolean;\n};\n\ntype AnnotationControlsAction =\n | { type: 'annotationModeChanged'; active: boolean }\n | { type: 'externalModeObserved'; active: boolean }\n | { type: 'targetHovered'; target?: AnnotationTargetElement }\n | { type: 'editorOpened'; editor: AnnotationEditorState }\n | { type: 'editorClosed' }\n | { type: 'commentChanged'; comment: string }\n | { type: 'captureCompleted'; draftId: string; succeeded: boolean }\n | { type: 'editorEscaped'; hasUnsavedChanges: boolean }\n | { type: 'shakeFinished' }\n | { type: 'saveStarted' }\n | { type: 'saveFailed'; error: string }\n | { type: 'saveFinished' };\n\nexport function createAnnotationControlsState(\n active: boolean\n): AnnotationControlsState {\n return {\n annotationModeActive: active,\n observedActive: active,\n saving: false,\n };\n}\n\nexport function annotationControlsReducer(\n state: AnnotationControlsState,\n action: AnnotationControlsAction\n): AnnotationControlsState {\n switch (action.type) {\n case 'annotationModeChanged':\n return {\n ...state,\n annotationModeActive: action.active,\n ...(!action.active\n ? { editor: undefined, hoveredTarget: undefined }\n : {}),\n };\n case 'externalModeObserved':\n return {\n ...state,\n observedActive: action.active,\n ...(!action.active\n ? { editor: undefined, hoveredTarget: undefined }\n : {}),\n };\n case 'targetHovered':\n return { ...state, hoveredTarget: action.target };\n case 'editorOpened':\n return { ...state, editor: action.editor, hoveredTarget: undefined };\n case 'editorClosed':\n return { ...state, editor: undefined };\n case 'saveStarted':\n return {\n ...state,\n saving: true,\n editor: state.editor ? { ...state.editor, error: '' } : undefined,\n };\n case 'saveFinished':\n return { ...state, saving: false };\n }\n const editor = state.editor;\n if (!editor) return state;\n switch (action.type) {\n case 'commentChanged':\n return {\n ...state,\n editor: {\n ...editor,\n comment: action.comment,\n discardArmed: false,\n shaking: false,\n },\n };\n case 'captureCompleted':\n return editor.draft.id === action.draftId\n ? {\n ...state,\n editor: {\n ...editor,\n captureStatus: action.succeeded ? 'ready' : 'failed',\n },\n }\n : state;\n case 'editorEscaped':\n return action.hasUnsavedChanges && !editor.discardArmed\n ? { ...state, editor: { ...editor, discardArmed: true, shaking: true } }\n : { ...state, editor: undefined };\n case 'shakeFinished':\n return { ...state, editor: { ...editor, shaking: false } };\n case 'saveFailed':\n return { ...state, editor: { ...editor, error: action.error } };\n }\n}\n",
89
+ "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",
90
+ "import {\n isAnnotationPresentation,\n type DataAppAnnotationPresentation,\n} from '@/src/core/annotations';\nimport 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 annotations?: DataAppAnnotationPresentation;\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 (presentation.annotations === undefined ||\n isAnnotationPresentation(presentation.annotations))\n );\n}\n",
91
+ "import { AnnotationControls } from '@/src/react/annotations/AnnotationControls';\nimport { useDataAppPresentation } from '@/src/react/ui/useDataAppPresentation';\nimport { useEffect, useRef, type ReactNode } from 'react';\nimport { useAppAppearance } from '@/src/react/ui/useAppAppearance';\nimport type { DisclosedQuery } from '@/src/core/contract';\nimport { useDataApp } from '@/src/react/app-context';\nimport type { CsvExport } from '@/src/react/ui/csv-export';\nimport {\n displayedSnapshot,\n type DisplayedSnapshot,\n} from '@/src/core/data-view';\nimport { AboutData } 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 } 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 { InspectionProvider } from '@/src/react/ui/InspectionProvider';\nimport { InspectionContext } from '@/src/react/ui/InspectionContext';\nimport type { SectionResult } from '@/src/react/ui/DataSectionBoundary';\n\nexport type DataAppBaseProps = {\n children: ReactNode;\n dataContext: DataContext;\n /** Override the declared subtitle; null hides it. */\n description?: ReactNode;\n toolbarActions?: ReactNode;\n footerActions?: ReactNode;\n};\n\nexport type DataAppRequest<Data, Input> = SectionResult<Data, Input> & {\n queries?: DisclosedQuery[];\n /** Actual request activity, including retries with retained data. */\n refreshing?: boolean;\n cancel?: () => unknown;\n controls?: ReactNode;\n};\n\nexport type StaticDataAppProps = DataAppBaseProps & {\n csvExport?: CsvExport;\n queries?: DisclosedQuery[];\n};\n\nexport type DataAppProps<Data = unknown, Input = unknown> =\n | (DataAppBaseProps & {\n request: DataAppRequest<Data, Input>;\n /** Findings are always derived from the result currently visible to the reader. */\n story: BoundStory<Data, Input>;\n /** Export every distinct dataset in the displayed result. */\n csvExport: (snapshot: DisplayedSnapshot<Data, Input>) => CsvExport;\n queries?: never;\n })\n | (StaticDataAppProps & {\n request?: never;\n story?: never;\n });\n\n/** Owns the page title, header, gutter, and width; body content uses section headings.\n * The primary request binds the toolbar, controls, refresh, and inspection.\n * Children always render; compose DataSection boundaries around independently loading content. */\nexport function DataAppFrame<Data, Input>(props: DataAppProps<Data, Input>) {\n const {\n dataContext,\n description,\n request,\n queries,\n footerActions,\n toolbarActions,\n } = props;\n const app = useDataApp();\n const presentation = useDataAppPresentation();\n const isEmbedded = presentation?.surface === 'embedded';\n const themeController = useAppAppearance(app.appearance, presentation?.theme);\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={app.scope.organization}\n environment={app.scope.environment}\n />\n );\n const toolbar = (\n <AppToolbar\n csvExport={\n request\n ? snapshot\n ? props.csvExport(snapshot)\n : null\n : props.csvExport\n }\n requestState={request?.view.kind}\n refresh={\n request\n ? {\n refreshing:\n request.refreshing ??\n (request.view.kind === 'loading' ||\n request.view.kind === 'updating'),\n onRefresh: () => void request.refetch(),\n onCancel: request.cancel\n ? () => void request.cancel?.()\n : undefined,\n }\n : undefined\n }\n story={\n story\n ? {\n ...story,\n title: app.title,\n scope,\n dataContext,\n theme: themeController,\n }\n : request\n ? null\n : undefined\n }\n aboutData={\n <AboutData\n id=\"data\"\n shortcut\n dataContext={dataContext}\n queries={request?.queries ?? queries}\n iconOnly\n variant=\"elevated\"\n />\n }\n >\n {presentation?.annotations?.enabled && (\n <AnnotationControls\n rootRef={bodyRef}\n presentation={presentation.annotations}\n displayedInput={snapshot?.input}\n view={snapshot?.state}\n />\n )}\n {toolbarActions}\n </AppToolbar>\n );\n\n return (\n <InspectionProvider>\n <InspectionContext\n value={{\n dataContext,\n queries: request?.queries ?? queries,\n primaryView: request?.view,\n }}\n >\n <AppLayout\n footer={isEmbedded ? null : undefined}\n footerActions={\n <>\n {footerActions}\n {themeController && <ThemeToggle theme={themeController} />}\n </>\n }\n >\n {isEmbedded ? (\n toolbar\n ) : (\n <AppHeader\n scope={scope}\n title={app.title}\n description={\n description === undefined ? app.description : description\n }\n toolbar={toolbar}\n />\n )}\n {request?.controls && <VariableBar>{request?.controls}</VariableBar>}\n <div ref={bodyRef} className=\"altertable-app-body\">\n {props.children}\n </div>\n {request && (\n <DataViewToast\n view={request.view}\n onRetry={() => void request.refetch()}\n />\n )}\n </AppLayout>\n </InspectionContext>\n </InspectionProvider>\n );\n}\n",
92
+ "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 | undefined,\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",
93
+ "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} & 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 className,\n ...props\n}: AppHeaderProps) {\n return (\n <header\n {...props}\n className={classNames('altertable-app-header', className)}\n >\n <div className=\"altertable-app-header-heading\">\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",
94
+ "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",
95
+ "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 data-atbl-focus=\"ring\"\n data-atbl-control=\"action\"\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",
96
+ "import type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { classNames } from '@/src/react/ui/classNames';\nimport { AppFooter } from '@/src/react/ui/AppFooter';\nimport { TooltipProvider } from '@/src/react/ui/Tooltip';\n\nexport type AppLayoutProps = {\n children: ReactNode;\n footerActions?: ReactNode;\n footer?: ReactNode;\n} & Omit<ComponentPropsWithRef<'main'>, 'children'>;\n\n/**\n * Native props target `<main>`. The shell owns its wrapper and tooltip defaults.\n */\nexport function AppLayout({\n children,\n footerActions,\n footer,\n className,\n ...props\n}: AppLayoutProps) {\n return (\n <TooltipProvider>\n <div className=\"altertable-app-layout\">\n <main\n {...props}\n className={classNames('altertable-app-main', className)}\n >\n {children}\n </main>\n {footer === undefined ? <AppFooter>{footerActions}</AppFooter> : footer}\n </div>\n </TooltipProvider>\n );\n}\n",
97
+ "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",
98
+ "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 {\n MenuTrigger,\n MenuButton,\n MenuPopover,\n Menu,\n MenuItem,\n} from '@/src/react/ui/Menu';\nimport { AppIcon } from '@/src/react/ui/icons';\nimport { Toast } from '@/src/react/ui/Toast';\nimport { Tooltip } from '@/src/react/ui/Tooltip';\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 if (!csv?.tables.length) return;\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 if (!csv?.tables.length) {\n return (\n <IconButton\n icon=\"export\"\n variant=\"elevated\"\n label=\"Export CSV\"\n tooltip=\"Export data…\"\n disabled\n />\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 tooltip=\"Export data…\"\n disabled={status === 'pending'}\n aria-busy={status === 'pending'}\n onClick={() => void download()}\n />\n ) : (\n <MenuTrigger isOpen={open} onOpenChange={setOpen}>\n <Tooltip content=\"Export data…\">\n <MenuButton\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 </MenuButton>\n </Tooltip>\n <MenuPopover\n placement=\"bottom end\"\n className=\"altertable-export-popover\"\n >\n <Menu\n aria-label=\"Export data\"\n onAction={key =>\n void download(\n key === 'all' ? undefined : csv.tables[Number(key)]\n )\n }\n >\n {csv.tables.map((table, index) => (\n <MenuItem\n key={index}\n id={index}\n textValue={`Export ${table.name} CSV`}\n aria-label={`Export ${table.name} CSV`}\n >\n <span>Export {table.name}</span>\n <span className=\"altertable-export-format\">CSV</span>\n </MenuItem>\n ))}\n <MenuItem\n id=\"all\"\n textValue=\"Export all ZIP\"\n aria-label=\"Export all ZIP\"\n className=\"altertable-export-all\"\n >\n <span>Export all</span>\n <span className=\"altertable-export-format\">ZIP</span>\n </MenuItem>\n </Menu>\n </MenuPopover>\n </MenuTrigger>\n )}\n </>\n );\n}\n",
99
+ "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",
100
+ "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",
101
+ "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 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 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 className=\"altertable-refresh-status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {showProgress ? (status ?? label) : null}\n </div>\n {children}\n </div>\n );\n}\n",
102
+ "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 updatedAt?: ReactNode;\n requestState?: DataView<unknown, unknown>['kind'];\n refresh?: {\n refreshing: boolean;\n onRefresh: () => void;\n onCancel?: () => void;\n label?: string;\n tooltip?: ReactNode;\n };\n live?: LiveControlProps;\n aboutData?: ReactNode;\n /** Null reserves a disabled story action while its findings are unavailable. */\n story?: ComponentProps<typeof PresentStory> | null;\n /** Null reserves a disabled export action while its data is unavailable. */\n csvExport?: CsvExport | null;\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 requestState,\n refresh,\n live,\n aboutData,\n story,\n csvExport,\n end,\n className,\n role = 'group',\n 'aria-label': ariaLabel = 'Page actions',\n ...props\n}: AppToolbarProps) {\n const observation =\n requestState === 'loading' ? (\n refresh ? null : (\n <output>Loading data</output>\n )\n ) : (\n updatedAt\n );\n const refreshLabel =\n refresh?.refreshing && refresh.onCancel ? 'Cancel refresh' : '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 className=\"altertable-app-toolbar-actions\">\n {children}\n {observation && (\n <span className=\"altertable-app-toolbar-updated\">{observation}</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 >\n <IconButton\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 !== undefined && (\n <ExportControl csv={csvExport ?? undefined} />\n )}\n {story !== undefined &&\n (story ? (\n <PresentStory {...story} />\n ) : (\n <IconButton\n icon=\"present\"\n variant=\"elevated\"\n label=\"Present story\"\n disabled\n />\n ))}\n {end}\n </div>\n </div>\n );\n}\n",
103
+ "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"
104
+ ],
105
+ "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,oBAAmB,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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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",
106
+ "debugId": "8024F23D205D55BC64756E2164756E21",
107
+ "names": []
108
+ }