@cube-dev/ui-kit 0.182.0 → 0.183.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CHANGELOG.md +10 -0
- package/dist/_internal/hooks/use-debounced-value.js +48 -31
- package/dist/_internal/hooks/use-debounced-value.js.map +1 -1
- package/dist/_internal/hooks/use-deprecation-warning.js +22 -7
- package/dist/_internal/hooks/use-deprecation-warning.js.map +1 -1
- package/dist/_internal/hooks/use-event.js +1 -1
- package/dist/_internal/hooks/use-event.js.map +1 -1
- package/dist/_internal/hooks/use-is-first-render.js +1 -1
- package/dist/_internal/hooks/use-is-first-render.js.map +1 -1
- package/dist/_internal/hooks/use-sync-ref.js +12 -4
- package/dist/_internal/hooks/use-sync-ref.js.map +1 -1
- package/dist/_internal/hooks/use-timer/timer.js +1 -1
- package/dist/_internal/hooks/use-timer/timer.js.map +1 -1
- package/dist/_internal/hooks/use-timer/use-timer.js +90 -20
- package/dist/_internal/hooks/use-timer/use-timer.js.map +1 -1
- package/dist/_internal/hooks/use-warn.js +4 -4
- package/dist/_internal/hooks/use-warn.js.map +1 -1
- package/dist/components/Block.js +29 -7
- package/dist/components/Block.js.map +1 -1
- package/dist/components/CollectionItem.js +1 -1
- package/dist/components/CollectionItem.js.map +1 -1
- package/dist/components/GlobalStyles.js +33 -9
- package/dist/components/GlobalStyles.js.map +1 -1
- package/dist/components/GridProvider.js +4 -4
- package/dist/components/GridProvider.js.map +1 -1
- package/dist/components/HiddenInput.js +1 -1
- package/dist/components/HiddenInput.js.map +1 -1
- package/dist/components/Root.js +137 -42
- package/dist/components/Root.js.map +1 -1
- package/dist/components/actions/Action/Action.js +20 -8
- package/dist/components/actions/Action/Action.js.map +1 -1
- package/dist/components/actions/Banner/Banner.js +91 -22
- package/dist/components/actions/Banner/Banner.js.map +1 -1
- package/dist/components/actions/Button/Button.js +5 -5
- package/dist/components/actions/Button/Button.js.map +1 -1
- package/dist/components/actions/ButtonGroup/ButtonGroup.js +15 -5
- package/dist/components/actions/ButtonGroup/ButtonGroup.js.map +1 -1
- package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
- package/dist/components/actions/ButtonSplit/ButtonSplit.js.map +1 -1
- package/dist/components/actions/ButtonSplit/context.js +1 -1
- package/dist/components/actions/ButtonSplit/context.js.map +1 -1
- package/dist/components/actions/CommandMenu/CommandMenu.js +76 -76
- package/dist/components/actions/CommandMenu/CommandMenu.js.map +1 -1
- package/dist/components/actions/CommandMenu/styled.js +1 -1
- package/dist/components/actions/CommandMenu/styled.js.map +1 -1
- package/dist/components/actions/ItemAction/ItemAction.js +205 -68
- package/dist/components/actions/ItemAction/ItemAction.js.map +1 -1
- package/dist/components/actions/ItemActionContext.js +26 -7
- package/dist/components/actions/ItemActionContext.js.map +1 -1
- package/dist/components/actions/ItemActionsWrapper.js +215 -84
- package/dist/components/actions/ItemActionsWrapper.js.map +1 -1
- package/dist/components/actions/ItemButton/ItemButton.js +2 -2
- package/dist/components/actions/ItemButton/ItemButton.js.map +1 -1
- package/dist/components/actions/Link/Link.js +16 -7
- package/dist/components/actions/Link/Link.js.map +1 -1
- package/dist/components/actions/Menu/Menu.js +127 -72
- package/dist/components/actions/Menu/Menu.js.map +1 -1
- package/dist/components/actions/Menu/MenuItem.js +116 -43
- package/dist/components/actions/Menu/MenuItem.js.map +1 -1
- package/dist/components/actions/Menu/MenuSection.js +85 -30
- package/dist/components/actions/Menu/MenuSection.js.map +1 -1
- package/dist/components/actions/Menu/MenuTrigger.js +316 -112
- package/dist/components/actions/Menu/MenuTrigger.js.map +1 -1
- package/dist/components/actions/Menu/SubMenuTrigger.js +6 -6
- package/dist/components/actions/Menu/SubMenuTrigger.js.map +1 -1
- package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
- package/dist/components/actions/Menu/SubmenuTriggerContext.js.map +1 -1
- package/dist/components/actions/Menu/context.js +1 -1
- package/dist/components/actions/Menu/context.js.map +1 -1
- package/dist/components/actions/Menu/styled.js +1 -1
- package/dist/components/actions/Menu/styled.js.map +1 -1
- package/dist/components/actions/actions-run.js +1 -1
- package/dist/components/actions/actions-run.js.map +1 -1
- package/dist/components/actions/index.js +1 -1
- package/dist/components/actions/index.js.map +1 -1
- package/dist/components/actions/use-action.js +3 -3
- package/dist/components/actions/use-action.js.map +1 -1
- package/dist/components/actions/use-anchored-menu.js +6 -6
- package/dist/components/actions/use-anchored-menu.js.map +1 -1
- package/dist/components/actions/use-context-menu.js +12 -12
- package/dist/components/actions/use-context-menu.js.map +1 -1
- package/dist/components/content/ActiveZone/ActiveZone.js +84 -18
- package/dist/components/content/ActiveZone/ActiveZone.js.map +1 -1
- package/dist/components/content/Alert/Alert.js +18 -7
- package/dist/components/content/Alert/Alert.js.map +1 -1
- package/dist/components/content/Alert/use-alert.js +53 -15
- package/dist/components/content/Alert/use-alert.js.map +1 -1
- package/dist/components/content/Avatar/Avatar.js +51 -13
- package/dist/components/content/Avatar/Avatar.js.map +1 -1
- package/dist/components/content/Badge/Badge.js +43 -10
- package/dist/components/content/Badge/Badge.js.map +1 -1
- package/dist/components/content/Card/Card.js +29 -7
- package/dist/components/content/Card/Card.js.map +1 -1
- package/dist/components/content/Content.js +29 -7
- package/dist/components/content/Content.js.map +1 -1
- package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +2 -2
- package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js.map +1 -1
- package/dist/components/content/CopySnippet/CopySnippet.js +220 -60
- package/dist/components/content/CopySnippet/CopySnippet.js.map +1 -1
- package/dist/components/content/Disclosure/Disclosure.js +453 -194
- package/dist/components/content/Disclosure/Disclosure.js.map +1 -1
- package/dist/components/content/Divider.js +52 -14
- package/dist/components/content/Divider.js.map +1 -1
- package/dist/components/content/Footer.js +29 -7
- package/dist/components/content/Footer.js.map +1 -1
- package/dist/components/content/Header.js +29 -7
- package/dist/components/content/Header.js.map +1 -1
- package/dist/components/content/HotKeys/HotKeys.js +55 -27
- package/dist/components/content/HotKeys/HotKeys.js.map +1 -1
- package/dist/components/content/InfoBadge/InfoBadge.js +8 -8
- package/dist/components/content/InfoBadge/InfoBadge.js.map +1 -1
- package/dist/components/content/InlineInput/InlineInput.js +429 -188
- package/dist/components/content/InlineInput/InlineInput.js.map +1 -1
- package/dist/components/content/Item/Item.js +408 -151
- package/dist/components/content/Item/Item.js.map +1 -1
- package/dist/components/content/ItemBadge/ItemBadge.js +173 -59
- package/dist/components/content/ItemBadge/ItemBadge.js.map +1 -1
- package/dist/components/content/ItemCard/ItemCard.js +34 -9
- package/dist/components/content/ItemCard/ItemCard.js.map +1 -1
- package/dist/components/content/Layout/GridLayout.js +38 -10
- package/dist/components/content/Layout/GridLayout.js.map +1 -1
- package/dist/components/content/Layout/Layout.js +30 -13
- package/dist/components/content/Layout/Layout.js.map +1 -1
- package/dist/components/content/Layout/LayoutBlock.js +33 -8
- package/dist/components/content/Layout/LayoutBlock.js.map +1 -1
- package/dist/components/content/Layout/LayoutCenter.js +48 -11
- package/dist/components/content/Layout/LayoutCenter.js.map +1 -1
- package/dist/components/content/Layout/LayoutContainer.js +1 -1
- package/dist/components/content/Layout/LayoutContainer.js.map +1 -1
- package/dist/components/content/Layout/LayoutContent.js +1 -1
- package/dist/components/content/Layout/LayoutContent.js.map +1 -1
- package/dist/components/content/Layout/LayoutContext.js +30 -21
- package/dist/components/content/Layout/LayoutContext.js.map +1 -1
- package/dist/components/content/Layout/LayoutFlex.js +33 -8
- package/dist/components/content/Layout/LayoutFlex.js.map +1 -1
- package/dist/components/content/Layout/LayoutFooter.js +53 -14
- package/dist/components/content/Layout/LayoutFooter.js.map +1 -1
- package/dist/components/content/Layout/LayoutGrid.js +48 -11
- package/dist/components/content/Layout/LayoutGrid.js.map +1 -1
- package/dist/components/content/Layout/LayoutHeader.js +211 -57
- package/dist/components/content/Layout/LayoutHeader.js.map +1 -1
- package/dist/components/content/Layout/LayoutPane.js +60 -14
- package/dist/components/content/Layout/LayoutPane.js.map +1 -1
- package/dist/components/content/Layout/LayoutPanel.js +59 -17
- package/dist/components/content/Layout/LayoutPanel.js.map +1 -1
- package/dist/components/content/Layout/LayoutPanelHeader.js +89 -27
- package/dist/components/content/Layout/LayoutPanelHeader.js.map +1 -1
- package/dist/components/content/Layout/LayoutToolbar.js +33 -8
- package/dist/components/content/Layout/LayoutToolbar.js.map +1 -1
- package/dist/components/content/Layout/hooks/useTinyScrollbar.js +206 -119
- package/dist/components/content/Layout/hooks/useTinyScrollbar.js.map +1 -1
- package/dist/components/content/Layout/index.js +1 -1
- package/dist/components/content/Layout/index.js.map +1 -1
- package/dist/components/content/Layout/utils.js +1 -1
- package/dist/components/content/Layout/utils.js.map +1 -1
- package/dist/components/content/Paragraph.js +25 -9
- package/dist/components/content/Paragraph.js.map +1 -1
- package/dist/components/content/Placeholder/Placeholder.js +52 -14
- package/dist/components/content/Placeholder/Placeholder.js.map +1 -1
- package/dist/components/content/PrismCode/PrismCode.js +1 -1
- package/dist/components/content/PrismCode/PrismCode.js.map +1 -1
- package/dist/components/content/PrismCode/prismSetup.js +1 -1
- package/dist/components/content/PrismCode/prismSetup.js.map +1 -1
- package/dist/components/content/PrismDiffCode/PrismDiffCode.js +52 -17
- package/dist/components/content/PrismDiffCode/PrismDiffCode.js.map +1 -1
- package/dist/components/content/Result/Result.js +117 -38
- package/dist/components/content/Result/Result.js.map +1 -1
- package/dist/components/content/Skeleton/Skeleton.js +26 -17
- package/dist/components/content/Skeleton/Skeleton.js.map +1 -1
- package/dist/components/content/Tag/Tag.js +68 -13
- 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 +61 -14
- package/dist/components/content/Text.js.map +1 -1
- package/dist/components/content/TextItem/TextItem.js +37 -16
- package/dist/components/content/TextItem/TextItem.js.map +1 -1
- package/dist/components/content/Title.js +98 -23
- package/dist/components/content/Title.js.map +1 -1
- package/dist/components/content/Tree/Tree.js +32 -32
- package/dist/components/content/Tree/Tree.js.map +1 -1
- package/dist/components/content/Tree/TreeNode.js +10 -10
- package/dist/components/content/Tree/TreeNode.js.map +1 -1
- package/dist/components/content/Tree/styled.js +1 -1
- package/dist/components/content/Tree/styled.js.map +1 -1
- package/dist/components/content/Tree/tree-index.js +1 -1
- package/dist/components/content/Tree/tree-index.js.map +1 -1
- package/dist/components/content/Tree/use-checkbox-tree.js +123 -89
- package/dist/components/content/Tree/use-checkbox-tree.js.map +1 -1
- package/dist/components/content/Tree/use-load-data.js +52 -21
- package/dist/components/content/Tree/use-load-data.js.map +1 -1
- package/dist/components/content/highlightText.js +1 -1
- package/dist/components/content/highlightText.js.map +1 -1
- package/dist/components/content/use-auto-tooltip.js +1 -1
- package/dist/components/content/use-auto-tooltip.js.map +1 -1
- package/dist/components/data/DataTable/DataTable.js +31 -31
- package/dist/components/data/DataTable/DataTable.js.map +1 -1
- package/dist/components/data/ItemTable/ItemTable.js +41 -41
- package/dist/components/data/ItemTable/ItemTable.js.map +1 -1
- package/dist/components/data/ItemTable/ItemTableBulkBar.js +11 -11
- package/dist/components/data/ItemTable/ItemTableBulkBar.js.map +1 -1
- package/dist/components/data/ItemTable/ItemTableDragPreview.js +41 -4
- package/dist/components/data/ItemTable/ItemTableDragPreview.js.map +1 -1
- package/dist/components/data/ItemTable/ItemTableFooter.js +67 -30
- package/dist/components/data/ItemTable/ItemTableFooter.js.map +1 -1
- package/dist/components/data/ItemTable/ItemTableToolbar.js +95 -28
- package/dist/components/data/ItemTable/ItemTableToolbar.js.map +1 -1
- package/dist/components/data/TableBase/ColumnResizer.js +90 -41
- package/dist/components/data/TableBase/ColumnResizer.js.map +1 -1
- package/dist/components/data/TableBase/RowCollection.js +1 -1
- package/dist/components/data/TableBase/RowCollection.js.map +1 -1
- package/dist/components/data/TableBase/TableHeaderCell.js +154 -64
- package/dist/components/data/TableBase/TableHeaderCell.js.map +1 -1
- package/dist/components/data/TableBase/TableRow.js +211 -69
- package/dist/components/data/TableBase/TableRow.js.map +1 -1
- package/dist/components/data/TableBase/TableView.js +119 -80
- package/dist/components/data/TableBase/TableView.js.map +1 -1
- package/dist/components/data/TableBase/column-menu.js +1 -1
- package/dist/components/data/TableBase/column-menu.js.map +1 -1
- package/dist/components/data/TableBase/column-tint.js +1 -1
- package/dist/components/data/TableBase/column-tint.js.map +1 -1
- package/dist/components/data/TableBase/row-menu.js +1 -1
- package/dist/components/data/TableBase/row-menu.js.map +1 -1
- package/dist/components/data/TableBase/styled.js +1 -1
- package/dist/components/data/TableBase/styled.js.map +1 -1
- package/dist/components/data/TableBase/table-tree.js +1 -1
- package/dist/components/data/TableBase/table-tree.js.map +1 -1
- package/dist/components/data/TableBase/types.js +1 -1
- package/dist/components/data/TableBase/types.js.map +1 -1
- package/dist/components/data/TableBase/use-cell-selection.js +0 -0
- package/dist/components/data/TableBase/use-cell-selection.js.map +1 -1
- package/dist/components/data/TableBase/use-column-order.js +56 -12
- package/dist/components/data/TableBase/use-column-order.js.map +1 -1
- package/dist/components/data/TableBase/use-container-width.js +24 -10
- package/dist/components/data/TableBase/use-container-width.js.map +1 -1
- package/dist/components/data/TableBase/use-row-move-animation.js +68 -49
- package/dist/components/data/TableBase/use-row-move-animation.js.map +1 -1
- package/dist/components/data/TableBase/use-scrollability.js +32 -18
- package/dist/components/data/TableBase/use-scrollability.js.map +1 -1
- package/dist/components/data/TableBase/use-table-columns.js +130 -60
- package/dist/components/data/TableBase/use-table-columns.js.map +1 -1
- package/dist/components/data/TableBase/use-table-search.js +1 -1
- package/dist/components/data/TableBase/use-table-search.js.map +1 -1
- package/dist/components/data/TableBase/use-table-selection.js +39 -39
- package/dist/components/data/TableBase/use-table-selection.js.map +1 -1
- package/dist/components/data/TableBase/use-table-sort.js +132 -68
- package/dist/components/data/TableBase/use-table-sort.js.map +1 -1
- package/dist/components/data/TableBase/use-table-sorts.js +168 -101
- package/dist/components/data/TableBase/use-table-sorts.js.map +1 -1
- package/dist/components/data/TableBase/use-table-storage.js +2 -2
- package/dist/components/data/TableBase/use-table-storage.js.map +1 -1
- package/dist/components/data/TableBase/use-table-tree-state.js +181 -86
- package/dist/components/data/TableBase/use-table-tree-state.js.map +1 -1
- package/dist/components/fields/Checkbox/Checkbox.js +2 -2
- package/dist/components/fields/Checkbox/Checkbox.js.map +1 -1
- package/dist/components/fields/Checkbox/CheckboxGroup.js +101 -33
- package/dist/components/fields/Checkbox/CheckboxGroup.js.map +1 -1
- package/dist/components/fields/Checkbox/context.js +1 -1
- package/dist/components/fields/Checkbox/context.js.map +1 -1
- package/dist/components/fields/ColorInput/ColorInput.js +329 -150
- package/dist/components/fields/ColorInput/ColorInput.js.map +1 -1
- package/dist/components/fields/ColorPicker/ColorPicker.js +16 -16
- package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -1
- package/dist/components/fields/ColorSwatch/ColorSwatch.js +52 -13
- package/dist/components/fields/ColorSwatch/ColorSwatch.js.map +1 -1
- package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +90 -28
- package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js.map +1 -1
- package/dist/components/fields/ComboBox/ComboBox.js +216 -134
- package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
- package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
- package/dist/components/fields/CommandTextArea/CommandTextArea.js.map +1 -1
- package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
- package/dist/components/fields/CommandTextArea/caretPosition.js.map +1 -1
- package/dist/components/fields/CommandTextArea/useCaretAnchor.js +88 -49
- package/dist/components/fields/CommandTextArea/useCaretAnchor.js.map +1 -1
- package/dist/components/fields/DatePicker/DateInput.js +1 -1
- package/dist/components/fields/DatePicker/DateInput.js.map +1 -1
- package/dist/components/fields/DatePicker/DateInputBase.js +129 -34
- package/dist/components/fields/DatePicker/DateInputBase.js.map +1 -1
- package/dist/components/fields/DatePicker/DatePicker.js +194 -69
- package/dist/components/fields/DatePicker/DatePicker.js.map +1 -1
- package/dist/components/fields/DatePicker/DatePickerButton.js +39 -8
- package/dist/components/fields/DatePicker/DatePickerButton.js.map +1 -1
- package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerElement.js.map +1 -1
- package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerInput.js.map +1 -1
- package/dist/components/fields/DatePicker/DatePickerSegment.js +109 -29
- package/dist/components/fields/DatePicker/DatePickerSegment.js.map +1 -1
- package/dist/components/fields/DatePicker/DateRangePicker.js +224 -88
- package/dist/components/fields/DatePicker/DateRangePicker.js.map +1 -1
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +473 -180
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js.map +1 -1
- package/dist/components/fields/DatePicker/MonthPicker.js +15 -6
- package/dist/components/fields/DatePicker/MonthPicker.js.map +1 -1
- package/dist/components/fields/DatePicker/PeriodPicker.js +288 -91
- package/dist/components/fields/DatePicker/PeriodPicker.js.map +1 -1
- package/dist/components/fields/DatePicker/QuarterPicker.js +15 -6
- package/dist/components/fields/DatePicker/QuarterPicker.js.map +1 -1
- package/dist/components/fields/DatePicker/TimeInput.js +15 -7
- package/dist/components/fields/DatePicker/TimeInput.js.map +1 -1
- package/dist/components/fields/DatePicker/WeekPicker.js +15 -6
- package/dist/components/fields/DatePicker/WeekPicker.js.map +1 -1
- package/dist/components/fields/DatePicker/YearPicker.js +15 -6
- package/dist/components/fields/DatePicker/YearPicker.js.map +1 -1
- package/dist/components/fields/DatePicker/parseDate.js +1 -1
- package/dist/components/fields/DatePicker/parseDate.js.map +1 -1
- package/dist/components/fields/DatePicker/period.js +1 -1
- package/dist/components/fields/DatePicker/period.js.map +1 -1
- package/dist/components/fields/DatePicker/props.js +1 -1
- package/dist/components/fields/DatePicker/props.js.map +1 -1
- package/dist/components/fields/DatePicker/utils.js +15 -8
- package/dist/components/fields/DatePicker/utils.js.map +1 -1
- package/dist/components/fields/FileInput/FileInput.js +3 -3
- package/dist/components/fields/FileInput/FileInput.js.map +1 -1
- package/dist/components/fields/FilterListBox/FilterListBox.js +87 -87
- package/dist/components/fields/FilterListBox/FilterListBox.js.map +1 -1
- package/dist/components/fields/FilterPicker/FilterPicker.js +22 -22
- package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
- package/dist/components/fields/Input/Input.js +1 -1
- package/dist/components/fields/Input/Input.js.map +1 -1
- package/dist/components/fields/ListBox/DraggableListBox.js +23 -10
- package/dist/components/fields/ListBox/DraggableListBox.js.map +1 -1
- package/dist/components/fields/ListBox/ListBox.js +138 -53
- package/dist/components/fields/ListBox/ListBox.js.map +1 -1
- package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +156 -37
- package/dist/components/fields/ListBoxPopover/ListBoxPopover.js.map +1 -1
- package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
- package/dist/components/fields/ListBoxPopover/listNavigation.js.map +1 -1
- package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +61 -33
- package/dist/components/fields/ListBoxPopover/useCompositeFocus.js.map +1 -1
- package/dist/components/fields/NumberInput/NumberInput.js +123 -33
- package/dist/components/fields/NumberInput/NumberInput.js.map +1 -1
- package/dist/components/fields/NumberInput/StepButton.js +53 -15
- package/dist/components/fields/NumberInput/StepButton.js.map +1 -1
- package/dist/components/fields/PasswordInput/PasswordInput.js +149 -45
- package/dist/components/fields/PasswordInput/PasswordInput.js.map +1 -1
- package/dist/components/fields/Picker/Picker.js +8 -8
- package/dist/components/fields/Picker/Picker.js.map +1 -1
- package/dist/components/fields/RadioGroup/Radio.js +273 -104
- package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
- package/dist/components/fields/RadioGroup/RadioGroup.js +149 -48
- package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
- package/dist/components/fields/RadioGroup/context.js +1 -1
- package/dist/components/fields/RadioGroup/context.js.map +1 -1
- package/dist/components/fields/SearchComboBox/SearchComboBox.js +80 -65
- package/dist/components/fields/SearchComboBox/SearchComboBox.js.map +1 -1
- package/dist/components/fields/SearchInput/SearchInput.js +91 -28
- package/dist/components/fields/SearchInput/SearchInput.js.map +1 -1
- package/dist/components/fields/Select/Select.js +369 -117
- package/dist/components/fields/Select/Select.js.map +1 -1
- package/dist/components/fields/Slider/Gradation.js +45 -10
- package/dist/components/fields/Slider/Gradation.js.map +1 -1
- package/dist/components/fields/Slider/HueSlider.js +121 -32
- package/dist/components/fields/Slider/HueSlider.js.map +1 -1
- package/dist/components/fields/Slider/RangeSlider.js +46 -10
- package/dist/components/fields/Slider/RangeSlider.js.map +1 -1
- package/dist/components/fields/Slider/Slider.js +108 -23
- package/dist/components/fields/Slider/Slider.js.map +1 -1
- package/dist/components/fields/Slider/SliderBase.js +2 -2
- package/dist/components/fields/Slider/SliderBase.js.map +1 -1
- package/dist/components/fields/Slider/SliderThumb.js +96 -37
- package/dist/components/fields/Slider/SliderThumb.js.map +1 -1
- package/dist/components/fields/Slider/SliderTrack.js +64 -23
- package/dist/components/fields/Slider/SliderTrack.js.map +1 -1
- package/dist/components/fields/Slider/elements.js +1 -1
- package/dist/components/fields/Slider/elements.js.map +1 -1
- package/dist/components/fields/Slider/index.js +1 -1
- package/dist/components/fields/Switch/Switch.js +190 -66
- package/dist/components/fields/Switch/Switch.js.map +1 -1
- package/dist/components/fields/TextArea/TextArea.js +137 -47
- package/dist/components/fields/TextArea/TextArea.js.map +1 -1
- package/dist/components/fields/TextInput/TextInput.js +80 -27
- package/dist/components/fields/TextInput/TextInput.js.map +1 -1
- package/dist/components/fields/TextInput/TextInputBase.js +1 -1
- package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
- package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
- package/dist/components/fields/TextInput/useAutoSizeTextArea.js.map +1 -1
- package/dist/components/fields/TextInputMapper/TextInputMapper.js +156 -83
- package/dist/components/fields/TextInputMapper/TextInputMapper.js.map +1 -1
- package/dist/components/fields/TriggerActions.js +11 -2
- package/dist/components/fields/TriggerActions.js.map +1 -1
- package/dist/components/fields/color/ColorPanel.js +237 -59
- package/dist/components/fields/color/ColorPanel.js.map +1 -1
- package/dist/components/fields/color/channels.js +1 -1
- package/dist/components/fields/color/channels.js.map +1 -1
- package/dist/components/fields/color/color.js +1 -1
- package/dist/components/fields/color/color.js.map +1 -1
- package/dist/components/fields/color/context.js +1 -1
- package/dist/components/fields/color/context.js.map +1 -1
- package/dist/components/form/FieldWrapper/FieldWrapper.js +195 -72
- package/dist/components/form/FieldWrapper/FieldWrapper.js.map +1 -1
- package/dist/components/form/Form/Field.js +23 -9
- package/dist/components/form/Form/Field.js.map +1 -1
- package/dist/components/form/Form/Form.js +76 -30
- package/dist/components/form/Form/Form.js.map +1 -1
- package/dist/components/form/Form/ModernFormRoot.js +294 -81
- package/dist/components/form/Form/ModernFormRoot.js.map +1 -1
- package/dist/components/form/Form/ResetButton/ResetButton.js +32 -10
- package/dist/components/form/Form/ResetButton/ResetButton.js.map +1 -1
- package/dist/components/form/Form/SubmitButton/SubmitButton.js +32 -10
- package/dist/components/form/Form/SubmitButton/SubmitButton.js.map +1 -1
- package/dist/components/form/Form/SubmitError.js +130 -32
- package/dist/components/form/Form/SubmitError.js.map +1 -1
- package/dist/components/form/Form/backend.js +1 -1
- package/dist/components/form/Form/backend.js.map +1 -1
- package/dist/components/form/Form/index.js +1 -1
- package/dist/components/form/Form/index.js.map +1 -1
- package/dist/components/form/Form/modern/actions.js +140 -45
- package/dist/components/form/Form/modern/actions.js.map +1 -1
- package/dist/components/form/Form/modern/context.js +1 -1
- package/dist/components/form/Form/modern/context.js.map +1 -1
- package/dist/components/form/Form/modern/controller.js +1 -1
- package/dist/components/form/Form/modern/controller.js.map +1 -1
- package/dist/components/form/Form/modern/field-binding.js +1 -1
- package/dist/components/form/Form/modern/field-binding.js.map +1 -1
- package/dist/components/form/Form/modern/field.js +1 -1
- package/dist/components/form/Form/modern/field.js.map +1 -1
- package/dist/components/form/Form/modern/react.js +102 -19
- package/dist/components/form/Form/modern/react.js.map +1 -1
- package/dist/components/form/Form/modern/store.js +13 -3
- package/dist/components/form/Form/modern/store.js.map +1 -1
- package/dist/components/form/Form/modern/types.d.ts +3 -1
- package/dist/components/form/Form/modern/validation.js +1 -1
- package/dist/components/form/Form/modern/validation.js.map +1 -1
- package/dist/components/form/Form/modern/values.js +1 -1
- package/dist/components/form/Form/modern/values.js.map +1 -1
- package/dist/components/form/Form/use-field/use-field-binding.js +236 -63
- package/dist/components/form/Form/use-field/use-field-binding.js.map +1 -1
- package/dist/components/form/Form/use-field/use-field-props.js +106 -61
- package/dist/components/form/Form/use-field/use-field-props.js.map +1 -1
- package/dist/components/form/Form/use-field/use-field.js +5 -4
- package/dist/components/form/Form/use-field/use-field.js.map +1 -1
- package/dist/components/form/Form/use-form.js +2 -1
- package/dist/components/form/Form/use-form.js.map +1 -1
- package/dist/components/form/Form/validation.js +1 -1
- package/dist/components/form/Form/validation.js.map +1 -1
- package/dist/components/form/Label.js +127 -37
- package/dist/components/form/Label.js.map +1 -1
- package/dist/components/form/validation/ValidationIndicator.js +20 -5
- package/dist/components/form/validation/ValidationIndicator.js.map +1 -1
- package/dist/components/form/validation/resolve-validation-props.js +1 -1
- package/dist/components/form/validation/resolve-validation-props.js.map +1 -1
- package/dist/components/form/validation/use-validation-props.js +36 -10
- package/dist/components/form/validation/use-validation-props.js.map +1 -1
- package/dist/components/form/wrapper.js +1 -1
- package/dist/components/form/wrapper.js.map +1 -1
- package/dist/components/helpers/DisplayTransition/DisplayTransition.js +49 -29
- package/dist/components/helpers/DisplayTransition/DisplayTransition.js.map +1 -1
- package/dist/components/helpers/IconSwitch/IconSwitch.js +8 -8
- package/dist/components/helpers/IconSwitch/IconSwitch.js.map +1 -1
- package/dist/components/layout/Board/Board.js +27 -9
- package/dist/components/layout/Board/Board.js.map +1 -1
- package/dist/components/layout/Board/BoardProvider.js +1 -1
- package/dist/components/layout/Board/BoardProvider.js.map +1 -1
- package/dist/components/layout/Board/BoardResponsive.js +1 -1
- package/dist/components/layout/Board/BoardResponsive.js.map +1 -1
- package/dist/components/layout/Board/Widget.js +1 -1
- package/dist/components/layout/Board/Widget.js.map +1 -1
- package/dist/components/layout/Board/WidgetHost.js +159 -121
- package/dist/components/layout/Board/WidgetHost.js.map +1 -1
- package/dist/components/layout/Board/board-context.js +14 -5
- package/dist/components/layout/Board/board-context.js.map +1 -1
- package/dist/components/layout/Board/board-store.js +1 -1
- 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/calculate.js.map +1 -1
- package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
- package/dist/components/layout/Board/grid-core/collision-modes.js.map +1 -1
- package/dist/components/layout/Board/grid-core/collision.js +1 -1
- package/dist/components/layout/Board/grid-core/collision.js.map +1 -1
- package/dist/components/layout/Board/grid-core/compactors.js +1 -1
- package/dist/components/layout/Board/grid-core/compactors.js.map +1 -1
- package/dist/components/layout/Board/grid-core/constraints.js +1 -1
- package/dist/components/layout/Board/grid-core/constraints.js.map +1 -1
- package/dist/components/layout/Board/grid-core/group-move.js +1 -1
- package/dist/components/layout/Board/grid-core/group-move.js.map +1 -1
- package/dist/components/layout/Board/grid-core/layout.js +1 -1
- package/dist/components/layout/Board/grid-core/layout.js.map +1 -1
- package/dist/components/layout/Board/grid-core/placement.js +1 -1
- package/dist/components/layout/Board/grid-core/placement.js.map +1 -1
- package/dist/components/layout/Board/grid-core/sort.js +1 -1
- package/dist/components/layout/Board/grid-core/sort.js.map +1 -1
- 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/responsive-utils.js.map +1 -1
- package/dist/components/layout/Board/use-board-layout.js +8 -8
- package/dist/components/layout/Board/use-board-layout.js.map +1 -1
- package/dist/components/layout/Board/use-board-registry.js +257 -257
- 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-select-modifier-key.js.map +1 -1
- package/dist/components/layout/Board/use-board-selection.js +16 -16
- package/dist/components/layout/Board/use-board-selection.js.map +1 -1
- package/dist/components/layout/Flex.js +29 -7
- package/dist/components/layout/Flex.js.map +1 -1
- package/dist/components/layout/Flow.js +29 -7
- package/dist/components/layout/Flow.js.map +1 -1
- package/dist/components/layout/Grid.js +30 -7
- package/dist/components/layout/Grid.js.map +1 -1
- package/dist/components/layout/Panel.js +9 -9
- package/dist/components/layout/Panel.js.map +1 -1
- package/dist/components/layout/Prefix.js +59 -16
- package/dist/components/layout/Prefix.js.map +1 -1
- package/dist/components/layout/ResizablePanel.js +62 -32
- package/dist/components/layout/ResizablePanel.js.map +1 -1
- package/dist/components/layout/Space.js +55 -11
- package/dist/components/layout/Space.js.map +1 -1
- package/dist/components/layout/Suffix.js +59 -16
- package/dist/components/layout/Suffix.js.map +1 -1
- package/dist/components/navigation/Pagination/Pagination.js +394 -164
- package/dist/components/navigation/Pagination/Pagination.js.map +1 -1
- package/dist/components/navigation/Pagination/use-pagination.js +69 -26
- package/dist/components/navigation/Pagination/use-pagination.js.map +1 -1
- package/dist/components/navigation/Tabs/DraggableTabList.js +25 -10
- package/dist/components/navigation/Tabs/DraggableTabList.js.map +1 -1
- package/dist/components/navigation/Tabs/TabButton.js +604 -235
- package/dist/components/navigation/Tabs/TabButton.js.map +1 -1
- package/dist/components/navigation/Tabs/TabDropIndicator.js +65 -23
- package/dist/components/navigation/Tabs/TabDropIndicator.js.map +1 -1
- package/dist/components/navigation/Tabs/TabPanel.js +47 -19
- package/dist/components/navigation/Tabs/TabPanel.js.map +1 -1
- package/dist/components/navigation/Tabs/TabPicker.js +105 -33
- package/dist/components/navigation/Tabs/TabPicker.js.map +1 -1
- package/dist/components/navigation/Tabs/Tabs.js +45 -45
- package/dist/components/navigation/Tabs/Tabs.js.map +1 -1
- package/dist/components/navigation/Tabs/TabsAction.js +53 -19
- package/dist/components/navigation/Tabs/TabsAction.js.map +1 -1
- package/dist/components/navigation/Tabs/TabsContext.js +16 -6
- package/dist/components/navigation/Tabs/TabsContext.js.map +1 -1
- package/dist/components/navigation/Tabs/popover-placement.js +1 -1
- package/dist/components/navigation/Tabs/popover-placement.js.map +1 -1
- package/dist/components/navigation/Tabs/styled.js +1 -1
- package/dist/components/navigation/Tabs/styled.js.map +1 -1
- package/dist/components/navigation/Tabs/types.js +1 -1
- package/dist/components/navigation/Tabs/types.js.map +1 -1
- package/dist/components/navigation/Tabs/use-tab-editing.js +50 -13
- package/dist/components/navigation/Tabs/use-tab-editing.js.map +1 -1
- package/dist/components/navigation/Tabs/use-tab-indicator.js +111 -63
- package/dist/components/navigation/Tabs/use-tab-indicator.js.map +1 -1
- package/dist/components/organisms/StatsCard/StatsCard.js +54 -14
- package/dist/components/organisms/StatsCard/StatsCard.js.map +1 -1
- package/dist/components/other/Calendar/Calendar.js +79 -31
- package/dist/components/other/Calendar/Calendar.js.map +1 -1
- package/dist/components/other/Calendar/CalendarCell.js +66 -20
- package/dist/components/other/Calendar/CalendarCell.js.map +1 -1
- package/dist/components/other/Calendar/CalendarGrid.js +90 -40
- package/dist/components/other/Calendar/CalendarGrid.js.map +1 -1
- package/dist/components/other/Calendar/CalendarHeader.js +80 -17
- package/dist/components/other/Calendar/CalendarHeader.js.map +1 -1
- package/dist/components/other/Calendar/CalendarPanel.js +568 -144
- package/dist/components/other/Calendar/CalendarPanel.js.map +1 -1
- package/dist/components/other/Calendar/PeriodCalendar.js +425 -134
- package/dist/components/other/Calendar/PeriodCalendar.js.map +1 -1
- package/dist/components/other/Calendar/PeriodGrid.js +6 -6
- package/dist/components/other/Calendar/PeriodGrid.js.map +1 -1
- package/dist/components/other/Calendar/RangeCalendar.js +50 -24
- package/dist/components/other/Calendar/RangeCalendar.js.map +1 -1
- package/dist/components/other/Calendar/styled.js +1 -1
- package/dist/components/other/Calendar/styled.js.map +1 -1
- package/dist/components/other/CubeLogo/CubeLogo.js +95 -34
- package/dist/components/other/CubeLogo/CubeLogo.js.map +1 -1
- package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
- package/dist/components/other/NoDataIcon/NoDataIcon.js.map +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialog.js +153 -42
- package/dist/components/overlays/AlertDialog/AlertDialog.js.map +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +76 -54
- package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js.map +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogZone.js +146 -39
- package/dist/components/overlays/AlertDialog/AlertDialogZone.js.map +1 -1
- package/dist/components/overlays/Dialog/Dialog.js +26 -10
- package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
- package/dist/components/overlays/Dialog/DialogContainer.js +13 -13
- package/dist/components/overlays/Dialog/DialogContainer.js.map +1 -1
- package/dist/components/overlays/Dialog/DialogForm.d.ts +12 -7
- package/dist/components/overlays/Dialog/DialogForm.js +18 -7
- package/dist/components/overlays/Dialog/DialogForm.js.map +1 -1
- package/dist/components/overlays/Dialog/DialogTrigger.d.ts +1 -1
- package/dist/components/overlays/Dialog/DialogTrigger.js +214 -59
- package/dist/components/overlays/Dialog/DialogTrigger.js.map +1 -1
- package/dist/components/overlays/Dialog/ModernDialogForm.js +350 -0
- package/dist/components/overlays/Dialog/ModernDialogForm.js.map +1 -0
- package/dist/components/overlays/Dialog/context.js +1 -1
- package/dist/components/overlays/Dialog/context.js.map +1 -1
- package/dist/components/overlays/Dialog/index.d.ts +1 -1
- package/dist/components/overlays/Dialog/use-dialog-container.js +6 -6
- package/dist/components/overlays/Dialog/use-dialog-container.js.map +1 -1
- package/dist/components/overlays/Modal/Modal.js +140 -27
- package/dist/components/overlays/Modal/Modal.js.map +1 -1
- package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
- package/dist/components/overlays/Modal/OpenTransitionContext.js.map +1 -1
- package/dist/components/overlays/Modal/Overlay.js +4 -4
- package/dist/components/overlays/Modal/Overlay.js.map +1 -1
- package/dist/components/overlays/Modal/Popover.js +131 -29
- package/dist/components/overlays/Modal/Popover.js.map +1 -1
- package/dist/components/overlays/Modal/Tray.js +142 -30
- package/dist/components/overlays/Modal/Tray.js.map +1 -1
- package/dist/components/overlays/Modal/Underlay.js +36 -7
- package/dist/components/overlays/Modal/Underlay.js.map +1 -1
- package/dist/components/overlays/Notifications/Notification.js +69 -32
- package/dist/components/overlays/Notifications/Notification.js.map +1 -1
- package/dist/components/overlays/Notifications/NotificationAction.js +79 -26
- package/dist/components/overlays/Notifications/NotificationAction.js.map +1 -1
- package/dist/components/overlays/Notifications/NotificationCard.js +138 -33
- package/dist/components/overlays/Notifications/NotificationCard.js.map +1 -1
- package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
- package/dist/components/overlays/Notifications/NotificationContext.js.map +1 -1
- package/dist/components/overlays/Notifications/NotificationItem.js +63 -16
- package/dist/components/overlays/Notifications/NotificationItem.js.map +1 -1
- package/dist/components/overlays/Notifications/OverlayContainer.js +312 -151
- package/dist/components/overlays/Notifications/OverlayContainer.js.map +1 -1
- package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
- package/dist/components/overlays/Notifications/OverlayProvider.js.map +1 -1
- package/dist/components/overlays/Notifications/PersistentNotificationsList.js +210 -58
- package/dist/components/overlays/Notifications/PersistentNotificationsList.js.map +1 -1
- package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
- package/dist/components/overlays/Notifications/dismissed-storage.js.map +1 -1
- package/dist/components/overlays/Notifications/format-relative-time.d.ts +1 -1
- package/dist/components/overlays/Notifications/format-relative-time.js +3 -3
- package/dist/components/overlays/Notifications/format-relative-time.js.map +1 -1
- package/dist/components/overlays/Notifications/index.js +1 -1
- package/dist/components/overlays/Notifications/index.js.map +1 -1
- package/dist/components/overlays/Notifications/use-notification-state.js +51 -51
- package/dist/components/overlays/Notifications/use-notification-state.js.map +1 -1
- package/dist/components/overlays/Notifications/use-notifications.js +12 -12
- package/dist/components/overlays/Notifications/use-notifications.js.map +1 -1
- package/dist/components/overlays/Notifications/use-overlay-timers.js +10 -10
- package/dist/components/overlays/Notifications/use-overlay-timers.js.map +1 -1
- package/dist/components/overlays/Notifications/use-persistent-notifications.js +24 -5
- package/dist/components/overlays/Notifications/use-persistent-notifications.js.map +1 -1
- package/dist/components/overlays/Notifications/use-persistent-state.js +145 -43
- package/dist/components/overlays/Notifications/use-persistent-state.js.map +1 -1
- package/dist/components/overlays/Notifications/use-toast-state.js +25 -25
- package/dist/components/overlays/Notifications/use-toast-state.js.map +1 -1
- package/dist/components/overlays/Toast/ToastItem.js +68 -15
- package/dist/components/overlays/Toast/ToastItem.js.map +1 -1
- package/dist/components/overlays/Toast/index.js +100 -34
- package/dist/components/overlays/Toast/index.js.map +1 -1
- package/dist/components/overlays/Toast/useProgressToast.js +1 -1
- package/dist/components/overlays/Toast/useProgressToast.js.map +1 -1
- package/dist/components/overlays/Toast/useToast.js +9 -9
- package/dist/components/overlays/Toast/useToast.js.map +1 -1
- package/dist/components/overlays/Tooltip/Tooltip.js +88 -31
- package/dist/components/overlays/Tooltip/Tooltip.js.map +1 -1
- package/dist/components/overlays/Tooltip/TooltipProvider.js +75 -10
- package/dist/components/overlays/Tooltip/TooltipProvider.js.map +1 -1
- package/dist/components/overlays/Tooltip/TooltipTrigger.js +186 -77
- package/dist/components/overlays/Tooltip/TooltipTrigger.js.map +1 -1
- package/dist/components/overlays/Tooltip/context.js +1 -1
- package/dist/components/overlays/Tooltip/context.js.map +1 -1
- package/dist/components/portal/Portal.js +18 -3
- package/dist/components/portal/Portal.js.map +1 -1
- package/dist/components/portal/PortalProvider.js +11 -2
- package/dist/components/portal/PortalProvider.js.map +1 -1
- package/dist/components/portal/usePortal.js +1 -1
- package/dist/components/portal/usePortal.js.map +1 -1
- package/dist/components/shared/DraggableCollection.js +23 -23
- package/dist/components/shared/DraggableCollection.js.map +1 -1
- package/dist/components/shared/InvalidIcon.js +1 -1
- package/dist/components/shared/InvalidIcon.js.map +1 -1
- package/dist/components/shared/ValidIcon.js +1 -1
- package/dist/components/shared/ValidIcon.js.map +1 -1
- package/dist/components/status/LoadingAnimation/LoadingAnimation.js +156 -48
- package/dist/components/status/LoadingAnimation/LoadingAnimation.js.map +1 -1
- package/dist/components/status/Spin/Cube.js +12 -3
- package/dist/components/status/Spin/Cube.js.map +1 -1
- package/dist/components/status/Spin/InternalSpinner.js +21 -6
- package/dist/components/status/Spin/InternalSpinner.js.map +1 -1
- package/dist/components/status/Spin/Spin.js +31 -7
- package/dist/components/status/Spin/Spin.js.map +1 -1
- package/dist/components/status/Spin/SpinsContainer.js +23 -6
- package/dist/components/status/Spin/SpinsContainer.js.map +1 -1
- package/dist/data/item-themes.js +1 -1
- package/dist/data/item-themes.js.map +1 -1
- package/dist/data/themes.js +1 -1
- package/dist/data/themes.js.map +1 -1
- package/dist/eslint-plugin/defaults.generated.js +15 -5
- package/dist/eslint-plugin/defaults.generated.js.map +1 -1
- package/dist/eslint-plugin/index.js +1 -1
- package/dist/eslint-plugin/index.js.map +1 -1
- package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
- package/dist/eslint-plugin/rules/no-redundant-default-prop.js.map +1 -1
- package/dist/i18n/I18nProvider.js +54 -13
- package/dist/i18n/I18nProvider.js.map +1 -1
- package/dist/i18n/createFormatter.js +1 -1
- package/dist/i18n/createFormatter.js.map +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/i18n/index.js.map +1 -1
- package/dist/i18n/instance.js +1 -1
- package/dist/i18n/instance.js.map +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/locales.js.map +1 -1
- package/dist/i18n/useFormatter.js +10 -3
- package/dist/i18n/useFormatter.js.map +1 -1
- package/dist/i18n/useI18n.js +1 -1
- package/dist/i18n/useI18n.js.map +1 -1
- package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
- package/dist/icons/AdjustmentsHorizontalIcon.js.map +1 -1
- package/dist/icons/AdjustmentsIcon.js +1 -1
- package/dist/icons/AdjustmentsIcon.js.map +1 -1
- package/dist/icons/AiIcon.js +1 -1
- package/dist/icons/AiIcon.js.map +1 -1
- package/dist/icons/AreaChartIcon.js +1 -1
- package/dist/icons/AreaChartIcon.js.map +1 -1
- package/dist/icons/ArrowNarrowDownIcon.js +1 -1
- package/dist/icons/ArrowNarrowDownIcon.js.map +1 -1
- package/dist/icons/ArrowNarrowUpIcon.js +1 -1
- package/dist/icons/ArrowNarrowUpIcon.js.map +1 -1
- package/dist/icons/BackwardIcon.js +1 -1
- package/dist/icons/BackwardIcon.js.map +1 -1
- package/dist/icons/BarChartIcon.js +1 -1
- package/dist/icons/BarChartIcon.js.map +1 -1
- package/dist/icons/BellFilledIcon.js +1 -1
- package/dist/icons/BellFilledIcon.js.map +1 -1
- package/dist/icons/BellIcon.js +1 -1
- package/dist/icons/BellIcon.js.map +1 -1
- package/dist/icons/BooleanIcon.js +1 -1
- package/dist/icons/BooleanIcon.js.map +1 -1
- package/dist/icons/CalendarEditIcon.js +1 -1
- package/dist/icons/CalendarEditIcon.js.map +1 -1
- package/dist/icons/CalendarIcon.js +1 -1
- package/dist/icons/CalendarIcon.js.map +1 -1
- package/dist/icons/CaretDownIcon.js +1 -1
- package/dist/icons/CaretDownIcon.js.map +1 -1
- package/dist/icons/CaretUpIcon.js +1 -1
- package/dist/icons/CaretUpIcon.js.map +1 -1
- package/dist/icons/ChartAreaStackedIcon.js +1 -1
- package/dist/icons/ChartAreaStackedIcon.js.map +1 -1
- package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartAreaStackedPercentageIcon.js.map +1 -1
- package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarGroupedHorizontalIcon.js.map +1 -1
- package/dist/icons/ChartBarGroupedIcon.js +1 -1
- package/dist/icons/ChartBarGroupedIcon.js.map +1 -1
- package/dist/icons/ChartBarHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarHorizontalIcon.js.map +1 -1
- package/dist/icons/ChartBarLineIcon.js +1 -1
- package/dist/icons/ChartBarLineIcon.js.map +1 -1
- package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedHorizontalIcon.js.map +1 -1
- package/dist/icons/ChartBarStackedIcon.js +1 -1
- package/dist/icons/ChartBarStackedIcon.js.map +1 -1
- package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js.map +1 -1
- package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageIcon.js.map +1 -1
- package/dist/icons/ChartBoxPlot2Icon.js +1 -1
- package/dist/icons/ChartBoxPlot2Icon.js.map +1 -1
- package/dist/icons/ChartBoxPlotIcon.js +1 -1
- package/dist/icons/ChartBoxPlotIcon.js.map +1 -1
- package/dist/icons/ChartBubbleIcon.js +1 -1
- package/dist/icons/ChartBubbleIcon.js.map +1 -1
- package/dist/icons/ChartDonut2Icon.js +1 -1
- package/dist/icons/ChartDonut2Icon.js.map +1 -1
- package/dist/icons/ChartFunnelIcon.js +1 -1
- package/dist/icons/ChartFunnelIcon.js.map +1 -1
- package/dist/icons/ChartHeatmapIcon.js +1 -1
- package/dist/icons/ChartHeatmapIcon.js.map +1 -1
- package/dist/icons/ChartKPIIcon.js +1 -1
- package/dist/icons/ChartKPIIcon.js.map +1 -1
- package/dist/icons/ChartPie2Icon.js +1 -1
- package/dist/icons/ChartPie2Icon.js.map +1 -1
- package/dist/icons/ChartScatterIcon.js +1 -1
- package/dist/icons/ChartScatterIcon.js.map +1 -1
- package/dist/icons/CheckCircleFilledIcon.js +1 -1
- package/dist/icons/CheckCircleFilledIcon.js.map +1 -1
- package/dist/icons/CheckCircleIcon.js +1 -1
- package/dist/icons/CheckCircleIcon.js.map +1 -1
- package/dist/icons/CheckIcon.js +1 -1
- package/dist/icons/CheckIcon.js.map +1 -1
- package/dist/icons/CircleFilledIcon.js +1 -1
- package/dist/icons/CircleFilledIcon.js.map +1 -1
- package/dist/icons/ClearIcon.js +1 -1
- package/dist/icons/ClearIcon.js.map +1 -1
- package/dist/icons/CloseCircleFilledIcon.js +1 -1
- package/dist/icons/CloseCircleFilledIcon.js.map +1 -1
- package/dist/icons/CloseCircleIcon.js +1 -1
- package/dist/icons/CloseCircleIcon.js.map +1 -1
- package/dist/icons/CloseIcon.js +1 -1
- package/dist/icons/CloseIcon.js.map +1 -1
- package/dist/icons/CodeIcon.js +1 -1
- package/dist/icons/CodeIcon.js.map +1 -1
- package/dist/icons/ColumnTotalIcon.js +1 -1
- package/dist/icons/ColumnTotalIcon.js.map +1 -1
- package/dist/icons/CopyIcon.js +1 -1
- package/dist/icons/CopyIcon.js.map +1 -1
- package/dist/icons/CountIcon.js +1 -1
- package/dist/icons/CountIcon.js.map +1 -1
- package/dist/icons/CubeIcon.js +1 -1
- package/dist/icons/CubeIcon.js.map +1 -1
- package/dist/icons/CubePauseIcon.js +1 -1
- package/dist/icons/CubePauseIcon.js.map +1 -1
- package/dist/icons/CubePlayIcon.js +1 -1
- package/dist/icons/CubePlayIcon.js.map +1 -1
- package/dist/icons/CurrencyDollarIcon.js +1 -1
- package/dist/icons/CurrencyDollarIcon.js.map +1 -1
- package/dist/icons/DangerIcon.js +1 -1
- package/dist/icons/DangerIcon.js.map +1 -1
- package/dist/icons/DashboardIcon.js +1 -1
- package/dist/icons/DashboardIcon.js.map +1 -1
- package/dist/icons/DatabaseIcon.js +1 -1
- package/dist/icons/DatabaseIcon.js.map +1 -1
- package/dist/icons/DecimalDecreaseIcon.js +1 -1
- package/dist/icons/DecimalDecreaseIcon.js.map +1 -1
- package/dist/icons/DecimalIncreaseIcon.js +1 -1
- package/dist/icons/DecimalIncreaseIcon.js.map +1 -1
- package/dist/icons/DirectionIcon.js +67 -22
- package/dist/icons/DirectionIcon.js.map +1 -1
- package/dist/icons/DonutIcon.js +1 -1
- package/dist/icons/DonutIcon.js.map +1 -1
- package/dist/icons/DownIcon.js +1 -1
- package/dist/icons/DownIcon.js.map +1 -1
- package/dist/icons/EditIcon.js +1 -1
- package/dist/icons/EditIcon.js.map +1 -1
- package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
- package/dist/icons/ExclamationCircleFilledIcon.js.map +1 -1
- package/dist/icons/ExclamationCircleIcon.js +1 -1
- package/dist/icons/ExclamationCircleIcon.js.map +1 -1
- package/dist/icons/ExclamationIcon.js +1 -1
- package/dist/icons/ExclamationIcon.js.map +1 -1
- package/dist/icons/EyeIcon.js +1 -1
- package/dist/icons/EyeIcon.js.map +1 -1
- package/dist/icons/EyeInvisibleIcon.js +1 -1
- package/dist/icons/EyeInvisibleIcon.js.map +1 -1
- package/dist/icons/FilterIcon.js +1 -1
- package/dist/icons/FilterIcon.js.map +1 -1
- package/dist/icons/FolderFilledIcon.js +1 -1
- package/dist/icons/FolderFilledIcon.js.map +1 -1
- package/dist/icons/FolderIcon.js +1 -1
- package/dist/icons/FolderIcon.js.map +1 -1
- package/dist/icons/FolderOpenFilledIcon.js +1 -1
- package/dist/icons/FolderOpenFilledIcon.js.map +1 -1
- package/dist/icons/FolderOpenIcon.js +1 -1
- package/dist/icons/FolderOpenIcon.js.map +1 -1
- package/dist/icons/ForwardIcon.js +1 -1
- package/dist/icons/ForwardIcon.js.map +1 -1
- package/dist/icons/GripVerticalIcon.js +1 -1
- package/dist/icons/GripVerticalIcon.js.map +1 -1
- package/dist/icons/HierarchyIcon.js +1 -1
- package/dist/icons/HierarchyIcon.js.map +1 -1
- package/dist/icons/HierarchyOpenIcon.js +1 -1
- package/dist/icons/HierarchyOpenIcon.js.map +1 -1
- package/dist/icons/Icon.js +60 -16
- package/dist/icons/Icon.js.map +1 -1
- package/dist/icons/InfoCircleIcon.js +1 -1
- package/dist/icons/InfoCircleIcon.js.map +1 -1
- package/dist/icons/InfoIcon.js +1 -1
- package/dist/icons/InfoIcon.js.map +1 -1
- package/dist/icons/KeyIcon.js +1 -1
- package/dist/icons/KeyIcon.js.map +1 -1
- package/dist/icons/LeftIcon.js +1 -1
- package/dist/icons/LeftIcon.js.map +1 -1
- package/dist/icons/LineChartIcon.js +1 -1
- package/dist/icons/LineChartIcon.js.map +1 -1
- package/dist/icons/LoadingIcon.js +1 -1
- package/dist/icons/LoadingIcon.js.map +1 -1
- package/dist/icons/LockFilledIcon.js +1 -1
- package/dist/icons/LockFilledIcon.js.map +1 -1
- package/dist/icons/LockIcon.js +1 -1
- package/dist/icons/LockIcon.js.map +1 -1
- package/dist/icons/MoreIcon.js +1 -1
- package/dist/icons/MoreIcon.js.map +1 -1
- package/dist/icons/NotAllowedIcon.js +1 -1
- package/dist/icons/NotAllowedIcon.js.map +1 -1
- package/dist/icons/Number123Icon.js +1 -1
- package/dist/icons/Number123Icon.js.map +1 -1
- package/dist/icons/NumberIcon.js +1 -1
- package/dist/icons/NumberIcon.js.map +1 -1
- package/dist/icons/PauseCircleFilledIcon.js +1 -1
- package/dist/icons/PauseCircleFilledIcon.js.map +1 -1
- package/dist/icons/PauseCircleIcon.js +1 -1
- package/dist/icons/PauseCircleIcon.js.map +1 -1
- package/dist/icons/PauseIcon.js +1 -1
- package/dist/icons/PauseIcon.js.map +1 -1
- package/dist/icons/PercentageIcon.js +1 -1
- package/dist/icons/PercentageIcon.js.map +1 -1
- package/dist/icons/PieChartIcon.js +1 -1
- package/dist/icons/PieChartIcon.js.map +1 -1
- package/dist/icons/PipetteIcon.js +1 -1
- package/dist/icons/PipetteIcon.js.map +1 -1
- package/dist/icons/PlayCircleIcon.js +1 -1
- package/dist/icons/PlayCircleIcon.js.map +1 -1
- package/dist/icons/PlayIcon.js +1 -1
- package/dist/icons/PlayIcon.js.map +1 -1
- package/dist/icons/PlusIcon.js +1 -1
- package/dist/icons/PlusIcon.js.map +1 -1
- package/dist/icons/ProgressBarIcon.js +1 -1
- package/dist/icons/ProgressBarIcon.js.map +1 -1
- package/dist/icons/ReloadIcon.js +1 -1
- package/dist/icons/ReloadIcon.js.map +1 -1
- package/dist/icons/ReportIcon.js +1 -1
- package/dist/icons/ReportIcon.js.map +1 -1
- package/dist/icons/ReturnIcon.js +1 -1
- package/dist/icons/ReturnIcon.js.map +1 -1
- package/dist/icons/RightIcon.js +1 -1
- package/dist/icons/RightIcon.js.map +1 -1
- package/dist/icons/RowTotalsIcon.js +1 -1
- package/dist/icons/RowTotalsIcon.js.map +1 -1
- package/dist/icons/SchemeIcon.js +1 -1
- package/dist/icons/SchemeIcon.js.map +1 -1
- package/dist/icons/SearchIcon.js +1 -1
- package/dist/icons/SearchIcon.js.map +1 -1
- package/dist/icons/SemanticQueryIcon.js +1 -1
- package/dist/icons/SemanticQueryIcon.js.map +1 -1
- package/dist/icons/SettingsIcon.js +1 -1
- package/dist/icons/SettingsIcon.js.map +1 -1
- package/dist/icons/ShieldFilledIcon.js +1 -1
- package/dist/icons/ShieldFilledIcon.js.map +1 -1
- package/dist/icons/ShieldIcon.js +1 -1
- package/dist/icons/ShieldIcon.js.map +1 -1
- package/dist/icons/SlashIcon.js +1 -1
- package/dist/icons/SlashIcon.js.map +1 -1
- package/dist/icons/SparklesIcon.js +1 -1
- package/dist/icons/SparklesIcon.js.map +1 -1
- package/dist/icons/SqlIcon.js +1 -1
- package/dist/icons/SqlIcon.js.map +1 -1
- package/dist/icons/StatsIcon.js +1 -1
- package/dist/icons/StatsIcon.js.map +1 -1
- package/dist/icons/StopIcon.js +1 -1
- package/dist/icons/StopIcon.js.map +1 -1
- package/dist/icons/StringIcon.js +1 -1
- package/dist/icons/StringIcon.js.map +1 -1
- package/dist/icons/SubtotalsIcon.js +1 -1
- package/dist/icons/SubtotalsIcon.js.map +1 -1
- package/dist/icons/SwitchIcon.js +1 -1
- package/dist/icons/SwitchIcon.js.map +1 -1
- package/dist/icons/TableIcon.js +1 -1
- package/dist/icons/TableIcon.js.map +1 -1
- package/dist/icons/ThumbsDownIcon.js +1 -1
- package/dist/icons/ThumbsDownIcon.js.map +1 -1
- package/dist/icons/ThumbsUpIcon.js +1 -1
- package/dist/icons/ThumbsUpIcon.js.map +1 -1
- package/dist/icons/ThunderboltCrossedIcon.js +1 -1
- package/dist/icons/ThunderboltCrossedIcon.js.map +1 -1
- package/dist/icons/ThunderboltFilledIcon.js +1 -1
- package/dist/icons/ThunderboltFilledIcon.js.map +1 -1
- package/dist/icons/ThunderboltIcon.js +1 -1
- package/dist/icons/ThunderboltIcon.js.map +1 -1
- package/dist/icons/TimeIcon.js +1 -1
- package/dist/icons/TimeIcon.js.map +1 -1
- package/dist/icons/TrashIcon.js +1 -1
- package/dist/icons/TrashIcon.js.map +1 -1
- package/dist/icons/UnlockIcon.js +1 -1
- package/dist/icons/UnlockIcon.js.map +1 -1
- package/dist/icons/UpIcon.js +1 -1
- package/dist/icons/UpIcon.js.map +1 -1
- package/dist/icons/UserGroupIcon.js +1 -1
- package/dist/icons/UserGroupIcon.js.map +1 -1
- package/dist/icons/UserIcon.js +1 -1
- package/dist/icons/UserIcon.js.map +1 -1
- package/dist/icons/UserLockIcon.js +1 -1
- package/dist/icons/UserLockIcon.js.map +1 -1
- package/dist/icons/ViewIcon.js +1 -1
- package/dist/icons/ViewIcon.js.map +1 -1
- package/dist/icons/WarningFilledIcon.js +1 -1
- package/dist/icons/WarningFilledIcon.js.map +1 -1
- package/dist/icons/WarningIcon.js +1 -1
- package/dist/icons/WarningIcon.js.map +1 -1
- package/dist/icons/wrap-icon.js +15 -7
- package/dist/icons/wrap-icon.js.map +1 -1
- package/dist/index.d.ts +22 -22
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/probe/canonicalize.js +2 -2
- package/dist/probe/canonicalize.js.map +1 -1
- package/dist/probe/css.js +1 -1
- package/dist/probe/css.js.map +1 -1
- package/dist/probe/index.js +1 -1
- package/dist/provider.js +17 -7
- package/dist/provider.js.map +1 -1
- package/dist/providers/TrackingProvider.js +33 -9
- package/dist/providers/TrackingProvider.js.map +1 -1
- package/dist/providers/navigationAdapter.default.js +1 -1
- package/dist/providers/navigationAdapter.default.js.map +1 -1
- package/dist/tokens/all-tokens.js +1 -1
- package/dist/tokens/all-tokens.js.map +1 -1
- package/dist/tokens/base.js +1 -1
- package/dist/tokens/base.js.map +1 -1
- package/dist/tokens/color-seed.js +1 -1
- package/dist/tokens/color-seed.js.map +1 -1
- package/dist/tokens/color-theme.js +18 -3
- package/dist/tokens/color-theme.js.map +1 -1
- package/dist/tokens/colors.js +1 -1
- package/dist/tokens/colors.js.map +1 -1
- package/dist/tokens/layout.js +1 -1
- package/dist/tokens/layout.js.map +1 -1
- package/dist/tokens/lazy-styles.js +1 -1
- package/dist/tokens/lazy-styles.js.map +1 -1
- package/dist/tokens/legacy-color.js +1 -1
- package/dist/tokens/legacy-color.js.map +1 -1
- package/dist/tokens/palette-config.js +9 -2
- package/dist/tokens/palette-config.js.map +1 -1
- package/dist/tokens/palette.js +1 -1
- package/dist/tokens/palette.js.map +1 -1
- package/dist/tokens/resolve.js +85 -21
- package/dist/tokens/resolve.js.map +1 -1
- package/dist/tokens/shadows.js +1 -1
- package/dist/tokens/shadows.js.map +1 -1
- package/dist/tokens/sizes.js +1 -1
- package/dist/tokens/sizes.js.map +1 -1
- package/dist/tokens/spacing.js +1 -1
- package/dist/tokens/spacing.js.map +1 -1
- package/dist/tokens/typography.js +1 -1
- package/dist/tokens/typography.js.map +1 -1
- package/dist/utils/ResizeSensor.js +1 -1
- package/dist/utils/ResizeSensor.js.map +1 -1
- package/dist/utils/colors.js +1 -1
- package/dist/utils/colors.js.map +1 -1
- package/dist/utils/dotize.js +1 -1
- package/dist/utils/dotize.js.map +1 -1
- package/dist/utils/is-dev-env.js +1 -1
- package/dist/utils/is-dev-env.js.map +1 -1
- package/dist/utils/modules.js +1 -1
- package/dist/utils/modules.js.map +1 -1
- package/dist/utils/promise.js +1 -1
- package/dist/utils/promise.js.map +1 -1
- package/dist/utils/raf.js +1 -1
- package/dist/utils/raf.js.map +1 -1
- package/dist/utils/random.js +1 -1
- package/dist/utils/random.js.map +1 -1
- package/dist/utils/range.js +1 -1
- package/dist/utils/range.js.map +1 -1
- package/dist/utils/react/RenderCache.js +2 -2
- package/dist/utils/react/RenderCache.js.map +1 -1
- package/dist/utils/react/Slots.js +67 -24
- package/dist/utils/react/Slots.js.map +1 -1
- package/dist/utils/react/chain.js +1 -1
- package/dist/utils/react/chain.js.map +1 -1
- package/dist/utils/react/disabledProps.js +1 -1
- package/dist/utils/react/disabledProps.js.map +1 -1
- package/dist/utils/react/escapePropagation.js +1 -1
- package/dist/utils/react/escapePropagation.js.map +1 -1
- package/dist/utils/react/forwardRefWithGenerics.js +1 -1
- package/dist/utils/react/forwardRefWithGenerics.js.map +1 -1
- package/dist/utils/react/index.js +1 -1
- package/dist/utils/react/interactions.js +35 -12
- package/dist/utils/react/interactions.js.map +1 -1
- package/dist/utils/react/isTextOnly.js +1 -1
- package/dist/utils/react/isTextOnly.js.map +1 -1
- package/dist/utils/react/mapProps.js +1 -1
- package/dist/utils/react/mapProps.js.map +1 -1
- package/dist/utils/react/mergeProps.js +1 -1
- package/dist/utils/react/mergeProps.js.map +1 -1
- package/dist/utils/react/nullableValue.js +1 -1
- package/dist/utils/react/nullableValue.js.map +1 -1
- package/dist/utils/react/programmaticFocus.js +1 -1
- package/dist/utils/react/programmaticFocus.js.map +1 -1
- package/dist/utils/react/resolveIcon.js +1 -1
- package/dist/utils/react/resolveIcon.js.map +1 -1
- package/dist/utils/react/sharedStore.js +13 -2
- package/dist/utils/react/sharedStore.js.map +1 -1
- package/dist/utils/react/useBufferedValue.js +5 -5
- package/dist/utils/react/useBufferedValue.js.map +1 -1
- package/dist/utils/react/useCombinedRefs.js +20 -5
- package/dist/utils/react/useCombinedRefs.js.map +1 -1
- package/dist/utils/react/useControlledFocusVisible.js +53 -17
- package/dist/utils/react/useControlledFocusVisible.js.map +1 -1
- package/dist/utils/react/useEventBus.js +43 -18
- package/dist/utils/react/useEventBus.js.map +1 -1
- package/dist/utils/react/useId.js +2 -1
- package/dist/utils/react/useId.js.map +1 -1
- package/dist/utils/react/useIsDarwin.js +29 -16
- package/dist/utils/react/useIsDarwin.js.map +1 -1
- package/dist/utils/react/useKeySymbols.js +23 -9
- package/dist/utils/react/useKeySymbols.js.map +1 -1
- package/dist/utils/react/useLayoutEffect.js +1 -1
- package/dist/utils/react/useLayoutEffect.js.map +1 -1
- package/dist/utils/react/useLocalStorage.js +75 -30
- package/dist/utils/react/useLocalStorage.js.map +1 -1
- package/dist/utils/react/useMergeStyles.js +1 -1
- package/dist/utils/react/useMergeStyles.js.map +1 -1
- package/dist/utils/react/useOverlayEscapeGuard.js +25 -9
- package/dist/utils/react/useOverlayEscapeGuard.js.map +1 -1
- package/dist/utils/react/usePopoverSync.js +175 -73
- package/dist/utils/react/usePopoverSync.js.map +1 -1
- package/dist/utils/react/useQaProps.js +1 -1
- package/dist/utils/react/useQaProps.js.map +1 -1
- package/dist/utils/react/useScheme.js +1 -1
- package/dist/utils/react/useScheme.js.map +1 -1
- package/dist/utils/react/useViewportSize.js +43 -19
- package/dist/utils/react/useViewportSize.js.map +1 -1
- package/dist/utils/react/wrapNodeIfPlain.js +1 -1
- package/dist/utils/react/wrapNodeIfPlain.js.map +1 -1
- package/dist/utils/selection.js +1 -1
- package/dist/utils/selection.js.map +1 -1
- package/dist/utils/styles.js +1 -1
- package/dist/utils/styles.js.map +1 -1
- package/dist/utils/tree.js +1 -1
- package/dist/utils/tree.js.map +1 -1
- package/dist/utils/warnings.js +1 -1
- package/dist/utils/warnings.js.map +1 -1
- package/dist/version.js +2 -2
- package/dist/version.js.map +1 -1
- package/docs/Usage.md +9 -1
- package/docs/components/content/InlineInput.md +1 -1
- package/docs/components/fields/ColorInput.md +13 -8
- package/docs/components/fields/ColorPicker.md +13 -8
- package/docs/components/fields/ComboBox.md +16 -12
- package/docs/components/fields/FilterListBox.md +24 -19
- package/docs/components/fields/FilterPicker.md +24 -19
- package/docs/components/fields/ListBox.md +36 -26
- package/docs/components/fields/Picker.md +27 -21
- package/docs/components/fields/Select.md +16 -12
- package/docs/components/form/Field.md +2 -2
- package/docs/components/form/Form.md +60 -579
- package/docs/components/form/ModernForm.md +22 -1
- package/docs/components/overlays/DialogForm.md +121 -263
- package/docs/components/overlays/DialogTrigger.md +1 -1
- package/docs/components/overlays/UseDialogContainer.md +11 -13
- package/docs/modern-form-guide.md +22 -1
- package/docs/modern-form-migration.md +1 -1
- package/package.json +7 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.js","names":[],"sources":["../../src/tokens/resolve.ts"],"sourcesContent":["import { useState, useSyncExternalStore } from 'react';\n\nimport { useLayoutEffect } from '../utils/react/useLayoutEffect';\nimport { subscribeScheme } from '../utils/react/useScheme';\nimport { warn } from '../utils/warnings';\n\nimport { getTokens } from './all-tokens';\nimport { getPaletteVersion, usePaletteVersion } from './palette-config';\n\n/**\n * Resolving a design token to a literal value, for consumers that render into a\n * surface our stylesheets do not reach — a third-party iframe (Stripe Elements),\n * a CodeMirror / Monaco theme object, a Vega spec. Those take colors, lengths and\n * font descriptors as values; `var(--purple-color)` means nothing to them.\n *\n * Doing it by hand fails silently, because a token read from the wrong element\n * does not come back empty. Tasty registers `@property` rules — its own defaults\n * plus one for every custom property whose type it can infer — and an undeclared\n * token reads back as that rule's `initial-value`. Some of those are obvious\n * duds (`rgba(0, 0, 0, 0)` for a `<color>`, `0px` for a `<length>`), but many are\n * ordinary-looking values: off the token block `--gap` reads `4px` rather than\n * the kit's `8px`, `--transition` reads `80ms`, `--radius` reads `6px`. So\n * inspecting the value cannot tell a real token from a miss, in either\n * direction — `#clear` really is `transparent` and `$h2-letter-spacing` really\n * is `0px`.\n *\n * The question that CAN be answered is \"are the kit's tokens in effect on this\n * element?\", and `$tokens-applied` (see `src/tokens/base.ts`) answers it: it is\n * declared alongside the tokens, so it is present exactly where they are. Off\n * that surface every read is reported as unresolved; on it, the computed value\n * is the truth.\n */\n\n/**\n * Declared by the token block and nothing else — see `src/tokens/base.ts`.\n *\n * Matched by VALUE rather than by presence, because presence is not the signal\n * it looks like: tasty infers a type for the marker as readily as for any other\n * token, registers `@property --tokens-applied` with `initial-value: 0`, and so\n * hands back `0` off the block instead of an empty string. Comparing against the\n * declared value is right either way, and cannot drift from `base.ts`.\n */\nconst SURFACE_MARKER = '$tokens-applied';\n\nfunction isTokenSurface(computed: CSSStyleDeclaration): boolean {\n const declared = getTokens()[SURFACE_MARKER];\n const name = tokenToProperty(SURFACE_MARKER);\n\n if (typeof declared !== 'string' || !name) return false;\n\n return (\n normalizeValue(computed.getPropertyValue(name)) === normalizeValue(declared)\n );\n}\n\n/**\n * Values that mean \"this property was never declared\" once we already know the\n * token block IS in effect. Only used to catch a token the kit does not declare\n * at all — a typo, or a name from another design system — since for those there\n * is no marker to lean on.\n */\nconst PLACEHOLDER_VALUES = new Set([\n 'transparent',\n 'rgba(0,0,0,0)',\n '0',\n '0px',\n '0deg',\n '0s',\n]);\n\n/** Custom property names are CSS identifiers: a letter or `_`, then word chars or `-`. */\nconst PROPERTY_NAME_RE = /^[a-zA-Z_][\\w-]*$/;\n\nexport interface ResolveTokenOptions {\n /**\n * Element to read the tokens off. Defaults to the document `<body>`, which is\n * where `<Root>` declares them.\n *\n * Pass an element when the value has to reflect a *local* override — a subtree\n * carrying its own `tokens` prop (`renderColorTokens()`), or one under a\n * `data-scheme` / `data-contrast` attribute that differs from the document's.\n * The element's own document and view are used, so a node inside a same-origin\n * iframe resolves against that iframe.\n */\n element?: Element | null;\n /**\n * Returned in place of `null` when a token is unset, unresolvable, or reads\n * back as an `@property` placeholder — including on the server, where there is\n * no DOM to read.\n */\n fallback?: string;\n}\n\n/**\n * Fields mirror {@link TypographyPreset}. A field the preset does not define is\n * `null`, except `fontFamily`, which falls back to the document's `--font-sans`\n * so the common case (`t1`–`t4`, `h1`–`h6`, which inherit the sans stack rather\n * than naming it) still hands back a usable stack.\n */\nexport type ResolvedPreset = {\n fontFamily: string | null;\n fontSize: string | null;\n fontStyle: string | null;\n fontWeight: string | null;\n lineHeight: string | null;\n letterSpacing: string | null;\n textTransform: string | null;\n boldFontWeight: string | null;\n iconSize: string | null;\n};\n\nconst PRESET_FIELD_SUFFIXES: Record<keyof ResolvedPreset, string> = {\n fontFamily: 'font-family',\n fontSize: 'font-size',\n fontStyle: 'font-style',\n fontWeight: 'font-weight',\n lineHeight: 'line-height',\n letterSpacing: 'letter-spacing',\n textTransform: 'text-transform',\n boldFontWeight: 'bold-font-weight',\n iconSize: 'icon-size',\n};\n\nconst PRESET_FIELDS = Object.keys(\n PRESET_FIELD_SUFFIXES,\n) as (keyof ResolvedPreset)[];\n\n/**\n * Map a token to its CSS custom property name, using the same convention tasty's\n * style DSL does: `#name` is a color (`--name-color`), `$name` is everything else\n * (`--name`). A raw `--name` or a bare `name` is taken as written.\n *\n * Returns `null` for anything that would not be a valid custom property.\n */\nfunction tokenToProperty(token: string): string | null {\n const trimmed = token.trim();\n\n let name: string;\n\n if (trimmed.startsWith('--')) {\n name = trimmed.slice(2);\n } else if (trimmed.startsWith('#')) {\n name = `${trimmed.slice(1)}-color`;\n } else if (trimmed.startsWith('$')) {\n name = trimmed.slice(1);\n } else {\n name = trimmed;\n }\n\n return PROPERTY_NAME_RE.test(name) ? `--${name}` : null;\n}\n\n/** Whitespace and case are not meaningful in the values we compare against. */\nfunction normalizeValue(value: string): string {\n return value.replace(/\\s+/g, '').toLowerCase();\n}\n\n/**\n * Every custom property the kit declares, by name. Membership only — the value\n * is deliberately not consulted, because a token's declared value tells you\n * nothing about whether it is in effect where you read it.\n *\n * Memoized against the palette version, like {@link getTokens} itself.\n */\nlet knownNamesCache: { version: number; names: Set<string> } | null = null;\n\nfunction getKnownTokenNames(): Set<string> {\n const version = getPaletteVersion();\n\n if (!knownNamesCache || knownNamesCache.version !== version) {\n const names = new Set<string>();\n\n for (const key of Object.keys(getTokens())) {\n const name = tokenToProperty(key);\n\n if (name) names.add(name);\n }\n\n knownNamesCache = { version, names };\n }\n\n return knownNamesCache.names;\n}\n\n/** These fire per token, per page — once each, not once per render. */\nconst warnedTokens = new Set<string>();\n\nfunction warnOnce(key: string, message: string) {\n if (warnedTokens.has(key)) return;\n\n warnedTokens.add(key);\n\n warn(message);\n}\n\n/** The document `<body>` is where `<Root>` declares the token block. */\nfunction resolveTarget(element?: Element | null): Element | null {\n if (element) return element;\n if (typeof document === 'undefined') return null;\n\n return document.body ?? document.documentElement ?? null;\n}\n\nfunction readValue(\n computed: CSSStyleDeclaration,\n token: string,\n fallback: string | null,\n silent: boolean,\n onTokenSurface: boolean,\n): string | null {\n const name = tokenToProperty(token);\n\n if (!name) {\n warnOnce(`name:${token}`, `\"${token}\" is not a valid design token name.`);\n\n return fallback;\n }\n\n if (!onTokenSurface) {\n if (!silent) {\n warnOnce(\n `surface:${name}`,\n `Token \"${token}\" (${name}) was read from an element the design tokens are not in effect on, so any value there is tasty's @property default rather than the kit's. <Root> declares the token block on <body>, so <html>, a detached node, and a tree that has not mounted <Root> yet are all outside it. Pass \\`element\\` to read from a specific subtree, or \\`fallback\\` for a value to use instead.`,\n );\n }\n\n return fallback;\n }\n\n const value = computed.getPropertyValue(name).trim();\n\n if (!value) return fallback;\n\n // On a token surface the computed value is the truth, including a genuinely\n // transparent color or a real `0px`. The only thing left to catch is a name\n // the kit never declares, where an @property default is all there is to read.\n if (\n PLACEHOLDER_VALUES.has(normalizeValue(value)) &&\n !getKnownTokenNames().has(name)\n ) {\n if (!silent) {\n warnOnce(\n `unknown:${name}`,\n `Token \"${token}\" (${name}) is not declared by the kit, and read back as an unset custom property. Check the name, or pass \\`fallback\\`.`,\n );\n }\n\n return fallback;\n }\n\n return value;\n}\n\n/**\n * Read the resolved value of one design token — a color, a length, a font\n * descriptor — as a literal string.\n *\n * ```ts\n * resolveTokenValue('#purple'); // 'oklch(0.52 0.24 285)'\n * resolveTokenValue('$space-md'); // '8px'\n * resolveTokenValue('$t3-font-size'); // '14px'\n * ```\n *\n * Returns `options.fallback ?? null` when the token is not declared on the\n * element it was read from — see {@link ResolveTokenOptions}.\n */\nexport function resolveTokenValue(\n token: string,\n options: ResolveTokenOptions = {},\n): string | null {\n return resolveTokenValues([token], options)[token];\n}\n\n/**\n * {@link resolveTokenValue} for several tokens at once, through a single\n * `getComputedStyle` call. Prefer this when building a theme object — a Stripe\n * `Appearance`, a CodeMirror theme — which needs a dozen values at a time.\n *\n * ```ts\n * const { '#surface': background, '#surface-text': color } = resolveTokenValues([\n * '#surface',\n * '#surface-text',\n * ]);\n * ```\n */\nexport function resolveTokenValues<T extends string>(\n tokens: readonly T[],\n options: ResolveTokenOptions = {},\n): Record<T, string | null> {\n return readTokens(tokens, options, false);\n}\n\n/** Shared by the public reader and the preset reader, which suppresses warnings. */\nfunction readTokens<T extends string>(\n tokens: readonly T[],\n options: ResolveTokenOptions,\n silent: boolean,\n): Record<T, string | null> {\n const { element, fallback = null } = options;\n const result = {} as Record<T, string | null>;\n const target = resolveTarget(element);\n const view = target?.ownerDocument?.defaultView;\n\n if (!target || !view) {\n for (const token of tokens) result[token] = fallback;\n\n return result;\n }\n\n const computed = view.getComputedStyle(target);\n // One read for the whole batch: the marker is a property of the element, not\n // of any individual token.\n const onTokenSurface = isTokenSurface(computed);\n\n for (const token of tokens) {\n result[token] = readValue(\n computed,\n token,\n fallback,\n silent,\n onTokenSurface,\n );\n }\n\n return result;\n}\n\n/**\n * Resolve a typography preset — `'t3'`, `'h2'`, `'s3'` — to the literal font\n * descriptors behind it, for a surface that takes a font as values rather than\n * as a `preset` style.\n *\n * ```ts\n * const { fontFamily, fontSize, lineHeight } = resolvePresetValues('t3');\n * ```\n *\n * A preset legitimately leaves most of these unset — only headings carry an\n * `iconSize`, only the `s*` family names a `fontFamily` — so unlike\n * {@link resolveTokenValues} a miss here is expected and never warns.\n */\nexport function resolvePresetValues(\n preset: string,\n options: ResolveTokenOptions = {},\n): ResolvedPreset {\n const { fallback = null } = options;\n const names = PRESET_FIELDS.map(\n (field) => `$${preset}-${PRESET_FIELD_SUFFIXES[field]}`,\n );\n const values = readTokens(\n [...names, '--font-sans'],\n { element: options.element },\n true,\n );\n const resolved = {} as ResolvedPreset;\n\n PRESET_FIELDS.forEach((field, index) => {\n resolved[field] = values[names[index]] ?? fallback;\n });\n\n // Every preset but the `s*` family inherits the sans stack rather than naming\n // it, so the token is absent by design and `--font-sans` is the real answer.\n resolved.fontFamily =\n values[names[PRESET_FIELDS.indexOf('fontFamily')]] ??\n values['--font-sans'] ??\n fallback;\n\n return resolved;\n}\n\n// ============================================================================\n// Appearance subscription\n// ============================================================================\n\n/**\n * A token's resolved value changes for two reasons: the palette was re-seeded\n * (`setPaletteConfig()`, covered by `usePaletteVersion`), or the scheme /\n * contrast tier flipped. This store covers the second.\n *\n * The watching itself belongs to `subscribeScheme()` (`src/utils/react/useScheme.ts`),\n * which owns the definition of both axes — the `data-scheme` / `data-contrast`\n * attributes and the media queries they fall back to are the same strings\n * `<Root>` registers `@dark` and `@hc` from. This store only counts the changes,\n * so there is one observer for the document rather than one per concern.\n */\nlet appearanceVersion = 0;\nlet stopWatchingAppearance: (() => void) | null = null;\n\nconst appearanceListeners = new Set<() => void>();\n\nfunction onAppearanceChange() {\n appearanceVersion++;\n\n appearanceListeners.forEach((listener) => listener());\n}\n\nfunction subscribeAppearance(listener: () => void): () => void {\n appearanceListeners.add(listener);\n\n if (appearanceListeners.size === 1) {\n stopWatchingAppearance = subscribeScheme(onAppearanceChange);\n }\n\n return () => {\n appearanceListeners.delete(listener);\n\n if (!appearanceListeners.size) {\n stopWatchingAppearance?.();\n stopWatchingAppearance = null;\n }\n };\n}\n\nfunction getAppearanceVersion(): number {\n return appearanceVersion;\n}\n\n/**\n * A version React only ever hands out while rendering on the server or\n * hydrating: `useSyncExternalStore` reads `getServerSnapshot` in exactly those\n * two cases and `getSnapshot` in every other. That makes it a reliable \"this\n * render has to match the server's markup\" flag — see {@link useResolvedTokens}.\n *\n * A plain client render (`createRoot`) never sees it, so a CSR app still\n * resolves on its first render rather than paying an extra pass.\n */\nconst HYDRATING = -1;\n\nfunction getServerAppearanceVersion(): number {\n return HYDRATING;\n}\n\n/**\n * Re-render on a scheme / contrast change. Returns the version rather than the\n * state so the snapshot is a primitive — the same reason `usePaletteVersion`\n * does, see `src/tokens/palette-config.ts`.\n */\nfunction useAppearanceVersion(): number {\n return useSyncExternalStore(\n subscribeAppearance,\n getAppearanceVersion,\n getServerAppearanceVersion,\n );\n}\n\n// ============================================================================\n// React bindings\n// ============================================================================\n\n/**\n * The value is read out of the DOM, so it re-resolves whenever the palette is\n * re-seeded or the scheme / contrast tier flips, and it is `fallback ?? null`\n * during SSR. The layout effect is what covers the first commit: a consumer\n * rendered in the same pass as `<Root>` reads before the token block lands.\n */\nfunction useResolvedTokens<T extends string>(\n tokens: readonly T[],\n key: string,\n options: ResolveTokenOptions,\n): Record<T, string | null> {\n const { element, fallback } = options;\n const paletteVersion = usePaletteVersion();\n const appearance = useAppearanceVersion();\n\n const [values, setValues] = useState(() =>\n appearance === HYDRATING\n ? unresolved(tokens, fallback)\n : resolveTokenValues(tokens, options),\n );\n\n useLayoutEffect(() => {\n setValues((previous) => {\n const next = resolveTokenValues(tokens, { element, fallback });\n\n return isSameRecord(previous, next) ? previous : next;\n });\n // `tokens` is a fresh array on all but the first render, so `key` — its\n // joined identity — is what belongs in the dependency list.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [key, element, fallback, paletteVersion, appearance]);\n\n return values;\n}\n\n/**\n * What the server rendered: no DOM, so every token is the fallback. The first\n * client render has to agree with it or hydration reports a mismatch for any\n * consumer that renders the value; the layout effect above replaces it with the\n * resolved values before the browser paints.\n */\nfunction unresolved<T extends string>(\n tokens: readonly T[],\n fallback: string | undefined,\n): Record<T, string | null> {\n const result = {} as Record<T, string | null>;\n\n for (const token of tokens) result[token] = fallback ?? null;\n\n return result;\n}\n\n/** Keeps the previous object when nothing moved, so it stays usable as a dep. */\nfunction isSameRecord<T extends Record<string, string | null>>(\n a: T,\n b: T,\n): boolean {\n const keys = Object.keys(b);\n\n if (Object.keys(a).length !== keys.length) return false;\n\n return keys.every((key) => a[key] === b[key]);\n}\n\n/**\n * {@link resolveTokenValue} as a hook: re-renders when the palette is re-seeded\n * or the scheme / contrast tier flips.\n *\n * ```tsx\n * const accent = useTokenValue('#purple');\n *\n * return <Chart series={{ color: accent ?? '#000' }} />;\n * ```\n */\nexport function useTokenValue(\n token: string,\n options: ResolveTokenOptions = {},\n): string | null {\n return useResolvedTokens([token], token, options)[token];\n}\n\n/**\n * {@link resolveTokenValues} as a hook. The returned object keeps its identity\n * while the values are unchanged, so it is safe as a dependency of the theme\n * object built from it — and the token list may be an inline literal.\n *\n * ```tsx\n * const colors = useTokenValues(['#surface', '#surface-text', '#border']);\n *\n * const appearance = useMemo(() => toStripeAppearance(colors), [colors]);\n * ```\n */\nexport function useTokenValues<T extends string>(\n tokens: readonly T[],\n options: ResolveTokenOptions = {},\n): Record<T, string | null> {\n return useResolvedTokens(tokens, tokens.join(' '), options);\n}\n\n/**\n * {@link resolvePresetValues} as a hook.\n *\n * ```tsx\n * const { fontFamily, fontSize } = usePresetValues('s3');\n * ```\n */\nexport function usePresetValues(\n preset: string,\n options: ResolveTokenOptions = {},\n): ResolvedPreset {\n const { element, fallback } = options;\n const paletteVersion = usePaletteVersion();\n const appearance = useAppearanceVersion();\n\n const [values, setValues] = useState(() =>\n appearance === HYDRATING\n ? unresolvedPreset(fallback)\n : resolvePresetValues(preset, options),\n );\n\n useLayoutEffect(() => {\n setValues((previous) => {\n const next = resolvePresetValues(preset, { element, fallback });\n\n return isSameRecord(previous, next) ? previous : next;\n });\n }, [preset, element, fallback, paletteVersion, appearance]);\n\n return values;\n}\n\n/** {@link unresolved} for the fixed shape {@link resolvePresetValues} returns. */\nfunction unresolvedPreset(fallback: string | undefined): ResolvedPreset {\n const resolved = {} as ResolvedPreset;\n\n for (const field of PRESET_FIELDS) resolved[field] = fallback ?? null;\n\n return resolved;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resolve.js","names":["useState","useSyncExternalStore","useLayoutEffect","subscribeScheme","warn","getTokens","getPaletteVersion","usePaletteVersion","SURFACE_MARKER","isTokenSurface","computed","CSSStyleDeclaration","declared","name","tokenToProperty","normalizeValue","getPropertyValue","PLACEHOLDER_VALUES","Set","PROPERTY_NAME_RE","ResolveTokenOptions","element","Element","fallback","ResolvedPreset","fontFamily","fontSize","fontStyle","fontWeight","lineHeight","letterSpacing","textTransform","boldFontWeight","iconSize","PRESET_FIELD_SUFFIXES","Record","PRESET_FIELDS","Object","keys","token","trimmed","trim","startsWith","slice","test","value","replace","toLowerCase","knownNamesCache","version","names","getKnownTokenNames","key","add","warnedTokens","warnOnce","message","has","resolveTarget","document","body","documentElement","readValue","silent","onTokenSurface","resolveTokenValue","options","resolveTokenValues","tokens","T","readTokens","result","target","view","ownerDocument","defaultView","getComputedStyle","resolvePresetValues","preset","map","field","values","resolved","forEach","index","indexOf","appearanceVersion","stopWatchingAppearance","appearanceListeners","onAppearanceChange","listener","subscribeAppearance","size","delete","getAppearanceVersion","HYDRATING","getServerAppearanceVersion","useAppearanceVersion","useResolvedTokens","paletteVersion","appearance","setValues","unresolved","previous","next","isSameRecord","a","b","length","every","useTokenValue","t0","$","_c","t1","undefined","t2","useTokenValues","join","usePresetValues","unresolvedPreset","t3","t4"],"sources":["../../src/tokens/resolve.ts"],"sourcesContent":["import { useState, useSyncExternalStore } from 'react';\n\nimport { useLayoutEffect } from '../utils/react/useLayoutEffect';\nimport { subscribeScheme } from '../utils/react/useScheme';\nimport { warn } from '../utils/warnings';\n\nimport { getTokens } from './all-tokens';\nimport { getPaletteVersion, usePaletteVersion } from './palette-config';\n\n/**\n * Resolving a design token to a literal value, for consumers that render into a\n * surface our stylesheets do not reach — a third-party iframe (Stripe Elements),\n * a CodeMirror / Monaco theme object, a Vega spec. Those take colors, lengths and\n * font descriptors as values; `var(--purple-color)` means nothing to them.\n *\n * Doing it by hand fails silently, because a token read from the wrong element\n * does not come back empty. Tasty registers `@property` rules — its own defaults\n * plus one for every custom property whose type it can infer — and an undeclared\n * token reads back as that rule's `initial-value`. Some of those are obvious\n * duds (`rgba(0, 0, 0, 0)` for a `<color>`, `0px` for a `<length>`), but many are\n * ordinary-looking values: off the token block `--gap` reads `4px` rather than\n * the kit's `8px`, `--transition` reads `80ms`, `--radius` reads `6px`. So\n * inspecting the value cannot tell a real token from a miss, in either\n * direction — `#clear` really is `transparent` and `$h2-letter-spacing` really\n * is `0px`.\n *\n * The question that CAN be answered is \"are the kit's tokens in effect on this\n * element?\", and `$tokens-applied` (see `src/tokens/base.ts`) answers it: it is\n * declared alongside the tokens, so it is present exactly where they are. Off\n * that surface every read is reported as unresolved; on it, the computed value\n * is the truth.\n */\n\n/**\n * Declared by the token block and nothing else — see `src/tokens/base.ts`.\n *\n * Matched by VALUE rather than by presence, because presence is not the signal\n * it looks like: tasty infers a type for the marker as readily as for any other\n * token, registers `@property --tokens-applied` with `initial-value: 0`, and so\n * hands back `0` off the block instead of an empty string. Comparing against the\n * declared value is right either way, and cannot drift from `base.ts`.\n */\nconst SURFACE_MARKER = '$tokens-applied';\n\nfunction isTokenSurface(computed: CSSStyleDeclaration): boolean {\n const declared = getTokens()[SURFACE_MARKER];\n const name = tokenToProperty(SURFACE_MARKER);\n\n if (typeof declared !== 'string' || !name) return false;\n\n return (\n normalizeValue(computed.getPropertyValue(name)) === normalizeValue(declared)\n );\n}\n\n/**\n * Values that mean \"this property was never declared\" once we already know the\n * token block IS in effect. Only used to catch a token the kit does not declare\n * at all — a typo, or a name from another design system — since for those there\n * is no marker to lean on.\n */\nconst PLACEHOLDER_VALUES = new Set([\n 'transparent',\n 'rgba(0,0,0,0)',\n '0',\n '0px',\n '0deg',\n '0s',\n]);\n\n/** Custom property names are CSS identifiers: a letter or `_`, then word chars or `-`. */\nconst PROPERTY_NAME_RE = /^[a-zA-Z_][\\w-]*$/;\n\nexport interface ResolveTokenOptions {\n /**\n * Element to read the tokens off. Defaults to the document `<body>`, which is\n * where `<Root>` declares them.\n *\n * Pass an element when the value has to reflect a *local* override — a subtree\n * carrying its own `tokens` prop (`renderColorTokens()`), or one under a\n * `data-scheme` / `data-contrast` attribute that differs from the document's.\n * The element's own document and view are used, so a node inside a same-origin\n * iframe resolves against that iframe.\n */\n element?: Element | null;\n /**\n * Returned in place of `null` when a token is unset, unresolvable, or reads\n * back as an `@property` placeholder — including on the server, where there is\n * no DOM to read.\n */\n fallback?: string;\n}\n\n/**\n * Fields mirror {@link TypographyPreset}. A field the preset does not define is\n * `null`, except `fontFamily`, which falls back to the document's `--font-sans`\n * so the common case (`t1`–`t4`, `h1`–`h6`, which inherit the sans stack rather\n * than naming it) still hands back a usable stack.\n */\nexport type ResolvedPreset = {\n fontFamily: string | null;\n fontSize: string | null;\n fontStyle: string | null;\n fontWeight: string | null;\n lineHeight: string | null;\n letterSpacing: string | null;\n textTransform: string | null;\n boldFontWeight: string | null;\n iconSize: string | null;\n};\n\nconst PRESET_FIELD_SUFFIXES: Record<keyof ResolvedPreset, string> = {\n fontFamily: 'font-family',\n fontSize: 'font-size',\n fontStyle: 'font-style',\n fontWeight: 'font-weight',\n lineHeight: 'line-height',\n letterSpacing: 'letter-spacing',\n textTransform: 'text-transform',\n boldFontWeight: 'bold-font-weight',\n iconSize: 'icon-size',\n};\n\nconst PRESET_FIELDS = Object.keys(\n PRESET_FIELD_SUFFIXES,\n) as (keyof ResolvedPreset)[];\n\n/**\n * Map a token to its CSS custom property name, using the same convention tasty's\n * style DSL does: `#name` is a color (`--name-color`), `$name` is everything else\n * (`--name`). A raw `--name` or a bare `name` is taken as written.\n *\n * Returns `null` for anything that would not be a valid custom property.\n */\nfunction tokenToProperty(token: string): string | null {\n const trimmed = token.trim();\n\n let name: string;\n\n if (trimmed.startsWith('--')) {\n name = trimmed.slice(2);\n } else if (trimmed.startsWith('#')) {\n name = `${trimmed.slice(1)}-color`;\n } else if (trimmed.startsWith('$')) {\n name = trimmed.slice(1);\n } else {\n name = trimmed;\n }\n\n return PROPERTY_NAME_RE.test(name) ? `--${name}` : null;\n}\n\n/** Whitespace and case are not meaningful in the values we compare against. */\nfunction normalizeValue(value: string): string {\n return value.replace(/\\s+/g, '').toLowerCase();\n}\n\n/**\n * Every custom property the kit declares, by name. Membership only — the value\n * is deliberately not consulted, because a token's declared value tells you\n * nothing about whether it is in effect where you read it.\n *\n * Memoized against the palette version, like {@link getTokens} itself.\n */\nlet knownNamesCache: { version: number; names: Set<string> } | null = null;\n\nfunction getKnownTokenNames(): Set<string> {\n const version = getPaletteVersion();\n\n if (!knownNamesCache || knownNamesCache.version !== version) {\n const names = new Set<string>();\n\n for (const key of Object.keys(getTokens())) {\n const name = tokenToProperty(key);\n\n if (name) names.add(name);\n }\n\n knownNamesCache = { version, names };\n }\n\n return knownNamesCache.names;\n}\n\n/** These fire per token, per page — once each, not once per render. */\nconst warnedTokens = new Set<string>();\n\nfunction warnOnce(key: string, message: string) {\n if (warnedTokens.has(key)) return;\n\n warnedTokens.add(key);\n\n warn(message);\n}\n\n/** The document `<body>` is where `<Root>` declares the token block. */\nfunction resolveTarget(element?: Element | null): Element | null {\n if (element) return element;\n if (typeof document === 'undefined') return null;\n\n return document.body ?? document.documentElement ?? null;\n}\n\nfunction readValue(\n computed: CSSStyleDeclaration,\n token: string,\n fallback: string | null,\n silent: boolean,\n onTokenSurface: boolean,\n): string | null {\n const name = tokenToProperty(token);\n\n if (!name) {\n warnOnce(`name:${token}`, `\"${token}\" is not a valid design token name.`);\n\n return fallback;\n }\n\n if (!onTokenSurface) {\n if (!silent) {\n warnOnce(\n `surface:${name}`,\n `Token \"${token}\" (${name}) was read from an element the design tokens are not in effect on, so any value there is tasty's @property default rather than the kit's. <Root> declares the token block on <body>, so <html>, a detached node, and a tree that has not mounted <Root> yet are all outside it. Pass \\`element\\` to read from a specific subtree, or \\`fallback\\` for a value to use instead.`,\n );\n }\n\n return fallback;\n }\n\n const value = computed.getPropertyValue(name).trim();\n\n if (!value) return fallback;\n\n // On a token surface the computed value is the truth, including a genuinely\n // transparent color or a real `0px`. The only thing left to catch is a name\n // the kit never declares, where an @property default is all there is to read.\n if (\n PLACEHOLDER_VALUES.has(normalizeValue(value)) &&\n !getKnownTokenNames().has(name)\n ) {\n if (!silent) {\n warnOnce(\n `unknown:${name}`,\n `Token \"${token}\" (${name}) is not declared by the kit, and read back as an unset custom property. Check the name, or pass \\`fallback\\`.`,\n );\n }\n\n return fallback;\n }\n\n return value;\n}\n\n/**\n * Read the resolved value of one design token — a color, a length, a font\n * descriptor — as a literal string.\n *\n * ```ts\n * resolveTokenValue('#purple'); // 'oklch(0.52 0.24 285)'\n * resolveTokenValue('$space-md'); // '8px'\n * resolveTokenValue('$t3-font-size'); // '14px'\n * ```\n *\n * Returns `options.fallback ?? null` when the token is not declared on the\n * element it was read from — see {@link ResolveTokenOptions}.\n */\nexport function resolveTokenValue(\n token: string,\n options: ResolveTokenOptions = {},\n): string | null {\n return resolveTokenValues([token], options)[token];\n}\n\n/**\n * {@link resolveTokenValue} for several tokens at once, through a single\n * `getComputedStyle` call. Prefer this when building a theme object — a Stripe\n * `Appearance`, a CodeMirror theme — which needs a dozen values at a time.\n *\n * ```ts\n * const { '#surface': background, '#surface-text': color } = resolveTokenValues([\n * '#surface',\n * '#surface-text',\n * ]);\n * ```\n */\nexport function resolveTokenValues<T extends string>(\n tokens: readonly T[],\n options: ResolveTokenOptions = {},\n): Record<T, string | null> {\n return readTokens(tokens, options, false);\n}\n\n/** Shared by the public reader and the preset reader, which suppresses warnings. */\nfunction readTokens<T extends string>(\n tokens: readonly T[],\n options: ResolveTokenOptions,\n silent: boolean,\n): Record<T, string | null> {\n const { element, fallback = null } = options;\n const result = {} as Record<T, string | null>;\n const target = resolveTarget(element);\n const view = target?.ownerDocument?.defaultView;\n\n if (!target || !view) {\n for (const token of tokens) result[token] = fallback;\n\n return result;\n }\n\n const computed = view.getComputedStyle(target);\n // One read for the whole batch: the marker is a property of the element, not\n // of any individual token.\n const onTokenSurface = isTokenSurface(computed);\n\n for (const token of tokens) {\n result[token] = readValue(\n computed,\n token,\n fallback,\n silent,\n onTokenSurface,\n );\n }\n\n return result;\n}\n\n/**\n * Resolve a typography preset — `'t3'`, `'h2'`, `'s3'` — to the literal font\n * descriptors behind it, for a surface that takes a font as values rather than\n * as a `preset` style.\n *\n * ```ts\n * const { fontFamily, fontSize, lineHeight } = resolvePresetValues('t3');\n * ```\n *\n * A preset legitimately leaves most of these unset — only headings carry an\n * `iconSize`, only the `s*` family names a `fontFamily` — so unlike\n * {@link resolveTokenValues} a miss here is expected and never warns.\n */\nexport function resolvePresetValues(\n preset: string,\n options: ResolveTokenOptions = {},\n): ResolvedPreset {\n const { fallback = null } = options;\n const names = PRESET_FIELDS.map(\n (field) => `$${preset}-${PRESET_FIELD_SUFFIXES[field]}`,\n );\n const values = readTokens(\n [...names, '--font-sans'],\n { element: options.element },\n true,\n );\n const resolved = {} as ResolvedPreset;\n\n PRESET_FIELDS.forEach((field, index) => {\n resolved[field] = values[names[index]] ?? fallback;\n });\n\n // Every preset but the `s*` family inherits the sans stack rather than naming\n // it, so the token is absent by design and `--font-sans` is the real answer.\n resolved.fontFamily =\n values[names[PRESET_FIELDS.indexOf('fontFamily')]] ??\n values['--font-sans'] ??\n fallback;\n\n return resolved;\n}\n\n// ============================================================================\n// Appearance subscription\n// ============================================================================\n\n/**\n * A token's resolved value changes for two reasons: the palette was re-seeded\n * (`setPaletteConfig()`, covered by `usePaletteVersion`), or the scheme /\n * contrast tier flipped. This store covers the second.\n *\n * The watching itself belongs to `subscribeScheme()` (`src/utils/react/useScheme.ts`),\n * which owns the definition of both axes — the `data-scheme` / `data-contrast`\n * attributes and the media queries they fall back to are the same strings\n * `<Root>` registers `@dark` and `@hc` from. This store only counts the changes,\n * so there is one observer for the document rather than one per concern.\n */\nlet appearanceVersion = 0;\nlet stopWatchingAppearance: (() => void) | null = null;\n\nconst appearanceListeners = new Set<() => void>();\n\nfunction onAppearanceChange() {\n appearanceVersion++;\n\n appearanceListeners.forEach((listener) => listener());\n}\n\nfunction subscribeAppearance(listener: () => void): () => void {\n appearanceListeners.add(listener);\n\n if (appearanceListeners.size === 1) {\n stopWatchingAppearance = subscribeScheme(onAppearanceChange);\n }\n\n return () => {\n appearanceListeners.delete(listener);\n\n if (!appearanceListeners.size) {\n stopWatchingAppearance?.();\n stopWatchingAppearance = null;\n }\n };\n}\n\nfunction getAppearanceVersion(): number {\n return appearanceVersion;\n}\n\n/**\n * A version React only ever hands out while rendering on the server or\n * hydrating: `useSyncExternalStore` reads `getServerSnapshot` in exactly those\n * two cases and `getSnapshot` in every other. That makes it a reliable \"this\n * render has to match the server's markup\" flag — see {@link useResolvedTokens}.\n *\n * A plain client render (`createRoot`) never sees it, so a CSR app still\n * resolves on its first render rather than paying an extra pass.\n */\nconst HYDRATING = -1;\n\nfunction getServerAppearanceVersion(): number {\n return HYDRATING;\n}\n\n/**\n * Re-render on a scheme / contrast change. Returns the version rather than the\n * state so the snapshot is a primitive — the same reason `usePaletteVersion`\n * does, see `src/tokens/palette-config.ts`.\n */\nfunction useAppearanceVersion(): number {\n return useSyncExternalStore(\n subscribeAppearance,\n getAppearanceVersion,\n getServerAppearanceVersion,\n );\n}\n\n// ============================================================================\n// React bindings\n// ============================================================================\n\n/**\n * The value is read out of the DOM, so it re-resolves whenever the palette is\n * re-seeded or the scheme / contrast tier flips, and it is `fallback ?? null`\n * during SSR. The layout effect is what covers the first commit: a consumer\n * rendered in the same pass as `<Root>` reads before the token block lands.\n */\nfunction useResolvedTokens<T extends string>(\n tokens: readonly T[],\n key: string,\n options: ResolveTokenOptions,\n): Record<T, string | null> {\n const { element, fallback } = options;\n const paletteVersion = usePaletteVersion();\n const appearance = useAppearanceVersion();\n\n const [values, setValues] = useState(() =>\n appearance === HYDRATING\n ? unresolved(tokens, fallback)\n : resolveTokenValues(tokens, options),\n );\n\n useLayoutEffect(() => {\n setValues((previous) => {\n const next = resolveTokenValues(tokens, { element, fallback });\n\n return isSameRecord(previous, next) ? previous : next;\n });\n // `tokens` is a fresh array on all but the first render, so `key` — its\n // joined identity — is what belongs in the dependency list.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [key, element, fallback, paletteVersion, appearance]);\n\n return values;\n}\n\n/**\n * What the server rendered: no DOM, so every token is the fallback. The first\n * client render has to agree with it or hydration reports a mismatch for any\n * consumer that renders the value; the layout effect above replaces it with the\n * resolved values before the browser paints.\n */\nfunction unresolved<T extends string>(\n tokens: readonly T[],\n fallback: string | undefined,\n): Record<T, string | null> {\n const result = {} as Record<T, string | null>;\n\n for (const token of tokens) result[token] = fallback ?? null;\n\n return result;\n}\n\n/** Keeps the previous object when nothing moved, so it stays usable as a dep. */\nfunction isSameRecord<T extends Record<string, string | null>>(\n a: T,\n b: T,\n): boolean {\n const keys = Object.keys(b);\n\n if (Object.keys(a).length !== keys.length) return false;\n\n return keys.every((key) => a[key] === b[key]);\n}\n\n/**\n * {@link resolveTokenValue} as a hook: re-renders when the palette is re-seeded\n * or the scheme / contrast tier flips.\n *\n * ```tsx\n * const accent = useTokenValue('#purple');\n *\n * return <Chart series={{ color: accent ?? '#000' }} />;\n * ```\n */\nexport function useTokenValue(\n token: string,\n options: ResolveTokenOptions = {},\n): string | null {\n return useResolvedTokens([token], token, options)[token];\n}\n\n/**\n * {@link resolveTokenValues} as a hook. The returned object keeps its identity\n * while the values are unchanged, so it is safe as a dependency of the theme\n * object built from it — and the token list may be an inline literal.\n *\n * ```tsx\n * const colors = useTokenValues(['#surface', '#surface-text', '#border']);\n *\n * const appearance = useMemo(() => toStripeAppearance(colors), [colors]);\n * ```\n */\nexport function useTokenValues<T extends string>(\n tokens: readonly T[],\n options: ResolveTokenOptions = {},\n): Record<T, string | null> {\n return useResolvedTokens(tokens, tokens.join(' '), options);\n}\n\n/**\n * {@link resolvePresetValues} as a hook.\n *\n * ```tsx\n * const { fontFamily, fontSize } = usePresetValues('s3');\n * ```\n */\nexport function usePresetValues(\n preset: string,\n options: ResolveTokenOptions = {},\n): ResolvedPreset {\n const { element, fallback } = options;\n const paletteVersion = usePaletteVersion();\n const appearance = useAppearanceVersion();\n\n const [values, setValues] = useState(() =>\n appearance === HYDRATING\n ? unresolvedPreset(fallback)\n : resolvePresetValues(preset, options),\n );\n\n useLayoutEffect(() => {\n setValues((previous) => {\n const next = resolvePresetValues(preset, { element, fallback });\n\n return isSameRecord(previous, next) ? previous : next;\n });\n }, [preset, element, fallback, paletteVersion, appearance]);\n\n return values;\n}\n\n/** {@link unresolved} for the fixed shape {@link resolvePresetValues} returns. */\nfunction unresolvedPreset(fallback: string | undefined): ResolvedPreset {\n const resolved = {} as ResolvedPreset;\n\n for (const field of PRESET_FIELDS) resolved[field] = fallback ?? null;\n\n return resolved;\n}\n"],"mappings":"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"}
|
package/dist/tokens/shadows.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shadows.js","names":[],"sources":["../../src/tokens/shadows.ts"],"sourcesContent":["import type { Styles } from '@tenphi/tasty';\n\n/**\n * Shadow tokens using tasty shorthand syntax.\n *\n * Format: `<offset-y> <blur> <spread?> <color>`\n * - `1bw` = 1 × border-width\n * - `.5x` = 0.5 × gap\n *\n * The shadow colors (`#shadow-sm` / `#shadow-md` / `#shadow-lg`) are\n * generated by Glaze and adapt automatically to dark / high-contrast\n * schemes — see `src/tokens/palette.ts`.\n *\n * Keys use $ prefix for CSS custom properties.\n */\nexport const SHADOW_TOKENS: Styles = {\n /** Subtle shadow for list items */\n '$item-shadow': '0 1bw .375x #shadow-sm',\n /** Standard card shadow */\n '$card-shadow': '0 .5x 2x #shadow-md',\n /** Standard elevation */\n $shadow: '0 .5x 2x #shadow-md',\n /** Elevated dialog shadow */\n '$dialog-shadow': '0 1x 4x #shadow-lg',\n};\n"],"mappings":";;;;;;;;;;;;;;;AAeA,
|
|
1
|
+
{"version":3,"file":"shadows.js","names":["Styles","SHADOW_TOKENS","$shadow"],"sources":["../../src/tokens/shadows.ts"],"sourcesContent":["import type { Styles } from '@tenphi/tasty';\n\n/**\n * Shadow tokens using tasty shorthand syntax.\n *\n * Format: `<offset-y> <blur> <spread?> <color>`\n * - `1bw` = 1 × border-width\n * - `.5x` = 0.5 × gap\n *\n * The shadow colors (`#shadow-sm` / `#shadow-md` / `#shadow-lg`) are\n * generated by Glaze and adapt automatically to dark / high-contrast\n * schemes — see `src/tokens/palette.ts`.\n *\n * Keys use $ prefix for CSS custom properties.\n */\nexport const SHADOW_TOKENS: Styles = {\n /** Subtle shadow for list items */\n '$item-shadow': '0 1bw .375x #shadow-sm',\n /** Standard card shadow */\n '$card-shadow': '0 .5x 2x #shadow-md',\n /** Standard elevation */\n $shadow: '0 .5x 2x #shadow-md',\n /** Elevated dialog shadow */\n '$dialog-shadow': '0 1x 4x #shadow-lg',\n};\n"],"mappings":";;;;;;;;;;;;;;;AAeA,MAAaC,gBAAwB;CAEnC,gBAAgB;CAEhB,gBAAgB;CAEhBC,SAAS;CAET,kBAAkB;CACnB"}
|
package/dist/tokens/sizes.js
CHANGED
package/dist/tokens/sizes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sizes.js","names":[],"sources":["../../src/tokens/sizes.ts"],"sourcesContent":["import type { Styles } from '@tenphi/tasty';\n\n/**\n * Component size values in pixels.\n * Used for buttons, inputs, and other interactive elements.\n */\nexport const SIZES = {\n XS: 24,\n SM: 28,\n MD: 32,\n LG: 40,\n XL: 48,\n} as const;\n\nexport type SizeKey = keyof typeof SIZES;\n\n/** Human-readable size names */\nexport type SizeName = 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';\n\n/**\n * Map from size names to size keys.\n * @example SIZE_NAME_TO_KEY['small'] // 'SM'\n */\nexport const SIZE_NAME_TO_KEY: Record<SizeName, SizeKey> = {\n xsmall: 'XS',\n small: 'SM',\n medium: 'MD',\n large: 'LG',\n xlarge: 'XL',\n};\n\n/**\n * Size tokens with $ prefix for CSS custom properties.\n * Creates tokens like `$size-xs`, `$size-sm`, etc.\n */\nexport const SIZE_TOKENS: Styles = {\n '$size-xs': `${SIZES.XS}px`,\n '$size-sm': `${SIZES.SM}px`,\n '$size-md': `${SIZES.MD}px`,\n '$size-lg': `${SIZES.LG}px`,\n '$size-xl': `${SIZES.XL}px`,\n};\n"],"mappings":";;;;;;AAMA,
|
|
1
|
+
{"version":3,"file":"sizes.js","names":["Styles","SIZES","XS","SM","MD","LG","XL","const","SizeKey","SizeName","SIZE_NAME_TO_KEY","Record","xsmall","small","medium","large","xlarge","SIZE_TOKENS"],"sources":["../../src/tokens/sizes.ts"],"sourcesContent":["import type { Styles } from '@tenphi/tasty';\n\n/**\n * Component size values in pixels.\n * Used for buttons, inputs, and other interactive elements.\n */\nexport const SIZES = {\n XS: 24,\n SM: 28,\n MD: 32,\n LG: 40,\n XL: 48,\n} as const;\n\nexport type SizeKey = keyof typeof SIZES;\n\n/** Human-readable size names */\nexport type SizeName = 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';\n\n/**\n * Map from size names to size keys.\n * @example SIZE_NAME_TO_KEY['small'] // 'SM'\n */\nexport const SIZE_NAME_TO_KEY: Record<SizeName, SizeKey> = {\n xsmall: 'XS',\n small: 'SM',\n medium: 'MD',\n large: 'LG',\n xlarge: 'XL',\n};\n\n/**\n * Size tokens with $ prefix for CSS custom properties.\n * Creates tokens like `$size-xs`, `$size-sm`, etc.\n */\nexport const SIZE_TOKENS: Styles = {\n '$size-xs': `${SIZES.XS}px`,\n '$size-sm': `${SIZES.SM}px`,\n '$size-md': `${SIZES.MD}px`,\n '$size-lg': `${SIZES.LG}px`,\n '$size-xl': `${SIZES.XL}px`,\n};\n"],"mappings":";;;;;;AAMA,MAAaC,QAAQ;CACnBC,IAAI;CACJC,IAAI;CACJC,IAAI;CACJC,IAAI;CACJC,IAAI;CACL;;;;;AAWD,MAAaI,mBAA8C;CACzDE,QAAQ;CACRC,OAAO;CACPC,QAAQ;CACRC,OAAO;CACPC,QAAQ;CACT;;;;;AAMD,MAAaC,cAAsB;CACjC,YAAY,GAAGhB,MAAMC,GAAE;CACvB,YAAY,GAAGD,MAAME,GAAE;CACvB,YAAY,GAAGF,MAAMG,GAAE;CACvB,YAAY,GAAGH,MAAMI,GAAE;CACvB,YAAY,GAAGJ,MAAMK,GAAE;CACxB"}
|
package/dist/tokens/spacing.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spacing.js","names":[],"sources":["../../src/tokens/spacing.ts"],"sourcesContent":["import type { Styles } from '@tenphi/tasty';\n\n/**\n * Spacing tokens using tasty multiplier syntax.\n * Values like `.5x` mean 0.5 × gap, `2x` means 2 × gap.\n *\n * Keys use $ prefix for CSS custom properties.\n */\nexport const SPACE_TOKENS: Styles = {\n '$space-xs': '.5x',\n '$space-sm': '.75x',\n '$space-md': '1x',\n '$space-lg': '1.5x',\n '$space-xl': '2x',\n};\n"],"mappings":";;;;;;;;AAQA,
|
|
1
|
+
{"version":3,"file":"spacing.js","names":["Styles","SPACE_TOKENS"],"sources":["../../src/tokens/spacing.ts"],"sourcesContent":["import type { Styles } from '@tenphi/tasty';\n\n/**\n * Spacing tokens using tasty multiplier syntax.\n * Values like `.5x` mean 0.5 × gap, `2x` means 2 × gap.\n *\n * Keys use $ prefix for CSS custom properties.\n */\nexport const SPACE_TOKENS: Styles = {\n '$space-xs': '.5x',\n '$space-sm': '.75x',\n '$space-md': '1x',\n '$space-lg': '1.5x',\n '$space-xl': '2x',\n};\n"],"mappings":";;;;;;;;AAQA,MAAaC,eAAuB;CAClC,aAAa;CACb,aAAa;CACb,aAAa;CACb,aAAa;CACb,aAAa;CACd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typography.js","names":[],"sources":["../../src/tokens/typography.ts"],"sourcesContent":["/**\n * Typography preset configuration.\n * Each preset defines font properties that get expanded into CSS custom properties.\n */\nexport interface TypographyPreset {\n fontSize: string;\n lineHeight: string;\n letterSpacing?: string;\n fontWeight: string | number;\n boldFontWeight?: string | number;\n iconSize?: string;\n textTransform?: string;\n fontFamily?: string;\n fontStyle?: string;\n}\n\n/**\n * Typography presets for headings, text, and special styles.\n *\n * Naming conventions:\n * - `h1`-`h6`: Headings (bold by default)\n * - `t1`-`t4`: Text styles (regular weight)\n * - `t1m`-`t4m`: Text styles medium weight\n * - `m1`-`m3`: Markdown/prose styles (larger line-height)\n * - `p1`-`p4`: Paragraph styles\n * - `c1`-`c3`: Caption/uppercase styles\n * - `s2`-`s4`: Snippet / monospace styles (parallel to `t2`-`t4`)\n * - `tag`: Tag/badge typography\n * - `default`: Base text style\n */\nexport const TYPOGRAPHY_PRESETS: Record<string, TypographyPreset> = {\n // Text (basic)\n text: {\n fontSize: '14px',\n lineHeight: '20px',\n letterSpacing: '0',\n fontWeight: '400',\n },\n\n // Headings (h1-h6)\n h1: {\n fontSize: '36px',\n lineHeight: '44px',\n letterSpacing: '-0.01em',\n fontWeight: '600',\n boldFontWeight: '700',\n iconSize: '40px',\n },\n h2: {\n fontSize: '24px',\n lineHeight: '32px',\n letterSpacing: '0em',\n fontWeight: '600',\n boldFontWeight: '700',\n iconSize: '28px',\n },\n h3: {\n fontSize: '20px',\n lineHeight: '28px',\n letterSpacing: '0em',\n fontWeight: '600',\n boldFontWeight: '700',\n iconSize: '24px',\n },\n h4: {\n fontSize: '18px',\n lineHeight: '24px',\n letterSpacing: '0',\n fontWeight: '600',\n boldFontWeight: '700',\n iconSize: '22px',\n },\n h5: {\n fontSize: '16px',\n lineHeight: '22px',\n letterSpacing: '0',\n fontWeight: '600',\n boldFontWeight: '700',\n iconSize: '20px',\n },\n h6: {\n fontSize: '14px',\n lineHeight: '20px',\n letterSpacing: '0.01em',\n fontWeight: '600',\n boldFontWeight: '700',\n iconSize: '20px',\n },\n\n // Text styles (t1-t4)\n t1: {\n fontSize: '18px',\n lineHeight: '24px',\n letterSpacing: '0',\n fontWeight: '400',\n boldFontWeight: '600',\n iconSize: '20px',\n },\n t2: {\n fontSize: '16px',\n lineHeight: '22px',\n letterSpacing: '0',\n fontWeight: '400',\n boldFontWeight: '600',\n iconSize: '20px',\n },\n t2m: {\n fontSize: '16px',\n lineHeight: '22px',\n letterSpacing: '0',\n fontWeight: '500',\n boldFontWeight: '600',\n iconSize: '20px',\n },\n t3: {\n fontSize: '14px',\n lineHeight: '20px',\n letterSpacing: '0',\n fontWeight: '400',\n boldFontWeight: '600',\n iconSize: '18px',\n },\n t3m: {\n fontSize: '14px',\n lineHeight: '20px',\n letterSpacing: '0',\n fontWeight: '500',\n boldFontWeight: '600',\n iconSize: '18px',\n },\n t4: {\n fontSize: '12px',\n lineHeight: '18px',\n letterSpacing: '0',\n fontWeight: '500',\n boldFontWeight: '600',\n iconSize: '16px',\n },\n t4m: {\n fontSize: '12px',\n lineHeight: '18px',\n letterSpacing: '0',\n fontWeight: '600',\n boldFontWeight: '700',\n iconSize: '16px',\n },\n\n // Markdown/prose styles (m1-m3)\n m1: {\n fontSize: '18px',\n lineHeight: '32px',\n letterSpacing: '0',\n fontWeight: '400',\n boldFontWeight: '600',\n iconSize: '22px',\n },\n m2: {\n fontSize: '16px',\n lineHeight: '28px',\n letterSpacing: '0',\n fontWeight: '400',\n boldFontWeight: '600',\n iconSize: '20px',\n },\n m3: {\n fontSize: '14px',\n lineHeight: '24px',\n letterSpacing: '0',\n fontWeight: '400',\n boldFontWeight: '600',\n iconSize: '20px',\n },\n\n // Paragraph styles (p1-p4)\n p1: {\n fontSize: '18px',\n lineHeight: '28px',\n letterSpacing: '0',\n fontWeight: '400',\n boldFontWeight: '600',\n iconSize: '22px',\n },\n p2: {\n fontSize: '16px',\n lineHeight: '24px',\n letterSpacing: '0',\n fontWeight: '400',\n boldFontWeight: '600',\n iconSize: '20px',\n },\n p3: {\n fontSize: '14px',\n lineHeight: '22px',\n letterSpacing: '0',\n fontWeight: '400',\n boldFontWeight: '600',\n iconSize: '18px',\n },\n p4: {\n fontSize: '12px',\n lineHeight: '20px',\n letterSpacing: '0',\n fontWeight: '500',\n boldFontWeight: '600',\n iconSize: '16px',\n },\n\n // Caption/uppercase styles (c1-c3)\n c1: {\n fontSize: '14px',\n lineHeight: '20px',\n letterSpacing: '0',\n fontWeight: '600',\n boldFontWeight: '700',\n textTransform: 'uppercase',\n iconSize: '18px',\n },\n c2: {\n fontSize: '12px',\n lineHeight: '18px',\n letterSpacing: '0.01em',\n fontWeight: '600',\n boldFontWeight: '700',\n textTransform: 'uppercase',\n iconSize: '16px',\n },\n c3: {\n fontSize: '11px',\n lineHeight: '16px',\n letterSpacing: '0.02em',\n fontWeight: '600',\n boldFontWeight: '700',\n textTransform: 'uppercase',\n iconSize: '14px',\n },\n\n // Tag typography\n tag: {\n fontSize: '12px',\n lineHeight: '18px',\n letterSpacing: '0.01em',\n fontWeight: '600',\n boldFontWeight: '700',\n iconSize: '16px',\n },\n\n // Snippet / monospace styles (s2-s4) — sized to parallel t2-t4\n s2: {\n fontSize: '16px',\n lineHeight: '22px',\n letterSpacing: '0',\n fontWeight: '400',\n boldFontWeight: '600',\n iconSize: '20px',\n fontFamily: 'var(--font-mono)',\n },\n s3: {\n fontSize: '14px',\n lineHeight: '20px',\n letterSpacing: '0',\n fontWeight: '400',\n boldFontWeight: '600',\n iconSize: '18px',\n fontFamily: 'var(--font-mono)',\n },\n s4: {\n fontSize: '12px',\n lineHeight: '18px',\n letterSpacing: '0',\n fontWeight: '400',\n boldFontWeight: '600',\n iconSize: '16px',\n fontFamily: 'var(--font-mono)',\n },\n\n // Default text style (references t3)\n default: {\n fontSize: 'var(--t3-font-size)',\n lineHeight: 'var(--t3-line-height)',\n letterSpacing: 'var(--t3-letter-spacing)',\n fontWeight: 'var(--t3-font-weight)',\n boldFontWeight: 'var(--t3-bold-font-weight)',\n iconSize: 'var(--t3-icon-size)',\n },\n};\n"],"mappings":";;;;;;;;;;;;;;;;AA8BA,
|
|
1
|
+
{"version":3,"file":"typography.js","names":["TypographyPreset","fontSize","lineHeight","letterSpacing","fontWeight","boldFontWeight","iconSize","textTransform","fontFamily","fontStyle","TYPOGRAPHY_PRESETS","Record","text","h1","h2","h3","h4","h5","h6","t1","t2","t2m","t3","t3m","t4","t4m","m1","m2","m3","p1","p2","p3","p4","c1","c2","c3","tag","s2","s3","s4","default"],"sources":["../../src/tokens/typography.ts"],"sourcesContent":["/**\n * Typography preset configuration.\n * Each preset defines font properties that get expanded into CSS custom properties.\n */\nexport interface TypographyPreset {\n fontSize: string;\n lineHeight: string;\n letterSpacing?: string;\n fontWeight: string | number;\n boldFontWeight?: string | number;\n iconSize?: string;\n textTransform?: string;\n fontFamily?: string;\n fontStyle?: string;\n}\n\n/**\n * Typography presets for headings, text, and special styles.\n *\n * Naming conventions:\n * - `h1`-`h6`: Headings (bold by default)\n * - `t1`-`t4`: Text styles (regular weight)\n * - `t1m`-`t4m`: Text styles medium weight\n * - `m1`-`m3`: Markdown/prose styles (larger line-height)\n * - `p1`-`p4`: Paragraph styles\n * - `c1`-`c3`: Caption/uppercase styles\n * - `s2`-`s4`: Snippet / monospace styles (parallel to `t2`-`t4`)\n * - `tag`: Tag/badge typography\n * - `default`: Base text style\n */\nexport const TYPOGRAPHY_PRESETS: Record<string, TypographyPreset> = {\n // Text (basic)\n text: {\n fontSize: '14px',\n lineHeight: '20px',\n letterSpacing: '0',\n fontWeight: '400',\n },\n\n // Headings (h1-h6)\n h1: {\n fontSize: '36px',\n lineHeight: '44px',\n letterSpacing: '-0.01em',\n fontWeight: '600',\n boldFontWeight: '700',\n iconSize: '40px',\n },\n h2: {\n fontSize: '24px',\n lineHeight: '32px',\n letterSpacing: '0em',\n fontWeight: '600',\n boldFontWeight: '700',\n iconSize: '28px',\n },\n h3: {\n fontSize: '20px',\n lineHeight: '28px',\n letterSpacing: '0em',\n fontWeight: '600',\n boldFontWeight: '700',\n iconSize: '24px',\n },\n h4: {\n fontSize: '18px',\n lineHeight: '24px',\n letterSpacing: '0',\n fontWeight: '600',\n boldFontWeight: '700',\n iconSize: '22px',\n },\n h5: {\n fontSize: '16px',\n lineHeight: '22px',\n letterSpacing: '0',\n fontWeight: '600',\n boldFontWeight: '700',\n iconSize: '20px',\n },\n h6: {\n fontSize: '14px',\n lineHeight: '20px',\n letterSpacing: '0.01em',\n fontWeight: '600',\n boldFontWeight: '700',\n iconSize: '20px',\n },\n\n // Text styles (t1-t4)\n t1: {\n fontSize: '18px',\n lineHeight: '24px',\n letterSpacing: '0',\n fontWeight: '400',\n boldFontWeight: '600',\n iconSize: '20px',\n },\n t2: {\n fontSize: '16px',\n lineHeight: '22px',\n letterSpacing: '0',\n fontWeight: '400',\n boldFontWeight: '600',\n iconSize: '20px',\n },\n t2m: {\n fontSize: '16px',\n lineHeight: '22px',\n letterSpacing: '0',\n fontWeight: '500',\n boldFontWeight: '600',\n iconSize: '20px',\n },\n t3: {\n fontSize: '14px',\n lineHeight: '20px',\n letterSpacing: '0',\n fontWeight: '400',\n boldFontWeight: '600',\n iconSize: '18px',\n },\n t3m: {\n fontSize: '14px',\n lineHeight: '20px',\n letterSpacing: '0',\n fontWeight: '500',\n boldFontWeight: '600',\n iconSize: '18px',\n },\n t4: {\n fontSize: '12px',\n lineHeight: '18px',\n letterSpacing: '0',\n fontWeight: '500',\n boldFontWeight: '600',\n iconSize: '16px',\n },\n t4m: {\n fontSize: '12px',\n lineHeight: '18px',\n letterSpacing: '0',\n fontWeight: '600',\n boldFontWeight: '700',\n iconSize: '16px',\n },\n\n // Markdown/prose styles (m1-m3)\n m1: {\n fontSize: '18px',\n lineHeight: '32px',\n letterSpacing: '0',\n fontWeight: '400',\n boldFontWeight: '600',\n iconSize: '22px',\n },\n m2: {\n fontSize: '16px',\n lineHeight: '28px',\n letterSpacing: '0',\n fontWeight: '400',\n boldFontWeight: '600',\n iconSize: '20px',\n },\n m3: {\n fontSize: '14px',\n lineHeight: '24px',\n letterSpacing: '0',\n fontWeight: '400',\n boldFontWeight: '600',\n iconSize: '20px',\n },\n\n // Paragraph styles (p1-p4)\n p1: {\n fontSize: '18px',\n lineHeight: '28px',\n letterSpacing: '0',\n fontWeight: '400',\n boldFontWeight: '600',\n iconSize: '22px',\n },\n p2: {\n fontSize: '16px',\n lineHeight: '24px',\n letterSpacing: '0',\n fontWeight: '400',\n boldFontWeight: '600',\n iconSize: '20px',\n },\n p3: {\n fontSize: '14px',\n lineHeight: '22px',\n letterSpacing: '0',\n fontWeight: '400',\n boldFontWeight: '600',\n iconSize: '18px',\n },\n p4: {\n fontSize: '12px',\n lineHeight: '20px',\n letterSpacing: '0',\n fontWeight: '500',\n boldFontWeight: '600',\n iconSize: '16px',\n },\n\n // Caption/uppercase styles (c1-c3)\n c1: {\n fontSize: '14px',\n lineHeight: '20px',\n letterSpacing: '0',\n fontWeight: '600',\n boldFontWeight: '700',\n textTransform: 'uppercase',\n iconSize: '18px',\n },\n c2: {\n fontSize: '12px',\n lineHeight: '18px',\n letterSpacing: '0.01em',\n fontWeight: '600',\n boldFontWeight: '700',\n textTransform: 'uppercase',\n iconSize: '16px',\n },\n c3: {\n fontSize: '11px',\n lineHeight: '16px',\n letterSpacing: '0.02em',\n fontWeight: '600',\n boldFontWeight: '700',\n textTransform: 'uppercase',\n iconSize: '14px',\n },\n\n // Tag typography\n tag: {\n fontSize: '12px',\n lineHeight: '18px',\n letterSpacing: '0.01em',\n fontWeight: '600',\n boldFontWeight: '700',\n iconSize: '16px',\n },\n\n // Snippet / monospace styles (s2-s4) — sized to parallel t2-t4\n s2: {\n fontSize: '16px',\n lineHeight: '22px',\n letterSpacing: '0',\n fontWeight: '400',\n boldFontWeight: '600',\n iconSize: '20px',\n fontFamily: 'var(--font-mono)',\n },\n s3: {\n fontSize: '14px',\n lineHeight: '20px',\n letterSpacing: '0',\n fontWeight: '400',\n boldFontWeight: '600',\n iconSize: '18px',\n fontFamily: 'var(--font-mono)',\n },\n s4: {\n fontSize: '12px',\n lineHeight: '18px',\n letterSpacing: '0',\n fontWeight: '400',\n boldFontWeight: '600',\n iconSize: '16px',\n fontFamily: 'var(--font-mono)',\n },\n\n // Default text style (references t3)\n default: {\n fontSize: 'var(--t3-font-size)',\n lineHeight: 'var(--t3-line-height)',\n letterSpacing: 'var(--t3-letter-spacing)',\n fontWeight: 'var(--t3-font-weight)',\n boldFontWeight: 'var(--t3-bold-font-weight)',\n iconSize: 'var(--t3-icon-size)',\n },\n};\n"],"mappings":";;;;;;;;;;;;;;;;AA8BA,MAAaU,qBAAuD;CAElEE,MAAM;EACJX,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACb;CAGDS,IAAI;EACFZ,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBC,UAAU;EACX;CACDQ,IAAI;EACFb,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBC,UAAU;EACX;CACDS,IAAI;EACFd,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBC,UAAU;EACX;CACDU,IAAI;EACFf,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBC,UAAU;EACX;CACDW,IAAI;EACFhB,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBC,UAAU;EACX;CACDY,IAAI;EACFjB,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBC,UAAU;EACX;CAGDa,IAAI;EACFlB,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBC,UAAU;EACX;CACDc,IAAI;EACFnB,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBC,UAAU;EACX;CACDe,KAAK;EACHpB,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBC,UAAU;EACX;CACDgB,IAAI;EACFrB,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBC,UAAU;EACX;CACDiB,KAAK;EACHtB,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBC,UAAU;EACX;CACDkB,IAAI;EACFvB,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBC,UAAU;EACX;CACDmB,KAAK;EACHxB,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBC,UAAU;EACX;CAGDoB,IAAI;EACFzB,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBC,UAAU;EACX;CACDqB,IAAI;EACF1B,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBC,UAAU;EACX;CACDsB,IAAI;EACF3B,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBC,UAAU;EACX;CAGDuB,IAAI;EACF5B,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBC,UAAU;EACX;CACDwB,IAAI;EACF7B,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBC,UAAU;EACX;CACDyB,IAAI;EACF9B,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBC,UAAU;EACX;CACD0B,IAAI;EACF/B,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBC,UAAU;EACX;CAGD2B,IAAI;EACFhC,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBE,eAAe;EACfD,UAAU;EACX;CACD4B,IAAI;EACFjC,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBE,eAAe;EACfD,UAAU;EACX;CACD6B,IAAI;EACFlC,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBE,eAAe;EACfD,UAAU;EACX;CAGD8B,KAAK;EACHnC,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBC,UAAU;EACX;CAGD+B,IAAI;EACFpC,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBC,UAAU;EACVE,YAAY;EACb;CACD8B,IAAI;EACFrC,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBC,UAAU;EACVE,YAAY;EACb;CACD+B,IAAI;EACFtC,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBC,UAAU;EACVE,YAAY;EACb;CAGDgC,SAAS;EACPvC,UAAU;EACVC,YAAY;EACZC,eAAe;EACfC,YAAY;EACZC,gBAAgB;EAChBC,UAAU;EACZ;CACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResizeSensor.js","names":[],"sources":["../../src/utils/ResizeSensor.ts"],"sourcesContent":["// @ts-nocheck\n\n/**\n * Iterate over each of the provided element(s).\n *\n * @param {HTMLElement|HTMLElement[]} elements\n * @param {Function} callback\n */\nfunction forEachElement(elements, callback) {\n let elementsType = Object.prototype.toString.call(elements);\n let isCollectionTyped =\n '[object Array]' === elementsType ||\n '[object NodeList]' === elementsType ||\n '[object HTMLCollection]' === elementsType ||\n '[object Object]' === elementsType;\n let i = 0,\n j = elements.length;\n if (isCollectionTyped) {\n for (; i < j; i++) {\n callback(elements[i]);\n }\n } else {\n callback(elements);\n }\n}\n\n/**\n * Get element size\n * @param {HTMLElement} element\n * @returns {Object} {width, height}\n */\nfunction getElementSize(element) {\n if (!element.getBoundingClientRect) {\n return {\n width: element.offsetWidth,\n height: element.offsetHeight,\n };\n }\n\n let rect = element.getBoundingClientRect();\n return {\n width: Math.round(rect.width),\n height: Math.round(rect.height),\n };\n}\n\n/**\n * Apply CSS styles to element.\n *\n * @param {HTMLElement} element\n * @param {Object} style\n */\nfunction setStyle(element, style) {\n Object.keys(style).forEach(function (key) {\n element.style[key] = style[key];\n });\n}\n\n/**\n * Class for dimension change detection.\n *\n * @param {Element|Element[]|Elements} element\n * @param {Function} callback\n *\n * @constructor\n */\nexport let ResizeSensor = function (element, callback) {\n // https://github.com/marcj/css-element-queries/blob/master/src/ResizeSensor.js\n // https://github.com/Semantic-Org/Semantic-UI/issues/3855\n // https://github.com/marcj/css-element-queries/issues/257\n let globalWindow = window;\n // Only used for the dirty checking, so the event callback count is limited to max 1 call per fps per sensor.\n // In combination with the event based resize sensor this saves cpu time, because the sensor is too fast and\n // would generate too many unnecessary events.\n let requestAnimationFrame =\n globalWindow.requestAnimationFrame ||\n globalWindow.mozRequestAnimationFrame ||\n globalWindow.webkitRequestAnimationFrame ||\n function (fn) {\n return globalWindow.setTimeout(fn, 20);\n };\n let cancelAnimationFrame =\n globalWindow.cancelAnimationFrame ||\n globalWindow.mozCancelAnimationFrame ||\n globalWindow.webkitCancelAnimationFrame ||\n function (timer) {\n globalWindow.clearTimeout(timer);\n };\n\n //Is used when checking in reset() only for invisible elements\n let lastAnimationFrameForInvisibleCheck = 0;\n\n /**\n *\n * @constructor\n */\n function EventQueue() {\n let q = [];\n this.add = function (ev) {\n q.push(ev);\n };\n\n let i, j;\n this.call = function (sizeInfo) {\n for (i = 0, j = q.length; i < j; i++) {\n q[i].call(this, sizeInfo);\n }\n };\n\n this.remove = function (ev) {\n let newQueue = [];\n for (i = 0, j = q.length; i < j; i++) {\n if (q[i] !== ev) newQueue.push(q[i]);\n }\n q = newQueue;\n };\n\n this.length = function () {\n return q.length;\n };\n }\n\n /**\n *\n * @param {HTMLElement} element\n * @param {Function} resized\n */\n function attachResizeEvent(element, resized) {\n if (!element) return;\n if (element.resizedAttached) {\n element.resizedAttached.add(resized);\n return;\n }\n\n element.resizedAttached = new EventQueue();\n element.resizedAttached.add(resized);\n\n element.resizeSensor = document.createElement('div');\n element.resizeSensor.dir = 'ltr';\n element.resizeSensor.className = 'resize-sensor';\n\n let style = {\n pointerEvents: 'none',\n position: 'absolute',\n left: '0px',\n top: '0px',\n right: '0px',\n bottom: '0px',\n overflow: 'hidden',\n zIndex: '-1',\n visibility: 'hidden',\n maxWidth: '100%',\n };\n let styleChild = {\n position: 'absolute',\n left: '0px',\n top: '0px',\n transition: '0s',\n };\n\n setStyle(element.resizeSensor, style);\n\n let expand = document.createElement('div');\n expand.className = 'resize-sensor-expand';\n setStyle(expand, style);\n\n let expandChild = document.createElement('div');\n setStyle(expandChild, styleChild);\n expand.appendChild(expandChild);\n\n let shrink = document.createElement('div');\n shrink.className = 'resize-sensor-shrink';\n setStyle(shrink, style);\n\n let shrinkChild = document.createElement('div');\n setStyle(shrinkChild, styleChild);\n setStyle(shrinkChild, { width: '200%', height: '200%' });\n shrink.appendChild(shrinkChild);\n\n element.resizeSensor.appendChild(expand);\n element.resizeSensor.appendChild(shrink);\n element.appendChild(element.resizeSensor);\n\n let computedStyle = window.getComputedStyle(element);\n let position = computedStyle\n ? computedStyle.getPropertyValue('position')\n : null;\n if (\n 'absolute' !== position &&\n 'relative' !== position &&\n 'fixed' !== position &&\n 'sticky' !== position\n ) {\n element.style.position = 'relative';\n }\n\n let dirty = false;\n\n //last request animation frame id used in onscroll event\n let rafId = 0;\n let size = getElementSize(element);\n let lastWidth = 0;\n let lastHeight = 0;\n let initialHiddenCheck = true;\n lastAnimationFrameForInvisibleCheck = 0;\n\n let resetExpandShrink = function () {\n let width = element.offsetWidth;\n let height = element.offsetHeight;\n\n expandChild.style.width = width + 10 + 'px';\n expandChild.style.height = height + 10 + 'px';\n\n expand.scrollLeft = width + 10;\n expand.scrollTop = height + 10;\n\n shrink.scrollLeft = width + 10;\n shrink.scrollTop = height + 10;\n };\n\n let reset = function () {\n // Check if element is hidden\n if (initialHiddenCheck) {\n let invisible = element.offsetWidth === 0 && element.offsetHeight === 0;\n if (invisible) {\n // Check in next frame\n if (!lastAnimationFrameForInvisibleCheck) {\n lastAnimationFrameForInvisibleCheck = requestAnimationFrame(\n function () {\n lastAnimationFrameForInvisibleCheck = 0;\n reset();\n },\n );\n }\n\n return;\n } else {\n // Stop checking\n initialHiddenCheck = false;\n }\n }\n\n resetExpandShrink();\n };\n element.resizeSensor.resetSensor = reset;\n\n let onResized = function () {\n rafId = 0;\n\n if (!dirty) return;\n\n lastWidth = size.width;\n lastHeight = size.height;\n\n if (element.resizedAttached) {\n element.resizedAttached.call(size);\n }\n };\n\n let onScroll = function () {\n size = getElementSize(element);\n dirty = size.width !== lastWidth || size.height !== lastHeight;\n\n if (dirty && !rafId) {\n rafId = requestAnimationFrame(onResized);\n }\n\n reset();\n };\n\n let addEvent = function (el, name, cb) {\n if (el.attachEvent) {\n el.attachEvent('on' + name, cb);\n } else {\n el.addEventListener(name, cb);\n }\n };\n\n addEvent(expand, 'scroll', onScroll);\n addEvent(shrink, 'scroll', onScroll);\n\n // Fix for custom Elements and invisible elements\n lastAnimationFrameForInvisibleCheck = requestAnimationFrame(function () {\n lastAnimationFrameForInvisibleCheck = 0;\n reset();\n });\n }\n\n forEachElement(element, function (elem) {\n attachResizeEvent(elem, callback);\n });\n\n this.detach = function (ev) {\n // clean up the unfinished animation frame to prevent a potential endless requestAnimationFrame of reset\n if (lastAnimationFrameForInvisibleCheck) {\n cancelAnimationFrame(lastAnimationFrameForInvisibleCheck);\n lastAnimationFrameForInvisibleCheck = 0;\n }\n ResizeSensor.detach(element, ev);\n };\n\n this.reset = function () {\n //To prevent invoking element.resizeSensor.resetSensor if it's undefined\n if (element.resizeSensor.resetSensor) {\n element.resizeSensor.resetSensor();\n }\n };\n};\n\nResizeSensor.reset = function (element) {\n forEachElement(element, function (elem) {\n //To prevent invoking element.resizeSensor.resetSensor if it's undefined\n if (element.resizeSensor.resetSensor) {\n elem.resizeSensor.resetSensor();\n }\n });\n};\n\nResizeSensor.detach = function (element, ev) {\n forEachElement(element, function (elem) {\n if (!elem) return;\n if (elem.resizedAttached && typeof ev === 'function') {\n elem.resizedAttached.remove(ev);\n if (elem.resizedAttached.length()) return;\n }\n if (elem.resizeSensor) {\n if (elem.contains(elem.resizeSensor)) {\n elem.removeChild(elem.resizeSensor);\n }\n delete elem.resizeSensor;\n delete elem.resizedAttached;\n }\n });\n};\n\nif (typeof MutationObserver !== 'undefined') {\n let observer = new MutationObserver(function (mutations) {\n for (let i in mutations) {\n if (mutations.hasOwnProperty(i)) {\n let items = mutations[i].addedNodes;\n for (let j = 0; j < items.length; j++) {\n if (items[j].resizeSensor) {\n ResizeSensor.reset(items[j]);\n }\n }\n }\n }\n });\n\n document.addEventListener('DOMContentLoaded', function (event) {\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n });\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ResizeSensor.js","names":["forEachElement","elements","callback","elementsType","Object","prototype","toString","call","isCollectionTyped","i","j","length","getElementSize","element","getBoundingClientRect","width","offsetWidth","height","offsetHeight","rect","Math","round","setStyle","style","keys","forEach","key","ResizeSensor","globalWindow","window","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","fn","setTimeout","cancelAnimationFrame","mozCancelAnimationFrame","webkitCancelAnimationFrame","timer","clearTimeout","lastAnimationFrameForInvisibleCheck","EventQueue","q","add","ev","push","sizeInfo","remove","newQueue","attachResizeEvent","resized","resizedAttached","resizeSensor","document","createElement","dir","className","pointerEvents","position","left","top","right","bottom","overflow","zIndex","visibility","maxWidth","styleChild","transition","expand","expandChild","appendChild","shrink","shrinkChild","computedStyle","getComputedStyle","getPropertyValue","dirty","rafId","size","lastWidth","lastHeight","initialHiddenCheck","resetExpandShrink","scrollLeft","scrollTop","reset","invisible","resetSensor","onResized","onScroll","addEvent","el","name","cb","attachEvent","addEventListener","elem","detach","contains","removeChild","MutationObserver","observer","mutations","hasOwnProperty","items","addedNodes","event","observe","body","childList","subtree"],"sources":["../../src/utils/ResizeSensor.ts"],"sourcesContent":["// @ts-nocheck\n\n/**\n * Iterate over each of the provided element(s).\n *\n * @param {HTMLElement|HTMLElement[]} elements\n * @param {Function} callback\n */\nfunction forEachElement(elements, callback) {\n let elementsType = Object.prototype.toString.call(elements);\n let isCollectionTyped =\n '[object Array]' === elementsType ||\n '[object NodeList]' === elementsType ||\n '[object HTMLCollection]' === elementsType ||\n '[object Object]' === elementsType;\n let i = 0,\n j = elements.length;\n if (isCollectionTyped) {\n for (; i < j; i++) {\n callback(elements[i]);\n }\n } else {\n callback(elements);\n }\n}\n\n/**\n * Get element size\n * @param {HTMLElement} element\n * @returns {Object} {width, height}\n */\nfunction getElementSize(element) {\n if (!element.getBoundingClientRect) {\n return {\n width: element.offsetWidth,\n height: element.offsetHeight,\n };\n }\n\n let rect = element.getBoundingClientRect();\n return {\n width: Math.round(rect.width),\n height: Math.round(rect.height),\n };\n}\n\n/**\n * Apply CSS styles to element.\n *\n * @param {HTMLElement} element\n * @param {Object} style\n */\nfunction setStyle(element, style) {\n Object.keys(style).forEach(function (key) {\n element.style[key] = style[key];\n });\n}\n\n/**\n * Class for dimension change detection.\n *\n * @param {Element|Element[]|Elements} element\n * @param {Function} callback\n *\n * @constructor\n */\nexport let ResizeSensor = function (element, callback) {\n // https://github.com/marcj/css-element-queries/blob/master/src/ResizeSensor.js\n // https://github.com/Semantic-Org/Semantic-UI/issues/3855\n // https://github.com/marcj/css-element-queries/issues/257\n let globalWindow = window;\n // Only used for the dirty checking, so the event callback count is limited to max 1 call per fps per sensor.\n // In combination with the event based resize sensor this saves cpu time, because the sensor is too fast and\n // would generate too many unnecessary events.\n let requestAnimationFrame =\n globalWindow.requestAnimationFrame ||\n globalWindow.mozRequestAnimationFrame ||\n globalWindow.webkitRequestAnimationFrame ||\n function (fn) {\n return globalWindow.setTimeout(fn, 20);\n };\n let cancelAnimationFrame =\n globalWindow.cancelAnimationFrame ||\n globalWindow.mozCancelAnimationFrame ||\n globalWindow.webkitCancelAnimationFrame ||\n function (timer) {\n globalWindow.clearTimeout(timer);\n };\n\n //Is used when checking in reset() only for invisible elements\n let lastAnimationFrameForInvisibleCheck = 0;\n\n /**\n *\n * @constructor\n */\n function EventQueue() {\n let q = [];\n this.add = function (ev) {\n q.push(ev);\n };\n\n let i, j;\n this.call = function (sizeInfo) {\n for (i = 0, j = q.length; i < j; i++) {\n q[i].call(this, sizeInfo);\n }\n };\n\n this.remove = function (ev) {\n let newQueue = [];\n for (i = 0, j = q.length; i < j; i++) {\n if (q[i] !== ev) newQueue.push(q[i]);\n }\n q = newQueue;\n };\n\n this.length = function () {\n return q.length;\n };\n }\n\n /**\n *\n * @param {HTMLElement} element\n * @param {Function} resized\n */\n function attachResizeEvent(element, resized) {\n if (!element) return;\n if (element.resizedAttached) {\n element.resizedAttached.add(resized);\n return;\n }\n\n element.resizedAttached = new EventQueue();\n element.resizedAttached.add(resized);\n\n element.resizeSensor = document.createElement('div');\n element.resizeSensor.dir = 'ltr';\n element.resizeSensor.className = 'resize-sensor';\n\n let style = {\n pointerEvents: 'none',\n position: 'absolute',\n left: '0px',\n top: '0px',\n right: '0px',\n bottom: '0px',\n overflow: 'hidden',\n zIndex: '-1',\n visibility: 'hidden',\n maxWidth: '100%',\n };\n let styleChild = {\n position: 'absolute',\n left: '0px',\n top: '0px',\n transition: '0s',\n };\n\n setStyle(element.resizeSensor, style);\n\n let expand = document.createElement('div');\n expand.className = 'resize-sensor-expand';\n setStyle(expand, style);\n\n let expandChild = document.createElement('div');\n setStyle(expandChild, styleChild);\n expand.appendChild(expandChild);\n\n let shrink = document.createElement('div');\n shrink.className = 'resize-sensor-shrink';\n setStyle(shrink, style);\n\n let shrinkChild = document.createElement('div');\n setStyle(shrinkChild, styleChild);\n setStyle(shrinkChild, { width: '200%', height: '200%' });\n shrink.appendChild(shrinkChild);\n\n element.resizeSensor.appendChild(expand);\n element.resizeSensor.appendChild(shrink);\n element.appendChild(element.resizeSensor);\n\n let computedStyle = window.getComputedStyle(element);\n let position = computedStyle\n ? computedStyle.getPropertyValue('position')\n : null;\n if (\n 'absolute' !== position &&\n 'relative' !== position &&\n 'fixed' !== position &&\n 'sticky' !== position\n ) {\n element.style.position = 'relative';\n }\n\n let dirty = false;\n\n //last request animation frame id used in onscroll event\n let rafId = 0;\n let size = getElementSize(element);\n let lastWidth = 0;\n let lastHeight = 0;\n let initialHiddenCheck = true;\n lastAnimationFrameForInvisibleCheck = 0;\n\n let resetExpandShrink = function () {\n let width = element.offsetWidth;\n let height = element.offsetHeight;\n\n expandChild.style.width = width + 10 + 'px';\n expandChild.style.height = height + 10 + 'px';\n\n expand.scrollLeft = width + 10;\n expand.scrollTop = height + 10;\n\n shrink.scrollLeft = width + 10;\n shrink.scrollTop = height + 10;\n };\n\n let reset = function () {\n // Check if element is hidden\n if (initialHiddenCheck) {\n let invisible = element.offsetWidth === 0 && element.offsetHeight === 0;\n if (invisible) {\n // Check in next frame\n if (!lastAnimationFrameForInvisibleCheck) {\n lastAnimationFrameForInvisibleCheck = requestAnimationFrame(\n function () {\n lastAnimationFrameForInvisibleCheck = 0;\n reset();\n },\n );\n }\n\n return;\n } else {\n // Stop checking\n initialHiddenCheck = false;\n }\n }\n\n resetExpandShrink();\n };\n element.resizeSensor.resetSensor = reset;\n\n let onResized = function () {\n rafId = 0;\n\n if (!dirty) return;\n\n lastWidth = size.width;\n lastHeight = size.height;\n\n if (element.resizedAttached) {\n element.resizedAttached.call(size);\n }\n };\n\n let onScroll = function () {\n size = getElementSize(element);\n dirty = size.width !== lastWidth || size.height !== lastHeight;\n\n if (dirty && !rafId) {\n rafId = requestAnimationFrame(onResized);\n }\n\n reset();\n };\n\n let addEvent = function (el, name, cb) {\n if (el.attachEvent) {\n el.attachEvent('on' + name, cb);\n } else {\n el.addEventListener(name, cb);\n }\n };\n\n addEvent(expand, 'scroll', onScroll);\n addEvent(shrink, 'scroll', onScroll);\n\n // Fix for custom Elements and invisible elements\n lastAnimationFrameForInvisibleCheck = requestAnimationFrame(function () {\n lastAnimationFrameForInvisibleCheck = 0;\n reset();\n });\n }\n\n forEachElement(element, function (elem) {\n attachResizeEvent(elem, callback);\n });\n\n this.detach = function (ev) {\n // clean up the unfinished animation frame to prevent a potential endless requestAnimationFrame of reset\n if (lastAnimationFrameForInvisibleCheck) {\n cancelAnimationFrame(lastAnimationFrameForInvisibleCheck);\n lastAnimationFrameForInvisibleCheck = 0;\n }\n ResizeSensor.detach(element, ev);\n };\n\n this.reset = function () {\n //To prevent invoking element.resizeSensor.resetSensor if it's undefined\n if (element.resizeSensor.resetSensor) {\n element.resizeSensor.resetSensor();\n }\n };\n};\n\nResizeSensor.reset = function (element) {\n forEachElement(element, function (elem) {\n //To prevent invoking element.resizeSensor.resetSensor if it's undefined\n if (element.resizeSensor.resetSensor) {\n elem.resizeSensor.resetSensor();\n }\n });\n};\n\nResizeSensor.detach = function (element, ev) {\n forEachElement(element, function (elem) {\n if (!elem) return;\n if (elem.resizedAttached && typeof ev === 'function') {\n elem.resizedAttached.remove(ev);\n if (elem.resizedAttached.length()) return;\n }\n if (elem.resizeSensor) {\n if (elem.contains(elem.resizeSensor)) {\n elem.removeChild(elem.resizeSensor);\n }\n delete elem.resizeSensor;\n delete elem.resizedAttached;\n }\n });\n};\n\nif (typeof MutationObserver !== 'undefined') {\n let observer = new MutationObserver(function (mutations) {\n for (let i in mutations) {\n if (mutations.hasOwnProperty(i)) {\n let items = mutations[i].addedNodes;\n for (let j = 0; j < items.length; j++) {\n if (items[j].resizeSensor) {\n ResizeSensor.reset(items[j]);\n }\n }\n }\n }\n });\n\n document.addEventListener('DOMContentLoaded', function (event) {\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n });\n });\n}\n"],"mappings":";;;;;;;;AAQA,SAASA,eAAeC,UAAUC,UAAU;CAC1C,IAAIC,eAAeC,OAAOC,UAAUC,SAASC,KAAKN,SAAS;CAC3D,IAAIO,oBACF,qBAAqBL,gBACrB,wBAAwBA,gBACxB,8BAA8BA,gBAC9B,sBAAsBA;CACxB,IAAIM,IAAI,GACNC,IAAIT,SAASU;AACf,KAAIH,kBACF,QAAOC,IAAIC,GAAGD,IACZP,UAASD,SAASQ,GAAG;KAGvBP,UAASD,SAAS;;;;;;;AAStB,SAASW,eAAeC,SAAS;AAC/B,KAAI,CAACA,QAAQC,sBACX,QAAO;EACLC,OAAOF,QAAQG;EACfC,QAAQJ,QAAQK;EACjB;CAGH,IAAIC,OAAON,QAAQC,uBAAuB;AAC1C,QAAO;EACLC,OAAOK,KAAKC,MAAMF,KAAKJ,MAAM;EAC7BE,QAAQG,KAAKC,MAAMF,KAAKF,OAAM;EAC/B;;;;;;;;AASH,SAASK,SAAST,SAASU,OAAO;AAChCnB,QAAOoB,KAAKD,MAAM,CAACE,QAAQ,SAAUC,KAAK;AACxCb,UAAQU,MAAMG,OAAOH,MAAMG;GAC3B;;;;;;;;;;AAWJ,IAAWC,eAAe,SAAUd,SAASX,UAAU;CAIrD,IAAI0B,eAAeC;CAInB,IAAIC,wBACFF,aAAaE,yBACbF,aAAaG,4BACbH,aAAaI,+BACb,SAAUC,IAAI;AACZ,SAAOL,aAAaM,WAAWD,IAAI,GAAG;;CAE1C,IAAIE,uBACFP,aAAaO,wBACbP,aAAaQ,2BACbR,aAAaS,8BACb,SAAUC,OAAO;AACfV,eAAaW,aAAaD,MAAM;;CAIpC,IAAIE,sCAAsC;;;;;CAM1C,SAASC,aAAa;EACpB,IAAIC,IAAI,EAAE;AACV,OAAKC,MAAM,SAAUC,IAAI;AACvBF,KAAEG,KAAKD,GAAG;;EAGZ,IAAInC,GAAGC;AACP,OAAKH,OAAO,SAAUuC,UAAU;AAC9B,QAAKrC,IAAI,GAAGC,IAAIgC,EAAE/B,QAAQF,IAAIC,GAAGD,IAC/BiC,GAAEjC,GAAGF,KAAK,MAAMuC,SAAS;;AAI7B,OAAKC,SAAS,SAAUH,IAAI;GAC1B,IAAII,WAAW,EAAE;AACjB,QAAKvC,IAAI,GAAGC,IAAIgC,EAAE/B,QAAQF,IAAIC,GAAGD,IAC/B,KAAIiC,EAAEjC,OAAOmC,GAAII,UAASH,KAAKH,EAAEjC,GAAG;AAEtCiC,OAAIM;;AAGN,OAAKrC,SAAS,WAAY;AACxB,UAAO+B,EAAE/B;;;;;;;;CASb,SAASsC,kBAAkBpC,SAASqC,SAAS;AAC3C,MAAI,CAACrC,QAAS;AACd,MAAIA,QAAQsC,iBAAiB;AAC3BtC,WAAQsC,gBAAgBR,IAAIO,QAAQ;AACpC;;AAGFrC,UAAQsC,kBAAkB,IAAIV,YAAY;AAC1C5B,UAAQsC,gBAAgBR,IAAIO,QAAQ;AAEpCrC,UAAQuC,eAAeC,SAASC,cAAc,MAAM;AACpDzC,UAAQuC,aAAaG,MAAM;AAC3B1C,UAAQuC,aAAaI,YAAY;EAEjC,IAAIjC,QAAQ;GACVkC,eAAe;GACfC,UAAU;GACVC,MAAM;GACNC,KAAK;GACLC,OAAO;GACPC,QAAQ;GACRC,UAAU;GACVC,QAAQ;GACRC,YAAY;GACZC,UAAU;GACX;EACD,IAAIC,aAAa;GACfT,UAAU;GACVC,MAAM;GACNC,KAAK;GACLQ,YAAY;GACb;AAED9C,WAAST,QAAQuC,cAAc7B,MAAM;EAErC,IAAI8C,SAAShB,SAASC,cAAc,MAAM;AAC1Ce,SAAOb,YAAY;AACnBlC,WAAS+C,QAAQ9C,MAAM;EAEvB,IAAI+C,cAAcjB,SAASC,cAAc,MAAM;AAC/ChC,WAASgD,aAAaH,WAAW;AACjCE,SAAOE,YAAYD,YAAY;EAE/B,IAAIE,SAASnB,SAASC,cAAc,MAAM;AAC1CkB,SAAOhB,YAAY;AACnBlC,WAASkD,QAAQjD,MAAM;EAEvB,IAAIkD,cAAcpB,SAASC,cAAc,MAAM;AAC/ChC,WAASmD,aAAaN,WAAW;AACjC7C,WAASmD,aAAa;GAAE1D,OAAO;GAAQE,QAAQ;GAAQ,CAAC;AACxDuD,SAAOD,YAAYE,YAAY;AAE/B5D,UAAQuC,aAAamB,YAAYF,OAAO;AACxCxD,UAAQuC,aAAamB,YAAYC,OAAO;AACxC3D,UAAQ0D,YAAY1D,QAAQuC,aAAa;EAEzC,IAAIsB,gBAAgB7C,OAAO8C,iBAAiB9D,QAAQ;EACpD,IAAI6C,WAAWgB,gBACXA,cAAcE,iBAAiB,WAAW,GAC1C;AACJ,MACE,eAAelB,YACf,eAAeA,YACf,YAAYA,YACZ,aAAaA,SAEb7C,SAAQU,MAAMmC,WAAW;EAG3B,IAAImB,QAAQ;EAGZ,IAAIC,QAAQ;EACZ,IAAIC,OAAOnE,eAAeC,QAAQ;EAClC,IAAImE,YAAY;EAChB,IAAIC,aAAa;EACjB,IAAIC,qBAAqB;AACzB1C,wCAAsC;EAEtC,IAAI2C,oBAAoB,WAAY;GAClC,IAAIpE,QAAQF,QAAQG;GACpB,IAAIC,SAASJ,QAAQK;AAErBoD,eAAY/C,MAAMR,QAAQA,QAAQ,KAAK;AACvCuD,eAAY/C,MAAMN,SAASA,SAAS,KAAK;AAEzCoD,UAAOe,aAAarE,QAAQ;AAC5BsD,UAAOgB,YAAYpE,SAAS;AAE5BuD,UAAOY,aAAarE,QAAQ;AAC5ByD,UAAOa,YAAYpE,SAAS;;EAG9B,IAAIqE,QAAQ,WAAY;AAEtB,OAAIJ,mBAEF,KADgBrE,QAAQG,gBAAgB,KAAKH,QAAQK,iBAAiB,GACvD;AAEb,QAAI,CAACsB,oCACHA,uCAAsCV,sBACpC,WAAY;AACVU,2CAAsC;AACtC8C,YAAO;MAEV;AAGH;SAGAJ,sBAAqB;AAIzBC,sBAAmB;;AAErBtE,UAAQuC,aAAaoC,cAAcF;EAEnC,IAAIG,YAAY,WAAY;AAC1BX,WAAQ;AAER,OAAI,CAACD,MAAO;AAEZG,eAAYD,KAAKhE;AACjBkE,gBAAaF,KAAK9D;AAElB,OAAIJ,QAAQsC,gBACVtC,SAAQsC,gBAAgB5C,KAAKwE,KAAK;;EAItC,IAAIW,WAAW,WAAY;AACzBX,UAAOnE,eAAeC,QAAQ;AAC9BgE,WAAQE,KAAKhE,UAAUiE,aAAaD,KAAK9D,WAAWgE;AAEpD,OAAIJ,SAAS,CAACC,MACZA,SAAQhD,sBAAsB2D,UAAU;AAG1CH,UAAO;;EAGT,IAAIK,WAAW,SAAUC,IAAIC,MAAMC,IAAI;AACrC,OAAIF,GAAGG,YACLH,IAAGG,YAAY,OAAOF,MAAMC,GAAG;OAE/BF,IAAGI,iBAAiBH,MAAMC,GAAG;;AAIjCH,WAAStB,QAAQ,UAAUqB,SAAS;AACpCC,WAASnB,QAAQ,UAAUkB,SAAS;AAGpClD,wCAAsCV,sBAAsB,WAAY;AACtEU,yCAAsC;AACtC8C,UAAO;IACP;;AAGJtF,gBAAea,SAAS,SAAUoF,MAAM;AACtChD,oBAAkBgD,MAAM/F,SAAS;GACjC;AAEF,MAAKgG,SAAS,SAAUtD,IAAI;AAE1B,MAAIJ,qCAAqC;AACvCL,wBAAqBK,oCAAoC;AACzDA,yCAAsC;;AAExCb,eAAauE,OAAOrF,SAAS+B,GAAG;;AAGlC,MAAK0C,QAAQ,WAAY;AAEvB,MAAIzE,QAAQuC,aAAaoC,YACvB3E,SAAQuC,aAAaoC,aAAa;;;AAKxC7D,aAAa2D,QAAQ,SAAUzE,SAAS;AACtCb,gBAAea,SAAS,SAAUoF,MAAM;AAEtC,MAAIpF,QAAQuC,aAAaoC,YACvBS,MAAK7C,aAAaoC,aAAa;GAEjC;;AAGJ7D,aAAauE,SAAS,SAAUrF,SAAS+B,IAAI;AAC3C5C,gBAAea,SAAS,SAAUoF,MAAM;AACtC,MAAI,CAACA,KAAM;AACX,MAAIA,KAAK9C,mBAAmB,OAAOP,OAAO,YAAY;AACpDqD,QAAK9C,gBAAgBJ,OAAOH,GAAG;AAC/B,OAAIqD,KAAK9C,gBAAgBxC,QAAQ,CAAE;;AAErC,MAAIsF,KAAK7C,cAAc;AACrB,OAAI6C,KAAKE,SAASF,KAAK7C,aAAa,CAClC6C,MAAKG,YAAYH,KAAK7C,aAAa;AAErC,UAAO6C,KAAK7C;AACZ,UAAO6C,KAAK9C;;GAEd;;AAGJ,IAAI,OAAOkD,qBAAqB,aAAa;CAC3C,IAAIC,WAAW,IAAID,iBAAiB,SAAUE,WAAW;AACvD,OAAK,IAAI9F,KAAK8F,UACZ,KAAIA,UAAUC,eAAe/F,EAAE,EAAE;GAC/B,IAAIgG,QAAQF,UAAU9F,GAAGiG;AACzB,QAAK,IAAIhG,IAAI,GAAGA,IAAI+F,MAAM9F,QAAQD,IAChC,KAAI+F,MAAM/F,GAAG0C,aACXzB,cAAa2D,MAAMmB,MAAM/F,GAAG;;GAKpC;AAEF2C,UAAS2C,iBAAiB,oBAAoB,SAAUW,OAAO;AAC7DL,WAASM,QAAQvD,SAASwD,MAAM;GAC9BC,WAAW;GACXC,SAAS;GACV,CAAC;GACF"}
|
package/dist/utils/colors.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.183.0 | Cube Dev Team */
|
|
2
2
|
import { hslToSrgb, okhslToOklch, okhslToSrgb, okhstToOkhsl, oklabToOkhsl, parseHexAlpha } from "@tenphi/glaze";
|
|
3
3
|
|
|
4
4
|
//#region src/utils/colors.ts
|
package/dist/utils/colors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colors.js","names":[],"sources":["../../src/utils/colors.ts"],"sourcesContent":["import {\n hslToSrgb,\n okhslToOklch,\n okhslToSrgb,\n okhstToOkhsl,\n oklabToOkhsl,\n parseHexAlpha,\n} from '@tenphi/glaze';\n\nimport type { OkhslColor, OklchColor, RgbColor } from '@tenphi/glaze';\n\n/**\n * Reading a CSS color *literal* into channels — the layer under both the color\n * fields (which parse what a user types) and {@link toLegacyColor} (which parses\n * what `resolveTokenValue()` hands back).\n *\n * It lives here rather than in either consumer because the two need the same\n * grammar and disagreeing about it is invisible: a component this parser fails\n * to recognise does not throw, it makes the whole color unparseable, and the\n * caller falls back to something that merely looks plausible. The cases that\n * actually show up — a negative hue, a `none` component, scientific notation\n * out of a serializer, `oklch(from …)` relative syntax — are exactly the ones a\n * hand-rolled regex misses.\n *\n * Named CSS colors (`red`, `rebeccapurple`) are deliberately not supported,\n * matching `glaze.color()`. `transparent` is the one exception, because the kit\n * declares it: `#clear` is `transparent`.\n */\n\nconst FUNCTION_RE = /^([a-z]+)\\(([^()]+)\\)$/;\n\n/**\n * A number with an optional unit, both captured in one pass.\n *\n * This runs on whatever the user types, so it is written to stay linear in two\n * separate ways. The integer and fraction parts are arranged 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. And the unit is a capture group here rather\n * than a second, unanchored scan: reading it back with `/[a-z%]+$/` is itself\n * polynomial (CodeQL `js/polynomial-redos`), because every start position\n * re-walks the run of unit characters before failing at `$` — quadratic on a\n * string of many `%`.\n */\nconst NUMBER_RE =\n /^([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?)(%|deg|rad|grad|turn)?$/;\n\n/** Degrees per unit, for the angle units `<hue>` accepts. */\nconst ANGLE_UNITS: Record<string, number> = {\n deg: 1,\n rad: 180 / Math.PI,\n grad: 0.9,\n turn: 360,\n};\n\n/**\n * `none` is a real component value, not a parse failure. Outside interpolation\n * and relative-color syntax CSS Color 4 resolves it to zero, which is what every\n * caller here wants — `oklch(0.5 none 200)` is a grey, and `… / none` is\n * invisible rather than unparseable.\n */\nconst NONE = 'none';\n\n/** A component we can read: a number with an optional unit, or `none`. */\nfunction isComponent(arg: string): boolean {\n return arg === NONE || NUMBER_RE.test(arg);\n}\n\n/** A component's magnitude and its unit, `''` when it is a bare number. */\ninterface NumericComponent {\n value: number;\n unit: string;\n}\n\n/** Read a numeric component and its unit together, or `null` if it is neither. */\nfunction readNumber(arg: string): NumericComponent | null {\n const match = NUMBER_RE.exec(arg);\n\n return match ? { value: parseFloat(match[1]), unit: match[2] ?? '' } : null;\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 * A color-function call split into its parts, with alpha separated out. Each\n * component keeps its unit, so the caller can tell `50%` from `50` — what a\n * percentage means is per space and per position (`oklch()`'s `100%` is `1` for\n * lightness and `0.4` for chroma), so only the caller can scale it.\n */\nexport interface ColorFunction {\n /** Lowercased function name — `'oklch'`, `'rgba'`, `'okhst'`. */\n name: string;\n /** The color components, alpha excluded. */\n args: string[];\n /** The alpha component as written, or `null` when the call omits it. */\n alpha: string | null;\n}\n\n/**\n * Split a color-function literal into its name, components and alpha. Both the\n * modern space-separated (`rgb(0 0 0 / 50%)`) and legacy comma-separated\n * (`rgba(0, 0, 0, 0.5)`) syntaxes are accepted.\n *\n * Returns `null` for anything that is not a plain color-function call, which\n * includes the two forms whose value cannot be worked out without a CSS engine:\n * relative syntax (`oklch(from var(--x) l c h)`) and `color-mix()`. Rejecting\n * them is the point — passing them through unchanged is what makes a consumer\n * silently drop the color.\n */\nexport function parseColorFunction(input: string): ColorFunction | null {\n const match = FUNCTION_RE.exec(input.trim().toLowerCase());\n\n if (!match) return null;\n\n const [, name, body] = match;\n const [components, ...rest] = body.split('/');\n\n // More than one slash is never valid syntax.\n if (rest.length > 1) return null;\n\n let alpha: string | null = rest.length ? rest[0].trim() : null;\n\n const args = components\n .trim()\n .split(components.includes(',') ? ',' : /\\s+/)\n .map((part) => part.trim())\n .filter(Boolean);\n\n // A fourth component is alpha — that is the legacy `rgba(r, g, b, a)` /\n // `hsla(h, s, l, a)` form, and the same reading is the useful one for a\n // space-separated four-tuple someone typed without the slash.\n if (args.length === 4) {\n // `rgba(0, 0, 0, 1 / 0.5)` names alpha twice.\n if (alpha !== null) return null;\n\n alpha = args.pop()!;\n }\n\n if (alpha !== null && !isComponent(alpha)) return null;\n\n return args.every(isComponent) ? { name, args, alpha } : null;\n}\n\n/**\n * Read a non-hue component. `scale` is what `100%` means in this position;\n * `none` is zero, and an angle is not a value this position accepts.\n */\nexport function readComponent(arg: string, scale: number): number {\n if (arg === NONE) return 0;\n\n const parsed = readNumber(arg);\n\n if (!parsed) return NaN;\n\n if (parsed.unit === '%') return (parsed.value / 100) * scale;\n\n return parsed.unit ? NaN : parsed.value;\n}\n\n/** Read a `<hue>`: any angle unit, or a bare number of degrees. Normalized. */\nexport function readHue(arg: string): number {\n if (arg === NONE) return 0;\n\n const parsed = readNumber(arg);\n\n if (!parsed) return NaN;\n\n // A percentage is not a valid hue angle.\n if (parsed.unit === '%') return NaN;\n\n // Every unit {@link NUMBER_RE} captures other than `%` is an angle, so the\n // guard is unreachable today. It stays because a unit added there later — a\n // length, say — would otherwise arrive here and be read as degrees.\n const perDegree = parsed.unit ? ANGLE_UNITS[parsed.unit] : 1;\n\n return perDegree === undefined ? NaN : normalizeHue(parsed.value * perDegree);\n}\n\n/** Read an `<alpha-value>`. A missing alpha is opaque; out of range is clamped. */\nexport function readAlpha(arg: string | null): number {\n if (arg === null) return 1;\n\n const alpha = readComponent(arg, 1);\n\n return Number.isFinite(alpha) ? clamp(alpha, 0, 1) : NaN;\n}\n\nexport function clamp(value: number, min: number, max: number): number {\n return value < min ? min : value > max ? max : value;\n}\n\nexport function anyNaN(...values: number[]): boolean {\n return values.some((value) => !Number.isFinite(value));\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\n/**\n * OKLCh addresses colors outside the sRGB gamut, so chroma is clipped to the\n * gamut boundary at the requested lightness. Hue is taken from the input rather\n * than from the conversion, which loses it at zero chroma.\n */\nexport function oklchToOkhsl(color: OklchColor): OkhslColor {\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 rgbFromSrgb([r, g, b]: [number, number, number]): RgbColor {\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n/** Gamma-encoded sRGB channels in 0–1, plus alpha in 0–1. */\nexport interface SrgbColor {\n rgb: [number, number, number];\n alpha: number;\n}\n\n/**\n * Read any color literal the kit can emit or accept into gamma-encoded sRGB\n * channels plus alpha — the space every legacy consumer speaks.\n *\n * Returns `null` when the input is not a color, or is one whose value depends on\n * a CSS engine we do not have (see {@link parseColorFunction}).\n */\nexport function parseSrgbColor(input: string): SrgbColor | null {\n const text = input.trim().toLowerCase();\n\n if (!text) return null;\n\n // The one named color the kit declares: `#clear` is `transparent`. Browsers\n // compute it to `rgba(0, 0, 0, 0)`, but a token block read outside a browser\n // hands back the keyword as authored.\n if (text === 'transparent') return { rgb: [0, 0, 0], alpha: 0 };\n\n if (text.startsWith('#')) {\n const parsed = parseHexAlpha(text);\n\n return parsed ? { rgb: parsed.rgb, alpha: parsed.alpha ?? 1 } : null;\n }\n\n const parsed = parseColorFunction(text);\n\n if (!parsed || parsed.args.length !== 3) return null;\n\n const { name, args } = parsed;\n const alpha = readAlpha(parsed.alpha);\n\n if (!Number.isFinite(alpha)) return null;\n\n const rgb = toSrgbChannels(name, args);\n\n return rgb ? { rgb, alpha } : null;\n}\n\nfunction toSrgbChannels(\n name: string,\n args: string[],\n): [number, number, number] | null {\n switch (name) {\n case 'rgb':\n case 'rgba': {\n const [r, g, b] = args.map((arg) => readComponent(arg, 255));\n\n if (anyNaN(r, g, b)) return null;\n\n return [clamp(r / 255, 0, 1), clamp(g / 255, 0, 1), clamp(b / 255, 0, 1)];\n }\n case 'hsl':\n case 'hsla': {\n const h = readHue(args[0]);\n const s = readComponent(args[1], 100) / 100;\n const l = readComponent(args[2], 100) / 100;\n\n if (anyNaN(h, s, l)) return null;\n\n return hslToSrgb(h, clamp(s, 0, 1), clamp(l, 0, 1));\n }\n case 'okhsl': {\n const h = readHue(args[0]);\n const s = readComponent(args[1], 100) / 100;\n const l = readComponent(args[2], 100) / 100;\n\n if (anyNaN(h, s, l)) return null;\n\n return okhslToSrgb(h, clamp(s, 0, 1), clamp(l, 0, 1));\n }\n case 'okhst': {\n const h = readHue(args[0]);\n const s = readComponent(args[1], 100) / 100;\n const t = readComponent(args[2], 100) / 100;\n\n if (anyNaN(h, s, t)) return null;\n\n const okhsl = okhstToOkhsl({\n h,\n s: clamp(s, 0, 1),\n t: clamp(t, 0, 1),\n });\n\n return okhslToSrgb(\n normalizeHue(okhsl.h),\n clamp(okhsl.s, 0, 1),\n clamp(okhsl.l, 0, 1),\n );\n }\n case 'oklch': {\n // In `oklch()` a percentage means 1 for lightness and 0.4 for chroma.\n const l = readComponent(args[0], 1);\n const c = readComponent(args[1], 0.4);\n const h = readHue(args[2]);\n\n if (anyNaN(l, c, h)) return null;\n\n const okhsl = oklchToOkhsl({ l, c, h });\n\n return okhslToSrgb(okhsl.h, okhsl.s, okhsl.l);\n }\n default:\n return null;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"colors.js","names":["hslToSrgb","okhslToOklch","okhslToSrgb","okhstToOkhsl","oklabToOkhsl","parseHexAlpha","OkhslColor","OklchColor","RgbColor","FUNCTION_RE","NUMBER_RE","ANGLE_UNITS","Record","deg","rad","Math","PI","grad","turn","NONE","isComponent","arg","test","NumericComponent","value","unit","readNumber","match","exec","parseFloat","normalizeHue","hue","Number","isFinite","ColorFunction","name","args","alpha","parseColorFunction","input","trim","toLowerCase","body","components","rest","split","length","includes","map","part","filter","Boolean","pop","every","readComponent","scale","parsed","NaN","readHue","perDegree","undefined","readAlpha","clamp","min","max","anyNaN","values","some","maxChroma","lightness","oklchToOkhsl","color","h","c","radians","s","l","cos","sin","limit","rgbFromSrgb","r","g","b","SrgbColor","rgb","parseSrgbColor","text","startsWith","toSrgbChannels","t","okhsl"],"sources":["../../src/utils/colors.ts"],"sourcesContent":["import {\n hslToSrgb,\n okhslToOklch,\n okhslToSrgb,\n okhstToOkhsl,\n oklabToOkhsl,\n parseHexAlpha,\n} from '@tenphi/glaze';\n\nimport type { OkhslColor, OklchColor, RgbColor } from '@tenphi/glaze';\n\n/**\n * Reading a CSS color *literal* into channels — the layer under both the color\n * fields (which parse what a user types) and {@link toLegacyColor} (which parses\n * what `resolveTokenValue()` hands back).\n *\n * It lives here rather than in either consumer because the two need the same\n * grammar and disagreeing about it is invisible: a component this parser fails\n * to recognise does not throw, it makes the whole color unparseable, and the\n * caller falls back to something that merely looks plausible. The cases that\n * actually show up — a negative hue, a `none` component, scientific notation\n * out of a serializer, `oklch(from …)` relative syntax — are exactly the ones a\n * hand-rolled regex misses.\n *\n * Named CSS colors (`red`, `rebeccapurple`) are deliberately not supported,\n * matching `glaze.color()`. `transparent` is the one exception, because the kit\n * declares it: `#clear` is `transparent`.\n */\n\nconst FUNCTION_RE = /^([a-z]+)\\(([^()]+)\\)$/;\n\n/**\n * A number with an optional unit, both captured in one pass.\n *\n * This runs on whatever the user types, so it is written to stay linear in two\n * separate ways. The integer and fraction parts are arranged 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. And the unit is a capture group here rather\n * than a second, unanchored scan: reading it back with `/[a-z%]+$/` is itself\n * polynomial (CodeQL `js/polynomial-redos`), because every start position\n * re-walks the run of unit characters before failing at `$` — quadratic on a\n * string of many `%`.\n */\nconst NUMBER_RE =\n /^([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?)(%|deg|rad|grad|turn)?$/;\n\n/** Degrees per unit, for the angle units `<hue>` accepts. */\nconst ANGLE_UNITS: Record<string, number> = {\n deg: 1,\n rad: 180 / Math.PI,\n grad: 0.9,\n turn: 360,\n};\n\n/**\n * `none` is a real component value, not a parse failure. Outside interpolation\n * and relative-color syntax CSS Color 4 resolves it to zero, which is what every\n * caller here wants — `oklch(0.5 none 200)` is a grey, and `… / none` is\n * invisible rather than unparseable.\n */\nconst NONE = 'none';\n\n/** A component we can read: a number with an optional unit, or `none`. */\nfunction isComponent(arg: string): boolean {\n return arg === NONE || NUMBER_RE.test(arg);\n}\n\n/** A component's magnitude and its unit, `''` when it is a bare number. */\ninterface NumericComponent {\n value: number;\n unit: string;\n}\n\n/** Read a numeric component and its unit together, or `null` if it is neither. */\nfunction readNumber(arg: string): NumericComponent | null {\n const match = NUMBER_RE.exec(arg);\n\n return match ? { value: parseFloat(match[1]), unit: match[2] ?? '' } : null;\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 * A color-function call split into its parts, with alpha separated out. Each\n * component keeps its unit, so the caller can tell `50%` from `50` — what a\n * percentage means is per space and per position (`oklch()`'s `100%` is `1` for\n * lightness and `0.4` for chroma), so only the caller can scale it.\n */\nexport interface ColorFunction {\n /** Lowercased function name — `'oklch'`, `'rgba'`, `'okhst'`. */\n name: string;\n /** The color components, alpha excluded. */\n args: string[];\n /** The alpha component as written, or `null` when the call omits it. */\n alpha: string | null;\n}\n\n/**\n * Split a color-function literal into its name, components and alpha. Both the\n * modern space-separated (`rgb(0 0 0 / 50%)`) and legacy comma-separated\n * (`rgba(0, 0, 0, 0.5)`) syntaxes are accepted.\n *\n * Returns `null` for anything that is not a plain color-function call, which\n * includes the two forms whose value cannot be worked out without a CSS engine:\n * relative syntax (`oklch(from var(--x) l c h)`) and `color-mix()`. Rejecting\n * them is the point — passing them through unchanged is what makes a consumer\n * silently drop the color.\n */\nexport function parseColorFunction(input: string): ColorFunction | null {\n const match = FUNCTION_RE.exec(input.trim().toLowerCase());\n\n if (!match) return null;\n\n const [, name, body] = match;\n const [components, ...rest] = body.split('/');\n\n // More than one slash is never valid syntax.\n if (rest.length > 1) return null;\n\n let alpha: string | null = rest.length ? rest[0].trim() : null;\n\n const args = components\n .trim()\n .split(components.includes(',') ? ',' : /\\s+/)\n .map((part) => part.trim())\n .filter(Boolean);\n\n // A fourth component is alpha — that is the legacy `rgba(r, g, b, a)` /\n // `hsla(h, s, l, a)` form, and the same reading is the useful one for a\n // space-separated four-tuple someone typed without the slash.\n if (args.length === 4) {\n // `rgba(0, 0, 0, 1 / 0.5)` names alpha twice.\n if (alpha !== null) return null;\n\n alpha = args.pop()!;\n }\n\n if (alpha !== null && !isComponent(alpha)) return null;\n\n return args.every(isComponent) ? { name, args, alpha } : null;\n}\n\n/**\n * Read a non-hue component. `scale` is what `100%` means in this position;\n * `none` is zero, and an angle is not a value this position accepts.\n */\nexport function readComponent(arg: string, scale: number): number {\n if (arg === NONE) return 0;\n\n const parsed = readNumber(arg);\n\n if (!parsed) return NaN;\n\n if (parsed.unit === '%') return (parsed.value / 100) * scale;\n\n return parsed.unit ? NaN : parsed.value;\n}\n\n/** Read a `<hue>`: any angle unit, or a bare number of degrees. Normalized. */\nexport function readHue(arg: string): number {\n if (arg === NONE) return 0;\n\n const parsed = readNumber(arg);\n\n if (!parsed) return NaN;\n\n // A percentage is not a valid hue angle.\n if (parsed.unit === '%') return NaN;\n\n // Every unit {@link NUMBER_RE} captures other than `%` is an angle, so the\n // guard is unreachable today. It stays because a unit added there later — a\n // length, say — would otherwise arrive here and be read as degrees.\n const perDegree = parsed.unit ? ANGLE_UNITS[parsed.unit] : 1;\n\n return perDegree === undefined ? NaN : normalizeHue(parsed.value * perDegree);\n}\n\n/** Read an `<alpha-value>`. A missing alpha is opaque; out of range is clamped. */\nexport function readAlpha(arg: string | null): number {\n if (arg === null) return 1;\n\n const alpha = readComponent(arg, 1);\n\n return Number.isFinite(alpha) ? clamp(alpha, 0, 1) : NaN;\n}\n\nexport function clamp(value: number, min: number, max: number): number {\n return value < min ? min : value > max ? max : value;\n}\n\nexport function anyNaN(...values: number[]): boolean {\n return values.some((value) => !Number.isFinite(value));\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\n/**\n * OKLCh addresses colors outside the sRGB gamut, so chroma is clipped to the\n * gamut boundary at the requested lightness. Hue is taken from the input rather\n * than from the conversion, which loses it at zero chroma.\n */\nexport function oklchToOkhsl(color: OklchColor): OkhslColor {\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 rgbFromSrgb([r, g, b]: [number, number, number]): RgbColor {\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n/** Gamma-encoded sRGB channels in 0–1, plus alpha in 0–1. */\nexport interface SrgbColor {\n rgb: [number, number, number];\n alpha: number;\n}\n\n/**\n * Read any color literal the kit can emit or accept into gamma-encoded sRGB\n * channels plus alpha — the space every legacy consumer speaks.\n *\n * Returns `null` when the input is not a color, or is one whose value depends on\n * a CSS engine we do not have (see {@link parseColorFunction}).\n */\nexport function parseSrgbColor(input: string): SrgbColor | null {\n const text = input.trim().toLowerCase();\n\n if (!text) return null;\n\n // The one named color the kit declares: `#clear` is `transparent`. Browsers\n // compute it to `rgba(0, 0, 0, 0)`, but a token block read outside a browser\n // hands back the keyword as authored.\n if (text === 'transparent') return { rgb: [0, 0, 0], alpha: 0 };\n\n if (text.startsWith('#')) {\n const parsed = parseHexAlpha(text);\n\n return parsed ? { rgb: parsed.rgb, alpha: parsed.alpha ?? 1 } : null;\n }\n\n const parsed = parseColorFunction(text);\n\n if (!parsed || parsed.args.length !== 3) return null;\n\n const { name, args } = parsed;\n const alpha = readAlpha(parsed.alpha);\n\n if (!Number.isFinite(alpha)) return null;\n\n const rgb = toSrgbChannels(name, args);\n\n return rgb ? { rgb, alpha } : null;\n}\n\nfunction toSrgbChannels(\n name: string,\n args: string[],\n): [number, number, number] | null {\n switch (name) {\n case 'rgb':\n case 'rgba': {\n const [r, g, b] = args.map((arg) => readComponent(arg, 255));\n\n if (anyNaN(r, g, b)) return null;\n\n return [clamp(r / 255, 0, 1), clamp(g / 255, 0, 1), clamp(b / 255, 0, 1)];\n }\n case 'hsl':\n case 'hsla': {\n const h = readHue(args[0]);\n const s = readComponent(args[1], 100) / 100;\n const l = readComponent(args[2], 100) / 100;\n\n if (anyNaN(h, s, l)) return null;\n\n return hslToSrgb(h, clamp(s, 0, 1), clamp(l, 0, 1));\n }\n case 'okhsl': {\n const h = readHue(args[0]);\n const s = readComponent(args[1], 100) / 100;\n const l = readComponent(args[2], 100) / 100;\n\n if (anyNaN(h, s, l)) return null;\n\n return okhslToSrgb(h, clamp(s, 0, 1), clamp(l, 0, 1));\n }\n case 'okhst': {\n const h = readHue(args[0]);\n const s = readComponent(args[1], 100) / 100;\n const t = readComponent(args[2], 100) / 100;\n\n if (anyNaN(h, s, t)) return null;\n\n const okhsl = okhstToOkhsl({\n h,\n s: clamp(s, 0, 1),\n t: clamp(t, 0, 1),\n });\n\n return okhslToSrgb(\n normalizeHue(okhsl.h),\n clamp(okhsl.s, 0, 1),\n clamp(okhsl.l, 0, 1),\n );\n }\n case 'oklch': {\n // In `oklch()` a percentage means 1 for lightness and 0.4 for chroma.\n const l = readComponent(args[0], 1);\n const c = readComponent(args[1], 0.4);\n const h = readHue(args[2]);\n\n if (anyNaN(l, c, h)) return null;\n\n const okhsl = oklchToOkhsl({ l, c, h });\n\n return okhslToSrgb(okhsl.h, okhsl.s, okhsl.l);\n }\n default:\n return null;\n }\n}\n"],"mappings":"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"}
|
package/dist/utils/dotize.js
CHANGED
package/dist/utils/dotize.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dotize.js","names":[],"sources":["../../src/utils/dotize.ts"],"sourcesContent":["/**\n * Flattens a nested object into dot paths: `{ a: { b: 1 } }` becomes\n * `{ 'a.b': 1 }`. Numeric keys use bracket notation — `{ a: { 0: 'x' } }`\n * becomes `{ 'a[0]': 'x' }`.\n *\n * `Form` uses it so `setFieldsValue({ user: { name: 'A' } })` also reaches a\n * field registered as `name=\"user.name\"`.\n *\n * Only plain objects are walked into: arrays, class instances and everything\n * else stay as leaf values under their own path.\n *\n * Ported from `@tenphi/tasty`, which exported `dotize` until v3.8 and then\n * dropped it. Only `convert` was ever used here, so the inverse (`backward`)\n * is not carried over.\n */\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== 'object' || value === null) return false;\n\n return Object.getPrototypeOf(value) === Object.prototype;\n}\n\n/** `parseInt` semantics on purpose: an index arrives as a string key. */\nfunction isIndexLike(key: string): boolean {\n return !isNaN(parseInt(key));\n}\n\nfunction dotName(field: string, prefix?: string): string {\n return prefix ? `${prefix}.${field}` : field;\n}\n\nfunction bracketName(field: string, prefix?: string): string {\n return `${prefix ?? ''}[${field}]`;\n}\n\nexport function dotizeConvert(obj: unknown, prefix = ''): any {\n if (!isPlainObject(obj)) {\n return prefix ? { [prefix]: obj } : obj;\n }\n\n const result: Record<string, unknown> = {};\n\n (function recurse(source: Record<string, unknown>, currentPrefix?: string) {\n for (const field in source) {\n const value = source[field];\n\n if (isPlainObject(value)) {\n // Nested objects keep dot notation even under a numeric key, and an\n // empty one has nothing to flatten into, so it stays a leaf.\n const name = dotName(field, currentPrefix);\n\n if (Object.keys(value).length > 0) {\n recurse(value, name);\n } else {\n result[name] = value;\n }\n } else {\n result[\n isIndexLike(field)\n ? bracketName(field, currentPrefix)\n : dotName(field, currentPrefix)\n ] = value;\n }\n }\n })(obj, prefix || undefined);\n\n return result;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAgBA,
|
|
1
|
+
{"version":3,"file":"dotize.js","names":["isPlainObject","value","Record","Object","getPrototypeOf","prototype","isIndexLike","key","isNaN","parseInt","dotName","field","prefix","bracketName","dotizeConvert","obj","result","recurse","source","currentPrefix","name","keys","length","undefined"],"sources":["../../src/utils/dotize.ts"],"sourcesContent":["/**\n * Flattens a nested object into dot paths: `{ a: { b: 1 } }` becomes\n * `{ 'a.b': 1 }`. Numeric keys use bracket notation — `{ a: { 0: 'x' } }`\n * becomes `{ 'a[0]': 'x' }`.\n *\n * `Form` uses it so `setFieldsValue({ user: { name: 'A' } })` also reaches a\n * field registered as `name=\"user.name\"`.\n *\n * Only plain objects are walked into: arrays, class instances and everything\n * else stay as leaf values under their own path.\n *\n * Ported from `@tenphi/tasty`, which exported `dotize` until v3.8 and then\n * dropped it. Only `convert` was ever used here, so the inverse (`backward`)\n * is not carried over.\n */\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== 'object' || value === null) return false;\n\n return Object.getPrototypeOf(value) === Object.prototype;\n}\n\n/** `parseInt` semantics on purpose: an index arrives as a string key. */\nfunction isIndexLike(key: string): boolean {\n return !isNaN(parseInt(key));\n}\n\nfunction dotName(field: string, prefix?: string): string {\n return prefix ? `${prefix}.${field}` : field;\n}\n\nfunction bracketName(field: string, prefix?: string): string {\n return `${prefix ?? ''}[${field}]`;\n}\n\nexport function dotizeConvert(obj: unknown, prefix = ''): any {\n if (!isPlainObject(obj)) {\n return prefix ? { [prefix]: obj } : obj;\n }\n\n const result: Record<string, unknown> = {};\n\n (function recurse(source: Record<string, unknown>, currentPrefix?: string) {\n for (const field in source) {\n const value = source[field];\n\n if (isPlainObject(value)) {\n // Nested objects keep dot notation even under a numeric key, and an\n // empty one has nothing to flatten into, so it stays a leaf.\n const name = dotName(field, currentPrefix);\n\n if (Object.keys(value).length > 0) {\n recurse(value, name);\n } else {\n result[name] = value;\n }\n } else {\n result[\n isIndexLike(field)\n ? bracketName(field, currentPrefix)\n : dotName(field, currentPrefix)\n ] = value;\n }\n }\n })(obj, prefix || undefined);\n\n return result;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAgBA,SAASA,cAAcC,OAAkD;AACvE,KAAI,OAAOA,UAAU,YAAYA,UAAU,KAAM,QAAO;AAExD,QAAOE,OAAOC,eAAeH,MAAM,KAAKE,OAAOE;;;AAIjD,SAASC,YAAYC,KAAsB;AACzC,QAAO,CAACC,MAAMC,SAASF,IAAI,CAAC;;AAG9B,SAASG,QAAQC,OAAeC,QAAyB;AACvD,QAAOA,SAAS,GAAGA,OAAM,GAAID,UAAUA;;AAGzC,SAASE,YAAYF,OAAeC,QAAyB;AAC3D,QAAO,GAAGA,UAAU,GAAE,GAAID,MAAK;;AAGjC,SAAgBG,cAAcC,KAAcH,SAAS,IAAS;AAC5D,KAAI,CAACZ,cAAce,IAAI,CACrB,QAAOH,SAAS,GAAGA,SAASG,KAAK,GAAGA;CAGtC,MAAMC,SAAkC,EAAE;AAE1C,EAAC,SAASC,QAAQC,QAAiCC,eAAwB;AACzE,OAAK,MAAMR,SAASO,QAAQ;GAC1B,MAAMjB,QAAQiB,OAAOP;AAErB,OAAIX,cAAcC,MAAM,EAAE;IAGxB,MAAMmB,OAAOV,QAAQC,OAAOQ,cAAc;AAE1C,QAAIhB,OAAOkB,KAAKpB,MAAM,CAACqB,SAAS,EAC9BL,SAAQhB,OAAOmB,KAAK;QAEpBJ,QAAOI,QAAQnB;SAGjBe,QACEV,YAAYK,MAAM,GACdE,YAAYF,OAAOQ,cAAc,GACjCT,QAAQC,OAAOQ,cAAc,IAC/BlB;;IAGPc,KAAKH,UAAUW,OAAU;AAE5B,QAAOP"}
|
package/dist/utils/is-dev-env.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-dev-env.js","names":[],"sources":["../../src/utils/is-dev-env.ts"],"sourcesContent":["/**\n * `NODE_ENV` as the environment that is actually running reports it, or\n * `undefined` when nothing can say.\n *\n * The one place in ui-kit allowed to read `NODE_ENV`, because it is the one\n * place that has to survive the build unfolded. A comparison compiled into\n * `dist` freezes whatever `NODE_ENV` the release machine exported and hands\n * every consumer the same answer, so `tsdown.config.ts` defines the expression\n * as itself to stop rolldown inlining it - see the comment there.\n */\nfunction readNodeEnv(): string | undefined {\n try {\n // Deliberately unguarded by `typeof process`: a guard would also gate the\n // *substituted* value, and browser bundlers replace this read without\n // defining `process` itself - so `typeof process === 'undefined'` is true\n // in a Vite dev build that just told us NODE_ENV is \"development\". The\n // catch covers the case the guard was there for: no substitution and no\n // `process` to dereference, e.g. an unbundled `<script type=\"module\">`.\n return process.env.NODE_ENV;\n } catch {\n return undefined;\n }\n}\n\n/**\n * `localStorage.UIKIT_DEBUG` as a tri-state: an explicit `\"true\"` forces ui-kit's\n * diagnostics on and an explicit `\"false\"` forces them off, in any environment.\n *\n * The escape hatch in both directions. Consumers whose production build somehow\n * resolves to development can silence us without waiting for a release, and\n * anyone debugging a built app can switch us back on.\n */\nfunction readDebugFlag(): boolean | undefined {\n if (typeof window === 'undefined' || !window.localStorage) return undefined;\n\n try {\n const flag = window.localStorage.getItem('UIKIT_DEBUG')?.toLowerCase();\n\n if (flag === 'true') return true;\n if (flag === 'false') return false;\n } catch {\n // localStorage might not be available (private browsing, etc.)\n }\n\n return undefined;\n}\n\n/**\n * Whether to run diagnostics that only a human looking at the page can act on -\n * a warning drawn into the layout, a complaint about a measurement.\n *\n * Off under `test`: jsdom reports `offsetHeight: 0` for everything, so anything\n * keyed off a measurement is not just noisy in a consumer's test run but wrong.\n * Off under `production`, and off when nobody could say what `NODE_ENV` is -\n * a diagnostic shown to end users is worse than a missing one shown to a\n * developer, who still has `UIKIT_DEBUG`.\n *\n * Use {@link isDevEnvOrTest} instead for diagnostics a test run should surface.\n */\nexport function isDevEnv(): boolean {\n const flag = readDebugFlag();\n\n if (flag !== undefined) return flag;\n\n const nodeEnv = readNodeEnv();\n\n if (nodeEnv === undefined) return false;\n\n return nodeEnv !== 'test' && nodeEnv !== 'production';\n}\n\n/**\n * Like {@link isDevEnv}, but on under `test` as well.\n *\n * For diagnostics a consumer's test run should still surface - deprecation\n * warnings above all. \"You are passing a prop we are about to remove\" is worth\n * hearing from CI, and unlike a collapsed-height complaint it cannot be wrong\n * just because jsdom has no layout.\n */\nexport function isDevEnvOrTest(): boolean {\n const flag = readDebugFlag();\n\n if (flag !== undefined) return flag;\n\n const nodeEnv = readNodeEnv();\n\n if (nodeEnv === undefined) return false;\n\n return nodeEnv !== 'production';\n}\n"],"mappings":";;;;;;;;;;;;AAUA,
|
|
1
|
+
{"version":3,"file":"is-dev-env.js","names":["readNodeEnv","process","env","NODE_ENV","undefined","readDebugFlag","window","localStorage","flag","getItem","toLowerCase","isDevEnv","nodeEnv","isDevEnvOrTest"],"sources":["../../src/utils/is-dev-env.ts"],"sourcesContent":["/**\n * `NODE_ENV` as the environment that is actually running reports it, or\n * `undefined` when nothing can say.\n *\n * The one place in ui-kit allowed to read `NODE_ENV`, because it is the one\n * place that has to survive the build unfolded. A comparison compiled into\n * `dist` freezes whatever `NODE_ENV` the release machine exported and hands\n * every consumer the same answer, so `tsdown.config.ts` defines the expression\n * as itself to stop rolldown inlining it - see the comment there.\n */\nfunction readNodeEnv(): string | undefined {\n try {\n // Deliberately unguarded by `typeof process`: a guard would also gate the\n // *substituted* value, and browser bundlers replace this read without\n // defining `process` itself - so `typeof process === 'undefined'` is true\n // in a Vite dev build that just told us NODE_ENV is \"development\". The\n // catch covers the case the guard was there for: no substitution and no\n // `process` to dereference, e.g. an unbundled `<script type=\"module\">`.\n return process.env.NODE_ENV;\n } catch {\n return undefined;\n }\n}\n\n/**\n * `localStorage.UIKIT_DEBUG` as a tri-state: an explicit `\"true\"` forces ui-kit's\n * diagnostics on and an explicit `\"false\"` forces them off, in any environment.\n *\n * The escape hatch in both directions. Consumers whose production build somehow\n * resolves to development can silence us without waiting for a release, and\n * anyone debugging a built app can switch us back on.\n */\nfunction readDebugFlag(): boolean | undefined {\n if (typeof window === 'undefined' || !window.localStorage) return undefined;\n\n try {\n const flag = window.localStorage.getItem('UIKIT_DEBUG')?.toLowerCase();\n\n if (flag === 'true') return true;\n if (flag === 'false') return false;\n } catch {\n // localStorage might not be available (private browsing, etc.)\n }\n\n return undefined;\n}\n\n/**\n * Whether to run diagnostics that only a human looking at the page can act on -\n * a warning drawn into the layout, a complaint about a measurement.\n *\n * Off under `test`: jsdom reports `offsetHeight: 0` for everything, so anything\n * keyed off a measurement is not just noisy in a consumer's test run but wrong.\n * Off under `production`, and off when nobody could say what `NODE_ENV` is -\n * a diagnostic shown to end users is worse than a missing one shown to a\n * developer, who still has `UIKIT_DEBUG`.\n *\n * Use {@link isDevEnvOrTest} instead for diagnostics a test run should surface.\n */\nexport function isDevEnv(): boolean {\n const flag = readDebugFlag();\n\n if (flag !== undefined) return flag;\n\n const nodeEnv = readNodeEnv();\n\n if (nodeEnv === undefined) return false;\n\n return nodeEnv !== 'test' && nodeEnv !== 'production';\n}\n\n/**\n * Like {@link isDevEnv}, but on under `test` as well.\n *\n * For diagnostics a consumer's test run should still surface - deprecation\n * warnings above all. \"You are passing a prop we are about to remove\" is worth\n * hearing from CI, and unlike a collapsed-height complaint it cannot be wrong\n * just because jsdom has no layout.\n */\nexport function isDevEnvOrTest(): boolean {\n const flag = readDebugFlag();\n\n if (flag !== undefined) return flag;\n\n const nodeEnv = readNodeEnv();\n\n if (nodeEnv === undefined) return false;\n\n return nodeEnv !== 'production';\n}\n"],"mappings":";;;;;;;;;;;;AAUA,SAASA,cAAkC;AACzC,KAAI;AAOF;SACM;AACN;;;;;;;;;;;AAYJ,SAASK,gBAAqC;AAC5C,KAAI,OAAOC,WAAW,eAAe,CAACA,OAAOC,aAAc,QAAOH;AAElE,KAAI;EACF,MAAMI,OAAOF,OAAOC,aAAaE,QAAQ,cAAc,EAAEC,aAAa;AAEtE,MAAIF,SAAS,OAAQ,QAAO;AAC5B,MAAIA,SAAS,QAAS,QAAO;SACvB;;;;;;;;;;;;;;AAmBV,SAAgBG,WAAoB;CAClC,MAAMH,OAAOH,eAAe;AAE5B,KAAIG,SAASJ,OAAW,QAAOI;CAE/B,MAAMI,UAAUZ,aAAa;AAE7B,KAAIY,YAAYR,OAAW,QAAO;AAElC,QAAOQ,YAAY,UAAUA,YAAY;;;;;;;;;;AAW3C,SAAgBC,iBAA0B;CACxC,MAAML,OAAOH,eAAe;AAE5B,KAAIG,SAASJ,OAAW,QAAOI;CAE/B,MAAMI,UAAUZ,aAAa;AAE7B,KAAIY,YAAYR,OAAW,QAAO;AAElC,QAAOQ,YAAY"}
|
package/dist/utils/modules.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modules.js","names":[],"sources":["../../src/utils/modules.ts"],"sourcesContent":["export function extractModule(promise) {\n return promise.then((module) => module.default || module);\n}\n"],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"modules.js","names":["extractModule","promise","then","module","default"],"sources":["../../src/utils/modules.ts"],"sourcesContent":["export function extractModule(promise) {\n return promise.then((module) => module.default || module);\n}\n"],"mappings":";;AAAA,SAAgBA,cAAcC,SAAS;AACrC,QAAOA,QAAQC,MAAMC,WAAWA,OAAOC,WAAWD,OAAO"}
|
package/dist/utils/promise.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promise.js","names":[],"sources":["../../src/utils/promise.ts"],"sourcesContent":["export function timeout(ms = 30) {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n"],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"promise.js","names":["timeout","ms","Promise","resolve","setTimeout"],"sources":["../../src/utils/promise.ts"],"sourcesContent":["export function timeout(ms = 30) {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n"],"mappings":";;AAAA,SAAgBA,QAAQC,KAAK,IAAI;AAC/B,QAAO,IAAIC,SAASC,YAAY;AAC9BC,aAAWD,SAASF,GAAG;GACvB"}
|
package/dist/utils/raf.js
CHANGED
package/dist/utils/raf.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raf.js","names":[],"sources":["../../src/utils/raf.ts"],"sourcesContent":["/**\n * Chains N requestAnimationFrame calls and returns a cancel function.\n * Useful for ensuring layout is complete before performing operations.\n *\n * @param callback - The function to call after N frames\n * @param count - Number of RAF cycles to wait (default: 1)\n * @returns A function to cancel the pending RAF call\n *\n * @example\n * const cancel = chainRaf(() => {\n * updatePosition();\n * }, 3);\n *\n * // Later, if needed:\n * cancel();\n */\nexport function chainRaf(callback: () => void, count: number = 1): () => void {\n let rafId: number | null = null;\n let cancelled = false;\n\n const scheduleNext = (remaining: number) => {\n if (cancelled) return;\n\n if (remaining <= 0) {\n callback();\n return;\n }\n\n rafId = requestAnimationFrame(() => {\n scheduleNext(remaining - 1);\n });\n };\n\n scheduleNext(count);\n\n return () => {\n cancelled = true;\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n }\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAgBA,
|
|
1
|
+
{"version":3,"file":"raf.js","names":["chainRaf","callback","count","rafId","cancelled","scheduleNext","remaining","requestAnimationFrame","cancelAnimationFrame"],"sources":["../../src/utils/raf.ts"],"sourcesContent":["/**\n * Chains N requestAnimationFrame calls and returns a cancel function.\n * Useful for ensuring layout is complete before performing operations.\n *\n * @param callback - The function to call after N frames\n * @param count - Number of RAF cycles to wait (default: 1)\n * @returns A function to cancel the pending RAF call\n *\n * @example\n * const cancel = chainRaf(() => {\n * updatePosition();\n * }, 3);\n *\n * // Later, if needed:\n * cancel();\n */\nexport function chainRaf(callback: () => void, count: number = 1): () => void {\n let rafId: number | null = null;\n let cancelled = false;\n\n const scheduleNext = (remaining: number) => {\n if (cancelled) return;\n\n if (remaining <= 0) {\n callback();\n return;\n }\n\n rafId = requestAnimationFrame(() => {\n scheduleNext(remaining - 1);\n });\n };\n\n scheduleNext(count);\n\n return () => {\n cancelled = true;\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n }\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAgBA,SAAgBA,SAASC,UAAsBC,QAAgB,GAAe;CAC5E,IAAIC,QAAuB;CAC3B,IAAIC,YAAY;CAEhB,MAAMC,gBAAgBC,cAAsB;AAC1C,MAAIF,UAAW;AAEf,MAAIE,aAAa,GAAG;AAClBL,aAAU;AACV;;AAGFE,UAAQI,4BAA4B;AAClCF,gBAAaC,YAAY,EAAE;IAC3B;;AAGJD,cAAaH,MAAM;AAEnB,cAAa;AACXE,cAAY;AACZ,MAAID,UAAU,KACZK,sBAAqBL,MAAM"}
|
package/dist/utils/random.js
CHANGED
package/dist/utils/random.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"random.js","names":[],"sources":["../../src/utils/random.ts"],"sourcesContent":["export function random(min: number, max: number) {\n const realMin = min < max ? min : max;\n const realMax = min < max ? max : min;\n\n return realMin + Math.random() * (realMax - realMin);\n}\n\n/**\n * Generates a unique random ID using current timestamp and random number\n */\nexport function generateRandomId(): string {\n return `${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;\n}\n"],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"random.js","names":["random","min","max","realMin","realMax","Math","generateRandomId","Date","now","toString","substring"],"sources":["../../src/utils/random.ts"],"sourcesContent":["export function random(min: number, max: number) {\n const realMin = min < max ? min : max;\n const realMax = min < max ? max : min;\n\n return realMin + Math.random() * (realMax - realMin);\n}\n\n/**\n * Generates a unique random ID using current timestamp and random number\n */\nexport function generateRandomId(): string {\n return `${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;\n}\n"],"mappings":";;AAAA,SAAgBA,OAAOC,KAAaC,KAAa;CAC/C,MAAMC,UAAUF,MAAMC,MAAMD,MAAMC;CAClC,MAAME,UAAUH,MAAMC,MAAMA,MAAMD;AAElC,QAAOE,UAAUE,KAAKL,QAAQ,IAAII,UAAUD;;;;;AAM9C,SAAgBG,mBAA2B;AACzC,QAAO,GAAGC,KAAKC,KAAK,CAAA,GAAIH,KAAKL,QAAQ,CAACS,SAAS,GAAG,CAACC,UAAU,GAAG,GAAG"}
|
package/dist/utils/range.js
CHANGED
package/dist/utils/range.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"range.js","names":[],"sources":["../../src/utils/range.ts"],"sourcesContent":["export function range<Length extends number>(count: Length): Array<number> {\n return Array.from({ length: count }, (_, i) => i);\n}\n"],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"range.js","names":["range","count","Length","Array","from","length","_","i"],"sources":["../../src/utils/range.ts"],"sourcesContent":["export function range<Length extends number>(count: Length): Array<number> {\n return Array.from({ length: count }, (_, i) => i);\n}\n"],"mappings":";;AAAA,SAAgBA,MAA6BC,OAA8B;AACzE,QAAOE,MAAMC,KAAK,EAAEC,QAAQJ,OAAO,GAAGK,GAAGC,MAAMA,EAAE"}
|