basalt-ui 1.28.0 → 1.29.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 +11 -18
- package/CHANGELOG.md +13 -0
- package/MIGRATING.md +151 -7
- package/README.md +23 -66
- package/agent/rules/basalt-batteries.md +59 -182
- package/agent/rules/basalt-charts.md +56 -75
- package/agent/rules/basalt-controls.md +38 -69
- package/agent/rules/basalt-mantine.md +58 -103
- package/agent/rules/basalt-state.md +42 -60
- package/agent/rules/basalt-tokens.md +46 -67
- package/agent/skills/basalt-app/SKILL.md +2 -0
- package/agent/templates/CLAUDE-block.md.tpl +14 -14
- package/configs/oxlint-plugin.js +70 -167
- package/configs/oxlint-plugin.test.ts +20 -186
- package/configs/oxlint.json +0 -1
- package/dist/agent/ai-sdk-transport.d.ts.map +1 -1
- package/dist/agent/ai-sdk-transport.js +7 -4
- package/dist/agent/coalesce.js +1 -1
- package/dist/agent/merge.js +1 -1
- package/dist/agent/transport.d.ts +13 -2
- package/dist/agent/transport.d.ts.map +1 -1
- package/dist/agent/use-agent-thread-runs.d.ts +12 -1
- package/dist/agent/use-agent-thread-runs.d.ts.map +1 -1
- package/dist/agent/use-agent-thread-runs.js +20 -6
- package/dist/agent-chat/index.d.ts +1 -1
- package/dist/agent-chat/index.d.ts.map +1 -1
- package/dist/agent-chat/relative-time.js +1 -1
- package/dist/agent-chat/thread-detail-panel.js +1 -1
- package/dist/agent-chat/thread-feed-row.d.ts +32 -7
- package/dist/agent-chat/thread-feed-row.d.ts.map +1 -1
- package/dist/agent-chat/thread-feed-row.js +121 -86
- package/dist/agent-chat/thread-feed.d.ts +11 -1
- package/dist/agent-chat/thread-feed.d.ts.map +1 -1
- package/dist/agent-chat/thread-feed.js +10 -6
- package/dist/agent-chat/thread-message.js +1 -1
- package/dist/agent-chat/virtualize.d.ts +39 -0
- package/dist/agent-chat/virtualize.d.ts.map +1 -1
- package/dist/agent-chat/virtualize.js +15 -0
- package/dist/charts/index.d.ts +3 -3
- package/dist/charts/index.d.ts.map +1 -1
- package/dist/charts/index.js +8 -4
- package/dist/charts/kinds/BandStrip.js +1 -1
- package/dist/charts/kinds/Bars.d.ts +1 -3
- package/dist/charts/kinds/Bars.d.ts.map +1 -1
- package/dist/charts/kinds/Bars.js +1 -1
- package/dist/charts/kinds/DualPanel.d.ts +3 -1
- package/dist/charts/kinds/DualPanel.d.ts.map +1 -1
- package/dist/charts/kinds/DualPanel.js +1 -1
- package/dist/charts/kinds/StackedArea.js +1 -1
- package/dist/charts/kinds/ZonedLine.d.ts +1 -3
- package/dist/charts/kinds/ZonedLine.d.ts.map +1 -1
- package/dist/charts/primitives/Axes.d.ts +21 -2
- package/dist/charts/primitives/Axes.d.ts.map +1 -1
- package/dist/charts/primitives/Axes.js +34 -2
- package/dist/charts/primitives/ChartCard.d.ts +20 -4
- package/dist/charts/primitives/ChartCard.d.ts.map +1 -1
- package/dist/charts/primitives/ChartCard.js +62 -33
- package/dist/charts/primitives/ChartFrame.d.ts.map +1 -1
- package/dist/charts/primitives/ChartFrame.js +8 -1
- package/dist/charts/primitives/ChartPending.d.ts +12 -6
- package/dist/charts/primitives/ChartPending.d.ts.map +1 -1
- package/dist/charts/primitives/ChartPending.js +1 -1
- package/dist/charts/utils/format.d.ts +5 -92
- package/dist/charts/utils/format.d.ts.map +1 -1
- package/dist/charts/utils/format.js +10 -80
- package/dist/cli/audit-allows.d.ts +24 -0
- package/dist/cli/audit-allows.d.ts.map +1 -0
- package/dist/cli/audit-allows.js +240 -0
- package/dist/cli/check-theme.d.ts +10 -0
- package/dist/cli/check-theme.d.ts.map +1 -0
- package/dist/cli/check-theme.js +139 -0
- package/dist/cli/doctor.d.ts +47 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +197 -0
- package/dist/cli/guard-hook.d.ts +9 -0
- package/dist/cli/guard-hook.d.ts.map +1 -0
- package/dist/cli/guard-hook.js +93 -0
- package/dist/cli/help.d.ts +9 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +53 -0
- package/dist/cli/index.d.ts +360 -270
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +85 -1901
- package/dist/cli/init.d.ts +4 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +165 -0
- package/dist/cli/sync.d.ts +43 -0
- package/dist/cli/sync.d.ts.map +1 -0
- package/dist/cli/sync.js +206 -0
- package/dist/cli/tokens-css.d.ts +51 -0
- package/dist/cli/tokens-css.d.ts.map +1 -0
- package/dist/cli/tokens-css.js +165 -0
- package/dist/commands/define-commands.js +1 -1
- package/dist/commands/define-overlays.js +1 -1
- package/dist/commands/index.d.ts +2 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +6 -0
- package/dist/commands/overlays-mount.d.ts +7 -9
- package/dist/commands/overlays-mount.d.ts.map +1 -1
- package/dist/commands/shell-bridge.d.ts +57 -0
- package/dist/commands/shell-bridge.d.ts.map +1 -0
- package/dist/commands/shell-bridge.js +32 -0
- package/dist/common/errors.d.ts +35 -0
- package/dist/common/errors.d.ts.map +1 -1
- package/dist/common/errors.js +29 -1
- package/dist/common/index.d.ts +2 -0
- package/dist/common/index.d.ts.map +1 -1
- package/dist/common/index.js +6 -0
- package/dist/common/is-dev.d.ts.map +1 -0
- package/dist/{motion/index.d.ts → common/motion.d.ts} +1 -1
- package/dist/common/motion.d.ts.map +1 -0
- package/dist/common/props.d.ts +1 -1
- package/dist/common/props.d.ts.map +1 -1
- package/dist/common/validate.js +1 -1
- package/dist/content/markdown.d.ts +3 -4
- package/dist/content/markdown.d.ts.map +1 -1
- package/dist/content/markdown.js +1 -4
- package/dist/controls/actions.d.ts +1 -1
- package/dist/controls/actions.d.ts.map +1 -1
- package/dist/controls/panel-row.js +1 -1
- package/dist/controls/range-filter.js +1 -1
- package/dist/dashboard/delta-badge.d.ts +18 -10
- package/dist/dashboard/delta-badge.d.ts.map +1 -1
- package/dist/dashboard/delta-badge.js +33 -1
- package/dist/dashboard/empty-state.d.ts +1 -4
- package/dist/dashboard/empty-state.d.ts.map +1 -1
- package/dist/dashboard/empty-state.js +1 -2
- package/dist/dashboard/index.d.ts +4 -2
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +7 -1
- package/dist/dashboard/query-state.d.ts +4 -13
- package/dist/dashboard/query-state.d.ts.map +1 -1
- package/dist/dashboard/query-state.js +4 -7
- package/dist/{section → dashboard}/section.d.ts +2 -2
- package/dist/{section → dashboard}/section.d.ts.map +1 -1
- package/dist/{section → dashboard}/section.js +2 -2
- package/dist/dashboard/settings-section.d.ts +1 -1
- package/dist/dashboard/settings-section.d.ts.map +1 -1
- package/dist/dashboard/settings-section.js +1 -1
- package/dist/dashboard/stat-card.d.ts +1 -1
- package/dist/dashboard/stat-card.d.ts.map +1 -1
- package/dist/dashboard/stat-card.js +1 -1
- package/dist/dashboard/widget-header.d.ts.map +1 -0
- package/dist/data/data-table.js +2 -2
- package/dist/data/table.d.ts +1 -1
- package/dist/data/table.d.ts.map +1 -1
- package/dist/data/table.js +2 -16
- package/dist/data/virtual.d.ts +3 -3
- package/dist/dev-dock.d.ts +28 -0
- package/dist/dev-dock.d.ts.map +1 -0
- package/dist/dev-dock.js +85 -0
- package/dist/format/date.d.ts +62 -0
- package/dist/format/date.d.ts.map +1 -0
- package/dist/format/date.js +106 -0
- package/dist/format/index.d.ts +39 -0
- package/dist/format/index.d.ts.map +1 -0
- package/dist/format/index.js +54 -0
- package/dist/format/measure.d.ts +15 -0
- package/dist/format/measure.d.ts.map +1 -0
- package/dist/format/measure.js +16 -0
- package/dist/format/number.d.ts +69 -0
- package/dist/format/number.d.ts.map +1 -0
- package/dist/format/number.js +62 -0
- package/dist/format/shared.d.ts +27 -0
- package/dist/format/shared.d.ts.map +1 -0
- package/dist/format/shared.js +29 -0
- package/dist/forms/field.d.ts +4 -20
- package/dist/forms/field.d.ts.map +1 -1
- package/dist/forms/field.js +0 -4
- package/dist/forms/form-layout.d.ts +1 -1
- package/dist/forms/form-layout.d.ts.map +1 -1
- package/dist/forms/form-layout.js +1 -1
- package/dist/forms/index.d.ts +1 -1
- package/dist/forms/index.d.ts.map +1 -1
- package/dist/forms/index.js +1 -2
- package/dist/forms/use-form-submit.js +1 -1
- package/dist/guard/index.d.ts +2 -9
- package/dist/guard/index.d.ts.map +1 -1
- package/dist/guard/index.js +16 -26
- package/dist/guard/types.d.ts +8 -10
- package/dist/guard/types.d.ts.map +1 -1
- package/dist/index.d.ts +16 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -29
- package/dist/notifications/index.d.ts +5 -5
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js +0 -2
- package/dist/notifications/mount-guard.d.ts.map +1 -1
- package/dist/notifications/mount-guard.js +2 -2
- package/dist/provider/connectivity-indicator.d.ts.map +1 -0
- package/dist/{connectivity → provider}/connectivity-provider.d.ts +1 -1
- package/dist/provider/connectivity-provider.d.ts.map +1 -0
- package/dist/{connectivity/types.d.ts → provider/connectivity-types.d.ts} +1 -1
- package/dist/provider/connectivity-types.d.ts.map +1 -0
- package/dist/provider/error-fallback.module.css +21 -0
- package/dist/provider/error-fallback.module.css.d.ts +9 -0
- package/dist/provider/index.d.ts +20 -36
- package/dist/provider/index.d.ts.map +1 -1
- package/dist/provider/index.js +42 -32
- package/dist/provider/lab-theme.js +1 -1
- package/dist/provider/use-connectivity.d.ts +3 -0
- package/dist/provider/use-connectivity.d.ts.map +1 -0
- package/dist/query-client.d.ts +63 -0
- package/dist/query-client.d.ts.map +1 -0
- package/dist/query-client.js +33 -0
- package/dist/{query/devtools.d.ts → query-devtools.d.ts} +2 -2
- package/dist/query-devtools.d.ts.map +1 -0
- package/dist/register.d.ts +17 -3
- package/dist/register.d.ts.map +1 -1
- package/dist/router-tanstack/index.d.ts +4 -7
- package/dist/router-tanstack/index.d.ts.map +1 -1
- package/dist/router-tanstack/index.js +1 -9
- package/dist/router-tanstack/nav.d.ts +1 -1
- package/dist/router-tanstack/nav.d.ts.map +1 -1
- package/dist/router-tanstack/search-store.d.ts +3 -6
- package/dist/router-tanstack/search-store.d.ts.map +1 -1
- package/dist/router-tanstack/use-nav.d.ts +1 -1
- package/dist/router-tanstack/use-nav.d.ts.map +1 -1
- package/dist/shell/app-breadcrumbs.d.ts +1 -1
- package/dist/shell/app-breadcrumbs.d.ts.map +1 -1
- package/dist/shell/app-main.module.css +11 -0
- package/dist/shell/app-mobile-nav.d.ts +1 -1
- package/dist/shell/app-mobile-nav.d.ts.map +1 -1
- package/dist/shell/app-mobile-nav.js +24 -2
- package/dist/shell/app-sidebar.d.ts +1 -1
- package/dist/shell/app-sidebar.d.ts.map +1 -1
- package/dist/shell/app-sidebar.js +31 -2
- package/dist/shell/app-sidebar.module.css +10 -0
- package/dist/shell/index.d.ts +10 -4
- package/dist/shell/index.d.ts.map +1 -1
- package/dist/shell/index.js +13 -17
- package/dist/shell/mobile-nav-model.d.ts +1 -1
- package/dist/shell/mobile-nav-model.d.ts.map +1 -1
- package/dist/{nav/types.d.ts → shell/nav-types.d.ts} +1 -1
- package/dist/shell/nav-types.d.ts.map +1 -0
- package/dist/shell/page-aside.d.ts.map +1 -1
- package/dist/shell/page-aside.js +2 -29
- package/dist/shell/page-title.d.ts +14 -0
- package/dist/shell/page-title.d.ts.map +1 -0
- package/dist/shell/page-title.js +25 -0
- package/dist/shell/page-title.module.css +33 -0
- package/dist/shell/page-title.module.css.d.ts +11 -0
- package/dist/shell/sidebar-block-model.d.ts +1 -1
- package/dist/shell/sidebar-block-model.d.ts.map +1 -1
- package/dist/shell/sidebar-blocks.d.ts +1 -1
- package/dist/shell/sidebar-blocks.d.ts.map +1 -1
- package/dist/shell/use-breakpoint.d.ts +11 -0
- package/dist/shell/use-breakpoint.d.ts.map +1 -0
- package/dist/shell/use-breakpoint.js +33 -0
- package/dist/state/fields.d.ts +3 -19
- package/dist/state/fields.d.ts.map +1 -1
- package/dist/state/fields.js +6 -16
- package/dist/styles.css +36 -0
- package/dist/surfaces.d.ts +18 -41
- package/dist/surfaces.d.ts.map +1 -1
- package/dist/surfaces.js +46 -59
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/{theme-toggle/index.d.ts → theme/theme-toggle.d.ts} +1 -1
- package/dist/theme/theme-toggle.d.ts.map +1 -0
- package/dist/{theme-toggle/index.js → theme/theme-toggle.js} +1 -1
- package/dist/tokens/index.d.ts +1 -0
- package/dist/tokens/index.d.ts.map +1 -1
- package/dist/tokens/index.js +10 -0
- package/dist/tokens/palette.d.ts +12 -0
- package/dist/tokens/palette.d.ts.map +1 -1
- package/dist/tokens/palette.js +13 -1
- package/dist/tokens.css +1 -0
- package/llms.txt +9 -24
- package/package.json +12 -16
- package/src/agent/ai-sdk-transport.ts +11 -4
- package/src/agent/coalesce.ts +1 -1
- package/src/agent/merge.ts +1 -1
- package/src/agent/transport.ts +15 -2
- package/src/agent/use-agent-thread-runs.ts +65 -15
- package/src/agent-chat/index.ts +6 -4
- package/src/agent-chat/relative-time.ts +1 -1
- package/src/agent-chat/thread-detail-panel.tsx +1 -1
- package/src/agent-chat/thread-feed-row.tsx +105 -30
- package/src/agent-chat/thread-feed.tsx +51 -25
- package/src/agent-chat/thread-message.tsx +1 -1
- package/src/agent-chat/virtualize.ts +48 -0
- package/src/charts/index.ts +7 -10
- package/src/charts/kinds/BandStrip.tsx +1 -1
- package/src/charts/kinds/Bars.tsx +2 -5
- package/src/charts/kinds/DualPanel.tsx +4 -3
- package/src/charts/kinds/StackedArea.tsx +1 -1
- package/src/charts/kinds/ZonedLine.tsx +1 -4
- package/src/charts/primitives/Axes.tsx +49 -0
- package/src/charts/primitives/ChartCard.tsx +49 -6
- package/src/charts/primitives/ChartFrame.tsx +5 -1
- package/src/charts/primitives/ChartPending.tsx +14 -8
- package/src/charts/utils/format.ts +17 -186
- package/src/cli/audit-allows.ts +371 -0
- package/src/cli/check-theme.ts +197 -0
- package/src/cli/doctor.ts +331 -0
- package/src/cli/guard-hook.ts +115 -0
- package/src/cli/help.ts +101 -0
- package/src/cli/index.ts +269 -3439
- package/src/cli/init.ts +247 -0
- package/src/cli/sync.ts +324 -0
- package/src/cli/tokens-css.ts +252 -0
- package/src/commands/define-commands.ts +1 -1
- package/src/commands/define-overlays.ts +1 -1
- package/src/commands/index.ts +10 -1
- package/src/commands/overlays-mount.tsx +8 -10
- package/src/commands/shell-bridge.ts +86 -0
- package/src/common/errors.ts +70 -0
- package/src/common/index.ts +2 -0
- package/src/common/props.ts +1 -1
- package/src/common/validate.ts +1 -1
- package/src/content/markdown.tsx +4 -8
- package/src/controls/actions.tsx +1 -1
- package/src/controls/panel-row.tsx +1 -1
- package/src/controls/range-filter.tsx +1 -1
- package/src/dashboard/delta-badge.tsx +74 -7
- package/src/dashboard/empty-state.tsx +2 -6
- package/src/dashboard/index.ts +11 -2
- package/src/dashboard/query-state.tsx +5 -18
- package/src/{section → dashboard}/section.tsx +4 -4
- package/src/dashboard/settings-section.tsx +2 -2
- package/src/dashboard/stat-card.tsx +2 -2
- package/src/data/data-table.tsx +3 -3
- package/src/data/table.ts +6 -25
- package/src/data/virtual-list.tsx +1 -1
- package/src/data/virtual.ts +3 -3
- package/src/dev-dock.tsx +159 -0
- package/src/format/date.ts +184 -0
- package/src/format/index.ts +69 -0
- package/src/format/measure.ts +31 -0
- package/src/format/number.ts +129 -0
- package/src/format/shared.ts +63 -0
- package/src/forms/field.ts +4 -24
- package/src/forms/form-layout.tsx +2 -2
- package/src/forms/index.ts +1 -2
- package/src/forms/use-form-submit.ts +1 -1
- package/src/guard/index.ts +30 -56
- package/src/guard/types.ts +7 -10
- package/src/index.ts +38 -29
- package/src/notifications/index.ts +5 -7
- package/src/notifications/mount-guard.ts +7 -9
- package/src/{connectivity → provider}/connectivity-indicator.tsx +1 -1
- package/src/{connectivity → provider}/connectivity-provider.tsx +1 -1
- package/src/provider/error-fallback.module.css +21 -0
- package/src/provider/error-fallback.module.css.d.ts +9 -0
- package/src/provider/index.tsx +71 -71
- package/src/provider/lab-theme.ts +1 -1
- package/src/{connectivity → provider}/use-connectivity.ts +3 -3
- package/src/query-client.ts +100 -0
- package/src/{query/devtools.tsx → query-devtools.tsx} +5 -4
- package/src/register.ts +20 -4
- package/src/router-tanstack/index.ts +4 -15
- package/src/router-tanstack/nav.ts +1 -1
- package/src/router-tanstack/search-store.ts +3 -4
- package/src/router-tanstack/use-nav.ts +1 -1
- package/src/shell/app-breadcrumbs.tsx +1 -1
- package/src/shell/app-main.module.css +11 -0
- package/src/shell/app-mobile-nav.tsx +28 -1
- package/src/shell/app-sidebar.module.css +10 -0
- package/src/shell/app-sidebar.tsx +31 -2
- package/src/shell/index.tsx +23 -28
- package/src/shell/mobile-nav-model.ts +1 -1
- package/src/shell/page-aside.tsx +2 -52
- package/src/shell/page-title.module.css +33 -0
- package/src/shell/page-title.module.css.d.ts +11 -0
- package/src/shell/page-title.tsx +57 -0
- package/src/shell/sidebar-block-model.ts +1 -1
- package/src/shell/sidebar-blocks.tsx +1 -1
- package/src/shell/use-breakpoint.ts +73 -0
- package/src/state/fields.ts +7 -43
- package/src/styles.css +36 -0
- package/src/surfaces.ts +45 -60
- package/src/theme/index.ts +7 -0
- package/src/{theme-toggle/index.tsx → theme/theme-toggle.tsx} +1 -1
- package/src/tokens/index.ts +10 -0
- package/src/tokens/palette.ts +12 -0
- package/dist/connectivity/connectivity-indicator.d.ts.map +0 -1
- package/dist/connectivity/connectivity-provider.d.ts.map +0 -1
- package/dist/connectivity/index.d.ts +0 -14
- package/dist/connectivity/index.d.ts.map +0 -1
- package/dist/connectivity/index.js +0 -8
- package/dist/connectivity/types.d.ts.map +0 -1
- package/dist/connectivity/use-connectivity.d.ts +0 -3
- package/dist/connectivity/use-connectivity.d.ts.map +0 -1
- package/dist/data/index.d.ts +0 -38
- package/dist/data/index.d.ts.map +0 -1
- package/dist/data/index.js +0 -24
- package/dist/motion/index.d.ts.map +0 -1
- package/dist/nav/types.d.ts.map +0 -1
- package/dist/notifications/overlay.d.ts +0 -20
- package/dist/notifications/overlay.d.ts.map +0 -1
- package/dist/notifications/overlay.js +0 -14
- package/dist/query/devtools.d.ts.map +0 -1
- package/dist/query/error-message.d.ts +0 -41
- package/dist/query/error-message.d.ts.map +0 -1
- package/dist/query/error-message.js +0 -30
- package/dist/query/index.d.ts +0 -47
- package/dist/query/index.d.ts.map +0 -1
- package/dist/query/index.js +0 -56
- package/dist/router-tanstack/field.d.ts +0 -14
- package/dist/router-tanstack/field.d.ts.map +0 -1
- package/dist/router-tanstack/field.js +0 -4
- package/dist/router-tanstack/multi-search-param-store.d.ts +0 -43
- package/dist/router-tanstack/multi-search-param-store.d.ts.map +0 -1
- package/dist/router-tanstack/multi-search-param-store.js +0 -30
- package/dist/router-tanstack/search-param-store.d.ts +0 -42
- package/dist/router-tanstack/search-param-store.d.ts.map +0 -1
- package/dist/router-tanstack/search-param-store.js +0 -25
- package/dist/section/index.d.ts +0 -2
- package/dist/section/index.d.ts.map +0 -1
- package/dist/section/index.js +0 -4
- package/dist/theme-toggle/index.d.ts.map +0 -1
- package/dist/utils/is-dev.d.ts.map +0 -1
- package/dist/widget-header/delta-badge.d.ts +0 -19
- package/dist/widget-header/delta-badge.d.ts.map +0 -1
- package/dist/widget-header/delta-badge.js +0 -36
- package/dist/widget-header/index.d.ts +0 -3
- package/dist/widget-header/index.d.ts.map +0 -1
- package/dist/widget-header/index.js +0 -8
- package/dist/widget-header/widget-header.d.ts.map +0 -1
- package/src/connectivity/index.ts +0 -19
- package/src/data/index.ts +0 -69
- package/src/notifications/overlay.tsx +0 -66
- package/src/query/error-message.ts +0 -70
- package/src/query/index.ts +0 -97
- package/src/router-tanstack/field.ts +0 -36
- package/src/router-tanstack/multi-search-param-store.ts +0 -106
- package/src/router-tanstack/search-param-store.ts +0 -100
- package/src/section/index.ts +0 -1
- package/src/widget-header/delta-badge.tsx +0 -77
- package/src/widget-header/index.ts +0 -10
- /package/dist/{utils → common}/is-dev.d.ts +0 -0
- /package/dist/{utils → common}/is-dev.js +0 -0
- /package/dist/{motion/index.js → common/motion.js} +0 -0
- /package/dist/{section → dashboard}/section.module.css +0 -0
- /package/dist/{section → dashboard}/section.module.css.d.ts +0 -0
- /package/dist/{widget-header → dashboard}/widget-header.d.ts +0 -0
- /package/dist/{widget-header → dashboard}/widget-header.js +0 -0
- /package/dist/{widget-header → dashboard}/widget-header.module.css +0 -0
- /package/dist/{widget-header → dashboard}/widget-header.module.css.d.ts +0 -0
- /package/dist/{connectivity → provider}/connectivity-indicator.d.ts +0 -0
- /package/dist/{connectivity → provider}/connectivity-indicator.js +0 -0
- /package/dist/{connectivity → provider}/connectivity-provider.js +0 -0
- /package/dist/{connectivity/types.js → provider/connectivity-types.js} +0 -0
- /package/dist/{connectivity → provider}/use-connectivity.js +0 -0
- /package/dist/{query/devtools.js → query-devtools.js} +0 -0
- /package/dist/{nav/types.js → shell/nav-types.js} +0 -0
- /package/src/{utils → common}/is-dev.ts +0 -0
- /package/src/{motion/index.ts → common/motion.ts} +0 -0
- /package/src/{section → dashboard}/section.module.css +0 -0
- /package/src/{section → dashboard}/section.module.css.d.ts +0 -0
- /package/src/{widget-header → dashboard}/widget-header.module.css +0 -0
- /package/src/{widget-header → dashboard}/widget-header.module.css.d.ts +0 -0
- /package/src/{widget-header → dashboard}/widget-header.tsx +0 -0
- /package/src/{connectivity/types.ts → provider/connectivity-types.ts} +0 -0
- /package/src/{nav/types.ts → shell/nav-types.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ZonedLine.d.ts","sourceRoot":"","sources":["../../../src/charts/kinds/ZonedLine.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,UAAU,EAAe,MAAM,8BAA8B,CAAA;AAEnG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAE5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAG/D,
|
|
1
|
+
{"version":3,"file":"ZonedLine.d.ts","sourceRoot":"","sources":["../../../src/charts/kinds/ZonedLine.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,UAAU,EAAe,MAAM,8BAA8B,CAAA;AAEnG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAE5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAG/D,mFAAmF;AACnF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,OAAO,GAAG,OAAO,CAAA;IACvB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,0EAA0E;AAC1E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,oDAAoD;IACpD,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,WAAW,GAAG;IAC5C,IAAI,EAAE,CAAC,EAAE,CAAA;IACT,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,oEAAoE;IACpE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAA;IACtB;;wEAEoE;IACpE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAA;IACxB;gEAC4D;IAC5D,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAA;IACjB,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAA;IAClB;sBACkB;IAClB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAA;IACpB,UAAU,CAAC,EAAE,kBAAkB,EAAE,CAAA;IACjC,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC7B,2FAA2F;IAC3F,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;wBAEoB;IACpB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,CAAA;IAC1E,6DAA6D;IAC7D,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IACjC;iDAC6C;IAC7C,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAA;IAC1B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC;qGACiG;IACjG,OAAO,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;IAC3C;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IAC3B;4CACwC;IACxC,MAAM,CAAC,EAAE,iBAAiB,GAAG,KAAK,CAAA;IAClC,qGAAqG;IACrG,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gGAAgG;IAChG,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;4FACwF;IACxF,KAAK,CAAC,EAAE,UAAU,CAAA;CACnB,CAAA;AAeD;;;;;;;;;;;;GAYG;AACH,iBAAS,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,+BA6ElD;AAyGD,eAAO,MAAM,SAAS,EAAoB,OAAO,cAAc,CAAA"}
|
|
@@ -3,18 +3,37 @@ import type { AxisScale, TickFormatter } from '@visx/axis';
|
|
|
3
3
|
* chart tier (`docs/CHARTS-SPEC.md` §8); a caller measuring its own gutter must measure at the
|
|
4
4
|
* SAME size (`chartTierMetrics().axisFont` into `autoMargin`'s `fontPx`), or the measured label
|
|
5
5
|
* and the painted one stop being the same string's width. */
|
|
6
|
-
export declare function AxisLeftNumeric({ scale, numTicks, tickFormat, }: {
|
|
6
|
+
export declare function AxisLeftNumeric({ scale, numTicks, tickFormat, tickValues, }: {
|
|
7
7
|
scale: AxisScale;
|
|
8
8
|
numTicks?: number;
|
|
9
9
|
tickFormat?: TickFormatter<number>;
|
|
10
|
+
/** Exact tick positions (e.g. a compass axis at 0/90/180/270). Overrides `numTicks`. */
|
|
11
|
+
tickValues?: readonly number[];
|
|
10
12
|
}): import("react").JSX.Element;
|
|
11
13
|
/** Themed right numeric axis — mirrors AxisLeftNumeric for dual-axis charts. */
|
|
12
|
-
export declare function AxisRightNumeric({ scale, left, numTicks, tickFormat, }: {
|
|
14
|
+
export declare function AxisRightNumeric({ scale, left, numTicks, tickFormat, tickValues, }: {
|
|
13
15
|
scale: AxisScale;
|
|
14
16
|
/** Left offset inside the Group (typically xMax). Required since AxisRight needs positioning. */
|
|
15
17
|
left: number;
|
|
16
18
|
numTicks?: number;
|
|
17
19
|
tickFormat?: TickFormatter<number>;
|
|
20
|
+
/** Exact tick positions (e.g. a compass axis at 0/90/180/270). Overrides `numTicks`. */
|
|
21
|
+
tickValues?: readonly number[];
|
|
22
|
+
}): import("react").JSX.Element;
|
|
23
|
+
/**
|
|
24
|
+
* Themed bottom numeric axis — the numeric twin of {@link AxisLeftNumeric}, for a plot whose x is
|
|
25
|
+
* a continuous number rather than a date/category (e.g. `sky-panorama.tsx`'s azimuth 0–360°,
|
|
26
|
+
* `docs/CHARTS-SPEC.md` issue #52). Exists so a bespoke continuous-x plot — declared exempt from
|
|
27
|
+
* `CartesianChart` by a `theme-allow-file hand-rolled-plot` waiver, since the point-scale x axis
|
|
28
|
+
* that primitive builds cannot represent one — stops re-implementing tick text/color/font by hand.
|
|
29
|
+
*/
|
|
30
|
+
export declare function AxisBottomNumeric({ scale, top, numTicks, tickFormat, tickValues, }: {
|
|
31
|
+
scale: AxisScale;
|
|
32
|
+
top: number;
|
|
33
|
+
numTicks?: number;
|
|
34
|
+
tickFormat?: TickFormatter<number>;
|
|
35
|
+
/** Exact tick positions (e.g. a compass axis at 0/90/180/270). Overrides `numTicks`. */
|
|
36
|
+
tickValues?: readonly number[];
|
|
18
37
|
}): import("react").JSX.Element;
|
|
19
38
|
/** Themed bottom date axis — baked-in smartTicks + DD.MM formatting. */
|
|
20
39
|
export declare function AxisBottomDate({ scale, top, tickValues, tickFormat, rotate, }: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Axes.d.ts","sourceRoot":"","sources":["../../../src/charts/primitives/Axes.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAa1D;;;6DAG6D;AAC7D,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,QAAY,EACZ,UAAU,GACX,EAAE;IACD,KAAK,EAAE,SAAS,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"Axes.d.ts","sourceRoot":"","sources":["../../../src/charts/primitives/Axes.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAa1D;;;6DAG6D;AAC7D,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,QAAY,EACZ,UAAU,EACV,UAAU,GACX,EAAE;IACD,KAAK,EAAE,SAAS,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAClC,wFAAwF;IACxF,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC/B,+BAkBA;AAED,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,IAAI,EACJ,QAAY,EACZ,UAAU,EACV,UAAU,GACX,EAAE;IACD,KAAK,EAAE,SAAS,CAAA;IAChB,iGAAiG;IACjG,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAClC,wFAAwF;IACxF,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC/B,+BAmBA;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,GAAG,EACH,QAAY,EACZ,UAAU,EACV,UAAU,GACX,EAAE;IACD,KAAK,EAAE,SAAS,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAClC,wFAAwF;IACxF,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC/B,+BAmBA;AAYD,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,GAAG,EACH,UAAU,EACV,UAAwB,EACxB,MAAM,GACP,EAAE;IACD,KAAK,EAAE,SAAS,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAClC;;;;OAIG;IACH,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,CAAA;CACjB,+BAqBA"}
|
|
@@ -8,7 +8,8 @@ const TICK_FONT_FAMILY = "var(--basalt-font-mono)";
|
|
|
8
8
|
function AxisLeftNumeric({
|
|
9
9
|
scale,
|
|
10
10
|
numTicks = 5,
|
|
11
|
-
tickFormat
|
|
11
|
+
tickFormat,
|
|
12
|
+
tickValues
|
|
12
13
|
}) {
|
|
13
14
|
const { axisFont } = useChartTierMetrics();
|
|
14
15
|
return /* @__PURE__ */ jsx(
|
|
@@ -17,6 +18,7 @@ function AxisLeftNumeric({
|
|
|
17
18
|
scale,
|
|
18
19
|
numTicks,
|
|
19
20
|
...tickFormat !== void 0 && { tickFormat },
|
|
21
|
+
...tickValues !== void 0 && { tickValues: [...tickValues] },
|
|
20
22
|
tickLabelProps: {
|
|
21
23
|
fill: VX.faint,
|
|
22
24
|
fontFamily: TICK_FONT_FAMILY,
|
|
@@ -32,7 +34,8 @@ function AxisRightNumeric({
|
|
|
32
34
|
scale,
|
|
33
35
|
left,
|
|
34
36
|
numTicks = 5,
|
|
35
|
-
tickFormat
|
|
37
|
+
tickFormat,
|
|
38
|
+
tickValues
|
|
36
39
|
}) {
|
|
37
40
|
const { axisFont } = useChartTierMetrics();
|
|
38
41
|
return /* @__PURE__ */ jsx(
|
|
@@ -42,6 +45,7 @@ function AxisRightNumeric({
|
|
|
42
45
|
scale,
|
|
43
46
|
numTicks,
|
|
44
47
|
...tickFormat !== void 0 && { tickFormat },
|
|
48
|
+
...tickValues !== void 0 && { tickValues: [...tickValues] },
|
|
45
49
|
tickLabelProps: {
|
|
46
50
|
fill: VX.faint,
|
|
47
51
|
fontFamily: TICK_FONT_FAMILY,
|
|
@@ -53,6 +57,33 @@ function AxisRightNumeric({
|
|
|
53
57
|
}
|
|
54
58
|
);
|
|
55
59
|
}
|
|
60
|
+
function AxisBottomNumeric({
|
|
61
|
+
scale,
|
|
62
|
+
top,
|
|
63
|
+
numTicks = 5,
|
|
64
|
+
tickFormat,
|
|
65
|
+
tickValues
|
|
66
|
+
}) {
|
|
67
|
+
const { axisFont } = useChartTierMetrics();
|
|
68
|
+
return /* @__PURE__ */ jsx(
|
|
69
|
+
AxisBottom,
|
|
70
|
+
{
|
|
71
|
+
top,
|
|
72
|
+
scale,
|
|
73
|
+
numTicks,
|
|
74
|
+
...tickFormat !== void 0 && { tickFormat },
|
|
75
|
+
...tickValues !== void 0 && { tickValues: [...tickValues] },
|
|
76
|
+
tickLabelProps: {
|
|
77
|
+
fill: VX.faint,
|
|
78
|
+
fontFamily: TICK_FONT_FAMILY,
|
|
79
|
+
fontSize: axisFont,
|
|
80
|
+
textAnchor: "middle"
|
|
81
|
+
},
|
|
82
|
+
stroke: VX.surface.border,
|
|
83
|
+
tickStroke: VX.surface.border
|
|
84
|
+
}
|
|
85
|
+
);
|
|
86
|
+
}
|
|
56
87
|
const ROTATED_OFFSET = ROTATED_LABEL_OFFSET;
|
|
57
88
|
function AxisBottomDate({
|
|
58
89
|
scale,
|
|
@@ -85,6 +116,7 @@ function AxisBottomDate({
|
|
|
85
116
|
}
|
|
86
117
|
export {
|
|
87
118
|
AxisBottomDate,
|
|
119
|
+
AxisBottomNumeric,
|
|
88
120
|
AxisLeftNumeric,
|
|
89
121
|
AxisRightNumeric
|
|
90
122
|
};
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* tier="widget"` title row (icon/info/value/delta/count/actions) plus an optional subtitle, over a
|
|
4
4
|
* clipped chart body. Do not wrap visx charts in bare divs.
|
|
5
5
|
*
|
|
6
|
-
* `WidgetHeader` lives in `src/
|
|
6
|
+
* `WidgetHeader` lives in `src/dashboard/` and is itself Mantine-free, so composing it here
|
|
7
7
|
* keeps `./charts` resolving with no `@mantine/*` installed (`check-dist-layering.mjs`,
|
|
8
8
|
* `basalt/token-layer-boundary`). The `actions` slot cannot mount `CtlSlot` (Mantine-coupled) for
|
|
9
9
|
* the same reason — it carries only `data-basalt-tier="widget"`; a basalt control placed there
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import type { ReactNode } from 'react';
|
|
16
16
|
import type { BasaltProps, SlotStylesProps } from '../../common/props.js';
|
|
17
|
-
import type { DeltaPolarity } from '../../
|
|
17
|
+
import type { DeltaPolarity } from '../../dashboard/delta-badge.js';
|
|
18
|
+
import type { ChartState } from './ChartPending.js';
|
|
18
19
|
/**
|
|
19
20
|
* The three boxes a `ChartCard` paints, and therefore the slot set a consumer may class
|
|
20
21
|
* (`SlotStylesProps`). `root` is the card itself (shadow, radius, panel background), `header` the
|
|
@@ -58,7 +59,22 @@ export type ChartCardProps = BasaltProps & SlotStylesProps<ChartCardSlot> & {
|
|
|
58
59
|
count?: number;
|
|
59
60
|
/** Right-aligned slot — carries `data-basalt-tier="widget"` (no `CtlSlot`; see module doc). */
|
|
60
61
|
actions?: ReactNode;
|
|
61
|
-
|
|
62
|
+
/**
|
|
63
|
+
* Any resolved state (pending → error → empty, same precedence `resolveChartState` gives
|
|
64
|
+
* every chart kind) REPLACES `children` with its placeholder at `placeholderHeight` — the
|
|
65
|
+
* header still renders unchanged, so a card's title never reflows through the pending → drawn
|
|
66
|
+
* transition. `state={{}}` (or an all-falsy state) renders `children`, same as omitting the
|
|
67
|
+
* prop.
|
|
68
|
+
*/
|
|
69
|
+
state?: ChartState;
|
|
70
|
+
/** Body height while a placeholder shows. Default 240 (`ChartFrame`'s own default height). */
|
|
71
|
+
placeholderHeight?: number;
|
|
72
|
+
/** Affordance under a pending/empty/error label — a retry button, a "clear filters" link.
|
|
73
|
+
* Forwarded to whichever placeholder resolves. */
|
|
74
|
+
stateAction?: ReactNode;
|
|
75
|
+
/** Optional so a title-less pending card can BE a route's `<Suspense>` fallback
|
|
76
|
+
* (`<ChartCard state={{ pending: true }} placeholderHeight={320} />`, no `children` at all). */
|
|
77
|
+
children?: ReactNode;
|
|
62
78
|
};
|
|
63
|
-
export declare function ChartCard({ title, icon, subtitle, info, value, delta, deltaPeriod, deltaPolarity, count, actions, className, classNames, style, children, }: ChartCardProps): import("react").JSX.Element;
|
|
79
|
+
export declare function ChartCard({ title, icon, subtitle, info, value, delta, deltaPeriod, deltaPolarity, count, actions, state, placeholderHeight, stateAction, className, classNames, style, children, }: ChartCardProps): import("react").JSX.Element;
|
|
64
80
|
//# sourceMappingURL=ChartCard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartCard.d.ts","sourceRoot":"","sources":["../../../src/charts/primitives/ChartCard.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAA;AAErD,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"ChartCard.d.ts","sourceRoot":"","sources":["../../../src/charts/primitives/ChartCard.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAA;AAErD,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAEhE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAqChD;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAA;AAEtD;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,cAAc,GAAG,WAAW,GACtC,eAAe,CAAC,aAAa,CAAC,GAAG;IAC/B,mGAAmG;IACnG,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0DAA0D;IAC1D,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,gGAAgG;IAChG,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;8FAC0F;IAC1F,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;kEAC8D;IAC9D,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+FAA+F;IAC/F,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,8FAA8F;IAC9F,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;sDACkD;IAClD,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB;oGACgG;IAChG,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB,CAAA;AAEH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,KAAK,EACL,KAAK,EACL,WAAW,EACX,aAAa,EACb,KAAK,EACL,OAAO,EACP,KAAK,EACL,iBAAuB,EACvB,WAAW,EACX,SAAS,EACT,UAAU,EACV,KAAK,EACL,QAAQ,GACT,EAAE,cAAc,+BAgEhB"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { cx } from "../../common/props.js";
|
|
3
3
|
import { VX } from "../../tokens/index.js";
|
|
4
|
-
import { WidgetHeader } from "../../widget-header
|
|
4
|
+
import { WidgetHeader } from "../../dashboard/widget-header.js";
|
|
5
|
+
import { ChartEmpty, ChartError, ChartPending, resolveChartState } from "./ChartPending.js";
|
|
5
6
|
const cardStyle = {
|
|
6
7
|
borderRadius: VX.radiusCard,
|
|
7
8
|
boxShadow: VX.shadowCard,
|
|
@@ -32,47 +33,75 @@ function ChartCard({
|
|
|
32
33
|
deltaPolarity,
|
|
33
34
|
count,
|
|
34
35
|
actions,
|
|
36
|
+
state,
|
|
37
|
+
placeholderHeight = 240,
|
|
38
|
+
stateAction,
|
|
35
39
|
className,
|
|
36
40
|
classNames,
|
|
37
41
|
style,
|
|
38
42
|
children
|
|
39
43
|
}) {
|
|
44
|
+
const resolvedState = resolveChartState({ ...state !== void 0 && { state } });
|
|
40
45
|
const hasHeader = title !== void 0 || info !== void 0 || value !== void 0 || actions !== void 0 || icon !== void 0 || count !== void 0;
|
|
41
|
-
return /* @__PURE__ */ jsxs(
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
return /* @__PURE__ */ jsxs(
|
|
47
|
+
"div",
|
|
48
|
+
{
|
|
49
|
+
className: cx(classNames?.root, className),
|
|
50
|
+
style: { ...cardStyle, ...style },
|
|
51
|
+
...resolvedState === "pending" && { "aria-busy": "true" },
|
|
52
|
+
children: [
|
|
53
|
+
hasHeader && /* @__PURE__ */ jsx(
|
|
54
|
+
"div",
|
|
49
55
|
{
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
56
|
+
...classNames?.header !== void 0 && { className: classNames.header },
|
|
57
|
+
style: headerWrapStyle,
|
|
58
|
+
children: /* @__PURE__ */ jsx(
|
|
59
|
+
WidgetHeader,
|
|
60
|
+
{
|
|
61
|
+
tier: "widget",
|
|
62
|
+
title: title ?? "",
|
|
63
|
+
...icon !== void 0 && { icon },
|
|
64
|
+
...subtitle !== void 0 && { subtitle },
|
|
65
|
+
...info !== void 0 && { info },
|
|
66
|
+
...value !== void 0 && { value },
|
|
67
|
+
...delta !== void 0 && { delta },
|
|
68
|
+
...deltaPeriod !== void 0 && { deltaPeriod },
|
|
69
|
+
...deltaPolarity !== void 0 && { deltaPolarity },
|
|
70
|
+
...count !== void 0 && { count },
|
|
71
|
+
...actions !== void 0 && {
|
|
72
|
+
actions: /* @__PURE__ */ jsx("span", { "data-basalt-tier": "widget", children: actions })
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
)
|
|
76
|
+
}
|
|
77
|
+
),
|
|
78
|
+
/* @__PURE__ */ jsx(
|
|
79
|
+
"div",
|
|
80
|
+
{
|
|
81
|
+
...classNames?.body !== void 0 && { className: classNames.body },
|
|
82
|
+
style: bodyClipStyle,
|
|
83
|
+
children: resolvedState === "pending" ? /* @__PURE__ */ jsx(ChartPending, { width: "100%", height: placeholderHeight }) : resolvedState === "error" ? /* @__PURE__ */ jsx(
|
|
84
|
+
ChartError,
|
|
85
|
+
{
|
|
86
|
+
width: "100%",
|
|
87
|
+
height: placeholderHeight,
|
|
88
|
+
error: state?.error,
|
|
89
|
+
action: stateAction
|
|
90
|
+
}
|
|
91
|
+
) : resolvedState === "empty" ? /* @__PURE__ */ jsx(
|
|
92
|
+
ChartEmpty,
|
|
93
|
+
{
|
|
94
|
+
width: "100%",
|
|
95
|
+
height: placeholderHeight,
|
|
96
|
+
...typeof state?.empty === "string" && { label: state.empty },
|
|
97
|
+
action: stateAction
|
|
98
|
+
}
|
|
99
|
+
) : children
|
|
63
100
|
}
|
|
64
101
|
)
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
"div",
|
|
69
|
-
{
|
|
70
|
-
...classNames?.body !== void 0 && { className: classNames.body },
|
|
71
|
-
style: bodyClipStyle,
|
|
72
|
-
children
|
|
73
|
-
}
|
|
74
|
-
)
|
|
75
|
-
] });
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
);
|
|
76
105
|
}
|
|
77
106
|
export {
|
|
78
107
|
ChartCard
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartFrame.d.ts","sourceRoot":"","sources":["../../../src/charts/primitives/ChartFrame.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAA;AAErD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAIrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAUhF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAEhD;qGACqG;AACrG,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAKxF;0EAC0E;AAC1E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,wBAAwB;IACxB,SAAS,CAAC,EAAE,eAAe,CAAA;IAC3B,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IAC1C;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG;IAC1C,uGAAuG;IACvG,MAAM,EAAE,SAAS,WAAW,EAAE,CAAA;IAC9B,8FAA8F;IAC9F,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qFAAqF;IACrF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,uFAAuF;IACvF,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iGAAiG;IACjG,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,6FAA6F;IAC7F,MAAM,CAAC,EAAE,gBAAgB,GAAG,KAAK,CAAA;IACjC;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;oDACgD;IAChD,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,SAAS,CAAA;CACxC,CAAA;AAED,0FAA0F;AAC1F,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAC5B,CAAA;AAcD;oFACoF;AACpF,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;CAC1C,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,iBAAiB,GAAG,KAAK,GAAG,SAAS,EAC7C,KAAK,CAAC,EAAE,qBAAqB,EAC7B,WAAW,CAAC,EAAE,MAAM,GACnB,gBAAgB,GAAG,KAAK,CAU1B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,MAAM,EACN,WAAW,EACX,IAAY,EACZ,QAA4B,EAC5B,OAAO,EACP,MAAW,EACX,SAAS,EACT,SAAiB,EACjB,KAAK,EACL,SAAS,EACT,KAAK,EACL,QAAQ,GACT,EAAE,eAAe,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"ChartFrame.d.ts","sourceRoot":"","sources":["../../../src/charts/primitives/ChartFrame.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAA;AAErD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAIrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAUhF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAEhD;qGACqG;AACrG,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAKxF;0EAC0E;AAC1E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,wBAAwB;IACxB,SAAS,CAAC,EAAE,eAAe,CAAA;IAC3B,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IAC1C;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG;IAC1C,uGAAuG;IACvG,MAAM,EAAE,SAAS,WAAW,EAAE,CAAA;IAC9B,8FAA8F;IAC9F,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qFAAqF;IACrF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,uFAAuF;IACvF,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iGAAiG;IACjG,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,6FAA6F;IAC7F,MAAM,CAAC,EAAE,gBAAgB,GAAG,KAAK,CAAA;IACjC;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;oDACgD;IAChD,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,SAAS,CAAA;CACxC,CAAA;AAED,0FAA0F;AAC1F,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAC5B,CAAA;AAcD;oFACoF;AACpF,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;CAC1C,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,iBAAiB,GAAG,KAAK,GAAG,SAAS,EAC7C,KAAK,CAAC,EAAE,qBAAqB,EAC7B,WAAW,CAAC,EAAE,MAAM,GACnB,gBAAgB,GAAG,KAAK,CAU1B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,MAAM,EACN,WAAW,EACX,IAAY,EACZ,QAA4B,EAC5B,OAAO,EACP,MAAW,EACX,SAAS,EACT,SAAiB,EACjB,KAAK,EACL,SAAS,EACT,KAAK,EACL,QAAQ,GACT,EAAE,eAAe,GAAG,SAAS,CAmH7B"}
|
|
@@ -111,7 +111,14 @@ function ChartFrame({
|
|
|
111
111
|
...resolvedState === "pending" && { "aria-busy": "true" },
|
|
112
112
|
children: [
|
|
113
113
|
legendNode !== null && (placement === "top" || placement === "left") && legendNode,
|
|
114
|
-
plot.width > 0 && plot.height > 0 && (resolvedState === "pending" ? /* @__PURE__ */ jsx(ChartPending, { width: plot.width, height: plot.height }) : resolvedState === "error" ? /* @__PURE__ */ jsx(ChartError, { width: plot.width, height: plot.height, error: state?.error }) : resolvedState === "empty" ? /* @__PURE__ */ jsx(
|
|
114
|
+
plot.width > 0 && plot.height > 0 && (resolvedState === "pending" ? /* @__PURE__ */ jsx(ChartPending, { width: plot.width, height: plot.height }) : resolvedState === "error" ? /* @__PURE__ */ jsx(ChartError, { width: plot.width, height: plot.height, error: state?.error }) : resolvedState === "empty" ? /* @__PURE__ */ jsx(
|
|
115
|
+
ChartEmpty,
|
|
116
|
+
{
|
|
117
|
+
width: plot.width,
|
|
118
|
+
height: plot.height,
|
|
119
|
+
...typeof state?.empty === "string" && { label: state.empty }
|
|
120
|
+
}
|
|
121
|
+
) : children({ ...plot, hidden })),
|
|
115
122
|
legendNode !== null && (placement === "bottom" || placement === "right") && legendNode
|
|
116
123
|
]
|
|
117
124
|
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
2
|
import type { BasaltProps } from '../../common/props.js';
|
|
3
3
|
export type ChartCenterProps = BasaltProps & {
|
|
4
|
-
|
|
4
|
+
/** A block body (a title-less pending `ChartCard`, a non-`ChartFrame` body) has no measured
|
|
5
|
+
* plot width to reserve — `'100%'` fills its container instead of a pixel figure. */
|
|
6
|
+
width: number | string;
|
|
5
7
|
height: number;
|
|
6
8
|
children: ReactNode;
|
|
7
9
|
};
|
|
@@ -13,7 +15,7 @@ export type ChartCenterProps = BasaltProps & {
|
|
|
13
15
|
*/
|
|
14
16
|
export declare function ChartCenter({ width, height, className, style, children, }: ChartCenterProps): ReactNode;
|
|
15
17
|
export type ChartPendingProps = BasaltProps & {
|
|
16
|
-
width: number;
|
|
18
|
+
width: number | string;
|
|
17
19
|
height: number;
|
|
18
20
|
/** Default `'Loading…'`. */
|
|
19
21
|
label?: string;
|
|
@@ -55,8 +57,12 @@ export type ChartState = {
|
|
|
55
57
|
pending?: boolean;
|
|
56
58
|
/** Truthy = the query failed. Any thrown value; an `Error`'s `message` is used as the label. */
|
|
57
59
|
error?: unknown;
|
|
58
|
-
/**
|
|
59
|
-
|
|
60
|
+
/**
|
|
61
|
+
* The query resolved and there is genuinely nothing to plot. `true`, or the empty label
|
|
62
|
+
* itself — a string is truthy AND the copy `ChartEmpty` paints, so a consumer with its own
|
|
63
|
+
* "No data" wording never needs a ternary around the placeholder.
|
|
64
|
+
*/
|
|
65
|
+
empty?: boolean | string;
|
|
60
66
|
};
|
|
61
67
|
/** Which placeholder {@link ChartState} resolves to, or `null` to draw the chart. */
|
|
62
68
|
export type ResolvedChartState = 'pending' | 'error' | 'empty' | null;
|
|
@@ -70,7 +76,7 @@ export declare function resolveChartState(input: {
|
|
|
70
76
|
isPending?: boolean;
|
|
71
77
|
}): ResolvedChartState;
|
|
72
78
|
export type ChartEmptyProps = BasaltProps & {
|
|
73
|
-
width: number;
|
|
79
|
+
width: number | string;
|
|
74
80
|
height: number;
|
|
75
81
|
/** Default `'No data'`. */
|
|
76
82
|
label?: string;
|
|
@@ -89,7 +95,7 @@ export type ChartEmptyProps = BasaltProps & {
|
|
|
89
95
|
*/
|
|
90
96
|
export declare function ChartEmpty({ width, height, label, action, className, style, }: ChartEmptyProps): ReactNode;
|
|
91
97
|
export type ChartErrorProps = BasaltProps & {
|
|
92
|
-
width: number;
|
|
98
|
+
width: number | string;
|
|
93
99
|
height: number;
|
|
94
100
|
/** Overrides the text outright. Omitted, an `Error`'s own `message` is used, else
|
|
95
101
|
* `'Could not load chart'` — a failure never borrows the empty state's copy. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartPending.d.ts","sourceRoot":"","sources":["../../../src/charts/primitives/ChartPending.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAA;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAGrD,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG;IAC3C,KAAK,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"ChartPending.d.ts","sourceRoot":"","sources":["../../../src/charts/primitives/ChartPending.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAA;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAGrD,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG;IAC3C;yFACqF;IACrF,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,SAAS,CAAA;CACpB,CAAA;AAUD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,MAAM,EACN,SAAS,EACT,KAAK,EACL,QAAQ,GACT,EAAE,gBAAgB,GAAG,SAAS,CAS9B;AAED,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG;IAC5C,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAOD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,MAAM,EACN,KAAkB,EAClB,SAAS,EACT,KAAK,GACN,EAAE,iBAAiB,GAAG,SAAS,CAkB/B;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,kEAAkE;IAClE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,gGAAgG;IAChG,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;CACzB,CAAA;AAED,qFAAqF;AACrF,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,IAAI,CAAA;AAErE;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,GAAG,kBAAkB,CAMrB;AAED,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG;IAC1C,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;sFACkF;IAClF,MAAM,CAAC,EAAE,SAAS,CAAA;CACnB,CAAA;AASD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,MAAM,EACN,KAAiB,EACjB,MAAM,EACN,SAAS,EACT,KAAK,GACN,EAAE,eAAe,GAAG,SAAS,CAgB7B;AAED,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG;IAC1C,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;IACd;oFACgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oDAAoD;IACpD,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,+DAA+D;IAC/D,MAAM,CAAC,EAAE,SAAS,CAAA;CACnB,CAAA;AAWD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,MAAM,EACN,KAAK,EACL,KAAK,EACL,MAAM,EACN,SAAS,EACT,KAAK,GACN,EAAE,eAAe,GAAG,SAAS,CAc7B"}
|
|
@@ -49,7 +49,7 @@ function resolveChartState(input) {
|
|
|
49
49
|
const { state, isPending } = input;
|
|
50
50
|
if (isPending === true || state?.pending === true) return "pending";
|
|
51
51
|
if (state?.error !== void 0 && state.error !== null && state.error !== false) return "error";
|
|
52
|
-
if (state?.empty
|
|
52
|
+
if (state?.empty) return "empty";
|
|
53
53
|
return null;
|
|
54
54
|
}
|
|
55
55
|
const stackStyle = {
|
|
@@ -1,95 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* `
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* and `Infinity` as `"∞"`, so a y axis whose domain collapsed (an empty series, a 0/0 rate, a log
|
|
7
|
-
* scale reaching zero) painted its own arithmetic accident as a tick label and a tooltip read
|
|
8
|
-
* `NaN%`. A chart may say it does not know; it may not print a number that is not one.
|
|
2
|
+
* Re-export shim. The implementation moved to `basalt-ui/format` (C5 consolidation, so
|
|
3
|
+
* `money`/`percent`/`duration`/`clock`/… and the chart formatters share one implementation
|
|
4
|
+
* instead of two). This file stays so every existing relative import inside `src/charts/**`
|
|
5
|
+
* (`../utils/format`) keeps resolving unchanged.
|
|
9
6
|
*/
|
|
10
|
-
export
|
|
11
|
-
/** Axis-friendly short date: DD.MM. A non-finite or invalid date prints {@link NON_FINITE}. */
|
|
12
|
-
export declare function fmtAxisDate(value: unknown): string;
|
|
13
|
-
/** Tooltip-friendly long date: "Mon Apr 21 2026". A non-finite or invalid date prints
|
|
14
|
-
* {@link NON_FINITE}. */
|
|
15
|
-
export declare function fmtTooltipDate(date: unknown): string;
|
|
16
|
-
/**
|
|
17
|
-
* The number-format law.
|
|
18
|
-
*
|
|
19
|
-
* `format.ts` shipped two date formatters and nothing else, so every axis and every tooltip in
|
|
20
|
-
* every demo and consumer hand-rolled its own `` `$${v}k` `` — a template literal that is not
|
|
21
|
-
* locale-aware, not compact-aware, and different in each of the places it was written. These four
|
|
22
|
-
* are `Intl.NumberFormat` with the arguments already decided, so a chart states WHAT a number is
|
|
23
|
-
* rather than how to punctuate it.
|
|
24
|
-
*
|
|
25
|
-
* `locale` defaults to `undefined`, which is `Intl`'s own "use the runtime's locale" — the correct
|
|
26
|
-
* default for an app whose reader is the person looking at it. Pass it explicitly (`'en-US'`) when
|
|
27
|
-
* the output must be stable regardless of where it runs, which is what the tests here do.
|
|
28
|
-
*
|
|
29
|
-
* Every one of them returns {@link NON_FINITE} for input that is not a finite number — see its
|
|
30
|
-
* JSDoc for why that is a law of this module rather than a per-call-site guard.
|
|
31
|
-
*/
|
|
32
|
-
/** Options every formatter here accepts. */
|
|
33
|
-
type LocaleOption = {
|
|
34
|
-
/** BCP-47 tag. Default `undefined` — the runtime's own locale. */
|
|
35
|
-
locale?: string;
|
|
36
|
-
};
|
|
37
|
-
export type FmtCompactOptions = LocaleOption & {
|
|
38
|
-
/** Significant-ish fraction digits on the compacted number. Default 1 (`1.2k`, `3.4M`). */
|
|
39
|
-
digits?: number;
|
|
40
|
-
};
|
|
41
|
-
/**
|
|
42
|
-
* Compact notation: `1.2k`, `3.4M`, `-820`. The axis formatter for any count whose range spans
|
|
43
|
-
* more than three digits — a y axis reading `1,200,000` spends a third of the plot width on a
|
|
44
|
-
* gutter. A non-finite value prints {@link NON_FINITE}.
|
|
45
|
-
*
|
|
46
|
-
* Note `Intl`'s compact notation is LOCALE text, not a suffix table: `en` gives `1.2K`, and this
|
|
47
|
-
* lowercases the `K` to match the package's own numeral style while leaving every other locale's
|
|
48
|
-
* word (`1,2 Mio.`) untouched. Only a `K` attached to the DIGITS is touched — `HK$1.2K` must keep
|
|
49
|
-
* its currency prefix, which a bare `replace('K', 'k')` ate.
|
|
50
|
-
*/
|
|
51
|
-
export declare function fmtCompact(value: number, options?: FmtCompactOptions): string;
|
|
52
|
-
export type FmtPercentOptions = LocaleOption & {
|
|
53
|
-
/** Fraction digits. Default 0 (`42%`). */
|
|
54
|
-
digits?: number;
|
|
55
|
-
/**
|
|
56
|
-
* What the incoming number MEANS. `'ratio'` (default) is `0.42 → 42%`; `'percent'` is
|
|
57
|
-
* `42 → 42%`. Required as an explicit option rather than guessed from magnitude: a ratio of 1.2
|
|
58
|
-
* and a percentage of 1.2 are both perfectly ordinary numbers, and a heuristic would silently
|
|
59
|
-
* render one of them 100× wrong.
|
|
60
|
-
*/
|
|
61
|
-
input?: 'ratio' | 'percent';
|
|
62
|
-
};
|
|
63
|
-
/** Percentages, from either a ratio or an already-scaled percentage. A non-finite value prints
|
|
64
|
-
* {@link NON_FINITE} — a rate is the commonest source of a 0/0. */
|
|
65
|
-
export declare function fmtPercent(value: number, options?: FmtPercentOptions): string;
|
|
66
|
-
export type FmtCurrencyOptions = LocaleOption & {
|
|
67
|
-
/** ISO 4217 code — required. There is no default currency; a wrong symbol is worse than a
|
|
68
|
-
* verbose call site. */
|
|
69
|
-
currency: string;
|
|
70
|
-
/** Compact notation for the amount (`$1.2k`). Default false. */
|
|
71
|
-
compact?: boolean;
|
|
72
|
-
/** Fraction digits. Default 0 compacted, else the currency's own default (`undefined`). */
|
|
73
|
-
digits?: number;
|
|
74
|
-
};
|
|
75
|
-
/** Money. `fmtCurrency(1234, { currency: 'USD' })` → `$1,234`. A non-finite amount prints
|
|
76
|
-
* {@link NON_FINITE}. */
|
|
77
|
-
export declare function fmtCurrency(value: number, options: FmtCurrencyOptions): string;
|
|
78
|
-
/** Grouped integer: `12,480`. Rounds — an integer formatter that printed `12,480.4` would be
|
|
79
|
-
* lying about its own name. A non-finite value prints {@link NON_FINITE}. */
|
|
80
|
-
export declare function fmtInt(value: number, options?: LocaleOption): string;
|
|
81
|
-
/**
|
|
82
|
-
* Every shipped formatter under one name, so a chart can be handed the whole set
|
|
83
|
-
* (`format={formatters.compact}`) and a consumer has one import to reach for instead of four.
|
|
84
|
-
* Same members as the named exports — this is a convenience, never a second implementation.
|
|
85
|
-
*/
|
|
86
|
-
export declare const formatters: {
|
|
87
|
-
readonly compact: typeof fmtCompact;
|
|
88
|
-
readonly percent: typeof fmtPercent;
|
|
89
|
-
readonly currency: typeof fmtCurrency;
|
|
90
|
-
readonly int: typeof fmtInt;
|
|
91
|
-
readonly axisDate: typeof fmtAxisDate;
|
|
92
|
-
readonly tooltipDate: typeof fmtTooltipDate;
|
|
93
|
-
};
|
|
94
|
-
export {};
|
|
7
|
+
export { fmtAxisDate, fmtTooltipDate, fmtCompact, type FmtCompactOptions, fmtPercent, type FmtPercentOptions, fmtCurrency, type FmtCurrencyOptions, fmtInt, formatters, NON_FINITE, } from '../../format/index.js';
|
|
95
8
|
//# sourceMappingURL=format.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/charts/utils/format.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/charts/utils/format.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,WAAW,EACX,cAAc,EACd,UAAU,EACV,KAAK,iBAAiB,EACtB,UAAU,EACV,KAAK,iBAAiB,EACtB,WAAW,EACX,KAAK,kBAAkB,EACvB,MAAM,EACN,UAAU,EACV,UAAU,GACX,MAAM,cAAc,CAAA"}
|
|
@@ -1,83 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
const s = String(value ?? "");
|
|
13
|
-
const match = s.match(/(\d{4})-(\d{2})-(\d{2})/);
|
|
14
|
-
if (match) return `${match[3]}.${match[2]}`;
|
|
15
|
-
return s;
|
|
16
|
-
}
|
|
17
|
-
function fmtTooltipDate(date) {
|
|
18
|
-
if (typeof date === "number" && !Number.isFinite(date)) return NON_FINITE;
|
|
19
|
-
if (date instanceof Date) {
|
|
20
|
-
if (Number.isNaN(date.getTime())) return NON_FINITE;
|
|
21
|
-
return `${SHORT_DAYS[date.getDay()]} ${MONTHS[date.getMonth()]} ${date.getDate()} ${date.getFullYear()}`;
|
|
22
|
-
}
|
|
23
|
-
const s = String(date ?? "");
|
|
24
|
-
const match = s.match(/(\d{4})-(\d{2})-(\d{2})/);
|
|
25
|
-
if (!match) return s;
|
|
26
|
-
const d = new Date(Number(match[1]), Number(match[2]) - 1, Number(match[3]));
|
|
27
|
-
return `${SHORT_DAYS[d.getDay()]} ${MONTHS[d.getMonth()]} ${d.getDate()} ${d.getFullYear()}`;
|
|
28
|
-
}
|
|
29
|
-
const formatterCache = /* @__PURE__ */ new Map();
|
|
30
|
-
const COMPACT_K = /(\d\s?)K/;
|
|
31
|
-
function numberFormat(locale, options) {
|
|
32
|
-
const key = `${locale ?? ""}|${JSON.stringify(options)}`;
|
|
33
|
-
const cached = formatterCache.get(key);
|
|
34
|
-
if (cached !== void 0) return cached;
|
|
35
|
-
const created = new Intl.NumberFormat(locale, options);
|
|
36
|
-
formatterCache.set(key, created);
|
|
37
|
-
return created;
|
|
38
|
-
}
|
|
39
|
-
function fmtCompact(value, options = {}) {
|
|
40
|
-
if (!Number.isFinite(value)) return NON_FINITE;
|
|
41
|
-
const { digits = 1, locale } = options;
|
|
42
|
-
return numberFormat(locale, {
|
|
43
|
-
notation: "compact",
|
|
44
|
-
compactDisplay: "short",
|
|
45
|
-
maximumFractionDigits: digits
|
|
46
|
-
}).format(value).replace(COMPACT_K, "$1k");
|
|
47
|
-
}
|
|
48
|
-
function fmtPercent(value, options = {}) {
|
|
49
|
-
if (!Number.isFinite(value)) return NON_FINITE;
|
|
50
|
-
const { digits = 0, input = "ratio", locale } = options;
|
|
51
|
-
return numberFormat(locale, {
|
|
52
|
-
style: "percent",
|
|
53
|
-
minimumFractionDigits: digits,
|
|
54
|
-
maximumFractionDigits: digits
|
|
55
|
-
}).format(input === "percent" ? value / 100 : value);
|
|
56
|
-
}
|
|
57
|
-
function fmtCurrency(value, options) {
|
|
58
|
-
if (!Number.isFinite(value)) return NON_FINITE;
|
|
59
|
-
const { currency, compact = false, digits, locale } = options;
|
|
60
|
-
const fractionDigits = digits ?? (compact ? 1 : 0);
|
|
61
|
-
return numberFormat(locale, {
|
|
62
|
-
style: "currency",
|
|
63
|
-
currency,
|
|
64
|
-
...compact && { notation: "compact", compactDisplay: "short" },
|
|
65
|
-
minimumFractionDigits: compact ? 0 : fractionDigits,
|
|
66
|
-
maximumFractionDigits: fractionDigits
|
|
67
|
-
}).format(value).replace(COMPACT_K, "$1k");
|
|
68
|
-
}
|
|
69
|
-
function fmtInt(value, options = {}) {
|
|
70
|
-
if (!Number.isFinite(value)) return NON_FINITE;
|
|
71
|
-
return numberFormat(options.locale, { maximumFractionDigits: 0 }).format(value);
|
|
72
|
-
}
|
|
73
|
-
const formatters = {
|
|
74
|
-
compact: fmtCompact,
|
|
75
|
-
percent: fmtPercent,
|
|
76
|
-
currency: fmtCurrency,
|
|
77
|
-
int: fmtInt,
|
|
78
|
-
axisDate: fmtAxisDate,
|
|
79
|
-
tooltipDate: fmtTooltipDate
|
|
80
|
-
};
|
|
1
|
+
import {
|
|
2
|
+
fmtAxisDate,
|
|
3
|
+
fmtTooltipDate,
|
|
4
|
+
fmtCompact,
|
|
5
|
+
fmtPercent,
|
|
6
|
+
fmtCurrency,
|
|
7
|
+
fmtInt,
|
|
8
|
+
formatters,
|
|
9
|
+
NON_FINITE
|
|
10
|
+
} from "../../format/index.js";
|
|
81
11
|
export {
|
|
82
12
|
NON_FINITE,
|
|
83
13
|
fmtAxisDate,
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { GuardConfig } from '../guard/index.js';
|
|
2
|
+
import type { BasaltConfig } from './index.js';
|
|
3
|
+
/**
|
|
4
|
+
* `check-theme --audit-allows` — list every active waiver and prove, per waiver, whether it still
|
|
5
|
+
* suppresses anything.
|
|
6
|
+
*
|
|
7
|
+
* The accountability release shipped `theme-allow-unscoped`, which reports a waiver that names no
|
|
8
|
+
* rule — but a waiver that is perfectly well written and covers a finding that no longer exists is
|
|
9
|
+
* invisible to it, and to everything else. Two consumers found five of those by hand, by editing
|
|
10
|
+
* the token out and re-running the guard. This is that method, automated: for each annotation the
|
|
11
|
+
* file is re-checked with THAT occurrence neutralized, and the findings that appear are exactly
|
|
12
|
+
* what it suppresses. Nothing is inferred from the annotation's text, so the audit cannot disagree
|
|
13
|
+
* with the scan — it IS the scan, run twice.
|
|
14
|
+
*
|
|
15
|
+
* `basalt.exemptRules` entries are audited the same way, one pattern at a time. That also answers
|
|
16
|
+
* the question the key could never answer for itself: a pattern that matches no scanned file (a
|
|
17
|
+
* real relative path, say, where the matcher takes whole path SEGMENTS) suppresses nothing and is
|
|
18
|
+
* reported as dead rather than passing silently.
|
|
19
|
+
*
|
|
20
|
+
* Exit 1 when anything is dead, so it can be wired into CI as a gate. A waiver nobody re-checks is
|
|
21
|
+
* how a rule quietly stops applying to the file that needed the exception most.
|
|
22
|
+
*/
|
|
23
|
+
export declare function auditAllows(cwd: string, cfg: BasaltConfig, guardCfg: GuardConfig, scanned: string[]): number;
|
|
24
|
+
//# sourceMappingURL=audit-allows.d.ts.map
|