@cube-dev/ui-kit 0.0.0-canary-100fa6b → 0.0.0-canary-370af60
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/_internal/hooks/use-chained-callback.js +1 -1
- 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 +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/Button/Button.d.ts +4 -2
- package/dist/components/actions/Button/Button.js +8 -5
- package/dist/components/actions/Button/Button.js.map +1 -1
- package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
- package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
- package/dist/components/actions/ButtonSplit/context.js +1 -1
- package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
- package/dist/components/actions/CommandMenu/styled.js +1 -1
- package/dist/components/actions/ItemAction/ItemAction.d.ts +2 -2
- package/dist/components/actions/ItemAction/ItemAction.js +8 -5
- package/dist/components/actions/ItemAction/ItemAction.js.map +1 -1
- package/dist/components/actions/ItemActionContext.js +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 +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/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/Disclosure/Disclosure.js +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 +1 -1
- package/dist/components/content/Item/Item.d.ts +2 -2
- package/dist/components/content/Item/Item.js +8 -10
- package/dist/components/content/Item/Item.js.map +1 -1
- package/dist/components/content/ItemBadge/ItemBadge.d.ts +2 -2
- package/dist/components/content/ItemBadge/ItemBadge.js +8 -5
- 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 +1 -1
- package/dist/components/content/Layout/LayoutContent.js +1 -1
- package/dist/components/content/Layout/LayoutContext.js +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/LayoutGrid.js +1 -1
- package/dist/components/content/Layout/LayoutHeader.js +1 -1
- package/dist/components/content/Layout/LayoutPane.js +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/LayoutToolbar.js +1 -1
- package/dist/components/content/Layout/hooks/useTinyScrollbar.js +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 +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 +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 +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 +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.d.ts +2 -1
- package/dist/components/data/TableBase/styled.js +1 -1
- package/dist/components/data/TableBase/types.js +1 -1
- package/dist/components/data/TableBase/use-cell-selection.d.ts +1 -0
- package/dist/components/data/TableBase/use-cell-selection.js +0 -0
- package/dist/components/data/TableBase/use-column-order.js +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 +1 -1
- package/dist/components/data/TableBase/use-table-sorts.js +1 -1
- package/dist/components/data/TableBase/use-table-storage.js +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/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/ListBoxPopover/ListBoxPopover.js +1 -1
- package/dist/components/fields/ListBoxPopover/index.d.ts +1 -0
- package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
- package/dist/components/fields/ListBoxPopover/useCompositeFocus.d.ts +2 -0
- package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +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/Picker/Picker.js +1 -1
- package/dist/components/fields/RadioGroup/Radio.js +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/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/SliderTrack.js +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/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/TextInputMapper/TextInputMapper.js +1 -1
- package/dist/components/fields/color/ColorPanel.js +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 +1 -1
- package/dist/components/form/Form/Form.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/index.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/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.d.ts +5 -30
- package/dist/components/layout/Board/Board.js +5 -11
- package/dist/components/layout/Board/Board.js.map +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.d.ts +1 -16
- package/dist/components/layout/Board/Widget.js +2 -3
- package/dist/components/layout/Board/Widget.js.map +1 -1
- package/dist/components/layout/Board/WidgetHost.js +13 -70
- package/dist/components/layout/Board/WidgetHost.js.map +1 -1
- package/dist/components/layout/Board/board-context.js +5 -5
- package/dist/components/layout/Board/board-context.js.map +1 -1
- package/dist/components/layout/Board/board-store.d.ts +0 -1
- package/dist/components/layout/Board/board-store.js +2 -2
- package/dist/components/layout/Board/board-store.js.map +1 -1
- package/dist/components/layout/Board/grid-core/calculate.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 +2 -12
- package/dist/components/layout/Board/grid-core/layout.js.map +1 -1
- package/dist/components/layout/Board/grid-core/sort.js +1 -1
- package/dist/components/layout/Board/grid-core/types.d.ts +1 -17
- package/dist/components/layout/Board/index.d.ts +2 -2
- package/dist/components/layout/Board/index.js +1 -1
- package/dist/components/layout/Board/index.js.map +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 +6 -53
- package/dist/components/layout/Board/use-board-registry.js.map +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 +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 +1 -1
- package/dist/components/navigation/Pagination/use-pagination.js +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/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/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-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/CalendarHeader.js +1 -1
- package/dist/components/other/Calendar/CalendarPanel.js +1 -1
- package/dist/components/other/Calendar/PeriodCalendar.js +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/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/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/context.js +1 -1
- package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
- package/dist/components/overlays/Modal/Modal.d.ts +2 -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.d.ts +1 -0
- 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/Modal/types.d.ts +1 -0
- 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.d.ts +2 -0
- 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 +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 +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/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/portal/Portal.js +1 -1
- package/dist/components/portal/PortalProvider.d.ts +2 -0
- package/dist/components/portal/PortalProvider.js +1 -1
- package/dist/components/portal/index.d.ts +1 -0
- 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.d.ts +1 -1
- package/dist/data/item-themes.js +122 -46
- package/dist/data/item-themes.js.map +1 -1
- package/dist/data/themes.js +1 -1
- package/dist/eslint-plugin/defaults.generated.js +7 -17
- package/dist/eslint-plugin/defaults.generated.js.map +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/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.d.ts +3 -3
- package/dist/index.js +1 -1
- package/dist/index.js.map +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/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/index.js +1 -1
- package/dist/tokens/layout.js +1 -1
- package/dist/tokens/lazy-styles.js +1 -1
- package/dist/tokens/palette-config.js +1 -1
- package/dist/tokens/palette.js +6 -1
- package/dist/tokens/palette.js.map +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/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/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/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/useLayoutEffect.js +1 -1
- package/dist/utils/react/useLocalStorage.js +1 -1
- package/dist/utils/react/useMergeStyles.js +1 -1
- package/dist/utils/react/usePopoverSync.js +1 -1
- package/dist/utils/react/useQaProps.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/Theming.md +1 -1
- package/docs/Usage.md +1 -0
- package/docs/components/actions/Button.md +9 -3
- package/docs/components/actions/ItemAction.md +3 -3
- package/docs/components/content/Item.md +10 -10
- package/docs/components/content/ItemBadge.md +2 -2
- package/docs/components/layout/Board.md +2 -19
- package/package.json +1 -1
- package/dist/components/layout/Board/grid-core/collision-modes.js +0 -168
- package/dist/components/layout/Board/grid-core/collision-modes.js.map +0 -1
|
@@ -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-370af60 | Cube Dev Team */
|
|
2
2
|
import { useLayoutEffect as useLayoutEffect$1 } from "./useLayoutEffect.js";
|
|
3
3
|
import { useEffect, useRef, useState } from "react";
|
|
4
4
|
import { useSSRSafeId } from "@react-aria/ssr";
|
|
@@ -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-370af60 | Cube Dev Team */
|
|
2
2
|
import { useEvent } from "../../_internal/hooks/use-event.js";
|
|
3
3
|
import { useCallback, useSyncExternalStore } from "react";
|
|
4
4
|
|
|
@@ -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-370af60 | Cube Dev Team */
|
|
2
2
|
import { EventBusContext, useEventBus } from "./useEventBus.js";
|
|
3
3
|
import { useCallback, useContext, useEffect, useRef } from "react";
|
|
4
4
|
|
package/dist/utils/selection.js
CHANGED
package/dist/utils/styles.js
CHANGED
package/dist/utils/tree.js
CHANGED
|
@@ -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-370af60 | Cube Dev Team */
|
|
2
2
|
//#region src/utils/tree.ts
|
|
3
3
|
function toFlatTree(tree, includingFolders) {
|
|
4
4
|
return tree.reduce((result, node) => {
|
package/dist/utils/warnings.js
CHANGED
package/dist/version.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-370af60 | Cube Dev Team */
|
|
2
2
|
//#region src/version.ts
|
|
3
|
-
const VERSION = "0.0.0-canary-
|
|
3
|
+
const VERSION = "0.0.0-canary-370af60";
|
|
4
4
|
const TASTY_VERSION = "3.0.2";
|
|
5
5
|
if (typeof window !== "undefined") {
|
|
6
6
|
const version = VERSION;
|
package/docs/Theming.md
CHANGED
|
@@ -410,7 +410,7 @@ The **contrast level** needs no on/off switch: level `0` and `'auto'` are
|
|
|
410
410
|
output-identical, tier included, so the slider at rest _is_ the shipped palette.
|
|
411
411
|
|
|
412
412
|
Status themes are four chips on one line rather than eight sliders. Each chip is a
|
|
413
|
-
`
|
|
413
|
+
`theme="current"` `Button` colored by its own theme with a
|
|
414
414
|
[ColorSwatch](./components/fields/ColorSwatch.md) of its accent, so the group answers
|
|
415
415
|
the question you actually have — do these four still read as four different
|
|
416
416
|
things — at a glance; press one to open its hue and saturation. The hue is not
|
package/docs/Usage.md
CHANGED
|
@@ -306,6 +306,7 @@ Component themes are set via the `theme` prop or `theme=name` modifier:
|
|
|
306
306
|
| `success` | Success / positive states |
|
|
307
307
|
| `warning` | Warning / caution states |
|
|
308
308
|
| `note` | Informational / note states |
|
|
309
|
+
| `current` | No palette of its own — every color is mixed from the inherited text color (`#current`), so the component adopts whatever its container paints with. Supported by `Button`, `Item` (and `ItemButton`, `Item.Action`, `ItemBadge`) |
|
|
309
310
|
|
|
310
311
|
## Recipes
|
|
311
312
|
|
|
@@ -15,8 +15,8 @@ A versatile action component that triggers commands and navigates users.
|
|
|
15
15
|
|
|
16
16
|
## Properties
|
|
17
17
|
|
|
18
|
-
- **`type`** `'primary' | 'outline' | 'outline-2' | 'clear' | 'link'
|
|
19
|
-
- **`theme`** `'default' | 'danger' | 'success' | 'warning' | 'note' | 'special'` (default: `default`) — Semantic colour palette theme
|
|
18
|
+
- **`type`** `'primary' | 'outline' | 'outline-2' | 'clear' | 'link'` (default: `outline`) — Visual style variant of the button (`outline-2` is identical to `outline` but uses `#surface-3` as the base fill; not available for the `special` theme)
|
|
19
|
+
- **`theme`** `'default' | 'danger' | 'success' | 'warning' | 'note' | 'special' | 'current'` (default: `default`) — Semantic colour palette theme. `current` is not a brand palette: it mixes every color from the inherited text color, so the button adopts the color of whatever container it sits in
|
|
20
20
|
- **`size`** `'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'inline' | number` (default: `medium`) — Button size. Use `'inline'` for link-type buttons or a number/string for custom sizes (e.g. `64` or `'8x'`)
|
|
21
21
|
- **`icon`** — Icon rendered before the content. Can be: ReactNode, `true` (empty slot), or function `({ loading, selected, ...mods }) => ReactNode | true`
|
|
22
22
|
- **`rightIcon`** — Icon rendered after the content. Can be: ReactNode, `true` (empty slot), or function `({ loading, selected, ...mods }) => ReactNode | true`
|
|
@@ -82,7 +82,6 @@ The `mods` prop accepts the following modifiers you can override:
|
|
|
82
82
|
- `outline` – Border with transparent background; `isSelected` adds brand-tinted fill.
|
|
83
83
|
- `clear` – No border, transparent background; `isSelected` adds brand-tinted fill.
|
|
84
84
|
- `link` – Styled as a textual link.
|
|
85
|
-
- `current` – Fill, border and label are mixed from the inherited text color (`#current`), so the button adopts the color of whatever container it sits in. The resting chip is a `#current.03` fill inside a `#current.08` border, and hover, pressed and selected step the same alpha ramp up from there; the label stays fully opaque. The focus ring stays `#primary-accent-text`, like every other type. Theme-agnostic — there is a single variant, and `theme` has no effect. Use it inside colored containers (alerts, banners, dark overlays, tooltips). `Item` has a `current` type too, shaped like its neutral `item` type instead: borderless and invisible at rest.
|
|
86
85
|
|
|
87
86
|
### Themes. `theme` prop
|
|
88
87
|
|
|
@@ -92,6 +91,13 @@ The `mods` prop accepts the following modifiers you can override:
|
|
|
92
91
|
- `warning` – Yellow/amber palette for caution or attention.
|
|
93
92
|
- `note` – Violet palette for informational context.
|
|
94
93
|
- `special` – White palette for dark backgrounds.
|
|
94
|
+
- `current` – Not a palette at all: fill, border and label are mixed from the inherited text color (`#current`), so the button adopts the color of whatever container it sits in and keeps adopting it if that color changes. Every `type` has a `current` flavour, so the shape is still yours to pick — `outline` is the resting `#current.03` chip inside a `#current.08` border, `primary` escalates the same construction to a filled chip, `clear` paints nothing at rest, `link` is the label alone. The label stays fully opaque and the focus ring stays `#primary-accent-text`, like every other theme. Use it inside colored containers (alerts, banners, dark overlays, tooltips), where a brand theme would either clash with the container or have to be picked to match it.
|
|
95
|
+
|
|
96
|
+
```jsx
|
|
97
|
+
<Alert theme="note">
|
|
98
|
+
<Button theme="current" type="outline">Adopts the note color</Button>
|
|
99
|
+
</Alert>
|
|
100
|
+
```
|
|
95
101
|
|
|
96
102
|
### Sizes. `size` prop
|
|
97
103
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ItemAction
|
|
2
2
|
|
|
3
|
-
A compact action button designed for use inside `Item`, `ItemButton`, and `ItemCard`.
|
|
3
|
+
A compact action button designed for use inside `Item`, `ItemButton`, and `ItemCard`. Defaults to the `current` theme, so it takes its colors from whatever row hosts it.
|
|
4
4
|
|
|
5
5
|
## When to Use
|
|
6
6
|
|
|
@@ -15,8 +15,8 @@ A compact action button designed for use inside `Item`, `ItemButton`, and `ItemC
|
|
|
15
15
|
## Properties
|
|
16
16
|
|
|
17
17
|
- **`icon`** `ReactNode | 'checkmark'` — Icon element or `'checkmark'` for a selection indicator
|
|
18
|
-
- **`type`** `'primary' | 'outline' | 'clear'
|
|
19
|
-
- **`theme`** `'default' | 'danger' | 'success' | 'warning' | 'note' | 'special'` (default: `'
|
|
18
|
+
- **`type`** `'primary' | 'outline' | 'clear'` (default: `'clear'`) — Visual type. `clear` is borderless and paints nothing at rest, so a row full of actions does not read as busy.
|
|
19
|
+
- **`theme`** `'current' | 'default' | 'danger' | 'success' | 'warning' | 'note' | 'special'` (default: `'current'`) — Color theme. `current` derives every color from the inherited `currentcolor`, so the action tracks whatever row hosts it without being told the row's type or theme. Name any other theme to have the action paint itself instead.
|
|
20
20
|
- **`isLoading`** `boolean` (default: `false`) — Shows loading spinner
|
|
21
21
|
- **`isSelected`** `boolean` (default: `false`) — Selected state (works with `icon="checkmark"`)
|
|
22
22
|
- **`isDisabled`** `boolean` (default: `false`) — Disables the action. Inherits from parent; use `isDisabled={false}` to override.
|
|
@@ -22,8 +22,8 @@ A foundational component that provides a standardized layout and styling for ite
|
|
|
22
22
|
- **`suffix`** `ReactNode` — Element rendered after the content (before rightIcon)
|
|
23
23
|
- **`description`** `ReactNode` — Description text displayed with the item
|
|
24
24
|
- **`descriptionPlacement`** `'inline' | 'block'` (default: `inline`) — How the description is positioned relative to the main content. Defaults to `'block'` for `type="card"` and `type="header"`
|
|
25
|
-
- **`type`** `'item' | 'header' | 'primary' | 'outline' | 'outline-2' | 'clear' | 'link' | 'card'
|
|
26
|
-
- **`theme`** `'default' | 'danger' | 'success' | 'warning' | 'note' | 'special'` (default: `default`) — Semantic colour palette theme
|
|
25
|
+
- **`type`** `'item' | 'header' | 'primary' | 'outline' | 'outline-2' | 'clear' | 'link' | 'card'` (default: `item`) — Visual style variant
|
|
26
|
+
- **`theme`** `'default' | 'danger' | 'success' | 'warning' | 'note' | 'special' | 'current'` (default: `default`) — Semantic colour palette theme. `current` is not a brand palette: it mixes every color from the inherited text color, so the item adopts the color of whatever container it sits in
|
|
27
27
|
- **`size`** `'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'inline' | number` (default: `medium`) — Item size. Accepts custom number or string values
|
|
28
28
|
- **`shape`** `'card' | 'button' | 'sharp' | 'pill'` (default: `button`) — Shape of the item border radius. Defaults to `'card'` for `type="card"`
|
|
29
29
|
- **`isSelected`** `boolean` (default: `false`) — Marks the item as selected
|
|
@@ -84,8 +84,8 @@ The `mods` property accepts the following modifiers:
|
|
|
84
84
|
- **`disabled`** `boolean` — Applied when isDisabled is true or when loading
|
|
85
85
|
- **`loading`** `boolean` — Applied when isLoading is true
|
|
86
86
|
- **`size`** `string` — Applied based on size prop value (xsmall, small, medium, large, xlarge, inline)
|
|
87
|
-
- **`type`** `string` — Applied based on type prop value (item, header, primary, outline, outline-2, clear, link, card
|
|
88
|
-
- **`theme`** `string` — Applied based on theme prop value (default, danger, success, special, warning, note)
|
|
87
|
+
- **`type`** `string` — Applied based on type prop value (item, header, primary, outline, outline-2, clear, link, card)
|
|
88
|
+
- **`theme`** `string` — Applied based on theme prop value (default, danger, success, special, warning, note, current)
|
|
89
89
|
- **`shape`** `string` — Applied based on shape prop value (card, button, sharp, pill)
|
|
90
90
|
|
|
91
91
|
## Variants
|
|
@@ -99,8 +99,7 @@ The `mods` property accepts the following modifiers:
|
|
|
99
99
|
- `outline-2` - Same as `outline` but uses `#surface-3` as the base fill, designed to sit on `#surface-2` containers without blending in (not available for the `special` theme)
|
|
100
100
|
- `clear` - Transparent item with minimal styling; `isSelected` adds brand-tinted fill
|
|
101
101
|
- `link` - Link-styled item appearance (does not support icons or loading state)
|
|
102
|
-
- `card` - Card appearance for notifications (supports `default`, `success`, `danger`, `warning`, `note` themes; defaults to `shape="card"`, `descriptionPlacement="block"`, uses semantic heading tags via `level` prop, and has `.5x` padding)
|
|
103
|
-
- `current` - Same shape as `item` — no border, nothing painted at rest — but every color is derived from the inherited text color (`#current`) instead of the fixed `#surface-text`, so the item adopts the color of whatever container it sits in. The fill steps in on hover (`.04`), pressed (`.06`) and selected (`.09` → `.15`); the label stays fully opaque. Theme-agnostic: only supports the `default` theme (any other theme warns, since there is nothing for it to change). Use it inside colored containers — alerts, banners, dark overlays, tooltips. `Button` has a `current` type too, shaped like a standalone control instead: a resting `#current.03` chip inside a `#current.08` border
|
|
102
|
+
- `card` - Card appearance for notifications (supports `default`, `success`, `danger`, `warning`, `note`, `current` themes; defaults to `shape="card"`, `descriptionPlacement="block"`, uses semantic heading tags via `level` prop, and has `.5x` padding)
|
|
104
103
|
|
|
105
104
|
### Themes
|
|
106
105
|
|
|
@@ -110,6 +109,7 @@ The `mods` property accepts the following modifiers:
|
|
|
110
109
|
- `warning` - Yellow/amber theme for caution or attention
|
|
111
110
|
- `note` - Violet theme for informational context
|
|
112
111
|
- `special` - Special theme with unique styling (not available for `card` or `header` types)
|
|
112
|
+
- `current` - Not a palette at all: every color is derived from the inherited text color (`#current`) instead of a brand ramp, so the item adopts the color of whatever container it sits in. Every type except `header` has a `current` flavour, so the shape is still yours to pick — `item` keeps its borderless shape (nothing painted at rest, the fill stepping in on hover, pressed and selected), `outline` adds the chip and border, `primary` escalates it further. The label stays fully opaque. Use it inside colored containers — alerts, banners, dark overlays, tooltips
|
|
113
113
|
|
|
114
114
|
### Sizes
|
|
115
115
|
|
|
@@ -257,17 +257,17 @@ Like headers, card labels use semantic heading tags (h1-h6) controlled by the `l
|
|
|
257
257
|
</Item>
|
|
258
258
|
```
|
|
259
259
|
|
|
260
|
-
### Current
|
|
260
|
+
### Current Theme
|
|
261
261
|
|
|
262
|
-
Use `
|
|
262
|
+
Use `theme="current"` inside a container that paints its own text color. The fill and label are mixed from that inherited color, so the item matches the container without picking a brand theme — and keeps matching it if the container's color changes. Every type composes with it:
|
|
263
263
|
|
|
264
264
|
```jsx
|
|
265
265
|
<Block fill="#note-surface" color="#note-accent-text" padding="1.5x" radius="1cr">
|
|
266
|
-
<Item
|
|
266
|
+
<Item theme="current" icon={<IconInfo />}>Adopts the note color</Item>
|
|
267
267
|
</Block>
|
|
268
268
|
|
|
269
269
|
<Block fill="#fixed-dark" color="#white" padding="1.5x" radius="1cr">
|
|
270
|
-
<Item
|
|
270
|
+
<Item theme="current" type="outline" icon={<IconInfo />}>An outlined chip on a dark banner</Item>
|
|
271
271
|
</Block>
|
|
272
272
|
```
|
|
273
273
|
|
|
@@ -11,8 +11,8 @@ A non-interactive badge indicator for list items. Similar to `ItemAction` but wi
|
|
|
11
11
|
## Properties
|
|
12
12
|
|
|
13
13
|
- **`icon`** `ReactNode | 'checkmark'` — Icon or checkmark display
|
|
14
|
-
- **`type`** `'primary' | 'outline' | 'clear'
|
|
15
|
-
- **`theme`** `'default' | 'danger' | 'success' | 'special'` (default: `'
|
|
14
|
+
- **`type`** `'primary' | 'outline' | 'clear'` (default: `'clear'`) — Visual type. `isSelected` applies brand-tinted fill to `outline` and `clear`.
|
|
15
|
+
- **`theme`** `'current' | 'default' | 'danger' | 'success' | 'special'` (default: `'current'`) — Color theme. `current` derives every color from the inherited `currentcolor`, so the badge tracks whatever row hosts it. Name any other theme to have the badge paint itself instead.
|
|
16
16
|
- **`isLoading`** `boolean` (default: `false`) — Show loading spinner
|
|
17
17
|
- **`isSelected`** `boolean` (default: `false`) — Selected state (for checkmark)
|
|
18
18
|
- **`tooltip`** `string | object` — Tooltip content shown on hover for icon-only badges. A string shows tooltip text; an object supports `{ title, ...tooltipProps }` for advanced configuration.
|
|
@@ -61,15 +61,13 @@ clipped by an ancestor's `overflow: hidden`.
|
|
|
61
61
|
- **`compact`** `'vertical' | 'horizontal' | 'free' | null` (default: `'vertical'`) — Compaction behavior. `'vertical'`/`'horizontal'` reflow widgets to remove gaps; `'free'` places each widget exactly where dropped and never pushes its neighbours (blocked from occupied cells unless `allowOverlap`); `null` disables compaction but still resolves collisions the legacy react-grid-layout way.
|
|
62
62
|
- **`allowOverlap`** `boolean` (default: `false`) — Allow widgets to overlap (stack). In `'free'` mode this is what distinguishes stacking from blocking a drop onto an occupied cell.
|
|
63
63
|
- **`preventCollision`** `boolean` (default: `false`) — Block movement into occupied cells instead of pushing.
|
|
64
|
-
- **`collisionMode`** `'revert' | 'downscale' | 'swap'` (default: `'revert'`) — How to resolve a drop the grid would otherwise refuse. Only applies where a collision *blocks* a move — `compact="free"` (which prevents collisions) or an explicit `preventCollision` — and never under `allowOverlap`, where nothing is blocked. `'revert'` snaps the widget back. `'downscale'` shrinks it into the free space at the drop cell, growing rightward and downward, floored at its `minW`/`minH` (below that it reverts). `'swap'` trades places with the single widget under the drop: the dragged widget takes that widget's cell, the displaced widget takes the cell the dragged one just left, and each keeps as much of its own size as fits there (so a widget displaced next to a neighbour may shrink). It falls back to `'downscale'`, then `'revert'`. No mode ever *grows* a widget: a drag only ever preserves or reduces size. Applies to single-widget drags, pointer and keyboard alike; a multi-widget selection still only moves where it fits outright, and a resize is still blocked by a collision.
|
|
65
64
|
- **`isDraggable`** `boolean` (default: `true`) — Enable dragging for all widgets.
|
|
66
65
|
- **`isResizable`** `boolean` (default: `true`) — Enable resizing for all widgets.
|
|
67
66
|
- **`isDroppable`** `boolean` (default: `true`) — Whether the board accepts widgets dropped from other boards.
|
|
68
67
|
- **`resizeHandles`** `ResizeHandleAxis[]` (default: `['se']`) — Which resize handles to show. Corner handles (`ne`/`nw`/`se`/`sw`) show an angle grip; edge handles (`n`/`s`/`e`/`w`) show a dotted grip. Both are revealed on hover/focus/resize. A single edge (e.g. `['e']` or `['s']`) gives a horizontally- or vertically-only resizable widget.
|
|
69
|
-
- **`resizeGripPlacement`** `'inside' | 'corner'` (default: `'inside'`) — Where the corner grips sit. `'inside'` tucks each one into the widget box; `'corner'` centres it on the widget's corner, so it lines up with a control centred on the opposite corner. Only affects corner handles — a dotted edge grip always stays inside. A corner-placed grip is drawn *outside* the widget (a widget clips its own content, which would otherwise cut the grip in half), so it needs the board to have at least half a grip's worth of `containerPadding` to show in full against the board's edge. Can be overridden per widget.
|
|
70
68
|
- **`dragCancel`** `string` — CSS selector for elements that must not start a pointer drag (e.g. form controls inside a widget: `"input,textarea,button,a,.no-drag"`). Does not affect keyboard moves — those only run when the widget host itself is focused. Can be overridden per widget.
|
|
71
69
|
- **`dragHandle`** `string` — CSS selector for the only elements from which a pointer drag may start. Can be overridden per widget.
|
|
72
|
-
- **`showGridLines`** `boolean | 'drag'
|
|
70
|
+
- **`showGridLines`** `boolean | 'drag'` (default: `false`) — Show grid lines behind the widgets. `true` always, `'drag'` only while a widget is being dragged or resized. A nested board that does not set this inherits an enabled ancestor's grid lines, showing its own while a drag is in progress.
|
|
73
71
|
- **`isAligned`** `boolean` (default: `false`) — Align a nested board with its ancestor `Board`'s layout. Only takes effect when the board is nested inside another `Board`'s widget. When set, every cell matches the parent's cell size exactly: the board inherits the parent's column pitch (deriving its own column count from its measured width so cells stay parent-sized as the container is resized) and uses the parent's row height verbatim. It never shrinks rows to fit — pair it with an `isAutoHeight` container so the widget grows to fit its rows at that height. `cols`/`rowHeight` then act as fallbacks used only until the parent metrics resolve.
|
|
74
72
|
- **`selectionMode`** `'none' | 'single' | 'multiple'` (default: `'none'`) — Whether widgets can be selected, and how many at a time. `'multiple'` also enables the marquee and rigid group movement.
|
|
75
73
|
- **`selectedKeys`** `string[]` — Controlled selection. Keys are layout item ids (`LayoutItem.i`).
|
|
@@ -91,7 +89,6 @@ clipped by an ancestor's `overflow: hidden`.
|
|
|
91
89
|
- **`isDraggable`** `boolean` — Disable dragging for this widget.
|
|
92
90
|
- **`isResizable`** `boolean` — Disable resizing for this widget.
|
|
93
91
|
- **`resizeHandles`** `ResizeHandleAxis[]` — Override the board's handles.
|
|
94
|
-
- **`resizeGripPlacement`** `'inside' | 'corner'` — Override the board's grip placement.
|
|
95
92
|
- **`minW`** `number` — Minimum width in grid columns. Used when the layout item omits `minW`; the resize handle stops here.
|
|
96
93
|
- **`maxW`** `number` — Maximum width in grid columns. Used when the layout item omits `maxW`.
|
|
97
94
|
- **`minH`** `number` — Minimum height in grid rows. Used when the layout item omits `minH`.
|
|
@@ -240,21 +237,7 @@ Bound resizing with per-widget `minW`/`maxW` (columns) and `minH`/`maxH` (rows).
|
|
|
240
237
|
|
|
241
238
|
### Grid lines
|
|
242
239
|
|
|
243
|
-
Show grid lines behind the widgets while dragging or resizing (or always).
|
|
244
|
-
several boards under one `Board.Provider`, `'drag'` lights up only the board the
|
|
245
|
-
drag belongs to; `'any-drag'` lights up all of them.
|
|
246
|
-
|
|
247
|
-
### Corner resize grip
|
|
248
|
-
|
|
249
|
-
Centre the resize grip on the widget's corner with `resizeGripPlacement="corner"`,
|
|
250
|
-
so it lines up with a control centred on the opposite corner.
|
|
251
|
-
|
|
252
|
-
### Resolving a blocked drop
|
|
253
|
-
|
|
254
|
-
On a free grid a drop onto occupied cells is refused. `collisionMode` resolves it
|
|
255
|
-
instead: `'downscale'` shrinks the widget into whatever room is at the drop cell,
|
|
256
|
-
`'swap'` trades places with the widget already there. Neither ever grows a widget.
|
|
257
|
-
Drag the wide widget onto the middle row, or drop one widget onto another.
|
|
240
|
+
Show grid lines behind the widgets while dragging or resizing (or always).
|
|
258
241
|
|
|
259
242
|
### Card widgets
|
|
260
243
|
|
package/package.json
CHANGED
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-100fa6b | Cube Dev Team */
|
|
2
|
-
//#region src/components/layout/Board/grid-core/collision-modes.ts
|
|
3
|
-
/** Whether a single grid cell is free of every item in `others`. */
|
|
4
|
-
function cellFree(others, x, y) {
|
|
5
|
-
for (let i = 0; i < others.length; i++) {
|
|
6
|
-
const o = others[i];
|
|
7
|
-
if (o !== void 0 && x >= o.x && x < o.x + o.w && y >= o.y && y < o.y + o.h) return false;
|
|
8
|
-
}
|
|
9
|
-
return true;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* The largest rectangle anchored at `anchor` that fits without overlapping
|
|
13
|
-
* `others`, growing rightward and downward only.
|
|
14
|
-
*
|
|
15
|
-
* Never larger than `desired` (a drag must never *upscale* a widget - growing
|
|
16
|
-
* things is an explicit, opt-in operation like "distribute evenly", not a side
|
|
17
|
-
* effect of moving them), never smaller than the item's own `minW`/`minH`, and
|
|
18
|
-
* never past `cols` / `maxRows`. Among the candidates the largest-area rectangle
|
|
19
|
-
* wins, breaking ties on width: a grid is read left to right, so a wide-and-flat
|
|
20
|
-
* result is the less surprising of two equal-area fits.
|
|
21
|
-
*
|
|
22
|
-
* Returns `null` when not even the minimum size fits, which the callers treat as
|
|
23
|
-
* "no resolution" and fall back to reverting.
|
|
24
|
-
*/
|
|
25
|
-
function maxFreeRectAt(others, anchor, desired, limits, mins) {
|
|
26
|
-
if (anchor.x < 0 || anchor.y < 0) return null;
|
|
27
|
-
const minW = Math.max(1, mins?.minW ?? 1);
|
|
28
|
-
const minH = Math.max(1, mins?.minH ?? 1);
|
|
29
|
-
const maxRows = limits.maxRows ?? Infinity;
|
|
30
|
-
const maxW = Math.min(desired.w, limits.cols - anchor.x);
|
|
31
|
-
const maxH = Math.min(desired.h, Number.isFinite(maxRows) ? maxRows - anchor.y : desired.h);
|
|
32
|
-
if (maxW < minW || maxH < minH) return null;
|
|
33
|
-
const free = [];
|
|
34
|
-
for (let dx = 0; dx < maxW; dx++) {
|
|
35
|
-
let h = 0;
|
|
36
|
-
while (h < maxH && cellFree(others, anchor.x + dx, anchor.y + h)) h++;
|
|
37
|
-
free.push(h);
|
|
38
|
-
if (h === 0) break;
|
|
39
|
-
}
|
|
40
|
-
let best = null;
|
|
41
|
-
let bestArea = 0;
|
|
42
|
-
let limit = maxH;
|
|
43
|
-
for (let w = 1; w <= free.length; w++) {
|
|
44
|
-
limit = Math.min(limit, free[w - 1]);
|
|
45
|
-
if (limit < minH) break;
|
|
46
|
-
if (w < minW) continue;
|
|
47
|
-
const area = w * limit;
|
|
48
|
-
if (area >= bestArea) {
|
|
49
|
-
best = {
|
|
50
|
-
w,
|
|
51
|
-
h: limit
|
|
52
|
-
};
|
|
53
|
-
bestArea = area;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return best;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Shrink the placement to the room actually available at the cell it was
|
|
60
|
-
* dropped on.
|
|
61
|
-
*/
|
|
62
|
-
function downscaleInPlace(layout, item, others, desired, limits) {
|
|
63
|
-
const fit = maxFreeRectAt(others, {
|
|
64
|
-
x: item.x,
|
|
65
|
-
y: item.y
|
|
66
|
-
}, desired, limits, item);
|
|
67
|
-
if (!fit) return null;
|
|
68
|
-
if (fit.w === item.w && fit.h === item.h) return null;
|
|
69
|
-
return layout.map((l) => l.i === item.i ? {
|
|
70
|
-
...l,
|
|
71
|
-
w: fit.w,
|
|
72
|
-
h: fit.h,
|
|
73
|
-
moved: true
|
|
74
|
-
} : l);
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Exchange the placement with the single widget occupying the target slot.
|
|
78
|
-
*
|
|
79
|
-
* The dragged widget takes the other's cell and the other takes the cell the
|
|
80
|
-
* dragged widget just left. Each keeps as much of its own size as fits there -
|
|
81
|
-
* that cell plus any free space adjacent to it - and neither ever grows.
|
|
82
|
-
*
|
|
83
|
-
* "Just left" rather than "started the gesture at" is deliberate: during a drag
|
|
84
|
-
* each frame re-resolves, so the cell the widget came from is the previous
|
|
85
|
-
* frame's, which is always free. Anchoring on the gesture's start instead would
|
|
86
|
-
* break a chain of exchanges - the second partner would find the start cell
|
|
87
|
-
* already taken by the first.
|
|
88
|
-
* The slot the dragged widget is leaving is reserved for the displaced widget
|
|
89
|
-
* while the dragged one is sized, so the two can never claim the same cells: the
|
|
90
|
-
* result is overlap-free by construction, not by a follow-up check.
|
|
91
|
-
*/
|
|
92
|
-
function exchangeWithCollision(layout, item, collisions, from, desired, limits) {
|
|
93
|
-
if (collisions.length !== 1) return null;
|
|
94
|
-
const other = collisions[0];
|
|
95
|
-
if (other.static) return null;
|
|
96
|
-
if (from.x === item.x && from.y === item.y) return null;
|
|
97
|
-
const rest = layout.filter((l) => l.i !== item.i && l.i !== other.i);
|
|
98
|
-
const originSlot = {
|
|
99
|
-
i: "origin-slot-reservation",
|
|
100
|
-
x: from.x,
|
|
101
|
-
y: from.y,
|
|
102
|
-
w: desired.w,
|
|
103
|
-
h: desired.h
|
|
104
|
-
};
|
|
105
|
-
const movedFit = maxFreeRectAt([...rest, originSlot], {
|
|
106
|
-
x: other.x,
|
|
107
|
-
y: other.y
|
|
108
|
-
}, desired, limits, item);
|
|
109
|
-
if (!movedFit) return null;
|
|
110
|
-
const moved = {
|
|
111
|
-
...item,
|
|
112
|
-
x: other.x,
|
|
113
|
-
y: other.y,
|
|
114
|
-
w: movedFit.w,
|
|
115
|
-
h: movedFit.h,
|
|
116
|
-
moved: true
|
|
117
|
-
};
|
|
118
|
-
const displacedFit = maxFreeRectAt([...rest, moved], {
|
|
119
|
-
x: from.x,
|
|
120
|
-
y: from.y
|
|
121
|
-
}, {
|
|
122
|
-
w: other.w,
|
|
123
|
-
h: other.h
|
|
124
|
-
}, limits, other);
|
|
125
|
-
if (!displacedFit) return null;
|
|
126
|
-
const displaced = {
|
|
127
|
-
...other,
|
|
128
|
-
x: from.x,
|
|
129
|
-
y: from.y,
|
|
130
|
-
w: displacedFit.w,
|
|
131
|
-
h: displacedFit.h,
|
|
132
|
-
moved: true
|
|
133
|
-
};
|
|
134
|
-
return layout.map((l) => l.i === item.i ? moved : l.i === other.i ? displaced : l);
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Build the resolver `moveElement` consults instead of reverting a blocked move,
|
|
138
|
-
* or `undefined` for `'revert'` (and for an unset mode), which keeps the engine
|
|
139
|
-
* on its original path with no added work.
|
|
140
|
-
*
|
|
141
|
-
* `'swap'` is an escalation ladder, tried in order: exchange with the single
|
|
142
|
-
* widget under the drop, else downscale at the drop cell, else revert. A dense
|
|
143
|
-
* grid stays draggable that way - refusing everything that is not a clean
|
|
144
|
-
* one-to-one trade would make the mode feel broken exactly where it is needed.
|
|
145
|
-
*/
|
|
146
|
-
function createCollisionResolver(mode, options) {
|
|
147
|
-
if (!mode || mode === "revert") return void 0;
|
|
148
|
-
const limits = {
|
|
149
|
-
cols: options.cols,
|
|
150
|
-
maxRows: options.maxRows
|
|
151
|
-
};
|
|
152
|
-
return ({ layout, item, collisions, from }) => {
|
|
153
|
-
const others = layout.filter((l) => l.i !== item.i);
|
|
154
|
-
const desired = options.desired ?? {
|
|
155
|
-
w: item.w,
|
|
156
|
-
h: item.h
|
|
157
|
-
};
|
|
158
|
-
if (mode === "swap" && options.allowExchange !== false) {
|
|
159
|
-
const exchanged = exchangeWithCollision(layout, item, collisions, from, desired, limits);
|
|
160
|
-
if (exchanged) return exchanged;
|
|
161
|
-
}
|
|
162
|
-
return downscaleInPlace(layout, item, others, desired, limits);
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
//#endregion
|
|
167
|
-
export { createCollisionResolver };
|
|
168
|
-
//# sourceMappingURL=collision-modes.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"collision-modes.js","names":[],"sources":["../../../../../src/components/layout/Board/grid-core/collision-modes.ts"],"sourcesContent":["/**\n * Collision resolution strategies for a grid that prevents collisions.\n *\n * Original UI Kit code (not vendored from react-grid-layout): the upstream\n * engine only ever reverts a blocked move.\n *\n * When `preventCollision` is on, `moveElement` refuses any placement that\n * overlaps an existing item and snaps the dragged item back. That is the right\n * default, but a free grid often wants the placement *resolved* instead of\n * refused - shrunk into whatever room is actually there, or exchanged with the\n * widget already sitting in the target slot. These strategies produce such a\n * resolution, and every resolution they return is overlap-free, so the caller's\n * own overlap guards keep working unchanged.\n */\n\nimport { collides } from './collision';\n\nimport type {\n CollisionMode,\n CollisionResolver,\n CollisionResolverOptions,\n Layout,\n LayoutItem,\n} from './types';\n\n/** Whether a single grid cell is free of every item in `others`. */\nfunction cellFree(others: Layout, x: number, y: number): boolean {\n for (let i = 0; i < others.length; i++) {\n const o = others[i];\n if (\n o !== undefined &&\n x >= o.x &&\n x < o.x + o.w &&\n y >= o.y &&\n y < o.y + o.h\n ) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * The largest rectangle anchored at `anchor` that fits without overlapping\n * `others`, growing rightward and downward only.\n *\n * Never larger than `desired` (a drag must never *upscale* a widget - growing\n * things is an explicit, opt-in operation like \"distribute evenly\", not a side\n * effect of moving them), never smaller than the item's own `minW`/`minH`, and\n * never past `cols` / `maxRows`. Among the candidates the largest-area rectangle\n * wins, breaking ties on width: a grid is read left to right, so a wide-and-flat\n * result is the less surprising of two equal-area fits.\n *\n * Returns `null` when not even the minimum size fits, which the callers treat as\n * \"no resolution\" and fall back to reverting.\n */\nexport function maxFreeRectAt(\n others: Layout,\n anchor: { x: number; y: number },\n desired: { w: number; h: number },\n limits: { cols: number; maxRows?: number },\n mins?: { minW?: number; minH?: number },\n): { w: number; h: number } | null {\n if (anchor.x < 0 || anchor.y < 0) return null;\n\n const minW = Math.max(1, mins?.minW ?? 1);\n const minH = Math.max(1, mins?.minH ?? 1);\n const maxRows = limits.maxRows ?? Infinity;\n const maxW = Math.min(desired.w, limits.cols - anchor.x);\n const maxH = Math.min(\n desired.h,\n Number.isFinite(maxRows) ? maxRows - anchor.y : desired.h,\n );\n\n if (maxW < minW || maxH < minH) return null;\n\n // Free height available in each column of the candidate band, measured down\n // from the anchor row and capped at the tallest useful height.\n const free: number[] = [];\n for (let dx = 0; dx < maxW; dx++) {\n let h = 0;\n while (h < maxH && cellFree(others, anchor.x + dx, anchor.y + h)) h++;\n free.push(h);\n // A column with no room at all caps every wider candidate, so stop early.\n if (h === 0) break;\n }\n\n let best: { w: number; h: number } | null = null;\n let bestArea = 0;\n let limit = maxH;\n for (let w = 1; w <= free.length; w++) {\n limit = Math.min(limit, free[w - 1]!);\n if (limit < minH) break;\n if (w < minW) continue;\n const area = w * limit;\n // `>=` so the widest of several equal-area fits wins: `w` only grows here, so\n // the last match is the widest one.\n if (area >= bestArea) {\n best = { w, h: limit };\n bestArea = area;\n }\n }\n\n return best;\n}\n\n/**\n * Shrink the placement to the room actually available at the cell it was\n * dropped on.\n */\nfunction downscaleInPlace(\n layout: Layout,\n item: LayoutItem,\n others: Layout,\n desired: { w: number; h: number },\n limits: { cols: number; maxRows?: number },\n): LayoutItem[] | null {\n const fit = maxFreeRectAt(\n others,\n { x: item.x, y: item.y },\n desired,\n limits,\n item,\n );\n if (!fit) return null;\n // Nothing to resolve: the requested size already fits, so the collision was\n // not a sizing problem and reverting is still the honest answer.\n if (fit.w === item.w && fit.h === item.h) return null;\n\n return layout.map((l) =>\n l.i === item.i ? { ...l, w: fit.w, h: fit.h, moved: true } : l,\n );\n}\n\n/**\n * Exchange the placement with the single widget occupying the target slot.\n *\n * The dragged widget takes the other's cell and the other takes the cell the\n * dragged widget just left. Each keeps as much of its own size as fits there -\n * that cell plus any free space adjacent to it - and neither ever grows.\n *\n * \"Just left\" rather than \"started the gesture at\" is deliberate: during a drag\n * each frame re-resolves, so the cell the widget came from is the previous\n * frame's, which is always free. Anchoring on the gesture's start instead would\n * break a chain of exchanges - the second partner would find the start cell\n * already taken by the first.\n * The slot the dragged widget is leaving is reserved for the displaced widget\n * while the dragged one is sized, so the two can never claim the same cells: the\n * result is overlap-free by construction, not by a follow-up check.\n */\nfunction exchangeWithCollision(\n layout: Layout,\n item: LayoutItem,\n collisions: LayoutItem[],\n from: { x: number; y: number },\n desired: { w: number; h: number },\n limits: { cols: number; maxRows?: number },\n): LayoutItem[] | null {\n // Only an unambiguous exchange: with two or more widgets under the drop there\n // is no single partner to trade with, and moving one of them would still leave\n // the placement overlapping the rest.\n if (collisions.length !== 1) return null;\n const other = collisions[0]!;\n if (other.static) return null;\n // Nothing to trade if the widget has not actually left a slot behind - a\n // cross-board drop, where it never had one on this board.\n if (from.x === item.x && from.y === item.y) return null;\n\n const rest = layout.filter((l) => l.i !== item.i && l.i !== other.i);\n // The slot being vacated, held back so the dragged widget cannot grow into the\n // space the displaced one is about to need. Ids are never compared here (the\n // scan works cell by cell), so this placeholder cannot clash with a real one.\n const originSlot: LayoutItem = {\n i: 'origin-slot-reservation',\n x: from.x,\n y: from.y,\n w: desired.w,\n h: desired.h,\n };\n\n const movedFit = maxFreeRectAt(\n [...rest, originSlot],\n { x: other.x, y: other.y },\n desired,\n limits,\n item,\n );\n if (!movedFit) return null;\n const moved: LayoutItem = {\n ...item,\n x: other.x,\n y: other.y,\n w: movedFit.w,\n h: movedFit.h,\n moved: true,\n };\n\n const displacedFit = maxFreeRectAt(\n [...rest, moved],\n { x: from.x, y: from.y },\n { w: other.w, h: other.h },\n limits,\n other,\n );\n if (!displacedFit) return null;\n const displaced: LayoutItem = {\n ...other,\n x: from.x,\n y: from.y,\n w: displacedFit.w,\n h: displacedFit.h,\n moved: true,\n };\n\n return layout.map((l) =>\n l.i === item.i ? moved : l.i === other.i ? displaced : l,\n );\n}\n\n/**\n * Build the resolver `moveElement` consults instead of reverting a blocked move,\n * or `undefined` for `'revert'` (and for an unset mode), which keeps the engine\n * on its original path with no added work.\n *\n * `'swap'` is an escalation ladder, tried in order: exchange with the single\n * widget under the drop, else downscale at the drop cell, else revert. A dense\n * grid stays draggable that way - refusing everything that is not a clean\n * one-to-one trade would make the mode feel broken exactly where it is needed.\n */\nexport function createCollisionResolver(\n mode: CollisionMode | undefined,\n options: CollisionResolverOptions,\n): CollisionResolver | undefined {\n if (!mode || mode === 'revert') return undefined;\n\n const limits = { cols: options.cols, maxRows: options.maxRows };\n\n return ({ layout, item, collisions, from }) => {\n const others = layout.filter((l) => l.i !== item.i);\n const desired = options.desired ?? { w: item.w, h: item.h };\n\n if (mode === 'swap' && options.allowExchange !== false) {\n const exchanged = exchangeWithCollision(\n layout,\n item,\n collisions,\n from,\n desired,\n limits,\n );\n if (exchanged) return exchanged;\n }\n\n return downscaleInPlace(layout, item, others, desired, limits);\n };\n}\n\n/**\n * Whether a layout holds no overlapping pair. A resolution is only ever accepted\n * when this holds, so the specs assert it directly.\n */\nexport function isOverlapFree(layout: Layout): boolean {\n for (let i = 0; i < layout.length; i++) {\n for (let j = i + 1; j < layout.length; j++) {\n if (collides(layout[i]!, layout[j]!)) return false;\n }\n }\n return true;\n}\n"],"mappings":";;;AA0BA,SAAS,SAAS,QAAgB,GAAW,GAAoB;AAC/D,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;EACtC,MAAM,IAAI,OAAO;AACjB,MACE,MAAM,UACN,KAAK,EAAE,KACP,IAAI,EAAE,IAAI,EAAE,KACZ,KAAK,EAAE,KACP,IAAI,EAAE,IAAI,EAAE,EAEZ,QAAO;;AAGX,QAAO;;;;;;;;;;;;;;;;AAiBT,SAAgB,cACd,QACA,QACA,SACA,QACA,MACiC;AACjC,KAAI,OAAO,IAAI,KAAK,OAAO,IAAI,EAAG,QAAO;CAEzC,MAAM,OAAO,KAAK,IAAI,GAAG,MAAM,QAAQ,EAAE;CACzC,MAAM,OAAO,KAAK,IAAI,GAAG,MAAM,QAAQ,EAAE;CACzC,MAAM,UAAU,OAAO,WAAW;CAClC,MAAM,OAAO,KAAK,IAAI,QAAQ,GAAG,OAAO,OAAO,OAAO,EAAE;CACxD,MAAM,OAAO,KAAK,IAChB,QAAQ,GACR,OAAO,SAAS,QAAQ,GAAG,UAAU,OAAO,IAAI,QAAQ,EACzD;AAED,KAAI,OAAO,QAAQ,OAAO,KAAM,QAAO;CAIvC,MAAM,OAAiB,EAAE;AACzB,MAAK,IAAI,KAAK,GAAG,KAAK,MAAM,MAAM;EAChC,IAAI,IAAI;AACR,SAAO,IAAI,QAAQ,SAAS,QAAQ,OAAO,IAAI,IAAI,OAAO,IAAI,EAAE,CAAE;AAClE,OAAK,KAAK,EAAE;AAEZ,MAAI,MAAM,EAAG;;CAGf,IAAI,OAAwC;CAC5C,IAAI,WAAW;CACf,IAAI,QAAQ;AACZ,MAAK,IAAI,IAAI,GAAG,KAAK,KAAK,QAAQ,KAAK;AACrC,UAAQ,KAAK,IAAI,OAAO,KAAK,IAAI,GAAI;AACrC,MAAI,QAAQ,KAAM;AAClB,MAAI,IAAI,KAAM;EACd,MAAM,OAAO,IAAI;AAGjB,MAAI,QAAQ,UAAU;AACpB,UAAO;IAAE;IAAG,GAAG;IAAO;AACtB,cAAW;;;AAIf,QAAO;;;;;;AAOT,SAAS,iBACP,QACA,MACA,QACA,SACA,QACqB;CACrB,MAAM,MAAM,cACV,QACA;EAAE,GAAG,KAAK;EAAG,GAAG,KAAK;EAAG,EACxB,SACA,QACA,KACD;AACD,KAAI,CAAC,IAAK,QAAO;AAGjB,KAAI,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,EAAG,QAAO;AAEjD,QAAO,OAAO,KAAK,MACjB,EAAE,MAAM,KAAK,IAAI;EAAE,GAAG;EAAG,GAAG,IAAI;EAAG,GAAG,IAAI;EAAG,OAAO;EAAM,GAAG,EAC9D;;;;;;;;;;;;;;;;;;AAmBH,SAAS,sBACP,QACA,MACA,YACA,MACA,SACA,QACqB;AAIrB,KAAI,WAAW,WAAW,EAAG,QAAO;CACpC,MAAM,QAAQ,WAAW;AACzB,KAAI,MAAM,OAAQ,QAAO;AAGzB,KAAI,KAAK,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK,EAAG,QAAO;CAEnD,MAAM,OAAO,OAAO,QAAQ,MAAM,EAAE,MAAM,KAAK,KAAK,EAAE,MAAM,MAAM,EAAE;CAIpE,MAAM,aAAyB;EAC7B,GAAG;EACH,GAAG,KAAK;EACR,GAAG,KAAK;EACR,GAAG,QAAQ;EACX,GAAG,QAAQ;EACZ;CAED,MAAM,WAAW,cACf,CAAC,GAAG,MAAM,WAAW,EACrB;EAAE,GAAG,MAAM;EAAG,GAAG,MAAM;EAAG,EAC1B,SACA,QACA,KACD;AACD,KAAI,CAAC,SAAU,QAAO;CACtB,MAAM,QAAoB;EACxB,GAAG;EACH,GAAG,MAAM;EACT,GAAG,MAAM;EACT,GAAG,SAAS;EACZ,GAAG,SAAS;EACZ,OAAO;EACR;CAED,MAAM,eAAe,cACnB,CAAC,GAAG,MAAM,MAAM,EAChB;EAAE,GAAG,KAAK;EAAG,GAAG,KAAK;EAAG,EACxB;EAAE,GAAG,MAAM;EAAG,GAAG,MAAM;EAAG,EAC1B,QACA,MACD;AACD,KAAI,CAAC,aAAc,QAAO;CAC1B,MAAM,YAAwB;EAC5B,GAAG;EACH,GAAG,KAAK;EACR,GAAG,KAAK;EACR,GAAG,aAAa;EAChB,GAAG,aAAa;EAChB,OAAO;EACR;AAED,QAAO,OAAO,KAAK,MACjB,EAAE,MAAM,KAAK,IAAI,QAAQ,EAAE,MAAM,MAAM,IAAI,YAAY,EACxD;;;;;;;;;;;;AAaH,SAAgB,wBACd,MACA,SAC+B;AAC/B,KAAI,CAAC,QAAQ,SAAS,SAAU,QAAO;CAEvC,MAAM,SAAS;EAAE,MAAM,QAAQ;EAAM,SAAS,QAAQ;EAAS;AAE/D,SAAQ,EAAE,QAAQ,MAAM,YAAY,WAAW;EAC7C,MAAM,SAAS,OAAO,QAAQ,MAAM,EAAE,MAAM,KAAK,EAAE;EACnD,MAAM,UAAU,QAAQ,WAAW;GAAE,GAAG,KAAK;GAAG,GAAG,KAAK;GAAG;AAE3D,MAAI,SAAS,UAAU,QAAQ,kBAAkB,OAAO;GACtD,MAAM,YAAY,sBAChB,QACA,MACA,YACA,MACA,SACA,OACD;AACD,OAAI,UAAW,QAAO;;AAGxB,SAAO,iBAAiB,QAAQ,MAAM,QAAQ,SAAS,OAAO"}
|