@repraze/kernelkit 0.0.0-stage → 0.1.0-alpha.1
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 +41 -2
- package/dist/components/accordion.d.ts +13 -0
- package/dist/components/accordion.d.ts.map +1 -0
- package/dist/components/accordion.js +33 -0
- package/dist/components/accordion.js.map +1 -0
- package/dist/components/alert-dialog.d.ts +24 -0
- package/dist/components/alert-dialog.d.ts.map +1 -0
- package/dist/components/alert-dialog.js +49 -0
- package/dist/components/alert-dialog.js.map +1 -0
- package/dist/components/alert.d.ts +22 -0
- package/dist/components/alert.d.ts.map +1 -0
- package/dist/components/alert.js +61 -0
- package/dist/components/alert.js.map +1 -0
- package/dist/components/aspect-ratio.d.ts +10 -0
- package/dist/components/aspect-ratio.d.ts.map +1 -0
- package/dist/components/aspect-ratio.js +18 -0
- package/dist/components/aspect-ratio.js.map +1 -0
- package/dist/components/attachment.d.ts +27 -0
- package/dist/components/attachment.d.ts.map +1 -0
- package/dist/components/attachment.js +76 -0
- package/dist/components/attachment.js.map +1 -0
- package/dist/components/avatar.d.ts +18 -0
- package/dist/components/avatar.d.ts.map +1 -0
- package/dist/components/avatar.js +38 -0
- package/dist/components/avatar.js.map +1 -0
- package/dist/components/badge.d.ts +18 -0
- package/dist/components/badge.d.ts.map +1 -0
- package/dist/components/badge.js +49 -0
- package/dist/components/badge.js.map +1 -0
- package/dist/components/breadcrumb.d.ts +11 -0
- package/dist/components/breadcrumb.d.ts.map +1 -0
- package/dist/components/breadcrumb.js +40 -0
- package/dist/components/breadcrumb.js.map +1 -0
- package/dist/components/bubble.d.ts +22 -0
- package/dist/components/bubble.d.ts.map +1 -0
- package/dist/components/bubble.js +72 -0
- package/dist/components/bubble.js.map +1 -0
- package/dist/components/button-group.d.ts +11 -0
- package/dist/components/button-group.d.ts.map +1 -0
- package/dist/components/button-group.js +38 -0
- package/dist/components/button-group.js.map +1 -0
- package/dist/components/button.d.ts +26 -0
- package/dist/components/button.d.ts.map +1 -0
- package/dist/components/button.js +78 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/calendar.d.ts +11 -0
- package/dist/components/calendar.d.ts.map +1 -0
- package/dist/components/calendar.js +89 -0
- package/dist/components/calendar.js.map +1 -0
- package/dist/components/callout.d.ts +25 -0
- package/dist/components/callout.d.ts.map +1 -0
- package/dist/components/callout.js +40 -0
- package/dist/components/callout.js.map +1 -0
- package/dist/components/card.d.ts +43 -0
- package/dist/components/card.d.ts.map +1 -0
- package/dist/components/card.js +80 -0
- package/dist/components/card.js.map +1 -0
- package/dist/components/carousel.d.ts +36 -0
- package/dist/components/carousel.d.ts.map +1 -0
- package/dist/components/carousel.js +148 -0
- package/dist/components/carousel.js.map +1 -0
- package/dist/components/chart.d.ts +45 -0
- package/dist/components/chart.d.ts.map +1 -0
- package/dist/components/chart.js +137 -0
- package/dist/components/chart.js.map +1 -0
- package/dist/components/checkbox-group.d.ts +9 -0
- package/dist/components/checkbox-group.d.ts.map +1 -0
- package/dist/components/checkbox-group.js +14 -0
- package/dist/components/checkbox-group.js.map +1 -0
- package/dist/components/checkbox.d.ts +6 -0
- package/dist/components/checkbox.d.ts.map +1 -0
- package/dist/components/checkbox.js +27 -0
- package/dist/components/checkbox.js.map +1 -0
- package/dist/components/code-block.d.ts +29 -0
- package/dist/components/code-block.d.ts.map +1 -0
- package/dist/components/code-block.js +87 -0
- package/dist/components/code-block.js.map +1 -0
- package/dist/components/collapsible.d.ts +11 -0
- package/dist/components/collapsible.d.ts.map +1 -0
- package/dist/components/collapsible.js +21 -0
- package/dist/components/collapsible.js.map +1 -0
- package/dist/components/combobox.d.ts +26 -0
- package/dist/components/combobox.d.ts.map +1 -0
- package/dist/components/combobox.js +66 -0
- package/dist/components/combobox.js.map +1 -0
- package/dist/components/command.d.ts +25 -0
- package/dist/components/command.d.ts.map +1 -0
- package/dist/components/command.js +48 -0
- package/dist/components/command.js.map +1 -0
- package/dist/components/context-menu.d.ts +32 -0
- package/dist/components/context-menu.d.ts.map +1 -0
- package/dist/components/context-menu.js +58 -0
- package/dist/components/context-menu.js.map +1 -0
- package/dist/components/copy-button.d.ts +21 -0
- package/dist/components/copy-button.d.ts.map +1 -0
- package/dist/components/copy-button.js +34 -0
- package/dist/components/copy-button.js.map +1 -0
- package/dist/components/data-table/data-table-utils.d.ts +18 -0
- package/dist/components/data-table/data-table-utils.d.ts.map +1 -0
- package/dist/components/data-table/data-table-utils.js +92 -0
- package/dist/components/data-table/data-table-utils.js.map +1 -0
- package/dist/components/data-table/elements/data-table-base.d.ts +24 -0
- package/dist/components/data-table/elements/data-table-base.d.ts.map +1 -0
- package/dist/components/data-table/elements/data-table-base.js +28 -0
- package/dist/components/data-table/elements/data-table-base.js.map +1 -0
- package/dist/components/data-table/elements/data-table-body.d.ts +8 -0
- package/dist/components/data-table/elements/data-table-body.d.ts.map +1 -0
- package/dist/components/data-table/elements/data-table-body.js +16 -0
- package/dist/components/data-table/elements/data-table-body.js.map +1 -0
- package/dist/components/data-table/elements/data-table-cell.d.ts +12 -0
- package/dist/components/data-table/elements/data-table-cell.d.ts.map +1 -0
- package/dist/components/data-table/elements/data-table-cell.js +23 -0
- package/dist/components/data-table/elements/data-table-cell.js.map +1 -0
- package/dist/components/data-table/elements/data-table-filter-row.d.ts +40 -0
- package/dist/components/data-table/elements/data-table-filter-row.d.ts.map +1 -0
- package/dist/components/data-table/elements/data-table-filter-row.js +117 -0
- package/dist/components/data-table/elements/data-table-filter-row.js.map +1 -0
- package/dist/components/data-table/elements/data-table-foot.d.ts +9 -0
- package/dist/components/data-table/elements/data-table-foot.d.ts.map +1 -0
- package/dist/components/data-table/elements/data-table-foot.js +11 -0
- package/dist/components/data-table/elements/data-table-foot.js.map +1 -0
- package/dist/components/data-table/elements/data-table-head.d.ts +9 -0
- package/dist/components/data-table/elements/data-table-head.d.ts.map +1 -0
- package/dist/components/data-table/elements/data-table-head.js +11 -0
- package/dist/components/data-table/elements/data-table-head.js.map +1 -0
- package/dist/components/data-table/elements/data-table-info-row.d.ts +7 -0
- package/dist/components/data-table/elements/data-table-info-row.d.ts.map +1 -0
- package/dist/components/data-table/elements/data-table-info-row.js +19 -0
- package/dist/components/data-table/elements/data-table-info-row.js.map +1 -0
- package/dist/components/data-table/elements/data-table-row.d.ts +13 -0
- package/dist/components/data-table/elements/data-table-row.d.ts.map +1 -0
- package/dist/components/data-table/elements/data-table-row.js +19 -0
- package/dist/components/data-table/elements/data-table-row.js.map +1 -0
- package/dist/components/data-table/elements/data-table-scroll.d.ts +11 -0
- package/dist/components/data-table/elements/data-table-scroll.d.ts.map +1 -0
- package/dist/components/data-table/elements/data-table-scroll.js +10 -0
- package/dist/components/data-table/elements/data-table-scroll.js.map +1 -0
- package/dist/components/data-table/elements/data-table-sort-row.d.ts +28 -0
- package/dist/components/data-table/elements/data-table-sort-row.d.ts.map +1 -0
- package/dist/components/data-table/elements/data-table-sort-row.js +114 -0
- package/dist/components/data-table/elements/data-table-sort-row.js.map +1 -0
- package/dist/components/data-table/elements/data-table-title-row.d.ts +11 -0
- package/dist/components/data-table/elements/data-table-title-row.d.ts.map +1 -0
- package/dist/components/data-table/elements/data-table-title-row.js +16 -0
- package/dist/components/data-table/elements/data-table-title-row.js.map +1 -0
- package/dist/components/data-table/elements/data-table-virtualized-body.d.ts +10 -0
- package/dist/components/data-table/elements/data-table-virtualized-body.d.ts.map +1 -0
- package/dist/components/data-table/elements/data-table-virtualized-body.js +38 -0
- package/dist/components/data-table/elements/data-table-virtualized-body.js.map +1 -0
- package/dist/components/data-table/set-utils.d.ts +41 -0
- package/dist/components/data-table/set-utils.d.ts.map +1 -0
- package/dist/components/data-table/set-utils.js +97 -0
- package/dist/components/data-table/set-utils.js.map +1 -0
- package/dist/components/data-table/views/data-table-filter-view.d.ts +18 -0
- package/dist/components/data-table/views/data-table-filter-view.d.ts.map +1 -0
- package/dist/components/data-table/views/data-table-filter-view.js +63 -0
- package/dist/components/data-table/views/data-table-filter-view.js.map +1 -0
- package/dist/components/data-table/views/data-table-prop-view.d.ts +297 -0
- package/dist/components/data-table/views/data-table-prop-view.d.ts.map +1 -0
- package/dist/components/data-table/views/data-table-prop-view.js +44 -0
- package/dist/components/data-table/views/data-table-prop-view.js.map +1 -0
- package/dist/components/data-table/views/data-table-root-view.d.ts +8 -0
- package/dist/components/data-table/views/data-table-root-view.d.ts.map +1 -0
- package/dist/components/data-table/views/data-table-root-view.js +18 -0
- package/dist/components/data-table/views/data-table-root-view.js.map +1 -0
- package/dist/components/data-table/views/data-table-sort-view.d.ts +18 -0
- package/dist/components/data-table/views/data-table-sort-view.d.ts.map +1 -0
- package/dist/components/data-table/views/data-table-sort-view.js +70 -0
- package/dist/components/data-table/views/data-table-sort-view.js.map +1 -0
- package/dist/components/data-table/views/data-table-view.d.ts +44 -0
- package/dist/components/data-table/views/data-table-view.d.ts.map +1 -0
- package/dist/components/data-table/views/data-table-view.js +86 -0
- package/dist/components/data-table/views/data-table-view.js.map +1 -0
- package/dist/components/data-table.d.ts +20 -0
- package/dist/components/data-table.d.ts.map +1 -0
- package/dist/components/data-table.js +26 -0
- package/dist/components/data-table.js.map +1 -0
- package/dist/components/date-picker.d.ts +43 -0
- package/dist/components/date-picker.d.ts.map +1 -0
- package/dist/components/date-picker.js +45 -0
- package/dist/components/date-picker.js.map +1 -0
- package/dist/components/dialog.d.ts +24 -0
- package/dist/components/dialog.d.ts.map +1 -0
- package/dist/components/dialog.js +57 -0
- package/dist/components/dialog.js.map +1 -0
- package/dist/components/direction.d.ts +2 -0
- package/dist/components/direction.d.ts.map +1 -0
- package/dist/components/direction.js +3 -0
- package/dist/components/direction.js.map +1 -0
- package/dist/components/drawer.d.ts +18 -0
- package/dist/components/drawer.d.ts.map +1 -0
- package/dist/components/drawer.js +84 -0
- package/dist/components/drawer.js.map +1 -0
- package/dist/components/dropdown-menu.d.ts +45 -0
- package/dist/components/dropdown-menu.d.ts.map +1 -0
- package/dist/components/dropdown-menu.js +77 -0
- package/dist/components/dropdown-menu.js.map +1 -0
- package/dist/components/empty.d.ts +15 -0
- package/dist/components/empty.d.ts.map +1 -0
- package/dist/components/empty.js +44 -0
- package/dist/components/empty.js.map +1 -0
- package/dist/components/field.d.ts +25 -0
- package/dist/components/field.d.ts.map +1 -0
- package/dist/components/field.js +72 -0
- package/dist/components/field.js.map +1 -0
- package/dist/components/file-upload.d.ts +24 -0
- package/dist/components/file-upload.d.ts.map +1 -0
- package/dist/components/file-upload.js +78 -0
- package/dist/components/file-upload.js.map +1 -0
- package/dist/components/hero.d.ts +51 -0
- package/dist/components/hero.d.ts.map +1 -0
- package/dist/components/hero.js +104 -0
- package/dist/components/hero.js.map +1 -0
- package/dist/components/hover-card.d.ts +6 -0
- package/dist/components/hover-card.d.ts.map +1 -0
- package/dist/components/hover-card.js +17 -0
- package/dist/components/hover-card.js.map +1 -0
- package/dist/components/input-group.d.ts +23 -0
- package/dist/components/input-group.d.ts.map +1 -0
- package/dist/components/input-group.js +86 -0
- package/dist/components/input-group.js.map +1 -0
- package/dist/components/input-otp.d.ts +13 -0
- package/dist/components/input-otp.d.ts.map +1 -0
- package/dist/components/input-otp.js +25 -0
- package/dist/components/input-otp.js.map +1 -0
- package/dist/components/input.d.ts +13 -0
- package/dist/components/input.d.ts.map +1 -0
- package/dist/components/input.js +29 -0
- package/dist/components/input.js.map +1 -0
- package/dist/components/item.d.ts +23 -0
- package/dist/components/item.d.ts.map +1 -0
- package/dist/components/item.js +89 -0
- package/dist/components/item.js.map +1 -0
- package/dist/components/kbd.d.ts +11 -0
- package/dist/components/kbd.d.ts.map +1 -0
- package/dist/components/kbd.js +26 -0
- package/dist/components/kbd.js.map +1 -0
- package/dist/components/label.d.ts +4 -0
- package/dist/components/label.d.ts.map +1 -0
- package/dist/components/label.js +9 -0
- package/dist/components/label.js.map +1 -0
- package/dist/components/marker.d.ts +11 -0
- package/dist/components/marker.d.ts.map +1 -0
- package/dist/components/marker.js +37 -0
- package/dist/components/marker.js.map +1 -0
- package/dist/components/menubar.d.ts +23 -0
- package/dist/components/menubar.d.ts.map +1 -0
- package/dist/components/menubar.js +60 -0
- package/dist/components/menubar.js.map +1 -0
- package/dist/components/message-scroller.d.ts +11 -0
- package/dist/components/message-scroller.d.ts.map +1 -0
- package/dist/components/message-scroller.js +27 -0
- package/dist/components/message-scroller.js.map +1 -0
- package/dist/components/message.d.ts +17 -0
- package/dist/components/message.d.ts.map +1 -0
- package/dist/components/message.js +24 -0
- package/dist/components/message.js.map +1 -0
- package/dist/components/meter.d.ts +18 -0
- package/dist/components/meter.d.ts.map +1 -0
- package/dist/components/meter.js +25 -0
- package/dist/components/meter.js.map +1 -0
- package/dist/components/native-select.d.ts +14 -0
- package/dist/components/native-select.d.ts.map +1 -0
- package/dist/components/native-select.js +34 -0
- package/dist/components/native-select.js.map +1 -0
- package/dist/components/navbar.d.ts +11 -0
- package/dist/components/navbar.d.ts.map +1 -0
- package/dist/components/navbar.js +44 -0
- package/dist/components/navbar.js.map +1 -0
- package/dist/components/navigation-menu.d.ts +23 -0
- package/dist/components/navigation-menu.d.ts.map +1 -0
- package/dist/components/navigation-menu.js +51 -0
- package/dist/components/navigation-menu.js.map +1 -0
- package/dist/components/number-field.d.ts +16 -0
- package/dist/components/number-field.d.ts.map +1 -0
- package/dist/components/number-field.js +49 -0
- package/dist/components/number-field.js.map +1 -0
- package/dist/components/page-header.d.ts +13 -0
- package/dist/components/page-header.d.ts.map +1 -0
- package/dist/components/page-header.js +51 -0
- package/dist/components/page-header.js.map +1 -0
- package/dist/components/pager.d.ts +14 -0
- package/dist/components/pager.d.ts.map +1 -0
- package/dist/components/pager.js +36 -0
- package/dist/components/pager.js.map +1 -0
- package/dist/components/pagination.d.ts +21 -0
- package/dist/components/pagination.d.ts.map +1 -0
- package/dist/components/pagination.js +29 -0
- package/dist/components/pagination.js.map +1 -0
- package/dist/components/password-input.d.ts +18 -0
- package/dist/components/password-input.d.ts.map +1 -0
- package/dist/components/password-input.js +17 -0
- package/dist/components/password-input.js.map +1 -0
- package/dist/components/password-strength.d.ts +21 -0
- package/dist/components/password-strength.d.ts.map +1 -0
- package/dist/components/password-strength.js +52 -0
- package/dist/components/password-strength.js.map +1 -0
- package/dist/components/popover.d.ts +10 -0
- package/dist/components/popover.d.ts.map +1 -0
- package/dist/components/popover.js +27 -0
- package/dist/components/popover.js.map +1 -0
- package/dist/components/progress.d.ts +26 -0
- package/dist/components/progress.d.ts.map +1 -0
- package/dist/components/progress.js +39 -0
- package/dist/components/progress.js.map +1 -0
- package/dist/components/questionnaire.d.ts +20 -0
- package/dist/components/questionnaire.d.ts.map +1 -0
- package/dist/components/questionnaire.js +57 -0
- package/dist/components/questionnaire.js.map +1 -0
- package/dist/components/radio-group.d.ts +8 -0
- package/dist/components/radio-group.d.ts.map +1 -0
- package/dist/components/radio-group.js +27 -0
- package/dist/components/radio-group.js.map +1 -0
- package/dist/components/resizable.d.ts +13 -0
- package/dist/components/resizable.d.ts.map +1 -0
- package/dist/components/resizable.js +24 -0
- package/dist/components/resizable.js.map +1 -0
- package/dist/components/scroll-area.d.ts +17 -0
- package/dist/components/scroll-area.d.ts.map +1 -0
- package/dist/components/scroll-area.js +12 -0
- package/dist/components/scroll-area.js.map +1 -0
- package/dist/components/search-dialog.d.ts +38 -0
- package/dist/components/search-dialog.d.ts.map +1 -0
- package/dist/components/search-dialog.js +39 -0
- package/dist/components/search-dialog.js.map +1 -0
- package/dist/components/search-trigger.d.ts +20 -0
- package/dist/components/search-trigger.d.ts.map +1 -0
- package/dist/components/search-trigger.js +52 -0
- package/dist/components/search-trigger.js.map +1 -0
- package/dist/components/section.d.ts +30 -0
- package/dist/components/section.d.ts.map +1 -0
- package/dist/components/section.js +79 -0
- package/dist/components/section.js.map +1 -0
- package/dist/components/select.d.ts +16 -0
- package/dist/components/select.d.ts.map +1 -0
- package/dist/components/select.js +38 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/separator.d.ts +4 -0
- package/dist/components/separator.d.ts.map +1 -0
- package/dist/components/separator.js +9 -0
- package/dist/components/separator.js.map +1 -0
- package/dist/components/sheet.d.ts +16 -0
- package/dist/components/sheet.d.ts.map +1 -0
- package/dist/components/sheet.js +44 -0
- package/dist/components/sheet.js.map +1 -0
- package/dist/components/sidebar.d.ts +76 -0
- package/dist/components/sidebar.d.ts.map +1 -0
- package/dist/components/sidebar.js +289 -0
- package/dist/components/sidebar.js.map +1 -0
- package/dist/components/site-footer.d.ts +22 -0
- package/dist/components/site-footer.d.ts.map +1 -0
- package/dist/components/site-footer.js +42 -0
- package/dist/components/site-footer.js.map +1 -0
- package/dist/components/site-header.d.ts +48 -0
- package/dist/components/site-header.d.ts.map +1 -0
- package/dist/components/site-header.js +104 -0
- package/dist/components/site-header.js.map +1 -0
- package/dist/components/site-layout.d.ts +35 -0
- package/dist/components/site-layout.d.ts.map +1 -0
- package/dist/components/site-layout.js +99 -0
- package/dist/components/site-layout.js.map +1 -0
- package/dist/components/skeleton.d.ts +6 -0
- package/dist/components/skeleton.d.ts.map +1 -0
- package/dist/components/skeleton.js +16 -0
- package/dist/components/skeleton.js.map +1 -0
- package/dist/components/slider.d.ts +4 -0
- package/dist/components/slider.d.ts.map +1 -0
- package/dist/components/slider.js +11 -0
- package/dist/components/slider.js.map +1 -0
- package/dist/components/spinner.d.ts +12 -0
- package/dist/components/spinner.d.ts.map +1 -0
- package/dist/components/spinner.js +26 -0
- package/dist/components/spinner.js.map +1 -0
- package/dist/components/stat.d.ts +31 -0
- package/dist/components/stat.d.ts.map +1 -0
- package/dist/components/stat.js +66 -0
- package/dist/components/stat.js.map +1 -0
- package/dist/components/status-dot.d.ts +25 -0
- package/dist/components/status-dot.d.ts.map +1 -0
- package/dist/components/status-dot.js +45 -0
- package/dist/components/status-dot.js.map +1 -0
- package/dist/components/switch.d.ts +17 -0
- package/dist/components/switch.d.ts.map +1 -0
- package/dist/components/switch.js +49 -0
- package/dist/components/switch.js.map +1 -0
- package/dist/components/table.d.ts +25 -0
- package/dist/components/table.d.ts.map +1 -0
- package/dist/components/table.js +45 -0
- package/dist/components/table.js.map +1 -0
- package/dist/components/tabs.d.ts +18 -0
- package/dist/components/tabs.d.ts.map +1 -0
- package/dist/components/tabs.js +51 -0
- package/dist/components/tabs.js.map +1 -0
- package/dist/components/textarea.d.ts +4 -0
- package/dist/components/textarea.d.ts.map +1 -0
- package/dist/components/textarea.js +10 -0
- package/dist/components/textarea.js.map +1 -0
- package/dist/components/toast.d.ts +27 -0
- package/dist/components/toast.d.ts.map +1 -0
- package/dist/components/toast.js +68 -0
- package/dist/components/toast.js.map +1 -0
- package/dist/components/toc.d.ts +35 -0
- package/dist/components/toc.d.ts.map +1 -0
- package/dist/components/toc.js +94 -0
- package/dist/components/toc.js.map +1 -0
- package/dist/components/toggle-group.d.ts +19 -0
- package/dist/components/toggle-group.d.ts.map +1 -0
- package/dist/components/toggle-group.js +33 -0
- package/dist/components/toggle-group.js.map +1 -0
- package/dist/components/toggle.d.ts +15 -0
- package/dist/components/toggle.d.ts.map +1 -0
- package/dist/components/toggle.js +42 -0
- package/dist/components/toggle.js.map +1 -0
- package/dist/components/toolbar.d.ts +14 -0
- package/dist/components/toolbar.d.ts.map +1 -0
- package/dist/components/toolbar.js +37 -0
- package/dist/components/toolbar.js.map +1 -0
- package/dist/components/tooltip.d.ts +7 -0
- package/dist/components/tooltip.d.ts.map +1 -0
- package/dist/components/tooltip.js +22 -0
- package/dist/components/tooltip.js.map +1 -0
- package/dist/components/trace.d.ts +20 -0
- package/dist/components/trace.d.ts.map +1 -0
- package/dist/components/trace.js +32 -0
- package/dist/components/trace.js.map +1 -0
- package/dist/components/typography.d.ts +37 -0
- package/dist/components/typography.d.ts.map +1 -0
- package/dist/components/typography.js +140 -0
- package/dist/components/typography.js.map +1 -0
- package/dist/hooks/use-highlighted-code.d.ts +3 -0
- package/dist/hooks/use-highlighted-code.d.ts.map +1 -0
- package/dist/hooks/use-highlighted-code.js +50 -0
- package/dist/hooks/use-highlighted-code.js.map +1 -0
- package/dist/hooks/use-mobile.d.ts +2 -0
- package/dist/hooks/use-mobile.d.ts.map +1 -0
- package/dist/hooks/use-mobile.js +16 -0
- package/dist/hooks/use-mobile.js.map +1 -0
- package/dist/lib/color.d.ts +30 -0
- package/dist/lib/color.d.ts.map +1 -0
- package/dist/lib/color.js +56 -0
- package/dist/lib/color.js.map +1 -0
- package/dist/lib/highlighter.d.ts +10 -0
- package/dist/lib/highlighter.d.ts.map +1 -0
- package/dist/lib/highlighter.js +94 -0
- package/dist/lib/highlighter.js.map +1 -0
- package/dist/lib/recipes.d.ts +30 -0
- package/dist/lib/recipes.d.ts.map +1 -0
- package/dist/lib/recipes.js +30 -0
- package/dist/lib/recipes.js.map +1 -0
- package/dist/lib/utils.d.ts +2 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +2 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/provider/index.d.ts +3 -0
- package/dist/provider/index.d.ts.map +1 -0
- package/dist/provider/index.js +3 -0
- package/dist/provider/index.js.map +1 -0
- package/dist/provider/theme-provider.d.ts +47 -0
- package/dist/provider/theme-provider.d.ts.map +1 -0
- package/dist/provider/theme-provider.js +118 -0
- package/dist/provider/theme-provider.js.map +1 -0
- package/dist/provider/theme.d.ts +42 -0
- package/dist/provider/theme.d.ts.map +1 -0
- package/dist/provider/theme.js +58 -0
- package/dist/provider/theme.js.map +1 -0
- package/package.json +145 -5
- package/src/components/accordion.tsx +92 -0
- package/src/components/alert-dialog.tsx +167 -0
- package/src/components/alert.tsx +110 -0
- package/src/components/aspect-ratio.tsx +29 -0
- package/src/components/attachment.tsx +198 -0
- package/src/components/avatar.tsx +115 -0
- package/src/components/badge.tsx +75 -0
- package/src/components/breadcrumb.tsx +104 -0
- package/src/components/bubble.tsx +125 -0
- package/src/components/button-group.tsx +75 -0
- package/src/components/button.tsx +124 -0
- package/src/components/calendar.tsx +204 -0
- package/src/components/callout.tsx +131 -0
- package/src/components/card.tsx +178 -0
- package/src/components/carousel.tsx +329 -0
- package/src/components/chart.tsx +332 -0
- package/src/components/checkbox-group.tsx +21 -0
- package/src/components/checkbox.tsx +39 -0
- package/src/components/code-block.tsx +246 -0
- package/src/components/collapsible.tsx +47 -0
- package/src/components/combobox.tsx +295 -0
- package/src/components/command.tsx +174 -0
- package/src/components/context-menu.tsx +238 -0
- package/src/components/copy-button.tsx +80 -0
- package/src/components/data-table/data-table-utils.tsx +125 -0
- package/src/components/data-table/elements/data-table-base.tsx +78 -0
- package/src/components/data-table/elements/data-table-body.tsx +50 -0
- package/src/components/data-table/elements/data-table-cell.tsx +42 -0
- package/src/components/data-table/elements/data-table-filter-row.tsx +222 -0
- package/src/components/data-table/elements/data-table-foot.tsx +36 -0
- package/src/components/data-table/elements/data-table-head.tsx +36 -0
- package/src/components/data-table/elements/data-table-info-row.tsx +38 -0
- package/src/components/data-table/elements/data-table-row.tsx +58 -0
- package/src/components/data-table/elements/data-table-scroll.tsx +33 -0
- package/src/components/data-table/elements/data-table-sort-row.tsx +180 -0
- package/src/components/data-table/elements/data-table-title-row.tsx +33 -0
- package/src/components/data-table/elements/data-table-virtualized-body.tsx +87 -0
- package/src/components/data-table/set-utils.ts +103 -0
- package/src/components/data-table/views/data-table-filter-view.tsx +75 -0
- package/src/components/data-table/views/data-table-prop-view.tsx +55 -0
- package/src/components/data-table/views/data-table-root-view.tsx +20 -0
- package/src/components/data-table/views/data-table-sort-view.tsx +81 -0
- package/src/components/data-table/views/data-table-view.tsx +147 -0
- package/src/components/data-table.tsx +30 -0
- package/src/components/date-picker.tsx +166 -0
- package/src/components/dialog.tsx +158 -0
- package/src/components/direction.tsx +3 -0
- package/src/components/drawer.tsx +222 -0
- package/src/components/dropdown-menu.tsx +267 -0
- package/src/components/empty.tsx +97 -0
- package/src/components/field.tsx +229 -0
- package/src/components/file-upload.tsx +180 -0
- package/src/components/hero.tsx +207 -0
- package/src/components/hover-card.tsx +44 -0
- package/src/components/input-group.tsx +186 -0
- package/src/components/input-otp.tsx +82 -0
- package/src/components/input.tsx +50 -0
- package/src/components/item.tsx +191 -0
- package/src/components/kbd.tsx +39 -0
- package/src/components/label.tsx +19 -0
- package/src/components/marker.tsx +69 -0
- package/src/components/menubar.tsx +146 -0
- package/src/components/message-scroller.tsx +113 -0
- package/src/components/message.tsx +90 -0
- package/src/components/meter.tsx +69 -0
- package/src/components/native-select.tsx +76 -0
- package/src/components/navbar.tsx +55 -0
- package/src/components/navigation-menu.tsx +193 -0
- package/src/components/number-field.tsx +133 -0
- package/src/components/page-header.tsx +63 -0
- package/src/components/pager.tsx +70 -0
- package/src/components/pagination.tsx +106 -0
- package/src/components/password-input.tsx +71 -0
- package/src/components/password-strength.tsx +99 -0
- package/src/components/popover.tsx +68 -0
- package/src/components/progress.tsx +105 -0
- package/src/components/questionnaire.tsx +299 -0
- package/src/components/radio-group.tsx +43 -0
- package/src/components/resizable.tsx +62 -0
- package/src/components/scroll-area.tsx +68 -0
- package/src/components/search-dialog.tsx +87 -0
- package/src/components/search-trigger.tsx +74 -0
- package/src/components/section.tsx +110 -0
- package/src/components/select.tsx +184 -0
- package/src/components/separator.tsx +20 -0
- package/src/components/sheet.tsx +116 -0
- package/src/components/sidebar.tsx +722 -0
- package/src/components/site-footer.tsx +55 -0
- package/src/components/site-header.tsx +169 -0
- package/src/components/site-layout.tsx +147 -0
- package/src/components/skeleton.tsx +19 -0
- package/src/components/slider.tsx +46 -0
- package/src/components/spinner.tsx +42 -0
- package/src/components/stat.tsx +155 -0
- package/src/components/status-dot.tsx +94 -0
- package/src/components/switch.tsx +70 -0
- package/src/components/table.tsx +133 -0
- package/src/components/tabs.tsx +99 -0
- package/src/components/textarea.tsx +23 -0
- package/src/components/toast.tsx +221 -0
- package/src/components/toc.tsx +122 -0
- package/src/components/toggle-group.tsx +95 -0
- package/src/components/toggle.tsx +59 -0
- package/src/components/toolbar.tsx +97 -0
- package/src/components/tooltip.tsx +57 -0
- package/src/components/trace.tsx +143 -0
- package/src/components/typography.tsx +205 -0
- package/src/hooks/use-highlighted-code.ts +71 -0
- package/src/hooks/use-mobile.ts +19 -0
- package/src/lib/color.ts +76 -0
- package/src/lib/highlighter.tsx +121 -0
- package/src/lib/recipes.ts +47 -0
- package/src/lib/utils.ts +1 -0
- package/src/provider/index.ts +2 -0
- package/src/provider/theme-provider.tsx +210 -0
- package/src/provider/theme.ts +83 -0
- package/src/styles/kernelkit.css +301 -0
- package/src/styles/shadcn.css +555 -0
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
Dialog,
|
|
5
|
+
DialogContent,
|
|
6
|
+
DialogDescription,
|
|
7
|
+
DialogHeader,
|
|
8
|
+
DialogTitle,
|
|
9
|
+
} from "@repraze/kernelkit/components/dialog";
|
|
10
|
+
import {fieldSurface, listSeparator} from "@repraze/kernelkit/lib/recipes";
|
|
11
|
+
import {Command as CommandPrimitive} from "cmdk";
|
|
12
|
+
import {cn} from "cn";
|
|
13
|
+
import {CheckIcon, SearchIcon} from "lucide-react";
|
|
14
|
+
import * as React from "react";
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* cmdk renders `data-selected` / `data-disabled` as "true" | "false", so the `listItem` recipe (which keys on
|
|
18
|
+
* attribute presence) can't be used as is: this is the same row, keyed on `=true`.
|
|
19
|
+
*/
|
|
20
|
+
const commandItemClass =
|
|
21
|
+
"group/command-item relative flex min-h-8 cursor-default items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-hidden select-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[selected=true]:[&_svg:not([class*='text-'])]:text-accent-foreground";
|
|
22
|
+
|
|
23
|
+
function Command({className, ...props}: React.ComponentProps<typeof CommandPrimitive>) {
|
|
24
|
+
return (
|
|
25
|
+
<CommandPrimitive
|
|
26
|
+
data-slot="command"
|
|
27
|
+
className={cn(
|
|
28
|
+
"flex size-full flex-col overflow-hidden rounded-lg border border-border bg-popover p-1 text-popover-foreground",
|
|
29
|
+
// inside CommandDialog the dialog is the surface
|
|
30
|
+
"in-data-[slot=dialog-content]:rounded-none in-data-[slot=dialog-content]:border-0",
|
|
31
|
+
className,
|
|
32
|
+
)}
|
|
33
|
+
{...props}
|
|
34
|
+
/>
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function CommandDialog({
|
|
39
|
+
title = "Command palette",
|
|
40
|
+
description = "Search for a command to run…",
|
|
41
|
+
children,
|
|
42
|
+
className,
|
|
43
|
+
showCloseButton = false,
|
|
44
|
+
initialFocus,
|
|
45
|
+
finalFocus,
|
|
46
|
+
...props
|
|
47
|
+
}: Omit<React.ComponentProps<typeof Dialog>, "children"> &
|
|
48
|
+
Pick<React.ComponentProps<typeof DialogContent>, "initialFocus" | "finalFocus"> & {
|
|
49
|
+
title?: string;
|
|
50
|
+
description?: string;
|
|
51
|
+
className?: string;
|
|
52
|
+
showCloseButton?: boolean;
|
|
53
|
+
children: React.ReactNode;
|
|
54
|
+
}) {
|
|
55
|
+
return (
|
|
56
|
+
<Dialog {...props}>
|
|
57
|
+
<DialogContent
|
|
58
|
+
data-slot="command-dialog"
|
|
59
|
+
className={cn("top-1/4 translate-y-0 gap-0 overflow-hidden p-0 sm:max-w-lg", className)}
|
|
60
|
+
showCloseButton={showCloseButton}
|
|
61
|
+
// where focus goes on open/close (e.g. the search input)
|
|
62
|
+
initialFocus={initialFocus}
|
|
63
|
+
finalFocus={finalFocus}
|
|
64
|
+
>
|
|
65
|
+
<DialogHeader className="sr-only">
|
|
66
|
+
<DialogTitle>{title}</DialogTitle>
|
|
67
|
+
<DialogDescription>{description}</DialogDescription>
|
|
68
|
+
</DialogHeader>
|
|
69
|
+
{children}
|
|
70
|
+
</DialogContent>
|
|
71
|
+
</Dialog>
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function CommandInput({className, ...props}: React.ComponentProps<typeof CommandPrimitive.Input>) {
|
|
76
|
+
return (
|
|
77
|
+
<div
|
|
78
|
+
data-slot="command-input-wrapper"
|
|
79
|
+
className={cn(
|
|
80
|
+
fieldSurface,
|
|
81
|
+
"mb-1 flex h-8 shrink-0 items-center gap-2 px-2.5 focus-within:border-ring has-disabled:opacity-50",
|
|
82
|
+
"in-data-[slot=dialog-content]:h-9",
|
|
83
|
+
)}
|
|
84
|
+
>
|
|
85
|
+
<SearchIcon className="size-4 shrink-0 text-muted-foreground" />
|
|
86
|
+
<CommandPrimitive.Input
|
|
87
|
+
data-slot="command-input"
|
|
88
|
+
className={cn(
|
|
89
|
+
"h-full w-full min-w-0 bg-transparent text-base outline-hidden placeholder:text-muted-foreground disabled:cursor-not-allowed md:text-sm",
|
|
90
|
+
className,
|
|
91
|
+
)}
|
|
92
|
+
{...props}
|
|
93
|
+
/>
|
|
94
|
+
</div>
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function CommandList({className, ...props}: React.ComponentProps<typeof CommandPrimitive.List>) {
|
|
99
|
+
return (
|
|
100
|
+
<CommandPrimitive.List
|
|
101
|
+
data-slot="command-list"
|
|
102
|
+
className={cn(
|
|
103
|
+
"no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none",
|
|
104
|
+
className,
|
|
105
|
+
)}
|
|
106
|
+
{...props}
|
|
107
|
+
/>
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function CommandEmpty({className, ...props}: React.ComponentProps<typeof CommandPrimitive.Empty>) {
|
|
112
|
+
return (
|
|
113
|
+
<CommandPrimitive.Empty
|
|
114
|
+
data-slot="command-empty"
|
|
115
|
+
className={cn("py-6 text-center text-sm text-muted-foreground", className)}
|
|
116
|
+
{...props}
|
|
117
|
+
/>
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function CommandGroup({className, ...props}: React.ComponentProps<typeof CommandPrimitive.Group>) {
|
|
122
|
+
return (
|
|
123
|
+
<CommandPrimitive.Group
|
|
124
|
+
data-slot="command-group"
|
|
125
|
+
className={cn(
|
|
126
|
+
// group heading = the `listLabel` recipe
|
|
127
|
+
"overflow-hidden text-foreground **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:text-muted-foreground",
|
|
128
|
+
className,
|
|
129
|
+
)}
|
|
130
|
+
{...props}
|
|
131
|
+
/>
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
function CommandSeparator({className, ...props}: React.ComponentProps<typeof CommandPrimitive.Separator>) {
|
|
136
|
+
return (
|
|
137
|
+
<CommandPrimitive.Separator data-slot="command-separator" className={cn(listSeparator, className)} {...props} />
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function CommandItem({className, children, ...props}: React.ComponentProps<typeof CommandPrimitive.Item>) {
|
|
142
|
+
return (
|
|
143
|
+
<CommandPrimitive.Item data-slot="command-item" className={cn(commandItemClass, className)} {...props}>
|
|
144
|
+
{children}
|
|
145
|
+
<CheckIcon className="ml-auto opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100" />
|
|
146
|
+
</CommandPrimitive.Item>
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
function CommandShortcut({className, ...props}: React.ComponentProps<"span">) {
|
|
151
|
+
return (
|
|
152
|
+
<span
|
|
153
|
+
data-slot="command-shortcut"
|
|
154
|
+
className={cn(
|
|
155
|
+
"ml-auto pl-4 font-mono text-xs text-muted-foreground group-data-[selected=true]/command-item:text-accent-foreground",
|
|
156
|
+
className,
|
|
157
|
+
)}
|
|
158
|
+
{...props}
|
|
159
|
+
/>
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export {
|
|
164
|
+
Command,
|
|
165
|
+
CommandDialog,
|
|
166
|
+
CommandEmpty,
|
|
167
|
+
CommandGroup,
|
|
168
|
+
CommandInput,
|
|
169
|
+
CommandItem,
|
|
170
|
+
commandItemClass,
|
|
171
|
+
CommandList,
|
|
172
|
+
CommandSeparator,
|
|
173
|
+
CommandShortcut,
|
|
174
|
+
};
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import {ContextMenu as ContextMenuPrimitive} from "@base-ui/react/context-menu";
|
|
4
|
+
import {
|
|
5
|
+
menuContentClass,
|
|
6
|
+
menuIndicatorClass,
|
|
7
|
+
type MenuItemVariant,
|
|
8
|
+
menuItemVariants,
|
|
9
|
+
menuShortcutClass,
|
|
10
|
+
resolveItemVariant,
|
|
11
|
+
} from "@repraze/kernelkit/components/dropdown-menu";
|
|
12
|
+
import {listLabel, listSeparator} from "@repraze/kernelkit/lib/recipes";
|
|
13
|
+
import {usePortalContainer} from "@repraze/kernelkit/provider";
|
|
14
|
+
import {cn} from "cn";
|
|
15
|
+
import {CheckIcon, ChevronRightIcon} from "lucide-react";
|
|
16
|
+
import * as React from "react";
|
|
17
|
+
|
|
18
|
+
function ContextMenu({...props}: ContextMenuPrimitive.Root.Props) {
|
|
19
|
+
return <ContextMenuPrimitive.Root data-slot="context-menu" {...props} />;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function ContextMenuPortal({...props}: ContextMenuPrimitive.Portal.Props) {
|
|
23
|
+
return <ContextMenuPrimitive.Portal container={usePortalContainer()} data-slot="context-menu-portal" {...props} />;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function ContextMenuTrigger({className, ...props}: ContextMenuPrimitive.Trigger.Props) {
|
|
27
|
+
return (
|
|
28
|
+
<ContextMenuPrimitive.Trigger
|
|
29
|
+
data-slot="context-menu-trigger"
|
|
30
|
+
className={cn("select-none", className)}
|
|
31
|
+
{...props}
|
|
32
|
+
/>
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function ContextMenuContent({
|
|
37
|
+
className,
|
|
38
|
+
align = "start",
|
|
39
|
+
alignOffset = 4,
|
|
40
|
+
side = "right",
|
|
41
|
+
sideOffset = 0,
|
|
42
|
+
...props
|
|
43
|
+
}: ContextMenuPrimitive.Popup.Props &
|
|
44
|
+
Pick<ContextMenuPrimitive.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset">) {
|
|
45
|
+
return (
|
|
46
|
+
<ContextMenuPrimitive.Portal container={usePortalContainer()}>
|
|
47
|
+
<ContextMenuPrimitive.Positioner
|
|
48
|
+
className="isolate z-50 outline-none"
|
|
49
|
+
align={align}
|
|
50
|
+
alignOffset={alignOffset}
|
|
51
|
+
side={side}
|
|
52
|
+
sideOffset={sideOffset}
|
|
53
|
+
>
|
|
54
|
+
<ContextMenuPrimitive.Popup
|
|
55
|
+
data-slot="context-menu-content"
|
|
56
|
+
className={cn(menuContentClass, "min-w-44", className)}
|
|
57
|
+
{...props}
|
|
58
|
+
/>
|
|
59
|
+
</ContextMenuPrimitive.Positioner>
|
|
60
|
+
</ContextMenuPrimitive.Portal>
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function ContextMenuGroup({...props}: ContextMenuPrimitive.Group.Props) {
|
|
65
|
+
return <ContextMenuPrimitive.Group data-slot="context-menu-group" {...props} />;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** Plain caption: works inside or outside a `ContextMenuGroup`. */
|
|
69
|
+
function ContextMenuLabel({
|
|
70
|
+
className,
|
|
71
|
+
inset,
|
|
72
|
+
...props
|
|
73
|
+
}: React.ComponentProps<"div"> & {
|
|
74
|
+
inset?: boolean;
|
|
75
|
+
}) {
|
|
76
|
+
return (
|
|
77
|
+
<div
|
|
78
|
+
data-slot="context-menu-label"
|
|
79
|
+
data-inset={inset}
|
|
80
|
+
className={cn(listLabel, "data-inset:pl-8", className)}
|
|
81
|
+
{...props}
|
|
82
|
+
/>
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function ContextMenuItem({
|
|
87
|
+
className,
|
|
88
|
+
inset,
|
|
89
|
+
variant = "default",
|
|
90
|
+
...props
|
|
91
|
+
}: ContextMenuPrimitive.Item.Props & {
|
|
92
|
+
inset?: boolean;
|
|
93
|
+
variant?: MenuItemVariant;
|
|
94
|
+
}) {
|
|
95
|
+
const v = resolveItemVariant(variant);
|
|
96
|
+
return (
|
|
97
|
+
<ContextMenuPrimitive.Item
|
|
98
|
+
data-slot="context-menu-item"
|
|
99
|
+
data-inset={inset}
|
|
100
|
+
data-variant={v}
|
|
101
|
+
className={cn(menuItemVariants({variant: v}), className)}
|
|
102
|
+
{...props}
|
|
103
|
+
/>
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function ContextMenuSub({...props}: ContextMenuPrimitive.SubmenuRoot.Props) {
|
|
108
|
+
return <ContextMenuPrimitive.SubmenuRoot data-slot="context-menu-sub" {...props} />;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function ContextMenuSubTrigger({
|
|
112
|
+
className,
|
|
113
|
+
inset,
|
|
114
|
+
children,
|
|
115
|
+
...props
|
|
116
|
+
}: ContextMenuPrimitive.SubmenuTrigger.Props & {
|
|
117
|
+
inset?: boolean;
|
|
118
|
+
}) {
|
|
119
|
+
return (
|
|
120
|
+
<ContextMenuPrimitive.SubmenuTrigger
|
|
121
|
+
data-slot="context-menu-sub-trigger"
|
|
122
|
+
data-inset={inset}
|
|
123
|
+
className={cn(
|
|
124
|
+
menuItemVariants(),
|
|
125
|
+
"data-popup-open:bg-accent data-popup-open:text-accent-foreground",
|
|
126
|
+
className,
|
|
127
|
+
)}
|
|
128
|
+
{...props}
|
|
129
|
+
>
|
|
130
|
+
{children}
|
|
131
|
+
<ChevronRightIcon className="ml-auto" />
|
|
132
|
+
</ContextMenuPrimitive.SubmenuTrigger>
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function ContextMenuSubContent({
|
|
137
|
+
alignOffset = -5,
|
|
138
|
+
sideOffset = 0,
|
|
139
|
+
...props
|
|
140
|
+
}: React.ComponentProps<typeof ContextMenuContent>) {
|
|
141
|
+
return (
|
|
142
|
+
<ContextMenuContent
|
|
143
|
+
data-slot="context-menu-sub-content"
|
|
144
|
+
side="right"
|
|
145
|
+
alignOffset={alignOffset}
|
|
146
|
+
sideOffset={sideOffset}
|
|
147
|
+
{...props}
|
|
148
|
+
/>
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
function ContextMenuCheckboxItem({
|
|
153
|
+
className,
|
|
154
|
+
children,
|
|
155
|
+
checked,
|
|
156
|
+
inset,
|
|
157
|
+
...props
|
|
158
|
+
}: ContextMenuPrimitive.CheckboxItem.Props & {
|
|
159
|
+
inset?: boolean;
|
|
160
|
+
}) {
|
|
161
|
+
return (
|
|
162
|
+
<ContextMenuPrimitive.CheckboxItem
|
|
163
|
+
data-slot="context-menu-checkbox-item"
|
|
164
|
+
data-inset={inset}
|
|
165
|
+
className={cn(menuItemVariants(), "pr-8", className)}
|
|
166
|
+
checked={checked}
|
|
167
|
+
{...props}
|
|
168
|
+
>
|
|
169
|
+
<span className={menuIndicatorClass} data-slot="context-menu-checkbox-item-indicator">
|
|
170
|
+
<ContextMenuPrimitive.CheckboxItemIndicator>
|
|
171
|
+
<CheckIcon />
|
|
172
|
+
</ContextMenuPrimitive.CheckboxItemIndicator>
|
|
173
|
+
</span>
|
|
174
|
+
{children}
|
|
175
|
+
</ContextMenuPrimitive.CheckboxItem>
|
|
176
|
+
);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function ContextMenuRadioGroup({...props}: ContextMenuPrimitive.RadioGroup.Props) {
|
|
180
|
+
return <ContextMenuPrimitive.RadioGroup data-slot="context-menu-radio-group" {...props} />;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
function ContextMenuRadioItem({
|
|
184
|
+
className,
|
|
185
|
+
children,
|
|
186
|
+
inset,
|
|
187
|
+
...props
|
|
188
|
+
}: ContextMenuPrimitive.RadioItem.Props & {
|
|
189
|
+
inset?: boolean;
|
|
190
|
+
}) {
|
|
191
|
+
return (
|
|
192
|
+
<ContextMenuPrimitive.RadioItem
|
|
193
|
+
data-slot="context-menu-radio-item"
|
|
194
|
+
data-inset={inset}
|
|
195
|
+
className={cn(menuItemVariants(), "pr-8", className)}
|
|
196
|
+
{...props}
|
|
197
|
+
>
|
|
198
|
+
<span className={menuIndicatorClass} data-slot="context-menu-radio-item-indicator">
|
|
199
|
+
<ContextMenuPrimitive.RadioItemIndicator>
|
|
200
|
+
<CheckIcon />
|
|
201
|
+
</ContextMenuPrimitive.RadioItemIndicator>
|
|
202
|
+
</span>
|
|
203
|
+
{children}
|
|
204
|
+
</ContextMenuPrimitive.RadioItem>
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
function ContextMenuSeparator({className, ...props}: ContextMenuPrimitive.Separator.Props) {
|
|
209
|
+
return (
|
|
210
|
+
<ContextMenuPrimitive.Separator
|
|
211
|
+
data-slot="context-menu-separator"
|
|
212
|
+
className={cn(listSeparator, className)}
|
|
213
|
+
{...props}
|
|
214
|
+
/>
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
function ContextMenuShortcut({className, ...props}: React.ComponentProps<"span">) {
|
|
219
|
+
return <span data-slot="context-menu-shortcut" className={cn(menuShortcutClass, className)} {...props} />;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
export {
|
|
223
|
+
ContextMenu,
|
|
224
|
+
ContextMenuCheckboxItem,
|
|
225
|
+
ContextMenuContent,
|
|
226
|
+
ContextMenuGroup,
|
|
227
|
+
ContextMenuItem,
|
|
228
|
+
ContextMenuLabel,
|
|
229
|
+
ContextMenuPortal,
|
|
230
|
+
ContextMenuRadioGroup,
|
|
231
|
+
ContextMenuRadioItem,
|
|
232
|
+
ContextMenuSeparator,
|
|
233
|
+
ContextMenuShortcut,
|
|
234
|
+
ContextMenuSub,
|
|
235
|
+
ContextMenuSubContent,
|
|
236
|
+
ContextMenuSubTrigger,
|
|
237
|
+
ContextMenuTrigger,
|
|
238
|
+
};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import {Button, type ButtonProps} from "@repraze/kernelkit/components/button";
|
|
4
|
+
import {cn} from "cn";
|
|
5
|
+
import {CheckIcon, CopyIcon} from "lucide-react";
|
|
6
|
+
import * as React from "react";
|
|
7
|
+
|
|
8
|
+
interface CopyButtonProps extends Omit<ButtonProps, "value" | "onCopy"> {
|
|
9
|
+
/** Text to copy, or a function returning it (read at click time). */
|
|
10
|
+
value: string | (() => string);
|
|
11
|
+
/** Called after a successful copy. */
|
|
12
|
+
onCopy?: (value: string) => void;
|
|
13
|
+
/** How long the check mark shows, in ms. */
|
|
14
|
+
timeout?: number;
|
|
15
|
+
/** Accessible name before / after copying. */
|
|
16
|
+
label?: string;
|
|
17
|
+
copiedLabel?: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Copies `value` to the clipboard and shows a check for `timeout` ms. Icon-only by default (ghost,
|
|
22
|
+
* `size="icon"`; `"default"` when it has children); pass children for a labelled button, e.g. `<CopyButton size="sm">Copy</CopyButton>`.
|
|
23
|
+
*/
|
|
24
|
+
function CopyButton({
|
|
25
|
+
value,
|
|
26
|
+
onCopy,
|
|
27
|
+
timeout = 2000,
|
|
28
|
+
label = "Copy to clipboard",
|
|
29
|
+
copiedLabel = "Copied",
|
|
30
|
+
variant = "ghost",
|
|
31
|
+
size,
|
|
32
|
+
className,
|
|
33
|
+
children,
|
|
34
|
+
onClick,
|
|
35
|
+
...props
|
|
36
|
+
}: CopyButtonProps) {
|
|
37
|
+
const [copied, setCopied] = React.useState(false);
|
|
38
|
+
const timer = React.useRef<ReturnType<typeof setTimeout>>(undefined);
|
|
39
|
+
|
|
40
|
+
React.useEffect(() => () => clearTimeout(timer.current), []);
|
|
41
|
+
|
|
42
|
+
const copy: ButtonProps["onClick"] = async (event) => {
|
|
43
|
+
onClick?.(event);
|
|
44
|
+
const text = typeof value === "function" ? value() : value;
|
|
45
|
+
try {
|
|
46
|
+
await navigator.clipboard.writeText(text);
|
|
47
|
+
} catch {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
setCopied(true);
|
|
51
|
+
onCopy?.(text);
|
|
52
|
+
clearTimeout(timer.current);
|
|
53
|
+
timer.current = setTimeout(() => setCopied(false), timeout);
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
const Icon = copied ? CheckIcon : CopyIcon;
|
|
57
|
+
const iconOnly = children === undefined;
|
|
58
|
+
|
|
59
|
+
return (
|
|
60
|
+
<Button
|
|
61
|
+
data-slot="copy-button"
|
|
62
|
+
data-copied={copied || undefined}
|
|
63
|
+
variant={variant}
|
|
64
|
+
size={size ?? (iconOnly ? "icon" : "default")}
|
|
65
|
+
aria-label={iconOnly ? (copied ? copiedLabel : label) : undefined}
|
|
66
|
+
className={cn("data-copied:[&_svg]:text-success", className)}
|
|
67
|
+
onClick={copy}
|
|
68
|
+
{...props}
|
|
69
|
+
>
|
|
70
|
+
<Icon data-icon={iconOnly ? undefined : "inline-start"} />
|
|
71
|
+
{children}
|
|
72
|
+
<span className="sr-only" aria-live="polite">
|
|
73
|
+
{copied ? copiedLabel : ""}
|
|
74
|
+
</span>
|
|
75
|
+
</Button>
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export {CopyButton};
|
|
80
|
+
export type {CopyButtonProps};
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import {useEffect, useMemo, useRef, useState} from "react";
|
|
4
|
+
|
|
5
|
+
import type {DataTableView, DataTableViewColumn} from "./views/data-table-view";
|
|
6
|
+
|
|
7
|
+
// default row height: p-2 (16) + text-sm line-height (20) + 1px border = 37px, matching <Table /> rows
|
|
8
|
+
const DEFAULT_ROW_HEIGHT = 37;
|
|
9
|
+
const ROW_VERTICAL_PADDING = 16; // p-2 top + bottom
|
|
10
|
+
const ROW_BORDER = 1;
|
|
11
|
+
|
|
12
|
+
export function getTotalColumnWidth<T>(columns: DataTableViewColumn<T>[]): number {
|
|
13
|
+
return columns.reduce((w, c) => w + c.width, 0);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// the body uses an overlay scrollbar (ScrollArea) that consumes no width, so no scrollbar gap to add
|
|
17
|
+
export function getInnerTableWidth<T>(columns: DataTableViewColumn<T>[], containerWidth?: number): number {
|
|
18
|
+
const columnsWidth = getTotalColumnWidth(columns);
|
|
19
|
+
return Math.max(columnsWidth, containerWidth || 0);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export type DataTableSizingProps<T> = {
|
|
23
|
+
columns: DataTableViewColumn<T>[];
|
|
24
|
+
innerRowHeight?: number;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export type DataTableSizing = {
|
|
28
|
+
ref: React.RefObject<HTMLDivElement | null>;
|
|
29
|
+
width?: number;
|
|
30
|
+
height?: number;
|
|
31
|
+
inited: boolean;
|
|
32
|
+
innerWidth: number;
|
|
33
|
+
rowHeight: number;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export function useDataTableSizing<T>({columns, innerRowHeight}: DataTableSizingProps<T>): DataTableSizing {
|
|
37
|
+
const ref = useRef<HTMLDivElement>(null);
|
|
38
|
+
|
|
39
|
+
const [size, setSize] = useState<{width?: number; height?: number}>({});
|
|
40
|
+
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
const element = ref.current;
|
|
43
|
+
if (!element) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const observer = new ResizeObserver((entries) => {
|
|
48
|
+
const entry = entries[0];
|
|
49
|
+
if (entry) {
|
|
50
|
+
const {width, height} = entry.contentRect;
|
|
51
|
+
setSize((prev) => (prev.width === width && prev.height === height ? prev : {width, height}));
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
observer.observe(element);
|
|
55
|
+
|
|
56
|
+
// initial measure
|
|
57
|
+
const rect = element.getBoundingClientRect();
|
|
58
|
+
setSize({width: rect.width, height: rect.height});
|
|
59
|
+
|
|
60
|
+
return () => observer.disconnect();
|
|
61
|
+
}, []);
|
|
62
|
+
|
|
63
|
+
return useMemo(() => {
|
|
64
|
+
return {
|
|
65
|
+
ref,
|
|
66
|
+
width: size.width,
|
|
67
|
+
height: size.height,
|
|
68
|
+
inited: size.width !== undefined,
|
|
69
|
+
innerWidth: getInnerTableWidth(columns, size.width),
|
|
70
|
+
rowHeight:
|
|
71
|
+
innerRowHeight !== undefined ? ROW_VERTICAL_PADDING + innerRowHeight + ROW_BORDER : DEFAULT_ROW_HEIGHT,
|
|
72
|
+
};
|
|
73
|
+
}, [columns, size.width, size.height, innerRowHeight]);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export function viewToCsv<T>(view: DataTableView<T>) {
|
|
77
|
+
const columns = view.getColumns();
|
|
78
|
+
const data = view.getData();
|
|
79
|
+
|
|
80
|
+
const rows: string[][] = [];
|
|
81
|
+
const cells: string[] = [];
|
|
82
|
+
function addCell(s: any) {
|
|
83
|
+
if (typeof s === "string") {
|
|
84
|
+
if (s.includes('"') || s.includes(",")) {
|
|
85
|
+
cells.push(`"${s.replace(/"/g, '""')}"`);
|
|
86
|
+
} else {
|
|
87
|
+
cells.push(s);
|
|
88
|
+
}
|
|
89
|
+
} else {
|
|
90
|
+
cells.push(s.toString());
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function commitRow() {
|
|
94
|
+
const row = cells.splice(0, cells.length);
|
|
95
|
+
rows.push(row);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// fill table
|
|
99
|
+
if (columns.length > 0) {
|
|
100
|
+
columns.forEach((c) => {
|
|
101
|
+
addCell(c.id);
|
|
102
|
+
});
|
|
103
|
+
commitRow();
|
|
104
|
+
|
|
105
|
+
data.forEach((d) => {
|
|
106
|
+
columns.forEach((c) => {
|
|
107
|
+
addCell(c.rawCell(d));
|
|
108
|
+
});
|
|
109
|
+
commitRow();
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// convert to csv string
|
|
114
|
+
const out = rows.reduce((out, row) => {
|
|
115
|
+
const rowLen = row.length;
|
|
116
|
+
return `${
|
|
117
|
+
out +
|
|
118
|
+
row.reduce((out, cell, i) => {
|
|
119
|
+
return out + cell + (i < rowLen - 1 ? "," : "");
|
|
120
|
+
}, "")
|
|
121
|
+
}\n`;
|
|
122
|
+
}, "");
|
|
123
|
+
|
|
124
|
+
return out;
|
|
125
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import {cva} from "class-variance-authority";
|
|
4
|
+
import {cn} from "cn";
|
|
5
|
+
import type {CSSProperties, HTMLAttributes, ReactNode} from "react";
|
|
6
|
+
import {createContext, useContext, useMemo} from "react";
|
|
7
|
+
|
|
8
|
+
// `striped` is provided via context (not the group) so it can be applied as a plain background class on
|
|
9
|
+
// each row. That lets a per-row override (e.g. a data-driven highlight passed through DataTablePropView)
|
|
10
|
+
// win via tailwind-merge instead of losing to the higher-specificity group selector.
|
|
11
|
+
const DataTableContext = createContext<{striped?: boolean}>({});
|
|
12
|
+
|
|
13
|
+
export function useDataTableContext() {
|
|
14
|
+
return useContext(DataTableContext);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** The frame. Same flags as `<Table>`: `bordered`, `striped`, `hoverable` (default on), `dividers`. */
|
|
18
|
+
export const dataTableVariants = cva(
|
|
19
|
+
"group/data-table relative flex max-w-full flex-col overflow-x-auto overflow-y-hidden text-sm data-expand:min-w-full",
|
|
20
|
+
{
|
|
21
|
+
variants: {
|
|
22
|
+
bordered: {
|
|
23
|
+
true: "rounded-lg border border-border",
|
|
24
|
+
false: "",
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
defaultVariants: {bordered: false},
|
|
28
|
+
},
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
export type DataTableProps = HTMLAttributes<HTMLDivElement> & {
|
|
32
|
+
className?: string;
|
|
33
|
+
/** Stretch to the container width (min-w-full). */
|
|
34
|
+
expand?: boolean;
|
|
35
|
+
/** Zebra-stripe odd rows. */
|
|
36
|
+
striped?: boolean;
|
|
37
|
+
/** Row hover wash (on by default). */
|
|
38
|
+
hoverable?: boolean;
|
|
39
|
+
/** Rounded border frame (matches the bordered `<Table>`). */
|
|
40
|
+
bordered?: boolean;
|
|
41
|
+
/** Vertical separators between columns. */
|
|
42
|
+
dividers?: boolean;
|
|
43
|
+
children?: ReactNode;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export function DataTable({
|
|
47
|
+
className,
|
|
48
|
+
expand,
|
|
49
|
+
striped,
|
|
50
|
+
hoverable = true,
|
|
51
|
+
bordered,
|
|
52
|
+
dividers,
|
|
53
|
+
style,
|
|
54
|
+
children,
|
|
55
|
+
...props
|
|
56
|
+
}: DataTableProps) {
|
|
57
|
+
const mergedStyle: CSSProperties = {height: 250, ...style};
|
|
58
|
+
|
|
59
|
+
const context = useMemo(() => ({striped}), [striped]);
|
|
60
|
+
|
|
61
|
+
return (
|
|
62
|
+
<DataTableContext.Provider value={context}>
|
|
63
|
+
<div
|
|
64
|
+
data-slot="data-table"
|
|
65
|
+
data-expand={expand || undefined}
|
|
66
|
+
data-hoverable={hoverable || undefined}
|
|
67
|
+
data-bordered={bordered || undefined}
|
|
68
|
+
data-striped={striped || undefined}
|
|
69
|
+
data-dividers={dividers || undefined}
|
|
70
|
+
className={cn(dataTableVariants({bordered: !!bordered}), className)}
|
|
71
|
+
style={mergedStyle}
|
|
72
|
+
{...props}
|
|
73
|
+
>
|
|
74
|
+
{children}
|
|
75
|
+
</div>
|
|
76
|
+
</DataTableContext.Provider>
|
|
77
|
+
);
|
|
78
|
+
}
|