@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,387 @@
|
|
|
1
|
+
import { CheckCheck, MessageSquareReply, Pencil, RotateCcw, Trash2 } from 'lucide-solid'
|
|
2
|
+
import type { ComponentProps, JSX } from 'solid-js'
|
|
3
|
+
import { For, Show, splitProps } from 'solid-js'
|
|
4
|
+
import { cn } from '#lib/utils'
|
|
5
|
+
import { Button } from '../ui/button/button'
|
|
6
|
+
import { CodeBlock, InlineCode } from '../ui/code-block'
|
|
7
|
+
import { ConversationAvatar, type ConversationAvatarKind } from './conversation-avatar'
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* MessageRow.
|
|
11
|
+
*
|
|
12
|
+
* One turn in a transcript: a speaker, a bubble, and the actions that apply to it.
|
|
13
|
+
*
|
|
14
|
+
* ## What it does not know
|
|
15
|
+
*
|
|
16
|
+
* It takes no domain types. A caller supplies the speaker's name, the timestamp, and
|
|
17
|
+
* the body as children; attachments, a linked task and the action row are slots. That
|
|
18
|
+
* is deliberate and it is the difference between a component a second application can
|
|
19
|
+
* use and one that only fits the application it was written in — the first version of
|
|
20
|
+
* this row was written against adea's message model and could not have been used by
|
|
21
|
+
* cortana at all.
|
|
22
|
+
*
|
|
23
|
+
* ## The two things it does know
|
|
24
|
+
*
|
|
25
|
+
* **The speaker's own messages mirror.** A user's turn puts the avatar on the trailing
|
|
26
|
+
* edge and the bubble on the leading one, so a transcript can be read as a
|
|
27
|
+
* conversation rather than as a log. `senderKind` decides that, and it is the only
|
|
28
|
+
* place the layout branches.
|
|
29
|
+
*
|
|
30
|
+
* **`content-visibility: auto`.** A transcript is the one list in an application that
|
|
31
|
+
* can hold thousands of rows, and this lets the engine skip layout and paint for the
|
|
32
|
+
* ones off screen. `contain-intrinsic-size` is what keeps the scrollbar honest while
|
|
33
|
+
* it does — without it the scroll height collapses as rows are skipped and the
|
|
34
|
+
* thumb jumps. Both are load-bearing rather than an optimisation to add later.
|
|
35
|
+
*/
|
|
36
|
+
export type MessageRowProps = Omit<ComponentProps<'article'>, 'onSelect'> & {
|
|
37
|
+
/** Who spoke. Decides the mirroring and the avatar's tone. */
|
|
38
|
+
senderKind: ConversationAvatarKind
|
|
39
|
+
/** The speaker's name, announced with the message rather than drawn. */
|
|
40
|
+
senderName: string
|
|
41
|
+
/** An ISO timestamp, rendered by the caller's own formatter. */
|
|
42
|
+
time?: string
|
|
43
|
+
/** The machine-readable time, for `<time datetime>`. */
|
|
44
|
+
dateTime?: string
|
|
45
|
+
/** Set when the message has been edited after sending. */
|
|
46
|
+
edited?: boolean
|
|
47
|
+
/** Set while the message is in flight. */
|
|
48
|
+
pending?: boolean
|
|
49
|
+
/**
|
|
50
|
+
* Set while tokens are still arriving. Shows a caret after the body and drops
|
|
51
|
+
* the delivered tick; distinct from `pending`, which is the *sending* state of
|
|
52
|
+
* a message the user wrote. A turn can be neither, either, or (briefly) both.
|
|
53
|
+
*/
|
|
54
|
+
streaming?: boolean
|
|
55
|
+
/** Set when the message has been deleted, which replaces the body. */
|
|
56
|
+
deleted?: boolean
|
|
57
|
+
/** Draw attention to this row, e.g. after arriving from a search result. */
|
|
58
|
+
highlighted?: boolean
|
|
59
|
+
/** The caller's own avatar content. Falls back to a glyph for the kind. */
|
|
60
|
+
avatar?: JSX.Element
|
|
61
|
+
/** Attachments, rendered under the body. */
|
|
62
|
+
attachments?: JSX.Element
|
|
63
|
+
/** A linked entity — a task, an artifact, a session — rendered under the body. */
|
|
64
|
+
link?: JSX.Element
|
|
65
|
+
/** Extra rows in the action strip, before the built-in ones. */
|
|
66
|
+
actions?: JSX.Element
|
|
67
|
+
/** Show the reply affordance. Omit it to hide the action. */
|
|
68
|
+
onOpenThread?: () => void
|
|
69
|
+
/** Fires on hover and focus of the reply affordance, for prefetching. */
|
|
70
|
+
onThreadIntent?: () => void
|
|
71
|
+
onEdit?: () => void
|
|
72
|
+
onDelete?: () => void
|
|
73
|
+
onRetry?: () => void
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export function MessageRow(props: MessageRowProps) {
|
|
77
|
+
const [local, rest] = splitProps(props, [
|
|
78
|
+
'class',
|
|
79
|
+
'senderKind',
|
|
80
|
+
'senderName',
|
|
81
|
+
'time',
|
|
82
|
+
'dateTime',
|
|
83
|
+
'edited',
|
|
84
|
+
'pending',
|
|
85
|
+
'streaming',
|
|
86
|
+
'deleted',
|
|
87
|
+
'highlighted',
|
|
88
|
+
'avatar',
|
|
89
|
+
'attachments',
|
|
90
|
+
'link',
|
|
91
|
+
'actions',
|
|
92
|
+
'onOpenThread',
|
|
93
|
+
'onThreadIntent',
|
|
94
|
+
'onEdit',
|
|
95
|
+
'onDelete',
|
|
96
|
+
'onRetry',
|
|
97
|
+
'children',
|
|
98
|
+
])
|
|
99
|
+
|
|
100
|
+
const mirrored = () => local.senderKind === 'user'
|
|
101
|
+
|
|
102
|
+
return (
|
|
103
|
+
<article
|
|
104
|
+
data-slot="message-row"
|
|
105
|
+
data-message-kind={local.senderKind}
|
|
106
|
+
aria-busy={local.pending || undefined}
|
|
107
|
+
tabindex={local.highlighted ? -1 : undefined}
|
|
108
|
+
class={cn(
|
|
109
|
+
'group/message grid max-w-3xl gap-2.5 px-1 py-1.5',
|
|
110
|
+
/* The row is skipped by the engine while off screen; the intrinsic size keeps
|
|
111
|
+
the scroll height stable while that happens. */
|
|
112
|
+
'[content-visibility:auto] [contain-intrinsic-size:auto_7rem]',
|
|
113
|
+
mirrored() ? 'grid-cols-[minmax(0,1fr)_2rem]' : 'grid-cols-[1.9rem_minmax(0,1fr)]',
|
|
114
|
+
'transition-colors ease-out hover:bg-muted/45',
|
|
115
|
+
local.highlighted && 'bg-primary-subtle shadow-[inset_3px_0_var(--primary)]',
|
|
116
|
+
local.class
|
|
117
|
+
)}
|
|
118
|
+
{...rest}
|
|
119
|
+
>
|
|
120
|
+
<span data-slot="message-avatar" class={cn('mt-0.5', mirrored() ? 'order-2' : 'order-1')}>
|
|
121
|
+
<ConversationAvatar kind={local.senderKind} size={mirrored() ? 'lg' : 'md'}>
|
|
122
|
+
{local.avatar}
|
|
123
|
+
</ConversationAvatar>
|
|
124
|
+
</span>
|
|
125
|
+
|
|
126
|
+
<div
|
|
127
|
+
data-slot="message-content"
|
|
128
|
+
class={cn('flex min-w-0 flex-col gap-1', mirrored() ? 'order-1' : 'order-2')}
|
|
129
|
+
>
|
|
130
|
+
<div
|
|
131
|
+
data-slot="message-bubble"
|
|
132
|
+
class={cn(
|
|
133
|
+
'relative w-fit min-w-16 max-w-[min(100%,38rem)] rounded-lg border border-border px-3.5 pt-2.5 pb-2',
|
|
134
|
+
'bg-card text-card-foreground',
|
|
135
|
+
/* The tail: a squared corner on the side the speaker sits, which is what
|
|
136
|
+
makes a bubble read as belonging to one voice. */
|
|
137
|
+
mirrored() ? 'rounded-ee-sm ms-auto' : 'rounded-es-sm'
|
|
138
|
+
)}
|
|
139
|
+
>
|
|
140
|
+
{/* The name is announced with the message rather than drawn: a transcript
|
|
141
|
+
that repeats every speaker's name in every bubble is one nobody reads. */}
|
|
142
|
+
<span class="visually-hidden">{local.senderName}</span>
|
|
143
|
+
|
|
144
|
+
<div data-slot="message-body" class="text-sm">
|
|
145
|
+
<Show
|
|
146
|
+
when={!local.deleted}
|
|
147
|
+
fallback={<p class="text-muted-foreground italic">Message deleted</p>}
|
|
148
|
+
>
|
|
149
|
+
{local.children}
|
|
150
|
+
</Show>
|
|
151
|
+
</div>
|
|
152
|
+
|
|
153
|
+
<Show when={local.attachments}>
|
|
154
|
+
<div class="mt-2 flex flex-wrap gap-2">{local.attachments}</div>
|
|
155
|
+
</Show>
|
|
156
|
+
|
|
157
|
+
<Show when={local.link}>
|
|
158
|
+
<div class="mt-2">{local.link}</div>
|
|
159
|
+
</Show>
|
|
160
|
+
|
|
161
|
+
<div
|
|
162
|
+
data-slot="message-meta"
|
|
163
|
+
class="mt-1 flex items-center gap-2 text-2xs text-muted-foreground"
|
|
164
|
+
>
|
|
165
|
+
<Show when={local.time}>
|
|
166
|
+
<time datetime={local.dateTime}>{local.time}</time>
|
|
167
|
+
</Show>
|
|
168
|
+
<Show when={local.edited}>
|
|
169
|
+
<span>edited</span>
|
|
170
|
+
</Show>
|
|
171
|
+
<Show when={local.pending}>
|
|
172
|
+
<span role="status">sending…</span>
|
|
173
|
+
</Show>
|
|
174
|
+
<Show when={local.streaming}>
|
|
175
|
+
<span role="status">responding…</span>
|
|
176
|
+
</Show>
|
|
177
|
+
<Show when={mirrored() && !local.pending && !local.streaming && !local.deleted}>
|
|
178
|
+
{/*
|
|
179
|
+
`role="img"` because a bare span cannot carry `aria-label` — axe's
|
|
180
|
+
`aria-prohibited-attr`. The glyph is the whole message, so the role
|
|
181
|
+
is also the accurate one: this element *is* an image whose meaning
|
|
182
|
+
is its label.
|
|
183
|
+
*/}
|
|
184
|
+
<span role="img" aria-label="Delivered" class="inline-flex">
|
|
185
|
+
<CheckCheck aria-hidden="true" class="size-3" />
|
|
186
|
+
</span>
|
|
187
|
+
</Show>
|
|
188
|
+
</div>
|
|
189
|
+
</div>
|
|
190
|
+
|
|
191
|
+
{/* The action strip is hidden until the row is hovered or focused, so a
|
|
192
|
+
transcript is not a wall of buttons — but it stays in the accessibility
|
|
193
|
+
tree and the tab order, because a control that only exists under the
|
|
194
|
+
pointer cannot be reached by keyboard. */}
|
|
195
|
+
<footer
|
|
196
|
+
data-slot="message-actions"
|
|
197
|
+
class={cn(
|
|
198
|
+
'flex items-center gap-1 opacity-0 transition-opacity ease-out group-hover/message:opacity-100 group-focus-within/message:opacity-100',
|
|
199
|
+
mirrored() && 'justify-end'
|
|
200
|
+
)}
|
|
201
|
+
>
|
|
202
|
+
<Show when={local.actions}>{local.actions}</Show>
|
|
203
|
+
<Show when={local.onOpenThread && !local.deleted}>
|
|
204
|
+
<Button
|
|
205
|
+
variant="ghost"
|
|
206
|
+
size="2xs"
|
|
207
|
+
class="gap-1.5 text-muted-foreground"
|
|
208
|
+
onClick={() => local.onOpenThread?.()}
|
|
209
|
+
onPointerEnter={() => local.onThreadIntent?.()}
|
|
210
|
+
onFocus={() => local.onThreadIntent?.()}
|
|
211
|
+
>
|
|
212
|
+
<MessageSquareReply />
|
|
213
|
+
Thread
|
|
214
|
+
</Button>
|
|
215
|
+
</Show>
|
|
216
|
+
<Show when={local.onEdit && !local.deleted}>
|
|
217
|
+
<Button
|
|
218
|
+
variant="ghost"
|
|
219
|
+
size="2xs"
|
|
220
|
+
class="gap-1.5 text-muted-foreground"
|
|
221
|
+
onClick={() => local.onEdit?.()}
|
|
222
|
+
>
|
|
223
|
+
<Pencil />
|
|
224
|
+
Edit
|
|
225
|
+
</Button>
|
|
226
|
+
</Show>
|
|
227
|
+
<Show when={local.onDelete && !local.deleted}>
|
|
228
|
+
<Button
|
|
229
|
+
variant="ghost"
|
|
230
|
+
size="2xs"
|
|
231
|
+
class="gap-1.5 text-muted-foreground"
|
|
232
|
+
onClick={() => local.onDelete?.()}
|
|
233
|
+
>
|
|
234
|
+
<Trash2 />
|
|
235
|
+
Delete
|
|
236
|
+
</Button>
|
|
237
|
+
</Show>
|
|
238
|
+
<Show when={local.onRetry}>
|
|
239
|
+
<Button
|
|
240
|
+
variant="ghost"
|
|
241
|
+
size="2xs"
|
|
242
|
+
class="gap-1.5 text-muted-foreground"
|
|
243
|
+
onClick={() => local.onRetry?.()}
|
|
244
|
+
>
|
|
245
|
+
<RotateCcw />
|
|
246
|
+
Retry
|
|
247
|
+
</Button>
|
|
248
|
+
</Show>
|
|
249
|
+
</footer>
|
|
250
|
+
</div>
|
|
251
|
+
</article>
|
|
252
|
+
)
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* A run of messages from the same speaker.
|
|
257
|
+
*
|
|
258
|
+
* Consecutive turns from one voice are a *paragraph*, and a transcript that repeats
|
|
259
|
+
* the avatar and the name for each line reads as noise. The group draws the first
|
|
260
|
+
* row fully and the rest without their avatar.
|
|
261
|
+
*/
|
|
262
|
+
export function MessageGroup(props: ComponentProps<'div'>) {
|
|
263
|
+
const [local, rest] = splitProps(props, ['class', 'children'])
|
|
264
|
+
return (
|
|
265
|
+
<div data-slot="message-group" role="group" class={cn('flex flex-col', local.class)} {...rest}>
|
|
266
|
+
{local.children}
|
|
267
|
+
</div>
|
|
268
|
+
)
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/** A day divider, so a long transcript has somewhere to rest the eye. */
|
|
272
|
+
export function MessageDayDivider(props: ComponentProps<'div'> & { label: string }) {
|
|
273
|
+
const [local, rest] = splitProps(props, ['class', 'label'])
|
|
274
|
+
return (
|
|
275
|
+
<div
|
|
276
|
+
data-slot="message-day-divider"
|
|
277
|
+
role="separator"
|
|
278
|
+
class={cn('flex items-center gap-3 px-4 py-3', local.class)}
|
|
279
|
+
{...rest}
|
|
280
|
+
>
|
|
281
|
+
<span class="h-px flex-1 bg-border" />
|
|
282
|
+
<span class="text-2xs font-medium tracking-wide text-muted-foreground uppercase">
|
|
283
|
+
{local.label}
|
|
284
|
+
</span>
|
|
285
|
+
<span class="h-px flex-1 bg-border" />
|
|
286
|
+
</div>
|
|
287
|
+
)
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* Renders a body's code fences as blocks, which a plain `<p>` cannot.
|
|
292
|
+
*
|
|
293
|
+
* The fence grammar is the part worth owning: a fence opens with ``` and an
|
|
294
|
+
* optional language, and closes with ``` on its own. Everything outside a fence
|
|
295
|
+
* is prose, and inside it the language tag belongs to the block's header rather
|
|
296
|
+
* than to the code.
|
|
297
|
+
*
|
|
298
|
+
* Inline code — a single backtick pair inside a line — is rendered too, because
|
|
299
|
+
* the alternative is an identifier in the prose that is indistinguishable from a
|
|
300
|
+
* word. Only the *first* pair on a line is treated as code by the splitter here,
|
|
301
|
+
* which is the common case; a caller that needs full inline grammar should pass
|
|
302
|
+
* already-rendered children instead of `text`.
|
|
303
|
+
*/
|
|
304
|
+
export function MessageBody(
|
|
305
|
+
props: ComponentProps<'div'> & {
|
|
306
|
+
text: string
|
|
307
|
+
/** True while the turn is still streaming, so a partial fence renders as a block. */
|
|
308
|
+
streaming?: boolean
|
|
309
|
+
}
|
|
310
|
+
) {
|
|
311
|
+
const [local, rest] = splitProps(props, ['class', 'text', 'streaming'])
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* Split on fences, then on inline code. `filter(Boolean)` because a text that
|
|
315
|
+
* begins with a fence produces an empty leading segment.
|
|
316
|
+
*/
|
|
317
|
+
const segments = () =>
|
|
318
|
+
local.text
|
|
319
|
+
.split(/(```[\s\S]*?(?:```|$))/g)
|
|
320
|
+
.filter(Boolean)
|
|
321
|
+
.map((segment) => {
|
|
322
|
+
if (!segment.startsWith('```')) {
|
|
323
|
+
return { kind: 'prose' as const, value: segment }
|
|
324
|
+
}
|
|
325
|
+
const body = segment.replace(/^```/, '').replace(/```$/, '')
|
|
326
|
+
// The language is the first token on the opening line, and only when the
|
|
327
|
+
// fence actually carried one — a fence with a bare newline has none.
|
|
328
|
+
const newline = body.indexOf('\n')
|
|
329
|
+
const firstLine = newline === -1 ? '' : body.slice(0, newline)
|
|
330
|
+
const language = /^[\w+#.-]+$/.test(firstLine.trim()) ? firstLine.trim() : undefined
|
|
331
|
+
return {
|
|
332
|
+
kind: 'code' as const,
|
|
333
|
+
value: language ? body.slice(newline + 1) : body,
|
|
334
|
+
language,
|
|
335
|
+
}
|
|
336
|
+
})
|
|
337
|
+
|
|
338
|
+
const last = () => segments().at(-1)
|
|
339
|
+
|
|
340
|
+
return (
|
|
341
|
+
<div data-slot="message-body" class={cn('flex flex-col gap-2', local.class)} {...rest}>
|
|
342
|
+
<For each={segments()}>
|
|
343
|
+
{(segment) => (
|
|
344
|
+
<Show when={segment.kind === 'code'} fallback={<Prose text={segment.value} />}>
|
|
345
|
+
<CodeBlock
|
|
346
|
+
code={segment.value}
|
|
347
|
+
language={segment.kind === 'code' ? segment.language : undefined}
|
|
348
|
+
complete={!local.streaming}
|
|
349
|
+
/>
|
|
350
|
+
</Show>
|
|
351
|
+
)}
|
|
352
|
+
</For>
|
|
353
|
+
{/*
|
|
354
|
+
The caret trails the last segment, and only when that segment is prose: a
|
|
355
|
+
streaming code block already carries its own generating indicator, and two
|
|
356
|
+
of them on one turn read as two streams.
|
|
357
|
+
*/}
|
|
358
|
+
<Show when={local.streaming && last()?.kind === 'prose'}>
|
|
359
|
+
<span class="streaming-caret" aria-hidden="true" />
|
|
360
|
+
</Show>
|
|
361
|
+
</div>
|
|
362
|
+
)
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* A run of prose, with its inline code marked. The split is non-greedy and
|
|
367
|
+
* requires a non-empty span, so an unmatched backtick stays a backtick rather
|
|
368
|
+
* than swallowing the rest of the paragraph.
|
|
369
|
+
*/
|
|
370
|
+
function Prose(props: { text: string }) {
|
|
371
|
+
const parts = () => props.text.split(/(`[^`\n]+`)/g).filter(Boolean)
|
|
372
|
+
|
|
373
|
+
return (
|
|
374
|
+
<p class="whitespace-pre-wrap">
|
|
375
|
+
<For each={parts()}>
|
|
376
|
+
{(part) => (
|
|
377
|
+
<Show
|
|
378
|
+
when={part.startsWith('`') && part.endsWith('`') && part.length > 2}
|
|
379
|
+
fallback={part}
|
|
380
|
+
>
|
|
381
|
+
<InlineCode>{part.slice(1, -1)}</InlineCode>
|
|
382
|
+
</Show>
|
|
383
|
+
)}
|
|
384
|
+
</For>
|
|
385
|
+
</p>
|
|
386
|
+
)
|
|
387
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { X } from 'lucide-solid'
|
|
2
|
+
import type { ComponentProps, JSX } from 'solid-js'
|
|
3
|
+
import { Show, splitProps } from 'solid-js'
|
|
4
|
+
import { cn } from '#lib/utils'
|
|
5
|
+
import { Button } from '../ui/button/button'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* ThreadPanel.
|
|
9
|
+
*
|
|
10
|
+
* The replies to one message, shown beside the transcript rather than in it. Keeping
|
|
11
|
+
* a thread out of the main flow is what stops a busy side conversation from burying
|
|
12
|
+
* the conversation everyone is having.
|
|
13
|
+
*
|
|
14
|
+
* The root message is repeated at the top — with `pinned` — because a thread read out
|
|
15
|
+
* of context is a set of answers to a question the reader can no longer see.
|
|
16
|
+
*
|
|
17
|
+
* The panel is a `complementary` landmark with a label, so it is reachable by
|
|
18
|
+
* landmark navigation rather than by tabbing through the transcript to find it.
|
|
19
|
+
*/
|
|
20
|
+
export type ThreadPanelProps = ComponentProps<'aside'> & {
|
|
21
|
+
/** The thread's title, usually the root message's author. */
|
|
22
|
+
label: string
|
|
23
|
+
/** A count of replies, shown beside the label. */
|
|
24
|
+
count?: number
|
|
25
|
+
/** The root message, drawn above the replies. */
|
|
26
|
+
root?: JSX.Element
|
|
27
|
+
/** The composer for a reply. */
|
|
28
|
+
composer?: JSX.Element
|
|
29
|
+
onClose?: () => void
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function ThreadPanel(props: ThreadPanelProps) {
|
|
33
|
+
const [local, rest] = splitProps(props, [
|
|
34
|
+
'class',
|
|
35
|
+
'label',
|
|
36
|
+
'count',
|
|
37
|
+
'root',
|
|
38
|
+
'composer',
|
|
39
|
+
'onClose',
|
|
40
|
+
'children',
|
|
41
|
+
])
|
|
42
|
+
|
|
43
|
+
return (
|
|
44
|
+
<aside
|
|
45
|
+
data-slot="thread-panel"
|
|
46
|
+
aria-label={`Thread: ${local.label}`}
|
|
47
|
+
class={cn(
|
|
48
|
+
'bg-surface flex h-full w-96 shrink-0 flex-col border-s border-border',
|
|
49
|
+
local.class
|
|
50
|
+
)}
|
|
51
|
+
{...rest}
|
|
52
|
+
>
|
|
53
|
+
<header class="flex h-topbar shrink-0 items-center gap-2 border-b border-border px-3">
|
|
54
|
+
<div class="flex min-w-0 flex-col">
|
|
55
|
+
<span class="truncate text-sm font-semibold tracking-tight">Thread</span>
|
|
56
|
+
<Show when={local.count !== undefined}>
|
|
57
|
+
<span class="text-muted-foreground text-2xs">
|
|
58
|
+
{local.count} {local.count === 1 ? 'reply' : 'replies'}
|
|
59
|
+
</span>
|
|
60
|
+
</Show>
|
|
61
|
+
</div>
|
|
62
|
+
<Show when={local.onClose}>
|
|
63
|
+
<Button
|
|
64
|
+
variant="ghost"
|
|
65
|
+
size="icon-sm"
|
|
66
|
+
aria-label="Close thread"
|
|
67
|
+
class="ms-auto text-muted-foreground"
|
|
68
|
+
onClick={() => local.onClose?.()}
|
|
69
|
+
>
|
|
70
|
+
<X />
|
|
71
|
+
</Button>
|
|
72
|
+
</Show>
|
|
73
|
+
</header>
|
|
74
|
+
|
|
75
|
+
<Show when={local.root}>
|
|
76
|
+
<div class="bg-muted/40 shrink-0 border-b border-border px-3 py-2">{local.root}</div>
|
|
77
|
+
</Show>
|
|
78
|
+
|
|
79
|
+
<div
|
|
80
|
+
class="min-h-0 flex-1 overflow-y-auto overscroll-contain"
|
|
81
|
+
role="region"
|
|
82
|
+
aria-label="Thread replies"
|
|
83
|
+
tabindex="0"
|
|
84
|
+
>
|
|
85
|
+
{local.children}
|
|
86
|
+
</div>
|
|
87
|
+
|
|
88
|
+
<Show when={local.composer}>
|
|
89
|
+
<div class="shrink-0 border-t border-border p-2">{local.composer}</div>
|
|
90
|
+
</Show>
|
|
91
|
+
</aside>
|
|
92
|
+
)
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* An attachment card.
|
|
97
|
+
*
|
|
98
|
+
* A file is not a link: the reader wants to know what it is and how big it is before
|
|
99
|
+
* deciding to open it, so the media type and size are on the card rather than behind
|
|
100
|
+
* a click. `unavailable` is a real state — an artifact can be deleted, or live on a
|
|
101
|
+
* device this one is not authorized for — and it is drawn as text rather than as a
|
|
102
|
+
* dead link.
|
|
103
|
+
*/
|
|
104
|
+
export type AttachmentCardProps = ComponentProps<'button'> & {
|
|
105
|
+
name: string
|
|
106
|
+
/** A short description of the type and size, e.g. "image/png · 24,120 bytes". */
|
|
107
|
+
detail?: string
|
|
108
|
+
/** Draw the card as unavailable, with the reason as the detail. */
|
|
109
|
+
unavailable?: boolean
|
|
110
|
+
icon?: JSX.Element
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export function AttachmentCard(props: AttachmentCardProps) {
|
|
114
|
+
const [local, rest] = splitProps(props, ['class', 'name', 'detail', 'unavailable', 'icon'])
|
|
115
|
+
|
|
116
|
+
return (
|
|
117
|
+
<button
|
|
118
|
+
type="button"
|
|
119
|
+
disabled={local.unavailable}
|
|
120
|
+
class={cn(
|
|
121
|
+
'flex max-w-64 items-center gap-2.5 rounded-md border border-border bg-surface-sunken px-2.5 py-2 text-start',
|
|
122
|
+
'transition-colors ease-out outline-none',
|
|
123
|
+
local.unavailable
|
|
124
|
+
? 'cursor-not-allowed opacity-60'
|
|
125
|
+
: 'hover:border-input hover:bg-surface-hover',
|
|
126
|
+
'focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-primary-subtle',
|
|
127
|
+
'[&_svg]:size-4 [&_svg]:shrink-0',
|
|
128
|
+
local.class
|
|
129
|
+
)}
|
|
130
|
+
{...rest}
|
|
131
|
+
>
|
|
132
|
+
{local.icon}
|
|
133
|
+
<span class="flex min-w-0 flex-col">
|
|
134
|
+
<span class="truncate text-xs font-medium">{local.name}</span>
|
|
135
|
+
<Show when={local.detail}>
|
|
136
|
+
<span class="text-muted-foreground truncate text-2xs">{local.detail}</span>
|
|
137
|
+
</Show>
|
|
138
|
+
</span>
|
|
139
|
+
</button>
|
|
140
|
+
)
|
|
141
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import type { ComponentProps, JSX } from 'solid-js'
|
|
2
|
+
import { splitProps } from 'solid-js'
|
|
3
|
+
import { cn } from '#lib/utils'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* AppShell.
|
|
7
|
+
*
|
|
8
|
+
* The window's skeleton: a grid whose regions are the side rail, an optional
|
|
9
|
+
* secondary sidebar, a top bar and the content area, with a status bar pinned
|
|
10
|
+
* to the bottom.
|
|
11
|
+
*
|
|
12
|
+
* Its whole job is to be the *one* place that decides the geometry, so two
|
|
13
|
+
* applications built on this library cannot disagree about how tall the top bar
|
|
14
|
+
* is or where the content begins. Every dimension comes from a token — not from
|
|
15
|
+
* a class on a child — which is why the regions do not accept a height.
|
|
16
|
+
*
|
|
17
|
+
* Both apps are desktop shells, so the arrangement is height-locked: the shell
|
|
18
|
+
* fills the viewport, each region scrolls internally, and the document itself
|
|
19
|
+
* never scrolls. That is what stops a wheel event over a pane from dragging the
|
|
20
|
+
* whole window.
|
|
21
|
+
*
|
|
22
|
+
* <AppShell>
|
|
23
|
+
* <SideRail>…</SideRail>
|
|
24
|
+
* <AppShellBody>
|
|
25
|
+
* <AppShellTopBar>…</AppShellTopBar>
|
|
26
|
+
* <AppShellMain>…</AppShellMain>
|
|
27
|
+
* </AppShellBody>
|
|
28
|
+
* </AppShell>
|
|
29
|
+
*
|
|
30
|
+
* A second sidebar goes inside `AppShellBody` as a `SidebarNav`, or as a
|
|
31
|
+
* `ResizablePanelGroup` when the user is allowed to resize the split.
|
|
32
|
+
*/
|
|
33
|
+
export function AppShell(props: ComponentProps<'div'>) {
|
|
34
|
+
const [local, rest] = splitProps(props, ['class'])
|
|
35
|
+
|
|
36
|
+
return (
|
|
37
|
+
<div
|
|
38
|
+
data-slot="app-shell"
|
|
39
|
+
class={cn(
|
|
40
|
+
'bg-background text-foreground flex h-screen w-screen overflow-hidden',
|
|
41
|
+
'data-[window-drag=true]:window-drag',
|
|
42
|
+
local.class
|
|
43
|
+
)}
|
|
44
|
+
{...rest}
|
|
45
|
+
/>
|
|
46
|
+
)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** The area to the right of the rail: top bar over content over status bar. */
|
|
50
|
+
export function AppShellBody(props: ComponentProps<'div'>) {
|
|
51
|
+
const [local, rest] = splitProps(props, ['class'])
|
|
52
|
+
|
|
53
|
+
return (
|
|
54
|
+
<div
|
|
55
|
+
data-slot="app-shell-body"
|
|
56
|
+
class={cn('flex min-h-0 min-w-0 flex-1 flex-col', local.class)}
|
|
57
|
+
{...rest}
|
|
58
|
+
/>
|
|
59
|
+
)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* The main content area.
|
|
64
|
+
*
|
|
65
|
+
* `min-h-0 min-w-0` is load-bearing: a flex child defaults to its content size,
|
|
66
|
+
* so without it a wide table or a long line makes the whole shell scroll
|
|
67
|
+
* horizontally instead of the pane.
|
|
68
|
+
*/
|
|
69
|
+
export function AppShellMain(props: ComponentProps<'main'>) {
|
|
70
|
+
const [local, rest] = splitProps(props, ['class'])
|
|
71
|
+
|
|
72
|
+
return (
|
|
73
|
+
<main
|
|
74
|
+
data-slot="app-shell-main"
|
|
75
|
+
class={cn('flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden', local.class)}
|
|
76
|
+
{...rest}
|
|
77
|
+
/>
|
|
78
|
+
)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** A resizable split between two or more panes, filling the body. */
|
|
82
|
+
export function AppShellContent(props: ComponentProps<'div'> & { children?: JSX.Element }) {
|
|
83
|
+
const [local, rest] = splitProps(props, ['class'])
|
|
84
|
+
|
|
85
|
+
return (
|
|
86
|
+
<div
|
|
87
|
+
data-slot="app-shell-content"
|
|
88
|
+
class={cn('flex min-h-0 min-w-0 flex-1 overflow-hidden', local.class)}
|
|
89
|
+
{...rest}
|
|
90
|
+
/>
|
|
91
|
+
)
|
|
92
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { AppShell, AppShellBody, AppShellContent, AppShellMain } from './app-shell'
|