basalt-ui 1.27.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 +59 -0
- package/MIGRATING.md +613 -20
- package/README.md +33 -3
- package/agent/rules/basalt-batteries.md +25 -10
- package/agent/rules/basalt-controls.md +56 -31
- package/agent/rules/basalt-mantine.md +17 -6
- package/agent/rules/basalt-tokens.md +1 -1
- package/configs/oxlint-plugin.js +1056 -28
- package/configs/oxlint-plugin.test.ts +1066 -0
- package/configs/oxlint.json +7 -0
- 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 +3 -2
- package/dist/controls/enum-filter.d.ts.map +1 -1
- package/dist/controls/enum-filter.js +28 -13
- package/dist/controls/filter-context.d.ts +8 -4
- 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 +2 -0
- package/dist/controls/index.d.ts.map +1 -1
- package/dist/controls/index.js +4 -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 +122 -20
- package/dist/controls/number-filter.d.ts +7 -5
- package/dist/controls/number-filter.d.ts.map +1 -1
- package/dist/controls/number-filter.js +40 -11
- 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 +2 -1
- package/dist/controls/range-filter.d.ts.map +1 -1
- package/dist/controls/range-filter.js +57 -35
- 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 +25 -10
- 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 +28 -11
- 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 +7 -1
- 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 +44 -38
- package/dist/dashboard/stat-card.d.ts.map +1 -1
- package/dist/dashboard/stat-card.js +55 -42
- package/dist/dashboard/stat-card.module.css +46 -31
- package/dist/dashboard/stat-card.module.css.d.ts +1 -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 +384 -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.map +1 -1
- package/dist/guard/index.js +26 -6
- 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/search-store.d.ts.map +1 -1
- package/dist/router-tanstack/search-store.js +1 -1
- 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 +23 -3
- package/dist/state/fields.d.ts.map +1 -1
- package/dist/state/fields.js +13 -2
- 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.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 +42 -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 +69 -4
- package/dist/widget-header/widget-header.d.ts.map +1 -1
- package/dist/widget-header/widget-header.js +42 -27
- package/dist/widget-header/widget-header.module.css +72 -7
- 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 +32 -16
- package/src/controls/filter-context.tsx +14 -6
- 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 +7 -0
- package/src/controls/multi-select-filter.tsx +177 -27
- package/src/controls/number-filter.tsx +61 -23
- 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 +76 -39
- package/src/controls/search-filter.tsx +30 -12
- 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 +36 -16
- 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 +13 -1
- package/src/dashboard/query-state.tsx +154 -84
- package/src/dashboard/settings-section.tsx +87 -31
- package/src/dashboard/stat-card.module.css +46 -31
- package/src/dashboard/stat-card.module.css.d.ts +1 -0
- package/src/dashboard/stat-card.tsx +185 -127
- 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 +919 -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 +73 -18
- package/src/index.ts +74 -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 +1 -0
- package/src/router-tanstack/search-store.ts +3 -10
- 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 +43 -10
- package/src/state/persisted-or-local.ts +50 -0
- package/src/state.ts +0 -9
- package/src/surfaces.ts +42 -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 +72 -7
- package/src/widget-header/widget-header.tsx +150 -71
- 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/range-filter.type-guard.test.d.ts +0 -2
- package/dist/controls/range-filter.type-guard.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/state/persisted.test.d.ts +0 -2
- package/dist/state/persisted.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 -1053
- 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 -137
- package/src/controls/range-filter.type-guard.test.tsx +0 -122
- 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 -385
- package/src/data/data-table.test.tsx +0 -434
- package/src/guard/check-source.test.ts +0 -3388
- package/src/guard/grace.test.ts +0 -158
- 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 -882
- package/src/router-tanstack/search-store.test.ts +0 -578
- 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 -512
- package/src/state/persisted.test.ts +0 -91
- 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/dist/commands/index.d.ts
CHANGED
|
@@ -28,12 +28,21 @@
|
|
|
28
28
|
* import { runCommand } from 'basalt-ui/commands'
|
|
29
29
|
* runCommand('file:save')
|
|
30
30
|
*
|
|
31
|
+
* // usage.ts — the registry-free confirm dialog:
|
|
32
|
+
* import { overlays } from 'basalt-ui/commands'
|
|
33
|
+
* const ok = await overlays.confirm({ title: 'Discard draft?', onConfirm: () => reset() })
|
|
34
|
+
* overlays.confirmDelete({ subject: 'item', count: 3, onConfirm: () => removeSelected() })
|
|
35
|
+
*
|
|
36
|
+
* // Mounting ModalsProvider yourself instead of letting <BasaltOverlays> do it:
|
|
37
|
+
* import { registerModalsProvider } from 'basalt-ui/commands'
|
|
38
|
+
* useEffect(() => registerModalsProvider(), [])
|
|
39
|
+
*
|
|
31
40
|
* // Open/close Spotlight programmatically:
|
|
32
41
|
* import { openSpotlight, closeSpotlight } from 'basalt-ui/commands'
|
|
33
42
|
* openSpotlight()
|
|
34
43
|
*/
|
|
35
44
|
export { defineCommands, defineCommand, runCommand, type Command, type CommandMap, type CommandId, type CommandRunContext, } from './define-commands.js';
|
|
36
|
-
export { defineOverlays, defineOverlay, overlays, type Overlay, type OverlayMap, type OverlayKey, } from './define-overlays.js';
|
|
45
|
+
export { defineOverlays, defineOverlay, overlays, registerModalsProvider, type Overlay, type OverlayMap, type OverlayKey, type ConfirmOptions, type ConfirmDeleteOptions, } from './define-overlays.js';
|
|
37
46
|
export { toSpotlightActions, toRouteActions, toShortcutList, toHotkeyBindings, type RouteActionItem, type RouteActionSection, type ToRouteActionsOptions, type ShortcutEntry, type HotkeyBinding, } from './projectors.js';
|
|
38
47
|
export { parseShortcut, detectMac, formatShortcutDisplay } from './shortcut-format.js';
|
|
39
48
|
export { useCommandHotkeys } from './useCommandHotkeys.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAGH,OAAO,EACL,cAAc,EACd,aAAa,EACb,UAAU,EACV,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EACL,cAAc,EACd,aAAa,EACb,QAAQ,EACR,sBAAsB,EACtB,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,oBAAoB,GAC1B,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,aAAa,GACnB,MAAM,cAAc,CAAA;AAGrB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAGnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAGvD,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAGxE,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,EACxB,eAAe,EACf,aAAa,EACb,cAAc,GACf,MAAM,kBAAkB,CAAA"}
|
package/dist/commands/index.js
CHANGED
|
@@ -6,7 +6,8 @@ import {
|
|
|
6
6
|
import {
|
|
7
7
|
defineOverlays,
|
|
8
8
|
defineOverlay,
|
|
9
|
-
overlays
|
|
9
|
+
overlays,
|
|
10
|
+
registerModalsProvider
|
|
10
11
|
} from "./define-overlays.js";
|
|
11
12
|
import {
|
|
12
13
|
toSpotlightActions,
|
|
@@ -37,6 +38,7 @@ export {
|
|
|
37
38
|
openSpotlight,
|
|
38
39
|
overlays,
|
|
39
40
|
parseShortcut,
|
|
41
|
+
registerModalsProvider,
|
|
40
42
|
runCommand,
|
|
41
43
|
toHotkeyBindings,
|
|
42
44
|
toRouteActions,
|
|
@@ -2,9 +2,16 @@
|
|
|
2
2
|
* overlays-mount — composable overlay mount for basalt-ui apps.
|
|
3
3
|
*
|
|
4
4
|
* `BasaltOverlays` bundles ModalsProvider, Spotlight, and Notifications into a single mount point.
|
|
5
|
-
* Put it inside BasaltProvider, before the router. It replaces the standalone
|
|
6
|
-
* from `basalt-ui/notifications` — do NOT mount both
|
|
7
|
-
* `<BasaltNotifications />` in the same tree (double-mount
|
|
5
|
+
* Put it inside BasaltProvider, before the router. It replaces the standalone
|
|
6
|
+
* `<BasaltNotifications />` from `basalt-ui/notifications` — do NOT mount both
|
|
7
|
+
* `<BasaltOverlays notifications />` and `<BasaltNotifications />` in the same tree (double-mount
|
|
8
|
+
* of `<Notifications />`).
|
|
9
|
+
*
|
|
10
|
+
* Every layer — ModalsProvider included — mounts as a SIBLING of `children`, never as a wrapper:
|
|
11
|
+
* see the comment in the component body (R1). `@mantine/modals`' imperative API (`modals.open*`,
|
|
12
|
+
* and so basalt's own `overlays.open`) is a window CustomEvent bus that ModalsProvider subscribes
|
|
13
|
+
* to, so nothing needs to be inside it; the one thing a sibling cannot serve is Mantine's
|
|
14
|
+
* `useModals()` context hook.
|
|
8
15
|
*
|
|
9
16
|
* Each overlay system is opt-in via props (all default to true). Use flags to disable layers the
|
|
10
17
|
* app does not need — e.g. a charts-only app that has no commands can set `spotlight={false}`.
|
|
@@ -98,9 +105,9 @@ export type BasaltOverlaysProps = {
|
|
|
98
105
|
children: ReactNode;
|
|
99
106
|
};
|
|
100
107
|
/**
|
|
101
|
-
* Composable overlay mount —
|
|
102
|
-
*
|
|
103
|
-
*
|
|
108
|
+
* Composable overlay mount — renders ModalsProvider, Spotlight and Notifications as siblings of
|
|
109
|
+
* `children`. All three layers are enabled by default; pass `false` to disable. A disabled layer's
|
|
110
|
+
* optional peer is never imported.
|
|
104
111
|
*
|
|
105
112
|
* Mount exactly ONE BasaltOverlays per app. Do NOT combine with a standalone
|
|
106
113
|
* `<BasaltNotifications />` from `basalt-ui/notifications` — that would double-mount
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlays-mount.d.ts","sourceRoot":"","sources":["../../src/commands/overlays-mount.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"overlays-mount.d.ts","sourceRoot":"","sources":["../../src/commands/overlays-mount.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAA;AAGrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAmC7D;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe;gBAChB,IAAI;iBAGH,IAAI;kBAGH,IAAI;CAGjB,CAAA;AAID,0DAA0D;AAC1D,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAED,2DAA2D;AAC3D,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAID,MAAM,MAAM,mBAAmB,GAAG;IAChC,2DAA2D;IAC3D,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,yEAAyE;IACzE,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,iJAAiJ;IACjJ,kBAAkB,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAA;IACzD;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,mBAAmB,EAAE,CAAA;IACxC;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,8BAA8B;IAC9B,QAAQ,EAAE,SAAS,CAAA;CACpB,CAAA;AAqHD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EAAE,YAAmB,EAC3B,SAAS,EAAE,eAAsB,EACjC,aAAa,EAAE,mBAA0B,EACzC,OAAO,EAAE,aAAoB,EAC7B,kBAAkB,EAClB,gBAAgB,EAChB,eAAsB,EACtB,QAAQ,GACT,EAAE,mBAAmB,+BAkCrB"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { lazy, Suspense } from "react";
|
|
3
3
|
import { runCommand } from "./define-commands.js";
|
|
4
|
+
import { useModalsLayer } from "./define-overlays.js";
|
|
4
5
|
import { toSpotlightActions } from "./projectors.js";
|
|
5
6
|
import { useCommandHotkeys } from "./useCommandHotkeys.js";
|
|
7
|
+
import { useNotificationsMountGuard } from "../notifications/mount-guard.js";
|
|
6
8
|
let spotlightHandlePromise;
|
|
7
9
|
function loadSpotlightHandle() {
|
|
8
10
|
spotlightHandlePromise ??= import("@mantine/spotlight").then(({ createSpotlight }) => {
|
|
@@ -34,6 +36,7 @@ function PassthroughFragment({ children }) {
|
|
|
34
36
|
const LazyModalsProvider = lazy(
|
|
35
37
|
() => import("@mantine/modals").then((m) => ({ default: m.ModalsProvider })).catch(() => ({ default: PassthroughFragment }))
|
|
36
38
|
);
|
|
39
|
+
Object.assign(LazyModalsProvider, { displayName: "LazyModalsProvider" });
|
|
37
40
|
function NullFallback() {
|
|
38
41
|
return null;
|
|
39
42
|
}
|
|
@@ -63,12 +66,28 @@ const LazySpotlightMount = lazy(
|
|
|
63
66
|
return { default: SpotlightMountInner };
|
|
64
67
|
}).catch(() => ({ default: NullFallback }))
|
|
65
68
|
);
|
|
69
|
+
Object.assign(LazySpotlightMount, { displayName: "LazySpotlightMount" });
|
|
66
70
|
function NotificationsFallback(_props) {
|
|
67
71
|
return null;
|
|
68
72
|
}
|
|
69
73
|
const LazyNotifications = lazy(
|
|
70
74
|
() => import("@mantine/notifications").then((m) => ({ default: m.Notifications })).catch(() => ({ default: NotificationsFallback }))
|
|
71
75
|
);
|
|
76
|
+
Object.assign(LazyNotifications, { displayName: "LazyNotifications" });
|
|
77
|
+
function NotificationsLayer({
|
|
78
|
+
notificationsProps
|
|
79
|
+
}) {
|
|
80
|
+
useNotificationsMountGuard();
|
|
81
|
+
return /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(
|
|
82
|
+
LazyNotifications,
|
|
83
|
+
{
|
|
84
|
+
position: "bottom-right",
|
|
85
|
+
autoClose: 4e3,
|
|
86
|
+
limit: 5,
|
|
87
|
+
...notificationsProps
|
|
88
|
+
}
|
|
89
|
+
) });
|
|
90
|
+
}
|
|
72
91
|
function HotkeysMount() {
|
|
73
92
|
useCommandHotkeys();
|
|
74
93
|
return null;
|
|
@@ -83,7 +102,8 @@ function BasaltOverlays({
|
|
|
83
102
|
projectCommands = true,
|
|
84
103
|
children
|
|
85
104
|
}) {
|
|
86
|
-
|
|
105
|
+
useModalsLayer(enableModals);
|
|
106
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
87
107
|
enableSpotlight && /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(
|
|
88
108
|
LazySpotlightMount,
|
|
89
109
|
{
|
|
@@ -91,22 +111,11 @@ function BasaltOverlays({
|
|
|
91
111
|
...spotlightActions !== void 0 && { extraActions: spotlightActions }
|
|
92
112
|
}
|
|
93
113
|
) }),
|
|
94
|
-
enableNotifications && /* @__PURE__ */ jsx(
|
|
95
|
-
LazyNotifications,
|
|
96
|
-
{
|
|
97
|
-
position: "bottom-right",
|
|
98
|
-
autoClose: 4e3,
|
|
99
|
-
limit: 5,
|
|
100
|
-
...notificationsProps
|
|
101
|
-
}
|
|
102
|
-
) }),
|
|
114
|
+
enableNotifications && /* @__PURE__ */ jsx(NotificationsLayer, { notificationsProps }),
|
|
103
115
|
enableHotkeys && /* @__PURE__ */ jsx(HotkeysMount, {}),
|
|
116
|
+
enableModals && /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(LazyModalsProvider, {}) }),
|
|
104
117
|
children
|
|
105
118
|
] });
|
|
106
|
-
if (enableModals) {
|
|
107
|
-
return /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(Fragment, { children: content }), children: /* @__PURE__ */ jsx(LazyModalsProvider, { children: content }) });
|
|
108
|
-
}
|
|
109
|
-
return /* @__PURE__ */ jsx(Fragment, { children: content });
|
|
110
119
|
}
|
|
111
120
|
export {
|
|
112
121
|
BasaltOverlays,
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The message table (Blueprint audit §3). Every basalt diagnostic — thrown or logged — is built
|
|
3
|
+
* here, so the prefix, the `Component: …` shape and the em-dash-then-remedy rhythm are one decision
|
|
4
|
+
* instead of 60. It is the generalisation of `assertQueryStateLike`, which was the ONLY component
|
|
5
|
+
* in the library naming itself in its own failure (isomorphic finding F-ERR-1: the other 54 fail as
|
|
6
|
+
* raw `TypeError`s that `BasaltErrorBoundary` swallows into a blank subtree).
|
|
7
|
+
*
|
|
8
|
+
* Every builder returns a string; nothing here throws or logs. The caller decides which it is —
|
|
9
|
+
* `assertRequiredProps` throws, `useValidateProps` logs, the mount guards log.
|
|
10
|
+
*/
|
|
11
|
+
/** The one namespace every basalt message opens with. */
|
|
12
|
+
export declare const BASALT_PREFIX = "[basalt]";
|
|
13
|
+
/**
|
|
14
|
+
* A prop the component reads into and cannot render without. This is the F-ERR-1 message: the
|
|
15
|
+
* component names itself and the prop, instead of the read landing as
|
|
16
|
+
* `undefined is not an object (evaluating 'field.use')`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function requiredProp(component: string, prop: string, hint?: string): string;
|
|
19
|
+
/** A prop with a closed value set that got something outside it. */
|
|
20
|
+
export declare function oneOf(component: string, prop: string, allowed: readonly string[], got: unknown): string;
|
|
21
|
+
/**
|
|
22
|
+
* A prop still shipped and still working, with a named successor and the version it goes away in.
|
|
23
|
+
* Majors are banned here, so the deprecation notice IS the migration channel.
|
|
24
|
+
*/
|
|
25
|
+
export declare function deprecatedProp(component: string, oldProp: string, newProp: string, removeIn: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* An imperative call needs a layer that is not there — the optional peer is not installed, or the
|
|
28
|
+
* mount that subscribes to its event bus is disabled. Both halves are named because the remedy
|
|
29
|
+
* differs: install it, or stop turning it off.
|
|
30
|
+
*/
|
|
31
|
+
export declare function missingLayer(component: string, layer: string, remedy: string): string;
|
|
32
|
+
/** A single-mount component found a second instance alive (`BasaltProvider`, `Notifications`). */
|
|
33
|
+
export declare function duplicateMount(component: string): string;
|
|
34
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/common/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,yDAAyD;AACzD,eAAO,MAAM,aAAa,aAAa,CAAA;AAMvC;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnF;AAED,oEAAoE;AACpE,wBAAgB,KAAK,CACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,GAAG,EAAE,OAAO,GACX,MAAM,CAMR;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,MAAM,CAKR;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAErF;AAED,kGAAkG;AAClG,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAKxD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
const BASALT_PREFIX = "[basalt]";
|
|
2
|
+
function message(component, body) {
|
|
3
|
+
return `${BASALT_PREFIX} ${component}: ${body}`;
|
|
4
|
+
}
|
|
5
|
+
function requiredProp(component, prop, hint) {
|
|
6
|
+
return message(component, `prop "${prop}" is required${hint === void 0 ? "." : ` \u2014 ${hint}`}`);
|
|
7
|
+
}
|
|
8
|
+
function oneOf(component, prop, allowed, got) {
|
|
9
|
+
return message(
|
|
10
|
+
component,
|
|
11
|
+
`prop "${prop}" must be one of ${allowed.map((value) => `'${value}'`).join(" | ")} \u2014 got ${JSON.stringify(got)}.`
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
function deprecatedProp(component, oldProp, newProp, removeIn) {
|
|
15
|
+
return message(
|
|
16
|
+
component,
|
|
17
|
+
`prop "${oldProp}" is deprecated \u2014 use "${newProp}" instead. "${oldProp}" is removed in ${removeIn}.`
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
function missingLayer(component, layer, remedy) {
|
|
21
|
+
return message(component, `needs ${layer}, which is not available \u2014 ${remedy}.`);
|
|
22
|
+
}
|
|
23
|
+
function duplicateMount(component) {
|
|
24
|
+
return message(
|
|
25
|
+
component,
|
|
26
|
+
"more than one instance is mounted at once \u2014 mount exactly one, at the app root."
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
export {
|
|
30
|
+
BASALT_PREFIX,
|
|
31
|
+
deprecatedProp,
|
|
32
|
+
duplicateMount,
|
|
33
|
+
missingLayer,
|
|
34
|
+
oneOf,
|
|
35
|
+
requiredProp
|
|
36
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `common` — the prop, ref, message and validation primitives every basalt component shares.
|
|
3
|
+
*
|
|
4
|
+
* Not a published subpath: the pieces are re-exported from the root barrel (`.`) so a consumer has
|
|
5
|
+
* one import, and `src/surfaces.ts` stays the SSOT for real subpaths. The module is Mantine-free by
|
|
6
|
+
* rule (`.oxlintrc.json`) and by test (`boundary.test.ts`), so the Mantine-free half of the library
|
|
7
|
+
* may reach it too.
|
|
8
|
+
*/
|
|
9
|
+
export { type BasaltProps, type SlotClassNames, type SlotStylesProps } from './props.js';
|
|
10
|
+
export { type Tone, type ToneWithNeutral, type Tier, cx } from './props.js';
|
|
11
|
+
export { assignRef, mergeRefs } from './refs.js';
|
|
12
|
+
export { BASALT_PREFIX, requiredProp, oneOf, deprecatedProp, duplicateMount, missingLayer, } from './errors.js';
|
|
13
|
+
export { useValidateProps, assertRequiredProps, resetValidatedProps } from './validate.js';
|
|
14
|
+
export { scrollParentOf, SCROLLPORT_ATTRIBUTE } from './scroll-parent.js';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAA;AACrF,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,eAAe,EAAE,KAAK,IAAI,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AACxE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EACL,aAAa,EACb,YAAY,EACZ,KAAK,EACL,cAAc,EACd,cAAc,EACd,YAAY,GACb,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AACvF,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import {} from "./props.js";
|
|
2
|
+
import { cx } from "./props.js";
|
|
3
|
+
import { assignRef, mergeRefs } from "./refs.js";
|
|
4
|
+
import {
|
|
5
|
+
BASALT_PREFIX,
|
|
6
|
+
requiredProp,
|
|
7
|
+
oneOf,
|
|
8
|
+
deprecatedProp,
|
|
9
|
+
duplicateMount,
|
|
10
|
+
missingLayer
|
|
11
|
+
} from "./errors.js";
|
|
12
|
+
import { useValidateProps, assertRequiredProps, resetValidatedProps } from "./validate.js";
|
|
13
|
+
import { scrollParentOf, SCROLLPORT_ATTRIBUTE } from "./scroll-parent.js";
|
|
14
|
+
export {
|
|
15
|
+
BASALT_PREFIX,
|
|
16
|
+
SCROLLPORT_ATTRIBUTE,
|
|
17
|
+
assertRequiredProps,
|
|
18
|
+
assignRef,
|
|
19
|
+
cx,
|
|
20
|
+
deprecatedProp,
|
|
21
|
+
duplicateMount,
|
|
22
|
+
mergeRefs,
|
|
23
|
+
missingLayer,
|
|
24
|
+
oneOf,
|
|
25
|
+
requiredProp,
|
|
26
|
+
resetValidatedProps,
|
|
27
|
+
scrollParentOf,
|
|
28
|
+
useValidateProps
|
|
29
|
+
};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The prop vocabulary every basalt component shares (Blueprint audit §1, isomorphic finding C8).
|
|
3
|
+
*
|
|
4
|
+
* The finding this file answers: 98 of 123 exported components drop `className`, so a consumer who
|
|
5
|
+
* needs one margin has to fork the component. Fixing that per component is 79 edits; fixing it once
|
|
6
|
+
* here is one — every component's props type extends `BasaltProps`, and the root element takes
|
|
7
|
+
* `cx(classes.root, className)` plus `style`.
|
|
8
|
+
*
|
|
9
|
+
* **`className` + per-slot `classNames`, and nothing else.** No `styles` object, no `vars`: basalt
|
|
10
|
+
* does not spread `...rest` onto the DOM (which is why the harness saw zero unknown-attribute
|
|
11
|
+
* warnings), and a `styles`/`vars` surface would re-open the styling seam Mantine already owns for
|
|
12
|
+
* the primitives underneath. A composite that needs more than its root styled declares its SLOT
|
|
13
|
+
* NAMES in its own props type — `SlotStylesProps<'root' | 'header' | 'body'>` — so the slot set is
|
|
14
|
+
* a documented, compiler-checked union rather than an open record.
|
|
15
|
+
*
|
|
16
|
+
* This module is **Mantine-free and React-type-only** so `./charts` and `./tokens` may reach it
|
|
17
|
+
* without breaching the layer boundary (`common/boundary.test.ts` pins that, and `.oxlintrc.json`
|
|
18
|
+
* bans `@mantine/*` here the same way it does for `state`/`query`/`guard`).
|
|
19
|
+
*/
|
|
20
|
+
import type { CSSProperties } from 'react';
|
|
21
|
+
/**
|
|
22
|
+
* The base every basalt component accepts. `| undefined` is explicit on both members because
|
|
23
|
+
* `exactOptionalPropertyTypes` is on: a component destructuring `className` and forwarding it to a
|
|
24
|
+
* child would otherwise fail to type-check at every call site.
|
|
25
|
+
*/
|
|
26
|
+
export interface BasaltProps {
|
|
27
|
+
/** Appended to the root element's own class — never replaces it. */
|
|
28
|
+
readonly className?: string | undefined;
|
|
29
|
+
/** Merged onto the root element's own inline style, if it has one. */
|
|
30
|
+
readonly style?: CSSProperties | undefined;
|
|
31
|
+
}
|
|
32
|
+
/** One class per named slot. The slot union is the component's documented contract. */
|
|
33
|
+
export type SlotClassNames<S extends string> = Partial<Record<S, string>>;
|
|
34
|
+
/**
|
|
35
|
+
* The composite half of the contract: a container that paints more than one box publishes its slot
|
|
36
|
+
* names here. The set is small on purpose — `Section`, `StatCard`, `ChartCard`, `PageBar`,
|
|
37
|
+
* `PageAside`, `WidgetHeader`, `EmptyState`, `QueryState`, `BasaltDataTable`. A leaf takes
|
|
38
|
+
* `BasaltProps` alone.
|
|
39
|
+
*/
|
|
40
|
+
export interface SlotStylesProps<S extends string> {
|
|
41
|
+
readonly classNames?: SlotClassNames<S> | undefined;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The ONE status vocabulary (audit A13). Five forks exist today — `StatCardTone` and
|
|
45
|
+
* `SidebarBlockTone` are byte-identical to this, `CalloutKind` / `AccountBadgeTone` /
|
|
46
|
+
* `NotificationIntent` each differ — and they stay put for now: an adopter aliases its fork to this
|
|
47
|
+
* type, it does not get renamed out from under a consumer.
|
|
48
|
+
*/
|
|
49
|
+
export type Tone = 'good' | 'warn' | 'bad';
|
|
50
|
+
/** `Tone` plus the un-toned state — a badge or a block with nothing to say yet. */
|
|
51
|
+
export type ToneWithNeutral = Tone | 'neutral';
|
|
52
|
+
/**
|
|
53
|
+
* The heading tier (`docs/CONTROLS-SPEC.md` §2.2). Re-exported from its owner rather than declared
|
|
54
|
+
* twice — `WidgetHeaderTier` stays the name on the public barrel; `Tier` is what `common`-aware
|
|
55
|
+
* code spells. Type-only, so this file emits no runtime edge into the Mantine-coupled half.
|
|
56
|
+
*/
|
|
57
|
+
export type { WidgetHeaderTier as Tier } from '../widget-header/widget-header.js';
|
|
58
|
+
/**
|
|
59
|
+
* The class joiner. Replaces the `[a, b].filter(Boolean).join(' ')` spelled out in seven files
|
|
60
|
+
* today; falsy parts drop, so `cx(classes.root, open && classes.open, className)` is the idiom.
|
|
61
|
+
*/
|
|
62
|
+
export declare function cx(...parts: Array<string | false | null | undefined>): string;
|
|
63
|
+
//# sourceMappingURL=props.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"props.d.ts","sourceRoot":"","sources":["../../src/common/props.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAE1C;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,sEAAsE;IACtE,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAA;CAC3C;AAED,uFAAuF;AACvF,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;AAEzE;;;;;GAKG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,MAAM;IAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAAA;CACpD;AAED;;;;;GAKG;AACH,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAA;AAE1C,mFAAmF;AACnF,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,SAAS,CAAA;AAE9C;;;;GAIG;AACH,YAAY,EAAE,gBAAgB,IAAI,IAAI,EAAE,MAAM,gCAAgC,CAAA;AAE9E;;;GAGG;AACH,wBAAgB,EAAE,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM,CAE7E"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The query envelope every basalt container reads, and the ONE runtime assertion that stands in for
|
|
3
|
+
* the compiler over it.
|
|
4
|
+
*
|
|
5
|
+
* It lives in `common/` because two independent readers grew their own copy and the copies
|
|
6
|
+
* DISAGREED: `QueryState` (`dashboard/query-state.tsx`) checked the `data` key and that `refetch` is
|
|
7
|
+
* a function; `dataQueryBranch` (`data/query-branch.ts`) checked neither, so the table accepted a
|
|
8
|
+
* result whose Retry button did nothing. A validator that exists twice is a validator with two
|
|
9
|
+
* strictnesses, which is exactly the class of defect the assertion exists to catch.
|
|
10
|
+
*
|
|
11
|
+
* Mantine-free by construction (`common/boundary.test.ts`): types, a set and a throw.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* The structural subset of a TanStack `UseQueryResult` these components read.
|
|
15
|
+
*
|
|
16
|
+
* Typed as a SUBSET rather than as `UseQueryResult<T>` on purpose: a composed, derived or
|
|
17
|
+
* hand-rolled result must be passable without a cast, and the components stay independent of which
|
|
18
|
+
* `@tanstack/react-query` major a consumer pins. This is NOT a claim that the root barrel is free of
|
|
19
|
+
* that package — `./connectivity` imports `onlineManager` as a value and is re-exported from
|
|
20
|
+
* `src/index.ts`. The cost of the subset is that the compiler stops policing the shape — which is
|
|
21
|
+
* why {@link assertQueryStateLike} checks it at runtime.
|
|
22
|
+
*/
|
|
23
|
+
export type QueryStateLike<TData> = {
|
|
24
|
+
data: TData | undefined;
|
|
25
|
+
isError: boolean;
|
|
26
|
+
error: unknown;
|
|
27
|
+
fetchStatus: 'fetching' | 'paused' | 'idle';
|
|
28
|
+
refetch: () => unknown;
|
|
29
|
+
};
|
|
30
|
+
/** The three `fetchStatus` values a `UseQueryResult` can carry. */
|
|
31
|
+
export declare const FETCH_STATUSES: ReadonlySet<string>;
|
|
32
|
+
/**
|
|
33
|
+
* `QueryStateLike` is a structural subset, so TypeScript cannot protect a hand-composed result the
|
|
34
|
+
* way it protects a real `UseQueryResult` — and every field it drops fails SILENTLY in the exact
|
|
35
|
+
* direction these components exist to prevent. A missing `isError` renders "no data" over a 500. A
|
|
36
|
+
* misspelled `fetchStatus` never leaves the spinner. A missing `refetch` renders a Retry button that
|
|
37
|
+
* does nothing. Each of those is a false claim about the data, so it throws.
|
|
38
|
+
*
|
|
39
|
+
* `component` opens the message so the throw names the container that got the bad envelope —
|
|
40
|
+
* `QueryState`, `BasaltDataTable`, `BasaltVirtualList` all read the same shape.
|
|
41
|
+
*/
|
|
42
|
+
export declare function assertQueryStateLike(component: string, query: unknown): asserts query is QueryStateLike<unknown>;
|
|
43
|
+
//# sourceMappingURL=query-state-like.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-state-like.d.ts","sourceRoot":"","sources":["../../src/common/query-state-like.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,CAAC,KAAK,IAAI;IAClC,IAAI,EAAE,KAAK,GAAG,SAAS,CAAA;IACvB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,OAAO,CAAA;IACd,WAAW,EAAE,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAA;IAC3C,OAAO,EAAE,MAAM,OAAO,CAAA;CACvB,CAAA;AAED,mEAAmE;AACnE,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,CAA2C,CAAA;AAE1F;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,KAAK,IAAI,cAAc,CAAC,OAAO,CAAC,CAgB1C"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const FETCH_STATUSES = /* @__PURE__ */ new Set(["fetching", "paused", "idle"]);
|
|
2
|
+
function assertQueryStateLike(component, query) {
|
|
3
|
+
const bad = (detail) => {
|
|
4
|
+
throw new Error(
|
|
5
|
+
`${component}: \`query\` ${detail}. It must carry { data, isError, error, fetchStatus, refetch } \u2014 a TanStack UseQueryResult does; a hand-composed one must spell every field, because a missing branch flag renders a false claim about the data instead of an error.`
|
|
6
|
+
);
|
|
7
|
+
};
|
|
8
|
+
if (query === null || typeof query !== "object")
|
|
9
|
+
bad(`is ${query === null ? "null" : typeof query}`);
|
|
10
|
+
const q = query;
|
|
11
|
+
if (!("data" in q)) bad("has no `data` key");
|
|
12
|
+
if (typeof q["isError"] !== "boolean") bad("has no boolean `isError`");
|
|
13
|
+
if (typeof q["fetchStatus"] !== "string" || !FETCH_STATUSES.has(q["fetchStatus"]))
|
|
14
|
+
bad(`has fetchStatus=${JSON.stringify(q["fetchStatus"])}, not 'fetching' | 'paused' | 'idle'`);
|
|
15
|
+
if (typeof q["refetch"] !== "function") bad("has no `refetch()`");
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
FETCH_STATUSES,
|
|
19
|
+
assertQueryStateLike
|
|
20
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ref plumbing for composites (Blueprint audit §2). React 19 made `ref` an ordinary prop, which
|
|
3
|
+
* removed `forwardRef` — it did NOT remove the need to merge: a component that both forwards its
|
|
4
|
+
* caller's ref and keeps its own (a measurement, a focus target) still has two refs and one node.
|
|
5
|
+
*
|
|
6
|
+
* The React 19 wrinkle these two functions exist to get right: a callback ref MAY return a cleanup
|
|
7
|
+
* function, and when it does React never calls it again with `null`. So merging cannot just fan out
|
|
8
|
+
* — it has to fan out the cleanups too, and null out the refs that returned none.
|
|
9
|
+
*/
|
|
10
|
+
import type { Ref, RefCallback } from 'react';
|
|
11
|
+
/**
|
|
12
|
+
* Writes `value` into one ref of either shape.
|
|
13
|
+
*
|
|
14
|
+
* @returns the callback ref's own cleanup when it returned one, else `undefined`.
|
|
15
|
+
*/
|
|
16
|
+
export declare function assignRef<T>(ref: Ref<T> | undefined, value: T | null): (() => void) | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Fans one node out to several refs.
|
|
19
|
+
*
|
|
20
|
+
* Returns a NEW function on every call, so a component that passes it straight to JSX re-attaches
|
|
21
|
+
* on every render — wrap it in `useCallback`/`useMemo` over the refs it merges when the node is
|
|
22
|
+
* expensive to re-attach.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* const merged = useMemo(() => mergeRefs(ref, localRef), [ref])
|
|
26
|
+
* return <div ref={merged} />
|
|
27
|
+
*/
|
|
28
|
+
export declare function mergeRefs<T>(...refs: Array<Ref<T> | undefined>): RefCallback<T>;
|
|
29
|
+
//# sourceMappingURL=refs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refs.d.ts","sourceRoot":"","sources":["../../src/common/refs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAE7C;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAU/F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAkB/E"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
function assignRef(ref, value) {
|
|
2
|
+
if (ref === void 0 || ref === null) return void 0;
|
|
3
|
+
if (typeof ref === "function") {
|
|
4
|
+
const cleanup = ref(value);
|
|
5
|
+
return typeof cleanup === "function" ? cleanup : void 0;
|
|
6
|
+
}
|
|
7
|
+
ref.current = value;
|
|
8
|
+
return void 0;
|
|
9
|
+
}
|
|
10
|
+
function mergeRefs(...refs) {
|
|
11
|
+
return (value) => {
|
|
12
|
+
const cleanups = refs.map((ref) => assignRef(ref, value));
|
|
13
|
+
if (cleanups.every((cleanup) => cleanup === void 0)) return void 0;
|
|
14
|
+
return () => {
|
|
15
|
+
refs.forEach((ref, index) => {
|
|
16
|
+
const cleanup = cleanups[index];
|
|
17
|
+
if (cleanup !== void 0) {
|
|
18
|
+
cleanup();
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
assignRef(ref, null);
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export {
|
|
27
|
+
assignRef,
|
|
28
|
+
mergeRefs
|
|
29
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `scrollParentOf` — which box actually scrolls `el`.
|
|
3
|
+
*
|
|
4
|
+
* Since `BasaltShell` made `AppShell.Main` the scrollport (`shell/app-main.module.css`), the
|
|
5
|
+
* document no longer scrolls inside a shell: `window.scrollY` is pinned at 0 and a `scroll`
|
|
6
|
+
* listener on `window` never fires. Everything in the package that reacted to page scroll had to
|
|
7
|
+
* stop asking the window and start asking whichever ancestor is really scrolling — and it has to
|
|
8
|
+
* keep working in a SHELL-LESS app, where the answer genuinely is the window.
|
|
9
|
+
*
|
|
10
|
+
* `null` IS the answer for "the document scrolls this", not a failure — callers listen on `window`
|
|
11
|
+
* and read `window.scrollY` in that case.
|
|
12
|
+
*/
|
|
13
|
+
/** The attribute `BasaltShell` puts on `AppShell.Main`. Also the public handle for a consumer. */
|
|
14
|
+
export declare const SCROLLPORT_ATTRIBUTE = "data-basalt-scrollport";
|
|
15
|
+
/**
|
|
16
|
+
* The nearest scrolling ANCESTOR of `el`, or `null` when the document is the scroller.
|
|
17
|
+
*
|
|
18
|
+
* `el` itself is never considered — the question is which box scrolls it, not whether it scrolls
|
|
19
|
+
* its own children. `<body>` and `<html>` are never returned either: an app that scrolls at the
|
|
20
|
+
* document level is exactly the `null` case.
|
|
21
|
+
*/
|
|
22
|
+
export declare function scrollParentOf(el: Element | null): HTMLElement | null;
|
|
23
|
+
//# sourceMappingURL=scroll-parent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scroll-parent.d.ts","sourceRoot":"","sources":["../../src/common/scroll-parent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,kGAAkG;AAClG,eAAO,MAAM,oBAAoB,2BAA2B,CAAA;AAW5D;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI,CASrE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const SCROLLPORT_ATTRIBUTE = "data-basalt-scrollport";
|
|
2
|
+
function isScrollport(element) {
|
|
3
|
+
if (element.hasAttribute(SCROLLPORT_ATTRIBUTE)) return true;
|
|
4
|
+
const overflowY = getComputedStyle(element).overflowY;
|
|
5
|
+
if (overflowY !== "auto" && overflowY !== "scroll") return false;
|
|
6
|
+
return element.scrollHeight > element.clientHeight;
|
|
7
|
+
}
|
|
8
|
+
function scrollParentOf(el) {
|
|
9
|
+
if (el === null || typeof window === "undefined") return null;
|
|
10
|
+
const root = el.ownerDocument.documentElement;
|
|
11
|
+
let node = el.parentElement;
|
|
12
|
+
while (node !== null && node !== root && node !== el.ownerDocument.body) {
|
|
13
|
+
if (isScrollport(node)) return node;
|
|
14
|
+
node = node.parentElement;
|
|
15
|
+
}
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
export {
|
|
19
|
+
SCROLLPORT_ATTRIBUTE,
|
|
20
|
+
scrollParentOf
|
|
21
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/** A check returns the message(s) it has, or nothing. `null`/`undefined` entries are ignored. */
|
|
2
|
+
type CheckResult = string | null | undefined | Array<string | null | undefined>;
|
|
3
|
+
/**
|
|
4
|
+
* Dev-only prop validation. `console.error`s each message ONCE per `(component, message)` pair, and
|
|
5
|
+
* is a no-op in production: `isDev()` reads `process.env.NODE_ENV`, which every bundler
|
|
6
|
+
* constant-folds, so the whole body disappears from a production build.
|
|
7
|
+
*
|
|
8
|
+
* **The dedup key is `${component} ${message}`, and nothing else** — not the instance, not the
|
|
9
|
+
* props. Two instances of one component producing the SAME message say it once between them, which
|
|
10
|
+
* is the intent (a dev warning is about the code). A caller that wants it said per instance has to
|
|
11
|
+
* embed the identifying context IN the message — the title, the persist key, the field name — the
|
|
12
|
+
* way `Section` writes `Section "<title>": …`. A message built from nothing instance-specific is a
|
|
13
|
+
* message the second faulty call site never gets.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* useValidateProps(
|
|
17
|
+
* 'Section',
|
|
18
|
+
* () => (persistKey !== undefined && !collapsible ? sectionPersistMessage : null),
|
|
19
|
+
* [persistKey, collapsible],
|
|
20
|
+
* )
|
|
21
|
+
*/
|
|
22
|
+
export declare function useValidateProps(component: string, check: () => CheckResult, deps: unknown[]): void;
|
|
23
|
+
/** Test seam. The once-per-message Set is module state, so a suite has to be able to clear it. */
|
|
24
|
+
export declare function resetValidatedProps(): void;
|
|
25
|
+
/**
|
|
26
|
+
* THROWS on a missing required prop, in every build, before the component reads into it.
|
|
27
|
+
*
|
|
28
|
+
* This is the F-ERR-1 remedy, and the reason it is not dev-gated: the component was going to crash
|
|
29
|
+
* either way (`undefined is not an object (evaluating 'field.use')`), so the only thing in question
|
|
30
|
+
* is whether the stack reaching `BasaltErrorBoundary` names the component and the prop. It does
|
|
31
|
+
* now. A prop that is merely questionable belongs in `useValidateProps`, not here.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* assertRequiredProps('SelectFilter', props, ['field'])
|
|
35
|
+
*/
|
|
36
|
+
export declare function assertRequiredProps<P extends object>(component: string, props: P, keys: ReadonlyArray<Extract<keyof P, string>>, hints?: Partial<Record<Extract<keyof P, string>, string>>): void;
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/common/validate.ts"],"names":[],"mappings":"AAYA,iGAAiG;AACjG,KAAK,WAAW,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAA;AAU/E;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,WAAW,EACxB,IAAI,EAAE,OAAO,EAAE,GACd,IAAI,CAeN;AAED,kGAAkG;AAClG,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAClD,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,CAAC,EACR,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,EAC7C,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,GACxD,IAAI,CASN"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { useEffect } from "react";
|
|
2
|
+
import { isDev } from "../utils/is-dev.js";
|
|
3
|
+
import { requiredProp } from "./errors.js";
|
|
4
|
+
const reported = /* @__PURE__ */ new Set();
|
|
5
|
+
function useValidateProps(component, check, deps) {
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
if (!isDev()) return;
|
|
8
|
+
const result = check();
|
|
9
|
+
const messages = Array.isArray(result) ? result : [result];
|
|
10
|
+
for (const raw of messages) {
|
|
11
|
+
if (raw === null || raw === void 0) continue;
|
|
12
|
+
const key = `${component} ${raw}`;
|
|
13
|
+
if (reported.has(key)) continue;
|
|
14
|
+
reported.add(key);
|
|
15
|
+
console.error(raw);
|
|
16
|
+
}
|
|
17
|
+
}, deps);
|
|
18
|
+
}
|
|
19
|
+
function resetValidatedProps() {
|
|
20
|
+
reported.clear();
|
|
21
|
+
}
|
|
22
|
+
function assertRequiredProps(component, props, keys, hints) {
|
|
23
|
+
for (const key of keys) {
|
|
24
|
+
const value = props[key];
|
|
25
|
+
if (value !== void 0 && value !== null) continue;
|
|
26
|
+
const hint = hints?.[key];
|
|
27
|
+
throw new Error(
|
|
28
|
+
hint === void 0 ? requiredProp(component, key) : requiredProp(component, key, hint)
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export {
|
|
33
|
+
assertRequiredProps,
|
|
34
|
+
resetValidatedProps,
|
|
35
|
+
useValidateProps
|
|
36
|
+
};
|