@cube-dev/ui-kit 0.99.3 → 0.101.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/CHANGELOG.md +155 -0
- package/es/_internal/hooks/index.js +1 -1
- package/es/_internal/hooks/use-chained-callback.js +1 -1
- package/es/_internal/hooks/use-debounced-value.js +1 -1
- package/es/_internal/hooks/use-deprecation-warning.js +1 -1
- package/es/_internal/hooks/use-effect-once.js +1 -1
- package/es/_internal/hooks/use-event.js +1 -1
- package/es/_internal/hooks/use-is-first-render.js +1 -1
- package/es/_internal/hooks/use-sync-ref.js +1 -1
- package/es/_internal/hooks/use-timer/index.js +1 -1
- package/es/_internal/hooks/use-timer/timer.js +1 -1
- package/es/_internal/hooks/use-timer/use-timer.js +1 -1
- package/es/_internal/hooks/use-update-effect.js +1 -1
- package/es/_internal/hooks/use-warn.js +1 -1
- package/es/_internal/index.js +1 -1
- package/es/components/Block.js +1 -1
- package/es/components/CollectionItem.js +1 -1
- package/es/components/GlobalStyles.js +1 -1
- package/es/components/GridProvider.js +1 -1
- package/es/components/HiddenInput.js +1 -1
- package/es/components/OpenTrasition.js +1 -1
- package/es/components/Root.js +1 -1
- package/es/components/actions/Action/Action.js +1 -1
- package/es/components/actions/Button/Button.js +1 -1
- package/es/components/actions/Button/index.js +1 -1
- package/es/components/actions/ButtonGroup/ButtonGroup.js +1 -1
- package/es/components/actions/CommandMenu/CommandMenu.js +1 -1
- package/es/components/actions/CommandMenu/index.js +1 -1
- package/es/components/actions/CommandMenu/styled.js +1 -1
- package/es/components/actions/ItemAction/ItemAction.js +6 -3
- package/es/components/actions/ItemAction/index.js +1 -1
- package/es/components/actions/ItemActionContext.js +3 -2
- package/es/components/actions/ItemButton/ItemButton.js +14 -5
- package/es/components/actions/ItemButton/index.js +1 -1
- package/es/components/actions/Link/Link.js +1 -1
- package/es/components/actions/Menu/Menu.js +1 -1
- package/es/components/actions/Menu/MenuItem.js +1 -1
- package/es/components/actions/Menu/MenuSection.js +1 -1
- package/es/components/actions/Menu/MenuTrigger.js +1 -1
- package/es/components/actions/Menu/SubMenuTrigger.js +1 -1
- package/es/components/actions/Menu/SubmenuTriggerContext.js +1 -1
- package/es/components/actions/Menu/context.js +1 -1
- package/es/components/actions/Menu/index.js +1 -1
- package/es/components/actions/Menu/styled.js +1 -1
- package/es/components/actions/index.js +1 -1
- package/es/components/actions/use-action.js +1 -1
- package/es/components/actions/use-anchored-menu.js +1 -1
- package/es/components/actions/use-context-menu.js +1 -1
- package/es/components/content/ActiveZone/ActiveZone.js +1 -1
- package/es/components/content/Alert/Alert.js +1 -1
- package/es/components/content/Alert/index.js +1 -1
- package/es/components/content/Alert/types.js +1 -1
- package/es/components/content/Alert/use-alert.js +1 -1
- package/es/components/content/Avatar/Avatar.js +1 -1
- package/es/components/content/Badge/Badge.js +1 -1
- package/es/components/content/Card/Card.js +1 -1
- package/es/components/content/Content.js +1 -1
- package/es/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
- package/es/components/content/CopyPasteBlock/index.js +1 -1
- package/es/components/content/CopySnippet/CopySnippet.js +1 -1
- package/es/components/content/CopySnippet/index.js +1 -1
- package/es/components/content/Disclosure/Disclosure.js +1 -1
- package/es/components/content/Disclosure/index.js +1 -1
- package/es/components/content/Divider.js +1 -1
- package/es/components/content/Footer.js +1 -1
- package/es/components/content/Header.js +1 -1
- package/es/components/content/HotKeys/HotKeys.js +1 -1
- package/es/components/content/HotKeys/index.js +1 -1
- package/es/components/content/Item/Item.js +12 -8
- package/es/components/content/Item/index.js +1 -1
- package/es/components/content/ItemBadge/ItemBadge.js +1 -1
- package/es/components/content/ItemBadge/index.js +1 -1
- package/es/components/content/Layout/GridLayout.js +1 -1
- package/es/components/content/Layout/Layout.js +1 -1
- package/es/components/content/Layout/LayoutBlock.js +1 -1
- package/es/components/content/Layout/LayoutCenter.js +1 -1
- package/es/components/content/Layout/LayoutContainer.js +1 -1
- package/es/components/content/Layout/LayoutContent.js +1 -1
- package/es/components/content/Layout/LayoutContext.js +1 -1
- package/es/components/content/Layout/LayoutFlex.js +1 -1
- package/es/components/content/Layout/LayoutFooter.js +1 -1
- package/es/components/content/Layout/LayoutGrid.js +1 -1
- package/es/components/content/Layout/LayoutHeader.js +1 -1
- package/es/components/content/Layout/LayoutPane.js +1 -1
- package/es/components/content/Layout/LayoutPanel.js +1 -1
- package/es/components/content/Layout/LayoutPanelHeader.js +1 -1
- package/es/components/content/Layout/LayoutToolbar.js +1 -1
- package/es/components/content/Layout/hooks/useTinyScrollbar.js +13 -1
- package/es/components/content/Layout/index.js +1 -1
- package/es/components/content/Layout/utils.js +1 -1
- package/es/components/content/List/SectionHeading.js +1 -1
- package/es/components/content/List/index.js +1 -1
- package/es/components/content/Paragraph.js +1 -1
- package/es/components/content/Placeholder/Placeholder.js +1 -1
- package/es/components/content/PrismCode/PrismCode.js +1 -1
- package/es/components/content/PrismCode/prismSetup.js +1 -1
- package/es/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
- package/es/components/content/Result/Result.js +1 -1
- package/es/components/content/Skeleton/Skeleton.js +1 -1
- package/es/components/content/Tag/Tag.js +1 -1
- package/es/components/content/Text.js +1 -1
- package/es/components/content/TextItem/TextItem.js +1 -1
- package/es/components/content/TextItem/index.js +1 -1
- package/es/components/content/Title.js +1 -1
- package/es/components/content/highlightText.js +1 -1
- package/es/components/content/use-auto-tooltip.js +1 -1
- package/es/components/fields/Checkbox/Checkbox.js +1 -1
- package/es/components/fields/Checkbox/CheckboxGroup.js +1 -1
- package/es/components/fields/Checkbox/context.js +1 -1
- package/es/components/fields/Checkbox/index.js +1 -1
- package/es/components/fields/ComboBox/ComboBox.js +1 -1
- package/es/components/fields/ComboBox/index.js +1 -1
- package/es/components/fields/DatePicker/DateInput.js +1 -1
- package/es/components/fields/DatePicker/DateInputBase.js +1 -1
- package/es/components/fields/DatePicker/DatePicker.js +1 -1
- package/es/components/fields/DatePicker/DatePickerButton.js +1 -1
- package/es/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/es/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/es/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/es/components/fields/DatePicker/DateRangePicker.js +1 -1
- package/es/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
- package/es/components/fields/DatePicker/TimeInput.js +1 -1
- package/es/components/fields/DatePicker/index.js +1 -1
- package/es/components/fields/DatePicker/intl.js +1 -1
- package/es/components/fields/DatePicker/parseDate.js +1 -1
- package/es/components/fields/DatePicker/props.js +1 -1
- package/es/components/fields/DatePicker/types.js +1 -1
- package/es/components/fields/DatePicker/utils.js +1 -1
- package/es/components/fields/FileInput/FileInput.js +1 -1
- package/es/components/fields/FilterListBox/FilterListBox.js +49 -2
- package/es/components/fields/FilterListBox/index.js +1 -1
- package/es/components/fields/FilterPicker/FilterPicker.js +1 -1
- package/es/components/fields/FilterPicker/index.js +1 -1
- package/es/components/fields/Input/Input.js +1 -1
- package/es/components/fields/Input/index.js +1 -1
- package/es/components/fields/ListBox/ListBox.js +11 -4
- package/es/components/fields/ListBox/index.js +1 -1
- package/es/components/fields/NumberInput/NumberInput.js +1 -1
- package/es/components/fields/NumberInput/StepButton.js +1 -1
- package/es/components/fields/PasswordInput/PasswordInput.js +1 -1
- package/es/components/fields/Picker/Picker.js +1 -1
- package/es/components/fields/Picker/index.js +1 -1
- package/es/components/fields/RadioGroup/Radio.js +1 -1
- package/es/components/fields/RadioGroup/RadioGroup.js +1 -1
- package/es/components/fields/RadioGroup/context.js +1 -1
- package/es/components/fields/RadioGroup/index.js +1 -1
- package/es/components/fields/SearchInput/SearchInput.js +1 -1
- package/es/components/fields/SearchInput/index.js +1 -1
- package/es/components/fields/Select/Select.js +1 -1
- package/es/components/fields/Select/index.js +1 -1
- package/es/components/fields/Slider/Gradation.js +1 -1
- package/es/components/fields/Slider/Header.js +1 -1
- package/es/components/fields/Slider/RangeSlider.js +1 -1
- package/es/components/fields/Slider/Slider.js +1 -1
- package/es/components/fields/Slider/SliderBase.js +1 -1
- package/es/components/fields/Slider/SliderInput.js +1 -1
- package/es/components/fields/Slider/SliderThumb.js +1 -1
- package/es/components/fields/Slider/SliderTrack.js +1 -1
- package/es/components/fields/Slider/elements.js +1 -1
- package/es/components/fields/Slider/index.js +1 -1
- package/es/components/fields/Slider/types.js +1 -1
- package/es/components/fields/Switch/Switch.js +1 -1
- package/es/components/fields/Switch/index.js +1 -1
- package/es/components/fields/TextArea/TextArea.js +1 -1
- package/es/components/fields/TextArea/index.js +1 -1
- package/es/components/fields/TextInput/TextInput.js +1 -1
- package/es/components/fields/TextInput/TextInputBase.js +1 -1
- package/es/components/fields/TextInput/index.js +1 -1
- package/es/components/fields/TextInputMapper/TextInputMapper.js +1 -1
- package/es/components/fields/TextInputMapper/index.js +1 -1
- package/es/components/fields/index.js +1 -1
- package/es/components/form/FieldWrapper/FieldWrapper.js +1 -1
- package/es/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
- package/es/components/form/FieldWrapper/index.js +1 -1
- package/es/components/form/FieldWrapper/types.js +1 -1
- package/es/components/form/Form/Field.js +1 -1
- package/es/components/form/Form/Form.js +1 -1
- package/es/components/form/Form/ResetButton/ResetButton.js +1 -1
- package/es/components/form/Form/ResetButton/index.js +1 -1
- package/es/components/form/Form/SubmitButton/SubmitButton.js +1 -1
- package/es/components/form/Form/SubmitButton/index.js +1 -1
- package/es/components/form/Form/SubmitError.js +1 -1
- package/es/components/form/Form/index.js +1 -1
- package/es/components/form/Form/types.js +1 -1
- package/es/components/form/Form/use-field/index.js +1 -1
- package/es/components/form/Form/use-field/types.js +1 -1
- package/es/components/form/Form/use-field/use-field-props.js +1 -1
- package/es/components/form/Form/use-field/use-field.js +1 -1
- package/es/components/form/Form/use-form.js +1 -1
- package/es/components/form/Form/validation.js +1 -1
- package/es/components/form/Label.js +1 -1
- package/es/components/form/index.js +1 -1
- package/es/components/form/wrapper.js +1 -1
- package/es/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
- package/es/components/helpers/DisplayTransition/index.js +1 -1
- package/es/components/helpers/IconSwitch/IconSwitch.js +1 -1
- package/es/components/helpers/index.js +1 -1
- package/es/components/layout/Flex.js +1 -1
- package/es/components/layout/Flow.js +1 -1
- package/es/components/layout/Grid.js +1 -1
- package/es/components/layout/Panel.js +1 -1
- package/es/components/layout/Prefix.js +1 -1
- package/es/components/layout/ResizablePanel.js +1 -1
- package/es/components/layout/Space.js +1 -1
- package/es/components/layout/Suffix.js +1 -1
- package/es/components/navigation/Tabs/Tabs.js +920 -0
- package/es/components/navigation/Tabs/index.js +10 -0
- package/es/components/navigation/index.js +10 -0
- package/es/components/organisms/FileTabs/FileTabs.js +1 -1
- package/es/components/organisms/StatsCard/StatsCard.js +1 -1
- package/es/components/other/Calendar/Calendar.js +1 -1
- package/es/components/other/Calendar/CalendarCell.js +1 -1
- package/es/components/other/Calendar/CalendarGrid.js +1 -1
- package/es/components/other/Calendar/RangeCalendar.js +1 -1
- package/es/components/other/CloudLogo/CloudLogo.js +1 -1
- package/es/components/overlays/AlertDialog/AlertDialog.js +1 -1
- package/es/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
- package/es/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
- package/es/components/overlays/AlertDialog/index.js +1 -1
- package/es/components/overlays/AlertDialog/types.js +1 -1
- package/es/components/overlays/Dialog/Dialog.js +1 -1
- package/es/components/overlays/Dialog/DialogContainer.js +1 -1
- package/es/components/overlays/Dialog/DialogForm.js +1 -1
- package/es/components/overlays/Dialog/DialogTrigger.js +1 -1
- package/es/components/overlays/Dialog/context.js +1 -1
- package/es/components/overlays/Dialog/index.js +1 -1
- package/es/components/overlays/Dialog/use-dialog-container.js +1 -1
- package/es/components/overlays/Modal/Modal.js +1 -1
- package/es/components/overlays/Modal/OpenTransition.js +1 -1
- package/es/components/overlays/Modal/Overlay.js +1 -1
- package/es/components/overlays/Modal/Popover.js +1 -1
- package/es/components/overlays/Modal/Tray.js +1 -1
- package/es/components/overlays/Modal/Underlay.js +1 -1
- package/es/components/overlays/Modal/index.js +1 -1
- package/es/components/overlays/Modal/types.js +1 -1
- package/es/components/overlays/NewNotifications/Bar/FloatingNotification.js +1 -1
- package/es/components/overlays/NewNotifications/Bar/NotificationsBar.js +1 -1
- package/es/components/overlays/NewNotifications/Bar/TransitionComponent.js +1 -1
- package/es/components/overlays/NewNotifications/Bar/index.js +1 -1
- package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogContext.js +1 -1
- package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.js +1 -1
- package/es/components/overlays/NewNotifications/Dialog/index.js +1 -1
- package/es/components/overlays/NewNotifications/Notification.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationAction.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationDescription.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationFooter.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationHeader.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationIcon.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationProvider.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationView.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/index.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/types.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsContext/index.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsContext/use-notifications.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsList/NotificationsList.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsList/index.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsList/types.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/index.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/types.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/use-notification-list-item.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/use-notifications-api.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/use-notifications-list.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/use-notifications-observer.js +1 -1
- package/es/components/overlays/NewNotifications/index.js +1 -1
- package/es/components/overlays/NewNotifications/types.js +1 -1
- package/es/components/overlays/Notification/Notification.js +1 -1
- package/es/components/overlays/OverlayWrapper.js +1 -1
- package/es/components/overlays/Toasts/Toast.js +1 -1
- package/es/components/overlays/Toasts/index.js +1 -1
- package/es/components/overlays/Toasts/types.js +1 -1
- package/es/components/overlays/Toasts/use-toasts-api.js +1 -1
- package/es/components/overlays/Tooltip/Tooltip.js +1 -1
- package/es/components/overlays/Tooltip/TooltipProvider.js +1 -1
- package/es/components/overlays/Tooltip/TooltipTrigger.js +1 -1
- package/es/components/overlays/Tooltip/context.js +1 -1
- package/es/components/overlays/Tooltip/index.js +1 -1
- package/es/components/portal/Portal.js +1 -1
- package/es/components/portal/PortalProvider.js +1 -1
- package/es/components/portal/index.js +1 -1
- package/es/components/portal/types.js +1 -1
- package/es/components/portal/usePortal.js +1 -1
- package/es/components/shared/InvalidIcon.js +1 -1
- package/es/components/shared/ValidIcon.js +1 -1
- package/es/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
- package/es/components/status/LoadingAnimation/index.js +1 -1
- package/es/components/status/Spin/Cube.js +1 -1
- package/es/components/status/Spin/InternalSpinner.js +1 -1
- package/es/components/status/Spin/Spin.js +1 -1
- package/es/components/status/Spin/SpinsContainer.js +1 -1
- package/es/components/status/Spin/index.js +1 -1
- package/es/components/status/Spin/types.js +1 -1
- package/es/components/status/index.js +1 -1
- package/es/data/item-themes.js +10 -19
- package/es/data/themes.js +1 -1
- package/es/icons/AdjustmentsHorizontalIcon.js +1 -1
- package/es/icons/AdjustmentsIcon.js +1 -1
- package/es/icons/AiIcon.js +1 -1
- package/es/icons/AreaChartIcon.js +1 -1
- package/es/icons/BackwardIcon.js +1 -1
- package/es/icons/BarChartIcon.js +1 -1
- package/es/icons/BellFilledIcon.js +1 -1
- package/es/icons/BellIcon.js +1 -1
- package/es/icons/BooleanIcon.js +1 -1
- package/es/icons/CalendarEditIcon.js +1 -1
- package/es/icons/CalendarIcon.js +1 -1
- package/es/icons/CaretDownIcon.js +1 -1
- package/es/icons/CaretUpIcon.js +1 -1
- package/es/icons/ChartAreaStackedIcon.js +1 -1
- package/es/icons/ChartAreaStackedPercentageIcon.js +1 -1
- package/es/icons/ChartBarGroupedHorizontalIcon.js +1 -1
- package/es/icons/ChartBarGroupedIcon.js +1 -1
- package/es/icons/ChartBarHorizontalIcon.js +1 -1
- package/es/icons/ChartBarLineIcon.js +1 -1
- package/es/icons/ChartBarStackedHorizontalIcon.js +1 -1
- package/es/icons/ChartBarStackedIcon.js +1 -1
- package/es/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
- package/es/icons/ChartBarStackedPercentageIcon.js +1 -1
- package/es/icons/ChartBoxPlot2Icon.js +1 -1
- package/es/icons/ChartBoxPlotIcon.js +1 -1
- package/es/icons/ChartBubbleIcon.js +1 -1
- package/es/icons/ChartDonut2Icon.js +1 -1
- package/es/icons/ChartFunnelIcon.js +1 -1
- package/es/icons/ChartHeatmapIcon.js +1 -1
- package/es/icons/ChartKPIIcon.js +1 -1
- package/es/icons/ChartPie2Icon.js +1 -1
- package/es/icons/ChartScatterIcon.js +1 -1
- package/es/icons/CheckCircleFilledIcon.js +1 -1
- package/es/icons/CheckCircleIcon.js +1 -1
- package/es/icons/CheckIcon.js +1 -1
- package/es/icons/CircleFilledIcon.js +1 -1
- package/es/icons/ClearIcon.js +1 -1
- package/es/icons/CloseCircleFilledIcon.js +1 -1
- package/es/icons/CloseCircleIcon.js +1 -1
- package/es/icons/CloseIcon.js +1 -1
- package/es/icons/CodeIcon.js +1 -1
- package/es/icons/ColumnTotalIcon.js +1 -1
- package/es/icons/CopyIcon.js +1 -1
- package/es/icons/CountIcon.js +1 -1
- package/es/icons/CubeIcon.js +1 -1
- package/es/icons/CubePauseIcon.js +1 -1
- package/es/icons/CubePlayIcon.js +1 -1
- package/es/icons/CurrencyDollarIcon.js +1 -1
- package/es/icons/DangerIcon.js +1 -1
- package/es/icons/DashboardIcon.js +1 -1
- package/es/icons/DatabaseIcon.js +1 -1
- package/es/icons/DecimalDecreaseIcon.js +1 -1
- package/es/icons/DecimalIncreaseIcon.js +1 -1
- package/es/icons/DirectionIcon.js +1 -1
- package/es/icons/DonutIcon.js +1 -1
- package/es/icons/DownIcon.js +1 -1
- package/es/icons/EditIcon.js +1 -1
- package/es/icons/ExclamationCircleFilledIcon.js +1 -1
- package/es/icons/ExclamationCircleIcon.js +1 -1
- package/es/icons/ExclamationIcon.js +1 -1
- package/es/icons/EyeIcon.js +1 -1
- package/es/icons/EyeInvisibleIcon.js +1 -1
- package/es/icons/FilterIcon.js +1 -1
- package/es/icons/FolderFilledIcon.js +1 -1
- package/es/icons/FolderIcon.js +1 -1
- package/es/icons/FolderOpenFilledIcon.js +1 -1
- package/es/icons/FolderOpenIcon.js +1 -1
- package/es/icons/ForwardIcon.js +1 -1
- package/es/icons/HierarchyIcon.js +1 -1
- package/es/icons/HierarchyOpenIcon.js +1 -1
- package/es/icons/Icon.js +1 -1
- package/es/icons/InfoCircleIcon.js +1 -1
- package/es/icons/InfoIcon.js +1 -1
- package/es/icons/KeyIcon.js +1 -1
- package/es/icons/LeftIcon.js +1 -1
- package/es/icons/LineChartIcon.js +1 -1
- package/es/icons/LoadingIcon.js +1 -1
- package/es/icons/LockFilledIcon.js +1 -1
- package/es/icons/LockIcon.js +1 -1
- package/es/icons/MoreIcon.js +1 -1
- package/es/icons/NotAllowedIcon.js +1 -1
- package/es/icons/Number123Icon.js +1 -1
- package/es/icons/NumberIcon.js +1 -1
- package/es/icons/PauseCircleFilledIcon.js +1 -1
- package/es/icons/PauseCircleIcon.js +1 -1
- package/es/icons/PauseIcon.js +1 -1
- package/es/icons/PercentageIcon.js +1 -1
- package/es/icons/PieChartIcon.js +1 -1
- package/es/icons/PlayCircleIcon.js +1 -1
- package/es/icons/PlayIcon.js +1 -1
- package/es/icons/PlusIcon.js +1 -1
- package/es/icons/ProgressBarIcon.js +1 -1
- package/es/icons/ReloadIcon.js +1 -1
- package/es/icons/ReportIcon.js +1 -1
- package/es/icons/ReturnIcon.js +1 -1
- package/es/icons/RightIcon.js +1 -1
- package/es/icons/RowTotalsIcon.js +1 -1
- package/es/icons/SchemeIcon.js +1 -1
- package/es/icons/SearchIcon.js +1 -1
- package/es/icons/SemanticQueryIcon.js +1 -1
- package/es/icons/SettingsIcon.js +1 -1
- package/es/icons/ShieldFilledIcon.js +1 -1
- package/es/icons/ShieldIcon.js +1 -1
- package/es/icons/SlashIcon.js +1 -1
- package/es/icons/SparklesIcon.js +1 -1
- package/es/icons/SqlIcon.js +1 -1
- package/es/icons/StatsIcon.js +1 -1
- package/es/icons/StopIcon.js +1 -1
- package/es/icons/StringIcon.js +1 -1
- package/es/icons/SubtotalsIcon.js +1 -1
- package/es/icons/SwitchIcon.js +1 -1
- package/es/icons/TableIcon.js +1 -1
- package/es/icons/ThumbsDownIcon.js +1 -1
- package/es/icons/ThumbsUpIcon.js +1 -1
- package/es/icons/ThunderboltCrossedIcon.js +1 -1
- package/es/icons/ThunderboltFilledIcon.js +1 -1
- package/es/icons/ThunderboltIcon.js +1 -1
- package/es/icons/TimeIcon.js +1 -1
- package/es/icons/TrashIcon.js +1 -1
- package/es/icons/UnlockIcon.js +1 -1
- package/es/icons/UpIcon.js +1 -1
- package/es/icons/UserGroupIcon.js +1 -1
- package/es/icons/UserIcon.js +1 -1
- package/es/icons/UserLockIcon.js +1 -1
- package/es/icons/ViewIcon.js +1 -1
- package/es/icons/WarningFilledIcon.js +1 -1
- package/es/icons/WarningIcon.js +1 -1
- package/es/icons/index.js +1 -1
- package/es/icons/wrap-icon.js +1 -1
- package/es/index.js +15 -1
- package/es/provider.js +1 -1
- package/es/providers/TrackingProvider.js +1 -1
- package/es/providers/navigation.types.js +1 -1
- package/es/providers/navigationAdapter.default.js +1 -1
- package/es/services/notification.js +1 -1
- package/es/shared/form.js +1 -1
- package/es/shared/index.js +1 -1
- package/es/stories/Form.legacy-stories.js +1 -1
- package/es/stories/FormFieldArgs.js +1 -1
- package/es/stories/SimpleLayout.stories.js +1 -1
- package/es/stories/Tasty.stories.js +1 -1
- package/es/stories/components/ConfirmDeletionDialogForm.js +1 -1
- package/es/stories/components/DialogFormApp.js +1 -1
- package/es/stories/components/StyledButton.js +1 -1
- package/es/stories/lists/baseProps.js +1 -1
- package/es/stories/playground/PlaygroundEditor.js +1 -1
- package/es/stories/playground/PlaygroundLayout.js +1 -1
- package/es/stories/playground/PlaygroundOutput.js +1 -1
- package/es/stories/playground/PlaygroundPreview.js +1 -1
- package/es/stories/playground/components/Button.js +1 -1
- package/es/stories/playground/components/Card.js +1 -1
- package/es/stories/playground/components/ScrollProgress.js +1 -1
- package/es/stories/playground/examples.js +1 -1
- package/es/tasty/chunks/cacheKey.js +1 -1
- package/es/tasty/chunks/definitions.js +97 -45
- package/es/tasty/chunks/index.js +2 -2
- package/es/tasty/chunks/renderChunk.js +1 -1
- package/es/tasty/config.js +88 -4
- package/es/tasty/debug.js +5 -5
- package/es/tasty/hooks/index.js +3 -1
- package/es/tasty/hooks/useGlobalStyles.js +1 -1
- package/es/tasty/hooks/useKeyframes.js +82 -0
- package/es/tasty/hooks/useProperty.js +100 -0
- package/es/tasty/hooks/useRawCSS.js +1 -1
- package/es/tasty/hooks/useStyles.js +16 -2
- package/es/tasty/index.js +3 -3
- package/es/tasty/injector/index.js +39 -1
- package/es/tasty/injector/injector.js +67 -16
- package/es/tasty/injector/sheet-manager.js +2 -2
- package/es/tasty/injector/types.js +1 -1
- package/es/tasty/keyframes/index.js +1 -1
- package/es/tasty/parser/classify.js +174 -4
- package/es/tasty/parser/const.js +3 -1
- package/es/tasty/parser/lru.js +1 -1
- package/es/tasty/parser/parser.js +51 -22
- package/es/tasty/parser/tokenizer.js +31 -12
- package/es/tasty/parser/types.js +29 -4
- package/es/tasty/pipeline/conditions.js +1 -1
- package/es/tasty/pipeline/exclusive.js +1 -1
- package/es/tasty/pipeline/index.js +1 -1
- package/es/tasty/pipeline/materialize.js +1 -1
- package/es/tasty/pipeline/parseStateKey.js +1 -1
- package/es/tasty/pipeline/simplify.js +1 -1
- package/es/tasty/plugins/index.js +1 -1
- package/es/tasty/plugins/okhsl-plugin.js +1 -1
- package/es/tasty/plugins/types.js +1 -1
- package/es/tasty/properties/index.js +211 -0
- package/es/tasty/states/index.js +8 -2
- package/es/tasty/static/index.js +1 -1
- package/es/tasty/static/tastyStatic.js +1 -1
- package/es/tasty/static/types.js +1 -1
- package/es/tasty/styles/align.js +1 -1
- package/es/tasty/styles/border.js +114 -20
- package/es/tasty/styles/boxShadow.combinator.js +2 -2
- package/es/tasty/styles/color.js +2 -2
- package/es/tasty/styles/createStyle.js +1 -1
- package/es/tasty/styles/dimension.js +100 -53
- package/es/tasty/styles/display.js +84 -4
- package/es/tasty/styles/fade.js +46 -13
- package/es/tasty/styles/fill.js +58 -9
- package/es/tasty/styles/flow.js +1 -1
- package/es/tasty/styles/gap.js +1 -1
- package/es/tasty/styles/height.js +4 -4
- package/es/tasty/styles/index.js +4 -3
- package/es/tasty/styles/inset.js +173 -23
- package/es/tasty/styles/justify.js +1 -1
- package/es/tasty/styles/list.js +2 -2
- package/es/tasty/styles/margin.js +1 -1
- package/es/tasty/styles/outline.js +48 -21
- package/es/tasty/styles/padding.js +1 -1
- package/es/tasty/styles/place.js +1 -1
- package/es/tasty/styles/predefined.js +245 -37
- package/es/tasty/styles/preset.js +140 -40
- package/es/tasty/styles/radius.js +2 -2
- package/es/tasty/styles/reset.js +1 -1
- package/es/tasty/styles/scrollbar.js +1 -1
- package/es/tasty/styles/shadow.js +2 -2
- package/es/tasty/styles/styledScrollbar.js +1 -1
- package/es/tasty/styles/transition.js +20 -2
- package/es/tasty/styles/types.js +1 -1
- package/es/tasty/styles/width.js +4 -4
- package/es/tasty/tasty.js +94 -113
- package/es/tasty/types.js +1 -1
- package/es/tasty/utils/cache-wrapper.js +1 -1
- package/es/tasty/utils/case-converter.js +1 -1
- package/es/tasty/utils/colors.js +1 -1
- package/es/tasty/utils/dotize.js +1 -1
- package/es/tasty/utils/filterBaseProps.js +1 -1
- package/es/tasty/utils/getDisplayName.js +1 -1
- package/es/tasty/utils/isDevEnv.js +1 -1
- package/es/tasty/utils/mergeStyles.js +1 -1
- package/es/tasty/utils/modAttrs.js +1 -1
- package/es/tasty/utils/processTokens.js +1 -1
- package/es/tasty/utils/string.js +1 -1
- package/es/tasty/utils/styles.js +51 -12
- package/es/tasty/utils/typography.js +1 -1
- package/es/tasty/utils/warnings.js +1 -1
- package/es/tasty/zero/babel.js +5 -22
- package/es/tasty/zero/css-writer.js +1 -1
- package/es/tasty/zero/extractor.js +1 -1
- package/es/tasty/zero/index.js +1 -1
- package/es/tasty/zero/next.js +1 -1
- package/es/tokens/base.js +5 -1
- package/es/tokens/colors.js +1 -1
- package/es/tokens/index.js +1 -1
- package/es/tokens/layout.js +1 -1
- package/es/tokens/shadows.js +1 -1
- package/es/tokens/sizes.js +1 -1
- package/es/tokens/spacing.js +1 -1
- package/es/tokens/typography.js +1 -1
- package/es/utils/ResizeSensor.js +1 -1
- package/es/utils/index.js +1 -1
- package/es/utils/modules.js +1 -1
- package/es/utils/promise.js +1 -1
- package/es/utils/raf.js +1 -1
- package/es/utils/random.js +1 -1
- package/es/utils/range.js +1 -1
- package/es/utils/react/RenderCache.js +1 -1
- package/es/utils/react/Slots.js +1 -1
- package/es/utils/react/chain.js +1 -1
- package/es/utils/react/forwardRefWithGenerics.js +1 -1
- package/es/utils/react/index.js +1 -1
- package/es/utils/react/interactions.js +1 -1
- package/es/utils/react/isTextOnly.js +1 -1
- package/es/utils/react/mapProps.js +1 -1
- package/es/utils/react/mergeProps.js +1 -1
- package/es/utils/react/nullableValue.js +1 -1
- package/es/utils/react/resolveIcon.js +1 -1
- package/es/utils/react/sharedStore.js +1 -1
- package/es/utils/react/useCombinedRefs.js +1 -1
- package/es/utils/react/useControlledFocusVisible.js +1 -1
- package/es/utils/react/useEventBus.js +1 -1
- package/es/utils/react/useId.js +1 -1
- package/es/utils/react/useIsDarwin.js +1 -1
- package/es/utils/react/useKeySymbols.js +1 -1
- package/es/utils/react/useLayoutEffect.js +1 -1
- package/es/utils/react/useLocalStorage.js +1 -1
- package/es/utils/react/useQaProps.js +1 -1
- package/es/utils/react/useViewportSize.js +1 -1
- package/es/utils/react/wrapNodeIfPlain.js +1 -1
- package/es/utils/tree.js +1 -1
- package/es/utils/warnings.js +1 -1
- package/es/version.js +2 -2
- package/package.json +1 -1
- package/types/components/HiddenInput.d.ts +6 -5
- package/types/components/actions/Button/Button.d.ts +18 -16
- package/types/components/actions/CommandMenu/styled.d.ts +30 -25
- package/types/components/actions/ItemActionContext.d.ts +3 -1
- package/types/components/actions/Menu/styled.d.ts +549 -541
- package/types/components/content/Item/Item.d.ts +7 -0
- package/types/components/content/Layout/hooks/useTinyScrollbar.d.ts +6 -0
- package/types/components/content/List/SectionHeading.d.ts +173 -172
- package/types/components/content/Text.d.ts +1197 -1190
- package/types/components/fields/DatePicker/DatePickerElement.d.ts +173 -172
- package/types/components/fields/Select/Select.d.ts +6 -5
- package/types/components/fields/Slider/elements.d.ts +36 -30
- package/types/components/navigation/Tabs/Tabs.d.ts +236 -0
- package/types/components/navigation/Tabs/index.d.ts +2 -0
- package/types/components/navigation/index.d.ts +2 -0
- package/types/index.d.ts +1 -0
- package/types/tasty/chunks/definitions.d.ts +63 -18
- package/types/tasty/chunks/index.d.ts +1 -1
- package/types/tasty/config.d.ts +97 -1
- package/types/tasty/hooks/index.d.ts +3 -0
- package/types/tasty/hooks/useKeyframes.d.ts +52 -0
- package/types/tasty/hooks/useProperty.d.ts +75 -0
- package/types/tasty/index.d.ts +3 -2
- package/types/tasty/injector/index.d.ts +57 -1
- package/types/tasty/injector/injector.d.ts +19 -7
- package/types/tasty/injector/types.d.ts +14 -2
- package/types/tasty/parser/const.d.ts +1 -0
- package/types/tasty/parser/parser.d.ts +6 -0
- package/types/tasty/parser/tokenizer.d.ts +1 -1
- package/types/tasty/parser/types.d.ts +31 -1
- package/types/tasty/plugins/types.d.ts +20 -1
- package/types/tasty/properties/index.d.ts +90 -0
- package/types/tasty/styles/border.d.ts +11 -3
- package/types/tasty/styles/boxShadow.combinator.d.ts +2 -2
- package/types/tasty/styles/color.d.ts +2 -2
- package/types/tasty/styles/dimension.d.ts +16 -1
- package/types/tasty/styles/display.d.ts +24 -6
- package/types/tasty/styles/fade.d.ts +3 -3
- package/types/tasty/styles/fill.d.ts +16 -6
- package/types/tasty/styles/height.d.ts +7 -3
- package/types/tasty/styles/index.d.ts +3 -1
- package/types/tasty/styles/inset.d.ts +35 -3
- package/types/tasty/styles/list.d.ts +3 -3
- package/types/tasty/styles/outline.d.ts +17 -11
- package/types/tasty/styles/predefined.d.ts +98 -1
- package/types/tasty/styles/preset.d.ts +23 -4
- package/types/tasty/styles/radius.d.ts +2 -2
- package/types/tasty/styles/shadow.d.ts +2 -2
- package/types/tasty/styles/types.d.ts +74 -22
- package/types/tasty/styles/width.d.ts +7 -3
- package/types/tasty/tasty.d.ts +6 -5
- package/types/tasty/utils/styles.d.ts +27 -4
- package/types/tasty/zero/babel.d.ts +47 -0
- package/es/tasty/styles/font.js +0 -23
- package/es/tasty/styles/fontStyle.js +0 -19
- package/es/tasty/styles/groupRadius.js +0 -61
- package/types/tasty/styles/font.d.ts +0 -9
- package/types/tasty/styles/fontStyle.d.ts +0 -8
- package/types/tasty/styles/groupRadius.d.ts +0 -11
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license MIT
|
|
3
3
|
* author: Cube Dev Team
|
|
4
|
-
* @cube-dev/ui-kit v0.
|
|
4
|
+
* @cube-dev/ui-kit v0.101.0
|
|
5
5
|
* Released under the MIT license.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import { useInsertionEffect, useMemo, useRef } from 'react';
|
|
9
9
|
import { categorizeStyleKeys, CHUNK_NAMES, generateChunkCacheKey, renderStylesForChunk, } from '../chunks/index.js';
|
|
10
10
|
import { getGlobalKeyframes, hasGlobalKeyframes } from '../config.js';
|
|
11
|
-
import { allocateClassName, inject, keyframes } from '../injector/index.js';
|
|
11
|
+
import { allocateClassName, inject, keyframes, property } from '../injector/index.js';
|
|
12
12
|
import { extractAnimationNamesFromStyles, extractLocalKeyframes, filterUsedKeyframes, hasLocalKeyframes, mergeKeyframes, replaceAnimationNames, } from '../keyframes/index.js';
|
|
13
13
|
import { renderStyles } from '../pipeline/index.js';
|
|
14
|
+
import { extractLocalProperties, hasLocalProperties } from '../properties/index.js';
|
|
14
15
|
import { stringifyStyles } from '../utils/styles.js';
|
|
15
16
|
/**
|
|
16
17
|
* Check if styles contain @starting-style rules.
|
|
@@ -173,6 +174,19 @@ export function useStyles(styles) {
|
|
|
173
174
|
nameMap = null;
|
|
174
175
|
}
|
|
175
176
|
}
|
|
177
|
+
// Register local @properties if defined (no dispose needed - properties are permanent)
|
|
178
|
+
// Token formats: $name → --name, #name → --name-color (with auto syntax: '<color>')
|
|
179
|
+
// The injector.property() handles token parsing and auto-settings internally
|
|
180
|
+
// Note: Global properties are injected once when styles are first generated (see markStylesGenerated)
|
|
181
|
+
if (currentStyles && hasLocalProperties(currentStyles)) {
|
|
182
|
+
const localProperties = extractLocalProperties(currentStyles);
|
|
183
|
+
if (localProperties) {
|
|
184
|
+
for (const [token, definition] of Object.entries(localProperties)) {
|
|
185
|
+
// Pass the token directly - injector handles parsing
|
|
186
|
+
property(token, definition);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
176
190
|
// Inject each chunk
|
|
177
191
|
for (const chunk of processedChunks) {
|
|
178
192
|
if (chunk.renderResult.rules.length > 0) {
|
package/es/tasty/index.js
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license MIT
|
|
3
3
|
* author: Cube Dev Team
|
|
4
|
-
* @cube-dev/ui-kit v0.
|
|
4
|
+
* @cube-dev/ui-kit v0.101.0
|
|
5
5
|
* Released under the MIT license.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
// Register built-in plugins at module load time
|
|
9
8
|
import { configure } from './config.js';
|
|
10
9
|
import { okhslPlugin } from './plugins/index.js';
|
|
11
10
|
export { tasty, Element } from './tasty.js';
|
|
12
|
-
export { useStyles, useGlobalStyles, useRawCSS } from './hooks/index.js';
|
|
11
|
+
export { useStyles, useGlobalStyles, useRawCSS, useProperty, useKeyframes, } from './hooks/index.js';
|
|
13
12
|
// Configuration API
|
|
14
13
|
export { configure, getConfig, isConfigLocked, hasStylesGenerated, resetConfig, isTestEnvironment, hasGlobalKeyframes, getGlobalKeyframes, } from './config.js';
|
|
15
14
|
// Plugins
|
|
@@ -25,6 +24,7 @@ export * from './utils/filterBaseProps.js';
|
|
|
25
24
|
export * from './utils/colors.js';
|
|
26
25
|
export * from './utils/styles.js';
|
|
27
26
|
export * from './utils/modAttrs.js';
|
|
27
|
+
export { styleHandlers } from './styles/index.js';
|
|
28
28
|
export { renderStyles, isSelector } from './pipeline/index.js';
|
|
29
29
|
export * from './utils/dotize.js';
|
|
30
30
|
export * from './styles/list.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license MIT
|
|
3
3
|
* author: Cube Dev Team
|
|
4
|
-
* @cube-dev/ui-kit v0.
|
|
4
|
+
* @cube-dev/ui-kit v0.101.0
|
|
5
5
|
* Released under the MIT license.
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -59,6 +59,44 @@ export function getRawCSSText(options) {
|
|
|
59
59
|
export function keyframes(steps, nameOrOptions) {
|
|
60
60
|
return getGlobalInjector().keyframes(steps, nameOrOptions);
|
|
61
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Define a CSS @property custom property.
|
|
64
|
+
* This enables advanced features like animating custom properties.
|
|
65
|
+
*
|
|
66
|
+
* Note: @property rules are global and persistent once defined.
|
|
67
|
+
* Re-registering the same property name is a no-op.
|
|
68
|
+
*
|
|
69
|
+
* @param name - The custom property name (must start with --)
|
|
70
|
+
* @param options - Property configuration
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```ts
|
|
74
|
+
* // Define a color property that can be animated
|
|
75
|
+
* property('--my-color', {
|
|
76
|
+
* syntax: '<color>',
|
|
77
|
+
* initialValue: 'red',
|
|
78
|
+
* });
|
|
79
|
+
*
|
|
80
|
+
* // Define an angle property
|
|
81
|
+
* property('--rotation', {
|
|
82
|
+
* syntax: '<angle>',
|
|
83
|
+
* inherits: false,
|
|
84
|
+
* initialValue: '0deg',
|
|
85
|
+
* });
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
export function property(name, options) {
|
|
89
|
+
return getGlobalInjector().property(name, options);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Check if a CSS @property has already been defined
|
|
93
|
+
*
|
|
94
|
+
* @param name - The custom property name to check
|
|
95
|
+
* @param options - Options including root
|
|
96
|
+
*/
|
|
97
|
+
export function isPropertyDefined(name, options) {
|
|
98
|
+
return getGlobalInjector().isPropertyDefined(name, options);
|
|
99
|
+
}
|
|
62
100
|
/**
|
|
63
101
|
* Get CSS text from all sheets (for SSR)
|
|
64
102
|
*/
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license MIT
|
|
3
3
|
* author: Cube Dev Team
|
|
4
|
-
* @cube-dev/ui-kit v0.
|
|
4
|
+
* @cube-dev/ui-kit v0.101.0
|
|
5
5
|
* Released under the MIT license.
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
* Style injector that works with structured style objects
|
|
10
10
|
* Eliminates CSS string parsing for better performance
|
|
11
11
|
*/
|
|
12
|
+
import { getEffectiveDefinition, normalizePropertyDefinition, } from '../properties/index.js';
|
|
13
|
+
import { isDevEnv } from '../utils/isDevEnv.js';
|
|
12
14
|
import { parseStyle } from '../utils/styles.js';
|
|
13
15
|
import { SheetManager } from './sheet-manager.js';
|
|
14
16
|
/**
|
|
@@ -315,56 +317,105 @@ export class StyleInjector {
|
|
|
315
317
|
this.sheetManager.resetMetrics(registry);
|
|
316
318
|
}
|
|
317
319
|
/**
|
|
318
|
-
* Define a CSS @property custom property
|
|
320
|
+
* Define a CSS @property custom property.
|
|
321
|
+
*
|
|
322
|
+
* Accepts tasty token syntax for the property name:
|
|
323
|
+
* - `$name` → defines `--name`
|
|
324
|
+
* - `#name` → defines `--name-color` (auto-sets syntax: '<color>', defaults initialValue: 'transparent')
|
|
325
|
+
* - `--name` → defines `--name` (legacy format)
|
|
326
|
+
*
|
|
319
327
|
* Example:
|
|
320
328
|
* @property --rotation { syntax: "<angle>"; inherits: false; initial-value: 45deg; }
|
|
329
|
+
*
|
|
321
330
|
* Note: No caching or dispose — this defines a global property.
|
|
331
|
+
*
|
|
332
|
+
* If the same property is registered with different options, a warning is emitted
|
|
333
|
+
* but the original definition is preserved (CSS @property cannot be redefined).
|
|
322
334
|
*/
|
|
323
335
|
property(name, options) {
|
|
324
336
|
const root = options?.root || document;
|
|
325
337
|
const registry = this.sheetManager.getRegistry(root);
|
|
326
|
-
//
|
|
327
|
-
|
|
338
|
+
// Parse the token and get effective definition
|
|
339
|
+
// This handles $name, #name, --name formats and auto-sets syntax for colors
|
|
340
|
+
const userDefinition = {
|
|
341
|
+
syntax: options?.syntax,
|
|
342
|
+
inherits: options?.inherits,
|
|
343
|
+
initialValue: options?.initialValue,
|
|
344
|
+
};
|
|
345
|
+
const effectiveResult = getEffectiveDefinition(name, userDefinition);
|
|
346
|
+
if (!effectiveResult.isValid) {
|
|
347
|
+
if (isDevEnv()) {
|
|
348
|
+
console.warn(`[Tasty] property(): ${effectiveResult.error}. Got: "${name}"`);
|
|
349
|
+
}
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
const cssName = effectiveResult.cssName;
|
|
353
|
+
const definition = effectiveResult.definition;
|
|
354
|
+
// Normalize the definition for comparison
|
|
355
|
+
const normalizedDef = normalizePropertyDefinition(definition);
|
|
356
|
+
// Check if already defined
|
|
357
|
+
const existingDef = registry.injectedProperties.get(cssName);
|
|
358
|
+
if (existingDef !== undefined) {
|
|
359
|
+
// Property already exists - check if definitions match
|
|
360
|
+
if (existingDef !== normalizedDef) {
|
|
361
|
+
// Different definition - warn but don't replace (CSS @property can't be redefined)
|
|
362
|
+
if (isDevEnv()) {
|
|
363
|
+
console.warn(`[Tasty] @property ${cssName} was already defined with a different declaration. ` +
|
|
364
|
+
`The new declaration will be ignored. ` +
|
|
365
|
+
`Original: ${existingDef}, New: ${normalizedDef}`);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
// Either exact match or warned - skip injection
|
|
328
369
|
return;
|
|
329
370
|
}
|
|
330
371
|
const parts = [];
|
|
331
|
-
if (
|
|
332
|
-
let syntax = String(
|
|
372
|
+
if (definition.syntax != null) {
|
|
373
|
+
let syntax = String(definition.syntax).trim();
|
|
333
374
|
if (!/^['"]/u.test(syntax))
|
|
334
375
|
syntax = `"${syntax}"`;
|
|
335
376
|
parts.push(`syntax: ${syntax};`);
|
|
336
377
|
}
|
|
337
378
|
// inherits is required by the CSS @property spec - default to true
|
|
338
|
-
const inherits =
|
|
379
|
+
const inherits = definition.inherits ?? true;
|
|
339
380
|
parts.push(`inherits: ${inherits ? 'true' : 'false'};`);
|
|
340
|
-
if (
|
|
381
|
+
if (definition.initialValue != null) {
|
|
341
382
|
let initialValueStr;
|
|
342
|
-
if (typeof
|
|
343
|
-
initialValueStr = String(
|
|
383
|
+
if (typeof definition.initialValue === 'number') {
|
|
384
|
+
initialValueStr = String(definition.initialValue);
|
|
344
385
|
}
|
|
345
386
|
else {
|
|
346
387
|
// Process via tasty parser to resolve custom units/functions
|
|
347
|
-
initialValueStr = parseStyle(
|
|
388
|
+
initialValueStr = parseStyle(definition.initialValue).output;
|
|
348
389
|
}
|
|
349
390
|
parts.push(`initial-value: ${initialValueStr};`);
|
|
350
391
|
}
|
|
351
392
|
const declarations = parts.join(' ').trim();
|
|
352
393
|
const rule = {
|
|
353
|
-
selector: `@property ${
|
|
394
|
+
selector: `@property ${cssName}`,
|
|
354
395
|
declarations,
|
|
355
396
|
};
|
|
356
397
|
// Insert as a global rule; ignore returned info (no tracking/dispose)
|
|
357
398
|
this.sheetManager.insertGlobalRule(registry, [rule], `property:${name}`, root);
|
|
358
|
-
// Track that this property was injected
|
|
359
|
-
registry.injectedProperties.
|
|
399
|
+
// Track that this property was injected with its normalized definition
|
|
400
|
+
registry.injectedProperties.set(cssName, normalizedDef);
|
|
360
401
|
}
|
|
361
402
|
/**
|
|
362
|
-
* Check whether a given @property name was already injected by this injector
|
|
403
|
+
* Check whether a given @property name was already injected by this injector.
|
|
404
|
+
*
|
|
405
|
+
* Accepts tasty token syntax:
|
|
406
|
+
* - `$name` → checks `--name`
|
|
407
|
+
* - `#name` → checks `--name-color`
|
|
408
|
+
* - `--name` → checks `--name` (legacy format)
|
|
363
409
|
*/
|
|
364
410
|
isPropertyDefined(name, options) {
|
|
365
411
|
const root = options?.root || document;
|
|
366
412
|
const registry = this.sheetManager.getRegistry(root);
|
|
367
|
-
|
|
413
|
+
// Parse the token to get the CSS property name
|
|
414
|
+
const effectiveResult = getEffectiveDefinition(name, {});
|
|
415
|
+
if (!effectiveResult.isValid) {
|
|
416
|
+
return false;
|
|
417
|
+
}
|
|
418
|
+
return registry.injectedProperties.has(effectiveResult.cssName);
|
|
368
419
|
}
|
|
369
420
|
/**
|
|
370
421
|
* Inject keyframes and return object with toString() and dispose()
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license MIT
|
|
3
3
|
* author: Cube Dev Team
|
|
4
|
-
* @cube-dev/ui-kit v0.
|
|
4
|
+
* @cube-dev/ui-kit v0.101.0
|
|
5
5
|
* Released under the MIT license.
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -49,7 +49,7 @@ export class SheetManager {
|
|
|
49
49
|
keyframesCache: new Map(),
|
|
50
50
|
keyframesNameToContent: new Map(),
|
|
51
51
|
keyframesCounter: 0,
|
|
52
|
-
injectedProperties: new
|
|
52
|
+
injectedProperties: new Map(),
|
|
53
53
|
globalRules: new Map(),
|
|
54
54
|
};
|
|
55
55
|
this.rootRegistries.set(root, registry);
|
|
@@ -1,13 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license MIT
|
|
3
3
|
* author: Cube Dev Team
|
|
4
|
-
* @cube-dev/ui-kit v0.
|
|
4
|
+
* @cube-dev/ui-kit v0.101.0
|
|
5
5
|
* Released under the MIT license.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { getGlobalPredefinedTokens } from '../utils/styles.js';
|
|
9
|
+
import { COLOR_FUNCS, RE_HEX, RE_NUMBER, RE_RAW_UNIT, RE_UNIT_NUM, VALUE_KEYWORDS, } from './const.js';
|
|
9
10
|
import { StyleParser } from './parser.js';
|
|
10
11
|
import { Bucket } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Re-parses a value through the parser until it stabilizes (no changes)
|
|
14
|
+
* or max iterations reached. This allows units to reference other units.
|
|
15
|
+
* Example: { x: '8px', y: '2x' } -> '1y' resolves to '16px'
|
|
16
|
+
*/
|
|
17
|
+
function resolveUntilStable(value, opts, recurse, maxIterations = 10) {
|
|
18
|
+
let current = value;
|
|
19
|
+
for (let i = 0; i < maxIterations; i++) {
|
|
20
|
+
// Check if the current value contains a custom unit that needs resolution
|
|
21
|
+
const unitMatch = current.match(RE_UNIT_NUM);
|
|
22
|
+
if (!unitMatch)
|
|
23
|
+
break; // Not a unit number, no resolution needed
|
|
24
|
+
const unitName = unitMatch[1];
|
|
25
|
+
// Only recurse if the unit is a custom unit we know about
|
|
26
|
+
// Any unit not in opts.units is assumed to be a native CSS unit
|
|
27
|
+
if (!opts.units || !(unitName in opts.units))
|
|
28
|
+
break;
|
|
29
|
+
const result = recurse(current);
|
|
30
|
+
if (result.output === current)
|
|
31
|
+
break; // Stable
|
|
32
|
+
current = result.output;
|
|
33
|
+
}
|
|
34
|
+
return current;
|
|
35
|
+
}
|
|
11
36
|
export function classify(raw, opts, recurse) {
|
|
12
37
|
const token = raw.trim();
|
|
13
38
|
if (!token)
|
|
@@ -47,6 +72,140 @@ export function classify(raw, opts, recurse) {
|
|
|
47
72
|
(token.startsWith("'") && token.endsWith("'"))) {
|
|
48
73
|
return { bucket: Bucket.Value, processed: token };
|
|
49
74
|
}
|
|
75
|
+
// 0. Double prefix for literal CSS property names ($$name -> --name, ##name -> --name-color)
|
|
76
|
+
// Used in transitions and animations to reference the property name itself, not its value
|
|
77
|
+
if (token.startsWith('$$')) {
|
|
78
|
+
const name = token.slice(2);
|
|
79
|
+
if (/^[a-z_][a-z0-9-_]*$/i.test(name)) {
|
|
80
|
+
return { bucket: Bucket.Value, processed: `--${name}` };
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (token.startsWith('##')) {
|
|
84
|
+
const name = token.slice(2);
|
|
85
|
+
if (/^[a-z_][a-z0-9-_]*$/i.test(name)) {
|
|
86
|
+
return { bucket: Bucket.Value, processed: `--${name}-color` };
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// 0a. Check for predefined tokens (configured via configure({ tokens: {...} }))
|
|
90
|
+
// Must happen before default $ and # handling to allow overriding
|
|
91
|
+
if (token[0] === '$' || token[0] === '#') {
|
|
92
|
+
const predefinedTokens = getGlobalPredefinedTokens();
|
|
93
|
+
if (predefinedTokens) {
|
|
94
|
+
// Exact match
|
|
95
|
+
if (token in predefinedTokens) {
|
|
96
|
+
const tokenValue = predefinedTokens[token];
|
|
97
|
+
// Lowercase the token value to match parser behavior (parser lowercases input)
|
|
98
|
+
return classify(tokenValue.toLowerCase(), opts, recurse);
|
|
99
|
+
}
|
|
100
|
+
// Check for color token with alpha suffix: #token.alpha
|
|
101
|
+
if (token[0] === '#') {
|
|
102
|
+
const alphaMatch = token.match(/^(#[a-z0-9-]+)\.([0-9]+)$/i);
|
|
103
|
+
if (alphaMatch) {
|
|
104
|
+
const [, baseToken, rawAlpha] = alphaMatch;
|
|
105
|
+
if (baseToken in predefinedTokens) {
|
|
106
|
+
const resolvedValue = predefinedTokens[baseToken];
|
|
107
|
+
// If resolved value starts with # (color token), use standard alpha syntax
|
|
108
|
+
if (resolvedValue.startsWith('#')) {
|
|
109
|
+
// Lowercase to match parser behavior
|
|
110
|
+
return classify(`${resolvedValue.toLowerCase()}.${rawAlpha}`, opts, recurse);
|
|
111
|
+
}
|
|
112
|
+
// For color functions like rgb(), rgba(), hsl(), hwb(), etc., inject alpha
|
|
113
|
+
// Includes all standard CSS color functions plus okhsl (plugin)
|
|
114
|
+
const funcMatch = resolvedValue.match(/^(rgba?|hsla?|hwb|oklab|oklch|lab|lch|color|okhsl|device-cmyk|gray|color-mix|color-contrast)\((.+)\)$/i);
|
|
115
|
+
if (funcMatch) {
|
|
116
|
+
const [, funcName, args] = funcMatch;
|
|
117
|
+
const alpha = rawAlpha === '0' ? '0' : `.${rawAlpha}`;
|
|
118
|
+
// Normalize function name: rgba->rgb, hsla->hsl (modern syntax doesn't need 'a' suffix)
|
|
119
|
+
const normalizedFunc = funcName.replace(/a$/i, '').toLowerCase();
|
|
120
|
+
// Normalize to modern syntax: replace top-level commas with spaces
|
|
121
|
+
// Preserves commas inside nested functions like min(), max(), clamp()
|
|
122
|
+
const normalizeArgs = (a) => {
|
|
123
|
+
let result = '';
|
|
124
|
+
let depth = 0;
|
|
125
|
+
for (let i = 0; i < a.length; i++) {
|
|
126
|
+
const c = a[i];
|
|
127
|
+
if (c === '(') {
|
|
128
|
+
depth++;
|
|
129
|
+
result += c;
|
|
130
|
+
}
|
|
131
|
+
else if (c === ')') {
|
|
132
|
+
depth = Math.max(0, depth - 1);
|
|
133
|
+
result += c;
|
|
134
|
+
}
|
|
135
|
+
else if (c === ',' && depth === 0) {
|
|
136
|
+
// Skip comma and any following whitespace at top level
|
|
137
|
+
while (i + 1 < a.length && /\s/.test(a[i + 1]))
|
|
138
|
+
i++;
|
|
139
|
+
result += ' ';
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
result += c;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return result;
|
|
146
|
+
};
|
|
147
|
+
// Helper: find last top-level occurrence of a character (ignores parentheses)
|
|
148
|
+
const findLastTopLevel = (str, ch) => {
|
|
149
|
+
let depth = 0;
|
|
150
|
+
for (let i = str.length - 1; i >= 0; i--) {
|
|
151
|
+
const c = str[i];
|
|
152
|
+
if (c === ')')
|
|
153
|
+
depth++;
|
|
154
|
+
else if (c === '(')
|
|
155
|
+
depth = Math.max(0, depth - 1);
|
|
156
|
+
else if (c === ch && depth === 0)
|
|
157
|
+
return i;
|
|
158
|
+
}
|
|
159
|
+
return -1;
|
|
160
|
+
};
|
|
161
|
+
// Check if already has alpha:
|
|
162
|
+
// - Modern syntax: has `/` separator at top level (works with dynamic alpha like var()/calc())
|
|
163
|
+
// - Legacy syntax: function ends with 'a' (rgba, hsla) and has exactly 4 top-level comma-separated values
|
|
164
|
+
const slashIdx = findLastTopLevel(args, '/');
|
|
165
|
+
const hasModernAlpha = slashIdx !== -1;
|
|
166
|
+
// Count top-level commas to avoid commas inside nested functions
|
|
167
|
+
let topLevelCommaCount = 0;
|
|
168
|
+
let lastTopLevelComma = -1;
|
|
169
|
+
{
|
|
170
|
+
let depth = 0;
|
|
171
|
+
for (let i = 0; i < args.length; i++) {
|
|
172
|
+
const c = args[i];
|
|
173
|
+
if (c === '(')
|
|
174
|
+
depth++;
|
|
175
|
+
else if (c === ')')
|
|
176
|
+
depth = Math.max(0, depth - 1);
|
|
177
|
+
else if (c === ',' && depth === 0) {
|
|
178
|
+
topLevelCommaCount++;
|
|
179
|
+
lastTopLevelComma = i;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
const hasLegacyAlpha = !hasModernAlpha &&
|
|
184
|
+
/a$/i.test(funcName) &&
|
|
185
|
+
topLevelCommaCount === 3;
|
|
186
|
+
if (hasModernAlpha || hasLegacyAlpha) {
|
|
187
|
+
// Strip existing alpha (numeric or dynamic) before applying suffix
|
|
188
|
+
const withoutAlpha = hasModernAlpha
|
|
189
|
+
? args.slice(0, slashIdx).trim()
|
|
190
|
+
: args.slice(0, lastTopLevelComma).trim();
|
|
191
|
+
return {
|
|
192
|
+
bucket: Bucket.Color,
|
|
193
|
+
processed: `${normalizedFunc}(${normalizeArgs(withoutAlpha)} / ${alpha})`,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
// Add alpha using modern syntax
|
|
197
|
+
return {
|
|
198
|
+
bucket: Bucket.Color,
|
|
199
|
+
processed: `${normalizedFunc}(${normalizeArgs(args)} / ${alpha})`,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
// Fallback: try appending .alpha (may not work for all cases)
|
|
203
|
+
return classify(`${resolvedValue}.${rawAlpha}`, opts, recurse);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
50
209
|
// 0. Direct var(--*-color) token
|
|
51
210
|
const varColorMatch = token.match(/^var\(--([a-z0-9-]+)-color\)$/);
|
|
52
211
|
if (varColorMatch) {
|
|
@@ -162,8 +321,19 @@ export function classify(raw, opts, recurse) {
|
|
|
162
321
|
const handler = opts.units && opts.units[unit];
|
|
163
322
|
if (handler) {
|
|
164
323
|
if (typeof handler === 'string') {
|
|
165
|
-
//
|
|
166
|
-
const
|
|
324
|
+
// Check if this is a raw CSS unit (e.g., "8px", "1rem")
|
|
325
|
+
const rawMatch = handler.match(RE_RAW_UNIT);
|
|
326
|
+
if (rawMatch) {
|
|
327
|
+
// Raw unit: calculate directly instead of using calc()
|
|
328
|
+
const [, baseNum, cssUnit] = rawMatch;
|
|
329
|
+
const result = numericPart * parseFloat(baseNum);
|
|
330
|
+
const processed = `${result}${cssUnit}`;
|
|
331
|
+
// Re-parse to resolve any nested units (e.g., units referencing other units)
|
|
332
|
+
const resolved = resolveUntilStable(processed, opts, recurse);
|
|
333
|
+
return { bucket: Bucket.Value, processed: resolved };
|
|
334
|
+
}
|
|
335
|
+
// Non-raw handler (e.g., "var(--gap)", "calc(...)"): use calc() wrapping
|
|
336
|
+
const base = handler;
|
|
167
337
|
if (numericPart === 1) {
|
|
168
338
|
return { bucket: Bucket.Value, processed: base };
|
|
169
339
|
}
|
package/es/tasty/parser/const.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license MIT
|
|
3
3
|
* author: Cube Dev Team
|
|
4
|
-
* @cube-dev/ui-kit v0.
|
|
4
|
+
* @cube-dev/ui-kit v0.101.0
|
|
5
5
|
* Released under the MIT license.
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -32,5 +32,7 @@ export const COLOR_FUNCS = new Set([
|
|
|
32
32
|
export const RE_UNIT_NUM = /^[+-]?(?:\d*\.\d+|\d+)([a-z][a-z0-9]*)$/;
|
|
33
33
|
export const RE_NUMBER = /^[+-]?(?:\d*\.\d+|\d+)$/;
|
|
34
34
|
export const RE_HEX = /^(?:[0-9a-f]{3,4}|[0-9a-f]{6}(?:[0-9a-f]{2})?)$/;
|
|
35
|
+
// Matches raw CSS unit values like "8px", "1rem", "0.5em" - captures number and unit separately
|
|
36
|
+
export const RE_RAW_UNIT = /^([+-]?(?:\d*\.\d+|\d+))([a-z%]+)$/;
|
|
35
37
|
|
|
36
38
|
|
package/es/tasty/parser/lru.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license MIT
|
|
3
3
|
* author: Cube Dev Team
|
|
4
|
-
* @cube-dev/ui-kit v0.
|
|
4
|
+
* @cube-dev/ui-kit v0.101.0
|
|
5
5
|
* Released under the MIT license.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import { classify } from './classify.js';
|
|
9
9
|
import { Lru } from './lru.js';
|
|
10
10
|
import { scan } from './tokenizer.js';
|
|
11
|
-
import { Bucket, finalizeGroup, makeEmptyDetails, } from './types.js';
|
|
11
|
+
import { Bucket, finalizeGroup, finalizePart, makeEmptyDetails, makeEmptyPart, } from './types.js';
|
|
12
12
|
export class StyleParser {
|
|
13
13
|
opts;
|
|
14
14
|
cache;
|
|
@@ -27,7 +27,9 @@ export class StyleParser {
|
|
|
27
27
|
.replace(/\/\*[^*]*\*+(?:[^/*][^*]*\*+)*\//g, '')
|
|
28
28
|
.toLowerCase();
|
|
29
29
|
const groups = [];
|
|
30
|
-
let
|
|
30
|
+
let currentGroup = makeEmptyDetails();
|
|
31
|
+
let currentPart = makeEmptyPart();
|
|
32
|
+
let parts = [];
|
|
31
33
|
const pushToken = (bucket, processed) => {
|
|
32
34
|
if (!processed)
|
|
33
35
|
return;
|
|
@@ -35,13 +37,13 @@ export class StyleParser {
|
|
|
35
37
|
// background layer segments like "url(img) no-repeat center/cover" are kept
|
|
36
38
|
// as a single value entry.
|
|
37
39
|
const mergeIntoPrevUrl = () => {
|
|
38
|
-
const lastIdx =
|
|
39
|
-
|
|
40
|
-
const lastAllIdx =
|
|
41
|
-
|
|
40
|
+
const lastIdx = currentPart.values.length - 1;
|
|
41
|
+
currentPart.values[lastIdx] += ` ${processed}`;
|
|
42
|
+
const lastAllIdx = currentPart.all.length - 1;
|
|
43
|
+
currentPart.all[lastAllIdx] += ` ${processed}`;
|
|
42
44
|
};
|
|
43
|
-
const prevIsUrlValue =
|
|
44
|
-
|
|
45
|
+
const prevIsUrlValue = currentPart.values.length > 0 &&
|
|
46
|
+
currentPart.values[currentPart.values.length - 1].startsWith('url(');
|
|
45
47
|
if (prevIsUrlValue) {
|
|
46
48
|
// Extend the existing url(...) value regardless of current bucket.
|
|
47
49
|
mergeIntoPrevUrl();
|
|
@@ -51,39 +53,58 @@ export class StyleParser {
|
|
|
51
53
|
}
|
|
52
54
|
switch (bucket) {
|
|
53
55
|
case Bucket.Color:
|
|
54
|
-
|
|
56
|
+
currentPart.colors.push(processed);
|
|
55
57
|
break;
|
|
56
58
|
case Bucket.Value:
|
|
57
|
-
|
|
59
|
+
currentPart.values.push(processed);
|
|
58
60
|
break;
|
|
59
61
|
case Bucket.Mod:
|
|
60
|
-
|
|
62
|
+
currentPart.mods.push(processed);
|
|
61
63
|
break;
|
|
62
64
|
}
|
|
63
|
-
|
|
65
|
+
currentPart.all.push(processed);
|
|
66
|
+
};
|
|
67
|
+
const endPart = () => {
|
|
68
|
+
// Only add non-empty parts
|
|
69
|
+
if (currentPart.all.length > 0) {
|
|
70
|
+
finalizePart(currentPart);
|
|
71
|
+
parts.push(currentPart);
|
|
72
|
+
}
|
|
73
|
+
currentPart = makeEmptyPart();
|
|
64
74
|
};
|
|
65
75
|
const endGroup = () => {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
76
|
+
endPart(); // finalize last part
|
|
77
|
+
// Ensure at least one part exists (even if empty) for backward compat
|
|
78
|
+
if (parts.length === 0) {
|
|
79
|
+
parts.push(makeEmptyPart());
|
|
80
|
+
finalizePart(parts[0]);
|
|
81
|
+
}
|
|
82
|
+
finalizeGroup(currentGroup, parts);
|
|
83
|
+
groups.push(currentGroup);
|
|
84
|
+
// Reset for next group
|
|
85
|
+
currentGroup = makeEmptyDetails();
|
|
86
|
+
parts = [];
|
|
87
|
+
currentPart = makeEmptyPart();
|
|
69
88
|
};
|
|
70
|
-
scan(stripped, (tok, isComma, prevChar) => {
|
|
89
|
+
scan(stripped, (tok, isComma, isSlash, prevChar) => {
|
|
71
90
|
if (tok) {
|
|
72
|
-
// Accumulate raw token into
|
|
73
|
-
if (
|
|
74
|
-
|
|
91
|
+
// Accumulate raw token into currentGroup.input
|
|
92
|
+
if (currentGroup.input) {
|
|
93
|
+
currentGroup.input += ` ${tok}`;
|
|
75
94
|
}
|
|
76
95
|
else {
|
|
77
|
-
|
|
96
|
+
currentGroup.input = tok;
|
|
78
97
|
}
|
|
79
98
|
const { bucket, processed } = classify(tok, this.opts, (sub) => this.process(sub));
|
|
80
99
|
pushToken(bucket, processed);
|
|
81
100
|
}
|
|
101
|
+
if (isSlash)
|
|
102
|
+
endPart();
|
|
82
103
|
if (isComma)
|
|
83
104
|
endGroup();
|
|
84
105
|
});
|
|
85
106
|
// push final group if not already
|
|
86
|
-
if (
|
|
107
|
+
if (currentPart.all.length || parts.length || !groups.length)
|
|
87
108
|
endGroup();
|
|
88
109
|
const output = groups.map((g) => g.output).join(', ');
|
|
89
110
|
const result = { output, groups };
|
|
@@ -106,6 +127,14 @@ export class StyleParser {
|
|
|
106
127
|
else
|
|
107
128
|
this.cache.clear();
|
|
108
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* Clear the parser cache.
|
|
132
|
+
* Call this when external state that affects parsing results has changed
|
|
133
|
+
* (e.g., predefined tokens).
|
|
134
|
+
*/
|
|
135
|
+
clearCache() {
|
|
136
|
+
this.cache.clear();
|
|
137
|
+
}
|
|
109
138
|
/**
|
|
110
139
|
* Get the current units configuration.
|
|
111
140
|
*/
|