@adea-ai/ui 0.60.4 → 0.61.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 +108 -34
- package/dist/components/composites/account-menu/account-menu.d.ts +48 -0
- package/dist/components/composites/account-menu/account-menu.d.ts.map +1 -0
- package/dist/components/composites/account-menu/account-menu.js +119 -0
- package/dist/components/composites/account-menu/account-menu.js.map +1 -0
- package/dist/components/composites/account-menu/index.d.ts +2 -0
- package/dist/components/composites/account-menu/index.d.ts.map +1 -0
- package/dist/components/composites/list-row/index.d.ts +2 -0
- package/dist/components/composites/list-row/index.d.ts.map +1 -0
- package/dist/components/composites/list-row/list-row.d.ts +44 -0
- package/dist/components/composites/list-row/list-row.d.ts.map +1 -0
- package/dist/components/composites/list-row/list-row.js +124 -0
- package/dist/components/composites/list-row/list-row.js.map +1 -0
- package/dist/components/composites/settings/index.d.ts +2 -0
- package/dist/components/composites/settings/index.d.ts.map +1 -0
- package/dist/components/composites/settings/settings.d.ts +49 -0
- package/dist/components/composites/settings/settings.d.ts.map +1 -0
- package/dist/components/composites/settings/settings.js +148 -0
- package/dist/components/composites/settings/settings.js.map +1 -0
- package/dist/components/composites/stat/index.d.ts +2 -0
- package/dist/components/composites/stat/index.d.ts.map +1 -0
- package/dist/components/composites/stat/stat.d.ts +48 -0
- package/dist/components/composites/stat/stat.d.ts.map +1 -0
- package/dist/components/composites/stat/stat.js +148 -0
- package/dist/components/composites/stat/stat.js.map +1 -0
- package/dist/components/composites/update-dialog/index.d.ts +2 -0
- package/dist/components/composites/update-dialog/index.d.ts.map +1 -0
- package/dist/components/composites/update-dialog/update-dialog.d.ts +108 -0
- package/dist/components/composites/update-dialog/update-dialog.d.ts.map +1 -0
- package/dist/components/composites/update-dialog/update-dialog.js +452 -0
- package/dist/components/composites/update-dialog/update-dialog.js.map +1 -0
- package/dist/components/composites/workspace-mark/index.d.ts +2 -0
- package/dist/components/composites/workspace-mark/index.d.ts.map +1 -0
- package/dist/components/composites/workspace-mark/workspace-mark.d.ts +24 -0
- package/dist/components/composites/workspace-mark/workspace-mark.d.ts.map +1 -0
- package/dist/components/composites/workspace-mark/workspace-mark.js +76 -0
- package/dist/components/composites/workspace-mark/workspace-mark.js.map +1 -0
- package/dist/components/conversation/conversation-avatar.d.ts +21 -0
- package/dist/components/conversation/conversation-avatar.d.ts.map +1 -0
- package/dist/components/conversation/conversation-avatar.js +52 -0
- package/dist/components/conversation/conversation-avatar.js.map +1 -0
- package/dist/components/conversation/conversation-surface.d.ts +27 -0
- package/dist/components/conversation/conversation-surface.d.ts.map +1 -0
- package/dist/components/conversation/conversation-surface.js +118 -0
- package/dist/components/conversation/conversation-surface.js.map +1 -0
- package/dist/components/conversation/index.d.ts +6 -0
- package/dist/components/conversation/index.d.ts.map +1 -0
- package/dist/components/conversation/message-composer.d.ts +70 -0
- package/dist/components/conversation/message-composer.d.ts.map +1 -0
- package/dist/components/conversation/message-composer.js +235 -0
- package/dist/components/conversation/message-composer.js.map +1 -0
- package/dist/components/conversation/message-row.d.ts +101 -0
- package/dist/components/conversation/message-row.d.ts.map +1 -0
- package/dist/components/conversation/message-row.js +389 -0
- package/dist/components/conversation/message-row.js.map +1 -0
- package/dist/components/conversation/thread-panel.d.ts +45 -0
- package/dist/components/conversation/thread-panel.d.ts.map +1 -0
- package/dist/components/conversation/thread-panel.js +123 -0
- package/dist/components/conversation/thread-panel.js.map +1 -0
- package/dist/components/layout/app-shell/app-shell.d.ts +45 -0
- package/dist/components/layout/app-shell/app-shell.d.ts.map +1 -0
- package/dist/components/layout/app-shell/app-shell.js +89 -0
- package/dist/components/layout/app-shell/app-shell.js.map +1 -0
- package/dist/components/layout/app-shell/index.d.ts +2 -0
- package/dist/components/layout/app-shell/index.d.ts.map +1 -0
- package/dist/components/layout/page/index.d.ts +2 -0
- package/dist/components/layout/page/index.d.ts.map +1 -0
- package/dist/components/layout/page/page.d.ts +31 -0
- package/dist/components/layout/page/page.d.ts.map +1 -0
- package/dist/components/layout/page/page.js +143 -0
- package/dist/components/layout/page/page.js.map +1 -0
- package/dist/components/layout/panel/index.d.ts +2 -0
- package/dist/components/layout/panel/index.d.ts.map +1 -0
- package/dist/components/layout/panel/panel.d.ts +44 -0
- package/dist/components/layout/panel/panel.d.ts.map +1 -0
- package/dist/components/layout/panel/panel.js +151 -0
- package/dist/components/layout/panel/panel.js.map +1 -0
- package/dist/components/layout/side-rail/index.d.ts +3 -0
- package/dist/components/layout/side-rail/index.d.ts.map +1 -0
- package/dist/components/layout/side-rail/side-rail-context.d.ts +23 -0
- package/dist/components/layout/side-rail/side-rail-context.d.ts.map +1 -0
- package/dist/components/layout/side-rail/side-rail-context.js +18 -0
- package/dist/components/layout/side-rail/side-rail-context.js.map +1 -0
- package/dist/components/layout/side-rail/side-rail.d.ts +101 -0
- package/dist/components/layout/side-rail/side-rail.d.ts.map +1 -0
- package/dist/components/layout/side-rail/side-rail.js +336 -0
- package/dist/components/layout/side-rail/side-rail.js.map +1 -0
- package/dist/components/layout/sidebar-nav/index.d.ts +2 -0
- package/dist/components/layout/sidebar-nav/index.d.ts.map +1 -0
- package/dist/components/layout/sidebar-nav/sidebar-nav.d.ts +62 -0
- package/dist/components/layout/sidebar-nav/sidebar-nav.d.ts.map +1 -0
- package/dist/components/layout/sidebar-nav/sidebar-nav.js +231 -0
- package/dist/components/layout/sidebar-nav/sidebar-nav.js.map +1 -0
- package/dist/components/layout/status-bar/index.d.ts +2 -0
- package/dist/components/layout/status-bar/index.d.ts.map +1 -0
- package/dist/components/layout/status-bar/status-bar.d.ts +23 -0
- package/dist/components/layout/status-bar/status-bar.d.ts.map +1 -0
- package/dist/components/layout/status-bar/status-bar.js +68 -0
- package/dist/components/layout/status-bar/status-bar.js.map +1 -0
- package/dist/components/layout/top-bar/index.d.ts +2 -0
- package/dist/components/layout/top-bar/index.d.ts.map +1 -0
- package/dist/components/layout/top-bar/top-bar.d.ts +59 -0
- package/dist/components/layout/top-bar/top-bar.d.ts.map +1 -0
- package/dist/components/layout/top-bar/top-bar.js +118 -0
- package/dist/components/layout/top-bar/top-bar.js.map +1 -0
- package/dist/components/motion/index.d.ts +3 -0
- package/dist/components/motion/index.d.ts.map +1 -0
- package/dist/components/motion/index.js +3 -0
- package/dist/components/motion/presence.d.ts +29 -0
- package/dist/components/motion/presence.d.ts.map +1 -0
- package/dist/components/motion/presence.js +10 -0
- package/dist/components/motion/presence.js.map +1 -0
- package/dist/components/theme/appearance-panel.d.ts +25 -0
- package/dist/components/theme/appearance-panel.d.ts.map +1 -0
- package/dist/components/theme/appearance-panel.js +162 -0
- package/dist/components/theme/appearance-panel.js.map +1 -0
- package/dist/components/theme/index.d.ts +5 -0
- package/dist/components/theme/index.d.ts.map +1 -0
- package/dist/components/theme/theme-picker.d.ts +54 -0
- package/dist/components/theme/theme-picker.d.ts.map +1 -0
- package/dist/components/theme/theme-picker.js +156 -0
- package/dist/components/theme/theme-picker.js.map +1 -0
- package/dist/components/theme/theme-provider.d.ts +130 -0
- package/dist/components/theme/theme-provider.d.ts.map +1 -0
- package/dist/components/theme/theme-provider.js +164 -0
- package/dist/components/theme/theme-provider.js.map +1 -0
- package/dist/components/theme/theme-toggle.d.ts +19 -0
- package/dist/components/theme/theme-toggle.d.ts.map +1 -0
- package/dist/components/theme/theme-toggle.js +69 -0
- package/dist/components/theme/theme-toggle.js.map +1 -0
- package/dist/components/ui/accordion/accordion.d.ts +18 -0
- package/dist/components/ui/accordion/accordion.d.ts.map +1 -0
- package/dist/components/ui/accordion/accordion.js +60 -0
- package/dist/components/ui/accordion/accordion.js.map +1 -0
- package/dist/components/ui/accordion/index.d.ts +2 -0
- package/dist/components/ui/accordion/index.d.ts.map +1 -0
- package/dist/components/ui/alert/alert.d.ts +26 -0
- package/dist/components/ui/alert/alert.d.ts.map +1 -0
- package/dist/components/ui/alert/alert.js +89 -0
- package/dist/components/ui/alert/alert.js.map +1 -0
- package/dist/components/ui/alert/index.d.ts +2 -0
- package/dist/components/ui/alert/index.d.ts.map +1 -0
- package/dist/components/ui/alert-dialog/alert-dialog.d.ts +29 -0
- package/dist/components/ui/alert-dialog/alert-dialog.d.ts.map +1 -0
- package/dist/components/ui/alert-dialog/alert-dialog.js +155 -0
- package/dist/components/ui/alert-dialog/alert-dialog.js.map +1 -0
- package/dist/components/ui/alert-dialog/index.d.ts +2 -0
- package/dist/components/ui/alert-dialog/index.d.ts.map +1 -0
- package/dist/components/ui/aspect-ratio/aspect-ratio.d.ts +22 -0
- package/dist/components/ui/aspect-ratio/aspect-ratio.d.ts.map +1 -0
- package/dist/components/ui/aspect-ratio/aspect-ratio.js +29 -0
- package/dist/components/ui/aspect-ratio/aspect-ratio.js.map +1 -0
- package/dist/components/ui/aspect-ratio/index.d.ts +2 -0
- package/dist/components/ui/aspect-ratio/index.d.ts.map +1 -0
- package/dist/components/ui/avatar/avatar.d.ts +41 -0
- package/dist/components/ui/avatar/avatar.d.ts.map +1 -0
- package/dist/components/ui/avatar/avatar.js +106 -0
- package/dist/components/ui/avatar/avatar.js.map +1 -0
- package/dist/components/ui/avatar/index.d.ts +2 -0
- package/dist/components/ui/avatar/index.d.ts.map +1 -0
- package/dist/components/ui/badge/badge.d.ts +22 -0
- package/dist/components/ui/badge/badge.d.ts.map +1 -0
- package/dist/components/ui/badge/badge.js +58 -0
- package/dist/components/ui/badge/badge.js.map +1 -0
- package/dist/components/ui/badge/index.d.ts +2 -0
- package/dist/components/ui/badge/index.d.ts.map +1 -0
- package/dist/components/ui/board/board.d.ts +78 -0
- package/dist/components/ui/board/board.d.ts.map +1 -0
- package/dist/components/ui/board/board.js +200 -0
- package/dist/components/ui/board/board.js.map +1 -0
- package/dist/components/ui/board/index.d.ts +2 -0
- package/dist/components/ui/board/index.d.ts.map +1 -0
- package/dist/components/ui/breadcrumb/breadcrumb.d.ts +24 -0
- package/dist/components/ui/breadcrumb/breadcrumb.d.ts.map +1 -0
- package/dist/components/ui/breadcrumb/breadcrumb.js +109 -0
- package/dist/components/ui/breadcrumb/breadcrumb.js.map +1 -0
- package/dist/components/ui/breadcrumb/index.d.ts +2 -0
- package/dist/components/ui/breadcrumb/index.d.ts.map +1 -0
- package/dist/components/ui/button/button.d.ts +30 -0
- package/dist/components/ui/button/button.d.ts.map +1 -0
- package/dist/components/ui/button/button.js +80 -0
- package/dist/components/ui/button/button.js.map +1 -0
- package/dist/components/ui/button/index.d.ts +2 -0
- package/dist/components/ui/button/index.d.ts.map +1 -0
- package/dist/components/ui/button-group/button-group.d.ts +39 -0
- package/dist/components/ui/button-group/button-group.d.ts.map +1 -0
- package/dist/components/ui/button-group/button-group.js +63 -0
- package/dist/components/ui/button-group/button-group.js.map +1 -0
- package/dist/components/ui/button-group/index.d.ts +2 -0
- package/dist/components/ui/button-group/index.d.ts.map +1 -0
- package/dist/components/ui/calendar/calendar.d.ts +93 -0
- package/dist/components/ui/calendar/calendar.d.ts.map +1 -0
- package/dist/components/ui/calendar/calendar.js +243 -0
- package/dist/components/ui/calendar/calendar.js.map +1 -0
- package/dist/components/ui/calendar/index.d.ts +2 -0
- package/dist/components/ui/calendar/index.d.ts.map +1 -0
- package/dist/components/ui/card/card.d.ts +23 -0
- package/dist/components/ui/card/card.d.ts.map +1 -0
- package/dist/components/ui/card/card.js +98 -0
- package/dist/components/ui/card/card.js.map +1 -0
- package/dist/components/ui/card/index.d.ts +2 -0
- package/dist/components/ui/card/index.d.ts.map +1 -0
- package/dist/components/ui/carousel/carousel.d.ts +66 -0
- package/dist/components/ui/carousel/carousel.d.ts.map +1 -0
- package/dist/components/ui/carousel/carousel.js +178 -0
- package/dist/components/ui/carousel/carousel.js.map +1 -0
- package/dist/components/ui/carousel/index.d.ts +2 -0
- package/dist/components/ui/carousel/index.d.ts.map +1 -0
- package/dist/components/ui/chart/chart.d.ts +154 -0
- package/dist/components/ui/chart/chart.d.ts.map +1 -0
- package/dist/components/ui/chart/chart.js +373 -0
- package/dist/components/ui/chart/chart.js.map +1 -0
- package/dist/components/ui/chart/index.d.ts +2 -0
- package/dist/components/ui/chart/index.d.ts.map +1 -0
- package/dist/components/ui/checkbox/checkbox.d.ts +33 -0
- package/dist/components/ui/checkbox/checkbox.d.ts.map +1 -0
- package/dist/components/ui/checkbox/checkbox.js +76 -0
- package/dist/components/ui/checkbox/checkbox.js.map +1 -0
- package/dist/components/ui/checkbox/index.d.ts +2 -0
- package/dist/components/ui/checkbox/index.d.ts.map +1 -0
- package/dist/components/ui/code-block/code-block.d.ts +75 -0
- package/dist/components/ui/code-block/code-block.d.ts.map +1 -0
- package/dist/components/ui/code-block/code-block.js +186 -0
- package/dist/components/ui/code-block/code-block.js.map +1 -0
- package/dist/components/ui/code-block/index.d.ts +2 -0
- package/dist/components/ui/code-block/index.d.ts.map +1 -0
- package/dist/components/ui/collapsible/collapsible.d.ts +17 -0
- package/dist/components/ui/collapsible/collapsible.d.ts.map +1 -0
- package/dist/components/ui/collapsible/collapsible.js +38 -0
- package/dist/components/ui/collapsible/collapsible.js.map +1 -0
- package/dist/components/ui/collapsible/index.d.ts +2 -0
- package/dist/components/ui/collapsible/index.d.ts.map +1 -0
- package/dist/components/ui/combobox/combobox.d.ts +28 -0
- package/dist/components/ui/combobox/combobox.d.ts.map +1 -0
- package/dist/components/ui/combobox/combobox.js +102 -0
- package/dist/components/ui/combobox/combobox.js.map +1 -0
- package/dist/components/ui/combobox/index.d.ts +2 -0
- package/dist/components/ui/combobox/index.d.ts.map +1 -0
- package/dist/components/ui/command/command.d.ts +53 -0
- package/dist/components/ui/command/command.d.ts.map +1 -0
- package/dist/components/ui/command/command.js +137 -0
- package/dist/components/ui/command/command.js.map +1 -0
- package/dist/components/ui/command/index.d.ts +2 -0
- package/dist/components/ui/command/index.d.ts.map +1 -0
- package/dist/components/ui/context-menu/context-menu.d.ts +32 -0
- package/dist/components/ui/context-menu/context-menu.d.ts.map +1 -0
- package/dist/components/ui/context-menu/context-menu.js +119 -0
- package/dist/components/ui/context-menu/context-menu.js.map +1 -0
- package/dist/components/ui/context-menu/index.d.ts +2 -0
- package/dist/components/ui/context-menu/index.d.ts.map +1 -0
- package/dist/components/ui/detail-panel/detail-panel.d.ts +61 -0
- package/dist/components/ui/detail-panel/detail-panel.d.ts.map +1 -0
- package/dist/components/ui/detail-panel/detail-panel.js +132 -0
- package/dist/components/ui/detail-panel/detail-panel.js.map +1 -0
- package/dist/components/ui/detail-panel/index.d.ts +2 -0
- package/dist/components/ui/detail-panel/index.d.ts.map +1 -0
- package/dist/components/ui/dialog/dialog.d.ts +40 -0
- package/dist/components/ui/dialog/dialog.d.ts.map +1 -0
- package/dist/components/ui/dialog/dialog.js +125 -0
- package/dist/components/ui/dialog/dialog.js.map +1 -0
- package/dist/components/ui/dialog/index.d.ts +2 -0
- package/dist/components/ui/dialog/index.d.ts.map +1 -0
- package/dist/components/ui/diff-block/diff-block.d.ts +95 -0
- package/dist/components/ui/diff-block/diff-block.d.ts.map +1 -0
- package/dist/components/ui/diff-block/diff-block.js +230 -0
- package/dist/components/ui/diff-block/diff-block.js.map +1 -0
- package/dist/components/ui/diff-block/diff-block.test.d.ts +2 -0
- package/dist/components/ui/diff-block/diff-block.test.d.ts.map +1 -0
- package/dist/components/ui/diff-block/index.d.ts +2 -0
- package/dist/components/ui/diff-block/index.d.ts.map +1 -0
- package/dist/components/ui/drawer/drawer.d.ts +39 -0
- package/dist/components/ui/drawer/drawer.d.ts.map +1 -0
- package/dist/components/ui/drawer/drawer.js +106 -0
- package/dist/components/ui/drawer/drawer.js.map +1 -0
- package/dist/components/ui/drawer/index.d.ts +2 -0
- package/dist/components/ui/drawer/index.d.ts.map +1 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu.d.ts +48 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu.d.ts.map +1 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu.js +151 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu.js.map +1 -0
- package/dist/components/ui/dropdown-menu/index.d.ts +2 -0
- package/dist/components/ui/dropdown-menu/index.d.ts.map +1 -0
- package/dist/components/ui/empty/empty.d.ts +27 -0
- package/dist/components/ui/empty/empty.d.ts.map +1 -0
- package/dist/components/ui/{empty.js → empty/empty.js} +28 -23
- package/dist/components/ui/empty/empty.js.map +1 -0
- package/dist/components/ui/empty/index.d.ts +2 -0
- package/dist/components/ui/empty/index.d.ts.map +1 -0
- package/dist/components/ui/entity-icon/entity-icon.d.ts +59 -0
- package/dist/components/ui/entity-icon/entity-icon.d.ts.map +1 -0
- package/dist/components/ui/entity-icon/entity-icon.js +145 -0
- package/dist/components/ui/entity-icon/entity-icon.js.map +1 -0
- package/dist/components/ui/entity-icon/index.d.ts +2 -0
- package/dist/components/ui/entity-icon/index.d.ts.map +1 -0
- package/dist/components/ui/field/field.d.ts +39 -0
- package/dist/components/ui/field/field.d.ts.map +1 -0
- package/dist/components/ui/field/field.js +111 -0
- package/dist/components/ui/field/field.js.map +1 -0
- package/dist/components/ui/field/index.d.ts +2 -0
- package/dist/components/ui/field/index.d.ts.map +1 -0
- package/dist/components/ui/hover-card/hover-card.d.ts +17 -0
- package/dist/components/ui/hover-card/hover-card.d.ts.map +1 -0
- package/dist/components/ui/hover-card/hover-card.js +40 -0
- package/dist/components/ui/hover-card/hover-card.js.map +1 -0
- package/dist/components/ui/hover-card/index.d.ts +2 -0
- package/dist/components/ui/hover-card/index.d.ts.map +1 -0
- package/dist/components/ui/input/index.d.ts +2 -0
- package/dist/components/ui/input/index.d.ts.map +1 -0
- package/dist/components/ui/input/input.d.ts +15 -0
- package/dist/components/ui/input/input.d.ts.map +1 -0
- package/dist/components/ui/input/input.js +36 -0
- package/dist/components/ui/input/input.js.map +1 -0
- package/dist/components/ui/input-group/index.d.ts +2 -0
- package/dist/components/ui/input-group/index.d.ts.map +1 -0
- package/dist/components/ui/input-group/input-group.d.ts +34 -0
- package/dist/components/ui/input-group/input-group.d.ts.map +1 -0
- package/dist/components/ui/input-group/input-group.js +93 -0
- package/dist/components/ui/input-group/input-group.js.map +1 -0
- package/dist/components/ui/input-otp/index.d.ts +2 -0
- package/dist/components/ui/input-otp/index.d.ts.map +1 -0
- package/dist/components/ui/input-otp/input-otp.d.ts +37 -0
- package/dist/components/ui/input-otp/input-otp.d.ts.map +1 -0
- package/dist/components/ui/input-otp/input-otp.js +92 -0
- package/dist/components/ui/input-otp/input-otp.js.map +1 -0
- package/dist/components/ui/item/index.d.ts +2 -0
- package/dist/components/ui/item/index.d.ts.map +1 -0
- package/dist/components/ui/item/item.d.ts +49 -0
- package/dist/components/ui/item/item.d.ts.map +1 -0
- package/dist/components/ui/item/item.js +163 -0
- package/dist/components/ui/item/item.js.map +1 -0
- package/dist/components/ui/kbd/index.d.ts +2 -0
- package/dist/components/ui/kbd/index.d.ts.map +1 -0
- package/dist/components/ui/kbd/kbd.d.ts +14 -0
- package/dist/components/ui/kbd/kbd.d.ts.map +1 -0
- package/dist/components/ui/kbd/kbd.js +40 -0
- package/dist/components/ui/kbd/kbd.js.map +1 -0
- package/dist/components/ui/label/index.d.ts +2 -0
- package/dist/components/ui/label/index.d.ts.map +1 -0
- package/dist/components/ui/label/label.d.ts +17 -0
- package/dist/components/ui/label/label.d.ts.map +1 -0
- package/dist/components/ui/label/label.js +33 -0
- package/dist/components/ui/label/label.js.map +1 -0
- package/dist/components/ui/menubar/index.d.ts +2 -0
- package/dist/components/ui/menubar/index.d.ts.map +1 -0
- package/dist/components/ui/menubar/menubar.d.ts +38 -0
- package/dist/components/ui/menubar/menubar.d.ts.map +1 -0
- package/dist/components/ui/menubar/menubar.js +138 -0
- package/dist/components/ui/menubar/menubar.js.map +1 -0
- package/dist/components/ui/modal-dialog/index.d.ts +2 -0
- package/dist/components/ui/modal-dialog/index.d.ts.map +1 -0
- package/dist/components/ui/modal-dialog/modal-dialog.d.ts +35 -0
- package/dist/components/ui/modal-dialog/modal-dialog.d.ts.map +1 -0
- package/dist/components/ui/modal-dialog/modal-dialog.js +78 -0
- package/dist/components/ui/modal-dialog/modal-dialog.js.map +1 -0
- package/dist/components/ui/navigation-menu/index.d.ts +2 -0
- package/dist/components/ui/navigation-menu/index.d.ts.map +1 -0
- package/dist/components/ui/navigation-menu/navigation-menu.d.ts +77 -0
- package/dist/components/ui/navigation-menu/navigation-menu.d.ts.map +1 -0
- package/dist/components/ui/navigation-menu/navigation-menu.js +116 -0
- package/dist/components/ui/navigation-menu/navigation-menu.js.map +1 -0
- package/dist/components/ui/pagination/index.d.ts +2 -0
- package/dist/components/ui/pagination/index.d.ts.map +1 -0
- package/dist/components/ui/pagination/pagination.d.ts +33 -0
- package/dist/components/ui/pagination/pagination.d.ts.map +1 -0
- package/dist/components/ui/pagination/pagination.js +92 -0
- package/dist/components/ui/pagination/pagination.js.map +1 -0
- package/dist/components/ui/popover/index.d.ts +2 -0
- package/dist/components/ui/popover/index.d.ts.map +1 -0
- package/dist/components/ui/popover/popover.d.ts +26 -0
- package/dist/components/ui/popover/popover.d.ts.map +1 -0
- package/dist/components/ui/popover/popover.js +66 -0
- package/dist/components/ui/popover/popover.js.map +1 -0
- package/dist/components/ui/progress/index.d.ts +2 -0
- package/dist/components/ui/progress/index.d.ts.map +1 -0
- package/dist/components/ui/progress/progress.d.ts +29 -0
- package/dist/components/ui/progress/progress.d.ts.map +1 -0
- package/dist/components/ui/progress/progress.js +53 -0
- package/dist/components/ui/progress/progress.js.map +1 -0
- package/dist/components/ui/radio-group/index.d.ts +2 -0
- package/dist/components/ui/radio-group/index.d.ts.map +1 -0
- package/dist/components/ui/radio-group/radio-group.d.ts +26 -0
- package/dist/components/ui/radio-group/radio-group.d.ts.map +1 -0
- package/dist/components/ui/radio-group/radio-group.js +77 -0
- package/dist/components/ui/radio-group/radio-group.js.map +1 -0
- package/dist/components/ui/resizable/index.d.ts +2 -0
- package/dist/components/ui/resizable/index.d.ts.map +1 -0
- package/dist/components/ui/resizable/resizable.d.ts +33 -0
- package/dist/components/ui/resizable/resizable.d.ts.map +1 -0
- package/dist/components/ui/resizable/resizable.js +57 -0
- package/dist/components/ui/resizable/resizable.js.map +1 -0
- package/dist/components/ui/scroll-area/index.d.ts +2 -0
- package/dist/components/ui/scroll-area/index.d.ts.map +1 -0
- package/dist/components/ui/scroll-area/scroll-area.d.ts +26 -0
- package/dist/components/ui/scroll-area/scroll-area.d.ts.map +1 -0
- package/dist/components/ui/scroll-area/scroll-area.js +36 -0
- package/dist/components/ui/scroll-area/scroll-area.js.map +1 -0
- package/dist/components/ui/select/index.d.ts +2 -0
- package/dist/components/ui/select/index.d.ts.map +1 -0
- package/dist/components/ui/select/select.d.ts +63 -0
- package/dist/components/ui/select/select.d.ts.map +1 -0
- package/dist/components/ui/select/select.js +142 -0
- package/dist/components/ui/select/select.js.map +1 -0
- package/dist/components/ui/separator/index.d.ts +2 -0
- package/dist/components/ui/separator/index.d.ts.map +1 -0
- package/dist/components/ui/separator/separator.d.ts +17 -0
- package/dist/components/ui/separator/separator.d.ts.map +1 -0
- package/dist/components/ui/separator/separator.js +24 -0
- package/dist/components/ui/separator/separator.js.map +1 -0
- package/dist/components/ui/sheet/index.d.ts +2 -0
- package/dist/components/ui/sheet/index.d.ts.map +1 -0
- package/dist/components/ui/sheet/sheet.d.ts +32 -0
- package/dist/components/ui/sheet/sheet.d.ts.map +1 -0
- package/dist/components/ui/sheet/sheet.js +118 -0
- package/dist/components/ui/sheet/sheet.js.map +1 -0
- package/dist/components/ui/skeleton/index.d.ts +2 -0
- package/dist/components/ui/skeleton/index.d.ts.map +1 -0
- package/dist/components/ui/skeleton/skeleton.d.ts +15 -0
- package/dist/components/ui/skeleton/skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeleton/skeleton.js +31 -0
- package/dist/components/ui/skeleton/skeleton.js.map +1 -0
- package/dist/components/ui/slider/index.d.ts +2 -0
- package/dist/components/ui/slider/index.d.ts.map +1 -0
- package/dist/components/ui/slider/slider.d.ts +22 -0
- package/dist/components/ui/slider/slider.d.ts.map +1 -0
- package/dist/components/ui/slider/slider.js +59 -0
- package/dist/components/ui/slider/slider.js.map +1 -0
- package/dist/components/ui/spinner/index.d.ts +2 -0
- package/dist/components/ui/spinner/index.d.ts.map +1 -0
- package/dist/components/ui/spinner/spinner.d.ts +25 -0
- package/dist/components/ui/spinner/spinner.d.ts.map +1 -0
- package/dist/components/ui/spinner/spinner.js +57 -0
- package/dist/components/ui/spinner/spinner.js.map +1 -0
- package/dist/components/ui/status-chip/index.d.ts +2 -0
- package/dist/components/ui/status-chip/index.d.ts.map +1 -0
- package/dist/components/ui/status-chip/status-chip.d.ts +70 -0
- package/dist/components/ui/status-chip/status-chip.d.ts.map +1 -0
- package/dist/components/ui/status-chip/status-chip.js +140 -0
- package/dist/components/ui/status-chip/status-chip.js.map +1 -0
- package/dist/components/ui/switch/index.d.ts +2 -0
- package/dist/components/ui/switch/index.d.ts.map +1 -0
- package/dist/components/ui/switch/switch.d.ts +36 -0
- package/dist/components/ui/switch/switch.d.ts.map +1 -0
- package/dist/components/ui/switch/switch.js +74 -0
- package/dist/components/ui/switch/switch.js.map +1 -0
- package/dist/components/ui/table/index.d.ts +2 -0
- package/dist/components/ui/table/index.d.ts.map +1 -0
- package/dist/components/ui/table/table.d.ts +29 -0
- package/dist/components/ui/table/table.d.ts.map +1 -0
- package/dist/components/ui/table/table.js +129 -0
- package/dist/components/ui/table/table.js.map +1 -0
- package/dist/components/ui/tabs/index.d.ts +2 -0
- package/dist/components/ui/tabs/index.d.ts.map +1 -0
- package/dist/components/ui/tabs/tabs.d.ts +23 -0
- package/dist/components/ui/tabs/tabs.d.ts.map +1 -0
- package/dist/components/ui/tabs/tabs.js +43 -0
- package/dist/components/ui/tabs/tabs.js.map +1 -0
- package/dist/components/ui/textarea/index.d.ts +2 -0
- package/dist/components/ui/textarea/index.d.ts.map +1 -0
- package/dist/components/ui/textarea/textarea.d.ts +14 -0
- package/dist/components/ui/textarea/textarea.d.ts.map +1 -0
- package/dist/components/ui/textarea/textarea.js +30 -0
- package/dist/components/ui/textarea/textarea.js.map +1 -0
- package/dist/components/ui/toast/index.d.ts +2 -0
- package/dist/components/ui/toast/index.d.ts.map +1 -0
- package/dist/components/ui/toast/toast.d.ts +68 -0
- package/dist/components/ui/toast/toast.d.ts.map +1 -0
- package/dist/components/ui/toast/toast.js +186 -0
- package/dist/components/ui/toast/toast.js.map +1 -0
- package/dist/components/ui/toggle/index.d.ts +2 -0
- package/dist/components/ui/toggle/index.d.ts.map +1 -0
- package/dist/components/ui/toggle/toggle.d.ts +22 -0
- package/dist/components/ui/toggle/toggle.d.ts.map +1 -0
- package/dist/components/ui/toggle/toggle.js +64 -0
- package/dist/components/ui/toggle/toggle.js.map +1 -0
- package/dist/components/ui/toggle-group/index.d.ts +2 -0
- package/dist/components/ui/toggle-group/index.d.ts.map +1 -0
- package/dist/components/ui/toggle-group/toggle-group.d.ts +35 -0
- package/dist/components/ui/toggle-group/toggle-group.d.ts.map +1 -0
- package/dist/components/ui/toggle-group/toggle-group.js +38 -0
- package/dist/components/ui/toggle-group/toggle-group.js.map +1 -0
- package/dist/components/ui/tooltip/index.d.ts +2 -0
- package/dist/components/ui/tooltip/index.d.ts.map +1 -0
- package/dist/components/ui/tooltip/tooltip.d.ts +18 -0
- package/dist/components/ui/tooltip/tooltip.d.ts.map +1 -0
- package/dist/components/ui/tooltip/tooltip.js +67 -0
- package/dist/components/ui/tooltip/tooltip.js.map +1 -0
- package/dist/index.d.ts +96 -19
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +90 -20
- package/dist/lib/keyed-rows.d.ts +36 -0
- package/dist/lib/keyed-rows.d.ts.map +1 -0
- package/dist/lib/keyed-rows.js +53 -0
- package/dist/lib/keyed-rows.js.map +1 -0
- package/dist/lib/keyed-rows.test.d.ts +2 -0
- package/dist/lib/keyed-rows.test.d.ts.map +1 -0
- package/dist/lib/overlay.d.ts +44 -0
- package/dist/lib/overlay.d.ts.map +1 -0
- package/dist/lib/overlay.js +57 -0
- package/dist/lib/overlay.js.map +1 -0
- package/dist/lib/themes.d.ts +197 -0
- package/dist/lib/themes.d.ts.map +1 -0
- package/dist/lib/themes.js +303 -0
- package/dist/lib/themes.js.map +1 -0
- package/dist/lib/tokens.d.ts +103 -0
- package/dist/lib/tokens.d.ts.map +1 -0
- package/dist/lib/tokens.js +805 -0
- package/dist/lib/tokens.js.map +1 -0
- package/dist/lib/utils.d.ts +27 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +61 -3
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/variants.d.ts +57 -0
- package/dist/lib/variants.d.ts.map +1 -0
- package/dist/lib/variants.js +49 -0
- package/dist/lib/variants.js.map +1 -0
- package/dist/lib/version-notes.d.ts +24 -0
- package/dist/lib/version-notes.d.ts.map +1 -0
- package/dist/lib/version-notes.js +41 -1
- package/dist/lib/version-notes.js.map +1 -0
- package/dist/r/accordion.json +23 -0
- package/dist/r/account-menu.json +25 -0
- package/dist/r/alert-dialog.json +22 -0
- package/dist/r/alert.json +22 -0
- package/dist/r/app-shell.json +20 -0
- package/dist/r/aspect-ratio.json +20 -0
- package/dist/r/avatar.json +20 -0
- package/dist/r/badge.json +22 -0
- package/dist/r/board.json +20 -0
- package/dist/r/breadcrumb.json +22 -0
- package/dist/r/button-group.json +22 -0
- package/dist/r/button.json +22 -0
- package/dist/r/calendar.json +25 -0
- package/dist/r/card.json +20 -0
- package/dist/r/carousel.json +26 -0
- package/dist/r/chart.json +23 -0
- package/dist/r/checkbox.json +23 -0
- package/dist/r/code-block.json +24 -0
- package/dist/r/collapsible.json +22 -0
- package/dist/r/combobox.json +23 -0
- package/dist/r/command.json +23 -0
- package/dist/r/context-menu.json +23 -0
- package/dist/r/conversation.json +48 -0
- package/dist/r/detail-panel.json +24 -0
- package/dist/r/dialog.json +23 -0
- package/dist/r/diff-block.json +20 -0
- package/dist/r/drawer.json +22 -0
- package/dist/r/dropdown-menu.json +23 -0
- package/dist/r/empty.json +20 -0
- package/dist/r/entity-icon.json +20 -0
- package/dist/r/field.json +22 -0
- package/dist/r/hover-card.json +22 -0
- package/dist/r/input-group.json +20 -0
- package/dist/r/input-otp.json +22 -0
- package/dist/r/input.json +20 -0
- package/dist/r/item.json +20 -0
- package/dist/r/kbd.json +20 -0
- package/dist/r/label.json +20 -0
- package/dist/r/list-row.json +22 -0
- package/dist/r/menubar.json +23 -0
- package/dist/r/modal-dialog.json +22 -0
- package/dist/r/navigation-menu.json +23 -0
- package/dist/r/page.json +20 -0
- package/dist/r/pagination.json +23 -0
- package/dist/r/panel.json +20 -0
- package/dist/r/popover.json +22 -0
- package/dist/r/progress.json +22 -0
- package/dist/r/radio-group.json +23 -0
- package/dist/r/registry.json +1676 -0
- package/dist/r/resizable.json +23 -0
- package/dist/r/scroll-area.json +20 -0
- package/dist/r/select.json +23 -0
- package/dist/r/separator.json +22 -0
- package/dist/r/settings.json +20 -0
- package/dist/r/sheet.json +25 -0
- package/dist/r/side-rail.json +27 -0
- package/dist/r/sidebar-nav.json +23 -0
- package/dist/r/skeleton.json +20 -0
- package/dist/r/slider.json +22 -0
- package/dist/r/spinner.json +22 -0
- package/dist/r/stat.json +22 -0
- package/dist/r/status-bar.json +20 -0
- package/dist/r/status-chip.json +22 -0
- package/dist/r/switch.json +22 -0
- package/dist/r/table.json +20 -0
- package/dist/r/tabs.json +22 -0
- package/dist/r/textarea.json +20 -0
- package/dist/r/theme.json +36 -0
- package/dist/r/toast.json +23 -0
- package/dist/r/toggle-group.json +24 -0
- package/dist/r/toggle.json +22 -0
- package/dist/r/tooltip.json +22 -0
- package/dist/r/top-bar.json +20 -0
- package/dist/r/update-dialog.json +27 -0
- package/dist/r/workspace-mark.json +22 -0
- package/package.json +75 -21
- package/registry.json +1676 -0
- package/src/components/composites/account-menu/account-menu.tsx +150 -0
- package/src/components/composites/account-menu/index.ts +1 -0
- package/src/components/composites/list-row/index.ts +1 -0
- package/src/components/composites/list-row/list-row.tsx +116 -0
- package/src/components/composites/settings/index.ts +1 -0
- package/src/components/composites/settings/settings.tsx +142 -0
- package/src/components/composites/stat/index.ts +9 -0
- package/src/components/composites/stat/stat.tsx +155 -0
- package/src/components/composites/update-dialog/index.ts +7 -0
- package/src/components/composites/update-dialog/update-dialog.tsx +529 -0
- package/src/components/composites/workspace-mark/index.ts +1 -0
- package/src/components/composites/workspace-mark/workspace-mark.tsx +72 -0
- package/src/components/conversation/conversation-avatar.tsx +60 -0
- package/src/components/conversation/conversation-surface.tsx +107 -0
- package/src/components/conversation/index.ts +25 -0
- package/src/components/conversation/message-composer.tsx +239 -0
- package/src/components/conversation/message-row.tsx +387 -0
- package/src/components/conversation/thread-panel.tsx +141 -0
- package/src/components/layout/app-shell/app-shell.tsx +92 -0
- package/src/components/layout/app-shell/index.ts +1 -0
- package/src/components/layout/page/index.ts +9 -0
- package/src/components/layout/page/page.tsx +122 -0
- package/src/components/layout/panel/index.ts +12 -0
- package/src/components/layout/panel/panel.tsx +166 -0
- package/src/components/layout/side-rail/index.ts +12 -0
- package/src/components/layout/side-rail/side-rail-context.ts +42 -0
- package/src/components/layout/side-rail/side-rail.tsx +405 -0
- package/src/components/layout/sidebar-nav/index.ts +14 -0
- package/src/components/layout/sidebar-nav/sidebar-nav.tsx +244 -0
- package/src/components/layout/status-bar/index.ts +1 -0
- package/src/components/layout/status-bar/status-bar.tsx +73 -0
- package/src/components/layout/top-bar/index.ts +10 -0
- package/src/components/layout/top-bar/top-bar.tsx +166 -0
- package/src/components/motion/index.ts +2 -0
- package/src/components/motion/presence.tsx +32 -0
- package/src/components/theme/appearance-panel.tsx +179 -0
- package/src/components/theme/index.ts +22 -0
- package/src/components/theme/theme-picker.tsx +174 -0
- package/src/components/theme/theme-provider.tsx +309 -0
- package/src/components/theme/theme-toggle.tsx +64 -0
- package/src/components/ui/accordion/accordion.tsx +66 -0
- package/src/components/ui/accordion/index.ts +1 -0
- package/src/components/ui/alert/alert.tsx +95 -0
- package/src/components/ui/alert/index.ts +1 -0
- package/src/components/ui/alert-dialog/alert-dialog.tsx +176 -0
- package/src/components/ui/alert-dialog/index.ts +13 -0
- package/src/components/ui/aspect-ratio/aspect-ratio.tsx +38 -0
- package/src/components/ui/aspect-ratio/index.ts +1 -0
- package/src/components/ui/avatar/avatar.tsx +114 -0
- package/src/components/ui/avatar/index.ts +9 -0
- package/src/components/ui/badge/badge.tsx +59 -0
- package/src/components/ui/badge/index.ts +1 -0
- package/src/components/ui/board/board.tsx +254 -0
- package/src/components/ui/board/index.ts +10 -0
- package/src/components/ui/breadcrumb/breadcrumb.tsx +117 -0
- package/src/components/ui/breadcrumb/index.ts +9 -0
- package/src/components/ui/button/button.tsx +89 -0
- package/src/components/ui/button/index.ts +1 -0
- package/src/components/ui/button-group/button-group.tsx +92 -0
- package/src/components/ui/button-group/index.ts +6 -0
- package/src/components/ui/calendar/calendar.tsx +277 -0
- package/src/components/ui/calendar/index.ts +1 -0
- package/src/components/ui/card/card.tsx +82 -0
- package/src/components/ui/card/index.ts +10 -0
- package/src/components/ui/carousel/carousel.tsx +209 -0
- package/src/components/ui/carousel/index.ts +1 -0
- package/src/components/ui/chart/chart.tsx +413 -0
- package/src/components/ui/chart/index.ts +17 -0
- package/src/components/ui/checkbox/checkbox.tsx +99 -0
- package/src/components/ui/checkbox/index.ts +1 -0
- package/src/components/ui/code-block/code-block.tsx +238 -0
- package/src/components/ui/code-block/index.ts +1 -0
- package/src/components/ui/collapsible/collapsible.tsx +54 -0
- package/src/components/ui/collapsible/index.ts +1 -0
- package/src/components/ui/combobox/combobox.tsx +142 -0
- package/src/components/ui/combobox/index.ts +10 -0
- package/src/components/ui/command/command.tsx +214 -0
- package/src/components/ui/command/index.ts +12 -0
- package/src/components/ui/context-menu/context-menu.tsx +163 -0
- package/src/components/ui/context-menu/index.ts +15 -0
- package/src/components/ui/detail-panel/detail-panel.tsx +161 -0
- package/src/components/ui/detail-panel/index.ts +9 -0
- package/src/components/ui/dialog/dialog.tsx +138 -0
- package/src/components/ui/dialog/index.ts +14 -0
- package/src/components/ui/diff-block/diff-block.tsx +286 -0
- package/src/components/ui/diff-block/index.ts +11 -0
- package/src/components/ui/drawer/drawer.tsx +144 -0
- package/src/components/ui/drawer/index.ts +13 -0
- package/src/components/ui/dropdown-menu/dropdown-menu.tsx +203 -0
- package/src/components/ui/dropdown-menu/index.ts +18 -0
- package/src/components/ui/empty/empty.tsx +104 -0
- package/src/components/ui/empty/index.ts +10 -0
- package/src/components/ui/entity-icon/entity-icon.tsx +154 -0
- package/src/components/ui/entity-icon/index.ts +1 -0
- package/src/components/ui/field/field.tsx +131 -0
- package/src/components/ui/field/index.ts +11 -0
- package/src/components/ui/hover-card/hover-card.tsx +48 -0
- package/src/components/ui/hover-card/index.ts +1 -0
- package/src/components/ui/input/index.ts +1 -0
- package/src/components/ui/input/input.tsx +41 -0
- package/src/components/ui/input-group/index.ts +8 -0
- package/src/components/ui/input-group/input-group.tsx +111 -0
- package/src/components/ui/input-otp/index.ts +1 -0
- package/src/components/ui/input-otp/input-otp.tsx +108 -0
- package/src/components/ui/item/index.ts +10 -0
- package/src/components/ui/item/item.tsx +146 -0
- package/src/components/ui/kbd/index.ts +1 -0
- package/src/components/ui/kbd/kbd.tsx +42 -0
- package/src/components/ui/label/index.ts +1 -0
- package/src/components/ui/label/label.tsx +36 -0
- package/src/components/ui/menubar/index.ts +16 -0
- package/src/components/ui/menubar/menubar.tsx +190 -0
- package/src/components/ui/modal-dialog/index.ts +1 -0
- package/src/components/ui/modal-dialog/modal-dialog.tsx +95 -0
- package/src/components/ui/navigation-menu/index.ts +13 -0
- package/src/components/ui/navigation-menu/navigation-menu.tsx +229 -0
- package/src/components/ui/pagination/index.ts +8 -0
- package/src/components/ui/pagination/pagination.tsx +144 -0
- package/src/components/ui/popover/index.ts +10 -0
- package/src/components/ui/popover/popover.tsx +81 -0
- package/src/components/ui/progress/index.ts +1 -0
- package/src/components/ui/progress/progress.tsx +67 -0
- package/src/components/ui/radio-group/index.ts +1 -0
- package/src/components/ui/radio-group/radio-group.tsx +78 -0
- package/src/components/ui/resizable/index.ts +6 -0
- package/src/components/ui/resizable/resizable.tsx +74 -0
- package/src/components/ui/scroll-area/index.ts +1 -0
- package/src/components/ui/scroll-area/scroll-area.tsx +66 -0
- package/src/components/ui/select/index.ts +11 -0
- package/src/components/ui/select/select.tsx +188 -0
- package/src/components/ui/separator/index.ts +1 -0
- package/src/components/ui/separator/separator.tsx +40 -0
- package/src/components/ui/sheet/index.ts +13 -0
- package/src/components/ui/sheet/sheet.tsx +132 -0
- package/src/components/ui/skeleton/index.ts +1 -0
- package/src/components/ui/skeleton/skeleton.tsx +28 -0
- package/src/components/ui/slider/index.ts +1 -0
- package/src/components/ui/slider/slider.tsx +81 -0
- package/src/components/ui/spinner/index.ts +1 -0
- package/src/components/ui/spinner/spinner.tsx +58 -0
- package/src/components/ui/status-chip/index.ts +8 -0
- package/src/components/ui/status-chip/status-chip.tsx +142 -0
- package/src/components/ui/switch/index.ts +1 -0
- package/src/components/ui/switch/switch.tsx +100 -0
- package/src/components/ui/table/index.ts +11 -0
- package/src/components/ui/table/table.tsx +125 -0
- package/src/components/ui/tabs/index.ts +8 -0
- package/src/components/ui/tabs/tabs.tsx +77 -0
- package/src/components/ui/textarea/index.ts +1 -0
- package/src/components/ui/textarea/textarea.tsx +36 -0
- package/src/components/ui/toast/index.ts +1 -0
- package/src/components/ui/toast/toast.tsx +220 -0
- package/src/components/ui/toggle/index.ts +1 -0
- package/src/components/ui/toggle/toggle.tsx +60 -0
- package/src/components/ui/toggle-group/index.ts +6 -0
- package/src/components/ui/toggle-group/toggle-group.tsx +66 -0
- package/src/components/ui/tooltip/index.ts +9 -0
- package/src/components/ui/tooltip/tooltip.tsx +102 -0
- package/src/index.ts +154 -0
- package/src/lib/keyed-rows.ts +68 -0
- package/src/lib/overlay.ts +70 -0
- package/src/lib/themes.ts +490 -0
- package/src/lib/tokens.ts +688 -0
- package/src/lib/utils.ts +74 -4
- package/src/lib/variants.ts +62 -0
- package/src/lib/version-notes.ts +35 -0
- package/src/styles/base.css +489 -484
- package/src/styles/fonts.css +26 -0
- package/src/styles/globals.css +14 -3
- package/src/styles/theme.css +838 -229
- package/LICENSE +0 -201
- package/dist/components/account-drawer.d.ts +0 -11
- package/dist/components/account-drawer.js +0 -120
- package/dist/components/appearance.d.ts +0 -261
- package/dist/components/appearance.js +0 -802
- package/dist/components/on-screen-controls.d.ts +0 -8
- package/dist/components/on-screen-controls.js +0 -162
- package/dist/components/scene-settings.d.ts +0 -33
- package/dist/components/scene-settings.js +0 -253
- package/dist/components/theme-preview.d.ts +0 -40
- package/dist/components/theme-preview.js +0 -210
- package/dist/components/theme-provider.d.ts +0 -52
- package/dist/components/theme-provider.js +0 -128
- package/dist/components/theme-swatch.d.ts +0 -12
- package/dist/components/theme-swatch.js +0 -66
- package/dist/components/theme-toggle.d.ts +0 -7
- package/dist/components/theme-toggle.js +0 -64
- package/dist/components/ui/badge.d.ts +0 -8
- package/dist/components/ui/badge.js +0 -34
- package/dist/components/ui/button.d.ts +0 -9
- package/dist/components/ui/button.js +0 -52
- package/dist/components/ui/card.d.ts +0 -4
- package/dist/components/ui/card.js +0 -28
- package/dist/components/ui/dialog.d.ts +0 -15
- package/dist/components/ui/dialog.js +0 -104
- package/dist/components/ui/drawer.d.ts +0 -24
- package/dist/components/ui/drawer.js +0 -120
- package/dist/components/ui/dropdown-menu.d.ts +0 -35
- package/dist/components/ui/dropdown-menu.js +0 -180
- package/dist/components/ui/empty.d.ts +0 -12
- package/dist/components/ui/field.d.ts +0 -25
- package/dist/components/ui/field.js +0 -188
- package/dist/components/ui/input.d.ts +0 -3
- package/dist/components/ui/input.js +0 -22
- package/dist/components/ui/label.d.ts +0 -3
- package/dist/components/ui/label.js +0 -17
- package/dist/components/ui/radio-group.d.ts +0 -5
- package/dist/components/ui/radio-group.js +0 -39
- package/dist/components/ui/separator.d.ts +0 -7
- package/dist/components/ui/separator.js +0 -20
- package/dist/components/ui/skeleton.d.ts +0 -3
- package/dist/components/ui/skeleton.js +0 -17
- package/dist/components/ui/spinner.d.ts +0 -5
- package/dist/components/ui/spinner.js +0 -17
- package/dist/components/ui/switch.d.ts +0 -8
- package/dist/components/ui/switch.js +0 -59
- package/dist/components/ui/tabs.d.ts +0 -11
- package/dist/components/ui/tabs.js +0 -57
- package/dist/components/ui/toggle-group.d.ts +0 -13
- package/dist/components/ui/toggle-group.js +0 -95
- package/dist/components/ui/toggle.d.ts +0 -10
- package/dist/components/ui/toggle.js +0 -41
- package/dist/components/ui/tooltip.d.ts +0 -15
- package/dist/components/ui/tooltip.js +0 -55
- package/dist/components/version-dialog.d.ts +0 -25
- package/dist/components/version-dialog.js +0 -330
- package/dist/components/workspace-brand.d.ts +0 -5
- package/dist/components/workspace-brand.js +0 -13
- package/dist/components/workspace-logo.d.ts +0 -3
- package/dist/components/workspace-logo.js +0 -17
- package/src/components/account-drawer.tsx +0 -114
- package/src/components/appearance.ts +0 -1112
- package/src/components/on-screen-controls.tsx +0 -149
- package/src/components/scene-settings.tsx +0 -199
- package/src/components/theme-preview.tsx +0 -170
- package/src/components/theme-provider.tsx +0 -214
- package/src/components/theme-swatch.tsx +0 -49
- package/src/components/theme-toggle.tsx +0 -48
- package/src/components/ui/badge.tsx +0 -40
- package/src/components/ui/button.tsx +0 -58
- package/src/components/ui/card.tsx +0 -21
- package/src/components/ui/dialog.tsx +0 -132
- package/src/components/ui/drawer.tsx +0 -168
- package/src/components/ui/dropdown-menu.tsx +0 -235
- package/src/components/ui/empty.tsx +0 -97
- package/src/components/ui/field.tsx +0 -220
- package/src/components/ui/input.tsx +0 -20
- package/src/components/ui/label.tsx +0 -19
- package/src/components/ui/radio-group.tsx +0 -41
- package/src/components/ui/separator.tsx +0 -28
- package/src/components/ui/skeleton.tsx +0 -16
- package/src/components/ui/spinner.tsx +0 -20
- package/src/components/ui/switch.tsx +0 -59
- package/src/components/ui/tabs.tsx +0 -76
- package/src/components/ui/toggle-group.tsx +0 -98
- package/src/components/ui/toggle.tsx +0 -42
- package/src/components/ui/tooltip.tsx +0 -61
- package/src/components/version-dialog.tsx +0 -368
- package/src/components/workspace-brand.tsx +0 -18
- package/src/components/workspace-logo.tsx +0 -21
- package/src/index.tsx +0 -53
- package/src/styles/auth-shell.css +0 -167
- package/src/styles/conventional-workspace.css +0 -2858
- package/src/styles/dev-view.css +0 -899
- package/src/styles/workspace-shell.css +0 -82
- package/tsconfig.json +0 -11
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { ComponentProps } from 'solid-js'
|
|
2
|
+
import { splitProps } from 'solid-js'
|
|
3
|
+
import { cn } from '#lib/utils'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* StatusBar.
|
|
7
|
+
*
|
|
8
|
+
* The thin strip pinned to the bottom of the window. Its purpose is to hold
|
|
9
|
+
* *ambient* facts the user checks without acting: connection state, branch,
|
|
10
|
+
* counts, the current mode. Anything interactive belongs in the top bar or a
|
|
11
|
+
* pane — a status bar is read, not operated, and a control here is one the user
|
|
12
|
+
* will not find.
|
|
13
|
+
*
|
|
14
|
+
* Height comes from `--statusbar-height`, so a pane's bottom padding can
|
|
15
|
+
* reserve it without a magic number.
|
|
16
|
+
*/
|
|
17
|
+
export function StatusBar(props: ComponentProps<'footer'>) {
|
|
18
|
+
const [local, rest] = splitProps(props, ['class'])
|
|
19
|
+
|
|
20
|
+
return (
|
|
21
|
+
<footer
|
|
22
|
+
data-slot="status-bar"
|
|
23
|
+
class={cn(
|
|
24
|
+
'text-muted-foreground flex h-statusbar shrink-0 items-center gap-3 border-t border-border px-3 text-2xs',
|
|
25
|
+
local.class
|
|
26
|
+
)}
|
|
27
|
+
{...rest}
|
|
28
|
+
/>
|
|
29
|
+
)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** A single readout. `tone` carries meaning; it is not decoration. */
|
|
33
|
+
export function StatusBarItem(
|
|
34
|
+
props: ComponentProps<'span'> & {
|
|
35
|
+
tone?: 'default' | 'success' | 'warning' | 'destructive'
|
|
36
|
+
/** Draw a leading state dot, e.g. for a connection. */
|
|
37
|
+
dot?: boolean
|
|
38
|
+
}
|
|
39
|
+
) {
|
|
40
|
+
const [local, rest] = splitProps(props, ['class', 'tone', 'dot', 'children'])
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<span
|
|
44
|
+
data-slot="status-bar-item"
|
|
45
|
+
class={cn(
|
|
46
|
+
'inline-flex shrink-0 items-center gap-1.5 whitespace-nowrap [&_svg]:size-3 [&_svg]:shrink-0',
|
|
47
|
+
{
|
|
48
|
+
'text-muted-foreground': local.tone === undefined || local.tone === 'default',
|
|
49
|
+
'text-success': local.tone === 'success',
|
|
50
|
+
'text-warning': local.tone === 'warning',
|
|
51
|
+
'text-destructive': local.tone === 'destructive',
|
|
52
|
+
},
|
|
53
|
+
local.class
|
|
54
|
+
)}
|
|
55
|
+
{...rest}
|
|
56
|
+
>
|
|
57
|
+
{local.dot ? (
|
|
58
|
+
<span
|
|
59
|
+
aria-hidden="true"
|
|
60
|
+
class={cn('size-1.5 shrink-0 rounded-full bg-current', {
|
|
61
|
+
'animate-pulse': local.tone === 'warning',
|
|
62
|
+
})}
|
|
63
|
+
/>
|
|
64
|
+
) : null}
|
|
65
|
+
{local.children}
|
|
66
|
+
</span>
|
|
67
|
+
)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** Pushes everything after it to the trailing edge. */
|
|
71
|
+
export function StatusBarSpacer() {
|
|
72
|
+
return <span aria-hidden="true" class="flex-1" />
|
|
73
|
+
}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import type { ComponentProps } from 'solid-js'
|
|
2
|
+
import { Show, splitProps } from 'solid-js'
|
|
3
|
+
import { cn } from '#lib/utils'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* TopBar.
|
|
7
|
+
*
|
|
8
|
+
* The window's title row and primary toolbar. Three tracks: a leading group, a
|
|
9
|
+
* centred search, and a trailing group. The search is a fixed function of the
|
|
10
|
+
* window width and the two side groups are equal remainders, which is what
|
|
11
|
+
* makes the search *exactly* window-centred by construction — no measurement,
|
|
12
|
+
* no observer, no absolutely-positioned overlay to keep clear of.
|
|
13
|
+
*
|
|
14
|
+
* On a frameless desktop window this row is also the drag region, so it carries
|
|
15
|
+
* `window-drag` and the controls inside it opt back out. `macos-inset` and
|
|
16
|
+
* `windows-inset` reserve the space the native window controls occupy, which is
|
|
17
|
+
* why the row can look off-centre in a frameless window and be correct: it is
|
|
18
|
+
* centred in the space the user can actually see.
|
|
19
|
+
*/
|
|
20
|
+
export type TopBarProps = ComponentProps<'header'> & {
|
|
21
|
+
/** Make the row draggable, for a frameless window. */
|
|
22
|
+
draggable?: boolean
|
|
23
|
+
/** Reserve space for the macOS traffic lights. */
|
|
24
|
+
macosInset?: boolean
|
|
25
|
+
/** Reserve space for the Windows caption buttons. */
|
|
26
|
+
windowsInset?: boolean
|
|
27
|
+
/** Blur the content scrolling under the bar. */
|
|
28
|
+
glass?: boolean
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function TopBar(props: TopBarProps) {
|
|
32
|
+
const [local, rest] = splitProps(props, [
|
|
33
|
+
'class',
|
|
34
|
+
'draggable',
|
|
35
|
+
'macosInset',
|
|
36
|
+
'windowsInset',
|
|
37
|
+
'glass',
|
|
38
|
+
])
|
|
39
|
+
|
|
40
|
+
return (
|
|
41
|
+
<header
|
|
42
|
+
data-slot="top-bar"
|
|
43
|
+
class={cn(
|
|
44
|
+
'h-topbar relative z-(--z-sticky) grid shrink-0 grid-cols-[minmax(0,1fr)_clamp(240px,22vw,480px)_minmax(0,1fr)] items-center gap-3 border-b border-border px-3',
|
|
45
|
+
local.glass && 'glass-panel',
|
|
46
|
+
local.draggable && 'window-drag',
|
|
47
|
+
local.macosInset && 'window-inset-macos',
|
|
48
|
+
local.windowsInset && 'window-inset-windows',
|
|
49
|
+
local.class
|
|
50
|
+
)}
|
|
51
|
+
{...rest}
|
|
52
|
+
/>
|
|
53
|
+
)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** A side group. Both sides are equal remainders, which centres the search. */
|
|
57
|
+
export function TopBarSection(props: ComponentProps<'div'> & { align?: 'start' | 'end' }) {
|
|
58
|
+
const [local, rest] = splitProps(props, ['class', 'align'])
|
|
59
|
+
|
|
60
|
+
return (
|
|
61
|
+
<div
|
|
62
|
+
data-slot="top-bar-section"
|
|
63
|
+
class={cn(
|
|
64
|
+
'flex min-w-0 items-center gap-2 overflow-hidden',
|
|
65
|
+
local.align === 'end' && 'justify-end',
|
|
66
|
+
local.align !== 'end' && 'justify-start',
|
|
67
|
+
local.class
|
|
68
|
+
)}
|
|
69
|
+
{...rest}
|
|
70
|
+
/>
|
|
71
|
+
)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function TopBarTitle(props: ComponentProps<'div'>) {
|
|
75
|
+
const [local, rest] = splitProps(props, ['class'])
|
|
76
|
+
return (
|
|
77
|
+
<div
|
|
78
|
+
data-slot="top-bar-title"
|
|
79
|
+
class={cn('truncate text-sm font-medium', local.class)}
|
|
80
|
+
{...rest}
|
|
81
|
+
/>
|
|
82
|
+
)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/** A breadcrumb or path readout that yields to the actions when space runs out. */
|
|
86
|
+
export function TopBarBreadcrumb(props: ComponentProps<'div'>) {
|
|
87
|
+
const [local, rest] = splitProps(props, ['class'])
|
|
88
|
+
return (
|
|
89
|
+
<div
|
|
90
|
+
data-slot="top-bar-breadcrumb"
|
|
91
|
+
class={cn('flex min-w-0 items-center gap-1.5 text-sm', local.class)}
|
|
92
|
+
{...rest}
|
|
93
|
+
/>
|
|
94
|
+
)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export type TopBarSearchProps = ComponentProps<'button'> & {
|
|
98
|
+
/** The hint shown inside the field, e.g. "Search projects and files". */
|
|
99
|
+
placeholder?: string
|
|
100
|
+
/** The shortcut chip drawn at the trailing edge, e.g. "⌘K". */
|
|
101
|
+
shortcut?: string
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* The search affordance in the middle track.
|
|
106
|
+
*
|
|
107
|
+
* It is a button, not an input, and that is deliberate: clicking it opens the
|
|
108
|
+
* command palette, which already owns the input, the ranking and the keyboard
|
|
109
|
+
* handling. A second live input here would be a second source of truth for the
|
|
110
|
+
* same query. It is styled to read as a field because that is what it behaves
|
|
111
|
+
* like from the user's side.
|
|
112
|
+
*/
|
|
113
|
+
export function TopBarSearch(props: TopBarSearchProps) {
|
|
114
|
+
const [local, rest] = splitProps(props, ['class', 'placeholder', 'shortcut'])
|
|
115
|
+
|
|
116
|
+
return (
|
|
117
|
+
<button
|
|
118
|
+
type="button"
|
|
119
|
+
data-slot="top-bar-search"
|
|
120
|
+
class={cn(
|
|
121
|
+
'text-muted-foreground flex h-control-md w-full items-center gap-2 rounded-md border border-input px-3 text-sm',
|
|
122
|
+
'transition-colors ease-out outline-none',
|
|
123
|
+
'hover:bg-surface-hover hover:text-foreground',
|
|
124
|
+
'focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-primary-subtle',
|
|
125
|
+
'window-no-drag',
|
|
126
|
+
local.class
|
|
127
|
+
)}
|
|
128
|
+
{...rest}
|
|
129
|
+
>
|
|
130
|
+
<span class="truncate">{local.placeholder ?? 'Search'}</span>
|
|
131
|
+
<Show when={local.shortcut}>
|
|
132
|
+
<kbd class="bg-muted ms-auto hidden h-5 shrink-0 items-center rounded-sm border border-border px-1.5 font-mono text-2xs sm:flex">
|
|
133
|
+
{local.shortcut}
|
|
134
|
+
</kbd>
|
|
135
|
+
</Show>
|
|
136
|
+
</button>
|
|
137
|
+
)
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* A labelled top-bar control — the readouts KiroCrew puts in the trailing
|
|
142
|
+
* group. Container queries on the group decide which of these survive a narrow
|
|
143
|
+
* window; a caller marks the cheap-to-drop ones and the group handles the rest.
|
|
144
|
+
*/
|
|
145
|
+
export function TopBarPill(props: ComponentProps<'button'> & { label: string }) {
|
|
146
|
+
const [local, rest] = splitProps(props, ['class', 'label', 'children'])
|
|
147
|
+
|
|
148
|
+
return (
|
|
149
|
+
<button
|
|
150
|
+
type="button"
|
|
151
|
+
data-slot="top-bar-pill"
|
|
152
|
+
class={cn(
|
|
153
|
+
'text-muted-foreground inline-flex h-control-sm shrink-0 items-center gap-1.5 rounded-md border border-border px-2.5 text-xs font-medium',
|
|
154
|
+
'transition-colors ease-out outline-none',
|
|
155
|
+
'hover:border-input hover:text-foreground',
|
|
156
|
+
'focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-primary-subtle',
|
|
157
|
+
'window-no-drag [&_svg]:size-3.5 [&_svg]:shrink-0',
|
|
158
|
+
local.class
|
|
159
|
+
)}
|
|
160
|
+
{...rest}
|
|
161
|
+
>
|
|
162
|
+
{local.children}
|
|
163
|
+
<span>{local.label}</span>
|
|
164
|
+
</button>
|
|
165
|
+
)
|
|
166
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ComponentProps, JSX } from 'solid-js'
|
|
2
|
+
import { Presence as MotionPresence } from 'solid-motionone'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Presence.
|
|
6
|
+
*
|
|
7
|
+
* Enter and exit animation with a guarantee the CSS approach cannot make: an exit
|
|
8
|
+
* that is **interrupted** — a menu reopened while it is still closing — returns the
|
|
9
|
+
* element to its shown state instead of finishing the close and then reopening,
|
|
10
|
+
* which is what a class-based `animate-out` does and what makes a fast user's
|
|
11
|
+
* interactions feel like the interface is lagging behind them.
|
|
12
|
+
*
|
|
13
|
+
* The design system uses CSS transitions for state changes (a hover, a press) and
|
|
14
|
+
* this for mounting and unmounting, which is the split that keeps the common case
|
|
15
|
+
* free of a runtime while making the rare case correct.
|
|
16
|
+
*
|
|
17
|
+
* <Show when={open()}>
|
|
18
|
+
* <Presence initial={{ opacity: 0, scale: 0.96 }} exit={{ opacity: 0, scale: 0.96 }}>
|
|
19
|
+
* <div>…</div>
|
|
20
|
+
* </Presence>
|
|
21
|
+
* </Show>
|
|
22
|
+
*
|
|
23
|
+
* `Presence` keeps the child mounted until its exit finishes, so the `<Show>` above
|
|
24
|
+
* can stay the only condition in the tree.
|
|
25
|
+
*/
|
|
26
|
+
export type PresenceProps = ComponentProps<typeof MotionPresence> & {
|
|
27
|
+
children?: JSX.Element
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function Presence(props: PresenceProps) {
|
|
31
|
+
return <MotionPresence {...props} />
|
|
32
|
+
}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import type { ComponentProps } from 'solid-js'
|
|
2
|
+
import { For, Show, splitProps } from 'solid-js'
|
|
3
|
+
import { accentPresets, fontOptions } from '#lib/tokens'
|
|
4
|
+
import { themesForAppearance } from '#lib/themes'
|
|
5
|
+
import { cn } from '#lib/utils'
|
|
6
|
+
import { Button } from '../ui/button/button'
|
|
7
|
+
import { RadioGroup, RadioGroupItem } from '../ui/radio-group/radio-group'
|
|
8
|
+
import { ThemePicker } from './theme-picker'
|
|
9
|
+
import { useTheme } from './theme-provider'
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* AppearancePanel.
|
|
13
|
+
*
|
|
14
|
+
* The appearance page, as a component rather than as a screen each application
|
|
15
|
+
* draws for itself. Two applications that both let a user choose a theme should
|
|
16
|
+
* offer the *same* choices in the *same* arrangement — otherwise "Adea" and
|
|
17
|
+
* "Cortana" are two products that happen to share a component library, which is
|
|
18
|
+
* the opposite of what this system is for.
|
|
19
|
+
*
|
|
20
|
+
* Four axes, in the order a user thinks about them:
|
|
21
|
+
*
|
|
22
|
+
* 1. **Appearance** — light, dark, or follow the system.
|
|
23
|
+
* 2. **Themes** — one for each appearance. Both are shown at once, because the
|
|
24
|
+
* choice is per-appearance and hiding the other half makes it feel like one
|
|
25
|
+
* setting that keeps changing.
|
|
26
|
+
* 3. **Accent** — adea's presets, layered on whichever theme is active.
|
|
27
|
+
* 4. **Font** — the interface face.
|
|
28
|
+
*
|
|
29
|
+
* The panel reads and writes the provider's preference and keeps no state of its
|
|
30
|
+
* own, so it cannot disagree with what is applied.
|
|
31
|
+
*/
|
|
32
|
+
export type AppearancePanelProps = ComponentProps<'div'>
|
|
33
|
+
|
|
34
|
+
const LIGHT_THEMES = themesForAppearance('light')
|
|
35
|
+
const DARK_THEMES = themesForAppearance('dark')
|
|
36
|
+
|
|
37
|
+
export function AppearancePanel(props: AppearancePanelProps) {
|
|
38
|
+
const [local, rest] = splitProps(props, ['class'])
|
|
39
|
+
const { selection, setSelection, resolvedAppearance } = useTheme()
|
|
40
|
+
|
|
41
|
+
return (
|
|
42
|
+
<div data-slot="appearance-panel" class={cn('flex flex-col gap-8', local.class)} {...rest}>
|
|
43
|
+
{/* --- 1. Appearance ------------------------------------------------- */}
|
|
44
|
+
<section class="flex flex-col gap-3">
|
|
45
|
+
<header class="flex flex-col gap-0.5">
|
|
46
|
+
<h2 class="text-base font-semibold tracking-tight">Appearance</h2>
|
|
47
|
+
<p class="max-w-prose text-sm text-muted-foreground">
|
|
48
|
+
Follow the system, or pin one. The theme below is chosen per appearance, so switching at
|
|
49
|
+
sunset does not make you choose again.
|
|
50
|
+
</p>
|
|
51
|
+
</header>
|
|
52
|
+
<RadioGroup
|
|
53
|
+
value={selection().appearance}
|
|
54
|
+
onChange={(value) => setSelection({ appearance: value as 'light' | 'dark' | 'system' })}
|
|
55
|
+
aria-label="Appearance"
|
|
56
|
+
>
|
|
57
|
+
<RadioGroupItem value="light" label="Light" description="Always the light theme." />
|
|
58
|
+
<RadioGroupItem value="dark" label="Dark" description="Always the dark theme." />
|
|
59
|
+
<RadioGroupItem
|
|
60
|
+
value="system"
|
|
61
|
+
label="Match the system"
|
|
62
|
+
description={`Currently resolving to ${resolvedAppearance()}.`}
|
|
63
|
+
/>
|
|
64
|
+
</RadioGroup>
|
|
65
|
+
</section>
|
|
66
|
+
|
|
67
|
+
{/* --- 2. Themes ------------------------------------------------------ */}
|
|
68
|
+
<Show when={resolvedAppearance() === 'light'}>
|
|
69
|
+
<ThemeSection
|
|
70
|
+
title="Light theme"
|
|
71
|
+
description="Shown when the appearance resolves to light."
|
|
72
|
+
themes={LIGHT_THEMES}
|
|
73
|
+
selectedId={selection().lightThemeId}
|
|
74
|
+
onThemeSelect={(theme) => setSelection({ lightThemeId: theme.id })}
|
|
75
|
+
/>
|
|
76
|
+
</Show>
|
|
77
|
+
<Show when={resolvedAppearance() === 'dark'}>
|
|
78
|
+
<ThemeSection
|
|
79
|
+
title="Dark theme"
|
|
80
|
+
description="Shown when the appearance resolves to dark."
|
|
81
|
+
themes={DARK_THEMES}
|
|
82
|
+
selectedId={selection().darkThemeId}
|
|
83
|
+
onThemeSelect={(theme) => setSelection({ darkThemeId: theme.id })}
|
|
84
|
+
/>
|
|
85
|
+
</Show>
|
|
86
|
+
|
|
87
|
+
{/* --- 3. Accent ------------------------------------------------------ */}
|
|
88
|
+
<section class="flex flex-col gap-3">
|
|
89
|
+
<header class="flex flex-col gap-0.5">
|
|
90
|
+
<h2 class="text-base font-semibold tracking-tight">Accent</h2>
|
|
91
|
+
<p class="max-w-prose text-sm text-muted-foreground">
|
|
92
|
+
Colours the interactive roles — the primary button, the focus ring, a selected row — on
|
|
93
|
+
top of the theme above. Every preset is measured against the surface it lands on, so
|
|
94
|
+
none of them can make a label unreadable.
|
|
95
|
+
</p>
|
|
96
|
+
</header>
|
|
97
|
+
<div role="radiogroup" aria-label="Accent" class="flex flex-wrap gap-2">
|
|
98
|
+
<For each={accentPresets}>
|
|
99
|
+
{(preset) => (
|
|
100
|
+
<Button
|
|
101
|
+
as="button"
|
|
102
|
+
type="button"
|
|
103
|
+
variant="outline"
|
|
104
|
+
size="sm"
|
|
105
|
+
role="radio"
|
|
106
|
+
aria-checked={selection().accent === preset.id}
|
|
107
|
+
aria-label={preset.label}
|
|
108
|
+
class={cn({
|
|
109
|
+
'border-ring ring-3 ring-primary-subtle': selection().accent === preset.id,
|
|
110
|
+
})}
|
|
111
|
+
onClick={() => setSelection({ accent: preset.id })}
|
|
112
|
+
>
|
|
113
|
+
<span
|
|
114
|
+
aria-hidden="true"
|
|
115
|
+
class="size-3 rounded-full border border-border"
|
|
116
|
+
style={{
|
|
117
|
+
'background-color':
|
|
118
|
+
preset.id === 'theme'
|
|
119
|
+
? 'var(--primary)'
|
|
120
|
+
: `var(--accent-${preset.id}, ${preset.dark})`,
|
|
121
|
+
}}
|
|
122
|
+
/>
|
|
123
|
+
{preset.label}
|
|
124
|
+
</Button>
|
|
125
|
+
)}
|
|
126
|
+
</For>
|
|
127
|
+
</div>
|
|
128
|
+
</section>
|
|
129
|
+
|
|
130
|
+
{/* --- 4. Font -------------------------------------------------------- */}
|
|
131
|
+
<section class="flex flex-col gap-3">
|
|
132
|
+
<header class="flex flex-col gap-0.5">
|
|
133
|
+
<h2 class="text-base font-semibold tracking-tight">Typeface</h2>
|
|
134
|
+
<p class="max-w-prose text-sm text-muted-foreground">
|
|
135
|
+
The interface face. Every option is self-hosted, so nothing is fetched at runtime and
|
|
136
|
+
the choice survives going offline.
|
|
137
|
+
</p>
|
|
138
|
+
</header>
|
|
139
|
+
<RadioGroup
|
|
140
|
+
value={selection().font}
|
|
141
|
+
onChange={(value) => setSelection({ font: value as string })}
|
|
142
|
+
aria-label="Typeface"
|
|
143
|
+
>
|
|
144
|
+
<For each={fontOptions}>
|
|
145
|
+
{(option) => (
|
|
146
|
+
<RadioGroupItem
|
|
147
|
+
value={option.id}
|
|
148
|
+
label={option.label}
|
|
149
|
+
description={option.description}
|
|
150
|
+
/>
|
|
151
|
+
)}
|
|
152
|
+
</For>
|
|
153
|
+
</RadioGroup>
|
|
154
|
+
</section>
|
|
155
|
+
</div>
|
|
156
|
+
)
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
function ThemeSection(props: {
|
|
160
|
+
title: string
|
|
161
|
+
description: string
|
|
162
|
+
themes: ReturnType<typeof themesForAppearance>
|
|
163
|
+
selectedId: string
|
|
164
|
+
onThemeSelect: (theme: ReturnType<typeof themesForAppearance>[number]) => void
|
|
165
|
+
}) {
|
|
166
|
+
return (
|
|
167
|
+
<section class="flex flex-col gap-3">
|
|
168
|
+
<header class="flex flex-col gap-0.5">
|
|
169
|
+
<h2 class="text-base font-semibold tracking-tight">{props.title}</h2>
|
|
170
|
+
<p class="max-w-prose text-sm text-muted-foreground">{props.description}</p>
|
|
171
|
+
</header>
|
|
172
|
+
<ThemePicker
|
|
173
|
+
themes={props.themes}
|
|
174
|
+
selectedId={props.selectedId}
|
|
175
|
+
onThemeSelect={props.onThemeSelect}
|
|
176
|
+
/>
|
|
177
|
+
</section>
|
|
178
|
+
)
|
|
179
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export { AppearancePanel, type AppearancePanelProps } from './appearance-panel'
|
|
2
|
+
export {
|
|
3
|
+
ThemePicker,
|
|
4
|
+
ThemePreview,
|
|
5
|
+
ThemeSwatch,
|
|
6
|
+
type ThemePickerProps,
|
|
7
|
+
type ThemePreviewProps,
|
|
8
|
+
type ThemeSwatchProps,
|
|
9
|
+
} from './theme-picker'
|
|
10
|
+
export {
|
|
11
|
+
ThemeProvider,
|
|
12
|
+
defaultThemeSelection,
|
|
13
|
+
inlineScriptLiteral,
|
|
14
|
+
resolvedDensity,
|
|
15
|
+
themeScript,
|
|
16
|
+
useTheme,
|
|
17
|
+
type ThemeContextValue,
|
|
18
|
+
type ThemeDensity,
|
|
19
|
+
type ThemeProviderProps,
|
|
20
|
+
type ThemeSelection,
|
|
21
|
+
} from './theme-provider'
|
|
22
|
+
export { ThemeToggle, type ThemeToggleProps } from './theme-toggle'
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import type { ComponentProps } from 'solid-js'
|
|
2
|
+
import { For, Show, splitProps } from 'solid-js'
|
|
3
|
+
import { cn } from '#lib/utils'
|
|
4
|
+
import type { ThemeVariant } from '#lib/themes'
|
|
5
|
+
import { Button } from '../ui/button/button'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* ThemeSwatch.
|
|
9
|
+
*
|
|
10
|
+
* The colours of a theme, as a small readable strip: the canvas, a card, the
|
|
11
|
+
* primary, an accent and the destructive fill. Enough to tell two dark themes
|
|
12
|
+
* apart at a glance and to recognise the one you want without applying it.
|
|
13
|
+
*
|
|
14
|
+
* A swatch is **read from the variant object**, not from a stylesheet, so a picker
|
|
15
|
+
* can show a theme that is not currently applied — which is the whole point of a
|
|
16
|
+
* picker. That is also why the catalogue is data rather than CSS.
|
|
17
|
+
*/
|
|
18
|
+
export type ThemeSwatchProps = ComponentProps<'span'> & {
|
|
19
|
+
theme: ThemeVariant
|
|
20
|
+
/** Draw the swatch at the given size. */
|
|
21
|
+
size?: 'sm' | 'md' | 'lg'
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const swatchSizes = {
|
|
25
|
+
sm: 'h-4 w-4',
|
|
26
|
+
md: 'h-6 w-6',
|
|
27
|
+
lg: 'h-8 w-8',
|
|
28
|
+
} as const
|
|
29
|
+
|
|
30
|
+
export function ThemeSwatch(props: ThemeSwatchProps) {
|
|
31
|
+
const [local, rest] = splitProps(props, ['class', 'theme', 'size'])
|
|
32
|
+
const colors = () => local.theme.colors
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
<span
|
|
36
|
+
data-slot="theme-swatch"
|
|
37
|
+
aria-hidden="true"
|
|
38
|
+
class={cn(
|
|
39
|
+
'border-border inline-flex shrink-0 overflow-hidden rounded-md border',
|
|
40
|
+
local.class
|
|
41
|
+
)}
|
|
42
|
+
{...rest}
|
|
43
|
+
>
|
|
44
|
+
<For
|
|
45
|
+
each={[
|
|
46
|
+
colors().background,
|
|
47
|
+
colors().card,
|
|
48
|
+
colors().primary,
|
|
49
|
+
colors().accent,
|
|
50
|
+
colors().destructive,
|
|
51
|
+
]}
|
|
52
|
+
>
|
|
53
|
+
{(color) => (
|
|
54
|
+
<span
|
|
55
|
+
class={cn('block', swatchSizes[local.size ?? 'md'])}
|
|
56
|
+
style={{ 'background-color': color }}
|
|
57
|
+
/>
|
|
58
|
+
)}
|
|
59
|
+
</For>
|
|
60
|
+
</span>
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* ThemePreview.
|
|
66
|
+
*
|
|
67
|
+
* A miniature of the interface, painted in a theme's own colours: a rail, a panel,
|
|
68
|
+
* a heading, body text, a primary button and a destructive one.
|
|
69
|
+
*
|
|
70
|
+
* The point is that a colour strip cannot answer the question a user actually has —
|
|
71
|
+
* "would I want to look at this all day?" — and a real preview can. It is drawn
|
|
72
|
+
* with inline colours from the variant rather than by applying the theme, so a list
|
|
73
|
+
* of twenty previews costs one object read each instead of twenty theme swaps.
|
|
74
|
+
*/
|
|
75
|
+
export type ThemePreviewProps = ComponentProps<'div'> & {
|
|
76
|
+
theme: ThemeVariant
|
|
77
|
+
/** Highlight the preview as the current selection. */
|
|
78
|
+
selected?: boolean
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export function ThemePreview(props: ThemePreviewProps) {
|
|
82
|
+
const [local, rest] = splitProps(props, ['class', 'theme', 'selected'])
|
|
83
|
+
const c = () => local.theme.colors
|
|
84
|
+
|
|
85
|
+
return (
|
|
86
|
+
<div
|
|
87
|
+
data-slot="theme-preview"
|
|
88
|
+
class={cn(
|
|
89
|
+
'w-44 overflow-hidden rounded-lg border shadow-xs',
|
|
90
|
+
local.selected ? 'border-primary ring-3 ring-primary-subtle' : 'border-border',
|
|
91
|
+
local.class
|
|
92
|
+
)}
|
|
93
|
+
style={{ 'background-color': c().background }}
|
|
94
|
+
{...rest}
|
|
95
|
+
>
|
|
96
|
+
<div class="flex h-24">
|
|
97
|
+
{/* A rail and a panel: the two surfaces a user spends the day looking at. */}
|
|
98
|
+
<div
|
|
99
|
+
class="theme-preview-edge flex w-6 flex-col items-center gap-1.5 border-e py-2"
|
|
100
|
+
style={{ 'background-color': c().sidebar, '--preview-edge': c().sidebarBorder }}
|
|
101
|
+
>
|
|
102
|
+
<span class="size-2.5 rounded-sm" style={{ 'background-color': c().primary }} />
|
|
103
|
+
<span class="size-2.5 rounded-sm" style={{ 'background-color': c().sidebarAccent }} />
|
|
104
|
+
<span class="size-2.5 rounded-sm" style={{ 'background-color': c().sidebarAccent }} />
|
|
105
|
+
</div>
|
|
106
|
+
<div class="flex flex-1 flex-col gap-1.5 p-2">
|
|
107
|
+
<div class="h-1.5 w-14 rounded-full" style={{ 'background-color': c().foreground }} />
|
|
108
|
+
<div class="h-1 w-20 rounded-full" style={{ 'background-color': c().mutedForeground }} />
|
|
109
|
+
<div class="h-1 w-16 rounded-full" style={{ 'background-color': c().mutedForeground }} />
|
|
110
|
+
<div class="mt-auto flex items-center gap-1">
|
|
111
|
+
<span class="h-3 w-9 rounded-sm" style={{ 'background-color': c().primary }} />
|
|
112
|
+
<span class="h-3 w-6 rounded-sm" style={{ 'background-color': c().destructive }} />
|
|
113
|
+
<span class="h-3 w-6 rounded-sm" style={{ 'background-color': c().secondary }} />
|
|
114
|
+
</div>
|
|
115
|
+
</div>
|
|
116
|
+
</div>
|
|
117
|
+
</div>
|
|
118
|
+
)
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* ThemePicker.
|
|
123
|
+
*
|
|
124
|
+
* The catalogue as a selectable grid. One appearance at a time — a light picker
|
|
125
|
+
* lists light themes and a dark picker lists dark ones — because choosing a dark
|
|
126
|
+
* theme while looking at a light interface is a choice nobody can evaluate.
|
|
127
|
+
*
|
|
128
|
+
* `onSelect` rather than an internal signal: the selection belongs to the
|
|
129
|
+
* preference the provider owns, and a picker that kept its own copy could disagree
|
|
130
|
+
* with what is applied.
|
|
131
|
+
*/
|
|
132
|
+
export type ThemePickerProps = ComponentProps<'div'> & {
|
|
133
|
+
themes: readonly ThemeVariant[]
|
|
134
|
+
selectedId: string
|
|
135
|
+
onThemeSelect: (theme: ThemeVariant) => void
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export function ThemePicker(props: ThemePickerProps) {
|
|
139
|
+
const [local, rest] = splitProps(props, ['class', 'themes', 'selectedId', 'onThemeSelect'])
|
|
140
|
+
|
|
141
|
+
return (
|
|
142
|
+
<div
|
|
143
|
+
data-slot="theme-picker"
|
|
144
|
+
role="radiogroup"
|
|
145
|
+
aria-label="Theme"
|
|
146
|
+
class={cn('flex flex-wrap gap-3', local.class)}
|
|
147
|
+
{...rest}
|
|
148
|
+
>
|
|
149
|
+
<For each={local.themes}>
|
|
150
|
+
{(theme) => (
|
|
151
|
+
<Button
|
|
152
|
+
as="button"
|
|
153
|
+
type="button"
|
|
154
|
+
variant="ghost"
|
|
155
|
+
size="sm"
|
|
156
|
+
role="radio"
|
|
157
|
+
aria-checked={local.selectedId === theme.id}
|
|
158
|
+
aria-label={`${theme.familyLabel} ${theme.label}`}
|
|
159
|
+
class="h-auto flex-col gap-1.5 p-0 hover:bg-transparent"
|
|
160
|
+
onClick={() => local.onThemeSelect(theme)}
|
|
161
|
+
>
|
|
162
|
+
<ThemePreview theme={theme} selected={local.selectedId === theme.id} />
|
|
163
|
+
<span class="flex flex-col items-center">
|
|
164
|
+
<span class="text-xs font-medium">{theme.label}</span>
|
|
165
|
+
<Show when={theme.family !== 'adea'}>
|
|
166
|
+
<span class="text-muted-foreground text-2xs">{theme.familyLabel}</span>
|
|
167
|
+
</Show>
|
|
168
|
+
</span>
|
|
169
|
+
</Button>
|
|
170
|
+
)}
|
|
171
|
+
</For>
|
|
172
|
+
</div>
|
|
173
|
+
)
|
|
174
|
+
}
|