@altertable/data-app 0.65.0 → 0.66.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 (138) hide show
  1. package/AGENTS.md +38 -1
  2. package/CONTRIBUTING.md +37 -3
  3. package/README.md +1 -1
  4. package/dist/chunks/{contract-sm7j7k95.js → contract-13j5zb3c.js} +2 -144
  5. package/dist/chunks/contract-13j5zb3c.js.map +13 -0
  6. package/dist/chunks/contract-19ckn3n7.js +78 -0
  7. package/dist/chunks/contract-19ckn3n7.js.map +10 -0
  8. package/dist/chunks/{contract-a061yj6r.js → contract-e11m4y7f.js} +34 -70
  9. package/dist/chunks/contract-e11m4y7f.js.map +12 -0
  10. package/dist/chunks/{contract-g6hky7x6.js → contract-h8a6f559.js} +8 -4
  11. package/dist/chunks/contract-h8a6f559.js.map +12 -0
  12. package/dist/chunks/contract-havnjmdr.js +13011 -0
  13. package/dist/chunks/contract-havnjmdr.js.map +99 -0
  14. package/dist/chunks/{contract-txjy0en2.js → contract-m6n8ctfc.js} +64 -72
  15. package/dist/chunks/contract-m6n8ctfc.js.map +10 -0
  16. package/dist/chunks/contract-pk603qj7.js +146 -0
  17. package/dist/chunks/contract-pk603qj7.js.map +10 -0
  18. package/dist/chunks/{contract-yxbjea23.js → contract-rfbakka4.js} +179 -2
  19. package/dist/chunks/contract-rfbakka4.js.map +13 -0
  20. package/dist/client/index.js +11 -6
  21. package/dist/client/index.js.map +1 -1
  22. package/dist/core/appearance.js +1 -1
  23. package/dist/core/contract.js +13 -3
  24. package/dist/core/contract.js.map +1 -1
  25. package/dist/embed/index.js +9 -7
  26. package/dist/embed/index.js.map +2 -2
  27. package/dist/local.js +1 -1
  28. package/dist/local.js.map +2 -2
  29. package/dist/react/embed/index.js +1 -1
  30. package/dist/react/index.js +2532 -11545
  31. package/dist/react/index.js.map +16 -91
  32. package/dist/react/ui/index.js +1614 -0
  33. package/dist/react/ui/index.js.map +22 -0
  34. package/dist/server.js +1 -1
  35. package/dist/server.js.map +2 -2
  36. package/dist/types/client/annotations.d.ts +23 -0
  37. package/dist/types/client/index.d.ts +1 -0
  38. package/dist/types/core/annotations.d.ts +92 -0
  39. package/dist/types/core/appearance.d.ts +2 -2
  40. package/dist/types/core/contract.d.ts +2 -0
  41. package/dist/types/core/presentation.d.ts +2 -0
  42. package/dist/types/core/variables.d.ts +2 -5
  43. package/dist/types/react/annotations/AnnotationBar.d.ts +24 -0
  44. package/dist/types/react/annotations/AnnotationControls.d.ts +10 -0
  45. package/dist/types/react/annotations/AnnotationEditor.d.ts +15 -0
  46. package/dist/types/react/annotations/AnnotationMarkers.d.ts +19 -0
  47. package/dist/types/react/annotations/AnnotationSelectionLayer.d.ts +12 -0
  48. package/dist/types/react/annotations/AnnotationTarget.d.ts +9 -0
  49. package/dist/types/react/annotations/AnnotationTooltip.d.ts +9 -0
  50. package/dist/types/react/annotations/AnnotationTrigger.d.ts +10 -0
  51. package/dist/types/react/annotations/annotation-editor-state.d.ts +56 -0
  52. package/dist/types/react/annotations/annotation-screenshot.d.ts +4 -0
  53. package/dist/types/react/annotations/annotation-targets.d.ts +33 -0
  54. package/dist/types/react/annotations/getAnnotationProps.d.ts +15 -0
  55. package/dist/types/react/annotations/styles.d.ts +3 -0
  56. package/dist/types/react/annotations/useAnnotationGeometry.d.ts +22 -0
  57. package/dist/types/react/annotations/useDataAppAnnotations.d.ts +19 -0
  58. package/dist/types/react/bindings.d.ts +110 -0
  59. package/dist/types/react/content.d.ts +24 -11
  60. package/dist/types/react/hooks.d.ts +29 -787
  61. package/dist/types/react/index.d.ts +30 -105
  62. package/dist/types/react/source-owner.d.ts +2 -0
  63. package/dist/types/react/style-contract.d.ts +60 -0
  64. package/dist/types/react/style-validation.d.ts +2 -0
  65. package/dist/types/react/ui/AboutData.d.ts +9 -1
  66. package/dist/types/react/ui/AppHeader.d.ts +1 -2
  67. package/dist/types/react/ui/AppLayout.d.ts +3 -9
  68. package/dist/types/react/ui/AppToolbar.d.ts +5 -8
  69. package/dist/types/react/ui/AreaChart.d.ts +7 -0
  70. package/dist/types/react/ui/BarChart.d.ts +6 -0
  71. package/dist/types/react/ui/{ComparisonVisual.d.ts → Comparison.d.ts} +3 -3
  72. package/dist/types/react/ui/ContentSkeleton.d.ts +2 -0
  73. package/dist/types/react/ui/DataApp.d.ts +17 -58
  74. package/dist/types/react/ui/DataAppFrame.d.ts +42 -0
  75. package/dist/types/react/ui/DataBoundary.d.ts +4 -5
  76. package/dist/types/react/ui/DataSection.d.ts +6 -18
  77. package/dist/types/react/ui/DataSectionBoundary.d.ts +30 -0
  78. package/dist/types/react/ui/DataValue.d.ts +9 -0
  79. package/dist/types/react/ui/DataWidget.d.ts +2 -1
  80. package/dist/types/react/ui/DateTimeTooltip.d.ts +1 -1
  81. package/dist/types/react/ui/ExportControl.d.ts +1 -1
  82. package/dist/types/react/ui/HelpPopover.d.ts +3 -4
  83. package/dist/types/react/ui/InspectionContext.d.ts +2 -0
  84. package/dist/types/react/ui/InspectionProvider.d.ts +29 -0
  85. package/dist/types/react/ui/LineChart.d.ts +7 -0
  86. package/dist/types/react/ui/MetricWidget.d.ts +4 -3
  87. package/dist/types/react/ui/PieChart.d.ts +8 -0
  88. package/dist/types/react/ui/PresentStory.d.ts +2 -5
  89. package/dist/types/react/ui/RefreshControl.d.ts +1 -2
  90. package/dist/types/react/ui/ScatterChart.d.ts +17 -0
  91. package/dist/types/react/ui/SearchField.d.ts +1 -2
  92. package/dist/types/react/ui/SearchInput.d.ts +3 -1
  93. package/dist/types/react/ui/Sheet.d.ts +2 -1
  94. package/dist/types/react/ui/Skeleton.d.ts +5 -2
  95. package/dist/types/react/ui/StaticDataApp.d.ts +4 -0
  96. package/dist/types/react/ui/TableWidget.d.ts +19 -16
  97. package/dist/types/react/ui/Tabs.d.ts +6 -2
  98. package/dist/types/react/ui/TextWidget.d.ts +2 -1
  99. package/dist/types/react/ui/Tooltip.d.ts +4 -3
  100. package/dist/types/react/ui/TrendChart.d.ts +5 -0
  101. package/dist/types/react/ui/UpdatedAt.d.ts +1 -1
  102. package/dist/types/react/ui/VisualizationWidget.d.ts +12 -13
  103. package/dist/types/react/ui/WidgetViewTabs.d.ts +1 -1
  104. package/dist/types/react/ui/chart-data.d.ts +25 -0
  105. package/dist/types/react/ui/data-context.d.ts +18 -7
  106. package/dist/types/react/ui/icons.d.ts +1 -0
  107. package/dist/types/react/ui/index.d.ts +74 -0
  108. package/dist/types/react/ui/metric.d.ts +1 -1
  109. package/dist/types/react/ui/presentation.d.ts +5 -1
  110. package/dist/types/react/ui/shortcuts.d.ts +7 -1
  111. package/dist/types/react/view-runtime.d.ts +29 -0
  112. package/dist/types/react/view.d.ts +21 -4
  113. package/dist/types/react/widgets.d.ts +79 -0
  114. package/docs/app-authoring.md +58 -50
  115. package/docs/data-context.md +89 -0
  116. package/docs/formatting-and-appearance.md +52 -0
  117. package/docs/hosted-apps.md +0 -13
  118. package/docs/layout.md +4 -2
  119. package/docs/react-embed.md +2 -2
  120. package/docs/react.md +20 -316
  121. package/docs/stories-and-export.md +52 -0
  122. package/docs/styling.md +55 -0
  123. package/docs/ui-quality.md +20 -0
  124. package/docs/ui.md +41 -0
  125. package/docs/variables.md +98 -0
  126. package/docs/views.md +127 -0
  127. package/docs/widgets.md +142 -0
  128. package/examples/starter-data-app/index.tsx +82 -55
  129. package/package.json +12 -4
  130. package/dist/chunks/contract-a061yj6r.js.map +0 -12
  131. package/dist/chunks/contract-g6hky7x6.js.map +0 -12
  132. package/dist/chunks/contract-sm7j7k95.js.map +0 -14
  133. package/dist/chunks/contract-txjy0en2.js.map +0 -10
  134. package/dist/chunks/contract-yxbjea23.js.map +0 -12
  135. package/dist/types/react/ui/RefreshRegion.d.ts +0 -9
  136. package/dist/types/react/ui/SelectableBarChart.d.ts +0 -15
  137. package/docs/releasing.md +0 -79
  138. /package/dist/types/react/ui/{comparison.d.ts → metric-comparison.d.ts} +0 -0
@@ -1,34 +1,13 @@
1
- /**
2
- * React bindings and UI; inject styles explicitly in the browser entry.
3
- * @module @altertable/data-app/react
4
- * @see https://github.com/altertable-ai/data-app/blob/main/docs/react.md
5
- */
1
+ /** Declared views, bound widgets, and layouts for data-app authoring. */
2
+ export type { DatasetColumn, DatasetDeclaration as DatasetDefinition, } from './bindings.js';
6
3
  export { injectDataAppStyles } from './styles.js';
7
- export { injectDataAppShellStyles } from './shellStyles.js';
8
4
  export type { DataAppStylesOptions } from './styles.js';
9
- export { mountDataApp, DataAppProvider } from './mount.js';
5
+ export type { DataAppStyle, DataAppStyleToken, DataAppStyleHooks, } from './style-contract.js';
6
+ export { mountDataApp } from './mount.js';
10
7
  export { createDataHooks } from './hooks.js';
11
- export { defineDataContent } from './content.js';
12
- export type { DataContentState } from './content.js';
13
- export type { DataViewDefinition, ResolvedVariables, ViewBindings, } from './view.js';
14
- export type { CsvCell, CsvTable, CsvExport } from './ui/csv-export.js';
8
+ export type { CsvCell } from './ui/csv-export.js';
15
9
  export { DataApp } from './ui/DataApp.js';
16
- export type { DataAppProps, DataAppRequest } from './ui/DataApp.js';
17
- export { GettingStarted } from './ui/GettingStarted.js';
18
- export { AppLayout } from './ui/AppLayout.js';
19
- export type { AppLayoutProps } from './ui/AppLayout.js';
20
- export { AppHeader } from './ui/AppHeader.js';
21
- export type { AppHeaderProps } from './ui/AppHeader.js';
22
- export { AppScope } from './ui/AppScope.js';
23
- export type { AppScopeProps } from './ui/AppScope.js';
24
- export { AppToolbar } from './ui/AppToolbar.js';
25
- export type { AppToolbarProps } from './ui/AppToolbar.js';
26
- export { VariableBar } from './ui/VariableBar.js';
27
- export type { VariableBarProps } from './ui/VariableBar.js';
28
- export { AppFooter } from './ui/AppFooter.js';
29
- export type { AppFooterProps } from './ui/AppFooter.js';
30
- export { ThemeSelector, ThemeToggle } from './ui/ThemeSelector.js';
31
- export type { ThemeSelectorProps } from './ui/ThemeSelector.js';
10
+ export type { DataAppProps } from './ui/DataApp.js';
32
11
  export { Stack } from './ui/Stack.js';
33
12
  export type { StackProps } from './ui/Stack.js';
34
13
  export { Grid } from './ui/Grid.js';
@@ -36,110 +15,56 @@ export type { GridProps } from './ui/Grid.js';
36
15
  export { GridItem } from './ui/GridItem.js';
37
16
  export type { GridItemProps } from './ui/GridItem.js';
38
17
  export type { WidgetEvidence } from './ui/WidgetEvidence.js';
39
- export { DataWidget } from './ui/DataWidget.js';
40
- export type { WidgetStatus } from './ui/RequestHint.js';
41
- export type { DataWidgetProps } from './ui/DataWidget.js';
42
18
  export { TextContent } from './ui/TextContent.js';
43
19
  export type { TextContentProps } from './ui/TextContent.js';
44
- export { TextWidget } from './ui/TextWidget.js';
45
- export type { TextWidgetProps } from './ui/TextWidget.js';
46
- export { VisualizationWidget } from './ui/VisualizationWidget.js';
47
- export type { VisualizationWidgetProps, VisualizationWidgetView, } from './ui/VisualizationWidget.js';
48
- export { TableWidget } from './ui/TableWidget.js';
49
- export type { TableWidgetColumn, TableWidgetProps, TableWidgetSearch, } from './ui/TableWidget.js';
20
+ export { DataValue } from './widgets.js';
21
+ export type { DataValueProps } from './widgets.js';
22
+ export { TextWidget } from './widgets.js';
23
+ export type { TextWidgetProps } from './widgets.js';
24
+ export { VisualizationWidget } from './widgets.js';
25
+ export type { VisualizationWidgetProps } from './widgets.js';
26
+ export type { VisualizationWidgetView } from './widgets.js';
27
+ export { TableWidget } from './widgets.js';
28
+ export type { TableWidgetProps } from './widgets.js';
29
+ export type { TableWidgetSearch } from './ui/TableWidget.js';
50
30
  export { chartColor } from './ui/chartColor.js';
51
31
  export { Breakdown } from './ui/Breakdown.js';
52
32
  export type { BreakdownItem, BreakdownProps } from './ui/Breakdown.js';
53
33
  export { Ranking } from './ui/Ranking.js';
54
34
  export type { RankingItem, RankingProps } from './ui/Ranking.js';
55
- export { WidgetDisclosure } from './ui/WidgetDisclosure.js';
56
- export type { WidgetDisclosureProps } from './ui/WidgetDisclosure.js';
57
- export { WidgetViewTabs } from './ui/WidgetViewTabs.js';
58
- export type { WidgetView, WidgetViewTabsProps, } from './ui/WidgetViewTabs.js';
59
- export { ComparisonVisual } from './ui/ComparisonVisual.js';
60
- export type { ComparisonVisualProps } from './ui/ComparisonVisual.js';
61
- export { calendarMetricComparison } from './ui/comparison.js';
62
- export type { MetricComparison } from './ui/comparison.js';
63
- export { DataTable, DataTableEmptyRow, DataTableTimestamp, DataTableShare, } from './ui/DataTable.js';
64
- export type { DataTableProps, DataTableSearch, DataTableEmptyRowProps, DataTableTimestampProps, } from './ui/DataTable.js';
65
- export { MetricWidget } from './ui/MetricWidget.js';
66
- export type { MetricWidgetProps } from './ui/MetricWidget.js';
67
- export { SelectableBarChart } from './ui/SelectableBarChart.js';
68
- export type { SelectableBarChartProps, SelectableBarItem, } from './ui/SelectableBarChart.js';
69
- export { DimensionPicker } from './ui/DimensionPicker.js';
35
+ export { Comparison } from './ui/Comparison.js';
36
+ export type { ComparisonProps } from './ui/Comparison.js';
37
+ export { MetricWidget } from './widgets.js';
38
+ export type { MetricWidgetProps } from './widgets.js';
70
39
  export { EmptyState } from './ui/EmptyState.js';
71
40
  export type { EmptyStateProps } from './ui/EmptyState.js';
72
41
  export { Skeleton } from './ui/Skeleton.js';
73
42
  export type { SkeletonProps } from './ui/Skeleton.js';
74
- export { DataAppSkeleton } from './ui/DataAppSkeleton.js';
75
- export type { DataAppSkeletonProps } from './ui/DataAppSkeleton.js';
76
- export { DataBoundary } from './ui/DataBoundary.js';
77
- export { resolveDataView } from '../core/data-view.js';
78
- export { displayedSnapshot } from '../core/data-view.js';
79
- export type { DataView, DataSnapshot, DisplayedSnapshot, } from '../core/data-view.js';
80
- export type { DataBoundaryProps } from './ui/DataBoundary.js';
81
- export { RefreshRegion } from './ui/RefreshRegion.js';
82
- export type { RefreshRegionProps } from './ui/RefreshRegion.js';
83
43
  export { DataSection } from './ui/DataSection.js';
84
- export type { DataSectionProps, SectionResult, } from './ui/DataSection.js';
85
- export { StatusPanel } from './ui/StatusPanel.js';
86
- export type { StatusPanelProps } from './ui/StatusPanel.js';
87
- export { ContentSkeleton } from './ui/ContentSkeleton.js';
88
- export type { ContentSkeletonProps } from './ui/ContentSkeleton.js';
89
- export { DataViewToast } from './ui/DataViewToast.js';
90
- export type { DataViewToastProps } from './ui/DataViewToast.js';
44
+ export type { DataSectionProps } from './ui/DataSection.js';
91
45
  export { UpdatedAt } from './ui/UpdatedAt.js';
92
46
  export type { UpdatedAtProps } from './ui/UpdatedAt.js';
93
47
  export { DateTimeTooltip } from './ui/DateTimeTooltip.js';
94
48
  export type { DateTimeTooltipProps } from './ui/DateTimeTooltip.js';
95
- export { LiveControl } from './ui/LiveControl.js';
96
- export type { LiveControlProps, LiveIntervalSeconds, } from './ui/LiveControl.js';
97
- export { DateRangePicker } from './ui/DateRangePicker.js';
98
- export type { DatePresetId, DateRange, DateRangePickerProps, } from './ui/DateRangePicker.js';
99
- export { defineAppVariables, textVariable, selectVariable, dateRangeVariable, dateRangeControl, useAppVariables, } from './ui/variables.js';
49
+ export { textVariable, selectVariable, dateRangeVariable, } from './ui/variables.js';
100
50
  export type { AppVariable, AppVariableValues, DateRangeSelection, DateRangeVariable, DateRangeVariableOptions, } from './ui/variables.js';
101
51
  export { PeriodSummary } from './ui/PeriodSummary.js';
102
52
  export type { ReportingPeriod, PeriodComparison, PeriodSummaryProps, } from './ui/PeriodSummary.js';
103
- export { SearchField } from './ui/SearchField.js';
104
- export type { SearchFieldProps } from './ui/SearchField.js';
105
- export { searchItems } from './ui/searchItems.js';
106
- export type { SearchAttribute, SearchHit, SearchItemsOptions, SearchMatchValue, SearchRange, } from './ui/searchItems.js';
107
- export { SearchMatch } from './ui/SearchMatch.js';
108
- export type { SearchMatchProps } from './ui/SearchMatch.js';
109
- export { Combobox } from './ui/Combobox.js';
110
- export type { ComboboxOption, ComboboxProps } from './ui/Combobox.js';
111
- export { GradientScroll } from './ui/GradientScroll.js';
112
- export type { GradientScrollProps } from './ui/GradientScroll.js';
113
- export { searchParams, subscribeSearch, writeSearch, } from './ui/search.js';
114
- export { Tabs, TabList, Tab, TabPanels, TabPanel, useViewTab, } from './ui/Tabs.js';
115
- export { createDataContext, defineDataContext, evidenceFor, } from './ui/data-context.js';
53
+ export { createDataContext } from './ui/data-context.js';
116
54
  export type { DataContext, GlossaryEntry } from './ui/data-context.js';
117
55
  export { defineDataIdentifiers } from './ui/data-identifiers.js';
118
56
  export type { DataIdentifierDefinition, TableIdentifier, ColumnIdentifier, } from './ui/data-identifiers.js';
119
- export { GlossaryExplanation } from './ui/GlossaryExplanation.js';
120
- export type { GlossaryExplanationProps } from './ui/GlossaryExplanation.js';
121
- export { GlossaryDefinition } from './ui/GlossaryDefinition.js';
122
- export type { GlossaryDefinitionProps } from './ui/GlossaryDefinition.js';
123
- export { AboutData } from './ui/AboutData.js';
124
- export type { AboutDataProps, AboutEmpty, AboutSubject, AboutTab, } from './ui/AboutData.js';
125
- export { PresentStory } from './ui/PresentStory.js';
126
- export type { PresentStoryProps } from './ui/PresentStory.js';
127
- export type { StoryFinding, BoundStory } from './ui/story.js';
128
- export { Checkbox } from './ui/Checkbox.js';
129
- export type { CheckboxProps } from './ui/Checkbox.js';
130
- export { AppIcon } from './ui/icons.js';
131
- export type { AppIconName, AppIconProps } from './ui/icons.js';
132
57
  export { IconButton } from './ui/IconButton.js';
133
58
  export type { IconButtonProps } from './ui/IconButton.js';
134
- export { Kbd } from './ui/Kbd.js';
135
- export type { KbdProps } from './ui/Kbd.js';
136
- export { Sheet } from './ui/Sheet.js';
137
- export type { SheetDialogProps, SheetProps } from './ui/Sheet.js';
138
59
  export { Tooltip, TooltipProvider } from './ui/Tooltip.js';
139
60
  export type { TooltipProps, TooltipProviderProps, } from './ui/Tooltip.js';
140
61
  export { Button } from './ui/Button.js';
141
62
  export type { ButtonProps } from './ui/Button.js';
142
- export { HelpPopover } from './ui/HelpPopover.js';
143
- export type { HelpPopoverPanelProps, HelpPopoverProps, HelpPopoverTriggerProps, } from './ui/HelpPopover.js';
144
63
  export type { MetricDefinition } from './ui/metric.js';
145
- export type { DataReading, MetricReading, MetricValues, } from '../core/reading.js';
64
+ export type { MetricValues } from '../core/reading.js';
65
+ export { AnnotationTarget } from './annotations/AnnotationTarget.js';
66
+ export type { AnnotationTargetProps } from './annotations/AnnotationTarget.js';
67
+ export { useDataAppAnnotations } from './annotations/useDataAppAnnotations.js';
68
+ export { AnnotationBar } from './annotations/AnnotationBar.js';
69
+ export type { AnnotationBarProps } from './annotations/AnnotationBar.js';
70
+ export { injectDataAppAnnotationStyles } from './annotations/styles.js';
@@ -0,0 +1,2 @@
1
+ export declare function ownedSource<Source extends object>(owner: object, source: Source): Source;
2
+ export declare function assertSourceOwner(owner: object, source: object): void;
@@ -0,0 +1,60 @@
1
+ import type { CSSProperties } from 'react';
2
+ /** Public custom-property names for authoring types and validation. CSS owns their defaults. */
3
+ export declare const dataAppStyleTokens: readonly ['--atbl-annotation-accent', '--atbl-annotation-accent-hover', '--atbl-annotation-on-accent', '--atbl-annotation-highlight', '--atbl-background', '--atbl-surface', '--atbl-subtle', '--atbl-text', '--atbl-muted', '--atbl-border', '--atbl-accent', '--atbl-accent-subtle', '--atbl-on-accent', '--atbl-positive', '--atbl-negative', '--atbl-danger', '--atbl-danger-subtle', '--atbl-backdrop', '--atbl-code-surface', '--atbl-code-text', '--atbl-code-keyword', '--atbl-chart-fill', '--atbl-control-hover-border', '--atbl-focus-color', '--atbl-focus-outline', '--atbl-focus-ring-offset', '--atbl-focus-ring-inset', '--atbl-font', '--atbl-font-heading', '--atbl-mono-font', '--atbl-space-xs', '--atbl-space-sm', '--atbl-space-md', '--atbl-space-lg', '--atbl-space-xl', '--atbl-layout-gap', '--atbl-content-width', '--atbl-control-height', '--atbl-radius-control', '--atbl-radius-surface', '--atbl-radius-overlay', '--atbl-shadow-surface', '--atbl-shadow-overlay', '--atbl-shadow-control', '--atbl-cursor-action', '--atbl-cursor-disabled', '--atbl-cursor-help', '--atbl-duration-fast', '--atbl-duration-normal', '--atbl-duration-slow', '--atbl-ease-standard', '--atbl-ease-enter', '--atbl-chart-1', '--atbl-chart-2', '--atbl-chart-3', '--atbl-chart-4', '--atbl-chart-5', '--atbl-chart-6', '--atbl-chart-7', '--atbl-chart-8', '--atbl-type-emphasis-weight', '--atbl-type-meta-weight', '--atbl-type-page-size', '--atbl-type-section-size', '--atbl-type-widget-size', '--atbl-type-body-size', '--atbl-type-label-size', '--atbl-type-meta-size', '--atbl-type-metric-size', '--atbl-type-heading-weight', '--atbl-type-label-weight', '--atbl-type-body-leading', '--atbl-type-label-leading', '--atbl-type-heading-leading', '--atbl-type-metric-leading', '--atbl-text-measure', '--atbl-control-compact-height', '--atbl-control-icon-size', '--atbl-control-padding-inline', '--atbl-control-padding-block', '--atbl-control-gap', '--atbl-control-disabled-opacity', '--atbl-cursor-busy', '--atbl-control-hover-surface', '--atbl-control-pressed-surface', '--atbl-control-selected-surface', '--atbl-control-selected-text'];
4
+ /** Stable component roots for CSS customization; only utilities may be placed on native markup. */
5
+ export declare const dataAppStyleClasses: {
6
+ readonly 'altertable-app-layout': {
7
+ readonly component: 'AppLayout';
8
+ readonly kind: 'root';
9
+ };
10
+ readonly 'altertable-stack': {
11
+ readonly component: 'Stack';
12
+ readonly kind: 'root';
13
+ };
14
+ readonly 'altertable-grid': {
15
+ readonly component: 'Grid';
16
+ readonly kind: 'root';
17
+ };
18
+ readonly 'altertable-grid-item': {
19
+ readonly component: 'GridItem';
20
+ readonly kind: 'root';
21
+ };
22
+ readonly 'altertable-text-content': {
23
+ readonly component: 'TextContent';
24
+ readonly kind: 'root';
25
+ };
26
+ readonly 'altertable-button': {
27
+ readonly component: 'Button';
28
+ readonly kind: 'root';
29
+ };
30
+ readonly 'altertable-tabs': {
31
+ readonly component: 'Tabs';
32
+ readonly kind: 'root';
33
+ };
34
+ readonly 'altertable-data-widget': {
35
+ readonly component: 'DataWidget';
36
+ readonly kind: 'root';
37
+ };
38
+ readonly 'altertable-metric-widget': {
39
+ readonly component: 'MetricWidget';
40
+ readonly kind: 'root';
41
+ };
42
+ readonly 'altertable-data-app-skeleton': {
43
+ readonly component: 'DataAppSkeleton';
44
+ readonly kind: 'root';
45
+ };
46
+ readonly 'altertable-sr-only': {
47
+ readonly component: null;
48
+ readonly kind: 'utility';
49
+ };
50
+ };
51
+ export declare const dataAppStyleHooks: {
52
+ readonly 'data-atbl-focus': readonly ['ring', 'inset', 'group'];
53
+ readonly 'data-atbl-control': readonly ['action', 'help', 'text'];
54
+ };
55
+ export type DataAppStyleToken = (typeof dataAppStyleTokens)[number];
56
+ /** React style properties with checked public Altertable custom properties. */
57
+ export type DataAppStyle = CSSProperties & Partial<Record<DataAppStyleToken, string | number>>;
58
+ export type DataAppStyleHooks = {
59
+ [Name in keyof typeof dataAppStyleHooks]?: (typeof dataAppStyleHooks)[Name][number];
60
+ };
@@ -0,0 +1,2 @@
1
+ /** Static authoring checks; app-owned names are allowed, package implementation names are not. */
2
+ export declare function validateAuthoredStyles(source: string, kind: 'css' | 'markup'): string[];
@@ -4,6 +4,7 @@ import type { DataContext, GlossaryEntry } from './data-context.js';
4
4
  import { type ButtonProps } from './Button.js';
5
5
  import { type SheetDialogProps } from './Sheet.js';
6
6
  export type AboutTab = 'glossary' | 'queries';
7
+ export declare function resolveAboutTab(tab: string | null | undefined): AboutTab;
7
8
  export type AboutEmpty = {
8
9
  glossary: {
9
10
  title: string;
@@ -57,4 +58,11 @@ export type AboutDataProps = AboutSubject & {
57
58
  * Open state uses `?about=`; tab selection uses `?tab=`. Enable the global shortcut only on the
58
59
  * page-level trigger.
59
60
  */
60
- export declare function AboutData({ id, title, description, visual, visualKind, variant, dataContext, references, queries, empty, iconOnly, shortcut, tooltip, children, footer, portalRoot, sheetProps, headerActions, open: openProp, onOpenChange, tab, trigger, className, onClick, ref, ...props }: AboutDataProps): import("react").JSX.Element;
61
+ export declare function InspectionSheet({ id, title, description, visual, visualKind, dataContext, references, queries, empty, footer, sheetProps, headerActions, open, onOpenChange, tab, onTabChange, returnFocus, }: AboutDataProps & {
62
+ open: boolean;
63
+ onOpenChange: (open: boolean) => void;
64
+ tab: AboutTab;
65
+ onTabChange: (tab: AboutTab) => void;
66
+ returnFocus: RefObject<HTMLButtonElement | null>;
67
+ }): import("react").JSX.Element;
68
+ export declare function AboutData(props: AboutDataProps): import("react").JSX.Element;
@@ -5,7 +5,6 @@ export type AppHeaderProps = {
5
5
  description?: ReactNode;
6
6
  toolbar?: ReactNode;
7
7
  children?: ReactNode;
8
- headingProps?: Omit<ComponentPropsWithRef<'div'>, 'children'>;
9
8
  } & Omit<ComponentPropsWithRef<'header'>, 'children' | 'title'>;
10
9
  /** Page identity and actions; on narrow screens the scope shares a row with actions. */
11
- export declare function AppHeader({ scope, title, description, toolbar, children, headingProps, className, ...props }: AppHeaderProps): import("react").JSX.Element;
10
+ export declare function AppHeader({ scope, title, description, toolbar, children, className, ...props }: AppHeaderProps): import("react").JSX.Element;
@@ -1,16 +1,10 @@
1
- import type { ComponentProps, ComponentPropsWithRef, ReactNode } from 'react';
2
- import { AppFooter } from './AppFooter.js';
3
- import { type TooltipProviderProps } from './Tooltip.js';
1
+ import type { ComponentPropsWithRef, ReactNode } from 'react';
4
2
  export type AppLayoutProps = {
5
3
  children: ReactNode;
6
4
  footerActions?: ReactNode;
7
5
  footer?: ReactNode;
8
- footerProps?: Omit<ComponentProps<typeof AppFooter>, 'children'>;
9
- layoutProps?: Omit<ComponentPropsWithRef<'div'>, 'children'>;
10
- tooltipProviderProps?: Omit<TooltipProviderProps, 'children'>;
11
6
  } & Omit<ComponentPropsWithRef<'main'>, 'children'>;
12
7
  /**
13
- * Native props target `<main>`. `layoutProps` targets the outer wrapper; `footer` replaces the
14
- * default footer, while `footerActions` fills it.
8
+ * Native props target `<main>`. The shell owns its wrapper and tooltip defaults.
15
9
  */
16
- export declare function AppLayout({ children, footerActions, footer, footerProps, layoutProps, tooltipProviderProps, className, ...props }: AppLayoutProps): import("react").JSX.Element;
10
+ export declare function AppLayout({ children, footerActions, footer, className, ...props }: AppLayoutProps): import("react").JSX.Element;
@@ -3,13 +3,10 @@ import type { DataView } from '../../core/data-view.js';
3
3
  import type { CsvExport } from './csv-export.js';
4
4
  import { type LiveControlProps } from './LiveControl.js';
5
5
  import { PresentStory } from './PresentStory.js';
6
- import { RefreshControl } from './RefreshControl.js';
7
6
  export type AppToolbarProps = {
8
7
  children?: ReactNode;
9
8
  end?: ReactNode;
10
- controlsProps?: Omit<ComponentPropsWithRef<'div'>, 'children'>;
11
9
  updatedAt?: ReactNode;
12
- initialLoading?: boolean;
13
10
  requestState?: DataView<unknown, unknown>['kind'];
14
11
  refresh?: {
15
12
  refreshing: boolean;
@@ -17,17 +14,17 @@ export type AppToolbarProps = {
17
14
  onCancel?: () => void;
18
15
  label?: string;
19
16
  tooltip?: ReactNode;
20
- buttonProps?: Omit<ComponentPropsWithRef<'button'>, 'children' | 'onClick'>;
21
- statusProps?: ComponentProps<typeof RefreshControl>['statusProps'];
22
17
  };
23
18
  live?: LiveControlProps;
24
19
  aboutData?: ReactNode;
25
- story?: ComponentProps<typeof PresentStory>;
26
- csvExport?: CsvExport;
20
+ /** Null reserves a disabled story action while its findings are unavailable. */
21
+ story?: ComponentProps<typeof PresentStory> | null;
22
+ /** Null reserves a disabled export action while its data is unavailable. */
23
+ csvExport?: CsvExport | null;
27
24
  } & Omit<ComponentPropsWithRef<'div'>, 'children'>;
28
25
  /** Header actions only. Put reader-controlled inputs in DataApp.variables below the header.
29
26
  * Observation time, or an initial loading status, sits before Refresh. Children prepend app controls in the right
30
27
  * cluster; end follows the built-in actions. Live sits beside Refresh when supplied. Refresh also
31
28
  * answers Alt/Option+R and uses the button to cancel a running request when onCancel is provided;
32
29
  * refresh.tooltip overrides its static label. All built-in controls are optional. */
33
- export declare function AppToolbar({ children, updatedAt, initialLoading, requestState, refresh, live, aboutData, story, csvExport, end, controlsProps, className, role, 'aria-label': ariaLabel, ...props }: AppToolbarProps): import("react").JSX.Element;
30
+ export declare function AppToolbar({ children, updatedAt, requestState, refresh, live, aboutData, story, csvExport, end, className, role, 'aria-label': ariaLabel, ...props }: AppToolbarProps): import("react").JSX.Element;
@@ -0,0 +1,7 @@
1
+ import type { ChartItem, ValueChartProps } from './chart-data.js';
2
+ export type AreaChartItem = ChartItem;
3
+ export type AreaChartProps = ValueChartProps;
4
+ /** Ordered finite samples filled to a zero baseline, including negative values.
5
+ * Samples are equally spaced; supply missing periods explicitly.
6
+ * Compose inside VisualizationWidget; hover/touch tooltips need no caller state. */
7
+ export declare function AreaChart(props: AreaChartProps): import("react").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { type ChartItem, type ValueChartProps } from './chart-data.js';
2
+ export type BarChartItem = ChartItem;
3
+ export type BarChartProps = ValueChartProps;
4
+ /** Nonnegative category values. Compose inside VisualizationWidget for a titled panel.
5
+ * Owns hover/touch tooltips; no selection state or keyboard navigation. */
6
+ export declare function BarChart({ items, unit, ariaLabel, formatValue, }: BarChartProps): import("react").JSX.Element;
@@ -1,14 +1,14 @@
1
- import { type MetricComparison } from './comparison.js';
1
+ import { type MetricComparison } from './metric-comparison.js';
2
2
  import type { MetricDefinition } from './metric.js';
3
3
  import type { MetricReading } from '../../core/reading.js';
4
4
  type UnboundComparisonProps = MetricComparison & {
5
5
  label: string;
6
6
  emphasis?: 'standard' | 'story';
7
7
  };
8
- export type ComparisonVisualProps = UnboundComparisonProps | {
8
+ export type ComparisonProps = UnboundComparisonProps | {
9
9
  metric: MetricDefinition;
10
10
  reading: MetricReading;
11
11
  emphasis?: 'standard' | 'story';
12
12
  };
13
- export declare function ComparisonVisual(props: ComparisonVisualProps): import("react").JSX.Element | null;
13
+ export declare function Comparison(props: ComparisonProps): import("react").JSX.Element | null;
14
14
  export {};
@@ -3,3 +3,5 @@ import type { SkeletonContent } from './presentation.js';
3
3
  export type ContentSkeletonProps = SkeletonContent & Omit<ComponentPropsWithRef<'div'>, 'children'>;
4
4
  /** A metric, panel, or ranking placeholder to compose in the same layout as live content. */
5
5
  export declare function ContentSkeleton({ variant, rows, className, ...props }: ContentSkeletonProps): import("react").JSX.Element;
6
+ /** Placeholder for a widget body; static headings stay outside it. */
7
+ export declare function ContentSkeletonBody({ variant, rows }: SkeletonContent): import("react").JSX.Element;
@@ -1,61 +1,20 @@
1
- import { type ComponentProps, type ReactNode } from 'react';
2
- import type { DisclosedQuery } from '../../core/contract.js';
3
- import type { DataAppConfig } from '../../core/config.js';
4
- import type { CsvExport } from './csv-export.js';
5
- import { type DisplayedSnapshot } from '../../core/data-view.js';
6
- import { type AboutEmpty } from './AboutData.js';
7
- import { AppLayout } from './AppLayout.js';
8
- import { type AppToolbarProps } from './AppToolbar.js';
9
- import type { DataContext } from './data-context.js';
10
- import type { BoundStory } from './story.js';
11
- import { type SectionResult } from './DataSection.js';
12
- import type { EmptyContent } from './presentation.js';
13
- type DataAppBaseProps = {
14
- config: DataAppConfig;
15
- dataContext: DataContext;
16
- aboutEmpty?: AboutEmpty;
17
- description?: ReactNode;
18
- /** Display names only; config.scope remains the connection identity. */
19
- scopeLabels?: {
20
- organization?: string;
21
- environment?: string;
1
+ import { type RegisteredBinding } from '../bindings.js';
2
+ import type { DisplayedSnapshot } from '../../core/data-view.js';
3
+ import { type ExportDataset } from '../bindings.js';
4
+ import type { StoryFinding } from './story.js';
5
+ import { type DataAppBaseProps } from './DataAppFrame.js';
6
+ import { type DeclaredView } from '../view-runtime.js';
7
+ export type DataAppProps<Data, Input = unknown> = Omit<DataAppBaseProps, 'dataContext'> & {
8
+ view: DeclaredView<Data, Input> & {
9
+ scope(snapshot: DisplayedSnapshot<Data, Input>): string;
22
10
  };
23
- toolbarActions?: ReactNode;
24
- footerActions?: ReactNode;
25
- layoutProps?: Omit<ComponentProps<typeof AppLayout>, 'children' | 'footerActions'>;
11
+ story: (snapshot: DisplayedSnapshot<Data, Input>) => readonly (Omit<StoryFinding, 'evidence'> & {
12
+ evidence: RegisteredBinding;
13
+ })[];
14
+ datasets: readonly [
15
+ ExportDataset<Data, Input>,
16
+ ...ExportDataset<Data, Input>[]
17
+ ];
26
18
  };
27
- export type DataAppRequest<Data, Input> = SectionResult<Data, Input> & {
28
- queries?: DisclosedQuery[];
29
- refresh?: AppToolbarProps['refresh'];
30
- empty: EmptyContent;
31
- controls?: ReactNode;
32
- };
33
- export type DataAppProps<Data = unknown, Input = unknown> = DataAppBaseProps & ({
34
- request: DataAppRequest<Data, Input>;
35
- /** Findings are always derived from the result currently visible to the reader. */
36
- story: BoundStory<Data, Input>;
37
- /** Every analytical view exports every distinct dataset in its displayed result. */
38
- csvExport: (snapshot: DisplayedSnapshot<Data, Input>) => CsvExport;
39
- children: (data: Data, displayedInput: Input) => ReactNode;
40
- loading?: ReactNode;
41
- label?: string;
42
- queries?: never;
43
- refresh?: never;
44
- variables?: never;
45
- } | {
46
- request?: never;
47
- story?: never;
48
- csvExport?: CsvExport;
49
- children: ReactNode;
50
- queries?: DisclosedQuery[];
51
- refresh?: AppToolbarProps['refresh'];
52
- variables?: ReactNode;
53
- loading?: never;
54
- empty?: never;
55
- label?: never;
56
- });
57
- /** Owns the page title, header, gutter, and width; body content uses section headings.
58
- * The primary request owns controls, empty state, displayed input, refresh, and inspection.
59
- * Without a request, the shell accepts authored children for setup or static views. */
19
+ /** Executes the primary view and owns its controls, inspection, exports, and stories. */
60
20
  export declare function DataApp<Data, Input>(props: DataAppProps<Data, Input>): import("react").JSX.Element;
61
- export {};
@@ -0,0 +1,42 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { DisclosedQuery } from '../../core/contract.js';
3
+ import type { DataAppConfig } from '../../core/config.js';
4
+ import type { CsvExport } from './csv-export.js';
5
+ import { type DisplayedSnapshot } from '../../core/data-view.js';
6
+ import type { DataContext } from './data-context.js';
7
+ import type { BoundStory } from './story.js';
8
+ import type { SectionResult } from './DataSectionBoundary.js';
9
+ export type DataAppBaseProps = {
10
+ children: ReactNode;
11
+ config: DataAppConfig;
12
+ dataContext: DataContext;
13
+ description?: ReactNode;
14
+ toolbarActions?: ReactNode;
15
+ footerActions?: ReactNode;
16
+ };
17
+ export type DataAppRequest<Data, Input> = SectionResult<Data, Input> & {
18
+ queries?: DisclosedQuery[];
19
+ /** Actual request activity, including retries with retained data. */
20
+ refreshing?: boolean;
21
+ cancel?: () => unknown;
22
+ controls?: ReactNode;
23
+ };
24
+ export type StaticDataAppProps = DataAppBaseProps & {
25
+ csvExport?: CsvExport;
26
+ queries?: DisclosedQuery[];
27
+ };
28
+ export type DataAppProps<Data = unknown, Input = unknown> = (DataAppBaseProps & {
29
+ request: DataAppRequest<Data, Input>;
30
+ /** Findings are always derived from the result currently visible to the reader. */
31
+ story: BoundStory<Data, Input>;
32
+ /** Export every distinct dataset in the displayed result. */
33
+ csvExport: (snapshot: DisplayedSnapshot<Data, Input>) => CsvExport;
34
+ queries?: never;
35
+ }) | (StaticDataAppProps & {
36
+ request?: never;
37
+ story?: never;
38
+ });
39
+ /** Owns the page title, header, gutter, and width; body content uses section headings.
40
+ * The primary request binds the toolbar, controls, refresh, and inspection.
41
+ * Children always render; compose DataSection boundaries around independently loading content. */
42
+ export declare function DataAppFrame<Data, Input>(props: DataAppProps<Data, Input>): import("react").JSX.Element;
@@ -2,14 +2,13 @@ import type { ComponentPropsWithRef, ReactNode } from 'react';
2
2
  import type { DataView } from '../../core/data-view.js';
3
3
  export type DataBoundaryProps<T, Input = unknown> = {
4
4
  view: DataView<T, Input>;
5
- loading: ReactNode;
6
- empty: ReactNode;
5
+ loadingFallback: ReactNode;
6
+ emptyFallback: ReactNode;
7
7
  error: (error: Error) => ReactNode;
8
8
  staleError?: (error: Error) => ReactNode;
9
9
  notice?: 'inline' | 'none';
10
- dimOnUpdate?: boolean;
11
10
  children: (data: T, displayedInput: Input) => ReactNode;
12
11
  } & Omit<ComponentPropsWithRef<'div'>, 'children'>;
13
12
  /** Render one request state at a time. Prior content remains readable during an update.
14
- * Local boundaries can opt into an inline notice and delayed dimming. */
15
- export declare function DataBoundary<T, Input>({ view, loading, empty, error, staleError, notice, dimOnUpdate, children, className, ...props }: DataBoundaryProps<T, Input>): import("react").JSX.Element;
13
+ * Feedback ownership is supplied by the containing section. */
14
+ export declare function DataBoundary<T, Input>({ view, loadingFallback, emptyFallback, error, staleError, notice, children, className, ...props }: DataBoundaryProps<T, Input>): import("react").JSX.Element;
@@ -1,26 +1,14 @@
1
- import type { ComponentPropsWithRef, ReactNode } from 'react';
2
- import type { DataView } from '../../core/data-view.js';
1
+ import { type ViewContent } from '../content.js';
2
+ import { type ComponentPropsWithRef, type ReactNode } from 'react';
3
3
  import type { EmptyContent } from './presentation.js';
4
- export type SectionResult<Data, Input> = {
5
- view: DataView<Data, Input>;
6
- refetch: () => unknown;
7
- };
8
4
  export type DataSectionProps<Data, Input = unknown> = {
9
- result: SectionResult<Data, Input>;
10
- empty: EmptyContent;
11
- children: (data: Data, displayedInput: Input) => ReactNode;
12
- /** Placeholder layout for an initial request; use the ready view's grid without copied values. */
13
- loading?: ReactNode;
5
+ content: ViewContent<Data, Input>;
6
+ emptyFallback?: EmptyContent;
14
7
  error?: {
15
8
  title: ReactNode;
16
9
  description?: ReactNode;
17
10
  onRetry?: () => void;
18
11
  };
19
12
  label?: string;
20
- /** DataApp suppresses this local notice in favor of its page-level toast. */
21
- notice?: 'inline' | 'none';
22
- dimOnUpdate?: boolean;
23
- } & Omit<ComponentPropsWithRef<'div'>, 'children'>;
24
- /** One request boundary for any number of cards. `DataBoundary` exposes the lower-level
25
- * view-state slots for custom composition. */
26
- export declare function DataSection<Data, Input>({ result, children, empty, loading, error, label, notice, dimOnUpdate, ...props }: DataSectionProps<Data, Input>): import("react").JSX.Element;
13
+ } & Omit<ComponentPropsWithRef<'div'>, 'children' | 'content'>;
14
+ export declare function DataSection<Data, Input>({ content, ...presentation }: DataSectionProps<Data, Input>): import("react").JSX.Element;
@@ -0,0 +1,30 @@
1
+ import type { ComponentPropsWithRef, ReactNode } from 'react';
2
+ import type { DataView } from '../../core/data-view.js';
3
+ import type { EmptyContent } from './presentation.js';
4
+ export type SectionResult<Data, Input> = {
5
+ view: DataView<Data, Input>;
6
+ refetch: () => unknown;
7
+ };
8
+ export type DataSectionProps<Data, Input = unknown> = {
9
+ children: (data: Data, displayedInput: Input) => ReactNode;
10
+ /** Placeholder layout for an initial request; use the ready view's grid without copied values. */
11
+ loadingFallback: ReactNode;
12
+ error?: {
13
+ title: ReactNode;
14
+ description?: ReactNode;
15
+ onRetry?: () => void;
16
+ };
17
+ label?: string;
18
+ notice?: 'none' | 'inline';
19
+ } & ({
20
+ result: SectionResult<Data, Input> & {
21
+ emptyFallback: EmptyContent;
22
+ };
23
+ emptyFallback?: EmptyContent;
24
+ } | {
25
+ result: SectionResult<Data, Input>;
26
+ emptyFallback: EmptyContent;
27
+ }) & Omit<ComponentPropsWithRef<'div'>, 'children'>;
28
+ /** One request boundary for any number of cards. `DataBoundary` exposes the lower-level
29
+ * view-state slots internally. The primary DataApp request uses page-level feedback. */
30
+ export declare function DataSectionBoundary<Data, Input>({ result, children, emptyFallback, loadingFallback, error, label, notice: feedback, ...props }: DataSectionProps<Data, Input>): import("react").JSX.Element;
@@ -0,0 +1,9 @@
1
+ import type { ComponentPropsWithRef, ReactNode } from 'react';
2
+ import type { DataReading } from '../../core/reading.js';
3
+ export type DataValueProps<Value> = {
4
+ reading: DataReading<Value>;
5
+ loadingFallback: ReactNode;
6
+ children: (value: Value) => ReactNode;
7
+ } & Omit<ComponentPropsWithRef<'span'>, 'children'>;
8
+ /** Bind inline content to displayed data. Keep static wording outside this span. */
9
+ export declare function DataValue<Value>({ reading, loadingFallback, children, ...props }: DataValueProps<Value>): import("react").JSX.Element;
@@ -4,6 +4,7 @@ import type { EmptyContent, BoundWidgetReading } from './presentation.js';
4
4
  import type { WidgetEvidence } from './WidgetEvidence.js';
5
5
  type DataWidgetBaseProps = {
6
6
  title: ReactNode;
7
+ annotationId?: string;
7
8
  count?: number;
8
9
  description?: ReactNode;
9
10
  evidence?: WidgetEvidence;
@@ -22,7 +23,7 @@ export type DataWidgetProps<Data = unknown> = DataWidgetBaseProps & ((BoundWidge
22
23
  reading?: never;
23
24
  isEmpty?: never;
24
25
  skeleton?: never;
25
- empty?: EmptyContent;
26
+ emptyFallback?: EmptyContent;
26
27
  children: ReactNode;
27
28
  });
28
29
  export declare function DataWidget<Data>(props: DataWidgetProps<Data>): import("react").JSX.Element;