@desbug/ultra-ui 0.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/README.md +203 -0
- package/dist/components/blocks/activity-feed-card.d.ts +25 -0
- package/dist/components/blocks/activity-feed-card.d.ts.map +1 -0
- package/dist/components/blocks/activity-feed-card.js +13 -0
- package/dist/components/blocks/activity-feed-card.js.map +1 -0
- package/dist/components/blocks/bar-breakdown-card.d.ts +34 -0
- package/dist/components/blocks/bar-breakdown-card.d.ts.map +1 -0
- package/dist/components/blocks/bar-breakdown-card.js +24 -0
- package/dist/components/blocks/bar-breakdown-card.js.map +1 -0
- package/dist/components/blocks/block-card.d.ts +39 -0
- package/dist/components/blocks/block-card.d.ts.map +1 -0
- package/dist/components/blocks/block-card.js +14 -0
- package/dist/components/blocks/block-card.js.map +1 -0
- package/dist/components/blocks/callout-card.d.ts +20 -0
- package/dist/components/blocks/callout-card.d.ts.map +1 -0
- package/dist/components/blocks/callout-card.js +12 -0
- package/dist/components/blocks/callout-card.js.map +1 -0
- package/dist/components/blocks/donut-card.d.ts +28 -0
- package/dist/components/blocks/donut-card.d.ts.map +1 -0
- package/dist/components/blocks/donut-card.js +24 -0
- package/dist/components/blocks/donut-card.js.map +1 -0
- package/dist/components/blocks/file-list-card.d.ts +21 -0
- package/dist/components/blocks/file-list-card.d.ts.map +1 -0
- package/dist/components/blocks/file-list-card.js +12 -0
- package/dist/components/blocks/file-list-card.js.map +1 -0
- package/dist/components/blocks/funnel-card.d.ts +19 -0
- package/dist/components/blocks/funnel-card.d.ts.map +1 -0
- package/dist/components/blocks/funnel-card.js +18 -0
- package/dist/components/blocks/funnel-card.js.map +1 -0
- package/dist/components/blocks/gauge-card.d.ts +20 -0
- package/dist/components/blocks/gauge-card.d.ts.map +1 -0
- package/dist/components/blocks/gauge-card.js +12 -0
- package/dist/components/blocks/gauge-card.js.map +1 -0
- package/dist/components/blocks/index.d.ts +21 -0
- package/dist/components/blocks/index.d.ts.map +1 -0
- package/dist/components/blocks/index.js +24 -0
- package/dist/components/blocks/index.js.map +1 -0
- package/dist/components/blocks/kpi-card.d.ts +18 -0
- package/dist/components/blocks/kpi-card.d.ts.map +1 -0
- package/dist/components/blocks/kpi-card.js +11 -0
- package/dist/components/blocks/kpi-card.js.map +1 -0
- package/dist/components/blocks/palette.d.ts +9 -0
- package/dist/components/blocks/palette.d.ts.map +1 -0
- package/dist/components/blocks/palette.js +20 -0
- package/dist/components/blocks/palette.js.map +1 -0
- package/dist/components/blocks/progress-list-card.d.ts +29 -0
- package/dist/components/blocks/progress-list-card.d.ts.map +1 -0
- package/dist/components/blocks/progress-list-card.js +19 -0
- package/dist/components/blocks/progress-list-card.js.map +1 -0
- package/dist/components/blocks/radar-stats-card.d.ts +18 -0
- package/dist/components/blocks/radar-stats-card.d.ts.map +1 -0
- package/dist/components/blocks/radar-stats-card.js +10 -0
- package/dist/components/blocks/radar-stats-card.js.map +1 -0
- package/dist/components/blocks/ranking-list-card.d.ts +25 -0
- package/dist/components/blocks/ranking-list-card.d.ts.map +1 -0
- package/dist/components/blocks/ranking-list-card.js +10 -0
- package/dist/components/blocks/ranking-list-card.js.map +1 -0
- package/dist/components/blocks/spark-stat-card.d.ts +22 -0
- package/dist/components/blocks/spark-stat-card.d.ts.map +1 -0
- package/dist/components/blocks/spark-stat-card.js +10 -0
- package/dist/components/blocks/spark-stat-card.js.map +1 -0
- package/dist/components/blocks/steps-card.d.ts +17 -0
- package/dist/components/blocks/steps-card.d.ts.map +1 -0
- package/dist/components/blocks/steps-card.js +16 -0
- package/dist/components/blocks/steps-card.js.map +1 -0
- package/dist/components/blocks/team-list-card.d.ts +21 -0
- package/dist/components/blocks/team-list-card.d.ts.map +1 -0
- package/dist/components/blocks/team-list-card.js +9 -0
- package/dist/components/blocks/team-list-card.js.map +1 -0
- package/dist/components/blocks/timeline-card.d.ts +19 -0
- package/dist/components/blocks/timeline-card.d.ts.map +1 -0
- package/dist/components/blocks/timeline-card.js +13 -0
- package/dist/components/blocks/timeline-card.js.map +1 -0
- package/dist/components/blocks/todo-list-card.d.ts +21 -0
- package/dist/components/blocks/todo-list-card.d.ts.map +1 -0
- package/dist/components/blocks/todo-list-card.js +11 -0
- package/dist/components/blocks/todo-list-card.js.map +1 -0
- package/dist/components/blocks/trend-chart-card.d.ts +33 -0
- package/dist/components/blocks/trend-chart-card.d.ts.map +1 -0
- package/dist/components/blocks/trend-chart-card.js +13 -0
- package/dist/components/blocks/trend-chart-card.js.map +1 -0
- package/dist/components/shared/avatar-stack.d.ts +17 -0
- package/dist/components/shared/avatar-stack.d.ts.map +1 -0
- package/dist/components/shared/avatar-stack.js +10 -0
- package/dist/components/shared/avatar-stack.js.map +1 -0
- package/dist/components/shared/avatar-with-name.d.ts +15 -0
- package/dist/components/shared/avatar-with-name.d.ts.map +1 -0
- package/dist/components/shared/avatar-with-name.js +8 -0
- package/dist/components/shared/avatar-with-name.js.map +1 -0
- package/dist/components/shared/chart-card.d.ts +20 -0
- package/dist/components/shared/chart-card.d.ts.map +1 -0
- package/dist/components/shared/chart-card.js +8 -0
- package/dist/components/shared/chart-card.js.map +1 -0
- package/dist/components/shared/data-table-cells.d.ts +35 -0
- package/dist/components/shared/data-table-cells.d.ts.map +1 -0
- package/dist/components/shared/data-table-cells.js +37 -0
- package/dist/components/shared/data-table-cells.js.map +1 -0
- package/dist/components/shared/data-table-column-manager.d.ts +25 -0
- package/dist/components/shared/data-table-column-manager.d.ts.map +1 -0
- package/dist/components/shared/data-table-column-manager.js +88 -0
- package/dist/components/shared/data-table-column-manager.js.map +1 -0
- package/dist/components/shared/data-table-pagination.d.ts +11 -0
- package/dist/components/shared/data-table-pagination.d.ts.map +1 -0
- package/dist/components/shared/data-table-pagination.js +24 -0
- package/dist/components/shared/data-table-pagination.js.map +1 -0
- package/dist/components/shared/data-table-toolbar.d.ts +15 -0
- package/dist/components/shared/data-table-toolbar.d.ts.map +1 -0
- package/dist/components/shared/data-table-toolbar.js +14 -0
- package/dist/components/shared/data-table-toolbar.js.map +1 -0
- package/dist/components/shared/data-table.d.ts +49 -0
- package/dist/components/shared/data-table.d.ts.map +1 -0
- package/dist/components/shared/data-table.js +56 -0
- package/dist/components/shared/data-table.js.map +1 -0
- package/dist/components/shared/empty-state.d.ts +14 -0
- package/dist/components/shared/empty-state.d.ts.map +1 -0
- package/dist/components/shared/empty-state.js +7 -0
- package/dist/components/shared/empty-state.js.map +1 -0
- package/dist/components/shared/github-link.d.ts +16 -0
- package/dist/components/shared/github-link.d.ts.map +1 -0
- package/dist/components/shared/github-link.js +15 -0
- package/dist/components/shared/github-link.js.map +1 -0
- package/dist/components/shared/gradient-def.d.ts +23 -0
- package/dist/components/shared/gradient-def.d.ts.map +1 -0
- package/dist/components/shared/gradient-def.js +13 -0
- package/dist/components/shared/gradient-def.js.map +1 -0
- package/dist/components/shared/header-actions-menu.d.ts +12 -0
- package/dist/components/shared/header-actions-menu.d.ts.map +1 -0
- package/dist/components/shared/header-actions-menu.js +11 -0
- package/dist/components/shared/header-actions-menu.js.map +1 -0
- package/dist/components/shared/header-search.d.ts +12 -0
- package/dist/components/shared/header-search.d.ts.map +1 -0
- package/dist/components/shared/header-search.js +10 -0
- package/dist/components/shared/header-search.js.map +1 -0
- package/dist/components/shared/index.d.ts +23 -0
- package/dist/components/shared/index.d.ts.map +1 -0
- package/dist/components/shared/index.js +27 -0
- package/dist/components/shared/index.js.map +1 -0
- package/dist/components/shared/messages-menu.d.ts +16 -0
- package/dist/components/shared/messages-menu.d.ts.map +1 -0
- package/dist/components/shared/messages-menu.js +12 -0
- package/dist/components/shared/messages-menu.js.map +1 -0
- package/dist/components/shared/notifications-menu.d.ts +18 -0
- package/dist/components/shared/notifications-menu.d.ts.map +1 -0
- package/dist/components/shared/notifications-menu.js +12 -0
- package/dist/components/shared/notifications-menu.js.map +1 -0
- package/dist/components/shared/page-header.d.ts +25 -0
- package/dist/components/shared/page-header.d.ts.map +1 -0
- package/dist/components/shared/page-header.js +13 -0
- package/dist/components/shared/page-header.js.map +1 -0
- package/dist/components/shared/progress-bar.d.ts +16 -0
- package/dist/components/shared/progress-bar.d.ts.map +1 -0
- package/dist/components/shared/progress-bar.js +8 -0
- package/dist/components/shared/progress-bar.js.map +1 -0
- package/dist/components/shared/section-card.d.ts +18 -0
- package/dist/components/shared/section-card.d.ts.map +1 -0
- package/dist/components/shared/section-card.js +8 -0
- package/dist/components/shared/section-card.js.map +1 -0
- package/dist/components/shared/series-chart.d.ts +49 -0
- package/dist/components/shared/series-chart.d.ts.map +1 -0
- package/dist/components/shared/series-chart.js +29 -0
- package/dist/components/shared/series-chart.js.map +1 -0
- package/dist/components/shared/stat-card.d.ts +32 -0
- package/dist/components/shared/stat-card.d.ts.map +1 -0
- package/dist/components/shared/stat-card.js +18 -0
- package/dist/components/shared/stat-card.js.map +1 -0
- package/dist/components/shared/stats-grid.d.ts +21 -0
- package/dist/components/shared/stats-grid.d.ts.map +1 -0
- package/dist/components/shared/stats-grid.js +19 -0
- package/dist/components/shared/stats-grid.js.map +1 -0
- package/dist/components/shared/status-badge.d.ts +26 -0
- package/dist/components/shared/status-badge.d.ts.map +1 -0
- package/dist/components/shared/status-badge.js +95 -0
- package/dist/components/shared/status-badge.js.map +1 -0
- package/dist/components/ui/accordion.d.ts +8 -0
- package/dist/components/ui/accordion.d.ts.map +1 -0
- package/dist/components/ui/accordion.js +19 -0
- package/dist/components/ui/accordion.js.map +1 -0
- package/dist/components/ui/alert-dialog.d.ts +19 -0
- package/dist/components/ui/alert-dialog.d.ts.map +1 -0
- package/dist/components/ui/alert-dialog.js +43 -0
- package/dist/components/ui/alert-dialog.js.map +1 -0
- package/dist/components/ui/alert.d.ts +11 -0
- package/dist/components/ui/alert.d.ts.map +1 -0
- package/dist/components/ui/alert.js +28 -0
- package/dist/components/ui/alert.js.map +1 -0
- package/dist/components/ui/aspect-ratio.d.ts +4 -0
- package/dist/components/ui/aspect-ratio.d.ts.map +1 -0
- package/dist/components/ui/aspect-ratio.js +8 -0
- package/dist/components/ui/aspect-ratio.js.map +1 -0
- package/dist/components/ui/avatar.d.ts +12 -0
- package/dist/components/ui/avatar.d.ts.map +1 -0
- package/dist/components/ui/avatar.js +24 -0
- package/dist/components/ui/avatar.js.map +1 -0
- package/dist/components/ui/badge.d.ts +10 -0
- package/dist/components/ui/badge.d.ts.map +1 -0
- package/dist/components/ui/badge.js +25 -0
- package/dist/components/ui/badge.js.map +1 -0
- package/dist/components/ui/breadcrumb.d.ts +12 -0
- package/dist/components/ui/breadcrumb.d.ts.map +1 -0
- package/dist/components/ui/breadcrumb.js +28 -0
- package/dist/components/ui/breadcrumb.js.map +1 -0
- package/dist/components/ui/button.d.ts +11 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +36 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/calendar.d.ts +11 -0
- package/dist/components/ui/calendar.d.ts.map +1 -0
- package/dist/components/ui/calendar.js +77 -0
- package/dist/components/ui/calendar.js.map +1 -0
- package/dist/components/ui/card.d.ts +12 -0
- package/dist/components/ui/card.d.ts.map +1 -0
- package/dist/components/ui/card.js +25 -0
- package/dist/components/ui/card.js.map +1 -0
- package/dist/components/ui/carousel.d.ts +29 -0
- package/dist/components/ui/carousel.d.ts.map +1 -0
- package/dist/components/ui/carousel.js +92 -0
- package/dist/components/ui/carousel.js.map +1 -0
- package/dist/components/ui/chart.d.ts +45 -0
- package/dist/components/ui/chart.d.ts.map +1 -0
- package/dist/components/ui/chart.js +133 -0
- package/dist/components/ui/chart.js.map +1 -0
- package/dist/components/ui/checkbox.d.ts +5 -0
- package/dist/components/ui/checkbox.d.ts.map +1 -0
- package/dist/components/ui/checkbox.js +10 -0
- package/dist/components/ui/checkbox.js.map +1 -0
- package/dist/components/ui/collapsible.d.ts +6 -0
- package/dist/components/ui/collapsible.d.ts.map +1 -0
- package/dist/components/ui/collapsible.js +14 -0
- package/dist/components/ui/collapsible.js.map +1 -0
- package/dist/components/ui/command.d.ts +19 -0
- package/dist/components/ui/command.d.ts.map +1 -0
- package/dist/components/ui/command.js +36 -0
- package/dist/components/ui/command.js.map +1 -0
- package/dist/components/ui/context-menu.d.ts +32 -0
- package/dist/components/ui/context-menu.d.ts.map +1 -0
- package/dist/components/ui/context-menu.js +52 -0
- package/dist/components/ui/context-menu.js.map +1 -0
- package/dist/components/ui/dialog.d.ts +18 -0
- package/dist/components/ui/dialog.d.ts.map +1 -0
- package/dist/components/ui/dialog.js +38 -0
- package/dist/components/ui/dialog.js.map +1 -0
- package/dist/components/ui/drawer.d.ts +14 -0
- package/dist/components/ui/drawer.d.ts.map +1 -0
- package/dist/components/ui/drawer.js +36 -0
- package/dist/components/ui/drawer.js.map +1 -0
- package/dist/components/ui/dropdown-menu.d.ts +30 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/components/ui/dropdown-menu.js +52 -0
- package/dist/components/ui/dropdown-menu.js.map +1 -0
- package/dist/components/ui/form.d.ts +25 -0
- package/dist/components/ui/form.d.ts.map +1 -0
- package/dist/components/ui/form.js +60 -0
- package/dist/components/ui/form.js.map +1 -0
- package/dist/components/ui/hover-card.d.ts +7 -0
- package/dist/components/ui/hover-card.d.ts.map +1 -0
- package/dist/components/ui/hover-card.js +15 -0
- package/dist/components/ui/hover-card.js.map +1 -0
- package/dist/components/ui/input-group.d.ts +17 -0
- package/dist/components/ui/input-group.d.ts.map +1 -0
- package/dist/components/ui/input-group.js +58 -0
- package/dist/components/ui/input-group.js.map +1 -0
- package/dist/components/ui/input-otp.d.ts +12 -0
- package/dist/components/ui/input-otp.d.ts.map +1 -0
- package/dist/components/ui/input-otp.js +22 -0
- package/dist/components/ui/input-otp.js.map +1 -0
- package/dist/components/ui/input.d.ts +4 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/input.js +7 -0
- package/dist/components/ui/input.js.map +1 -0
- package/dist/components/ui/kbd.d.ts +4 -0
- package/dist/components/ui/kbd.d.ts.map +1 -0
- package/dist/components/ui/kbd.js +10 -0
- package/dist/components/ui/kbd.js.map +1 -0
- package/dist/components/ui/label.d.ts +5 -0
- package/dist/components/ui/label.d.ts.map +1 -0
- package/dist/components/ui/label.js +9 -0
- package/dist/components/ui/label.js.map +1 -0
- package/dist/components/ui/menubar.d.ts +31 -0
- package/dist/components/ui/menubar.d.ts.map +1 -0
- package/dist/components/ui/menubar.js +55 -0
- package/dist/components/ui/menubar.js.map +1 -0
- package/dist/components/ui/navigation-menu.d.ts +15 -0
- package/dist/components/ui/navigation-menu.d.ts.map +1 -0
- package/dist/components/ui/navigation-menu.js +32 -0
- package/dist/components/ui/navigation-menu.js.map +1 -0
- package/dist/components/ui/pagination.d.ts +18 -0
- package/dist/components/ui/pagination.d.ts.map +1 -0
- package/dist/components/ui/pagination.js +27 -0
- package/dist/components/ui/pagination.js.map +1 -0
- package/dist/components/ui/popover.d.ts +11 -0
- package/dist/components/ui/popover.d.ts.map +1 -0
- package/dist/components/ui/popover.js +27 -0
- package/dist/components/ui/popover.js.map +1 -0
- package/dist/components/ui/progress.d.ts +5 -0
- package/dist/components/ui/progress.d.ts.map +1 -0
- package/dist/components/ui/progress.js +9 -0
- package/dist/components/ui/progress.js.map +1 -0
- package/dist/components/ui/radio-group.d.ts +6 -0
- package/dist/components/ui/radio-group.d.ts.map +1 -0
- package/dist/components/ui/radio-group.js +12 -0
- package/dist/components/ui/radio-group.js.map +1 -0
- package/dist/components/ui/resizable.d.ts +8 -0
- package/dist/components/ui/resizable.d.ts.map +1 -0
- package/dist/components/ui/resizable.js +15 -0
- package/dist/components/ui/resizable.js.map +1 -0
- package/dist/components/ui/scroll-area.d.ts +6 -0
- package/dist/components/ui/scroll-area.d.ts.map +1 -0
- package/dist/components/ui/scroll-area.js +12 -0
- package/dist/components/ui/scroll-area.js.map +1 -0
- package/dist/components/ui/select.d.ts +16 -0
- package/dist/components/ui/select.d.ts.map +1 -0
- package/dist/components/ui/select.js +37 -0
- package/dist/components/ui/select.js.map +1 -0
- package/dist/components/ui/separator.d.ts +5 -0
- package/dist/components/ui/separator.d.ts.map +1 -0
- package/dist/components/ui/separator.js +9 -0
- package/dist/components/ui/separator.js.map +1 -0
- package/dist/components/ui/sheet.d.ts +15 -0
- package/dist/components/ui/sheet.d.ts.map +1 -0
- package/dist/components/ui/sheet.js +38 -0
- package/dist/components/ui/sheet.js.map +1 -0
- package/dist/components/ui/sidebar.d.ts +70 -0
- package/dist/components/ui/sidebar.d.ts.map +1 -0
- package/dist/components/ui/sidebar.js +207 -0
- package/dist/components/ui/sidebar.js.map +1 -0
- package/dist/components/ui/skeleton.d.ts +3 -0
- package/dist/components/ui/skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeleton.js +7 -0
- package/dist/components/ui/skeleton.js.map +1 -0
- package/dist/components/ui/slider.d.ts +5 -0
- package/dist/components/ui/slider.d.ts.map +1 -0
- package/dist/components/ui/slider.js +15 -0
- package/dist/components/ui/slider.js.map +1 -0
- package/dist/components/ui/sonner.d.ts +4 -0
- package/dist/components/ui/sonner.d.ts.map +1 -0
- package/dist/components/ui/sonner.js +26 -0
- package/dist/components/ui/sonner.js.map +1 -0
- package/dist/components/ui/switch.d.ts +7 -0
- package/dist/components/ui/switch.d.ts.map +1 -0
- package/dist/components/ui/switch.js +9 -0
- package/dist/components/ui/switch.js.map +1 -0
- package/dist/components/ui/table.d.ts +11 -0
- package/dist/components/ui/table.d.ts.map +1 -0
- package/dist/components/ui/table.js +29 -0
- package/dist/components/ui/table.js.map +1 -0
- package/dist/components/ui/tabs.d.ts +12 -0
- package/dist/components/ui/tabs.d.ts.map +1 -0
- package/dist/components/ui/tabs.js +30 -0
- package/dist/components/ui/tabs.js.map +1 -0
- package/dist/components/ui/textarea.d.ts +4 -0
- package/dist/components/ui/textarea.d.ts.map +1 -0
- package/dist/components/ui/textarea.js +7 -0
- package/dist/components/ui/textarea.js.map +1 -0
- package/dist/components/ui/toggle-group.d.ts +11 -0
- package/dist/components/ui/toggle-group.d.ts.map +1 -0
- package/dist/components/ui/toggle-group.js +24 -0
- package/dist/components/ui/toggle-group.js.map +1 -0
- package/dist/components/ui/toggle.d.ts +10 -0
- package/dist/components/ui/toggle.d.ts.map +1 -0
- package/dist/components/ui/toggle.js +27 -0
- package/dist/components/ui/toggle.js.map +1 -0
- package/dist/components/ui/tooltip.d.ts +8 -0
- package/dist/components/ui/tooltip.d.ts.map +1 -0
- package/dist/components/ui/tooltip.js +18 -0
- package/dist/components/ui/tooltip.js.map +1 -0
- package/dist/hooks/use-mobile.d.ts +2 -0
- package/dist/hooks/use-mobile.d.ts.map +1 -0
- package/dist/hooks/use-mobile.js +16 -0
- package/dist/hooks/use-mobile.js.map +1 -0
- package/dist/index.d.ts +53 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +57 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +6 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/styles.css +240 -0
- package/package.json +67 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export interface GaugeCardProps {
|
|
3
|
+
title?: React.ReactNode;
|
|
4
|
+
icon?: React.ElementType;
|
|
5
|
+
actions?: React.ReactNode;
|
|
6
|
+
/** Percentage 0–100. */
|
|
7
|
+
value: number;
|
|
8
|
+
/** Arc color (CSS color). Defaults to the primary token. */
|
|
9
|
+
color?: string;
|
|
10
|
+
/** Center label under the percentage (e.g. "Completed"). */
|
|
11
|
+
label?: React.ReactNode;
|
|
12
|
+
/** Override the big center text (defaults to `${value}%`). */
|
|
13
|
+
centerValue?: React.ReactNode;
|
|
14
|
+
/** Chart box height (default `h-[200px]`). */
|
|
15
|
+
height?: string;
|
|
16
|
+
className?: string;
|
|
17
|
+
}
|
|
18
|
+
/** Single-value radial gauge (goal completion, capacity, score…). */
|
|
19
|
+
export declare function GaugeCard({ title, icon, actions, value, color, label, centerValue, height, className, }: GaugeCardProps): React.JSX.Element;
|
|
20
|
+
//# sourceMappingURL=gauge-card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gauge-card.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/gauge-card.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qEAAqE;AACrE,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,KAAwB,EACxB,KAAK,EACL,WAAW,EACX,MAAoB,EACpB,SAAS,GACV,EAAE,cAAc,qBA4ChB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { PolarAngleAxis, RadialBar, RadialBarChart, ResponsiveContainer, } from "recharts";
|
|
4
|
+
import { cn } from "../../lib/utils.js";
|
|
5
|
+
import { BlockCard } from "./block-card.js";
|
|
6
|
+
/** Single-value radial gauge (goal completion, capacity, score…). */
|
|
7
|
+
export function GaugeCard({ title, icon, actions, value, color = "var(--primary)", label, centerValue, height = "h-[200px]", className, }) {
|
|
8
|
+
const pct = Math.max(0, Math.min(100, value));
|
|
9
|
+
const data = [{ name: "value", value: pct, fill: color }];
|
|
10
|
+
return (_jsx(BlockCard, { title: title, icon: icon, actions: actions, className: className, children: _jsxs("div", { className: cn("relative w-full", height), children: [_jsx(ResponsiveContainer, { width: "100%", height: "100%", children: _jsxs(RadialBarChart, { data: data, innerRadius: "72%", outerRadius: "100%", startAngle: 90, endAngle: -270, children: [_jsx(PolarAngleAxis, { type: "number", domain: [0, 100], tick: false, axisLine: false }), _jsx(RadialBar, { dataKey: "value", background: { fill: "var(--muted)" }, cornerRadius: 999 })] }) }), _jsxs("div", { className: "pointer-events-none absolute inset-0 flex flex-col items-center justify-center", children: [_jsx("span", { className: "text-2xl font-semibold tracking-tight sm:text-3xl", children: centerValue ?? `${Math.round(pct)}%` }), label && (_jsx("span", { className: "text-xs text-muted-foreground", children: label }))] })] }) }));
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=gauge-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gauge-card.js","sourceRoot":"","sources":["../../../src/components/blocks/gauge-card.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EACL,cAAc,EACd,SAAS,EACT,cAAc,EACd,mBAAmB,GACpB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAmBzC,qEAAqE;AACrE,MAAM,UAAU,SAAS,CAAC,EACxB,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,KAAK,GAAG,gBAAgB,EACxB,KAAK,EACL,WAAW,EACX,MAAM,GAAG,WAAW,EACpB,SAAS,GACM;IACf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAE1D,OAAO,CACL,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,YAEpB,eAAK,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,MAAM,CAAC,aAC3C,KAAC,mBAAmB,IAAC,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,YAC7C,MAAC,cAAc,IACb,IAAI,EAAE,IAAI,EACV,WAAW,EAAC,KAAK,EACjB,WAAW,EAAC,MAAM,EAClB,UAAU,EAAE,EAAE,EACd,QAAQ,EAAE,CAAC,GAAG,aAEd,KAAC,cAAc,IACb,IAAI,EAAC,QAAQ,EACb,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAChB,IAAI,EAAE,KAAK,EACX,QAAQ,EAAE,KAAK,GACf,EACF,KAAC,SAAS,IACR,OAAO,EAAC,OAAO,EACf,UAAU,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,EACpC,YAAY,EAAE,GAAG,GACjB,IACa,GACG,EACtB,eAAK,SAAS,EAAC,gFAAgF,aAC7F,eAAM,SAAS,EAAC,mDAAmD,YAChE,WAAW,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAChC,EACN,KAAK,IAAI,CACR,eAAM,SAAS,EAAC,+BAA+B,YAAE,KAAK,GAAQ,CAC/D,IACG,IACF,GACI,CACb,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export * from "./block-card.js";
|
|
2
|
+
export * from "./palette.js";
|
|
3
|
+
export * from "./bar-breakdown-card.js";
|
|
4
|
+
export * from "./progress-list-card.js";
|
|
5
|
+
export * from "./trend-chart-card.js";
|
|
6
|
+
export * from "./donut-card.js";
|
|
7
|
+
export * from "./gauge-card.js";
|
|
8
|
+
export * from "./spark-stat-card.js";
|
|
9
|
+
export * from "./activity-feed-card.js";
|
|
10
|
+
export * from "./ranking-list-card.js";
|
|
11
|
+
export * from "./kpi-card.js";
|
|
12
|
+
export * from "./timeline-card.js";
|
|
13
|
+
export * from "./todo-list-card.js";
|
|
14
|
+
export * from "./team-list-card.js";
|
|
15
|
+
export * from "./funnel-card.js";
|
|
16
|
+
export * from "./radar-stats-card.js";
|
|
17
|
+
export * from "./callout-card.js";
|
|
18
|
+
export * from "./file-list-card.js";
|
|
19
|
+
export * from "./steps-card.js";
|
|
20
|
+
export { StatsGrid as StatsRow } from "../../components/shared/index.js";
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAI7B,OAAO,EAAE,SAAS,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Pre-assembled, data-driven dashboard blocks built on the design system.
|
|
2
|
+
export * from "./block-card.js";
|
|
3
|
+
export * from "./palette.js";
|
|
4
|
+
export * from "./bar-breakdown-card.js";
|
|
5
|
+
export * from "./progress-list-card.js";
|
|
6
|
+
export * from "./trend-chart-card.js";
|
|
7
|
+
export * from "./donut-card.js";
|
|
8
|
+
export * from "./gauge-card.js";
|
|
9
|
+
export * from "./spark-stat-card.js";
|
|
10
|
+
export * from "./activity-feed-card.js";
|
|
11
|
+
export * from "./ranking-list-card.js";
|
|
12
|
+
export * from "./kpi-card.js";
|
|
13
|
+
export * from "./timeline-card.js";
|
|
14
|
+
export * from "./todo-list-card.js";
|
|
15
|
+
export * from "./team-list-card.js";
|
|
16
|
+
export * from "./funnel-card.js";
|
|
17
|
+
export * from "./radar-stats-card.js";
|
|
18
|
+
export * from "./callout-card.js";
|
|
19
|
+
export * from "./file-list-card.js";
|
|
20
|
+
export * from "./steps-card.js";
|
|
21
|
+
// The 4-up stats row (photo 1) is the existing StatsGrid; re-exported here as a
|
|
22
|
+
// turnkey block name.
|
|
23
|
+
export { StatsGrid as StatsRow } from "../../components/shared/index.js";
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/blocks/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAE7B,gFAAgF;AAChF,sBAAsB;AACtB,OAAO,EAAE,SAAS,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type StatusTone } from "../../components/shared/index.js";
|
|
3
|
+
export interface KpiCardProps {
|
|
4
|
+
title: React.ReactNode;
|
|
5
|
+
value: React.ReactNode;
|
|
6
|
+
icon?: React.ElementType;
|
|
7
|
+
/** Tint for the icon bubble. */
|
|
8
|
+
tone?: StatusTone;
|
|
9
|
+
/** e.g. "+12%". Color auto-derives from the sign. */
|
|
10
|
+
change?: string;
|
|
11
|
+
trend?: "up" | "down";
|
|
12
|
+
/** Small muted text after the change (e.g. "vs last week"). */
|
|
13
|
+
hint?: React.ReactNode;
|
|
14
|
+
className?: string;
|
|
15
|
+
}
|
|
16
|
+
/** Compact KPI tile: tinted icon bubble + label + big value + delta. */
|
|
17
|
+
export declare function KpiCard({ title, value, icon: Icon, tone, change, trend, hint, className, }: KpiCardProps): React.JSX.Element;
|
|
18
|
+
//# sourceMappingURL=kpi-card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kpi-card.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/kpi-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEhE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,gCAAgC;IAChC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IACtB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wEAAwE;AACxE,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,KAAK,EACL,IAAI,EAAE,IAAI,EACV,IAAa,EACb,MAAM,EACN,KAAK,EACL,IAAI,EACJ,SAAS,GACV,EAAE,YAAY,qBA6Cd"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../lib/utils.js";
|
|
3
|
+
import { toneSoft } from "../../components/shared/index.js";
|
|
4
|
+
/** Compact KPI tile: tinted icon bubble + label + big value + delta. */
|
|
5
|
+
export function KpiCard({ title, value, icon: Icon, tone = "gray", change, trend, hint, className, }) {
|
|
6
|
+
const positive = trend ? trend === "up" : !change?.trim().startsWith("-");
|
|
7
|
+
return (_jsxs("div", { className: cn("flex items-center gap-4 rounded-xl border bg-card p-5 text-card-foreground", className), children: [Icon && (_jsx("span", { className: cn("flex size-11 shrink-0 items-center justify-center rounded-xl", toneSoft[tone]), children: _jsx(Icon, { className: "size-5" }) })), _jsxs("div", { className: "min-w-0 space-y-1", children: [_jsx("p", { className: "truncate text-xs font-medium text-muted-foreground sm:text-sm", children: title }), _jsx("p", { className: "text-xl font-semibold tracking-tight sm:text-2xl", children: value }), (change || hint) && (_jsxs("p", { className: "flex items-center gap-1.5 text-xs font-medium", children: [change && (_jsx("span", { className: positive
|
|
8
|
+
? "text-emerald-600 dark:text-emerald-400"
|
|
9
|
+
: "text-red-600 dark:text-red-400", children: change })), hint && _jsx("span", { className: "text-muted-foreground", children: hint })] }))] })] }));
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=kpi-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kpi-card.js","sourceRoot":"","sources":["../../../src/components/blocks/kpi-card.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAmB,MAAM,qBAAqB,CAAC;AAgBhE,wEAAwE;AACxE,MAAM,UAAU,OAAO,CAAC,EACtB,KAAK,EACL,KAAK,EACL,IAAI,EAAE,IAAI,EACV,IAAI,GAAG,MAAM,EACb,MAAM,EACN,KAAK,EACL,IAAI,EACJ,SAAS,GACI;IACb,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC1E,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,4EAA4E,EAC5E,SAAS,CACV,aAEA,IAAI,IAAI,CACP,eACE,SAAS,EAAE,EAAE,CACX,8DAA8D,EAC9D,QAAQ,CAAC,IAAI,CAAC,CACf,YAED,KAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,GAAG,GACtB,CACR,EACD,eAAK,SAAS,EAAC,mBAAmB,aAChC,YAAG,SAAS,EAAC,+DAA+D,YACzE,KAAK,GACJ,EACJ,YAAG,SAAS,EAAC,kDAAkD,YAC5D,KAAK,GACJ,EACH,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CACnB,aAAG,SAAS,EAAC,+CAA+C,aACzD,MAAM,IAAI,CACT,eACE,SAAS,EACP,QAAQ;oCACN,CAAC,CAAC,wCAAwC;oCAC1C,CAAC,CAAC,gCAAgC,YAGrC,MAAM,GACF,CACR,EACA,IAAI,IAAI,eAAM,SAAS,EAAC,uBAAuB,YAAE,IAAI,GAAQ,IAC5D,CACL,IACG,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default categorical palette (the blue → purple ramp used by the Square UI
|
|
3
|
+
* breakdown widgets). Blocks fall back to this when an item has no explicit
|
|
4
|
+
* color. Override per item or pass your own colors.
|
|
5
|
+
*/
|
|
6
|
+
export declare const chartPalette: readonly ["#375dfb", "#6985fc", "#9baefd", "#7f69fc", "#aa9bfd", "#b069fc", "#cabffd", "#3559e9"];
|
|
7
|
+
/** Pick a palette color by index (wraps around). */
|
|
8
|
+
export declare function paletteColor(index: number): string;
|
|
9
|
+
//# sourceMappingURL=palette.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"palette.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/palette.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,YAAY,mGASf,CAAC;AAEX,oDAAoD;AACpD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default categorical palette (the blue → purple ramp used by the Square UI
|
|
3
|
+
* breakdown widgets). Blocks fall back to this when an item has no explicit
|
|
4
|
+
* color. Override per item or pass your own colors.
|
|
5
|
+
*/
|
|
6
|
+
export const chartPalette = [
|
|
7
|
+
"#375dfb",
|
|
8
|
+
"#6985fc",
|
|
9
|
+
"#9baefd",
|
|
10
|
+
"#7f69fc",
|
|
11
|
+
"#aa9bfd",
|
|
12
|
+
"#b069fc",
|
|
13
|
+
"#cabffd",
|
|
14
|
+
"#3559e9",
|
|
15
|
+
];
|
|
16
|
+
/** Pick a palette color by index (wraps around). */
|
|
17
|
+
export function paletteColor(index) {
|
|
18
|
+
return chartPalette[index % chartPalette.length];
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=palette.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"palette.js","sourceRoot":"","sources":["../../../src/components/blocks/palette.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;CACD,CAAC;AAEX,oDAAoD;AACpD,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,YAAY,CAAC,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export interface ProgressListItem {
|
|
3
|
+
label: React.ReactNode;
|
|
4
|
+
value: number;
|
|
5
|
+
/** Denominator for the percentage; defaults to the largest value in the list. */
|
|
6
|
+
max?: number;
|
|
7
|
+
/** Fill color (CSS color); falls back to the primary token. */
|
|
8
|
+
color?: string;
|
|
9
|
+
/** Right-side text. Defaults to the value (or `${pct}%` when `showPercent`). */
|
|
10
|
+
hint?: React.ReactNode;
|
|
11
|
+
}
|
|
12
|
+
export interface ProgressListCardProps {
|
|
13
|
+
title?: React.ReactNode;
|
|
14
|
+
icon?: React.ElementType;
|
|
15
|
+
actions?: React.ReactNode;
|
|
16
|
+
items: ProgressListItem[];
|
|
17
|
+
/** Show "NN%" on the right instead of the raw value. */
|
|
18
|
+
showPercent?: boolean;
|
|
19
|
+
/** Bar height (default `h-2`). */
|
|
20
|
+
barHeight?: string;
|
|
21
|
+
formatValue?: (value: number) => string;
|
|
22
|
+
className?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Vertical list of labeled progress bars (storage by type, budget usage, goal
|
|
26
|
+
* completion…). Each row: label + value on top, a themed track below.
|
|
27
|
+
*/
|
|
28
|
+
export declare function ProgressListCard({ title, icon, actions, items, showPercent, barHeight, formatValue, className, }: ProgressListCardProps): React.JSX.Element;
|
|
29
|
+
//# sourceMappingURL=progress-list-card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-list-card.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/progress-list-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,wDAAwD;IACxD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,WAAmB,EACnB,SAAiB,EACjB,WAA4B,EAC5B,SAAS,GACV,EAAE,qBAAqB,qBAmCvB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../lib/utils.js";
|
|
3
|
+
import { ProgressBar } from "../../components/shared/index.js";
|
|
4
|
+
import { BlockCard } from "./block-card.js";
|
|
5
|
+
const DEFAULT_FORMAT = (v) => v.toLocaleString();
|
|
6
|
+
/**
|
|
7
|
+
* Vertical list of labeled progress bars (storage by type, budget usage, goal
|
|
8
|
+
* completion…). Each row: label + value on top, a themed track below.
|
|
9
|
+
*/
|
|
10
|
+
export function ProgressListCard({ title, icon, actions, items, showPercent = false, barHeight = "h-2", formatValue = DEFAULT_FORMAT, className, }) {
|
|
11
|
+
const fallbackMax = Math.max(...items.map((i) => i.value), 1);
|
|
12
|
+
return (_jsx(BlockCard, { title: title, icon: icon, actions: actions, className: className, bodyClassName: "space-y-4", children: items.map((item, i) => {
|
|
13
|
+
const max = item.max ?? fallbackMax;
|
|
14
|
+
const pct = Math.round((item.value / (max || 1)) * 100);
|
|
15
|
+
return (_jsxs("div", { className: "space-y-1.5", children: [_jsxs("div", { className: "flex items-center justify-between gap-2 text-sm", children: [_jsx("span", { className: "truncate text-muted-foreground", children: item.label }), _jsx("span", { className: "shrink-0 font-medium tabular-nums", children: item.hint ??
|
|
16
|
+
(showPercent ? `${pct}%` : formatValue(item.value)) })] }), _jsx(ProgressBar, { value: pct, color: item.color, height: cn(barHeight) })] }, i));
|
|
17
|
+
}) }));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=progress-list-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-list-card.js","sourceRoot":"","sources":["../../../src/components/blocks/progress-list-card.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AA0BzC,MAAM,cAAc,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;AAEzD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAC/B,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,WAAW,GAAG,KAAK,EACnB,SAAS,GAAG,KAAK,EACjB,WAAW,GAAG,cAAc,EAC5B,SAAS,GACa;IACtB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAE9D,OAAO,CACL,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAC,WAAW,YAExB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACrB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,WAAW,CAAC;YACpC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YACxD,OAAO,CACL,eAAa,SAAS,EAAC,aAAa,aAClC,eAAK,SAAS,EAAC,iDAAiD,aAC9D,eAAM,SAAS,EAAC,gCAAgC,YAC7C,IAAI,CAAC,KAAK,GACN,EACP,eAAM,SAAS,EAAC,mCAAmC,YAChD,IAAI,CAAC,IAAI;oCACR,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAChD,IACH,EACN,KAAC,WAAW,IACV,KAAK,EAAE,GAAG,EACV,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,GACrB,KAdM,CAAC,CAeL,CACP,CAAC;QACJ,CAAC,CAAC,GACQ,CACb,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import type { ChartSeries } from "../../components/shared/index.js";
|
|
3
|
+
export interface RadarStatsCardProps {
|
|
4
|
+
title?: React.ReactNode;
|
|
5
|
+
icon?: React.ElementType;
|
|
6
|
+
actions?: React.ReactNode;
|
|
7
|
+
data: Array<Record<string, unknown>>;
|
|
8
|
+
/** Axis (category) key in `data`. */
|
|
9
|
+
axisKey: string;
|
|
10
|
+
/** One or more series to overlay. */
|
|
11
|
+
series: ChartSeries[];
|
|
12
|
+
/** Chart box height (default `h-[260px]`). */
|
|
13
|
+
height?: string;
|
|
14
|
+
className?: string;
|
|
15
|
+
}
|
|
16
|
+
/** Multi-axis radar — skills, scores, category strength comparisons. */
|
|
17
|
+
export declare function RadarStatsCard({ title, icon, actions, data, axisKey, series, height, className, }: RadarStatsCardProps): React.JSX.Element;
|
|
18
|
+
//# sourceMappingURL=radar-stats-card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radar-stats-card.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/radar-stats-card.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrC,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,OAAO,EACP,MAAM,EACN,MAAoB,EACpB,SAAS,GACV,EAAE,mBAAmB,qBAgCrB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { PolarAngleAxis, PolarGrid, Radar, RadarChart, ResponsiveContainer, } from "recharts";
|
|
4
|
+
import { cn } from "../../lib/utils.js";
|
|
5
|
+
import { BlockCard } from "./block-card.js";
|
|
6
|
+
/** Multi-axis radar — skills, scores, category strength comparisons. */
|
|
7
|
+
export function RadarStatsCard({ title, icon, actions, data, axisKey, series, height = "h-[260px]", className, }) {
|
|
8
|
+
return (_jsx(BlockCard, { title: title, icon: icon, actions: actions, className: className, children: _jsx("div", { className: cn("w-full", height), children: _jsx(ResponsiveContainer, { width: "100%", height: "100%", children: _jsxs(RadarChart, { data: data, outerRadius: "72%", children: [_jsx(PolarGrid, { stroke: "var(--border)" }), _jsx(PolarAngleAxis, { dataKey: axisKey, tick: { fontSize: 11, fill: "var(--muted-foreground)" } }), series.map((s) => (_jsx(Radar, { dataKey: s.key, name: s.label ?? s.key, stroke: s.color, fill: s.color, fillOpacity: 0.25, strokeWidth: 2 }, s.key)))] }) }) }) }));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=radar-stats-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radar-stats-card.js","sourceRoot":"","sources":["../../../src/components/blocks/radar-stats-card.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EACL,cAAc,EACd,SAAS,EACT,KAAK,EACL,UAAU,EACV,mBAAmB,GACpB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAgBzC,wEAAwE;AACxE,MAAM,UAAU,cAAc,CAAC,EAC7B,KAAK,EACL,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,OAAO,EACP,MAAM,EACN,MAAM,GAAG,WAAW,EACpB,SAAS,GACW;IACpB,OAAO,CACL,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,YAEpB,cAAK,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,YAClC,KAAC,mBAAmB,IAAC,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,YAC7C,MAAC,UAAU,IAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAC,KAAK,aACvC,KAAC,SAAS,IAAC,MAAM,EAAC,eAAe,GAAG,EACpC,KAAC,cAAc,IACb,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,GACvD,EACD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACjB,KAAC,KAAK,IAEJ,OAAO,EAAE,CAAC,CAAC,GAAG,EACd,IAAI,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,EACtB,MAAM,EAAE,CAAC,CAAC,KAAK,EACf,IAAI,EAAE,CAAC,CAAC,KAAK,EACb,WAAW,EAAE,IAAI,EACjB,WAAW,EAAE,CAAC,IANT,CAAC,CAAC,GAAG,CAOV,CACH,CAAC,IACS,GACO,GAClB,GACI,CACb,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export interface RankingItem {
|
|
3
|
+
label: React.ReactNode;
|
|
4
|
+
value: React.ReactNode;
|
|
5
|
+
sublabel?: React.ReactNode;
|
|
6
|
+
/** Avatar URL — when set, replaces the rank number. */
|
|
7
|
+
avatar?: string;
|
|
8
|
+
fallback?: string;
|
|
9
|
+
/** 0–100; renders a thin progress bar under the row when provided. */
|
|
10
|
+
progress?: number;
|
|
11
|
+
/** Progress fill color. */
|
|
12
|
+
color?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface RankingListCardProps {
|
|
15
|
+
title?: React.ReactNode;
|
|
16
|
+
icon?: React.ElementType;
|
|
17
|
+
actions?: React.ReactNode;
|
|
18
|
+
items: RankingItem[];
|
|
19
|
+
/** Show the numeric rank badge (1, 2, 3…). Default true when no avatars. */
|
|
20
|
+
showRank?: boolean;
|
|
21
|
+
className?: string;
|
|
22
|
+
}
|
|
23
|
+
/** Ranked "top N" list — rank badge or avatar, label, value, optional bar. */
|
|
24
|
+
export declare function RankingListCard({ title, icon, actions, items, showRank, className, }: RankingListCardProps): React.JSX.Element;
|
|
25
|
+
//# sourceMappingURL=ranking-list-card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ranking-list-card.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/ranking-list-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,QAAQ,EACR,SAAS,GACV,EAAE,oBAAoB,qBAiDtB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Avatar, AvatarFallback, AvatarImage } from "../../components/ui/avatar.js";
|
|
3
|
+
import { ProgressBar } from "../../components/shared/index.js";
|
|
4
|
+
import { BlockCard } from "./block-card.js";
|
|
5
|
+
/** Ranked "top N" list — rank badge or avatar, label, value, optional bar. */
|
|
6
|
+
export function RankingListCard({ title, icon, actions, items, showRank, className, }) {
|
|
7
|
+
const useRank = showRank ?? !items.some((i) => i.avatar);
|
|
8
|
+
return (_jsx(BlockCard, { title: title, icon: icon, actions: actions, className: className, bodyClassName: "space-y-4", children: items.map((item, i) => (_jsxs("div", { className: "space-y-1.5", children: [_jsxs("div", { className: "flex items-center gap-3", children: [useRank ? (_jsx("span", { className: "flex size-6 shrink-0 items-center justify-center rounded-full bg-muted text-xs font-semibold text-muted-foreground", children: i + 1 })) : (_jsxs(Avatar, { className: "size-7 shrink-0", children: [item.avatar && _jsx(AvatarImage, { src: item.avatar, alt: "" }), _jsx(AvatarFallback, { className: "bg-muted text-xs", children: item.fallback ?? "•" })] })), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("p", { className: "truncate text-sm font-medium", children: item.label }), item.sublabel && (_jsx("p", { className: "truncate text-xs text-muted-foreground", children: item.sublabel }))] }), _jsx("span", { className: "shrink-0 text-sm font-semibold tabular-nums", children: item.value })] }), typeof item.progress === "number" && (_jsx(ProgressBar, { value: item.progress, color: item.color, height: "h-1.5" }))] }, i))) }));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=ranking-list-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ranking-list-card.js","sourceRoot":"","sources":["../../../src/components/blocks/ranking-list-card.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAyBzC,8EAA8E;AAC9E,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,QAAQ,EACR,SAAS,GACY;IACrB,MAAM,OAAO,GAAG,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAEzD,OAAO,CACL,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAC,WAAW,YAExB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,eAAa,SAAS,EAAC,aAAa,aAClC,eAAK,SAAS,EAAC,yBAAyB,aACrC,OAAO,CAAC,CAAC,CAAC,CACT,eAAM,SAAS,EAAC,oHAAoH,YACjI,CAAC,GAAG,CAAC,GACD,CACR,CAAC,CAAC,CAAC,CACF,MAAC,MAAM,IAAC,SAAS,EAAC,iBAAiB,aAChC,IAAI,CAAC,MAAM,IAAI,KAAC,WAAW,IAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAC,EAAE,GAAG,EACxD,KAAC,cAAc,IAAC,SAAS,EAAC,kBAAkB,YACzC,IAAI,CAAC,QAAQ,IAAI,GAAG,GACN,IACV,CACV,EACD,eAAK,SAAS,EAAC,gBAAgB,aAC7B,YAAG,SAAS,EAAC,8BAA8B,YAAE,IAAI,CAAC,KAAK,GAAK,EAC3D,IAAI,CAAC,QAAQ,IAAI,CAChB,YAAG,SAAS,EAAC,wCAAwC,YAClD,IAAI,CAAC,QAAQ,GACZ,CACL,IACG,EACN,eAAM,SAAS,EAAC,6CAA6C,YAC1D,IAAI,CAAC,KAAK,GACN,IACH,EACL,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,CACpC,KAAC,WAAW,IACV,KAAK,EAAE,IAAI,CAAC,QAAQ,EACpB,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,MAAM,EAAC,OAAO,GACd,CACH,KAhCO,CAAC,CAiCL,CACP,CAAC,GACQ,CACb,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export interface SparkStatCardProps {
|
|
3
|
+
title: React.ReactNode;
|
|
4
|
+
value: React.ReactNode;
|
|
5
|
+
icon?: React.ElementType;
|
|
6
|
+
change?: string;
|
|
7
|
+
trend?: "up" | "down";
|
|
8
|
+
caption?: string;
|
|
9
|
+
/** Sparkline rows. */
|
|
10
|
+
data: Array<Record<string, unknown>>;
|
|
11
|
+
/** Numeric key in `data` to plot. */
|
|
12
|
+
dataKey: string;
|
|
13
|
+
/** Sparkline + value color. Defaults to the primary token. */
|
|
14
|
+
color?: string;
|
|
15
|
+
type?: "area" | "line" | "bar";
|
|
16
|
+
/** Sparkline height utility (default `h-[56px]`). */
|
|
17
|
+
sparkHeight?: string;
|
|
18
|
+
className?: string;
|
|
19
|
+
}
|
|
20
|
+
/** Compact metric card with a mini sparkline under the value. */
|
|
21
|
+
export declare function SparkStatCard({ title, value, icon: Icon, change, trend, caption, data, dataKey, color, type, sparkHeight, className, }: SparkStatCardProps): React.JSX.Element;
|
|
22
|
+
//# sourceMappingURL=spark-stat-card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spark-stat-card.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/spark-stat-card.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrC,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;IAC/B,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iEAAiE;AACjE,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,KAAK,EACL,IAAI,EAAE,IAAI,EACV,MAAM,EACN,KAAK,EACL,OAAO,EACP,IAAI,EACJ,OAAO,EACP,KAAwB,EACxB,IAAa,EACb,WAAwB,EACxB,SAAS,GACV,EAAE,kBAAkB,qBAgCpB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { cn } from "../../lib/utils.js";
|
|
4
|
+
import { SeriesChart } from "../../components/shared/index.js";
|
|
5
|
+
import { MetricHeadline } from "./block-card.js";
|
|
6
|
+
/** Compact metric card with a mini sparkline under the value. */
|
|
7
|
+
export function SparkStatCard({ title, value, icon: Icon, change, trend, caption, data, dataKey, color = "var(--primary)", type = "area", sparkHeight = "h-[56px]", className, }) {
|
|
8
|
+
return (_jsxs("div", { className: cn("flex flex-col gap-4 rounded-xl border bg-card p-5 text-card-foreground", className), children: [_jsxs("div", { className: "flex items-center gap-1.5 text-muted-foreground", children: [Icon && _jsx(Icon, { className: "size-4 sm:size-[18px]" }), _jsx("span", { className: "text-xs font-medium sm:text-sm", children: title })] }), _jsx(MetricHeadline, { value: value, change: change, trend: trend, caption: caption }), _jsx(SeriesChart, { type: type, data: data, series: [{ key: dataKey, color }], xKey: dataKey, showGrid: false, showXAxis: false, showYAxis: false, showTooltip: false, className: cn("aspect-auto w-full", sparkHeight), margin: { top: 4, right: 0, bottom: 0, left: 0 } })] }));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=spark-stat-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spark-stat-card.js","sourceRoot":"","sources":["../../../src/components/blocks/spark-stat-card.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAqB9C,iEAAiE;AACjE,MAAM,UAAU,aAAa,CAAC,EAC5B,KAAK,EACL,KAAK,EACL,IAAI,EAAE,IAAI,EACV,MAAM,EACN,KAAK,EACL,OAAO,EACP,IAAI,EACJ,OAAO,EACP,KAAK,GAAG,gBAAgB,EACxB,IAAI,GAAG,MAAM,EACb,WAAW,GAAG,UAAU,EACxB,SAAS,GACU;IACnB,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,wEAAwE,EACxE,SAAS,CACV,aAED,eAAK,SAAS,EAAC,iDAAiD,aAC7D,IAAI,IAAI,KAAC,IAAI,IAAC,SAAS,EAAC,uBAAuB,GAAG,EACnD,eAAM,SAAS,EAAC,gCAAgC,YAAE,KAAK,GAAQ,IAC3D,EACN,KAAC,cAAc,IACb,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,GAChB,EACF,KAAC,WAAW,IACV,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EACjC,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,KAAK,EACf,SAAS,EAAE,KAAK,EAChB,SAAS,EAAE,KAAK,EAChB,WAAW,EAAE,KAAK,EAClB,SAAS,EAAE,EAAE,CAAC,oBAAoB,EAAE,WAAW,CAAC,EAChD,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAChD,IACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type StepStatus = "done" | "current" | "todo";
|
|
3
|
+
export interface StepItem {
|
|
4
|
+
label: React.ReactNode;
|
|
5
|
+
description?: React.ReactNode;
|
|
6
|
+
status?: StepStatus;
|
|
7
|
+
}
|
|
8
|
+
export interface StepsCardProps {
|
|
9
|
+
title?: React.ReactNode;
|
|
10
|
+
icon?: React.ElementType;
|
|
11
|
+
actions?: React.ReactNode;
|
|
12
|
+
steps: StepItem[];
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
/** Vertical stepper: numbered / checked circles with a connector line. */
|
|
16
|
+
export declare function StepsCard({ title, icon, actions, steps, className, }: StepsCardProps): React.JSX.Element;
|
|
17
|
+
//# sourceMappingURL=steps-card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"steps-card.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/steps-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,0EAA0E;AAC1E,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,SAAS,GACV,EAAE,cAAc,qBAyDhB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Check } from "lucide-react";
|
|
3
|
+
import { cn } from "../../lib/utils.js";
|
|
4
|
+
import { BlockCard } from "./block-card.js";
|
|
5
|
+
/** Vertical stepper: numbered / checked circles with a connector line. */
|
|
6
|
+
export function StepsCard({ title, icon, actions, steps, className, }) {
|
|
7
|
+
return (_jsx(BlockCard, { title: title, icon: icon, actions: actions, className: className, children: _jsx("ol", { className: "space-y-6", children: steps.map((step, i) => {
|
|
8
|
+
const status = step.status ?? "todo";
|
|
9
|
+
const last = i === steps.length - 1;
|
|
10
|
+
return (_jsxs("li", { className: "relative flex gap-4", children: [!last && (_jsx("span", { className: cn("absolute left-[15px] top-9 h-[calc(100%-0.25rem)] w-px -translate-x-1/2", status === "done" ? "bg-primary" : "bg-border"), "aria-hidden": true })), _jsx("span", { className: cn("z-10 flex size-8 shrink-0 items-center justify-center rounded-full border text-xs font-semibold", status === "done" &&
|
|
11
|
+
"border-primary bg-primary text-primary-foreground", status === "current" &&
|
|
12
|
+
"border-primary text-primary", status === "todo" &&
|
|
13
|
+
"border-border bg-muted text-muted-foreground"), children: status === "done" ? _jsx(Check, { className: "size-4" }) : i + 1 }), _jsxs("div", { className: "min-w-0 flex-1 pt-1", children: [_jsx("p", { className: cn("text-sm font-medium", status === "todo" && "text-muted-foreground"), children: step.label }), step.description && (_jsx("p", { className: "mt-0.5 text-xs text-muted-foreground", children: step.description }))] })] }, i));
|
|
14
|
+
}) }) }));
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=steps-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"steps-card.js","sourceRoot":"","sources":["../../../src/components/blocks/steps-card.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAkBzC,0EAA0E;AAC1E,MAAM,UAAU,SAAS,CAAC,EACxB,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,SAAS,GACM;IACf,OAAO,CACL,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,YAEpB,aAAI,SAAS,EAAC,WAAW,YACtB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBACrB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC;gBACrC,MAAM,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;gBACpC,OAAO,CACL,cAAY,SAAS,EAAC,qBAAqB,aACxC,CAAC,IAAI,IAAI,CACR,eACE,SAAS,EAAE,EAAE,CACX,yEAAyE,EACzE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAC/C,wBAED,CACH,EACD,eACE,SAAS,EAAE,EAAE,CACX,iGAAiG,EACjG,MAAM,KAAK,MAAM;gCACf,mDAAmD,EACrD,MAAM,KAAK,SAAS;gCAClB,6BAA6B,EAC/B,MAAM,KAAK,MAAM;gCACf,8CAA8C,CACjD,YAEA,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,KAAC,KAAK,IAAC,SAAS,EAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GACpD,EACP,eAAK,SAAS,EAAC,qBAAqB,aAClC,YACE,SAAS,EAAE,EAAE,CACX,qBAAqB,EACrB,MAAM,KAAK,MAAM,IAAI,uBAAuB,CAC7C,YAEA,IAAI,CAAC,KAAK,GACT,EACH,IAAI,CAAC,WAAW,IAAI,CACnB,YAAG,SAAS,EAAC,sCAAsC,YAChD,IAAI,CAAC,WAAW,GACf,CACL,IACG,KArCC,CAAC,CAsCL,CACN,CAAC;YACJ,CAAC,CAAC,GACC,GACK,CACb,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type StatusTone } from "../../components/shared/index.js";
|
|
3
|
+
export interface TeamMember {
|
|
4
|
+
name: string;
|
|
5
|
+
role?: React.ReactNode;
|
|
6
|
+
avatar?: string;
|
|
7
|
+
fallback?: string;
|
|
8
|
+
/** Status pill (e.g. "Online" / "Away"). */
|
|
9
|
+
status?: React.ReactNode;
|
|
10
|
+
statusTone?: StatusTone;
|
|
11
|
+
}
|
|
12
|
+
export interface TeamListCardProps {
|
|
13
|
+
title?: React.ReactNode;
|
|
14
|
+
icon?: React.ElementType;
|
|
15
|
+
actions?: React.ReactNode;
|
|
16
|
+
members: TeamMember[];
|
|
17
|
+
className?: string;
|
|
18
|
+
}
|
|
19
|
+
/** Team / members list: avatar + name + role + optional status pill. */
|
|
20
|
+
export declare function TeamListCard({ title, icon, actions, members, className, }: TeamListCardProps): React.JSX.Element;
|
|
21
|
+
//# sourceMappingURL=team-list-card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-list-card.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/team-list-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGnE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,IAAI,EACJ,OAAO,EACP,OAAO,EACP,SAAS,GACV,EAAE,iBAAiB,qBAkCnB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Avatar, AvatarFallback, AvatarImage } from "../../components/ui/avatar.js";
|
|
3
|
+
import { StatusBadge } from "../../components/shared/index.js";
|
|
4
|
+
import { BlockCard } from "./block-card.js";
|
|
5
|
+
/** Team / members list: avatar + name + role + optional status pill. */
|
|
6
|
+
export function TeamListCard({ title, icon, actions, members, className, }) {
|
|
7
|
+
return (_jsx(BlockCard, { title: title, icon: icon, actions: actions, className: className, bodyClassName: "space-y-4", children: members.map((m, i) => (_jsxs("div", { className: "flex items-center gap-3", children: [_jsxs(Avatar, { className: "size-9 shrink-0", children: [m.avatar && _jsx(AvatarImage, { src: m.avatar, alt: m.name }), _jsx(AvatarFallback, { className: "bg-muted text-xs", children: m.fallback ?? m.name.charAt(0) })] }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("p", { className: "truncate text-sm font-medium", children: m.name }), m.role && (_jsx("p", { className: "truncate text-xs text-muted-foreground", children: m.role }))] }), m.status && (_jsx(StatusBadge, { tone: m.statusTone ?? "gray", label: m.status, variant: "soft" }))] }, i))) }));
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=team-list-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-list-card.js","sourceRoot":"","sources":["../../../src/components/blocks/team-list-card.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAmB,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAoBzC,wEAAwE;AACxE,MAAM,UAAU,YAAY,CAAC,EAC3B,KAAK,EACL,IAAI,EACJ,OAAO,EACP,OAAO,EACP,SAAS,GACS;IAClB,OAAO,CACL,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAC,WAAW,YAExB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACrB,eAAa,SAAS,EAAC,yBAAyB,aAC9C,MAAC,MAAM,IAAC,SAAS,EAAC,iBAAiB,aAChC,CAAC,CAAC,MAAM,IAAI,KAAC,WAAW,IAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,GAAI,EACxD,KAAC,cAAc,IAAC,SAAS,EAAC,kBAAkB,YACzC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAChB,IACV,EACT,eAAK,SAAS,EAAC,gBAAgB,aAC7B,YAAG,SAAS,EAAC,8BAA8B,YAAE,CAAC,CAAC,IAAI,GAAK,EACvD,CAAC,CAAC,IAAI,IAAI,CACT,YAAG,SAAS,EAAC,wCAAwC,YAAE,CAAC,CAAC,IAAI,GAAK,CACnE,IACG,EACL,CAAC,CAAC,MAAM,IAAI,CACX,KAAC,WAAW,IACV,IAAI,EAAE,CAAC,CAAC,UAAU,IAAI,MAAM,EAC5B,KAAK,EAAE,CAAC,CAAC,MAAM,EACf,OAAO,EAAC,MAAM,GACd,CACH,KAnBO,CAAC,CAoBL,CACP,CAAC,GACQ,CACb,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type StatusTone } from "../../components/shared/index.js";
|
|
3
|
+
export interface TimelineItem {
|
|
4
|
+
title: React.ReactNode;
|
|
5
|
+
description?: React.ReactNode;
|
|
6
|
+
time?: React.ReactNode;
|
|
7
|
+
icon?: React.ElementType;
|
|
8
|
+
tone?: StatusTone;
|
|
9
|
+
}
|
|
10
|
+
export interface TimelineCardProps {
|
|
11
|
+
title?: React.ReactNode;
|
|
12
|
+
icon?: React.ElementType;
|
|
13
|
+
actions?: React.ReactNode;
|
|
14
|
+
items: TimelineItem[];
|
|
15
|
+
className?: string;
|
|
16
|
+
}
|
|
17
|
+
/** Vertical timeline with a connector line and tinted dots / icons. */
|
|
18
|
+
export declare function TimelineCard({ title, icon, actions, items, className, }: TimelineCardProps): React.JSX.Element;
|
|
19
|
+
//# sourceMappingURL=timeline-card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-card.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/timeline-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGhE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,uEAAuE;AACvE,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,SAAS,GACV,EAAE,iBAAiB,qBAqDnB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../lib/utils.js";
|
|
3
|
+
import { toneSoft } from "../../components/shared/index.js";
|
|
4
|
+
import { BlockCard } from "./block-card.js";
|
|
5
|
+
/** Vertical timeline with a connector line and tinted dots / icons. */
|
|
6
|
+
export function TimelineCard({ title, icon, actions, items, className, }) {
|
|
7
|
+
return (_jsx(BlockCard, { title: title, icon: icon, actions: actions, className: className, children: _jsx("ol", { className: "relative space-y-6", children: items.map((item, i) => {
|
|
8
|
+
const Dot = item.icon;
|
|
9
|
+
const last = i === items.length - 1;
|
|
10
|
+
return (_jsxs("li", { className: "relative flex gap-4", children: [!last && (_jsx("span", { className: "absolute left-4 top-9 h-[calc(100%-0.5rem)] w-px -translate-x-1/2 bg-border", "aria-hidden": true })), _jsx("span", { className: cn("z-10 flex size-8 shrink-0 items-center justify-center rounded-full", toneSoft[item.tone ?? "gray"]), children: Dot ? (_jsx(Dot, { className: "size-4" })) : (_jsx("span", { className: "size-2 rounded-full bg-current" })) }), _jsxs("div", { className: "min-w-0 flex-1 pt-1", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsx("p", { className: "truncate text-sm font-medium", children: item.title }), item.time && (_jsx("span", { className: "shrink-0 text-xs text-muted-foreground", children: item.time }))] }), item.description && (_jsx("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.description }))] })] }, i));
|
|
11
|
+
}) }) }));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=timeline-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-card.js","sourceRoot":"","sources":["../../../src/components/blocks/timeline-card.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAmB,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAkBzC,uEAAuE;AACvE,MAAM,UAAU,YAAY,CAAC,EAC3B,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,SAAS,GACS;IAClB,OAAO,CACL,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,YAEpB,aAAI,SAAS,EAAC,oBAAoB,YAC/B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBACrB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;gBACtB,MAAM,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;gBACpC,OAAO,CACL,cAAY,SAAS,EAAC,qBAAqB,aACxC,CAAC,IAAI,IAAI,CACR,eACE,SAAS,EAAC,6EAA6E,wBAEvF,CACH,EACD,eACE,SAAS,EAAE,EAAE,CACX,oEAAoE,EACpE,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,CAC9B,YAEA,GAAG,CAAC,CAAC,CAAC,CACL,KAAC,GAAG,IAAC,SAAS,EAAC,QAAQ,GAAG,CAC3B,CAAC,CAAC,CAAC,CACF,eAAM,SAAS,EAAC,gCAAgC,GAAG,CACpD,GACI,EACP,eAAK,SAAS,EAAC,qBAAqB,aAClC,eAAK,SAAS,EAAC,yCAAyC,aACtD,YAAG,SAAS,EAAC,8BAA8B,YAAE,IAAI,CAAC,KAAK,GAAK,EAC3D,IAAI,CAAC,IAAI,IAAI,CACZ,eAAM,SAAS,EAAC,wCAAwC,YACrD,IAAI,CAAC,IAAI,GACL,CACR,IACG,EACL,IAAI,CAAC,WAAW,IAAI,CACnB,YAAG,SAAS,EAAC,sCAAsC,YAChD,IAAI,CAAC,WAAW,GACf,CACL,IACG,KAjCC,CAAC,CAkCL,CACN,CAAC;YACJ,CAAC,CAAC,GACC,GACK,CACb,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Badge } from "../../components/ui/badge.js";
|
|
3
|
+
export interface TodoItem {
|
|
4
|
+
label: React.ReactNode;
|
|
5
|
+
done?: boolean;
|
|
6
|
+
badge?: React.ReactNode;
|
|
7
|
+
badgeVariant?: React.ComponentProps<typeof Badge>["variant"];
|
|
8
|
+
onCheckedChange?: (checked: boolean) => void;
|
|
9
|
+
}
|
|
10
|
+
export interface TodoListCardProps {
|
|
11
|
+
title?: React.ReactNode;
|
|
12
|
+
icon?: React.ElementType;
|
|
13
|
+
actions?: React.ReactNode;
|
|
14
|
+
items: TodoItem[];
|
|
15
|
+
/** Show "done/total" next to the title. */
|
|
16
|
+
showCount?: boolean;
|
|
17
|
+
className?: string;
|
|
18
|
+
}
|
|
19
|
+
/** Checklist card: checkbox + label (+ optional badge), with done styling. */
|
|
20
|
+
export declare function TodoListCard({ title, icon, actions, items, showCount, className, }: TodoListCardProps): React.JSX.Element;
|
|
21
|
+
//# sourceMappingURL=todo-list-card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"todo-list-card.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/todo-list-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAG9C,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC;IAC7D,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAC9C;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,SAAgB,EAChB,SAAS,GACV,EAAE,iBAAiB,qBA+CnB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../lib/utils.js";
|
|
3
|
+
import { Checkbox } from "../../components/ui/checkbox.js";
|
|
4
|
+
import { Badge } from "../../components/ui/badge.js";
|
|
5
|
+
import { BlockCard } from "./block-card.js";
|
|
6
|
+
/** Checklist card: checkbox + label (+ optional badge), with done styling. */
|
|
7
|
+
export function TodoListCard({ title, icon, actions, items, showCount = true, className, }) {
|
|
8
|
+
const done = items.filter((i) => i.done).length;
|
|
9
|
+
return (_jsx(BlockCard, { title: title != null && showCount ? (_jsxs("span", { className: "flex items-center gap-2", children: [title, _jsxs("span", { className: "text-xs font-normal text-muted-foreground", children: [done, "/", items.length] })] })) : (title), icon: icon, actions: actions, className: className, bodyClassName: "space-y-1", children: items.map((item, i) => (_jsxs("label", { className: "flex cursor-pointer items-center gap-3 rounded-md px-1 py-2 hover:bg-muted/50", children: [_jsx(Checkbox, { defaultChecked: item.done, onCheckedChange: (c) => item.onCheckedChange?.(c === true) }), _jsx("span", { className: cn("min-w-0 flex-1 truncate text-sm", item.done && "text-muted-foreground line-through"), children: item.label }), item.badge && (_jsx(Badge, { variant: item.badgeVariant ?? "secondary", children: item.badge }))] }, i))) }));
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=todo-list-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"todo-list-card.js","sourceRoot":"","sources":["../../../src/components/blocks/todo-list-card.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAoBzC,8EAA8E;AAC9E,MAAM,UAAU,YAAY,CAAC,EAC3B,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,SAAS,GAAG,IAAI,EAChB,SAAS,GACS;IAClB,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IAChD,OAAO,CACL,KAAC,SAAS,IACR,KAAK,EACH,KAAK,IAAI,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,CAC3B,gBAAM,SAAS,EAAC,yBAAyB,aACtC,KAAK,EACN,gBAAM,SAAS,EAAC,2CAA2C,aACxD,IAAI,OAAG,KAAK,CAAC,MAAM,IACf,IACF,CACR,CAAC,CAAC,CAAC,CACF,KAAK,CACN,EAEH,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAC,WAAW,YAExB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,iBAEE,SAAS,EAAC,+EAA+E,aAEzF,KAAC,QAAQ,IACP,cAAc,EAAE,IAAI,CAAC,IAAI,EACzB,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,GAC1D,EACF,eACE,SAAS,EAAE,EAAE,CACX,iCAAiC,EACjC,IAAI,CAAC,IAAI,IAAI,oCAAoC,CAClD,YAEA,IAAI,CAAC,KAAK,GACN,EACN,IAAI,CAAC,KAAK,IAAI,CACb,KAAC,KAAK,IAAC,OAAO,EAAE,IAAI,CAAC,YAAY,IAAI,WAAW,YAC7C,IAAI,CAAC,KAAK,GACL,CACT,KAnBI,CAAC,CAoBA,CACT,CAAC,GACQ,CACb,CAAC;AACJ,CAAC"}
|