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
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* useConnectivity — reads the aggregated connectivity status from ConnectivityContext.
|
|
3
3
|
*
|
|
4
|
-
* Throws if used outside a ConnectivityProvider.
|
|
5
|
-
*
|
|
4
|
+
* Throws if used outside a ConnectivityProvider. `BasaltProvider` auto-mounts
|
|
5
|
+
* `ConnectivityProvider`, so this hook works with zero setup in the common case; the removed
|
|
6
|
+
* `useOnlineStatus` (formerly `basalt-ui/state`) is replaced by this hook (see MIGRATING.md).
|
|
6
7
|
*
|
|
7
8
|
* @example
|
|
8
9
|
* const { status, details } = useConnectivity()
|
|
@@ -17,6 +17,11 @@
|
|
|
17
17
|
grid-template-columns: minmax(0, var(--vx-prose-measure));
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
+
/* The literal below MUST equal `BREAKPOINTS.article` (src/tokens/index.ts) — a `@media`
|
|
21
|
+
* condition is resolved before custom properties exist, so `max-width: var(--x)` is invalid CSS
|
|
22
|
+
* and a stylesheet with a responsive rule has no choice but to write the number. The token is the
|
|
23
|
+
* readable half; `article-layout.breakpoint.test.ts` asserts the two agree, the same
|
|
24
|
+
* "literal must match the token" idiom as `styles.floor.test.ts`. Change both or neither. */
|
|
20
25
|
@media (max-width: 1200px) {
|
|
21
26
|
.root {
|
|
22
27
|
grid-template-columns: minmax(0, var(--vx-prose-measure));
|
|
@@ -72,10 +77,12 @@
|
|
|
72
77
|
.tocRail {
|
|
73
78
|
grid-column: 2;
|
|
74
79
|
position: sticky;
|
|
75
|
-
/*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
80
|
+
/* The rail sticks inside whatever scrolls it — `AppShell.Main` in a shell, the document without
|
|
81
|
+
* one — and NOTHING overhangs that box: the app header and `PageBar` row 2's band are both shell
|
|
82
|
+
* regions rendered outside the scrollport (`shell/app-main.module.css`). So the offset is
|
|
83
|
+
* `--vx-space-sticky-header-clearance` and nothing else, which is exactly what that token means
|
|
84
|
+
* since it stopped carrying a header height (tokens/palette.ts, `deriveSpacing`;
|
|
85
|
+
* docs/CONTENT-SPEC.md §5). */
|
|
79
86
|
top: var(--vx-space-sticky-header-clearance);
|
|
80
87
|
align-self: start;
|
|
81
88
|
}
|
package/src/content/callout.tsx
CHANGED
|
@@ -8,20 +8,25 @@
|
|
|
8
8
|
* <p>This endpoint is rate-limited to 60 requests/minute.</p>
|
|
9
9
|
* </Callout>
|
|
10
10
|
*/
|
|
11
|
-
import type {
|
|
11
|
+
import type { ReactNode } from 'react'
|
|
12
|
+
import { cx } from '../common/props'
|
|
13
|
+
import type { BasaltProps } from '../common/props'
|
|
12
14
|
import classes from './callout.module.css'
|
|
13
15
|
|
|
16
|
+
/**
|
|
17
|
+
* One of the five `Tone` forks (`common/props.ts`) — kept as its own type because `info` has no
|
|
18
|
+
* `Tone` equivalent: `good`/`warn`/`bad` line up with `Tone` exactly, `info` is the extra kind a
|
|
19
|
+
* callout needs that a status badge does not.
|
|
20
|
+
*/
|
|
14
21
|
export type CalloutKind = 'info' | 'good' | 'warn' | 'bad'
|
|
15
22
|
|
|
16
|
-
export type CalloutProps = {
|
|
23
|
+
export type CalloutProps = BasaltProps & {
|
|
17
24
|
/** Semantic kind — drives the rail/tint color and the default icon. Default `'info'`. */
|
|
18
25
|
readonly kind?: CalloutKind
|
|
19
26
|
readonly title?: string
|
|
20
27
|
/** Overrides the default per-kind icon. Only rendered alongside a `title`. */
|
|
21
28
|
readonly icon?: ReactNode
|
|
22
29
|
readonly children: ReactNode
|
|
23
|
-
readonly className?: string
|
|
24
|
-
readonly style?: CSSProperties
|
|
25
30
|
}
|
|
26
31
|
|
|
27
32
|
const KIND_CLASS: Record<CalloutKind, string> = {
|
|
@@ -80,10 +85,11 @@ const DEFAULT_ICON: Record<CalloutKind, ReactNode> = {
|
|
|
80
85
|
}
|
|
81
86
|
|
|
82
87
|
export function Callout({ kind = 'info', title, icon, children, className, style }: CalloutProps) {
|
|
83
|
-
const rootClass = [classes.root, KIND_CLASS[kind], className].filter(Boolean).join(' ')
|
|
84
|
-
|
|
85
88
|
return (
|
|
86
|
-
<div
|
|
89
|
+
<div
|
|
90
|
+
className={cx(classes.root, KIND_CLASS[kind], className)}
|
|
91
|
+
{...(style !== undefined && { style })}
|
|
92
|
+
>
|
|
87
93
|
{title !== undefined && (
|
|
88
94
|
<div className={classes.titleRow}>
|
|
89
95
|
<span className={classes.icon}>{icon ?? DEFAULT_ICON[kind]}</span>
|
package/src/content/guide.tsx
CHANGED
|
@@ -18,6 +18,8 @@ import type { ReactNode } from 'react'
|
|
|
18
18
|
import { ActionIcon, Button, Drawer } from '@mantine/core'
|
|
19
19
|
import type { DrawerProps } from '@mantine/core'
|
|
20
20
|
import { useDisclosure } from '@mantine/hooks'
|
|
21
|
+
import type { BasaltProps } from '../common/props'
|
|
22
|
+
import { cx } from '../common/props'
|
|
21
23
|
import classes from './guide.module.css'
|
|
22
24
|
import type { ArticleNavTarget } from './article-layout'
|
|
23
25
|
import { Markdown } from './markdown'
|
|
@@ -54,7 +56,7 @@ function GuideGlyph() {
|
|
|
54
56
|
)
|
|
55
57
|
}
|
|
56
58
|
|
|
57
|
-
export type GuideDrawerProps = {
|
|
59
|
+
export type GuideDrawerProps = BasaltProps & {
|
|
58
60
|
readonly opened: boolean
|
|
59
61
|
readonly onClose: () => void
|
|
60
62
|
readonly title: string
|
|
@@ -78,6 +80,8 @@ export function GuideDrawer({
|
|
|
78
80
|
fullPageHref,
|
|
79
81
|
renderLink = defaultRenderLink,
|
|
80
82
|
size = 440,
|
|
83
|
+
className,
|
|
84
|
+
style,
|
|
81
85
|
}: GuideDrawerProps) {
|
|
82
86
|
return (
|
|
83
87
|
<Drawer
|
|
@@ -86,6 +90,8 @@ export function GuideDrawer({
|
|
|
86
90
|
position="right"
|
|
87
91
|
size={size}
|
|
88
92
|
title={<span className={classes.drawerTitle}>{title}</span>}
|
|
93
|
+
{...(className !== undefined && { className })}
|
|
94
|
+
{...(style !== undefined && { style })}
|
|
89
95
|
>
|
|
90
96
|
<div className={classes.body}>
|
|
91
97
|
{markdown !== undefined ? (
|
|
@@ -111,7 +117,7 @@ export function GuideDrawer({
|
|
|
111
117
|
)
|
|
112
118
|
}
|
|
113
119
|
|
|
114
|
-
export type GuideLinkProps = {
|
|
120
|
+
export type GuideLinkProps = BasaltProps & {
|
|
115
121
|
/** Trigger label. Default `'Guide'`. */
|
|
116
122
|
readonly label?: string
|
|
117
123
|
readonly title: string
|
|
@@ -131,6 +137,8 @@ export function GuideLink({
|
|
|
131
137
|
fullPageHref,
|
|
132
138
|
renderLink,
|
|
133
139
|
iconOnly = false,
|
|
140
|
+
className,
|
|
141
|
+
style,
|
|
134
142
|
}: GuideLinkProps) {
|
|
135
143
|
const [opened, { open, close }] = useDisclosure(false)
|
|
136
144
|
|
|
@@ -141,9 +149,10 @@ export function GuideLink({
|
|
|
141
149
|
variant="subtle"
|
|
142
150
|
color="gray"
|
|
143
151
|
size="sm"
|
|
144
|
-
className={classes.trigger}
|
|
152
|
+
className={cx(classes.trigger, className)}
|
|
145
153
|
onClick={open}
|
|
146
154
|
aria-label={label}
|
|
155
|
+
{...(style !== undefined && { style })}
|
|
147
156
|
>
|
|
148
157
|
<GuideGlyph />
|
|
149
158
|
</ActionIcon>
|
|
@@ -152,9 +161,10 @@ export function GuideLink({
|
|
|
152
161
|
variant="subtle"
|
|
153
162
|
color="gray"
|
|
154
163
|
size="compact-xs"
|
|
155
|
-
className={classes.trigger}
|
|
164
|
+
className={cx(classes.trigger, className)}
|
|
156
165
|
leftSection={<GuideGlyph />}
|
|
157
166
|
onClick={open}
|
|
167
|
+
{...(style !== undefined && { style })}
|
|
158
168
|
>
|
|
159
169
|
<span className={classes.triggerLabel}>{label}</span>
|
|
160
170
|
</Button>
|
|
@@ -19,18 +19,25 @@
|
|
|
19
19
|
* <h2 id={id}>Setup<HeadingAnchor id={id} /></h2>
|
|
20
20
|
* </Prose>
|
|
21
21
|
*/
|
|
22
|
+
import type { BasaltProps } from '../common/props'
|
|
23
|
+
import { cx } from '../common/props'
|
|
22
24
|
import { CopyAction } from './copy-action'
|
|
23
25
|
import { LinkGlyph } from './glyphs'
|
|
24
26
|
import classes from './prose.module.css'
|
|
25
27
|
|
|
26
|
-
export type HeadingAnchorProps = {
|
|
28
|
+
export type HeadingAnchorProps = BasaltProps & {
|
|
27
29
|
/** The heading's `id` — the fragment the copied URL points at. */
|
|
28
30
|
readonly id: string
|
|
29
31
|
/** Accessible name for the trigger. */
|
|
30
32
|
readonly label?: string
|
|
31
33
|
}
|
|
32
34
|
|
|
33
|
-
export function HeadingAnchor({
|
|
35
|
+
export function HeadingAnchor({
|
|
36
|
+
id,
|
|
37
|
+
label = 'Copy link to section',
|
|
38
|
+
className,
|
|
39
|
+
style,
|
|
40
|
+
}: HeadingAnchorProps) {
|
|
34
41
|
// Resolved at click time, never at render: the component is SSR-rendered (no `window`), and the
|
|
35
42
|
// live search/pathname is the honest basis for the link a reader is asking to share.
|
|
36
43
|
const resolveUrl = () => {
|
|
@@ -41,7 +48,11 @@ export function HeadingAnchor({ id, label = 'Copy link to section' }: HeadingAnc
|
|
|
41
48
|
// The span owns placement + the hover reveal; CopyAction owns the affordance itself. It also
|
|
42
49
|
// carries `data-heading-anchor`, which `TableOfContents` strips when reading a heading's label.
|
|
43
50
|
return (
|
|
44
|
-
<span
|
|
51
|
+
<span
|
|
52
|
+
className={cx(classes.headingAnchor, className)}
|
|
53
|
+
data-heading-anchor
|
|
54
|
+
{...(style !== undefined && { style })}
|
|
55
|
+
>
|
|
45
56
|
<CopyAction
|
|
46
57
|
value={resolveUrl}
|
|
47
58
|
label="Copy link"
|
package/src/content/index.ts
CHANGED
|
@@ -27,6 +27,8 @@ export type { TableOfContentsProps, TocItem } from './toc'
|
|
|
27
27
|
export { ReadingProgress } from './reading-progress'
|
|
28
28
|
export type { ReadingProgressProps } from './reading-progress'
|
|
29
29
|
|
|
30
|
+
// `SlugTracker` is a PascalCase utility class, not a component — see its own JSDoc `@remarks`
|
|
31
|
+
// (isomorphic harness finding F-DET-1). `new SlugTracker()`, never `<SlugTracker />`.
|
|
30
32
|
export { headingSlug, readingTime, SlugTracker } from './slug'
|
|
31
33
|
export type { ReadingTime } from './slug'
|
|
32
34
|
|
package/src/content/markdown.tsx
CHANGED
|
@@ -394,6 +394,7 @@ const LazyReactMarkdown = lazy(() =>
|
|
|
394
394
|
})
|
|
395
395
|
.catch(() => ({ default: ({ text }: BridgeProps) => <PlainTextFallback text={text} /> })),
|
|
396
396
|
)
|
|
397
|
+
Object.assign(LazyReactMarkdown, { displayName: 'LazyReactMarkdown' })
|
|
397
398
|
|
|
398
399
|
// ── Streaming block rendering ──────────────────────────────────────────────────────────────────
|
|
399
400
|
|
|
@@ -443,6 +444,7 @@ function BlockRenderer({
|
|
|
443
444
|
// Referential stability of `components`/`urlTransform` (both memoized by the caller) is what makes
|
|
444
445
|
// this memo skip re-rendering an unchanged settled block — see the module JSDoc.
|
|
445
446
|
const MemoizedBlock = memo(BlockRenderer)
|
|
447
|
+
MemoizedBlock.displayName = 'MemoizedBlock'
|
|
446
448
|
|
|
447
449
|
// ── Lazy-loaded remend ─────────────────────────────────────────────────────────────────────────
|
|
448
450
|
|
|
@@ -32,16 +32,18 @@
|
|
|
32
32
|
margin-bottom: 0;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
/*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* `--basalt-page-bar-h`
|
|
39
|
-
*
|
|
40
|
-
*
|
|
35
|
+
/* Anchor clearance. One value on every viewport, and NO chrome height in it: an anchor scroll
|
|
36
|
+
* happens inside the scrollport, and since `BasaltShell` made `AppShell.Main` that box both the
|
|
37
|
+
* AppShell header and `PageBar` row 2's band are regions rendered OUTSIDE it
|
|
38
|
+
* (`shell/app-main.module.css`) — the `--basalt-page-bar-h` term this rule used to add would now
|
|
39
|
+
* push every heading a band below where it belongs, and an `--app-shell-header-height` term (gone
|
|
40
|
+
* since the controls waves) would add a header on top of that. What is left is breathing room,
|
|
41
|
+
* which is precisely what `--vx-space-sticky-header-clearance` means now (tokens/palette.ts). A
|
|
42
|
+
* `./content` consumer with its OWN fixed chrome above the scrollport overrides that token. */
|
|
41
43
|
.root h2,
|
|
42
44
|
.root h3,
|
|
43
45
|
.root h4 {
|
|
44
|
-
scroll-margin-top:
|
|
46
|
+
scroll-margin-top: var(--vx-space-sticky-header-clearance);
|
|
45
47
|
}
|
|
46
48
|
|
|
47
49
|
/* Headings share family/weight/color across densities; size + margin differ below. */
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* ReadingProgress — an opt-in, scroll-driven 2px top bar (docs/CONTENT-SPEC.md §3/§7).
|
|
3
3
|
*
|
|
4
|
-
* Progress is how far `target` (default: the whole
|
|
4
|
+
* Progress is how far `target` (default: the whole scrollport) has been scrolled through the
|
|
5
5
|
* viewport — 0 at the top of `target`, 1 once its bottom edge has cleared the viewport.
|
|
6
6
|
*
|
|
7
|
+
* WHICH BOX SCROLLS is resolved, never assumed: inside `BasaltShell` the scroller is
|
|
8
|
+
* `AppShell.Main` (`shell/app-main.module.css`), where `window.scrollY` is pinned at 0 and a
|
|
9
|
+
* `scroll` listener on `window` never fires. `scrollParentOf` answers `null` for a shell-less app
|
|
10
|
+
* and this falls back to the window unchanged.
|
|
11
|
+
*
|
|
7
12
|
* @example
|
|
8
13
|
* import { ReadingProgress } from 'basalt-ui/content'
|
|
9
14
|
*
|
|
@@ -13,35 +18,50 @@
|
|
|
13
18
|
*/
|
|
14
19
|
import type { RefObject } from 'react'
|
|
15
20
|
import { useEffect, useRef, useState } from 'react'
|
|
21
|
+
import type { BasaltProps } from '../common/props'
|
|
22
|
+
import { cx } from '../common/props'
|
|
23
|
+
import { scrollParentOf } from '../common/scroll-parent'
|
|
16
24
|
import classes from './reading-progress.module.css'
|
|
17
25
|
|
|
18
|
-
export type ReadingProgressProps = {
|
|
19
|
-
/** The element to track scroll progress through. Default: the whole
|
|
26
|
+
export type ReadingProgressProps = BasaltProps & {
|
|
27
|
+
/** The element to track scroll progress through. Default: the whole scrollport. */
|
|
20
28
|
readonly target?: RefObject<HTMLElement | null>
|
|
21
29
|
}
|
|
22
30
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
31
|
+
/**
|
|
32
|
+
* `port` is the resolved scrollport, or `null` for "the document scrolls". The only thing that
|
|
33
|
+
* changes between the two is where the four numbers come from — `target`'s offset is measured
|
|
34
|
+
* against the SCROLLER's own top edge rather than the viewport's, which for the window case is the
|
|
35
|
+
* same edge and reduces to the original arithmetic.
|
|
36
|
+
*/
|
|
37
|
+
function computeProgress(target: HTMLElement | null | undefined, port: HTMLElement | null): number {
|
|
38
|
+
const viewport = port ? port.clientHeight : window.innerHeight
|
|
39
|
+
const scrollTop = port ? port.scrollTop : window.scrollY
|
|
40
|
+
const originTop = port ? port.getBoundingClientRect().top : 0
|
|
41
|
+
const scrollable = port ? port.scrollHeight : document.documentElement.scrollHeight
|
|
26
42
|
|
|
27
|
-
const start = target ? target.getBoundingClientRect().top + scrollTop : 0
|
|
28
|
-
const total = target
|
|
29
|
-
? target.offsetHeight - viewport
|
|
30
|
-
: document.documentElement.scrollHeight - viewport
|
|
43
|
+
const start = target ? target.getBoundingClientRect().top - originTop + scrollTop : 0
|
|
44
|
+
const total = target ? target.offsetHeight - viewport : scrollable - viewport
|
|
31
45
|
|
|
32
46
|
if (total <= 0) return 0
|
|
33
47
|
const ratio = (scrollTop - start) / total
|
|
34
48
|
return Math.min(1, Math.max(0, ratio))
|
|
35
49
|
}
|
|
36
50
|
|
|
37
|
-
export function ReadingProgress({ target }: ReadingProgressProps = {}) {
|
|
51
|
+
export function ReadingProgress({ target, className, style }: ReadingProgressProps = {}) {
|
|
38
52
|
const [progress, setProgress] = useState(0)
|
|
39
53
|
const frame = useRef<number | null>(null)
|
|
54
|
+
const rootRef = useRef<HTMLDivElement | null>(null)
|
|
40
55
|
|
|
41
56
|
useEffect(() => {
|
|
57
|
+
// The bar itself is a fine probe when there is no `target`: it is mounted inside whatever
|
|
58
|
+
// region the reader is scrolling, which is the box this is measuring.
|
|
59
|
+
const port = scrollParentOf(target?.current ?? rootRef.current)
|
|
60
|
+
const scroller: Window | HTMLElement = port ?? window
|
|
61
|
+
|
|
42
62
|
const tick = () => {
|
|
43
63
|
frame.current = null
|
|
44
|
-
setProgress(computeProgress(target?.current))
|
|
64
|
+
setProgress(computeProgress(target?.current, port))
|
|
45
65
|
}
|
|
46
66
|
|
|
47
67
|
const onScroll = () => {
|
|
@@ -50,17 +70,22 @@ export function ReadingProgress({ target }: ReadingProgressProps = {}) {
|
|
|
50
70
|
}
|
|
51
71
|
|
|
52
72
|
tick()
|
|
53
|
-
|
|
73
|
+
scroller.addEventListener('scroll', onScroll, { passive: true })
|
|
54
74
|
window.addEventListener('resize', onScroll, { passive: true })
|
|
55
75
|
return () => {
|
|
56
|
-
|
|
76
|
+
scroller.removeEventListener('scroll', onScroll)
|
|
57
77
|
window.removeEventListener('resize', onScroll)
|
|
58
78
|
if (frame.current !== null) cancelAnimationFrame(frame.current)
|
|
59
79
|
}
|
|
60
80
|
}, [target])
|
|
61
81
|
|
|
62
82
|
return (
|
|
63
|
-
<div
|
|
83
|
+
<div
|
|
84
|
+
ref={rootRef}
|
|
85
|
+
className={cx(classes.root, className)}
|
|
86
|
+
aria-hidden
|
|
87
|
+
{...(style !== undefined && { style })}
|
|
88
|
+
>
|
|
64
89
|
<div className={classes.fill} style={{ transform: `scaleX(${progress})` }} />
|
|
65
90
|
</div>
|
|
66
91
|
)
|
package/src/content/slug.ts
CHANGED
|
@@ -28,6 +28,10 @@ export function headingSlug(text: string): string {
|
|
|
28
28
|
* Dedupes repeated slugs within one document — the second occurrence of a slug gets `-1`, the
|
|
29
29
|
* third `-2`, and so on (matches github-slugger's own collision behavior). Create one instance
|
|
30
30
|
* per document/render pass; it carries no global state.
|
|
31
|
+
*
|
|
32
|
+
* @remarks not a component — an ordinary PascalCase utility class on the `content` barrel
|
|
33
|
+
* (isomorphic harness finding F-DET-1). It carries no `prototype.isReactComponent` marker, so
|
|
34
|
+
* `new SlugTracker()`, not `<SlugTracker />`.
|
|
31
35
|
*/
|
|
32
36
|
export class SlugTracker {
|
|
33
37
|
private readonly counts = new Map<string, number>()
|
package/src/content/toc.tsx
CHANGED
|
@@ -6,6 +6,17 @@
|
|
|
6
6
|
* `headingSlug`/`SlugTracker` when authoring the headings. Sticky positioning is the consumer's
|
|
7
7
|
* job; this component is just the rail.
|
|
8
8
|
*
|
|
9
|
+
* The spy resolves WHICH BOX SCROLLS (`scrollParentOf`) instead of assuming the window: inside
|
|
10
|
+
* `BasaltShell` that is `AppShell.Main` (`shell/app-main.module.css`), so both the observer's root
|
|
11
|
+
* and the bottom-edge arithmetic have to be that element — a window listener there never fires and
|
|
12
|
+
* a viewport-rooted observer measures the wrong band. `null` means the document scrolls, which is
|
|
13
|
+
* the shell-less case and behaves exactly as before.
|
|
14
|
+
*
|
|
15
|
+
* The active rail item carries `aria-current="location"` (WAI-ARIA APG's own recommendation for a
|
|
16
|
+
* link set that navigates within one page, rather than `"page"`/`"true"`) — both a genuine a11y fix
|
|
17
|
+
* (previously `activeId` drove `classes.active` alone, so a screen reader had no signal at all) and
|
|
18
|
+
* the one DOM-observable hook for `activeId` that does not depend on a CSS Modules class hash.
|
|
19
|
+
*
|
|
9
20
|
* @example
|
|
10
21
|
* import { TableOfContents, headingSlug } from 'basalt-ui/content'
|
|
11
22
|
*
|
|
@@ -18,6 +29,7 @@
|
|
|
18
29
|
import type { MouseEvent, RefObject } from 'react'
|
|
19
30
|
import { useEffect, useRef, useState } from 'react'
|
|
20
31
|
import { useReducedMotion } from '@mantine/hooks'
|
|
32
|
+
import { scrollParentOf } from '../common/scroll-parent'
|
|
21
33
|
import classes from './toc.module.css'
|
|
22
34
|
|
|
23
35
|
export type TocItem = {
|
|
@@ -79,6 +91,11 @@ export function TableOfContents({
|
|
|
79
91
|
// Set while a clicked item owns the rail; `resolve` stands down until it's released.
|
|
80
92
|
const pinnedRef = useRef<string | null>(null)
|
|
81
93
|
const releasePinRef = useRef<(() => void) | null>(null)
|
|
94
|
+
// The rail's own node — the probe `scrollParentOf` walks from when there is no `containerRef`.
|
|
95
|
+
const navRef = useRef<HTMLElement | null>(null)
|
|
96
|
+
// The resolved scrollport (`null` = the document), published by the spy effect so the click-pin
|
|
97
|
+
// release below listens for `scrollend` on the same box the spy is watching.
|
|
98
|
+
const portRef = useRef<HTMLElement | null>(null)
|
|
82
99
|
|
|
83
100
|
useEffect(() => {
|
|
84
101
|
return () => releasePinRef.current?.()
|
|
@@ -108,6 +125,10 @@ export function TableOfContents({
|
|
|
108
125
|
.filter((el): el is HTMLElement => el !== null)
|
|
109
126
|
if (elements.length === 0) return
|
|
110
127
|
|
|
128
|
+
const port = scrollParentOf(containerRef?.current ?? navRef.current)
|
|
129
|
+
portRef.current = port
|
|
130
|
+
const scroller: Window | HTMLElement = port ?? window
|
|
131
|
+
|
|
111
132
|
const intersecting = new Set<string>()
|
|
112
133
|
|
|
113
134
|
const resolve = () => {
|
|
@@ -118,8 +139,9 @@ export function TableOfContents({
|
|
|
118
139
|
// Bottom edge: the last sections are usually shorter than the observer's 70% dead zone, so
|
|
119
140
|
// their headings can NEVER reach the activation band — the rail would stall on whichever
|
|
120
141
|
// section last made it in. Once the page bottoms out, the final item is the honest answer.
|
|
121
|
-
const
|
|
122
|
-
|
|
142
|
+
const box = port ?? document.documentElement
|
|
143
|
+
const seen = port ? port.clientHeight + port.scrollTop : window.innerHeight + window.scrollY
|
|
144
|
+
if (seen >= box.scrollHeight - 2) {
|
|
123
145
|
const last = elements[elements.length - 1]
|
|
124
146
|
if (last) setActiveId(last.id)
|
|
125
147
|
return
|
|
@@ -134,7 +156,9 @@ export function TableOfContents({
|
|
|
134
156
|
// Nothing intersecting — the last heading already scrolled past, or (above the first one,
|
|
135
157
|
// i.e. at the very top of the article) the first heading, so the rail always marks where the
|
|
136
158
|
// reader actually is instead of showing nothing until the first heading reaches the band.
|
|
137
|
-
|
|
159
|
+
// "Past" is measured against the SCROLLER's top edge, which for the window case is 0.
|
|
160
|
+
const originTop = port ? port.getBoundingClientRect().top : 0
|
|
161
|
+
const passed = elements.filter((el) => el.getBoundingClientRect().top < originTop)
|
|
138
162
|
const current = passed[passed.length - 1] ?? elements[0]
|
|
139
163
|
if (current) setActiveId(current.id)
|
|
140
164
|
}
|
|
@@ -147,19 +171,22 @@ export function TableOfContents({
|
|
|
147
171
|
}
|
|
148
172
|
resolve()
|
|
149
173
|
},
|
|
150
|
-
|
|
174
|
+
// `root: null` IS the viewport — the shell-less case, unchanged. Inside a shell the root has
|
|
175
|
+
// to be the scrollport or the `-70%` dead zone is measured against a box nothing scrolls.
|
|
176
|
+
{ root: port, rootMargin: '-80px 0px -70% 0px' },
|
|
151
177
|
)
|
|
152
178
|
|
|
153
179
|
for (const el of elements) observer.observe(el)
|
|
154
180
|
// The observer only fires when an intersection CHANGES; the bottom edge above resolves on
|
|
155
181
|
// scroll position alone, so it needs a scroll signal too. Re-setting the same id is a no-op
|
|
156
182
|
// for React, so this stays free on every frame that doesn't move the rail.
|
|
157
|
-
|
|
183
|
+
scroller.addEventListener('scroll', resolve, { passive: true })
|
|
158
184
|
return () => {
|
|
159
185
|
observer.disconnect()
|
|
160
|
-
|
|
186
|
+
scroller.removeEventListener('scroll', resolve)
|
|
187
|
+
portRef.current = null
|
|
161
188
|
}
|
|
162
|
-
}, [resolvedItems])
|
|
189
|
+
}, [resolvedItems, containerRef])
|
|
163
190
|
|
|
164
191
|
if (resolvedItems.length === 0) return null
|
|
165
192
|
|
|
@@ -174,15 +201,18 @@ export function TableOfContents({
|
|
|
174
201
|
setActiveId(id)
|
|
175
202
|
pinnedRef.current = id
|
|
176
203
|
|
|
204
|
+
// The same box the spy watches — `scrollend` on `window` never fires for a scroll that happened
|
|
205
|
+
// inside `AppShell.Main`, which would leave the rail pinned for the full `CLICK_PIN_MAX_MS`.
|
|
206
|
+
const scroller: Window | HTMLElement = portRef.current ?? window
|
|
177
207
|
let timer: ReturnType<typeof setTimeout> | null = null
|
|
178
208
|
const release = () => {
|
|
179
209
|
pinnedRef.current = null
|
|
180
210
|
if (timer !== null) clearTimeout(timer)
|
|
181
|
-
|
|
211
|
+
scroller.removeEventListener('scrollend', release)
|
|
182
212
|
releasePinRef.current = null
|
|
183
213
|
}
|
|
184
214
|
timer = setTimeout(release, CLICK_PIN_MAX_MS)
|
|
185
|
-
|
|
215
|
+
scroller.addEventListener('scrollend', release, { once: true })
|
|
186
216
|
releasePinRef.current = release
|
|
187
217
|
}
|
|
188
218
|
|
|
@@ -200,7 +230,7 @@ export function TableOfContents({
|
|
|
200
230
|
const navClass = [classes.root, className].filter(Boolean).join(' ')
|
|
201
231
|
|
|
202
232
|
return (
|
|
203
|
-
<nav className={navClass} aria-label={title}>
|
|
233
|
+
<nav ref={navRef} className={navClass} aria-label={title}>
|
|
204
234
|
<div className={classes.header}>{title}</div>
|
|
205
235
|
<ul className={classes.list}>
|
|
206
236
|
{resolvedItems.map((item) => (
|
|
@@ -214,6 +244,13 @@ export function TableOfContents({
|
|
|
214
244
|
]
|
|
215
245
|
.filter(Boolean)
|
|
216
246
|
.join(' ')}
|
|
247
|
+
// `classes.active` alone used to be the ONLY signal of which item the spy picked —
|
|
248
|
+
// both a real a11y gap (nothing here told assistive tech which section is current)
|
|
249
|
+
// and, incidentally, the reason a consumer/test could not observe `activeId` without
|
|
250
|
+
// reading CSS. `location` (not `page`/`true`) is the value WAI-ARIA's Authoring
|
|
251
|
+
// Practices call out BY NAME for exactly this widget: a set of links navigating
|
|
252
|
+
// within a single page, as opposed to a set of links to different pages.
|
|
253
|
+
aria-current={activeId === item.id ? 'location' : undefined}
|
|
217
254
|
onClick={handleClick(item.id)}
|
|
218
255
|
>
|
|
219
256
|
{item.label}
|