@cube-dev/ui-kit 0.0.0-canary-e76eb3e → 0.0.0-canary-01fea9d
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.js +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.js +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 +44 -42
- package/dist/components/actions/use-context-menu.js.map +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.js +1 -1
- package/dist/components/content/ItemBadge/ItemBadge.js +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 +2 -2
- package/dist/components/content/Tag/Tag.js.map +1 -1
- package/dist/components/content/Text.d.ts +14 -14
- 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/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.d.ts +67 -0
- package/dist/components/fields/ColorInput/ColorInput.js +228 -0
- package/dist/components/fields/ColorInput/ColorInput.js.map +1 -0
- package/dist/components/fields/ColorInput/index.d.ts +2 -0
- package/dist/components/fields/ColorPicker/ColorPicker.d.ts +34 -37
- package/dist/components/fields/ColorPicker/ColorPicker.js +112 -184
- package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -1
- package/dist/components/fields/ColorPicker/index.d.ts +1 -3
- package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.d.ts +50 -0
- package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +251 -0
- package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js.map +1 -0
- package/dist/components/fields/ColorSwatchGroup/index.d.ts +2 -0
- 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 +2 -2
- 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/listNavigation.js +1 -1
- 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.d.ts +2 -2
- package/dist/components/fields/RadioGroup/Radio.js +4 -4
- 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/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/{ColorPicker/ColorPickerPanel.js → color/ColorPanel.js} +13 -11
- package/dist/components/fields/color/ColorPanel.js.map +1 -0
- package/dist/components/fields/color/ColorSwatch.d.ts +22 -0
- package/dist/components/fields/color/ColorSwatch.js +58 -0
- package/dist/components/fields/color/ColorSwatch.js.map +1 -0
- package/dist/components/fields/{ColorPicker → color}/channels.d.ts +1 -1
- package/dist/components/fields/{ColorPicker → color}/channels.js +2 -2
- package/dist/components/fields/color/channels.js.map +1 -0
- package/dist/components/fields/color/color.d.ts +21 -0
- package/dist/components/fields/{ColorPicker → color}/color.js +2 -2
- package/dist/components/fields/color/color.js.map +1 -0
- package/dist/components/fields/color/context.js +20 -0
- package/dist/components/fields/color/context.js.map +1 -0
- package/dist/components/fields/color/index.d.ts +4 -0
- package/dist/components/fields/index.d.ts +9 -3
- 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.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.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/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 +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/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/navigation/index.d.ts +1 -5
- 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/PeriodCalendar.js +1 -1
- package/dist/components/other/Calendar/RangeCalendar.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.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 +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.js +1 -1
- package/dist/components/portal/usePortal.js +1 -1
- package/dist/components/shared/DraggableCollection.js +8 -24
- package/dist/components/shared/DraggableCollection.js.map +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 -199
- 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 -35
- package/dist/i18n/locales/en-US/uikit.js +1 -35
- package/dist/i18n/locales/en-US/uikit.json.d.ts +1 -40
- package/dist/i18n/locales/es-ES/uikit.js +1 -35
- package/dist/i18n/locales/es-MX/uikit.js +1 -35
- package/dist/i18n/locales/fr-FR/uikit.js +1 -35
- package/dist/i18n/locales/it-IT/uikit.js +1 -35
- package/dist/i18n/locales/ja-JP/uikit.js +1 -35
- package/dist/i18n/locales/nb-NO/uikit.js +1 -35
- package/dist/i18n/locales/pt-BR/uikit.js +1 -35
- package/dist/i18n/locales/pt-PT/uikit.js +1 -35
- package/dist/i18n/locales/sv-SE/uikit.js +1 -35
- package/dist/i18n/locales/vi-VN/uikit.js +1 -35
- 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/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 +15 -22
- package/dist/index.js +9 -10
- package/dist/index.js.map +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/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 +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.d.ts +1 -1
- package/dist/tokens/typography.js +2 -11
- package/dist/tokens/typography.js.map +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/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/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/components/fields/ColorInput.md +272 -0
- package/docs/components/fields/ColorPicker.md +80 -146
- package/docs/components/fields/ColorSwatchGroup.md +206 -0
- package/package.json +3 -8
- package/dist/components/data/DataTable/DataTable.d.ts +0 -13
- package/dist/components/data/DataTable/DataTable.js +0 -242
- package/dist/components/data/DataTable/DataTable.js.map +0 -1
- package/dist/components/data/DataTable/index.d.ts +0 -3
- package/dist/components/data/DataTable/types.d.ts +0 -140
- package/dist/components/data/ItemTable/ItemTable.d.ts +0 -19
- package/dist/components/data/ItemTable/ItemTable.js +0 -347
- package/dist/components/data/ItemTable/ItemTable.js.map +0 -1
- package/dist/components/data/ItemTable/ItemTableBulkBar.d.ts +0 -23
- package/dist/components/data/ItemTable/ItemTableBulkBar.js +0 -131
- package/dist/components/data/ItemTable/ItemTableBulkBar.js.map +0 -1
- package/dist/components/data/ItemTable/ItemTableDragPreview.js +0 -46
- package/dist/components/data/ItemTable/ItemTableDragPreview.js.map +0 -1
- package/dist/components/data/ItemTable/ItemTableFooter.js +0 -79
- package/dist/components/data/ItemTable/ItemTableFooter.js.map +0 -1
- package/dist/components/data/ItemTable/ItemTableToolbar.d.ts +0 -34
- package/dist/components/data/ItemTable/ItemTableToolbar.js +0 -91
- package/dist/components/data/ItemTable/ItemTableToolbar.js.map +0 -1
- package/dist/components/data/ItemTable/index.d.ts +0 -4
- package/dist/components/data/ItemTable/types.d.ts +0 -322
- package/dist/components/data/TableBase/ColumnResizer.js +0 -70
- package/dist/components/data/TableBase/ColumnResizer.js.map +0 -1
- package/dist/components/data/TableBase/RowCollection.js +0 -99
- package/dist/components/data/TableBase/RowCollection.js.map +0 -1
- package/dist/components/data/TableBase/TableRow.js +0 -89
- package/dist/components/data/TableBase/TableRow.js.map +0 -1
- package/dist/components/data/TableBase/TableView.d.ts +0 -22
- package/dist/components/data/TableBase/TableView.js +0 -857
- package/dist/components/data/TableBase/TableView.js.map +0 -1
- package/dist/components/data/TableBase/index.d.ts +0 -5
- package/dist/components/data/TableBase/row-menu.js +0 -40
- package/dist/components/data/TableBase/row-menu.js.map +0 -1
- package/dist/components/data/TableBase/styled.d.ts +0 -5
- package/dist/components/data/TableBase/styled.js +0 -504
- package/dist/components/data/TableBase/styled.js.map +0 -1
- package/dist/components/data/TableBase/types.d.ts +0 -161
- package/dist/components/data/TableBase/use-cell-selection.d.ts +0 -3
- package/dist/components/data/TableBase/use-cell-selection.js +0 -0
- package/dist/components/data/TableBase/use-cell-selection.js.map +0 -1
- package/dist/components/data/TableBase/use-container-width.js +0 -35
- package/dist/components/data/TableBase/use-container-width.js.map +0 -1
- package/dist/components/data/TableBase/use-scrollability.js +0 -49
- package/dist/components/data/TableBase/use-scrollability.js.map +0 -1
- package/dist/components/data/TableBase/use-table-columns.d.ts +0 -2
- package/dist/components/data/TableBase/use-table-columns.js +0 -166
- package/dist/components/data/TableBase/use-table-columns.js.map +0 -1
- package/dist/components/data/TableBase/use-table-search.js +0 -50
- package/dist/components/data/TableBase/use-table-search.js.map +0 -1
- package/dist/components/data/TableBase/use-table-selection.d.ts +0 -4
- package/dist/components/data/TableBase/use-table-selection.js +0 -233
- package/dist/components/data/TableBase/use-table-selection.js.map +0 -1
- package/dist/components/data/TableBase/use-table-sort.js +0 -91
- package/dist/components/data/TableBase/use-table-sort.js.map +0 -1
- package/dist/components/data/TableBase/use-table-sorts.js +0 -97
- package/dist/components/data/TableBase/use-table-sorts.js.map +0 -1
- package/dist/components/data/TableBase/use-table-storage.d.ts +0 -8
- package/dist/components/data/TableBase/use-table-storage.js +0 -58
- package/dist/components/data/TableBase/use-table-storage.js.map +0 -1
- package/dist/components/data/index.d.ts +0 -10
- package/dist/components/fields/ColorPicker/ColorPickerPanel.js.map +0 -1
- package/dist/components/fields/ColorPicker/channels.js.map +0 -1
- package/dist/components/fields/ColorPicker/color.d.ts +0 -15
- package/dist/components/fields/ColorPicker/color.js.map +0 -1
- package/dist/components/navigation/Pagination/Pagination.d.ts +0 -9
- package/dist/components/navigation/Pagination/Pagination.js +0 -258
- package/dist/components/navigation/Pagination/Pagination.js.map +0 -1
- package/dist/components/navigation/Pagination/index.d.ts +0 -4
- package/dist/components/navigation/Pagination/types.d.ts +0 -81
- package/dist/components/navigation/Pagination/use-pagination.d.ts +0 -52
- package/dist/components/navigation/Pagination/use-pagination.js +0 -83
- package/dist/components/navigation/Pagination/use-pagination.js.map +0 -1
- package/docs/components/data/DataTable.md +0 -286
- package/docs/components/data/ItemTable.md +0 -970
- package/docs/components/navigation/Pagination.md +0 -245
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"color.js","names":[],"sources":["../../../../src/components/fields/ColorPicker/color.ts"],"sourcesContent":["import {\n contrastRatioFromLuminance,\n formatHsl,\n formatOkhsl,\n formatOkhst,\n formatOklch,\n formatRgb,\n hslToSrgb,\n okhslToLinearSrgb,\n okhslToOkhst,\n okhslToOklch,\n okhslToSrgb,\n okhstToOkhsl,\n oklabToOkhsl,\n parseHexAlpha,\n relativeLuminanceFromLinearRgb,\n srgbToHex,\n srgbToOkhsl,\n} from '@tenphi/glaze';\n\nimport type {\n OkhslColor,\n OkhstColor,\n OklchColor,\n RgbColor,\n} from '@tenphi/glaze';\n\nexport type { OkhslColor, OkhstColor, OklchColor, RgbColor };\n\n/**\n * Every color format the picker can read and write.\n *\n * `okhsl` and `okhst` are Glaze / Tasty spaces rather than native CSS ones,\n * but Tasty parses both, so the produced strings are usable as style values.\n */\nexport const COLOR_FORMATS = [\n 'hex',\n 'rgb',\n 'hsl',\n 'okhsl',\n 'okhst',\n 'oklch',\n] as const;\n\nexport type ColorFormat = (typeof COLOR_FORMATS)[number];\n\n/**\n * OKHSL is the canonical space of the picker: it is Glaze's authoring space,\n * every channel is bounded, and — unlike OKLCh — every value inside those\n * bounds is inside the sRGB gamut, so no state can be unrepresentable.\n */\nexport type ColorValue = OkhslColor;\n\nconst FUNCTION_RE = /^([a-z]+)\\(([^()]+)\\)$/;\n/**\n * A number with an optional `%` or `deg` unit.\n *\n * The integer and fraction parts are deliberately written so that no two\n * quantifiers can consume the same digit — `\\d+(?:\\.\\d*)?` rather than\n * `\\d+\\.?\\d*`, whose `\\d+` and `\\d*` can split a digit run n ways and make\n * rejecting a long one quadratic. This runs on whatever the user types.\n */\nconst NUMBER_RE = /^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?(?:%|deg)?$/;\n\n/**\n * Saturation below this rounds to `0%` in every output notation, so the color\n * is achromatic for display purposes even when the conversion left a residue.\n */\nconst ACHROMATIC_SATURATION = 5e-5;\n\nfunction clamp(value: number, min: number, max: number): number {\n return value < min ? min : value > max ? max : value;\n}\n\nexport function normalizeHue(hue: number): number {\n if (!Number.isFinite(hue)) return 0;\n\n return ((hue % 360) + 360) % 360;\n}\n\n/**\n * The color carries no meaningful hue: every conversion out of it invents an\n * angle, so callers that need one should keep the hue they already had.\n */\nexport function isAchromatic(color: ColorValue): boolean {\n return color.s < ACHROMATIC_SATURATION;\n}\n\n/** Both channel objects describe the same color, within display precision. */\nexport function isSameColor(a?: ColorValue | null, b?: ColorValue | null) {\n if (!a || !b) return a === b;\n\n return (\n Math.abs(a.h - b.h) < 1e-6 &&\n Math.abs(a.s - b.s) < 1e-6 &&\n Math.abs(a.l - b.l) < 1e-6\n );\n}\n\n/**\n * Split a color-function body into its numeric arguments, dropping the alpha\n * component. Both the modern space-separated and the legacy comma-separated\n * syntaxes are accepted.\n *\n * Each argument keeps its unit so the caller can tell `50%` from `50`.\n */\nfunction splitArguments(body: string): string[] | null {\n const [values, ...rest] = body.split('/');\n\n // More than one slash is never valid syntax.\n if (rest.length > 1) return null;\n\n const args = values\n .trim()\n .split(values.includes(',') ? ',' : /\\s+/)\n .map((part) => part.trim())\n .filter(Boolean);\n\n // Legacy `rgba(r, g, b, a)` / `hsla(h, s, l, a)` carry alpha as a fourth\n // argument. Alpha is not part of the value, so it is dropped either way.\n if (args.length === 4) args.pop();\n\n return args.every((arg) => NUMBER_RE.test(arg)) ? args : null;\n}\n\n/** Parse an argument that may carry a `%` unit. `scale` is the 100% value. */\nfunction scalar(arg: string, scale: number): number {\n return arg.endsWith('%') ? (parseFloat(arg) / 100) * scale : parseFloat(arg);\n}\n\nfunction hueArgument(arg: string): number {\n // A percentage is not a valid hue angle.\n return arg.endsWith('%') ? NaN : normalizeHue(parseFloat(arg));\n}\n\nexport function fromRgb(color: RgbColor): ColorValue {\n const [h, s, l] = srgbToOkhsl([\n clamp(color.r, 0, 255) / 255,\n clamp(color.g, 0, 255) / 255,\n clamp(color.b, 0, 255) / 255,\n ]);\n\n return { h: normalizeHue(h), s: clamp(s, 0, 1), l: clamp(l, 0, 1) };\n}\n\nexport function toRgb(color: ColorValue): RgbColor {\n const [r, g, b] = okhslToSrgb(color.h, color.s, color.l);\n\n return {\n r: Math.round(clamp(r, 0, 1) * 255),\n g: Math.round(clamp(g, 0, 1) * 255),\n b: Math.round(clamp(b, 0, 1) * 255),\n };\n}\n\nexport function fromOkhst(color: OkhstColor): ColorValue {\n const { h, s, l } = okhstToOkhsl({\n h: normalizeHue(color.h),\n s: clamp(color.s, 0, 1),\n t: clamp(color.t, 0, 1),\n });\n\n return { h: normalizeHue(h), s: clamp(s, 0, 1), l: clamp(l, 0, 1) };\n}\n\nexport function toOkhst(color: ColorValue): OkhstColor {\n const { t } = okhslToOkhst(color);\n\n return { h: color.h, s: color.s, t: clamp(t, 0, 1) };\n}\n\n/**\n * The largest OKLCh chroma that stays inside the sRGB gamut for the given hue\n * and OKHSL lightness — that is exactly what OKHSL saturation `1` means.\n */\nexport function maxChroma(hue: number, lightness: number): number {\n return okhslToOklch(normalizeHue(hue), 1, clamp(lightness, 0, 1))[1];\n}\n\nexport function toOklch(color: ColorValue): OklchColor {\n const [l, c, h] = okhslToOklch(color.h, color.s, color.l);\n\n return { l, c, h: normalizeHue(h) };\n}\n\n/**\n * OKLCh addresses colors outside the sRGB gamut, so chroma is clipped to the\n * gamut boundary at the requested lightness before it is stored. Hue is taken\n * from the input rather than from the conversion, which loses it at zero\n * chroma.\n */\nexport function fromOklch(color: OklchColor): ColorValue {\n const h = normalizeHue(color.h);\n const c = Math.max(color.c, 0);\n const radians = (h * Math.PI) / 180;\n const [, s, l] = oklabToOkhsl([\n clamp(color.l, 0, 1),\n c * Math.cos(radians),\n c * Math.sin(radians),\n ]);\n const limit = maxChroma(h, l);\n\n return {\n h,\n s: limit > 0 ? (c >= limit ? 1 : clamp(s, 0, 1)) : 0,\n l: clamp(l, 0, 1),\n };\n}\n\nexport function toHex(color: ColorValue): string {\n return srgbToHex(okhslToSrgb(color.h, color.s, color.l));\n}\n\n/**\n * Read any supported color notation into the canonical space. Returns `null`\n * for anything that is not a real color — that is what lets the picker reject\n * partial input instead of guessing.\n *\n * Named CSS colors (`red`, `rebeccapurple`) are intentionally not supported,\n * matching `glaze.color()`.\n */\nexport function parseColor(input: string): ColorValue | null {\n const text = input.trim().toLowerCase();\n\n if (!text) return null;\n\n if (text.startsWith('#')) {\n const parsed = parseHexAlpha(text);\n\n return parsed ? fromRgb(rgbFromSrgb(parsed.rgb)) : null;\n }\n\n const match = FUNCTION_RE.exec(text);\n\n if (!match) return null;\n\n const [, name, body] = match;\n const args = splitArguments(body);\n\n if (!args || args.length !== 3) return null;\n\n switch (name) {\n case 'rgb':\n case 'rgba': {\n const [r, g, b] = args.map((arg) => scalar(arg, 255));\n\n return anyNaN(r, g, b) ? null : fromRgb({ r, g, b });\n }\n case 'hsl':\n case 'hsla': {\n const h = hueArgument(args[0]);\n const s = scalar(args[1], 100) / 100;\n const l = scalar(args[2], 100) / 100;\n\n if (anyNaN(h, s, l)) return null;\n\n return fromRgb(rgbFromSrgb(hslToSrgb(h, clamp(s, 0, 1), clamp(l, 0, 1))));\n }\n case 'okhsl': {\n const h = hueArgument(args[0]);\n const s = scalar(args[1], 100) / 100;\n const l = scalar(args[2], 100) / 100;\n\n if (anyNaN(h, s, l)) return null;\n\n return { h, s: clamp(s, 0, 1), l: clamp(l, 0, 1) };\n }\n case 'okhst': {\n const h = hueArgument(args[0]);\n const s = scalar(args[1], 100) / 100;\n const t = scalar(args[2], 100) / 100;\n\n if (anyNaN(h, s, t)) return null;\n\n return fromOkhst({ h, s, t });\n }\n case 'oklch': {\n // In `oklch()` a percentage means 1 for lightness and 0.4 for chroma.\n const l = scalar(args[0], 1);\n const c = scalar(args[1], 0.4);\n const h = hueArgument(args[2]);\n\n return anyNaN(l, c, h) ? null : fromOklch({ l, c, h });\n }\n default:\n return null;\n }\n}\n\nfunction anyNaN(...values: number[]): boolean {\n return values.some((value) => !Number.isFinite(value));\n}\n\nfunction rgbFromSrgb([r, g, b]: [number, number, number]): RgbColor {\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n/** Serialize the canonical color into one of the supported notations. */\nexport function formatColor(color: ColorValue, format: ColorFormat): string {\n // An achromatic color has no meaningful hue, and the conversions leave\n // whatever angle the source happened to carry. Zero reads better.\n const gray = isAchromatic(color);\n const hue = gray ? 0 : color.h;\n const saturation = color.s * 100;\n const lightness = color.l * 100;\n\n switch (format) {\n case 'rgb':\n return formatRgb(hue, saturation, lightness);\n case 'hsl': {\n const text = formatHsl(hue, saturation, lightness);\n\n // CSS HSL derives its hue from the sRGB channels, which is undefined\n // when they are equal — Glaze emits whatever the formula produces. Every\n // other notation carries the hue through, so only HSL needs this.\n return gray ? text.replace(/\\(-?[\\d.]+/, '(0') : text;\n }\n case 'okhsl':\n return formatOkhsl(hue, saturation, lightness);\n case 'okhst':\n return formatOkhst(hue, saturation, toOkhst(color).t * 100);\n case 'oklch':\n return formatOklch(hue, saturation, lightness);\n default:\n return toHex(color);\n }\n}\n\n/**\n * Which notation a string is written in, or `null` when it is not a color.\n * Used to keep the user's own notation while still normalizing the value.\n */\nexport function detectFormat(input: string): ColorFormat | null {\n const text = input.trim().toLowerCase();\n\n if (!parseColor(text)) return null;\n\n if (text.startsWith('#')) return 'hex';\n\n const name = FUNCTION_RE.exec(text)?.[1];\n\n switch (name) {\n case 'rgb':\n case 'rgba':\n return 'rgb';\n case 'hsl':\n case 'hsla':\n return 'hsl';\n case 'okhsl':\n return 'okhsl';\n case 'okhst':\n return 'okhst';\n case 'oklch':\n return 'oklch';\n default:\n return null;\n }\n}\n\n/**\n * Black or white — whichever the WCAG contrast ratio favors on the given\n * color. Keeps the popover preview label readable at any lightness. Returns a\n * literal hex rather than a token, because the answer is measured against this\n * exact fill and must not adapt with the color scheme.\n */\nexport function getContrastingColor(color: ColorValue): '#000000' | '#ffffff' {\n const luminance = relativeLuminanceFromLinearRgb(\n okhslToLinearSrgb(color.h, color.s, color.l),\n );\n\n return contrastRatioFromLuminance(luminance, 0) >=\n contrastRatioFromLuminance(1, luminance)\n ? '#000000'\n : '#ffffff';\n}\n"],"mappings":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import { CubePaginationProps } from "./types.js";
|
|
3
|
-
import * as react from "react";
|
|
4
|
-
|
|
5
|
-
//#region src/components/navigation/Pagination/Pagination.d.ts
|
|
6
|
-
declare const _Pagination: react.ForwardRefExoticComponent<CubePaginationProps & react.RefAttributes<HTMLElement>>;
|
|
7
|
-
//#endregion
|
|
8
|
-
export { _Pagination };
|
|
9
|
-
//# sourceMappingURL=Pagination.d.ts.map
|
|
@@ -1,258 +0,0 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e76eb3e | Cube Dev Team */
|
|
2
|
-
import { extractStyles } from "../../../utils/styles.js";
|
|
3
|
-
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
4
|
-
import { useI18n } from "../../../i18n/useI18n.js";
|
|
5
|
-
import { useFormatter } from "../../../i18n/useFormatter.js";
|
|
6
|
-
import { BackwardIcon } from "../../../icons/BackwardIcon.js";
|
|
7
|
-
import { ForwardIcon } from "../../../icons/ForwardIcon.js";
|
|
8
|
-
import { LeftIcon } from "../../../icons/LeftIcon.js";
|
|
9
|
-
import { RightIcon } from "../../../icons/RightIcon.js";
|
|
10
|
-
import { Button } from "../../actions/index.js";
|
|
11
|
-
import { __Select } from "../../fields/Select/Select.js";
|
|
12
|
-
import { clampPage, getPageInfo, getPaginationRange } from "./use-pagination.js";
|
|
13
|
-
import { OUTER_STYLES, filterBaseProps, tasty } from "@tenphi/tasty";
|
|
14
|
-
import { forwardRef, useMemo } from "react";
|
|
15
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
16
|
-
import { useControlledState } from "@react-stately/utils";
|
|
17
|
-
|
|
18
|
-
//#region src/components/navigation/Pagination/Pagination.tsx
|
|
19
|
-
const PaginationElement = tasty({
|
|
20
|
-
qa: "Pagination",
|
|
21
|
-
as: "nav",
|
|
22
|
-
styles: {
|
|
23
|
-
display: "flex",
|
|
24
|
-
flow: "row",
|
|
25
|
-
gap: "1x",
|
|
26
|
-
placeItems: "center",
|
|
27
|
-
placeContent: "start",
|
|
28
|
-
Summary: {
|
|
29
|
-
preset: {
|
|
30
|
-
"": "t3",
|
|
31
|
-
"size=xsmall": "t4"
|
|
32
|
-
},
|
|
33
|
-
color: "#dark-03",
|
|
34
|
-
whiteSpace: "nowrap"
|
|
35
|
-
},
|
|
36
|
-
Controls: {
|
|
37
|
-
display: "flex",
|
|
38
|
-
flow: "row",
|
|
39
|
-
gap: ".5x",
|
|
40
|
-
placeItems: "center"
|
|
41
|
-
},
|
|
42
|
-
Gap: {
|
|
43
|
-
display: "grid",
|
|
44
|
-
placeItems: "center",
|
|
45
|
-
width: "min $gap-size",
|
|
46
|
-
height: "$gap-size",
|
|
47
|
-
preset: "t3",
|
|
48
|
-
color: "#dark-04",
|
|
49
|
-
userSelect: "none"
|
|
50
|
-
},
|
|
51
|
-
Pages: {
|
|
52
|
-
display: "flex",
|
|
53
|
-
flow: "row",
|
|
54
|
-
gap: "1bw",
|
|
55
|
-
placeItems: "center"
|
|
56
|
-
},
|
|
57
|
-
"$gap-size": {
|
|
58
|
-
"": "$size-sm",
|
|
59
|
-
"size=xsmall": "$size-xs",
|
|
60
|
-
"size=medium": "$size-md"
|
|
61
|
-
}
|
|
62
|
-
},
|
|
63
|
-
styleProps: OUTER_STYLES
|
|
64
|
-
});
|
|
65
|
-
const NavButton = tasty(Button, {
|
|
66
|
-
type: "clear",
|
|
67
|
-
styles: { border: true }
|
|
68
|
-
});
|
|
69
|
-
const PageButton = tasty(Button, { type: "clear" });
|
|
70
|
-
function formatRange(info) {
|
|
71
|
-
return `${(info.page - 1) * info.pageSize + 1}–${info.total > 0 ? Math.min(info.page * info.pageSize, info.total) : info.page * info.pageSize}`;
|
|
72
|
-
}
|
|
73
|
-
function Pagination(props, ref) {
|
|
74
|
-
const { page: pageProp, defaultPage, onPageChange, totalPages: totalPagesProp, total, pageSize: pageSizeProp, defaultPageSize, pageSizeOptions, onPageSizeChange, type = "numbers", siblingCount = 1, boundaryCount = 1, size = "small", isDisabled, hasNextPage, isCompact = false, summary = false, labelFormatter, ariaLabel, pageSizeSelectStyles, qa, mods, ...rest } = props;
|
|
75
|
-
const { t } = useI18n();
|
|
76
|
-
const { formatNumber } = useFormatter();
|
|
77
|
-
const [pageSize, setPageSize] = useControlledState(pageSizeProp, defaultPageSize ?? 50, onPageSizeChange);
|
|
78
|
-
const [page, setPage] = useControlledState(pageProp, defaultPage ?? 1, onPageChange);
|
|
79
|
-
const isCountable = totalPagesProp != null || total != null;
|
|
80
|
-
const info = isCountable ? getPageInfo({
|
|
81
|
-
page,
|
|
82
|
-
pageSize,
|
|
83
|
-
total: total ?? 0,
|
|
84
|
-
totalPages: totalPagesProp
|
|
85
|
-
}) : {
|
|
86
|
-
page: clampPage(page, Number.MAX_SAFE_INTEGER),
|
|
87
|
-
pageSize,
|
|
88
|
-
totalPages: 0,
|
|
89
|
-
total: 0,
|
|
90
|
-
from: 0,
|
|
91
|
-
to: 0
|
|
92
|
-
};
|
|
93
|
-
const { totalPages } = info;
|
|
94
|
-
const goTo = useEvent((next) => {
|
|
95
|
-
const clamped = isCountable ? clampPage(next, totalPages) : Math.max(next, 1);
|
|
96
|
-
if (clamped !== info.page) setPage(clamped);
|
|
97
|
-
});
|
|
98
|
-
const onPageSizeSelectionChange = useEvent((value) => {
|
|
99
|
-
setPageSize(Number(value));
|
|
100
|
-
setPage(1);
|
|
101
|
-
});
|
|
102
|
-
const onPageSelectionChange = useEvent((value) => {
|
|
103
|
-
goTo(Number(value));
|
|
104
|
-
});
|
|
105
|
-
const pageItems = useMemo(() => type === "numbers" && isCountable ? getPaginationRange({
|
|
106
|
-
page: info.page,
|
|
107
|
-
totalPages,
|
|
108
|
-
siblingCount,
|
|
109
|
-
boundaryCount
|
|
110
|
-
}) : [], [
|
|
111
|
-
type,
|
|
112
|
-
isCountable,
|
|
113
|
-
info.page,
|
|
114
|
-
totalPages,
|
|
115
|
-
siblingCount,
|
|
116
|
-
boundaryCount
|
|
117
|
-
]);
|
|
118
|
-
const selectEntries = useMemo(() => type === "select" && isCountable && totalPages <= 200 ? Array.from({ length: totalPages }, (_, i) => i + 1) : null, [
|
|
119
|
-
type,
|
|
120
|
-
isCountable,
|
|
121
|
-
totalPages
|
|
122
|
-
]);
|
|
123
|
-
const isFirst = info.page <= 1;
|
|
124
|
-
const isLast = isCountable ? info.page >= totalPages : !hasNextPage;
|
|
125
|
-
const styles = extractStyles(props, OUTER_STYLES);
|
|
126
|
-
const summaryNode = summary === false ? null : typeof summary === "function" ? summary(info) : info.total > 0 ? t("pagination.summary", "{{from}}–{{to}} of {{total}}", {
|
|
127
|
-
from: formatNumber(info.from),
|
|
128
|
-
to: formatNumber(info.to),
|
|
129
|
-
total: formatNumber(info.total)
|
|
130
|
-
}) : null;
|
|
131
|
-
function renderPageControl() {
|
|
132
|
-
if (selectEntries) return /* @__PURE__ */ jsx(__Select, {
|
|
133
|
-
qa: "PaginationPageSelect",
|
|
134
|
-
size,
|
|
135
|
-
isDisabled,
|
|
136
|
-
"aria-label": t("pagination.selectPage", "Select page"),
|
|
137
|
-
selectedKey: String(info.page),
|
|
138
|
-
width: "min 15x",
|
|
139
|
-
styles: pageSizeSelectStyles,
|
|
140
|
-
onSelectionChange: onPageSelectionChange,
|
|
141
|
-
children: selectEntries.map((entry) => {
|
|
142
|
-
const entryInfo = {
|
|
143
|
-
...info,
|
|
144
|
-
page: entry
|
|
145
|
-
};
|
|
146
|
-
const label = labelFormatter?.(entryInfo) ?? (info.total > 0 ? formatRange(entryInfo) : t("pagination.page", "Page {{page}}", { page: entry }));
|
|
147
|
-
return /* @__PURE__ */ jsx(__Select.Item, {
|
|
148
|
-
textValue: String(label),
|
|
149
|
-
children: label
|
|
150
|
-
}, entry);
|
|
151
|
-
})
|
|
152
|
-
});
|
|
153
|
-
if (type === "numbers" && pageItems.length > 0) return /* @__PURE__ */ jsx("div", {
|
|
154
|
-
"data-element": "Pages",
|
|
155
|
-
children: pageItems.map((entry, index) => entry === "gap" ? /* @__PURE__ */ jsx("div", {
|
|
156
|
-
"data-element": "Gap",
|
|
157
|
-
"aria-hidden": "true",
|
|
158
|
-
children: "…"
|
|
159
|
-
}, `gap-${index}`) : /* @__PURE__ */ jsx(PageButton, {
|
|
160
|
-
qa: `PaginationPage_${entry}`,
|
|
161
|
-
size,
|
|
162
|
-
type: entry === info.page ? "outline" : "clear",
|
|
163
|
-
isDisabled,
|
|
164
|
-
"aria-label": t("pagination.page", "Page {{page}}", { page: entry }),
|
|
165
|
-
"aria-current": entry === info.page ? "page" : void 0,
|
|
166
|
-
onPress: () => goTo(entry),
|
|
167
|
-
children: entry
|
|
168
|
-
}, entry))
|
|
169
|
-
});
|
|
170
|
-
if (!isCountable) return null;
|
|
171
|
-
return /* @__PURE__ */ jsx("div", {
|
|
172
|
-
"data-element": "Summary",
|
|
173
|
-
"data-qa": "PaginationPageLabel",
|
|
174
|
-
children: t("pagination.pageOf", "{{page}} of {{totalPages}}", {
|
|
175
|
-
page: info.page,
|
|
176
|
-
totalPages
|
|
177
|
-
})
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
const showEdgeButtons = !isCompact && isCountable;
|
|
181
|
-
return /* @__PURE__ */ jsxs(PaginationElement, {
|
|
182
|
-
...filterBaseProps(rest, { eventProps: true }),
|
|
183
|
-
ref,
|
|
184
|
-
qa: qa || "Pagination",
|
|
185
|
-
styles,
|
|
186
|
-
mods: {
|
|
187
|
-
size,
|
|
188
|
-
...mods
|
|
189
|
-
},
|
|
190
|
-
"aria-label": ariaLabel ?? t("pagination.ariaLabel", "Pagination"),
|
|
191
|
-
children: [
|
|
192
|
-
summaryNode ? /* @__PURE__ */ jsx("div", {
|
|
193
|
-
"data-element": "Summary",
|
|
194
|
-
children: summaryNode
|
|
195
|
-
}) : null,
|
|
196
|
-
pageSizeOptions && onPageSizeChange ? /* @__PURE__ */ jsx(__Select, {
|
|
197
|
-
qa: "PaginationPageSizeSelect",
|
|
198
|
-
size,
|
|
199
|
-
isDisabled,
|
|
200
|
-
"aria-label": t("pagination.itemsPerPage", "Items per page"),
|
|
201
|
-
selectedKey: String(pageSize),
|
|
202
|
-
styles: pageSizeSelectStyles,
|
|
203
|
-
onSelectionChange: onPageSizeSelectionChange,
|
|
204
|
-
children: pageSizeOptions.map((option) => {
|
|
205
|
-
const label = t("pagination.itemsPerPageOption", "{{size}} / page", { size: option });
|
|
206
|
-
return /* @__PURE__ */ jsx(__Select.Item, {
|
|
207
|
-
textValue: label,
|
|
208
|
-
children: label
|
|
209
|
-
}, option);
|
|
210
|
-
})
|
|
211
|
-
}) : null,
|
|
212
|
-
/* @__PURE__ */ jsxs("div", {
|
|
213
|
-
"data-element": "Controls",
|
|
214
|
-
children: [
|
|
215
|
-
showEdgeButtons ? /* @__PURE__ */ jsx(NavButton, {
|
|
216
|
-
qa: "PaginationFirstButton",
|
|
217
|
-
size,
|
|
218
|
-
icon: /* @__PURE__ */ jsx(BackwardIcon, {}),
|
|
219
|
-
isDisabled: isFirst || isDisabled,
|
|
220
|
-
"aria-label": t("pagination.firstPage", "First page"),
|
|
221
|
-
onPress: () => goTo(1)
|
|
222
|
-
}) : null,
|
|
223
|
-
/* @__PURE__ */ jsx(NavButton, {
|
|
224
|
-
qa: "PaginationPrevButton",
|
|
225
|
-
size,
|
|
226
|
-
icon: /* @__PURE__ */ jsx(LeftIcon, {}),
|
|
227
|
-
isDisabled: isFirst || isDisabled,
|
|
228
|
-
"aria-label": t("pagination.previousPage", "Previous page"),
|
|
229
|
-
onPress: () => goTo(info.page - 1)
|
|
230
|
-
}),
|
|
231
|
-
renderPageControl(),
|
|
232
|
-
/* @__PURE__ */ jsx(NavButton, {
|
|
233
|
-
qa: "PaginationNextButton",
|
|
234
|
-
size,
|
|
235
|
-
icon: /* @__PURE__ */ jsx(RightIcon, {}),
|
|
236
|
-
isDisabled: isLast || isDisabled,
|
|
237
|
-
"aria-label": t("pagination.nextPage", "Next page"),
|
|
238
|
-
onPress: () => goTo(info.page + 1)
|
|
239
|
-
}),
|
|
240
|
-
showEdgeButtons ? /* @__PURE__ */ jsx(NavButton, {
|
|
241
|
-
qa: "PaginationLastButton",
|
|
242
|
-
size,
|
|
243
|
-
icon: /* @__PURE__ */ jsx(ForwardIcon, {}),
|
|
244
|
-
isDisabled: isLast || isDisabled,
|
|
245
|
-
"aria-label": t("pagination.lastPage", "Last page"),
|
|
246
|
-
onPress: () => goTo(totalPages)
|
|
247
|
-
}) : null
|
|
248
|
-
]
|
|
249
|
-
})
|
|
250
|
-
]
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
const _Pagination = forwardRef(Pagination);
|
|
254
|
-
_Pagination.displayName = "Pagination";
|
|
255
|
-
|
|
256
|
-
//#endregion
|
|
257
|
-
export { _Pagination };
|
|
258
|
-
//# sourceMappingURL=Pagination.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Pagination.js","names":["Select"],"sources":["../../../../src/components/navigation/Pagination/Pagination.tsx"],"sourcesContent":["import { useControlledState } from '@react-stately/utils';\nimport { filterBaseProps, OUTER_STYLES, tasty } from '@tenphi/tasty';\nimport { forwardRef, useMemo } from 'react';\n\nimport { useEvent } from '../../../_internal/hooks';\nimport { useFormatter, useI18n } from '../../../i18n';\nimport { BackwardIcon, ForwardIcon, LeftIcon, RightIcon } from '../../../icons';\nimport { extractStyles } from '../../../utils/styles';\nimport { Button } from '../../actions';\nimport { Select } from '../../fields/Select';\n\nimport { clampPage, getPageInfo, getPaginationRange } from './use-pagination';\n\nimport type { ForwardedRef, ReactElement } from 'react';\nimport type { CubePaginationProps, CubeTablePageInfo } from './types';\n\nconst PaginationElement = tasty({\n qa: 'Pagination',\n as: 'nav',\n styles: {\n display: 'flex',\n flow: 'row',\n gap: '1x',\n placeItems: 'center',\n placeContent: 'start',\n\n Summary: {\n // Follows the control's size rather than being fixed, so the summary\n // matches whatever the buttons beside it are.\n preset: { '': 't3', 'size=xsmall': 't4' },\n color: '#dark-03',\n whiteSpace: 'nowrap',\n },\n\n Controls: {\n display: 'flex',\n flow: 'row',\n gap: '.5x',\n placeItems: 'center',\n },\n\n Gap: {\n display: 'grid',\n placeItems: 'center',\n width: 'min $gap-size',\n height: '$gap-size',\n preset: 't3',\n color: '#dark-04',\n userSelect: 'none',\n },\n\n /**\n * The page numbers sit tighter than the nav buttons around them: they read\n * as one run of pages, not as separate controls, and a hairline is enough\n * to keep the current page's outline off its neighbours.\n */\n Pages: {\n display: 'flex',\n flow: 'row',\n gap: '1bw',\n placeItems: 'center',\n },\n\n '$gap-size': {\n '': '$size-sm',\n 'size=xsmall': '$size-xs',\n 'size=medium': '$size-md',\n },\n },\n styleProps: OUTER_STYLES,\n});\n\nconst NavButton = tasty(Button, {\n type: 'clear',\n styles: { border: true },\n});\n\n// Page buttons are borderless so the current page — which renders as `outline`\n// and therefore draws its own border — is the only bordered one in the run.\nconst PageButton = tasty(Button, {\n type: 'clear',\n});\n\nfunction formatRange(info: CubeTablePageInfo): string {\n const start = (info.page - 1) * info.pageSize + 1;\n const end =\n info.total > 0\n ? Math.min(info.page * info.pageSize, info.total)\n : info.page * info.pageSize;\n\n return `${start}–${end}`;\n}\n\nfunction Pagination(\n props: CubePaginationProps,\n ref: ForwardedRef<HTMLElement>,\n): ReactElement {\n const {\n page: pageProp,\n defaultPage,\n onPageChange,\n totalPages: totalPagesProp,\n total,\n pageSize: pageSizeProp,\n defaultPageSize,\n pageSizeOptions,\n onPageSizeChange,\n type = 'numbers',\n siblingCount = 1,\n boundaryCount = 1,\n size = 'small',\n isDisabled,\n hasNextPage,\n isCompact = false,\n summary = false,\n labelFormatter,\n ariaLabel,\n pageSizeSelectStyles,\n qa,\n mods,\n ...rest\n } = props;\n\n const { t } = useI18n();\n const { formatNumber } = useFormatter();\n\n const [pageSize, setPageSize] = useControlledState<number>(\n pageSizeProp as number,\n defaultPageSize ?? 50,\n onPageSizeChange as (v: number) => void,\n );\n const [page, setPage] = useControlledState<number>(\n pageProp as number,\n defaultPage ?? 1,\n onPageChange as (v: number) => void,\n );\n\n // Unknown total: prev/next only, with `hasNextPage` driving the next button.\n // The page must NOT be clamped in that mode — there is nothing to clamp to.\n const isCountable = totalPagesProp != null || total != null;\n\n const info: CubeTablePageInfo = isCountable\n ? getPageInfo({\n page,\n pageSize,\n total: total ?? 0,\n totalPages: totalPagesProp,\n })\n : {\n page: clampPage(page, Number.MAX_SAFE_INTEGER),\n pageSize,\n totalPages: 0,\n total: 0,\n from: 0,\n to: 0,\n };\n\n const { totalPages } = info;\n\n const goTo = useEvent((next: number) => {\n const clamped = isCountable\n ? clampPage(next, totalPages)\n : Math.max(next, 1);\n\n if (clamped !== info.page) setPage(clamped);\n });\n\n const onPageSizeSelectionChange = useEvent((value: any) => {\n setPageSize(Number(value));\n setPage(1);\n });\n\n const onPageSelectionChange = useEvent((value: any) => {\n goTo(Number(value));\n });\n\n const pageItems = useMemo(\n () =>\n type === 'numbers' && isCountable\n ? getPaginationRange({\n page: info.page,\n totalPages,\n siblingCount,\n boundaryCount,\n })\n : [],\n [type, isCountable, info.page, totalPages, siblingCount, boundaryCount],\n );\n\n // `type=\"select\"` materializes one entry per page, so it is only safe for\n // small page counts. Above the cap we fall back to `compact`, which reads the\n // same but renders a single label.\n const selectEntries = useMemo(\n () =>\n type === 'select' && isCountable && totalPages <= 200\n ? Array.from({ length: totalPages }, (_, i) => i + 1)\n : null,\n [type, isCountable, totalPages],\n );\n\n const isFirst = info.page <= 1;\n const isLast = isCountable ? info.page >= totalPages : !hasNextPage;\n\n const styles = extractStyles(props, OUTER_STYLES);\n\n const summaryNode =\n summary === false\n ? null\n : typeof summary === 'function'\n ? summary(info)\n : info.total > 0\n ? // Numbers are formatted here rather than left to i18next, which\n // interpolates them raw (\"1204\", not \"1,204\").\n t('pagination.summary', '{{from}}–{{to}} of {{total}}', {\n from: formatNumber(info.from),\n to: formatNumber(info.to),\n total: formatNumber(info.total),\n })\n : null;\n\n function renderPageControl() {\n if (selectEntries) {\n return (\n <Select\n qa=\"PaginationPageSelect\"\n size={size}\n isDisabled={isDisabled}\n aria-label={t('pagination.selectPage', 'Select page')}\n selectedKey={String(info.page)}\n width=\"min 15x\"\n styles={pageSizeSelectStyles}\n onSelectionChange={onPageSelectionChange}\n >\n {selectEntries.map((entry) => {\n const entryInfo = { ...info, page: entry };\n const label =\n labelFormatter?.(entryInfo) ??\n (info.total > 0\n ? formatRange(entryInfo)\n : t('pagination.page', 'Page {{page}}', { page: entry }));\n\n return (\n <Select.Item key={entry} textValue={String(label)}>\n {label}\n </Select.Item>\n );\n })}\n </Select>\n );\n }\n\n if (type === 'numbers' && pageItems.length > 0) {\n return (\n <div data-element=\"Pages\">\n {pageItems.map((entry, index) =>\n entry === 'gap' ? (\n <div key={`gap-${index}`} data-element=\"Gap\" aria-hidden=\"true\">\n {'…'}\n </div>\n ) : (\n <PageButton\n key={entry}\n qa={`PaginationPage_${entry}`}\n size={size}\n type={entry === info.page ? 'outline' : 'clear'}\n isDisabled={isDisabled}\n aria-label={t('pagination.page', 'Page {{page}}', {\n page: entry,\n })}\n aria-current={entry === info.page ? 'page' : undefined}\n onPress={() => goTo(entry)}\n >\n {entry}\n </PageButton>\n ),\n )}\n </div>\n );\n }\n\n if (!isCountable) return null;\n\n return (\n <div data-element=\"Summary\" data-qa=\"PaginationPageLabel\">\n {t('pagination.pageOf', '{{page}} of {{totalPages}}', {\n page: info.page,\n totalPages,\n })}\n </div>\n );\n }\n\n const showEdgeButtons = !isCompact && isCountable;\n\n return (\n <PaginationElement\n {...filterBaseProps(rest, { eventProps: true })}\n ref={ref}\n qa={qa || 'Pagination'}\n styles={styles}\n mods={{ size, ...mods }}\n aria-label={ariaLabel ?? t('pagination.ariaLabel', 'Pagination')}\n >\n {summaryNode ? <div data-element=\"Summary\">{summaryNode}</div> : null}\n\n {pageSizeOptions && onPageSizeChange ? (\n <Select\n qa=\"PaginationPageSizeSelect\"\n size={size}\n isDisabled={isDisabled}\n aria-label={t('pagination.itemsPerPage', 'Items per page')}\n selectedKey={String(pageSize)}\n styles={pageSizeSelectStyles}\n onSelectionChange={onPageSizeSelectionChange}\n >\n {pageSizeOptions.map((option) => {\n const label = t(\n 'pagination.itemsPerPageOption',\n '{{size}} / page',\n {\n size: option,\n },\n );\n\n return (\n <Select.Item key={option} textValue={label}>\n {label}\n </Select.Item>\n );\n })}\n </Select>\n ) : null}\n\n <div data-element=\"Controls\">\n {showEdgeButtons ? (\n <NavButton\n qa=\"PaginationFirstButton\"\n size={size}\n icon={<BackwardIcon />}\n isDisabled={isFirst || isDisabled}\n aria-label={t('pagination.firstPage', 'First page')}\n onPress={() => goTo(1)}\n />\n ) : null}\n\n <NavButton\n qa=\"PaginationPrevButton\"\n size={size}\n icon={<LeftIcon />}\n isDisabled={isFirst || isDisabled}\n aria-label={t('pagination.previousPage', 'Previous page')}\n onPress={() => goTo(info.page - 1)}\n />\n\n {renderPageControl()}\n\n <NavButton\n qa=\"PaginationNextButton\"\n size={size}\n icon={<RightIcon />}\n isDisabled={isLast || isDisabled}\n aria-label={t('pagination.nextPage', 'Next page')}\n onPress={() => goTo(info.page + 1)}\n />\n\n {showEdgeButtons ? (\n <NavButton\n qa=\"PaginationLastButton\"\n size={size}\n icon={<ForwardIcon />}\n isDisabled={isLast || isDisabled}\n aria-label={t('pagination.lastPage', 'Last page')}\n onPress={() => goTo(totalPages)}\n />\n ) : null}\n </div>\n </PaginationElement>\n );\n}\n\nconst _Pagination = forwardRef(Pagination);\n\n_Pagination.displayName = 'Pagination';\n\nexport { _Pagination as Pagination };\n"],"mappings":"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"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import { CubePaginationItem, CubePaginationProps, CubePaginationType, CubeTablePageInfo } from "./types.js";
|
|
3
|
-
import { _Pagination } from "./Pagination.js";
|
|
4
|
-
import { PaginationRangeOptions, UsePaginationOptions, UsePaginationResult, clampPage, getPageInfo, getPaginationRange, usePagination } from "./use-pagination.js";
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import { BaseProps, OuterStyleProps, Styles } from "@tenphi/tasty";
|
|
3
|
-
import { ReactNode } from "react";
|
|
4
|
-
|
|
5
|
-
//#region src/components/navigation/Pagination/types.d.ts
|
|
6
|
-
/**
|
|
7
|
-
* How the page control is rendered.
|
|
8
|
-
*
|
|
9
|
-
* - `numbers` — `1 2 3 … 42` buttons. Correct for large page counts because it
|
|
10
|
-
* never materializes one element per page.
|
|
11
|
-
* - `select` — a `Select` listing every page (or item range). Only viable when
|
|
12
|
-
* the page count is small.
|
|
13
|
-
* - `compact` — `‹ 3 of 42 ›`, no page buttons at all.
|
|
14
|
-
*/
|
|
15
|
-
type CubePaginationType = 'numbers' | 'select' | 'compact';
|
|
16
|
-
/** Everything a summary or label renderer needs to describe the current page. */
|
|
17
|
-
interface CubeTablePageInfo {
|
|
18
|
-
/** 1-based. */
|
|
19
|
-
page: number;
|
|
20
|
-
pageSize: number;
|
|
21
|
-
totalPages: number;
|
|
22
|
-
/** Total items across all pages. `0` when unknown. */
|
|
23
|
-
total: number;
|
|
24
|
-
/** 1-based index of the first item on this page. */
|
|
25
|
-
from: number;
|
|
26
|
-
/** 1-based index of the last item on this page. */
|
|
27
|
-
to: number;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* A `'gap'` entry stands for the ellipsis between two runs of page numbers.
|
|
31
|
-
* Exported because `Pagination` and its tests both need to reason about it.
|
|
32
|
-
*/
|
|
33
|
-
type CubePaginationItem = number | 'gap';
|
|
34
|
-
interface CubePaginationProps extends BaseProps, OuterStyleProps {
|
|
35
|
-
/** Controlled current page. 1-based. */
|
|
36
|
-
page?: number;
|
|
37
|
-
/** Initial page for uncontrolled usage. @default 1 */
|
|
38
|
-
defaultPage?: number;
|
|
39
|
-
onPageChange?: (page: number) => void;
|
|
40
|
-
/**
|
|
41
|
-
* Total number of pages. Supply this, or `total` + `pageSize` and it is
|
|
42
|
-
* derived. When neither is available the control falls back to prev/next
|
|
43
|
-
* only, driven by `hasNextPage`.
|
|
44
|
-
*/
|
|
45
|
-
totalPages?: number;
|
|
46
|
-
/** Total items across all pages. Preferred over `totalPages`. */
|
|
47
|
-
total?: number;
|
|
48
|
-
/** Controlled page size. */
|
|
49
|
-
pageSize?: number;
|
|
50
|
-
/** Initial page size for uncontrolled usage. @default 50 */
|
|
51
|
-
defaultPageSize?: number;
|
|
52
|
-
/** Supplying this together with `onPageSizeChange` renders the size selector. */
|
|
53
|
-
pageSizeOptions?: number[];
|
|
54
|
-
onPageSizeChange?: (pageSize: number) => void;
|
|
55
|
-
/** @default 'numbers' */
|
|
56
|
-
type?: CubePaginationType;
|
|
57
|
-
/** Page buttons rendered either side of the current page. @default 1 */
|
|
58
|
-
siblingCount?: number;
|
|
59
|
-
/** Page buttons pinned at each end. @default 1 */
|
|
60
|
-
boundaryCount?: number;
|
|
61
|
-
/** @default 'small' */
|
|
62
|
-
size?: 'xsmall' | 'small' | 'medium';
|
|
63
|
-
isDisabled?: boolean;
|
|
64
|
-
/**
|
|
65
|
-
* Cursor pagination with an unknown total: keeps "next" enabled while there
|
|
66
|
-
* is more to fetch. Ignored when `totalPages` is known.
|
|
67
|
-
*/
|
|
68
|
-
hasNextPage?: boolean;
|
|
69
|
-
/** Hide the first/last jump buttons. @default false */
|
|
70
|
-
isCompact?: boolean;
|
|
71
|
-
/** `true` renders the localized "1–50 of 1,204". @default false */
|
|
72
|
-
summary?: boolean | ((info: CubeTablePageInfo) => ReactNode);
|
|
73
|
-
/** Labels the entries of `type="select"`. Defaults to item ranges. */
|
|
74
|
-
labelFormatter?: (info: CubeTablePageInfo) => ReactNode;
|
|
75
|
-
ariaLabel?: string;
|
|
76
|
-
styles?: Styles;
|
|
77
|
-
pageSizeSelectStyles?: Styles;
|
|
78
|
-
}
|
|
79
|
-
//#endregion
|
|
80
|
-
export { CubePaginationItem, CubePaginationProps, CubePaginationType, CubeTablePageInfo };
|
|
81
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import { CubePaginationItem, CubeTablePageInfo } from "./types.js";
|
|
3
|
-
|
|
4
|
-
//#region src/components/navigation/Pagination/use-pagination.d.ts
|
|
5
|
-
declare function clampPage(page: number, totalPages: number): number;
|
|
6
|
-
interface PaginationRangeOptions {
|
|
7
|
-
page: number;
|
|
8
|
-
totalPages: number;
|
|
9
|
-
/** Page buttons either side of the current page. @default 1 */
|
|
10
|
-
siblingCount?: number;
|
|
11
|
-
/** Page buttons pinned at each end. @default 1 */
|
|
12
|
-
boundaryCount?: number;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Page numbers to render, with `'gap'` marking an elided run. The output length
|
|
16
|
-
* is bounded by `boundaryCount * 2 + siblingCount * 2 + 3` regardless of
|
|
17
|
-
* `totalPages` — which is the whole point of `type="numbers"`: a 100k-row table
|
|
18
|
-
* at 100 per page renders ~7 buttons, not 1000 `Select` items.
|
|
19
|
-
*/
|
|
20
|
-
declare function getPaginationRange({
|
|
21
|
-
page,
|
|
22
|
-
totalPages,
|
|
23
|
-
siblingCount,
|
|
24
|
-
boundaryCount
|
|
25
|
-
}: PaginationRangeOptions): CubePaginationItem[];
|
|
26
|
-
declare function getPageInfo(options: {
|
|
27
|
-
page: number;
|
|
28
|
-
pageSize: number;
|
|
29
|
-
total: number;
|
|
30
|
-
totalPages?: number;
|
|
31
|
-
}): CubeTablePageInfo;
|
|
32
|
-
interface UsePaginationOptions {
|
|
33
|
-
page?: number;
|
|
34
|
-
defaultPage?: number;
|
|
35
|
-
onPageChange?: (page: number) => void;
|
|
36
|
-
pageSize?: number;
|
|
37
|
-
defaultPageSize?: number;
|
|
38
|
-
onPageSizeChange?: (pageSize: number) => void;
|
|
39
|
-
}
|
|
40
|
-
type UsePaginationResult<T> = CubeTablePageInfo & {
|
|
41
|
-
/** The current page's slice of `items`. */pageItems: T[];
|
|
42
|
-
setPage: (page: number) => void; /** Also resets to page 1, since the old page index no longer means anything. */
|
|
43
|
-
setPageSize: (pageSize: number) => void;
|
|
44
|
-
};
|
|
45
|
-
/**
|
|
46
|
-
* Client-side pagination over an in-memory array. Standalone — `ItemTable` uses
|
|
47
|
-
* it internally, but it works on its own for any paged list.
|
|
48
|
-
*/
|
|
49
|
-
declare function usePagination<T>(items: readonly T[], options?: UsePaginationOptions): UsePaginationResult<T>;
|
|
50
|
-
//#endregion
|
|
51
|
-
export { PaginationRangeOptions, UsePaginationOptions, UsePaginationResult, clampPage, getPageInfo, getPaginationRange, usePagination };
|
|
52
|
-
//# sourceMappingURL=use-pagination.d.ts.map
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e76eb3e | Cube Dev Team */
|
|
2
|
-
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
3
|
-
import { useMemo } from "react";
|
|
4
|
-
import { useControlledState } from "@react-stately/utils";
|
|
5
|
-
|
|
6
|
-
//#region src/components/navigation/Pagination/use-pagination.ts
|
|
7
|
-
function range(start, end) {
|
|
8
|
-
const length = end - start + 1;
|
|
9
|
-
return length > 0 ? Array.from({ length }, (_, i) => start + i) : [];
|
|
10
|
-
}
|
|
11
|
-
function clampPage(page, totalPages) {
|
|
12
|
-
if (!Number.isFinite(page)) return 1;
|
|
13
|
-
return Math.min(Math.max(Math.trunc(page), 1), Math.max(totalPages, 1));
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Page numbers to render, with `'gap'` marking an elided run. The output length
|
|
17
|
-
* is bounded by `boundaryCount * 2 + siblingCount * 2 + 3` regardless of
|
|
18
|
-
* `totalPages` — which is the whole point of `type="numbers"`: a 100k-row table
|
|
19
|
-
* at 100 per page renders ~7 buttons, not 1000 `Select` items.
|
|
20
|
-
*/
|
|
21
|
-
function getPaginationRange({ page, totalPages, siblingCount = 1, boundaryCount = 1 }) {
|
|
22
|
-
if (totalPages <= 0) return [];
|
|
23
|
-
const current = clampPage(page, totalPages);
|
|
24
|
-
const startPages = range(1, Math.min(boundaryCount, totalPages));
|
|
25
|
-
const endPages = range(Math.max(totalPages - boundaryCount + 1, boundaryCount + 1), totalPages);
|
|
26
|
-
const siblingsStart = Math.max(Math.min(current - siblingCount, totalPages - boundaryCount - siblingCount * 2 - 1), boundaryCount + 2);
|
|
27
|
-
const siblingsEnd = Math.min(Math.max(current + siblingCount, boundaryCount + siblingCount * 2 + 2), endPages.length > 0 ? endPages[0] - 2 : totalPages - 1);
|
|
28
|
-
return [
|
|
29
|
-
...startPages,
|
|
30
|
-
...siblingsStart > boundaryCount + 2 ? ["gap"] : boundaryCount + 1 < totalPages - boundaryCount ? [boundaryCount + 1] : [],
|
|
31
|
-
...range(siblingsStart, siblingsEnd),
|
|
32
|
-
...siblingsEnd < totalPages - boundaryCount - 1 ? ["gap"] : totalPages - boundaryCount > boundaryCount ? [totalPages - boundaryCount] : [],
|
|
33
|
-
...endPages
|
|
34
|
-
];
|
|
35
|
-
}
|
|
36
|
-
function getPageInfo(options) {
|
|
37
|
-
const { pageSize, total } = options;
|
|
38
|
-
const totalPages = options.totalPages ?? (pageSize > 0 ? Math.max(Math.ceil(total / pageSize), 1) : 1);
|
|
39
|
-
const page = clampPage(options.page, totalPages);
|
|
40
|
-
return {
|
|
41
|
-
page,
|
|
42
|
-
pageSize,
|
|
43
|
-
totalPages,
|
|
44
|
-
total,
|
|
45
|
-
from: total === 0 ? 0 : (page - 1) * pageSize + 1,
|
|
46
|
-
to: total === 0 ? 0 : Math.min(page * pageSize, total)
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Client-side pagination over an in-memory array. Standalone — `ItemTable` uses
|
|
51
|
-
* it internally, but it works on its own for any paged list.
|
|
52
|
-
*/
|
|
53
|
-
function usePagination(items, options = {}) {
|
|
54
|
-
const [pageSize, setPageSizeState] = useControlledState(options.pageSize, options.defaultPageSize ?? 50, options.onPageSizeChange);
|
|
55
|
-
const [page, setPageState] = useControlledState(options.page, options.defaultPage ?? 1, options.onPageChange);
|
|
56
|
-
const info = getPageInfo({
|
|
57
|
-
page,
|
|
58
|
-
pageSize,
|
|
59
|
-
total: items.length
|
|
60
|
-
});
|
|
61
|
-
const setPage = useEvent((next) => {
|
|
62
|
-
setPageState(clampPage(next, info.totalPages));
|
|
63
|
-
});
|
|
64
|
-
const setPageSize = useEvent((next) => {
|
|
65
|
-
setPageSizeState(next);
|
|
66
|
-
setPageState(1);
|
|
67
|
-
});
|
|
68
|
-
const pageItems = useMemo(() => items.slice((info.page - 1) * pageSize, info.page * pageSize), [
|
|
69
|
-
items,
|
|
70
|
-
info.page,
|
|
71
|
-
pageSize
|
|
72
|
-
]);
|
|
73
|
-
return {
|
|
74
|
-
...info,
|
|
75
|
-
pageItems,
|
|
76
|
-
setPage,
|
|
77
|
-
setPageSize
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
//#endregion
|
|
82
|
-
export { clampPage, getPageInfo, getPaginationRange, usePagination };
|
|
83
|
-
//# sourceMappingURL=use-pagination.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-pagination.js","names":[],"sources":["../../../../src/components/navigation/Pagination/use-pagination.ts"],"sourcesContent":["import { useControlledState } from '@react-stately/utils';\nimport { useMemo } from 'react';\n\nimport { useEvent } from '../../../_internal/hooks';\n\nimport type { CubePaginationItem, CubeTablePageInfo } from './types';\n\nfunction range(start: number, end: number): number[] {\n const length = end - start + 1;\n\n return length > 0 ? Array.from({ length }, (_, i) => start + i) : [];\n}\n\nexport function clampPage(page: number, totalPages: number): number {\n if (!Number.isFinite(page)) return 1;\n\n return Math.min(Math.max(Math.trunc(page), 1), Math.max(totalPages, 1));\n}\n\nexport interface PaginationRangeOptions {\n page: number;\n totalPages: number;\n /** Page buttons either side of the current page. @default 1 */\n siblingCount?: number;\n /** Page buttons pinned at each end. @default 1 */\n boundaryCount?: number;\n}\n\n/**\n * Page numbers to render, with `'gap'` marking an elided run. The output length\n * is bounded by `boundaryCount * 2 + siblingCount * 2 + 3` regardless of\n * `totalPages` — which is the whole point of `type=\"numbers\"`: a 100k-row table\n * at 100 per page renders ~7 buttons, not 1000 `Select` items.\n */\nexport function getPaginationRange({\n page,\n totalPages,\n siblingCount = 1,\n boundaryCount = 1,\n}: PaginationRangeOptions): CubePaginationItem[] {\n if (totalPages <= 0) return [];\n\n const current = clampPage(page, totalPages);\n\n const startPages = range(1, Math.min(boundaryCount, totalPages));\n const endPages = range(\n Math.max(totalPages - boundaryCount + 1, boundaryCount + 1),\n totalPages,\n );\n\n // Pull the sibling window inwards when it would run past either boundary, so\n // the rendered count stays constant as the user pages through.\n const siblingsStart = Math.max(\n Math.min(\n current - siblingCount,\n totalPages - boundaryCount - siblingCount * 2 - 1,\n ),\n boundaryCount + 2,\n );\n const siblingsEnd = Math.min(\n Math.max(current + siblingCount, boundaryCount + siblingCount * 2 + 2),\n endPages.length > 0 ? endPages[0] - 2 : totalPages - 1,\n );\n\n return [\n ...startPages,\n\n // A gap that would hide exactly one page renders that page instead.\n ...(siblingsStart > boundaryCount + 2\n ? (['gap'] as CubePaginationItem[])\n : boundaryCount + 1 < totalPages - boundaryCount\n ? [boundaryCount + 1]\n : []),\n\n ...range(siblingsStart, siblingsEnd),\n\n ...(siblingsEnd < totalPages - boundaryCount - 1\n ? (['gap'] as CubePaginationItem[])\n : totalPages - boundaryCount > boundaryCount\n ? [totalPages - boundaryCount]\n : []),\n\n ...endPages,\n ];\n}\n\nexport function getPageInfo(options: {\n page: number;\n pageSize: number;\n total: number;\n totalPages?: number;\n}): CubeTablePageInfo {\n const { pageSize, total } = options;\n const totalPages =\n options.totalPages ??\n (pageSize > 0 ? Math.max(Math.ceil(total / pageSize), 1) : 1);\n const page = clampPage(options.page, totalPages);\n const from = total === 0 ? 0 : (page - 1) * pageSize + 1;\n const to = total === 0 ? 0 : Math.min(page * pageSize, total);\n\n return { page, pageSize, totalPages, total, from, to };\n}\n\nexport interface UsePaginationOptions {\n page?: number;\n defaultPage?: number;\n onPageChange?: (page: number) => void;\n pageSize?: number;\n defaultPageSize?: number;\n onPageSizeChange?: (pageSize: number) => void;\n}\n\nexport type UsePaginationResult<T> = CubeTablePageInfo & {\n /** The current page's slice of `items`. */\n pageItems: T[];\n setPage: (page: number) => void;\n /** Also resets to page 1, since the old page index no longer means anything. */\n setPageSize: (pageSize: number) => void;\n};\n\n/**\n * Client-side pagination over an in-memory array. Standalone — `ItemTable` uses\n * it internally, but it works on its own for any paged list.\n */\nexport function usePagination<T>(\n items: readonly T[],\n options: UsePaginationOptions = {},\n): UsePaginationResult<T> {\n const [pageSize, setPageSizeState] = useControlledState<number>(\n options.pageSize as number,\n options.defaultPageSize ?? 50,\n options.onPageSizeChange as (v: number) => void,\n );\n const [page, setPageState] = useControlledState<number>(\n options.page as number,\n options.defaultPage ?? 1,\n options.onPageChange as (v: number) => void,\n );\n\n const info = getPageInfo({ page, pageSize, total: items.length });\n\n const setPage = useEvent((next: number) => {\n setPageState(clampPage(next, info.totalPages));\n });\n\n const setPageSize = useEvent((next: number) => {\n setPageSizeState(next);\n setPageState(1);\n });\n\n const pageItems = useMemo(\n () => items.slice((info.page - 1) * pageSize, info.page * pageSize) as T[],\n [items, info.page, pageSize],\n );\n\n return { ...info, pageItems, setPage, setPageSize };\n}\n"],"mappings":";;;;;;AAOA,SAAS,MAAM,OAAe,KAAuB;CACnD,MAAM,SAAS,MAAM,QAAQ;AAE7B,QAAO,SAAS,IAAI,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,MAAM,QAAQ,EAAE,GAAG,EAAE;;AAGtE,SAAgB,UAAU,MAAc,YAA4B;AAClE,KAAI,CAAC,OAAO,SAAS,KAAK,CAAE,QAAO;AAEnC,QAAO,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,KAAK,EAAE,EAAE,EAAE,KAAK,IAAI,YAAY,EAAE,CAAC;;;;;;;;AAkBzE,SAAgB,mBAAmB,EACjC,MACA,YACA,eAAe,GACf,gBAAgB,KAC+B;AAC/C,KAAI,cAAc,EAAG,QAAO,EAAE;CAE9B,MAAM,UAAU,UAAU,MAAM,WAAW;CAE3C,MAAM,aAAa,MAAM,GAAG,KAAK,IAAI,eAAe,WAAW,CAAC;CAChE,MAAM,WAAW,MACf,KAAK,IAAI,aAAa,gBAAgB,GAAG,gBAAgB,EAAE,EAC3D,WACD;CAID,MAAM,gBAAgB,KAAK,IACzB,KAAK,IACH,UAAU,cACV,aAAa,gBAAgB,eAAe,IAAI,EACjD,EACD,gBAAgB,EACjB;CACD,MAAM,cAAc,KAAK,IACvB,KAAK,IAAI,UAAU,cAAc,gBAAgB,eAAe,IAAI,EAAE,EACtE,SAAS,SAAS,IAAI,SAAS,KAAK,IAAI,aAAa,EACtD;AAED,QAAO;EACL,GAAG;EAGH,GAAI,gBAAgB,gBAAgB,IAC/B,CAAC,MAAM,GACR,gBAAgB,IAAI,aAAa,gBAC/B,CAAC,gBAAgB,EAAE,GACnB,EAAE;EAER,GAAG,MAAM,eAAe,YAAY;EAEpC,GAAI,cAAc,aAAa,gBAAgB,IAC1C,CAAC,MAAM,GACR,aAAa,gBAAgB,gBAC3B,CAAC,aAAa,cAAc,GAC5B,EAAE;EAER,GAAG;EACJ;;AAGH,SAAgB,YAAY,SAKN;CACpB,MAAM,EAAE,UAAU,UAAU;CAC5B,MAAM,aACJ,QAAQ,eACP,WAAW,IAAI,KAAK,IAAI,KAAK,KAAK,QAAQ,SAAS,EAAE,EAAE,GAAG;CAC7D,MAAM,OAAO,UAAU,QAAQ,MAAM,WAAW;AAIhD,QAAO;EAAE;EAAM;EAAU;EAAY;EAAO,MAH/B,UAAU,IAAI,KAAK,OAAO,KAAK,WAAW;EAGL,IAFvC,UAAU,IAAI,IAAI,KAAK,IAAI,OAAO,UAAU,MAAM;EAEP;;;;;;AAwBxD,SAAgB,cACd,OACA,UAAgC,EAAE,EACV;CACxB,MAAM,CAAC,UAAU,oBAAoB,mBACnC,QAAQ,UACR,QAAQ,mBAAmB,IAC3B,QAAQ,iBACT;CACD,MAAM,CAAC,MAAM,gBAAgB,mBAC3B,QAAQ,MACR,QAAQ,eAAe,GACvB,QAAQ,aACT;CAED,MAAM,OAAO,YAAY;EAAE;EAAM;EAAU,OAAO,MAAM;EAAQ,CAAC;CAEjE,MAAM,UAAU,UAAU,SAAiB;AACzC,eAAa,UAAU,MAAM,KAAK,WAAW,CAAC;GAC9C;CAEF,MAAM,cAAc,UAAU,SAAiB;AAC7C,mBAAiB,KAAK;AACtB,eAAa,EAAE;GACf;CAEF,MAAM,YAAY,cACV,MAAM,OAAO,KAAK,OAAO,KAAK,UAAU,KAAK,OAAO,SAAS,EACnE;EAAC;EAAO,KAAK;EAAM;EAAS,CAC7B;AAED,QAAO;EAAE,GAAG;EAAM;EAAW;EAAS;EAAa"}
|