@burtson-labs/ui 0.13.1 → 0.14.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/LICENSES/DEPENDENCIES.txt +2745 -0
- package/LICENSES/Radix-MIT.txt +21 -0
- package/LICENSES/cmdk-MIT.txt +21 -0
- package/LICENSES/overrides/react-remove-scroll-bar.txt +26 -0
- package/LICENSES/shadcn-MIT.txt +21 -0
- package/README.md +20 -12
- package/THIRD_PARTY_NOTICES.md +15 -3
- package/dist/components/accordion.d.ts +4 -4
- package/dist/components/accordion.js +22 -18
- package/dist/components/accordion.js.map +1 -1
- package/dist/components/alert-dialog.d.ts +13 -11
- package/dist/components/alert-dialog.js +41 -31
- package/dist/components/alert-dialog.js.map +1 -1
- package/dist/components/alert.d.ts +5 -3
- package/dist/components/alert.js +12 -7
- package/dist/components/alert.js.map +1 -1
- package/dist/components/app-shell.d.ts +7 -6
- package/dist/components/app-shell.js +22 -14
- package/dist/components/app-shell.js.map +1 -1
- package/dist/components/attachment.d.ts +3 -3
- package/dist/components/attachment.js +11 -7
- package/dist/components/attachment.js.map +1 -1
- package/dist/components/audio-player.d.ts +2 -2
- package/dist/components/audio-player.js +9 -6
- package/dist/components/audio-player.js.map +1 -1
- package/dist/components/avatar.d.ts +4 -4
- package/dist/components/avatar.js +16 -12
- package/dist/components/avatar.js.map +1 -1
- package/dist/components/badge.d.ts +1 -1
- package/dist/components/badge.js +15 -13
- package/dist/components/badge.js.map +1 -1
- package/dist/components/breadcrumb.d.ts +8 -8
- package/dist/components/breadcrumb.js +27 -20
- package/dist/components/breadcrumb.js.map +1 -1
- package/dist/components/button.d.ts +9 -2
- package/dist/components/button.js +15 -6
- package/dist/components/button.js.map +1 -1
- package/dist/components/card.d.ts +9 -9
- package/dist/components/card.js +33 -23
- package/dist/components/card.js.map +1 -1
- package/dist/components/chat-history.d.ts +1 -1
- package/dist/components/chat-history.js +11 -9
- package/dist/components/chat-history.js.map +1 -1
- package/dist/components/chat-layout.d.ts +1 -1
- package/dist/components/chat-layout.js +8 -3
- package/dist/components/chat-layout.js.map +1 -1
- package/dist/components/checkbox-card.d.ts +3 -3
- package/dist/components/checkbox-card.js +12 -10
- package/dist/components/checkbox-card.js.map +1 -1
- package/dist/components/checkbox.d.ts +24 -3
- package/dist/components/checkbox.js +52 -9
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/collapsible.d.ts +3 -3
- package/dist/components/collapsible.js +14 -11
- package/dist/components/collapsible.js.map +1 -1
- package/dist/components/combobox.d.ts +14 -4
- package/dist/components/combobox.js +19 -8
- package/dist/components/combobox.js.map +1 -1
- package/dist/components/command.d.ts +68 -12
- package/dist/components/command.js +48 -34
- package/dist/components/command.js.map +1 -1
- package/dist/components/composer.d.ts +2 -2
- package/dist/components/composer.js +10 -7
- package/dist/components/composer.js.map +1 -1
- package/dist/components/connection-status.d.ts +3 -3
- package/dist/components/connection-status.js +19 -14
- package/dist/components/connection-status.js.map +1 -1
- package/dist/components/context-menu.d.ts +15 -14
- package/dist/components/context-menu.js +52 -41
- package/dist/components/context-menu.js.map +1 -1
- package/dist/components/conversation.d.ts +1 -1
- package/dist/components/conversation.js +7 -5
- package/dist/components/conversation.js.map +1 -1
- package/dist/components/copy-button.d.ts +1 -1
- package/dist/components/copy-button.js +4 -2
- package/dist/components/copy-button.js.map +1 -1
- package/dist/components/data-table.d.ts +7 -2
- package/dist/components/data-table.js +17 -42
- package/dist/components/data-table.js.map +1 -1
- package/dist/components/dialog.d.ts +19 -10
- package/dist/components/dialog.js +50 -33
- package/dist/components/dialog.js.map +1 -1
- package/dist/components/dropdown-menu.d.ts +15 -14
- package/dist/components/dropdown-menu.js +52 -41
- package/dist/components/dropdown-menu.js.map +1 -1
- package/dist/components/editor-tabs.d.ts +1 -1
- package/dist/components/editor-tabs.js +7 -5
- package/dist/components/editor-tabs.js.map +1 -1
- package/dist/components/empty-state.d.ts +5 -5
- package/dist/components/empty-state.js +17 -11
- package/dist/components/empty-state.js.map +1 -1
- package/dist/components/error-summary.d.ts +21 -0
- package/dist/components/error-summary.js +62 -0
- package/dist/components/error-summary.js.map +1 -0
- package/dist/components/field.d.ts +66 -7
- package/dist/components/field.js +152 -20
- package/dist/components/field.js.map +1 -1
- package/dist/components/form-actions.d.ts +18 -0
- package/dist/components/form-actions.js +30 -0
- package/dist/components/form-actions.js.map +1 -0
- package/dist/components/icon-button.d.ts +3 -1
- package/dist/components/icon-button.js +6 -3
- package/dist/components/icon-button.js.map +1 -1
- package/dist/components/input.d.ts +42 -7
- package/dist/components/input.js +54 -10
- package/dist/components/input.js.map +1 -1
- package/dist/components/kbd.d.ts +2 -2
- package/dist/components/kbd.js +8 -5
- package/dist/components/kbd.js.map +1 -1
- package/dist/components/label.d.ts +7 -2
- package/dist/components/label.js +14 -7
- package/dist/components/label.js.map +1 -1
- package/dist/components/markdown.d.ts +4 -3
- package/dist/components/markdown.js +8 -6
- package/dist/components/markdown.js.map +1 -1
- package/dist/components/menubar.d.ts +17 -15
- package/dist/components/menubar.js +58 -45
- package/dist/components/menubar.js.map +1 -1
- package/dist/components/message-actions.d.ts +3 -3
- package/dist/components/message-actions.js +16 -12
- package/dist/components/message-actions.js.map +1 -1
- package/dist/components/message.d.ts +1 -1
- package/dist/components/message.js +6 -3
- package/dist/components/message.js.map +1 -1
- package/dist/components/mobile-nav.d.ts +1 -1
- package/dist/components/mobile-nav.js +7 -5
- package/dist/components/mobile-nav.js.map +1 -1
- package/dist/components/native-select.d.ts +16 -0
- package/dist/components/native-select.js +33 -0
- package/dist/components/native-select.js.map +1 -0
- package/dist/components/navigation-menu.d.ts +13 -12
- package/dist/components/navigation-menu.js +43 -33
- package/dist/components/navigation-menu.js.map +1 -1
- package/dist/components/number-input.d.ts +23 -0
- package/dist/components/number-input.js +45 -0
- package/dist/components/number-input.js.map +1 -0
- package/dist/components/onboarding-checklist.d.ts +1 -1
- package/dist/components/onboarding-checklist.js +5 -3
- package/dist/components/onboarding-checklist.js.map +1 -1
- package/dist/components/page-header.d.ts +7 -6
- package/dist/components/page-header.js +23 -15
- package/dist/components/page-header.js.map +1 -1
- package/dist/components/pagination.d.ts +1 -1
- package/dist/components/pagination.js +4 -2
- package/dist/components/pagination.js.map +1 -1
- package/dist/components/popover.d.ts +14 -11
- package/dist/components/popover.js +30 -23
- package/dist/components/popover.js.map +1 -1
- package/dist/components/progress.d.ts +2 -2
- package/dist/components/progress.js +11 -9
- package/dist/components/progress.js.map +1 -1
- package/dist/components/radio-group.d.ts +23 -4
- package/dist/components/radio-group.js +56 -14
- package/dist/components/radio-group.js.map +1 -1
- package/dist/components/reasoning.d.ts +3 -3
- package/dist/components/reasoning.js +14 -11
- package/dist/components/reasoning.js.map +1 -1
- package/dist/components/resizable.js +1 -0
- package/dist/components/resizable.js.map +1 -1
- package/dist/components/scroll-area.d.ts +4 -3
- package/dist/components/scroll-area.js +18 -14
- package/dist/components/scroll-area.js.map +1 -1
- package/dist/components/secret-input.d.ts +3 -2
- package/dist/components/secret-input.js +7 -4
- package/dist/components/secret-input.js.map +1 -1
- package/dist/components/select.d.ts +12 -7
- package/dist/components/select.js +42 -35
- package/dist/components/select.js.map +1 -1
- package/dist/components/separator.d.ts +2 -2
- package/dist/components/separator.js +8 -6
- package/dist/components/separator.js.map +1 -1
- package/dist/components/sheet.d.ts +11 -9
- package/dist/components/sheet.js +41 -29
- package/dist/components/sheet.js.map +1 -1
- package/dist/components/skeleton.d.ts +2 -1
- package/dist/components/skeleton.js +7 -4
- package/dist/components/skeleton.js.map +1 -1
- package/dist/components/slider.d.ts +10 -6
- package/dist/components/slider.js +16 -7
- package/dist/components/slider.js.map +1 -1
- package/dist/components/source.d.ts +2 -2
- package/dist/components/source.js +10 -7
- package/dist/components/source.js.map +1 -1
- package/dist/components/spinner.d.ts +4 -2
- package/dist/components/spinner.js +5 -3
- package/dist/components/spinner.js.map +1 -1
- package/dist/components/stat-card.d.ts +27 -2
- package/dist/components/stat-card.js +70 -9
- package/dist/components/stat-card.js.map +1 -1
- package/dist/components/status.d.ts +7 -6
- package/dist/components/status.js +12 -5
- package/dist/components/status.js.map +1 -1
- package/dist/components/steps.d.ts +1 -1
- package/dist/components/steps.js +5 -3
- package/dist/components/steps.js.map +1 -1
- package/dist/components/switch.d.ts +47 -3
- package/dist/components/switch.js +89 -11
- package/dist/components/switch.js.map +1 -1
- package/dist/components/table.d.ts +29 -12
- package/dist/components/table.js +80 -34
- package/dist/components/table.js.map +1 -1
- package/dist/components/tabs.d.ts +10 -5
- package/dist/components/tabs.js +29 -19
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/textarea.d.ts +6 -1
- package/dist/components/textarea.js +4 -3
- package/dist/components/textarea.js.map +1 -1
- package/dist/components/toast.d.ts +11 -7
- package/dist/components/toast.js +37 -27
- package/dist/components/toast.js.map +1 -1
- package/dist/components/toaster.d.ts +4 -2
- package/dist/components/toaster.js +7 -2
- package/dist/components/toaster.js.map +1 -1
- package/dist/components/tool-call.d.ts +2 -2
- package/dist/components/tool-call.js +15 -12
- package/dist/components/tool-call.js.map +1 -1
- package/dist/components/toolbar.d.ts +9 -4
- package/dist/components/toolbar.js +15 -9
- package/dist/components/toolbar.js.map +1 -1
- package/dist/components/tooltip.d.ts +4 -3
- package/dist/components/tooltip.js +17 -13
- package/dist/components/tooltip.js.map +1 -1
- package/dist/components/tour.js +10 -8
- package/dist/components/tour.js.map +1 -1
- package/dist/components/tree-view.d.ts +1 -1
- package/dist/components/tree-view.js +10 -5
- package/dist/components/tree-view.js.map +1 -1
- package/dist/components/voice-recorder.d.ts +1 -1
- package/dist/components/voice-recorder.js +5 -2
- package/dist/components/voice-recorder.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +17 -12
- package/dist/lib/media.d.ts +18 -0
- package/dist/lib/media.js +34 -0
- package/dist/lib/media.js.map +1 -0
- package/dist/lib/utils.d.ts +32 -0
- package/dist/lib/utils.js +33 -1
- package/dist/lib/utils.js.map +1 -1
- package/dist/mui/index.js +20 -8
- package/dist/mui/index.js.map +1 -1
- package/dist/primitives/vendor/cmdk/command-score.d.ts +1 -0
- package/dist/primitives/vendor/cmdk/command-score.js +64 -0
- package/dist/primitives/vendor/cmdk/command-score.js.map +1 -0
- package/dist/primitives/vendor/cmdk/index.d.ts +384 -0
- package/dist/primitives/vendor/cmdk/index.js +687 -0
- package/dist/primitives/vendor/cmdk/index.js.map +1 -0
- package/dist/primitives/vendor/radix/number/index.d.ts +1 -0
- package/dist/primitives/vendor/radix/number/number.d.ts +2 -0
- package/dist/primitives/vendor/radix/number/number.js +9 -0
- package/dist/primitives/vendor/radix/number/number.js.map +1 -0
- package/dist/primitives/vendor/radix/primitive/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/primitive/is-development.d.ts +1 -0
- package/dist/primitives/vendor/radix/primitive/is-development.js +7 -0
- package/dist/primitives/vendor/radix/primitive/is-development.js.map +1 -0
- package/dist/primitives/vendor/radix/primitive/primitive.d.ts +14 -0
- package/dist/primitives/vendor/radix/primitive/primitive.js +12 -0
- package/dist/primitives/vendor/radix/primitive/primitive.js.map +1 -0
- package/dist/primitives/vendor/radix/primitive/types.d.ts +5 -0
- package/dist/primitives/vendor/radix/react-accordion/accordion.d.ts +112 -0
- package/dist/primitives/vendor/radix/react-accordion/accordion.js +266 -0
- package/dist/primitives/vendor/radix/react-accordion/accordion.js.map +1 -0
- package/dist/primitives/vendor/radix/react-accordion/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-alert-dialog/alert-dialog.d.ts +49 -0
- package/dist/primitives/vendor/radix/react-alert-dialog/alert-dialog.js +122 -0
- package/dist/primitives/vendor/radix/react-alert-dialog/alert-dialog.js.map +1 -0
- package/dist/primitives/vendor/radix/react-alert-dialog/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-arrow/arrow.d.ts +9 -0
- package/dist/primitives/vendor/radix/react-arrow/arrow.js +22 -0
- package/dist/primitives/vendor/radix/react-arrow/arrow.js.map +1 -0
- package/dist/primitives/vendor/radix/react-arrow/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-avatar/avatar.d.ts +19 -0
- package/dist/primitives/vendor/radix/react-avatar/avatar.js +132 -0
- package/dist/primitives/vendor/radix/react-avatar/avatar.js.map +1 -0
- package/dist/primitives/vendor/radix/react-avatar/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-checkbox/checkbox.d.ts +47 -0
- package/dist/primitives/vendor/radix/react-checkbox/checkbox.js +197 -0
- package/dist/primitives/vendor/radix/react-checkbox/checkbox.js.map +1 -0
- package/dist/primitives/vendor/radix/react-checkbox/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-collapsible/collapsible.d.ts +31 -0
- package/dist/primitives/vendor/radix/react-collapsible/collapsible.js +133 -0
- package/dist/primitives/vendor/radix/react-collapsible/collapsible.js.map +1 -0
- package/dist/primitives/vendor/radix/react-collapsible/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-collection/collection-legacy.d.ts +21 -0
- package/dist/primitives/vendor/radix/react-collection/collection-legacy.js +84 -0
- package/dist/primitives/vendor/radix/react-collection/collection-legacy.js.map +1 -0
- package/dist/primitives/vendor/radix/react-collection/collection.d.ts +32 -0
- package/dist/primitives/vendor/radix/react-collection/index.d.ts +4 -0
- package/dist/primitives/vendor/radix/react-collection/ordered-dictionary.d.ts +51 -0
- package/dist/primitives/vendor/radix/react-compose-refs/compose-refs.d.ts +13 -0
- package/dist/primitives/vendor/radix/react-compose-refs/compose-refs.js +43 -0
- package/dist/primitives/vendor/radix/react-compose-refs/compose-refs.js.map +1 -0
- package/dist/primitives/vendor/radix/react-compose-refs/index.d.ts +1 -0
- package/dist/primitives/vendor/radix/react-context/create-context.d.ts +45 -0
- package/dist/primitives/vendor/radix/react-context/create-context.js +74 -0
- package/dist/primitives/vendor/radix/react-context/create-context.js.map +1 -0
- package/dist/primitives/vendor/radix/react-context/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-context-menu/context-menu.d.ts +95 -0
- package/dist/primitives/vendor/radix/react-context-menu/context-menu.js +279 -0
- package/dist/primitives/vendor/radix/react-context-menu/context-menu.js.map +1 -0
- package/dist/primitives/vendor/radix/react-context-menu/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-dialog/dialog.d.ts +97 -0
- package/dist/primitives/vendor/radix/react-dialog/dialog.js +262 -0
- package/dist/primitives/vendor/radix/react-dialog/dialog.js.map +1 -0
- package/dist/primitives/vendor/radix/react-dialog/index.d.ts +4 -0
- package/dist/primitives/vendor/radix/react-direction/direction.d.ts +10 -0
- package/dist/primitives/vendor/radix/react-direction/direction.js +13 -0
- package/dist/primitives/vendor/radix/react-direction/direction.js.map +1 -0
- package/dist/primitives/vendor/radix/react-direction/index.d.ts +1 -0
- package/dist/primitives/vendor/radix/react-dismissable-layer/dismissable-layer.d.ts +61 -0
- package/dist/primitives/vendor/radix/react-dismissable-layer/dismissable-layer.js +336 -0
- package/dist/primitives/vendor/radix/react-dismissable-layer/dismissable-layer.js.map +1 -0
- package/dist/primitives/vendor/radix/react-dismissable-layer/index.d.ts +4 -0
- package/dist/primitives/vendor/radix/react-dropdown-menu/dropdown-menu.d.ts +95 -0
- package/dist/primitives/vendor/radix/react-dropdown-menu/dropdown-menu.js +257 -0
- package/dist/primitives/vendor/radix/react-dropdown-menu/dropdown-menu.js.map +1 -0
- package/dist/primitives/vendor/radix/react-dropdown-menu/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-focus-guards/focus-guards.d.ts +11 -0
- package/dist/primitives/vendor/radix/react-focus-guards/focus-guards.js +49 -0
- package/dist/primitives/vendor/radix/react-focus-guards/focus-guards.js.map +1 -0
- package/dist/primitives/vendor/radix/react-focus-guards/index.d.ts +1 -0
- package/dist/primitives/vendor/radix/react-focus-scope/focus-scope.d.ts +31 -0
- package/dist/primitives/vendor/radix/react-focus-scope/focus-scope.js +221 -0
- package/dist/primitives/vendor/radix/react-focus-scope/focus-scope.js.map +1 -0
- package/dist/primitives/vendor/radix/react-focus-scope/index.d.ts +1 -0
- package/dist/primitives/vendor/radix/react-id/id.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-id/id.js +17 -0
- package/dist/primitives/vendor/radix/react-id/id.js.map +1 -0
- package/dist/primitives/vendor/radix/react-id/index.d.ts +1 -0
- package/dist/primitives/vendor/radix/react-label/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-label/label.d.ts +9 -0
- package/dist/primitives/vendor/radix/react-label/label.js +21 -0
- package/dist/primitives/vendor/radix/react-label/label.js.map +1 -0
- package/dist/primitives/vendor/radix/react-menu/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-menu/menu.d.ts +173 -0
- package/dist/primitives/vendor/radix/react-menu/menu.js +806 -0
- package/dist/primitives/vendor/radix/react-menu/menu.js.map +1 -0
- package/dist/primitives/vendor/radix/react-menubar/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-menubar/menubar.d.ts +106 -0
- package/dist/primitives/vendor/radix/react-menubar/menubar.js +377 -0
- package/dist/primitives/vendor/radix/react-menubar/menubar.js.map +1 -0
- package/dist/primitives/vendor/radix/react-navigation-menu/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-navigation-menu/navigation-menu.d.ts +124 -0
- package/dist/primitives/vendor/radix/react-navigation-menu/navigation-menu.js +743 -0
- package/dist/primitives/vendor/radix/react-navigation-menu/navigation-menu.js.map +1 -0
- package/dist/primitives/vendor/radix/react-popover/index.d.ts +1 -0
- package/dist/primitives/vendor/radix/react-popover/popover.d.ts +83 -0
- package/dist/primitives/vendor/radix/react-popover/popover.js +236 -0
- package/dist/primitives/vendor/radix/react-popover/popover.js.map +1 -0
- package/dist/primitives/vendor/radix/react-popper/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-popper/popper.d.ts +44 -0
- package/dist/primitives/vendor/radix/react-popper/popper.js +276 -0
- package/dist/primitives/vendor/radix/react-popper/popper.js.map +1 -0
- package/dist/primitives/vendor/radix/react-portal/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-portal/portal.d.ts +13 -0
- package/dist/primitives/vendor/radix/react-portal/portal.js +21 -0
- package/dist/primitives/vendor/radix/react-portal/portal.js.map +1 -0
- package/dist/primitives/vendor/radix/react-presence/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-presence/presence.d.ts +11 -0
- package/dist/primitives/vendor/radix/react-presence/presence.js +152 -0
- package/dist/primitives/vendor/radix/react-presence/presence.js.map +1 -0
- package/dist/primitives/vendor/radix/react-presence/use-state-machine.d.ts +10 -0
- package/dist/primitives/vendor/radix/react-presence/use-state-machine.js +12 -0
- package/dist/primitives/vendor/radix/react-presence/use-state-machine.js.map +1 -0
- package/dist/primitives/vendor/radix/react-primitive/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-primitive/primitive.d.ts +56 -0
- package/dist/primitives/vendor/radix/react-primitive/primitive.js +84 -0
- package/dist/primitives/vendor/radix/react-primitive/primitive.js.map +1 -0
- package/dist/primitives/vendor/radix/react-progress/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-progress/progress.d.ts +17 -0
- package/dist/primitives/vendor/radix/react-progress/progress.js +79 -0
- package/dist/primitives/vendor/radix/react-progress/progress.js.map +1 -0
- package/dist/primitives/vendor/radix/react-radio-group/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-radio-group/radio-group.d.ts +55 -0
- package/dist/primitives/vendor/radix/react-radio-group/radio-group.js +173 -0
- package/dist/primitives/vendor/radix/react-radio-group/radio-group.js.map +1 -0
- package/dist/primitives/vendor/radix/react-radio-group/radio.d.ts +62 -0
- package/dist/primitives/vendor/radix/react-radio-group/radio.js +150 -0
- package/dist/primitives/vendor/radix/react-radio-group/radio.js.map +1 -0
- package/dist/primitives/vendor/radix/react-roving-focus/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-roving-focus/roving-focus-group.d.ts +47 -0
- package/dist/primitives/vendor/radix/react-roving-focus/roving-focus-group.js +218 -0
- package/dist/primitives/vendor/radix/react-roving-focus/roving-focus-group.js.map +1 -0
- package/dist/primitives/vendor/radix/react-scroll-area/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-scroll-area/scroll-area.d.ts +121 -0
- package/dist/primitives/vendor/radix/react-scroll-area/scroll-area.js +713 -0
- package/dist/primitives/vendor/radix/react-scroll-area/scroll-area.js.map +1 -0
- package/dist/primitives/vendor/radix/react-scroll-area/use-state-machine.d.ts +10 -0
- package/dist/primitives/vendor/radix/react-scroll-area/use-state-machine.js +12 -0
- package/dist/primitives/vendor/radix/react-scroll-area/use-state-machine.js.map +1 -0
- package/dist/primitives/vendor/radix/react-select/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-select/select.d.ts +163 -0
- package/dist/primitives/vendor/radix/react-select/select.js +1040 -0
- package/dist/primitives/vendor/radix/react-select/select.js.map +1 -0
- package/dist/primitives/vendor/radix/react-separator/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-separator/separator.d.ts +20 -0
- package/dist/primitives/vendor/radix/react-separator/separator.js +29 -0
- package/dist/primitives/vendor/radix/react-separator/separator.js.map +1 -0
- package/dist/primitives/vendor/radix/react-slot/index.d.ts +1 -0
- package/dist/primitives/vendor/radix/react-slot/slot.d.ts +29 -0
- package/dist/primitives/vendor/radix/react-slot/slot.js +107 -0
- package/dist/primitives/vendor/radix/react-slot/slot.js.map +1 -0
- package/dist/primitives/vendor/radix/react-switch/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-switch/switch.d.ts +41 -0
- package/dist/primitives/vendor/radix/react-switch/switch.js +185 -0
- package/dist/primitives/vendor/radix/react-switch/switch.js.map +1 -0
- package/dist/primitives/vendor/radix/react-tabs/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-tabs/tabs.d.ts +54 -0
- package/dist/primitives/vendor/radix/react-tabs/tabs.js +145 -0
- package/dist/primitives/vendor/radix/react-tabs/tabs.js.map +1 -0
- package/dist/primitives/vendor/radix/react-toast/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-toast/toast.d.ts +125 -0
- package/dist/primitives/vendor/radix/react-toast/toast.js +557 -0
- package/dist/primitives/vendor/radix/react-toast/toast.js.map +1 -0
- package/dist/primitives/vendor/radix/react-tooltip/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-tooltip/tooltip.d.ts +99 -0
- package/dist/primitives/vendor/radix/react-tooltip/tooltip.js +503 -0
- package/dist/primitives/vendor/radix/react-tooltip/tooltip.js.map +1 -0
- package/dist/primitives/vendor/radix/react-use-callback-ref/index.d.ts +1 -0
- package/dist/primitives/vendor/radix/react-use-callback-ref/use-callback-ref.d.ts +6 -0
- package/dist/primitives/vendor/radix/react-use-callback-ref/use-callback-ref.js +18 -0
- package/dist/primitives/vendor/radix/react-use-callback-ref/use-callback-ref.js.map +1 -0
- package/dist/primitives/vendor/radix/react-use-controllable-state/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-use-controllable-state/use-controllable-state-reducer.d.ts +28 -0
- package/dist/primitives/vendor/radix/react-use-controllable-state/use-controllable-state.d.ts +11 -0
- package/dist/primitives/vendor/radix/react-use-controllable-state/use-controllable-state.js +59 -0
- package/dist/primitives/vendor/radix/react-use-controllable-state/use-controllable-state.js.map +1 -0
- package/dist/primitives/vendor/radix/react-use-effect-event/index.d.ts +1 -0
- package/dist/primitives/vendor/radix/react-use-effect-event/use-effect-event.d.ts +7 -0
- package/dist/primitives/vendor/radix/react-use-is-hydrated/index.d.ts +1 -0
- package/dist/primitives/vendor/radix/react-use-is-hydrated/use-is-hydrated-legacy.d.ts +1 -0
- package/dist/primitives/vendor/radix/react-use-is-hydrated/use-is-hydrated-legacy.js +18 -0
- package/dist/primitives/vendor/radix/react-use-is-hydrated/use-is-hydrated-legacy.js.map +1 -0
- package/dist/primitives/vendor/radix/react-use-is-hydrated/use-is-hydrated.d.ts +6 -0
- package/dist/primitives/vendor/radix/react-use-is-hydrated/use-is-hydrated.js +19 -0
- package/dist/primitives/vendor/radix/react-use-is-hydrated/use-is-hydrated.js.map +1 -0
- package/dist/primitives/vendor/radix/react-use-layout-effect/index.d.ts +1 -0
- package/dist/primitives/vendor/radix/react-use-layout-effect/use-layout-effect.d.ts +10 -0
- package/dist/primitives/vendor/radix/react-use-layout-effect/use-layout-effect.js +15 -0
- package/dist/primitives/vendor/radix/react-use-layout-effect/use-layout-effect.js.map +1 -0
- package/dist/primitives/vendor/radix/react-use-previous/index.d.ts +1 -0
- package/dist/primitives/vendor/radix/react-use-previous/use-previous.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-use-previous/use-previous.js +20 -0
- package/dist/primitives/vendor/radix/react-use-previous/use-previous.js.map +1 -0
- package/dist/primitives/vendor/radix/react-use-size/index.d.ts +1 -0
- package/dist/primitives/vendor/radix/react-use-size/use-size.d.ts +5 -0
- package/dist/primitives/vendor/radix/react-use-size/use-size.js +42 -0
- package/dist/primitives/vendor/radix/react-use-size/use-size.js.map +1 -0
- package/dist/primitives/vendor/radix/react-visually-hidden/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/react-visually-hidden/visually-hidden.d.ts +21 -0
- package/dist/primitives/vendor/radix/react-visually-hidden/visually-hidden.js +32 -0
- package/dist/primitives/vendor/radix/react-visually-hidden/visually-hidden.js.map +1 -0
- package/dist/primitives/vendor/radix/rect/index.d.ts +2 -0
- package/dist/primitives/vendor/radix/rect/observe-element-rect.d.ts +16 -0
- package/dist/styles.css +1 -1
- package/dist/theme.css +36 -17
- package/dist/tokens.d.ts +78 -36
- package/dist/tokens.js +63 -32
- package/dist/tokens.js.map +1 -1
- package/package.json +25 -13
- package/vendor-manifest.json +1101 -0
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { createContextScope } from "../react-context/create-context.js";
|
|
3
|
+
import { useComposedRefs } from "../react-compose-refs/compose-refs.js";
|
|
4
|
+
import { useLayoutEffect } from "../react-use-layout-effect/use-layout-effect.js";
|
|
5
|
+
import { Primitive } from "../react-primitive/primitive.js";
|
|
6
|
+
import { useCallbackRef } from "../react-use-callback-ref/use-callback-ref.js";
|
|
7
|
+
import { Root as Root$1 } from "../react-arrow/arrow.js";
|
|
8
|
+
import { useSize } from "../react-use-size/use-size.js";
|
|
9
|
+
import * as React from "react";
|
|
10
|
+
import { jsx } from "react/jsx-runtime";
|
|
11
|
+
import { arrow, autoUpdate, flip, hide, limitShift, offset, shift, size, useFloating } from "@floating-ui/react-dom";
|
|
12
|
+
//#region src/primitives/vendor/radix/react-popper/popper.tsx
|
|
13
|
+
var POPPER_NAME = "Popper";
|
|
14
|
+
var [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);
|
|
15
|
+
var [PopperProvider, usePopperContext] = createPopperContext(POPPER_NAME);
|
|
16
|
+
var Popper = (props) => {
|
|
17
|
+
const { __scopePopper, children } = props;
|
|
18
|
+
const [anchor, setAnchor] = React.useState(null);
|
|
19
|
+
const [placementState, setPlacementState] = React.useState(void 0);
|
|
20
|
+
return /* @__PURE__ */ jsx(PopperProvider, {
|
|
21
|
+
scope: __scopePopper,
|
|
22
|
+
anchor,
|
|
23
|
+
onAnchorChange: setAnchor,
|
|
24
|
+
placementState,
|
|
25
|
+
setPlacementState,
|
|
26
|
+
children
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
var ANCHOR_NAME = "PopperAnchor";
|
|
30
|
+
var PopperAnchor = /* @__PURE__ */ React.forwardRef(function PopperAnchor(props, forwardedRef) {
|
|
31
|
+
const { __scopePopper, virtualRef, ...anchorProps } = props;
|
|
32
|
+
const context = usePopperContext(ANCHOR_NAME, __scopePopper);
|
|
33
|
+
const ref = React.useRef(null);
|
|
34
|
+
const onAnchorChange = context.onAnchorChange;
|
|
35
|
+
const callbackRef = React.useCallback((node) => {
|
|
36
|
+
ref.current = node;
|
|
37
|
+
if (node) onAnchorChange(node);
|
|
38
|
+
}, [onAnchorChange]);
|
|
39
|
+
const composedRefs = useComposedRefs(forwardedRef, callbackRef);
|
|
40
|
+
const anchorRef = React.useRef(null);
|
|
41
|
+
React.useEffect(() => {
|
|
42
|
+
if (!virtualRef) return;
|
|
43
|
+
const previousAnchor = anchorRef.current;
|
|
44
|
+
anchorRef.current = virtualRef.current;
|
|
45
|
+
if (previousAnchor !== anchorRef.current) onAnchorChange(anchorRef.current);
|
|
46
|
+
});
|
|
47
|
+
const sideAndAlign = context.placementState && getSideAndAlignFromPlacement(context.placementState);
|
|
48
|
+
const placedSide = sideAndAlign?.[0];
|
|
49
|
+
const placedAlign = sideAndAlign?.[1];
|
|
50
|
+
return virtualRef ? null : /* @__PURE__ */ jsx(Primitive.div, {
|
|
51
|
+
"data-radix-popper-side": placedSide,
|
|
52
|
+
"data-radix-popper-align": placedAlign,
|
|
53
|
+
...anchorProps,
|
|
54
|
+
ref: composedRefs
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
var CONTENT_NAME = "PopperContent";
|
|
58
|
+
var [PopperContentProvider, useContentContext] = createPopperContext(CONTENT_NAME);
|
|
59
|
+
var PopperContent = /* @__PURE__ */ React.forwardRef(function PopperContent(props, forwardedRef) {
|
|
60
|
+
const { __scopePopper, side = "bottom", sideOffset = 0, align = "center", alignOffset = 0, arrowPadding = 0, avoidCollisions = true, collisionBoundary = [], collisionPadding: collisionPaddingProp = 0, sticky = "partial", hideWhenDetached = false, updatePositionStrategy = "optimized", onPlaced, ...contentProps } = props;
|
|
61
|
+
const context = usePopperContext(CONTENT_NAME, __scopePopper);
|
|
62
|
+
const [content, setContent] = React.useState(null);
|
|
63
|
+
const composedRefs = useComposedRefs(forwardedRef, setContent);
|
|
64
|
+
const [arrow$1, setArrow] = React.useState(null);
|
|
65
|
+
const arrowSize = useSize(arrow$1);
|
|
66
|
+
const arrowWidth = arrowSize?.width ?? 0;
|
|
67
|
+
const arrowHeight = arrowSize?.height ?? 0;
|
|
68
|
+
const desiredPlacement = side + (align !== "center" ? "-" + align : "");
|
|
69
|
+
const collisionPadding = typeof collisionPaddingProp === "number" ? collisionPaddingProp : {
|
|
70
|
+
top: 0,
|
|
71
|
+
right: 0,
|
|
72
|
+
bottom: 0,
|
|
73
|
+
left: 0,
|
|
74
|
+
...collisionPaddingProp
|
|
75
|
+
};
|
|
76
|
+
const boundary = Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary];
|
|
77
|
+
const hasExplicitBoundaries = boundary.length > 0;
|
|
78
|
+
const detectOverflowOptions = {
|
|
79
|
+
padding: collisionPadding,
|
|
80
|
+
boundary: boundary.filter(isNotNull),
|
|
81
|
+
altBoundary: hasExplicitBoundaries
|
|
82
|
+
};
|
|
83
|
+
const { refs, floatingStyles, placement, isPositioned, middlewareData } = useFloating({
|
|
84
|
+
strategy: "fixed",
|
|
85
|
+
placement: desiredPlacement,
|
|
86
|
+
whileElementsMounted: (...args) => {
|
|
87
|
+
return autoUpdate(...args, { animationFrame: updatePositionStrategy === "always" });
|
|
88
|
+
},
|
|
89
|
+
elements: { reference: context.anchor },
|
|
90
|
+
middleware: [
|
|
91
|
+
offset({
|
|
92
|
+
mainAxis: sideOffset + arrowHeight,
|
|
93
|
+
alignmentAxis: alignOffset
|
|
94
|
+
}),
|
|
95
|
+
avoidCollisions && shift({
|
|
96
|
+
mainAxis: true,
|
|
97
|
+
crossAxis: false,
|
|
98
|
+
limiter: sticky === "partial" ? limitShift() : void 0,
|
|
99
|
+
...detectOverflowOptions
|
|
100
|
+
}),
|
|
101
|
+
avoidCollisions && flip({ ...detectOverflowOptions }),
|
|
102
|
+
size({
|
|
103
|
+
...detectOverflowOptions,
|
|
104
|
+
apply: ({ elements, rects, availableWidth, availableHeight }) => {
|
|
105
|
+
const { width: anchorWidth, height: anchorHeight } = rects.reference;
|
|
106
|
+
const contentStyle = elements.floating.style;
|
|
107
|
+
contentStyle.setProperty("--radix-popper-available-width", `${availableWidth}px`);
|
|
108
|
+
contentStyle.setProperty("--radix-popper-available-height", `${availableHeight}px`);
|
|
109
|
+
contentStyle.setProperty("--radix-popper-anchor-width", `${anchorWidth}px`);
|
|
110
|
+
contentStyle.setProperty("--radix-popper-anchor-height", `${anchorHeight}px`);
|
|
111
|
+
}
|
|
112
|
+
}),
|
|
113
|
+
arrow$1 && arrow({
|
|
114
|
+
element: arrow$1,
|
|
115
|
+
padding: arrowPadding
|
|
116
|
+
}),
|
|
117
|
+
transformOrigin({
|
|
118
|
+
arrowWidth,
|
|
119
|
+
arrowHeight
|
|
120
|
+
}),
|
|
121
|
+
hideWhenDetached && hide({
|
|
122
|
+
strategy: "referenceHidden",
|
|
123
|
+
...detectOverflowOptions,
|
|
124
|
+
boundary: hasExplicitBoundaries ? detectOverflowOptions.boundary : void 0
|
|
125
|
+
})
|
|
126
|
+
]
|
|
127
|
+
});
|
|
128
|
+
const setPlacementState = context.setPlacementState;
|
|
129
|
+
useLayoutEffect(() => {
|
|
130
|
+
setPlacementState(placement);
|
|
131
|
+
return () => {
|
|
132
|
+
setPlacementState(void 0);
|
|
133
|
+
};
|
|
134
|
+
}, [placement, setPlacementState]);
|
|
135
|
+
const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);
|
|
136
|
+
const handlePlaced = useCallbackRef(onPlaced);
|
|
137
|
+
useLayoutEffect(() => {
|
|
138
|
+
if (isPositioned) handlePlaced?.();
|
|
139
|
+
}, [isPositioned, handlePlaced]);
|
|
140
|
+
const arrowX = middlewareData.arrow?.x;
|
|
141
|
+
const arrowY = middlewareData.arrow?.y;
|
|
142
|
+
const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;
|
|
143
|
+
const [contentZIndex, setContentZIndex] = React.useState();
|
|
144
|
+
useLayoutEffect(() => {
|
|
145
|
+
if (content) setContentZIndex(window.getComputedStyle(content).zIndex);
|
|
146
|
+
}, [content]);
|
|
147
|
+
return /* @__PURE__ */ jsx("div", {
|
|
148
|
+
ref: refs.setFloating,
|
|
149
|
+
"data-radix-popper-content-wrapper": "",
|
|
150
|
+
style: {
|
|
151
|
+
...floatingStyles,
|
|
152
|
+
transform: isPositioned ? floatingStyles.transform : "translate(0, -200%)",
|
|
153
|
+
minWidth: "max-content",
|
|
154
|
+
zIndex: contentZIndex,
|
|
155
|
+
"--radix-popper-transform-origin": [middlewareData.transformOrigin?.x, middlewareData.transformOrigin?.y].join(" "),
|
|
156
|
+
...middlewareData.hide?.referenceHidden && {
|
|
157
|
+
visibility: "hidden",
|
|
158
|
+
pointerEvents: "none"
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
dir: props.dir,
|
|
162
|
+
children: /* @__PURE__ */ jsx(PopperContentProvider, {
|
|
163
|
+
scope: __scopePopper,
|
|
164
|
+
placedSide,
|
|
165
|
+
placedAlign,
|
|
166
|
+
onArrowChange: setArrow,
|
|
167
|
+
arrowX,
|
|
168
|
+
arrowY,
|
|
169
|
+
shouldHideArrow: cannotCenterArrow,
|
|
170
|
+
children: /* @__PURE__ */ jsx(Primitive.div, {
|
|
171
|
+
"data-side": placedSide,
|
|
172
|
+
"data-align": placedAlign,
|
|
173
|
+
...contentProps,
|
|
174
|
+
ref: composedRefs,
|
|
175
|
+
style: {
|
|
176
|
+
...contentProps.style,
|
|
177
|
+
animation: !isPositioned ? "none" : contentProps.style?.animation
|
|
178
|
+
}
|
|
179
|
+
})
|
|
180
|
+
})
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
var ARROW_NAME = "PopperArrow";
|
|
184
|
+
var OPPOSITE_SIDE = {
|
|
185
|
+
top: "bottom",
|
|
186
|
+
right: "left",
|
|
187
|
+
bottom: "top",
|
|
188
|
+
left: "right"
|
|
189
|
+
};
|
|
190
|
+
var PopperArrow = /* @__PURE__ */ React.forwardRef(function PopperArrow(props, forwardedRef) {
|
|
191
|
+
const { __scopePopper, ...arrowProps } = props;
|
|
192
|
+
const contentContext = useContentContext(ARROW_NAME, __scopePopper);
|
|
193
|
+
const baseSide = OPPOSITE_SIDE[contentContext.placedSide];
|
|
194
|
+
return /* @__PURE__ */ jsx("span", {
|
|
195
|
+
ref: contentContext.onArrowChange,
|
|
196
|
+
style: {
|
|
197
|
+
position: "absolute",
|
|
198
|
+
left: contentContext.arrowX,
|
|
199
|
+
top: contentContext.arrowY,
|
|
200
|
+
[baseSide]: 0,
|
|
201
|
+
transformOrigin: {
|
|
202
|
+
top: "",
|
|
203
|
+
right: "0 0",
|
|
204
|
+
bottom: "center 0",
|
|
205
|
+
left: "100% 0"
|
|
206
|
+
}[contentContext.placedSide],
|
|
207
|
+
transform: {
|
|
208
|
+
top: "translateY(100%)",
|
|
209
|
+
right: "translateY(50%) rotate(90deg) translateX(-50%)",
|
|
210
|
+
bottom: `rotate(180deg)`,
|
|
211
|
+
left: "translateY(50%) rotate(-90deg) translateX(50%)"
|
|
212
|
+
}[contentContext.placedSide],
|
|
213
|
+
visibility: contentContext.shouldHideArrow ? "hidden" : void 0
|
|
214
|
+
},
|
|
215
|
+
children: /* @__PURE__ */ jsx(Root$1, {
|
|
216
|
+
...arrowProps,
|
|
217
|
+
ref: forwardedRef,
|
|
218
|
+
style: {
|
|
219
|
+
...arrowProps.style,
|
|
220
|
+
display: "block"
|
|
221
|
+
}
|
|
222
|
+
})
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
function isNotNull(value) {
|
|
226
|
+
return value !== null;
|
|
227
|
+
}
|
|
228
|
+
var transformOrigin = (options) => ({
|
|
229
|
+
name: "transformOrigin",
|
|
230
|
+
options,
|
|
231
|
+
fn(data) {
|
|
232
|
+
const { placement, rects, middlewareData } = data;
|
|
233
|
+
const isArrowHidden = middlewareData.arrow?.centerOffset !== 0;
|
|
234
|
+
const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;
|
|
235
|
+
const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;
|
|
236
|
+
const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);
|
|
237
|
+
const noArrowAlign = {
|
|
238
|
+
start: "0%",
|
|
239
|
+
center: "50%",
|
|
240
|
+
end: "100%"
|
|
241
|
+
}[placedAlign];
|
|
242
|
+
const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;
|
|
243
|
+
const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;
|
|
244
|
+
let x = "";
|
|
245
|
+
let y = "";
|
|
246
|
+
if (placedSide === "bottom") {
|
|
247
|
+
x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;
|
|
248
|
+
y = `${-arrowHeight}px`;
|
|
249
|
+
} else if (placedSide === "top") {
|
|
250
|
+
x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;
|
|
251
|
+
y = `${rects.floating.height + arrowHeight}px`;
|
|
252
|
+
} else if (placedSide === "right") {
|
|
253
|
+
x = `${-arrowHeight}px`;
|
|
254
|
+
y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;
|
|
255
|
+
} else if (placedSide === "left") {
|
|
256
|
+
x = `${rects.floating.width + arrowHeight}px`;
|
|
257
|
+
y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;
|
|
258
|
+
}
|
|
259
|
+
return { data: {
|
|
260
|
+
x,
|
|
261
|
+
y
|
|
262
|
+
} };
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
function getSideAndAlignFromPlacement(placement) {
|
|
266
|
+
const [side, align = "center"] = placement.split("-");
|
|
267
|
+
return [side, align];
|
|
268
|
+
}
|
|
269
|
+
var Root = Popper;
|
|
270
|
+
var Anchor = PopperAnchor;
|
|
271
|
+
var Content = PopperContent;
|
|
272
|
+
var Arrow = PopperArrow;
|
|
273
|
+
//#endregion
|
|
274
|
+
export { Anchor, Arrow, Content, Popper, PopperAnchor, PopperArrow, PopperContent, Root, createPopperScope };
|
|
275
|
+
|
|
276
|
+
//# sourceMappingURL=popper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"popper.js","names":["arrow","floatingUIarrow","ArrowPrimitive.Root"],"sources":["../../../../../src/primitives/vendor/radix/react-popper/popper.tsx"],"sourcesContent":["// Vendored from Radix Primitives (c) 2022 WorkOS, MIT. See vendor/LICENSE.radix.\n// Local modification: package imports resolve to the pinned local source.\nimport * as React from 'react';\nimport {\n useFloating,\n autoUpdate,\n offset,\n shift,\n limitShift,\n hide,\n arrow as floatingUIarrow,\n flip,\n size,\n} from '@floating-ui/react-dom';\nimport * as ArrowPrimitive from '../react-arrow';\nimport { useComposedRefs } from '../react-compose-refs';\nimport { createContextScope } from '../react-context';\nimport { Primitive } from '../react-primitive';\nimport { useCallbackRef } from '../react-use-callback-ref';\nimport { useLayoutEffect } from '../react-use-layout-effect';\nimport { useSize } from '../react-use-size';\n\nimport type { Placement, Middleware } from '@floating-ui/react-dom';\nimport type { Scope } from '../react-context';\nimport type { Measurable } from '../rect';\n\nconst SIDE_OPTIONS = ['top', 'right', 'bottom', 'left'] as const;\nconst ALIGN_OPTIONS = ['start', 'center', 'end'] as const;\n\ntype Side = (typeof SIDE_OPTIONS)[number];\ntype Align = (typeof ALIGN_OPTIONS)[number];\n\n/* -------------------------------------------------------------------------------------------------\n * Popper\n * -----------------------------------------------------------------------------------------------*/\n\nconst POPPER_NAME = 'Popper';\n\ntype ScopedProps<P> = P & { __scopePopper?: Scope };\nconst [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);\n\ntype PopperContextValue = {\n anchor: Measurable | null;\n onAnchorChange(anchor: Measurable | null): void;\n placementState: Placement | undefined;\n setPlacementState: React.Dispatch<React.SetStateAction<Placement | undefined>>;\n};\nconst [PopperProvider, usePopperContext] = createPopperContext<PopperContextValue>(POPPER_NAME);\n\ninterface PopperProps {\n children?: React.ReactNode;\n}\nconst Popper: React.FC<PopperProps> = (props: ScopedProps<PopperProps>) => {\n const { __scopePopper, children } = props;\n const [anchor, setAnchor] = React.useState<Measurable | null>(null);\n const [placementState, setPlacementState] = React.useState<Placement | undefined>(undefined);\n return (\n <PopperProvider\n scope={__scopePopper}\n anchor={anchor}\n onAnchorChange={setAnchor}\n placementState={placementState}\n setPlacementState={setPlacementState}\n >\n {children}\n </PopperProvider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PopperAnchor\n * -----------------------------------------------------------------------------------------------*/\n\nconst ANCHOR_NAME = 'PopperAnchor';\n\ntype PopperAnchorElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface PopperAnchorProps extends PrimitiveDivProps {\n virtualRef?: React.RefObject<Measurable | null>;\n}\n\nconst PopperAnchor = /* @__PURE__ */ React.forwardRef<PopperAnchorElement, PopperAnchorProps>(\n function PopperAnchor(props: ScopedProps<PopperAnchorProps>, forwardedRef) {\n const { __scopePopper, virtualRef, ...anchorProps } = props;\n const context = usePopperContext(ANCHOR_NAME, __scopePopper);\n const ref = React.useRef<PopperAnchorElement>(null);\n const onAnchorChange = context.onAnchorChange;\n\n // For DOM anchors, set the anchor from a callback ref rather than an\n // effect. React invokes callback refs during the commit phase which does\n // not count toward the nested update depth limit, so mounting many\n // Popper-based components at once doesn't trigger \"Maximum update depth\n // exceeded\"\n // see https://github.com/radix-ui/primitives/issues/3858\n const callbackRef = React.useCallback(\n (node: PopperAnchorElement | null) => {\n ref.current = node;\n if (node) {\n onAnchorChange(node);\n }\n },\n [onAnchorChange],\n );\n const composedRefs = useComposedRefs(forwardedRef, callbackRef);\n\n const anchorRef = React.useRef<Measurable | null>(null);\n React.useEffect(() => {\n if (!virtualRef) {\n return;\n }\n\n const previousAnchor = anchorRef.current;\n anchorRef.current = virtualRef.current;\n if (previousAnchor !== anchorRef.current) {\n onAnchorChange(anchorRef.current);\n }\n });\n\n const sideAndAlign =\n context.placementState && getSideAndAlignFromPlacement(context.placementState);\n const placedSide = sideAndAlign?.[0];\n const placedAlign = sideAndAlign?.[1];\n\n return virtualRef ? null : (\n <Primitive.div\n data-radix-popper-side={placedSide}\n data-radix-popper-align={placedAlign}\n {...anchorProps}\n ref={composedRefs}\n />\n );\n },\n);\n\n/* -------------------------------------------------------------------------------------------------\n * PopperContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'PopperContent';\n\ntype PopperContentContextValue = {\n placedSide: Side;\n placedAlign: Align;\n onArrowChange(arrow: HTMLSpanElement | null): void;\n arrowX?: number;\n arrowY?: number;\n shouldHideArrow: boolean;\n};\n\nconst [PopperContentProvider, useContentContext] =\n createPopperContext<PopperContentContextValue>(CONTENT_NAME);\n\ntype Boundary = Element | null;\n\ntype PopperContentElement = React.ComponentRef<typeof Primitive.div>;\ninterface PopperContentProps extends PrimitiveDivProps {\n side?: Side;\n sideOffset?: number;\n align?: Align;\n alignOffset?: number;\n arrowPadding?: number;\n avoidCollisions?: boolean;\n collisionBoundary?: Boundary | Boundary[];\n collisionPadding?: number | Partial<Record<Side, number>>;\n sticky?: 'partial' | 'always';\n hideWhenDetached?: boolean;\n updatePositionStrategy?: 'optimized' | 'always';\n onPlaced?: () => void;\n}\n\nconst PopperContent = /* @__PURE__ */ React.forwardRef<PopperContentElement, PopperContentProps>(\n function PopperContent(props: ScopedProps<PopperContentProps>, forwardedRef) {\n const {\n __scopePopper,\n side = 'bottom',\n sideOffset = 0,\n align = 'center',\n alignOffset = 0,\n arrowPadding = 0,\n avoidCollisions = true,\n collisionBoundary = [],\n collisionPadding: collisionPaddingProp = 0,\n sticky = 'partial',\n hideWhenDetached = false,\n updatePositionStrategy = 'optimized',\n onPlaced,\n ...contentProps\n } = props;\n\n const context = usePopperContext(CONTENT_NAME, __scopePopper);\n\n const [content, setContent] = React.useState<HTMLDivElement | null>(null);\n const composedRefs = useComposedRefs(forwardedRef, setContent);\n\n const [arrow, setArrow] = React.useState<HTMLSpanElement | null>(null);\n const arrowSize = useSize(arrow);\n const arrowWidth = arrowSize?.width ?? 0;\n const arrowHeight = arrowSize?.height ?? 0;\n\n const desiredPlacement = (side + (align !== 'center' ? '-' + align : '')) as Placement;\n\n const collisionPadding =\n typeof collisionPaddingProp === 'number'\n ? collisionPaddingProp\n : { top: 0, right: 0, bottom: 0, left: 0, ...collisionPaddingProp };\n\n const boundary = Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary];\n const hasExplicitBoundaries = boundary.length > 0;\n\n const detectOverflowOptions = {\n padding: collisionPadding,\n boundary: boundary.filter(isNotNull),\n // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries\n altBoundary: hasExplicitBoundaries,\n };\n\n const { refs, floatingStyles, placement, isPositioned, middlewareData } = useFloating({\n // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues\n strategy: 'fixed',\n placement: desiredPlacement,\n whileElementsMounted: (...args) => {\n const cleanup = autoUpdate(...args, {\n animationFrame: updatePositionStrategy === 'always',\n });\n return cleanup;\n },\n elements: {\n reference: context.anchor,\n },\n middleware: [\n offset({ mainAxis: sideOffset + arrowHeight, alignmentAxis: alignOffset }),\n avoidCollisions &&\n shift({\n mainAxis: true,\n crossAxis: false,\n limiter: sticky === 'partial' ? limitShift() : undefined,\n ...detectOverflowOptions,\n }),\n avoidCollisions && flip({ ...detectOverflowOptions }),\n size({\n ...detectOverflowOptions,\n apply: ({ elements, rects, availableWidth, availableHeight }) => {\n const { width: anchorWidth, height: anchorHeight } = rects.reference;\n const contentStyle = elements.floating.style;\n contentStyle.setProperty('--radix-popper-available-width', `${availableWidth}px`);\n contentStyle.setProperty('--radix-popper-available-height', `${availableHeight}px`);\n contentStyle.setProperty('--radix-popper-anchor-width', `${anchorWidth}px`);\n contentStyle.setProperty('--radix-popper-anchor-height', `${anchorHeight}px`);\n },\n }),\n arrow && floatingUIarrow({ element: arrow, padding: arrowPadding }),\n transformOrigin({ arrowWidth, arrowHeight }),\n hideWhenDetached &&\n hide({\n strategy: 'referenceHidden',\n ...detectOverflowOptions,\n // `hide` detects whether the anchor (reference) is clipped, so when\n // no explicit `collisionBoundary` is set we fall back to Floating\n // UI's default clipping ancestors (e.g. a scrollable menu). This\n // lets an occluded submenu hide once its anchor scrolls out of view\n // (#3237). The collision/size middlewares deliberately keep the\n // viewport-based default to avoid clamping content rendered inside\n // transformed or overflow-clipping portal containers.\n boundary: hasExplicitBoundaries ? detectOverflowOptions.boundary : undefined,\n }),\n ],\n });\n\n const setPlacementState = context.setPlacementState;\n useLayoutEffect(() => {\n setPlacementState(placement);\n return () => {\n setPlacementState(undefined);\n };\n }, [placement, setPlacementState]);\n\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n\n const handlePlaced = useCallbackRef(onPlaced);\n useLayoutEffect(() => {\n if (isPositioned) {\n handlePlaced?.();\n }\n }, [isPositioned, handlePlaced]);\n\n const arrowX = middlewareData.arrow?.x;\n const arrowY = middlewareData.arrow?.y;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n\n const [contentZIndex, setContentZIndex] = React.useState<string>();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n\n return (\n <div\n ref={refs.setFloating}\n data-radix-popper-content-wrapper=\"\"\n style={{\n ...floatingStyles,\n transform: isPositioned ? floatingStyles.transform : 'translate(0, -200%)', // keep off the page when measuring\n minWidth: 'max-content',\n zIndex: contentZIndex,\n '--radix-popper-transform-origin': [\n middlewareData.transformOrigin?.x,\n middlewareData.transformOrigin?.y,\n ].join(' '),\n\n // hide the content if using the hide middleware and should be hidden\n // set visibility to hidden and disable pointer events so the UI behaves\n // as if the PopperContent isn't there at all\n ...(middlewareData.hide?.referenceHidden && {\n visibility: 'hidden',\n pointerEvents: 'none',\n }),\n }}\n // Floating UI interally calculates logical alignment based the `dir` attribute on\n // the reference/floating node, we must add this attribute here to ensure\n // this is calculated when portalled as well as inline.\n dir={props.dir}\n >\n <PopperContentProvider\n scope={__scopePopper}\n placedSide={placedSide}\n placedAlign={placedAlign}\n onArrowChange={setArrow}\n arrowX={arrowX}\n arrowY={arrowY}\n shouldHideArrow={cannotCenterArrow}\n >\n <Primitive.div\n data-side={placedSide}\n data-align={placedAlign}\n {...contentProps}\n ref={composedRefs}\n style={{\n ...contentProps.style,\n // if the PopperContent hasn't been placed yet (not all\n // measurements done) we prevent animations so that users'\n // animations don't kick in too early from the wrong sides.\n animation: !isPositioned ? 'none' : contentProps.style?.animation,\n }}\n />\n </PopperContentProvider>\n </div>\n );\n },\n);\n\n/* -------------------------------------------------------------------------------------------------\n * PopperArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'PopperArrow';\n\nconst OPPOSITE_SIDE: Record<Side, Side> = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right',\n};\n\ntype PopperArrowElement = React.ComponentRef<typeof ArrowPrimitive.Root>;\ntype ArrowProps = React.ComponentPropsWithoutRef<typeof ArrowPrimitive.Root>;\ninterface PopperArrowProps extends ArrowProps {}\n\nconst PopperArrow = /* @__PURE__ */ React.forwardRef<PopperArrowElement, PopperArrowProps>(\n function PopperArrow(props: ScopedProps<PopperArrowProps>, forwardedRef) {\n const { __scopePopper, ...arrowProps } = props;\n const contentContext = useContentContext(ARROW_NAME, __scopePopper);\n const baseSide = OPPOSITE_SIDE[contentContext.placedSide];\n\n return (\n // we have to use an extra wrapper because `ResizeObserver` (used by `useSize`)\n // doesn't report size as we'd expect on SVG elements.\n // it reports their bounding box which is effectively the largest path inside the SVG.\n <span\n ref={contentContext.onArrowChange}\n style={{\n position: 'absolute',\n left: contentContext.arrowX,\n top: contentContext.arrowY,\n [baseSide]: 0,\n transformOrigin: {\n top: '',\n right: '0 0',\n bottom: 'center 0',\n left: '100% 0',\n }[contentContext.placedSide],\n transform: {\n top: 'translateY(100%)',\n right: 'translateY(50%) rotate(90deg) translateX(-50%)',\n bottom: `rotate(180deg)`,\n left: 'translateY(50%) rotate(-90deg) translateX(50%)',\n }[contentContext.placedSide],\n visibility: contentContext.shouldHideArrow ? 'hidden' : undefined,\n }}\n >\n <ArrowPrimitive.Root\n {...arrowProps}\n ref={forwardedRef}\n style={{\n ...arrowProps.style,\n // ensures the element can be measured correctly (mostly for if SVG)\n display: 'block',\n }}\n />\n </span>\n );\n },\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction isNotNull<T>(value: T | null): value is T {\n return value !== null;\n}\n\nconst transformOrigin = (options: { arrowWidth: number; arrowHeight: number }): Middleware => ({\n name: 'transformOrigin',\n options,\n fn(data) {\n const { placement, rects, middlewareData } = data;\n\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const isArrowHidden = cannotCenterArrow;\n const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;\n const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;\n\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const noArrowAlign = { start: '0%', center: '50%', end: '100%' }[placedAlign];\n\n const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;\n const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;\n\n let x = '';\n let y = '';\n\n if (placedSide === 'bottom') {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${-arrowHeight}px`;\n } else if (placedSide === 'top') {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${rects.floating.height + arrowHeight}px`;\n } else if (placedSide === 'right') {\n x = `${-arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n } else if (placedSide === 'left') {\n x = `${rects.floating.width + arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n }\n return { data: { x, y } };\n },\n});\n\nfunction getSideAndAlignFromPlacement(placement: Placement) {\n const [side, align = 'center'] = placement.split('-');\n return [side as Side, align as Align] as const;\n}\n\nconst Root = Popper;\nconst Anchor = PopperAnchor;\nconst Content = PopperContent;\nconst Arrow = PopperArrow;\n\nexport {\n createPopperScope,\n //\n Popper,\n PopperAnchor,\n PopperContent,\n PopperArrow,\n //\n Root,\n Anchor,\n Content,\n Arrow,\n //\n SIDE_OPTIONS,\n ALIGN_OPTIONS,\n};\nexport type { PopperProps, PopperAnchorProps, PopperContentProps, PopperArrowProps };\n"],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Primitive } from '../react-primitive';
|
|
3
|
+
type PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;
|
|
4
|
+
interface PortalProps extends PrimitiveDivProps {
|
|
5
|
+
/**
|
|
6
|
+
* An optional container where the portaled content should be appended.
|
|
7
|
+
*/
|
|
8
|
+
container?: Element | DocumentFragment | null;
|
|
9
|
+
}
|
|
10
|
+
declare const Portal: React.ForwardRefExoticComponent<PortalProps & React.RefAttributes<HTMLDivElement>>;
|
|
11
|
+
declare const Root: React.ForwardRefExoticComponent<PortalProps & React.RefAttributes<HTMLDivElement>>;
|
|
12
|
+
export { Portal, Root, };
|
|
13
|
+
export type { PortalProps };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useLayoutEffect } from "../react-use-layout-effect/use-layout-effect.js";
|
|
3
|
+
import { Primitive } from "../react-primitive/primitive.js";
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
import * as ReactDOM from "react-dom";
|
|
7
|
+
//#region src/primitives/vendor/radix/react-portal/portal.tsx
|
|
8
|
+
var Portal = /* @__PURE__ */ React.forwardRef(function Portal(props, forwardedRef) {
|
|
9
|
+
const { container: containerProp, ...portalProps } = props;
|
|
10
|
+
const [mounted, setMounted] = React.useState(false);
|
|
11
|
+
useLayoutEffect(() => setMounted(true), []);
|
|
12
|
+
const container = containerProp || mounted && globalThis?.document?.body;
|
|
13
|
+
return container ? ReactDOM.createPortal(/* @__PURE__ */ jsx(Primitive.div, {
|
|
14
|
+
...portalProps,
|
|
15
|
+
ref: forwardedRef
|
|
16
|
+
}), container) : null;
|
|
17
|
+
});
|
|
18
|
+
//#endregion
|
|
19
|
+
export { Portal };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=portal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portal.js","names":[],"sources":["../../../../../src/primitives/vendor/radix/react-portal/portal.tsx"],"sourcesContent":["// Vendored from Radix Primitives (c) 2022 WorkOS, MIT. See vendor/LICENSE.radix.\n// Local modification: package imports resolve to the pinned local source.\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { Primitive } from '../react-primitive';\nimport { useLayoutEffect } from '../react-use-layout-effect';\n\n/* -------------------------------------------------------------------------------------------------\n * Portal\n * -----------------------------------------------------------------------------------------------*/\n\ntype PortalElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface PortalProps extends PrimitiveDivProps {\n /**\n * An optional container where the portaled content should be appended.\n */\n container?: Element | DocumentFragment | null;\n}\n\nconst Portal = /* @__PURE__ */ React.forwardRef<PortalElement, PortalProps>(\n function Portal(props, forwardedRef) {\n const { container: containerProp, ...portalProps } = props;\n const [mounted, setMounted] = React.useState(false);\n useLayoutEffect(() => setMounted(true), []);\n const container = containerProp || (mounted && globalThis?.document?.body);\n return container\n ? ReactDOM.createPortal(<Primitive.div {...portalProps} ref={forwardedRef} />, container)\n : null;\n },\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Portal;\n\nexport {\n Portal,\n //\n Root,\n};\nexport type { PortalProps };\n"],"mappings":";;;;;;;AAoBA,IAAM,SAAyB,sBAAM,WACnC,SAAS,OAAO,OAAO,cAAc;CACnC,MAAM,EAAE,WAAW,eAAe,GAAG,gBAAgB;CACrD,MAAM,CAAC,SAAS,cAAc,MAAM,SAAS,KAAK;CAClD,sBAAsB,WAAW,IAAI,GAAG,CAAC,CAAC;CAC1C,MAAM,YAAY,iBAAkB,WAAW,YAAY,UAAU;CACrE,OAAO,YACH,SAAS,aAAa,oBAAC,UAAU,KAAX;EAAe,GAAI;EAAa,KAAK;CAAe,CAAA,GAAG,SAAS,IACtF;AACN,CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
interface PresenceProps {
|
|
3
|
+
children: React.ReactElement | ((props: {
|
|
4
|
+
present: boolean;
|
|
5
|
+
}) => React.ReactElement);
|
|
6
|
+
present: boolean;
|
|
7
|
+
}
|
|
8
|
+
declare const Presence: React.FC<PresenceProps>;
|
|
9
|
+
declare const Root: React.FC<PresenceProps>;
|
|
10
|
+
export { Presence, Root, };
|
|
11
|
+
export type { PresenceProps };
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useLayoutEffect } from "../react-use-layout-effect/use-layout-effect.js";
|
|
3
|
+
import { useStateMachine } from "./use-state-machine.js";
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
//#region src/primitives/vendor/radix/react-presence/presence.tsx
|
|
6
|
+
var Presence = (props) => {
|
|
7
|
+
const { present, children } = props;
|
|
8
|
+
const presence = usePresence(present);
|
|
9
|
+
const child = typeof children === "function" ? children({ present: presence.isPresent }) : React.Children.only(children);
|
|
10
|
+
const ref = useStableComposedRefs(presence.ref, getElementRef(child));
|
|
11
|
+
return typeof children === "function" || presence.isPresent ? React.cloneElement(child, { ref }) : null;
|
|
12
|
+
};
|
|
13
|
+
function usePresence(present) {
|
|
14
|
+
const [node, setNode] = React.useState();
|
|
15
|
+
const stylesRef = React.useRef(null);
|
|
16
|
+
const prevPresentRef = React.useRef(present);
|
|
17
|
+
const prevAnimationNameRef = React.useRef("none");
|
|
18
|
+
const mountAnimationNameRef = React.useRef(void 0);
|
|
19
|
+
const [state, send] = useStateMachine(present ? "mounted" : "unmounted", {
|
|
20
|
+
mounted: {
|
|
21
|
+
UNMOUNT: "unmounted",
|
|
22
|
+
ANIMATION_OUT: "unmountSuspended"
|
|
23
|
+
},
|
|
24
|
+
unmountSuspended: {
|
|
25
|
+
MOUNT: "mounted",
|
|
26
|
+
ANIMATION_END: "unmounted"
|
|
27
|
+
},
|
|
28
|
+
unmounted: { MOUNT: "mounted" }
|
|
29
|
+
});
|
|
30
|
+
React.useEffect(() => {
|
|
31
|
+
if (state === "mounted") {
|
|
32
|
+
prevAnimationNameRef.current = mountAnimationNameRef.current ?? getAnimationName(stylesRef.current);
|
|
33
|
+
mountAnimationNameRef.current = void 0;
|
|
34
|
+
} else prevAnimationNameRef.current = "none";
|
|
35
|
+
}, [state]);
|
|
36
|
+
useLayoutEffect(() => {
|
|
37
|
+
const styles = stylesRef.current;
|
|
38
|
+
const wasPresent = prevPresentRef.current;
|
|
39
|
+
if (wasPresent !== present) {
|
|
40
|
+
const prevAnimationName = prevAnimationNameRef.current;
|
|
41
|
+
const currentAnimationName = getAnimationName(styles);
|
|
42
|
+
if (present) {
|
|
43
|
+
mountAnimationNameRef.current = currentAnimationName;
|
|
44
|
+
send("MOUNT");
|
|
45
|
+
} else if (currentAnimationName === "none" || styles?.display === "none") send("UNMOUNT");
|
|
46
|
+
else if (wasPresent && prevAnimationName !== currentAnimationName) send("ANIMATION_OUT");
|
|
47
|
+
else send("UNMOUNT");
|
|
48
|
+
prevPresentRef.current = present;
|
|
49
|
+
}
|
|
50
|
+
}, [present, send]);
|
|
51
|
+
useLayoutEffect(() => {
|
|
52
|
+
if (node) {
|
|
53
|
+
let timeoutId;
|
|
54
|
+
const ownerWindow = node.ownerDocument.defaultView ?? window;
|
|
55
|
+
/**
|
|
56
|
+
* Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`
|
|
57
|
+
* event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we
|
|
58
|
+
* make sure we only trigger ANIMATION_END for the currently active animation.
|
|
59
|
+
*/
|
|
60
|
+
const handleAnimationEnd = (event) => {
|
|
61
|
+
const isCurrentAnimation = getAnimationName(stylesRef.current).includes(CSS.escape(event.animationName));
|
|
62
|
+
if (event.target === node && isCurrentAnimation) {
|
|
63
|
+
send("ANIMATION_END");
|
|
64
|
+
if (!prevPresentRef.current) {
|
|
65
|
+
const currentFillMode = node.style.animationFillMode;
|
|
66
|
+
node.style.animationFillMode = "forwards";
|
|
67
|
+
timeoutId = ownerWindow.setTimeout(() => {
|
|
68
|
+
if (node.style.animationFillMode === "forwards") node.style.animationFillMode = currentFillMode;
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
const handleAnimationStart = (event) => {
|
|
74
|
+
if (event.target === node) prevAnimationNameRef.current = getAnimationName(stylesRef.current);
|
|
75
|
+
};
|
|
76
|
+
node.addEventListener("animationstart", handleAnimationStart);
|
|
77
|
+
node.addEventListener("animationcancel", handleAnimationEnd);
|
|
78
|
+
node.addEventListener("animationend", handleAnimationEnd);
|
|
79
|
+
return () => {
|
|
80
|
+
ownerWindow.clearTimeout(timeoutId);
|
|
81
|
+
node.removeEventListener("animationstart", handleAnimationStart);
|
|
82
|
+
node.removeEventListener("animationcancel", handleAnimationEnd);
|
|
83
|
+
node.removeEventListener("animationend", handleAnimationEnd);
|
|
84
|
+
};
|
|
85
|
+
} else send("ANIMATION_END");
|
|
86
|
+
}, [node, send]);
|
|
87
|
+
return {
|
|
88
|
+
isPresent: ["mounted", "unmountSuspended"].includes(state),
|
|
89
|
+
ref: React.useCallback((node) => {
|
|
90
|
+
if (node) {
|
|
91
|
+
const styles = getComputedStyle(node);
|
|
92
|
+
stylesRef.current = styles;
|
|
93
|
+
mountAnimationNameRef.current = getAnimationName(styles);
|
|
94
|
+
} else stylesRef.current = null;
|
|
95
|
+
setNode(node);
|
|
96
|
+
}, [])
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function setRef(ref, value) {
|
|
100
|
+
if (typeof ref === "function") return ref(value);
|
|
101
|
+
else if (ref !== null && ref !== void 0) ref.current = value;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Unlike `useComposedRefs`, the returned callback never changes identity, even
|
|
105
|
+
* when the composed refs do. This matters in React 19: when a callback ref's
|
|
106
|
+
* identity changes between renders, React detaches the previous ref (calls it
|
|
107
|
+
* with `null`) and attaches the new one on every commit. Because `Presence`
|
|
108
|
+
* calls `setNode` from its own ref, an unstable consumer ref would otherwise
|
|
109
|
+
* cause React to re-run that update on every commit, resulting in a "Maximum
|
|
110
|
+
* update depth exceeded" loop.
|
|
111
|
+
*
|
|
112
|
+
* The latest refs are always read at attach/detach time, so the most recent
|
|
113
|
+
* consumer ref still receives the node when it mounts or unmounts.
|
|
114
|
+
*
|
|
115
|
+
* @see https://github.com/radix-ui/primitives/issues/3664
|
|
116
|
+
*/
|
|
117
|
+
function useStableComposedRefs(...refs) {
|
|
118
|
+
const refsRef = React.useRef(refs);
|
|
119
|
+
refsRef.current = refs;
|
|
120
|
+
return React.useCallback((node) => {
|
|
121
|
+
const currentRefs = refsRef.current;
|
|
122
|
+
let hasCleanup = false;
|
|
123
|
+
const cleanups = currentRefs.map((ref) => {
|
|
124
|
+
const cleanup = setRef(ref, node);
|
|
125
|
+
if (!hasCleanup && typeof cleanup === "function") hasCleanup = true;
|
|
126
|
+
return cleanup;
|
|
127
|
+
});
|
|
128
|
+
if (hasCleanup) return () => {
|
|
129
|
+
for (let i = 0; i < cleanups.length; i++) {
|
|
130
|
+
const cleanup = cleanups[i];
|
|
131
|
+
if (typeof cleanup === "function") cleanup();
|
|
132
|
+
else setRef(currentRefs[i], null);
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
}, []);
|
|
136
|
+
}
|
|
137
|
+
function getAnimationName(styles) {
|
|
138
|
+
return styles?.animationName || "none";
|
|
139
|
+
}
|
|
140
|
+
function getElementRef(element) {
|
|
141
|
+
let getter = Object.getOwnPropertyDescriptor(element.props, "ref")?.get;
|
|
142
|
+
let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
|
|
143
|
+
if (mayWarn) return element.ref;
|
|
144
|
+
getter = Object.getOwnPropertyDescriptor(element, "ref")?.get;
|
|
145
|
+
mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
|
|
146
|
+
if (mayWarn) return element.props.ref;
|
|
147
|
+
return element.props.ref || element.ref;
|
|
148
|
+
}
|
|
149
|
+
//#endregion
|
|
150
|
+
export { Presence };
|
|
151
|
+
|
|
152
|
+
//# sourceMappingURL=presence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presence.js","names":[],"sources":["../../../../../src/primitives/vendor/radix/react-presence/presence.tsx"],"sourcesContent":["// Vendored from Radix Primitives (c) 2022 WorkOS, MIT. See vendor/LICENSE.radix.\n// Local modification: package imports resolve to the pinned local source.\nimport * as React from 'react';\nimport { useLayoutEffect } from '../react-use-layout-effect';\nimport { useStateMachine } from './use-state-machine';\n\ninterface PresenceProps {\n children: React.ReactElement | ((props: { present: boolean }) => React.ReactElement);\n present: boolean;\n}\n\nconst Presence: React.FC<PresenceProps> = (props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n\n const child = (\n typeof children === 'function'\n ? children({ present: presence.isPresent })\n : React.Children.only(children)\n ) as React.ReactElement<{ ref?: React.Ref<HTMLElement> }>;\n\n const ref = useStableComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === 'function';\n return forceMount || presence.isPresent ? React.cloneElement(child, { ref }) : null;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * usePresence\n * -----------------------------------------------------------------------------------------------*/\n\nfunction usePresence(present: boolean) {\n const [node, setNode] = React.useState<HTMLElement>();\n const stylesRef = React.useRef<CSSStyleDeclaration | null>(null);\n const prevPresentRef = React.useRef(present);\n const prevAnimationNameRef = React.useRef<string>('none');\n const mountAnimationNameRef = React.useRef<string | undefined>(undefined);\n const initialState = present ? 'mounted' : 'unmounted';\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: 'unmounted',\n ANIMATION_OUT: 'unmountSuspended',\n },\n unmountSuspended: {\n MOUNT: 'mounted',\n ANIMATION_END: 'unmounted',\n },\n unmounted: {\n MOUNT: 'mounted',\n },\n });\n\n React.useEffect(() => {\n if (state === 'mounted') {\n // Use the animation name captured during the layout phase (or the ref\n // callback on first mount). By the time this passive effect runs,\n // sibling effects like react-remove-scroll and DismissableLayer may have\n // dirtied body styles, so re-reading from the live CSSStyleDeclaration\n // here would force an expensive synchronous style recalculation.\n // See: https://github.com/radix-ui/primitives/issues/1634\n prevAnimationNameRef.current =\n mountAnimationNameRef.current ?? getAnimationName(stylesRef.current);\n mountAnimationNameRef.current = undefined;\n } else {\n prevAnimationNameRef.current = 'none';\n }\n }, [state]);\n\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n\n if (present) {\n // Capture the animation name now, while styles are still \"clean\"\n // (before sibling passive effects dirty the body). The later passive\n // effect will read from this ref instead of the live\n // CSSStyleDeclaration, avoiding a forced style recalculation.\n mountAnimationNameRef.current = currentAnimationName;\n send('MOUNT');\n } else if (currentAnimationName === 'none' || styles?.display === 'none') {\n // If there is no exit animation or the element is hidden, animations won't run\n // so we unmount instantly\n send('UNMOUNT');\n } else {\n /**\n * When `present` changes to `false`, we check changes to animation-name to\n * determine whether an animation has started. We chose this approach (reading\n * computed styles) because there is no `animationrun` event and `animationstart`\n * fires after `animation-delay` has expired which would be too late.\n */\n const isAnimating = prevAnimationName !== currentAnimationName;\n\n if (wasPresent && isAnimating) {\n send('ANIMATION_OUT');\n } else {\n send('UNMOUNT');\n }\n }\n\n prevPresentRef.current = present;\n }\n }, [present, send]);\n\n useLayoutEffect(() => {\n if (node) {\n let timeoutId: number;\n const ownerWindow = node.ownerDocument.defaultView ?? window;\n /**\n * Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`\n * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we\n * make sure we only trigger ANIMATION_END for the currently active animation.\n */\n const handleAnimationEnd = (event: AnimationEvent) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n // The event.animationName is unescaped for CSS syntax,\n // so we need to escape it to compare with the animationName computed from the style.\n const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));\n if (event.target === node && isCurrentAnimation) {\n // With React 18 concurrency this update is applied a frame after the\n // animation ends, creating a flash of visible content. By setting the\n // animation fill mode to \"forwards\", we force the node to keep the\n // styles of the last keyframe, removing the flash.\n //\n // Previously we flushed the update via ReactDom.flushSync, but with\n // exit animations this resulted in the node being removed from the\n // DOM before the synthetic animationEnd event was dispatched, meaning\n // user-provided event handlers would not be called.\n // https://github.com/radix-ui/primitives/pull/1849\n send('ANIMATION_END');\n if (!prevPresentRef.current) {\n const currentFillMode = node.style.animationFillMode;\n node.style.animationFillMode = 'forwards';\n // Reset the style after the node had time to unmount (for cases\n // where the component chooses not to unmount). Doing this any\n // sooner than `setTimeout` (e.g. with `requestAnimationFrame`)\n // still causes a flash.\n timeoutId = ownerWindow.setTimeout(() => {\n if (node.style.animationFillMode === 'forwards') {\n node.style.animationFillMode = currentFillMode;\n }\n });\n }\n }\n };\n const handleAnimationStart = (event: AnimationEvent) => {\n if (event.target === node) {\n // if animation occurred, store its name as the previous animation.\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n };\n node.addEventListener('animationstart', handleAnimationStart);\n node.addEventListener('animationcancel', handleAnimationEnd);\n node.addEventListener('animationend', handleAnimationEnd);\n return () => {\n ownerWindow.clearTimeout(timeoutId);\n node.removeEventListener('animationstart', handleAnimationStart);\n node.removeEventListener('animationcancel', handleAnimationEnd);\n node.removeEventListener('animationend', handleAnimationEnd);\n };\n } else {\n // Transition to the unmounted state if the node is removed prematurely.\n // We avoid doing so during cleanup as the node may change but still exist.\n send('ANIMATION_END');\n }\n }, [node, send]);\n\n return {\n isPresent: ['mounted', 'unmountSuspended'].includes(state),\n ref: React.useCallback((node: HTMLElement) => {\n if (node) {\n const styles = getComputedStyle(node);\n stylesRef.current = styles;\n // Eagerly read the animation name while styles are clean. Ref\n // callbacks fire during the commit phase, before any passive effects\n // can dirty body styles. This cached value is consumed by the passive\n // effect that records prevAnimationNameRef, letting it skip a\n // redundant (and expensive) live-style read.\n mountAnimationNameRef.current = getAnimationName(styles);\n } else {\n stylesRef.current = null;\n }\n setNode(node);\n }, []),\n };\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype PossibleRef<T> = React.Ref<T> | undefined;\n\nfunction setRef<T>(ref: PossibleRef<T>, value: T | null) {\n if (typeof ref === 'function') {\n return ref(value);\n } else if (ref !== null && ref !== undefined) {\n ref.current = value;\n }\n}\n\n/**\n * Unlike `useComposedRefs`, the returned callback never changes identity, even\n * when the composed refs do. This matters in React 19: when a callback ref's\n * identity changes between renders, React detaches the previous ref (calls it\n * with `null`) and attaches the new one on every commit. Because `Presence`\n * calls `setNode` from its own ref, an unstable consumer ref would otherwise\n * cause React to re-run that update on every commit, resulting in a \"Maximum\n * update depth exceeded\" loop.\n *\n * The latest refs are always read at attach/detach time, so the most recent\n * consumer ref still receives the node when it mounts or unmounts.\n *\n * @see https://github.com/radix-ui/primitives/issues/3664\n */\nfunction useStableComposedRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n // Keep the latest refs without changing the callback identity. Assigning during render is\n // safe here because we only ever read `.current` later (at commit time, in the ref callback).\n const refsRef = React.useRef(refs);\n refsRef.current = refs;\n\n return React.useCallback((node: T | null) => {\n const currentRefs = refsRef.current;\n let hasCleanup = false;\n const cleanups = currentRefs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup === 'function') {\n hasCleanup = true;\n }\n return cleanup;\n });\n\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup === 'function') {\n cleanup();\n } else {\n setRef(currentRefs[i], null);\n }\n }\n };\n }\n }, []);\n}\n\nfunction getAnimationName(styles: CSSStyleDeclaration | null) {\n return styles?.animationName || 'none';\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement<{ ref?: React.Ref<unknown> }>) {\n // React <=18 in DEV\n let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n\n // React 19 in DEV\n getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n\n // Not DEV\n return element.props.ref || (element as any).ref;\n}\n\nconst Root = Presence;\n\nexport {\n Presence,\n //\n Root,\n};\nexport type { PresenceProps };\n"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
type Machine<S> = {
|
|
3
|
+
[k: string]: {
|
|
4
|
+
[k: string]: S;
|
|
5
|
+
};
|
|
6
|
+
};
|
|
7
|
+
type MachineState<T> = keyof T;
|
|
8
|
+
type UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any ? R : never;
|
|
9
|
+
export declare function useStateMachine<M>(initialState: MachineState<M>, machine: M & Machine<MachineState<M>>): [keyof M, React.ActionDispatch<[event: keyof UnionToIntersection<M[keyof M]>]>];
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
//#region src/primitives/vendor/radix/react-presence/use-state-machine.tsx
|
|
4
|
+
function useStateMachine(initialState, machine) {
|
|
5
|
+
return React.useReducer((state, event) => {
|
|
6
|
+
return machine[state][event] ?? state;
|
|
7
|
+
}, initialState);
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { useStateMachine };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=use-state-machine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-state-machine.js","names":[],"sources":["../../../../../src/primitives/vendor/radix/react-presence/use-state-machine.tsx"],"sourcesContent":["// Vendored from Radix Primitives (c) 2022 WorkOS, MIT. See vendor/LICENSE.radix.\n// Local modification: package imports resolve to the pinned local source.\nimport * as React from 'react';\n\ntype Machine<S> = { [k: string]: { [k: string]: S } };\ntype MachineState<T> = keyof T;\ntype MachineEvent<T> = keyof UnionToIntersection<T[keyof T]>;\n\n// 🤯 https://fettblog.eu/typescript-union-to-intersection/\ntype UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any\n ? R\n : never;\n\nexport function useStateMachine<M>(\n initialState: MachineState<M>,\n machine: M & Machine<MachineState<M>>,\n) {\n return React.useReducer((state: MachineState<M>, event: MachineEvent<M>): MachineState<M> => {\n const nextState = (machine[state] as any)[event];\n return nextState ?? state;\n }, initialState);\n}\n"],"mappings":";;;AAaA,SAAgB,gBACd,cACA,SACA;CACA,OAAO,MAAM,YAAY,OAAwB,UAA4C;EAE3F,OADmB,QAAQ,MAAM,CAAS,UACtB;CACtB,GAAG,YAAY;AACjB"}
|