@jovertical/mise-design-system 0.0.0-stage → 1.1.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/LICENSE +21 -0
- package/LICENSES/shadcn-svelte.txt +23 -0
- package/LICENSES/shadcn-ui.txt +21 -0
- package/LICENSES/tailwindcss.txt +21 -0
- package/README.md +127 -2
- package/bin/mise-theme.js +12 -0
- package/dist/components/actions/button/button-variants.d.ts +37 -0
- package/dist/components/actions/button/button-variants.js +99 -0
- package/dist/components/actions/button/button.svelte +84 -0
- package/dist/components/actions/button/button.svelte.d.ts +17 -0
- package/dist/components/actions/button/index.d.ts +2 -0
- package/dist/components/actions/button/index.js +2 -0
- package/dist/components/actions/command/command-dialog.svelte +60 -0
- package/dist/components/actions/command/command-dialog.svelte.d.ts +17 -0
- package/dist/components/actions/command/command-empty.svelte +24 -0
- package/dist/components/actions/command/command-empty.svelte.d.ts +6 -0
- package/dist/components/actions/command/command-group.svelte +43 -0
- package/dist/components/actions/command/command-group.svelte.d.ts +8 -0
- package/dist/components/actions/command/command-input.svelte +38 -0
- package/dist/components/actions/command/command-input.svelte.d.ts +6 -0
- package/dist/components/actions/command/command-item.svelte +27 -0
- package/dist/components/actions/command/command-item.svelte.d.ts +6 -0
- package/dist/components/actions/command/command-list.svelte +24 -0
- package/dist/components/actions/command/command-list.svelte.d.ts +6 -0
- package/dist/components/actions/command/command-separator.svelte +24 -0
- package/dist/components/actions/command/command-separator.svelte.d.ts +6 -0
- package/dist/components/actions/command/command-shortcut.svelte +33 -0
- package/dist/components/actions/command/command-shortcut.svelte.d.ts +7 -0
- package/dist/components/actions/command/command.svelte +37 -0
- package/dist/components/actions/command/command.svelte.d.ts +10 -0
- package/dist/components/actions/command/index.d.ts +9 -0
- package/dist/components/actions/command/index.js +9 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-checkbox-item.svelte +52 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +9 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-content.svelte +38 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-content.svelte.d.ts +8 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-group.svelte +16 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-group.svelte.d.ts +5 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-item.svelte +39 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-item.svelte.d.ts +9 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-label.svelte +37 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-label.svelte.d.ts +8 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-portal.svelte +16 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-portal.svelte.d.ts +5 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-radio-group.svelte +25 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-radio-group.svelte.d.ts +5 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-radio-item.svelte +50 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-radio-item.svelte.d.ts +9 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-separator.svelte +23 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-separator.svelte.d.ts +5 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-shortcut.svelte +32 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-shortcut.svelte.d.ts +6 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-sub-content.svelte +26 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-sub-content.svelte.d.ts +5 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-sub-trigger.svelte +41 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-sub-trigger.svelte.d.ts +7 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-sub.svelte +16 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-sub.svelte.d.ts +5 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-trigger.svelte +16 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu-trigger.svelte.d.ts +5 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu.svelte +16 -0
- package/dist/components/actions/dropdown-menu/dropdown-menu.svelte.d.ts +5 -0
- package/dist/components/actions/dropdown-menu/index.d.ts +15 -0
- package/dist/components/actions/dropdown-menu/index.js +15 -0
- package/dist/components/actions/theme-toggle/index.d.ts +3 -0
- package/dist/components/actions/theme-toggle/index.js +3 -0
- package/dist/components/actions/theme-toggle/theme-provider.svelte +49 -0
- package/dist/components/actions/theme-toggle/theme-provider.svelte.d.ts +19 -0
- package/dist/components/actions/theme-toggle/theme-toggle.svelte +48 -0
- package/dist/components/actions/theme-toggle/theme-toggle.svelte.d.ts +13 -0
- package/dist/components/actions/theme-toggle/theme.svelte.d.ts +17 -0
- package/dist/components/actions/theme-toggle/theme.svelte.js +45 -0
- package/dist/components/data-display/avatar/avatar-fallback.svelte +29 -0
- package/dist/components/data-display/avatar/avatar-fallback.svelte.d.ts +6 -0
- package/dist/components/data-display/avatar/avatar-image.svelte +23 -0
- package/dist/components/data-display/avatar/avatar-image.svelte.d.ts +5 -0
- package/dist/components/data-display/avatar/avatar-status.svelte +48 -0
- package/dist/components/data-display/avatar/avatar-status.svelte.d.ts +16 -0
- package/dist/components/data-display/avatar/avatar.svelte +24 -0
- package/dist/components/data-display/avatar/avatar.svelte.d.ts +6 -0
- package/dist/components/data-display/avatar/index.d.ts +5 -0
- package/dist/components/data-display/avatar/index.js +5 -0
- package/dist/components/data-display/avatar/presence-dot.svelte +42 -0
- package/dist/components/data-display/avatar/presence-dot.svelte.d.ts +14 -0
- package/dist/components/data-display/badge/badge-variants.d.ts +6 -0
- package/dist/components/data-display/badge/badge-variants.js +53 -0
- package/dist/components/data-display/badge/badge.svelte +66 -0
- package/dist/components/data-display/badge/badge.svelte.d.ts +29 -0
- package/dist/components/data-display/badge/index.d.ts +2 -0
- package/dist/components/data-display/badge/index.js +2 -0
- package/dist/components/data-display/chart/chart-defaults.d.ts +22 -0
- package/dist/components/data-display/chart/chart-defaults.js +19 -0
- package/dist/components/data-display/chart/chart-style.svelte +49 -0
- package/dist/components/data-display/chart/chart-style.svelte.d.ts +9 -0
- package/dist/components/data-display/chart/chart-tooltip.svelte +201 -0
- package/dist/components/data-display/chart/chart-tooltip.svelte.d.ts +30 -0
- package/dist/components/data-display/chart/chart-utils.d.ts +42 -0
- package/dist/components/data-display/chart/chart-utils.js +42 -0
- package/dist/components/data-display/chart/chart.svelte +105 -0
- package/dist/components/data-display/chart/chart.svelte.d.ts +15 -0
- package/dist/components/data-display/chart/index.d.ts +5 -0
- package/dist/components/data-display/chart/index.js +5 -0
- package/dist/components/data-display/checklist/checklist-card.svelte +157 -0
- package/dist/components/data-display/checklist/checklist-card.svelte.d.ts +47 -0
- package/dist/components/data-display/checklist/checklist-row-heading.svelte +56 -0
- package/dist/components/data-display/checklist/checklist-row-heading.svelte.d.ts +10 -0
- package/dist/components/data-display/checklist/checklist-task-row.svelte +101 -0
- package/dist/components/data-display/checklist/checklist-task-row.svelte.d.ts +9 -0
- package/dist/components/data-display/checklist/checklist-types.d.ts +51 -0
- package/dist/components/data-display/checklist/checklist-types.js +6 -0
- package/dist/components/data-display/checklist/checklist.svelte +78 -0
- package/dist/components/data-display/checklist/checklist.svelte.d.ts +24 -0
- package/dist/components/data-display/checklist/index.d.ts +3 -0
- package/dist/components/data-display/checklist/index.js +2 -0
- package/dist/components/data-display/data-table/data-table-column-header.svelte +99 -0
- package/dist/components/data-display/data-table/data-table-column-header.svelte.d.ts +38 -0
- package/dist/components/data-display/data-table/data-table-column-toggle.svelte +68 -0
- package/dist/components/data-display/data-table/data-table-column-toggle.svelte.d.ts +33 -0
- package/dist/components/data-display/data-table/data-table-export-menu.svelte +93 -0
- package/dist/components/data-display/data-table/data-table-export-menu.svelte.d.ts +18 -0
- package/dist/components/data-display/data-table/data-table-faceted-filter.svelte +133 -0
- package/dist/components/data-display/data-table/data-table-faceted-filter.svelte.d.ts +50 -0
- package/dist/components/data-display/data-table/data-table-row-actions.svelte +79 -0
- package/dist/components/data-display/data-table/data-table-row-actions.svelte.d.ts +28 -0
- package/dist/components/data-display/data-table/data-table-toolbar.svelte +180 -0
- package/dist/components/data-display/data-table/data-table-toolbar.svelte.d.ts +70 -0
- package/dist/components/data-display/data-table/data-table-view-toggle.svelte +39 -0
- package/dist/components/data-display/data-table/data-table-view-toggle.svelte.d.ts +12 -0
- package/dist/components/data-display/data-table/data-table.svelte +468 -0
- package/dist/components/data-display/data-table/data-table.svelte.d.ts +103 -0
- package/dist/components/data-display/data-table/features.d.ts +51 -0
- package/dist/components/data-display/data-table/features.js +27 -0
- package/dist/components/data-display/data-table/index.d.ts +9 -0
- package/dist/components/data-display/data-table/index.js +9 -0
- package/dist/components/data-display/delta-badge/delta-badge.svelte +87 -0
- package/dist/components/data-display/delta-badge/delta-badge.svelte.d.ts +39 -0
- package/dist/components/data-display/delta-badge/index.d.ts +1 -0
- package/dist/components/data-display/delta-badge/index.js +1 -0
- package/dist/components/data-display/entity-label/entity-label.svelte +77 -0
- package/dist/components/data-display/entity-label/entity-label.svelte.d.ts +33 -0
- package/dist/components/data-display/entity-label/index.d.ts +1 -0
- package/dist/components/data-display/entity-label/index.js +1 -0
- package/dist/components/data-display/fact-list/fact-list-item.svelte +113 -0
- package/dist/components/data-display/fact-list/fact-list-item.svelte.d.ts +43 -0
- package/dist/components/data-display/fact-list/fact-list.svelte +48 -0
- package/dist/components/data-display/fact-list/fact-list.svelte.d.ts +21 -0
- package/dist/components/data-display/fact-list/index.d.ts +2 -0
- package/dist/components/data-display/fact-list/index.js +2 -0
- package/dist/components/data-display/icon-chip/icon-chip-variants.d.ts +21 -0
- package/dist/components/data-display/icon-chip/icon-chip-variants.js +44 -0
- package/dist/components/data-display/icon-chip/icon-chip.svelte +53 -0
- package/dist/components/data-display/icon-chip/icon-chip.svelte.d.ts +23 -0
- package/dist/components/data-display/icon-chip/index.d.ts +2 -0
- package/dist/components/data-display/icon-chip/index.js +2 -0
- package/dist/components/data-display/item/index.d.ts +11 -0
- package/dist/components/data-display/item/index.js +11 -0
- package/dist/components/data-display/item/item-actions.svelte +27 -0
- package/dist/components/data-display/item/item-actions.svelte.d.ts +6 -0
- package/dist/components/data-display/item/item-content.svelte +27 -0
- package/dist/components/data-display/item/item-content.svelte.d.ts +6 -0
- package/dist/components/data-display/item/item-description.svelte +39 -0
- package/dist/components/data-display/item/item-description.svelte.d.ts +7 -0
- package/dist/components/data-display/item/item-footer.svelte +27 -0
- package/dist/components/data-display/item/item-footer.svelte.d.ts +6 -0
- package/dist/components/data-display/item/item-group.svelte +34 -0
- package/dist/components/data-display/item/item-group.svelte.d.ts +11 -0
- package/dist/components/data-display/item/item-header.svelte +27 -0
- package/dist/components/data-display/item/item-header.svelte.d.ts +6 -0
- package/dist/components/data-display/item/item-media.svelte +63 -0
- package/dist/components/data-display/item/item-media.svelte.d.ts +23 -0
- package/dist/components/data-display/item/item-separator.svelte +25 -0
- package/dist/components/data-display/item/item-separator.svelte.d.ts +5 -0
- package/dist/components/data-display/item/item-title.svelte +27 -0
- package/dist/components/data-display/item/item-title.svelte.d.ts +6 -0
- package/dist/components/data-display/item/item-variants.d.ts +17 -0
- package/dist/components/data-display/item/item-variants.js +37 -0
- package/dist/components/data-display/item/item.svelte +70 -0
- package/dist/components/data-display/item/item.svelte.d.ts +30 -0
- package/dist/components/data-display/metric-bar/index.d.ts +2 -0
- package/dist/components/data-display/metric-bar/index.js +2 -0
- package/dist/components/data-display/metric-bar/metric-bar.svelte +122 -0
- package/dist/components/data-display/metric-bar/metric-bar.svelte.d.ts +41 -0
- package/dist/components/data-display/metric-bar/metric-rank.svelte +33 -0
- package/dist/components/data-display/metric-bar/metric-rank.svelte.d.ts +12 -0
- package/dist/components/data-display/metric-grid/index.d.ts +1 -0
- package/dist/components/data-display/metric-grid/index.js +1 -0
- package/dist/components/data-display/metric-grid/metric-grid.svelte +66 -0
- package/dist/components/data-display/metric-grid/metric-grid.svelte.d.ts +35 -0
- package/dist/components/data-display/metric-row/index.d.ts +1 -0
- package/dist/components/data-display/metric-row/index.js +1 -0
- package/dist/components/data-display/metric-row/metric-row.svelte +175 -0
- package/dist/components/data-display/metric-row/metric-row.svelte.d.ts +58 -0
- package/dist/components/data-display/radial-stat/index.d.ts +1 -0
- package/dist/components/data-display/radial-stat/index.js +1 -0
- package/dist/components/data-display/radial-stat/radial-stat.svelte +113 -0
- package/dist/components/data-display/radial-stat/radial-stat.svelte.d.ts +35 -0
- package/dist/components/data-display/readiness/index.d.ts +3 -0
- package/dist/components/data-display/readiness/index.js +3 -0
- package/dist/components/data-display/readiness/readiness-summarise.d.ts +40 -0
- package/dist/components/data-display/readiness/readiness-summarise.js +25 -0
- package/dist/components/data-display/readiness/readiness-summary.svelte +65 -0
- package/dist/components/data-display/readiness/readiness-summary.svelte.d.ts +19 -0
- package/dist/components/data-display/readiness/readiness.svelte +102 -0
- package/dist/components/data-display/readiness/readiness.svelte.d.ts +22 -0
- package/dist/components/data-display/segmented-bar/index.d.ts +1 -0
- package/dist/components/data-display/segmented-bar/index.js +1 -0
- package/dist/components/data-display/segmented-bar/segmented-bar.svelte +116 -0
- package/dist/components/data-display/segmented-bar/segmented-bar.svelte.d.ts +34 -0
- package/dist/components/data-display/segmented-code/index.d.ts +1 -0
- package/dist/components/data-display/segmented-code/index.js +1 -0
- package/dist/components/data-display/segmented-code/segmented-code.svelte +84 -0
- package/dist/components/data-display/segmented-code/segmented-code.svelte.d.ts +27 -0
- package/dist/components/data-display/sparkline/index.d.ts +1 -0
- package/dist/components/data-display/sparkline/index.js +1 -0
- package/dist/components/data-display/sparkline/sparkline.svelte +98 -0
- package/dist/components/data-display/sparkline/sparkline.svelte.d.ts +22 -0
- package/dist/components/data-display/stat-tile/index.d.ts +1 -0
- package/dist/components/data-display/stat-tile/index.js +1 -0
- package/dist/components/data-display/stat-tile/stat-tile.svelte +328 -0
- package/dist/components/data-display/stat-tile/stat-tile.svelte.d.ts +125 -0
- package/dist/components/data-display/table/context.d.ts +2 -0
- package/dist/components/data-display/table/context.js +16 -0
- package/dist/components/data-display/table/index.d.ts +8 -0
- package/dist/components/data-display/table/index.js +8 -0
- package/dist/components/data-display/table/table-body.svelte +28 -0
- package/dist/components/data-display/table/table-body.svelte.d.ts +7 -0
- package/dist/components/data-display/table/table-caption.svelte +28 -0
- package/dist/components/data-display/table/table-caption.svelte.d.ts +7 -0
- package/dist/components/data-display/table/table-cell.svelte +45 -0
- package/dist/components/data-display/table/table-cell.svelte.d.ts +9 -0
- package/dist/components/data-display/table/table-footer.svelte +28 -0
- package/dist/components/data-display/table/table-footer.svelte.d.ts +7 -0
- package/dist/components/data-display/table/table-head.svelte +54 -0
- package/dist/components/data-display/table/table-head.svelte.d.ts +15 -0
- package/dist/components/data-display/table/table-header.svelte +28 -0
- package/dist/components/data-display/table/table-header.svelte.d.ts +7 -0
- package/dist/components/data-display/table/table-row.svelte +31 -0
- package/dist/components/data-display/table/table-row.svelte.d.ts +7 -0
- package/dist/components/data-display/table/table.svelte +47 -0
- package/dist/components/data-display/table/table.svelte.d.ts +14 -0
- package/dist/components/data-display/timeline/index.d.ts +8 -0
- package/dist/components/data-display/timeline/index.js +8 -0
- package/dist/components/data-display/timeline/timeline-connector.svelte +33 -0
- package/dist/components/data-display/timeline/timeline-connector.svelte.d.ts +11 -0
- package/dist/components/data-display/timeline/timeline-content.svelte +35 -0
- package/dist/components/data-display/timeline/timeline-content.svelte.d.ts +7 -0
- package/dist/components/data-display/timeline/timeline-dot.svelte +57 -0
- package/dist/components/data-display/timeline/timeline-dot.svelte.d.ts +21 -0
- package/dist/components/data-display/timeline/timeline-item.svelte +26 -0
- package/dist/components/data-display/timeline/timeline-item.svelte.d.ts +6 -0
- package/dist/components/data-display/timeline/timeline-skeleton.svelte +43 -0
- package/dist/components/data-display/timeline/timeline-skeleton.svelte.d.ts +9 -0
- package/dist/components/data-display/timeline/timeline-title.svelte +30 -0
- package/dist/components/data-display/timeline/timeline-title.svelte.d.ts +7 -0
- package/dist/components/data-display/timeline/timeline-variants.d.ts +12 -0
- package/dist/components/data-display/timeline/timeline-variants.js +34 -0
- package/dist/components/data-display/timeline/timeline.svelte +38 -0
- package/dist/components/data-display/timeline/timeline.svelte.d.ts +18 -0
- package/dist/components/data-display/tree-leaf/index.d.ts +1 -0
- package/dist/components/data-display/tree-leaf/index.js +1 -0
- package/dist/components/data-display/tree-leaf/tree-leaf.svelte +87 -0
- package/dist/components/data-display/tree-leaf/tree-leaf.svelte.d.ts +30 -0
- package/dist/components/feedback/alert/alert-action.svelte +36 -0
- package/dist/components/feedback/alert/alert-action.svelte.d.ts +11 -0
- package/dist/components/feedback/alert/alert-description.svelte +38 -0
- package/dist/components/feedback/alert/alert-description.svelte.d.ts +9 -0
- package/dist/components/feedback/alert/alert-title.svelte +30 -0
- package/dist/components/feedback/alert/alert-title.svelte.d.ts +9 -0
- package/dist/components/feedback/alert/alert-variants.d.ts +11 -0
- package/dist/components/feedback/alert/alert-variants.js +26 -0
- package/dist/components/feedback/alert/alert.svelte +38 -0
- package/dist/components/feedback/alert/alert.svelte.d.ts +15 -0
- package/dist/components/feedback/alert/index.d.ts +5 -0
- package/dist/components/feedback/alert/index.js +5 -0
- package/dist/components/feedback/empty/empty-content.svelte +30 -0
- package/dist/components/feedback/empty/empty-content.svelte.d.ts +6 -0
- package/dist/components/feedback/empty/empty-description.svelte +35 -0
- package/dist/components/feedback/empty/empty-description.svelte.d.ts +6 -0
- package/dist/components/feedback/empty/empty-header.svelte +27 -0
- package/dist/components/feedback/empty/empty-header.svelte.d.ts +6 -0
- package/dist/components/feedback/empty/empty-media.svelte +43 -0
- package/dist/components/feedback/empty/empty-media.svelte.d.ts +14 -0
- package/dist/components/feedback/empty/empty-title.svelte +27 -0
- package/dist/components/feedback/empty/empty-title.svelte.d.ts +6 -0
- package/dist/components/feedback/empty/empty-variants.d.ts +10 -0
- package/dist/components/feedback/empty/empty-variants.js +20 -0
- package/dist/components/feedback/empty/empty.svelte +36 -0
- package/dist/components/feedback/empty/empty.svelte.d.ts +11 -0
- package/dist/components/feedback/empty/index.d.ts +7 -0
- package/dist/components/feedback/empty/index.js +7 -0
- package/dist/components/feedback/empty-state/empty-state.svelte +45 -0
- package/dist/components/feedback/empty-state/empty-state.svelte.d.ts +19 -0
- package/dist/components/feedback/empty-state/index.d.ts +1 -0
- package/dist/components/feedback/empty-state/index.js +1 -0
- package/dist/components/feedback/error-state/error-state.svelte +102 -0
- package/dist/components/feedback/error-state/error-state.svelte.d.ts +37 -0
- package/dist/components/feedback/error-state/index.d.ts +1 -0
- package/dist/components/feedback/error-state/index.js +1 -0
- package/dist/components/feedback/feature-preview/feature-preview.svelte +102 -0
- package/dist/components/feedback/feature-preview/feature-preview.svelte.d.ts +34 -0
- package/dist/components/feedback/feature-preview/index.d.ts +1 -0
- package/dist/components/feedback/feature-preview/index.js +1 -0
- package/dist/components/feedback/loading-state/index.d.ts +1 -0
- package/dist/components/feedback/loading-state/index.js +1 -0
- package/dist/components/feedback/loading-state/loading-state.svelte +48 -0
- package/dist/components/feedback/loading-state/loading-state.svelte.d.ts +18 -0
- package/dist/components/feedback/locked-overlay/index.d.ts +1 -0
- package/dist/components/feedback/locked-overlay/index.js +1 -0
- package/dist/components/feedback/locked-overlay/locked-overlay.svelte +77 -0
- package/dist/components/feedback/locked-overlay/locked-overlay.svelte.d.ts +31 -0
- package/dist/components/feedback/navigation-progress/index.d.ts +1 -0
- package/dist/components/feedback/navigation-progress/index.js +1 -0
- package/dist/components/feedback/navigation-progress/navigation-progress.svelte +93 -0
- package/dist/components/feedback/navigation-progress/navigation-progress.svelte.d.ts +20 -0
- package/dist/components/feedback/progress/index.d.ts +1 -0
- package/dist/components/feedback/progress/index.js +1 -0
- package/dist/components/feedback/progress/progress.svelte +48 -0
- package/dist/components/feedback/progress/progress.svelte.d.ts +12 -0
- package/dist/components/feedback/skeleton/index.d.ts +1 -0
- package/dist/components/feedback/skeleton/index.js +1 -0
- package/dist/components/feedback/skeleton/skeleton.svelte +33 -0
- package/dist/components/feedback/skeleton/skeleton.svelte.d.ts +10 -0
- package/dist/components/feedback/sonner/index.d.ts +2 -0
- package/dist/components/feedback/sonner/index.js +2 -0
- package/dist/components/feedback/sonner/sonner.svelte +87 -0
- package/dist/components/feedback/sonner/sonner.svelte.d.ts +6 -0
- package/dist/components/feedback/spinner/index.d.ts +1 -0
- package/dist/components/feedback/spinner/index.js +1 -0
- package/dist/components/feedback/spinner/spinner.svelte +50 -0
- package/dist/components/feedback/spinner/spinner.svelte.d.ts +17 -0
- package/dist/components/forms/button-group/button-group-separator.svelte +31 -0
- package/dist/components/forms/button-group/button-group-separator.svelte.d.ts +6 -0
- package/dist/components/forms/button-group/button-group-text.svelte +46 -0
- package/dist/components/forms/button-group/button-group-text.svelte.d.ts +12 -0
- package/dist/components/forms/button-group/button-group-variants.d.ts +13 -0
- package/dist/components/forms/button-group/button-group-variants.js +20 -0
- package/dist/components/forms/button-group/button-group.svelte +46 -0
- package/dist/components/forms/button-group/button-group.svelte.d.ts +14 -0
- package/dist/components/forms/button-group/index.d.ts +4 -0
- package/dist/components/forms/button-group/index.js +4 -0
- package/dist/components/forms/calendar/calendar-caption.svelte +103 -0
- package/dist/components/forms/calendar/calendar-caption.svelte.d.ts +16 -0
- package/dist/components/forms/calendar/calendar-classes.d.ts +23 -0
- package/dist/components/forms/calendar/calendar-classes.js +36 -0
- package/dist/components/forms/calendar/calendar.svelte +120 -0
- package/dist/components/forms/calendar/calendar.svelte.d.ts +21 -0
- package/dist/components/forms/calendar/index.d.ts +3 -0
- package/dist/components/forms/calendar/index.js +2 -0
- package/dist/components/forms/calendar/range-calendar.svelte +114 -0
- package/dist/components/forms/calendar/range-calendar.svelte.d.ts +18 -0
- package/dist/components/forms/checkbox/checkbox.svelte +55 -0
- package/dist/components/forms/checkbox/checkbox.svelte.d.ts +6 -0
- package/dist/components/forms/checkbox/index.d.ts +1 -0
- package/dist/components/forms/checkbox/index.js +1 -0
- package/dist/components/forms/choice-row/choice-row-readonly.svelte +56 -0
- package/dist/components/forms/choice-row/choice-row-readonly.svelte.d.ts +17 -0
- package/dist/components/forms/choice-row/choice-row.svelte +129 -0
- package/dist/components/forms/choice-row/choice-row.svelte.d.ts +53 -0
- package/dist/components/forms/choice-row/index.d.ts +2 -0
- package/dist/components/forms/choice-row/index.js +2 -0
- package/dist/components/forms/combobox/combobox-chip.svelte +65 -0
- package/dist/components/forms/combobox/combobox-chip.svelte.d.ts +14 -0
- package/dist/components/forms/combobox/combobox-chips-input.svelte +23 -0
- package/dist/components/forms/combobox/combobox-chips-input.svelte.d.ts +6 -0
- package/dist/components/forms/combobox/combobox-chips.svelte +35 -0
- package/dist/components/forms/combobox/combobox-chips.svelte.d.ts +10 -0
- package/dist/components/forms/combobox/combobox-content.svelte +52 -0
- package/dist/components/forms/combobox/combobox-content.svelte.d.ts +11 -0
- package/dist/components/forms/combobox/combobox-context.d.ts +6 -0
- package/dist/components/forms/combobox/combobox-context.js +9 -0
- package/dist/components/forms/combobox/combobox-empty.svelte +28 -0
- package/dist/components/forms/combobox/combobox-empty.svelte.d.ts +6 -0
- package/dist/components/forms/combobox/combobox-group.svelte +15 -0
- package/dist/components/forms/combobox/combobox-group.svelte.d.ts +5 -0
- package/dist/components/forms/combobox/combobox-input.svelte +98 -0
- package/dist/components/forms/combobox/combobox-input.svelte.d.ts +16 -0
- package/dist/components/forms/combobox/combobox-item.svelte +61 -0
- package/dist/components/forms/combobox/combobox-item.svelte.d.ts +9 -0
- package/dist/components/forms/combobox/combobox-label.svelte +25 -0
- package/dist/components/forms/combobox/combobox-label.svelte.d.ts +5 -0
- package/dist/components/forms/combobox/combobox-list.svelte +27 -0
- package/dist/components/forms/combobox/combobox-list.svelte.d.ts +5 -0
- package/dist/components/forms/combobox/combobox-separator.svelte +22 -0
- package/dist/components/forms/combobox/combobox-separator.svelte.d.ts +5 -0
- package/dist/components/forms/combobox/combobox-trigger.svelte +36 -0
- package/dist/components/forms/combobox/combobox-trigger.svelte.d.ts +6 -0
- package/dist/components/forms/combobox/combobox.svelte +49 -0
- package/dist/components/forms/combobox/combobox.svelte.d.ts +23 -0
- package/dist/components/forms/combobox/index.d.ts +13 -0
- package/dist/components/forms/combobox/index.js +13 -0
- package/dist/components/forms/date-picker/date-picker.svelte +149 -0
- package/dist/components/forms/date-picker/date-picker.svelte.d.ts +45 -0
- package/dist/components/forms/date-picker/index.d.ts +1 -0
- package/dist/components/forms/date-picker/index.js +1 -0
- package/dist/components/forms/field/field-content.svelte +27 -0
- package/dist/components/forms/field/field-content.svelte.d.ts +6 -0
- package/dist/components/forms/field/field-description.svelte +40 -0
- package/dist/components/forms/field/field-description.svelte.d.ts +6 -0
- package/dist/components/forms/field/field-error.svelte +57 -0
- package/dist/components/forms/field/field-error.svelte.d.ts +15 -0
- package/dist/components/forms/field/field-group.svelte +30 -0
- package/dist/components/forms/field/field-group.svelte.d.ts +6 -0
- package/dist/components/forms/field/field-label.svelte +49 -0
- package/dist/components/forms/field/field-label.svelte.d.ts +12 -0
- package/dist/components/forms/field/field-legend.svelte +44 -0
- package/dist/components/forms/field/field-legend.svelte.d.ts +8 -0
- package/dist/components/forms/field/field-separator.svelte +37 -0
- package/dist/components/forms/field/field-separator.svelte.d.ts +6 -0
- package/dist/components/forms/field/field-set.svelte +31 -0
- package/dist/components/forms/field/field-set.svelte.d.ts +6 -0
- package/dist/components/forms/field/field-title.svelte +30 -0
- package/dist/components/forms/field/field-title.svelte.d.ts +6 -0
- package/dist/components/forms/field/field-variants.d.ts +10 -0
- package/dist/components/forms/field/field-variants.js +26 -0
- package/dist/components/forms/field/field.svelte +45 -0
- package/dist/components/forms/field/field.svelte.d.ts +14 -0
- package/dist/components/forms/field/index.d.ts +11 -0
- package/dist/components/forms/field/index.js +11 -0
- package/dist/components/forms/form/form-button.svelte +19 -0
- package/dist/components/forms/form/form-button.svelte.d.ts +6 -0
- package/dist/components/forms/form/form-description.svelte +28 -0
- package/dist/components/forms/form/form-description.svelte.d.ts +7 -0
- package/dist/components/forms/form/form-element-field.svelte +47 -0
- package/dist/components/forms/form/form-element-field.svelte.d.ts +35 -0
- package/dist/components/forms/form/form-field-errors.svelte +48 -0
- package/dist/components/forms/form/form-field-errors.svelte.d.ts +9 -0
- package/dist/components/forms/form/form-field.svelte +56 -0
- package/dist/components/forms/form/form-field.svelte.d.ts +42 -0
- package/dist/components/forms/form/form-fieldset.svelte +41 -0
- package/dist/components/forms/form/form-fieldset.svelte.d.ts +29 -0
- package/dist/components/forms/form/form-label.svelte +47 -0
- package/dist/components/forms/form/form-label.svelte.d.ts +10 -0
- package/dist/components/forms/form/form-legend.svelte +28 -0
- package/dist/components/forms/form/form-legend.svelte.d.ts +7 -0
- package/dist/components/forms/form/form-types.d.ts +13 -0
- package/dist/components/forms/form/form-types.js +1 -0
- package/dist/components/forms/form/form.svelte +38 -0
- package/dist/components/forms/form/form.svelte.d.ts +38 -0
- package/dist/components/forms/form/index.d.ts +11 -0
- package/dist/components/forms/form/index.js +10 -0
- package/dist/components/forms/input/index.d.ts +1 -0
- package/dist/components/forms/input/index.js +1 -0
- package/dist/components/forms/input/input.svelte +58 -0
- package/dist/components/forms/input/input.svelte.d.ts +13 -0
- package/dist/components/forms/input-group/index.d.ts +7 -0
- package/dist/components/forms/input-group/index.js +7 -0
- package/dist/components/forms/input-group/input-group-addon.svelte +51 -0
- package/dist/components/forms/input-group/input-group-addon.svelte.d.ts +10 -0
- package/dist/components/forms/input-group/input-group-button.svelte +39 -0
- package/dist/components/forms/input-group/input-group-button.svelte.d.ts +8 -0
- package/dist/components/forms/input-group/input-group-input.svelte +33 -0
- package/dist/components/forms/input-group/input-group-input.svelte.d.ts +5 -0
- package/dist/components/forms/input-group/input-group-text.svelte +30 -0
- package/dist/components/forms/input-group/input-group-text.svelte.d.ts +7 -0
- package/dist/components/forms/input-group/input-group-textarea.svelte +39 -0
- package/dist/components/forms/input-group/input-group-textarea.svelte.d.ts +11 -0
- package/dist/components/forms/input-group/input-group-variants.d.ts +14 -0
- package/dist/components/forms/input-group/input-group-variants.js +32 -0
- package/dist/components/forms/input-group/input-group.svelte +44 -0
- package/dist/components/forms/input-group/input-group.svelte.d.ts +11 -0
- package/dist/components/forms/input-otp/index.d.ts +4 -0
- package/dist/components/forms/input-otp/index.js +4 -0
- package/dist/components/forms/input-otp/input-otp-group.svelte +40 -0
- package/dist/components/forms/input-otp/input-otp-group.svelte.d.ts +12 -0
- package/dist/components/forms/input-otp/input-otp-separator.svelte +28 -0
- package/dist/components/forms/input-otp/input-otp-separator.svelte.d.ts +6 -0
- package/dist/components/forms/input-otp/input-otp-slot.svelte +56 -0
- package/dist/components/forms/input-otp/input-otp-slot.svelte.d.ts +8 -0
- package/dist/components/forms/input-otp/input-otp.svelte +40 -0
- package/dist/components/forms/input-otp/input-otp.svelte.d.ts +10 -0
- package/dist/components/forms/label/index.d.ts +1 -0
- package/dist/components/forms/label/index.js +1 -0
- package/dist/components/forms/label/label.svelte +26 -0
- package/dist/components/forms/label/label.svelte.d.ts +5 -0
- package/dist/components/forms/media-dropzone/index.d.ts +2 -0
- package/dist/components/forms/media-dropzone/index.js +1 -0
- package/dist/components/forms/media-dropzone/media-dropzone.svelte +248 -0
- package/dist/components/forms/media-dropzone/media-dropzone.svelte.d.ts +42 -0
- package/dist/components/forms/media-dropzone/media-uploader.svelte.d.ts +81 -0
- package/dist/components/forms/media-dropzone/media-uploader.svelte.js +177 -0
- package/dist/components/forms/number-input/index.d.ts +3 -0
- package/dist/components/forms/number-input/index.js +2 -0
- package/dist/components/forms/number-input/number-input-field.svelte +157 -0
- package/dist/components/forms/number-input/number-input-field.svelte.d.ts +21 -0
- package/dist/components/forms/number-input/number-input-math.d.ts +21 -0
- package/dist/components/forms/number-input/number-input-math.js +43 -0
- package/dist/components/forms/number-input/number-input.svelte +175 -0
- package/dist/components/forms/number-input/number-input.svelte.d.ts +53 -0
- package/dist/components/forms/quantity-input/index.d.ts +1 -0
- package/dist/components/forms/quantity-input/index.js +1 -0
- package/dist/components/forms/quantity-input/quantity-input.svelte +262 -0
- package/dist/components/forms/quantity-input/quantity-input.svelte.d.ts +75 -0
- package/dist/components/forms/radio-group/index.d.ts +2 -0
- package/dist/components/forms/radio-group/index.js +2 -0
- package/dist/components/forms/radio-group/radio-group-item.svelte +41 -0
- package/dist/components/forms/radio-group/radio-group-item.svelte.d.ts +6 -0
- package/dist/components/forms/radio-group/radio-group.svelte +30 -0
- package/dist/components/forms/radio-group/radio-group.svelte.d.ts +5 -0
- package/dist/components/forms/select/index.d.ts +10 -0
- package/dist/components/forms/select/index.js +10 -0
- package/dist/components/forms/select/select-content.svelte +53 -0
- package/dist/components/forms/select/select-content.svelte.d.ts +9 -0
- package/dist/components/forms/select/select-group.svelte +16 -0
- package/dist/components/forms/select/select-group.svelte.d.ts +5 -0
- package/dist/components/forms/select/select-item.svelte +67 -0
- package/dist/components/forms/select/select-item.svelte.d.ts +13 -0
- package/dist/components/forms/select/select-label.svelte +23 -0
- package/dist/components/forms/select/select-label.svelte.d.ts +5 -0
- package/dist/components/forms/select/select-scroll-down-button.svelte +30 -0
- package/dist/components/forms/select/select-scroll-down-button.svelte.d.ts +6 -0
- package/dist/components/forms/select/select-scroll-up-button.svelte +30 -0
- package/dist/components/forms/select/select-scroll-up-button.svelte.d.ts +6 -0
- package/dist/components/forms/select/select-separator.svelte +26 -0
- package/dist/components/forms/select/select-separator.svelte.d.ts +6 -0
- package/dist/components/forms/select/select-trigger.svelte +48 -0
- package/dist/components/forms/select/select-trigger.svelte.d.ts +14 -0
- package/dist/components/forms/select/select-value.svelte +16 -0
- package/dist/components/forms/select/select-value.svelte.d.ts +5 -0
- package/dist/components/forms/select/select.svelte +33 -0
- package/dist/components/forms/select/select.svelte.d.ts +20 -0
- package/dist/components/forms/switch/index.d.ts +1 -0
- package/dist/components/forms/switch/index.js +1 -0
- package/dist/components/forms/switch/switch.svelte +41 -0
- package/dist/components/forms/switch/switch.svelte.d.ts +7 -0
- package/dist/components/forms/switch-field/index.d.ts +1 -0
- package/dist/components/forms/switch-field/index.js +1 -0
- package/dist/components/forms/switch-field/switch-field.svelte +124 -0
- package/dist/components/forms/switch-field/switch-field.svelte.d.ts +51 -0
- package/dist/components/forms/textarea/index.d.ts +1 -0
- package/dist/components/forms/textarea/index.js +1 -0
- package/dist/components/forms/textarea/textarea.svelte +70 -0
- package/dist/components/forms/textarea/textarea.svelte.d.ts +12 -0
- package/dist/components/forms/time-picker/index.d.ts +1 -0
- package/dist/components/forms/time-picker/index.js +1 -0
- package/dist/components/forms/time-picker/time-picker.svelte +127 -0
- package/dist/components/forms/time-picker/time-picker.svelte.d.ts +20 -0
- package/dist/components/forms/toggle/index.d.ts +2 -0
- package/dist/components/forms/toggle/index.js +2 -0
- package/dist/components/forms/toggle/toggle-variants.d.ts +13 -0
- package/dist/components/forms/toggle/toggle-variants.js +63 -0
- package/dist/components/forms/toggle/toggle.svelte +48 -0
- package/dist/components/forms/toggle/toggle.svelte.d.ts +16 -0
- package/dist/components/forms/toggle-group/index.d.ts +2 -0
- package/dist/components/forms/toggle-group/index.js +2 -0
- package/dist/components/forms/toggle-group/toggle-group-item.svelte +60 -0
- package/dist/components/forms/toggle-group/toggle-group-item.svelte.d.ts +9 -0
- package/dist/components/forms/toggle-group/toggle-group.svelte +82 -0
- package/dist/components/forms/toggle-group/toggle-group.svelte.d.ts +21 -0
- package/dist/components/layout/aside-card/aside-card.svelte +76 -0
- package/dist/components/layout/aside-card/aside-card.svelte.d.ts +19 -0
- package/dist/components/layout/aside-card/index.d.ts +1 -0
- package/dist/components/layout/aside-card/index.js +1 -0
- package/dist/components/layout/card/card-action.svelte +33 -0
- package/dist/components/layout/card/card-action.svelte.d.ts +12 -0
- package/dist/components/layout/card/card-content.svelte +48 -0
- package/dist/components/layout/card/card-content.svelte.d.ts +19 -0
- package/dist/components/layout/card/card-description.svelte +32 -0
- package/dist/components/layout/card/card-description.svelte.d.ts +6 -0
- package/dist/components/layout/card/card-footer.svelte +62 -0
- package/dist/components/layout/card/card-footer.svelte.d.ts +23 -0
- package/dist/components/layout/card/card-header.svelte +48 -0
- package/dist/components/layout/card/card-header.svelte.d.ts +17 -0
- package/dist/components/layout/card/card-title.svelte +61 -0
- package/dist/components/layout/card/card-title.svelte.d.ts +26 -0
- package/dist/components/layout/card/card.svelte +60 -0
- package/dist/components/layout/card/card.svelte.d.ts +19 -0
- package/dist/components/layout/card/index.d.ts +7 -0
- package/dist/components/layout/card/index.js +7 -0
- package/dist/components/layout/card-grid/card-grid-cell.svelte +32 -0
- package/dist/components/layout/card-grid/card-grid-cell.svelte.d.ts +11 -0
- package/dist/components/layout/card-grid/card-grid.svelte +51 -0
- package/dist/components/layout/card-grid/card-grid.svelte.d.ts +17 -0
- package/dist/components/layout/card-grid/index.d.ts +2 -0
- package/dist/components/layout/card-grid/index.js +2 -0
- package/dist/components/layout/card-list/card-list.svelte +59 -0
- package/dist/components/layout/card-list/card-list.svelte.d.ts +27 -0
- package/dist/components/layout/card-list/index.d.ts +1 -0
- package/dist/components/layout/card-list/index.js +1 -0
- package/dist/components/layout/collapsible/collapsible-content.svelte +16 -0
- package/dist/components/layout/collapsible/collapsible-content.svelte.d.ts +5 -0
- package/dist/components/layout/collapsible/collapsible-trigger.svelte +16 -0
- package/dist/components/layout/collapsible/collapsible-trigger.svelte.d.ts +5 -0
- package/dist/components/layout/collapsible/collapsible.svelte +22 -0
- package/dist/components/layout/collapsible/collapsible.svelte.d.ts +10 -0
- package/dist/components/layout/collapsible/index.d.ts +3 -0
- package/dist/components/layout/collapsible/index.js +3 -0
- package/dist/components/layout/page-header/index.d.ts +1 -0
- package/dist/components/layout/page-header/index.js +1 -0
- package/dist/components/layout/page-header/page-header.svelte +118 -0
- package/dist/components/layout/page-header/page-header.svelte.d.ts +34 -0
- package/dist/components/layout/page-layout/index.d.ts +1 -0
- package/dist/components/layout/page-layout/index.js +1 -0
- package/dist/components/layout/page-layout/page-layout.svelte +30 -0
- package/dist/components/layout/page-layout/page-layout.svelte.d.ts +10 -0
- package/dist/components/layout/separator/index.d.ts +1 -0
- package/dist/components/layout/separator/index.js +1 -0
- package/dist/components/layout/separator/separator.svelte +34 -0
- package/dist/components/layout/separator/separator.svelte.d.ts +5 -0
- package/dist/components/layout/summary-card/index.d.ts +1 -0
- package/dist/components/layout/summary-card/index.js +1 -0
- package/dist/components/layout/summary-card/summary-card.svelte +51 -0
- package/dist/components/layout/summary-card/summary-card.svelte.d.ts +23 -0
- package/dist/components/navigation/breadcrumb/breadcrumb-ellipsis.svelte +38 -0
- package/dist/components/navigation/breadcrumb/breadcrumb-ellipsis.svelte.d.ts +9 -0
- package/dist/components/navigation/breadcrumb/breadcrumb-item.svelte +30 -0
- package/dist/components/navigation/breadcrumb/breadcrumb-item.svelte.d.ts +10 -0
- package/dist/components/navigation/breadcrumb/breadcrumb-link.svelte +42 -0
- package/dist/components/navigation/breadcrumb/breadcrumb-link.svelte.d.ts +12 -0
- package/dist/components/navigation/breadcrumb/breadcrumb-list.svelte +26 -0
- package/dist/components/navigation/breadcrumb/breadcrumb-list.svelte.d.ts +6 -0
- package/dist/components/navigation/breadcrumb/breadcrumb-page.svelte +31 -0
- package/dist/components/navigation/breadcrumb/breadcrumb-page.svelte.d.ts +10 -0
- package/dist/components/navigation/breadcrumb/breadcrumb-separator.svelte +39 -0
- package/dist/components/navigation/breadcrumb/breadcrumb-separator.svelte.d.ts +9 -0
- package/dist/components/navigation/breadcrumb/breadcrumb.svelte +32 -0
- package/dist/components/navigation/breadcrumb/breadcrumb.svelte.d.ts +11 -0
- package/dist/components/navigation/breadcrumb/index.d.ts +7 -0
- package/dist/components/navigation/breadcrumb/index.js +7 -0
- package/dist/components/navigation/sidebar/context.svelte.d.ts +26 -0
- package/dist/components/navigation/sidebar/context.svelte.js +61 -0
- package/dist/components/navigation/sidebar/index.d.ts +25 -0
- package/dist/components/navigation/sidebar/index.js +25 -0
- package/dist/components/navigation/sidebar/sidebar-content.svelte +32 -0
- package/dist/components/navigation/sidebar/sidebar-content.svelte.d.ts +7 -0
- package/dist/components/navigation/sidebar/sidebar-footer.svelte +28 -0
- package/dist/components/navigation/sidebar/sidebar-footer.svelte.d.ts +6 -0
- package/dist/components/navigation/sidebar/sidebar-group-action.svelte +50 -0
- package/dist/components/navigation/sidebar/sidebar-group-action.svelte.d.ts +12 -0
- package/dist/components/navigation/sidebar/sidebar-group-content.svelte +36 -0
- package/dist/components/navigation/sidebar/sidebar-group-content.svelte.d.ts +6 -0
- package/dist/components/navigation/sidebar/sidebar-group-label.svelte +51 -0
- package/dist/components/navigation/sidebar/sidebar-group-label.svelte.d.ts +12 -0
- package/dist/components/navigation/sidebar/sidebar-group.svelte +32 -0
- package/dist/components/navigation/sidebar/sidebar-group.svelte.d.ts +6 -0
- package/dist/components/navigation/sidebar/sidebar-header.svelte +33 -0
- package/dist/components/navigation/sidebar/sidebar-header.svelte.d.ts +6 -0
- package/dist/components/navigation/sidebar/sidebar-input.svelte +31 -0
- package/dist/components/navigation/sidebar/sidebar-input.svelte.d.ts +5 -0
- package/dist/components/navigation/sidebar/sidebar-inset.svelte +32 -0
- package/dist/components/navigation/sidebar/sidebar-inset.svelte.d.ts +6 -0
- package/dist/components/navigation/sidebar/sidebar-menu-action.svelte +58 -0
- package/dist/components/navigation/sidebar/sidebar-menu-action.svelte.d.ts +14 -0
- package/dist/components/navigation/sidebar/sidebar-menu-badge.svelte +42 -0
- package/dist/components/navigation/sidebar/sidebar-menu-badge.svelte.d.ts +6 -0
- package/dist/components/navigation/sidebar/sidebar-menu-button.svelte +97 -0
- package/dist/components/navigation/sidebar/sidebar-menu-button.svelte.d.ts +20 -0
- package/dist/components/navigation/sidebar/sidebar-menu-item.svelte +33 -0
- package/dist/components/navigation/sidebar/sidebar-menu-item.svelte.d.ts +6 -0
- package/dist/components/navigation/sidebar/sidebar-menu-skeleton.svelte +46 -0
- package/dist/components/navigation/sidebar/sidebar-menu-skeleton.svelte.d.ts +8 -0
- package/dist/components/navigation/sidebar/sidebar-menu-sub-button.svelte +64 -0
- package/dist/components/navigation/sidebar/sidebar-menu-sub-button.svelte.d.ts +14 -0
- package/dist/components/navigation/sidebar/sidebar-menu-sub-item.svelte +33 -0
- package/dist/components/navigation/sidebar/sidebar-menu-sub-item.svelte.d.ts +6 -0
- package/dist/components/navigation/sidebar/sidebar-menu-sub.svelte +37 -0
- package/dist/components/navigation/sidebar/sidebar-menu-sub.svelte.d.ts +6 -0
- package/dist/components/navigation/sidebar/sidebar-menu.svelte +28 -0
- package/dist/components/navigation/sidebar/sidebar-menu.svelte.d.ts +6 -0
- package/dist/components/navigation/sidebar/sidebar-provider.svelte +74 -0
- package/dist/components/navigation/sidebar/sidebar-provider.svelte.d.ts +19 -0
- package/dist/components/navigation/sidebar/sidebar-rail.svelte +42 -0
- package/dist/components/navigation/sidebar/sidebar-rail.svelte.d.ts +6 -0
- package/dist/components/navigation/sidebar/sidebar-separator.svelte +29 -0
- package/dist/components/navigation/sidebar/sidebar-separator.svelte.d.ts +5 -0
- package/dist/components/navigation/sidebar/sidebar-trigger.svelte +40 -0
- package/dist/components/navigation/sidebar/sidebar-trigger.svelte.d.ts +5 -0
- package/dist/components/navigation/sidebar/sidebar-variants.d.ts +11 -0
- package/dist/components/navigation/sidebar/sidebar-variants.js +40 -0
- package/dist/components/navigation/sidebar/sidebar.svelte +152 -0
- package/dist/components/navigation/sidebar/sidebar.svelte.d.ts +17 -0
- package/dist/components/navigation/stepper/index.d.ts +2 -0
- package/dist/components/navigation/stepper/index.js +2 -0
- package/dist/components/navigation/stepper/stepper-chip.svelte +42 -0
- package/dist/components/navigation/stepper/stepper-chip.svelte.d.ts +16 -0
- package/dist/components/navigation/stepper/stepper-navigation.svelte +112 -0
- package/dist/components/navigation/stepper/stepper-navigation.svelte.d.ts +36 -0
- package/dist/components/navigation/stepper/stepper.svelte +364 -0
- package/dist/components/navigation/stepper/stepper.svelte.d.ts +65 -0
- package/dist/components/navigation/tabs/index.d.ts +4 -0
- package/dist/components/navigation/tabs/index.js +4 -0
- package/dist/components/navigation/tabs/tabs-content.svelte +23 -0
- package/dist/components/navigation/tabs/tabs-content.svelte.d.ts +5 -0
- package/dist/components/navigation/tabs/tabs-list.svelte +24 -0
- package/dist/components/navigation/tabs/tabs-list.svelte.d.ts +5 -0
- package/dist/components/navigation/tabs/tabs-trigger.svelte +24 -0
- package/dist/components/navigation/tabs/tabs-trigger.svelte.d.ts +5 -0
- package/dist/components/navigation/tabs/tabs.svelte +30 -0
- package/dist/components/navigation/tabs/tabs.svelte.d.ts +5 -0
- package/dist/components/overlays/alert-dialog/alert-dialog-action.svelte +50 -0
- package/dist/components/overlays/alert-dialog/alert-dialog-action.svelte.d.ts +7 -0
- package/dist/components/overlays/alert-dialog/alert-dialog-cancel.svelte +34 -0
- package/dist/components/overlays/alert-dialog/alert-dialog-cancel.svelte.d.ts +7 -0
- package/dist/components/overlays/alert-dialog/alert-dialog-content.svelte +45 -0
- package/dist/components/overlays/alert-dialog/alert-dialog-content.svelte.d.ts +12 -0
- package/dist/components/overlays/alert-dialog/alert-dialog-description.svelte +23 -0
- package/dist/components/overlays/alert-dialog/alert-dialog-description.svelte.d.ts +5 -0
- package/dist/components/overlays/alert-dialog/alert-dialog-footer.svelte +35 -0
- package/dist/components/overlays/alert-dialog/alert-dialog-footer.svelte.d.ts +6 -0
- package/dist/components/overlays/alert-dialog/alert-dialog-header.svelte +35 -0
- package/dist/components/overlays/alert-dialog/alert-dialog-header.svelte.d.ts +6 -0
- package/dist/components/overlays/alert-dialog/alert-dialog-media.svelte +35 -0
- package/dist/components/overlays/alert-dialog/alert-dialog-media.svelte.d.ts +6 -0
- package/dist/components/overlays/alert-dialog/alert-dialog-overlay.svelte +26 -0
- package/dist/components/overlays/alert-dialog/alert-dialog-overlay.svelte.d.ts +5 -0
- package/dist/components/overlays/alert-dialog/alert-dialog-portal.svelte +16 -0
- package/dist/components/overlays/alert-dialog/alert-dialog-portal.svelte.d.ts +5 -0
- package/dist/components/overlays/alert-dialog/alert-dialog-title.svelte +26 -0
- package/dist/components/overlays/alert-dialog/alert-dialog-title.svelte.d.ts +5 -0
- package/dist/components/overlays/alert-dialog/alert-dialog-trigger.svelte +16 -0
- package/dist/components/overlays/alert-dialog/alert-dialog-trigger.svelte.d.ts +5 -0
- package/dist/components/overlays/alert-dialog/alert-dialog.svelte +34 -0
- package/dist/components/overlays/alert-dialog/alert-dialog.svelte.d.ts +12 -0
- package/dist/components/overlays/alert-dialog/index.d.ts +12 -0
- package/dist/components/overlays/alert-dialog/index.js +12 -0
- package/dist/components/overlays/dialog/dialog-close.svelte +16 -0
- package/dist/components/overlays/dialog/dialog-close.svelte.d.ts +5 -0
- package/dist/components/overlays/dialog/dialog-content.svelte +79 -0
- package/dist/components/overlays/dialog/dialog-content.svelte.d.ts +26 -0
- package/dist/components/overlays/dialog/dialog-description.svelte +23 -0
- package/dist/components/overlays/dialog/dialog-description.svelte.d.ts +5 -0
- package/dist/components/overlays/dialog/dialog-footer.svelte +27 -0
- package/dist/components/overlays/dialog/dialog-footer.svelte.d.ts +6 -0
- package/dist/components/overlays/dialog/dialog-header.svelte +27 -0
- package/dist/components/overlays/dialog/dialog-header.svelte.d.ts +6 -0
- package/dist/components/overlays/dialog/dialog-overlay.svelte +26 -0
- package/dist/components/overlays/dialog/dialog-overlay.svelte.d.ts +5 -0
- package/dist/components/overlays/dialog/dialog-portal.svelte +16 -0
- package/dist/components/overlays/dialog/dialog-portal.svelte.d.ts +5 -0
- package/dist/components/overlays/dialog/dialog-title.svelte +23 -0
- package/dist/components/overlays/dialog/dialog-title.svelte.d.ts +5 -0
- package/dist/components/overlays/dialog/dialog-trigger.svelte +16 -0
- package/dist/components/overlays/dialog/dialog-trigger.svelte.d.ts +5 -0
- package/dist/components/overlays/dialog/dialog.svelte +16 -0
- package/dist/components/overlays/dialog/dialog.svelte.d.ts +5 -0
- package/dist/components/overlays/dialog/index.d.ts +10 -0
- package/dist/components/overlays/dialog/index.js +10 -0
- package/dist/components/overlays/drawer/drawer-close.svelte +16 -0
- package/dist/components/overlays/drawer/drawer-close.svelte.d.ts +5 -0
- package/dist/components/overlays/drawer/drawer-content.svelte +50 -0
- package/dist/components/overlays/drawer/drawer-content.svelte.d.ts +8 -0
- package/dist/components/overlays/drawer/drawer-description.svelte +23 -0
- package/dist/components/overlays/drawer/drawer-description.svelte.d.ts +5 -0
- package/dist/components/overlays/drawer/drawer-footer.svelte +27 -0
- package/dist/components/overlays/drawer/drawer-footer.svelte.d.ts +6 -0
- package/dist/components/overlays/drawer/drawer-header.svelte +30 -0
- package/dist/components/overlays/drawer/drawer-header.svelte.d.ts +6 -0
- package/dist/components/overlays/drawer/drawer-overlay.svelte +26 -0
- package/dist/components/overlays/drawer/drawer-overlay.svelte.d.ts +5 -0
- package/dist/components/overlays/drawer/drawer-portal.svelte +16 -0
- package/dist/components/overlays/drawer/drawer-portal.svelte.d.ts +5 -0
- package/dist/components/overlays/drawer/drawer-title.svelte +23 -0
- package/dist/components/overlays/drawer/drawer-title.svelte.d.ts +5 -0
- package/dist/components/overlays/drawer/drawer-trigger.svelte +16 -0
- package/dist/components/overlays/drawer/drawer-trigger.svelte.d.ts +5 -0
- package/dist/components/overlays/drawer/drawer.svelte +28 -0
- package/dist/components/overlays/drawer/drawer.svelte.d.ts +11 -0
- package/dist/components/overlays/drawer/index.d.ts +10 -0
- package/dist/components/overlays/drawer/index.js +10 -0
- package/dist/components/overlays/hint/hint.svelte +69 -0
- package/dist/components/overlays/hint/hint.svelte.d.ts +32 -0
- package/dist/components/overlays/hint/index.d.ts +1 -0
- package/dist/components/overlays/hint/index.js +1 -0
- package/dist/components/overlays/hover-card/hover-card-content.svelte +46 -0
- package/dist/components/overlays/hover-card/hover-card-content.svelte.d.ts +12 -0
- package/dist/components/overlays/hover-card/hover-card-trigger.svelte +18 -0
- package/dist/components/overlays/hover-card/hover-card-trigger.svelte.d.ts +5 -0
- package/dist/components/overlays/hover-card/hover-card.svelte +22 -0
- package/dist/components/overlays/hover-card/hover-card.svelte.d.ts +10 -0
- package/dist/components/overlays/hover-card/index.d.ts +3 -0
- package/dist/components/overlays/hover-card/index.js +3 -0
- package/dist/components/overlays/popover/index.d.ts +3 -0
- package/dist/components/overlays/popover/index.js +3 -0
- package/dist/components/overlays/popover/popover-content.svelte +54 -0
- package/dist/components/overlays/popover/popover-content.svelte.d.ts +19 -0
- package/dist/components/overlays/popover/popover-trigger.svelte +16 -0
- package/dist/components/overlays/popover/popover-trigger.svelte.d.ts +5 -0
- package/dist/components/overlays/popover/popover.svelte +22 -0
- package/dist/components/overlays/popover/popover.svelte.d.ts +10 -0
- package/dist/components/overlays/sheet/index.d.ts +8 -0
- package/dist/components/overlays/sheet/index.js +8 -0
- package/dist/components/overlays/sheet/sheet-close.svelte +16 -0
- package/dist/components/overlays/sheet/sheet-close.svelte.d.ts +5 -0
- package/dist/components/overlays/sheet/sheet-content.svelte +71 -0
- package/dist/components/overlays/sheet/sheet-content.svelte.d.ts +18 -0
- package/dist/components/overlays/sheet/sheet-description.svelte +23 -0
- package/dist/components/overlays/sheet/sheet-description.svelte.d.ts +5 -0
- package/dist/components/overlays/sheet/sheet-footer.svelte +27 -0
- package/dist/components/overlays/sheet/sheet-footer.svelte.d.ts +6 -0
- package/dist/components/overlays/sheet/sheet-header.svelte +27 -0
- package/dist/components/overlays/sheet/sheet-header.svelte.d.ts +6 -0
- package/dist/components/overlays/sheet/sheet-title.svelte +23 -0
- package/dist/components/overlays/sheet/sheet-title.svelte.d.ts +5 -0
- package/dist/components/overlays/sheet/sheet-trigger.svelte +16 -0
- package/dist/components/overlays/sheet/sheet-trigger.svelte.d.ts +5 -0
- package/dist/components/overlays/sheet/sheet.svelte +20 -0
- package/dist/components/overlays/sheet/sheet.svelte.d.ts +9 -0
- package/dist/components/overlays/tooltip/index.d.ts +4 -0
- package/dist/components/overlays/tooltip/index.js +4 -0
- package/dist/components/overlays/tooltip/tooltip-content.svelte +58 -0
- package/dist/components/overlays/tooltip/tooltip-content.svelte.d.ts +14 -0
- package/dist/components/overlays/tooltip/tooltip-provider.svelte +16 -0
- package/dist/components/overlays/tooltip/tooltip-provider.svelte.d.ts +5 -0
- package/dist/components/overlays/tooltip/tooltip-trigger.svelte +16 -0
- package/dist/components/overlays/tooltip/tooltip-trigger.svelte.d.ts +5 -0
- package/dist/components/overlays/tooltip/tooltip.svelte +21 -0
- package/dist/components/overlays/tooltip/tooltip.svelte.d.ts +5 -0
- package/dist/components/typography/heading/heading.svelte +60 -0
- package/dist/components/typography/heading/heading.svelte.d.ts +23 -0
- package/dist/components/typography/heading/index.d.ts +1 -0
- package/dist/components/typography/heading/index.js +1 -0
- package/dist/components/typography/text/index.d.ts +1 -0
- package/dist/components/typography/text/index.js +1 -0
- package/dist/components/typography/text/text.svelte +84 -0
- package/dist/components/typography/text/text.svelte.d.ts +31 -0
- package/dist/form.d.ts +9 -0
- package/dist/form.js +9 -0
- package/dist/hooks/is-mobile.svelte.d.ts +15 -0
- package/dist/hooks/is-mobile.svelte.js +17 -0
- package/dist/index.d.ts +94 -0
- package/dist/index.js +101 -0
- package/dist/styles/components.css +192 -0
- package/dist/theme.css +535 -0
- package/dist/tokens/cli.d.ts +11 -0
- package/dist/tokens/cli.js +58 -0
- package/dist/tokens/config.d.ts +39 -0
- package/dist/tokens/config.js +46 -0
- package/dist/tokens/emit-web.d.ts +11 -0
- package/dist/tokens/emit-web.js +172 -0
- package/dist/tokens/geometry.d.ts +62 -0
- package/dist/tokens/geometry.js +67 -0
- package/dist/tokens/info.d.ts +10 -0
- package/dist/tokens/info.js +62 -0
- package/dist/tokens/presets.d.ts +51 -0
- package/dist/tokens/presets.js +35 -0
- package/dist/tokens/semantic.d.ts +32 -0
- package/dist/tokens/semantic.js +158 -0
- package/dist/tokens/tailwind-palette.d.ts +356 -0
- package/dist/tokens/tailwind-palette.js +352 -0
- package/dist/tokens.d.ts +11 -0
- package/dist/tokens.js +11 -0
- package/dist/utils/cn.d.ts +11 -0
- package/dist/utils/cn.js +14 -0
- package/dist/utils/monotone-path.d.ts +10 -0
- package/dist/utils/monotone-path.js +52 -0
- package/dist/utils/segmented-control.d.ts +47 -0
- package/dist/utils/segmented-control.js +53 -0
- package/dist/utils/tone.d.ts +78 -0
- package/dist/utils/tone.js +119 -0
- package/dist/utils/types.d.ts +17 -0
- package/dist/utils/types.js +6 -0
- package/package.json +124 -3
- package/skills/mise/SKILL.md +159 -0
- package/skills/mise/components/actions.md +200 -0
- package/skills/mise/components/data-display.md +728 -0
- package/skills/mise/components/feedback.md +198 -0
- package/skills/mise/components/forms.md +712 -0
- package/skills/mise/components/layout.md +178 -0
- package/skills/mise/components/navigation.md +250 -0
- package/skills/mise/components/overlays.md +291 -0
- package/skills/mise/components/typography.md +36 -0
- package/skills/mise/recipes/dashboard-page.md +40 -0
- package/skills/mise/recipes/dashboard-page.svelte +132 -0
- package/skills/mise/recipes/data-table.md +39 -0
- package/skills/mise/recipes/data-table.svelte +130 -0
- package/skills/mise/recipes/form-sveltekit.svelte +79 -0
- package/skills/mise/recipes/form.md +82 -0
- package/skills/mise/recipes/form.svelte +158 -0
- package/skills/mise/setup.md +99 -0
- package/skills/mise/theming.md +82 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Origin: the React package 2.23.0 `metric-bar.tsx` (`MetricBar`)
|
|
3
|
+
Diverged: `icon` is a snippet, and `label`, `value`, `description` and
|
|
4
|
+
`trailing` take a string or a snippet, as R4-5 has a ReactNode prop. Takes
|
|
5
|
+
`class` and spreads the rest onto the root, as every component does.
|
|
6
|
+
-->
|
|
7
|
+
<script lang="ts" module>
|
|
8
|
+
import type { Snippet } from 'svelte'
|
|
9
|
+
import type { HTMLAttributes } from 'svelte/elements'
|
|
10
|
+
|
|
11
|
+
import type { Tone } from '../../../utils/tone.js'
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* One measure, stated and then drawn. The figure is the answer and the bar
|
|
15
|
+
* is the context: a reader who wants the value should not estimate it from a
|
|
16
|
+
* length, and a reader comparing rows scans the bars, not the digits. So the
|
|
17
|
+
* figure sits on the label's line.
|
|
18
|
+
*
|
|
19
|
+
* Tone colours the fill only. Colouring one bar red says act on it;
|
|
20
|
+
* colouring all of them says nothing.
|
|
21
|
+
*
|
|
22
|
+
* Every slot is a `div`, since any of them may hold a block, such as a
|
|
23
|
+
* `Skeleton`.
|
|
24
|
+
*/
|
|
25
|
+
export type MetricBarProps = HTMLAttributes<HTMLDivElement> & {
|
|
26
|
+
label: string | Snippet
|
|
27
|
+
/** How full the bar is, 0–100. Clamped: over 100 is a bug upstream. */
|
|
28
|
+
percent: number
|
|
29
|
+
/** The figure the bar shows, at the label's right edge. */
|
|
30
|
+
value?: string | number | Snippet
|
|
31
|
+
/** A muted line under the label. */
|
|
32
|
+
description?: string | Snippet
|
|
33
|
+
/** A glyph in a `md` `IconChip` before the label: what the row is about. */
|
|
34
|
+
icon?: Snippet
|
|
35
|
+
/**
|
|
36
|
+
* The row's place in a ranking, as a `MetricRank` before the label, for a
|
|
37
|
+
* list whose order is the point. Pass `icon` or `rank`, not both.
|
|
38
|
+
*/
|
|
39
|
+
rank?: number
|
|
40
|
+
/**
|
|
41
|
+
* Beside the bar, on its line: `398 / 500 units`. The bar shortens to make
|
|
42
|
+
* room; a figure that qualifies the bar belongs on the bar's line.
|
|
43
|
+
*/
|
|
44
|
+
trailing?: string | Snippet
|
|
45
|
+
/** The fill. `primary` by default; a status only where the reader should act. */
|
|
46
|
+
tone?: Tone
|
|
47
|
+
}
|
|
48
|
+
</script>
|
|
49
|
+
|
|
50
|
+
<script lang="ts">
|
|
51
|
+
import { cn } from '../../../utils/cn.js'
|
|
52
|
+
import { TONE_INDICATOR_CLASS } from '../../../utils/tone.js'
|
|
53
|
+
import Progress from '../../feedback/progress/progress.svelte'
|
|
54
|
+
import IconChip from '../icon-chip/icon-chip.svelte'
|
|
55
|
+
import MetricRank from './metric-rank.svelte'
|
|
56
|
+
|
|
57
|
+
let {
|
|
58
|
+
label,
|
|
59
|
+
percent,
|
|
60
|
+
value,
|
|
61
|
+
description,
|
|
62
|
+
icon,
|
|
63
|
+
rank,
|
|
64
|
+
trailing,
|
|
65
|
+
tone = 'primary',
|
|
66
|
+
class: className,
|
|
67
|
+
...rest
|
|
68
|
+
}: MetricBarProps = $props()
|
|
69
|
+
|
|
70
|
+
const clamped = $derived(Math.min(100, Math.max(0, percent)))
|
|
71
|
+
/** The bar is data, so it needs a name of its own; the label is a separate node. */
|
|
72
|
+
const barLabel = $derived(
|
|
73
|
+
typeof label === 'string' ? `${label}: ${clamped.toFixed(0)}%` : undefined,
|
|
74
|
+
)
|
|
75
|
+
</script>
|
|
76
|
+
|
|
77
|
+
{#snippet content(node: string | number | Snippet)}
|
|
78
|
+
{#if typeof node === 'function'}
|
|
79
|
+
{@render node()}
|
|
80
|
+
{:else}
|
|
81
|
+
{node}
|
|
82
|
+
{/if}
|
|
83
|
+
{/snippet}
|
|
84
|
+
|
|
85
|
+
<div data-slot="metric-bar" class={cn('flex items-start gap-3', className)} {...rest}>
|
|
86
|
+
{#if icon}
|
|
87
|
+
<IconChip size="md">{@render icon()}</IconChip>
|
|
88
|
+
{/if}
|
|
89
|
+
{#if rank !== undefined}
|
|
90
|
+
<MetricRank {rank} />
|
|
91
|
+
{/if}
|
|
92
|
+
|
|
93
|
+
<div class="min-w-0 flex-1">
|
|
94
|
+
<div class="flex items-baseline justify-between gap-3">
|
|
95
|
+
<div class="min-w-0 truncate text-sm font-medium">{@render content(label)}</div>
|
|
96
|
+
{#if value !== undefined}
|
|
97
|
+
<div class="text-muted-foreground shrink-0 text-sm tabular-nums">
|
|
98
|
+
{@render content(value)}
|
|
99
|
+
</div>
|
|
100
|
+
{/if}
|
|
101
|
+
</div>
|
|
102
|
+
|
|
103
|
+
{#if description}
|
|
104
|
+
<div class="text-muted-foreground mt-0.5 truncate text-xs">
|
|
105
|
+
{@render content(description)}
|
|
106
|
+
</div>
|
|
107
|
+
{/if}
|
|
108
|
+
|
|
109
|
+
<div class="mt-2 flex items-center gap-3">
|
|
110
|
+
<Progress
|
|
111
|
+
value={clamped}
|
|
112
|
+
aria-label={barLabel}
|
|
113
|
+
class={cn('flex-1', TONE_INDICATOR_CLASS[tone])}
|
|
114
|
+
/>
|
|
115
|
+
{#if trailing}
|
|
116
|
+
<div class="text-muted-foreground shrink-0 text-xs tabular-nums">
|
|
117
|
+
{@render content(trailing)}
|
|
118
|
+
</div>
|
|
119
|
+
{/if}
|
|
120
|
+
</div>
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
import type { Tone } from '../../../utils/tone.js';
|
|
4
|
+
/**
|
|
5
|
+
* One measure, stated and then drawn. The figure is the answer and the bar
|
|
6
|
+
* is the context: a reader who wants the value should not estimate it from a
|
|
7
|
+
* length, and a reader comparing rows scans the bars, not the digits. So the
|
|
8
|
+
* figure sits on the label's line.
|
|
9
|
+
*
|
|
10
|
+
* Tone colours the fill only. Colouring one bar red says act on it;
|
|
11
|
+
* colouring all of them says nothing.
|
|
12
|
+
*
|
|
13
|
+
* Every slot is a `div`, since any of them may hold a block, such as a
|
|
14
|
+
* `Skeleton`.
|
|
15
|
+
*/
|
|
16
|
+
export type MetricBarProps = HTMLAttributes<HTMLDivElement> & {
|
|
17
|
+
label: string | Snippet;
|
|
18
|
+
/** How full the bar is, 0–100. Clamped: over 100 is a bug upstream. */
|
|
19
|
+
percent: number;
|
|
20
|
+
/** The figure the bar shows, at the label's right edge. */
|
|
21
|
+
value?: string | number | Snippet;
|
|
22
|
+
/** A muted line under the label. */
|
|
23
|
+
description?: string | Snippet;
|
|
24
|
+
/** A glyph in a `md` `IconChip` before the label: what the row is about. */
|
|
25
|
+
icon?: Snippet;
|
|
26
|
+
/**
|
|
27
|
+
* The row's place in a ranking, as a `MetricRank` before the label, for a
|
|
28
|
+
* list whose order is the point. Pass `icon` or `rank`, not both.
|
|
29
|
+
*/
|
|
30
|
+
rank?: number;
|
|
31
|
+
/**
|
|
32
|
+
* Beside the bar, on its line: `398 / 500 units`. The bar shortens to make
|
|
33
|
+
* room; a figure that qualifies the bar belongs on the bar's line.
|
|
34
|
+
*/
|
|
35
|
+
trailing?: string | Snippet;
|
|
36
|
+
/** The fill. `primary` by default; a status only where the reader should act. */
|
|
37
|
+
tone?: Tone;
|
|
38
|
+
};
|
|
39
|
+
declare const MetricBar: import("svelte").Component<MetricBarProps, {}, "">;
|
|
40
|
+
type MetricBar = ReturnType<typeof MetricBar>;
|
|
41
|
+
export default MetricBar;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Origin: the React package 2.23.0 `metric-bar.tsx` (`MetricRank`)
|
|
3
|
+
Diverged: takes `class` and spreads the rest onto the root, as every
|
|
4
|
+
component does. The disc is the neutral wash, `bg-foreground/[0.07]`, not
|
|
5
|
+
`bg-muted`, which vanished on the muted canvas.
|
|
6
|
+
-->
|
|
7
|
+
<script lang="ts" module>
|
|
8
|
+
import type { HTMLAttributes } from 'svelte/elements'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* A place in a ranking, `1`, `2`, `3`, in a small muted circle. Smaller than
|
|
12
|
+
* an `IconChip` on purpose: the number orders the rows, it is not what they
|
|
13
|
+
* are about.
|
|
14
|
+
*/
|
|
15
|
+
export type MetricRankProps = HTMLAttributes<HTMLSpanElement> & { rank: number }
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<script lang="ts">
|
|
19
|
+
import { cn } from '../../../utils/cn.js'
|
|
20
|
+
|
|
21
|
+
let { rank, class: className, ...rest }: MetricRankProps = $props()
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
<span
|
|
25
|
+
data-slot="metric-rank"
|
|
26
|
+
class={cn(
|
|
27
|
+
'bg-foreground/[0.07] text-muted-foreground grid size-6 shrink-0 place-items-center rounded-full text-xs tabular-nums',
|
|
28
|
+
className,
|
|
29
|
+
)}
|
|
30
|
+
{...rest}
|
|
31
|
+
>
|
|
32
|
+
{rank}
|
|
33
|
+
</span>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
2
|
+
/**
|
|
3
|
+
* A place in a ranking, `1`, `2`, `3`, in a small muted circle. Smaller than
|
|
4
|
+
* an `IconChip` on purpose: the number orders the rows, it is not what they
|
|
5
|
+
* are about.
|
|
6
|
+
*/
|
|
7
|
+
export type MetricRankProps = HTMLAttributes<HTMLSpanElement> & {
|
|
8
|
+
rank: number;
|
|
9
|
+
};
|
|
10
|
+
declare const MetricRank: import("svelte").Component<MetricRankProps, {}, "">;
|
|
11
|
+
type MetricRank = ReturnType<typeof MetricRank>;
|
|
12
|
+
export default MetricRank;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as MetricGrid, type MetricGridItem, type MetricGridProps, } from './metric-grid.svelte';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as MetricGrid, } from './metric-grid.svelte';
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Origin: the React package 2.23.0 `metric-grid.tsx`
|
|
3
|
+
Diverged: an item's `label`, `value`, `description` and `trailing` take a
|
|
4
|
+
string or a snippet, as R4-5 has a ReactNode prop. Takes `class` and spreads
|
|
5
|
+
the rest onto the grid, as every component does.
|
|
6
|
+
-->
|
|
7
|
+
<script lang="ts" module>
|
|
8
|
+
import type { Snippet } from 'svelte'
|
|
9
|
+
import type { HTMLAttributes } from 'svelte/elements'
|
|
10
|
+
|
|
11
|
+
import type { Tone } from '../../../utils/tone.js'
|
|
12
|
+
|
|
13
|
+
export type MetricGridItem = {
|
|
14
|
+
/** Stable across renders; a translated label is not. */
|
|
15
|
+
id: string
|
|
16
|
+
label: string | Snippet
|
|
17
|
+
/** How full this cell's bar is, 0–100. */
|
|
18
|
+
percent: number
|
|
19
|
+
value?: string | number | Snippet
|
|
20
|
+
description?: string | Snippet
|
|
21
|
+
/** Beside the bar: a percentage, a count, a unit. */
|
|
22
|
+
trailing?: string | Snippet
|
|
23
|
+
tone?: Tone
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* A breakdown as a grid of bordered cells rather than a list of rows. A
|
|
28
|
+
* reader comparing sub-groups against each other wants them adjacent, not in
|
|
29
|
+
* order; `CardList` is the shape when the order means something.
|
|
30
|
+
*
|
|
31
|
+
* Each cell is a `MetricBar`, and this does not relitigate it: a caller
|
|
32
|
+
* wanting other cell content wants `CardGrid` directly.
|
|
33
|
+
*/
|
|
34
|
+
export type MetricGridProps = HTMLAttributes<HTMLDivElement> & {
|
|
35
|
+
items: MetricGridItem[]
|
|
36
|
+
/**
|
|
37
|
+
* Columns at `md` and up; one below, where two cells side by side leave no
|
|
38
|
+
* room for a label and a bar. The caller picks it, knowing how many items
|
|
39
|
+
* there are: three columns and four items leaves an orphan.
|
|
40
|
+
*/
|
|
41
|
+
columns?: 2 | 3
|
|
42
|
+
}
|
|
43
|
+
</script>
|
|
44
|
+
|
|
45
|
+
<script lang="ts">
|
|
46
|
+
import CardGrid from '../../layout/card-grid/card-grid.svelte'
|
|
47
|
+
import CardGridCell from '../../layout/card-grid/card-grid-cell.svelte'
|
|
48
|
+
import MetricBar from '../metric-bar/metric-bar.svelte'
|
|
49
|
+
|
|
50
|
+
let { items, columns = 3, ...rest }: MetricGridProps = $props()
|
|
51
|
+
</script>
|
|
52
|
+
|
|
53
|
+
<CardGrid {columns} {...rest}>
|
|
54
|
+
{#each items as item (item.id)}
|
|
55
|
+
<CardGridCell>
|
|
56
|
+
<MetricBar
|
|
57
|
+
label={item.label}
|
|
58
|
+
percent={item.percent}
|
|
59
|
+
value={item.value}
|
|
60
|
+
description={item.description}
|
|
61
|
+
trailing={item.trailing}
|
|
62
|
+
tone={item.tone}
|
|
63
|
+
/>
|
|
64
|
+
</CardGridCell>
|
|
65
|
+
{/each}
|
|
66
|
+
</CardGrid>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
import type { Tone } from '../../../utils/tone.js';
|
|
4
|
+
export type MetricGridItem = {
|
|
5
|
+
/** Stable across renders; a translated label is not. */
|
|
6
|
+
id: string;
|
|
7
|
+
label: string | Snippet;
|
|
8
|
+
/** How full this cell's bar is, 0–100. */
|
|
9
|
+
percent: number;
|
|
10
|
+
value?: string | number | Snippet;
|
|
11
|
+
description?: string | Snippet;
|
|
12
|
+
/** Beside the bar: a percentage, a count, a unit. */
|
|
13
|
+
trailing?: string | Snippet;
|
|
14
|
+
tone?: Tone;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* A breakdown as a grid of bordered cells rather than a list of rows. A
|
|
18
|
+
* reader comparing sub-groups against each other wants them adjacent, not in
|
|
19
|
+
* order; `CardList` is the shape when the order means something.
|
|
20
|
+
*
|
|
21
|
+
* Each cell is a `MetricBar`, and this does not relitigate it: a caller
|
|
22
|
+
* wanting other cell content wants `CardGrid` directly.
|
|
23
|
+
*/
|
|
24
|
+
export type MetricGridProps = HTMLAttributes<HTMLDivElement> & {
|
|
25
|
+
items: MetricGridItem[];
|
|
26
|
+
/**
|
|
27
|
+
* Columns at `md` and up; one below, where two cells side by side leave no
|
|
28
|
+
* room for a label and a bar. The caller picks it, knowing how many items
|
|
29
|
+
* there are: three columns and four items leaves an orphan.
|
|
30
|
+
*/
|
|
31
|
+
columns?: 2 | 3;
|
|
32
|
+
};
|
|
33
|
+
declare const MetricGrid: import("svelte").Component<MetricGridProps, {}, "">;
|
|
34
|
+
type MetricGrid = ReturnType<typeof MetricGrid>;
|
|
35
|
+
export default MetricGrid;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as MetricRow, type MetricRowProps, type MetricRowStat, } from './metric-row.svelte';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as MetricRow, } from './metric-row.svelte';
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Origin: the React package 2.23.0 `metric-row.tsx`
|
|
3
|
+
Diverged: `icon` is a snippet, and `label`, `description`, `trailing` and a
|
|
4
|
+
stat's `label` and `value` take a string or a snippet, as R4-5 has a
|
|
5
|
+
ReactNode prop. Takes `class` and spreads the rest onto the root, as every
|
|
6
|
+
component does.
|
|
7
|
+
-->
|
|
8
|
+
<script lang="ts" module>
|
|
9
|
+
import type { Snippet } from 'svelte'
|
|
10
|
+
import type { HTMLAttributes } from 'svelte/elements'
|
|
11
|
+
|
|
12
|
+
import type { Tone } from '../../../utils/tone.js'
|
|
13
|
+
|
|
14
|
+
export type MetricRowStat = {
|
|
15
|
+
/** Stable key. Labels repeat down a list, so they are not one. */
|
|
16
|
+
id: string
|
|
17
|
+
/**
|
|
18
|
+
* The caption over the figure. Optional: a lone `56%` beside its own bar
|
|
19
|
+
* explains itself.
|
|
20
|
+
*/
|
|
21
|
+
label?: string | Snippet
|
|
22
|
+
value: string | number | Snippet
|
|
23
|
+
/**
|
|
24
|
+
* Colours the figure only. A row where every stat is tinted reads as an
|
|
25
|
+
* alert, the opposite of what a scannable list needs.
|
|
26
|
+
*/
|
|
27
|
+
tone?: Tone
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* A subject, the figures that describe it, and one bar beneath them all.
|
|
32
|
+
*
|
|
33
|
+
* Not `MetricBar` on two counts. Several labelled figures, not one: `80%`,
|
|
34
|
+
* `3`, `1` side by side say nothing without their captions. And the bar runs
|
|
35
|
+
* the full width, under the chip too, because it summarises the row rather
|
|
36
|
+
* than belonging to any one figure. Reach for `MetricBar` when the bar is the
|
|
37
|
+
* point; for this when the row is a thing with several measurements.
|
|
38
|
+
*/
|
|
39
|
+
export type MetricRowProps = HTMLAttributes<HTMLDivElement> & {
|
|
40
|
+
/** A glyph in a `md` `IconChip` before the label. */
|
|
41
|
+
icon?: Snippet
|
|
42
|
+
/** A place in a ranking, as `MetricRank`. Pass `icon` or `rank`, not both. */
|
|
43
|
+
rank?: number
|
|
44
|
+
label: string | Snippet
|
|
45
|
+
/** A muted line under the title. */
|
|
46
|
+
description?: string | Snippet
|
|
47
|
+
/** The figures along the top right, each under its own caption. */
|
|
48
|
+
stats?: MetricRowStat[]
|
|
49
|
+
/** How full the bar is, 0–100. Clamped: over 100 is a bug upstream. */
|
|
50
|
+
percent: number
|
|
51
|
+
tone?: Tone
|
|
52
|
+
/**
|
|
53
|
+
* Beside the bar: `398 / 500 units`. Inline, it takes a right-aligned slot
|
|
54
|
+
* with a floor width, so every row's bar starts and ends at the same x.
|
|
55
|
+
* `null` holds the slot empty; leave it out to give the slot up.
|
|
56
|
+
*/
|
|
57
|
+
trailing?: string | Snippet | null
|
|
58
|
+
/**
|
|
59
|
+
* `below`, the default, runs the bar the full width under the row, for a
|
|
60
|
+
* row whose bar belongs to no figure in particular. `inline` puts it before
|
|
61
|
+
* the figures at a fixed width, for one figure the bar is a picture of.
|
|
62
|
+
*/
|
|
63
|
+
barPlacement?: 'below' | 'inline'
|
|
64
|
+
/** Hides the bar, for a row with nothing to measure: an empty bar reads as a failure. */
|
|
65
|
+
hideBar?: boolean
|
|
66
|
+
}
|
|
67
|
+
</script>
|
|
68
|
+
|
|
69
|
+
<script lang="ts">
|
|
70
|
+
import { cn } from '../../../utils/cn.js'
|
|
71
|
+
import { TONE_INDICATOR_CLASS, TONE_TEXT_CLASS } from '../../../utils/tone.js'
|
|
72
|
+
import Progress from '../../feedback/progress/progress.svelte'
|
|
73
|
+
import IconChip from '../icon-chip/icon-chip.svelte'
|
|
74
|
+
import MetricRank from '../metric-bar/metric-rank.svelte'
|
|
75
|
+
|
|
76
|
+
let {
|
|
77
|
+
icon,
|
|
78
|
+
rank,
|
|
79
|
+
label,
|
|
80
|
+
description,
|
|
81
|
+
stats,
|
|
82
|
+
percent,
|
|
83
|
+
tone = 'primary',
|
|
84
|
+
trailing,
|
|
85
|
+
barPlacement = 'below',
|
|
86
|
+
hideBar = false,
|
|
87
|
+
class: className,
|
|
88
|
+
...rest
|
|
89
|
+
}: MetricRowProps = $props()
|
|
90
|
+
|
|
91
|
+
const clamped = $derived(Math.min(100, Math.max(0, percent)))
|
|
92
|
+
const inline = $derived(barPlacement === 'inline')
|
|
93
|
+
const barLabel = $derived(
|
|
94
|
+
typeof label === 'string' ? `${label}: ${clamped.toFixed(0)}%` : undefined,
|
|
95
|
+
)
|
|
96
|
+
</script>
|
|
97
|
+
|
|
98
|
+
{#snippet content(node: string | number | Snippet)}
|
|
99
|
+
{#if typeof node === 'function'}
|
|
100
|
+
{@render node()}
|
|
101
|
+
{:else}
|
|
102
|
+
{node}
|
|
103
|
+
{/if}
|
|
104
|
+
{/snippet}
|
|
105
|
+
|
|
106
|
+
{#snippet bar()}
|
|
107
|
+
<Progress value={clamped} aria-label={barLabel} class={cn('h-2', TONE_INDICATOR_CLASS[tone])} />
|
|
108
|
+
{/snippet}
|
|
109
|
+
|
|
110
|
+
<div data-slot="metric-row" class={cn('flex flex-col gap-3', className)} {...rest}>
|
|
111
|
+
<div class="flex items-start justify-between gap-4">
|
|
112
|
+
<div class="flex min-w-0 items-center gap-3">
|
|
113
|
+
{#if icon}
|
|
114
|
+
<IconChip size="md">{@render icon()}</IconChip>
|
|
115
|
+
{/if}
|
|
116
|
+
{#if rank !== undefined}
|
|
117
|
+
<MetricRank {rank} />
|
|
118
|
+
{/if}
|
|
119
|
+
<div class="min-w-0">
|
|
120
|
+
<div class="truncate text-sm font-medium">{@render content(label)}</div>
|
|
121
|
+
{#if description}
|
|
122
|
+
<div class="text-muted-foreground truncate text-xs">{@render content(description)}</div>
|
|
123
|
+
{/if}
|
|
124
|
+
</div>
|
|
125
|
+
</div>
|
|
126
|
+
|
|
127
|
+
<!-- Inline keeps one baseline; below, the figures stack over their captions. -->
|
|
128
|
+
<div
|
|
129
|
+
class={cn('flex shrink-0 items-center gap-5 text-right sm:gap-6', !inline && 'items-start')}
|
|
130
|
+
>
|
|
131
|
+
{#if inline && !hideBar}
|
|
132
|
+
<div class="w-24 sm:w-32">{@render bar()}</div>
|
|
133
|
+
{/if}
|
|
134
|
+
|
|
135
|
+
{#each stats ?? [] as stat (stat.id)}
|
|
136
|
+
<div>
|
|
137
|
+
{#if stat.label !== undefined}
|
|
138
|
+
<div class="text-muted-foreground text-xs whitespace-nowrap">
|
|
139
|
+
{@render content(stat.label)}
|
|
140
|
+
</div>
|
|
141
|
+
{/if}
|
|
142
|
+
<div
|
|
143
|
+
class={cn(
|
|
144
|
+
'text-sm font-semibold tabular-nums',
|
|
145
|
+
stat.tone === undefined || stat.tone === 'neutral'
|
|
146
|
+
? 'text-foreground'
|
|
147
|
+
: TONE_TEXT_CLASS[stat.tone],
|
|
148
|
+
)}
|
|
149
|
+
>
|
|
150
|
+
{@render content(stat.value)}
|
|
151
|
+
</div>
|
|
152
|
+
</div>
|
|
153
|
+
{/each}
|
|
154
|
+
|
|
155
|
+
{#if inline && trailing !== undefined}
|
|
156
|
+
<div class="min-w-20 shrink-0 text-right tabular-nums">
|
|
157
|
+
{#if trailing !== null}
|
|
158
|
+
{@render content(trailing)}
|
|
159
|
+
{/if}
|
|
160
|
+
</div>
|
|
161
|
+
{/if}
|
|
162
|
+
</div>
|
|
163
|
+
</div>
|
|
164
|
+
|
|
165
|
+
{#if !inline && !hideBar}
|
|
166
|
+
<div class="flex items-center gap-3">
|
|
167
|
+
<div class="flex-1">{@render bar()}</div>
|
|
168
|
+
{#if trailing}
|
|
169
|
+
<div class="text-muted-foreground shrink-0 text-xs tabular-nums">
|
|
170
|
+
{@render content(trailing)}
|
|
171
|
+
</div>
|
|
172
|
+
{/if}
|
|
173
|
+
</div>
|
|
174
|
+
{/if}
|
|
175
|
+
</div>
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
import type { Tone } from '../../../utils/tone.js';
|
|
4
|
+
export type MetricRowStat = {
|
|
5
|
+
/** Stable key. Labels repeat down a list, so they are not one. */
|
|
6
|
+
id: string;
|
|
7
|
+
/**
|
|
8
|
+
* The caption over the figure. Optional: a lone `56%` beside its own bar
|
|
9
|
+
* explains itself.
|
|
10
|
+
*/
|
|
11
|
+
label?: string | Snippet;
|
|
12
|
+
value: string | number | Snippet;
|
|
13
|
+
/**
|
|
14
|
+
* Colours the figure only. A row where every stat is tinted reads as an
|
|
15
|
+
* alert, the opposite of what a scannable list needs.
|
|
16
|
+
*/
|
|
17
|
+
tone?: Tone;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* A subject, the figures that describe it, and one bar beneath them all.
|
|
21
|
+
*
|
|
22
|
+
* Not `MetricBar` on two counts. Several labelled figures, not one: `80%`,
|
|
23
|
+
* `3`, `1` side by side say nothing without their captions. And the bar runs
|
|
24
|
+
* the full width, under the chip too, because it summarises the row rather
|
|
25
|
+
* than belonging to any one figure. Reach for `MetricBar` when the bar is the
|
|
26
|
+
* point; for this when the row is a thing with several measurements.
|
|
27
|
+
*/
|
|
28
|
+
export type MetricRowProps = HTMLAttributes<HTMLDivElement> & {
|
|
29
|
+
/** A glyph in a `md` `IconChip` before the label. */
|
|
30
|
+
icon?: Snippet;
|
|
31
|
+
/** A place in a ranking, as `MetricRank`. Pass `icon` or `rank`, not both. */
|
|
32
|
+
rank?: number;
|
|
33
|
+
label: string | Snippet;
|
|
34
|
+
/** A muted line under the title. */
|
|
35
|
+
description?: string | Snippet;
|
|
36
|
+
/** The figures along the top right, each under its own caption. */
|
|
37
|
+
stats?: MetricRowStat[];
|
|
38
|
+
/** How full the bar is, 0–100. Clamped: over 100 is a bug upstream. */
|
|
39
|
+
percent: number;
|
|
40
|
+
tone?: Tone;
|
|
41
|
+
/**
|
|
42
|
+
* Beside the bar: `398 / 500 units`. Inline, it takes a right-aligned slot
|
|
43
|
+
* with a floor width, so every row's bar starts and ends at the same x.
|
|
44
|
+
* `null` holds the slot empty; leave it out to give the slot up.
|
|
45
|
+
*/
|
|
46
|
+
trailing?: string | Snippet | null;
|
|
47
|
+
/**
|
|
48
|
+
* `below`, the default, runs the bar the full width under the row, for a
|
|
49
|
+
* row whose bar belongs to no figure in particular. `inline` puts it before
|
|
50
|
+
* the figures at a fixed width, for one figure the bar is a picture of.
|
|
51
|
+
*/
|
|
52
|
+
barPlacement?: 'below' | 'inline';
|
|
53
|
+
/** Hides the bar, for a row with nothing to measure: an empty bar reads as a failure. */
|
|
54
|
+
hideBar?: boolean;
|
|
55
|
+
};
|
|
56
|
+
declare const MetricRow: import("svelte").Component<MetricRowProps, {}, "">;
|
|
57
|
+
type MetricRow = ReturnType<typeof MetricRow>;
|
|
58
|
+
export default MetricRow;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as RadialStat, type RadialStatProps, type RadialThickness, } from './radial-stat.svelte';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as RadialStat, } from './radial-stat.svelte';
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Origin: the React package 2.23.0 `radial-stat.tsx`
|
|
3
|
+
Diverged: `children` is a snippet. Takes `class` and spreads the rest onto
|
|
4
|
+
the root, as every component does.
|
|
5
|
+
-->
|
|
6
|
+
<script lang="ts" module>
|
|
7
|
+
import type { Snippet } from 'svelte'
|
|
8
|
+
import type { HTMLAttributes } from 'svelte/elements'
|
|
9
|
+
|
|
10
|
+
import type { Tone } from '../../../utils/tone.js'
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* How heavy the ring is, as a fraction of its diameter. `regular` is a
|
|
14
|
+
* twelfth, a ring around a figure; `thick` is a sixth, with the weight to
|
|
15
|
+
* carry a card on its own. A ratio, because a fixed stroke is a hairline at
|
|
16
|
+
* 140px and a solid disc at 48px.
|
|
17
|
+
*/
|
|
18
|
+
export type RadialThickness = 'regular' | 'thick'
|
|
19
|
+
|
|
20
|
+
const THICKNESS_DIVISOR: Record<RadialThickness, number> = { regular: 12, thick: 6 }
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* A share, drawn as an arc with the figure inside it. A circle has an obvious
|
|
24
|
+
* whole, so the ring says "roughly a quarter" without the reader converting a
|
|
25
|
+
* length. Right for a handful of parts side by side; wrong for a list, where
|
|
26
|
+
* twenty rings are a wall of dials.
|
|
27
|
+
*/
|
|
28
|
+
export type RadialStatProps = HTMLAttributes<HTMLDivElement> & {
|
|
29
|
+
/** 0–100. Clamped: a share over 100 is a bug upstream, not a full ring plus. */
|
|
30
|
+
percent: number
|
|
31
|
+
tone?: Tone
|
|
32
|
+
/**
|
|
33
|
+
* Outer diameter in pixels; the stroke scales with it. `diameter`, not
|
|
34
|
+
* `size`, which across the package means `sm | md | lg`.
|
|
35
|
+
*/
|
|
36
|
+
diameter?: number
|
|
37
|
+
/** Ring weight. `thick` for a ring that is the subject of its own card. */
|
|
38
|
+
thickness?: RadialThickness
|
|
39
|
+
/** Replaces the printed percentage: a count, or a short word. */
|
|
40
|
+
children?: Snippet
|
|
41
|
+
/** Read by assistive tech in place of the ring. */
|
|
42
|
+
'aria-label'?: string
|
|
43
|
+
}
|
|
44
|
+
</script>
|
|
45
|
+
|
|
46
|
+
<script lang="ts">
|
|
47
|
+
import { cn } from '../../../utils/cn.js'
|
|
48
|
+
import { TONE_STROKE_CLASS } from '../../../utils/tone.js'
|
|
49
|
+
|
|
50
|
+
let {
|
|
51
|
+
percent,
|
|
52
|
+
tone = 'primary',
|
|
53
|
+
diameter = 72,
|
|
54
|
+
thickness = 'regular',
|
|
55
|
+
children,
|
|
56
|
+
'aria-label': ariaLabel,
|
|
57
|
+
class: className,
|
|
58
|
+
...rest
|
|
59
|
+
}: RadialStatProps = $props()
|
|
60
|
+
|
|
61
|
+
const clamped = $derived(Math.min(100, Math.max(0, percent)))
|
|
62
|
+
const stroke = $derived(Math.max(4, Math.round(diameter / THICKNESS_DIVISOR[thickness])))
|
|
63
|
+
const radius = $derived((diameter - stroke) / 2)
|
|
64
|
+
const circumference = $derived(2 * Math.PI * radius)
|
|
65
|
+
const arc = $derived(circumference * (clamped / 100))
|
|
66
|
+
const centre = $derived(diameter / 2)
|
|
67
|
+
/**
|
|
68
|
+
* Round caps add half a stroke at each end, so on an arc shorter than the
|
|
69
|
+
* stroke they overrun it and read as a marker. Below that the cap squares
|
|
70
|
+
* off, and 0% draws nothing rather than a dot at twelve o'clock.
|
|
71
|
+
*/
|
|
72
|
+
const linecap = $derived(arc >= stroke ? 'round' : 'butt')
|
|
73
|
+
</script>
|
|
74
|
+
|
|
75
|
+
<div
|
|
76
|
+
data-slot="radial-stat"
|
|
77
|
+
role="img"
|
|
78
|
+
aria-label={ariaLabel ?? `${clamped.toFixed(0)} percent`}
|
|
79
|
+
class={cn('relative shrink-0', className)}
|
|
80
|
+
style:width="{diameter}px"
|
|
81
|
+
style:height="{diameter}px"
|
|
82
|
+
{...rest}
|
|
83
|
+
>
|
|
84
|
+
<svg width={diameter} height={diameter} viewBox="0 0 {diameter} {diameter}" aria-hidden="true">
|
|
85
|
+
<circle
|
|
86
|
+
class="stroke-muted"
|
|
87
|
+
cx={centre}
|
|
88
|
+
cy={centre}
|
|
89
|
+
r={radius}
|
|
90
|
+
fill="none"
|
|
91
|
+
stroke-width={stroke}
|
|
92
|
+
/>
|
|
93
|
+
<circle
|
|
94
|
+
class={cn('transition-[stroke-dashoffset]', TONE_STROKE_CLASS[tone])}
|
|
95
|
+
cx={centre}
|
|
96
|
+
cy={centre}
|
|
97
|
+
r={radius}
|
|
98
|
+
fill="none"
|
|
99
|
+
stroke-width={stroke}
|
|
100
|
+
stroke-linecap={linecap}
|
|
101
|
+
stroke-dasharray={circumference}
|
|
102
|
+
stroke-dashoffset={circumference - arc}
|
|
103
|
+
transform="rotate(-90 {centre} {centre})"
|
|
104
|
+
/>
|
|
105
|
+
</svg>
|
|
106
|
+
<div class="absolute inset-0 grid place-items-center text-sm font-medium tabular-nums">
|
|
107
|
+
{#if children}
|
|
108
|
+
{@render children()}
|
|
109
|
+
{:else}
|
|
110
|
+
{clamped.toFixed(0)}%
|
|
111
|
+
{/if}
|
|
112
|
+
</div>
|
|
113
|
+
</div>
|