basalt-ui 1.26.0 → 1.28.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.
- package/AGENTS.md +23 -23
- package/CHANGELOG.md +67 -0
- package/MIGRATING.md +896 -37
- package/README.md +33 -3
- package/agent/rules/basalt-batteries.md +25 -10
- package/agent/rules/basalt-controls.md +73 -43
- package/agent/rules/basalt-mantine.md +17 -6
- package/agent/rules/basalt-state.md +5 -0
- package/agent/rules/basalt-tokens.md +1 -1
- package/configs/oxlint-plugin.js +1286 -73
- package/configs/oxlint-plugin.test.ts +1338 -29
- package/configs/oxlint.json +12 -5
- package/dist/agent/coalesce.d.ts.map +1 -1
- package/dist/agent/coalesce.js +2 -1
- package/dist/agent/merge.d.ts.map +1 -1
- package/dist/agent/merge.js +2 -1
- package/dist/agent/part-list.d.ts.map +1 -1
- package/dist/agent/part-list.js +2 -0
- package/dist/agent/stick-to-bottom.d.ts +3 -6
- package/dist/agent/stick-to-bottom.d.ts.map +1 -1
- package/dist/agent/stick-to-bottom.js +6 -3
- package/dist/agent-chat/composer.d.ts +6 -2
- package/dist/agent-chat/composer.d.ts.map +1 -1
- package/dist/agent-chat/composer.js +49 -33
- package/dist/agent-chat/relative-time.d.ts +0 -9
- package/dist/agent-chat/relative-time.d.ts.map +1 -1
- package/dist/agent-chat/relative-time.js +2 -1
- package/dist/agent-chat/thread-detail-panel.d.ts +3 -2
- package/dist/agent-chat/thread-detail-panel.d.ts.map +1 -1
- package/dist/agent-chat/thread-detail-panel.js +8 -5
- package/dist/agent-chat/thread-feed-row.d.ts +2 -1
- package/dist/agent-chat/thread-feed-row.d.ts.map +1 -1
- package/dist/agent-chat/thread-feed-row.js +92 -92
- package/dist/agent-chat/thread-feed.d.ts +3 -2
- package/dist/agent-chat/thread-feed.d.ts.map +1 -1
- package/dist/agent-chat/thread-feed.js +8 -3
- package/dist/agent-chat/thread-message.d.ts +4 -3
- package/dist/agent-chat/thread-message.d.ts.map +1 -1
- package/dist/agent-chat/thread-message.js +70 -31
- package/dist/agent-chat/thread-outcome-card.d.ts +3 -2
- package/dist/agent-chat/thread-outcome-card.d.ts.map +1 -1
- package/dist/agent-chat/thread-outcome-card.js +9 -2
- package/dist/agent-chat/thread-workspace.d.ts +7 -2
- package/dist/agent-chat/thread-workspace.d.ts.map +1 -1
- package/dist/agent-chat/thread-workspace.js +62 -29
- package/dist/agent-chat/tool-chip.d.ts +3 -2
- package/dist/agent-chat/tool-chip.d.ts.map +1 -1
- package/dist/agent-chat/tool-chip.js +7 -2
- package/dist/charts/hooks/useBandPlot.d.ts.map +1 -1
- package/dist/charts/hooks/useBandPlot.js +15 -8
- package/dist/charts/index.d.ts +8 -7
- package/dist/charts/index.d.ts.map +1 -1
- package/dist/charts/index.js +45 -5
- package/dist/charts/kinds/BandStrip.d.ts +10 -7
- package/dist/charts/kinds/BandStrip.d.ts.map +1 -1
- package/dist/charts/kinds/BandStrip.js +12 -7
- package/dist/charts/kinds/Bars.d.ts +12 -6
- package/dist/charts/kinds/Bars.d.ts.map +1 -1
- package/dist/charts/kinds/Bars.js +37 -11
- package/dist/charts/kinds/Donut.d.ts +6 -5
- package/dist/charts/kinds/Donut.d.ts.map +1 -1
- package/dist/charts/kinds/Donut.js +19 -2
- package/dist/charts/kinds/DualPanel.d.ts +6 -5
- package/dist/charts/kinds/DualPanel.d.ts.map +1 -1
- package/dist/charts/kinds/DualPanel.js +36 -8
- package/dist/charts/kinds/Heatmap.d.ts +10 -6
- package/dist/charts/kinds/Heatmap.d.ts.map +1 -1
- package/dist/charts/kinds/Heatmap.js +58 -31
- package/dist/charts/kinds/MirroredBars.d.ts +6 -5
- package/dist/charts/kinds/MirroredBars.d.ts.map +1 -1
- package/dist/charts/kinds/MirroredBars.js +9 -2
- package/dist/charts/kinds/MultiLine.d.ts +11 -6
- package/dist/charts/kinds/MultiLine.d.ts.map +1 -1
- package/dist/charts/kinds/MultiLine.js +24 -15
- package/dist/charts/kinds/StackedArea.d.ts +18 -8
- package/dist/charts/kinds/StackedArea.d.ts.map +1 -1
- package/dist/charts/kinds/StackedArea.js +29 -4
- package/dist/charts/kinds/ZonedLine.d.ts +12 -8
- package/dist/charts/kinds/ZonedLine.d.ts.map +1 -1
- package/dist/charts/kinds/ZonedLine.js +33 -23
- package/dist/charts/layout/auto-margin.d.ts +65 -8
- package/dist/charts/layout/auto-margin.d.ts.map +1 -1
- package/dist/charts/layout/auto-margin.js +45 -10
- package/dist/charts/layout/log-ticks.d.ts +27 -0
- package/dist/charts/layout/log-ticks.d.ts.map +1 -0
- package/dist/charts/layout/log-ticks.js +42 -0
- package/dist/charts/primitives/Axes.d.ts +11 -2
- package/dist/charts/primitives/Axes.d.ts.map +1 -1
- package/dist/charts/primitives/Axes.js +15 -5
- package/dist/charts/primitives/CartesianChart.d.ts +45 -7
- package/dist/charts/primitives/CartesianChart.d.ts.map +1 -1
- package/dist/charts/primitives/CartesianChart.js +86 -28
- package/dist/charts/primitives/ChartCard.d.ts +27 -2
- package/dist/charts/primitives/ChartCard.d.ts.map +1 -1
- package/dist/charts/primitives/ChartCard.js +37 -17
- package/dist/charts/primitives/ChartFrame.d.ts +30 -4
- package/dist/charts/primitives/ChartFrame.d.ts.map +1 -1
- package/dist/charts/primitives/ChartFrame.js +45 -15
- package/dist/charts/primitives/ChartLegend.d.ts +13 -2
- package/dist/charts/primitives/ChartLegend.d.ts.map +1 -1
- package/dist/charts/primitives/ChartLegend.js +33 -13
- package/dist/charts/primitives/ChartPending.d.ts +77 -4
- package/dist/charts/primitives/ChartPending.d.ts.map +1 -1
- package/dist/charts/primitives/ChartPending.js +100 -6
- package/dist/charts/primitives/ChartTooltip.d.ts +7 -0
- package/dist/charts/primitives/ChartTooltip.d.ts.map +1 -1
- package/dist/charts/primitives/ChartTooltip.js +18 -5
- package/dist/charts/primitives/Crosshair.d.ts +3 -0
- package/dist/charts/primitives/Crosshair.d.ts.map +1 -1
- package/dist/charts/primitives/Crosshair.js +3 -1
- package/dist/charts/primitives/chart-frame-layout.d.ts +95 -0
- package/dist/charts/primitives/chart-frame-layout.d.ts.map +1 -0
- package/dist/charts/primitives/chart-frame-layout.js +89 -0
- package/dist/charts/primitives/chart-tier.d.ts +16 -0
- package/dist/charts/primitives/chart-tier.d.ts.map +1 -0
- package/dist/charts/primitives/chart-tier.js +20 -0
- package/dist/charts/series.d.ts +55 -1
- package/dist/charts/series.d.ts.map +1 -1
- package/dist/charts/series.js +27 -1
- package/dist/charts/sparklines/BarSparkline.d.ts +3 -3
- package/dist/charts/sparklines/BarSparkline.d.ts.map +1 -1
- package/dist/charts/sparklines/BarSparkline.js +9 -3
- package/dist/charts/sparklines/LineSparkline.d.ts +3 -3
- package/dist/charts/sparklines/LineSparkline.d.ts.map +1 -1
- package/dist/charts/sparklines/LineSparkline.js +15 -3
- package/dist/charts/sparklines/index.d.ts +2 -2
- package/dist/charts/sparklines/index.d.ts.map +1 -1
- package/dist/charts/utils/format.d.ts +92 -2
- package/dist/charts/utils/format.d.ts.map +1 -1
- package/dist/charts/utils/format.js +64 -1
- package/dist/charts/utils/ticks.d.ts +81 -2
- package/dist/charts/utils/ticks.d.ts.map +1 -1
- package/dist/charts/utils/ticks.js +54 -4
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -2
- package/dist/commands/ShortcutsHelp.d.ts +3 -2
- package/dist/commands/ShortcutsHelp.d.ts.map +1 -1
- package/dist/commands/ShortcutsHelp.js +8 -2
- package/dist/commands/define-commands.d.ts.map +1 -1
- package/dist/commands/define-commands.js +2 -2
- package/dist/commands/define-overlays.d.ts +102 -0
- package/dist/commands/define-overlays.d.ts.map +1 -1
- package/dist/commands/define-overlays.js +102 -2
- package/dist/commands/index.d.ts +10 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +3 -1
- package/dist/commands/overlays-mount.d.ts +13 -6
- package/dist/commands/overlays-mount.d.ts.map +1 -1
- package/dist/commands/overlays-mount.js +23 -14
- package/dist/common/errors.d.ts +34 -0
- package/dist/common/errors.d.ts.map +1 -0
- package/dist/common/errors.js +36 -0
- package/dist/common/index.d.ts +15 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +29 -0
- package/dist/common/props.d.ts +63 -0
- package/dist/common/props.d.ts.map +1 -0
- package/dist/common/props.js +6 -0
- package/dist/common/query-state-like.d.ts +43 -0
- package/dist/common/query-state-like.d.ts.map +1 -0
- package/dist/common/query-state-like.js +20 -0
- package/dist/common/refs.d.ts +29 -0
- package/dist/common/refs.d.ts.map +1 -0
- package/dist/common/refs.js +29 -0
- package/dist/common/scroll-parent.d.ts +23 -0
- package/dist/common/scroll-parent.d.ts.map +1 -0
- package/dist/common/scroll-parent.js +21 -0
- package/dist/common/validate.d.ts +38 -0
- package/dist/common/validate.d.ts.map +1 -0
- package/dist/common/validate.js +36 -0
- package/dist/connectivity/connectivity-indicator.d.ts +3 -1
- package/dist/connectivity/connectivity-indicator.d.ts.map +1 -1
- package/dist/connectivity/connectivity-indicator.js +3 -1
- package/dist/connectivity/connectivity-provider.d.ts.map +1 -1
- package/dist/connectivity/connectivity-provider.js +4 -1
- package/dist/connectivity/index.d.ts +1 -0
- package/dist/connectivity/index.d.ts.map +1 -1
- package/dist/connectivity/types.d.ts +2 -2
- package/dist/connectivity/types.d.ts.map +1 -1
- package/dist/connectivity/use-connectivity.d.ts.map +1 -1
- package/dist/content/article-layout.module.css +11 -4
- package/dist/content/callout.d.ts +8 -4
- package/dist/content/callout.d.ts.map +1 -1
- package/dist/content/callout.js +15 -8
- package/dist/content/guide.d.ts +5 -4
- package/dist/content/guide.d.ts.map +1 -1
- package/dist/content/guide.js +13 -4
- package/dist/content/heading-anchor.d.ts +24 -2
- package/dist/content/heading-anchor.d.ts.map +1 -1
- package/dist/content/heading-anchor.js +23 -9
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/markdown.d.ts.map +1 -1
- package/dist/content/markdown.js +2 -0
- package/dist/content/prose.module.css +9 -7
- package/dist/content/reading-progress.d.ts +10 -4
- package/dist/content/reading-progress.d.ts.map +1 -1
- package/dist/content/reading-progress.js +26 -10
- package/dist/content/slug.d.ts +4 -0
- package/dist/content/slug.d.ts.map +1 -1
- package/dist/content/toc.d.ts +11 -0
- package/dist/content/toc.d.ts.map +1 -1
- package/dist/content/toc.js +23 -10
- package/dist/controls/actions.d.ts +49 -6
- package/dist/controls/actions.d.ts.map +1 -1
- package/dist/controls/actions.js +39 -8
- package/dist/controls/compare-filter.d.ts +3 -2
- package/dist/controls/compare-filter.d.ts.map +1 -1
- package/dist/controls/compare-filter.js +17 -2
- package/dist/controls/control-group.d.ts +3 -3
- package/dist/controls/control-group.d.ts.map +1 -1
- package/dist/controls/control-group.js +9 -2
- package/dist/controls/controls.module.css +169 -186
- package/dist/controls/controls.module.css.d.ts +9 -11
- package/dist/controls/enum-filter.d.ts +13 -3
- package/dist/controls/enum-filter.d.ts.map +1 -1
- package/dist/controls/enum-filter.js +32 -15
- package/dist/controls/filter-context.d.ts +15 -6
- package/dist/controls/filter-context.d.ts.map +1 -1
- package/dist/controls/filter-pill.d.ts +3 -3
- package/dist/controls/filter-pill.d.ts.map +1 -1
- package/dist/controls/filter-pill.js +4 -1
- package/dist/controls/filter-set.d.ts +3 -2
- package/dist/controls/filter-set.d.ts.map +1 -1
- package/dist/controls/filter-set.js +66 -41
- package/dist/controls/filter-sheet.d.ts +20 -80
- package/dist/controls/filter-sheet.d.ts.map +1 -1
- package/dist/controls/filter-sheet.js +9 -95
- package/dist/controls/index.d.ts +3 -0
- package/dist/controls/index.d.ts.map +1 -1
- package/dist/controls/index.js +6 -0
- package/dist/controls/multi-select-filter.d.ts +18 -2
- package/dist/controls/multi-select-filter.d.ts.map +1 -1
- package/dist/controls/multi-select-filter.js +124 -22
- package/dist/controls/number-filter.d.ts +28 -0
- package/dist/controls/number-filter.d.ts.map +1 -0
- package/dist/controls/number-filter.js +172 -0
- package/dist/controls/panel-row.d.ts +132 -0
- package/dist/controls/panel-row.d.ts.map +1 -0
- package/dist/controls/panel-row.js +173 -0
- package/dist/controls/panel-row.module.css +86 -0
- package/dist/controls/panel-row.module.css.d.ts +13 -0
- package/dist/controls/range-filter.d.ts +20 -5
- package/dist/controls/range-filter.d.ts.map +1 -1
- package/dist/controls/range-filter.js +75 -38
- package/dist/controls/search-filter.d.ts +3 -2
- package/dist/controls/search-filter.d.ts.map +1 -1
- package/dist/controls/search-filter.js +26 -11
- package/dist/controls/select-filter.d.ts +2 -1
- package/dist/controls/select-filter.d.ts.map +1 -1
- package/dist/controls/select-filter.js +4 -0
- package/dist/controls/slider-control.d.ts +36 -0
- package/dist/controls/slider-control.d.ts.map +1 -0
- package/dist/controls/slider-control.js +64 -0
- package/dist/controls/sync-button.d.ts +3 -2
- package/dist/controls/sync-button.d.ts.map +1 -1
- package/dist/controls/sync-button.js +16 -3
- package/dist/controls/toggle-filter.d.ts +3 -2
- package/dist/controls/toggle-filter.d.ts.map +1 -1
- package/dist/controls/toggle-filter.js +29 -12
- package/dist/controls/view-tabs.d.ts +3 -2
- package/dist/controls/view-tabs.d.ts.map +1 -1
- package/dist/controls/view-tabs.js +43 -11
- package/dist/controls-dates/date-range-picker.d.ts +1 -1
- package/dist/controls-dates/date-range-picker.d.ts.map +1 -1
- package/dist/controls-dates/date-range-picker.js +6 -1
- package/dist/dashboard/delta-badge.d.ts +5 -1
- package/dist/dashboard/delta-badge.d.ts.map +1 -1
- package/dist/dashboard/empty-state.d.ts +10 -3
- package/dist/dashboard/empty-state.d.ts.map +1 -1
- package/dist/dashboard/empty-state.js +37 -6
- package/dist/dashboard/index.d.ts +6 -4
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +10 -2
- package/dist/dashboard/query-state.d.ts +48 -27
- package/dist/dashboard/query-state.d.ts.map +1 -1
- package/dist/dashboard/query-state.js +111 -57
- package/dist/dashboard/settings-section.d.ts +19 -9
- package/dist/dashboard/settings-section.d.ts.map +1 -1
- package/dist/dashboard/settings-section.js +74 -25
- package/dist/dashboard/stat-card.d.ts +76 -19
- package/dist/dashboard/stat-card.d.ts.map +1 -1
- package/dist/dashboard/stat-card.js +78 -38
- package/dist/dashboard/stat-card.module.css +112 -26
- package/dist/dashboard/stat-card.module.css.d.ts +5 -0
- package/dist/dashboard/stat-group.d.ts +41 -0
- package/dist/dashboard/stat-group.d.ts.map +1 -0
- package/dist/dashboard/stat-group.js +30 -0
- package/dist/dashboard/stat-group.module.css +66 -0
- package/dist/dashboard/stat-group.module.css.d.ts +8 -0
- package/dist/dashboard/widget-grid.d.ts +27 -0
- package/dist/dashboard/widget-grid.d.ts.map +1 -0
- package/dist/dashboard/widget-grid.js +41 -0
- package/dist/dashboard/widget-grid.module.css +53 -0
- package/dist/dashboard/widget-grid.module.css.d.ts +9 -0
- package/dist/data/data-table.d.ts +151 -12
- package/dist/data/data-table.d.ts.map +1 -1
- package/dist/data/data-table.js +392 -138
- package/dist/data/data-table.module.css +64 -0
- package/dist/data/data-table.module.css.d.ts +11 -0
- package/dist/data/index.d.ts +2 -2
- package/dist/data/index.d.ts.map +1 -1
- package/dist/data/index.js +24 -2
- package/dist/data/query-branch.d.ts +28 -0
- package/dist/data/query-branch.d.ts.map +1 -0
- package/dist/data/query-branch.js +10 -0
- package/dist/data/table.d.ts +2 -2
- package/dist/data/table.d.ts.map +1 -1
- package/dist/data/virtual-list.d.ts +65 -6
- package/dist/data/virtual-list.d.ts.map +1 -1
- package/dist/data/virtual-list.js +89 -38
- package/dist/data/virtual.d.ts +1 -1
- package/dist/data/virtual.d.ts.map +1 -1
- package/dist/forms/FormErrorSummary.d.ts +4 -3
- package/dist/forms/FormErrorSummary.d.ts.map +1 -1
- package/dist/forms/FormErrorSummary.js +6 -4
- package/dist/forms/create-form.d.ts +2 -2
- package/dist/forms/field.d.ts +46 -6
- package/dist/forms/field.d.ts.map +1 -1
- package/dist/forms/field.js +10 -5
- package/dist/forms/form-layout.d.ts +142 -0
- package/dist/forms/form-layout.d.ts.map +1 -0
- package/dist/forms/form-layout.js +110 -0
- package/dist/forms/form-layout.module.css +145 -0
- package/dist/forms/form-layout.module.css.d.ts +20 -0
- package/dist/forms/form-state.d.ts +42 -0
- package/dist/forms/form-state.d.ts.map +1 -0
- package/dist/forms/form-state.js +26 -0
- package/dist/forms/index.d.ts +22 -6
- package/dist/forms/index.d.ts.map +1 -1
- package/dist/forms/index.js +19 -3
- package/dist/forms/use-field-array.d.ts +60 -0
- package/dist/forms/use-field-array.d.ts.map +1 -0
- package/dist/forms/use-field-array.js +20 -0
- package/dist/forms/use-form-draft.d.ts +25 -10
- package/dist/forms/use-form-draft.d.ts.map +1 -1
- package/dist/forms/use-form-draft.js +55 -18
- package/dist/forms/use-form-submit.d.ts +88 -0
- package/dist/forms/use-form-submit.d.ts.map +1 -0
- package/dist/forms/use-form-submit.js +63 -0
- package/dist/guard/index.d.ts +1 -1
- package/dist/guard/index.d.ts.map +1 -1
- package/dist/guard/index.js +27 -11
- package/dist/index.d.ts +10 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +44 -4
- package/dist/nav/types.d.ts +15 -6
- package/dist/nav/types.d.ts.map +1 -1
- package/dist/notifications/bell.d.ts +3 -2
- package/dist/notifications/bell.d.ts.map +1 -1
- package/dist/notifications/bell.js +73 -56
- package/dist/notifications/center.d.ts +15 -4
- package/dist/notifications/center.d.ts.map +1 -1
- package/dist/notifications/center.js +5 -2
- package/dist/notifications/define-notifications.d.ts +56 -14
- package/dist/notifications/define-notifications.d.ts.map +1 -1
- package/dist/notifications/define-notifications.js +2 -1
- package/dist/notifications/index.d.ts +6 -2
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js +5 -1
- package/dist/notifications/mount-guard.d.ts +8 -0
- package/dist/notifications/mount-guard.d.ts.map +1 -0
- package/dist/notifications/mount-guard.js +19 -0
- package/dist/notifications/notify.d.ts +58 -1
- package/dist/notifications/notify.d.ts.map +1 -1
- package/dist/notifications/notify.js +46 -2
- package/dist/notifications/overlay.d.ts.map +1 -1
- package/dist/notifications/overlay.js +2 -0
- package/dist/notifications/store.d.ts +7 -0
- package/dist/notifications/store.d.ts.map +1 -1
- package/dist/provider/index.d.ts +37 -5
- package/dist/provider/index.d.ts.map +1 -1
- package/dist/provider/index.js +66 -28
- package/dist/provider/lab-theme.d.ts.map +1 -1
- package/dist/provider/lab-theme.js +2 -1
- package/dist/query/devtools.d.ts.map +1 -1
- package/dist/query/devtools.js +1 -0
- package/dist/router-tanstack/field.d.ts +1 -1
- package/dist/router-tanstack/field.d.ts.map +1 -1
- package/dist/router-tanstack/index.d.ts +1 -1
- package/dist/router-tanstack/index.d.ts.map +1 -1
- package/dist/router-tanstack/search-store.d.ts +4 -1
- package/dist/router-tanstack/search-store.d.ts.map +1 -1
- package/dist/router-tanstack/search-store.js +92 -8
- package/dist/router-tanstack/use-nav.d.ts.map +1 -1
- package/dist/router-tanstack/use-nav.js +1 -1
- package/dist/section/index.d.ts +1 -1
- package/dist/section/index.d.ts.map +1 -1
- package/dist/section/section.d.ts +36 -2
- package/dist/section/section.d.ts.map +1 -1
- package/dist/section/section.js +49 -57
- package/dist/section/section.module.css +11 -0
- package/dist/shell/account-types.d.ts +5 -2
- package/dist/shell/account-types.d.ts.map +1 -1
- package/dist/shell/app-brand.d.ts +13 -0
- package/dist/shell/app-brand.d.ts.map +1 -0
- package/dist/shell/app-brand.js +94 -0
- package/dist/shell/app-brand.module.css +109 -0
- package/dist/shell/app-brand.module.css.d.ts +14 -0
- package/dist/shell/app-breadcrumbs.d.ts +4 -2
- package/dist/shell/app-breadcrumbs.d.ts.map +1 -1
- package/dist/shell/app-breadcrumbs.js +33 -22
- package/dist/shell/app-header.module.css +10 -5
- package/dist/shell/app-main.module.css +107 -0
- package/dist/shell/app-main.module.css.d.ts +11 -0
- package/dist/shell/app-mobile-nav.d.ts +3 -2
- package/dist/shell/app-mobile-nav.d.ts.map +1 -1
- package/dist/shell/app-mobile-nav.js +29 -15
- package/dist/shell/app-mobile-nav.module.css +48 -27
- package/dist/shell/app-mobile-nav.module.css.d.ts +0 -1
- package/dist/shell/app-sidebar-account.d.ts +2 -1
- package/dist/shell/app-sidebar-account.d.ts.map +1 -1
- package/dist/shell/app-sidebar-account.js +57 -22
- package/dist/shell/app-sidebar.d.ts +9 -3
- package/dist/shell/app-sidebar.d.ts.map +1 -1
- package/dist/shell/app-sidebar.js +55 -109
- package/dist/shell/app-sidebar.module.css +53 -96
- package/dist/shell/app-sidebar.module.css.d.ts +0 -5
- package/dist/shell/index.d.ts +14 -6
- package/dist/shell/index.d.ts.map +1 -1
- package/dist/shell/index.js +47 -12
- package/dist/shell/isomorphic-layout-effect.d.ts +14 -0
- package/dist/shell/isomorphic-layout-effect.d.ts.map +1 -0
- package/dist/shell/isomorphic-layout-effect.js +5 -0
- package/dist/shell/mobile-nav-model.d.ts.map +1 -1
- package/dist/shell/mobile-nav-model.js +27 -6
- package/dist/shell/nav-count-badge.d.ts +5 -3
- package/dist/shell/nav-count-badge.d.ts.map +1 -1
- package/dist/shell/nav-count-badge.js +3 -1
- package/dist/shell/page-aside.d.ts +43 -0
- package/dist/shell/page-aside.d.ts.map +1 -0
- package/dist/shell/page-aside.js +202 -0
- package/dist/shell/page-aside.module.css +174 -0
- package/dist/shell/page-aside.module.css.d.ts +14 -0
- package/dist/shell/page-bar.d.ts +55 -15
- package/dist/shell/page-bar.d.ts.map +1 -1
- package/dist/shell/page-bar.js +130 -41
- package/dist/shell/page-bar.module.css +107 -13
- package/dist/shell/page-bar.module.css.d.ts +4 -1
- package/dist/shell/sidebar-search.d.ts +4 -2
- package/dist/shell/sidebar-search.d.ts.map +1 -1
- package/dist/shell/sidebar-search.js +9 -4
- package/dist/shell/sidebar-search.module.css +1 -1
- package/dist/state/fields.d.ts +227 -34
- package/dist/state/fields.d.ts.map +1 -1
- package/dist/state/fields.js +77 -30
- package/dist/state/persisted-or-local.d.ts +9 -0
- package/dist/state/persisted-or-local.d.ts.map +1 -0
- package/dist/state/persisted-or-local.js +24 -0
- package/dist/state/persisted.d.ts +12 -0
- package/dist/state/persisted.d.ts.map +1 -1
- package/dist/state/persisted.js +36 -18
- package/dist/state.d.ts +1 -1
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +2 -6
- package/dist/surfaces.d.ts +12 -11
- package/dist/surfaces.d.ts.map +1 -1
- package/dist/surfaces.js +43 -12
- package/dist/theme/ctl-theme.d.ts.map +1 -1
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +102 -17
- package/dist/theme/nav-link.module.css +37 -26
- package/dist/theme/segmented-control.module.css +22 -0
- package/dist/theme/segmented-control.module.css.d.ts +1 -0
- package/dist/theme-lab/boot.d.ts +66 -0
- package/dist/theme-lab/boot.d.ts.map +1 -0
- package/dist/theme-lab/boot.js +82 -0
- package/dist/theme-lab/index.d.ts +4 -43
- package/dist/theme-lab/index.d.ts.map +1 -1
- package/dist/theme-lab/index.js +9 -69
- package/dist/theme-toggle/index.d.ts +3 -2
- package/dist/theme-toggle/index.d.ts.map +1 -1
- package/dist/theme-toggle/index.js +8 -2
- package/dist/tokens/index.d.ts +42 -0
- package/dist/tokens/index.d.ts.map +1 -1
- package/dist/tokens/index.js +35 -6
- package/dist/tokens/palette.d.ts +45 -25
- package/dist/tokens/palette.d.ts.map +1 -1
- package/dist/tokens/palette.js +31 -14
- package/dist/tokens.css +4 -5
- package/dist/utils/is-dev.d.ts +3 -0
- package/dist/utils/is-dev.d.ts.map +1 -0
- package/dist/utils/is-dev.js +6 -0
- package/dist/widget-header/delta-badge.d.ts +7 -1
- package/dist/widget-header/delta-badge.d.ts.map +1 -1
- package/dist/widget-header/delta-badge.js +8 -1
- package/dist/widget-header/index.d.ts +2 -2
- package/dist/widget-header/index.d.ts.map +1 -1
- package/dist/widget-header/index.js +3 -1
- package/dist/widget-header/widget-header.d.ts +99 -4
- package/dist/widget-header/widget-header.d.ts.map +1 -1
- package/dist/widget-header/widget-header.js +45 -18
- package/dist/widget-header/widget-header.module.css +87 -7
- package/dist/widget-header/widget-header.module.css.d.ts +1 -0
- package/llms.txt +6 -6
- package/package.json +49 -25
- package/src/agent/coalesce.ts +2 -1
- package/src/agent/merge.ts +2 -1
- package/src/agent/part-list.tsx +2 -0
- package/src/agent/stick-to-bottom.tsx +9 -11
- package/src/agent-chat/composer.tsx +124 -103
- package/src/agent-chat/relative-time.ts +2 -1
- package/src/agent-chat/thread-detail-panel.tsx +9 -5
- package/src/agent-chat/thread-feed-row.tsx +17 -9
- package/src/agent-chat/thread-feed.tsx +9 -3
- package/src/agent-chat/thread-message.tsx +48 -13
- package/src/agent-chat/thread-outcome-card.tsx +9 -1
- package/src/agent-chat/thread-workspace.tsx +72 -33
- package/src/agent-chat/tool-chip.tsx +8 -2
- package/src/charts/hooks/useBandPlot.ts +26 -8
- package/src/charts/index.ts +39 -4
- package/src/charts/kinds/BandStrip.tsx +36 -14
- package/src/charts/kinds/Bars.tsx +67 -16
- package/src/charts/kinds/Donut.tsx +30 -3
- package/src/charts/kinds/DualPanel.tsx +56 -10
- package/src/charts/kinds/Heatmap.tsx +90 -33
- package/src/charts/kinds/MirroredBars.tsx +21 -3
- package/src/charts/kinds/MultiLine.tsx +61 -18
- package/src/charts/kinds/StackedArea.tsx +77 -6
- package/src/charts/kinds/ZonedLine.tsx +71 -31
- package/src/charts/layout/auto-margin.ts +134 -21
- package/src/charts/layout/log-ticks.ts +90 -0
- package/src/charts/primitives/Axes.tsx +33 -5
- package/src/charts/primitives/CartesianChart.tsx +194 -41
- package/src/charts/primitives/ChartCard.tsx +66 -25
- package/src/charts/primitives/ChartFrame.tsx +107 -26
- package/src/charts/primitives/ChartLegend.tsx +43 -13
- package/src/charts/primitives/ChartPending.tsx +185 -7
- package/src/charts/primitives/ChartTooltip.tsx +37 -5
- package/src/charts/primitives/Crosshair.tsx +6 -3
- package/src/charts/primitives/chart-frame-layout.ts +212 -0
- package/src/charts/primitives/chart-tier.tsx +37 -0
- package/src/charts/series.ts +77 -1
- package/src/charts/sparklines/BarSparkline.tsx +11 -3
- package/src/charts/sparklines/LineSparkline.tsx +18 -4
- package/src/charts/sparklines/index.ts +2 -2
- package/src/charts/utils/format.ts +163 -2
- package/src/charts/utils/ticks.ts +149 -4
- package/src/cli/index.ts +8 -3
- package/src/commands/ShortcutsHelp.tsx +10 -3
- package/src/commands/define-commands.ts +2 -2
- package/src/commands/define-overlays.ts +216 -1
- package/src/commands/index.ts +12 -0
- package/src/commands/overlays-mount.tsx +60 -26
- package/src/common/errors.ts +73 -0
- package/src/common/index.ts +21 -0
- package/src/common/props.ts +71 -0
- package/src/common/query-state-like.ts +64 -0
- package/src/common/refs.ts +58 -0
- package/src/common/scroll-parent.ts +42 -0
- package/src/common/validate.ts +94 -0
- package/src/connectivity/connectivity-indicator.tsx +6 -1
- package/src/connectivity/connectivity-provider.tsx +4 -1
- package/src/connectivity/index.ts +1 -0
- package/src/connectivity/types.ts +5 -2
- package/src/connectivity/use-connectivity.ts +3 -2
- package/src/content/article-layout.module.css +11 -4
- package/src/content/callout.tsx +13 -7
- package/src/content/guide.tsx +14 -4
- package/src/content/heading-anchor.tsx +14 -3
- package/src/content/index.ts +2 -0
- package/src/content/markdown.tsx +2 -0
- package/src/content/prose.module.css +9 -7
- package/src/content/reading-progress.tsx +40 -15
- package/src/content/slug.ts +4 -0
- package/src/content/toc.tsx +47 -10
- package/src/controls/actions.tsx +89 -9
- package/src/controls/compare-filter.tsx +20 -3
- package/src/controls/control-group.tsx +11 -4
- package/src/controls/controls.module.css +169 -186
- package/src/controls/controls.module.css.d.ts +9 -11
- package/src/controls/enum-filter.tsx +46 -19
- package/src/controls/filter-context.tsx +21 -8
- package/src/controls/filter-pill.tsx +6 -3
- package/src/controls/filter-set.tsx +32 -13
- package/src/controls/filter-sheet.tsx +44 -194
- package/src/controls/index.ts +8 -0
- package/src/controls/multi-select-filter.tsx +179 -29
- package/src/controls/number-filter.tsx +329 -0
- package/src/controls/panel-row.module.css +86 -0
- package/src/controls/panel-row.module.css.d.ts +13 -0
- package/src/controls/panel-row.tsx +392 -0
- package/src/controls/range-filter.tsx +133 -43
- package/src/controls/search-filter.tsx +31 -13
- package/src/controls/select-filter.tsx +11 -1
- package/src/controls/slider-control.tsx +159 -0
- package/src/controls/sync-button.tsx +13 -3
- package/src/controls/toggle-filter.tsx +37 -17
- package/src/controls/view-tabs.tsx +63 -11
- package/src/controls-dates/date-range-picker.tsx +8 -1
- package/src/dashboard/delta-badge.tsx +5 -1
- package/src/dashboard/empty-state.tsx +72 -25
- package/src/dashboard/index.ts +19 -2
- package/src/dashboard/query-state.tsx +154 -84
- package/src/dashboard/settings-section.tsx +87 -31
- package/src/dashboard/stat-card.module.css +112 -26
- package/src/dashboard/stat-card.module.css.d.ts +5 -0
- package/src/dashboard/stat-card.tsx +207 -68
- package/src/dashboard/stat-group.module.css +66 -0
- package/src/dashboard/stat-group.module.css.d.ts +8 -0
- package/src/dashboard/stat-group.tsx +74 -0
- package/src/dashboard/widget-grid.module.css +53 -0
- package/src/dashboard/widget-grid.module.css.d.ts +9 -0
- package/src/dashboard/widget-grid.tsx +127 -0
- package/src/data/data-table.module.css +64 -0
- package/src/data/data-table.module.css.d.ts +11 -0
- package/src/data/data-table.tsx +927 -346
- package/src/data/index.ts +30 -2
- package/src/data/query-branch.ts +53 -0
- package/src/data/table.ts +5 -0
- package/src/data/virtual-list.tsx +189 -55
- package/src/data/virtual.ts +5 -1
- package/src/forms/FormErrorSummary.tsx +13 -6
- package/src/forms/create-form.ts +2 -2
- package/src/forms/field.ts +60 -11
- package/src/forms/form-layout.module.css +145 -0
- package/src/forms/form-layout.module.css.d.ts +20 -0
- package/src/forms/form-layout.tsx +305 -0
- package/src/forms/form-state.tsx +94 -0
- package/src/forms/index.ts +38 -7
- package/src/forms/use-field-array.ts +94 -0
- package/src/forms/use-form-draft.ts +145 -53
- package/src/forms/use-form-submit.ts +199 -0
- package/src/guard/index.ts +91 -23
- package/src/index.ts +79 -10
- package/src/nav/types.ts +15 -6
- package/src/notifications/bell.tsx +18 -4
- package/src/notifications/center.tsx +18 -5
- package/src/notifications/define-notifications.ts +64 -18
- package/src/notifications/index.ts +12 -1
- package/src/notifications/mount-guard.ts +41 -0
- package/src/notifications/notify.tsx +122 -3
- package/src/notifications/overlay.tsx +2 -0
- package/src/notifications/store.ts +7 -0
- package/src/provider/index.tsx +101 -13
- package/src/provider/lab-theme.ts +2 -1
- package/src/query/devtools.tsx +1 -0
- package/src/router-tanstack/field.ts +5 -0
- package/src/router-tanstack/index.ts +4 -0
- package/src/router-tanstack/search-store.ts +171 -12
- package/src/router-tanstack/use-nav.ts +18 -13
- package/src/section/index.ts +1 -1
- package/src/section/section.module.css +11 -0
- package/src/section/section.tsx +163 -96
- package/src/shell/account-types.ts +5 -2
- package/src/shell/app-brand.module.css +109 -0
- package/src/shell/app-brand.module.css.d.ts +14 -0
- package/src/shell/app-brand.tsx +140 -0
- package/src/shell/app-breadcrumbs.tsx +19 -9
- package/src/shell/app-header.module.css +10 -5
- package/src/shell/app-main.module.css +107 -0
- package/src/shell/app-main.module.css.d.ts +11 -0
- package/src/shell/app-mobile-nav.module.css +48 -27
- package/src/shell/app-mobile-nav.module.css.d.ts +0 -1
- package/src/shell/app-mobile-nav.tsx +43 -11
- package/src/shell/app-sidebar-account.tsx +29 -6
- package/src/shell/app-sidebar.module.css +53 -96
- package/src/shell/app-sidebar.module.css.d.ts +0 -5
- package/src/shell/app-sidebar.tsx +40 -113
- package/src/shell/index.tsx +156 -65
- package/src/shell/isomorphic-layout-effect.ts +14 -0
- package/src/shell/mobile-nav-model.ts +66 -10
- package/src/shell/nav-count-badge.tsx +6 -1
- package/src/shell/page-aside.module.css +174 -0
- package/src/shell/page-aside.module.css.d.ts +14 -0
- package/src/shell/page-aside.tsx +377 -0
- package/src/shell/page-bar.module.css +107 -13
- package/src/shell/page-bar.module.css.d.ts +4 -1
- package/src/shell/page-bar.tsx +294 -94
- package/src/shell/sidebar-search.module.css +1 -1
- package/src/shell/sidebar-search.tsx +13 -4
- package/src/state/fields.ts +360 -69
- package/src/state/persisted-or-local.ts +50 -0
- package/src/state/persisted.ts +76 -26
- package/src/state.ts +4 -7
- package/src/surfaces.ts +43 -12
- package/src/theme/ctl-theme.tsx +10 -0
- package/src/theme/index.ts +129 -16
- package/src/theme/nav-link.module.css +37 -26
- package/src/theme/segmented-control.module.css +22 -0
- package/src/theme/segmented-control.module.css.d.ts +1 -0
- package/src/theme-lab/boot.ts +140 -0
- package/src/theme-lab/index.tsx +21 -112
- package/src/theme-toggle/index.tsx +10 -3
- package/src/tokens/index.ts +50 -6
- package/src/tokens/palette.ts +58 -30
- package/src/utils/is-dev.ts +4 -0
- package/src/widget-header/delta-badge.tsx +25 -5
- package/src/widget-header/index.ts +10 -2
- package/src/widget-header/widget-header.module.css +87 -7
- package/src/widget-header/widget-header.module.css.d.ts +1 -0
- package/src/widget-header/widget-header.tsx +166 -42
- package/dist/agent/adapter.test.d.ts +0 -2
- package/dist/agent/adapter.test.d.ts.map +0 -1
- package/dist/agent/ai-sdk-transport.test.d.ts +0 -2
- package/dist/agent/ai-sdk-transport.test.d.ts.map +0 -1
- package/dist/agent/coalesce.test.d.ts +0 -2
- package/dist/agent/coalesce.test.d.ts.map +0 -1
- package/dist/agent/foreign.test.d.ts +0 -2
- package/dist/agent/foreign.test.d.ts.map +0 -1
- package/dist/agent/id.test.d.ts +0 -2
- package/dist/agent/id.test.d.ts.map +0 -1
- package/dist/agent/merge.test.d.ts +0 -2
- package/dist/agent/merge.test.d.ts.map +0 -1
- package/dist/agent/part-list.test.d.ts +0 -2
- package/dist/agent/part-list.test.d.ts.map +0 -1
- package/dist/agent/parts.test.d.ts +0 -2
- package/dist/agent/parts.test.d.ts.map +0 -1
- package/dist/agent/thread.test.d.ts +0 -2
- package/dist/agent/thread.test.d.ts.map +0 -1
- package/dist/agent/transport.test.d.ts +0 -2
- package/dist/agent/transport.test.d.ts.map +0 -1
- package/dist/agent/use-agent-stream.test.d.ts +0 -2
- package/dist/agent/use-agent-stream.test.d.ts.map +0 -1
- package/dist/agent/use-agent-thread-runs.foreign.test.d.ts +0 -2
- package/dist/agent/use-agent-thread-runs.foreign.test.d.ts.map +0 -1
- package/dist/agent/use-agent-thread-runs.resume.test.d.ts +0 -2
- package/dist/agent/use-agent-thread-runs.resume.test.d.ts.map +0 -1
- package/dist/agent/use-agent-thread-runs.test.d.ts +0 -2
- package/dist/agent/use-agent-thread-runs.test.d.ts.map +0 -1
- package/dist/agent/use-agent-thread-runs.wedge.test.d.ts +0 -2
- package/dist/agent/use-agent-thread-runs.wedge.test.d.ts.map +0 -1
- package/dist/agent-chat/composer.test.d.ts +0 -2
- package/dist/agent-chat/composer.test.d.ts.map +0 -1
- package/dist/agent-chat/relative-time.test.d.ts +0 -2
- package/dist/agent-chat/relative-time.test.d.ts.map +0 -1
- package/dist/agent-chat/thread-feed-row.test.d.ts +0 -2
- package/dist/agent-chat/thread-feed-row.test.d.ts.map +0 -1
- package/dist/agent-chat/thread-feed.test.d.ts +0 -2
- package/dist/agent-chat/thread-feed.test.d.ts.map +0 -1
- package/dist/agent-chat/thread-message.test.d.ts +0 -2
- package/dist/agent-chat/thread-message.test.d.ts.map +0 -1
- package/dist/agent-chat/thread-workspace.test.d.ts +0 -2
- package/dist/agent-chat/thread-workspace.test.d.ts.map +0 -1
- package/dist/agent-chat/tool-chip.test.d.ts +0 -2
- package/dist/agent-chat/tool-chip.test.d.ts.map +0 -1
- package/dist/agent-chat/virtualize.type-guard.test.d.ts +0 -2
- package/dist/agent-chat/virtualize.type-guard.test.d.ts.map +0 -1
- package/dist/charts/cursor/resolve.test.d.ts +0 -2
- package/dist/charts/cursor/resolve.test.d.ts.map +0 -1
- package/dist/charts/cursor/store.test.d.ts +0 -2
- package/dist/charts/cursor/store.test.d.ts.map +0 -1
- package/dist/charts/kinds/BandStrip.test.d.ts +0 -2
- package/dist/charts/kinds/BandStrip.test.d.ts.map +0 -1
- package/dist/charts/kinds/Bars.test.d.ts +0 -2
- package/dist/charts/kinds/Bars.test.d.ts.map +0 -1
- package/dist/charts/kinds/DualPanel.test.d.ts +0 -2
- package/dist/charts/kinds/DualPanel.test.d.ts.map +0 -1
- package/dist/charts/kinds/MirroredBars.test.d.ts +0 -2
- package/dist/charts/kinds/MirroredBars.test.d.ts.map +0 -1
- package/dist/charts/kinds/MultiLine.test.d.ts +0 -2
- package/dist/charts/kinds/MultiLine.test.d.ts.map +0 -1
- package/dist/charts/kinds/StackedArea.test.d.ts +0 -2
- package/dist/charts/kinds/StackedArea.test.d.ts.map +0 -1
- package/dist/charts/kinds/ZonedLine.test.d.ts +0 -2
- package/dist/charts/kinds/ZonedLine.test.d.ts.map +0 -1
- package/dist/charts/layout/auto-margin.test.d.ts +0 -2
- package/dist/charts/layout/auto-margin.test.d.ts.map +0 -1
- package/dist/charts/primitives/CartesianChart.test.d.ts +0 -2
- package/dist/charts/primitives/CartesianChart.test.d.ts.map +0 -1
- package/dist/charts/primitives/ChartCard.test.d.ts +0 -2
- package/dist/charts/primitives/ChartCard.test.d.ts.map +0 -1
- package/dist/charts/primitives/ChartFrame.test.d.ts +0 -2
- package/dist/charts/primitives/ChartFrame.test.d.ts.map +0 -1
- package/dist/charts/primitives/ChartLegend.test.d.ts +0 -2
- package/dist/charts/primitives/ChartLegend.test.d.ts.map +0 -1
- package/dist/charts/primitives/ChartTooltip.test.d.ts +0 -2
- package/dist/charts/primitives/ChartTooltip.test.d.ts.map +0 -1
- package/dist/charts/primitives/XZoneRects.test.d.ts +0 -2
- package/dist/charts/primitives/XZoneRects.test.d.ts.map +0 -1
- package/dist/charts/series.test.d.ts +0 -2
- package/dist/charts/series.test.d.ts.map +0 -1
- package/dist/charts/utils/domain.test.d.ts +0 -2
- package/dist/charts/utils/domain.test.d.ts.map +0 -1
- package/dist/charts/utils/measure-text.test.d.ts +0 -2
- package/dist/charts/utils/measure-text.test.d.ts.map +0 -1
- package/dist/cli/check-coverage.test.d.ts +0 -2
- package/dist/cli/check-coverage.test.d.ts.map +0 -1
- package/dist/cli/check-theme.test.d.ts +0 -2
- package/dist/cli/check-theme.test.d.ts.map +0 -1
- package/dist/cli/help.test.d.ts +0 -2
- package/dist/cli/help.test.d.ts.map +0 -1
- package/dist/cli/init-sync.test.d.ts +0 -2
- package/dist/cli/init-sync.test.d.ts.map +0 -1
- package/dist/cli/placement-engine.test.d.ts +0 -2
- package/dist/cli/placement-engine.test.d.ts.map +0 -1
- package/dist/cli/shipped-versions.test.d.ts +0 -2
- package/dist/cli/shipped-versions.test.d.ts.map +0 -1
- package/dist/cli/tarball-parity.test.d.ts +0 -2
- package/dist/cli/tarball-parity.test.d.ts.map +0 -1
- package/dist/cli/template-format.test.d.ts +0 -2
- package/dist/cli/template-format.test.d.ts.map +0 -1
- package/dist/cli/template-ledger.test.d.ts +0 -2
- package/dist/cli/template-ledger.test.d.ts.map +0 -1
- package/dist/cli/tokens-css.test.d.ts +0 -2
- package/dist/cli/tokens-css.test.d.ts.map +0 -1
- package/dist/cli/toolchain-wiring.test.d.ts +0 -2
- package/dist/cli/toolchain-wiring.test.d.ts.map +0 -1
- package/dist/cli/waiver-audit.test.d.ts +0 -2
- package/dist/cli/waiver-audit.test.d.ts.map +0 -1
- package/dist/content/article-actions.test.d.ts +0 -2
- package/dist/content/article-actions.test.d.ts.map +0 -1
- package/dist/content/article-model.test.d.ts +0 -2
- package/dist/content/article-model.test.d.ts.map +0 -1
- package/dist/content/block-split.test.d.ts +0 -2
- package/dist/content/block-split.test.d.ts.map +0 -1
- package/dist/content/heading-components.test.d.ts +0 -2
- package/dist/content/heading-components.test.d.ts.map +0 -1
- package/dist/content/markdown.test.d.ts +0 -2
- package/dist/content/markdown.test.d.ts.map +0 -1
- package/dist/content/prose.module.css.test.d.ts +0 -2
- package/dist/content/prose.module.css.test.d.ts.map +0 -1
- package/dist/content/sanitize.test.d.ts +0 -2
- package/dist/content/sanitize.test.d.ts.map +0 -1
- package/dist/content/slug.test.d.ts +0 -2
- package/dist/content/slug.test.d.ts.map +0 -1
- package/dist/controls/actions.test.d.ts +0 -2
- package/dist/controls/actions.test.d.ts.map +0 -1
- package/dist/controls/actions.type-guard.test.d.ts +0 -2
- package/dist/controls/actions.type-guard.test.d.ts.map +0 -1
- package/dist/controls/control-group.test.d.ts +0 -2
- package/dist/controls/control-group.test.d.ts.map +0 -1
- package/dist/controls/controls.router.test.d.ts +0 -2
- package/dist/controls/controls.router.test.d.ts.map +0 -1
- package/dist/controls/filter-set.test.d.ts +0 -2
- package/dist/controls/filter-set.test.d.ts.map +0 -1
- package/dist/controls/peer-boundary.test.d.ts +0 -2
- package/dist/controls/peer-boundary.test.d.ts.map +0 -1
- package/dist/controls/props-contract.test.d.ts +0 -2
- package/dist/controls/props-contract.test.d.ts.map +0 -1
- package/dist/controls/sync-button.test.d.ts +0 -2
- package/dist/controls/sync-button.test.d.ts.map +0 -1
- package/dist/dashboard/query-state.test.d.ts +0 -2
- package/dist/dashboard/query-state.test.d.ts.map +0 -1
- package/dist/dashboard/settings-section.test.d.ts +0 -2
- package/dist/dashboard/settings-section.test.d.ts.map +0 -1
- package/dist/dashboard/stat-card.test.d.ts +0 -2
- package/dist/dashboard/stat-card.test.d.ts.map +0 -1
- package/dist/data/data-table.test.d.ts +0 -2
- package/dist/data/data-table.test.d.ts.map +0 -1
- package/dist/guard/check-source.test.d.ts +0 -2
- package/dist/guard/check-source.test.d.ts.map +0 -1
- package/dist/guard/grace.test.d.ts +0 -20
- package/dist/guard/grace.test.d.ts.map +0 -1
- package/dist/guard/guard-hook.test.d.ts +0 -2
- package/dist/guard/guard-hook.test.d.ts.map +0 -1
- package/dist/provider/index.test.d.ts +0 -2
- package/dist/provider/index.test.d.ts.map +0 -1
- package/dist/provider/lab-theme.test.d.ts +0 -2
- package/dist/provider/lab-theme.test.d.ts.map +0 -1
- package/dist/query/error-message.test.d.ts +0 -2
- package/dist/query/error-message.test.d.ts.map +0 -1
- package/dist/router-tanstack/multi-search-param-store.test.d.ts +0 -2
- package/dist/router-tanstack/multi-search-param-store.test.d.ts.map +0 -1
- package/dist/router-tanstack/nav.test.d.ts +0 -2
- package/dist/router-tanstack/nav.test.d.ts.map +0 -1
- package/dist/router-tanstack/search-param-store.test.d.ts +0 -2
- package/dist/router-tanstack/search-param-store.test.d.ts.map +0 -1
- package/dist/router-tanstack/search-store.router.test.d.ts +0 -2
- package/dist/router-tanstack/search-store.router.test.d.ts.map +0 -1
- package/dist/router-tanstack/search-store.test.d.ts +0 -2
- package/dist/router-tanstack/search-store.test.d.ts.map +0 -1
- package/dist/router-tanstack/use-nav.test.d.ts +0 -2
- package/dist/router-tanstack/use-nav.test.d.ts.map +0 -1
- package/dist/section/section.test.d.ts +0 -2
- package/dist/section/section.test.d.ts.map +0 -1
- package/dist/shell/app-mobile-nav.test.d.ts +0 -2
- package/dist/shell/app-mobile-nav.test.d.ts.map +0 -1
- package/dist/shell/app-sidebar.test.d.ts +0 -2
- package/dist/shell/app-sidebar.test.d.ts.map +0 -1
- package/dist/shell/index.test.d.ts +0 -2
- package/dist/shell/index.test.d.ts.map +0 -1
- package/dist/shell/mobile-nav-model.test.d.ts +0 -2
- package/dist/shell/mobile-nav-model.test.d.ts.map +0 -1
- package/dist/shell/page-bar.test.d.ts +0 -2
- package/dist/shell/page-bar.test.d.ts.map +0 -1
- package/dist/state/fields.test.d.ts +0 -2
- package/dist/state/fields.test.d.ts.map +0 -1
- package/dist/styles.floor.test.d.ts +0 -2
- package/dist/styles.floor.test.d.ts.map +0 -1
- package/dist/theme/border-coverage.test.d.ts +0 -18
- package/dist/theme/border-coverage.test.d.ts.map +0 -1
- package/dist/theme/contrast.test.d.ts +0 -2
- package/dist/theme/contrast.test.d.ts.map +0 -1
- package/dist/theme/ctl-theme.test.d.ts +0 -2
- package/dist/theme/ctl-theme.test.d.ts.map +0 -1
- package/dist/theme/ctl-tier-coverage.test.d.ts +0 -2
- package/dist/theme/ctl-tier-coverage.test.d.ts.map +0 -1
- package/dist/theme/density-option.test.d.ts +0 -2
- package/dist/theme/density-option.test.d.ts.map +0 -1
- package/dist/theme/density-relations.test.d.ts +0 -2
- package/dist/theme/density-relations.test.d.ts.map +0 -1
- package/dist/theme/derive-theme.test.d.ts +0 -2
- package/dist/theme/derive-theme.test.d.ts.map +0 -1
- package/dist/theme/divider-law.test.d.ts +0 -2
- package/dist/theme/divider-law.test.d.ts.map +0 -1
- package/dist/theme/fonts-option.test.d.ts +0 -2
- package/dist/theme/fonts-option.test.d.ts.map +0 -1
- package/dist/theme/icon-slot.test.d.ts +0 -2
- package/dist/theme/icon-slot.test.d.ts.map +0 -1
- package/dist/theme/layout-rhythm-css.test.d.ts +0 -2
- package/dist/theme/layout-rhythm-css.test.d.ts.map +0 -1
- package/dist/theme/radius-option.test.d.ts +0 -2
- package/dist/theme/radius-option.test.d.ts.map +0 -1
- package/dist/theme/radius.test.d.ts +0 -2
- package/dist/theme/radius.test.d.ts.map +0 -1
- package/dist/theme/shadow-surfaces.test.d.ts +0 -26
- package/dist/theme/shadow-surfaces.test.d.ts.map +0 -1
- package/dist/theme/spacing.test.d.ts +0 -2
- package/dist/theme/spacing.test.d.ts.map +0 -1
- package/dist/theme/use-basalt-spacing.test.d.ts +0 -2
- package/dist/theme/use-basalt-spacing.test.d.ts.map +0 -1
- package/dist/theme-lab/derive-controls.test.d.ts +0 -2
- package/dist/theme-lab/derive-controls.test.d.ts.map +0 -1
- package/dist/theme-lab/derive-state.test.d.ts +0 -2
- package/dist/theme-lab/derive-state.test.d.ts.map +0 -1
- package/dist/theme-lab/theme-lab.test.d.ts +0 -2
- package/dist/theme-lab/theme-lab.test.d.ts.map +0 -1
- package/dist/tokens/build-fonts-css.test.d.ts +0 -2
- package/dist/tokens/build-fonts-css.test.d.ts.map +0 -1
- package/dist/tokens/build-radius-css.test.d.ts +0 -2
- package/dist/tokens/build-radius-css.test.d.ts.map +0 -1
- package/dist/tokens/chart-margin.test.d.ts +0 -2
- package/dist/tokens/chart-margin.test.d.ts.map +0 -1
- package/dist/tokens/density.test.d.ts +0 -2
- package/dist/tokens/density.test.d.ts.map +0 -1
- package/dist/tokens/derive-radius.test.d.ts +0 -2
- package/dist/tokens/derive-radius.test.d.ts.map +0 -1
- package/dist/tokens/derive.test.d.ts +0 -2
- package/dist/tokens/derive.test.d.ts.map +0 -1
- package/dist/tokens/palette.test.d.ts +0 -2
- package/dist/tokens/palette.test.d.ts.map +0 -1
- package/dist/tokens/text-scale.test.d.ts +0 -2
- package/dist/tokens/text-scale.test.d.ts.map +0 -1
- package/dist/vite-color-mix.test.d.ts +0 -2
- package/dist/vite-color-mix.test.d.ts.map +0 -1
- package/dist/vite.test.d.ts +0 -2
- package/dist/vite.test.d.ts.map +0 -1
- package/dist/widget-header/delta-badge.test.d.ts +0 -2
- package/dist/widget-header/delta-badge.test.d.ts.map +0 -1
- package/dist/widget-header/no-mantine.test.d.ts +0 -2
- package/dist/widget-header/no-mantine.test.d.ts.map +0 -1
- package/dist/widget-header/widget-header.test.d.ts +0 -2
- package/dist/widget-header/widget-header.test.d.ts.map +0 -1
- package/src/agent/adapter.test.ts +0 -1640
- package/src/agent/ai-sdk-transport.test.ts +0 -658
- package/src/agent/coalesce.test.ts +0 -387
- package/src/agent/foreign.test.ts +0 -51
- package/src/agent/id.test.ts +0 -169
- package/src/agent/merge.test.ts +0 -206
- package/src/agent/part-list.test.tsx +0 -112
- package/src/agent/parts.test.ts +0 -720
- package/src/agent/thread.test.ts +0 -220
- package/src/agent/transport.test.ts +0 -70
- package/src/agent/use-agent-stream.test.tsx +0 -287
- package/src/agent/use-agent-thread-runs.foreign.test.tsx +0 -138
- package/src/agent/use-agent-thread-runs.resume.test.tsx +0 -294
- package/src/agent/use-agent-thread-runs.test.tsx +0 -1120
- package/src/agent/use-agent-thread-runs.wedge.test.tsx +0 -387
- package/src/agent-chat/composer.test.tsx +0 -924
- package/src/agent-chat/relative-time.test.ts +0 -95
- package/src/agent-chat/thread-feed-row.test.tsx +0 -510
- package/src/agent-chat/thread-feed.test.tsx +0 -241
- package/src/agent-chat/thread-message.test.tsx +0 -1285
- package/src/agent-chat/thread-workspace.test.tsx +0 -169
- package/src/agent-chat/tool-chip.test.tsx +0 -139
- package/src/agent-chat/virtualize.type-guard.test.ts +0 -49
- package/src/charts/cursor/resolve.test.ts +0 -151
- package/src/charts/cursor/store.test.ts +0 -64
- package/src/charts/kinds/BandStrip.test.tsx +0 -282
- package/src/charts/kinds/Bars.test.tsx +0 -183
- package/src/charts/kinds/DualPanel.test.tsx +0 -527
- package/src/charts/kinds/MirroredBars.test.tsx +0 -232
- package/src/charts/kinds/MultiLine.test.tsx +0 -218
- package/src/charts/kinds/StackedArea.test.tsx +0 -114
- package/src/charts/kinds/ZonedLine.test.tsx +0 -147
- package/src/charts/layout/auto-margin.test.ts +0 -42
- package/src/charts/primitives/CartesianChart.test.tsx +0 -647
- package/src/charts/primitives/ChartCard.test.tsx +0 -66
- package/src/charts/primitives/ChartFrame.test.tsx +0 -142
- package/src/charts/primitives/ChartLegend.test.tsx +0 -78
- package/src/charts/primitives/ChartTooltip.test.tsx +0 -44
- package/src/charts/primitives/XZoneRects.test.tsx +0 -123
- package/src/charts/series.test.ts +0 -112
- package/src/charts/utils/domain.test.ts +0 -54
- package/src/charts/utils/measure-text.test.ts +0 -36
- package/src/cli/check-coverage.test.ts +0 -297
- package/src/cli/check-theme.test.ts +0 -837
- package/src/cli/help.test.ts +0 -170
- package/src/cli/init-sync.test.ts +0 -343
- package/src/cli/placement-engine.test.ts +0 -298
- package/src/cli/shipped-versions.test.ts +0 -83
- package/src/cli/tarball-parity.test.ts +0 -44
- package/src/cli/template-format.test.ts +0 -64
- package/src/cli/template-ledger.test.ts +0 -219
- package/src/cli/tokens-css.test.ts +0 -249
- package/src/cli/toolchain-wiring.test.ts +0 -1358
- package/src/cli/waiver-audit.test.ts +0 -215
- package/src/content/article-actions.test.ts +0 -78
- package/src/content/article-model.test.ts +0 -119
- package/src/content/block-split.test.ts +0 -75
- package/src/content/heading-components.test.tsx +0 -65
- package/src/content/markdown.test.tsx +0 -603
- package/src/content/prose.module.css.test.ts +0 -39
- package/src/content/sanitize.test.ts +0 -659
- package/src/content/slug.test.ts +0 -62
- package/src/controls/actions.test.tsx +0 -252
- package/src/controls/actions.type-guard.test.ts +0 -63
- package/src/controls/control-group.test.tsx +0 -229
- package/src/controls/controls.router.test.tsx +0 -637
- package/src/controls/filter-set.test.tsx +0 -472
- package/src/controls/peer-boundary.test.ts +0 -85
- package/src/controls/props-contract.test.tsx +0 -106
- package/src/controls/sync-button.test.tsx +0 -183
- package/src/dashboard/query-state.test.tsx +0 -152
- package/src/dashboard/settings-section.test.tsx +0 -56
- package/src/dashboard/stat-card.test.tsx +0 -154
- package/src/data/data-table.test.tsx +0 -434
- package/src/guard/check-source.test.ts +0 -3355
- package/src/guard/grace.test.ts +0 -149
- package/src/guard/guard-hook.test.ts +0 -203
- package/src/provider/index.test.tsx +0 -101
- package/src/provider/lab-theme.test.ts +0 -147
- package/src/query/error-message.test.ts +0 -67
- package/src/router-tanstack/multi-search-param-store.test.ts +0 -124
- package/src/router-tanstack/nav.test.ts +0 -111
- package/src/router-tanstack/search-param-store.test.ts +0 -135
- package/src/router-tanstack/search-store.router.test.tsx +0 -661
- package/src/router-tanstack/search-store.test.ts +0 -418
- package/src/router-tanstack/use-nav.test.tsx +0 -187
- package/src/section/section.test.tsx +0 -204
- package/src/shell/app-mobile-nav.test.tsx +0 -403
- package/src/shell/app-sidebar.test.tsx +0 -509
- package/src/shell/index.test.tsx +0 -428
- package/src/shell/mobile-nav-model.test.ts +0 -517
- package/src/shell/page-bar.test.tsx +0 -316
- package/src/state/fields.test.tsx +0 -258
- package/src/styles.floor.test.ts +0 -36
- package/src/theme/border-coverage.test.ts +0 -272
- package/src/theme/contrast.test.ts +0 -354
- package/src/theme/ctl-theme.test.tsx +0 -275
- package/src/theme/ctl-tier-coverage.test.ts +0 -170
- package/src/theme/density-option.test.ts +0 -96
- package/src/theme/density-relations.test.ts +0 -506
- package/src/theme/derive-theme.test.ts +0 -101
- package/src/theme/divider-law.test.ts +0 -259
- package/src/theme/fonts-option.test.ts +0 -75
- package/src/theme/icon-slot.test.tsx +0 -275
- package/src/theme/layout-rhythm-css.test.ts +0 -72
- package/src/theme/radius-option.test.ts +0 -86
- package/src/theme/radius.test.ts +0 -142
- package/src/theme/shadow-surfaces.test.ts +0 -488
- package/src/theme/spacing.test.ts +0 -495
- package/src/theme/use-basalt-spacing.test.tsx +0 -55
- package/src/theme-lab/derive-controls.test.ts +0 -94
- package/src/theme-lab/derive-state.test.ts +0 -71
- package/src/theme-lab/theme-lab.test.ts +0 -46
- package/src/tokens/build-fonts-css.test.ts +0 -52
- package/src/tokens/build-radius-css.test.ts +0 -25
- package/src/tokens/chart-margin.test.ts +0 -39
- package/src/tokens/density.test.ts +0 -259
- package/src/tokens/derive-radius.test.ts +0 -62
- package/src/tokens/derive.test.ts +0 -30
- package/src/tokens/palette.test.ts +0 -114
- package/src/tokens/text-scale.test.ts +0 -51
- package/src/vite-color-mix.test.ts +0 -46
- package/src/vite.test.ts +0 -423
- package/src/widget-header/delta-badge.test.tsx +0 -60
- package/src/widget-header/no-mantine.test.ts +0 -33
- package/src/widget-header/widget-header.test.tsx +0 -187
package/src/data/index.ts
CHANGED
|
@@ -35,7 +35,35 @@
|
|
|
35
35
|
*/
|
|
36
36
|
|
|
37
37
|
// ── BasaltDataTable (+ @tanstack/react-table re-exports) ──────────────────────
|
|
38
|
-
export
|
|
38
|
+
export {
|
|
39
|
+
BasaltDataTable,
|
|
40
|
+
type BasaltDataTableProps,
|
|
41
|
+
type BasaltDataTableSlot,
|
|
42
|
+
type DataTableAlign,
|
|
43
|
+
type DataTableColumnId,
|
|
44
|
+
type DataTableColumnPinning,
|
|
45
|
+
type DataTableFacet,
|
|
46
|
+
type DataTableFacetOption,
|
|
47
|
+
createColumnHelper,
|
|
48
|
+
useReactTable,
|
|
49
|
+
flexRender,
|
|
50
|
+
getCoreRowModel,
|
|
51
|
+
getSortedRowModel,
|
|
52
|
+
getFilteredRowModel,
|
|
53
|
+
getPaginationRowModel,
|
|
54
|
+
type ColumnDef,
|
|
55
|
+
type SortingState,
|
|
56
|
+
type ColumnHelper,
|
|
57
|
+
type PaginationState,
|
|
58
|
+
type ColumnPinningState,
|
|
59
|
+
type ColumnFiltersState,
|
|
60
|
+
type RowSelectionState,
|
|
61
|
+
} from './table'
|
|
39
62
|
|
|
40
63
|
// ── BasaltVirtualList ─────────────────────────────────────────────────────────
|
|
41
|
-
export
|
|
64
|
+
export {
|
|
65
|
+
BasaltVirtualList,
|
|
66
|
+
type BasaltVirtualListHandle,
|
|
67
|
+
type BasaltVirtualListProps,
|
|
68
|
+
type BasaltVirtualListSlot,
|
|
69
|
+
} from './virtual'
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The uniform query contract `./data`'s two containers resolve (law C3, components audit #3).
|
|
3
|
+
*
|
|
4
|
+
* `BasaltDataTable` took `isLoading` + `emptyState` and had NO error branch at all;
|
|
5
|
+
* `BasaltVirtualList` took `isLoading` alone. Both therefore steered a caller into the same wrong
|
|
6
|
+
* render `QueryState` exists to delete — *No data to display.* printed over a 500 — and neither
|
|
7
|
+
* could be handed a `UseQueryResult` at all.
|
|
8
|
+
*
|
|
9
|
+
* This is not a second `QueryState`. `QueryState` REPLACES its children with a branch; a table has
|
|
10
|
+
* to keep its `<thead>`, its toolbar and its header drawn and swap only the `<tbody>`, so what it
|
|
11
|
+
* needs from the contract is the BRANCH, not the rendering. Hence one function, and the same
|
|
12
|
+
* precedence `QueryState` documents, read from one place so the two cannot drift.
|
|
13
|
+
*/
|
|
14
|
+
import { assertQueryStateLike } from '../common/query-state-like'
|
|
15
|
+
import type { QueryStateLike } from '../common/query-state-like'
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Which body a data container paints.
|
|
19
|
+
*
|
|
20
|
+
* `'ready'` covers three of `QueryState`'s four cases — data, an EMPTY resolved result, and an
|
|
21
|
+
* error that arrived over cached data. The container itself decides between rows and its own empty
|
|
22
|
+
* state, because it already knows whether it has any (`table.getRowCount()`, `items.length`) and a
|
|
23
|
+
* query envelope does not.
|
|
24
|
+
*
|
|
25
|
+
* A refetch that fails while rows are already on screen therefore keeps the rows, with no banner —
|
|
26
|
+
* that is `QueryState`'s "a background refetch failing must not blank a page that already works",
|
|
27
|
+
* minus the banner it draws. Compose `QueryState` AROUND the container when the banner is wanted.
|
|
28
|
+
*/
|
|
29
|
+
export type DataQueryBranch = 'pending' | 'error' | 'ready'
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Resolves a `QueryStateLike` to the branch its container should paint, asserting first — through
|
|
33
|
+
* the SAME `assertQueryStateLike` `QueryState` runs (`common/query-state-like.ts`), so the table and
|
|
34
|
+
* the wrapper cannot disagree about what a valid envelope is. This function once carried its own
|
|
35
|
+
* narrower copy that skipped the `data` key and the `refetch()` check, which let a result whose
|
|
36
|
+
* Retry button did nothing through the very branch that renders one.
|
|
37
|
+
*
|
|
38
|
+
* `isError` WITH data is `'ready'`, not `'error'`: the stale rows stay on screen. That is deliberate
|
|
39
|
+
* and it differs from `QueryState`, which paints the same case as children PLUS a "showing cached
|
|
40
|
+
* data" banner — a container swaps only its body, so it has nowhere to draw one. Compose
|
|
41
|
+
* `QueryState` AROUND the container when the banner is wanted. Pinned in `data-table.test.tsx`.
|
|
42
|
+
*/
|
|
43
|
+
export function dataQueryBranch(
|
|
44
|
+
component: string,
|
|
45
|
+
query: QueryStateLike<unknown>,
|
|
46
|
+
): DataQueryBranch {
|
|
47
|
+
assertQueryStateLike(component, query)
|
|
48
|
+
if (query.isError && query.data === undefined) return 'error'
|
|
49
|
+
// `idle` with no data is an `enabled: false` query, not a pending one — it resolves to the
|
|
50
|
+
// container's own empty state, exactly as `QueryState` resolves it to `empty`.
|
|
51
|
+
if (query.data === undefined && query.fetchStatus !== 'idle') return 'pending'
|
|
52
|
+
return 'ready'
|
|
53
|
+
}
|
package/src/data/table.ts
CHANGED
|
@@ -23,7 +23,10 @@
|
|
|
23
23
|
export { BasaltDataTable } from './data-table'
|
|
24
24
|
export type {
|
|
25
25
|
BasaltDataTableProps,
|
|
26
|
+
BasaltDataTableSlot,
|
|
26
27
|
DataTableAlign,
|
|
28
|
+
DataTableColumnId,
|
|
29
|
+
DataTableColumnPinning,
|
|
27
30
|
DataTableFacet,
|
|
28
31
|
DataTableFacetOption,
|
|
29
32
|
} from './data-table'
|
|
@@ -48,6 +51,8 @@ export {
|
|
|
48
51
|
type ColumnHelper,
|
|
49
52
|
type PaginationState,
|
|
50
53
|
type ColumnPinningState,
|
|
54
|
+
// The selection map `rowSelection`/`onRowSelectionChange` speak — `Record<rowId, boolean>`.
|
|
55
|
+
type RowSelectionState,
|
|
51
56
|
// The type `onColumnFiltersChange` hands back — needed at the call site for server-side faceting.
|
|
52
57
|
type ColumnFiltersState,
|
|
53
58
|
} from '@tanstack/react-table'
|
|
@@ -17,11 +17,23 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import { Box, Skeleton } from '@mantine/core'
|
|
19
19
|
import { useVirtualizer } from '@tanstack/react-virtual'
|
|
20
|
-
import {
|
|
21
|
-
import
|
|
20
|
+
import type { ScrollToOptions, Virtualizer } from '@tanstack/react-virtual'
|
|
21
|
+
import { useImperativeHandle, useRef } from 'react'
|
|
22
|
+
import type { ReactNode, Ref } from 'react'
|
|
23
|
+
import { cx } from '../common/props'
|
|
24
|
+
import type { BasaltProps, SlotStylesProps } from '../common/props'
|
|
25
|
+
import { BASALT_PREFIX } from '../common/errors'
|
|
26
|
+
import { assertRequiredProps, useValidateProps } from '../common/validate'
|
|
27
|
+
import { ErrorState } from '../dashboard/query-state'
|
|
28
|
+
import type { QueryStateLike } from '../dashboard/query-state'
|
|
29
|
+
import { dataQueryBranch } from './query-branch'
|
|
22
30
|
|
|
23
31
|
// ── Props ─────────────────────────────────────────────────────────────────────
|
|
24
32
|
|
|
33
|
+
/** The two boxes `BasaltVirtualList` paints: `root` is the scroll container, `row` is each
|
|
34
|
+
* absolutely-positioned virtual item. */
|
|
35
|
+
export type BasaltVirtualListSlot = 'root' | 'row'
|
|
36
|
+
|
|
25
37
|
/**
|
|
26
38
|
* Props for {@link BasaltVirtualList}.
|
|
27
39
|
*
|
|
@@ -35,42 +47,97 @@ import type { ReactNode } from 'react'
|
|
|
35
47
|
* getItemKey: (item) => item.id,
|
|
36
48
|
* }
|
|
37
49
|
*/
|
|
38
|
-
export type BasaltVirtualListProps<T> =
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
50
|
+
export type BasaltVirtualListProps<T> = BasaltProps &
|
|
51
|
+
SlotStylesProps<BasaltVirtualListSlot> & {
|
|
52
|
+
/** All items in the list (unsliced — virtualization is handled internally). */
|
|
53
|
+
items: T[]
|
|
54
|
+
/** Height of the scroll container. Accepts a CSS value ('400px', '60vh') or a number in px. */
|
|
55
|
+
height: number | string
|
|
56
|
+
/**
|
|
57
|
+
* Estimated row height in px (used for virtual layout before measure).
|
|
58
|
+
* @default 40
|
|
59
|
+
*/
|
|
60
|
+
estimateSize?: number
|
|
61
|
+
/**
|
|
62
|
+
* Number of items rendered beyond the visible viewport (above + below) to reduce flicker.
|
|
63
|
+
* @default 5
|
|
64
|
+
*/
|
|
65
|
+
overscan?: number
|
|
66
|
+
/**
|
|
67
|
+
* Render function for a single item. Receives the item and its list index.
|
|
68
|
+
* The returned node is placed inside an absolutely-positioned row container.
|
|
69
|
+
*/
|
|
70
|
+
renderItem: (item: T, index: number) => ReactNode
|
|
71
|
+
/**
|
|
72
|
+
* Stable key for each item, handed straight to the virtualizer's own `getItemKey` — required,
|
|
73
|
+
* not merely recommended: the previous index fallback hid stale rows across a mutation (an
|
|
74
|
+
* insert/delete shifting every index below it keeps rendering the OLD item at each shifted
|
|
75
|
+
* index until React's own reconciliation happens to catch up), silently, in the one component
|
|
76
|
+
* whose job is a long mutable list.
|
|
77
|
+
*/
|
|
78
|
+
getItemKey: (item: T, index: number) => string | number
|
|
79
|
+
/**
|
|
80
|
+
* When true, renders skeleton placeholder rows at the given height instead of the virtual item
|
|
81
|
+
* list. The scroll container is still rendered at the specified `height`. Use while async data
|
|
82
|
+
* is loading.
|
|
83
|
+
*
|
|
84
|
+
* Superseded by `query`, which resolves this branch AND the two this prop cannot express — pass
|
|
85
|
+
* both and `query` wins, with a dev warning.
|
|
86
|
+
*/
|
|
87
|
+
isLoading?: boolean
|
|
88
|
+
/**
|
|
89
|
+
* The result behind `items`, resolved into a body: pending → the skeleton rows, error with no
|
|
90
|
+
* data → an `ErrorState` inside the scroll box (the query's own `refetch` behind Retry),
|
|
91
|
+
* anything else → the rows, or `emptyState` when `items` is empty.
|
|
92
|
+
*
|
|
93
|
+
* Law C3's uniform container contract (`docs/CONTROLS-SPEC.md` §1). The list took `isLoading`
|
|
94
|
+
* and nothing else (components audit #3), so a failed fetch and a genuinely empty list rendered
|
|
95
|
+
* the same blank box — the exact false claim `QueryState` exists to delete.
|
|
96
|
+
*
|
|
97
|
+
* The container keeps its declared `height` through every branch, so the page does not jump as
|
|
98
|
+
* the state resolves.
|
|
99
|
+
*/
|
|
100
|
+
query?: QueryStateLike<unknown>
|
|
101
|
+
/**
|
|
102
|
+
* Rendered inside the scroll container when `items` is empty and nothing is pending. Omit to
|
|
103
|
+
* keep today's rendering — an empty box. Works with or without `query`.
|
|
104
|
+
*/
|
|
105
|
+
emptyState?: ReactNode
|
|
106
|
+
/**
|
|
107
|
+
* Number of skeleton rows to render when `isLoading` is true.
|
|
108
|
+
* @default 5
|
|
109
|
+
*/
|
|
110
|
+
skeletonRows?: number
|
|
111
|
+
/** Imperative scroll handle — see {@link BasaltVirtualListHandle}. */
|
|
112
|
+
ref?: Ref<BasaltVirtualListHandle>
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Imperative escape hatch for {@link BasaltVirtualList} — the virtualizer's own `scrollToIndex` /
|
|
117
|
+
* `scrollToOffset` / `scrollToEnd` were otherwise unreachable, since the component owns the
|
|
118
|
+
* `useVirtualizer()` instance internally. `getVirtualizer()` is the full escape hatch for anything
|
|
119
|
+
* not covered by the three convenience methods (mirrors `./data/table`'s `useReactTable` export as
|
|
120
|
+
* the table's own escape hatch).
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* const listRef = useRef<BasaltVirtualListHandle>(null)
|
|
124
|
+
* <BasaltVirtualList ref={listRef} items={items} height={400} renderItem={renderRow} getItemKey={(i) => i.id} />
|
|
125
|
+
* listRef.current?.scrollToIndex(42, { align: 'center' })
|
|
126
|
+
*/
|
|
127
|
+
export type BasaltVirtualListHandle = {
|
|
128
|
+
/** Scrolls so the item at `index` is in view. */
|
|
129
|
+
scrollToIndex: (index: number, opts?: ScrollToOptions) => void
|
|
130
|
+
/** Scrolls the container to a raw pixel `offset`. */
|
|
131
|
+
scrollToOffset: (offset: number, opts?: ScrollToOptions) => void
|
|
132
|
+
/** Scrolls to the end of the list. */
|
|
133
|
+
scrollToEnd: (opts?: Pick<ScrollToOptions, 'behavior'>) => void
|
|
69
134
|
/**
|
|
70
|
-
*
|
|
71
|
-
*
|
|
135
|
+
* The underlying `@tanstack/react-virtual` instance — the full escape hatch. Returns the RAW
|
|
136
|
+
* `@tanstack/react-virtual` `Virtualizer`, so a future major of that library reaching this shape
|
|
137
|
+
* ships here as a plain `feat:` under the no-majors doctrine (`../../CLAUDE.md` "Commit type
|
|
138
|
+
* discipline"), not a silent break.
|
|
72
139
|
*/
|
|
73
|
-
|
|
140
|
+
getVirtualizer: () => Virtualizer<HTMLDivElement, Element>
|
|
74
141
|
}
|
|
75
142
|
|
|
76
143
|
// ── Component ─────────────────────────────────────────────────────────────────
|
|
@@ -96,16 +163,41 @@ export type BasaltVirtualListProps<T> = {
|
|
|
96
163
|
* getItemKey={(item) => item.id}
|
|
97
164
|
* />
|
|
98
165
|
*/
|
|
99
|
-
export function BasaltVirtualList<T>({
|
|
100
|
-
items
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
166
|
+
export function BasaltVirtualList<T>(props: BasaltVirtualListProps<T>) {
|
|
167
|
+
// F-ERR-1: without this, a list missing `items`/`renderItem`/`getItemKey` fails deep inside
|
|
168
|
+
// `useVirtualizer` as a raw `TypeError` caught by `BasaltErrorBoundary` — a blank subtree with no
|
|
169
|
+
// message naming any of the three.
|
|
170
|
+
assertRequiredProps('BasaltVirtualList', props, ['items', 'renderItem', 'getItemKey'])
|
|
171
|
+
const {
|
|
172
|
+
items,
|
|
173
|
+
height,
|
|
174
|
+
estimateSize = 40,
|
|
175
|
+
overscan = 5,
|
|
176
|
+
renderItem,
|
|
177
|
+
getItemKey,
|
|
178
|
+
isLoading = false,
|
|
179
|
+
query,
|
|
180
|
+
emptyState,
|
|
181
|
+
skeletonRows = 5,
|
|
182
|
+
ref,
|
|
183
|
+
className,
|
|
184
|
+
style,
|
|
185
|
+
classNames,
|
|
186
|
+
} = props
|
|
187
|
+
|
|
188
|
+
// `query` resolves the pending branch `isLoading` used to own, plus the error and empty ones the
|
|
189
|
+
// boolean cannot express — so it wins outright, and says so rather than letting the flag look
|
|
190
|
+
// broken.
|
|
191
|
+
useValidateProps(
|
|
192
|
+
'BasaltVirtualList',
|
|
193
|
+
() =>
|
|
194
|
+
query === undefined || props.isLoading === undefined
|
|
195
|
+
? null
|
|
196
|
+
: `${BASALT_PREFIX} BasaltVirtualList: props "query" and "isLoading" are both set — ` +
|
|
197
|
+
'"query" wins and "isLoading" is ignored. Drop "isLoading".',
|
|
198
|
+
[query === undefined, props.isLoading === undefined],
|
|
199
|
+
)
|
|
200
|
+
|
|
109
201
|
const parentRef = useRef<HTMLDivElement>(null)
|
|
110
202
|
|
|
111
203
|
const rowVirtualizer = useVirtualizer({
|
|
@@ -116,18 +208,55 @@ export function BasaltVirtualList<T>({
|
|
|
116
208
|
// Silences a React 19 deprecation warning: TanStack Virtual calls flushSync on scroll;
|
|
117
209
|
// setting this to false opts out of that path entirely.
|
|
118
210
|
useFlushSync: false,
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
},
|
|
124
|
-
}),
|
|
211
|
+
getItemKey: (index: number) => {
|
|
212
|
+
const item = items[index]
|
|
213
|
+
return item !== undefined ? getItemKey(item, index) : index
|
|
214
|
+
},
|
|
125
215
|
})
|
|
126
216
|
|
|
127
|
-
|
|
217
|
+
useImperativeHandle(
|
|
218
|
+
ref,
|
|
219
|
+
() => ({
|
|
220
|
+
scrollToIndex: (index, opts) => rowVirtualizer.scrollToIndex(index, opts),
|
|
221
|
+
scrollToOffset: (offset, opts) => rowVirtualizer.scrollToOffset(offset, opts),
|
|
222
|
+
scrollToEnd: (opts) => rowVirtualizer.scrollToEnd(opts),
|
|
223
|
+
getVirtualizer: () => rowVirtualizer,
|
|
224
|
+
}),
|
|
225
|
+
[rowVirtualizer],
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
const branch = query === undefined ? undefined : dataQueryBranch('BasaltVirtualList', query)
|
|
229
|
+
const showSkeleton = branch === undefined ? isLoading : branch === 'pending'
|
|
230
|
+
// Every non-virtual branch paints into the SAME box at the SAME declared height, so the page does
|
|
231
|
+
// not reflow as one state resolves into the next.
|
|
232
|
+
const boxProps = {
|
|
233
|
+
className: cx(classNames?.root, className),
|
|
234
|
+
style: {
|
|
235
|
+
height,
|
|
236
|
+
// theme-allow raw-scroll-container — matches the virtualizer's own scroll box below, so a
|
|
237
|
+
// placeholder branch doesn't reflow.
|
|
238
|
+
overflow: 'auto' as const,
|
|
239
|
+
...style,
|
|
240
|
+
},
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
if (branch === 'error' && query !== undefined) {
|
|
244
|
+
return (
|
|
245
|
+
<Box {...boxProps}>
|
|
246
|
+
<ErrorState
|
|
247
|
+
error={query.error}
|
|
248
|
+
title="Could not load"
|
|
249
|
+
tier="section"
|
|
250
|
+
retrying={query.fetchStatus === 'fetching'}
|
|
251
|
+
onRetry={() => void query.refetch()}
|
|
252
|
+
/>
|
|
253
|
+
</Box>
|
|
254
|
+
)
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
if (showSkeleton) {
|
|
128
258
|
return (
|
|
129
|
-
|
|
130
|
-
<Box style={{ height, overflow: 'auto' }}>
|
|
259
|
+
<Box {...boxProps}>
|
|
131
260
|
{Array.from({ length: skeletonRows }, (_, i) => (
|
|
132
261
|
<Box
|
|
133
262
|
key={`skeleton-${i}`}
|
|
@@ -150,13 +279,17 @@ export function BasaltVirtualList<T>({
|
|
|
150
279
|
)
|
|
151
280
|
}
|
|
152
281
|
|
|
282
|
+
if (items.length === 0 && emptyState !== undefined) return <Box {...boxProps}>{emptyState}</Box>
|
|
283
|
+
|
|
153
284
|
return (
|
|
154
285
|
<Box
|
|
155
286
|
ref={parentRef}
|
|
287
|
+
className={cx(classNames?.root, className)}
|
|
156
288
|
style={{
|
|
157
289
|
height,
|
|
158
290
|
// theme-allow raw-scroll-container — TanStack Virtual measures this element as the scroll container.
|
|
159
291
|
overflow: 'auto',
|
|
292
|
+
...style,
|
|
160
293
|
}}
|
|
161
294
|
>
|
|
162
295
|
{/* Inner sizer — defines total scroll height for the virtualizer */}
|
|
@@ -172,6 +305,7 @@ export function BasaltVirtualList<T>({
|
|
|
172
305
|
return (
|
|
173
306
|
<Box
|
|
174
307
|
key={virtualItem.key}
|
|
308
|
+
className={cx(classNames?.row)}
|
|
175
309
|
style={{
|
|
176
310
|
position: 'absolute',
|
|
177
311
|
top: 0,
|
package/src/data/virtual.ts
CHANGED
|
@@ -19,4 +19,8 @@
|
|
|
19
19
|
|
|
20
20
|
// ── BasaltVirtualList ─────────────────────────────────────────────────────────
|
|
21
21
|
export { BasaltVirtualList } from './virtual-list'
|
|
22
|
-
export type {
|
|
22
|
+
export type {
|
|
23
|
+
BasaltVirtualListHandle,
|
|
24
|
+
BasaltVirtualListProps,
|
|
25
|
+
BasaltVirtualListSlot,
|
|
26
|
+
} from './virtual-list'
|
|
@@ -4,12 +4,14 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { Alert, List, Text } from '@mantine/core'
|
|
6
6
|
import type { UseFormReturnType } from '@mantine/form'
|
|
7
|
+
import type { BasaltProps } from '../common/props'
|
|
8
|
+
import { assertRequiredProps } from '../common/validate'
|
|
7
9
|
import { alpha, VX } from '../tokens'
|
|
8
10
|
|
|
9
11
|
// ── FormErrorSummary ──────────────────────────────────────────────────────────
|
|
10
12
|
|
|
11
13
|
/** Props for FormErrorSummary. */
|
|
12
|
-
export type FormErrorSummaryProps<Values extends Record<string, unknown>> = {
|
|
14
|
+
export type FormErrorSummaryProps<Values extends Record<string, unknown>> = BasaltProps & {
|
|
13
15
|
form: UseFormReturnType<Values>
|
|
14
16
|
/** Accessible heading shown above the error list. Defaults to "Please fix the following errors". */
|
|
15
17
|
title?: string
|
|
@@ -30,15 +32,18 @@ export type FormErrorSummaryProps<Values extends Record<string, unknown>> = {
|
|
|
30
32
|
* return (
|
|
31
33
|
* <form onSubmit={form.onSubmit(console.log)}>
|
|
32
34
|
* <FormErrorSummary form={form} title="Fix these before submitting" />
|
|
33
|
-
* <TextInput {...
|
|
35
|
+
* <TextInput key={fieldKey(form, 'email')} {...inputProps(form, 'email')} label="Email" />
|
|
34
36
|
* </form>
|
|
35
37
|
* )
|
|
36
38
|
* }
|
|
37
39
|
*/
|
|
38
|
-
export function FormErrorSummary<Values extends Record<string, unknown>>(
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
export function FormErrorSummary<Values extends Record<string, unknown>>(
|
|
41
|
+
props: FormErrorSummaryProps<Values>,
|
|
42
|
+
) {
|
|
43
|
+
// F-ERR-1: without this, a missing `form` fails deep inside `Object.entries(form.errors)` as a
|
|
44
|
+
// raw `TypeError` caught by `BasaltErrorBoundary` — a blank subtree with no message naming it.
|
|
45
|
+
assertRequiredProps('FormErrorSummary', props, ['form'])
|
|
46
|
+
const { form, title = 'Please fix the following errors', className, style } = props
|
|
42
47
|
const errorEntries = Object.entries(form.errors)
|
|
43
48
|
if (errorEntries.length === 0) return null
|
|
44
49
|
|
|
@@ -46,6 +51,8 @@ export function FormErrorSummary<Values extends Record<string, unknown>>({
|
|
|
46
51
|
<Alert
|
|
47
52
|
role="alert"
|
|
48
53
|
title={<Text fw={600}>{title}</Text>}
|
|
54
|
+
{...(className !== undefined && { className })}
|
|
55
|
+
{...(style !== undefined && { style })}
|
|
49
56
|
styles={{
|
|
50
57
|
root: {
|
|
51
58
|
backgroundColor: alpha(VX.status.bad, 0.13),
|
package/src/forms/create-form.ts
CHANGED
|
@@ -29,14 +29,14 @@ export type UseBasaltFormOptions<Values extends Record<string, unknown>> = Omit<
|
|
|
29
29
|
*
|
|
30
30
|
* @example
|
|
31
31
|
* import * as v from 'valibot'
|
|
32
|
-
* import { useBasaltForm,
|
|
32
|
+
* import { useBasaltForm, inputProps, fieldKey } from 'basalt-ui/forms'
|
|
33
33
|
*
|
|
34
34
|
* const Schema = v.object({ name: v.pipe(v.string(), v.minLength(2)), email: v.string() })
|
|
35
35
|
* type Values = v.InferOutput<typeof Schema>
|
|
36
36
|
*
|
|
37
37
|
* function MyForm() {
|
|
38
38
|
* const form = useBasaltForm({ initialValues: { name: '', email: '' }, schema: Schema })
|
|
39
|
-
* return <TextInput {...
|
|
39
|
+
* return <TextInput key={fieldKey(form, 'name')} {...inputProps(form, 'name')} label="Name" />
|
|
40
40
|
* }
|
|
41
41
|
*/
|
|
42
42
|
export function useBasaltForm<Values extends Record<string, unknown>>(
|
package/src/forms/field.ts
CHANGED
|
@@ -1,30 +1,79 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* ./forms —
|
|
2
|
+
* ./forms — inputProps + fieldKey: the two-call idiom every Mantine v9 uncontrolled field needs.
|
|
3
3
|
* Mantine-coupled. Optional peer: @mantine/form.
|
|
4
|
+
*
|
|
5
|
+
* **`key` is NOT in `inputProps`' return, and that is the whole point of this file's shape.**
|
|
6
|
+
* It used to be — one object holding `getInputProps(path)` and `form.key(path)` together, so a
|
|
7
|
+
* single spread covered both. React 19 logs
|
|
8
|
+
* `A props object containing a "key" prop is being spread into JSX` on every such render: a spread
|
|
9
|
+
* `key` is read as the element key but the warning says it is deprecated, and three fields meant
|
|
10
|
+
* three warnings per page. The bundle was basalt's own invention; Mantine's documented idiom is
|
|
11
|
+
* `key={form.key(path)} {...form.getInputProps(path)}`, and this is that idiom with basalt's names.
|
|
12
|
+
*
|
|
13
|
+
* The `@deprecated` `field` alias below did NOT follow it there — it still returns the 1.27 bundle,
|
|
14
|
+
* because a deprecated export is a schedule and not a silent behaviour change. See its own doc.
|
|
4
15
|
*/
|
|
5
16
|
import type { LooseKeys, UseFormReturnType } from '@mantine/form'
|
|
6
17
|
|
|
7
|
-
// ──
|
|
18
|
+
// ── inputProps ────────────────────────────────────────────────────────────────
|
|
8
19
|
|
|
9
20
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
21
|
+
* The spread half: `form.getInputProps(path)`, and nothing else.
|
|
22
|
+
*
|
|
23
|
+
* Pair it with {@link fieldKey} — an uncontrolled field renders from a `defaultValue`, so without
|
|
24
|
+
* the reconciler key React reuses the DOM node and `form.reset()` / `setValues()` / a removed list
|
|
25
|
+
* row leave the old text on screen.
|
|
13
26
|
*
|
|
14
27
|
* @example
|
|
15
|
-
* import { useBasaltForm,
|
|
28
|
+
* import { useBasaltForm, inputProps, fieldKey } from 'basalt-ui/forms'
|
|
16
29
|
*
|
|
17
30
|
* function MyForm() {
|
|
18
31
|
* const form = useBasaltForm({ initialValues: { email: '' } })
|
|
19
|
-
* return <TextInput {...
|
|
32
|
+
* return <TextInput key={fieldKey(form, 'email')} {...inputProps(form, 'email')} label="Email" />
|
|
20
33
|
* }
|
|
21
34
|
*/
|
|
35
|
+
export function inputProps<Values extends Record<string, unknown>, Path extends LooseKeys<Values>>(
|
|
36
|
+
form: UseFormReturnType<Values>,
|
|
37
|
+
path: Path,
|
|
38
|
+
): ReturnType<UseFormReturnType<Values>['getInputProps']> {
|
|
39
|
+
return form.getInputProps(path)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* The key half: `form.key(path)`, as a JSX `key` attribute — never spread.
|
|
44
|
+
*
|
|
45
|
+
* A separate call rather than a second member of {@link inputProps}' object, because an object
|
|
46
|
+
* carrying `key` cannot be spread without React 19 warning about it. Two calls on one line is the
|
|
47
|
+
* cost; a clean console and a reconciler that actually resets its inputs is what it buys.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* <TextInput key={fieldKey(form, 'email')} {...inputProps(form, 'email')} />
|
|
51
|
+
*/
|
|
52
|
+
export function fieldKey<Values extends Record<string, unknown>, Path extends LooseKeys<Values>>(
|
|
53
|
+
form: UseFormReturnType<Values>,
|
|
54
|
+
path: Path,
|
|
55
|
+
): string {
|
|
56
|
+
return form.key(path)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* @deprecated Renamed to `inputProps` in 1.x — collides with the `field` store builder in
|
|
61
|
+
* `basalt-ui/state`. Kept until the forms surface next changes; removal ships as a plain `feat:`,
|
|
62
|
+
* never a major. Write `key={fieldKey(form, path)} {...inputProps(form, path)}` instead.
|
|
63
|
+
*
|
|
64
|
+
* **It is NOT `export const field = inputProps` any more, and the difference is the whole point.**
|
|
65
|
+
* It returns the 1.27 shape — `getInputProps(path)` PLUS `key` — because an alias of the new
|
|
66
|
+
* `inputProps` would have changed what every existing `<TextInput {...field(form, 'x')} />` does
|
|
67
|
+
* without changing whether it compiles: the element loses its reconciler key, keeps its old text
|
|
68
|
+
* through `form.reset()`, and nothing anywhere says so. A deprecated export is a SCHEDULE, not a
|
|
69
|
+
* behaviour change (`../../CLAUDE.md`, "Deprecation lifecycle"), so this one keeps its behaviour
|
|
70
|
+
* byte for byte — including the React 19 `A props object containing a "key" prop is being spread
|
|
71
|
+
* into JSX` warning it has always produced. That warning is the migration signal; `1.29.0` removing
|
|
72
|
+
* the export is the deadline. `basalt/forms-field-key` reports every remaining call site.
|
|
73
|
+
*/
|
|
22
74
|
export function field<Values extends Record<string, unknown>, Path extends LooseKeys<Values>>(
|
|
23
75
|
form: UseFormReturnType<Values>,
|
|
24
76
|
path: Path,
|
|
25
77
|
): ReturnType<UseFormReturnType<Values>['getInputProps']> & { key: string } {
|
|
26
|
-
return {
|
|
27
|
-
...form.getInputProps(path),
|
|
28
|
-
key: form.key(path),
|
|
29
|
-
}
|
|
78
|
+
return { ...form.getInputProps(path), key: form.key(path) }
|
|
30
79
|
}
|