basalt-ui 1.26.0 → 1.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +23 -23
- package/CHANGELOG.md +67 -0
- package/MIGRATING.md +896 -37
- package/README.md +33 -3
- package/agent/rules/basalt-batteries.md +25 -10
- package/agent/rules/basalt-controls.md +73 -43
- package/agent/rules/basalt-mantine.md +17 -6
- package/agent/rules/basalt-state.md +5 -0
- package/agent/rules/basalt-tokens.md +1 -1
- package/configs/oxlint-plugin.js +1286 -73
- package/configs/oxlint-plugin.test.ts +1338 -29
- package/configs/oxlint.json +12 -5
- package/dist/agent/coalesce.d.ts.map +1 -1
- package/dist/agent/coalesce.js +2 -1
- package/dist/agent/merge.d.ts.map +1 -1
- package/dist/agent/merge.js +2 -1
- package/dist/agent/part-list.d.ts.map +1 -1
- package/dist/agent/part-list.js +2 -0
- package/dist/agent/stick-to-bottom.d.ts +3 -6
- package/dist/agent/stick-to-bottom.d.ts.map +1 -1
- package/dist/agent/stick-to-bottom.js +6 -3
- package/dist/agent-chat/composer.d.ts +6 -2
- package/dist/agent-chat/composer.d.ts.map +1 -1
- package/dist/agent-chat/composer.js +49 -33
- package/dist/agent-chat/relative-time.d.ts +0 -9
- package/dist/agent-chat/relative-time.d.ts.map +1 -1
- package/dist/agent-chat/relative-time.js +2 -1
- package/dist/agent-chat/thread-detail-panel.d.ts +3 -2
- package/dist/agent-chat/thread-detail-panel.d.ts.map +1 -1
- package/dist/agent-chat/thread-detail-panel.js +8 -5
- package/dist/agent-chat/thread-feed-row.d.ts +2 -1
- package/dist/agent-chat/thread-feed-row.d.ts.map +1 -1
- package/dist/agent-chat/thread-feed-row.js +92 -92
- package/dist/agent-chat/thread-feed.d.ts +3 -2
- package/dist/agent-chat/thread-feed.d.ts.map +1 -1
- package/dist/agent-chat/thread-feed.js +8 -3
- package/dist/agent-chat/thread-message.d.ts +4 -3
- package/dist/agent-chat/thread-message.d.ts.map +1 -1
- package/dist/agent-chat/thread-message.js +70 -31
- package/dist/agent-chat/thread-outcome-card.d.ts +3 -2
- package/dist/agent-chat/thread-outcome-card.d.ts.map +1 -1
- package/dist/agent-chat/thread-outcome-card.js +9 -2
- package/dist/agent-chat/thread-workspace.d.ts +7 -2
- package/dist/agent-chat/thread-workspace.d.ts.map +1 -1
- package/dist/agent-chat/thread-workspace.js +62 -29
- package/dist/agent-chat/tool-chip.d.ts +3 -2
- package/dist/agent-chat/tool-chip.d.ts.map +1 -1
- package/dist/agent-chat/tool-chip.js +7 -2
- package/dist/charts/hooks/useBandPlot.d.ts.map +1 -1
- package/dist/charts/hooks/useBandPlot.js +15 -8
- package/dist/charts/index.d.ts +8 -7
- package/dist/charts/index.d.ts.map +1 -1
- package/dist/charts/index.js +45 -5
- package/dist/charts/kinds/BandStrip.d.ts +10 -7
- package/dist/charts/kinds/BandStrip.d.ts.map +1 -1
- package/dist/charts/kinds/BandStrip.js +12 -7
- package/dist/charts/kinds/Bars.d.ts +12 -6
- package/dist/charts/kinds/Bars.d.ts.map +1 -1
- package/dist/charts/kinds/Bars.js +37 -11
- package/dist/charts/kinds/Donut.d.ts +6 -5
- package/dist/charts/kinds/Donut.d.ts.map +1 -1
- package/dist/charts/kinds/Donut.js +19 -2
- package/dist/charts/kinds/DualPanel.d.ts +6 -5
- package/dist/charts/kinds/DualPanel.d.ts.map +1 -1
- package/dist/charts/kinds/DualPanel.js +36 -8
- package/dist/charts/kinds/Heatmap.d.ts +10 -6
- package/dist/charts/kinds/Heatmap.d.ts.map +1 -1
- package/dist/charts/kinds/Heatmap.js +58 -31
- package/dist/charts/kinds/MirroredBars.d.ts +6 -5
- package/dist/charts/kinds/MirroredBars.d.ts.map +1 -1
- package/dist/charts/kinds/MirroredBars.js +9 -2
- package/dist/charts/kinds/MultiLine.d.ts +11 -6
- package/dist/charts/kinds/MultiLine.d.ts.map +1 -1
- package/dist/charts/kinds/MultiLine.js +24 -15
- package/dist/charts/kinds/StackedArea.d.ts +18 -8
- package/dist/charts/kinds/StackedArea.d.ts.map +1 -1
- package/dist/charts/kinds/StackedArea.js +29 -4
- package/dist/charts/kinds/ZonedLine.d.ts +12 -8
- package/dist/charts/kinds/ZonedLine.d.ts.map +1 -1
- package/dist/charts/kinds/ZonedLine.js +33 -23
- package/dist/charts/layout/auto-margin.d.ts +65 -8
- package/dist/charts/layout/auto-margin.d.ts.map +1 -1
- package/dist/charts/layout/auto-margin.js +45 -10
- package/dist/charts/layout/log-ticks.d.ts +27 -0
- package/dist/charts/layout/log-ticks.d.ts.map +1 -0
- package/dist/charts/layout/log-ticks.js +42 -0
- package/dist/charts/primitives/Axes.d.ts +11 -2
- package/dist/charts/primitives/Axes.d.ts.map +1 -1
- package/dist/charts/primitives/Axes.js +15 -5
- package/dist/charts/primitives/CartesianChart.d.ts +45 -7
- package/dist/charts/primitives/CartesianChart.d.ts.map +1 -1
- package/dist/charts/primitives/CartesianChart.js +86 -28
- package/dist/charts/primitives/ChartCard.d.ts +27 -2
- package/dist/charts/primitives/ChartCard.d.ts.map +1 -1
- package/dist/charts/primitives/ChartCard.js +37 -17
- package/dist/charts/primitives/ChartFrame.d.ts +30 -4
- package/dist/charts/primitives/ChartFrame.d.ts.map +1 -1
- package/dist/charts/primitives/ChartFrame.js +45 -15
- package/dist/charts/primitives/ChartLegend.d.ts +13 -2
- package/dist/charts/primitives/ChartLegend.d.ts.map +1 -1
- package/dist/charts/primitives/ChartLegend.js +33 -13
- package/dist/charts/primitives/ChartPending.d.ts +77 -4
- package/dist/charts/primitives/ChartPending.d.ts.map +1 -1
- package/dist/charts/primitives/ChartPending.js +100 -6
- package/dist/charts/primitives/ChartTooltip.d.ts +7 -0
- package/dist/charts/primitives/ChartTooltip.d.ts.map +1 -1
- package/dist/charts/primitives/ChartTooltip.js +18 -5
- package/dist/charts/primitives/Crosshair.d.ts +3 -0
- package/dist/charts/primitives/Crosshair.d.ts.map +1 -1
- package/dist/charts/primitives/Crosshair.js +3 -1
- package/dist/charts/primitives/chart-frame-layout.d.ts +95 -0
- package/dist/charts/primitives/chart-frame-layout.d.ts.map +1 -0
- package/dist/charts/primitives/chart-frame-layout.js +89 -0
- package/dist/charts/primitives/chart-tier.d.ts +16 -0
- package/dist/charts/primitives/chart-tier.d.ts.map +1 -0
- package/dist/charts/primitives/chart-tier.js +20 -0
- package/dist/charts/series.d.ts +55 -1
- package/dist/charts/series.d.ts.map +1 -1
- package/dist/charts/series.js +27 -1
- package/dist/charts/sparklines/BarSparkline.d.ts +3 -3
- package/dist/charts/sparklines/BarSparkline.d.ts.map +1 -1
- package/dist/charts/sparklines/BarSparkline.js +9 -3
- package/dist/charts/sparklines/LineSparkline.d.ts +3 -3
- package/dist/charts/sparklines/LineSparkline.d.ts.map +1 -1
- package/dist/charts/sparklines/LineSparkline.js +15 -3
- package/dist/charts/sparklines/index.d.ts +2 -2
- package/dist/charts/sparklines/index.d.ts.map +1 -1
- package/dist/charts/utils/format.d.ts +92 -2
- package/dist/charts/utils/format.d.ts.map +1 -1
- package/dist/charts/utils/format.js +64 -1
- package/dist/charts/utils/ticks.d.ts +81 -2
- package/dist/charts/utils/ticks.d.ts.map +1 -1
- package/dist/charts/utils/ticks.js +54 -4
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -2
- package/dist/commands/ShortcutsHelp.d.ts +3 -2
- package/dist/commands/ShortcutsHelp.d.ts.map +1 -1
- package/dist/commands/ShortcutsHelp.js +8 -2
- package/dist/commands/define-commands.d.ts.map +1 -1
- package/dist/commands/define-commands.js +2 -2
- package/dist/commands/define-overlays.d.ts +102 -0
- package/dist/commands/define-overlays.d.ts.map +1 -1
- package/dist/commands/define-overlays.js +102 -2
- package/dist/commands/index.d.ts +10 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +3 -1
- package/dist/commands/overlays-mount.d.ts +13 -6
- package/dist/commands/overlays-mount.d.ts.map +1 -1
- package/dist/commands/overlays-mount.js +23 -14
- package/dist/common/errors.d.ts +34 -0
- package/dist/common/errors.d.ts.map +1 -0
- package/dist/common/errors.js +36 -0
- package/dist/common/index.d.ts +15 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +29 -0
- package/dist/common/props.d.ts +63 -0
- package/dist/common/props.d.ts.map +1 -0
- package/dist/common/props.js +6 -0
- package/dist/common/query-state-like.d.ts +43 -0
- package/dist/common/query-state-like.d.ts.map +1 -0
- package/dist/common/query-state-like.js +20 -0
- package/dist/common/refs.d.ts +29 -0
- package/dist/common/refs.d.ts.map +1 -0
- package/dist/common/refs.js +29 -0
- package/dist/common/scroll-parent.d.ts +23 -0
- package/dist/common/scroll-parent.d.ts.map +1 -0
- package/dist/common/scroll-parent.js +21 -0
- package/dist/common/validate.d.ts +38 -0
- package/dist/common/validate.d.ts.map +1 -0
- package/dist/common/validate.js +36 -0
- package/dist/connectivity/connectivity-indicator.d.ts +3 -1
- package/dist/connectivity/connectivity-indicator.d.ts.map +1 -1
- package/dist/connectivity/connectivity-indicator.js +3 -1
- package/dist/connectivity/connectivity-provider.d.ts.map +1 -1
- package/dist/connectivity/connectivity-provider.js +4 -1
- package/dist/connectivity/index.d.ts +1 -0
- package/dist/connectivity/index.d.ts.map +1 -1
- package/dist/connectivity/types.d.ts +2 -2
- package/dist/connectivity/types.d.ts.map +1 -1
- package/dist/connectivity/use-connectivity.d.ts.map +1 -1
- package/dist/content/article-layout.module.css +11 -4
- package/dist/content/callout.d.ts +8 -4
- package/dist/content/callout.d.ts.map +1 -1
- package/dist/content/callout.js +15 -8
- package/dist/content/guide.d.ts +5 -4
- package/dist/content/guide.d.ts.map +1 -1
- package/dist/content/guide.js +13 -4
- package/dist/content/heading-anchor.d.ts +24 -2
- package/dist/content/heading-anchor.d.ts.map +1 -1
- package/dist/content/heading-anchor.js +23 -9
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/markdown.d.ts.map +1 -1
- package/dist/content/markdown.js +2 -0
- package/dist/content/prose.module.css +9 -7
- package/dist/content/reading-progress.d.ts +10 -4
- package/dist/content/reading-progress.d.ts.map +1 -1
- package/dist/content/reading-progress.js +26 -10
- package/dist/content/slug.d.ts +4 -0
- package/dist/content/slug.d.ts.map +1 -1
- package/dist/content/toc.d.ts +11 -0
- package/dist/content/toc.d.ts.map +1 -1
- package/dist/content/toc.js +23 -10
- package/dist/controls/actions.d.ts +49 -6
- package/dist/controls/actions.d.ts.map +1 -1
- package/dist/controls/actions.js +39 -8
- package/dist/controls/compare-filter.d.ts +3 -2
- package/dist/controls/compare-filter.d.ts.map +1 -1
- package/dist/controls/compare-filter.js +17 -2
- package/dist/controls/control-group.d.ts +3 -3
- package/dist/controls/control-group.d.ts.map +1 -1
- package/dist/controls/control-group.js +9 -2
- package/dist/controls/controls.module.css +169 -186
- package/dist/controls/controls.module.css.d.ts +9 -11
- package/dist/controls/enum-filter.d.ts +13 -3
- package/dist/controls/enum-filter.d.ts.map +1 -1
- package/dist/controls/enum-filter.js +32 -15
- package/dist/controls/filter-context.d.ts +15 -6
- package/dist/controls/filter-context.d.ts.map +1 -1
- package/dist/controls/filter-pill.d.ts +3 -3
- package/dist/controls/filter-pill.d.ts.map +1 -1
- package/dist/controls/filter-pill.js +4 -1
- package/dist/controls/filter-set.d.ts +3 -2
- package/dist/controls/filter-set.d.ts.map +1 -1
- package/dist/controls/filter-set.js +66 -41
- package/dist/controls/filter-sheet.d.ts +20 -80
- package/dist/controls/filter-sheet.d.ts.map +1 -1
- package/dist/controls/filter-sheet.js +9 -95
- package/dist/controls/index.d.ts +3 -0
- package/dist/controls/index.d.ts.map +1 -1
- package/dist/controls/index.js +6 -0
- package/dist/controls/multi-select-filter.d.ts +18 -2
- package/dist/controls/multi-select-filter.d.ts.map +1 -1
- package/dist/controls/multi-select-filter.js +124 -22
- package/dist/controls/number-filter.d.ts +28 -0
- package/dist/controls/number-filter.d.ts.map +1 -0
- package/dist/controls/number-filter.js +172 -0
- package/dist/controls/panel-row.d.ts +132 -0
- package/dist/controls/panel-row.d.ts.map +1 -0
- package/dist/controls/panel-row.js +173 -0
- package/dist/controls/panel-row.module.css +86 -0
- package/dist/controls/panel-row.module.css.d.ts +13 -0
- package/dist/controls/range-filter.d.ts +20 -5
- package/dist/controls/range-filter.d.ts.map +1 -1
- package/dist/controls/range-filter.js +75 -38
- package/dist/controls/search-filter.d.ts +3 -2
- package/dist/controls/search-filter.d.ts.map +1 -1
- package/dist/controls/search-filter.js +26 -11
- package/dist/controls/select-filter.d.ts +2 -1
- package/dist/controls/select-filter.d.ts.map +1 -1
- package/dist/controls/select-filter.js +4 -0
- package/dist/controls/slider-control.d.ts +36 -0
- package/dist/controls/slider-control.d.ts.map +1 -0
- package/dist/controls/slider-control.js +64 -0
- package/dist/controls/sync-button.d.ts +3 -2
- package/dist/controls/sync-button.d.ts.map +1 -1
- package/dist/controls/sync-button.js +16 -3
- package/dist/controls/toggle-filter.d.ts +3 -2
- package/dist/controls/toggle-filter.d.ts.map +1 -1
- package/dist/controls/toggle-filter.js +29 -12
- package/dist/controls/view-tabs.d.ts +3 -2
- package/dist/controls/view-tabs.d.ts.map +1 -1
- package/dist/controls/view-tabs.js +43 -11
- package/dist/controls-dates/date-range-picker.d.ts +1 -1
- package/dist/controls-dates/date-range-picker.d.ts.map +1 -1
- package/dist/controls-dates/date-range-picker.js +6 -1
- package/dist/dashboard/delta-badge.d.ts +5 -1
- package/dist/dashboard/delta-badge.d.ts.map +1 -1
- package/dist/dashboard/empty-state.d.ts +10 -3
- package/dist/dashboard/empty-state.d.ts.map +1 -1
- package/dist/dashboard/empty-state.js +37 -6
- package/dist/dashboard/index.d.ts +6 -4
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +10 -2
- package/dist/dashboard/query-state.d.ts +48 -27
- package/dist/dashboard/query-state.d.ts.map +1 -1
- package/dist/dashboard/query-state.js +111 -57
- package/dist/dashboard/settings-section.d.ts +19 -9
- package/dist/dashboard/settings-section.d.ts.map +1 -1
- package/dist/dashboard/settings-section.js +74 -25
- package/dist/dashboard/stat-card.d.ts +76 -19
- package/dist/dashboard/stat-card.d.ts.map +1 -1
- package/dist/dashboard/stat-card.js +78 -38
- package/dist/dashboard/stat-card.module.css +112 -26
- package/dist/dashboard/stat-card.module.css.d.ts +5 -0
- package/dist/dashboard/stat-group.d.ts +41 -0
- package/dist/dashboard/stat-group.d.ts.map +1 -0
- package/dist/dashboard/stat-group.js +30 -0
- package/dist/dashboard/stat-group.module.css +66 -0
- package/dist/dashboard/stat-group.module.css.d.ts +8 -0
- package/dist/dashboard/widget-grid.d.ts +27 -0
- package/dist/dashboard/widget-grid.d.ts.map +1 -0
- package/dist/dashboard/widget-grid.js +41 -0
- package/dist/dashboard/widget-grid.module.css +53 -0
- package/dist/dashboard/widget-grid.module.css.d.ts +9 -0
- package/dist/data/data-table.d.ts +151 -12
- package/dist/data/data-table.d.ts.map +1 -1
- package/dist/data/data-table.js +392 -138
- package/dist/data/data-table.module.css +64 -0
- package/dist/data/data-table.module.css.d.ts +11 -0
- package/dist/data/index.d.ts +2 -2
- package/dist/data/index.d.ts.map +1 -1
- package/dist/data/index.js +24 -2
- package/dist/data/query-branch.d.ts +28 -0
- package/dist/data/query-branch.d.ts.map +1 -0
- package/dist/data/query-branch.js +10 -0
- package/dist/data/table.d.ts +2 -2
- package/dist/data/table.d.ts.map +1 -1
- package/dist/data/virtual-list.d.ts +65 -6
- package/dist/data/virtual-list.d.ts.map +1 -1
- package/dist/data/virtual-list.js +89 -38
- package/dist/data/virtual.d.ts +1 -1
- package/dist/data/virtual.d.ts.map +1 -1
- package/dist/forms/FormErrorSummary.d.ts +4 -3
- package/dist/forms/FormErrorSummary.d.ts.map +1 -1
- package/dist/forms/FormErrorSummary.js +6 -4
- package/dist/forms/create-form.d.ts +2 -2
- package/dist/forms/field.d.ts +46 -6
- package/dist/forms/field.d.ts.map +1 -1
- package/dist/forms/field.js +10 -5
- package/dist/forms/form-layout.d.ts +142 -0
- package/dist/forms/form-layout.d.ts.map +1 -0
- package/dist/forms/form-layout.js +110 -0
- package/dist/forms/form-layout.module.css +145 -0
- package/dist/forms/form-layout.module.css.d.ts +20 -0
- package/dist/forms/form-state.d.ts +42 -0
- package/dist/forms/form-state.d.ts.map +1 -0
- package/dist/forms/form-state.js +26 -0
- package/dist/forms/index.d.ts +22 -6
- package/dist/forms/index.d.ts.map +1 -1
- package/dist/forms/index.js +19 -3
- package/dist/forms/use-field-array.d.ts +60 -0
- package/dist/forms/use-field-array.d.ts.map +1 -0
- package/dist/forms/use-field-array.js +20 -0
- package/dist/forms/use-form-draft.d.ts +25 -10
- package/dist/forms/use-form-draft.d.ts.map +1 -1
- package/dist/forms/use-form-draft.js +55 -18
- package/dist/forms/use-form-submit.d.ts +88 -0
- package/dist/forms/use-form-submit.d.ts.map +1 -0
- package/dist/forms/use-form-submit.js +63 -0
- package/dist/guard/index.d.ts +1 -1
- package/dist/guard/index.d.ts.map +1 -1
- package/dist/guard/index.js +27 -11
- package/dist/index.d.ts +10 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +44 -4
- package/dist/nav/types.d.ts +15 -6
- package/dist/nav/types.d.ts.map +1 -1
- package/dist/notifications/bell.d.ts +3 -2
- package/dist/notifications/bell.d.ts.map +1 -1
- package/dist/notifications/bell.js +73 -56
- package/dist/notifications/center.d.ts +15 -4
- package/dist/notifications/center.d.ts.map +1 -1
- package/dist/notifications/center.js +5 -2
- package/dist/notifications/define-notifications.d.ts +56 -14
- package/dist/notifications/define-notifications.d.ts.map +1 -1
- package/dist/notifications/define-notifications.js +2 -1
- package/dist/notifications/index.d.ts +6 -2
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js +5 -1
- package/dist/notifications/mount-guard.d.ts +8 -0
- package/dist/notifications/mount-guard.d.ts.map +1 -0
- package/dist/notifications/mount-guard.js +19 -0
- package/dist/notifications/notify.d.ts +58 -1
- package/dist/notifications/notify.d.ts.map +1 -1
- package/dist/notifications/notify.js +46 -2
- package/dist/notifications/overlay.d.ts.map +1 -1
- package/dist/notifications/overlay.js +2 -0
- package/dist/notifications/store.d.ts +7 -0
- package/dist/notifications/store.d.ts.map +1 -1
- package/dist/provider/index.d.ts +37 -5
- package/dist/provider/index.d.ts.map +1 -1
- package/dist/provider/index.js +66 -28
- package/dist/provider/lab-theme.d.ts.map +1 -1
- package/dist/provider/lab-theme.js +2 -1
- package/dist/query/devtools.d.ts.map +1 -1
- package/dist/query/devtools.js +1 -0
- package/dist/router-tanstack/field.d.ts +1 -1
- package/dist/router-tanstack/field.d.ts.map +1 -1
- package/dist/router-tanstack/index.d.ts +1 -1
- package/dist/router-tanstack/index.d.ts.map +1 -1
- package/dist/router-tanstack/search-store.d.ts +4 -1
- package/dist/router-tanstack/search-store.d.ts.map +1 -1
- package/dist/router-tanstack/search-store.js +92 -8
- package/dist/router-tanstack/use-nav.d.ts.map +1 -1
- package/dist/router-tanstack/use-nav.js +1 -1
- package/dist/section/index.d.ts +1 -1
- package/dist/section/index.d.ts.map +1 -1
- package/dist/section/section.d.ts +36 -2
- package/dist/section/section.d.ts.map +1 -1
- package/dist/section/section.js +49 -57
- package/dist/section/section.module.css +11 -0
- package/dist/shell/account-types.d.ts +5 -2
- package/dist/shell/account-types.d.ts.map +1 -1
- package/dist/shell/app-brand.d.ts +13 -0
- package/dist/shell/app-brand.d.ts.map +1 -0
- package/dist/shell/app-brand.js +94 -0
- package/dist/shell/app-brand.module.css +109 -0
- package/dist/shell/app-brand.module.css.d.ts +14 -0
- package/dist/shell/app-breadcrumbs.d.ts +4 -2
- package/dist/shell/app-breadcrumbs.d.ts.map +1 -1
- package/dist/shell/app-breadcrumbs.js +33 -22
- package/dist/shell/app-header.module.css +10 -5
- package/dist/shell/app-main.module.css +107 -0
- package/dist/shell/app-main.module.css.d.ts +11 -0
- package/dist/shell/app-mobile-nav.d.ts +3 -2
- package/dist/shell/app-mobile-nav.d.ts.map +1 -1
- package/dist/shell/app-mobile-nav.js +29 -15
- package/dist/shell/app-mobile-nav.module.css +48 -27
- package/dist/shell/app-mobile-nav.module.css.d.ts +0 -1
- package/dist/shell/app-sidebar-account.d.ts +2 -1
- package/dist/shell/app-sidebar-account.d.ts.map +1 -1
- package/dist/shell/app-sidebar-account.js +57 -22
- package/dist/shell/app-sidebar.d.ts +9 -3
- package/dist/shell/app-sidebar.d.ts.map +1 -1
- package/dist/shell/app-sidebar.js +55 -109
- package/dist/shell/app-sidebar.module.css +53 -96
- package/dist/shell/app-sidebar.module.css.d.ts +0 -5
- package/dist/shell/index.d.ts +14 -6
- package/dist/shell/index.d.ts.map +1 -1
- package/dist/shell/index.js +47 -12
- package/dist/shell/isomorphic-layout-effect.d.ts +14 -0
- package/dist/shell/isomorphic-layout-effect.d.ts.map +1 -0
- package/dist/shell/isomorphic-layout-effect.js +5 -0
- package/dist/shell/mobile-nav-model.d.ts.map +1 -1
- package/dist/shell/mobile-nav-model.js +27 -6
- package/dist/shell/nav-count-badge.d.ts +5 -3
- package/dist/shell/nav-count-badge.d.ts.map +1 -1
- package/dist/shell/nav-count-badge.js +3 -1
- package/dist/shell/page-aside.d.ts +43 -0
- package/dist/shell/page-aside.d.ts.map +1 -0
- package/dist/shell/page-aside.js +202 -0
- package/dist/shell/page-aside.module.css +174 -0
- package/dist/shell/page-aside.module.css.d.ts +14 -0
- package/dist/shell/page-bar.d.ts +55 -15
- package/dist/shell/page-bar.d.ts.map +1 -1
- package/dist/shell/page-bar.js +130 -41
- package/dist/shell/page-bar.module.css +107 -13
- package/dist/shell/page-bar.module.css.d.ts +4 -1
- package/dist/shell/sidebar-search.d.ts +4 -2
- package/dist/shell/sidebar-search.d.ts.map +1 -1
- package/dist/shell/sidebar-search.js +9 -4
- package/dist/shell/sidebar-search.module.css +1 -1
- package/dist/state/fields.d.ts +227 -34
- package/dist/state/fields.d.ts.map +1 -1
- package/dist/state/fields.js +77 -30
- package/dist/state/persisted-or-local.d.ts +9 -0
- package/dist/state/persisted-or-local.d.ts.map +1 -0
- package/dist/state/persisted-or-local.js +24 -0
- package/dist/state/persisted.d.ts +12 -0
- package/dist/state/persisted.d.ts.map +1 -1
- package/dist/state/persisted.js +36 -18
- package/dist/state.d.ts +1 -1
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +2 -6
- package/dist/surfaces.d.ts +12 -11
- package/dist/surfaces.d.ts.map +1 -1
- package/dist/surfaces.js +43 -12
- package/dist/theme/ctl-theme.d.ts.map +1 -1
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +102 -17
- package/dist/theme/nav-link.module.css +37 -26
- package/dist/theme/segmented-control.module.css +22 -0
- package/dist/theme/segmented-control.module.css.d.ts +1 -0
- package/dist/theme-lab/boot.d.ts +66 -0
- package/dist/theme-lab/boot.d.ts.map +1 -0
- package/dist/theme-lab/boot.js +82 -0
- package/dist/theme-lab/index.d.ts +4 -43
- package/dist/theme-lab/index.d.ts.map +1 -1
- package/dist/theme-lab/index.js +9 -69
- package/dist/theme-toggle/index.d.ts +3 -2
- package/dist/theme-toggle/index.d.ts.map +1 -1
- package/dist/theme-toggle/index.js +8 -2
- package/dist/tokens/index.d.ts +42 -0
- package/dist/tokens/index.d.ts.map +1 -1
- package/dist/tokens/index.js +35 -6
- package/dist/tokens/palette.d.ts +45 -25
- package/dist/tokens/palette.d.ts.map +1 -1
- package/dist/tokens/palette.js +31 -14
- package/dist/tokens.css +4 -5
- package/dist/utils/is-dev.d.ts +3 -0
- package/dist/utils/is-dev.d.ts.map +1 -0
- package/dist/utils/is-dev.js +6 -0
- package/dist/widget-header/delta-badge.d.ts +7 -1
- package/dist/widget-header/delta-badge.d.ts.map +1 -1
- package/dist/widget-header/delta-badge.js +8 -1
- package/dist/widget-header/index.d.ts +2 -2
- package/dist/widget-header/index.d.ts.map +1 -1
- package/dist/widget-header/index.js +3 -1
- package/dist/widget-header/widget-header.d.ts +99 -4
- package/dist/widget-header/widget-header.d.ts.map +1 -1
- package/dist/widget-header/widget-header.js +45 -18
- package/dist/widget-header/widget-header.module.css +87 -7
- package/dist/widget-header/widget-header.module.css.d.ts +1 -0
- package/llms.txt +6 -6
- package/package.json +49 -25
- package/src/agent/coalesce.ts +2 -1
- package/src/agent/merge.ts +2 -1
- package/src/agent/part-list.tsx +2 -0
- package/src/agent/stick-to-bottom.tsx +9 -11
- package/src/agent-chat/composer.tsx +124 -103
- package/src/agent-chat/relative-time.ts +2 -1
- package/src/agent-chat/thread-detail-panel.tsx +9 -5
- package/src/agent-chat/thread-feed-row.tsx +17 -9
- package/src/agent-chat/thread-feed.tsx +9 -3
- package/src/agent-chat/thread-message.tsx +48 -13
- package/src/agent-chat/thread-outcome-card.tsx +9 -1
- package/src/agent-chat/thread-workspace.tsx +72 -33
- package/src/agent-chat/tool-chip.tsx +8 -2
- package/src/charts/hooks/useBandPlot.ts +26 -8
- package/src/charts/index.ts +39 -4
- package/src/charts/kinds/BandStrip.tsx +36 -14
- package/src/charts/kinds/Bars.tsx +67 -16
- package/src/charts/kinds/Donut.tsx +30 -3
- package/src/charts/kinds/DualPanel.tsx +56 -10
- package/src/charts/kinds/Heatmap.tsx +90 -33
- package/src/charts/kinds/MirroredBars.tsx +21 -3
- package/src/charts/kinds/MultiLine.tsx +61 -18
- package/src/charts/kinds/StackedArea.tsx +77 -6
- package/src/charts/kinds/ZonedLine.tsx +71 -31
- package/src/charts/layout/auto-margin.ts +134 -21
- package/src/charts/layout/log-ticks.ts +90 -0
- package/src/charts/primitives/Axes.tsx +33 -5
- package/src/charts/primitives/CartesianChart.tsx +194 -41
- package/src/charts/primitives/ChartCard.tsx +66 -25
- package/src/charts/primitives/ChartFrame.tsx +107 -26
- package/src/charts/primitives/ChartLegend.tsx +43 -13
- package/src/charts/primitives/ChartPending.tsx +185 -7
- package/src/charts/primitives/ChartTooltip.tsx +37 -5
- package/src/charts/primitives/Crosshair.tsx +6 -3
- package/src/charts/primitives/chart-frame-layout.ts +212 -0
- package/src/charts/primitives/chart-tier.tsx +37 -0
- package/src/charts/series.ts +77 -1
- package/src/charts/sparklines/BarSparkline.tsx +11 -3
- package/src/charts/sparklines/LineSparkline.tsx +18 -4
- package/src/charts/sparklines/index.ts +2 -2
- package/src/charts/utils/format.ts +163 -2
- package/src/charts/utils/ticks.ts +149 -4
- package/src/cli/index.ts +8 -3
- package/src/commands/ShortcutsHelp.tsx +10 -3
- package/src/commands/define-commands.ts +2 -2
- package/src/commands/define-overlays.ts +216 -1
- package/src/commands/index.ts +12 -0
- package/src/commands/overlays-mount.tsx +60 -26
- package/src/common/errors.ts +73 -0
- package/src/common/index.ts +21 -0
- package/src/common/props.ts +71 -0
- package/src/common/query-state-like.ts +64 -0
- package/src/common/refs.ts +58 -0
- package/src/common/scroll-parent.ts +42 -0
- package/src/common/validate.ts +94 -0
- package/src/connectivity/connectivity-indicator.tsx +6 -1
- package/src/connectivity/connectivity-provider.tsx +4 -1
- package/src/connectivity/index.ts +1 -0
- package/src/connectivity/types.ts +5 -2
- package/src/connectivity/use-connectivity.ts +3 -2
- package/src/content/article-layout.module.css +11 -4
- package/src/content/callout.tsx +13 -7
- package/src/content/guide.tsx +14 -4
- package/src/content/heading-anchor.tsx +14 -3
- package/src/content/index.ts +2 -0
- package/src/content/markdown.tsx +2 -0
- package/src/content/prose.module.css +9 -7
- package/src/content/reading-progress.tsx +40 -15
- package/src/content/slug.ts +4 -0
- package/src/content/toc.tsx +47 -10
- package/src/controls/actions.tsx +89 -9
- package/src/controls/compare-filter.tsx +20 -3
- package/src/controls/control-group.tsx +11 -4
- package/src/controls/controls.module.css +169 -186
- package/src/controls/controls.module.css.d.ts +9 -11
- package/src/controls/enum-filter.tsx +46 -19
- package/src/controls/filter-context.tsx +21 -8
- package/src/controls/filter-pill.tsx +6 -3
- package/src/controls/filter-set.tsx +32 -13
- package/src/controls/filter-sheet.tsx +44 -194
- package/src/controls/index.ts +8 -0
- package/src/controls/multi-select-filter.tsx +179 -29
- package/src/controls/number-filter.tsx +329 -0
- package/src/controls/panel-row.module.css +86 -0
- package/src/controls/panel-row.module.css.d.ts +13 -0
- package/src/controls/panel-row.tsx +392 -0
- package/src/controls/range-filter.tsx +133 -43
- package/src/controls/search-filter.tsx +31 -13
- package/src/controls/select-filter.tsx +11 -1
- package/src/controls/slider-control.tsx +159 -0
- package/src/controls/sync-button.tsx +13 -3
- package/src/controls/toggle-filter.tsx +37 -17
- package/src/controls/view-tabs.tsx +63 -11
- package/src/controls-dates/date-range-picker.tsx +8 -1
- package/src/dashboard/delta-badge.tsx +5 -1
- package/src/dashboard/empty-state.tsx +72 -25
- package/src/dashboard/index.ts +19 -2
- package/src/dashboard/query-state.tsx +154 -84
- package/src/dashboard/settings-section.tsx +87 -31
- package/src/dashboard/stat-card.module.css +112 -26
- package/src/dashboard/stat-card.module.css.d.ts +5 -0
- package/src/dashboard/stat-card.tsx +207 -68
- package/src/dashboard/stat-group.module.css +66 -0
- package/src/dashboard/stat-group.module.css.d.ts +8 -0
- package/src/dashboard/stat-group.tsx +74 -0
- package/src/dashboard/widget-grid.module.css +53 -0
- package/src/dashboard/widget-grid.module.css.d.ts +9 -0
- package/src/dashboard/widget-grid.tsx +127 -0
- package/src/data/data-table.module.css +64 -0
- package/src/data/data-table.module.css.d.ts +11 -0
- package/src/data/data-table.tsx +927 -346
- package/src/data/index.ts +30 -2
- package/src/data/query-branch.ts +53 -0
- package/src/data/table.ts +5 -0
- package/src/data/virtual-list.tsx +189 -55
- package/src/data/virtual.ts +5 -1
- package/src/forms/FormErrorSummary.tsx +13 -6
- package/src/forms/create-form.ts +2 -2
- package/src/forms/field.ts +60 -11
- package/src/forms/form-layout.module.css +145 -0
- package/src/forms/form-layout.module.css.d.ts +20 -0
- package/src/forms/form-layout.tsx +305 -0
- package/src/forms/form-state.tsx +94 -0
- package/src/forms/index.ts +38 -7
- package/src/forms/use-field-array.ts +94 -0
- package/src/forms/use-form-draft.ts +145 -53
- package/src/forms/use-form-submit.ts +199 -0
- package/src/guard/index.ts +91 -23
- package/src/index.ts +79 -10
- package/src/nav/types.ts +15 -6
- package/src/notifications/bell.tsx +18 -4
- package/src/notifications/center.tsx +18 -5
- package/src/notifications/define-notifications.ts +64 -18
- package/src/notifications/index.ts +12 -1
- package/src/notifications/mount-guard.ts +41 -0
- package/src/notifications/notify.tsx +122 -3
- package/src/notifications/overlay.tsx +2 -0
- package/src/notifications/store.ts +7 -0
- package/src/provider/index.tsx +101 -13
- package/src/provider/lab-theme.ts +2 -1
- package/src/query/devtools.tsx +1 -0
- package/src/router-tanstack/field.ts +5 -0
- package/src/router-tanstack/index.ts +4 -0
- package/src/router-tanstack/search-store.ts +171 -12
- package/src/router-tanstack/use-nav.ts +18 -13
- package/src/section/index.ts +1 -1
- package/src/section/section.module.css +11 -0
- package/src/section/section.tsx +163 -96
- package/src/shell/account-types.ts +5 -2
- package/src/shell/app-brand.module.css +109 -0
- package/src/shell/app-brand.module.css.d.ts +14 -0
- package/src/shell/app-brand.tsx +140 -0
- package/src/shell/app-breadcrumbs.tsx +19 -9
- package/src/shell/app-header.module.css +10 -5
- package/src/shell/app-main.module.css +107 -0
- package/src/shell/app-main.module.css.d.ts +11 -0
- package/src/shell/app-mobile-nav.module.css +48 -27
- package/src/shell/app-mobile-nav.module.css.d.ts +0 -1
- package/src/shell/app-mobile-nav.tsx +43 -11
- package/src/shell/app-sidebar-account.tsx +29 -6
- package/src/shell/app-sidebar.module.css +53 -96
- package/src/shell/app-sidebar.module.css.d.ts +0 -5
- package/src/shell/app-sidebar.tsx +40 -113
- package/src/shell/index.tsx +156 -65
- package/src/shell/isomorphic-layout-effect.ts +14 -0
- package/src/shell/mobile-nav-model.ts +66 -10
- package/src/shell/nav-count-badge.tsx +6 -1
- package/src/shell/page-aside.module.css +174 -0
- package/src/shell/page-aside.module.css.d.ts +14 -0
- package/src/shell/page-aside.tsx +377 -0
- package/src/shell/page-bar.module.css +107 -13
- package/src/shell/page-bar.module.css.d.ts +4 -1
- package/src/shell/page-bar.tsx +294 -94
- package/src/shell/sidebar-search.module.css +1 -1
- package/src/shell/sidebar-search.tsx +13 -4
- package/src/state/fields.ts +360 -69
- package/src/state/persisted-or-local.ts +50 -0
- package/src/state/persisted.ts +76 -26
- package/src/state.ts +4 -7
- package/src/surfaces.ts +43 -12
- package/src/theme/ctl-theme.tsx +10 -0
- package/src/theme/index.ts +129 -16
- package/src/theme/nav-link.module.css +37 -26
- package/src/theme/segmented-control.module.css +22 -0
- package/src/theme/segmented-control.module.css.d.ts +1 -0
- package/src/theme-lab/boot.ts +140 -0
- package/src/theme-lab/index.tsx +21 -112
- package/src/theme-toggle/index.tsx +10 -3
- package/src/tokens/index.ts +50 -6
- package/src/tokens/palette.ts +58 -30
- package/src/utils/is-dev.ts +4 -0
- package/src/widget-header/delta-badge.tsx +25 -5
- package/src/widget-header/index.ts +10 -2
- package/src/widget-header/widget-header.module.css +87 -7
- package/src/widget-header/widget-header.module.css.d.ts +1 -0
- package/src/widget-header/widget-header.tsx +166 -42
- package/dist/agent/adapter.test.d.ts +0 -2
- package/dist/agent/adapter.test.d.ts.map +0 -1
- package/dist/agent/ai-sdk-transport.test.d.ts +0 -2
- package/dist/agent/ai-sdk-transport.test.d.ts.map +0 -1
- package/dist/agent/coalesce.test.d.ts +0 -2
- package/dist/agent/coalesce.test.d.ts.map +0 -1
- package/dist/agent/foreign.test.d.ts +0 -2
- package/dist/agent/foreign.test.d.ts.map +0 -1
- package/dist/agent/id.test.d.ts +0 -2
- package/dist/agent/id.test.d.ts.map +0 -1
- package/dist/agent/merge.test.d.ts +0 -2
- package/dist/agent/merge.test.d.ts.map +0 -1
- package/dist/agent/part-list.test.d.ts +0 -2
- package/dist/agent/part-list.test.d.ts.map +0 -1
- package/dist/agent/parts.test.d.ts +0 -2
- package/dist/agent/parts.test.d.ts.map +0 -1
- package/dist/agent/thread.test.d.ts +0 -2
- package/dist/agent/thread.test.d.ts.map +0 -1
- package/dist/agent/transport.test.d.ts +0 -2
- package/dist/agent/transport.test.d.ts.map +0 -1
- package/dist/agent/use-agent-stream.test.d.ts +0 -2
- package/dist/agent/use-agent-stream.test.d.ts.map +0 -1
- package/dist/agent/use-agent-thread-runs.foreign.test.d.ts +0 -2
- package/dist/agent/use-agent-thread-runs.foreign.test.d.ts.map +0 -1
- package/dist/agent/use-agent-thread-runs.resume.test.d.ts +0 -2
- package/dist/agent/use-agent-thread-runs.resume.test.d.ts.map +0 -1
- package/dist/agent/use-agent-thread-runs.test.d.ts +0 -2
- package/dist/agent/use-agent-thread-runs.test.d.ts.map +0 -1
- package/dist/agent/use-agent-thread-runs.wedge.test.d.ts +0 -2
- package/dist/agent/use-agent-thread-runs.wedge.test.d.ts.map +0 -1
- package/dist/agent-chat/composer.test.d.ts +0 -2
- package/dist/agent-chat/composer.test.d.ts.map +0 -1
- package/dist/agent-chat/relative-time.test.d.ts +0 -2
- package/dist/agent-chat/relative-time.test.d.ts.map +0 -1
- package/dist/agent-chat/thread-feed-row.test.d.ts +0 -2
- package/dist/agent-chat/thread-feed-row.test.d.ts.map +0 -1
- package/dist/agent-chat/thread-feed.test.d.ts +0 -2
- package/dist/agent-chat/thread-feed.test.d.ts.map +0 -1
- package/dist/agent-chat/thread-message.test.d.ts +0 -2
- package/dist/agent-chat/thread-message.test.d.ts.map +0 -1
- package/dist/agent-chat/thread-workspace.test.d.ts +0 -2
- package/dist/agent-chat/thread-workspace.test.d.ts.map +0 -1
- package/dist/agent-chat/tool-chip.test.d.ts +0 -2
- package/dist/agent-chat/tool-chip.test.d.ts.map +0 -1
- package/dist/agent-chat/virtualize.type-guard.test.d.ts +0 -2
- package/dist/agent-chat/virtualize.type-guard.test.d.ts.map +0 -1
- package/dist/charts/cursor/resolve.test.d.ts +0 -2
- package/dist/charts/cursor/resolve.test.d.ts.map +0 -1
- package/dist/charts/cursor/store.test.d.ts +0 -2
- package/dist/charts/cursor/store.test.d.ts.map +0 -1
- package/dist/charts/kinds/BandStrip.test.d.ts +0 -2
- package/dist/charts/kinds/BandStrip.test.d.ts.map +0 -1
- package/dist/charts/kinds/Bars.test.d.ts +0 -2
- package/dist/charts/kinds/Bars.test.d.ts.map +0 -1
- package/dist/charts/kinds/DualPanel.test.d.ts +0 -2
- package/dist/charts/kinds/DualPanel.test.d.ts.map +0 -1
- package/dist/charts/kinds/MirroredBars.test.d.ts +0 -2
- package/dist/charts/kinds/MirroredBars.test.d.ts.map +0 -1
- package/dist/charts/kinds/MultiLine.test.d.ts +0 -2
- package/dist/charts/kinds/MultiLine.test.d.ts.map +0 -1
- package/dist/charts/kinds/StackedArea.test.d.ts +0 -2
- package/dist/charts/kinds/StackedArea.test.d.ts.map +0 -1
- package/dist/charts/kinds/ZonedLine.test.d.ts +0 -2
- package/dist/charts/kinds/ZonedLine.test.d.ts.map +0 -1
- package/dist/charts/layout/auto-margin.test.d.ts +0 -2
- package/dist/charts/layout/auto-margin.test.d.ts.map +0 -1
- package/dist/charts/primitives/CartesianChart.test.d.ts +0 -2
- package/dist/charts/primitives/CartesianChart.test.d.ts.map +0 -1
- package/dist/charts/primitives/ChartCard.test.d.ts +0 -2
- package/dist/charts/primitives/ChartCard.test.d.ts.map +0 -1
- package/dist/charts/primitives/ChartFrame.test.d.ts +0 -2
- package/dist/charts/primitives/ChartFrame.test.d.ts.map +0 -1
- package/dist/charts/primitives/ChartLegend.test.d.ts +0 -2
- package/dist/charts/primitives/ChartLegend.test.d.ts.map +0 -1
- package/dist/charts/primitives/ChartTooltip.test.d.ts +0 -2
- package/dist/charts/primitives/ChartTooltip.test.d.ts.map +0 -1
- package/dist/charts/primitives/XZoneRects.test.d.ts +0 -2
- package/dist/charts/primitives/XZoneRects.test.d.ts.map +0 -1
- package/dist/charts/series.test.d.ts +0 -2
- package/dist/charts/series.test.d.ts.map +0 -1
- package/dist/charts/utils/domain.test.d.ts +0 -2
- package/dist/charts/utils/domain.test.d.ts.map +0 -1
- package/dist/charts/utils/measure-text.test.d.ts +0 -2
- package/dist/charts/utils/measure-text.test.d.ts.map +0 -1
- package/dist/cli/check-coverage.test.d.ts +0 -2
- package/dist/cli/check-coverage.test.d.ts.map +0 -1
- package/dist/cli/check-theme.test.d.ts +0 -2
- package/dist/cli/check-theme.test.d.ts.map +0 -1
- package/dist/cli/help.test.d.ts +0 -2
- package/dist/cli/help.test.d.ts.map +0 -1
- package/dist/cli/init-sync.test.d.ts +0 -2
- package/dist/cli/init-sync.test.d.ts.map +0 -1
- package/dist/cli/placement-engine.test.d.ts +0 -2
- package/dist/cli/placement-engine.test.d.ts.map +0 -1
- package/dist/cli/shipped-versions.test.d.ts +0 -2
- package/dist/cli/shipped-versions.test.d.ts.map +0 -1
- package/dist/cli/tarball-parity.test.d.ts +0 -2
- package/dist/cli/tarball-parity.test.d.ts.map +0 -1
- package/dist/cli/template-format.test.d.ts +0 -2
- package/dist/cli/template-format.test.d.ts.map +0 -1
- package/dist/cli/template-ledger.test.d.ts +0 -2
- package/dist/cli/template-ledger.test.d.ts.map +0 -1
- package/dist/cli/tokens-css.test.d.ts +0 -2
- package/dist/cli/tokens-css.test.d.ts.map +0 -1
- package/dist/cli/toolchain-wiring.test.d.ts +0 -2
- package/dist/cli/toolchain-wiring.test.d.ts.map +0 -1
- package/dist/cli/waiver-audit.test.d.ts +0 -2
- package/dist/cli/waiver-audit.test.d.ts.map +0 -1
- package/dist/content/article-actions.test.d.ts +0 -2
- package/dist/content/article-actions.test.d.ts.map +0 -1
- package/dist/content/article-model.test.d.ts +0 -2
- package/dist/content/article-model.test.d.ts.map +0 -1
- package/dist/content/block-split.test.d.ts +0 -2
- package/dist/content/block-split.test.d.ts.map +0 -1
- package/dist/content/heading-components.test.d.ts +0 -2
- package/dist/content/heading-components.test.d.ts.map +0 -1
- package/dist/content/markdown.test.d.ts +0 -2
- package/dist/content/markdown.test.d.ts.map +0 -1
- package/dist/content/prose.module.css.test.d.ts +0 -2
- package/dist/content/prose.module.css.test.d.ts.map +0 -1
- package/dist/content/sanitize.test.d.ts +0 -2
- package/dist/content/sanitize.test.d.ts.map +0 -1
- package/dist/content/slug.test.d.ts +0 -2
- package/dist/content/slug.test.d.ts.map +0 -1
- package/dist/controls/actions.test.d.ts +0 -2
- package/dist/controls/actions.test.d.ts.map +0 -1
- package/dist/controls/actions.type-guard.test.d.ts +0 -2
- package/dist/controls/actions.type-guard.test.d.ts.map +0 -1
- package/dist/controls/control-group.test.d.ts +0 -2
- package/dist/controls/control-group.test.d.ts.map +0 -1
- package/dist/controls/controls.router.test.d.ts +0 -2
- package/dist/controls/controls.router.test.d.ts.map +0 -1
- package/dist/controls/filter-set.test.d.ts +0 -2
- package/dist/controls/filter-set.test.d.ts.map +0 -1
- package/dist/controls/peer-boundary.test.d.ts +0 -2
- package/dist/controls/peer-boundary.test.d.ts.map +0 -1
- package/dist/controls/props-contract.test.d.ts +0 -2
- package/dist/controls/props-contract.test.d.ts.map +0 -1
- package/dist/controls/sync-button.test.d.ts +0 -2
- package/dist/controls/sync-button.test.d.ts.map +0 -1
- package/dist/dashboard/query-state.test.d.ts +0 -2
- package/dist/dashboard/query-state.test.d.ts.map +0 -1
- package/dist/dashboard/settings-section.test.d.ts +0 -2
- package/dist/dashboard/settings-section.test.d.ts.map +0 -1
- package/dist/dashboard/stat-card.test.d.ts +0 -2
- package/dist/dashboard/stat-card.test.d.ts.map +0 -1
- package/dist/data/data-table.test.d.ts +0 -2
- package/dist/data/data-table.test.d.ts.map +0 -1
- package/dist/guard/check-source.test.d.ts +0 -2
- package/dist/guard/check-source.test.d.ts.map +0 -1
- package/dist/guard/grace.test.d.ts +0 -20
- package/dist/guard/grace.test.d.ts.map +0 -1
- package/dist/guard/guard-hook.test.d.ts +0 -2
- package/dist/guard/guard-hook.test.d.ts.map +0 -1
- package/dist/provider/index.test.d.ts +0 -2
- package/dist/provider/index.test.d.ts.map +0 -1
- package/dist/provider/lab-theme.test.d.ts +0 -2
- package/dist/provider/lab-theme.test.d.ts.map +0 -1
- package/dist/query/error-message.test.d.ts +0 -2
- package/dist/query/error-message.test.d.ts.map +0 -1
- package/dist/router-tanstack/multi-search-param-store.test.d.ts +0 -2
- package/dist/router-tanstack/multi-search-param-store.test.d.ts.map +0 -1
- package/dist/router-tanstack/nav.test.d.ts +0 -2
- package/dist/router-tanstack/nav.test.d.ts.map +0 -1
- package/dist/router-tanstack/search-param-store.test.d.ts +0 -2
- package/dist/router-tanstack/search-param-store.test.d.ts.map +0 -1
- package/dist/router-tanstack/search-store.router.test.d.ts +0 -2
- package/dist/router-tanstack/search-store.router.test.d.ts.map +0 -1
- package/dist/router-tanstack/search-store.test.d.ts +0 -2
- package/dist/router-tanstack/search-store.test.d.ts.map +0 -1
- package/dist/router-tanstack/use-nav.test.d.ts +0 -2
- package/dist/router-tanstack/use-nav.test.d.ts.map +0 -1
- package/dist/section/section.test.d.ts +0 -2
- package/dist/section/section.test.d.ts.map +0 -1
- package/dist/shell/app-mobile-nav.test.d.ts +0 -2
- package/dist/shell/app-mobile-nav.test.d.ts.map +0 -1
- package/dist/shell/app-sidebar.test.d.ts +0 -2
- package/dist/shell/app-sidebar.test.d.ts.map +0 -1
- package/dist/shell/index.test.d.ts +0 -2
- package/dist/shell/index.test.d.ts.map +0 -1
- package/dist/shell/mobile-nav-model.test.d.ts +0 -2
- package/dist/shell/mobile-nav-model.test.d.ts.map +0 -1
- package/dist/shell/page-bar.test.d.ts +0 -2
- package/dist/shell/page-bar.test.d.ts.map +0 -1
- package/dist/state/fields.test.d.ts +0 -2
- package/dist/state/fields.test.d.ts.map +0 -1
- package/dist/styles.floor.test.d.ts +0 -2
- package/dist/styles.floor.test.d.ts.map +0 -1
- package/dist/theme/border-coverage.test.d.ts +0 -18
- package/dist/theme/border-coverage.test.d.ts.map +0 -1
- package/dist/theme/contrast.test.d.ts +0 -2
- package/dist/theme/contrast.test.d.ts.map +0 -1
- package/dist/theme/ctl-theme.test.d.ts +0 -2
- package/dist/theme/ctl-theme.test.d.ts.map +0 -1
- package/dist/theme/ctl-tier-coverage.test.d.ts +0 -2
- package/dist/theme/ctl-tier-coverage.test.d.ts.map +0 -1
- package/dist/theme/density-option.test.d.ts +0 -2
- package/dist/theme/density-option.test.d.ts.map +0 -1
- package/dist/theme/density-relations.test.d.ts +0 -2
- package/dist/theme/density-relations.test.d.ts.map +0 -1
- package/dist/theme/derive-theme.test.d.ts +0 -2
- package/dist/theme/derive-theme.test.d.ts.map +0 -1
- package/dist/theme/divider-law.test.d.ts +0 -2
- package/dist/theme/divider-law.test.d.ts.map +0 -1
- package/dist/theme/fonts-option.test.d.ts +0 -2
- package/dist/theme/fonts-option.test.d.ts.map +0 -1
- package/dist/theme/icon-slot.test.d.ts +0 -2
- package/dist/theme/icon-slot.test.d.ts.map +0 -1
- package/dist/theme/layout-rhythm-css.test.d.ts +0 -2
- package/dist/theme/layout-rhythm-css.test.d.ts.map +0 -1
- package/dist/theme/radius-option.test.d.ts +0 -2
- package/dist/theme/radius-option.test.d.ts.map +0 -1
- package/dist/theme/radius.test.d.ts +0 -2
- package/dist/theme/radius.test.d.ts.map +0 -1
- package/dist/theme/shadow-surfaces.test.d.ts +0 -26
- package/dist/theme/shadow-surfaces.test.d.ts.map +0 -1
- package/dist/theme/spacing.test.d.ts +0 -2
- package/dist/theme/spacing.test.d.ts.map +0 -1
- package/dist/theme/use-basalt-spacing.test.d.ts +0 -2
- package/dist/theme/use-basalt-spacing.test.d.ts.map +0 -1
- package/dist/theme-lab/derive-controls.test.d.ts +0 -2
- package/dist/theme-lab/derive-controls.test.d.ts.map +0 -1
- package/dist/theme-lab/derive-state.test.d.ts +0 -2
- package/dist/theme-lab/derive-state.test.d.ts.map +0 -1
- package/dist/theme-lab/theme-lab.test.d.ts +0 -2
- package/dist/theme-lab/theme-lab.test.d.ts.map +0 -1
- package/dist/tokens/build-fonts-css.test.d.ts +0 -2
- package/dist/tokens/build-fonts-css.test.d.ts.map +0 -1
- package/dist/tokens/build-radius-css.test.d.ts +0 -2
- package/dist/tokens/build-radius-css.test.d.ts.map +0 -1
- package/dist/tokens/chart-margin.test.d.ts +0 -2
- package/dist/tokens/chart-margin.test.d.ts.map +0 -1
- package/dist/tokens/density.test.d.ts +0 -2
- package/dist/tokens/density.test.d.ts.map +0 -1
- package/dist/tokens/derive-radius.test.d.ts +0 -2
- package/dist/tokens/derive-radius.test.d.ts.map +0 -1
- package/dist/tokens/derive.test.d.ts +0 -2
- package/dist/tokens/derive.test.d.ts.map +0 -1
- package/dist/tokens/palette.test.d.ts +0 -2
- package/dist/tokens/palette.test.d.ts.map +0 -1
- package/dist/tokens/text-scale.test.d.ts +0 -2
- package/dist/tokens/text-scale.test.d.ts.map +0 -1
- package/dist/vite-color-mix.test.d.ts +0 -2
- package/dist/vite-color-mix.test.d.ts.map +0 -1
- package/dist/vite.test.d.ts +0 -2
- package/dist/vite.test.d.ts.map +0 -1
- package/dist/widget-header/delta-badge.test.d.ts +0 -2
- package/dist/widget-header/delta-badge.test.d.ts.map +0 -1
- package/dist/widget-header/no-mantine.test.d.ts +0 -2
- package/dist/widget-header/no-mantine.test.d.ts.map +0 -1
- package/dist/widget-header/widget-header.test.d.ts +0 -2
- package/dist/widget-header/widget-header.test.d.ts.map +0 -1
- package/src/agent/adapter.test.ts +0 -1640
- package/src/agent/ai-sdk-transport.test.ts +0 -658
- package/src/agent/coalesce.test.ts +0 -387
- package/src/agent/foreign.test.ts +0 -51
- package/src/agent/id.test.ts +0 -169
- package/src/agent/merge.test.ts +0 -206
- package/src/agent/part-list.test.tsx +0 -112
- package/src/agent/parts.test.ts +0 -720
- package/src/agent/thread.test.ts +0 -220
- package/src/agent/transport.test.ts +0 -70
- package/src/agent/use-agent-stream.test.tsx +0 -287
- package/src/agent/use-agent-thread-runs.foreign.test.tsx +0 -138
- package/src/agent/use-agent-thread-runs.resume.test.tsx +0 -294
- package/src/agent/use-agent-thread-runs.test.tsx +0 -1120
- package/src/agent/use-agent-thread-runs.wedge.test.tsx +0 -387
- package/src/agent-chat/composer.test.tsx +0 -924
- package/src/agent-chat/relative-time.test.ts +0 -95
- package/src/agent-chat/thread-feed-row.test.tsx +0 -510
- package/src/agent-chat/thread-feed.test.tsx +0 -241
- package/src/agent-chat/thread-message.test.tsx +0 -1285
- package/src/agent-chat/thread-workspace.test.tsx +0 -169
- package/src/agent-chat/tool-chip.test.tsx +0 -139
- package/src/agent-chat/virtualize.type-guard.test.ts +0 -49
- package/src/charts/cursor/resolve.test.ts +0 -151
- package/src/charts/cursor/store.test.ts +0 -64
- package/src/charts/kinds/BandStrip.test.tsx +0 -282
- package/src/charts/kinds/Bars.test.tsx +0 -183
- package/src/charts/kinds/DualPanel.test.tsx +0 -527
- package/src/charts/kinds/MirroredBars.test.tsx +0 -232
- package/src/charts/kinds/MultiLine.test.tsx +0 -218
- package/src/charts/kinds/StackedArea.test.tsx +0 -114
- package/src/charts/kinds/ZonedLine.test.tsx +0 -147
- package/src/charts/layout/auto-margin.test.ts +0 -42
- package/src/charts/primitives/CartesianChart.test.tsx +0 -647
- package/src/charts/primitives/ChartCard.test.tsx +0 -66
- package/src/charts/primitives/ChartFrame.test.tsx +0 -142
- package/src/charts/primitives/ChartLegend.test.tsx +0 -78
- package/src/charts/primitives/ChartTooltip.test.tsx +0 -44
- package/src/charts/primitives/XZoneRects.test.tsx +0 -123
- package/src/charts/series.test.ts +0 -112
- package/src/charts/utils/domain.test.ts +0 -54
- package/src/charts/utils/measure-text.test.ts +0 -36
- package/src/cli/check-coverage.test.ts +0 -297
- package/src/cli/check-theme.test.ts +0 -837
- package/src/cli/help.test.ts +0 -170
- package/src/cli/init-sync.test.ts +0 -343
- package/src/cli/placement-engine.test.ts +0 -298
- package/src/cli/shipped-versions.test.ts +0 -83
- package/src/cli/tarball-parity.test.ts +0 -44
- package/src/cli/template-format.test.ts +0 -64
- package/src/cli/template-ledger.test.ts +0 -219
- package/src/cli/tokens-css.test.ts +0 -249
- package/src/cli/toolchain-wiring.test.ts +0 -1358
- package/src/cli/waiver-audit.test.ts +0 -215
- package/src/content/article-actions.test.ts +0 -78
- package/src/content/article-model.test.ts +0 -119
- package/src/content/block-split.test.ts +0 -75
- package/src/content/heading-components.test.tsx +0 -65
- package/src/content/markdown.test.tsx +0 -603
- package/src/content/prose.module.css.test.ts +0 -39
- package/src/content/sanitize.test.ts +0 -659
- package/src/content/slug.test.ts +0 -62
- package/src/controls/actions.test.tsx +0 -252
- package/src/controls/actions.type-guard.test.ts +0 -63
- package/src/controls/control-group.test.tsx +0 -229
- package/src/controls/controls.router.test.tsx +0 -637
- package/src/controls/filter-set.test.tsx +0 -472
- package/src/controls/peer-boundary.test.ts +0 -85
- package/src/controls/props-contract.test.tsx +0 -106
- package/src/controls/sync-button.test.tsx +0 -183
- package/src/dashboard/query-state.test.tsx +0 -152
- package/src/dashboard/settings-section.test.tsx +0 -56
- package/src/dashboard/stat-card.test.tsx +0 -154
- package/src/data/data-table.test.tsx +0 -434
- package/src/guard/check-source.test.ts +0 -3355
- package/src/guard/grace.test.ts +0 -149
- package/src/guard/guard-hook.test.ts +0 -203
- package/src/provider/index.test.tsx +0 -101
- package/src/provider/lab-theme.test.ts +0 -147
- package/src/query/error-message.test.ts +0 -67
- package/src/router-tanstack/multi-search-param-store.test.ts +0 -124
- package/src/router-tanstack/nav.test.ts +0 -111
- package/src/router-tanstack/search-param-store.test.ts +0 -135
- package/src/router-tanstack/search-store.router.test.tsx +0 -661
- package/src/router-tanstack/search-store.test.ts +0 -418
- package/src/router-tanstack/use-nav.test.tsx +0 -187
- package/src/section/section.test.tsx +0 -204
- package/src/shell/app-mobile-nav.test.tsx +0 -403
- package/src/shell/app-sidebar.test.tsx +0 -509
- package/src/shell/index.test.tsx +0 -428
- package/src/shell/mobile-nav-model.test.ts +0 -517
- package/src/shell/page-bar.test.tsx +0 -316
- package/src/state/fields.test.tsx +0 -258
- package/src/styles.floor.test.ts +0 -36
- package/src/theme/border-coverage.test.ts +0 -272
- package/src/theme/contrast.test.ts +0 -354
- package/src/theme/ctl-theme.test.tsx +0 -275
- package/src/theme/ctl-tier-coverage.test.ts +0 -170
- package/src/theme/density-option.test.ts +0 -96
- package/src/theme/density-relations.test.ts +0 -506
- package/src/theme/derive-theme.test.ts +0 -101
- package/src/theme/divider-law.test.ts +0 -259
- package/src/theme/fonts-option.test.ts +0 -75
- package/src/theme/icon-slot.test.tsx +0 -275
- package/src/theme/layout-rhythm-css.test.ts +0 -72
- package/src/theme/radius-option.test.ts +0 -86
- package/src/theme/radius.test.ts +0 -142
- package/src/theme/shadow-surfaces.test.ts +0 -488
- package/src/theme/spacing.test.ts +0 -495
- package/src/theme/use-basalt-spacing.test.tsx +0 -55
- package/src/theme-lab/derive-controls.test.ts +0 -94
- package/src/theme-lab/derive-state.test.ts +0 -71
- package/src/theme-lab/theme-lab.test.ts +0 -46
- package/src/tokens/build-fonts-css.test.ts +0 -52
- package/src/tokens/build-radius-css.test.ts +0 -25
- package/src/tokens/chart-margin.test.ts +0 -39
- package/src/tokens/density.test.ts +0 -259
- package/src/tokens/derive-radius.test.ts +0 -62
- package/src/tokens/derive.test.ts +0 -30
- package/src/tokens/palette.test.ts +0 -114
- package/src/tokens/text-scale.test.ts +0 -51
- package/src/vite-color-mix.test.ts +0 -46
- package/src/vite.test.ts +0 -423
- package/src/widget-header/delta-badge.test.tsx +0 -60
- package/src/widget-header/no-mantine.test.ts +0 -33
- package/src/widget-header/widget-header.test.tsx +0 -187
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal — `useLayoutEffect` in the browser, `useEffect` on the server.
|
|
3
|
+
*
|
|
4
|
+
* The standard isomorphic pattern, so an SSR render never trips React's "useLayoutEffect does
|
|
5
|
+
* nothing on the server" warning. The branch reads a global that cannot change between renders, so
|
|
6
|
+
* the hook identity is stable across every render of every caller.
|
|
7
|
+
*
|
|
8
|
+
* One module rather than one `const` per file: `page-bar.tsx` and `page-aside.tsx` declared the
|
|
9
|
+
* same line with the same doc, and the second copy's doc already said "see `page-bar.tsx`'s copy".
|
|
10
|
+
* Not exported from any barrel — this is a shell-internal utility, not a published hook.
|
|
11
|
+
*/
|
|
12
|
+
import { useEffect } from 'react';
|
|
13
|
+
export declare const useIsomorphicLayoutEffect: typeof useEffect;
|
|
14
|
+
//# sourceMappingURL=isomorphic-layout-effect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isomorphic-layout-effect.d.ts","sourceRoot":"","sources":["../../src/shell/isomorphic-layout-effect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,SAAS,EAAmB,MAAM,OAAO,CAAA;AAElD,eAAO,MAAM,yBAAyB,kBAA8D,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mobile-nav-model.d.ts","sourceRoot":"","sources":["../../src/shell/mobile-nav-model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EACV,eAAe,EAEf,cAAc,EAGd,YAAY,EAEZ,cAAc,EACf,MAAM,cAAc,CAAA;AAGrB,mGAAmG;AACnG,eAAO,MAAM,uBAAuB,IAAI,CAAA;AAExC;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,IAAI,CAAA;AAExC,iGAAiG;AACjG,eAAO,MAAM,eAAe,WAAW,CAAA;AAEvC,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,CAAC,EAAE,eAAe,GAAG,SAAS,CAAA;IACpC;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,GAAG,MAAM,CAQjF;
|
|
1
|
+
{"version":3,"file":"mobile-nav-model.d.ts","sourceRoot":"","sources":["../../src/shell/mobile-nav-model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EACV,eAAe,EAEf,cAAc,EAGd,YAAY,EAEZ,cAAc,EACf,MAAM,cAAc,CAAA;AAGrB,mGAAmG;AACnG,eAAO,MAAM,uBAAuB,IAAI,CAAA;AAExC;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,IAAI,CAAA;AAExC,iGAAiG;AACjG,eAAO,MAAM,eAAe,WAAW,CAAA;AAEvC,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,CAAC,EAAE,eAAe,GAAG,SAAS,CAAA;IACpC;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,GAAG,MAAM,CAQjF;AAwVD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,cAAc,EAAE,EAC1B,IAAI,CAAC,EAAE,uBAAuB,GAC7B,cAAc,CA2EhB"}
|
|
@@ -43,6 +43,12 @@ function flattenItems(items, out) {
|
|
|
43
43
|
flattenItems(item.children ?? [], out);
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
|
+
function pushWithChildren(out, item, children) {
|
|
47
|
+
const next = { ...item };
|
|
48
|
+
if (children.length > 0) next.children = children;
|
|
49
|
+
else delete next.children;
|
|
50
|
+
out.push(next);
|
|
51
|
+
}
|
|
46
52
|
function pruneTree(items, keep) {
|
|
47
53
|
const out = [];
|
|
48
54
|
for (const item of items) {
|
|
@@ -51,10 +57,24 @@ function pruneTree(items, keep) {
|
|
|
51
57
|
out.push(...children);
|
|
52
58
|
continue;
|
|
53
59
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
60
|
+
pushWithChildren(out, item, children);
|
|
61
|
+
}
|
|
62
|
+
return out;
|
|
63
|
+
}
|
|
64
|
+
function pruneOverflowTree(items, isHidden, isCovered) {
|
|
65
|
+
const out = [];
|
|
66
|
+
for (const item of items) {
|
|
67
|
+
const children = pruneOverflowTree(item.children ?? [], isHidden, isCovered);
|
|
68
|
+
if (isHidden(item)) {
|
|
69
|
+
out.push(...children);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (isCovered(item)) {
|
|
73
|
+
if (children.length === 0) continue;
|
|
74
|
+
out.push({ ...item, active: false, children });
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
pushWithChildren(out, item, children);
|
|
58
78
|
}
|
|
59
79
|
return out;
|
|
60
80
|
}
|
|
@@ -183,9 +203,10 @@ function buildOverflow(sections, covered) {
|
|
|
183
203
|
for (const section of sections) {
|
|
184
204
|
const hidden = isSectionHidden(section);
|
|
185
205
|
if (hidden) continue;
|
|
186
|
-
const items =
|
|
206
|
+
const items = pruneOverflowTree(
|
|
187
207
|
section.items,
|
|
188
|
-
(item) => placementOf(item, hidden)
|
|
208
|
+
(item) => placementOf(item, hidden) === "hidden",
|
|
209
|
+
(item) => covered.has(item.key)
|
|
189
210
|
);
|
|
190
211
|
if (items.length === 0) continue;
|
|
191
212
|
groups.push({ key: section.label, label: section.label, items });
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import type { BasaltProps } from '../common/props.js';
|
|
2
|
+
export type NavCountBadgeProps = BasaltProps & {
|
|
3
|
+
count: number;
|
|
4
|
+
};
|
|
1
5
|
/**
|
|
2
6
|
* Sidebar nav count badge (docs/DESIGN-SPEC.md §5): mono micro (11px), ink-8% bg, radius 5, height 16,
|
|
3
7
|
* padding 0 5px, muted text; `marginLeft: auto` pins it to the row end on any render path.
|
|
@@ -5,7 +9,5 @@
|
|
|
5
9
|
* combinations land on the ink-tint idiom. Returns `null` for a zero/empty count so the badge slot
|
|
6
10
|
* stays clean ("ink earns its color", DESIGN.md).
|
|
7
11
|
*/
|
|
8
|
-
export declare function NavCountBadge({ count }:
|
|
9
|
-
count: number;
|
|
10
|
-
}): import("react").JSX.Element | null;
|
|
12
|
+
export declare function NavCountBadge({ count, className, style }: NavCountBadgeProps): import("react").JSX.Element | null;
|
|
11
13
|
//# sourceMappingURL=nav-count-badge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nav-count-badge.d.ts","sourceRoot":"","sources":["../../src/shell/nav-count-badge.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"nav-count-badge.d.ts","sourceRoot":"","sources":["../../src/shell/nav-count-badge.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAElD,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhE;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,kBAAkB,sCAwB5E"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import { Badge } from "@mantine/core";
|
|
3
3
|
import { VX } from "../tokens/index.js";
|
|
4
|
-
function NavCountBadge({ count }) {
|
|
4
|
+
function NavCountBadge({ count, className, style }) {
|
|
5
5
|
if (!count) return null;
|
|
6
6
|
return /* @__PURE__ */ jsx(
|
|
7
7
|
Badge,
|
|
8
8
|
{
|
|
9
9
|
size: "sm",
|
|
10
|
+
...className !== void 0 && { className },
|
|
11
|
+
...style !== void 0 && { style },
|
|
10
12
|
styles: {
|
|
11
13
|
root: {
|
|
12
14
|
backgroundColor: "color-mix(in srgb, var(--vx-ink) 8%, transparent)",
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { BasaltProps, SlotStylesProps } from '../common/props.js';
|
|
3
|
+
type AsideRegion = {
|
|
4
|
+
/** The node inside `AppShell.Aside` the panel portals into. `null` outside a shell, and until
|
|
5
|
+
* the outlet mounts. */
|
|
6
|
+
target: HTMLElement | null;
|
|
7
|
+
setTarget: (el: HTMLElement | null) => void;
|
|
8
|
+
/** True only under `BasaltShell` — the provider is shell-internal, so the context IS the probe. */
|
|
9
|
+
inShell: boolean;
|
|
10
|
+
/** A page is rendering a `PageAside` into the region; until then it has zero width. */
|
|
11
|
+
claimed: boolean;
|
|
12
|
+
/** The claiming page's fold state, published back so the shell can size the region. */
|
|
13
|
+
folded: boolean;
|
|
14
|
+
claim: () => () => void;
|
|
15
|
+
publishFolded: (folded: boolean) => void;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Internal — mounted by `BasaltShell` inside `PageBarProvider`. Owns the portal target, the claim
|
|
19
|
+
* that turns the region on, and the mirrored fold flag the shell reads for `aside.width`.
|
|
20
|
+
*/
|
|
21
|
+
export declare function AsideProvider({ children }: {
|
|
22
|
+
children: ReactNode;
|
|
23
|
+
}): ReactNode;
|
|
24
|
+
/** Internal — the region's state, read by `BasaltShell` to size `AppShell.Aside`. */
|
|
25
|
+
export declare function useAsideRegion(): Pick<AsideRegion, 'claimed' | 'folded'>;
|
|
26
|
+
/** Internal — the node inside `AppShell.Aside` the active page's panel portals into. */
|
|
27
|
+
export declare function AsideOutlet({ className }: {
|
|
28
|
+
className?: string;
|
|
29
|
+
}): import("react").JSX.Element;
|
|
30
|
+
/** The three boxes `PageAside` paints, in every projection (`common/props.ts`). */
|
|
31
|
+
export type PageAsideSlot = 'root' | 'header' | 'body';
|
|
32
|
+
export type PageAsideProps = BasaltProps & SlotStylesProps<PageAsideSlot> & {
|
|
33
|
+
/** Header label; also the accessible name of the region. */
|
|
34
|
+
title: string;
|
|
35
|
+
/** Persists the fold at `basalt:aside:<persistKey>`. Omit for an unpersisted fold. */
|
|
36
|
+
persistKey?: string;
|
|
37
|
+
/** Fold state on first render, respected only while nothing is persisted. @default false */
|
|
38
|
+
defaultFolded?: boolean;
|
|
39
|
+
children: ReactNode;
|
|
40
|
+
};
|
|
41
|
+
export declare function PageAside(props: PageAsideProps): ReactNode;
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=page-aside.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-aside.d.ts","sourceRoot":"","sources":["../../src/shell/page-aside.tsx"],"names":[],"mappings":"AAqDA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAItC,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAQnE,KAAK,WAAW,GAAG;IACjB;4BACwB;IACxB,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;IAC1B,SAAS,EAAE,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAA;IAC3C,mGAAmG;IACnG,OAAO,EAAE,OAAO,CAAA;IAChB,uFAAuF;IACvF,OAAO,EAAE,OAAO,CAAA;IAChB,uFAAuF;IACvF,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,MAAM,MAAM,IAAI,CAAA;IACvB,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;CACzC,CAAA;AAcD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,GAAG,SAAS,CAyB9E;AAED,qFAAqF;AACrF,wBAAgB,cAAc,IAAI,IAAI,CAAC,WAAW,EAAE,SAAS,GAAG,QAAQ,CAAC,CAGxE;AAED,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAGhE;AA8CD,mFAAmF;AACnF,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAA;AAEtD,MAAM,MAAM,cAAc,GAAG,WAAW,GACtC,eAAe,CAAC,aAAa,CAAC,GAAG;IAC/B,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAA;IACb,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,4FAA4F;IAC5F,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,EAAE,SAAS,CAAA;CACpB,CAAA;AAoEH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,CAqH1D"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import {
|
|
3
|
+
createContext,
|
|
4
|
+
useCallback,
|
|
5
|
+
useContext,
|
|
6
|
+
useMemo,
|
|
7
|
+
useState,
|
|
8
|
+
useSyncExternalStore
|
|
9
|
+
} from "react";
|
|
10
|
+
import { createPortal } from "react-dom";
|
|
11
|
+
import { useMantineTheme } from "@mantine/core";
|
|
12
|
+
import { cx } from "../common/props.js";
|
|
13
|
+
import { assertRequiredProps } from "../common/validate.js";
|
|
14
|
+
import { usePersistedOrLocal } from "../state/persisted-or-local.js";
|
|
15
|
+
import { FilterSetScope } from "../controls/filter-context.js";
|
|
16
|
+
import { useAsidePanelSlot } from "./page-bar.js";
|
|
17
|
+
import { useIsomorphicLayoutEffect } from "./isomorphic-layout-effect.js";
|
|
18
|
+
import classes from "./page-aside.module.css";
|
|
19
|
+
const NO_REGION = {
|
|
20
|
+
target: null,
|
|
21
|
+
setTarget: () => {
|
|
22
|
+
},
|
|
23
|
+
inShell: false,
|
|
24
|
+
claimed: false,
|
|
25
|
+
folded: false,
|
|
26
|
+
claim: () => () => {
|
|
27
|
+
},
|
|
28
|
+
publishFolded: () => {
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
const AsideContext = createContext(NO_REGION);
|
|
32
|
+
function AsideProvider({ children }) {
|
|
33
|
+
const [target, setTarget] = useState(null);
|
|
34
|
+
const [claims, setClaims] = useState(0);
|
|
35
|
+
const [folded, setFolded] = useState(false);
|
|
36
|
+
const claim = useCallback(() => {
|
|
37
|
+
setClaims((n) => n + 1);
|
|
38
|
+
return () => {
|
|
39
|
+
setClaims((n) => n - 1);
|
|
40
|
+
setFolded(false);
|
|
41
|
+
};
|
|
42
|
+
}, []);
|
|
43
|
+
const value = {
|
|
44
|
+
target,
|
|
45
|
+
setTarget,
|
|
46
|
+
inShell: true,
|
|
47
|
+
claimed: claims > 0,
|
|
48
|
+
folded,
|
|
49
|
+
claim,
|
|
50
|
+
publishFolded: setFolded
|
|
51
|
+
};
|
|
52
|
+
return /* @__PURE__ */ jsx(AsideContext.Provider, { value, children });
|
|
53
|
+
}
|
|
54
|
+
function useAsideRegion() {
|
|
55
|
+
const { claimed, folded } = useContext(AsideContext);
|
|
56
|
+
return { claimed, folded };
|
|
57
|
+
}
|
|
58
|
+
function AsideOutlet({ className }) {
|
|
59
|
+
const { setTarget } = useContext(AsideContext);
|
|
60
|
+
return /* @__PURE__ */ jsx("div", { ref: setTarget, className });
|
|
61
|
+
}
|
|
62
|
+
function mediaQueryList(query) {
|
|
63
|
+
if (typeof window === "undefined" || typeof window.matchMedia !== "function") return null;
|
|
64
|
+
return window.matchMedia(query);
|
|
65
|
+
}
|
|
66
|
+
function useMediaQueryMatches(query, fallback) {
|
|
67
|
+
const list = useMemo(() => mediaQueryList(query), [query]);
|
|
68
|
+
const subscribe = useCallback(
|
|
69
|
+
(onStoreChange) => {
|
|
70
|
+
if (list === null) return () => {
|
|
71
|
+
};
|
|
72
|
+
list.addEventListener("change", onStoreChange);
|
|
73
|
+
return () => {
|
|
74
|
+
list.removeEventListener("change", onStoreChange);
|
|
75
|
+
};
|
|
76
|
+
},
|
|
77
|
+
[list]
|
|
78
|
+
);
|
|
79
|
+
const getSnapshot = useCallback(() => list?.matches ?? fallback, [list, fallback]);
|
|
80
|
+
const getServerSnapshot = useCallback(() => fallback, [fallback]);
|
|
81
|
+
return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
|
|
82
|
+
}
|
|
83
|
+
function IconAsideFold({ folded }) {
|
|
84
|
+
return /* @__PURE__ */ jsxs(
|
|
85
|
+
"svg",
|
|
86
|
+
{
|
|
87
|
+
width: 16,
|
|
88
|
+
height: 16,
|
|
89
|
+
viewBox: "0 0 24 24",
|
|
90
|
+
fill: "none",
|
|
91
|
+
stroke: "currentColor",
|
|
92
|
+
strokeWidth: 2,
|
|
93
|
+
strokeLinecap: "round",
|
|
94
|
+
strokeLinejoin: "round",
|
|
95
|
+
"aria-hidden": true,
|
|
96
|
+
children: [
|
|
97
|
+
/* @__PURE__ */ jsx("path", { d: "M4 4h16v16H4z" }),
|
|
98
|
+
/* @__PURE__ */ jsx("path", { d: "M15 4v16" }),
|
|
99
|
+
folded ? /* @__PURE__ */ jsx("path", { d: "M10 9l-3 3l3 3" }) : /* @__PURE__ */ jsx("path", { d: "M8 9l3 3l-3 3" })
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
function IconAsidePanel() {
|
|
105
|
+
return /* @__PURE__ */ jsxs(
|
|
106
|
+
"svg",
|
|
107
|
+
{
|
|
108
|
+
width: 16,
|
|
109
|
+
height: 16,
|
|
110
|
+
viewBox: "0 0 24 24",
|
|
111
|
+
fill: "none",
|
|
112
|
+
stroke: "currentColor",
|
|
113
|
+
strokeWidth: 2,
|
|
114
|
+
strokeLinecap: "round",
|
|
115
|
+
strokeLinejoin: "round",
|
|
116
|
+
"aria-hidden": true,
|
|
117
|
+
children: [
|
|
118
|
+
/* @__PURE__ */ jsx("path", { d: "M4 4h16v16H4z" }),
|
|
119
|
+
/* @__PURE__ */ jsx("path", { d: "M15 4v16" })
|
|
120
|
+
]
|
|
121
|
+
}
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
function FoldButton({ folded, onToggle }) {
|
|
125
|
+
return /* @__PURE__ */ jsx(
|
|
126
|
+
"button",
|
|
127
|
+
{
|
|
128
|
+
type: "button",
|
|
129
|
+
className: classes.fold,
|
|
130
|
+
"aria-expanded": !folded,
|
|
131
|
+
"aria-label": folded ? "Expand panel" : "Collapse panel",
|
|
132
|
+
onClick: onToggle,
|
|
133
|
+
children: /* @__PURE__ */ jsx(IconAsideFold, { folded })
|
|
134
|
+
}
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
function PageAside(props) {
|
|
138
|
+
assertRequiredProps("PageAside", props, ["title"], {
|
|
139
|
+
title: "it names the region \u2014 it is the header text AND the `aria-label` on the landmark."
|
|
140
|
+
});
|
|
141
|
+
const { title, persistKey, defaultFolded = false, children, className, style, classNames } = props;
|
|
142
|
+
const { target, inShell, claim, publishFolded } = useContext(AsideContext);
|
|
143
|
+
const { host: panelHost, claim: claimPanel, target: panelTarget } = useAsidePanelSlot();
|
|
144
|
+
const theme = useMantineTheme();
|
|
145
|
+
const desktop = useMediaQueryMatches(`(min-width: ${theme.breakpoints.sm})`, true);
|
|
146
|
+
const [folded, setFolded] = usePersistedOrLocal({
|
|
147
|
+
scope: "aside",
|
|
148
|
+
persistKey,
|
|
149
|
+
initial: defaultFolded
|
|
150
|
+
});
|
|
151
|
+
const portalled = inShell && desktop;
|
|
152
|
+
const projected = !portalled && panelHost;
|
|
153
|
+
const [settled, setSettled] = useState(false);
|
|
154
|
+
const panelClaim = useMemo(() => ({ title, icon: /* @__PURE__ */ jsx(IconAsidePanel, {}) }), [title]);
|
|
155
|
+
useIsomorphicLayoutEffect(() => {
|
|
156
|
+
setSettled(true);
|
|
157
|
+
}, []);
|
|
158
|
+
useIsomorphicLayoutEffect(() => {
|
|
159
|
+
if (!portalled) return;
|
|
160
|
+
return claim();
|
|
161
|
+
}, [portalled, claim]);
|
|
162
|
+
useIsomorphicLayoutEffect(() => {
|
|
163
|
+
if (!portalled) return;
|
|
164
|
+
publishFolded(folded);
|
|
165
|
+
}, [portalled, folded, publishFolded]);
|
|
166
|
+
useIsomorphicLayoutEffect(() => {
|
|
167
|
+
if (!projected) return;
|
|
168
|
+
return claimPanel(panelClaim);
|
|
169
|
+
}, [projected, panelClaim, claimPanel]);
|
|
170
|
+
const panel = /* @__PURE__ */ jsx(
|
|
171
|
+
"section",
|
|
172
|
+
{
|
|
173
|
+
className: cx(classes.panel, classNames?.root, className),
|
|
174
|
+
"data-basalt-page-aside": portalled ? "shell" : "standalone",
|
|
175
|
+
"aria-label": title,
|
|
176
|
+
...style !== void 0 && { style },
|
|
177
|
+
children: portalled && folded ? /* @__PURE__ */ jsx("div", { className: classes.rail, children: /* @__PURE__ */ jsx(FoldButton, { folded: true, onToggle: () => setFolded(false) }) }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
178
|
+
/* @__PURE__ */ jsxs("div", { className: cx(classes.header, classNames?.header), "data-basalt-page-aside-header": "", children: [
|
|
179
|
+
/* @__PURE__ */ jsx("span", { className: classes.title, children: title }),
|
|
180
|
+
portalled && /* @__PURE__ */ jsx(FoldButton, { folded: false, onToggle: () => setFolded(true) })
|
|
181
|
+
] }),
|
|
182
|
+
/* @__PURE__ */ jsx("div", { className: cx(classes.body, classNames?.body), children: /* @__PURE__ */ jsx(FilterSetScope, { surface: "panel", registry: null, children }) })
|
|
183
|
+
] })
|
|
184
|
+
}
|
|
185
|
+
);
|
|
186
|
+
if (projected) {
|
|
187
|
+
if (panelTarget === null) return null;
|
|
188
|
+
return createPortal(
|
|
189
|
+
/* @__PURE__ */ jsx(FilterSetScope, { surface: "sheet", registry: null, children }),
|
|
190
|
+
panelTarget
|
|
191
|
+
);
|
|
192
|
+
}
|
|
193
|
+
if (!portalled) return inShell && !settled ? null : panel;
|
|
194
|
+
if (target === null) return null;
|
|
195
|
+
return createPortal(panel, target);
|
|
196
|
+
}
|
|
197
|
+
export {
|
|
198
|
+
AsideOutlet,
|
|
199
|
+
AsideProvider,
|
|
200
|
+
PageAside,
|
|
201
|
+
useAsideRegion
|
|
202
|
+
};
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* `PageAside` chrome (`docs/ASIDE-SPEC.md` §0, wave 1).
|
|
3
|
+
*
|
|
4
|
+
* Two forms, one class set, told apart by `data-basalt-page-aside`: `"shell"` is the portalled
|
|
5
|
+
* panel that fills `AppShell.Aside` and owns the region's paint, `"standalone"` is the in-flow node
|
|
6
|
+
* a phone (or a shell-less app) renders where the page wrote it — plain flow content, no surface of
|
|
7
|
+
* its own, exactly like the block that used to live in the page's second column.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/* The `AppShell.Aside` inner node the panel portals into — a bare box, so an UNCLAIMED region
|
|
11
|
+
* paints nothing at all (law C14). Every pixel of chrome belongs to `.panel` below. */
|
|
12
|
+
.outlet {
|
|
13
|
+
display: flex;
|
|
14
|
+
height: 100%;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.panel {
|
|
18
|
+
display: flex;
|
|
19
|
+
flex-direction: column;
|
|
20
|
+
min-width: 0;
|
|
21
|
+
gap: var(--vx-space-stack-md, 0.75rem);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/*
|
|
25
|
+
* The portalled form. Paints only the page background (the same surface the sidebar and the sticky
|
|
26
|
+
* page bar sit on — neither declares one, both inherit the body). The leading edge is the
|
|
27
|
+
* `AppShell.Aside` region seam (docs/DESIGN-SPEC.md §5) — same token, same pixel, now produced by
|
|
28
|
+
* the same rule as the other three region edges, so two 1px lines can never sit side by side.
|
|
29
|
+
*/
|
|
30
|
+
.panel[data-basalt-page-aside='shell'] {
|
|
31
|
+
flex: 1;
|
|
32
|
+
height: 100%;
|
|
33
|
+
gap: 0;
|
|
34
|
+
background-color: var(--vx-surface-bg);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/*
|
|
38
|
+
* Header row — the title (`.title` below, shared by both forms), plus the fold toggle in the
|
|
39
|
+
* portalled form only, at `sectionHeaderHeight` (standalone) / the header band (shell, below).
|
|
40
|
+
* Same horizontal inset every sidebar region aligns to.
|
|
41
|
+
*/
|
|
42
|
+
.header {
|
|
43
|
+
display: flex;
|
|
44
|
+
flex: none;
|
|
45
|
+
align-items: center;
|
|
46
|
+
justify-content: space-between;
|
|
47
|
+
gap: var(--vx-space-control-gap);
|
|
48
|
+
min-height: var(--vx-space-section-header-height, 2.25rem);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/* The portalled form's band matches the SHELL-OWNED page-bar band exactly, whenever one is
|
|
52
|
+
* present (`--basalt-page-bar-h`, `docs/DESIGN-SPEC.md` §5) — not a fixed 48px. `PageBar`
|
|
53
|
+
* publishes that var on `documentElement` from a ResizeObserver on the band's own content
|
|
54
|
+
* (`shell/page-bar.tsx`), so it inherits down to every descendant, this header included, with no
|
|
55
|
+
* extra wiring. Two seams, one line: MEASURED on `/cbbi` 1440x900, the band's outer edge (its own
|
|
56
|
+
* `border-bottom`, `app-main.module.css` `.band:not(:empty)`) used to sit at y87 while this header
|
|
57
|
+
* (unconditionally `var(--app-shell-header-height)`, 48px) sat at y96 — 9px apart.
|
|
58
|
+
*
|
|
59
|
+
* The `+ 1px` is not decorative. `--basalt-page-bar-h` measures the band's CONTENT box only (the
|
|
60
|
+
* portalled row-2 wrapper `page-bar.tsx` attaches its ResizeObserver to); the band's own
|
|
61
|
+
* `border-bottom` is drawn OUTSIDE that box, on a plain `height: auto` element, so it ADDS a pixel
|
|
62
|
+
* the published var never counted. This header is the opposite shape — an explicit `min-height`
|
|
63
|
+
* under the page's global `box-sizing: border-box` reset — so its OWN `border-bottom` is absorbed
|
|
64
|
+
* INSIDE whatever height is declared instead of adding on top. Feeding the raw var straight in
|
|
65
|
+
* therefore undershoots by exactly the band's border: `calc(38px + 1px)` = 39px, matching the
|
|
66
|
+
* band's true painted height, while the no-band fallback nets out unchanged (`calc((48px - 1px) +
|
|
67
|
+
* 1px)` = 48px) because the same `+ 1px` also wraps that branch. Without a `PageBar` there is no
|
|
68
|
+
* band seam to align to, so the header keeps closing the ordinary 48px top belt
|
|
69
|
+
* (`docs/DESIGN-SPEC.md` §5) the header and sidebar-brand bands also close.
|
|
70
|
+
*/
|
|
71
|
+
.panel[data-basalt-page-aside='shell'] .header {
|
|
72
|
+
padding-inline: var(--vx-space-row-inset-x);
|
|
73
|
+
min-height: calc(
|
|
74
|
+
var(
|
|
75
|
+
--basalt-page-bar-h,
|
|
76
|
+
calc(var(--app-shell-header-height, var(--vx-space-section-header-height, 2.25rem)) - 1px)
|
|
77
|
+
) +
|
|
78
|
+
1px
|
|
79
|
+
);
|
|
80
|
+
border-bottom: 1px solid var(--vx-divider);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/* A real title (docs/DESIGN-SPEC.md §5): mirrors `widget-header.module.css` `.heading` and the
|
|
84
|
+
* breadcrumb's current-page treatment — the three 48px bands each carry one 550-weight head-font
|
|
85
|
+
* name. */
|
|
86
|
+
.title {
|
|
87
|
+
font-family: var(--basalt-font-head);
|
|
88
|
+
font-size: var(--vx-text-md);
|
|
89
|
+
font-weight: 550;
|
|
90
|
+
font-stretch: 88%;
|
|
91
|
+
color: var(--vx-ink);
|
|
92
|
+
overflow: hidden;
|
|
93
|
+
text-overflow: ellipsis;
|
|
94
|
+
white-space: nowrap;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/* The body scrolls, the header does not — `min-height: 0` is what lets a flex child shrink below
|
|
98
|
+
* its content and actually become a scroll box. In flow (standalone) it is plain content: no
|
|
99
|
+
* scroll region, no inset, so it sits in the page's own rhythm. */
|
|
100
|
+
.body {
|
|
101
|
+
display: flex;
|
|
102
|
+
flex-direction: column;
|
|
103
|
+
gap: var(--vx-space-stack-md, 0.75rem);
|
|
104
|
+
min-width: 0;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.panel[data-basalt-page-aside='shell'] .body {
|
|
108
|
+
flex: 1;
|
|
109
|
+
min-height: 0;
|
|
110
|
+
overflow-y: auto;
|
|
111
|
+
padding-inline: var(--vx-space-row-inset-x);
|
|
112
|
+
padding-block: var(--vx-space-stack-md, 0.75rem);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/*
|
|
116
|
+
* FLUSH chrome (`docs/ASIDE-SPEC.md` §3, wave 2). An aside's groups separate with a hairline, not
|
|
117
|
+
* with cards — Lightroom, not a dashboard: at ~300px a stack of bordered, inset panels spends most
|
|
118
|
+
* of the column on its own edges, and the reader's job here is comparing rows across groups rather
|
|
119
|
+
* than reading one card at a time.
|
|
120
|
+
*
|
|
121
|
+
* It is drawn HERE and not in `Section`, on the `.body`'s own children, for two reasons. The
|
|
122
|
+
* component does not know where it is mounted (there is no aside context and no prop that would
|
|
123
|
+
* tell it), and a body child is not necessarily a `Section` at all — a bare `PanelRow`, a chart, a
|
|
124
|
+
* paragraph all take the same rhythm. `> * + *`, so the first child never draws a rule under the
|
|
125
|
+
* header that already bounds it.
|
|
126
|
+
*/
|
|
127
|
+
.body > * + * {
|
|
128
|
+
border-top: 1px solid var(--vx-divider);
|
|
129
|
+
padding-top: var(--vx-space-stack-md, 0.75rem);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/* The folded rail: one button, top-aligned, centred in the rail's own width. */
|
|
133
|
+
.rail {
|
|
134
|
+
display: flex;
|
|
135
|
+
flex: 1;
|
|
136
|
+
justify-content: center;
|
|
137
|
+
align-items: flex-start;
|
|
138
|
+
padding-top: var(--vx-space-stack-xs, 0.25rem);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/*
|
|
142
|
+
* The fold toggle — a plain control sized to the `ctl` tier by hand, verbatim from `Section`'s
|
|
143
|
+
* chevron (`section/section.module.css`), including the `calc(<rem> * var(--mantine-scale))`
|
|
144
|
+
* reconstruction that keeps it tracking a scaled Button beside it. No `< sm` hit-area overlay
|
|
145
|
+
* (unlike that chevron): the toggle exists only in the portalled form, which is `sm` and up.
|
|
146
|
+
*/
|
|
147
|
+
/* Deliberately NOT shared with `section/section.module.css`'s `.chevron`, which it echoes: the two
|
|
148
|
+
* live in different CSS modules and this repo keeps one module per component, so sharing would need
|
|
149
|
+
* a third module + `composes` across that boundary. They also differ where it counts — `.fold` is
|
|
150
|
+
* `--vx-faint` and draws no rotation or C15 touch overlay, because the aside's fold is a desktop-
|
|
151
|
+
* only control. */
|
|
152
|
+
.fold {
|
|
153
|
+
position: relative;
|
|
154
|
+
display: inline-flex;
|
|
155
|
+
flex: none;
|
|
156
|
+
align-items: center;
|
|
157
|
+
justify-content: center;
|
|
158
|
+
width: calc(var(--vx-space-control-height-ctl) * var(--mantine-scale, 1));
|
|
159
|
+
height: calc(var(--vx-space-control-height-ctl) * var(--mantine-scale, 1));
|
|
160
|
+
appearance: none;
|
|
161
|
+
margin: 0;
|
|
162
|
+
padding: 0;
|
|
163
|
+
border: none;
|
|
164
|
+
background: none;
|
|
165
|
+
border-radius: var(--vx-radius-ctrl);
|
|
166
|
+
color: var(--vx-faint);
|
|
167
|
+
cursor: pointer;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.fold:hover,
|
|
171
|
+
.fold:focus-visible {
|
|
172
|
+
color: var(--vx-ink);
|
|
173
|
+
background: var(--vx-surface-subtle);
|
|
174
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed CSS-module declaration (the S4 CSS-modules path). Named string props — not an index
|
|
3
|
+
* signature — so dot access stays verbatim under the package's strict flags.
|
|
4
|
+
*/
|
|
5
|
+
declare const classes: {
|
|
6
|
+
readonly outlet: string
|
|
7
|
+
readonly panel: string
|
|
8
|
+
readonly header: string
|
|
9
|
+
readonly title: string
|
|
10
|
+
readonly body: string
|
|
11
|
+
readonly rail: string
|
|
12
|
+
readonly fold: string
|
|
13
|
+
}
|
|
14
|
+
export default classes
|
package/dist/shell/page-bar.d.ts
CHANGED
|
@@ -1,8 +1,22 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
|
+
import type { BasaltProps, SlotStylesProps } from '../common/props.js';
|
|
2
3
|
import type { ActionGroupProps, BarAction, GlobalAction } from '../controls/actions.js';
|
|
3
4
|
import type { SyncButtonProps } from '../controls/sync-button.js';
|
|
4
5
|
/** The custom property row 2's measured height is published on. */
|
|
5
6
|
export declare const PAGE_BAR_HEIGHT_VAR = "--basalt-page-bar-h";
|
|
7
|
+
/**
|
|
8
|
+
* What a `PageAside` publishes when it projects itself into row 2 below `sm`
|
|
9
|
+
* (`docs/ASIDE-SPEC.md` §0 "Desktop and mobile are one declaration"). Metadata only — the aside's
|
|
10
|
+
* CHILDREN never travel through this context: they are portalled into the sheet's own node
|
|
11
|
+
* ({@link PageBarSlots.panelTarget}), because a `ReactNode` in state would be a fresh object on
|
|
12
|
+
* every parent render and the claim effect would loop.
|
|
13
|
+
*/
|
|
14
|
+
export type AsidePanelClaim = {
|
|
15
|
+
/** The aside's `title` — the pill's accessible name and the sheet's heading. */
|
|
16
|
+
readonly title: string;
|
|
17
|
+
/** The aside's own glyph, supplied by the claimant so this module owns no aside iconography. */
|
|
18
|
+
readonly icon: ReactNode;
|
|
19
|
+
};
|
|
6
20
|
/**
|
|
7
21
|
* Internal — mounted by `BasaltShell`. Owns the portal target, and the single-kebab claim that
|
|
8
22
|
* lets the shell fall back to its OWN kebab on a route that renders no `PageBar`.
|
|
@@ -15,9 +29,48 @@ export declare function PageBarProvider({ globalActions, children, }: {
|
|
|
15
29
|
export declare function PageBarOutlet({ className }: {
|
|
16
30
|
className?: string;
|
|
17
31
|
}): import("react").JSX.Element;
|
|
32
|
+
/**
|
|
33
|
+
* Internal — the BAND between the header and the scrollport that the active page's row 2 portals
|
|
34
|
+
* into. `BasaltShell` mounts exactly one.
|
|
35
|
+
*
|
|
36
|
+
* It is rendered unconditionally and is a zero-height, seam-less box while no `PageBar` claims it:
|
|
37
|
+
* law C14 says an empty home renders nothing, and an outlet that only existed once something was
|
|
38
|
+
* inside it could not be a portal target in the first place. The `:empty` seam rule in
|
|
39
|
+
* `app-main.module.css` is what makes "nothing mounted" and "nothing painted" the same state.
|
|
40
|
+
*/
|
|
41
|
+
export declare function PageBarBandOutlet({ className }: {
|
|
42
|
+
className?: string;
|
|
43
|
+
}): import("react").JSX.Element;
|
|
18
44
|
/** Internal — `true` while a page's `ActionGroup` owns the header's one mobile kebab. */
|
|
19
45
|
export declare function usePageKebabClaimed(): boolean;
|
|
20
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Internal — the seam `PageAside` projects itself through below `sm` (`docs/ASIDE-SPEC.md` §0).
|
|
48
|
+
* `host` says whether there is a row 2 to hang the pill off at all; `claim` publishes the aside's
|
|
49
|
+
* title and glyph; `target` is the node inside the opened sheet its children portal into.
|
|
50
|
+
*/
|
|
51
|
+
export declare function useAsidePanelSlot(): {
|
|
52
|
+
host: boolean;
|
|
53
|
+
claim: (panel: AsidePanelClaim) => () => void;
|
|
54
|
+
target: HTMLElement | null;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* The boxes `PageBar` paints (`common/props.ts`). `root` is whichever element is the bar's own
|
|
58
|
+
* outer node for the active mode — the shell-less standalone bar, or row 2's wrapper inside the
|
|
59
|
+
* shell's band (row 1 portals into the app-shell header and has no wrapper of PageBar's own,
|
|
60
|
+
* which is what `row1`/`row2` target directly).
|
|
61
|
+
*
|
|
62
|
+
* `className`/`classNames.root` land on that same root — the shell-less
|
|
63
|
+
* `<div data-basalt-page-bar="standalone">`, or row 2's band wrapper
|
|
64
|
+
* (`data-basalt-page-bar="shell"`) inside a `BasaltShell`. The one thing only the consumer's own
|
|
65
|
+
* layout knows is bleeding the sticky bar across its container's gutters
|
|
66
|
+
* (`margin-inline: calc(var(--gutter) * -1); padding-inline: var(--gutter)`) for the shell-less
|
|
67
|
+
* form. Scope that CSS through this class, not through a global `[data-basalt-page-bar]` selector:
|
|
68
|
+
* the data attributes are stable enough to READ (a shell-less consumer can style
|
|
69
|
+
* `[data-basalt-page-bar="standalone"]` in a pinch, and this doc is the promise that the value
|
|
70
|
+
* stays), but a global rule reaches every page in the app including the ones that want neither.
|
|
71
|
+
*/
|
|
72
|
+
export type PageBarSlot = 'root' | 'row1' | 'row2';
|
|
73
|
+
export type PageBarProps = BasaltProps & SlotStylesProps<PageBarSlot> & {
|
|
21
74
|
/**
|
|
22
75
|
* Read only when there is no `BasaltShell` outlet (a shell-less app such as linewatch). Inside a
|
|
23
76
|
* shell the breadcrumb names the page and this is ignored.
|
|
@@ -33,19 +86,6 @@ export type PageBarProps = {
|
|
|
33
86
|
filtersEnd?: BarAction[];
|
|
34
87
|
/** One `ViewTabs`. */
|
|
35
88
|
tabs?: ReactNode;
|
|
36
|
-
/**
|
|
37
|
-
* Added to the bar's ROOT — the shell-less `<div data-basalt-page-bar="standalone">`, or row 2's
|
|
38
|
-
* sticky wrapper (`data-basalt-page-bar="shell"`) inside a `BasaltShell`. The seam for the two
|
|
39
|
-
* things only the consumer's own layout knows: bleeding the sticky bar across its container's
|
|
40
|
-
* gutters (`margin-inline: calc(var(--gutter) * -1); padding-inline: var(--gutter)`) and drawing
|
|
41
|
-
* a hairline under it (`border-bottom: 1px solid var(--vx-border)`).
|
|
42
|
-
*
|
|
43
|
-
* Scope that CSS through this class, not through a global `[data-basalt-page-bar]` selector: the
|
|
44
|
-
* data attributes are stable enough to READ (a shell-less consumer can style
|
|
45
|
-
* `[data-basalt-page-bar="standalone"]` in a pinch, and this doc is the promise that the value
|
|
46
|
-
* stays), but a global rule reaches every page in the app including the ones that want neither.
|
|
47
|
-
*/
|
|
48
|
-
className?: string;
|
|
49
89
|
};
|
|
50
|
-
export declare function PageBar({ title, icon, actions, sync, filters, filtersEnd, tabs, className, }: PageBarProps): ReactNode;
|
|
90
|
+
export declare function PageBar({ title, icon, actions, sync, filters, filtersEnd, tabs, className, style, classNames, }: PageBarProps): ReactNode;
|
|
51
91
|
//# sourceMappingURL=page-bar.d.ts.map
|