@cube-dev/ui-kit 0.0.0-canary-0b79a39 → 0.0.0-canary-c02e70f
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/dist/CHANGELOG.md +6 -0
- package/dist/_internal/hooks/use-debounced-value.js +1 -1
- package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
- package/dist/_internal/hooks/use-event.js +1 -1
- package/dist/_internal/hooks/use-is-first-render.js +1 -1
- package/dist/_internal/hooks/use-sync-ref.js +1 -1
- package/dist/_internal/hooks/use-timer/timer.js +1 -1
- package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
- package/dist/_internal/hooks/use-warn.js +1 -1
- package/dist/components/Block.js +1 -1
- package/dist/components/CollectionItem.js +1 -1
- package/dist/components/GlobalStyles.js +23 -21
- package/dist/components/GlobalStyles.js.map +1 -1
- package/dist/components/GridProvider.js +1 -1
- package/dist/components/HiddenInput.js +1 -1
- package/dist/components/Root.js +1 -1
- package/dist/components/actions/Action/Action.js +1 -1
- package/dist/components/actions/Banner/Banner.js +1 -1
- package/dist/components/actions/Banner/Banner.js.map +1 -1
- package/dist/components/actions/Button/Button.js +1 -1
- package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
- package/dist/components/actions/ButtonSplit/ButtonSplit.js +128 -66
- package/dist/components/actions/ButtonSplit/ButtonSplit.js.map +1 -1
- package/dist/components/actions/ButtonSplit/context.js +1 -1
- package/dist/components/actions/CommandMenu/CommandMenu.js +451 -280
- package/dist/components/actions/CommandMenu/CommandMenu.js.map +1 -1
- package/dist/components/actions/CommandMenu/styled.js +1 -1
- package/dist/components/actions/ItemAction/ItemAction.js +57 -93
- package/dist/components/actions/ItemAction/ItemAction.js.map +1 -1
- package/dist/components/actions/ItemActionContext.js +1 -1
- package/dist/components/actions/ItemActionsWrapper.js +1 -1
- package/dist/components/actions/ItemActionsWrapper.js.map +1 -1
- package/dist/components/actions/ItemButton/ItemButton.js +1 -1
- package/dist/components/actions/Link/Link.js +1 -1
- package/dist/components/actions/Menu/Menu.js +49 -69
- package/dist/components/actions/Menu/Menu.js.map +1 -1
- package/dist/components/actions/Menu/MenuItem.js +1 -1
- package/dist/components/actions/Menu/MenuSection.js +1 -1
- package/dist/components/actions/Menu/MenuTrigger.js +1 -1
- package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
- package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
- package/dist/components/actions/Menu/context.js +1 -1
- package/dist/components/actions/Menu/styled.js +1 -1
- package/dist/components/actions/actions-run.js +1 -1
- package/dist/components/actions/index.js +1 -1
- package/dist/components/actions/use-action.js +1 -1
- package/dist/components/actions/use-anchored-menu.js +1 -1
- package/dist/components/actions/use-context-menu.js +1 -1
- package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
- package/dist/components/content/Alert/Alert.js +1 -1
- package/dist/components/content/Alert/use-alert.js +1 -1
- package/dist/components/content/Avatar/Avatar.js +1 -1
- package/dist/components/content/Badge/Badge.js +1 -1
- package/dist/components/content/Card/Card.js +1 -1
- package/dist/components/content/Content.js +1 -1
- package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
- package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
- package/dist/components/content/CopySnippet/CopySnippet.js.map +1 -1
- package/dist/components/content/Disclosure/Disclosure.js +44 -60
- package/dist/components/content/Disclosure/Disclosure.js.map +1 -1
- package/dist/components/content/Divider.js +1 -1
- package/dist/components/content/Footer.js +1 -1
- package/dist/components/content/Header.js +1 -1
- package/dist/components/content/HotKeys/HotKeys.js +1 -1
- package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
- package/dist/components/content/InlineInput/InlineInput.js +39 -65
- package/dist/components/content/InlineInput/InlineInput.js.map +1 -1
- package/dist/components/content/Item/Item.js +208 -263
- package/dist/components/content/Item/Item.js.map +1 -1
- package/dist/components/content/ItemBadge/ItemBadge.js +70 -145
- package/dist/components/content/ItemBadge/ItemBadge.js.map +1 -1
- package/dist/components/content/ItemCard/ItemCard.js +1 -1
- package/dist/components/content/Layout/GridLayout.js +1 -1
- package/dist/components/content/Layout/Layout.js +1 -1
- package/dist/components/content/Layout/LayoutBlock.js +1 -1
- package/dist/components/content/Layout/LayoutCenter.js +1 -1
- package/dist/components/content/Layout/LayoutContainer.js +39 -18
- package/dist/components/content/Layout/LayoutContainer.js.map +1 -1
- package/dist/components/content/Layout/LayoutContent.js +100 -48
- package/dist/components/content/Layout/LayoutContent.js.map +1 -1
- package/dist/components/content/Layout/LayoutContext.js +211 -95
- package/dist/components/content/Layout/LayoutContext.js.map +1 -1
- package/dist/components/content/Layout/LayoutFlex.js +1 -1
- package/dist/components/content/Layout/LayoutFooter.js +1 -1
- package/dist/components/content/Layout/LayoutFooter.js.map +1 -1
- package/dist/components/content/Layout/LayoutGrid.js +1 -1
- package/dist/components/content/Layout/LayoutHeader.js +1 -1
- package/dist/components/content/Layout/LayoutPane.js +240 -123
- package/dist/components/content/Layout/LayoutPane.js.map +1 -1
- package/dist/components/content/Layout/LayoutPanel.js +1 -1
- package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
- package/dist/components/content/Layout/LayoutPanelHeader.js.map +1 -1
- package/dist/components/content/Layout/LayoutToolbar.js +1 -1
- package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
- package/dist/components/content/Layout/hooks/useTinyScrollbar.js.map +1 -1
- package/dist/components/content/Layout/index.js +1 -1
- package/dist/components/content/Layout/utils.js +1 -1
- package/dist/components/content/Paragraph.js +1 -1
- package/dist/components/content/Placeholder/Placeholder.js +1 -1
- package/dist/components/content/PrismCode/PrismCode.js +1 -1
- package/dist/components/content/PrismCode/prismSetup.js +1 -1
- package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
- package/dist/components/content/Result/Result.js +28 -48
- package/dist/components/content/Result/Result.js.map +1 -1
- package/dist/components/content/Skeleton/Skeleton.js +1 -1
- package/dist/components/content/Tag/Tag.js +1 -1
- package/dist/components/content/Text.js +1 -1
- package/dist/components/content/TextItem/TextItem.js +9 -17
- package/dist/components/content/TextItem/TextItem.js.map +1 -1
- package/dist/components/content/Title.js +1 -1
- package/dist/components/content/Tree/Tree.js +1 -1
- package/dist/components/content/Tree/TreeNode.js +1 -1
- package/dist/components/content/Tree/styled.js +1 -1
- package/dist/components/content/Tree/tree-index.js +1 -1
- package/dist/components/content/Tree/use-checkbox-tree.js +68 -105
- package/dist/components/content/Tree/use-checkbox-tree.js.map +1 -1
- package/dist/components/content/Tree/use-load-data.js +1 -1
- package/dist/components/content/highlightText.js +1 -1
- package/dist/components/content/use-auto-tooltip.js +106 -138
- package/dist/components/content/use-auto-tooltip.js.map +1 -1
- package/dist/components/data/DataTable/DataTable.js +1 -1
- package/dist/components/data/ItemTable/ItemTable.js +1 -1
- package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
- package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
- package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
- package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
- package/dist/components/data/TableBase/ColumnResizer.js +1 -1
- package/dist/components/data/TableBase/RowCollection.js +1 -1
- package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
- package/dist/components/data/TableBase/TableRow.js +1 -1
- package/dist/components/data/TableBase/TableView.js +1 -1
- package/dist/components/data/TableBase/column-menu.js +1 -1
- package/dist/components/data/TableBase/column-tint.js +1 -1
- package/dist/components/data/TableBase/row-menu.js +1 -1
- package/dist/components/data/TableBase/styled.js +1 -1
- package/dist/components/data/TableBase/table-tree.js +1 -1
- package/dist/components/data/TableBase/types.js +1 -1
- package/dist/components/data/TableBase/use-cell-selection.js +0 -0
- package/dist/components/data/TableBase/use-column-order.js +30 -31
- package/dist/components/data/TableBase/use-column-order.js.map +1 -1
- package/dist/components/data/TableBase/use-container-width.js +1 -1
- package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
- package/dist/components/data/TableBase/use-scrollability.js +1 -1
- package/dist/components/data/TableBase/use-table-columns.js +1 -1
- package/dist/components/data/TableBase/use-table-search.js +1 -1
- package/dist/components/data/TableBase/use-table-selection.js +1 -1
- package/dist/components/data/TableBase/use-table-sort.js +38 -42
- package/dist/components/data/TableBase/use-table-sort.js.map +1 -1
- package/dist/components/data/TableBase/use-table-sorts.js +19 -57
- package/dist/components/data/TableBase/use-table-sorts.js.map +1 -1
- package/dist/components/data/TableBase/use-table-storage.js +1 -1
- package/dist/components/data/TableBase/use-table-tree-state.js +55 -64
- package/dist/components/data/TableBase/use-table-tree-state.js.map +1 -1
- package/dist/components/fields/Checkbox/Checkbox.js +1 -1
- package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
- package/dist/components/fields/Checkbox/context.js +1 -1
- package/dist/components/fields/ColorInput/ColorInput.js +1 -1
- package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
- package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
- package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
- package/dist/components/fields/ComboBox/ComboBox.js +1 -1
- package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
- package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
- package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
- package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
- package/dist/components/fields/DatePicker/DateInput.js +1 -1
- package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
- package/dist/components/fields/DatePicker/DatePicker.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
- package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
- package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
- package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
- package/dist/components/fields/DatePicker/TimeInput.js +1 -1
- package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
- package/dist/components/fields/DatePicker/YearPicker.js +1 -1
- package/dist/components/fields/DatePicker/parseDate.js +1 -1
- package/dist/components/fields/DatePicker/period.js +1 -1
- package/dist/components/fields/DatePicker/props.js +1 -1
- package/dist/components/fields/DatePicker/utils.js +1 -1
- package/dist/components/fields/FileInput/FileInput.js +1 -1
- package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
- package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
- package/dist/components/fields/Input/Input.js +1 -1
- package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
- package/dist/components/fields/ListBox/ListBox.js +1 -1
- package/dist/components/fields/ListBox/optionId.js +1 -1
- package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
- package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
- package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +32 -38
- package/dist/components/fields/ListBoxPopover/useCompositeFocus.js.map +1 -1
- package/dist/components/fields/NumberInput/NumberInput.js +1 -1
- package/dist/components/fields/NumberInput/StepButton.js +1 -1
- package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
- package/dist/components/fields/PasswordInput/PasswordInput.js.map +1 -1
- package/dist/components/fields/Picker/Picker.js +1 -1
- package/dist/components/fields/RadioGroup/Radio.js +1 -1
- package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
- package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
- package/dist/components/fields/RadioGroup/context.js +1 -1
- package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
- package/dist/components/fields/SearchInput/SearchInput.js +1 -1
- package/dist/components/fields/Select/Select.js +1 -1
- package/dist/components/fields/Slider/Gradation.js +1 -1
- package/dist/components/fields/Slider/HueSlider.js +1 -1
- package/dist/components/fields/Slider/HueSlider.js.map +1 -1
- package/dist/components/fields/Slider/RangeSlider.js +1 -1
- package/dist/components/fields/Slider/Slider.js +1 -1
- package/dist/components/fields/Slider/SliderBase.js +1 -1
- package/dist/components/fields/Slider/SliderThumb.js +1 -1
- package/dist/components/fields/Slider/SliderThumb.js.map +1 -1
- package/dist/components/fields/Slider/SliderTrack.js +1 -1
- package/dist/components/fields/Slider/SliderTrack.js.map +1 -1
- package/dist/components/fields/Slider/elements.js +1 -1
- package/dist/components/fields/Slider/index.js +1 -1
- package/dist/components/fields/Switch/Switch.js +1 -1
- package/dist/components/fields/TagInput/TagInput.js +738 -1139
- package/dist/components/fields/TagInput/TagInput.js.map +1 -1
- package/dist/components/fields/TagInput/TagList.js +1 -1
- package/dist/components/fields/TextArea/TextArea.js +1 -1
- package/dist/components/fields/TextInput/TextInput.js +1 -1
- package/dist/components/fields/TextInput/TextInputBase.js +1 -1
- package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
- package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
- package/dist/components/fields/TriggerActions.js +1 -1
- package/dist/components/fields/color/ColorPanel.js +1 -1
- package/dist/components/fields/color/ColorPanel.js.map +1 -1
- package/dist/components/fields/color/channels.js +1 -1
- package/dist/components/fields/color/color.js +1 -1
- package/dist/components/fields/color/context.js +1 -1
- package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
- package/dist/components/form/Form/Field.js +10 -15
- package/dist/components/form/Form/Field.js.map +1 -1
- package/dist/components/form/Form/Form.js +1 -1
- package/dist/components/form/Form/ModernFormRoot.js +1 -1
- package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
- package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
- package/dist/components/form/Form/SubmitError.js +1 -1
- package/dist/components/form/Form/backend.js +1 -1
- package/dist/components/form/Form/index.js +1 -1
- package/dist/components/form/Form/modern/actions.js +1 -1
- package/dist/components/form/Form/modern/context.js +1 -1
- package/dist/components/form/Form/modern/controller.js +1 -1
- package/dist/components/form/Form/modern/field-binding.js +1 -1
- package/dist/components/form/Form/modern/field.js +1 -1
- package/dist/components/form/Form/modern/react.js +1 -1
- package/dist/components/form/Form/modern/react.js.map +1 -1
- package/dist/components/form/Form/modern/store.js +1 -1
- package/dist/components/form/Form/modern/validation.js +1 -1
- package/dist/components/form/Form/modern/values.js +1 -1
- package/dist/components/form/Form/reset-unbound-controls.js +1 -1
- package/dist/components/form/Form/use-field/use-field-binding.js +1 -1
- package/dist/components/form/Form/use-field/use-field-props.js +1 -1
- package/dist/components/form/Form/use-field/use-field.js +1 -1
- package/dist/components/form/Form/use-form.js +1 -1
- package/dist/components/form/Form/validation.js +1 -1
- package/dist/components/form/Label.js +1 -1
- package/dist/components/form/legacy-tooltip.js +1 -1
- package/dist/components/form/validation/ValidationIndicator.js +1 -1
- package/dist/components/form/validation/resolve-validation-props.js +1 -1
- package/dist/components/form/validation/use-validation-props.js +1 -1
- package/dist/components/form/wrapper.js +1 -1
- package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
- package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
- package/dist/components/layout/Board/Board.js +1 -1
- package/dist/components/layout/Board/BoardProvider.js +1 -1
- package/dist/components/layout/Board/BoardResponsive.js +1 -1
- package/dist/components/layout/Board/Widget.js +1 -1
- package/dist/components/layout/Board/WidgetHost.js +1 -1
- package/dist/components/layout/Board/board-context.js +1 -1
- package/dist/components/layout/Board/board-store.js +1 -1
- package/dist/components/layout/Board/grid-core/calculate.js +1 -1
- package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
- package/dist/components/layout/Board/grid-core/collision.js +1 -1
- package/dist/components/layout/Board/grid-core/compactors.js +1 -1
- package/dist/components/layout/Board/grid-core/constraints.js +1 -1
- package/dist/components/layout/Board/grid-core/group-move.js +1 -1
- package/dist/components/layout/Board/grid-core/layout.js +1 -1
- package/dist/components/layout/Board/grid-core/placement.js +1 -1
- package/dist/components/layout/Board/grid-core/sort.js +1 -1
- package/dist/components/layout/Board/index.js +1 -1
- package/dist/components/layout/Board/responsive-utils.js +1 -1
- package/dist/components/layout/Board/use-board-layout.js +1 -1
- package/dist/components/layout/Board/use-board-registry.js +1 -1
- package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
- package/dist/components/layout/Board/use-board-selection.js +1 -1
- package/dist/components/layout/Flex.js +1 -1
- package/dist/components/layout/Flow.js +1 -1
- package/dist/components/layout/Grid.js +1 -1
- package/dist/components/layout/Panel.js +129 -48
- package/dist/components/layout/Panel.js.map +1 -1
- package/dist/components/layout/Prefix.js +1 -1
- package/dist/components/layout/ResizablePanel.js +1 -1
- package/dist/components/layout/Space.js +1 -1
- package/dist/components/layout/Suffix.js +1 -1
- package/dist/components/navigation/Pagination/Pagination.js +227 -347
- package/dist/components/navigation/Pagination/Pagination.js.map +1 -1
- package/dist/components/navigation/Pagination/use-pagination.js +1 -1
- package/dist/components/navigation/Pagination/use-pagination.js.map +1 -1
- package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
- package/dist/components/navigation/Tabs/TabButton.js +1 -1
- package/dist/components/navigation/Tabs/TabButton.js.map +1 -1
- package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
- package/dist/components/navigation/Tabs/TabPanel.js +1 -1
- package/dist/components/navigation/Tabs/TabPicker.js +1 -1
- package/dist/components/navigation/Tabs/Tabs.js +1 -1
- package/dist/components/navigation/Tabs/TabsAction.js +1 -1
- package/dist/components/navigation/Tabs/TabsAction.js.map +1 -1
- package/dist/components/navigation/Tabs/TabsContext.js +1 -1
- package/dist/components/navigation/Tabs/popover-placement.js +1 -1
- package/dist/components/navigation/Tabs/styled.js +1 -1
- package/dist/components/navigation/Tabs/types.js +1 -1
- package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
- package/dist/components/navigation/Tabs/use-tab-editing.js.map +1 -1
- package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
- package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
- package/dist/components/other/Calendar/Calendar.js +1 -1
- package/dist/components/other/Calendar/CalendarCell.js +1 -1
- package/dist/components/other/Calendar/CalendarGrid.js +1 -1
- package/dist/components/other/Calendar/CalendarGrid.js.map +1 -1
- package/dist/components/other/Calendar/CalendarHeader.js +1 -1
- package/dist/components/other/Calendar/CalendarPanel.js +497 -515
- package/dist/components/other/Calendar/CalendarPanel.js.map +1 -1
- package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
- package/dist/components/other/Calendar/PeriodCalendar.js.map +1 -1
- package/dist/components/other/Calendar/PeriodGrid.js +1 -1
- package/dist/components/other/Calendar/RangeCalendar.js +1 -1
- package/dist/components/other/Calendar/styled.js +1 -1
- package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
- package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
- package/dist/components/overlays/Dialog/Dialog.js +1 -1
- package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
- package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
- package/dist/components/overlays/Dialog/DialogForm.js +1 -1
- package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
- package/dist/components/overlays/Dialog/ModernDialogForm.js +1 -1
- package/dist/components/overlays/Dialog/context.js +1 -1
- package/dist/components/overlays/Dialog/use-content-overflow.js +1 -1
- package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
- package/dist/components/overlays/Modal/Modal.js +1 -1
- package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
- package/dist/components/overlays/Modal/Overlay.js +1 -1
- package/dist/components/overlays/Modal/Popover.js +1 -1
- package/dist/components/overlays/Modal/Tray.js +1 -1
- package/dist/components/overlays/Modal/Underlay.js +1 -1
- package/dist/components/overlays/Notifications/Notification.js +1 -1
- package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
- package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
- package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
- package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
- package/dist/components/overlays/Notifications/OverlayContainer.js +266 -161
- package/dist/components/overlays/Notifications/OverlayContainer.js.map +1 -1
- package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
- package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
- package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
- package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
- package/dist/components/overlays/Notifications/index.js +1 -1
- package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
- package/dist/components/overlays/Notifications/use-notifications.js +1 -1
- package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
- package/dist/components/overlays/Notifications/use-persistent-notifications.js +18 -9
- package/dist/components/overlays/Notifications/use-persistent-notifications.js.map +1 -1
- package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
- package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
- package/dist/components/overlays/Toast/ToastItem.js +1 -1
- package/dist/components/overlays/Toast/index.js +1 -1
- package/dist/components/overlays/Toast/useProgressToast.js +1 -1
- package/dist/components/overlays/Toast/useToast.js +1 -1
- package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
- package/dist/components/overlays/Tooltip/Tooltip.js.map +1 -1
- package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
- package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
- package/dist/components/overlays/Tooltip/context.js +1 -1
- package/dist/components/overlays/Tooltip/split-trigger-props.js +1 -1
- package/dist/components/portal/Portal.js +1 -1
- package/dist/components/portal/PortalProvider.js +1 -1
- package/dist/components/portal/usePortal.js +1 -1
- package/dist/components/shared/DraggableCollection.js +1 -1
- package/dist/components/shared/InvalidIcon.js +1 -1
- package/dist/components/shared/ValidIcon.js +1 -1
- package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
- package/dist/components/status/Spin/Cube.js +1 -1
- package/dist/components/status/Spin/InternalSpinner.js +1 -1
- package/dist/components/status/Spin/Spin.js +1 -1
- package/dist/components/status/Spin/SpinsContainer.js +1 -1
- package/dist/data/item-themes.js +1 -1
- package/dist/data/themes.js +1 -1
- package/dist/eslint-plugin/defaults.generated.js +1 -1
- package/dist/eslint-plugin/index.js +1 -1
- package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
- package/dist/i18n/I18nProvider.js +1 -1
- package/dist/i18n/createFormatter.js +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/i18n/instance.js +1 -1
- package/dist/i18n/locales/de-DE/uikit.js +1 -1
- package/dist/i18n/locales/en-US/uikit.js +1 -1
- package/dist/i18n/locales/es-ES/uikit.js +1 -1
- package/dist/i18n/locales/es-MX/uikit.js +1 -1
- package/dist/i18n/locales/fr-FR/uikit.js +1 -1
- package/dist/i18n/locales/it-IT/uikit.js +1 -1
- package/dist/i18n/locales/ja-JP/uikit.js +1 -1
- package/dist/i18n/locales/nb-NO/uikit.js +1 -1
- package/dist/i18n/locales/pt-BR/uikit.js +1 -1
- package/dist/i18n/locales/pt-PT/uikit.js +1 -1
- package/dist/i18n/locales/sv-SE/uikit.js +1 -1
- package/dist/i18n/locales/vi-VN/uikit.js +1 -1
- package/dist/i18n/locales.js +1 -1
- package/dist/i18n/useFormatter.js +1 -1
- package/dist/i18n/useFormatter.js.map +1 -1
- package/dist/i18n/useI18n.js +1 -1
- package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
- package/dist/icons/AdjustmentsIcon.js +1 -1
- package/dist/icons/AiIcon.js +1 -1
- package/dist/icons/AreaChartIcon.js +1 -1
- package/dist/icons/ArrowNarrowDownIcon.js +1 -1
- package/dist/icons/ArrowNarrowUpIcon.js +1 -1
- package/dist/icons/BackwardIcon.js +1 -1
- package/dist/icons/BarChartIcon.js +1 -1
- package/dist/icons/BellFilledIcon.js +1 -1
- package/dist/icons/BellIcon.js +1 -1
- package/dist/icons/BooleanIcon.js +1 -1
- package/dist/icons/CalendarEditIcon.js +1 -1
- package/dist/icons/CalendarIcon.js +1 -1
- package/dist/icons/CaretDownIcon.js +1 -1
- package/dist/icons/CaretUpIcon.js +1 -1
- package/dist/icons/ChartAreaStackedIcon.js +1 -1
- package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarGroupedIcon.js +1 -1
- package/dist/icons/ChartBarHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarLineIcon.js +1 -1
- package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartBoxPlot2Icon.js +1 -1
- package/dist/icons/ChartBoxPlotIcon.js +1 -1
- package/dist/icons/ChartBubbleIcon.js +1 -1
- package/dist/icons/ChartDonut2Icon.js +1 -1
- package/dist/icons/ChartFunnelIcon.js +1 -1
- package/dist/icons/ChartHeatmapIcon.js +1 -1
- package/dist/icons/ChartKPIIcon.js +1 -1
- package/dist/icons/ChartPie2Icon.js +1 -1
- package/dist/icons/ChartScatterIcon.js +1 -1
- package/dist/icons/CheckCircleFilledIcon.js +1 -1
- package/dist/icons/CheckCircleIcon.js +1 -1
- package/dist/icons/CheckIcon.js +1 -1
- package/dist/icons/CircleFilledIcon.js +1 -1
- package/dist/icons/ClearIcon.js +1 -1
- package/dist/icons/CloseCircleFilledIcon.js +1 -1
- package/dist/icons/CloseCircleIcon.js +1 -1
- package/dist/icons/CloseIcon.js +1 -1
- package/dist/icons/CodeIcon.js +1 -1
- package/dist/icons/ColumnTotalIcon.js +1 -1
- package/dist/icons/CopyIcon.js +1 -1
- package/dist/icons/CountIcon.js +1 -1
- package/dist/icons/CubeIcon.js +1 -1
- package/dist/icons/CubePauseIcon.js +1 -1
- package/dist/icons/CubePlayIcon.js +1 -1
- package/dist/icons/CurrencyDollarIcon.js +1 -1
- package/dist/icons/DangerIcon.js +1 -1
- package/dist/icons/DashboardIcon.js +1 -1
- package/dist/icons/DatabaseIcon.js +1 -1
- package/dist/icons/DecimalDecreaseIcon.js +1 -1
- package/dist/icons/DecimalIncreaseIcon.js +1 -1
- package/dist/icons/DirectionIcon.js +1 -1
- package/dist/icons/DonutIcon.js +1 -1
- package/dist/icons/DownIcon.js +1 -1
- package/dist/icons/EditIcon.js +1 -1
- package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
- package/dist/icons/ExclamationCircleIcon.js +1 -1
- package/dist/icons/ExclamationIcon.js +1 -1
- package/dist/icons/EyeIcon.js +1 -1
- package/dist/icons/EyeInvisibleIcon.js +1 -1
- package/dist/icons/FilterIcon.js +1 -1
- package/dist/icons/FolderFilledIcon.js +1 -1
- package/dist/icons/FolderIcon.js +1 -1
- package/dist/icons/FolderOpenFilledIcon.js +1 -1
- package/dist/icons/FolderOpenIcon.js +1 -1
- package/dist/icons/ForwardIcon.js +1 -1
- package/dist/icons/GripVerticalIcon.js +1 -1
- package/dist/icons/HierarchyIcon.js +1 -1
- package/dist/icons/HierarchyOpenIcon.js +1 -1
- package/dist/icons/Icon.js +1 -1
- package/dist/icons/InfoCircleIcon.js +1 -1
- package/dist/icons/InfoIcon.js +1 -1
- package/dist/icons/KeyIcon.js +1 -1
- package/dist/icons/LeftIcon.js +1 -1
- package/dist/icons/LineChartIcon.js +1 -1
- package/dist/icons/LoadingIcon.js +1 -1
- package/dist/icons/LockFilledIcon.js +1 -1
- package/dist/icons/LockIcon.js +1 -1
- package/dist/icons/MoreIcon.js +1 -1
- package/dist/icons/NotAllowedIcon.js +1 -1
- package/dist/icons/Number123Icon.js +1 -1
- package/dist/icons/NumberIcon.js +1 -1
- package/dist/icons/PauseCircleFilledIcon.js +1 -1
- package/dist/icons/PauseCircleIcon.js +1 -1
- package/dist/icons/PauseIcon.js +1 -1
- package/dist/icons/PercentageIcon.js +1 -1
- package/dist/icons/PieChartIcon.js +1 -1
- package/dist/icons/PipetteIcon.js +1 -1
- package/dist/icons/PlayCircleIcon.js +1 -1
- package/dist/icons/PlayIcon.js +1 -1
- package/dist/icons/PlusIcon.js +1 -1
- package/dist/icons/ProgressBarIcon.js +1 -1
- package/dist/icons/ReloadIcon.js +1 -1
- package/dist/icons/ReportIcon.js +1 -1
- package/dist/icons/ReturnIcon.js +1 -1
- package/dist/icons/RightIcon.js +1 -1
- package/dist/icons/RowTotalsIcon.js +1 -1
- package/dist/icons/SchemeIcon.js +1 -1
- package/dist/icons/SearchIcon.js +1 -1
- package/dist/icons/SemanticQueryIcon.js +1 -1
- package/dist/icons/SettingsIcon.js +1 -1
- package/dist/icons/ShieldFilledIcon.js +1 -1
- package/dist/icons/ShieldIcon.js +1 -1
- package/dist/icons/SlashIcon.js +1 -1
- package/dist/icons/SparklesIcon.js +1 -1
- package/dist/icons/SqlIcon.js +1 -1
- package/dist/icons/StatsIcon.js +1 -1
- package/dist/icons/StopIcon.js +1 -1
- package/dist/icons/StringIcon.js +1 -1
- package/dist/icons/SubtotalsIcon.js +1 -1
- package/dist/icons/SwitchIcon.js +1 -1
- package/dist/icons/TableIcon.js +1 -1
- package/dist/icons/ThumbsDownIcon.js +1 -1
- package/dist/icons/ThumbsUpIcon.js +1 -1
- package/dist/icons/ThunderboltCrossedIcon.js +1 -1
- package/dist/icons/ThunderboltFilledIcon.js +1 -1
- package/dist/icons/ThunderboltIcon.js +1 -1
- package/dist/icons/TimeIcon.js +1 -1
- package/dist/icons/TrashIcon.js +1 -1
- package/dist/icons/UnlockIcon.js +1 -1
- package/dist/icons/UpIcon.js +1 -1
- package/dist/icons/UserGroupIcon.js +1 -1
- package/dist/icons/UserIcon.js +1 -1
- package/dist/icons/UserLockIcon.js +1 -1
- package/dist/icons/ViewIcon.js +1 -1
- package/dist/icons/WarningFilledIcon.js +1 -1
- package/dist/icons/WarningIcon.js +1 -1
- package/dist/icons/wrap-icon.js +1 -1
- package/dist/index.js +1 -1
- package/dist/probe/canonicalize.js +1 -1
- package/dist/probe/css.js +1 -1
- package/dist/probe/index.js +1 -1
- package/dist/provider.js +1 -1
- package/dist/providers/TrackingProvider.js +1 -1
- package/dist/providers/navigationAdapter.default.js +1 -1
- package/dist/tokens/all-tokens.js +1 -1
- package/dist/tokens/base.js +1 -1
- package/dist/tokens/color-seed.js +1 -1
- package/dist/tokens/color-theme.js +1 -1
- package/dist/tokens/colors.js +1 -1
- package/dist/tokens/layout.js +1 -1
- package/dist/tokens/lazy-styles.js +1 -1
- package/dist/tokens/legacy-color.js +1 -1
- package/dist/tokens/palette-config.js +1 -1
- package/dist/tokens/palette.js +1 -1
- package/dist/tokens/resolve.js +1 -1
- package/dist/tokens/shadows.js +1 -1
- package/dist/tokens/sizes.js +1 -1
- package/dist/tokens/spacing.js +1 -1
- package/dist/tokens/typography.js +1 -1
- package/dist/utils/ResizeSensor.js +1 -1
- package/dist/utils/colors.js +1 -1
- package/dist/utils/dotize.js +1 -1
- package/dist/utils/is-dev-env.js +1 -1
- package/dist/utils/modules.js +1 -1
- package/dist/utils/promise.js +1 -1
- package/dist/utils/raf.js +1 -1
- package/dist/utils/random.js +1 -1
- package/dist/utils/range.js +1 -1
- package/dist/utils/react/RenderCache.js +1 -1
- package/dist/utils/react/Slots.js +1 -1
- package/dist/utils/react/chain.js +1 -1
- package/dist/utils/react/disabledProps.js +1 -1
- package/dist/utils/react/escapePropagation.js +1 -1
- package/dist/utils/react/forwardRefWithGenerics.js +1 -1
- package/dist/utils/react/index.js +1 -1
- package/dist/utils/react/interactions.js +1 -1
- package/dist/utils/react/isTextOnly.js +1 -1
- package/dist/utils/react/mapProps.js +1 -1
- package/dist/utils/react/mergeProps.js +1 -1
- package/dist/utils/react/nullableValue.js +1 -1
- package/dist/utils/react/programmaticFocus.js +1 -1
- package/dist/utils/react/resolveIcon.js +1 -1
- package/dist/utils/react/sharedStore.js +1 -1
- package/dist/utils/react/useBufferedValue.js +1 -1
- package/dist/utils/react/useCombinedRefs.js +1 -1
- package/dist/utils/react/useControlledFocusVisible.js +1 -1
- package/dist/utils/react/useEventBus.js +1 -1
- package/dist/utils/react/useId.js +1 -1
- package/dist/utils/react/useIsDarwin.js +1 -1
- package/dist/utils/react/useKeySymbols.js +1 -1
- package/dist/utils/react/useKeySymbols.js.map +1 -1
- package/dist/utils/react/useLayoutEffect.js +1 -1
- package/dist/utils/react/useLocalStorage.js +1 -1
- package/dist/utils/react/useMergeStyles.js +1 -1
- package/dist/utils/react/useOverlayEscapeGuard.js +1 -1
- package/dist/utils/react/usePopoverSync.js +1 -1
- package/dist/utils/react/usePopoverSync.js.map +1 -1
- package/dist/utils/react/useQaProps.js +1 -1
- package/dist/utils/react/useScheme.js +1 -1
- package/dist/utils/react/useViewportSize.js +1 -1
- package/dist/utils/react/wrapNodeIfPlain.js +1 -1
- package/dist/utils/selection.js +1 -1
- package/dist/utils/styles.js +1 -1
- package/dist/utils/tree.js +1 -1
- package/dist/utils/warnings.js +1 -1
- package/dist/version.js +2 -2
- package/docs/CreateComponent.md +3 -1
- package/package.json +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-c02e70f | Cube Dev Team */
|
|
2
2
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
3
3
|
import { c } from "react-compiler-runtime";
|
|
4
4
|
import { useState } from "react";
|
|
@@ -76,6 +76,36 @@ function normalizeControlledChecked(controlled) {
|
|
|
76
76
|
};
|
|
77
77
|
}
|
|
78
78
|
/**
|
|
79
|
+
* Derive `{ checked, halfChecked }` from the source-of-truth `checked` set
|
|
80
|
+
* by walking the tree bottom-up:
|
|
81
|
+
*
|
|
82
|
+
* - A parent is considered fully checked iff every eligible descendant
|
|
83
|
+
* leaf is checked.
|
|
84
|
+
* - A parent is half-checked iff at least one eligible descendant is
|
|
85
|
+
* checked or half-checked, but not all.
|
|
86
|
+
*
|
|
87
|
+
* Ineligible nodes (disabled / opt-out) are ignored when computing the
|
|
88
|
+
* parent's state — they neither force a parent into the unchecked nor
|
|
89
|
+
* half state.
|
|
90
|
+
*/
|
|
91
|
+
function resolveCheckedSets({ isCheckable, sourceChecked, ownHalfChecked, treeData, index }) {
|
|
92
|
+
if (!isCheckable) return {
|
|
93
|
+
checkedSet: /* @__PURE__ */ new Set(),
|
|
94
|
+
halfCheckedSet: /* @__PURE__ */ new Set()
|
|
95
|
+
};
|
|
96
|
+
if (ownHalfChecked) return {
|
|
97
|
+
checkedSet: new Set(sourceChecked),
|
|
98
|
+
halfCheckedSet: new Set(ownHalfChecked)
|
|
99
|
+
};
|
|
100
|
+
const checked = new Set(sourceChecked);
|
|
101
|
+
const half = /* @__PURE__ */ new Set();
|
|
102
|
+
for (const root of treeData) deriveCheckedState(root, index, checked, half);
|
|
103
|
+
return {
|
|
104
|
+
checkedSet: checked,
|
|
105
|
+
halfCheckedSet: half
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
79
109
|
* Local hook implementing AntD-style cascading checkbox state.
|
|
80
110
|
*
|
|
81
111
|
* - `checked` and `halfChecked` are always derived together from a single
|
|
@@ -87,96 +117,28 @@ function normalizeControlledChecked(controlled) {
|
|
|
87
117
|
* and recomputes ancestors *up* in a single pass.
|
|
88
118
|
*/
|
|
89
119
|
function useCheckboxTree(opts) {
|
|
90
|
-
const $ = c(
|
|
120
|
+
const $ = c(14);
|
|
91
121
|
const { treeData, index, isCheckable, defaultCheckedKeys, checkedKeys, onCheck } = opts;
|
|
122
|
+
const controlled = normalizeControlledChecked(checkedKeys);
|
|
123
|
+
const isControlled = controlled != null;
|
|
124
|
+
const wantsObjectShape = checkedKeys != null && !Array.isArray(checkedKeys);
|
|
92
125
|
let t0;
|
|
93
|
-
if ($[0] !==
|
|
94
|
-
t0 =
|
|
95
|
-
$[0] =
|
|
126
|
+
if ($[0] !== defaultCheckedKeys) {
|
|
127
|
+
t0 = () => new Set(defaultCheckedKeys ?? []);
|
|
128
|
+
$[0] = defaultCheckedKeys;
|
|
96
129
|
$[1] = t0;
|
|
97
130
|
} else t0 = $[1];
|
|
98
|
-
const
|
|
99
|
-
const
|
|
100
|
-
|
|
131
|
+
const [uncontrolledChecked, setUncontrolledChecked] = useState(t0);
|
|
132
|
+
const { checkedSet, halfCheckedSet } = resolveCheckedSets({
|
|
133
|
+
isCheckable,
|
|
134
|
+
sourceChecked: isControlled ? controlled.checked : uncontrolledChecked,
|
|
135
|
+
ownHalfChecked: isControlled && wantsObjectShape ? controlled.halfChecked : null,
|
|
136
|
+
treeData,
|
|
137
|
+
index
|
|
138
|
+
});
|
|
101
139
|
let t1;
|
|
102
|
-
if ($[2] !==
|
|
103
|
-
t1 = () =>
|
|
104
|
-
$[2] = defaultCheckedKeys;
|
|
105
|
-
$[3] = t1;
|
|
106
|
-
} else t1 = $[3];
|
|
107
|
-
const [uncontrolledChecked, setUncontrolledChecked] = useState(t1);
|
|
108
|
-
const sourceChecked = isControlled ? controlled.checked : uncontrolledChecked;
|
|
109
|
-
let t2;
|
|
110
|
-
bb0: {
|
|
111
|
-
if (!isCheckable) {
|
|
112
|
-
let t3;
|
|
113
|
-
if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
|
|
114
|
-
t3 = {
|
|
115
|
-
checkedSet: /* @__PURE__ */ new Set(),
|
|
116
|
-
halfCheckedSet: /* @__PURE__ */ new Set()
|
|
117
|
-
};
|
|
118
|
-
$[4] = t3;
|
|
119
|
-
} else t3 = $[4];
|
|
120
|
-
t2 = t3;
|
|
121
|
-
break bb0;
|
|
122
|
-
}
|
|
123
|
-
if (isControlled && wantsObjectShape) {
|
|
124
|
-
let t3;
|
|
125
|
-
if ($[5] !== sourceChecked) {
|
|
126
|
-
t3 = new Set(sourceChecked);
|
|
127
|
-
$[5] = sourceChecked;
|
|
128
|
-
$[6] = t3;
|
|
129
|
-
} else t3 = $[6];
|
|
130
|
-
let t4;
|
|
131
|
-
if ($[7] !== controlled.halfChecked) {
|
|
132
|
-
t4 = new Set(controlled.halfChecked);
|
|
133
|
-
$[7] = controlled.halfChecked;
|
|
134
|
-
$[8] = t4;
|
|
135
|
-
} else t4 = $[8];
|
|
136
|
-
let t5;
|
|
137
|
-
if ($[9] !== t3 || $[10] !== t4) {
|
|
138
|
-
t5 = {
|
|
139
|
-
checkedSet: t3,
|
|
140
|
-
halfCheckedSet: t4
|
|
141
|
-
};
|
|
142
|
-
$[9] = t3;
|
|
143
|
-
$[10] = t4;
|
|
144
|
-
$[11] = t5;
|
|
145
|
-
} else t5 = $[11];
|
|
146
|
-
t2 = t5;
|
|
147
|
-
break bb0;
|
|
148
|
-
}
|
|
149
|
-
let checked;
|
|
150
|
-
let half;
|
|
151
|
-
if ($[12] !== index || $[13] !== sourceChecked || $[14] !== treeData) {
|
|
152
|
-
checked = new Set(sourceChecked);
|
|
153
|
-
half = /* @__PURE__ */ new Set();
|
|
154
|
-
for (const root of treeData) deriveCheckedState(root, index, checked, half);
|
|
155
|
-
$[12] = index;
|
|
156
|
-
$[13] = sourceChecked;
|
|
157
|
-
$[14] = treeData;
|
|
158
|
-
$[15] = checked;
|
|
159
|
-
$[16] = half;
|
|
160
|
-
} else {
|
|
161
|
-
checked = $[15];
|
|
162
|
-
half = $[16];
|
|
163
|
-
}
|
|
164
|
-
let t3;
|
|
165
|
-
if ($[17] !== checked || $[18] !== half) {
|
|
166
|
-
t3 = {
|
|
167
|
-
checkedSet: checked,
|
|
168
|
-
halfCheckedSet: half
|
|
169
|
-
};
|
|
170
|
-
$[17] = checked;
|
|
171
|
-
$[18] = half;
|
|
172
|
-
$[19] = t3;
|
|
173
|
-
} else t3 = $[19];
|
|
174
|
-
t2 = t3;
|
|
175
|
-
}
|
|
176
|
-
const { checkedSet, halfCheckedSet } = t2;
|
|
177
|
-
let t3;
|
|
178
|
-
if ($[20] !== checkedSet || $[21] !== index || $[22] !== isControlled || $[23] !== onCheck || $[24] !== treeData || $[25] !== wantsObjectShape) {
|
|
179
|
-
t3 = (key) => {
|
|
140
|
+
if ($[2] !== checkedSet || $[3] !== index || $[4] !== isControlled || $[5] !== onCheck || $[6] !== setUncontrolledChecked || $[7] !== treeData || $[8] !== wantsObjectShape) {
|
|
141
|
+
t1 = (key) => {
|
|
180
142
|
const node = index.byKey.get(key);
|
|
181
143
|
if (!node || !isNodeEligible(node)) return;
|
|
182
144
|
const willCheck = !checkedSet.has(key);
|
|
@@ -217,7 +179,7 @@ function useCheckboxTree(opts) {
|
|
|
217
179
|
if (onCheck) {
|
|
218
180
|
const finalChecked = new Set(next);
|
|
219
181
|
const finalHalf = /* @__PURE__ */ new Set();
|
|
220
|
-
for (const
|
|
182
|
+
for (const root of treeData) deriveCheckedState(root, index, finalChecked, finalHalf);
|
|
221
183
|
const checkedArr = Array.from(finalChecked);
|
|
222
184
|
const halfArr = Array.from(finalHalf);
|
|
223
185
|
const info = {
|
|
@@ -233,28 +195,29 @@ function useCheckboxTree(opts) {
|
|
|
233
195
|
else onCheck(checkedArr, info);
|
|
234
196
|
}
|
|
235
197
|
};
|
|
236
|
-
$[
|
|
237
|
-
$[
|
|
238
|
-
$[
|
|
239
|
-
$[
|
|
240
|
-
$[
|
|
241
|
-
$[
|
|
242
|
-
$[
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
198
|
+
$[2] = checkedSet;
|
|
199
|
+
$[3] = index;
|
|
200
|
+
$[4] = isControlled;
|
|
201
|
+
$[5] = onCheck;
|
|
202
|
+
$[6] = setUncontrolledChecked;
|
|
203
|
+
$[7] = treeData;
|
|
204
|
+
$[8] = wantsObjectShape;
|
|
205
|
+
$[9] = t1;
|
|
206
|
+
} else t1 = $[9];
|
|
207
|
+
const toggle = useEvent(t1);
|
|
208
|
+
let t2;
|
|
209
|
+
if ($[10] !== checkedSet || $[11] !== halfCheckedSet || $[12] !== toggle) {
|
|
210
|
+
t2 = {
|
|
248
211
|
checkedSet,
|
|
249
212
|
halfCheckedSet,
|
|
250
213
|
toggle
|
|
251
214
|
};
|
|
252
|
-
$[
|
|
253
|
-
$[
|
|
254
|
-
$[
|
|
255
|
-
$[
|
|
256
|
-
} else
|
|
257
|
-
return
|
|
215
|
+
$[10] = checkedSet;
|
|
216
|
+
$[11] = halfCheckedSet;
|
|
217
|
+
$[12] = toggle;
|
|
218
|
+
$[13] = t2;
|
|
219
|
+
} else t2 = $[13];
|
|
220
|
+
return t2;
|
|
258
221
|
}
|
|
259
222
|
function _temp(n_0) {
|
|
260
223
|
return !!n_0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-checkbox-tree.js","names":["useMemo","useState","useEvent","Key","TreeIndex","CubeTreeNodeData","TreeOnCheckInfo","UseCheckboxTreeOptions","treeData","index","isCheckable","defaultCheckedKeys","checkedKeys","checked","halfChecked","onCheck","info","CheckboxTree","checkedSet","Set","halfCheckedSet","toggle","key","isNodeEligible","node","isDisabled","isCheckboxDisabled","deriveCheckedState","half","allChecked","anyChecked","anyEligible","childKeys","childrenOf","get","length","eligible","isChecked","has","childKey","child","byKey","r","delete","add","normalizeControlledChecked","controlled","Array","isArray","useCheckboxTree","opts","$","_c","t0","isControlled","wantsObjectShape","t1","uncontrolledChecked","setUncontrolledChecked","sourceChecked","t2","bb0","t3","Symbol","for","t4","t5","root","isCurrentlyChecked","willCheck","next","apply","n","value","ck","parentKey","parentOf","parent","childKeys_0","allEligibleChecked","ck_0","child_0","finalChecked","finalHalf","root_0","checkedArr","from","halfArr","checkedNodes","map","k","filter","_temp","halfCheckedKeys","n_0"],"sources":["../../../../src/components/content/Tree/use-checkbox-tree.ts"],"sourcesContent":["import { useMemo, useState } from 'react';\n\nimport { useEvent } from '../../../_internal/hooks';\n\nimport type { Key } from '@react-types/shared';\nimport type { TreeIndex } from './tree-index';\nimport type { CubeTreeNodeData, TreeOnCheckInfo } from './types';\n\nexport interface UseCheckboxTreeOptions {\n treeData: CubeTreeNodeData[];\n /**\n * Pre-built tree index, shared with `Tree.tsx` so that `treeData`\n * is walked exactly once per change rather than once per consumer.\n */\n index: TreeIndex;\n isCheckable: boolean;\n defaultCheckedKeys?: string[];\n /** Either an array (AntD's default) or `{ checked, halfChecked }`. */\n checkedKeys?: string[] | { checked: string[]; halfChecked?: string[] };\n onCheck?: (\n checked: Key[] | { checked: Key[]; halfChecked: Key[] },\n info: TreeOnCheckInfo,\n ) => void;\n}\n\nexport interface CheckboxTree {\n /** Set of keys that are fully checked. */\n checkedSet: Set<string>;\n /** Set of keys that are in the indeterminate (half-checked) state. */\n halfCheckedSet: Set<string>;\n /** Toggle a key, propagating to descendants and updating ancestors. */\n toggle: (key: string) => void;\n}\n\n/**\n * Returns whether a node should be checkable (i.e. clicking the\n * checkbox should affect it).\n *\n * Skips:\n * - explicitly disabled nodes (`isDisabled === true`)\n * - explicitly disabled checkboxes (`isCheckboxDisabled === true`)\n * - nodes that opted out via `isCheckable === false`\n */\nfunction isNodeEligible(node: CubeTreeNodeData | undefined): boolean {\n if (!node) return false;\n if (node.isDisabled) return false;\n if (node.isCheckboxDisabled) return false;\n if (node.isCheckable === false) return false;\n return true;\n}\n\n/**\n * Recursively walk a subtree bottom-up, deriving which nodes are fully\n * checked vs half-checked. Mutates `checked` and `half` in place.\n */\nfunction deriveCheckedState(\n node: CubeTreeNodeData,\n index: TreeIndex,\n checked: Set<string>,\n half: Set<string>,\n): { allChecked: boolean; anyChecked: boolean; anyEligible: boolean } {\n const childKeys = index.childrenOf.get(node.key) ?? [];\n\n if (childKeys.length === 0) {\n const eligible = isNodeEligible(node);\n const isChecked = checked.has(node.key);\n return {\n allChecked: !eligible || isChecked,\n anyChecked: isChecked,\n anyEligible: eligible,\n };\n }\n\n let allChecked = true;\n let anyChecked = false;\n let anyEligible = false;\n\n for (const childKey of childKeys) {\n const child = index.byKey.get(childKey);\n if (!child) continue;\n const r = deriveCheckedState(child, index, checked, half);\n if (r.anyEligible) anyEligible = true;\n if (!r.allChecked) allChecked = false;\n if (r.anyChecked) anyChecked = true;\n }\n\n const eligible = isNodeEligible(node);\n\n if (!anyEligible) {\n // No eligible descendants — this node behaves like a leaf for\n // checking purposes: its own checked state stands as-is.\n half.delete(node.key);\n } else if (allChecked) {\n checked.add(node.key);\n half.delete(node.key);\n } else if (anyChecked) {\n checked.delete(node.key);\n half.add(node.key);\n } else {\n checked.delete(node.key);\n half.delete(node.key);\n }\n\n return {\n allChecked: !eligible ? allChecked : checked.has(node.key) && allChecked,\n anyChecked: anyChecked || checked.has(node.key),\n anyEligible: anyEligible || eligible,\n };\n}\n\nfunction normalizeControlledChecked(\n controlled: UseCheckboxTreeOptions['checkedKeys'],\n): { checked: Set<string>; halfChecked: Set<string> } | null {\n if (controlled == null) return null;\n if (Array.isArray(controlled)) {\n return {\n checked: new Set(controlled),\n halfChecked: new Set(),\n };\n }\n return {\n checked: new Set(controlled.checked ?? []),\n halfChecked: new Set(controlled.halfChecked ?? []),\n };\n}\n\n/**\n * Local hook implementing AntD-style cascading checkbox state.\n *\n * - `checked` and `halfChecked` are always derived together from a single\n * `checked` set (the source of truth) so callers don't need to track\n * indeterminate keys themselves.\n * - When the consumer passes `checkedKeys` as `{ checked, halfChecked }`,\n * we keep the wire shape on the way out — same as AntD.\n * - Toggling a node propagates *down* (skipping ineligible descendants)\n * and recomputes ancestors *up* in a single pass.\n */\nexport function useCheckboxTree(opts: UseCheckboxTreeOptions): CheckboxTree {\n const {\n treeData,\n index,\n isCheckable,\n defaultCheckedKeys,\n checkedKeys,\n onCheck,\n } = opts;\n\n /**\n * Normalize the controlled `checkedKeys` prop into stable `Set` instances.\n * Memoized on the `checkedKeys` reference so unrelated re-renders don't\n * invalidate the derivation memo below — `normalizeControlledChecked`\n * allocates fresh `Set`s each call, which would otherwise force\n * `deriveCheckedState` to re-walk the entire tree on every render in\n * controlled mode.\n */\n const controlled = useMemo(\n () => normalizeControlledChecked(checkedKeys),\n [checkedKeys],\n );\n const isControlled = controlled != null;\n const wantsObjectShape = checkedKeys != null && !Array.isArray(checkedKeys);\n\n const [uncontrolledChecked, setUncontrolledChecked] = useState<Set<string>>(\n () => new Set(defaultCheckedKeys ?? []),\n );\n\n const sourceChecked = isControlled\n ? controlled!.checked\n : uncontrolledChecked;\n\n /**\n * Derive `{ checked, halfChecked }` from the source-of-truth `checked` set\n * by walking the tree bottom-up:\n *\n * - A parent is considered fully checked iff every eligible descendant\n * leaf is checked.\n * - A parent is half-checked iff at least one eligible descendant is\n * checked or half-checked, but not all.\n *\n * Ineligible nodes (disabled / opt-out) are ignored when computing the\n * parent's state — they neither force a parent into the unchecked nor\n * half state.\n */\n const { checkedSet, halfCheckedSet } = useMemo(() => {\n if (!isCheckable) {\n return {\n checkedSet: new Set<string>(),\n halfCheckedSet: new Set<string>(),\n };\n }\n\n /**\n * If the consumer passed the object shape (`{ checked, halfChecked }`),\n * they own the half-checked set and we use it as-is. With the array\n * shape we still need to derive `halfChecked` ourselves — the consumer\n * only provides `checked`, so parents should still light up\n * indeterminate when only some descendants are checked.\n */\n if (isControlled && wantsObjectShape) {\n return {\n checkedSet: new Set(sourceChecked),\n halfCheckedSet: new Set(controlled!.halfChecked),\n };\n }\n\n const checked = new Set(sourceChecked);\n const half = new Set<string>();\n\n for (const root of treeData) {\n deriveCheckedState(root, index, checked, half);\n }\n\n return { checkedSet: checked, halfCheckedSet: half };\n }, [\n isCheckable,\n isControlled,\n wantsObjectShape,\n sourceChecked,\n controlled,\n treeData,\n index,\n ]);\n\n const toggle = useEvent((key: string) => {\n const node = index.byKey.get(key);\n if (!node || !isNodeEligible(node)) return;\n\n const isCurrentlyChecked = checkedSet.has(key);\n const willCheck = !isCurrentlyChecked;\n\n /**\n * Seed from the derived `checkedSet`, not `sourceChecked`. The\n * source-of-truth set may only contain leaf keys (e.g. when\n * `defaultCheckedKeys` is leaf-only, or a consumer in controlled-array\n * mode passes only leaves). The ancestor walk below decides whether\n * each ancestor is fully checked by inspecting its direct children\n * via `next.has(ck)` — those children may themselves be inner nodes\n * whose \"fully checked\" status only exists in the derived set. Seeding\n * from `sourceChecked` causes a sibling subtree's parent key to be\n * missing from `next`, which would incorrectly drop the grandparent\n * from the stored state (the next render's `useMemo` self-corrects,\n * but the intermediate stored value violates the cascade invariant).\n */\n const next = new Set(checkedSet);\n\n const apply = (n: CubeTreeNodeData, value: boolean) => {\n if (!isNodeEligible(n)) return;\n if (value) next.add(n.key);\n else next.delete(n.key);\n const childKeys = index.childrenOf.get(n.key) ?? [];\n for (const ck of childKeys) {\n const child = index.byKey.get(ck);\n if (child) apply(child, value);\n }\n };\n\n apply(node, willCheck);\n\n /**\n * After the cascade, recompute ancestors so the public `checked` set\n * doesn't carry parent keys that should be half-checked instead.\n * Ancestors of `key` get visited bottom-up here.\n */\n let parentKey = index.parentOf.get(key);\n while (parentKey) {\n const parent = index.byKey.get(parentKey);\n if (!parent) break;\n const childKeys = index.childrenOf.get(parentKey) ?? [];\n let allEligibleChecked = true;\n let anyEligible = false;\n for (const ck of childKeys) {\n const child = index.byKey.get(ck);\n if (!child) continue;\n if (!isNodeEligible(child)) continue;\n anyEligible = true;\n if (!next.has(ck)) {\n allEligibleChecked = false;\n break;\n }\n }\n if (anyEligible && allEligibleChecked && isNodeEligible(parent)) {\n next.add(parentKey);\n } else {\n next.delete(parentKey);\n }\n parentKey = index.parentOf.get(parentKey);\n }\n\n if (!isControlled) {\n setUncontrolledChecked(next);\n }\n\n if (onCheck) {\n const finalChecked = new Set(next);\n const finalHalf = new Set<string>();\n\n for (const root of treeData) {\n deriveCheckedState(root, index, finalChecked, finalHalf);\n }\n\n const checkedArr = Array.from(finalChecked);\n const halfArr = Array.from(finalHalf);\n const checkedNodes: CubeTreeNodeData[] = checkedArr\n .map((k) => index.byKey.get(k))\n .filter((n): n is CubeTreeNodeData => !!n);\n\n const info: TreeOnCheckInfo = {\n checked: willCheck,\n node,\n checkedNodes,\n halfCheckedKeys: halfArr,\n };\n\n if (wantsObjectShape) {\n onCheck({ checked: checkedArr, halfChecked: halfArr }, info);\n } else {\n onCheck(checkedArr, info);\n }\n }\n });\n\n return { checkedSet, halfCheckedSet, toggle };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-checkbox-tree.js","names":["useState","useEvent","Key","TreeIndex","CubeTreeNodeData","TreeOnCheckInfo","UseCheckboxTreeOptions","treeData","index","isCheckable","defaultCheckedKeys","checkedKeys","checked","halfChecked","onCheck","info","CheckboxTree","checkedSet","Set","halfCheckedSet","toggle","key","isNodeEligible","node","isDisabled","isCheckboxDisabled","deriveCheckedState","half","allChecked","anyChecked","anyEligible","childKeys","childrenOf","get","length","eligible","isChecked","has","childKey","child","byKey","r","delete","add","normalizeControlledChecked","controlled","Array","isArray","resolveCheckedSets","sourceChecked","ownHalfChecked","Pick","root","useCheckboxTree","opts","$","_c","isControlled","wantsObjectShape","t0","uncontrolledChecked","setUncontrolledChecked","t1","isCurrentlyChecked","willCheck","next","apply","n","value","ck","parentKey","parentOf","parent","childKeys_0","allEligibleChecked","ck_0","child_0","finalChecked","finalHalf","checkedArr","from","halfArr","checkedNodes","map","k","filter","_temp","halfCheckedKeys","t2","n_0"],"sources":["../../../../src/components/content/Tree/use-checkbox-tree.ts"],"sourcesContent":["import { useState } from 'react';\n\nimport { useEvent } from '../../../_internal/hooks';\n\nimport type { Key } from '@react-types/shared';\nimport type { TreeIndex } from './tree-index';\nimport type { CubeTreeNodeData, TreeOnCheckInfo } from './types';\n\nexport interface UseCheckboxTreeOptions {\n treeData: CubeTreeNodeData[];\n /**\n * Pre-built tree index, shared with `Tree.tsx` so that `treeData`\n * is walked exactly once per change rather than once per consumer.\n */\n index: TreeIndex;\n isCheckable: boolean;\n defaultCheckedKeys?: string[];\n /** Either an array (AntD's default) or `{ checked, halfChecked }`. */\n checkedKeys?: string[] | { checked: string[]; halfChecked?: string[] };\n onCheck?: (\n checked: Key[] | { checked: Key[]; halfChecked: Key[] },\n info: TreeOnCheckInfo,\n ) => void;\n}\n\nexport interface CheckboxTree {\n /** Set of keys that are fully checked. */\n checkedSet: Set<string>;\n /** Set of keys that are in the indeterminate (half-checked) state. */\n halfCheckedSet: Set<string>;\n /** Toggle a key, propagating to descendants and updating ancestors. */\n toggle: (key: string) => void;\n}\n\n/**\n * Returns whether a node should be checkable (i.e. clicking the\n * checkbox should affect it).\n *\n * Skips:\n * - explicitly disabled nodes (`isDisabled === true`)\n * - explicitly disabled checkboxes (`isCheckboxDisabled === true`)\n * - nodes that opted out via `isCheckable === false`\n */\nfunction isNodeEligible(node: CubeTreeNodeData | undefined): boolean {\n if (!node) return false;\n if (node.isDisabled) return false;\n if (node.isCheckboxDisabled) return false;\n if (node.isCheckable === false) return false;\n return true;\n}\n\n/**\n * Recursively walk a subtree bottom-up, deriving which nodes are fully\n * checked vs half-checked. Mutates `checked` and `half` in place.\n */\nfunction deriveCheckedState(\n node: CubeTreeNodeData,\n index: TreeIndex,\n checked: Set<string>,\n half: Set<string>,\n): { allChecked: boolean; anyChecked: boolean; anyEligible: boolean } {\n const childKeys = index.childrenOf.get(node.key) ?? [];\n\n if (childKeys.length === 0) {\n const eligible = isNodeEligible(node);\n const isChecked = checked.has(node.key);\n return {\n allChecked: !eligible || isChecked,\n anyChecked: isChecked,\n anyEligible: eligible,\n };\n }\n\n let allChecked = true;\n let anyChecked = false;\n let anyEligible = false;\n\n for (const childKey of childKeys) {\n const child = index.byKey.get(childKey);\n if (!child) continue;\n const r = deriveCheckedState(child, index, checked, half);\n if (r.anyEligible) anyEligible = true;\n if (!r.allChecked) allChecked = false;\n if (r.anyChecked) anyChecked = true;\n }\n\n const eligible = isNodeEligible(node);\n\n if (!anyEligible) {\n // No eligible descendants — this node behaves like a leaf for\n // checking purposes: its own checked state stands as-is.\n half.delete(node.key);\n } else if (allChecked) {\n checked.add(node.key);\n half.delete(node.key);\n } else if (anyChecked) {\n checked.delete(node.key);\n half.add(node.key);\n } else {\n checked.delete(node.key);\n half.delete(node.key);\n }\n\n return {\n allChecked: !eligible ? allChecked : checked.has(node.key) && allChecked,\n anyChecked: anyChecked || checked.has(node.key),\n anyEligible: anyEligible || eligible,\n };\n}\n\nfunction normalizeControlledChecked(\n controlled: UseCheckboxTreeOptions['checkedKeys'],\n): { checked: Set<string>; halfChecked: Set<string> } | null {\n if (controlled == null) return null;\n if (Array.isArray(controlled)) {\n return {\n checked: new Set(controlled),\n halfChecked: new Set(),\n };\n }\n return {\n checked: new Set(controlled.checked ?? []),\n halfChecked: new Set(controlled.halfChecked ?? []),\n };\n}\n\n/**\n * Derive `{ checked, halfChecked }` from the source-of-truth `checked` set\n * by walking the tree bottom-up:\n *\n * - A parent is considered fully checked iff every eligible descendant\n * leaf is checked.\n * - A parent is half-checked iff at least one eligible descendant is\n * checked or half-checked, but not all.\n *\n * Ineligible nodes (disabled / opt-out) are ignored when computing the\n * parent's state — they neither force a parent into the unchecked nor\n * half state.\n */\nfunction resolveCheckedSets({\n isCheckable,\n sourceChecked,\n ownHalfChecked,\n treeData,\n index,\n}: {\n isCheckable: boolean;\n sourceChecked: Set<string>;\n /**\n * If the consumer passed the object shape (`{ checked, halfChecked }`),\n * they own the half-checked set and we use it as-is. With the array\n * shape we still need to derive `halfChecked` ourselves — the consumer\n * only provides `checked`, so parents should still light up\n * indeterminate when only some descendants are checked.\n */\n ownHalfChecked: Set<string> | null;\n treeData: CubeTreeNodeData[];\n index: TreeIndex;\n}): Pick<CheckboxTree, 'checkedSet' | 'halfCheckedSet'> {\n if (!isCheckable) {\n return {\n checkedSet: new Set<string>(),\n halfCheckedSet: new Set<string>(),\n };\n }\n\n if (ownHalfChecked) {\n return {\n checkedSet: new Set(sourceChecked),\n halfCheckedSet: new Set(ownHalfChecked),\n };\n }\n\n const checked = new Set(sourceChecked);\n const half = new Set<string>();\n\n for (const root of treeData) {\n deriveCheckedState(root, index, checked, half);\n }\n\n return { checkedSet: checked, halfCheckedSet: half };\n}\n\n/**\n * Local hook implementing AntD-style cascading checkbox state.\n *\n * - `checked` and `halfChecked` are always derived together from a single\n * `checked` set (the source of truth) so callers don't need to track\n * indeterminate keys themselves.\n * - When the consumer passes `checkedKeys` as `{ checked, halfChecked }`,\n * we keep the wire shape on the way out — same as AntD.\n * - Toggling a node propagates *down* (skipping ineligible descendants)\n * and recomputes ancestors *up* in a single pass.\n */\nexport function useCheckboxTree(opts: UseCheckboxTreeOptions): CheckboxTree {\n const {\n treeData,\n index,\n isCheckable,\n defaultCheckedKeys,\n checkedKeys,\n onCheck,\n } = opts;\n\n /** Normalize the controlled `checkedKeys` prop into `Set` instances. */\n const controlled = normalizeControlledChecked(checkedKeys);\n const isControlled = controlled != null;\n const wantsObjectShape = checkedKeys != null && !Array.isArray(checkedKeys);\n\n const [uncontrolledChecked, setUncontrolledChecked] = useState<Set<string>>(\n () => new Set(defaultCheckedKeys ?? []),\n );\n\n const sourceChecked = isControlled\n ? controlled!.checked\n : uncontrolledChecked;\n\n const { checkedSet, halfCheckedSet } = resolveCheckedSets({\n isCheckable,\n sourceChecked,\n ownHalfChecked:\n isControlled && wantsObjectShape ? controlled!.halfChecked : null,\n treeData,\n index,\n });\n\n const toggle = useEvent((key: string) => {\n const node = index.byKey.get(key);\n if (!node || !isNodeEligible(node)) return;\n\n const isCurrentlyChecked = checkedSet.has(key);\n const willCheck = !isCurrentlyChecked;\n\n /**\n * Seed from the derived `checkedSet`, not `sourceChecked`. The\n * source-of-truth set may only contain leaf keys (e.g. when\n * `defaultCheckedKeys` is leaf-only, or a consumer in controlled-array\n * mode passes only leaves). The ancestor walk below decides whether\n * each ancestor is fully checked by inspecting its direct children\n * via `next.has(ck)` — those children may themselves be inner nodes\n * whose \"fully checked\" status only exists in the derived set. Seeding\n * from `sourceChecked` causes a sibling subtree's parent key to be\n * missing from `next`, which would incorrectly drop the grandparent\n * from the stored state (the next render's derivation self-corrects,\n * but the intermediate stored value violates the cascade invariant).\n */\n const next = new Set(checkedSet);\n\n const apply = (n: CubeTreeNodeData, value: boolean) => {\n if (!isNodeEligible(n)) return;\n if (value) next.add(n.key);\n else next.delete(n.key);\n const childKeys = index.childrenOf.get(n.key) ?? [];\n for (const ck of childKeys) {\n const child = index.byKey.get(ck);\n if (child) apply(child, value);\n }\n };\n\n apply(node, willCheck);\n\n /**\n * After the cascade, recompute ancestors so the public `checked` set\n * doesn't carry parent keys that should be half-checked instead.\n * Ancestors of `key` get visited bottom-up here.\n */\n let parentKey = index.parentOf.get(key);\n while (parentKey) {\n const parent = index.byKey.get(parentKey);\n if (!parent) break;\n const childKeys = index.childrenOf.get(parentKey) ?? [];\n let allEligibleChecked = true;\n let anyEligible = false;\n for (const ck of childKeys) {\n const child = index.byKey.get(ck);\n if (!child) continue;\n if (!isNodeEligible(child)) continue;\n anyEligible = true;\n if (!next.has(ck)) {\n allEligibleChecked = false;\n break;\n }\n }\n if (anyEligible && allEligibleChecked && isNodeEligible(parent)) {\n next.add(parentKey);\n } else {\n next.delete(parentKey);\n }\n parentKey = index.parentOf.get(parentKey);\n }\n\n if (!isControlled) {\n setUncontrolledChecked(next);\n }\n\n if (onCheck) {\n const finalChecked = new Set(next);\n const finalHalf = new Set<string>();\n\n for (const root of treeData) {\n deriveCheckedState(root, index, finalChecked, finalHalf);\n }\n\n const checkedArr = Array.from(finalChecked);\n const halfArr = Array.from(finalHalf);\n const checkedNodes: CubeTreeNodeData[] = checkedArr\n .map((k) => index.byKey.get(k))\n .filter((n): n is CubeTreeNodeData => !!n);\n\n const info: TreeOnCheckInfo = {\n checked: willCheck,\n node,\n checkedNodes,\n halfCheckedKeys: halfArr,\n };\n\n if (wantsObjectShape) {\n onCheck({ checked: checkedArr, halfChecked: halfArr }, info);\n } else {\n onCheck(checkedArr, info);\n }\n }\n });\n\n return { checkedSet, halfCheckedSet, toggle };\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-c02e70f | Cube Dev Team */
|
|
2
2
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
3
3
|
import { isDevEnvOrTest } from "../../../utils/is-dev-env.js";
|
|
4
4
|
import { c } from "react-compiler-runtime";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-c02e70f | Cube Dev Team */
|
|
2
2
|
import { TooltipProvider } from "../overlays/Tooltip/TooltipProvider.js";
|
|
3
3
|
import { c } from "react-compiler-runtime";
|
|
4
4
|
import { useEffect, useRef, useState } from "react";
|
|
@@ -34,30 +34,54 @@ function queueOverflowCheck(check) {
|
|
|
34
34
|
if (!pendingOverflowChecks.size) queueMicrotask(runOverflowChecks);
|
|
35
35
|
pendingOverflowChecks.add(check);
|
|
36
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Whether the tooltip detects label overflow on its own. Overflow detection
|
|
39
|
+
* measures text, so it needs a string label.
|
|
40
|
+
*/
|
|
41
|
+
function isAutoTooltip(tooltip, children) {
|
|
42
|
+
if (typeof children !== "string") return false;
|
|
43
|
+
if (tooltip === true) return true;
|
|
44
|
+
if (typeof tooltip === "object") {
|
|
45
|
+
if (tooltip.title) return tooltip.auto === true;
|
|
46
|
+
return tooltip.auto !== void 0 ? !!tooltip.auto : true;
|
|
47
|
+
}
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* The `TooltipProvider` props a tooltip resolves to, or `null` when no tooltip
|
|
52
|
+
* is rendered at all.
|
|
53
|
+
*/
|
|
54
|
+
function resolveTooltip({ tooltip, children, labelProps, isDynamicLabel, isLabelOverflowed }) {
|
|
55
|
+
if (!tooltip) return null;
|
|
56
|
+
if (typeof tooltip === "string") return { title: tooltip };
|
|
57
|
+
const hasAutoContent = !!(children || labelProps) && (isLabelOverflowed || isDynamicLabel);
|
|
58
|
+
if (tooltip === true) {
|
|
59
|
+
if (!hasAutoContent) return null;
|
|
60
|
+
return {
|
|
61
|
+
title: children,
|
|
62
|
+
isDisabled: !isLabelOverflowed && isDynamicLabel
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
const { auto, ...tooltipProps } = tooltip;
|
|
66
|
+
if (tooltipProps.title && auto !== true) return tooltipProps;
|
|
67
|
+
if (!hasAutoContent) return null;
|
|
68
|
+
return {
|
|
69
|
+
title: tooltipProps.title ?? children,
|
|
70
|
+
isDisabled: !isLabelOverflowed && isDynamicLabel && tooltipProps.isDisabled !== true,
|
|
71
|
+
...tooltipProps
|
|
72
|
+
};
|
|
73
|
+
}
|
|
37
74
|
function useAutoTooltip(t0) {
|
|
38
|
-
const $ = c(
|
|
75
|
+
const $ = c(33);
|
|
39
76
|
const { tooltip, children, labelProps, isDynamicLabel: t1, labelRef: labelRefOption } = t0;
|
|
40
77
|
const isDynamicLabel = t1 === void 0 ? false : t1;
|
|
41
78
|
let t2;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
t2 = true;
|
|
49
|
-
break bb0;
|
|
50
|
-
}
|
|
51
|
-
if (typeof tooltip === "object") {
|
|
52
|
-
if (tooltip.title) {
|
|
53
|
-
t2 = tooltip.auto === true;
|
|
54
|
-
break bb0;
|
|
55
|
-
}
|
|
56
|
-
t2 = !!(tooltip.auto !== void 0 ? tooltip.auto : true);
|
|
57
|
-
break bb0;
|
|
58
|
-
}
|
|
59
|
-
t2 = false;
|
|
60
|
-
}
|
|
79
|
+
if ($[0] !== children || $[1] !== tooltip) {
|
|
80
|
+
t2 = isAutoTooltip(tooltip, children);
|
|
81
|
+
$[0] = children;
|
|
82
|
+
$[1] = tooltip;
|
|
83
|
+
$[2] = t2;
|
|
84
|
+
} else t2 = $[2];
|
|
61
85
|
const isAutoTooltipEnabled = t2;
|
|
62
86
|
const externalLabelRef = labelProps?.ref;
|
|
63
87
|
const [isLabelOverflowed, setIsLabelOverflowed] = useState(false);
|
|
@@ -65,36 +89,36 @@ function useAutoTooltip(t0) {
|
|
|
65
89
|
const resizeObserverRef = useRef(null);
|
|
66
90
|
const verdictRef = useRef(false);
|
|
67
91
|
let t3;
|
|
68
|
-
if ($[
|
|
92
|
+
if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
|
|
69
93
|
t3 = (value) => {
|
|
70
94
|
if (verdictRef.current === value) return;
|
|
71
95
|
verdictRef.current = value;
|
|
72
96
|
setIsLabelOverflowed(value);
|
|
73
97
|
};
|
|
74
|
-
$[
|
|
75
|
-
} else t3 = $[
|
|
98
|
+
$[3] = t3;
|
|
99
|
+
} else t3 = $[3];
|
|
76
100
|
const setVerdict = t3;
|
|
77
101
|
let t4;
|
|
78
|
-
if ($[
|
|
102
|
+
if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
|
|
79
103
|
t4 = () => {
|
|
80
104
|
const label = elementRef.current;
|
|
81
105
|
if (!label) return;
|
|
82
106
|
setVerdict(label.scrollWidth > label.clientWidth);
|
|
83
107
|
};
|
|
84
|
-
$[
|
|
85
|
-
} else t4 = $[
|
|
108
|
+
$[4] = t4;
|
|
109
|
+
} else t4 = $[4];
|
|
86
110
|
const checkLabelOverflow = t4;
|
|
87
111
|
let t5;
|
|
88
|
-
if ($[
|
|
112
|
+
if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
|
|
89
113
|
t5 = () => {
|
|
90
114
|
queueOverflowCheck(checkLabelOverflow);
|
|
91
115
|
};
|
|
92
|
-
$[
|
|
93
|
-
} else t5 = $[
|
|
116
|
+
$[5] = t5;
|
|
117
|
+
} else t5 = $[5];
|
|
94
118
|
const scheduleLabelOverflowCheck = t5;
|
|
95
119
|
let t6;
|
|
96
120
|
let t7;
|
|
97
|
-
if ($[
|
|
121
|
+
if ($[6] !== isAutoTooltipEnabled) {
|
|
98
122
|
t6 = () => {
|
|
99
123
|
if (isAutoTooltipEnabled) {
|
|
100
124
|
scheduleLabelOverflowCheck();
|
|
@@ -107,16 +131,16 @@ function useAutoTooltip(t0) {
|
|
|
107
131
|
scheduleLabelOverflowCheck,
|
|
108
132
|
setVerdict
|
|
109
133
|
];
|
|
110
|
-
$[
|
|
111
|
-
$[
|
|
112
|
-
$[
|
|
134
|
+
$[6] = isAutoTooltipEnabled;
|
|
135
|
+
$[7] = t6;
|
|
136
|
+
$[8] = t7;
|
|
113
137
|
} else {
|
|
114
|
-
t6 = $[
|
|
115
|
-
t7 = $[
|
|
138
|
+
t6 = $[7];
|
|
139
|
+
t7 = $[8];
|
|
116
140
|
}
|
|
117
141
|
useEffect(t6, t7);
|
|
118
142
|
let t8;
|
|
119
|
-
if ($[
|
|
143
|
+
if ($[9] !== externalLabelRef || $[10] !== isAutoTooltipEnabled || $[11] !== labelRefOption) {
|
|
120
144
|
t8 = (element) => {
|
|
121
145
|
assignRef(externalLabelRef, element);
|
|
122
146
|
assignRef(labelRefOption, element);
|
|
@@ -139,101 +163,45 @@ function useAutoTooltip(t0) {
|
|
|
139
163
|
resizeObserverRef.current = obs;
|
|
140
164
|
obs.observe(element);
|
|
141
165
|
};
|
|
142
|
-
$[
|
|
143
|
-
$[
|
|
144
|
-
$[
|
|
145
|
-
$[
|
|
146
|
-
} else t8 = $[
|
|
166
|
+
$[9] = externalLabelRef;
|
|
167
|
+
$[10] = isAutoTooltipEnabled;
|
|
168
|
+
$[11] = labelRefOption;
|
|
169
|
+
$[12] = t8;
|
|
170
|
+
} else t8 = $[12];
|
|
147
171
|
const handleLabelElementRef = t8;
|
|
148
172
|
let t9;
|
|
149
|
-
if ($[
|
|
173
|
+
if ($[13] !== labelProps) {
|
|
150
174
|
t9 = labelProps || {};
|
|
151
|
-
$[
|
|
152
|
-
$[
|
|
153
|
-
} else t9 = $[
|
|
154
|
-
let
|
|
155
|
-
if ($[
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
$[
|
|
159
|
-
$[
|
|
160
|
-
} else
|
|
161
|
-
const finalLabelProps = props;
|
|
175
|
+
$[13] = labelProps;
|
|
176
|
+
$[14] = t9;
|
|
177
|
+
} else t9 = $[14];
|
|
178
|
+
let finalLabelProps;
|
|
179
|
+
if ($[15] !== t9) {
|
|
180
|
+
const { ref: _labelPropsRef, ...t10 } = t9;
|
|
181
|
+
finalLabelProps = t10;
|
|
182
|
+
$[15] = t9;
|
|
183
|
+
$[16] = finalLabelProps;
|
|
184
|
+
} else finalLabelProps = $[16];
|
|
162
185
|
let t10;
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
const hasAutoContent = !!(children || labelProps) && (isLabelOverflowed || isDynamicLabel);
|
|
179
|
-
if (tooltip === true) {
|
|
180
|
-
if (!hasAutoContent) {
|
|
181
|
-
t10 = null;
|
|
182
|
-
break bb1;
|
|
183
|
-
}
|
|
184
|
-
const t11 = !isLabelOverflowed && isDynamicLabel;
|
|
185
|
-
let t12;
|
|
186
|
-
if ($[16] !== children || $[17] !== t11) {
|
|
187
|
-
t12 = {
|
|
188
|
-
title: children,
|
|
189
|
-
isDisabled: t11
|
|
190
|
-
};
|
|
191
|
-
$[16] = children;
|
|
192
|
-
$[17] = t11;
|
|
193
|
-
$[18] = t12;
|
|
194
|
-
} else t12 = $[18];
|
|
195
|
-
t10 = t12;
|
|
196
|
-
break bb1;
|
|
197
|
-
}
|
|
198
|
-
let auto;
|
|
199
|
-
let tooltipProps;
|
|
200
|
-
if ($[19] !== tooltip) {
|
|
201
|
-
({auto, ...tooltipProps} = tooltip);
|
|
202
|
-
$[19] = tooltip;
|
|
203
|
-
$[20] = auto;
|
|
204
|
-
$[21] = tooltipProps;
|
|
205
|
-
} else {
|
|
206
|
-
auto = $[20];
|
|
207
|
-
tooltipProps = $[21];
|
|
208
|
-
}
|
|
209
|
-
if (tooltipProps.title && auto !== true) {
|
|
210
|
-
t10 = tooltipProps;
|
|
211
|
-
break bb1;
|
|
212
|
-
}
|
|
213
|
-
if (!hasAutoContent) {
|
|
214
|
-
t10 = null;
|
|
215
|
-
break bb1;
|
|
216
|
-
}
|
|
217
|
-
const t11 = tooltipProps.title ?? children;
|
|
218
|
-
const t12 = !isLabelOverflowed && isDynamicLabel && tooltipProps.isDisabled !== true;
|
|
219
|
-
let t13;
|
|
220
|
-
if ($[22] !== t11 || $[23] !== t12 || $[24] !== tooltipProps) {
|
|
221
|
-
t13 = {
|
|
222
|
-
title: t11,
|
|
223
|
-
isDisabled: t12,
|
|
224
|
-
...tooltipProps
|
|
225
|
-
};
|
|
226
|
-
$[22] = t11;
|
|
227
|
-
$[23] = t12;
|
|
228
|
-
$[24] = tooltipProps;
|
|
229
|
-
$[25] = t13;
|
|
230
|
-
} else t13 = $[25];
|
|
231
|
-
t10 = t13;
|
|
232
|
-
}
|
|
186
|
+
if ($[17] !== children || $[18] !== isDynamicLabel || $[19] !== isLabelOverflowed || $[20] !== labelProps || $[21] !== tooltip) {
|
|
187
|
+
t10 = resolveTooltip({
|
|
188
|
+
tooltip,
|
|
189
|
+
children,
|
|
190
|
+
labelProps,
|
|
191
|
+
isDynamicLabel,
|
|
192
|
+
isLabelOverflowed
|
|
193
|
+
});
|
|
194
|
+
$[17] = children;
|
|
195
|
+
$[18] = isDynamicLabel;
|
|
196
|
+
$[19] = isLabelOverflowed;
|
|
197
|
+
$[20] = labelProps;
|
|
198
|
+
$[21] = tooltip;
|
|
199
|
+
$[22] = t10;
|
|
200
|
+
} else t10 = $[22];
|
|
233
201
|
const resolvedTooltip = t10;
|
|
234
202
|
const isTooltipActive = !!resolvedTooltip && resolvedTooltip.isDisabled !== true;
|
|
235
203
|
let t11;
|
|
236
|
-
if ($[
|
|
204
|
+
if ($[23] !== resolvedTooltip) {
|
|
237
205
|
t11 = (renderElement, defaultTooltipPlacement) => {
|
|
238
206
|
if (!resolvedTooltip) return renderElement();
|
|
239
207
|
return /* @__PURE__ */ jsx(TooltipProvider, {
|
|
@@ -242,13 +210,13 @@ function useAutoTooltip(t0) {
|
|
|
242
210
|
children: (triggerProps, ref) => renderElement(triggerProps, ref)
|
|
243
211
|
});
|
|
244
212
|
};
|
|
245
|
-
$[
|
|
246
|
-
$[
|
|
247
|
-
} else t11 = $[
|
|
213
|
+
$[23] = resolvedTooltip;
|
|
214
|
+
$[24] = t11;
|
|
215
|
+
} else t11 = $[24];
|
|
248
216
|
const renderWithTooltip = t11;
|
|
249
217
|
const t12 = !!tooltip;
|
|
250
218
|
let t13;
|
|
251
|
-
if ($[
|
|
219
|
+
if ($[25] !== finalLabelProps || $[26] !== handleLabelElementRef || $[27] !== isAutoTooltipEnabled || $[28] !== isLabelOverflowed || $[29] !== isTooltipActive || $[30] !== renderWithTooltip || $[31] !== t12) {
|
|
252
220
|
t13 = {
|
|
253
221
|
labelRef: handleLabelElementRef,
|
|
254
222
|
labelProps: finalLabelProps,
|
|
@@ -258,15 +226,15 @@ function useAutoTooltip(t0) {
|
|
|
258
226
|
isTooltipActive,
|
|
259
227
|
renderWithTooltip
|
|
260
228
|
};
|
|
261
|
-
$[
|
|
262
|
-
$[
|
|
263
|
-
$[
|
|
264
|
-
$[
|
|
265
|
-
$[
|
|
266
|
-
$[
|
|
267
|
-
$[
|
|
268
|
-
$[
|
|
269
|
-
} else t13 = $[
|
|
229
|
+
$[25] = finalLabelProps;
|
|
230
|
+
$[26] = handleLabelElementRef;
|
|
231
|
+
$[27] = isAutoTooltipEnabled;
|
|
232
|
+
$[28] = isLabelOverflowed;
|
|
233
|
+
$[29] = isTooltipActive;
|
|
234
|
+
$[30] = renderWithTooltip;
|
|
235
|
+
$[31] = t12;
|
|
236
|
+
$[32] = t13;
|
|
237
|
+
} else t13 = $[32];
|
|
270
238
|
return t13;
|
|
271
239
|
}
|
|
272
240
|
|