@exsto/ds 0.0.1-rc.2 → 0.0.1-rc.22
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 +171 -28
- package/dist/date-picker.js +2 -0
- package/dist/ds/src/date-picker.d.ts +9 -0
- package/dist/ds/src/file-input.d.ts +9 -0
- package/dist/ds/src/index.d.ts +2 -3
- package/dist/ds/src/rich-text-editor.d.ts +8 -0
- package/dist/ds/src/time-field.d.ts +9 -0
- package/dist/file-input.js +2 -0
- package/dist/index.js +79 -2
- package/dist/rich-text-editor.js +4 -0
- package/dist/source-hash.txt +1 -0
- package/dist/styles.css +1201 -404
- package/dist/theme.css +125 -7
- package/dist/time-field.js +2 -0
- package/dist/ui/src/components/edyn/animated-number/animated-number.d.ts +30 -0
- package/dist/ui/src/components/edyn/animated-number/animated-number.js +108 -0
- package/dist/ui/src/components/edyn/animated-number/animated-number.js.map +1 -0
- package/dist/ui/src/components/edyn/animated-number/animated-number.test.d.ts +9 -0
- package/dist/ui/src/components/edyn/animated-number/index.d.ts +1 -0
- package/dist/ui/src/components/edyn/audio-player/audio-player.d.ts +3 -2
- package/dist/ui/src/components/edyn/audio-player/audio-player.js +86 -0
- package/dist/ui/src/components/edyn/audio-player/audio-player.js.map +1 -0
- package/dist/ui/src/components/edyn/date-picker/date-picker.d.ts +86 -0
- package/dist/ui/src/components/edyn/date-picker/date-picker.js +302 -0
- package/dist/ui/src/components/edyn/date-picker/date-picker.js.map +1 -0
- package/dist/ui/src/components/edyn/date-picker/date-picker.state.test.d.ts +9 -0
- package/dist/ui/src/components/edyn/date-picker/date-text.d.ts +40 -0
- package/dist/ui/src/components/edyn/date-picker/date-text.js +105 -0
- package/dist/ui/src/components/edyn/date-picker/date-text.js.map +1 -0
- package/dist/ui/src/components/edyn/date-picker/index.d.ts +2 -0
- package/dist/ui/src/components/edyn/date-range-picker/date-range-picker.d.ts +28 -0
- package/dist/ui/src/components/edyn/date-range-picker/date-range-picker.js +70 -0
- package/dist/ui/src/components/edyn/date-range-picker/date-range-picker.js.map +1 -0
- package/dist/ui/src/components/edyn/date-range-picker/date-range-picker.test.d.ts +9 -0
- package/dist/ui/src/components/edyn/date-range-picker/index.d.ts +1 -0
- package/dist/ui/src/components/edyn/file-input/file-input.d.ts +90 -0
- package/dist/ui/src/components/edyn/file-input/file-input.js +261 -0
- package/dist/ui/src/components/edyn/file-input/file-input.js.map +1 -0
- package/dist/ui/src/components/edyn/file-input/file-input.test.d.ts +8 -0
- package/dist/ui/src/components/edyn/file-input/index.d.ts +1 -0
- package/dist/ui/src/components/edyn/initials-avatar/index.d.ts +1 -0
- package/dist/ui/src/components/edyn/initials-avatar/initials-avatar.d.ts +54 -0
- package/dist/ui/src/components/edyn/initials-avatar/initials-avatar.js +86 -0
- package/dist/ui/src/components/edyn/initials-avatar/initials-avatar.js.map +1 -0
- package/dist/ui/src/components/edyn/initials-avatar/initials-avatar.test.d.ts +10 -0
- package/dist/ui/src/components/edyn/multi-select/index.d.ts +1 -0
- package/dist/ui/src/components/edyn/multi-select/multi-select.d.ts +117 -0
- package/dist/ui/src/components/edyn/multi-select/multi-select.js +342 -0
- package/dist/ui/src/components/edyn/multi-select/multi-select.js.map +1 -0
- package/dist/ui/src/components/edyn/multi-select/multi-select.test.d.ts +9 -0
- package/dist/ui/src/components/edyn/presence/index.d.ts +1 -0
- package/dist/ui/src/components/edyn/presence/presence.d.ts +15 -0
- package/dist/ui/src/components/edyn/presence/presence.js +58 -0
- package/dist/ui/src/components/edyn/presence/presence.js.map +1 -0
- package/dist/ui/src/components/edyn/presence/presence.test.d.ts +8 -0
- package/dist/ui/src/components/edyn/progress-line/index.d.ts +1 -0
- package/dist/ui/src/components/edyn/progress-line/progress-line.d.ts +23 -0
- package/dist/ui/src/components/edyn/progress-line/progress-line.js +100 -0
- package/dist/ui/src/components/edyn/progress-line/progress-line.js.map +1 -0
- package/dist/ui/src/components/edyn/progress-line/progress-line.test.d.ts +9 -0
- package/dist/ui/src/components/edyn/rich-text-content/allow-list.d.ts +11 -0
- package/dist/ui/src/components/edyn/rich-text-content/allow-list.js +37 -0
- package/dist/ui/src/components/edyn/rich-text-content/allow-list.js.map +1 -0
- package/dist/ui/src/components/edyn/rich-text-content/index.d.ts +2 -0
- package/dist/ui/src/components/edyn/rich-text-content/rich-text-content.d.ts +22 -0
- package/dist/ui/src/components/edyn/rich-text-content/rich-text-content.js +124 -0
- package/dist/ui/src/components/edyn/rich-text-content/rich-text-content.js.map +1 -0
- package/dist/ui/src/components/edyn/rich-text-content/rich-text-content.test.d.ts +8 -0
- package/dist/ui/src/components/edyn/rich-text-editor/extensions.d.ts +18 -0
- package/dist/ui/src/components/edyn/rich-text-editor/extensions.js +124 -0
- package/dist/ui/src/components/edyn/rich-text-editor/extensions.js.map +1 -0
- package/dist/ui/src/components/edyn/rich-text-editor/index.d.ts +3 -0
- package/dist/ui/src/components/edyn/rich-text-editor/mention-list.d.ts +17 -0
- package/dist/ui/src/components/edyn/rich-text-editor/mention-list.js +232 -0
- package/dist/ui/src/components/edyn/rich-text-editor/mention-list.js.map +1 -0
- package/dist/ui/src/components/edyn/rich-text-editor/rich-text-editor.d.ts +53 -0
- package/dist/ui/src/components/edyn/rich-text-editor/rich-text-editor.js +244 -0
- package/dist/ui/src/components/edyn/rich-text-editor/rich-text-editor.js.map +1 -0
- package/dist/ui/src/components/edyn/rich-text-editor/rich-text-editor.test.d.ts +6 -0
- package/dist/ui/src/components/edyn/rich-text-editor/serialize.d.ts +13 -0
- package/dist/ui/src/components/edyn/rich-text-editor/serialize.js +55 -0
- package/dist/ui/src/components/edyn/rich-text-editor/serialize.js.map +1 -0
- package/dist/ui/src/components/edyn/rich-text-editor/sync.d.ts +19 -0
- package/dist/ui/src/components/edyn/rich-text-editor/sync.js +34 -0
- package/dist/ui/src/components/edyn/rich-text-editor/sync.js.map +1 -0
- package/dist/ui/src/components/edyn/rich-text-editor/sync.test.d.ts +11 -0
- package/dist/ui/src/components/edyn/rich-text-editor/toolbar.d.ts +20 -0
- package/dist/ui/src/components/edyn/rich-text-editor/toolbar.js +235 -0
- package/dist/ui/src/components/edyn/rich-text-editor/toolbar.js.map +1 -0
- package/dist/ui/src/components/edyn/rich-text-editor/types.d.ts +68 -0
- package/dist/ui/src/components/edyn/rich-text-editor/types.js +26 -0
- package/dist/ui/src/components/edyn/rich-text-editor/types.js.map +1 -0
- package/dist/ui/src/components/edyn/time-field/index.d.ts +1 -0
- package/dist/ui/src/components/edyn/time-field/time-field.d.ts +85 -0
- package/dist/ui/src/components/edyn/time-field/time-field.js +337 -0
- package/dist/ui/src/components/edyn/time-field/time-field.js.map +1 -0
- package/dist/ui/src/components/edyn/time-field/time-field.test.d.ts +8 -0
- package/dist/ui/src/components/edyn/video-player/video-player.d.ts +2 -2
- package/dist/ui/src/components/edyn/video-player/video-player.js +132 -0
- package/dist/ui/src/components/edyn/video-player/video-player.js.map +1 -0
- package/dist/ui/src/components/forwarded-props.test.d.ts +8 -0
- package/dist/ui/src/components/ui/accordion/accordion.d.ts +9 -8
- package/dist/ui/src/components/ui/accordion/accordion.js +83 -0
- package/dist/ui/src/components/ui/accordion/accordion.js.map +1 -0
- package/dist/ui/src/components/ui/alert/alert.js +47 -0
- package/dist/ui/src/components/ui/alert/alert.js.map +1 -0
- package/dist/ui/src/components/ui/alert-dialog/alert-dialog.js +97 -0
- package/dist/ui/src/components/ui/alert-dialog/alert-dialog.js.map +1 -0
- package/dist/ui/src/components/ui/aspect-ratio/aspect-ratio.js +15 -0
- package/dist/ui/src/components/ui/aspect-ratio/aspect-ratio.js.map +1 -0
- package/dist/ui/src/components/ui/attachment/attachment.d.ts +1 -1
- package/dist/ui/src/components/ui/attachment/attachment.js +105 -0
- package/dist/ui/src/components/ui/attachment/attachment.js.map +1 -0
- package/dist/ui/src/components/ui/avatar/avatar.js +51 -0
- package/dist/ui/src/components/ui/avatar/avatar.js.map +1 -0
- package/dist/ui/src/components/ui/badge/badge.d.ts +1 -1
- package/dist/ui/src/components/ui/badge/badge.js +47 -0
- package/dist/ui/src/components/ui/badge/badge.js.map +1 -0
- package/dist/ui/src/components/ui/breadcrumb/breadcrumb.js +73 -0
- package/dist/ui/src/components/ui/breadcrumb/breadcrumb.js.map +1 -0
- package/dist/ui/src/components/ui/bubble/bubble.js +74 -0
- package/dist/ui/src/components/ui/bubble/bubble.js.map +1 -0
- package/dist/ui/src/components/ui/button/button.behavior.test.d.ts +8 -0
- package/dist/ui/src/components/ui/button/button.d.ts +1 -1
- package/dist/ui/src/components/ui/button/button.js +68 -0
- package/dist/ui/src/components/ui/button/button.js.map +1 -0
- package/dist/ui/src/components/ui/button-group/button-group.js +37 -0
- package/dist/ui/src/components/ui/button-group/button-group.js.map +1 -0
- package/dist/ui/src/components/ui/calendar/calendar.behavior.test.d.ts +9 -0
- package/dist/ui/src/components/ui/calendar/calendar.d.ts +1 -1
- package/dist/ui/src/components/ui/calendar/calendar.js +141 -0
- package/dist/ui/src/components/ui/calendar/calendar.js.map +1 -0
- package/dist/ui/src/components/ui/card/card.js +57 -0
- package/dist/ui/src/components/ui/card/card.js.map +1 -0
- package/dist/ui/src/components/ui/carousel/carousel.js +136 -0
- package/dist/ui/src/components/ui/carousel/carousel.js.map +1 -0
- package/dist/ui/src/components/ui/chart/chart.js +168 -0
- package/dist/ui/src/components/ui/chart/chart.js.map +1 -0
- package/dist/ui/src/components/ui/checkbox/checkbox.js +21 -0
- package/dist/ui/src/components/ui/checkbox/checkbox.js.map +1 -0
- package/dist/ui/src/components/ui/collapsible/collapsible.js +26 -0
- package/dist/ui/src/components/ui/collapsible/collapsible.js.map +1 -0
- package/dist/ui/src/components/ui/combobox/combobox.d.ts +15 -1
- package/dist/ui/src/components/ui/combobox/combobox.js +111 -0
- package/dist/ui/src/components/ui/combobox/combobox.js.map +1 -0
- package/dist/ui/src/components/ui/command/command.d.ts +17 -1
- package/dist/ui/src/components/ui/command/command.js +118 -0
- package/dist/ui/src/components/ui/command/command.js.map +1 -0
- package/dist/ui/src/components/ui/context-menu/context-menu.d.ts +1 -1
- package/dist/ui/src/components/ui/context-menu/context-menu.js +145 -0
- package/dist/ui/src/components/ui/context-menu/context-menu.js.map +1 -0
- package/dist/ui/src/components/ui/dialog/dialog.js +94 -0
- package/dist/ui/src/components/ui/dialog/dialog.js.map +1 -0
- package/dist/ui/src/components/ui/direction/direction.js +2 -0
- package/dist/ui/src/components/ui/drawer/drawer.js +88 -0
- package/dist/ui/src/components/ui/drawer/drawer.js.map +1 -0
- package/dist/ui/src/components/ui/dropdown-menu/dropdown-menu.d.ts +12 -1
- package/dist/ui/src/components/ui/dropdown-menu/dropdown-menu.js +159 -0
- package/dist/ui/src/components/ui/dropdown-menu/dropdown-menu.js.map +1 -0
- package/dist/ui/src/components/ui/empty/empty.d.ts +5 -1
- package/dist/ui/src/components/ui/empty/empty.js +72 -0
- package/dist/ui/src/components/ui/empty/empty.js.map +1 -0
- package/dist/ui/src/components/ui/field/field.js +36 -0
- package/dist/ui/src/components/ui/field/field.js.map +1 -0
- package/dist/ui/src/components/ui/hover-card/hover-card.js +39 -0
- package/dist/ui/src/components/ui/hover-card/hover-card.js.map +1 -0
- package/dist/ui/src/components/ui/indicator/indicator.js +79 -0
- package/dist/ui/src/components/ui/indicator/indicator.js.map +1 -0
- package/dist/ui/src/components/ui/input/input.js +16 -0
- package/dist/ui/src/components/ui/input/input.js.map +1 -0
- package/dist/ui/src/components/ui/input-group/input-group.d.ts +1 -1
- package/dist/ui/src/components/ui/input-group/input-group.js +77 -0
- package/dist/ui/src/components/ui/input-group/input-group.js.map +1 -0
- package/dist/ui/src/components/ui/input-otp/input-otp.js +48 -0
- package/dist/ui/src/components/ui/input-otp/input-otp.js.map +1 -0
- package/dist/ui/src/components/ui/item/item.d.ts +1 -1
- package/dist/ui/src/components/ui/item/item.js +122 -0
- package/dist/ui/src/components/ui/item/item.js.map +1 -0
- package/dist/ui/src/components/ui/kbd/kbd.js +21 -0
- package/dist/ui/src/components/ui/kbd/kbd.js.map +1 -0
- package/dist/ui/src/components/ui/label/label.js +14 -0
- package/dist/ui/src/components/ui/label/label.js.map +1 -0
- package/dist/ui/src/components/ui/marker/marker.js +44 -0
- package/dist/ui/src/components/ui/marker/marker.js.map +1 -0
- package/dist/ui/src/components/ui/menubar/menubar.js +140 -0
- package/dist/ui/src/components/ui/menubar/menubar.js.map +1 -0
- package/dist/ui/src/components/ui/message/message.js +50 -0
- package/dist/ui/src/components/ui/message/message.js.map +1 -0
- package/dist/ui/src/components/ui/message-scroller/message-scroller.js +61 -0
- package/dist/ui/src/components/ui/message-scroller/message-scroller.js.map +1 -0
- package/dist/ui/src/components/ui/native-select/native-select.js +39 -0
- package/dist/ui/src/components/ui/native-select/native-select.js.map +1 -0
- package/dist/ui/src/components/ui/navigation-menu/navigation-menu.js +87 -0
- package/dist/ui/src/components/ui/navigation-menu/navigation-menu.js.map +1 -0
- package/dist/ui/src/components/ui/pagination/pagination.d.ts +3 -2
- package/dist/ui/src/components/ui/pagination/pagination.js +104 -0
- package/dist/ui/src/components/ui/pagination/pagination.js.map +1 -0
- package/dist/ui/src/components/ui/popover/popover.d.ts +1 -1
- package/dist/ui/src/components/ui/popover/popover.js +59 -0
- package/dist/ui/src/components/ui/popover/popover.js.map +1 -0
- package/dist/ui/src/components/ui/progress/progress.behavior.test.d.ts +8 -0
- package/dist/ui/src/components/ui/progress/progress.d.ts +43 -1
- package/dist/ui/src/components/ui/progress/progress.js +70 -0
- package/dist/ui/src/components/ui/progress/progress.js.map +1 -0
- package/dist/ui/src/components/ui/questionnaire/questionnaire.js +171 -0
- package/dist/ui/src/components/ui/questionnaire/questionnaire.js.map +1 -0
- package/dist/ui/src/components/ui/radio-group/radio-group.js +29 -0
- package/dist/ui/src/components/ui/radio-group/radio-group.js.map +1 -0
- package/dist/ui/src/components/ui/resizable/resizable.js +29 -0
- package/dist/ui/src/components/ui/resizable/resizable.js.map +1 -0
- package/dist/ui/src/components/ui/scroll-area/index.d.ts +1 -0
- package/dist/ui/src/components/ui/scroll-area/popup-list-scroll.d.ts +13 -0
- package/dist/ui/src/components/ui/scroll-area/popup-list-scroll.js +69 -0
- package/dist/ui/src/components/ui/scroll-area/popup-list-scroll.js.map +1 -0
- package/dist/ui/src/components/ui/scroll-area/scroll-area.behavior.test.d.ts +12 -0
- package/dist/ui/src/components/ui/scroll-area/scroll-area.d.ts +57 -6
- package/dist/ui/src/components/ui/scroll-area/scroll-area.js +125 -0
- package/dist/ui/src/components/ui/scroll-area/scroll-area.js.map +1 -0
- package/dist/ui/src/components/ui/select/select.js +97 -0
- package/dist/ui/src/components/ui/select/select.js.map +1 -0
- package/dist/ui/src/components/ui/separator/separator.behavior.test.d.ts +14 -0
- package/dist/ui/src/components/ui/separator/separator.d.ts +14 -0
- package/dist/ui/src/components/ui/separator/separator.js +30 -0
- package/dist/ui/src/components/ui/separator/separator.js.map +1 -0
- package/dist/ui/src/components/ui/sheet/sheet.d.ts +8 -0
- package/dist/ui/src/components/ui/sheet/sheet.js +99 -0
- package/dist/ui/src/components/ui/sheet/sheet.js.map +1 -0
- package/dist/ui/src/components/ui/sidebar/sidebar.js +383 -0
- package/dist/ui/src/components/ui/sidebar/sidebar.js.map +1 -0
- package/dist/ui/src/components/ui/skeleton/skeleton.js +14 -0
- package/dist/ui/src/components/ui/skeleton/skeleton.js.map +1 -0
- package/dist/ui/src/components/ui/slider/slider.js +49 -0
- package/dist/ui/src/components/ui/slider/slider.js.map +1 -0
- package/dist/ui/src/components/ui/spinner/spinner.js +28 -0
- package/dist/ui/src/components/ui/spinner/spinner.js.map +1 -0
- package/dist/ui/src/components/ui/switch/switch.js +20 -0
- package/dist/ui/src/components/ui/switch/switch.js.map +1 -0
- package/dist/ui/src/components/ui/table/table.behavior.test.d.ts +4 -5
- package/dist/ui/src/components/ui/table/table.d.ts +15 -1
- package/dist/ui/src/components/ui/table/table.js +81 -0
- package/dist/ui/src/components/ui/table/table.js.map +1 -0
- package/dist/ui/src/components/ui/tabs/tabs.d.ts +14 -8
- package/dist/ui/src/components/ui/tabs/tabs.js +115 -0
- package/dist/ui/src/components/ui/tabs/tabs.js.map +1 -0
- package/dist/ui/src/components/ui/textarea/textarea.js +14 -0
- package/dist/ui/src/components/ui/textarea/textarea.js.map +1 -0
- package/dist/ui/src/components/ui/toast/toast.js +124 -0
- package/dist/ui/src/components/ui/toast/toast.js.map +1 -0
- package/dist/ui/src/components/ui/toggle/toggle.js +37 -0
- package/dist/ui/src/components/ui/toggle/toggle.js.map +1 -0
- package/dist/ui/src/components/ui/toggle-group/toggle-group.js +56 -0
- package/dist/ui/src/components/ui/toggle-group/toggle-group.js.map +1 -0
- package/dist/ui/src/components/ui/tooltip/tooltip.js +43 -0
- package/dist/ui/src/components/ui/tooltip/tooltip.js.map +1 -0
- package/dist/ui/src/hooks/use-holds-focusable.d.ts +3 -0
- package/dist/ui/src/hooks/use-holds-focusable.js +33 -0
- package/dist/ui/src/hooks/use-holds-focusable.js.map +1 -0
- package/dist/ui/src/hooks/use-media-player.js +140 -0
- package/dist/ui/src/hooks/use-media-player.js.map +1 -0
- package/dist/ui/src/hooks/use-merged-refs.js +18 -0
- package/dist/ui/src/hooks/use-merged-refs.js.map +1 -0
- package/dist/ui/src/hooks/use-mobile.js +20 -0
- package/dist/ui/src/hooks/use-mobile.js.map +1 -0
- package/dist/ui/src/index.d.ts +8 -0
- package/dist/ui/src/lib/first-weekday.d.ts +6 -0
- package/dist/ui/src/lib/first-weekday.js +34 -0
- package/dist/ui/src/lib/first-weekday.js.map +1 -0
- package/dist/ui/src/lib/focus-guards.d.ts +2 -0
- package/dist/ui/src/lib/focus-guards.js +44 -0
- package/dist/ui/src/lib/focus-guards.js.map +1 -0
- package/dist/ui/src/lib/focus-ring.test.d.ts +8 -0
- package/dist/ui/src/lib/popup-list.d.ts +75 -0
- package/dist/ui/src/lib/popup-list.js +48 -0
- package/dist/ui/src/lib/popup-list.js.map +1 -0
- package/dist/ui/src/lib/popup-list.test.d.ts +10 -0
- package/dist/ui/src/lib/utils.js +21 -0
- package/dist/ui/src/lib/utils.js.map +1 -0
- package/package.json +36 -8
- package/dist/chunks/toggle-group-ByNq8g7H.js +0 -4263
- package/dist/chunks/toggle-group-ByNq8g7H.js.map +0 -1
- package/dist/dom/src/context.d.ts +0 -34
- package/dist/dom/src/define-element.d.ts +0 -11
- package/dist/dom/src/field-control.d.ts +0 -5
- package/dist/dom/src/index.d.ts +0 -6
- package/dist/dom/src/mode.d.ts +0 -8
- package/dist/dom/src/styles.d.ts +0 -6
- package/dist/dom/src/theme-state.d.ts +0 -1
- package/dist/dom/src/types.d.ts +0 -65
- package/dist/ds/src/elements.d.ts +0 -12
- package/dist/elements/src/edx-accordion.d.ts +0 -14
- package/dist/elements/src/edx-accordion.test.d.ts +0 -1
- package/dist/elements/src/edx-alert.d.ts +0 -14
- package/dist/elements/src/edx-audio-player.d.ts +0 -11
- package/dist/elements/src/edx-avatar.d.ts +0 -10
- package/dist/elements/src/edx-badge.d.ts +0 -12
- package/dist/elements/src/edx-breadcrumb.d.ts +0 -11
- package/dist/elements/src/edx-button-group.d.ts +0 -7
- package/dist/elements/src/edx-button.d.ts +0 -20
- package/dist/elements/src/edx-calendar.d.ts +0 -21
- package/dist/elements/src/edx-card.d.ts +0 -8
- package/dist/elements/src/edx-checkbox.d.ts +0 -18
- package/dist/elements/src/edx-combobox.d.ts +0 -28
- package/dist/elements/src/edx-content-components.d.ts +0 -2
- package/dist/elements/src/edx-dialog.d.ts +0 -20
- package/dist/elements/src/edx-drawer.d.ts +0 -21
- package/dist/elements/src/edx-dropdown-menu.d.ts +0 -29
- package/dist/elements/src/edx-field.d.ts +0 -9
- package/dist/elements/src/edx-field.test.d.ts +0 -1
- package/dist/elements/src/edx-indicator.d.ts +0 -14
- package/dist/elements/src/edx-input-group.d.ts +0 -32
- package/dist/elements/src/edx-input-otp.d.ts +0 -19
- package/dist/elements/src/edx-input.d.ts +0 -31
- package/dist/elements/src/edx-interactive-components.d.ts +0 -2
- package/dist/elements/src/edx-label.d.ts +0 -6
- package/dist/elements/src/edx-pagination.d.ts +0 -8
- package/dist/elements/src/edx-popover.d.ts +0 -24
- package/dist/elements/src/edx-progress.d.ts +0 -10
- package/dist/elements/src/edx-radio-group.d.ts +0 -22
- package/dist/elements/src/edx-radio-group.test.d.ts +0 -1
- package/dist/elements/src/edx-scroll-area.d.ts +0 -15
- package/dist/elements/src/edx-scroll-area.test.d.ts +0 -1
- package/dist/elements/src/edx-select.d.ts +0 -34
- package/dist/elements/src/edx-separator.d.ts +0 -10
- package/dist/elements/src/edx-skeleton.d.ts +0 -8
- package/dist/elements/src/edx-slider.d.ts +0 -17
- package/dist/elements/src/edx-slider.test.d.ts +0 -1
- package/dist/elements/src/edx-switch.d.ts +0 -18
- package/dist/elements/src/edx-table.d.ts +0 -13
- package/dist/elements/src/edx-table.test.d.ts +0 -1
- package/dist/elements/src/edx-tabs.d.ts +0 -15
- package/dist/elements/src/edx-tabs.test.d.ts +0 -1
- package/dist/elements/src/edx-textarea.d.ts +0 -25
- package/dist/elements/src/edx-toggle-group.d.ts +0 -27
- package/dist/elements/src/edx-toggle-group.test.d.ts +0 -1
- package/dist/elements/src/edx-toggle.d.ts +0 -18
- package/dist/elements/src/edx-tooltip.d.ts +0 -28
- package/dist/elements/src/edx-video-player.d.ts +0 -16
- package/dist/elements/src/field-control-bridge.d.ts +0 -7
- package/dist/elements/src/index.d.ts +0 -14
- package/dist/elements/src/projected-content.test.d.ts +0 -1
- package/dist/elements/src/registry.d.ts +0 -39
- package/dist/elements/src/registry.test.d.ts +0 -1
- package/dist/elements.js +0 -4020
- package/dist/elements.js.map +0 -1
- /package/dist/{dom/src/define-element.test.d.ts → ui/src/components/edyn/date-picker/date-text.test.d.ts} +0 -0
- /package/dist/{dom/src/native-slot.test.d.ts → ui/src/lib/first-weekday.test.d.ts} +0 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { cn } from "../../../lib/utils.js";
|
|
2
|
+
import { ScrollArea } from "../scroll-area/scroll-area.js";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
//#region ../ui/src/components/ui/table/table.tsx
|
|
5
|
+
/** `overflow-visible` (or its sideways form) among the classes: how a table has always switched its own scrolling off. */
|
|
6
|
+
var SCROLL_OFF = /(?:^|\s)overflow-(?:x-)?visible(?:\s|$)/;
|
|
7
|
+
var Table = ({ className, containerClassName, ...props }) => {
|
|
8
|
+
const table = /* @__PURE__ */ jsx("table", {
|
|
9
|
+
"data-slot": "table",
|
|
10
|
+
className: cn("w-full caption-bottom text-sm", className),
|
|
11
|
+
...props
|
|
12
|
+
});
|
|
13
|
+
return /* @__PURE__ */ jsx("div", {
|
|
14
|
+
"data-slot": "table-container",
|
|
15
|
+
"data-focus": "inset",
|
|
16
|
+
className: cn("relative w-full", containerClassName),
|
|
17
|
+
children: SCROLL_OFF.test(containerClassName ?? "") ? table : /* @__PURE__ */ jsx(ScrollArea, {
|
|
18
|
+
orientation: "horizontal",
|
|
19
|
+
type: "always",
|
|
20
|
+
children: table
|
|
21
|
+
})
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* The header row names the columns, it is not a row to point at: TableRow's hover fill would make it light up like the data
|
|
26
|
+
* under it, and read as clickable. The rule sits here, one level above the row, so it holds for any row put in a header and
|
|
27
|
+
* outranks the row's own hover fill.
|
|
28
|
+
*/
|
|
29
|
+
var TableHeader = ({ className, ...props }) => {
|
|
30
|
+
return /* @__PURE__ */ jsx("thead", {
|
|
31
|
+
"data-slot": "table-header",
|
|
32
|
+
className: cn("[&_tr]:border-b [&_tr]:hover:bg-transparent", className),
|
|
33
|
+
...props
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
var TableBody = ({ className, ...props }) => {
|
|
37
|
+
return /* @__PURE__ */ jsx("tbody", {
|
|
38
|
+
"data-slot": "table-body",
|
|
39
|
+
className: cn("[&_tr:last-child]:border-0", className),
|
|
40
|
+
...props
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
var TableFooter = ({ className, ...props }) => {
|
|
44
|
+
return /* @__PURE__ */ jsx("tfoot", {
|
|
45
|
+
"data-slot": "table-footer",
|
|
46
|
+
className: cn("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0", className),
|
|
47
|
+
...props
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
var TableRow = ({ className, ...props }) => {
|
|
51
|
+
return /* @__PURE__ */ jsx("tr", {
|
|
52
|
+
"data-slot": "table-row",
|
|
53
|
+
className: cn("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted", className),
|
|
54
|
+
...props
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
var TableHead = ({ className, ...props }) => {
|
|
58
|
+
return /* @__PURE__ */ jsx("th", {
|
|
59
|
+
"data-slot": "table-head",
|
|
60
|
+
className: cn("h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0", className),
|
|
61
|
+
...props
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
var TableCell = ({ className, ...props }) => {
|
|
65
|
+
return /* @__PURE__ */ jsx("td", {
|
|
66
|
+
"data-slot": "table-cell",
|
|
67
|
+
className: cn("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0", className),
|
|
68
|
+
...props
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
var TableCaption = ({ className, ...props }) => {
|
|
72
|
+
return /* @__PURE__ */ jsx("caption", {
|
|
73
|
+
"data-slot": "table-caption",
|
|
74
|
+
className: cn("mt-4 text-sm text-muted-foreground", className),
|
|
75
|
+
...props
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
//#endregion
|
|
79
|
+
export { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow };
|
|
80
|
+
|
|
81
|
+
//# sourceMappingURL=table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","names":[],"sources":["../../../../../../../ui/src/components/ui/table/table.tsx"],"sourcesContent":["import { cn } from '@edyn/ui/lib/utils';\nimport type * as React from 'react';\nimport { ScrollArea } from '../scroll-area';\n\nexport interface ITableProps extends React.ComponentProps<'table'> {\n /**\n * The box around the table. A table wider than it scrolls sideways inside it, in a design system ScrollArea: the bar is the\n * kit's, not the browser's, and the room it takes at the foot is kept clear of the last row. `overflow-visible` turns that\n * scroll off, for a table whose page or parent scrolls it, or whose sticky header would otherwise stick to this box instead\n * of that one.\n */\n containerClassName?: string;\n}\n\n/** `overflow-visible` (or its sideways form) among the classes: how a table has always switched its own scrolling off. */\nconst SCROLL_OFF = /(?:^|\\s)overflow-(?:x-)?visible(?:\\s|$)/;\n\nexport const Table = ({ className, containerClassName, ...props }: ITableProps) => {\n const table = <table data-slot=\"table\" className={cn('w-full caption-bottom text-sm', className)} {...props} />;\n return (\n <div data-slot=\"table-container\" data-focus=\"inset\" className={cn('relative w-full', containerClassName)}>\n {SCROLL_OFF.test(containerClassName ?? '') ? (\n table\n ) : (\n // The bar stays on while the table overflows, as in the popup lists: scrolling a table sideways is otherwise\n // something a person finds out by accident.\n <ScrollArea orientation=\"horizontal\" type=\"always\">\n {table}\n </ScrollArea>\n )}\n </div>\n );\n};\n\n/**\n * The header row names the columns, it is not a row to point at: TableRow's hover fill would make it light up like the data\n * under it, and read as clickable. The rule sits here, one level above the row, so it holds for any row put in a header and\n * outranks the row's own hover fill.\n */\nexport const TableHeader = ({ className, ...props }: React.ComponentProps<'thead'>) => {\n return <thead data-slot=\"table-header\" className={cn('[&_tr]:border-b [&_tr]:hover:bg-transparent', className)} {...props} />;\n};\n\nexport const TableBody = ({ className, ...props }: React.ComponentProps<'tbody'>) => {\n return <tbody data-slot=\"table-body\" className={cn('[&_tr:last-child]:border-0', className)} {...props} />;\n};\n\nexport const TableFooter = ({ className, ...props }: React.ComponentProps<'tfoot'>) => {\n return <tfoot data-slot=\"table-footer\" className={cn('border-t bg-muted/50 font-medium [&>tr]:last:border-b-0', className)} {...props} />;\n};\n\nexport const TableRow = ({ className, ...props }: React.ComponentProps<'tr'>) => {\n return (\n <tr data-slot=\"table-row\" className={cn('border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted', className)} {...props} />\n );\n};\n\nexport const TableHead = ({ className, ...props }: React.ComponentProps<'th'>) => {\n return (\n <th\n data-slot=\"table-head\"\n className={cn('h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0', className)}\n {...props}\n />\n );\n};\n\nexport const TableCell = ({ className, ...props }: React.ComponentProps<'td'>) => {\n return <td data-slot=\"table-cell\" className={cn('p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0', className)} {...props} />;\n};\n\nexport const TableCaption = ({ className, ...props }: React.ComponentProps<'caption'>) => {\n return <caption data-slot=\"table-caption\" className={cn('mt-4 text-sm text-muted-foreground', className)} {...props} />;\n};\n"],"mappings":";;;;;AAeA,IAAM,aAAa;AAEnB,IAAa,SAAS,EAAE,WAAW,oBAAoB,GAAG,YAAyB;CACjF,MAAM,QAAQ,oBAAC,SAAD;EAAO,aAAU;EAAQ,WAAW,GAAG,iCAAiC,SAAS;EAAG,GAAI;CAAQ,CAAA;CAC9G,OACE,oBAAC,OAAD;EAAK,aAAU;EAAkB,cAAW;EAAQ,WAAW,GAAG,mBAAmB,kBAAkB;EACpG,UAAA,WAAW,KAAK,sBAAsB,EAAE,IACvC,QAIA,oBAAC,YAAD;GAAY,aAAY;GAAa,MAAK;GACvC,UAAA;EACS,CAAA;CAEX,CAAA;AAET;;;;;;AAOA,IAAa,eAAe,EAAE,WAAW,GAAG,YAA2C;CACrF,OAAO,oBAAC,SAAD;EAAO,aAAU;EAAe,WAAW,GAAG,+CAA+C,SAAS;EAAG,GAAI;CAAQ,CAAA;AAC9H;AAEA,IAAa,aAAa,EAAE,WAAW,GAAG,YAA2C;CACnF,OAAO,oBAAC,SAAD;EAAO,aAAU;EAAa,WAAW,GAAG,8BAA8B,SAAS;EAAG,GAAI;CAAQ,CAAA;AAC3G;AAEA,IAAa,eAAe,EAAE,WAAW,GAAG,YAA2C;CACrF,OAAO,oBAAC,SAAD;EAAO,aAAU;EAAe,WAAW,GAAG,2DAA2D,SAAS;EAAG,GAAI;CAAQ,CAAA;AAC1I;AAEA,IAAa,YAAY,EAAE,WAAW,GAAG,YAAwC;CAC/E,OACE,oBAAC,MAAD;EAAI,aAAU;EAAY,WAAW,GAAG,+EAA+E,SAAS;EAAG,GAAI;CAAQ,CAAA;AAEnJ;AAEA,IAAa,aAAa,EAAE,WAAW,GAAG,YAAwC;CAChF,OACE,oBAAC,MAAD;EACE,aAAU;EACV,WAAW,GAAG,gHAAgH,SAAS;EACvI,GAAI;CACL,CAAA;AAEL;AAEA,IAAa,aAAa,EAAE,WAAW,GAAG,YAAwC;CAChF,OAAO,oBAAC,MAAD;EAAI,aAAU;EAAa,WAAW,GAAG,oEAAoE,SAAS;EAAG,GAAI;CAAQ,CAAA;AAC9I;AAEA,IAAa,gBAAgB,EAAE,WAAW,GAAG,YAA6C;CACxF,OAAO,oBAAC,WAAD;EAAS,aAAU;EAAgB,WAAW,GAAG,sCAAsC,SAAS;EAAG,GAAI;CAAQ,CAAA;AACxH"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { Tabs as BaseTabs } from '@base-ui/react/tabs';
|
|
1
2
|
import { VariantProps } from 'class-variance-authority';
|
|
2
3
|
import type * as React from 'react';
|
|
3
|
-
export interface ITabsProps {
|
|
4
|
+
export interface ITabsProps extends Omit<BaseTabs.Root.Props, 'value' | 'defaultValue' | 'onValueChange' | 'className' | 'orientation' | 'children'> {
|
|
4
5
|
/** Controlled selected tab. Provide with `onValueChange`. */
|
|
5
6
|
value?: string;
|
|
6
7
|
/** Uncontrolled initial tab. Use this when the component should own its state. */
|
|
@@ -10,26 +11,31 @@ export interface ITabsProps {
|
|
|
10
11
|
orientation?: 'horizontal' | 'vertical';
|
|
11
12
|
children: React.ReactNode;
|
|
12
13
|
}
|
|
13
|
-
export declare const Tabs: ({ value, defaultValue, onValueChange, className, orientation, children }: ITabsProps) => React.JSX.Element;
|
|
14
|
+
export declare const Tabs: ({ value, defaultValue, onValueChange, className, orientation, children, ...props }: ITabsProps) => React.JSX.Element;
|
|
14
15
|
export declare const tabsListVariants: (props?: ({
|
|
15
16
|
variant?: "default" | "line" | null | undefined;
|
|
16
17
|
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
17
|
-
export interface ITabsListProps extends VariantProps<typeof tabsListVariants> {
|
|
18
|
+
export interface ITabsListProps extends VariantProps<typeof tabsListVariants>, Omit<BaseTabs.List.Props, 'className' | 'children'> {
|
|
18
19
|
className?: string;
|
|
19
20
|
children: React.ReactNode;
|
|
20
21
|
}
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
/**
|
|
23
|
+
* A row of tabs wider than its box scrolls sideways inside it, with a fade at each edge that hides tabs, and the selected tab
|
|
24
|
+
* (and the one holding focus) is scrolled into view. A vertical list is not wrapped.
|
|
25
|
+
*/
|
|
26
|
+
export declare const TabsList: ({ className, variant, children, ref, ...props }: ITabsListProps) => React.JSX.Element;
|
|
27
|
+
export interface ITabsTriggerProps extends Omit<BaseTabs.Tab.Props, 'value' | 'disabled' | 'className' | 'children'> {
|
|
23
28
|
value: string;
|
|
24
29
|
disabled?: boolean;
|
|
25
30
|
className?: string;
|
|
26
31
|
children: React.ReactNode;
|
|
27
32
|
}
|
|
28
|
-
export declare const TabsTrigger: ({ value, disabled, className, children }: ITabsTriggerProps) => React.JSX.Element;
|
|
29
|
-
export interface ITabsContentProps {
|
|
33
|
+
export declare const TabsTrigger: ({ value, disabled, className, children, ...props }: ITabsTriggerProps) => React.JSX.Element;
|
|
34
|
+
export interface ITabsContentProps extends Omit<BaseTabs.Panel.Props, 'value' | 'keepMounted' | 'className' | 'children'> {
|
|
30
35
|
value: string;
|
|
31
36
|
keepMounted?: boolean;
|
|
32
37
|
className?: string;
|
|
33
38
|
children: React.ReactNode;
|
|
34
39
|
}
|
|
35
|
-
|
|
40
|
+
/** A panel takes Tab only when nothing inside it can, and then shows a 1px line inside its edge (focus.css). */
|
|
41
|
+
export declare const TabsContent: ({ value, keepMounted, className, children, ref, ...props }: ITabsContentProps) => React.JSX.Element;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { cn } from "../../../lib/utils.js";
|
|
2
|
+
import { useHoldsFocusable } from "../../../hooks/use-holds-focusable.js";
|
|
3
|
+
import { useMergedRefs } from "../../../hooks/use-merged-refs.js";
|
|
4
|
+
import { ScrollArea } from "../scroll-area/scroll-area.js";
|
|
5
|
+
import { createContext, useContext, useEffect, useRef } from "react";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
import { cva } from "class-variance-authority";
|
|
8
|
+
import { Tabs } from "@base-ui/react/tabs";
|
|
9
|
+
//#region ../ui/src/components/ui/tabs/tabs.tsx
|
|
10
|
+
var OrientationContext = createContext("horizontal");
|
|
11
|
+
var Tabs$1 = ({ value, defaultValue, onValueChange, className, orientation = "horizontal", children, ...props }) => /* @__PURE__ */ jsx(Tabs.Root, {
|
|
12
|
+
"data-slot": "tabs",
|
|
13
|
+
...props,
|
|
14
|
+
"data-orientation": orientation,
|
|
15
|
+
value,
|
|
16
|
+
defaultValue,
|
|
17
|
+
orientation,
|
|
18
|
+
onValueChange: (next) => {
|
|
19
|
+
onValueChange?.(String(next));
|
|
20
|
+
},
|
|
21
|
+
className: cn("group/tabs flex w-full gap-2 data-[orientation=horizontal]:flex-col", className),
|
|
22
|
+
children: /* @__PURE__ */ jsx(OrientationContext, {
|
|
23
|
+
value: orientation,
|
|
24
|
+
children
|
|
25
|
+
})
|
|
26
|
+
});
|
|
27
|
+
var tabsListVariants = cva("group/tabs-list flex w-fit items-center group-data-[orientation=horizontal]/tabs:min-w-max justify-center rounded-lg p-[3px] text-muted-foreground group-data-[orientation=horizontal]/tabs:h-8 group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col data-[variant=line]:rounded-none", {
|
|
28
|
+
variants: { variant: {
|
|
29
|
+
default: "bg-muted",
|
|
30
|
+
line: "gap-1 bg-transparent"
|
|
31
|
+
} },
|
|
32
|
+
defaultVariants: { variant: "default" }
|
|
33
|
+
});
|
|
34
|
+
/** Room kept between a tab and the edge it is scrolled to: the 24px edge fade and a little more. */
|
|
35
|
+
var REVEAL_MARGIN = 32;
|
|
36
|
+
/** Scrolls a list sideways, inside its viewport only, until a tab stands clear of both edge fades. */
|
|
37
|
+
var reveal = (viewport, tab) => {
|
|
38
|
+
if (!tab) return;
|
|
39
|
+
const edge = viewport.getBoundingClientRect();
|
|
40
|
+
const box = tab.getBoundingClientRect();
|
|
41
|
+
if (box.left < edge.left + REVEAL_MARGIN) viewport.scrollBy({ left: box.left - edge.left - REVEAL_MARGIN });
|
|
42
|
+
else if (box.right > edge.right - REVEAL_MARGIN) viewport.scrollBy({ left: box.right - edge.right + REVEAL_MARGIN });
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* A row of tabs wider than its box scrolls sideways inside it, with a fade at each edge that hides tabs, and the selected tab
|
|
46
|
+
* (and the one holding focus) is scrolled into view. A vertical list is not wrapped.
|
|
47
|
+
*/
|
|
48
|
+
var TabsList = ({ className, variant = "default", children, ref, ...props }) => {
|
|
49
|
+
const horizontal = useContext(OrientationContext) === "horizontal";
|
|
50
|
+
const refViewport = useRef(null);
|
|
51
|
+
const refList = useRef(null);
|
|
52
|
+
const refs = useMergedRefs(refList, ref);
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
const viewport = refViewport.current;
|
|
55
|
+
const list = refList.current;
|
|
56
|
+
if (!horizontal || !viewport || !list) return;
|
|
57
|
+
const revealSelected = () => reveal(viewport, list.querySelector("[aria-selected=\"true\"]"));
|
|
58
|
+
const revealFocused = (event) => reveal(viewport, event.target.closest("[role=\"tab\"]"));
|
|
59
|
+
revealSelected();
|
|
60
|
+
const observer = new MutationObserver(revealSelected);
|
|
61
|
+
observer.observe(list, {
|
|
62
|
+
subtree: true,
|
|
63
|
+
attributes: true,
|
|
64
|
+
attributeFilter: ["aria-selected"]
|
|
65
|
+
});
|
|
66
|
+
list.addEventListener("focusin", revealFocused);
|
|
67
|
+
return () => {
|
|
68
|
+
observer.disconnect();
|
|
69
|
+
list.removeEventListener("focusin", revealFocused);
|
|
70
|
+
};
|
|
71
|
+
}, [horizontal]);
|
|
72
|
+
const list = /* @__PURE__ */ jsx(Tabs.List, {
|
|
73
|
+
"data-slot": "tabs-list",
|
|
74
|
+
...props,
|
|
75
|
+
"data-variant": variant,
|
|
76
|
+
ref: refs,
|
|
77
|
+
className: cn(tabsListVariants({ variant }), className),
|
|
78
|
+
children
|
|
79
|
+
});
|
|
80
|
+
return horizontal ? /* @__PURE__ */ jsx(ScrollArea, {
|
|
81
|
+
orientation: "horizontal",
|
|
82
|
+
fade: true,
|
|
83
|
+
viewportRef: refViewport,
|
|
84
|
+
children: list
|
|
85
|
+
}) : list;
|
|
86
|
+
};
|
|
87
|
+
var TabsTrigger = ({ value, disabled, className, children, ...props }) => /* @__PURE__ */ jsx(Tabs.Tab, {
|
|
88
|
+
...props,
|
|
89
|
+
value,
|
|
90
|
+
disabled,
|
|
91
|
+
className: cn("relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start hover:text-foreground focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 dark:text-muted-foreground dark:hover:text-foreground group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\"size-\"])]:size-4", "group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent", "data-active:bg-background data-active:text-foreground dark:data-active:border-control dark:data-active:bg-input/30 dark:data-active:text-foreground", "after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100", className),
|
|
92
|
+
children
|
|
93
|
+
});
|
|
94
|
+
/** Base UI makes every open panel a tab stop; undefined takes that away. */
|
|
95
|
+
var NO_TAB_STOP = { tabIndex: void 0 };
|
|
96
|
+
/** A panel takes Tab only when nothing inside it can, and then shows a 1px line inside its edge (focus.css). */
|
|
97
|
+
var TabsContent = ({ value, keepMounted = false, className, children, ref, ...props }) => {
|
|
98
|
+
const refPanel = useRef(null);
|
|
99
|
+
const refs = useMergedRefs(refPanel, ref);
|
|
100
|
+
const holdsFocusable = useHoldsFocusable(refPanel);
|
|
101
|
+
return /* @__PURE__ */ jsx(Tabs.Panel, {
|
|
102
|
+
"data-slot": "tabs-content",
|
|
103
|
+
...holdsFocusable ? NO_TAB_STOP : null,
|
|
104
|
+
...props,
|
|
105
|
+
ref: refs,
|
|
106
|
+
value,
|
|
107
|
+
keepMounted,
|
|
108
|
+
className: cn("flex-1 text-sm outline-none", className),
|
|
109
|
+
children
|
|
110
|
+
});
|
|
111
|
+
};
|
|
112
|
+
//#endregion
|
|
113
|
+
export { Tabs$1 as Tabs, TabsContent, TabsList, TabsTrigger, tabsListVariants };
|
|
114
|
+
|
|
115
|
+
//# sourceMappingURL=tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs.js","names":[],"sources":["../../../../../../../ui/src/components/ui/tabs/tabs.tsx"],"sourcesContent":["import { Tabs as BaseTabs } from '@base-ui/react/tabs';\nimport { ScrollArea } from '@edyn/ui/components/ui/scroll-area';\nimport { useHoldsFocusable } from '@edyn/ui/hooks/use-holds-focusable';\nimport { useMergedRefs } from '@edyn/ui/hooks/use-merged-refs';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport type * as React from 'react';\nimport { createContext, useContext, useEffect, useRef } from 'react';\n\nexport interface ITabsProps extends Omit<BaseTabs.Root.Props, 'value' | 'defaultValue' | 'onValueChange' | 'className' | 'orientation' | 'children'> {\n /** Controlled selected tab. Provide with `onValueChange`. */\n value?: string;\n /** Uncontrolled initial tab. Use this when the component should own its state. */\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n className?: string;\n orientation?: 'horizontal' | 'vertical';\n children: React.ReactNode;\n}\n\nconst OrientationContext = createContext<'horizontal' | 'vertical'>('horizontal');\n\nexport const Tabs = ({ value, defaultValue, onValueChange, className, orientation = 'horizontal', children, ...props }: ITabsProps) => (\n <BaseTabs.Root\n data-slot=\"tabs\"\n {...props}\n data-orientation={orientation}\n value={value}\n defaultValue={defaultValue}\n orientation={orientation}\n onValueChange={(next) => {\n onValueChange?.(String(next));\n }}\n className={cn('group/tabs flex w-full gap-2 data-[orientation=horizontal]:flex-col', className)}\n >\n <OrientationContext value={orientation}>{children}</OrientationContext>\n </BaseTabs.Root>\n);\n\nexport const tabsListVariants = cva(\n 'group/tabs-list flex w-fit items-center group-data-[orientation=horizontal]/tabs:min-w-max justify-center rounded-lg p-[3px] text-muted-foreground group-data-[orientation=horizontal]/tabs:h-8 group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col data-[variant=line]:rounded-none',\n {\n variants: {\n variant: {\n default: 'bg-muted',\n line: 'gap-1 bg-transparent',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nexport interface ITabsListProps extends VariantProps<typeof tabsListVariants>, Omit<BaseTabs.List.Props, 'className' | 'children'> {\n className?: string;\n children: React.ReactNode;\n}\n\n/** Room kept between a tab and the edge it is scrolled to: the 24px edge fade and a little more. */\nconst REVEAL_MARGIN = 32;\n\n/** Scrolls a list sideways, inside its viewport only, until a tab stands clear of both edge fades. */\nconst reveal = (viewport: HTMLElement, tab: Element | null) => {\n if (!tab) {\n return;\n }\n const edge = viewport.getBoundingClientRect();\n const box = tab.getBoundingClientRect();\n if (box.left < edge.left + REVEAL_MARGIN) {\n viewport.scrollBy({ left: box.left - edge.left - REVEAL_MARGIN });\n } else if (box.right > edge.right - REVEAL_MARGIN) {\n viewport.scrollBy({ left: box.right - edge.right + REVEAL_MARGIN });\n }\n};\n\n/**\n * A row of tabs wider than its box scrolls sideways inside it, with a fade at each edge that hides tabs, and the selected tab\n * (and the one holding focus) is scrolled into view. A vertical list is not wrapped.\n */\nexport const TabsList = ({ className, variant = 'default', children, ref, ...props }: ITabsListProps) => {\n const horizontal = useContext(OrientationContext) === 'horizontal';\n const refViewport = useRef<HTMLDivElement | null>(null);\n const refList = useRef<HTMLDivElement | null>(null);\n const refs = useMergedRefs(refList, ref);\n\n useEffect(() => {\n const viewport = refViewport.current;\n const list = refList.current;\n if (!horizontal || !viewport || !list) {\n return;\n }\n const revealSelected = () => reveal(viewport, list.querySelector('[aria-selected=\"true\"]'));\n const revealFocused = (event: FocusEvent) => reveal(viewport, (event.target as Element).closest('[role=\"tab\"]'));\n revealSelected();\n const observer = new MutationObserver(revealSelected);\n observer.observe(list, { subtree: true, attributes: true, attributeFilter: ['aria-selected'] });\n list.addEventListener('focusin', revealFocused);\n return () => {\n observer.disconnect();\n list.removeEventListener('focusin', revealFocused);\n };\n }, [horizontal]);\n\n const list = (\n <BaseTabs.List data-slot=\"tabs-list\" {...props} data-variant={variant} ref={refs} className={cn(tabsListVariants({ variant }), className)}>\n {children}\n </BaseTabs.List>\n );\n return horizontal ? (\n <ScrollArea orientation=\"horizontal\" fade viewportRef={refViewport}>\n {list}\n </ScrollArea>\n ) : (\n list\n );\n};\n\nexport interface ITabsTriggerProps extends Omit<BaseTabs.Tab.Props, 'value' | 'disabled' | 'className' | 'children'> {\n value: string;\n disabled?: boolean;\n className?: string;\n children: React.ReactNode;\n}\n\nexport const TabsTrigger = ({ value, disabled, className, children, ...props }: ITabsTriggerProps) => (\n <BaseTabs.Tab\n {...props}\n value={value}\n disabled={disabled}\n className={cn(\n 'relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start hover:text-foreground focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 dark:text-muted-foreground dark:hover:text-foreground group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\"size-\"])]:size-4',\n 'group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent',\n 'data-active:bg-background data-active:text-foreground dark:data-active:border-control dark:data-active:bg-input/30 dark:data-active:text-foreground',\n 'after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100',\n className,\n )}\n >\n {children}\n </BaseTabs.Tab>\n);\n\nexport interface ITabsContentProps extends Omit<BaseTabs.Panel.Props, 'value' | 'keepMounted' | 'className' | 'children'> {\n value: string;\n keepMounted?: boolean;\n className?: string;\n children: React.ReactNode;\n}\n\n/** Base UI makes every open panel a tab stop; undefined takes that away. */\nconst NO_TAB_STOP = { tabIndex: undefined } as const;\n\n/** A panel takes Tab only when nothing inside it can, and then shows a 1px line inside its edge (focus.css). */\nexport const TabsContent = ({ value, keepMounted = false, className, children, ref, ...props }: ITabsContentProps) => {\n const refPanel = useRef<HTMLDivElement | null>(null);\n const refs = useMergedRefs(refPanel, ref);\n const holdsFocusable = useHoldsFocusable(refPanel);\n return (\n <BaseTabs.Panel\n data-slot=\"tabs-content\"\n {...(holdsFocusable ? NO_TAB_STOP : null)}\n {...props}\n ref={refs}\n value={value}\n keepMounted={keepMounted}\n className={cn('flex-1 text-sm outline-none', className)}\n >\n {children}\n </BaseTabs.Panel>\n );\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { cn } from "../../../lib/utils.js";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
//#region ../ui/src/components/ui/textarea/textarea.tsx
|
|
4
|
+
var Textarea = ({ className, ...props }) => {
|
|
5
|
+
return /* @__PURE__ */ jsx("textarea", {
|
|
6
|
+
"data-slot": "textarea",
|
|
7
|
+
className: cn("block min-h-16 w-full min-w-0 rounded-lg border border-control bg-transparent px-2.5 py-1.5 text-base transition-colors outline-none placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 field-sizing-content resize-none md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40", className),
|
|
8
|
+
...props
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
//#endregion
|
|
12
|
+
export { Textarea };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=textarea.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textarea.js","names":[],"sources":["../../../../../../../ui/src/components/ui/textarea/textarea.tsx"],"sourcesContent":["import { cn } from '@edyn/ui/lib/utils';\nimport type * as React from 'react';\n\nexport const Textarea = ({ className, ...props }: React.ComponentProps<'textarea'>) => {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n 'block min-h-16 w-full min-w-0 rounded-lg border border-control bg-transparent px-2.5 py-1.5 text-base transition-colors outline-none placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 field-sizing-content resize-none md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40',\n className,\n )}\n {...props}\n />\n );\n};\n"],"mappings":";;;AAGA,IAAa,YAAY,EAAE,WAAW,GAAG,YAA8C;CACrF,OACE,oBAAC,YAAD;EACE,aAAU;EACV,WAAW,GACT,sgBACA,SACF;EACA,GAAI;CACL,CAAA;AAEL"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "../../../lib/utils.js";
|
|
3
|
+
import { Button } from "../button/button.js";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { IconAlertOctagon, IconAlertTriangle, IconCircleCheck, IconInfoCircle, IconLoader, IconX } from "@tabler/icons-react";
|
|
6
|
+
import { Toast } from "@base-ui/react/toast";
|
|
7
|
+
//#region ../ui/src/components/ui/toast/toast.tsx
|
|
8
|
+
var toast = Toast.createToastManager();
|
|
9
|
+
var ToastProvider = ({ ...props }) => {
|
|
10
|
+
return /* @__PURE__ */ jsx(Toast.Provider, { ...props });
|
|
11
|
+
};
|
|
12
|
+
var ToastPortal = ({ ...props }) => {
|
|
13
|
+
return /* @__PURE__ */ jsx(Toast.Portal, {
|
|
14
|
+
"data-slot": "toast-portal",
|
|
15
|
+
...props
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
var ToastViewport = ({ className, ...props }) => {
|
|
19
|
+
return /* @__PURE__ */ jsx(Toast.Viewport, {
|
|
20
|
+
"data-slot": "toast-viewport",
|
|
21
|
+
className: cn("pointer-events-none fixed inset-x-4 bottom-4 z-50 mx-auto w-auto max-w-sm outline-none sm:right-4 sm:left-auto sm:mx-0 sm:w-full", className),
|
|
22
|
+
...props
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
var Toast$1 = ({ className, ...props }) => {
|
|
26
|
+
return /* @__PURE__ */ jsx(Toast.Root, {
|
|
27
|
+
"data-slot": "toast",
|
|
28
|
+
className: cn("group/toast pointer-events-auto absolute right-0 bottom-0 z-[calc(1000-var(--toast-index))] w-full origin-bottom rounded-2xl border bg-popover text-popover-foreground shadow-lg will-change-transform outline-none select-none ", "[--gap:0.75rem] [--height:var(--toast-frontmost-height,var(--toast-height))] [--offset-y:calc(var(--toast-offset-y)*-1+calc(var(--toast-index)*var(--gap)*-1)+var(--toast-swipe-movement-y))] [--peek:0.75rem] [--scale:calc(max(0,1-(var(--toast-index)*0.1)))] [--shrink:calc(1-var(--scale))]", "h-(--height) [transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)-(var(--toast-index)*var(--peek))-(var(--shrink)*var(--height))))_scale(var(--scale))] [transition:transform_500ms_cubic-bezier(0.22,1,0.36,1),opacity_500ms,height_150ms] motion-reduce:transition-none", "after:absolute after:top-full after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:content-['']", "data-expanded:h-(--toast-height) data-expanded:[transform:translateX(var(--toast-swipe-movement-x))_translateY(var(--offset-y))]", "data-limited:opacity-0 data-starting-style:[transform:translateY(150%)]", "[&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateY(150%)]", "data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]", "data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]", "data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]", "data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]", "data-expanded:data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]", "data-expanded:data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]", "data-expanded:data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]", "data-expanded:data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]", className),
|
|
29
|
+
...props
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
var ToastContent = ({ className, ...props }) => {
|
|
33
|
+
return /* @__PURE__ */ jsx(Toast.Content, {
|
|
34
|
+
"data-slot": "toast-content",
|
|
35
|
+
className: cn("flex h-full items-center gap-3 overflow-hidden p-4 transition-opacity duration-250 ease-[cubic-bezier(0.22,1,0.36,1)] motion-reduce:transition-none data-behind:opacity-0 data-expanded:opacity-100", className),
|
|
36
|
+
...props
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
var ToastTitle = ({ className, ...props }) => {
|
|
40
|
+
return /* @__PURE__ */ jsx(Toast.Title, {
|
|
41
|
+
"data-slot": "toast-title",
|
|
42
|
+
className: cn("text-sm font-medium", className),
|
|
43
|
+
...props
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
var ToastDescription = ({ className, ...props }) => {
|
|
47
|
+
return /* @__PURE__ */ jsx(Toast.Description, {
|
|
48
|
+
"data-slot": "toast-description",
|
|
49
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
50
|
+
...props
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
var ToastAction = ({ className, render = /* @__PURE__ */ jsx(Button, {
|
|
54
|
+
variant: "outline",
|
|
55
|
+
size: "sm"
|
|
56
|
+
}), ...props }) => {
|
|
57
|
+
return /* @__PURE__ */ jsx(Toast.Action, {
|
|
58
|
+
"data-slot": "toast-action",
|
|
59
|
+
render,
|
|
60
|
+
className: cn("shrink-0", className),
|
|
61
|
+
...props
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
var ToastClose = ({ className, children, render = /* @__PURE__ */ jsx(Button, {
|
|
65
|
+
variant: "ghost",
|
|
66
|
+
size: "icon-sm"
|
|
67
|
+
}), ...props }) => {
|
|
68
|
+
return /* @__PURE__ */ jsx(Toast.Close, {
|
|
69
|
+
"data-slot": "toast-close",
|
|
70
|
+
"aria-label": "Close toast",
|
|
71
|
+
render,
|
|
72
|
+
className: cn("relative shrink-0 text-muted-foreground after:absolute after:-inset-2 after:content-[''] hover:text-foreground", className),
|
|
73
|
+
...props,
|
|
74
|
+
children: children ?? /* @__PURE__ */ jsx(IconX, { "aria-hidden": "true" })
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
var ToastIcon = ({ type }) => {
|
|
78
|
+
let icon = null;
|
|
79
|
+
if (type === "success") icon = /* @__PURE__ */ jsx(IconCircleCheck, { "aria-hidden": "true" });
|
|
80
|
+
if (type === "info") icon = /* @__PURE__ */ jsx(IconInfoCircle, { "aria-hidden": "true" });
|
|
81
|
+
if (type === "warning") icon = /* @__PURE__ */ jsx(IconAlertTriangle, { "aria-hidden": "true" });
|
|
82
|
+
if (type === "error") icon = /* @__PURE__ */ jsx(IconAlertOctagon, {
|
|
83
|
+
className: "text-destructive",
|
|
84
|
+
"aria-hidden": "true"
|
|
85
|
+
});
|
|
86
|
+
if (type === "loading") icon = /* @__PURE__ */ jsx(IconLoader, {
|
|
87
|
+
className: "animate-spin motion-reduce:animate-none",
|
|
88
|
+
"aria-hidden": "true"
|
|
89
|
+
});
|
|
90
|
+
if (!icon) return null;
|
|
91
|
+
return /* @__PURE__ */ jsx("span", {
|
|
92
|
+
"data-slot": "toast-icon",
|
|
93
|
+
className: "shrink-0 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
|
|
94
|
+
children: icon
|
|
95
|
+
});
|
|
96
|
+
};
|
|
97
|
+
var ToastList = () => {
|
|
98
|
+
const { toasts } = Toast.useToastManager();
|
|
99
|
+
return toasts.map((toastItem) => /* @__PURE__ */ jsx(Toast$1, {
|
|
100
|
+
toast: toastItem,
|
|
101
|
+
children: /* @__PURE__ */ jsxs(ToastContent, { children: [
|
|
102
|
+
/* @__PURE__ */ jsx(ToastIcon, { type: toastItem.type }),
|
|
103
|
+
/* @__PURE__ */ jsxs("div", {
|
|
104
|
+
className: "flex min-w-0 flex-1 flex-col gap-1",
|
|
105
|
+
children: [/* @__PURE__ */ jsx(ToastTitle, {}), /* @__PURE__ */ jsx(ToastDescription, {})]
|
|
106
|
+
}),
|
|
107
|
+
/* @__PURE__ */ jsx(ToastAction, {}),
|
|
108
|
+
/* @__PURE__ */ jsx(ToastClose, {})
|
|
109
|
+
] })
|
|
110
|
+
}, toastItem.id));
|
|
111
|
+
};
|
|
112
|
+
var Toaster = ({ children, toastManager = toast, ...props }) => {
|
|
113
|
+
return /* @__PURE__ */ jsxs(ToastProvider, {
|
|
114
|
+
toastManager,
|
|
115
|
+
...props,
|
|
116
|
+
children: [children, /* @__PURE__ */ jsx(ToastPortal, { children: /* @__PURE__ */ jsx(ToastViewport, { children: /* @__PURE__ */ jsx(ToastList, {}) }) })]
|
|
117
|
+
});
|
|
118
|
+
};
|
|
119
|
+
var createToastManager = Toast.createToastManager;
|
|
120
|
+
var useToastManager = Toast.useToastManager;
|
|
121
|
+
//#endregion
|
|
122
|
+
export { Toast$1 as Toast, ToastAction, ToastClose, ToastContent, ToastDescription, ToastPortal, ToastProvider, ToastTitle, ToastViewport, Toaster, createToastManager, toast, useToastManager };
|
|
123
|
+
|
|
124
|
+
//# sourceMappingURL=toast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toast.js","names":[],"sources":["../../../../../../../ui/src/components/ui/toast/toast.tsx"],"sourcesContent":["'use client';\n\nimport { Toast as ToastPrimitive } from '@base-ui/react/toast';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { IconAlertOctagon, IconAlertTriangle, IconCircleCheck, IconInfoCircle, IconLoader, IconX } from '@tabler/icons-react';\nimport type * as React from 'react';\nimport { Button } from '../button';\n\nexport const toast = ToastPrimitive.createToastManager();\n\nexport const ToastProvider = ({ ...props }: ToastPrimitive.Provider.Props) => {\n return <ToastPrimitive.Provider {...props} />;\n};\n\nexport const ToastPortal = ({ ...props }: ToastPrimitive.Portal.Props) => {\n return <ToastPrimitive.Portal data-slot=\"toast-portal\" {...props} />;\n};\n\nexport const ToastViewport = ({ className, ...props }: ToastPrimitive.Viewport.Props) => {\n return (\n <ToastPrimitive.Viewport\n data-slot=\"toast-viewport\"\n className={cn(\n 'pointer-events-none fixed inset-x-4 bottom-4 z-50 mx-auto w-auto max-w-sm outline-none sm:right-4 sm:left-auto sm:mx-0 sm:w-full',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const Toast = ({ className, ...props }: ToastPrimitive.Root.Props) => {\n return (\n <ToastPrimitive.Root\n data-slot=\"toast\"\n className={cn(\n 'group/toast pointer-events-auto absolute right-0 bottom-0 z-[calc(1000-var(--toast-index))] w-full origin-bottom rounded-2xl border bg-popover text-popover-foreground shadow-lg will-change-transform outline-none select-none ',\n '[--gap:0.75rem] [--height:var(--toast-frontmost-height,var(--toast-height))] [--offset-y:calc(var(--toast-offset-y)*-1+calc(var(--toast-index)*var(--gap)*-1)+var(--toast-swipe-movement-y))] [--peek:0.75rem] [--scale:calc(max(0,1-(var(--toast-index)*0.1)))] [--shrink:calc(1-var(--scale))]',\n 'h-(--height) [transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)-(var(--toast-index)*var(--peek))-(var(--shrink)*var(--height))))_scale(var(--scale))] [transition:transform_500ms_cubic-bezier(0.22,1,0.36,1),opacity_500ms,height_150ms] motion-reduce:transition-none',\n \"after:absolute after:top-full after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:content-['']\",\n 'data-expanded:h-(--toast-height) data-expanded:[transform:translateX(var(--toast-swipe-movement-x))_translateY(var(--offset-y))]',\n 'data-limited:opacity-0 data-starting-style:[transform:translateY(150%)]',\n '[&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateY(150%)]',\n 'data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]',\n 'data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]',\n 'data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]',\n 'data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]',\n 'data-expanded:data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]',\n 'data-expanded:data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]',\n 'data-expanded:data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]',\n 'data-expanded:data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const ToastContent = ({ className, ...props }: ToastPrimitive.Content.Props) => {\n return (\n <ToastPrimitive.Content\n data-slot=\"toast-content\"\n className={cn(\n 'flex h-full items-center gap-3 overflow-hidden p-4 transition-opacity duration-250 ease-[cubic-bezier(0.22,1,0.36,1)] motion-reduce:transition-none data-behind:opacity-0 data-expanded:opacity-100',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const ToastTitle = ({ className, ...props }: ToastPrimitive.Title.Props) => {\n return <ToastPrimitive.Title data-slot=\"toast-title\" className={cn('text-sm font-medium', className)} {...props} />;\n};\n\nexport const ToastDescription = ({ className, ...props }: ToastPrimitive.Description.Props) => {\n return <ToastPrimitive.Description data-slot=\"toast-description\" className={cn('text-sm text-muted-foreground', className)} {...props} />;\n};\n\nexport const ToastAction = ({ className, render = <Button variant=\"outline\" size=\"sm\" />, ...props }: ToastPrimitive.Action.Props) => {\n return <ToastPrimitive.Action data-slot=\"toast-action\" render={render} className={cn('shrink-0', className)} {...props} />;\n};\n\nexport const ToastClose = ({ className, children, render = <Button variant=\"ghost\" size=\"icon-sm\" />, ...props }: ToastPrimitive.Close.Props) => {\n return (\n <ToastPrimitive.Close\n data-slot=\"toast-close\"\n aria-label=\"Close toast\"\n render={render}\n className={cn(\"relative shrink-0 text-muted-foreground after:absolute after:-inset-2 after:content-[''] hover:text-foreground\", className)}\n {...props}\n >\n {children ?? <IconX aria-hidden=\"true\" />}\n </ToastPrimitive.Close>\n );\n};\n\nconst ToastIcon = ({ type }: { type: string | undefined }) => {\n let icon: React.ReactNode = null;\n\n if (type === 'success') {\n icon = <IconCircleCheck aria-hidden=\"true\" />;\n }\n\n if (type === 'info') {\n icon = <IconInfoCircle aria-hidden=\"true\" />;\n }\n\n if (type === 'warning') {\n icon = <IconAlertTriangle aria-hidden=\"true\" />;\n }\n\n if (type === 'error') {\n icon = <IconAlertOctagon className=\"text-destructive\" aria-hidden=\"true\" />;\n }\n\n if (type === 'loading') {\n icon = <IconLoader className=\"animate-spin motion-reduce:animate-none\" aria-hidden=\"true\" />;\n }\n\n if (!icon) {\n return null;\n }\n\n return (\n <span data-slot=\"toast-icon\" className=\"shrink-0 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\">\n {icon}\n </span>\n );\n};\n\nconst ToastList = () => {\n const { toasts } = ToastPrimitive.useToastManager();\n\n return toasts.map((toastItem) => (\n <Toast key={toastItem.id} toast={toastItem}>\n <ToastContent>\n <ToastIcon type={toastItem.type} />\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <ToastTitle />\n <ToastDescription />\n </div>\n <ToastAction />\n <ToastClose />\n </ToastContent>\n </Toast>\n ));\n};\n\nexport const Toaster = ({ children, toastManager = toast, ...props }: ToastPrimitive.Provider.Props) => {\n return (\n <ToastProvider toastManager={toastManager} {...props}>\n {children}\n <ToastPortal>\n <ToastViewport>\n <ToastList />\n </ToastViewport>\n </ToastPortal>\n </ToastProvider>\n );\n};\n\nexport const createToastManager = ToastPrimitive.createToastManager;\nexport const useToastManager = ToastPrimitive.useToastManager;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { cn } from "../../../lib/utils.js";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { cva } from "class-variance-authority";
|
|
4
|
+
import { Toggle } from "@base-ui/react/toggle";
|
|
5
|
+
//#region ../ui/src/components/ui/toggle/toggle.tsx
|
|
6
|
+
var toggleVariants = cva("inline-flex shrink-0 cursor-pointer items-center justify-center gap-1.5 rounded-lg border border-transparent text-sm font-medium whitespace-nowrap transition-all outline-none select-none disabled:pointer-events-none disabled:opacity-50 data-pressed:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\"size-\"])]:size-4", {
|
|
7
|
+
variants: {
|
|
8
|
+
variant: {
|
|
9
|
+
default: "bg-transparent hover:bg-muted hover:text-foreground data-pressed:bg-muted",
|
|
10
|
+
outline: "border-control bg-background hover:bg-muted hover:text-foreground data-pressed:bg-muted dark:bg-input/30 dark:hover:bg-input/50"
|
|
11
|
+
},
|
|
12
|
+
size: {
|
|
13
|
+
sm: "h-7 px-2.5 text-xs",
|
|
14
|
+
default: "h-8 px-2.5",
|
|
15
|
+
lg: "h-9 px-3"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
defaultVariants: {
|
|
19
|
+
variant: "default",
|
|
20
|
+
size: "default"
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
var Toggle$1 = ({ className, variant = "default", size = "default", ...props }) => {
|
|
24
|
+
return /* @__PURE__ */ jsx(Toggle, {
|
|
25
|
+
"data-slot": "toggle",
|
|
26
|
+
className: cn(toggleVariants({
|
|
27
|
+
variant,
|
|
28
|
+
size,
|
|
29
|
+
className
|
|
30
|
+
})),
|
|
31
|
+
...props
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
//#endregion
|
|
35
|
+
export { Toggle$1 as Toggle, toggleVariants };
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=toggle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toggle.js","names":[],"sources":["../../../../../../../ui/src/components/ui/toggle/toggle.tsx"],"sourcesContent":["import { Toggle as TogglePrimitive } from '@base-ui/react/toggle';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nexport const toggleVariants = cva(\n 'inline-flex shrink-0 cursor-pointer items-center justify-center gap-1.5 rounded-lg border border-transparent text-sm font-medium whitespace-nowrap transition-all outline-none select-none disabled:pointer-events-none disabled:opacity-50 data-pressed:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\"size-\"])]:size-4',\n {\n variants: {\n variant: {\n default: 'bg-transparent hover:bg-muted hover:text-foreground data-pressed:bg-muted',\n outline: 'border-control bg-background hover:bg-muted hover:text-foreground data-pressed:bg-muted dark:bg-input/30 dark:hover:bg-input/50',\n },\n size: {\n sm: 'h-7 px-2.5 text-xs',\n default: 'h-8 px-2.5',\n lg: 'h-9 px-3',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nexport type TToggleVariants = VariantProps<typeof toggleVariants>;\n\nexport const Toggle = <Value extends string>({\n className,\n variant = 'default',\n size = 'default',\n ...props\n}: TogglePrimitive.Props<Value> & TToggleVariants) => {\n return <TogglePrimitive data-slot=\"toggle\" className={cn(toggleVariants({ variant, size, className }))} {...props} />;\n};\n"],"mappings":";;;;;AAIA,IAAa,iBAAiB,IAC5B,gWACA;CACE,UAAU;EACR,SAAS;GACP,SAAS;GACT,SAAS;EACX;EACA,MAAM;GACJ,IAAI;GACJ,SAAS;GACT,IAAI;EACN;CACF;CACA,iBAAiB;EACf,SAAS;EACT,MAAM;CACR;AACF,CACF;AAIA,IAAa,YAAgC,EAC3C,WACA,UAAU,WACV,OAAO,WACP,GAAG,YACiD;CACpD,OAAO,oBAAC,QAAD;EAAiB,aAAU;EAAS,WAAW,GAAG,eAAe;GAAE;GAAS;GAAM;EAAU,CAAC,CAAC;EAAG,GAAI;CAAQ,CAAA;AACtH"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { cn } from "../../../lib/utils.js";
|
|
2
|
+
import { toggleVariants } from "../toggle/toggle.js";
|
|
3
|
+
import { createContext, useContext } from "react";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
|
+
import { Toggle } from "@base-ui/react/toggle";
|
|
6
|
+
import { ToggleGroup } from "@base-ui/react/toggle-group";
|
|
7
|
+
//#region ../ui/src/components/ui/toggle-group/toggle-group.tsx
|
|
8
|
+
var ToggleGroupContext = createContext({
|
|
9
|
+
variant: "default",
|
|
10
|
+
size: "default",
|
|
11
|
+
spacing: 2,
|
|
12
|
+
orientation: "horizontal"
|
|
13
|
+
});
|
|
14
|
+
var ToggleGroup$1 = ({ className, variant = "default", size = "default", spacing = 2, orientation = "horizontal", children, ...props }) => {
|
|
15
|
+
return /* @__PURE__ */ jsx(ToggleGroupContext.Provider, {
|
|
16
|
+
value: {
|
|
17
|
+
variant,
|
|
18
|
+
size,
|
|
19
|
+
spacing,
|
|
20
|
+
orientation
|
|
21
|
+
},
|
|
22
|
+
children: /* @__PURE__ */ jsx(ToggleGroup, {
|
|
23
|
+
"data-slot": "toggle-group",
|
|
24
|
+
"data-variant": variant,
|
|
25
|
+
"data-size": size,
|
|
26
|
+
"data-spacing": spacing,
|
|
27
|
+
"data-orientation": orientation,
|
|
28
|
+
orientation,
|
|
29
|
+
"aria-orientation": void 0,
|
|
30
|
+
style: { gap: `calc(var(--spacing) * ${spacing})` },
|
|
31
|
+
className: cn("group/toggle-group flex w-fit flex-row items-center rounded-lg data-[size=sm]:rounded-[min(var(--radius-md),10px)] data-[orientation=vertical]:flex-col data-[orientation=vertical]:items-stretch", className),
|
|
32
|
+
...props,
|
|
33
|
+
children
|
|
34
|
+
})
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
var ToggleGroupItem = ({ className, variant, size, ...props }) => {
|
|
38
|
+
const ctx = useContext(ToggleGroupContext);
|
|
39
|
+
const resolvedVariant = variant ?? ctx.variant ?? "default";
|
|
40
|
+
const resolvedSize = size ?? ctx.size ?? "default";
|
|
41
|
+
return /* @__PURE__ */ jsx(Toggle, {
|
|
42
|
+
"data-slot": "toggle-group-item",
|
|
43
|
+
"data-variant": resolvedVariant,
|
|
44
|
+
"data-size": resolvedSize,
|
|
45
|
+
"data-spacing": ctx.spacing,
|
|
46
|
+
className: cn("shrink-0 group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 focus:z-10 focus-visible:z-10 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-end]:pr-1.5 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-start]:pl-1.5 group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:first:rounded-l-lg group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:first:rounded-t-lg group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:last:rounded-r-lg group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:last:rounded-b-lg group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t", toggleVariants({
|
|
47
|
+
variant: resolvedVariant,
|
|
48
|
+
size: resolvedSize
|
|
49
|
+
}), className),
|
|
50
|
+
...props
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
//#endregion
|
|
54
|
+
export { ToggleGroup$1 as ToggleGroup, ToggleGroupItem };
|
|
55
|
+
|
|
56
|
+
//# sourceMappingURL=toggle-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toggle-group.js","names":[],"sources":["../../../../../../../ui/src/components/ui/toggle-group/toggle-group.tsx"],"sourcesContent":["import { Toggle as TogglePrimitive } from '@base-ui/react/toggle';\nimport { ToggleGroup as ToggleGroupPrimitive } from '@base-ui/react/toggle-group';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { type CSSProperties, createContext, useContext } from 'react';\nimport { type TToggleVariants, toggleVariants } from '../toggle/toggle';\n\ninterface IToggleGroupContext extends TToggleVariants {\n spacing?: number;\n orientation?: 'horizontal' | 'vertical';\n}\n\nconst ToggleGroupContext = createContext<IToggleGroupContext>({\n variant: 'default',\n size: 'default',\n spacing: 2,\n orientation: 'horizontal',\n});\n\nexport const ToggleGroup = <Value extends string>({\n className,\n variant = 'default',\n size = 'default',\n spacing = 2,\n orientation = 'horizontal',\n children,\n ...props\n}: ToggleGroupPrimitive.Props<Value> & TToggleVariants & { spacing?: number }) => {\n return (\n <ToggleGroupContext.Provider value={{ variant, size, spacing, orientation }}>\n <ToggleGroupPrimitive\n data-slot=\"toggle-group\"\n data-variant={variant}\n data-size={size}\n data-spacing={spacing}\n data-orientation={orientation}\n orientation={orientation}\n aria-orientation={undefined}\n style={{ gap: `calc(var(--spacing) * ${spacing})` } as CSSProperties}\n className={cn(\n 'group/toggle-group flex w-fit flex-row items-center rounded-lg data-[size=sm]:rounded-[min(var(--radius-md),10px)] data-[orientation=vertical]:flex-col data-[orientation=vertical]:items-stretch',\n className,\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive>\n </ToggleGroupContext.Provider>\n );\n};\n\nexport const ToggleGroupItem = <Value extends string>({ className, variant, size, ...props }: TogglePrimitive.Props<Value> & TToggleVariants) => {\n const ctx = useContext(ToggleGroupContext);\n const resolvedVariant = variant ?? ctx.variant ?? 'default';\n const resolvedSize = size ?? ctx.size ?? 'default';\n\n return (\n <TogglePrimitive\n data-slot=\"toggle-group-item\"\n data-variant={resolvedVariant}\n data-size={resolvedSize}\n data-spacing={ctx.spacing}\n className={cn(\n 'shrink-0 group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 focus:z-10 focus-visible:z-10 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-end]:pr-1.5 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-start]:pl-1.5 group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:first:rounded-l-lg group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:first:rounded-t-lg group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:last:rounded-r-lg group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:last:rounded-b-lg group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t',\n toggleVariants({ variant: resolvedVariant, size: resolvedSize }),\n className,\n )}\n {...props}\n />\n );\n};\n"],"mappings":";;;;;;;AAWA,IAAM,qBAAqB,cAAmC;CAC5D,SAAS;CACT,MAAM;CACN,SAAS;CACT,aAAa;AACf,CAAC;AAED,IAAa,iBAAqC,EAChD,WACA,UAAU,WACV,OAAO,WACP,UAAU,GACV,cAAc,cACd,UACA,GAAG,YAC6E;CAChF,OACE,oBAAC,mBAAmB,UAApB;EAA6B,OAAO;GAAE;GAAS;GAAM;GAAS;EAAY;EACxE,UAAA,oBAAC,aAAD;GACE,aAAU;GACV,gBAAc;GACd,aAAW;GACX,gBAAc;GACd,oBAAkB;GACL;GACb,oBAAkB,KAAA;GAClB,OAAO,EAAE,KAAK,yBAAyB,QAAQ,GAAG;GAClD,WAAW,GACT,qMACA,SACF;GACA,GAAI;GAEH;EACmB,CAAA;CACK,CAAA;AAEjC;AAEA,IAAa,mBAAyC,EAAE,WAAW,SAAS,MAAM,GAAG,YAA4D;CAC/I,MAAM,MAAM,WAAW,kBAAkB;CACzC,MAAM,kBAAkB,WAAW,IAAI,WAAW;CAClD,MAAM,eAAe,QAAQ,IAAI,QAAQ;CAEzC,OACE,oBAAC,QAAD;EACE,aAAU;EACV,gBAAc;EACd,aAAW;EACX,gBAAc,IAAI;EAClB,WAAW,GACT,o/BACA,eAAe;GAAE,SAAS;GAAiB,MAAM;EAAa,CAAC,GAC/D,SACF;EACA,GAAI;CACL,CAAA;AAEL"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { cn } from "../../../lib/utils.js";
|
|
2
|
+
import { POPUP_LAYER_CLASS } from "../../../lib/popup-list.js";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { Tooltip } from "@base-ui/react/tooltip";
|
|
5
|
+
//#region ../ui/src/components/ui/tooltip/tooltip.tsx
|
|
6
|
+
var TooltipProvider = ({ delay = 0, ...props }) => {
|
|
7
|
+
return /* @__PURE__ */ jsx(Tooltip.Provider, {
|
|
8
|
+
"data-slot": "tooltip-provider",
|
|
9
|
+
delay,
|
|
10
|
+
...props
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
var Tooltip$1 = ({ ...props }) => {
|
|
14
|
+
return /* @__PURE__ */ jsx(Tooltip.Root, {
|
|
15
|
+
"data-slot": "tooltip",
|
|
16
|
+
...props
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
var TooltipTrigger = ({ ...props }) => {
|
|
20
|
+
return /* @__PURE__ */ jsx(Tooltip.Trigger, {
|
|
21
|
+
"data-slot": "tooltip-trigger",
|
|
22
|
+
...props
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
var TooltipContent = ({ className, side = "top", sideOffset = 4, align = "center", alignOffset = 0, children, ...props }) => {
|
|
26
|
+
return /* @__PURE__ */ jsx(Tooltip.Portal, { children: /* @__PURE__ */ jsx(Tooltip.Positioner, {
|
|
27
|
+
align,
|
|
28
|
+
alignOffset,
|
|
29
|
+
side,
|
|
30
|
+
sideOffset,
|
|
31
|
+
className: cn(POPUP_LAYER_CLASS, "isolate"),
|
|
32
|
+
children: /* @__PURE__ */ jsxs(Tooltip.Popup, {
|
|
33
|
+
"data-slot": "tooltip-content",
|
|
34
|
+
className: cn("z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", "motion-reduce:animate-none", className),
|
|
35
|
+
...props,
|
|
36
|
+
children: [children, /* @__PURE__ */ jsx(Tooltip.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5" })]
|
|
37
|
+
})
|
|
38
|
+
}) });
|
|
39
|
+
};
|
|
40
|
+
//#endregion
|
|
41
|
+
export { Tooltip$1 as Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=tooltip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tooltip.js","names":[],"sources":["../../../../../../../ui/src/components/ui/tooltip/tooltip.tsx"],"sourcesContent":["import { Tooltip as TooltipPrimitive } from '@base-ui/react/tooltip';\n\nimport { POPUP_LAYER_CLASS } from '@edyn/ui/lib/popup-list';\nimport { cn } from '@edyn/ui/lib/utils';\n\nexport const TooltipProvider = ({ delay = 0, ...props }: TooltipPrimitive.Provider.Props) => {\n return <TooltipPrimitive.Provider data-slot=\"tooltip-provider\" delay={delay} {...props} />;\n};\n\nexport const Tooltip = ({ ...props }: TooltipPrimitive.Root.Props) => {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />;\n};\n\nexport const TooltipTrigger = ({ ...props }: TooltipPrimitive.Trigger.Props) => {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n};\n\nexport const TooltipContent = ({\n className,\n side = 'top',\n sideOffset = 4,\n align = 'center',\n alignOffset = 0,\n children,\n ...props\n}: TooltipPrimitive.Popup.Props & Pick<TooltipPrimitive.Positioner.Props, 'align' | 'alignOffset' | 'side' | 'sideOffset'>) => {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n className={cn(POPUP_LAYER_CLASS, 'isolate')}\n >\n <TooltipPrimitive.Popup\n data-slot=\"tooltip-content\"\n className={cn(\n 'z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95',\n 'motion-reduce:animate-none',\n className,\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5\" />\n </TooltipPrimitive.Popup>\n </TooltipPrimitive.Positioner>\n </TooltipPrimitive.Portal>\n );\n};\n"],"mappings":";;;;;AAKA,IAAa,mBAAmB,EAAE,QAAQ,GAAG,GAAG,YAA6C;CAC3F,OAAO,oBAAC,QAAiB,UAAlB;EAA2B,aAAU;EAA0B;EAAO,GAAI;CAAQ,CAAA;AAC3F;AAEA,IAAa,aAAW,EAAE,GAAG,YAAyC;CACpE,OAAO,oBAAC,QAAiB,MAAlB;EAAuB,aAAU;EAAU,GAAI;CAAQ,CAAA;AAChE;AAEA,IAAa,kBAAkB,EAAE,GAAG,YAA4C;CAC9E,OAAO,oBAAC,QAAiB,SAAlB;EAA0B,aAAU;EAAkB,GAAI;CAAQ,CAAA;AAC3E;AAEA,IAAa,kBAAkB,EAC7B,WACA,OAAO,OACP,aAAa,GACb,QAAQ,UACR,cAAc,GACd,UACA,GAAG,YAC0H;CAC7H,OACE,oBAAC,QAAiB,QAAlB,EAAA,UACE,oBAAC,QAAiB,YAAlB;EACS;EACM;EACP;EACM;EACZ,WAAW,GAAG,mBAAmB,SAAS;EAE1C,UAAA,qBAAC,QAAiB,OAAlB;GACE,aAAU;GACV,WAAW,GACT,mwBACA,8BACA,SACF;GACA,GAAI;GAPN,UAAA,CASG,UACD,oBAAC,QAAiB,OAAlB,EAAwB,WAAU,2hBAA4hB,CAAA,CACxiB;;CACG,CAAA,EACN,CAAA;AAE7B"}
|