@neo4j-ndl/react 4.1.5 → 4.1.7
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/lib/cjs/_common/CodeBlockWrapper.js +5 -4
- package/lib/cjs/_common/CodeBlockWrapper.js.map +1 -1
- package/lib/cjs/_common/utils.js +4 -2
- package/lib/cjs/_common/utils.js.map +1 -1
- package/lib/cjs/accordion/Accordion.js +9 -6
- package/lib/cjs/accordion/Accordion.js.map +1 -1
- package/lib/cjs/accordion/accordion-types.js.map +1 -1
- package/lib/cjs/accordion/stories/accordion.stories.js +1 -1
- package/lib/cjs/accordion/stories/accordion.stories.js.map +1 -1
- package/lib/cjs/avatar/Avatar.js +1 -1
- package/lib/cjs/avatar/Avatar.js.map +1 -1
- package/lib/cjs/banner/Banner.js +3 -2
- package/lib/cjs/banner/Banner.js.map +1 -1
- package/lib/cjs/banner/stories/banner.stories.js +1 -1
- package/lib/cjs/banner/stories/banner.stories.js.map +1 -1
- package/lib/cjs/box/Box.js +14 -2
- package/lib/cjs/box/Box.js.map +1 -1
- package/lib/cjs/box/stories/box.stories.js +2 -2
- package/lib/cjs/box/stories/box.stories.js.map +1 -1
- package/lib/cjs/breadcrumbs/Breadcrumbs.js +10 -7
- package/lib/cjs/breadcrumbs/Breadcrumbs.js.map +1 -1
- package/lib/cjs/button/stories/button.stories.js +2 -2
- package/lib/cjs/button/stories/button.stories.js.map +1 -1
- package/lib/cjs/checkbox/Checkbox.js +2 -1
- package/lib/cjs/checkbox/Checkbox.js.map +1 -1
- package/lib/cjs/checkbox/stories/checkbox.stories.js +1 -1
- package/lib/cjs/checkbox/stories/checkbox.stories.js.map +1 -1
- package/lib/cjs/clipboard-button/ClipboardButton.js +6 -3
- package/lib/cjs/clipboard-button/ClipboardButton.js.map +1 -1
- package/lib/cjs/color-picker/ColorPicker.js +2 -1
- package/lib/cjs/color-picker/ColorPicker.js.map +1 -1
- package/lib/cjs/data-grid/Components.js +9 -6
- package/lib/cjs/data-grid/Components.js.map +1 -1
- package/lib/cjs/data-grid/DataGrid.js +16 -4
- package/lib/cjs/data-grid/DataGrid.js.map +1 -1
- package/lib/cjs/data-grid/data-grid-nav/data-grid-nav.js +28 -14
- package/lib/cjs/data-grid/data-grid-nav/data-grid-nav.js.map +1 -1
- package/lib/cjs/data-grid/data-grid-nav/helpers.js +2 -1
- package/lib/cjs/data-grid/data-grid-nav/helpers.js.map +1 -1
- package/lib/cjs/data-grid/stories/datagrid-component-overriding.story.js +1 -3
- package/lib/cjs/data-grid/stories/datagrid-component-overriding.story.js.map +1 -1
- package/lib/cjs/data-grid/stories/datagrid-in-dialog.story.js +2 -1
- package/lib/cjs/data-grid/stories/datagrid-in-dialog.story.js.map +1 -1
- package/lib/cjs/data-grid/stories/datagrid-keyboard-navigation.story.js +2 -1
- package/lib/cjs/data-grid/stories/datagrid-keyboard-navigation.story.js.map +1 -1
- package/lib/cjs/data-grid/stories/datagrid-kitchen-sink.story.js +1 -2
- package/lib/cjs/data-grid/stories/datagrid-kitchen-sink.story.js.map +1 -1
- package/lib/cjs/data-grid/stories/datagrid-search-and-filters.stories.js +13 -10
- package/lib/cjs/data-grid/stories/datagrid-search-and-filters.stories.js.map +1 -1
- package/lib/cjs/date-picker/DatePicker.js +2 -1
- package/lib/cjs/date-picker/DatePicker.js.map +1 -1
- package/lib/cjs/date-picker/stories/date-picker-range.story.js +1 -1
- package/lib/cjs/date-picker/stories/date-picker-range.story.js.map +1 -1
- package/lib/cjs/date-picker/stories/date-picker.stories.js +1 -1
- package/lib/cjs/date-picker/stories/date-picker.stories.js.map +1 -1
- package/lib/cjs/dialog/Dialog.js +20 -13
- package/lib/cjs/dialog/Dialog.js.map +1 -1
- package/lib/cjs/dialog/dialog-context.js +35 -6
- package/lib/cjs/dialog/dialog-context.js.map +1 -1
- package/lib/cjs/dialog/stories/dialog.stories.js +1 -1
- package/lib/cjs/dialog/stories/dialog.stories.js.map +1 -1
- package/lib/cjs/divider/stories/divider.stories.js +1 -1
- package/lib/cjs/divider/stories/divider.stories.js.map +1 -1
- package/lib/cjs/drawer/Drawer.js +9 -8
- package/lib/cjs/drawer/Drawer.js.map +1 -1
- package/lib/cjs/dropdown-button/DropdownButton.js +14 -2
- package/lib/cjs/dropdown-button/DropdownButton.js.map +1 -1
- package/lib/cjs/dropzone/Dropzone.js +3 -2
- package/lib/cjs/dropzone/Dropzone.js.map +1 -1
- package/lib/cjs/dropzone/stories/dropzone-csv-files.story.js +1 -3
- package/lib/cjs/dropzone/stories/dropzone-csv-files.story.js.map +1 -1
- package/lib/cjs/dropzone/stories/dropzone-custom-extensions.story.js +1 -3
- package/lib/cjs/dropzone/stories/dropzone-custom-extensions.story.js.map +1 -1
- package/lib/cjs/dropzone/stories/dropzone-default.story.js +1 -3
- package/lib/cjs/dropzone/stories/dropzone-default.story.js.map +1 -1
- package/lib/cjs/dropzone/stories/dropzone-disabled.story.js +1 -3
- package/lib/cjs/dropzone/stories/dropzone-disabled.story.js.map +1 -1
- package/lib/cjs/flex/Flex.js +14 -2
- package/lib/cjs/flex/Flex.js.map +1 -1
- package/lib/cjs/graph-label/GraphLabel.js +18 -4
- package/lib/cjs/graph-label/GraphLabel.js.map +1 -1
- package/lib/cjs/icon-button/stories/icon-button.stories.js +1 -1
- package/lib/cjs/icon-button/stories/icon-button.stories.js.map +1 -1
- package/lib/cjs/icon-button-array/IconButtonArray.js +14 -2
- package/lib/cjs/icon-button-array/IconButtonArray.js.map +1 -1
- package/lib/cjs/icon-button-array/index.js +1 -1
- package/lib/cjs/icon-button-array/index.js.map +1 -1
- package/lib/cjs/icon-button-array/stories/icon-button-array.stories.js +1 -1
- package/lib/cjs/icon-button-array/stories/icon-button-array.stories.js.map +1 -1
- package/lib/cjs/icons/wrapIcon.js +1 -1
- package/lib/cjs/icons/wrapIcon.js.map +1 -1
- package/lib/cjs/inline-edit/InlineEdit.js +18 -6
- package/lib/cjs/inline-edit/InlineEdit.js.map +1 -1
- package/lib/cjs/kbd/Kbd.js +5 -3
- package/lib/cjs/kbd/Kbd.js.map +1 -1
- package/lib/cjs/kbd/stories/kbd.stories.js +1 -1
- package/lib/cjs/kbd/stories/kbd.stories.js.map +1 -1
- package/lib/cjs/loading-bar/LoadingBar.js +14 -2
- package/lib/cjs/loading-bar/LoadingBar.js.map +1 -1
- package/lib/cjs/loading-spinner/LoadingSpinner.js +1 -1
- package/lib/cjs/loading-spinner/LoadingSpinner.js.map +1 -1
- package/lib/cjs/logo/stories/logo.stories.js +1 -1
- package/lib/cjs/logo/stories/logo.stories.js.map +1 -1
- package/lib/cjs/menu/Menu.js +9 -6
- package/lib/cjs/menu/Menu.js.map +1 -1
- package/lib/cjs/popover/Popover.js +6 -4
- package/lib/cjs/popover/Popover.js.map +1 -1
- package/lib/cjs/popover/stories/popover-custom-offset.story.js +2 -1
- package/lib/cjs/popover/stories/popover-custom-offset.story.js.map +1 -1
- package/lib/cjs/popover/stories/popover-separate-anchor.story.js +1 -1
- package/lib/cjs/popover/stories/popover-separate-anchor.story.js.map +1 -1
- package/lib/cjs/progress-bar/ProgressBar.js +1 -1
- package/lib/cjs/progress-bar/ProgressBar.js.map +1 -1
- package/lib/cjs/radio/Radio.js +2 -1
- package/lib/cjs/radio/Radio.js.map +1 -1
- package/lib/cjs/radio/stories/radio.stories.js +1 -1
- package/lib/cjs/radio/stories/radio.stories.js.map +1 -1
- package/lib/cjs/select/Overrides.js +1 -1
- package/lib/cjs/select/Overrides.js.map +1 -1
- package/lib/cjs/select/Select.js +18 -6
- package/lib/cjs/select/Select.js.map +1 -1
- package/lib/cjs/side-navigation/SideNavigation.js +5 -4
- package/lib/cjs/side-navigation/SideNavigation.js.map +1 -1
- package/lib/cjs/skeleton/Skeleton.js +14 -2
- package/lib/cjs/skeleton/Skeleton.js.map +1 -1
- package/lib/cjs/skeleton/stories/skeleton.stories.js +1 -1
- package/lib/cjs/skeleton/stories/skeleton.stories.js.map +1 -1
- package/lib/cjs/spotlight/Spotlight.js +33 -14
- package/lib/cjs/spotlight/Spotlight.js.map +1 -1
- package/lib/cjs/spotlight/SpotlightProvider.js +6 -3
- package/lib/cjs/spotlight/SpotlightProvider.js.map +1 -1
- package/lib/cjs/spotlight/SpotlightTarget.js +14 -2
- package/lib/cjs/spotlight/SpotlightTarget.js.map +1 -1
- package/lib/cjs/spotlight/SpotlightTour.js +1 -1
- package/lib/cjs/spotlight/SpotlightTour.js.map +1 -1
- package/lib/cjs/spotlight/stories/spotlight.stories.js +1 -1
- package/lib/cjs/spotlight/stories/spotlight.stories.js.map +1 -1
- package/lib/cjs/spotlight/use-indicator.js +2 -1
- package/lib/cjs/spotlight/use-indicator.js.map +1 -1
- package/lib/cjs/status-label/StatusLabel.js +1 -1
- package/lib/cjs/status-label/StatusLabel.js.map +1 -1
- package/lib/cjs/switch/Switch.js +2 -1
- package/lib/cjs/switch/Switch.js.map +1 -1
- package/lib/cjs/switch/stories/switch.stories.js +1 -1
- package/lib/cjs/switch/stories/switch.stories.js.map +1 -1
- package/lib/cjs/tabs/stories/tabs-disabled.story.js +1 -1
- package/lib/cjs/tabs/stories/tabs-disabled.story.js.map +1 -1
- package/lib/cjs/tabs/stories/tabs-fill-variants.story.js +1 -1
- package/lib/cjs/tabs/stories/tabs-fill-variants.story.js.map +1 -1
- package/lib/cjs/tabs/stories/tabs-overflow.story.js +1 -1
- package/lib/cjs/tabs/stories/tabs-overflow.story.js.map +1 -1
- package/lib/cjs/tabs/stories/tabs-sizes.story.js +1 -1
- package/lib/cjs/tabs/stories/tabs-sizes.story.js.map +1 -1
- package/lib/cjs/tabs/use-tabs-scroll-overflow.js +8 -4
- package/lib/cjs/tabs/use-tabs-scroll-overflow.js.map +1 -1
- package/lib/cjs/tag/Tag.js +14 -2
- package/lib/cjs/tag/Tag.js.map +1 -1
- package/lib/cjs/text-area/TextArea.js +14 -2
- package/lib/cjs/text-area/TextArea.js.map +1 -1
- package/lib/cjs/text-area/stories/text-area.stories.js +1 -1
- package/lib/cjs/text-area/stories/text-area.stories.js.map +1 -1
- package/lib/cjs/text-input/TextInput.js +14 -2
- package/lib/cjs/text-input/TextInput.js.map +1 -1
- package/lib/cjs/text-link/TextLink.js +14 -2
- package/lib/cjs/text-link/TextLink.js.map +1 -1
- package/lib/cjs/text-overflow/TextOverflow.js +2 -1
- package/lib/cjs/text-overflow/TextOverflow.js.map +1 -1
- package/lib/cjs/text-overflow/stories/text-overflow.stories.js +1 -1
- package/lib/cjs/text-overflow/stories/text-overflow.stories.js.map +1 -1
- package/lib/cjs/text-overflow/text-overflow-utils.js +12 -6
- package/lib/cjs/text-overflow/text-overflow-utils.js.map +1 -1
- package/lib/cjs/text-overflow/use-ellipsis-observer.js +2 -1
- package/lib/cjs/text-overflow/use-ellipsis-observer.js.map +1 -1
- package/lib/cjs/text-overflow/use-truncate-with-button.js +4 -2
- package/lib/cjs/text-overflow/use-truncate-with-button.js.map +1 -1
- package/lib/cjs/theme/ThemeProvider.js +2 -1
- package/lib/cjs/theme/ThemeProvider.js.map +1 -1
- package/lib/cjs/time-picker/TimePicker.js +22 -8
- package/lib/cjs/time-picker/TimePicker.js.map +1 -1
- package/lib/cjs/time-picker/stories/time-picker.stories.js +1 -1
- package/lib/cjs/time-picker/stories/time-picker.stories.js.map +1 -1
- package/lib/cjs/timezone-picker/TimeZonePicker.js +8 -4
- package/lib/cjs/timezone-picker/TimeZonePicker.js.map +1 -1
- package/lib/cjs/timezone-picker/generate-timezone-options.js +15 -9
- package/lib/cjs/timezone-picker/generate-timezone-options.js.map +1 -1
- package/lib/cjs/timezone-picker/stories/timezone-picker.stories.js +1 -1
- package/lib/cjs/timezone-picker/stories/timezone-picker.stories.js.map +1 -1
- package/lib/cjs/toast/Toast.js +11 -6
- package/lib/cjs/toast/Toast.js.map +1 -1
- package/lib/cjs/tooltip/Tooltip.js +35 -15
- package/lib/cjs/tooltip/Tooltip.js.map +1 -1
- package/lib/cjs/tree-view/TreeItemWrapper.js +3 -1
- package/lib/cjs/tree-view/TreeItemWrapper.js.map +1 -1
- package/lib/cjs/tree-view/TreeView.js +2 -1
- package/lib/cjs/tree-view/TreeView.js.map +1 -1
- package/lib/cjs/tree-view/TreeViewItem.js +3 -1
- package/lib/cjs/tree-view/TreeViewItem.js.map +1 -1
- package/lib/cjs/tree-view/TreeViewTextItem.js +1 -2
- package/lib/cjs/tree-view/TreeViewTextItem.js.map +1 -1
- package/lib/cjs/tree-view/TreeViewTrail.js +14 -2
- package/lib/cjs/tree-view/TreeViewTrail.js.map +1 -1
- package/lib/cjs/wizard/Wizard.js +3 -2
- package/lib/cjs/wizard/Wizard.js.map +1 -1
- package/lib/esm/_common/CodeBlockWrapper.js +5 -4
- package/lib/esm/_common/CodeBlockWrapper.js.map +1 -1
- package/lib/esm/_common/utils.js +4 -2
- package/lib/esm/_common/utils.js.map +1 -1
- package/lib/esm/accordion/Accordion.js +9 -6
- package/lib/esm/accordion/Accordion.js.map +1 -1
- package/lib/esm/accordion/accordion-types.js.map +1 -1
- package/lib/esm/accordion/stories/accordion.stories.js +1 -1
- package/lib/esm/accordion/stories/accordion.stories.js.map +1 -1
- package/lib/esm/avatar/Avatar.js +1 -1
- package/lib/esm/avatar/Avatar.js.map +1 -1
- package/lib/esm/banner/Banner.js +3 -2
- package/lib/esm/banner/Banner.js.map +1 -1
- package/lib/esm/banner/stories/banner.stories.js +1 -1
- package/lib/esm/banner/stories/banner.stories.js.map +1 -1
- package/lib/esm/box/Box.js +14 -2
- package/lib/esm/box/Box.js.map +1 -1
- package/lib/esm/box/stories/box.stories.js +2 -2
- package/lib/esm/box/stories/box.stories.js.map +1 -1
- package/lib/esm/breadcrumbs/Breadcrumbs.js +10 -7
- package/lib/esm/breadcrumbs/Breadcrumbs.js.map +1 -1
- package/lib/esm/button/stories/button.stories.js +1 -1
- package/lib/esm/button/stories/button.stories.js.map +1 -1
- package/lib/esm/checkbox/Checkbox.js +2 -1
- package/lib/esm/checkbox/Checkbox.js.map +1 -1
- package/lib/esm/checkbox/stories/checkbox.stories.js +1 -1
- package/lib/esm/checkbox/stories/checkbox.stories.js.map +1 -1
- package/lib/esm/clipboard-button/ClipboardButton.js +6 -3
- package/lib/esm/clipboard-button/ClipboardButton.js.map +1 -1
- package/lib/esm/color-picker/ColorPicker.js +2 -1
- package/lib/esm/color-picker/ColorPicker.js.map +1 -1
- package/lib/esm/data-grid/Components.js +9 -6
- package/lib/esm/data-grid/Components.js.map +1 -1
- package/lib/esm/data-grid/DataGrid.js +16 -4
- package/lib/esm/data-grid/DataGrid.js.map +1 -1
- package/lib/esm/data-grid/data-grid-nav/data-grid-nav.js +28 -14
- package/lib/esm/data-grid/data-grid-nav/data-grid-nav.js.map +1 -1
- package/lib/esm/data-grid/data-grid-nav/helpers.js +2 -1
- package/lib/esm/data-grid/data-grid-nav/helpers.js.map +1 -1
- package/lib/esm/data-grid/stories/datagrid-component-overriding.story.js +1 -3
- package/lib/esm/data-grid/stories/datagrid-component-overriding.story.js.map +1 -1
- package/lib/esm/data-grid/stories/datagrid-in-dialog.story.js +2 -1
- package/lib/esm/data-grid/stories/datagrid-in-dialog.story.js.map +1 -1
- package/lib/esm/data-grid/stories/datagrid-keyboard-navigation.story.js +2 -1
- package/lib/esm/data-grid/stories/datagrid-keyboard-navigation.story.js.map +1 -1
- package/lib/esm/data-grid/stories/datagrid-kitchen-sink.story.js +1 -2
- package/lib/esm/data-grid/stories/datagrid-kitchen-sink.story.js.map +1 -1
- package/lib/esm/data-grid/stories/datagrid-search-and-filters.stories.js +9 -6
- package/lib/esm/data-grid/stories/datagrid-search-and-filters.stories.js.map +1 -1
- package/lib/esm/date-picker/DatePicker.js +2 -1
- package/lib/esm/date-picker/DatePicker.js.map +1 -1
- package/lib/esm/date-picker/stories/date-picker-range.story.js +1 -1
- package/lib/esm/date-picker/stories/date-picker-range.story.js.map +1 -1
- package/lib/esm/date-picker/stories/date-picker.stories.js +1 -1
- package/lib/esm/date-picker/stories/date-picker.stories.js.map +1 -1
- package/lib/esm/dialog/Dialog.js +20 -13
- package/lib/esm/dialog/Dialog.js.map +1 -1
- package/lib/esm/dialog/dialog-context.js +1 -2
- package/lib/esm/dialog/dialog-context.js.map +1 -1
- package/lib/esm/dialog/stories/dialog.stories.js +1 -1
- package/lib/esm/dialog/stories/dialog.stories.js.map +1 -1
- package/lib/esm/divider/stories/divider.stories.js +1 -1
- package/lib/esm/divider/stories/divider.stories.js.map +1 -1
- package/lib/esm/drawer/Drawer.js +9 -8
- package/lib/esm/drawer/Drawer.js.map +1 -1
- package/lib/esm/dropdown-button/DropdownButton.js +14 -2
- package/lib/esm/dropdown-button/DropdownButton.js.map +1 -1
- package/lib/esm/dropzone/Dropzone.js +3 -2
- package/lib/esm/dropzone/Dropzone.js.map +1 -1
- package/lib/esm/dropzone/stories/dropzone-csv-files.story.js +1 -3
- package/lib/esm/dropzone/stories/dropzone-csv-files.story.js.map +1 -1
- package/lib/esm/dropzone/stories/dropzone-custom-extensions.story.js +1 -3
- package/lib/esm/dropzone/stories/dropzone-custom-extensions.story.js.map +1 -1
- package/lib/esm/dropzone/stories/dropzone-default.story.js +1 -3
- package/lib/esm/dropzone/stories/dropzone-default.story.js.map +1 -1
- package/lib/esm/dropzone/stories/dropzone-disabled.story.js +1 -3
- package/lib/esm/dropzone/stories/dropzone-disabled.story.js.map +1 -1
- package/lib/esm/flex/Flex.js +14 -2
- package/lib/esm/flex/Flex.js.map +1 -1
- package/lib/esm/graph-label/GraphLabel.js +18 -4
- package/lib/esm/graph-label/GraphLabel.js.map +1 -1
- package/lib/esm/icon-button/stories/icon-button.stories.js +1 -1
- package/lib/esm/icon-button/stories/icon-button.stories.js.map +1 -1
- package/lib/esm/icon-button-array/IconButtonArray.js +14 -2
- package/lib/esm/icon-button-array/IconButtonArray.js.map +1 -1
- package/lib/esm/icon-button-array/index.js +1 -1
- package/lib/esm/icon-button-array/index.js.map +1 -1
- package/lib/esm/icon-button-array/stories/icon-button-array.stories.js +1 -1
- package/lib/esm/icon-button-array/stories/icon-button-array.stories.js.map +1 -1
- package/lib/esm/icons/wrapIcon.js +1 -1
- package/lib/esm/icons/wrapIcon.js.map +1 -1
- package/lib/esm/inline-edit/InlineEdit.js +18 -6
- package/lib/esm/inline-edit/InlineEdit.js.map +1 -1
- package/lib/esm/kbd/Kbd.js +5 -3
- package/lib/esm/kbd/Kbd.js.map +1 -1
- package/lib/esm/kbd/stories/kbd.stories.js +1 -1
- package/lib/esm/kbd/stories/kbd.stories.js.map +1 -1
- package/lib/esm/loading-bar/LoadingBar.js +14 -2
- package/lib/esm/loading-bar/LoadingBar.js.map +1 -1
- package/lib/esm/loading-spinner/LoadingSpinner.js +1 -1
- package/lib/esm/loading-spinner/LoadingSpinner.js.map +1 -1
- package/lib/esm/logo/stories/logo.stories.js +1 -1
- package/lib/esm/logo/stories/logo.stories.js.map +1 -1
- package/lib/esm/menu/Menu.js +9 -6
- package/lib/esm/menu/Menu.js.map +1 -1
- package/lib/esm/popover/Popover.js +6 -4
- package/lib/esm/popover/Popover.js.map +1 -1
- package/lib/esm/popover/stories/popover-custom-offset.story.js +2 -1
- package/lib/esm/popover/stories/popover-custom-offset.story.js.map +1 -1
- package/lib/esm/popover/stories/popover-separate-anchor.story.js +1 -1
- package/lib/esm/popover/stories/popover-separate-anchor.story.js.map +1 -1
- package/lib/esm/progress-bar/ProgressBar.js +1 -1
- package/lib/esm/progress-bar/ProgressBar.js.map +1 -1
- package/lib/esm/radio/Radio.js +2 -1
- package/lib/esm/radio/Radio.js.map +1 -1
- package/lib/esm/radio/stories/radio.stories.js +1 -1
- package/lib/esm/radio/stories/radio.stories.js.map +1 -1
- package/lib/esm/select/Overrides.js +1 -1
- package/lib/esm/select/Overrides.js.map +1 -1
- package/lib/esm/select/Select.js +18 -6
- package/lib/esm/select/Select.js.map +1 -1
- package/lib/esm/side-navigation/SideNavigation.js +5 -4
- package/lib/esm/side-navigation/SideNavigation.js.map +1 -1
- package/lib/esm/skeleton/Skeleton.js +14 -2
- package/lib/esm/skeleton/Skeleton.js.map +1 -1
- package/lib/esm/skeleton/stories/skeleton.stories.js +1 -1
- package/lib/esm/skeleton/stories/skeleton.stories.js.map +1 -1
- package/lib/esm/spotlight/Spotlight.js +33 -14
- package/lib/esm/spotlight/Spotlight.js.map +1 -1
- package/lib/esm/spotlight/SpotlightProvider.js +6 -3
- package/lib/esm/spotlight/SpotlightProvider.js.map +1 -1
- package/lib/esm/spotlight/SpotlightTarget.js +14 -2
- package/lib/esm/spotlight/SpotlightTarget.js.map +1 -1
- package/lib/esm/spotlight/SpotlightTour.js +1 -1
- package/lib/esm/spotlight/SpotlightTour.js.map +1 -1
- package/lib/esm/spotlight/stories/spotlight.stories.js +1 -1
- package/lib/esm/spotlight/stories/spotlight.stories.js.map +1 -1
- package/lib/esm/spotlight/use-indicator.js +2 -1
- package/lib/esm/spotlight/use-indicator.js.map +1 -1
- package/lib/esm/status-label/StatusLabel.js +1 -1
- package/lib/esm/status-label/StatusLabel.js.map +1 -1
- package/lib/esm/switch/Switch.js +2 -1
- package/lib/esm/switch/Switch.js.map +1 -1
- package/lib/esm/switch/stories/switch.stories.js +1 -1
- package/lib/esm/switch/stories/switch.stories.js.map +1 -1
- package/lib/esm/tabs/stories/tabs-disabled.story.js +1 -1
- package/lib/esm/tabs/stories/tabs-disabled.story.js.map +1 -1
- package/lib/esm/tabs/stories/tabs-fill-variants.story.js +1 -1
- package/lib/esm/tabs/stories/tabs-fill-variants.story.js.map +1 -1
- package/lib/esm/tabs/stories/tabs-overflow.story.js +1 -1
- package/lib/esm/tabs/stories/tabs-overflow.story.js.map +1 -1
- package/lib/esm/tabs/stories/tabs-sizes.story.js +1 -1
- package/lib/esm/tabs/stories/tabs-sizes.story.js.map +1 -1
- package/lib/esm/tabs/use-tabs-scroll-overflow.js +8 -4
- package/lib/esm/tabs/use-tabs-scroll-overflow.js.map +1 -1
- package/lib/esm/tag/Tag.js +14 -2
- package/lib/esm/tag/Tag.js.map +1 -1
- package/lib/esm/text-area/TextArea.js +14 -2
- package/lib/esm/text-area/TextArea.js.map +1 -1
- package/lib/esm/text-area/stories/text-area.stories.js +1 -1
- package/lib/esm/text-area/stories/text-area.stories.js.map +1 -1
- package/lib/esm/text-input/TextInput.js +14 -2
- package/lib/esm/text-input/TextInput.js.map +1 -1
- package/lib/esm/text-link/TextLink.js +14 -2
- package/lib/esm/text-link/TextLink.js.map +1 -1
- package/lib/esm/text-overflow/TextOverflow.js +2 -1
- package/lib/esm/text-overflow/TextOverflow.js.map +1 -1
- package/lib/esm/text-overflow/stories/text-overflow.stories.js +1 -1
- package/lib/esm/text-overflow/stories/text-overflow.stories.js.map +1 -1
- package/lib/esm/text-overflow/text-overflow-utils.js +12 -6
- package/lib/esm/text-overflow/text-overflow-utils.js.map +1 -1
- package/lib/esm/text-overflow/use-ellipsis-observer.js +2 -1
- package/lib/esm/text-overflow/use-ellipsis-observer.js.map +1 -1
- package/lib/esm/text-overflow/use-truncate-with-button.js +4 -2
- package/lib/esm/text-overflow/use-truncate-with-button.js.map +1 -1
- package/lib/esm/theme/ThemeProvider.js +2 -1
- package/lib/esm/theme/ThemeProvider.js.map +1 -1
- package/lib/esm/time-picker/TimePicker.js +22 -8
- package/lib/esm/time-picker/TimePicker.js.map +1 -1
- package/lib/esm/time-picker/stories/time-picker.stories.js +1 -1
- package/lib/esm/time-picker/stories/time-picker.stories.js.map +1 -1
- package/lib/esm/timezone-picker/TimeZonePicker.js +8 -4
- package/lib/esm/timezone-picker/TimeZonePicker.js.map +1 -1
- package/lib/esm/timezone-picker/generate-timezone-options.js +15 -9
- package/lib/esm/timezone-picker/generate-timezone-options.js.map +1 -1
- package/lib/esm/timezone-picker/stories/timezone-picker.stories.js +1 -1
- package/lib/esm/timezone-picker/stories/timezone-picker.stories.js.map +1 -1
- package/lib/esm/toast/Toast.js +11 -6
- package/lib/esm/toast/Toast.js.map +1 -1
- package/lib/esm/tooltip/Tooltip.js +35 -15
- package/lib/esm/tooltip/Tooltip.js.map +1 -1
- package/lib/esm/tree-view/TreeItemWrapper.js +3 -1
- package/lib/esm/tree-view/TreeItemWrapper.js.map +1 -1
- package/lib/esm/tree-view/TreeView.js +2 -1
- package/lib/esm/tree-view/TreeView.js.map +1 -1
- package/lib/esm/tree-view/TreeViewItem.js +3 -1
- package/lib/esm/tree-view/TreeViewItem.js.map +1 -1
- package/lib/esm/tree-view/TreeViewTextItem.js +1 -2
- package/lib/esm/tree-view/TreeViewTextItem.js.map +1 -1
- package/lib/esm/tree-view/TreeViewTrail.js +14 -2
- package/lib/esm/tree-view/TreeViewTrail.js.map +1 -1
- package/lib/esm/wizard/Wizard.js +3 -2
- package/lib/esm/wizard/Wizard.js.map +1 -1
- package/lib/types/_common/CodeBlockWrapper.d.ts +1 -1
- package/lib/types/_common/CodeBlockWrapper.d.ts.map +1 -1
- package/lib/types/_common/utils.d.ts.map +1 -1
- package/lib/types/accordion/Accordion.d.ts +4 -4
- package/lib/types/accordion/Accordion.d.ts.map +1 -1
- package/lib/types/accordion/accordion-types.d.ts +1 -1
- package/lib/types/accordion/accordion-types.d.ts.map +1 -1
- package/lib/types/accordion/stories/accordion.stories.d.ts +4 -4
- package/lib/types/avatar/Avatar.d.ts.map +1 -1
- package/lib/types/banner/Banner.d.ts +1 -1
- package/lib/types/banner/Banner.d.ts.map +1 -1
- package/lib/types/box/Box.d.ts +1 -1
- package/lib/types/box/Box.d.ts.map +1 -1
- package/lib/types/box/stories/box.stories.d.ts +1 -1
- package/lib/types/breadcrumbs/Breadcrumbs.d.ts +3 -3
- package/lib/types/breadcrumbs/Breadcrumbs.d.ts.map +1 -1
- package/lib/types/breadcrumbs/stories/breadcrumbs.stories.d.ts +3 -3
- package/lib/types/button/stories/button.stories.d.ts +1 -1
- package/lib/types/button/stories/button.stories.d.ts.map +1 -1
- package/lib/types/checkbox/Checkbox.d.ts.map +1 -1
- package/lib/types/clipboard-button/ClipboardButton.d.ts.map +1 -1
- package/lib/types/color-picker/ColorPicker.d.ts.map +1 -1
- package/lib/types/data-grid/Components.d.ts.map +1 -1
- package/lib/types/data-grid/DataGrid.d.ts +23 -23
- package/lib/types/data-grid/DataGrid.d.ts.map +1 -1
- package/lib/types/data-grid/data-grid-nav/data-grid-nav.d.ts.map +1 -1
- package/lib/types/data-grid/data-grid-nav/helpers.d.ts.map +1 -1
- package/lib/types/data-grid/stories/datagrid-component-overriding.story.d.ts.map +1 -1
- package/lib/types/data-grid/stories/datagrid-in-dialog.story.d.ts.map +1 -1
- package/lib/types/data-grid/stories/datagrid-keyboard-navigation.story.d.ts.map +1 -1
- package/lib/types/data-grid/stories/datagrid-kitchen-sink.story.d.ts.map +1 -1
- package/lib/types/data-grid/stories/datagrid-pinned-columns.stories.d.ts +1 -1
- package/lib/types/data-grid/stories/datagrid-placeholder-states.stories.d.ts +1 -1
- package/lib/types/data-grid/stories/datagrid-search-and-filters.stories.d.ts +1 -1
- package/lib/types/data-grid/stories/datagrid-search-and-filters.stories.d.ts.map +1 -1
- package/lib/types/date-picker/DatePicker.d.ts.map +1 -1
- package/lib/types/date-picker/stories/date-picker-range.story.d.ts.map +1 -1
- package/lib/types/dialog/Dialog.d.ts +6 -6
- package/lib/types/dialog/Dialog.d.ts.map +1 -1
- package/lib/types/dialog/dialog-context.d.ts.map +1 -1
- package/lib/types/drawer/Drawer.d.ts +3 -3
- package/lib/types/drawer/Drawer.d.ts.map +1 -1
- package/lib/types/dropdown-button/DropdownButton.d.ts +1 -1
- package/lib/types/dropdown-button/DropdownButton.d.ts.map +1 -1
- package/lib/types/dropzone/Dropzone.d.ts.map +1 -1
- package/lib/types/flex/Flex.d.ts +1 -1
- package/lib/types/flex/Flex.d.ts.map +1 -1
- package/lib/types/flex/stories/flex.stories.d.ts +1 -1
- package/lib/types/graph-label/GraphLabel.d.ts +1 -1
- package/lib/types/graph-label/GraphLabel.d.ts.map +1 -1
- package/lib/types/icon-button-array/IconButtonArray.d.ts +2 -2
- package/lib/types/icon-button-array/IconButtonArray.d.ts.map +1 -1
- package/lib/types/icon-button-array/index.d.ts +1 -1
- package/lib/types/icon-button-array/index.d.ts.map +1 -1
- package/lib/types/inline-edit/InlineEdit.d.ts +1 -1
- package/lib/types/inline-edit/InlineEdit.d.ts.map +1 -1
- package/lib/types/kbd/Kbd.d.ts.map +1 -1
- package/lib/types/loading-bar/LoadingBar.d.ts +1 -1
- package/lib/types/loading-bar/LoadingBar.d.ts.map +1 -1
- package/lib/types/menu/Menu.d.ts +2 -2
- package/lib/types/menu/Menu.d.ts.map +1 -1
- package/lib/types/popover/Popover.d.ts +1 -1
- package/lib/types/popover/Popover.d.ts.map +1 -1
- package/lib/types/popover/stories/popover-custom-offset.story.d.ts.map +1 -1
- package/lib/types/radio/Radio.d.ts.map +1 -1
- package/lib/types/select/Overrides.d.ts +1 -2
- package/lib/types/select/Overrides.d.ts.map +1 -1
- package/lib/types/select/Select.d.ts +1 -1
- package/lib/types/select/Select.d.ts.map +1 -1
- package/lib/types/side-navigation/SideNavigation.d.ts +1 -1
- package/lib/types/side-navigation/SideNavigation.d.ts.map +1 -1
- package/lib/types/side-navigation/stories/side-nav.stories.d.ts +1 -1
- package/lib/types/skeleton/Skeleton.d.ts +1 -1
- package/lib/types/skeleton/Skeleton.d.ts.map +1 -1
- package/lib/types/skeleton/stories/skeleton.stories.d.ts +1 -1
- package/lib/types/spotlight/Spotlight.d.ts +6 -6
- package/lib/types/spotlight/Spotlight.d.ts.map +1 -1
- package/lib/types/spotlight/SpotlightProvider.d.ts.map +1 -1
- package/lib/types/spotlight/SpotlightTarget.d.ts +1 -1
- package/lib/types/spotlight/SpotlightTarget.d.ts.map +1 -1
- package/lib/types/spotlight/use-indicator.d.ts.map +1 -1
- package/lib/types/switch/Switch.d.ts.map +1 -1
- package/lib/types/tabs/use-tabs-scroll-overflow.d.ts.map +1 -1
- package/lib/types/tag/Tag.d.ts +1 -1
- package/lib/types/tag/Tag.d.ts.map +1 -1
- package/lib/types/text-area/TextArea.d.ts +1 -1
- package/lib/types/text-area/TextArea.d.ts.map +1 -1
- package/lib/types/text-input/TextInput.d.ts +1 -1
- package/lib/types/text-input/TextInput.d.ts.map +1 -1
- package/lib/types/text-link/TextLink.d.ts +1 -1
- package/lib/types/text-link/TextLink.d.ts.map +1 -1
- package/lib/types/text-overflow/TextOverflow.d.ts.map +1 -1
- package/lib/types/text-overflow/text-overflow-utils.d.ts.map +1 -1
- package/lib/types/text-overflow/use-ellipsis-observer.d.ts.map +1 -1
- package/lib/types/text-overflow/use-truncate-with-button.d.ts.map +1 -1
- package/lib/types/theme/ThemeProvider.d.ts.map +1 -1
- package/lib/types/time-picker/TimePicker.d.ts +1 -1
- package/lib/types/time-picker/TimePicker.d.ts.map +1 -1
- package/lib/types/time-picker/stories/time-picker.stories.d.ts +1 -1
- package/lib/types/timezone-picker/TimeZonePicker.d.ts.map +1 -1
- package/lib/types/timezone-picker/generate-timezone-options.d.ts.map +1 -1
- package/lib/types/toast/Toast.d.ts +1 -1
- package/lib/types/toast/Toast.d.ts.map +1 -1
- package/lib/types/tooltip/Tooltip.d.ts +8 -7
- package/lib/types/tooltip/Tooltip.d.ts.map +1 -1
- package/lib/types/tree-view/TreeItemWrapper.d.ts.map +1 -1
- package/lib/types/tree-view/TreeView.d.ts.map +1 -1
- package/lib/types/tree-view/TreeViewItem.d.ts.map +1 -1
- package/lib/types/tree-view/TreeViewTrail.d.ts +2 -1
- package/lib/types/tree-view/TreeViewTrail.d.ts.map +1 -1
- package/lib/types/wizard/Wizard.d.ts +1 -1
- package/lib/types/wizard/Wizard.d.ts.map +1 -1
- package/package.json +2 -2
- package/lib/cjs/dropdown-button/avatar-test.stories.tsx.js +0 -31
- package/lib/cjs/dropdown-button/avatar-test.stories.tsx.js.map +0 -1
- package/lib/esm/dropdown-button/avatar-test.stories.tsx.js +0 -27
- package/lib/esm/dropdown-button/avatar-test.stories.tsx.js.map +0 -1
- package/lib/types/dropdown-button/avatar-test.stories.tsx.d.ts +0 -24
- package/lib/types/dropdown-button/avatar-test.stories.tsx.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timezone-picker.stories.js","sourceRoot":"","sources":["../../../../src/timezone-picker/stories/timezone-picker.stories.tsx"],"names":[],"mappings":";;;;AAsBA,sDAAmD;AACnD,
|
|
1
|
+
{"version":3,"file":"timezone-picker.stories.js","sourceRoot":"","sources":["../../../../src/timezone-picker/stories/timezone-picker.stories.tsx"],"names":[],"mappings":";;;;AAsBA,sDAAmD;AACnD,wBAiBW;AAEX,MAAM,aAAa,GAAgC;IACjD,SAAS,EAAE,+BAAc;IACzB,UAAU,EAAE;QACV,CAAC,KAAK,EAAE,EAAE,CAAC,CACT,gCAAK,SAAS,EAAC,yBAAyB,YACtC,uBAAC,KAAK,KAAG,GACL,CACP;KACF;IACD,EAAE,EAAE,4BAA4B;IAChC,UAAU,EAAE;QACV,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;KAC5B;IACD,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,KAAK,EAAE,2BAA2B;CACnC,CAAC;AAEF,kBAAe,aAAa,CAAC;AAGhB,QAAA,OAAO,GAAU;IAC5B,IAAI,EAAE,EAAE;IACR,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,MAAM,EAAE;gBACN,IAAI,EAAE,8BAA2B;gBACjC,QAAQ,EAAE,KAAK;gBACf,IAAI,EAAE,MAAM;aACb;SACF;KACF;IACD,MAAM,EAAE,wBAAqB;CAC9B,CAAC;AAEW,QAAA,KAAK,GAAU;IAC1B,IAAI,EAAE,EAAE;IACR,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,MAAM,EAAE;gBACN,IAAI,EAAE,4BAAyB;gBAC/B,QAAQ,EAAE,KAAK;gBACf,IAAI,EAAE,MAAM;aACb;SACF;KACF;IACD,MAAM,EAAE,sBAAmB;CAC5B,CAAC;AAEW,QAAA,KAAK,GAAU;IAC1B,IAAI,EAAE,EAAE;IACR,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,MAAM,EAAE;gBACN,IAAI,EAAE,4BAAyB;gBAC/B,QAAQ,EAAE,KAAK;gBACf,IAAI,EAAE,MAAM;aACb;SACF;KACF;IACD,MAAM,EAAE,sBAAmB;CAC5B,CAAC;AAEW,QAAA,QAAQ,GAAU;IAC7B,IAAI,EAAE,EAAE;IACR,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,MAAM,EAAE;gBACN,IAAI,EAAE,+BAA4B;gBAClC,QAAQ,EAAE,KAAK;gBACf,IAAI,EAAE,MAAM;aACb;SACF;KACF;IACD,MAAM,EAAE,yBAAsB;CAC/B,CAAC;AAEW,QAAA,QAAQ,GAAU;IAC7B,IAAI,EAAE,EAAE;IACR,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,MAAM,EAAE;gBACN,IAAI,EAAE,+BAA4B;gBAClC,QAAQ,EAAE,KAAK;gBACf,IAAI,EAAE,MAAM;aACb;SACF;KACF;IACD,MAAM,EAAE,yBAAsB;CAC/B,CAAC;AAEW,QAAA,OAAO,GAAU;IAC5B,IAAI,EAAE,EAAE;IACR,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,MAAM,EAAE;gBACN,IAAI,EAAE,8BAA2B;gBACjC,QAAQ,EAAE,KAAK;gBACf,IAAI,EAAE,MAAM;aACb;SACF;KACF;IACD,MAAM,EAAE,wBAAqB;CAC9B,CAAC;AAEW,QAAA,QAAQ,GAAU;IAC7B,IAAI,EAAE,EAAE;IACR,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,MAAM,EAAE;gBACN,IAAI,EAAE,+BAA4B;gBAClC,QAAQ,EAAE,KAAK;gBACf,IAAI,EAAE,MAAM;aACb;SACF;KACF;IACD,MAAM,EAAE,yBAAsB;CAC/B,CAAC;AAEW,QAAA,QAAQ,GAAU;IAC7B,IAAI,EAAE,EAAE;IACR,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,MAAM,EAAE;gBACN,IAAI,EAAE,+BAA4B;gBAClC,QAAQ,EAAE,KAAK;gBACf,IAAI,EAAE,MAAM;aACb;SACF;KACF;IACD,MAAM,EAAE,yBAAsB;CAC/B,CAAC","sourcesContent":["/**\n *\n * Copyright (c) \"Neo4j\"\n * Neo4j Sweden AB [http://neo4j.com]\n *\n * This file is part of Neo4j.\n *\n * Neo4j is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport { type Meta, type StoryObj } from '@storybook/react-vite';\n\nimport { TimeZonePicker } from '../TimeZonePicker';\nimport {\n TimeZonePickerBothMode,\n TimeZonePickerBothModeSource,\n TimeZonePickerDefault,\n TimeZonePickerDefaultSource,\n TimeZonePickerDisabled,\n TimeZonePickerDisabledSource,\n TimeZonePickerDSTAware,\n TimeZonePickerDSTAwareSource,\n TimeZonePickerFluid,\n TimeZonePickerFluidSource,\n TimeZonePickerInDialog,\n TimeZonePickerInDialogSource,\n TimeZonePickerSizes,\n TimeZonePickerSizesSource,\n TimeZonePickerUTCOnly,\n TimeZonePickerUTCOnlySource,\n} from '.';\n\nconst componentMeta: Meta<typeof TimeZonePicker> = {\n component: TimeZonePicker,\n decorators: [\n (Story) => (\n <div className=\"n-flex n-justify-center\">\n <Story />\n </div>\n ),\n ],\n id: 'components-timezone-picker',\n parameters: {\n controls: { disable: true },\n },\n tags: ['docsPage'],\n title: 'Components/TimeZonePicker',\n};\n\nexport default componentMeta;\ntype Story = StoryObj<typeof componentMeta>;\n\nexport const Default: Story = {\n args: {},\n parameters: {\n docs: {\n source: {\n code: TimeZonePickerDefaultSource,\n language: 'tsx',\n type: 'code',\n },\n },\n },\n render: TimeZonePickerDefault,\n};\n\nexport const Fluid: Story = {\n args: {},\n parameters: {\n docs: {\n source: {\n code: TimeZonePickerFluidSource,\n language: 'tsx',\n type: 'code',\n },\n },\n },\n render: TimeZonePickerFluid,\n};\n\nexport const Sizes: Story = {\n args: {},\n parameters: {\n docs: {\n source: {\n code: TimeZonePickerSizesSource,\n language: 'tsx',\n type: 'code',\n },\n },\n },\n render: TimeZonePickerSizes,\n};\n\nexport const Disabled: Story = {\n args: {},\n parameters: {\n docs: {\n source: {\n code: TimeZonePickerDisabledSource,\n language: 'tsx',\n type: 'code',\n },\n },\n },\n render: TimeZonePickerDisabled,\n};\n\nexport const DSTAware: Story = {\n args: {},\n parameters: {\n docs: {\n source: {\n code: TimeZonePickerDSTAwareSource,\n language: 'tsx',\n type: 'code',\n },\n },\n },\n render: TimeZonePickerDSTAware,\n};\n\nexport const UTCOnly: Story = {\n args: {},\n parameters: {\n docs: {\n source: {\n code: TimeZonePickerUTCOnlySource,\n language: 'tsx',\n type: 'code',\n },\n },\n },\n render: TimeZonePickerUTCOnly,\n};\n\nexport const BothMode: Story = {\n args: {},\n parameters: {\n docs: {\n source: {\n code: TimeZonePickerBothModeSource,\n language: 'tsx',\n type: 'code',\n },\n },\n },\n render: TimeZonePickerBothMode,\n};\n\nexport const InDialog: Story = {\n args: {},\n parameters: {\n docs: {\n source: {\n code: TimeZonePickerInDialogSource,\n language: 'tsx',\n type: 'code',\n },\n },\n },\n render: TimeZonePickerInDialog,\n};\n"]}
|
package/lib/cjs/toast/Toast.js
CHANGED
|
@@ -55,7 +55,8 @@ function onCloseCallback(callback, id) {
|
|
|
55
55
|
delete sonner_1.toast.needle[id];
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
|
-
const Toast = (
|
|
58
|
+
const Toast = (_a) => {
|
|
59
|
+
var { icon, id, text, variant, isCloseable, onClose, actionLabel, onAction, shouldCloseOnAction, initialProgressBarValue, isControlled, htmlAttributes, ref } = _a, restProps = __rest(_a, ["icon", "id", "text", "variant", "isCloseable", "onClose", "actionLabel", "onAction", "shouldCloseOnAction", "initialProgressBarValue", "isControlled", "htmlAttributes", "ref"]);
|
|
59
60
|
const isProgressBar = variant === 'progress-bar';
|
|
60
61
|
const handleOnClose = () => {
|
|
61
62
|
if (isControlled === true) {
|
|
@@ -66,14 +67,15 @@ const Toast = ({ icon, id, text, variant, isCloseable, onClose, actionLabel, onA
|
|
|
66
67
|
onCloseCallback(onClose, id);
|
|
67
68
|
};
|
|
68
69
|
const handleOnAction = () => {
|
|
69
|
-
if (onAction)
|
|
70
|
+
if (onAction) {
|
|
70
71
|
onAction(id);
|
|
72
|
+
}
|
|
71
73
|
if (shouldCloseOnAction === true) {
|
|
72
74
|
sonner_1.toast.dismiss(id);
|
|
73
75
|
onCloseCallback(onClose, id);
|
|
74
76
|
}
|
|
75
77
|
};
|
|
76
|
-
return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ id: String(id), className: "ndl-toast", tabIndex: -1, ref: ref, "data-variant": variant, "data-testid": "ndl-toast" }, htmlAttributes, { children: [(0, jsx_runtime_1.jsxs)("div", { className: "ndl-toast-content", tabIndex: -1, children: [icon && ((0, jsx_runtime_1.jsx)("div", { className: `ndl-toast-icon ndl-toast-${variant}`, children: icon })), (0, jsx_runtime_1.jsx)("div", { className: "ndl-toast-text", children: text }), actionLabel && ((0, jsx_runtime_1.jsx)(outlined_button_1.OutlinedButton, { className: "ndl-toast-action", size: "small", onClick: handleOnAction, children: actionLabel })), (isCloseable || actionLabel || isProgressBar) && ((0, jsx_runtime_1.jsx)(clean_icon_button_1.CleanIconButton, { className: "ndl-toast-close-button", onClick: handleOnClose, description: null, size: "small", htmlAttributes: {
|
|
78
|
+
return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ id: String(id), className: "ndl-toast", tabIndex: -1, ref: ref, "data-variant": variant, "data-testid": "ndl-toast" }, restProps, htmlAttributes, { children: [(0, jsx_runtime_1.jsxs)("div", { className: "ndl-toast-content", tabIndex: -1, children: [icon && ((0, jsx_runtime_1.jsx)("div", { className: `ndl-toast-icon ndl-toast-${variant}`, children: icon })), (0, jsx_runtime_1.jsx)("div", { className: "ndl-toast-text", children: text }), actionLabel && ((0, jsx_runtime_1.jsx)(outlined_button_1.OutlinedButton, { className: "ndl-toast-action", size: "small", onClick: handleOnAction, children: actionLabel })), (isCloseable || actionLabel || isProgressBar) && ((0, jsx_runtime_1.jsx)(clean_icon_button_1.CleanIconButton, { className: "ndl-toast-close-button", onClick: handleOnClose, description: null, size: "small", htmlAttributes: {
|
|
77
79
|
'aria-label': 'Close',
|
|
78
80
|
}, children: (0, jsx_runtime_1.jsx)(icons_1.XMarkIconOutline, {}) }))] }), isProgressBar && ((0, jsx_runtime_1.jsx)(progress_bar_1.ProgressBar, { size: "small", value: initialProgressBarValue !== null && initialProgressBarValue !== void 0 ? initialProgressBarValue : 0 }))] })));
|
|
79
81
|
};
|
|
@@ -83,8 +85,9 @@ function getProps(onClose, shouldAutoClose, onAutoClose, onAction, sonnerToastPr
|
|
|
83
85
|
return Object.assign({ duration: !isProgressBar && shouldAutoClose ? (!onAction ? 5000 : 8000) : Infinity, unstyled: true, onDismiss: (toast) => {
|
|
84
86
|
onCloseCallback(onClose, toast.id);
|
|
85
87
|
}, onAutoClose: (toast) => {
|
|
86
|
-
if (onAutoClose)
|
|
88
|
+
if (onAutoClose) {
|
|
87
89
|
return onAutoClose(toast.id);
|
|
90
|
+
}
|
|
88
91
|
} }, sonnerToastProps);
|
|
89
92
|
}
|
|
90
93
|
function createToast(text, props, variant, icon) {
|
|
@@ -123,13 +126,15 @@ const toast = {
|
|
|
123
126
|
// Unable to use the sonner toast.update on custom toasts.
|
|
124
127
|
const widthValue = `${value}%`;
|
|
125
128
|
const toastElement = document.getElementById(String(id));
|
|
126
|
-
if (!toastElement)
|
|
129
|
+
if (!toastElement) {
|
|
127
130
|
return;
|
|
131
|
+
}
|
|
128
132
|
const progressBarContainerElement = toastElement.querySelector('.ndl-progress-bar-container');
|
|
129
133
|
progressBarContainerElement.ariaValueNow = String(value);
|
|
130
134
|
const progressBarElement = progressBarContainerElement.querySelector('.ndl-progress-bar');
|
|
131
|
-
if (!progressBarContainerElement)
|
|
135
|
+
if (!progressBarContainerElement) {
|
|
132
136
|
return;
|
|
137
|
+
}
|
|
133
138
|
progressBarElement.style.setProperty('width', widthValue);
|
|
134
139
|
},
|
|
135
140
|
close: (id) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toast.js","sourceRoot":"","sources":["../../../src/toast/Toast.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n *\n * Copyright (c) \"Neo4j\"\n * Neo4j Sweden AB [http://neo4j.com]\n *\n * This file is part of Neo4j.\n *\n * Neo4j is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport classNames from 'classnames';\nimport { type ReactNode } from 'react';\nimport {\n type ExternalToast as SonnerExternalToast,\n toast as sonnerToast,\n Toaster as SonnerToaster,\n type ToasterProps as SonnerToasterProps,\n type ToastT as SonnerToastT,\n} from 'sonner';\n\nimport { type CommonProps } from '../_common/types';\nimport { CleanIconButton } from '../clean-icon-button';\nimport {\n CheckCircleIconSolid,\n ExclamationCircleIconSolid,\n XMarkIconOutline,\n} from '../icons';\nimport { OutlinedButton } from '../outlined-button';\nimport { ProgressBar } from '../progress-bar';\n\ntype ToastVariants = 'neutral' | 'success' | 'danger' | 'progress-bar';\n\ntype ToastCommandVariants = 'neutral' | 'success' | 'danger' | 'progressBar';\n\ntype ToastId = string | number;\n\ntype BaseToastProps = CommonProps<\n 'div',\n {\n /** If `true` a close button will be displayed in the toast. */\n isCloseable?: boolean;\n /** If `true` the toast will close when the action button is triggered. */\n shouldCloseOnAction?: boolean;\n /** Function that will be called when the toast is closed. */\n onClose?: (id: ToastId) => void;\n /** If true the toast will close automatically after a certain time. */\n shouldAutoClose?: boolean;\n /** Function that will be called when the toast is automatically closed. */\n onAutoClose?: (id: ToastId) => void;\n /** If set an action button will be displayed. The value here will be displayed\n * in the action button. If this is set the toast property `shouldAutoClose` will\n * automatically be set to `false` unless overridden. */\n actionLabel?: string;\n /** Function that will be called when the action button is clicked. */\n onAction?: (id: ToastId) => void;\n /** If a dev wishes to set the underlying framework props (Sonner Toast).\n * https://sonner.emilkowal.ski/toast#api-reference */\n sonnerToastProps?: SonnerExternalToast;\n /** If true the toast is controlled by the parent. */\n isControlled?: boolean;\n }\n>;\n\ninterface ToastNeutralProps extends BaseToastProps {\n icon?: ReactNode;\n}\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\ninterface ToastSuccessProps extends BaseToastProps {}\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\ninterface ToastDangerProps extends BaseToastProps {}\n\ninterface ToastProgressBarProps extends BaseToastProps {\n icon?: ReactNode;\n initialProgressBarValue?: number;\n}\n\ntype ToastVariantsProps =\n | ToastNeutralProps\n | ToastSuccessProps\n | ToastDangerProps\n | ToastProgressBarProps;\n\ninterface ToasterProps\n extends Pick<SonnerToasterProps, 'position' | 'visibleToasts' | 'className'> {\n sonnerToasterProps?: SonnerToasterProps;\n}\n\nconst Toaster = (props: ToasterProps) => {\n const {\n position = 'bottom-left',\n visibleToasts = 1,\n className,\n sonnerToasterProps,\n } = props;\n\n const classes = classNames('ndl-toast-container', className);\n\n return (\n <SonnerToaster\n className={classes}\n position={position}\n visibleToasts={visibleToasts}\n {...sonnerToasterProps}\n />\n );\n};\n\ntype SonnerToast = typeof sonnerToast;\ninterface CustomSonnerToast extends SonnerToast {\n needle: Record<string, { onClose?: (id: ToastId) => void }>;\n}\n\nfunction onCloseCallback(\n callback: ((id: ToastId) => void) | undefined,\n id: ToastId,\n) {\n if (callback) {\n callback(id);\n // Cleanup\n delete (sonnerToast as CustomSonnerToast).needle[id];\n }\n}\n\ntype ToastElement = ToastVariantsProps & {\n icon: ReactNode;\n id: ToastId;\n variant: ToastVariants;\n text: ReactNode;\n initialProgressBarValue?: number;\n isControlled?: boolean;\n};\n\nconst Toast = ({\n icon,\n id,\n text,\n variant,\n isCloseable,\n onClose,\n actionLabel,\n onAction,\n shouldCloseOnAction,\n initialProgressBarValue,\n isControlled,\n htmlAttributes,\n ref,\n}: ToastElement) => {\n const isProgressBar = variant === 'progress-bar';\n\n const handleOnClose = () => {\n if (isControlled === true) {\n onCloseCallback(onClose, id);\n return;\n }\n sonnerToast.dismiss(id);\n onCloseCallback(onClose, id);\n };\n\n const handleOnAction = () => {\n if (onAction) onAction(id);\n if (shouldCloseOnAction === true) {\n sonnerToast.dismiss(id);\n onCloseCallback(onClose, id);\n }\n };\n\n return (\n <div\n id={String(id)}\n className=\"ndl-toast\"\n tabIndex={-1}\n ref={ref}\n data-variant={variant}\n data-testid=\"ndl-toast\"\n {...htmlAttributes}\n >\n <div className=\"ndl-toast-content\" tabIndex={-1}>\n {icon && (\n <div className={`ndl-toast-icon ndl-toast-${variant}`}>{icon}</div>\n )}\n <div className=\"ndl-toast-text\">{text}</div>\n {actionLabel && (\n <OutlinedButton\n className=\"ndl-toast-action\"\n size=\"small\"\n onClick={handleOnAction}\n >\n {actionLabel}\n </OutlinedButton>\n )}\n {(isCloseable || actionLabel || isProgressBar) && (\n <CleanIconButton\n className=\"ndl-toast-close-button\"\n onClick={handleOnClose}\n description={null}\n size=\"small\"\n htmlAttributes={{\n 'aria-label': 'Close',\n }}\n >\n <XMarkIconOutline />\n </CleanIconButton>\n )}\n </div>\n {isProgressBar && (\n <ProgressBar size=\"small\" value={initialProgressBarValue ?? 0} />\n )}\n </div>\n );\n};\n\nfunction getProps(\n onClose: ((id: ToastId) => void) | undefined,\n shouldAutoClose: boolean | undefined,\n onAutoClose: ((id: ToastId) => void) | undefined,\n onAction: ((id: ToastId) => void) | undefined,\n sonnerToastProps: SonnerExternalToast | undefined,\n variant: ToastVariants,\n) {\n const isProgressBar = variant === 'progress-bar';\n // https://sonner.emilkowal.ski/toast#api-reference\n return {\n duration:\n !isProgressBar && shouldAutoClose ? (!onAction ? 5000 : 8000) : Infinity,\n unstyled: true,\n onDismiss: (toast: SonnerToastT) => {\n onCloseCallback(onClose, toast.id);\n },\n onAutoClose: (toast: SonnerToastT) => {\n if (onAutoClose) return onAutoClose(toast.id);\n },\n ...sonnerToastProps,\n };\n}\n\nfunction createToast(\n text: ReactNode,\n props: ToastVariantsProps,\n variant: ToastVariants,\n icon: ReactNode,\n) {\n const {\n ref,\n sonnerToastProps = {},\n onClose,\n shouldAutoClose,\n onAutoClose,\n onAction,\n ...restProps\n } = props;\n\n const { id: sonnerToastPropsId } = sonnerToastProps;\n sonnerToastProps.id = sonnerToastPropsId ?? `ndl-toast-${Date.now()}`;\n\n // Unfortunately calling sonnerToast.dismiss does not trigger the onDismiss\n // callback (weird). So we need to save the onClose callback and call it manually\n // when calling dismiss manually as we want an onClose callback.\n // https://sonner.emilkowal.ski/toast#on-close-callback\n // https://github.com/emilkowalski/sonner/blob/main/src/index.tsx#L320\n // https://github.com/emilkowalski/sonner/blob/main/src/index.tsx#L359\n (sonnerToast as CustomSonnerToast).needle = {\n [String(sonnerToastProps.id)]: {\n onClose,\n },\n };\n\n return sonnerToast.custom(\n (id: ToastId) => (\n <Toast\n {...restProps}\n ref={ref}\n id={id}\n text={text}\n variant={variant}\n icon={icon}\n onClose={onClose}\n onAction={onAction}\n />\n ),\n {\n ...getProps(\n onClose,\n shouldAutoClose,\n onAutoClose,\n onAction,\n sonnerToastProps,\n variant,\n ),\n },\n );\n}\n\n// eslint-disable-next-line no-redeclare\ninterface Toast {\n neutral: (text: ReactNode, props?: ToastNeutralProps) => ToastId;\n success: (text: ReactNode, props?: ToastSuccessProps) => ToastId;\n danger: (text: ReactNode, props?: ToastDangerProps) => ToastId;\n progressBar: (text: ReactNode, props?: ToastProgressBarProps) => ToastId;\n updateProgressBarValue: (id: ToastId, value: number) => void;\n close: (id: ToastId) => void;\n sonnerToast: typeof sonnerToast;\n}\n\nconst toast: Toast = {\n neutral: (text, props = {}) => {\n const { icon, ...restProps } = props;\n return createToast(text, restProps, 'neutral', icon);\n },\n success: (text: ReactNode, props = {}) => {\n const icon = <CheckCircleIconSolid />;\n return createToast(text, props, 'success', icon);\n },\n danger: (text: ReactNode, props = {}) =>\n createToast(text, props, 'danger', <ExclamationCircleIconSolid />),\n progressBar: (text: ReactNode, props = {}) => {\n const { icon, ...restProps } = props;\n return createToast(text, restProps, 'progress-bar', icon);\n },\n updateProgressBarValue: (id, givenValue) => {\n const value = givenValue > 100 ? 100 : givenValue < 0 ? 0 : givenValue;\n\n // Unable to use the sonner toast.update on custom toasts.\n const widthValue = `${value}%`;\n const toastElement = document.getElementById(String(id)) as HTMLDivElement;\n\n if (!toastElement) return;\n\n const progressBarContainerElement = toastElement.querySelector(\n '.ndl-progress-bar-container',\n ) as HTMLDivElement;\n progressBarContainerElement.ariaValueNow = String(value);\n const progressBarElement = progressBarContainerElement.querySelector(\n '.ndl-progress-bar',\n ) as HTMLDivElement;\n\n if (!progressBarContainerElement) return;\n\n progressBarElement.style.setProperty('width', widthValue);\n },\n close: (id) => {\n sonnerToast.dismiss(id);\n onCloseCallback((sonnerToast as CustomSonnerToast).needle[id]?.onClose, id);\n },\n sonnerToast, // If devs wish to directly access sonner toast.\n};\n\nexport { Toaster, toast };\nexport type {\n ToasterProps,\n ToastVariants,\n ToastCommandVariants,\n ToastNeutralProps,\n ToastSuccessProps,\n ToastDangerProps,\n ToastProgressBarProps,\n ToastVariantsProps,\n ToastElement,\n ToastId,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"Toast.js","sourceRoot":"","sources":["../../../src/toast/Toast.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n *\n * Copyright (c) \"Neo4j\"\n * Neo4j Sweden AB [http://neo4j.com]\n *\n * This file is part of Neo4j.\n *\n * Neo4j is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport classNames from 'classnames';\nimport { type ReactNode } from 'react';\nimport {\n type ExternalToast as SonnerExternalToast,\n toast as sonnerToast,\n Toaster as SonnerToaster,\n type ToasterProps as SonnerToasterProps,\n type ToastT as SonnerToastT,\n} from 'sonner';\n\nimport { type CommonProps } from '../_common/types';\nimport { CleanIconButton } from '../clean-icon-button';\nimport {\n CheckCircleIconSolid,\n ExclamationCircleIconSolid,\n XMarkIconOutline,\n} from '../icons';\nimport { OutlinedButton } from '../outlined-button';\nimport { ProgressBar } from '../progress-bar';\n\ntype ToastVariants = 'neutral' | 'success' | 'danger' | 'progress-bar';\n\ntype ToastCommandVariants = 'neutral' | 'success' | 'danger' | 'progressBar';\n\ntype ToastId = string | number;\n\ntype BaseToastProps = CommonProps<\n 'div',\n {\n /** If `true` a close button will be displayed in the toast. */\n isCloseable?: boolean;\n /** If `true` the toast will close when the action button is triggered. */\n shouldCloseOnAction?: boolean;\n /** Function that will be called when the toast is closed. */\n onClose?: (id: ToastId) => void;\n /** If true the toast will close automatically after a certain time. */\n shouldAutoClose?: boolean;\n /** Function that will be called when the toast is automatically closed. */\n onAutoClose?: (id: ToastId) => void;\n /** If set an action button will be displayed. The value here will be displayed\n * in the action button. If this is set the toast property `shouldAutoClose` will\n * automatically be set to `false` unless overridden. */\n actionLabel?: string;\n /** Function that will be called when the action button is clicked. */\n onAction?: (id: ToastId) => void;\n /** If a dev wishes to set the underlying framework props (Sonner Toast).\n * https://sonner.emilkowal.ski/toast#api-reference */\n sonnerToastProps?: SonnerExternalToast;\n /** If true the toast is controlled by the parent. */\n isControlled?: boolean;\n }\n>;\n\ninterface ToastNeutralProps extends BaseToastProps {\n icon?: ReactNode;\n}\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\ninterface ToastSuccessProps extends BaseToastProps {}\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\ninterface ToastDangerProps extends BaseToastProps {}\n\ninterface ToastProgressBarProps extends BaseToastProps {\n icon?: ReactNode;\n initialProgressBarValue?: number;\n}\n\ntype ToastVariantsProps =\n | ToastNeutralProps\n | ToastSuccessProps\n | ToastDangerProps\n | ToastProgressBarProps;\n\ninterface ToasterProps\n extends Pick<SonnerToasterProps, 'position' | 'visibleToasts' | 'className'> {\n sonnerToasterProps?: SonnerToasterProps;\n}\n\nconst Toaster = (props: ToasterProps) => {\n const {\n position = 'bottom-left',\n visibleToasts = 1,\n className,\n sonnerToasterProps,\n } = props;\n\n const classes = classNames('ndl-toast-container', className);\n\n return (\n <SonnerToaster\n className={classes}\n position={position}\n visibleToasts={visibleToasts}\n {...sonnerToasterProps}\n />\n );\n};\n\ntype SonnerToast = typeof sonnerToast;\ninterface CustomSonnerToast extends SonnerToast {\n needle: Record<string, { onClose?: (id: ToastId) => void }>;\n}\n\nfunction onCloseCallback(\n callback: ((id: ToastId) => void) | undefined,\n id: ToastId,\n) {\n if (callback) {\n callback(id);\n // Cleanup\n delete (sonnerToast as CustomSonnerToast).needle[id];\n }\n}\n\ntype ToastElement = ToastVariantsProps & {\n icon: ReactNode;\n id: ToastId;\n variant: ToastVariants;\n text: ReactNode;\n initialProgressBarValue?: number;\n isControlled?: boolean;\n};\n\nconst Toast = ({\n icon,\n id,\n text,\n variant,\n isCloseable,\n onClose,\n actionLabel,\n onAction,\n shouldCloseOnAction,\n initialProgressBarValue,\n isControlled,\n htmlAttributes,\n ref,\n ...restProps\n}: ToastElement) => {\n const isProgressBar = variant === 'progress-bar';\n\n const handleOnClose = () => {\n if (isControlled === true) {\n onCloseCallback(onClose, id);\n return;\n }\n sonnerToast.dismiss(id);\n onCloseCallback(onClose, id);\n };\n\n const handleOnAction = () => {\n if (onAction) {\n onAction(id);\n }\n if (shouldCloseOnAction === true) {\n sonnerToast.dismiss(id);\n onCloseCallback(onClose, id);\n }\n };\n\n return (\n <div\n id={String(id)}\n className=\"ndl-toast\"\n tabIndex={-1}\n ref={ref}\n data-variant={variant}\n data-testid=\"ndl-toast\"\n {...restProps}\n {...htmlAttributes}\n >\n <div className=\"ndl-toast-content\" tabIndex={-1}>\n {icon && (\n <div className={`ndl-toast-icon ndl-toast-${variant}`}>{icon}</div>\n )}\n <div className=\"ndl-toast-text\">{text}</div>\n {actionLabel && (\n <OutlinedButton\n className=\"ndl-toast-action\"\n size=\"small\"\n onClick={handleOnAction}\n >\n {actionLabel}\n </OutlinedButton>\n )}\n {(isCloseable || actionLabel || isProgressBar) && (\n <CleanIconButton\n className=\"ndl-toast-close-button\"\n onClick={handleOnClose}\n description={null}\n size=\"small\"\n htmlAttributes={{\n 'aria-label': 'Close',\n }}\n >\n <XMarkIconOutline />\n </CleanIconButton>\n )}\n </div>\n {isProgressBar && (\n <ProgressBar size=\"small\" value={initialProgressBarValue ?? 0} />\n )}\n </div>\n );\n};\n\nfunction getProps(\n onClose: ((id: ToastId) => void) | undefined,\n shouldAutoClose: boolean | undefined,\n onAutoClose: ((id: ToastId) => void) | undefined,\n onAction: ((id: ToastId) => void) | undefined,\n sonnerToastProps: SonnerExternalToast | undefined,\n variant: ToastVariants,\n) {\n const isProgressBar = variant === 'progress-bar';\n // https://sonner.emilkowal.ski/toast#api-reference\n return {\n duration:\n !isProgressBar && shouldAutoClose ? (!onAction ? 5000 : 8000) : Infinity,\n unstyled: true,\n onDismiss: (toast: SonnerToastT) => {\n onCloseCallback(onClose, toast.id);\n },\n onAutoClose: (toast: SonnerToastT) => {\n if (onAutoClose) {\n return onAutoClose(toast.id);\n }\n },\n ...sonnerToastProps,\n };\n}\n\nfunction createToast(\n text: ReactNode,\n props: ToastVariantsProps,\n variant: ToastVariants,\n icon: ReactNode,\n) {\n const {\n ref,\n sonnerToastProps = {},\n onClose,\n shouldAutoClose,\n onAutoClose,\n onAction,\n ...restProps\n } = props;\n\n const { id: sonnerToastPropsId } = sonnerToastProps;\n sonnerToastProps.id = sonnerToastPropsId ?? `ndl-toast-${Date.now()}`;\n\n // Unfortunately calling sonnerToast.dismiss does not trigger the onDismiss\n // callback (weird). So we need to save the onClose callback and call it manually\n // when calling dismiss manually as we want an onClose callback.\n // https://sonner.emilkowal.ski/toast#on-close-callback\n // https://github.com/emilkowalski/sonner/blob/main/src/index.tsx#L320\n // https://github.com/emilkowalski/sonner/blob/main/src/index.tsx#L359\n (sonnerToast as CustomSonnerToast).needle = {\n [String(sonnerToastProps.id)]: {\n onClose,\n },\n };\n\n return sonnerToast.custom(\n (id: ToastId) => (\n <Toast\n {...restProps}\n ref={ref}\n id={id}\n text={text}\n variant={variant}\n icon={icon}\n onClose={onClose}\n onAction={onAction}\n />\n ),\n {\n ...getProps(\n onClose,\n shouldAutoClose,\n onAutoClose,\n onAction,\n sonnerToastProps,\n variant,\n ),\n },\n );\n}\n\n// eslint-disable-next-line no-redeclare\ninterface Toast {\n neutral: (text: ReactNode, props?: ToastNeutralProps) => ToastId;\n success: (text: ReactNode, props?: ToastSuccessProps) => ToastId;\n danger: (text: ReactNode, props?: ToastDangerProps) => ToastId;\n progressBar: (text: ReactNode, props?: ToastProgressBarProps) => ToastId;\n updateProgressBarValue: (id: ToastId, value: number) => void;\n close: (id: ToastId) => void;\n sonnerToast: typeof sonnerToast;\n}\n\nconst toast: Toast = {\n neutral: (text, props = {}) => {\n const { icon, ...restProps } = props;\n return createToast(text, restProps, 'neutral', icon);\n },\n success: (text: ReactNode, props = {}) => {\n const icon = <CheckCircleIconSolid />;\n return createToast(text, props, 'success', icon);\n },\n danger: (text: ReactNode, props = {}) =>\n createToast(text, props, 'danger', <ExclamationCircleIconSolid />),\n progressBar: (text: ReactNode, props = {}) => {\n const { icon, ...restProps } = props;\n return createToast(text, restProps, 'progress-bar', icon);\n },\n updateProgressBarValue: (id, givenValue) => {\n const value = givenValue > 100 ? 100 : givenValue < 0 ? 0 : givenValue;\n\n // Unable to use the sonner toast.update on custom toasts.\n const widthValue = `${value}%`;\n const toastElement = document.getElementById(String(id)) as HTMLDivElement;\n\n if (!toastElement) {\n return;\n }\n\n const progressBarContainerElement = toastElement.querySelector(\n '.ndl-progress-bar-container',\n ) as HTMLDivElement;\n progressBarContainerElement.ariaValueNow = String(value);\n const progressBarElement = progressBarContainerElement.querySelector(\n '.ndl-progress-bar',\n ) as HTMLDivElement;\n\n if (!progressBarContainerElement) {\n return;\n }\n\n progressBarElement.style.setProperty('width', widthValue);\n },\n close: (id) => {\n sonnerToast.dismiss(id);\n onCloseCallback((sonnerToast as CustomSonnerToast).needle[id]?.onClose, id);\n },\n sonnerToast, // If devs wish to directly access sonner toast.\n};\n\nexport { Toaster, toast };\nexport type {\n ToasterProps,\n ToastVariants,\n ToastCommandVariants,\n ToastNeutralProps,\n ToastSuccessProps,\n ToastDangerProps,\n ToastProgressBarProps,\n ToastVariantsProps,\n ToastElement,\n ToastId,\n};\n"]}
|
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
2
13
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
14
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
15
|
};
|
|
@@ -53,7 +64,8 @@ const TooltipComponent = ({ children, isDisabled = false, type, isInitialOpen, p
|
|
|
53
64
|
return ((0, jsx_runtime_1.jsx)(use_tooltip_1.TooltipContext.Provider, { value: tooltip, children: children }));
|
|
54
65
|
};
|
|
55
66
|
TooltipComponent.displayName = 'Tooltip';
|
|
56
|
-
const TooltipTrigger = (
|
|
67
|
+
const TooltipTrigger = (_a) => {
|
|
68
|
+
var { children, hasButtonWrapper = false, htmlAttributes, className, style, ref } = _a, restProps = __rest(_a, ["children", "hasButtonWrapper", "htmlAttributes", "className", "style", "ref"]);
|
|
57
69
|
const context = (0, use_tooltip_1.useTooltipContext)();
|
|
58
70
|
// Example from floating-ui
|
|
59
71
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -72,44 +84,52 @@ const TooltipTrigger = ({ children, hasButtonWrapper = false, htmlAttributes, cl
|
|
|
72
84
|
const props = Object.assign(Object.assign(Object.assign({ className: triggerClasses }, htmlAttributes), childrenProps), { ref: mergedRefs });
|
|
73
85
|
return (0, react_2.cloneElement)(children, context.getReferenceProps(props));
|
|
74
86
|
}
|
|
75
|
-
return ((0, jsx_runtime_1.jsx)("button", Object.assign({ className: triggerClasses, style: style, ref: mergedRefs }, context.getReferenceProps(htmlAttributes), { children: children })));
|
|
87
|
+
return ((0, jsx_runtime_1.jsx)("button", Object.assign({ className: triggerClasses, style: style, ref: mergedRefs }, context.getReferenceProps(htmlAttributes), restProps, { children: children })));
|
|
76
88
|
};
|
|
77
|
-
const TooltipContent = (
|
|
89
|
+
const TooltipContent = (_a) => {
|
|
90
|
+
var { children, style, htmlAttributes, className, ref } = _a, restProps = __rest(_a, ["children", "style", "htmlAttributes", "className", "ref"]);
|
|
78
91
|
const context = (0, use_tooltip_1.useTooltipContext)();
|
|
79
92
|
const mergedRef = (0, react_1.useMergeRefs)([context.refs.setFloating, ref]);
|
|
80
93
|
const { themeClassName } = (0, theme_1.useNeedleTheme)();
|
|
81
|
-
if (!context.isOpen)
|
|
94
|
+
if (!context.isOpen) {
|
|
82
95
|
return null;
|
|
96
|
+
}
|
|
83
97
|
const classes = (0, classnames_1.default)('ndl-tooltip-content', themeClassName, className, {
|
|
84
98
|
'ndl-tooltip-content-rich': context.type === 'rich',
|
|
85
99
|
'ndl-tooltip-content-simple': context.type === 'simple',
|
|
86
100
|
});
|
|
87
101
|
if (context.type === 'simple') {
|
|
88
|
-
return ((0, jsx_runtime_1.jsx)(conditional_wrap_1.ConditionalWrap, { shouldWrap: context.isPortaled, wrap: (wrapChildren) => (0, jsx_runtime_1.jsx)(react_1.FloatingPortal, { children: wrapChildren }), children: (0, jsx_runtime_1.jsx)("div", Object.assign({ ref: mergedRef, className: classes, style: Object.assign(Object.assign({}, context.floatingStyles), style) }, context.getFloatingProps(htmlAttributes), { children: (0, jsx_runtime_1.jsx)(typography_1.Typography, { variant: "body-medium", children: children }) })) }));
|
|
102
|
+
return ((0, jsx_runtime_1.jsx)(conditional_wrap_1.ConditionalWrap, { shouldWrap: context.isPortaled, wrap: (wrapChildren) => (0, jsx_runtime_1.jsx)(react_1.FloatingPortal, { children: wrapChildren }), children: (0, jsx_runtime_1.jsx)("div", Object.assign({ ref: mergedRef, className: classes, style: Object.assign(Object.assign({}, context.floatingStyles), style) }, restProps, context.getFloatingProps(htmlAttributes), { children: (0, jsx_runtime_1.jsx)(typography_1.Typography, { variant: "body-medium", children: children }) })) }));
|
|
89
103
|
}
|
|
90
|
-
return ((0, jsx_runtime_1.jsx)(conditional_wrap_1.ConditionalWrap, { shouldWrap: context.isPortaled, wrap: (wrapChildren) => (0, jsx_runtime_1.jsx)(react_1.FloatingPortal, { children: wrapChildren }), children: (0, jsx_runtime_1.jsx)(react_1.FloatingFocusManager, { context: context.context, returnFocus: true, modal: false, initialFocus: -1, closeOnFocusOut: true, children: (0, jsx_runtime_1.jsx)("div", Object.assign({ ref: mergedRef, className: classes, style: Object.assign(Object.assign({}, context.floatingStyles), style) }, context.getFloatingProps(htmlAttributes), { children: children })) }) }));
|
|
104
|
+
return ((0, jsx_runtime_1.jsx)(conditional_wrap_1.ConditionalWrap, { shouldWrap: context.isPortaled, wrap: (wrapChildren) => (0, jsx_runtime_1.jsx)(react_1.FloatingPortal, { children: wrapChildren }), children: (0, jsx_runtime_1.jsx)(react_1.FloatingFocusManager, { context: context.context, returnFocus: true, modal: false, initialFocus: -1, closeOnFocusOut: true, children: (0, jsx_runtime_1.jsx)("div", Object.assign({ ref: mergedRef, className: classes, style: Object.assign(Object.assign({}, context.floatingStyles), style) }, restProps, context.getFloatingProps(htmlAttributes), { children: children })) }) }));
|
|
91
105
|
};
|
|
92
|
-
const TooltipHeader = (
|
|
106
|
+
const TooltipHeader = (_a) => {
|
|
107
|
+
var { children, passThroughProps, typographyVariant = 'subheading-medium', className, style, htmlAttributes, ref } = _a, restProps = __rest(_a, ["children", "passThroughProps", "typographyVariant", "className", "style", "htmlAttributes", "ref"]);
|
|
93
108
|
const context = (0, use_tooltip_1.useTooltipContext)();
|
|
94
109
|
const classes = (0, classnames_1.default)('ndl-tooltip-header', className);
|
|
95
|
-
if (!context.isOpen)
|
|
110
|
+
if (!context.isOpen) {
|
|
96
111
|
return null;
|
|
97
|
-
|
|
112
|
+
}
|
|
113
|
+
return ((0, jsx_runtime_1.jsx)(typography_1.Typography, Object.assign({ ref: ref, variant: typographyVariant, className: classes, style: style, htmlAttributes: htmlAttributes }, passThroughProps, restProps, { children: children })));
|
|
98
114
|
};
|
|
99
|
-
const TooltipBody = (
|
|
115
|
+
const TooltipBody = (_a) => {
|
|
116
|
+
var { children, className, style, htmlAttributes, passThroughProps, ref } = _a, restProps = __rest(_a, ["children", "className", "style", "htmlAttributes", "passThroughProps", "ref"]);
|
|
100
117
|
const context = (0, use_tooltip_1.useTooltipContext)();
|
|
101
118
|
const classes = (0, classnames_1.default)('ndl-tooltip-body', className);
|
|
102
|
-
if (!context.isOpen)
|
|
119
|
+
if (!context.isOpen) {
|
|
103
120
|
return null;
|
|
104
|
-
|
|
121
|
+
}
|
|
122
|
+
return ((0, jsx_runtime_1.jsx)(typography_1.Typography, Object.assign({ ref: ref, variant: "body-medium", className: classes, style: style, htmlAttributes: htmlAttributes }, passThroughProps, restProps, { children: children })));
|
|
105
123
|
};
|
|
106
|
-
const Actions = (
|
|
124
|
+
const Actions = (_a) => {
|
|
125
|
+
var { children, className, style, htmlAttributes, ref } = _a, restProps = __rest(_a, ["children", "className", "style", "htmlAttributes", "ref"]);
|
|
107
126
|
const context = (0, use_tooltip_1.useTooltipContext)();
|
|
108
127
|
const mergedRefs = (0, react_1.useMergeRefs)([context.refs.setFloating, ref]);
|
|
109
|
-
if (!context.isOpen)
|
|
128
|
+
if (!context.isOpen) {
|
|
110
129
|
return null;
|
|
130
|
+
}
|
|
111
131
|
const classes = (0, classnames_1.default)('ndl-tooltip-actions', className);
|
|
112
|
-
return ((0, jsx_runtime_1.jsx)("div", Object.assign({ className: classes, ref: mergedRefs, style: style }, htmlAttributes, { children: children })));
|
|
132
|
+
return ((0, jsx_runtime_1.jsx)("div", Object.assign({ className: classes, ref: mergedRefs, style: style }, restProps, htmlAttributes, { children: children })));
|
|
113
133
|
};
|
|
114
134
|
const Tooltip = Object.assign(TooltipComponent, {
|
|
115
135
|
Actions: Actions,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["../../../src/tooltip/Tooltip.tsx"],"names":[],"mappings":";;;;;;;AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,8CAO4B;AAC5B,4DAAoC;AAEpC,iCAAqD;AAGrD,0DAAsD;AACtD,6DAA6D;AAC7D,oCAA0C;AAC1C,8CAA2C;AAC3C,+CAA8E;AA+B9E,MAAM,gBAAgB,GAAG,CAAC,EACxB,QAAQ,EACR,UAAU,GAAG,KAAK,EAClB,IAAI,EACJ,aAAa,EACb,SAAS,EACT,MAAM,EACN,YAAY,EACZ,UAAU,EAAE,cAAc,EAC1B,gBAAgB,EAAE,YAAY,EAC9B,UAAU,EACV,2BAA2B,EAC3B,iBAAiB,GACJ,EAAE,EAAE;IACjB,MAAM,cAAc,GAAG,IAAA,kCAAiB,GAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;IACvD,MAAM,UAAU,GAAG,CAAC,cAAc,CAAC;IAEnC,MAAM,OAAO,GAAG,IAAA,wBAAU,EAAC;QACzB,iBAAiB;QACjB,UAAU;QACV,aAAa;QACb,2HAA2H;QAC3H,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;QAC5C,UAAU,EAAE,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,UAAU;QACxC,YAAY;QACZ,SAAS;QACT,2BAA2B;QAC3B,QAAQ,EAAE,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,QAAQ;QAClC,IAAI;KACL,CAAC,CAAC;IAEH,OAAO,CACL,uBAAC,4BAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YACpC,QAAQ,GACe,CAC3B,CAAC;AACJ,CAAC,CAAC;AAEF,gBAAgB,CAAC,WAAW,GAAG,SAAS,CAAC;AASzC,MAAM,cAAc,GAAG,CAAC,EACtB,QAAQ,EACR,gBAAgB,GAAG,KAAK,EACxB,cAAc,EACd,SAAS,EACT,KAAK,EACL,GAAG,GACwC,EAAE,EAAE;IAC/C,MAAM,OAAO,GAAG,IAAA,+BAAiB,GAAE,CAAC;IAEpC,2BAA2B;IAC3B,8DAA8D;IAC9D,MAAM,aAAa,GAAI,QAAgB,CAAC,KAAK,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAA,oBAAY,EAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,YAAY;QACzB,GAAG;QACH,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,GAAG;KACnB,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,IAAA,oBAAU,EAC/B;QACE,YAAY,EAAE,CAAC,OAAO,CAAC,MAAM;QAC7B,UAAU,EAAE,OAAO,CAAC,MAAM;KAC3B,EACD,qBAAqB,EACrB,SAAS,CACV,CAAC;IAEF,4EAA4E;IAC5E,IAAI,gBAAgB,IAAI,IAAA,sBAAc,EAAC,QAAQ,CAAC,EAAE,CAAC;QACjD,MAAM,KAAK,+CACT,SAAS,EAAE,cAAc,IACtB,cAAc,GACd,aAAa,KAChB,GAAG,EAAE,UAAU,GAChB,CAAC;QACF,OAAO,IAAA,oBAAY,EAAC,QAAQ,EAAE,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,CACL,iDACE,SAAS,EAAE,cAAc,EACzB,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,UAAU,IACX,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,cAE5C,QAAQ,IACF,CACV,CAAC;AACJ,CAAC,CAAC;AAOF,MAAM,cAAc,GAAG,CAAC,EACtB,QAAQ,EACR,KAAK,EACL,cAAc,EACd,SAAS,EACT,GAAG,GACqC,EAAE,EAAE;IAC5C,MAAM,OAAO,GAAG,IAAA,+BAAiB,GAAE,CAAC;IACpC,MAAM,SAAS,GAAG,IAAA,oBAAY,EAAC,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;IAChE,MAAM,EAAE,cAAc,EAAE,GAAG,IAAA,sBAAc,GAAE,CAAC;IAC5C,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEjC,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,qBAAqB,EAAE,cAAc,EAAE,SAAS,EAAE;QAC3E,0BAA0B,EAAE,OAAO,CAAC,IAAI,KAAK,MAAM;QACnD,4BAA4B,EAAE,OAAO,CAAC,IAAI,KAAK,QAAQ;KACxD,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,CACL,uBAAC,kCAAe,IACd,UAAU,EAAE,OAAO,CAAC,UAAU,EAC9B,IAAI,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,uBAAC,sBAAc,cAAE,YAAY,GAAkB,YAEvE,8CACE,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,OAAO,EAClB,KAAK,kCACA,OAAO,CAAC,cAAc,GACtB,KAAK,KAEN,OAAO,CAAC,gBAAgB,CAAC,cAAc,CAAC,cAE5C,uBAAC,uBAAU,IAAC,OAAO,EAAC,aAAa,YAAE,QAAQ,GAAc,IACrD,GACU,CACnB,CAAC;IACJ,CAAC;IAED,OAAO,CACL,uBAAC,kCAAe,IACd,UAAU,EAAE,OAAO,CAAC,UAAU,EAC9B,IAAI,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,uBAAC,sBAAc,cAAE,YAAY,GAAkB,YAEvE,uBAAC,4BAAoB,IACnB,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,WAAW,EAAE,IAAI,EACjB,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,CAAC,CAAC,EAChB,eAAe,kBAEf,8CACE,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,OAAO,EAClB,KAAK,kCACA,OAAO,CAAC,cAAc,GACtB,KAAK,KAEN,OAAO,CAAC,gBAAgB,CAAC,cAAc,CAAC,cAE3C,QAAQ,IACL,GACe,GACP,CACnB,CAAC;AACJ,CAAC,CAAC;AASF,MAAM,aAAa,GAAG,CAAC,EACrB,QAAQ,EACR,gBAAgB,EAChB,SAAS,EACT,KAAK,EACL,cAAc,EACd,GAAG,GACqC,EAAE,EAAE;IAC5C,MAAM,OAAO,GAAG,IAAA,+BAAiB,GAAE,CAAC;IAEpC,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC;IAE5D,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEjC,OAAO,CACL,uBAAC,uBAAU,kBACT,GAAG,EAAE,GAAG,EACR,OAAO,EAAC,mBAAmB,EAC3B,SAAS,EAAE,OAAO,EAClB,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,cAAc,IAC1B,gBAAgB,cAEnB,QAAQ,IACE,CACd,CAAC;AACJ,CAAC,CAAC;AASF,MAAM,WAAW,GAAG,CAAC,EACnB,QAAQ,EACR,SAAS,EACT,KAAK,EACL,cAAc,EACd,gBAAgB,EAChB,GAAG,GACmC,EAAE,EAAE;IAC1C,MAAM,OAAO,GAAG,IAAA,+BAAiB,GAAE,CAAC;IAEpC,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;IAC1D,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEjC,OAAO,CACL,uBAAC,uBAAU,kBACT,GAAG,EAAE,GAAG,EACR,OAAO,EAAC,aAAa,EACrB,SAAS,EAAE,OAAO,EAClB,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,cAAc,IAC1B,gBAAgB,cAEnB,QAAQ,IACE,CACd,CAAC;AACJ,CAAC,CAAC;AAOF,MAAM,OAAO,GAAG,CAAC,EACf,QAAQ,EACR,SAAS,EACT,KAAK,EACL,cAAc,EACd,GAAG,GACqC,EAAE,EAAE;IAC5C,MAAM,OAAO,GAAG,IAAA,+BAAiB,GAAE,CAAC;IACpC,MAAM,UAAU,GAAG,IAAA,oBAAY,EAAC,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;IAEjE,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEjC,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;IAE7D,OAAO,CACL,8CAAK,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,IAAM,cAAc,cACvE,QAAQ,IACL,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE;IAC9C,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,cAAc;IACvB,MAAM,EAAE,aAAa;IACrB,OAAO,EAAE,cAAc;CACxB,CAAC,CAAC;AAEM,0BAAO","sourcesContent":["/**\n *\n * Copyright (c) \"Neo4j\"\n * Neo4j Sweden AB [http://neo4j.com]\n *\n * This file is part of Neo4j.\n *\n * Neo4j is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport {\n type AutoUpdateOptions,\n FloatingFocusManager,\n FloatingPortal,\n type Placement,\n type UseFloatingOptions,\n useMergeRefs,\n} from '@floating-ui/react';\nimport classNames from 'classnames';\nimport type React from 'react';\nimport { cloneElement, isValidElement } from 'react';\n\nimport { type CommonProps } from '../_common/types';\nimport { ConditionalWrap } from '../conditional-wrap';\nimport { useIsInsideDialog } from '../dialog/dialog-context';\nimport { useNeedleTheme } from '../theme';\nimport { Typography } from '../typography';\nimport { TooltipContext, useTooltip, useTooltipContext } from './use-tooltip';\n\nexport type TooltipProps = {\n /** Content displayed inside the tooltip. Wraps `Tooltip.Trigger`, `Tooltip.Content`, and optional parts */\n children: React.ReactNode;\n /** Whether the tooltip is disabled */\n isDisabled?: boolean;\n /** Whether the tooltip should be open on first render */\n isInitialOpen?: boolean;\n /** Placement of the tooltip content relative to the trigger */\n placement?: Placement;\n /** Controls the open state . If omitted, the tooltip manages its own state */\n isOpen?: boolean;\n /** Visual style of the tooltip content. `simple` renders plain text, `rich` renders a composable panel */\n type: 'simple' | 'rich';\n /** Whether the content is rendered in a portal. */\n isPortaled?: boolean;\n /** Callback fired when the open state changes, if omitted, the tooltip manages its own state using internal hooks */\n onOpenChange?: UseFloatingOptions['onOpenChange'];\n /** Positioning strategy of the tooltip. Defaults to `fixed` when inside a dialog, otherwise `absolute` */\n floatingStrategy?: 'absolute' | 'fixed';\n /** Hover open/close delays in milliseconds */\n hoverDelay?: {\n open: number;\n close: number;\n };\n /** Whether the tooltip should close when the reference element is clicked. Useful when the trigger moves after click. */\n shouldCloseOnReferenceClick?: boolean;\n autoUpdateOptions?: AutoUpdateOptions;\n};\n\nconst TooltipComponent = ({\n children,\n isDisabled = false,\n type,\n isInitialOpen,\n placement,\n isOpen,\n onOpenChange,\n isPortaled: isPortaledProp,\n floatingStrategy: strategyProp,\n hoverDelay,\n shouldCloseOnReferenceClick,\n autoUpdateOptions,\n}: TooltipProps) => {\n const isInsideDialog = useIsInsideDialog();\n const strategy = isInsideDialog ? 'fixed' : 'absolute';\n const isPortaled = !isInsideDialog;\n\n const tooltip = useTooltip({\n autoUpdateOptions,\n hoverDelay,\n isInitialOpen,\n // if isDisabled is true tooltip will not open otherwise either controlled or uncontrolled depending on if isOpen is passed\n isOpen: isDisabled === true ? false : isOpen,\n isPortaled: isPortaledProp ?? isPortaled,\n onOpenChange,\n placement,\n shouldCloseOnReferenceClick,\n strategy: strategyProp ?? strategy,\n type,\n });\n\n return (\n <TooltipContext.Provider value={tooltip}>\n {children}\n </TooltipContext.Provider>\n );\n};\n\nTooltipComponent.displayName = 'Tooltip';\n\ntype TooltipTriggerProps = {\n /** Content displayed inside the trigger element */\n children: React.ReactNode;\n /** Whether the trigger element can be any element without an extra button wrapper. The child element will be cloned with the necessary trigger props and merged refs */\n hasButtonWrapper?: boolean;\n};\n\nconst TooltipTrigger = ({\n children,\n hasButtonWrapper = false,\n htmlAttributes,\n className,\n style,\n ref,\n}: CommonProps<'button', TooltipTriggerProps>) => {\n const context = useTooltipContext();\n\n // Example from floating-ui\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const childrenProps = (children as any).props;\n const mergedRefs = useMergeRefs([\n context.refs.setReference,\n ref,\n childrenProps?.ref,\n ]);\n\n const triggerClasses = classNames(\n {\n 'ndl-closed': !context.isOpen,\n 'ndl-open': context.isOpen,\n },\n 'ndl-tooltip-trigger',\n className,\n );\n\n // `hasButtonWrapper=true` allows the user to pass any element as the anchor\n if (hasButtonWrapper && isValidElement(children)) {\n const props: Record<string, unknown> = {\n className: triggerClasses,\n ...htmlAttributes,\n ...childrenProps,\n ref: mergedRefs,\n };\n return cloneElement(children, context.getReferenceProps(props));\n }\n\n return (\n <button\n className={triggerClasses}\n style={style}\n ref={mergedRefs}\n {...context.getReferenceProps(htmlAttributes)}\n >\n {children}\n </button>\n );\n};\n\ntype TooltipContentProps = {\n /** Content displayed inside the tooltip */\n children: React.ReactNode;\n};\n\nconst TooltipContent = ({\n children,\n style,\n htmlAttributes,\n className,\n ref,\n}: CommonProps<'div', TooltipContentProps>) => {\n const context = useTooltipContext();\n const mergedRef = useMergeRefs([context.refs.setFloating, ref]);\n const { themeClassName } = useNeedleTheme();\n if (!context.isOpen) return null;\n\n const classes = classNames('ndl-tooltip-content', themeClassName, className, {\n 'ndl-tooltip-content-rich': context.type === 'rich',\n 'ndl-tooltip-content-simple': context.type === 'simple',\n });\n\n if (context.type === 'simple') {\n return (\n <ConditionalWrap\n shouldWrap={context.isPortaled}\n wrap={(wrapChildren) => <FloatingPortal>{wrapChildren}</FloatingPortal>}\n >\n <div\n ref={mergedRef}\n className={classes}\n style={{\n ...context.floatingStyles,\n ...style,\n }}\n {...context.getFloatingProps(htmlAttributes)}\n >\n <Typography variant=\"body-medium\">{children}</Typography>\n </div>\n </ConditionalWrap>\n );\n }\n\n return (\n <ConditionalWrap\n shouldWrap={context.isPortaled}\n wrap={(wrapChildren) => <FloatingPortal>{wrapChildren}</FloatingPortal>}\n >\n <FloatingFocusManager\n context={context.context}\n returnFocus={true}\n modal={false}\n initialFocus={-1}\n closeOnFocusOut\n >\n <div\n ref={mergedRef}\n className={classes}\n style={{\n ...context.floatingStyles,\n ...style,\n }}\n {...context.getFloatingProps(htmlAttributes)}\n >\n {children}\n </div>\n </FloatingFocusManager>\n </ConditionalWrap>\n );\n};\n\ntype TooltipHeaderProps = {\n /** Content displayed inside the header */\n children: React.ReactNode;\n /** Additional props to pass to the Typography component */\n passThroughProps?: Partial<React.ComponentPropsWithoutRef<typeof Typography>>;\n};\n\nconst TooltipHeader = ({\n children,\n passThroughProps,\n className,\n style,\n htmlAttributes,\n ref,\n}: CommonProps<'span', TooltipHeaderProps>) => {\n const context = useTooltipContext();\n\n const classes = classNames('ndl-tooltip-header', className);\n\n if (!context.isOpen) return null;\n\n return (\n <Typography\n ref={ref}\n variant=\"subheading-medium\"\n className={classes}\n style={style}\n htmlAttributes={htmlAttributes}\n {...passThroughProps}\n >\n {children}\n </Typography>\n );\n};\n\nexport type TooltipBodyProps = {\n /** Content displayed inside the body */\n children: React.ReactNode;\n /** Additional props to pass to the Typography component */\n passThroughProps?: Partial<React.ComponentPropsWithoutRef<typeof Typography>>;\n};\n\nconst TooltipBody = ({\n children,\n className,\n style,\n htmlAttributes,\n passThroughProps,\n ref,\n}: CommonProps<'span', TooltipBodyProps>) => {\n const context = useTooltipContext();\n\n const classes = classNames('ndl-tooltip-body', className);\n if (!context.isOpen) return null;\n\n return (\n <Typography\n ref={ref}\n variant=\"body-medium\"\n className={classes}\n style={style}\n htmlAttributes={htmlAttributes}\n {...passThroughProps}\n >\n {children}\n </Typography>\n );\n};\n\ntype ToolTipActionsProps = {\n /** Content displayed inside the actions container */\n children: React.ReactNode;\n};\n\nconst Actions = ({\n children,\n className,\n style,\n htmlAttributes,\n ref,\n}: CommonProps<'div', ToolTipActionsProps>) => {\n const context = useTooltipContext();\n const mergedRefs = useMergeRefs([context.refs.setFloating, ref]);\n\n if (!context.isOpen) return null;\n\n const classes = classNames('ndl-tooltip-actions', className);\n\n return (\n <div className={classes} ref={mergedRefs} style={style} {...htmlAttributes}>\n {children}\n </div>\n );\n};\n\nconst Tooltip = Object.assign(TooltipComponent, {\n Actions: Actions,\n Body: TooltipBody,\n Content: TooltipContent,\n Header: TooltipHeader,\n Trigger: TooltipTrigger,\n});\n\nexport { Tooltip };\n"]}
|
|
1
|
+
{"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["../../../src/tooltip/Tooltip.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,8CAO4B;AAC5B,4DAAoC;AAEpC,iCAAqD;AAGrD,0DAAsD;AACtD,6DAA6D;AAC7D,oCAA0C;AAC1C,8CAAoE;AACpE,+CAA8E;AA+B9E,MAAM,gBAAgB,GAAG,CAAC,EACxB,QAAQ,EACR,UAAU,GAAG,KAAK,EAClB,IAAI,EACJ,aAAa,EACb,SAAS,EACT,MAAM,EACN,YAAY,EACZ,UAAU,EAAE,cAAc,EAC1B,gBAAgB,EAAE,YAAY,EAC9B,UAAU,EACV,2BAA2B,EAC3B,iBAAiB,GACJ,EAAE,EAAE;IACjB,MAAM,cAAc,GAAG,IAAA,kCAAiB,GAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;IACvD,MAAM,UAAU,GAAG,CAAC,cAAc,CAAC;IAEnC,MAAM,OAAO,GAAG,IAAA,wBAAU,EAAC;QACzB,iBAAiB;QACjB,UAAU;QACV,aAAa;QACb,2HAA2H;QAC3H,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;QAC5C,UAAU,EAAE,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,UAAU;QACxC,YAAY;QACZ,SAAS;QACT,2BAA2B;QAC3B,QAAQ,EAAE,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,QAAQ;QAClC,IAAI;KACL,CAAC,CAAC;IAEH,OAAO,CACL,uBAAC,4BAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YACpC,QAAQ,GACe,CAC3B,CAAC;AACJ,CAAC,CAAC;AAEF,gBAAgB,CAAC,WAAW,GAAG,SAAS,CAAC;AASzC,MAAM,cAAc,GAAG,CAAC,EAQqB,EAAE,EAAE;QARzB,EACtB,QAAQ,EACR,gBAAgB,GAAG,KAAK,EACxB,cAAc,EACd,SAAS,EACT,KAAK,EACL,GAAG,OAEwC,EADxC,SAAS,cAPU,+EAQvB,CADa;IAEZ,MAAM,OAAO,GAAG,IAAA,+BAAiB,GAAE,CAAC;IAEpC,2BAA2B;IAC3B,8DAA8D;IAC9D,MAAM,aAAa,GAAI,QAAgB,CAAC,KAAK,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAA,oBAAY,EAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,YAAY;QACzB,GAAG;QACH,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,GAAG;KACnB,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,IAAA,oBAAU,EAC/B;QACE,YAAY,EAAE,CAAC,OAAO,CAAC,MAAM;QAC7B,UAAU,EAAE,OAAO,CAAC,MAAM;KAC3B,EACD,qBAAqB,EACrB,SAAS,CACV,CAAC;IAEF,4EAA4E;IAC5E,IAAI,gBAAgB,IAAI,IAAA,sBAAc,EAAC,QAAQ,CAAC,EAAE,CAAC;QACjD,MAAM,KAAK,+CACT,SAAS,EAAE,cAAc,IACtB,cAAc,GACd,aAAa,KAChB,GAAG,EAAE,UAAU,GAChB,CAAC;QACF,OAAO,IAAA,oBAAY,EAAC,QAAQ,EAAE,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,CACL,iDACE,SAAS,EAAE,cAAc,EACzB,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,UAAU,IACX,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,EACzC,SAAS,cAEZ,QAAQ,IACF,CACV,CAAC;AACJ,CAAC,CAAC;AAOF,MAAM,cAAc,GAAG,CAAC,EAOkB,EAAE,EAAE;QAPtB,EACtB,QAAQ,EACR,KAAK,EACL,cAAc,EACd,SAAS,EACT,GAAG,OAEqC,EADrC,SAAS,cANU,2DAOvB,CADa;IAEZ,MAAM,OAAO,GAAG,IAAA,+BAAiB,GAAE,CAAC;IACpC,MAAM,SAAS,GAAG,IAAA,oBAAY,EAAC,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;IAChE,MAAM,EAAE,cAAc,EAAE,GAAG,IAAA,sBAAc,GAAE,CAAC;IAC5C,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,qBAAqB,EAAE,cAAc,EAAE,SAAS,EAAE;QAC3E,0BAA0B,EAAE,OAAO,CAAC,IAAI,KAAK,MAAM;QACnD,4BAA4B,EAAE,OAAO,CAAC,IAAI,KAAK,QAAQ;KACxD,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,CACL,uBAAC,kCAAe,IACd,UAAU,EAAE,OAAO,CAAC,UAAU,EAC9B,IAAI,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,uBAAC,sBAAc,cAAE,YAAY,GAAkB,YAEvE,8CACE,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,OAAO,EAClB,KAAK,kCACA,OAAO,CAAC,cAAc,GACtB,KAAK,KAEN,SAAS,EACT,OAAO,CAAC,gBAAgB,CAAC,cAAc,CAAC,cAE5C,uBAAC,uBAAU,IAAC,OAAO,EAAC,aAAa,YAAE,QAAQ,GAAc,IACrD,GACU,CACnB,CAAC;IACJ,CAAC;IAED,OAAO,CACL,uBAAC,kCAAe,IACd,UAAU,EAAE,OAAO,CAAC,UAAU,EAC9B,IAAI,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,uBAAC,sBAAc,cAAE,YAAY,GAAkB,YAEvE,uBAAC,4BAAoB,IACnB,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,WAAW,EAAE,IAAI,EACjB,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,CAAC,CAAC,EAChB,eAAe,kBAEf,8CACE,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,OAAO,EAClB,KAAK,kCACA,OAAO,CAAC,cAAc,GACtB,KAAK,KAEN,SAAS,EACT,OAAO,CAAC,gBAAgB,CAAC,cAAc,CAAC,cAE3C,QAAQ,IACL,GACe,GACP,CACnB,CAAC;AACJ,CAAC,CAAC;AAUF,MAAM,aAAa,GAAG,CAAC,EASmB,EAAE,EAAE;QATvB,EACrB,QAAQ,EACR,gBAAgB,EAChB,iBAAiB,GAAG,mBAAmB,EACvC,SAAS,EACT,KAAK,EACL,cAAc,EACd,GAAG,OAEqC,EADrC,SAAS,cARS,oGAStB,CADa;IAEZ,MAAM,OAAO,GAAG,IAAA,+BAAiB,GAAE,CAAC;IAEpC,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC;IAE5D,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,uBAAC,uBAAU,kBACT,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,OAAO,EAClB,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,cAAc,IAC1B,gBAAgB,EAChB,SAAS,cAEZ,QAAQ,IACE,CACd,CAAC;AACJ,CAAC,CAAC;AAUF,MAAM,WAAW,GAAG,CAAC,EAQmB,EAAE,EAAE;QARvB,EACnB,QAAQ,EACR,SAAS,EACT,KAAK,EACL,cAAc,EACd,gBAAgB,EAChB,GAAG,OAEmC,EADnC,SAAS,cAPO,+EAQpB,CADa;IAEZ,MAAM,OAAO,GAAG,IAAA,+BAAiB,GAAE,CAAC;IAEpC,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;IAC1D,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,uBAAC,uBAAU,kBACT,GAAG,EAAE,GAAG,EACR,OAAO,EAAC,aAAa,EACrB,SAAS,EAAE,OAAO,EAClB,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,cAAc,IAC1B,gBAAgB,EAChB,SAAS,cAEZ,QAAQ,IACE,CACd,CAAC;AACJ,CAAC,CAAC;AAOF,MAAM,OAAO,GAAG,CAAC,EAOyB,EAAE,EAAE;QAP7B,EACf,QAAQ,EACR,SAAS,EACT,KAAK,EACL,cAAc,EACd,GAAG,OAEqC,EADrC,SAAS,cANG,2DAOhB,CADa;IAEZ,MAAM,OAAO,GAAG,IAAA,+BAAiB,GAAE,CAAC;IACpC,MAAM,UAAU,GAAG,IAAA,oBAAY,EAAC,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;IAEjE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;IAE7D,OAAO,CACL,8CACE,SAAS,EAAE,OAAO,EAClB,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,KAAK,IACR,SAAS,EACT,cAAc,cAEjB,QAAQ,IACL,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE;IAC9C,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,cAAc;IACvB,MAAM,EAAE,aAAa;IACrB,OAAO,EAAE,cAAc;CACxB,CAAC,CAAC;AAEM,0BAAO","sourcesContent":["/**\n *\n * Copyright (c) \"Neo4j\"\n * Neo4j Sweden AB [http://neo4j.com]\n *\n * This file is part of Neo4j.\n *\n * Neo4j is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport {\n type AutoUpdateOptions,\n FloatingFocusManager,\n FloatingPortal,\n type Placement,\n type UseFloatingOptions,\n useMergeRefs,\n} from '@floating-ui/react';\nimport classNames from 'classnames';\nimport type React from 'react';\nimport { cloneElement, isValidElement } from 'react';\n\nimport { type CommonProps } from '../_common/types';\nimport { ConditionalWrap } from '../conditional-wrap';\nimport { useIsInsideDialog } from '../dialog/dialog-context';\nimport { useNeedleTheme } from '../theme';\nimport { Typography, type TypographyVariants } from '../typography';\nimport { TooltipContext, useTooltip, useTooltipContext } from './use-tooltip';\n\nexport type TooltipProps = {\n /** Content displayed inside the tooltip. Wraps `Tooltip.Trigger`, `Tooltip.Content`, and optional parts */\n children: React.ReactNode;\n /** Whether the tooltip is disabled */\n isDisabled?: boolean;\n /** Whether the tooltip should be open on first render */\n isInitialOpen?: boolean;\n /** Placement of the tooltip content relative to the trigger */\n placement?: Placement;\n /** Controls the open state . If omitted, the tooltip manages its own state */\n isOpen?: boolean;\n /** Visual style of the tooltip content. `simple` renders plain text, `rich` renders a composable panel */\n type: 'simple' | 'rich';\n /** Whether the content is rendered in a portal. */\n isPortaled?: boolean;\n /** Callback fired when the open state changes, if omitted, the tooltip manages its own state using internal hooks */\n onOpenChange?: UseFloatingOptions['onOpenChange'];\n /** Positioning strategy of the tooltip. Defaults to `fixed` when inside a dialog, otherwise `absolute` */\n floatingStrategy?: 'absolute' | 'fixed';\n /** Hover open/close delays in milliseconds */\n hoverDelay?: {\n open: number;\n close: number;\n };\n /** Whether the tooltip should close when the reference element is clicked. Useful when the trigger moves after click. */\n shouldCloseOnReferenceClick?: boolean;\n autoUpdateOptions?: AutoUpdateOptions;\n};\n\nconst TooltipComponent = ({\n children,\n isDisabled = false,\n type,\n isInitialOpen,\n placement,\n isOpen,\n onOpenChange,\n isPortaled: isPortaledProp,\n floatingStrategy: strategyProp,\n hoverDelay,\n shouldCloseOnReferenceClick,\n autoUpdateOptions,\n}: TooltipProps) => {\n const isInsideDialog = useIsInsideDialog();\n const strategy = isInsideDialog ? 'fixed' : 'absolute';\n const isPortaled = !isInsideDialog;\n\n const tooltip = useTooltip({\n autoUpdateOptions,\n hoverDelay,\n isInitialOpen,\n // if isDisabled is true tooltip will not open otherwise either controlled or uncontrolled depending on if isOpen is passed\n isOpen: isDisabled === true ? false : isOpen,\n isPortaled: isPortaledProp ?? isPortaled,\n onOpenChange,\n placement,\n shouldCloseOnReferenceClick,\n strategy: strategyProp ?? strategy,\n type,\n });\n\n return (\n <TooltipContext.Provider value={tooltip}>\n {children}\n </TooltipContext.Provider>\n );\n};\n\nTooltipComponent.displayName = 'Tooltip';\n\ntype TooltipTriggerProps = {\n /** Content displayed inside the trigger element */\n children: React.ReactNode;\n /** Whether the trigger element can be any element without an extra button wrapper. The child element will be cloned with the necessary trigger props and merged refs */\n hasButtonWrapper?: boolean;\n};\n\nconst TooltipTrigger = ({\n children,\n hasButtonWrapper = false,\n htmlAttributes,\n className,\n style,\n ref,\n ...restProps\n}: CommonProps<'button', TooltipTriggerProps>) => {\n const context = useTooltipContext();\n\n // Example from floating-ui\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const childrenProps = (children as any).props;\n const mergedRefs = useMergeRefs([\n context.refs.setReference,\n ref,\n childrenProps?.ref,\n ]);\n\n const triggerClasses = classNames(\n {\n 'ndl-closed': !context.isOpen,\n 'ndl-open': context.isOpen,\n },\n 'ndl-tooltip-trigger',\n className,\n );\n\n // `hasButtonWrapper=true` allows the user to pass any element as the anchor\n if (hasButtonWrapper && isValidElement(children)) {\n const props: Record<string, unknown> = {\n className: triggerClasses,\n ...htmlAttributes,\n ...childrenProps,\n ref: mergedRefs,\n };\n return cloneElement(children, context.getReferenceProps(props));\n }\n\n return (\n <button\n className={triggerClasses}\n style={style}\n ref={mergedRefs}\n {...context.getReferenceProps(htmlAttributes)}\n {...restProps}\n >\n {children}\n </button>\n );\n};\n\ntype TooltipContentProps = {\n /** Content displayed inside the tooltip */\n children: React.ReactNode;\n};\n\nconst TooltipContent = ({\n children,\n style,\n htmlAttributes,\n className,\n ref,\n ...restProps\n}: CommonProps<'div', TooltipContentProps>) => {\n const context = useTooltipContext();\n const mergedRef = useMergeRefs([context.refs.setFloating, ref]);\n const { themeClassName } = useNeedleTheme();\n if (!context.isOpen) {\n return null;\n }\n\n const classes = classNames('ndl-tooltip-content', themeClassName, className, {\n 'ndl-tooltip-content-rich': context.type === 'rich',\n 'ndl-tooltip-content-simple': context.type === 'simple',\n });\n\n if (context.type === 'simple') {\n return (\n <ConditionalWrap\n shouldWrap={context.isPortaled}\n wrap={(wrapChildren) => <FloatingPortal>{wrapChildren}</FloatingPortal>}\n >\n <div\n ref={mergedRef}\n className={classes}\n style={{\n ...context.floatingStyles,\n ...style,\n }}\n {...restProps}\n {...context.getFloatingProps(htmlAttributes)}\n >\n <Typography variant=\"body-medium\">{children}</Typography>\n </div>\n </ConditionalWrap>\n );\n }\n\n return (\n <ConditionalWrap\n shouldWrap={context.isPortaled}\n wrap={(wrapChildren) => <FloatingPortal>{wrapChildren}</FloatingPortal>}\n >\n <FloatingFocusManager\n context={context.context}\n returnFocus={true}\n modal={false}\n initialFocus={-1}\n closeOnFocusOut\n >\n <div\n ref={mergedRef}\n className={classes}\n style={{\n ...context.floatingStyles,\n ...style,\n }}\n {...restProps}\n {...context.getFloatingProps(htmlAttributes)}\n >\n {children}\n </div>\n </FloatingFocusManager>\n </ConditionalWrap>\n );\n};\n\ntype TooltipHeaderProps = {\n /** Content displayed inside the header */\n children: React.ReactNode;\n /** @deprecated Use `typographyVariant` instead */\n passThroughProps?: Partial<React.ComponentPropsWithoutRef<typeof Typography>>;\n typographyVariant?: TypographyVariants;\n};\n\nconst TooltipHeader = ({\n children,\n passThroughProps,\n typographyVariant = 'subheading-medium',\n className,\n style,\n htmlAttributes,\n ref,\n ...restProps\n}: CommonProps<'span', TooltipHeaderProps>) => {\n const context = useTooltipContext();\n\n const classes = classNames('ndl-tooltip-header', className);\n\n if (!context.isOpen) {\n return null;\n }\n\n return (\n <Typography\n ref={ref}\n variant={typographyVariant}\n className={classes}\n style={style}\n htmlAttributes={htmlAttributes}\n {...passThroughProps}\n {...restProps}\n >\n {children}\n </Typography>\n );\n};\n\nexport type TooltipBodyProps = {\n /** Content displayed inside the body */\n children: React.ReactNode;\n /** Additional props to pass to the Typography component */\n // TODO v5: Deprecate passThroughProps and use restProps instead\n passThroughProps?: Partial<React.ComponentPropsWithoutRef<typeof Typography>>;\n};\n\nconst TooltipBody = ({\n children,\n className,\n style,\n htmlAttributes,\n passThroughProps,\n ref,\n ...restProps\n}: CommonProps<'span', TooltipBodyProps>) => {\n const context = useTooltipContext();\n\n const classes = classNames('ndl-tooltip-body', className);\n if (!context.isOpen) {\n return null;\n }\n\n return (\n <Typography\n ref={ref}\n variant=\"body-medium\"\n className={classes}\n style={style}\n htmlAttributes={htmlAttributes}\n {...passThroughProps}\n {...restProps}\n >\n {children}\n </Typography>\n );\n};\n\ntype ToolTipActionsProps = {\n /** Content displayed inside the actions container */\n children: React.ReactNode;\n};\n\nconst Actions = ({\n children,\n className,\n style,\n htmlAttributes,\n ref,\n ...restProps\n}: CommonProps<'div', ToolTipActionsProps>) => {\n const context = useTooltipContext();\n const mergedRefs = useMergeRefs([context.refs.setFloating, ref]);\n\n if (!context.isOpen) {\n return null;\n }\n\n const classes = classNames('ndl-tooltip-actions', className);\n\n return (\n <div\n className={classes}\n ref={mergedRefs}\n style={style}\n {...restProps}\n {...htmlAttributes}\n >\n {children}\n </div>\n );\n};\n\nconst Tooltip = Object.assign(TooltipComponent, {\n Actions: Actions,\n Body: TooltipBody,\n Content: TooltipContent,\n Header: TooltipHeader,\n Trigger: TooltipTrigger,\n});\n\nexport { Tooltip };\n"]}
|
|
@@ -158,12 +158,14 @@ const onInnerDivKeyDown = (event, shouldDisableInteraction, wrapperRef) => {
|
|
|
158
158
|
function TreeItemWrapperInner(_a) {
|
|
159
159
|
var { depth, shouldDisableInteraction, shouldDisableSorting, isGhost, isIndicator, onCollapse, item, setNodeRef, setActivatorNodeRef, dragHandleProps, style, className, trails, children, indentationWidth, tabIndex, onFocus, ref } = _a,
|
|
160
160
|
// Need to destruct to avoid passing it to the component
|
|
161
|
+
// oxlint-disable-next-line no-unused-vars
|
|
161
162
|
restProps = __rest(_a, ["depth", "shouldDisableInteraction", "shouldDisableSorting", "isGhost", "isIndicator", "onCollapse", "item", "setNodeRef", "setActivatorNodeRef", "dragHandleProps", "style", "className", "trails", "children", "indentationWidth", "tabIndex", "onFocus", "ref"]);
|
|
162
163
|
const wrapperRef = (0, react_1.useRef)(null);
|
|
163
164
|
return ((0, jsx_runtime_1.jsx)("li", { ref: (el) => {
|
|
164
165
|
wrapperRef.current = el;
|
|
165
|
-
if (el === null)
|
|
166
|
+
if (el === null) {
|
|
166
167
|
return;
|
|
168
|
+
}
|
|
167
169
|
setNodeRef(el);
|
|
168
170
|
}, className: (0, classnames_1.default)({
|
|
169
171
|
className,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeItemWrapper.js","sourceRoot":"","sources":["../../../src/tree-view/TreeItemWrapper.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n *\n * Copyright (c) \"Neo4j\"\n * Neo4j Sweden AB [http://neo4j.com]\n *\n * This file is part of Neo4j.\n *\n * Neo4j is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport classNames from 'classnames';\nimport type React from 'react';\nimport { useRef } from 'react';\n\nimport { findFocusableChildren, findFocusableSibling } from '../_common/utils';\nimport { DragIcon } from '../icons';\nimport {\n focusCellInNextRow,\n focusCellInPreviousRow,\n focusNextRow,\n focusPreviousRow,\n} from './tree-view-keyboard-helpers';\nimport { type TreeItem, type TreeItemComponentProps } from './tree-view-types';\nimport { Trail } from './TreeViewTrail';\n\n/**\n * Handles keydown events for when the item itself is focused (wrapperRef.current)\n * Moves the focus between the item and its children as well as toggles collapsing of the item\n * @param event\n * @param shouldDisableInteraction\n * @param wrapperRef\n * @param onCollapse\n * @param item\n * @returns\n */\n\nconst onWrapperKeyDown = (\n event: React.KeyboardEvent,\n shouldDisableInteraction: boolean,\n wrapperRef: React.RefObject<HTMLElement | null>,\n onCollapse: (() => void) | undefined,\n item: TreeItem<Record<string, unknown>>,\n) => {\n if (shouldDisableInteraction || wrapperRef.current === null) {\n return;\n }\n\n if (event.key === 'Enter' && onCollapse) {\n onCollapse();\n } else if (event.key === 'ArrowRight') {\n event.preventDefault();\n if (item.canHaveSubItems && item.isCollapsed && onCollapse) {\n onCollapse();\n } else {\n const focusable = findFocusableChildren(wrapperRef.current);\n const [firstElement] = focusable;\n if (firstElement instanceof HTMLElement) {\n firstElement.focus();\n }\n }\n\n event.preventDefault();\n } else if (event.key === 'ArrowLeft') {\n event.preventDefault();\n if (item.canHaveSubItems && !item.isCollapsed && onCollapse) {\n onCollapse();\n } else {\n focusPreviousRow(wrapperRef.current);\n }\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n focusNextRow(wrapperRef.current);\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n focusPreviousRow(wrapperRef.current);\n }\n};\n\n/**\n * Handles keydown events for when one of the items children is focused\n * Moves the focus between the children of the item and up to the parent if needed.\n * Stops the event from propagating to the parent since it has it own keydown handler\n * The parent is the wrapperRef.current and uses onWrapperKeyDown\n * @param event\n * @param shouldDisableInteraction\n * @param wrapperRef\n */\nconst onInnerDivKeyDown = (\n event: React.KeyboardEvent,\n shouldDisableInteraction: boolean,\n wrapperRef: React.RefObject<HTMLElement | null>,\n) => {\n if (shouldDisableInteraction) {\n return;\n }\n event.stopPropagation();\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n const nextElement = findFocusableSibling(wrapperRef, 'next');\n if (nextElement) {\n nextElement.focus();\n }\n } else if (event.key === 'ArrowLeft') {\n event.preventDefault();\n const previousElement = findFocusableSibling(wrapperRef, 'prev');\n if (previousElement) {\n previousElement.focus();\n } else {\n wrapperRef.current?.focus();\n }\n } else if (event.key === 'ArrowDown' && wrapperRef.current !== null) {\n event.preventDefault();\n focusCellInNextRow(wrapperRef.current);\n } else if (event.key === 'ArrowUp' && wrapperRef.current !== null) {\n event.preventDefault();\n focusCellInPreviousRow(wrapperRef.current);\n } else if (event.shiftKey && event.key === 'Tab') {\n const previousElement = findFocusableSibling(wrapperRef, 'prev');\n if (previousElement) {\n event.preventDefault();\n previousElement.focus();\n }\n } else if (event.key === 'Tab') {\n if (event.shiftKey) {\n return;\n }\n\n const nextElement = findFocusableSibling(wrapperRef, 'next');\n if (nextElement) {\n nextElement.focus();\n event.preventDefault();\n }\n }\n};\n\n/**\n * Used as a helper function to wrap the TreeItem component\n * This adds the drag handle and trail to the start of a tree item.\n * Useful if you want to add additional functionality to the tree item but still keep the drag handle and trail\n * Is also used internally to create the TreeViewTextItem component\n */\nfunction TreeItemWrapperInner<T extends Record<string, unknown>>({\n depth,\n shouldDisableInteraction,\n shouldDisableSorting,\n isGhost,\n isIndicator,\n onCollapse,\n item,\n setNodeRef,\n setActivatorNodeRef,\n dragHandleProps,\n style,\n className,\n trails,\n children,\n indentationWidth,\n tabIndex,\n onFocus,\n ref,\n // Need to destruct to avoid passing it to the component\n\n ...restProps\n}: React.PropsWithChildren<TreeItemComponentProps<T>>) {\n const wrapperRef = useRef<HTMLElement | null>(null);\n\n return (\n <li\n ref={(el) => {\n wrapperRef.current = el;\n\n if (el === null) return;\n setNodeRef(el);\n }}\n className={classNames({\n className,\n 'ndl-tree-view-list-item': true,\n indicator: isIndicator,\n 'ndl-tree-view-list-item-placeholder': isGhost,\n 'ndl-tree-view-list-item-disable-interaction': shouldDisableInteraction,\n })}\n style={{\n ...style,\n paddingLeft: isIndicator ? `${depth * indentationWidth}px` : 0,\n }}\n role=\"treeitem\"\n onFocus={onFocus}\n aria-selected={item.isSelected && !item.isSkeletonLoading}\n aria-expanded={item.canHaveSubItems ? !item.isCollapsed : undefined}\n onKeyDown={(event) =>\n onWrapperKeyDown(\n event,\n shouldDisableInteraction ?? false,\n wrapperRef,\n onCollapse,\n item,\n )\n }\n >\n <div\n role=\"presentation\"\n className=\"ndl-tree-view-list-item-content\"\n ref={ref}\n onKeyDown={(event) =>\n onInnerDivKeyDown(\n event,\n shouldDisableInteraction ?? false,\n wrapperRef,\n )\n }\n >\n {!shouldDisableSorting && (\n <button\n className=\"ndl-tree-view-drag-handle\"\n ref={setActivatorNodeRef}\n aria-label=\"Pick up\"\n {...dragHandleProps}\n tabIndex={tabIndex}\n >\n <DragIcon />\n </button>\n )}\n {trails.map((trail, index) => {\n return <Trail key={index} variant={trail} />;\n })}\n\n {children}\n </div>\n </li>\n );\n}\n\nexport const TreeItemWrapper = TreeItemWrapperInner;\n"]}
|
|
1
|
+
{"version":3,"file":"TreeItemWrapper.js","sourceRoot":"","sources":["../../../src/tree-view/TreeItemWrapper.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n *\n * Copyright (c) \"Neo4j\"\n * Neo4j Sweden AB [http://neo4j.com]\n *\n * This file is part of Neo4j.\n *\n * Neo4j is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport classNames from 'classnames';\nimport type React from 'react';\nimport { useRef } from 'react';\n\nimport { findFocusableChildren, findFocusableSibling } from '../_common/utils';\nimport { DragIcon } from '../icons';\nimport {\n focusCellInNextRow,\n focusCellInPreviousRow,\n focusNextRow,\n focusPreviousRow,\n} from './tree-view-keyboard-helpers';\nimport { type TreeItem, type TreeItemComponentProps } from './tree-view-types';\nimport { Trail } from './TreeViewTrail';\n\n/**\n * Handles keydown events for when the item itself is focused (wrapperRef.current)\n * Moves the focus between the item and its children as well as toggles collapsing of the item\n * @param event\n * @param shouldDisableInteraction\n * @param wrapperRef\n * @param onCollapse\n * @param item\n * @returns\n */\n\nconst onWrapperKeyDown = (\n event: React.KeyboardEvent,\n shouldDisableInteraction: boolean,\n wrapperRef: React.RefObject<HTMLElement | null>,\n onCollapse: (() => void) | undefined,\n item: TreeItem<Record<string, unknown>>,\n) => {\n if (shouldDisableInteraction || wrapperRef.current === null) {\n return;\n }\n\n if (event.key === 'Enter' && onCollapse) {\n onCollapse();\n } else if (event.key === 'ArrowRight') {\n event.preventDefault();\n if (item.canHaveSubItems && item.isCollapsed && onCollapse) {\n onCollapse();\n } else {\n const focusable = findFocusableChildren(wrapperRef.current);\n const [firstElement] = focusable;\n if (firstElement instanceof HTMLElement) {\n firstElement.focus();\n }\n }\n\n event.preventDefault();\n } else if (event.key === 'ArrowLeft') {\n event.preventDefault();\n if (item.canHaveSubItems && !item.isCollapsed && onCollapse) {\n onCollapse();\n } else {\n focusPreviousRow(wrapperRef.current);\n }\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n focusNextRow(wrapperRef.current);\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n focusPreviousRow(wrapperRef.current);\n }\n};\n\n/**\n * Handles keydown events for when one of the items children is focused\n * Moves the focus between the children of the item and up to the parent if needed.\n * Stops the event from propagating to the parent since it has it own keydown handler\n * The parent is the wrapperRef.current and uses onWrapperKeyDown\n * @param event\n * @param shouldDisableInteraction\n * @param wrapperRef\n */\nconst onInnerDivKeyDown = (\n event: React.KeyboardEvent,\n shouldDisableInteraction: boolean,\n wrapperRef: React.RefObject<HTMLElement | null>,\n) => {\n if (shouldDisableInteraction) {\n return;\n }\n event.stopPropagation();\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n const nextElement = findFocusableSibling(wrapperRef, 'next');\n if (nextElement) {\n nextElement.focus();\n }\n } else if (event.key === 'ArrowLeft') {\n event.preventDefault();\n const previousElement = findFocusableSibling(wrapperRef, 'prev');\n if (previousElement) {\n previousElement.focus();\n } else {\n wrapperRef.current?.focus();\n }\n } else if (event.key === 'ArrowDown' && wrapperRef.current !== null) {\n event.preventDefault();\n focusCellInNextRow(wrapperRef.current);\n } else if (event.key === 'ArrowUp' && wrapperRef.current !== null) {\n event.preventDefault();\n focusCellInPreviousRow(wrapperRef.current);\n } else if (event.shiftKey && event.key === 'Tab') {\n const previousElement = findFocusableSibling(wrapperRef, 'prev');\n if (previousElement) {\n event.preventDefault();\n previousElement.focus();\n }\n } else if (event.key === 'Tab') {\n if (event.shiftKey) {\n return;\n }\n\n const nextElement = findFocusableSibling(wrapperRef, 'next');\n if (nextElement) {\n nextElement.focus();\n event.preventDefault();\n }\n }\n};\n\n/**\n * Used as a helper function to wrap the TreeItem component\n * This adds the drag handle and trail to the start of a tree item.\n * Useful if you want to add additional functionality to the tree item but still keep the drag handle and trail\n * Is also used internally to create the TreeViewTextItem component\n */\nfunction TreeItemWrapperInner<T extends Record<string, unknown>>({\n depth,\n shouldDisableInteraction,\n shouldDisableSorting,\n isGhost,\n isIndicator,\n onCollapse,\n item,\n setNodeRef,\n setActivatorNodeRef,\n dragHandleProps,\n style,\n className,\n trails,\n children,\n indentationWidth,\n tabIndex,\n onFocus,\n ref,\n // Need to destruct to avoid passing it to the component\n // oxlint-disable-next-line no-unused-vars\n ...restProps\n}: React.PropsWithChildren<TreeItemComponentProps<T>>) {\n const wrapperRef = useRef<HTMLElement | null>(null);\n\n return (\n <li\n ref={(el) => {\n wrapperRef.current = el;\n\n if (el === null) {\n return;\n }\n setNodeRef(el);\n }}\n className={classNames({\n className,\n 'ndl-tree-view-list-item': true,\n indicator: isIndicator,\n 'ndl-tree-view-list-item-placeholder': isGhost,\n 'ndl-tree-view-list-item-disable-interaction': shouldDisableInteraction,\n })}\n style={{\n ...style,\n paddingLeft: isIndicator ? `${depth * indentationWidth}px` : 0,\n }}\n role=\"treeitem\"\n onFocus={onFocus}\n aria-selected={item.isSelected && !item.isSkeletonLoading}\n aria-expanded={item.canHaveSubItems ? !item.isCollapsed : undefined}\n onKeyDown={(event) =>\n onWrapperKeyDown(\n event,\n shouldDisableInteraction ?? false,\n wrapperRef,\n onCollapse,\n item,\n )\n }\n >\n <div\n role=\"presentation\"\n className=\"ndl-tree-view-list-item-content\"\n ref={ref}\n onKeyDown={(event) =>\n onInnerDivKeyDown(\n event,\n shouldDisableInteraction ?? false,\n wrapperRef,\n )\n }\n >\n {!shouldDisableSorting && (\n <button\n className=\"ndl-tree-view-drag-handle\"\n ref={setActivatorNodeRef}\n aria-label=\"Pick up\"\n {...dragHandleProps}\n tabIndex={tabIndex}\n >\n <DragIcon />\n </button>\n )}\n {trails.map((trail, index) => {\n return <Trail key={index} variant={trail} />;\n })}\n\n {children}\n </div>\n </li>\n );\n}\n\nexport const TreeItemWrapper = TreeItemWrapperInner;\n"]}
|
|
@@ -160,8 +160,9 @@ const TreeViewComponent = function TreeView({ items, TreeItemComponent, onItemsC
|
|
|
160
160
|
}, [flattenItems, onItemsChanged, projected]);
|
|
161
161
|
function handleToggleCollapse(id) {
|
|
162
162
|
const item = flattenItems.find((item) => item.id === id);
|
|
163
|
-
if (!item || item.canHaveSubItems !== true)
|
|
163
|
+
if (!item || item.canHaveSubItems !== true) {
|
|
164
164
|
return;
|
|
165
|
+
}
|
|
165
166
|
onItemsChanged((0, tree_view_utils_1.buildTree)(flattenItems.map((item) => {
|
|
166
167
|
if (item.id === id && item.canHaveSubItems === true) {
|
|
167
168
|
return Object.assign(Object.assign({}, item), { isCollapsed: !item.isCollapsed });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeView.js","sourceRoot":"","sources":["../../../src/tree-view/TreeView.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n *\n * Copyright (c) \"Neo4j\"\n * Neo4j Sweden AB [http://neo4j.com]\n *\n * This file is part of Neo4j.\n *\n * Neo4j is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport {\n type Announcements,\n closestCenter,\n defaultDropAnimation,\n DndContext,\n type DragEndEvent,\n type DragMoveEvent,\n type DragOverEvent,\n DragOverlay,\n type DragStartEvent,\n type DropAnimation,\n KeyboardSensor,\n MeasuringStrategy,\n PointerSensor,\n type UniqueIdentifier,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport {\n arrayMove,\n SortableContext,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport type React from 'react';\nimport { useCallback, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { type HtmlAttributes } from '../_common/types';\nimport { sortableTreeKeyboardCoordinates } from './tree-view-keyboard-coordinates';\nimport {\n type FlattenedTreeItem,\n type ItemChangedReason,\n type TreeItem,\n type TreeItemComponent,\n} from './tree-view-types';\nimport {\n buildTree,\n flattenTree,\n getProjection,\n removeChildrenOf,\n type SensorContext,\n transformToString,\n} from './tree-view-utils';\nimport { TreeItemWrapper } from './TreeItemWrapper';\nimport { SortableTreeViewItem } from './TreeViewItem';\nimport { TreeViewTextItem } from './TreeViewTextItem';\n\nconst indentationWidth = 20;\nconst ACTIVE_PLACEHOLDER_ID = 'ndl-active-tree-item';\n\nconst dropAnimationConfig: DropAnimation = {\n keyframes({ transform }) {\n return [\n {\n opacity: 1,\n transform: transformToString(transform.initial),\n },\n {\n opacity: 0,\n transform: transformToString({\n ...transform.final,\n y: transform.final.y + 5,\n x: transform.final.x + 5,\n }),\n },\n ];\n },\n easing: 'ease-out',\n sideEffects({ active }) {\n active.node.animate([{ opacity: 0 }, { opacity: 1 }], {\n duration: defaultDropAnimation.duration,\n easing: defaultDropAnimation.easing,\n });\n },\n};\n\nexport interface TreeViewProps<\n T extends Record<string, unknown>,\n E extends HTMLElement,\n> extends React.HTMLAttributes<HTMLOListElement> {\n /** The items to be displayed in the tree view */\n items: TreeItem<T>[];\n /** A function that is called when the items in the tree view change */\n onItemsChanged: (\n newItems: TreeItem<T>[],\n itemChangedReason: ItemChangedReason<T>,\n ) => void;\n /** The component to use for the tree items, if not provided the default component will be used */\n TreeItemComponent?: TreeItemComponent<T, E>;\n /** HTML attributes */\n htmlAttributes?: HtmlAttributes<'ol'>;\n}\n\nconst TreeViewComponent = function TreeView<\n T extends Record<string, unknown>,\n E extends HTMLElement,\n>({\n items,\n TreeItemComponent,\n onItemsChanged,\n htmlAttributes,\n}: TreeViewProps<T, E>) {\n const flattenItems = useMemo(() => flattenTree(items), [items]);\n const [activeId, setActiveId] = useState<UniqueIdentifier | null>(null);\n const [overId, setOverId] = useState<UniqueIdentifier | null>(null);\n const [focusedRowId, setFocusedRowId] = useState<UniqueIdentifier | null>(\n null,\n );\n\n const [currentPosition, setCurrentPosition] = useState<{\n parentId: UniqueIdentifier | null;\n overId: UniqueIdentifier;\n } | null>(null);\n const [offsetLeft, setOffsetLeft] = useState(0);\n\n /* ------------------------------ Setup of Data ------------------------------ */\n\n const flattenedAndRemovedCollapsedItems = useMemo(() => {\n const collapsedItemsIds = flattenItems\n .filter((item) => item.canHaveSubItems && item.isCollapsed)\n .map((item) => item.id);\n\n return removeChildrenOf(\n [...flattenItems],\n activeId !== null ? [activeId, ...collapsedItemsIds] : collapsedItemsIds,\n );\n }, [activeId, flattenItems]);\n\n const activeItem = useMemo(\n () => (activeId ? flattenItems.find(({ id }) => id === activeId) : null),\n [activeId, flattenItems],\n );\n\n const flattenedAndRemovedCollapsedItemsWithActive = useMemo(() => {\n const collapsedItems = flattenItems.reduce<UniqueIdentifier[]>(\n (acc, item) => {\n if (item.canHaveSubItems && item.isCollapsed) {\n return [...acc, item.id];\n }\n return acc;\n },\n [],\n );\n\n const ItemsWithCollapsedRemoved = removeChildrenOf(\n flattenItems,\n activeId ? [activeId, ...collapsedItems] : collapsedItems,\n );\n const newArray: FlattenedTreeItem<T>[] = [];\n for (const item of ItemsWithCollapsedRemoved) {\n newArray.push(item);\n if (item.id === activeId) {\n newArray.push({\n ...item,\n id: ACTIVE_PLACEHOLDER_ID,\n });\n }\n }\n\n return newArray;\n }, [flattenItems, activeId]);\n\n if (activeItem?.canHaveSubItems && !activeItem?.isCollapsed) {\n flattenedAndRemovedCollapsedItems.push({\n ...activeItem,\n id: ACTIVE_PLACEHOLDER_ID,\n });\n }\n\n const sensorContext: SensorContext<T> = useRef({\n items: flattenedAndRemovedCollapsedItemsWithActive,\n offset: offsetLeft,\n });\n\n const coordinateGetter = useMemo(() => {\n sensorContext.current.items = flattenedAndRemovedCollapsedItemsWithActive;\n sensorContext.current.offset = offsetLeft;\n\n return sortableTreeKeyboardCoordinates<T>(\n sensorContext,\n true,\n indentationWidth,\n );\n }, [flattenedAndRemovedCollapsedItemsWithActive, offsetLeft]);\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: coordinateGetter,\n }),\n );\n\n const projected = useMemo(\n () =>\n activeId && overId\n ? getProjection(\n flattenedAndRemovedCollapsedItemsWithActive,\n activeId,\n overId,\n offsetLeft,\n indentationWidth,\n )\n : null,\n [activeId, overId, flattenedAndRemovedCollapsedItemsWithActive, offsetLeft],\n );\n /* ------------------------------ Handlers ------------------------------ */\n function handleDragStart({ active }: DragStartEvent) {\n const activeId = active.id;\n setActiveId(activeId);\n setOverId(activeId);\n\n const activeItem = flattenItems.find(({ id }) => id === activeId);\n if (activeItem) {\n setCurrentPosition({\n parentId: activeItem.parentId,\n overId: activeId,\n });\n }\n\n document.body.style.setProperty('cursor', 'grabbing');\n }\n\n function handleDragMove({ delta }: DragMoveEvent) {\n setOffsetLeft(delta.x);\n }\n\n function handleDragOver({ over }: DragOverEvent) {\n setOverId(over?.id ?? null);\n }\n\n function resetState() {\n setOverId(null);\n setActiveId(null);\n setOffsetLeft(0);\n setCurrentPosition(null);\n\n document.body.style.setProperty('cursor', '');\n }\n\n const handleDragEnd = useCallback(\n (event: DragEndEvent) => {\n const { active, over } = event;\n resetState();\n let overIndex = flattenItems.findIndex((item) => item.id === over?.id);\n\n if (over?.id === ACTIVE_PLACEHOLDER_ID) {\n overIndex = flattenItems.findIndex((item) => item.id === active.id);\n }\n if (projected && over) {\n const { depth, parentId } = projected;\n const clonedItems: FlattenedTreeItem<T>[] = [...flattenItems];\n\n const parentIndex = clonedItems.findIndex(\n (item) => item.id === parentId,\n );\n const activeIndex = clonedItems.findIndex(({ id }) => id === active.id);\n const activeTreeItem = clonedItems[activeIndex];\n\n clonedItems[activeIndex] = { ...activeTreeItem, depth, parentId };\n const parentItem = clonedItems[parentIndex];\n if (parentItem && parentItem.canHaveSubItems) {\n clonedItems[parentIndex] = { ...parentItem, isCollapsed: false };\n }\n const newItems = buildTree(\n arrayMove(clonedItems, activeIndex, overIndex),\n );\n\n onItemsChanged(newItems, {\n reason: 'dropped',\n item: activeTreeItem,\n });\n }\n },\n [flattenItems, onItemsChanged, projected],\n );\n\n function handleToggleCollapse(id: UniqueIdentifier) {\n const item = flattenItems.find((item) => item.id === id);\n if (!item || item.canHaveSubItems !== true) return;\n\n onItemsChanged(\n buildTree(\n flattenItems.map((item) => {\n if (item.id === id && item.canHaveSubItems === true) {\n return { ...item, isCollapsed: !item.isCollapsed };\n }\n return item;\n }),\n ),\n {\n reason: item.isCollapsed ? 'expanded' : 'collapsed',\n item,\n },\n );\n }\n\n function handleDragCancel() {\n resetState();\n }\n\n /* ------------------------------ Keyboard functions ------------------------------ */\n const getMovementAnnouncement = (\n eventName: string,\n activeId: UniqueIdentifier,\n overId?: UniqueIdentifier,\n ) => {\n if (overId && projected) {\n if (eventName !== 'onDragEnd') {\n if (\n currentPosition &&\n projected.parentId === currentPosition.parentId &&\n overId === currentPosition.overId\n ) {\n return;\n } else {\n setCurrentPosition({\n parentId: projected.parentId,\n overId,\n });\n }\n }\n\n const clonedItems: FlattenedTreeItem<T>[] = [\n ...flattenedAndRemovedCollapsedItemsWithActive,\n ];\n const overIndex = clonedItems.findIndex(({ id }) => id === overId);\n const activeIndex = clonedItems.findIndex(({ id }) => id === activeId);\n const sortedItems = arrayMove(clonedItems, activeIndex, overIndex);\n\n const previousItem = sortedItems[overIndex - 1];\n\n let announcement;\n const movedVerb = eventName === 'onDragEnd' ? 'dropped' : 'moved';\n const nestedVerb = eventName === 'onDragEnd' ? 'dropped' : 'nested';\n\n if (!previousItem) {\n const nextItem = sortedItems[overIndex + 1];\n announcement = `${activeId} was ${movedVerb} before ${nextItem.id}.`;\n } else {\n if (projected.depth > previousItem.depth) {\n announcement = `${activeId} was ${nestedVerb} under ${previousItem.id}.`;\n } else {\n let previousSibling: FlattenedTreeItem<T> | undefined = previousItem;\n while (previousSibling && projected.depth < previousSibling.depth) {\n const parentId: UniqueIdentifier | null = previousSibling.parentId;\n previousSibling = sortedItems.find(({ id }) => id === parentId);\n }\n\n if (previousSibling) {\n announcement = `${activeId} was ${movedVerb} after ${previousSibling.id}.`;\n }\n }\n }\n\n return announcement;\n }\n\n return;\n };\n\n const announcements: Announcements = {\n onDragStart({ active }) {\n return `Picked up ${active.id}.`;\n },\n onDragMove({ active, over }) {\n return getMovementAnnouncement('onDragMove', active.id, over?.id);\n },\n onDragOver({ active, over }) {\n return getMovementAnnouncement('onDragOver', active.id, over?.id);\n },\n onDragEnd({ active, over }) {\n return getMovementAnnouncement('onDragEnd', active.id, over?.id);\n },\n onDragCancel({ active }) {\n return `Moving was cancelled. ${active.id} was dropped in its original position.`;\n },\n };\n /* ------------------------------ Visual ------------------------------ */\n function getTrailList() {\n const trails: Record<\n UniqueIdentifier,\n ('none' | 'straight' | 'straight-curved' | 'curved')[]\n > = {};\n // Loop through the items in reverse\n [...flattenedAndRemovedCollapsedItemsWithActive]\n .reverse()\n .forEach((item, itemIndex, reversedList) => {\n const trailList: (\n | 'none'\n | 'straight'\n | 'straight-curved'\n | 'curved'\n )[] = [];\n const nextItem = reversedList[itemIndex - 1];\n // Loop through the depth of the item\n\n for (let trailDepth = 0; trailDepth < item.depth; trailDepth++) {\n // Not closest to the item so should be straight or none\n if (trailDepth < item.depth - 1) {\n if (nextItem === undefined) {\n trailList.push('none');\n continue;\n } else if (trails[nextItem?.id][trailDepth] === 'none') {\n trailList.push('none');\n continue;\n } else if (nextItem && nextItem.depth <= trailDepth) {\n trailList.push('none');\n continue;\n }\n trailList.push('straight');\n } else {\n if (\n (nextItem && trails[nextItem?.id][trailDepth] === 'none') ||\n nextItem === undefined ||\n nextItem.depth <= trailDepth\n ) {\n trailList.push('curved');\n } else {\n trailList.push('straight-curved');\n }\n }\n }\n trails[item.id] = trailList;\n });\n return trails;\n }\n\n const measuring = {\n droppable: {\n strategy: MeasuringStrategy.Always,\n },\n };\n\n const trails = getTrailList();\n const rowIdWithFocus =\n focusedRowId ?? flattenedAndRemovedCollapsedItemsWithActive[0]?.id;\n return (\n <DndContext\n accessibility={{ announcements }}\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n onDragStart={handleDragStart}\n onDragMove={handleDragMove}\n onDragOver={handleDragOver}\n onDragCancel={handleDragCancel}\n measuring={measuring}\n >\n <SortableContext\n items={flattenedAndRemovedCollapsedItemsWithActive.map(\n (item) => item.id,\n )}\n strategy={verticalListSortingStrategy}\n >\n <ol className=\"ndl-tree-view-list\" role=\"tree\" {...htmlAttributes}>\n {flattenedAndRemovedCollapsedItemsWithActive.map((item) => (\n <SortableTreeViewItem<T, E>\n key={item.id}\n depth={\n item.id === activeId && projected ? projected.depth : item.depth\n }\n indentationWidth={indentationWidth}\n item={item}\n isLast={false}\n parent={flattenItems.find((i) => i.id === item.parentId) ?? null}\n id={item.id}\n trails={trails[item.id]}\n keepGhostInPlace={item.id === ACTIVE_PLACEHOLDER_ID}\n TreeItemComponent={\n TreeItemComponent === undefined\n ? (TreeViewTextItem as TreeItemComponent<T, E>)\n : TreeItemComponent\n }\n onCollapse={() => handleToggleCollapse(item.id)}\n onItemsChanged={(newItems, itemChangedReason) =>\n onItemsChanged(buildTree(newItems), itemChangedReason)\n }\n items={flattenItems}\n tabIndex={item.id === rowIdWithFocus ? 0 : -1}\n onFocus={() => setFocusedRowId(item.id)}\n shouldDisableSorting={item.isSortable === false}\n />\n ))}\n </ol>\n {/* Portal is used to show the item the user drags */}\n {createPortal(\n <DragOverlay dropAnimation={dropAnimationConfig}></DragOverlay>,\n document.body,\n )}\n </SortableContext>\n </DndContext>\n );\n};\n\nconst TreeViewComponents = {\n SortableTreeViewItem,\n TreeItemWrapper,\n TreeViewTextItem,\n};\n\nexport const TreeView = Object.assign(TreeViewComponent, TreeViewComponents);\n"]}
|
|
1
|
+
{"version":3,"file":"TreeView.js","sourceRoot":"","sources":["../../../src/tree-view/TreeView.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n *\n * Copyright (c) \"Neo4j\"\n * Neo4j Sweden AB [http://neo4j.com]\n *\n * This file is part of Neo4j.\n *\n * Neo4j is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport {\n type Announcements,\n closestCenter,\n defaultDropAnimation,\n DndContext,\n type DragEndEvent,\n type DragMoveEvent,\n type DragOverEvent,\n DragOverlay,\n type DragStartEvent,\n type DropAnimation,\n KeyboardSensor,\n MeasuringStrategy,\n PointerSensor,\n type UniqueIdentifier,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport {\n arrayMove,\n SortableContext,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport type React from 'react';\nimport { useCallback, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { type HtmlAttributes } from '../_common/types';\nimport { sortableTreeKeyboardCoordinates } from './tree-view-keyboard-coordinates';\nimport {\n type FlattenedTreeItem,\n type ItemChangedReason,\n type TreeItem,\n type TreeItemComponent,\n} from './tree-view-types';\nimport {\n buildTree,\n flattenTree,\n getProjection,\n removeChildrenOf,\n type SensorContext,\n transformToString,\n} from './tree-view-utils';\nimport { TreeItemWrapper } from './TreeItemWrapper';\nimport { SortableTreeViewItem } from './TreeViewItem';\nimport { TreeViewTextItem } from './TreeViewTextItem';\n\nconst indentationWidth = 20;\nconst ACTIVE_PLACEHOLDER_ID = 'ndl-active-tree-item';\n\nconst dropAnimationConfig: DropAnimation = {\n keyframes({ transform }) {\n return [\n {\n opacity: 1,\n transform: transformToString(transform.initial),\n },\n {\n opacity: 0,\n transform: transformToString({\n ...transform.final,\n y: transform.final.y + 5,\n x: transform.final.x + 5,\n }),\n },\n ];\n },\n easing: 'ease-out',\n sideEffects({ active }) {\n active.node.animate([{ opacity: 0 }, { opacity: 1 }], {\n duration: defaultDropAnimation.duration,\n easing: defaultDropAnimation.easing,\n });\n },\n};\n\nexport interface TreeViewProps<\n T extends Record<string, unknown>,\n E extends HTMLElement,\n> extends React.HTMLAttributes<HTMLOListElement> {\n /** The items to be displayed in the tree view */\n items: TreeItem<T>[];\n /** A function that is called when the items in the tree view change */\n onItemsChanged: (\n newItems: TreeItem<T>[],\n itemChangedReason: ItemChangedReason<T>,\n ) => void;\n /** The component to use for the tree items, if not provided the default component will be used */\n TreeItemComponent?: TreeItemComponent<T, E>;\n /** HTML attributes */\n htmlAttributes?: HtmlAttributes<'ol'>;\n}\n\nconst TreeViewComponent = function TreeView<\n T extends Record<string, unknown>,\n E extends HTMLElement,\n>({\n items,\n TreeItemComponent,\n onItemsChanged,\n htmlAttributes,\n}: TreeViewProps<T, E>) {\n const flattenItems = useMemo(() => flattenTree(items), [items]);\n const [activeId, setActiveId] = useState<UniqueIdentifier | null>(null);\n const [overId, setOverId] = useState<UniqueIdentifier | null>(null);\n const [focusedRowId, setFocusedRowId] = useState<UniqueIdentifier | null>(\n null,\n );\n\n const [currentPosition, setCurrentPosition] = useState<{\n parentId: UniqueIdentifier | null;\n overId: UniqueIdentifier;\n } | null>(null);\n const [offsetLeft, setOffsetLeft] = useState(0);\n\n /* ------------------------------ Setup of Data ------------------------------ */\n\n const flattenedAndRemovedCollapsedItems = useMemo(() => {\n const collapsedItemsIds = flattenItems\n .filter((item) => item.canHaveSubItems && item.isCollapsed)\n .map((item) => item.id);\n\n return removeChildrenOf(\n [...flattenItems],\n activeId !== null ? [activeId, ...collapsedItemsIds] : collapsedItemsIds,\n );\n }, [activeId, flattenItems]);\n\n const activeItem = useMemo(\n () => (activeId ? flattenItems.find(({ id }) => id === activeId) : null),\n [activeId, flattenItems],\n );\n\n const flattenedAndRemovedCollapsedItemsWithActive = useMemo(() => {\n const collapsedItems = flattenItems.reduce<UniqueIdentifier[]>(\n (acc, item) => {\n if (item.canHaveSubItems && item.isCollapsed) {\n return [...acc, item.id];\n }\n return acc;\n },\n [],\n );\n\n const ItemsWithCollapsedRemoved = removeChildrenOf(\n flattenItems,\n activeId ? [activeId, ...collapsedItems] : collapsedItems,\n );\n const newArray: FlattenedTreeItem<T>[] = [];\n for (const item of ItemsWithCollapsedRemoved) {\n newArray.push(item);\n if (item.id === activeId) {\n newArray.push({\n ...item,\n id: ACTIVE_PLACEHOLDER_ID,\n });\n }\n }\n\n return newArray;\n }, [flattenItems, activeId]);\n\n if (activeItem?.canHaveSubItems && !activeItem?.isCollapsed) {\n flattenedAndRemovedCollapsedItems.push({\n ...activeItem,\n id: ACTIVE_PLACEHOLDER_ID,\n });\n }\n\n const sensorContext: SensorContext<T> = useRef({\n items: flattenedAndRemovedCollapsedItemsWithActive,\n offset: offsetLeft,\n });\n\n const coordinateGetter = useMemo(() => {\n sensorContext.current.items = flattenedAndRemovedCollapsedItemsWithActive;\n sensorContext.current.offset = offsetLeft;\n\n return sortableTreeKeyboardCoordinates<T>(\n sensorContext,\n true,\n indentationWidth,\n );\n }, [flattenedAndRemovedCollapsedItemsWithActive, offsetLeft]);\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: coordinateGetter,\n }),\n );\n\n const projected = useMemo(\n () =>\n activeId && overId\n ? getProjection(\n flattenedAndRemovedCollapsedItemsWithActive,\n activeId,\n overId,\n offsetLeft,\n indentationWidth,\n )\n : null,\n [activeId, overId, flattenedAndRemovedCollapsedItemsWithActive, offsetLeft],\n );\n /* ------------------------------ Handlers ------------------------------ */\n function handleDragStart({ active }: DragStartEvent) {\n const activeId = active.id;\n setActiveId(activeId);\n setOverId(activeId);\n\n const activeItem = flattenItems.find(({ id }) => id === activeId);\n if (activeItem) {\n setCurrentPosition({\n parentId: activeItem.parentId,\n overId: activeId,\n });\n }\n\n document.body.style.setProperty('cursor', 'grabbing');\n }\n\n function handleDragMove({ delta }: DragMoveEvent) {\n setOffsetLeft(delta.x);\n }\n\n function handleDragOver({ over }: DragOverEvent) {\n setOverId(over?.id ?? null);\n }\n\n function resetState() {\n setOverId(null);\n setActiveId(null);\n setOffsetLeft(0);\n setCurrentPosition(null);\n\n document.body.style.setProperty('cursor', '');\n }\n\n const handleDragEnd = useCallback(\n (event: DragEndEvent) => {\n const { active, over } = event;\n resetState();\n let overIndex = flattenItems.findIndex((item) => item.id === over?.id);\n\n if (over?.id === ACTIVE_PLACEHOLDER_ID) {\n overIndex = flattenItems.findIndex((item) => item.id === active.id);\n }\n if (projected && over) {\n const { depth, parentId } = projected;\n const clonedItems: FlattenedTreeItem<T>[] = [...flattenItems];\n\n const parentIndex = clonedItems.findIndex(\n (item) => item.id === parentId,\n );\n const activeIndex = clonedItems.findIndex(({ id }) => id === active.id);\n const activeTreeItem = clonedItems[activeIndex];\n\n clonedItems[activeIndex] = { ...activeTreeItem, depth, parentId };\n const parentItem = clonedItems[parentIndex];\n if (parentItem && parentItem.canHaveSubItems) {\n clonedItems[parentIndex] = { ...parentItem, isCollapsed: false };\n }\n const newItems = buildTree(\n arrayMove(clonedItems, activeIndex, overIndex),\n );\n\n onItemsChanged(newItems, {\n reason: 'dropped',\n item: activeTreeItem,\n });\n }\n },\n [flattenItems, onItemsChanged, projected],\n );\n\n function handleToggleCollapse(id: UniqueIdentifier) {\n const item = flattenItems.find((item) => item.id === id);\n if (!item || item.canHaveSubItems !== true) {\n return;\n }\n\n onItemsChanged(\n buildTree(\n flattenItems.map((item) => {\n if (item.id === id && item.canHaveSubItems === true) {\n return { ...item, isCollapsed: !item.isCollapsed };\n }\n return item;\n }),\n ),\n {\n reason: item.isCollapsed ? 'expanded' : 'collapsed',\n item,\n },\n );\n }\n\n function handleDragCancel() {\n resetState();\n }\n\n /* ------------------------------ Keyboard functions ------------------------------ */\n const getMovementAnnouncement = (\n eventName: string,\n activeId: UniqueIdentifier,\n overId?: UniqueIdentifier,\n ) => {\n if (overId && projected) {\n if (eventName !== 'onDragEnd') {\n if (\n currentPosition &&\n projected.parentId === currentPosition.parentId &&\n overId === currentPosition.overId\n ) {\n return;\n } else {\n setCurrentPosition({\n parentId: projected.parentId,\n overId,\n });\n }\n }\n\n const clonedItems: FlattenedTreeItem<T>[] = [\n ...flattenedAndRemovedCollapsedItemsWithActive,\n ];\n const overIndex = clonedItems.findIndex(({ id }) => id === overId);\n const activeIndex = clonedItems.findIndex(({ id }) => id === activeId);\n const sortedItems = arrayMove(clonedItems, activeIndex, overIndex);\n\n const previousItem = sortedItems[overIndex - 1];\n\n let announcement;\n const movedVerb = eventName === 'onDragEnd' ? 'dropped' : 'moved';\n const nestedVerb = eventName === 'onDragEnd' ? 'dropped' : 'nested';\n\n if (!previousItem) {\n const nextItem = sortedItems[overIndex + 1];\n announcement = `${activeId} was ${movedVerb} before ${nextItem.id}.`;\n } else {\n if (projected.depth > previousItem.depth) {\n announcement = `${activeId} was ${nestedVerb} under ${previousItem.id}.`;\n } else {\n let previousSibling: FlattenedTreeItem<T> | undefined = previousItem;\n while (previousSibling && projected.depth < previousSibling.depth) {\n const parentId: UniqueIdentifier | null = previousSibling.parentId;\n previousSibling = sortedItems.find(({ id }) => id === parentId);\n }\n\n if (previousSibling) {\n announcement = `${activeId} was ${movedVerb} after ${previousSibling.id}.`;\n }\n }\n }\n\n return announcement;\n }\n\n return;\n };\n\n const announcements: Announcements = {\n onDragStart({ active }) {\n return `Picked up ${active.id}.`;\n },\n onDragMove({ active, over }) {\n return getMovementAnnouncement('onDragMove', active.id, over?.id);\n },\n onDragOver({ active, over }) {\n return getMovementAnnouncement('onDragOver', active.id, over?.id);\n },\n onDragEnd({ active, over }) {\n return getMovementAnnouncement('onDragEnd', active.id, over?.id);\n },\n onDragCancel({ active }) {\n return `Moving was cancelled. ${active.id} was dropped in its original position.`;\n },\n };\n /* ------------------------------ Visual ------------------------------ */\n function getTrailList() {\n const trails: Record<\n UniqueIdentifier,\n ('none' | 'straight' | 'straight-curved' | 'curved')[]\n > = {};\n // Loop through the items in reverse\n [...flattenedAndRemovedCollapsedItemsWithActive]\n .reverse()\n .forEach((item, itemIndex, reversedList) => {\n const trailList: (\n | 'none'\n | 'straight'\n | 'straight-curved'\n | 'curved'\n )[] = [];\n const nextItem = reversedList[itemIndex - 1];\n // Loop through the depth of the item\n\n for (let trailDepth = 0; trailDepth < item.depth; trailDepth++) {\n // Not closest to the item so should be straight or none\n if (trailDepth < item.depth - 1) {\n if (nextItem === undefined) {\n trailList.push('none');\n continue;\n } else if (trails[nextItem?.id][trailDepth] === 'none') {\n trailList.push('none');\n continue;\n } else if (nextItem && nextItem.depth <= trailDepth) {\n trailList.push('none');\n continue;\n }\n trailList.push('straight');\n } else {\n if (\n (nextItem && trails[nextItem?.id][trailDepth] === 'none') ||\n nextItem === undefined ||\n nextItem.depth <= trailDepth\n ) {\n trailList.push('curved');\n } else {\n trailList.push('straight-curved');\n }\n }\n }\n trails[item.id] = trailList;\n });\n return trails;\n }\n\n const measuring = {\n droppable: {\n strategy: MeasuringStrategy.Always,\n },\n };\n\n const trails = getTrailList();\n const rowIdWithFocus =\n focusedRowId ?? flattenedAndRemovedCollapsedItemsWithActive[0]?.id;\n return (\n <DndContext\n accessibility={{ announcements }}\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n onDragStart={handleDragStart}\n onDragMove={handleDragMove}\n onDragOver={handleDragOver}\n onDragCancel={handleDragCancel}\n measuring={measuring}\n >\n <SortableContext\n items={flattenedAndRemovedCollapsedItemsWithActive.map(\n (item) => item.id,\n )}\n strategy={verticalListSortingStrategy}\n >\n <ol className=\"ndl-tree-view-list\" role=\"tree\" {...htmlAttributes}>\n {flattenedAndRemovedCollapsedItemsWithActive.map((item) => (\n <SortableTreeViewItem<T, E>\n key={item.id}\n depth={\n item.id === activeId && projected ? projected.depth : item.depth\n }\n indentationWidth={indentationWidth}\n item={item}\n isLast={false}\n parent={flattenItems.find((i) => i.id === item.parentId) ?? null}\n id={item.id}\n trails={trails[item.id]}\n keepGhostInPlace={item.id === ACTIVE_PLACEHOLDER_ID}\n TreeItemComponent={\n TreeItemComponent === undefined\n ? (TreeViewTextItem as TreeItemComponent<T, E>)\n : TreeItemComponent\n }\n onCollapse={() => handleToggleCollapse(item.id)}\n onItemsChanged={(newItems, itemChangedReason) =>\n onItemsChanged(buildTree(newItems), itemChangedReason)\n }\n items={flattenItems}\n tabIndex={item.id === rowIdWithFocus ? 0 : -1}\n onFocus={() => setFocusedRowId(item.id)}\n shouldDisableSorting={item.isSortable === false}\n />\n ))}\n </ol>\n {/* Portal is used to show the item the user drags */}\n {createPortal(\n <DragOverlay dropAnimation={dropAnimationConfig}></DragOverlay>,\n document.body,\n )}\n </SortableContext>\n </DndContext>\n );\n};\n\nconst TreeViewComponents = {\n SortableTreeViewItem,\n TreeItemWrapper,\n TreeViewTextItem,\n};\n\nexport const TreeView = Object.assign(TreeViewComponent, TreeViewComponents);\n"]}
|