@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,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
|
|
|
@@ -13,6 +13,37 @@
|
|
|
13
13
|
* 2. Logical grouping - related styles grouped for better cache reuse
|
|
14
14
|
*
|
|
15
15
|
* See STYLE_CHUNKING_SPEC.md for detailed rationale.
|
|
16
|
+
*
|
|
17
|
+
* ============================================================================
|
|
18
|
+
* ⚠️ CRITICAL ARCHITECTURAL CONSTRAINT: NO CROSS-CHUNK HANDLER DEPENDENCIES
|
|
19
|
+
* ============================================================================
|
|
20
|
+
*
|
|
21
|
+
* Style handlers declare their dependencies via `__lookupStyles` array.
|
|
22
|
+
* This creates a dependency graph where handlers read multiple style props.
|
|
23
|
+
*
|
|
24
|
+
* **ALL styles in a handler's `__lookupStyles` MUST be in the SAME chunk.**
|
|
25
|
+
*
|
|
26
|
+
* Why this matters:
|
|
27
|
+
* 1. Each chunk computes a cache key from ONLY its own style values
|
|
28
|
+
* 2. If a handler reads a style from another chunk, that value isn't in the cache key
|
|
29
|
+
* 3. Changing the cross-chunk style won't invalidate this chunk's cache
|
|
30
|
+
* 4. Result: stale CSS output or incorrect cache hits
|
|
31
|
+
*
|
|
32
|
+
* Example of a violation:
|
|
33
|
+
* ```
|
|
34
|
+
* // flowStyle.__lookupStyles = ['display', 'flow']
|
|
35
|
+
* // If 'display' is in DISPLAY chunk and 'flow' is in LAYOUT chunk:
|
|
36
|
+
* // - User sets { display: 'grid', flow: 'column' }
|
|
37
|
+
* // - LAYOUT chunk caches CSS with flow=column, display=grid
|
|
38
|
+
* // - User changes to { display: 'flex', flow: 'column' }
|
|
39
|
+
* // - LAYOUT chunk cache key unchanged (only has 'flow')
|
|
40
|
+
* // - Returns stale CSS computed with display=grid!
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* Before adding/moving styles, verify:
|
|
44
|
+
* 1. Find all handlers that use this style (grep for the style name in __lookupStyles)
|
|
45
|
+
* 2. Ensure ALL styles from each handler's __lookupStyles are in the same chunk
|
|
46
|
+
* ============================================================================
|
|
16
47
|
*/
|
|
17
48
|
import { isSelector } from '../pipeline/index.js';
|
|
18
49
|
// ============================================================================
|
|
@@ -27,15 +58,17 @@ export const APPEARANCE_CHUNK_STYLES = [
|
|
|
27
58
|
'opacity', // independent
|
|
28
59
|
'border', // borderStyle (independent)
|
|
29
60
|
'radius', // radiusStyle (independent)
|
|
30
|
-
'outline', // outlineStyle
|
|
31
|
-
'outlineOffset', //
|
|
61
|
+
'outline', // outlineStyle: outline ↔ outlineOffset
|
|
62
|
+
'outlineOffset', // outlineStyle: outline ↔ outlineOffset
|
|
32
63
|
'shadow', // shadowStyle (independent)
|
|
33
64
|
'fade', // fadeStyle (independent)
|
|
34
65
|
];
|
|
35
66
|
/**
|
|
36
67
|
* Font chunk - typography styles
|
|
37
|
-
*
|
|
38
|
-
*
|
|
68
|
+
*
|
|
69
|
+
* Handler dependencies (all styles in each handler MUST stay in this chunk):
|
|
70
|
+
* ⚠️ presetStyle: preset, fontSize, lineHeight, letterSpacing, textTransform,
|
|
71
|
+
* fontWeight, fontStyle, font
|
|
39
72
|
*/
|
|
40
73
|
export const FONT_CHUNK_STYLES = [
|
|
41
74
|
// All from presetStyle handler - MUST stay together
|
|
@@ -50,17 +83,19 @@ export const FONT_CHUNK_STYLES = [
|
|
|
50
83
|
// Independent text styles grouped for cohesion
|
|
51
84
|
'fontFamily', // independent alias (logical grouping with font styles)
|
|
52
85
|
'textAlign',
|
|
53
|
-
'whiteSpace',
|
|
54
86
|
'textDecoration',
|
|
55
|
-
'textOverflow',
|
|
56
87
|
'wordBreak',
|
|
57
88
|
'wordWrap',
|
|
58
89
|
'boldFontWeight',
|
|
59
90
|
];
|
|
60
91
|
/**
|
|
61
92
|
* Dimension chunk - sizing and spacing
|
|
62
|
-
*
|
|
63
|
-
*
|
|
93
|
+
*
|
|
94
|
+
* Handler dependencies (all styles in each handler MUST stay in this chunk):
|
|
95
|
+
* ⚠️ paddingStyle: padding, paddingTop/Right/Bottom/Left, paddingBlock/Inline
|
|
96
|
+
* ⚠️ marginStyle: margin, marginTop/Right/Bottom/Left, marginBlock/Inline
|
|
97
|
+
* ⚠️ widthStyle: width, minWidth, maxWidth
|
|
98
|
+
* ⚠️ heightStyle: height, minHeight, maxHeight
|
|
64
99
|
*/
|
|
65
100
|
export const DIMENSION_CHUNK_STYLES = [
|
|
66
101
|
// All from paddingStyle handler - MUST stay together
|
|
@@ -79,11 +114,12 @@ export const DIMENSION_CHUNK_STYLES = [
|
|
|
79
114
|
'marginLeft',
|
|
80
115
|
'marginBlock',
|
|
81
116
|
'marginInline',
|
|
82
|
-
//
|
|
83
|
-
'width',
|
|
84
|
-
'height', // heightStyle (independent)
|
|
117
|
+
// widthStyle handler - MUST stay together
|
|
118
|
+
'width',
|
|
85
119
|
'minWidth',
|
|
86
120
|
'maxWidth',
|
|
121
|
+
// heightStyle handler - MUST stay together
|
|
122
|
+
'height',
|
|
87
123
|
'minHeight',
|
|
88
124
|
'maxHeight',
|
|
89
125
|
'flexBasis',
|
|
@@ -92,19 +128,37 @@ export const DIMENSION_CHUNK_STYLES = [
|
|
|
92
128
|
'flex',
|
|
93
129
|
];
|
|
94
130
|
/**
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
131
|
+
* Display chunk - display mode, layout flow, text overflow, and scrollbar
|
|
132
|
+
*
|
|
133
|
+
* Handler dependencies (all styles in each handler MUST stay in this chunk):
|
|
134
|
+
* ⚠️ displayStyle: display, hide, textOverflow, overflow, whiteSpace
|
|
135
|
+
* ⚠️ flowStyle: display, flow
|
|
136
|
+
* ⚠️ gapStyle: display, flow, gap
|
|
137
|
+
* ⚠️ scrollbarStyle: scrollbar, overflow
|
|
99
138
|
*/
|
|
100
|
-
export const
|
|
101
|
-
//
|
|
102
|
-
'display',
|
|
103
|
-
'hide',
|
|
104
|
-
'
|
|
105
|
-
'
|
|
106
|
-
'
|
|
107
|
-
//
|
|
139
|
+
export const DISPLAY_CHUNK_STYLES = [
|
|
140
|
+
// displayStyle handler
|
|
141
|
+
'display',
|
|
142
|
+
'hide',
|
|
143
|
+
'textOverflow',
|
|
144
|
+
'overflow', // also used by scrollbarStyle
|
|
145
|
+
'whiteSpace',
|
|
146
|
+
// flowStyle handler (requires display)
|
|
147
|
+
'flow',
|
|
148
|
+
// gapStyle handler (requires display, flow)
|
|
149
|
+
'gap',
|
|
150
|
+
// scrollbarStyle handler (requires overflow)
|
|
151
|
+
'scrollbar',
|
|
152
|
+
'styledScrollbar', // styledScrollbarStyle (deprecated)
|
|
153
|
+
];
|
|
154
|
+
/**
|
|
155
|
+
* Layout chunk - flex/grid alignment and grid templates
|
|
156
|
+
*
|
|
157
|
+
* Note: flow and gap are in DISPLAY chunk due to handler dependencies
|
|
158
|
+
* (flowStyle and gapStyle both require 'display' prop).
|
|
159
|
+
*/
|
|
160
|
+
export const LAYOUT_CHUNK_STYLES = [
|
|
161
|
+
// Alignment styles (all independent handlers)
|
|
108
162
|
'placeItems',
|
|
109
163
|
'placeContent',
|
|
110
164
|
'alignItems',
|
|
@@ -116,6 +170,7 @@ export const CONTAINER_CHUNK_STYLES = [
|
|
|
116
170
|
'place', // placeStyle (independent)
|
|
117
171
|
'columnGap',
|
|
118
172
|
'rowGap',
|
|
173
|
+
// Grid template styles
|
|
119
174
|
'gridColumns',
|
|
120
175
|
'gridRows',
|
|
121
176
|
'gridTemplate',
|
|
@@ -125,20 +180,17 @@ export const CONTAINER_CHUNK_STYLES = [
|
|
|
125
180
|
'gridAutoRows',
|
|
126
181
|
];
|
|
127
182
|
/**
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
'scrollbar', // scrollbarStyle: scrollbar ↔ overflow
|
|
133
|
-
'overflow', // scrollbarStyle: scrollbar ↔ overflow
|
|
134
|
-
'styledScrollbar', // styledScrollbarStyle (independent, deprecated)
|
|
135
|
-
];
|
|
136
|
-
/**
|
|
137
|
-
* Position chunk - element positioning (all independent handlers)
|
|
183
|
+
* Position chunk - element positioning
|
|
184
|
+
*
|
|
185
|
+
* Handler dependencies (all styles in each handler MUST stay in this chunk):
|
|
186
|
+
* ⚠️ insetStyle: inset, insetBlock, insetInline, top, right, bottom, left
|
|
138
187
|
*/
|
|
139
188
|
export const POSITION_CHUNK_STYLES = [
|
|
140
189
|
'position',
|
|
141
|
-
|
|
190
|
+
// All from insetStyle handler - MUST stay together
|
|
191
|
+
'inset',
|
|
192
|
+
'insetBlock',
|
|
193
|
+
'insetInline',
|
|
142
194
|
'top',
|
|
143
195
|
'right',
|
|
144
196
|
'bottom',
|
|
@@ -165,8 +217,8 @@ export const CHUNK_NAMES = {
|
|
|
165
217
|
APPEARANCE: 'appearance',
|
|
166
218
|
FONT: 'font',
|
|
167
219
|
DIMENSION: 'dimension',
|
|
168
|
-
|
|
169
|
-
|
|
220
|
+
DISPLAY: 'display',
|
|
221
|
+
LAYOUT: 'layout',
|
|
170
222
|
POSITION: 'position',
|
|
171
223
|
MISC: 'misc',
|
|
172
224
|
};
|
|
@@ -189,11 +241,11 @@ function populateStyleToChunkMap() {
|
|
|
189
241
|
for (const style of DIMENSION_CHUNK_STYLES) {
|
|
190
242
|
STYLE_TO_CHUNK.set(style, CHUNK_NAMES.DIMENSION);
|
|
191
243
|
}
|
|
192
|
-
for (const style of
|
|
193
|
-
STYLE_TO_CHUNK.set(style, CHUNK_NAMES.
|
|
244
|
+
for (const style of DISPLAY_CHUNK_STYLES) {
|
|
245
|
+
STYLE_TO_CHUNK.set(style, CHUNK_NAMES.DISPLAY);
|
|
194
246
|
}
|
|
195
|
-
for (const style of
|
|
196
|
-
STYLE_TO_CHUNK.set(style, CHUNK_NAMES.
|
|
247
|
+
for (const style of LAYOUT_CHUNK_STYLES) {
|
|
248
|
+
STYLE_TO_CHUNK.set(style, CHUNK_NAMES.LAYOUT);
|
|
197
249
|
}
|
|
198
250
|
for (const style of POSITION_CHUNK_STYLES) {
|
|
199
251
|
STYLE_TO_CHUNK.set(style, CHUNK_NAMES.POSITION);
|
|
@@ -212,8 +264,8 @@ const CHUNK_ORDER = [
|
|
|
212
264
|
CHUNK_NAMES.APPEARANCE,
|
|
213
265
|
CHUNK_NAMES.FONT,
|
|
214
266
|
CHUNK_NAMES.DIMENSION,
|
|
215
|
-
CHUNK_NAMES.
|
|
216
|
-
CHUNK_NAMES.
|
|
267
|
+
CHUNK_NAMES.DISPLAY,
|
|
268
|
+
CHUNK_NAMES.LAYOUT,
|
|
217
269
|
CHUNK_NAMES.POSITION,
|
|
218
270
|
CHUNK_NAMES.MISC,
|
|
219
271
|
CHUNK_NAMES.SUBCOMPONENTS,
|
|
@@ -240,8 +292,8 @@ export function categorizeStyleKeys(styles) {
|
|
|
240
292
|
const keys = Object.keys(styles);
|
|
241
293
|
for (const key of keys) {
|
|
242
294
|
// Skip the $ helper key (used for selector combinators)
|
|
243
|
-
// Skip @keyframes (processed separately in useStyles)
|
|
244
|
-
if (key === '$' || key === '@keyframes') {
|
|
295
|
+
// Skip @keyframes and @properties (processed separately in useStyles)
|
|
296
|
+
if (key === '$' || key === '@keyframes' || key === '@properties') {
|
|
245
297
|
continue;
|
|
246
298
|
}
|
|
247
299
|
if (isSelector(key)) {
|
package/es/tasty/chunks/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
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
|
-
export { APPEARANCE_CHUNK_STYLES, FONT_CHUNK_STYLES, DIMENSION_CHUNK_STYLES,
|
|
8
|
+
export { APPEARANCE_CHUNK_STYLES, FONT_CHUNK_STYLES, DIMENSION_CHUNK_STYLES, DISPLAY_CHUNK_STYLES, LAYOUT_CHUNK_STYLES, POSITION_CHUNK_STYLES, CHUNK_NAMES, STYLE_TO_CHUNK, categorizeStyleKeys, } from './definitions.js';
|
|
9
9
|
export { generateChunkCacheKey } from './cacheKey.js';
|
|
10
10
|
export { renderStylesForChunk } from './renderChunk.js';
|
|
11
11
|
|
package/es/tasty/config.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
|
|
|
@@ -18,9 +18,11 @@
|
|
|
18
18
|
* reconfigure will emit a warning and be ignored.
|
|
19
19
|
*/
|
|
20
20
|
import { StyleInjector } from './injector/injector.js';
|
|
21
|
+
import { clearPipelineCache } from './pipeline/index.js';
|
|
21
22
|
import { setGlobalPredefinedStates } from './states/index.js';
|
|
23
|
+
import { normalizeHandlerDefinition, registerHandler, resetHandlers, } from './styles/predefined.js';
|
|
22
24
|
import { isDevEnv } from './utils/isDevEnv.js';
|
|
23
|
-
import { CUSTOM_UNITS, getGlobalFuncs, getGlobalParser } from './utils/styles.js';
|
|
25
|
+
import { CUSTOM_UNITS, getGlobalFuncs, getGlobalParser, resetGlobalPredefinedTokens, setGlobalPredefinedTokens, } from './utils/styles.js';
|
|
24
26
|
// Warnings tracking to avoid duplicates
|
|
25
27
|
const emittedWarnings = new Set();
|
|
26
28
|
const devMode = isDevEnv();
|
|
@@ -42,6 +44,8 @@ let stylesGenerated = false;
|
|
|
42
44
|
let currentConfig = null;
|
|
43
45
|
// Global keyframes storage (null = no keyframes configured, empty object checked via hasGlobalKeyframes)
|
|
44
46
|
let globalKeyframes = null;
|
|
47
|
+
// Global properties storage (null = no properties configured)
|
|
48
|
+
let globalProperties = null;
|
|
45
49
|
// Global injector instance key
|
|
46
50
|
const GLOBAL_INJECTOR_KEY = '__TASTY_GLOBAL_INJECTOR__';
|
|
47
51
|
/**
|
|
@@ -94,9 +98,20 @@ function createDefaultConfig(isTest) {
|
|
|
94
98
|
/**
|
|
95
99
|
* Mark that styles have been generated (called by injector on first inject)
|
|
96
100
|
* This locks the configuration - no further changes allowed.
|
|
101
|
+
* Also injects any global properties that were configured.
|
|
97
102
|
*/
|
|
98
103
|
export function markStylesGenerated() {
|
|
104
|
+
if (stylesGenerated)
|
|
105
|
+
return; // Already marked, skip
|
|
99
106
|
stylesGenerated = true;
|
|
107
|
+
// Inject global properties if any were configured
|
|
108
|
+
// Properties are permanent and only need to be injected once
|
|
109
|
+
if (globalProperties && Object.keys(globalProperties).length > 0) {
|
|
110
|
+
const injector = getGlobalInjector();
|
|
111
|
+
for (const [token, definition] of Object.entries(globalProperties)) {
|
|
112
|
+
injector.property(token, definition);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
100
115
|
}
|
|
101
116
|
/**
|
|
102
117
|
* Check if styles have been generated (configuration is locked)
|
|
@@ -140,6 +155,35 @@ function setGlobalKeyframes(keyframes) {
|
|
|
140
155
|
}
|
|
141
156
|
globalKeyframes = keyframes;
|
|
142
157
|
}
|
|
158
|
+
// ============================================================================
|
|
159
|
+
// Global Properties Management
|
|
160
|
+
// ============================================================================
|
|
161
|
+
/**
|
|
162
|
+
* Check if any global properties are configured.
|
|
163
|
+
* Fast path: returns false if no properties were ever set.
|
|
164
|
+
*/
|
|
165
|
+
export function hasGlobalProperties() {
|
|
166
|
+
return globalProperties !== null && Object.keys(globalProperties).length > 0;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Get global properties configuration.
|
|
170
|
+
* Returns null if no properties configured (fast path for zero-overhead).
|
|
171
|
+
*/
|
|
172
|
+
export function getGlobalProperties() {
|
|
173
|
+
return globalProperties;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Set global properties (called from configure).
|
|
177
|
+
* Internal use only.
|
|
178
|
+
*/
|
|
179
|
+
function setGlobalProperties(properties) {
|
|
180
|
+
if (stylesGenerated) {
|
|
181
|
+
warnOnce('properties-after-styles', `[Tasty] Cannot update properties after styles have been generated.\n` +
|
|
182
|
+
`The new properties will be ignored.`);
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
globalProperties = properties;
|
|
186
|
+
}
|
|
143
187
|
/**
|
|
144
188
|
* Check if configuration is locked (styles have been generated)
|
|
145
189
|
*/
|
|
@@ -180,6 +224,8 @@ export function configure(config = {}) {
|
|
|
180
224
|
let mergedStates = {};
|
|
181
225
|
let mergedUnits = {};
|
|
182
226
|
let mergedFuncs = {};
|
|
227
|
+
let mergedHandlers = {};
|
|
228
|
+
let mergedTokens = {};
|
|
183
229
|
// Process plugins in order
|
|
184
230
|
if (config.plugins) {
|
|
185
231
|
for (const plugin of config.plugins) {
|
|
@@ -192,6 +238,12 @@ export function configure(config = {}) {
|
|
|
192
238
|
if (plugin.funcs) {
|
|
193
239
|
mergedFuncs = { ...mergedFuncs, ...plugin.funcs };
|
|
194
240
|
}
|
|
241
|
+
if (plugin.handlers) {
|
|
242
|
+
mergedHandlers = { ...mergedHandlers, ...plugin.handlers };
|
|
243
|
+
}
|
|
244
|
+
if (plugin.tokens) {
|
|
245
|
+
mergedTokens = { ...mergedTokens, ...plugin.tokens };
|
|
246
|
+
}
|
|
195
247
|
}
|
|
196
248
|
}
|
|
197
249
|
// Direct config overrides plugins
|
|
@@ -204,6 +256,12 @@ export function configure(config = {}) {
|
|
|
204
256
|
if (config.funcs) {
|
|
205
257
|
mergedFuncs = { ...mergedFuncs, ...config.funcs };
|
|
206
258
|
}
|
|
259
|
+
if (config.handlers) {
|
|
260
|
+
mergedHandlers = { ...mergedHandlers, ...config.handlers };
|
|
261
|
+
}
|
|
262
|
+
if (config.tokens) {
|
|
263
|
+
mergedTokens = { ...mergedTokens, ...config.tokens };
|
|
264
|
+
}
|
|
207
265
|
// Handle predefined states
|
|
208
266
|
if (Object.keys(mergedStates).length > 0) {
|
|
209
267
|
setGlobalPredefinedStates(mergedStates);
|
|
@@ -230,8 +288,30 @@ export function configure(config = {}) {
|
|
|
230
288
|
if (config.keyframes) {
|
|
231
289
|
setGlobalKeyframes(config.keyframes);
|
|
232
290
|
}
|
|
233
|
-
//
|
|
234
|
-
|
|
291
|
+
// Handle properties
|
|
292
|
+
if (config.properties) {
|
|
293
|
+
setGlobalProperties(config.properties);
|
|
294
|
+
}
|
|
295
|
+
// Handle custom handlers
|
|
296
|
+
if (Object.keys(mergedHandlers).length > 0) {
|
|
297
|
+
for (const [name, definition] of Object.entries(mergedHandlers)) {
|
|
298
|
+
const handler = normalizeHandlerDefinition(name, definition);
|
|
299
|
+
registerHandler(handler);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
// Handle predefined tokens
|
|
303
|
+
// Note: Tokens are processed by the classifier, not here.
|
|
304
|
+
// We just store the raw values; the classifier will process them when encountered.
|
|
305
|
+
if (Object.keys(mergedTokens).length > 0) {
|
|
306
|
+
// Store tokens (keys are normalized to lowercase by setGlobalPredefinedTokens)
|
|
307
|
+
const processedTokens = {};
|
|
308
|
+
for (const [key, value] of Object.entries(mergedTokens)) {
|
|
309
|
+
processedTokens[key] = String(value);
|
|
310
|
+
}
|
|
311
|
+
setGlobalPredefinedTokens(processedTokens);
|
|
312
|
+
}
|
|
313
|
+
// Create config without states, parser options, plugins, keyframes, properties, handlers, and tokens (handled separately)
|
|
314
|
+
const { states: _states, parserCacheSize: _parserCacheSize, units: _units, funcs: _funcs, plugins: _plugins, keyframes: _keyframes, properties: _properties, handlers: _handlers, tokens: _tokens, ...injectorConfig } = config;
|
|
235
315
|
const fullConfig = {
|
|
236
316
|
...createDefaultConfig(),
|
|
237
317
|
...currentConfig,
|
|
@@ -272,6 +352,10 @@ export function resetConfig() {
|
|
|
272
352
|
stylesGenerated = false;
|
|
273
353
|
currentConfig = null;
|
|
274
354
|
globalKeyframes = null;
|
|
355
|
+
globalProperties = null;
|
|
356
|
+
resetGlobalPredefinedTokens();
|
|
357
|
+
resetHandlers();
|
|
358
|
+
clearPipelineCache();
|
|
275
359
|
emittedWarnings.clear();
|
|
276
360
|
const storage = typeof window !== 'undefined' ? window : globalThis;
|
|
277
361
|
delete storage[GLOBAL_INJECTOR_KEY];
|
package/es/tasty/debug.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
|
|
|
@@ -490,8 +490,8 @@ export const tastyDebug = {
|
|
|
490
490
|
CHUNK_NAMES.APPEARANCE,
|
|
491
491
|
CHUNK_NAMES.FONT,
|
|
492
492
|
CHUNK_NAMES.DIMENSION,
|
|
493
|
-
CHUNK_NAMES.
|
|
494
|
-
CHUNK_NAMES.
|
|
493
|
+
CHUNK_NAMES.DISPLAY,
|
|
494
|
+
CHUNK_NAMES.LAYOUT,
|
|
495
495
|
CHUNK_NAMES.POSITION,
|
|
496
496
|
CHUNK_NAMES.MISC,
|
|
497
497
|
CHUNK_NAMES.SUBCOMPONENTS,
|
|
@@ -816,8 +816,8 @@ export const tastyDebug = {
|
|
|
816
816
|
CHUNK_NAMES.APPEARANCE,
|
|
817
817
|
CHUNK_NAMES.FONT,
|
|
818
818
|
CHUNK_NAMES.DIMENSION,
|
|
819
|
-
CHUNK_NAMES.
|
|
820
|
-
CHUNK_NAMES.
|
|
819
|
+
CHUNK_NAMES.DISPLAY,
|
|
820
|
+
CHUNK_NAMES.LAYOUT,
|
|
821
821
|
CHUNK_NAMES.POSITION,
|
|
822
822
|
CHUNK_NAMES.MISC,
|
|
823
823
|
CHUNK_NAMES.SUBCOMPONENTS,
|
package/es/tasty/hooks/index.js
CHANGED
|
@@ -1,12 +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
|
export { useStyles } from './useStyles.js';
|
|
9
9
|
export { useGlobalStyles } from './useGlobalStyles.js';
|
|
10
10
|
export { useRawCSS } from './useRawCSS.js';
|
|
11
|
+
export { useKeyframes } from './useKeyframes.js';
|
|
12
|
+
export { useProperty } from './useProperty.js';
|
|
11
13
|
|
|
12
14
|
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license MIT
|
|
3
|
+
* author: Cube Dev Team
|
|
4
|
+
* @cube-dev/ui-kit v0.101.0
|
|
5
|
+
* Released under the MIT license.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { useInsertionEffect, useMemo, useRef } from 'react';
|
|
9
|
+
import { keyframes } from '../injector/index.js';
|
|
10
|
+
// Implementation
|
|
11
|
+
export function useKeyframes(stepsOrFactory, depsOrOptions, options) {
|
|
12
|
+
// Detect which overload is being used
|
|
13
|
+
const isFactory = typeof stepsOrFactory === 'function';
|
|
14
|
+
// Parse arguments based on overload
|
|
15
|
+
const deps = isFactory && Array.isArray(depsOrOptions) ? depsOrOptions : undefined;
|
|
16
|
+
const opts = isFactory
|
|
17
|
+
? options
|
|
18
|
+
: depsOrOptions;
|
|
19
|
+
// Memoize the keyframes steps to get a stable reference
|
|
20
|
+
const stepsData = useMemo(() => {
|
|
21
|
+
const steps = isFactory
|
|
22
|
+
? stepsOrFactory()
|
|
23
|
+
: stepsOrFactory;
|
|
24
|
+
if (!steps || Object.keys(steps).length === 0) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
return steps;
|
|
28
|
+
}, isFactory ? deps ?? [] : [stepsOrFactory]);
|
|
29
|
+
// Store keyframes results for cleanup - we need to track both the render-time
|
|
30
|
+
// injection (for the name) and the effect-time injection (for Strict Mode safety)
|
|
31
|
+
const renderResultRef = useRef(null);
|
|
32
|
+
const effectResultRef = useRef(null);
|
|
33
|
+
// Inject keyframes during render to ensure the animation name is available
|
|
34
|
+
// immediately. The keyframes() function uses reference counting internally,
|
|
35
|
+
// so multiple calls with the same content are deduplicated.
|
|
36
|
+
const name = useMemo(() => {
|
|
37
|
+
// Dispose previous render-time result if deps changed
|
|
38
|
+
renderResultRef.current?.dispose();
|
|
39
|
+
renderResultRef.current = null;
|
|
40
|
+
if (!stepsData) {
|
|
41
|
+
return '';
|
|
42
|
+
}
|
|
43
|
+
// Inject keyframes synchronously
|
|
44
|
+
const result = keyframes(stepsData, {
|
|
45
|
+
name: opts?.name,
|
|
46
|
+
root: opts?.root,
|
|
47
|
+
});
|
|
48
|
+
renderResultRef.current = result;
|
|
49
|
+
return result.toString();
|
|
50
|
+
}, [stepsData, opts?.name, opts?.root]);
|
|
51
|
+
// Handle injection and cleanup in useInsertionEffect to properly support
|
|
52
|
+
// React 18+ Strict Mode double-invocation (mount → unmount → mount).
|
|
53
|
+
// The effect setup re-injects the keyframes if cleanup was called, ensuring
|
|
54
|
+
// the CSS exists after Strict Mode remounts.
|
|
55
|
+
useInsertionEffect(() => {
|
|
56
|
+
// Dispose previous effect-time result
|
|
57
|
+
effectResultRef.current?.dispose();
|
|
58
|
+
effectResultRef.current = null;
|
|
59
|
+
// Re-inject keyframes. This ensures the CSS exists after Strict Mode cleanup.
|
|
60
|
+
// The keyframes() function uses reference counting, so this is idempotent
|
|
61
|
+
// if the CSS wasn't disposed.
|
|
62
|
+
if (stepsData) {
|
|
63
|
+
const result = keyframes(stepsData, {
|
|
64
|
+
name: opts?.name,
|
|
65
|
+
root: opts?.root,
|
|
66
|
+
});
|
|
67
|
+
effectResultRef.current = result;
|
|
68
|
+
}
|
|
69
|
+
// Cleanup on unmount or when dependencies change.
|
|
70
|
+
// Dispose both the effect-time and render-time results to properly
|
|
71
|
+
// decrement the reference count.
|
|
72
|
+
return () => {
|
|
73
|
+
effectResultRef.current?.dispose();
|
|
74
|
+
effectResultRef.current = null;
|
|
75
|
+
renderResultRef.current?.dispose();
|
|
76
|
+
renderResultRef.current = null;
|
|
77
|
+
};
|
|
78
|
+
}, [stepsData, opts?.name, opts?.root]);
|
|
79
|
+
return name;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license MIT
|
|
3
|
+
* author: Cube Dev Team
|
|
4
|
+
* @cube-dev/ui-kit v0.101.0
|
|
5
|
+
* Released under the MIT license.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { useInsertionEffect, useMemo } from 'react';
|
|
9
|
+
import { getGlobalInjector } from '../config.js';
|
|
10
|
+
/**
|
|
11
|
+
* Hook to register a CSS @property custom property.
|
|
12
|
+
* This enables advanced features like animating custom properties.
|
|
13
|
+
*
|
|
14
|
+
* Note: @property rules are global and persistent once defined.
|
|
15
|
+
* The hook ensures the property is only registered once per root.
|
|
16
|
+
*
|
|
17
|
+
* Accepts tasty token syntax for the property name:
|
|
18
|
+
* - `$name` → defines `--name`
|
|
19
|
+
* - `#name` → defines `--name-color` (auto-sets syntax: '<color>', defaults initialValue: 'transparent')
|
|
20
|
+
* - `--name` → defines `--name` (legacy format)
|
|
21
|
+
*
|
|
22
|
+
* @param name - The property token ($name, #name) or CSS property name (--name)
|
|
23
|
+
* @param options - Property configuration
|
|
24
|
+
*
|
|
25
|
+
* @example Basic property with token syntax
|
|
26
|
+
* ```tsx
|
|
27
|
+
* function Spinner() {
|
|
28
|
+
* useProperty('$rotation', {
|
|
29
|
+
* syntax: '<angle>',
|
|
30
|
+
* inherits: false,
|
|
31
|
+
* initialValue: '0deg',
|
|
32
|
+
* });
|
|
33
|
+
*
|
|
34
|
+
* return <div className="spinner" />;
|
|
35
|
+
* }
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* @example Color property with token syntax (auto-sets syntax)
|
|
39
|
+
* ```tsx
|
|
40
|
+
* function MyComponent() {
|
|
41
|
+
* useProperty('#theme', {
|
|
42
|
+
* initialValue: 'red', // syntax: '<color>' is auto-set
|
|
43
|
+
* });
|
|
44
|
+
*
|
|
45
|
+
* // Now --theme-color can be animated with CSS transitions
|
|
46
|
+
* return <div style={{ '--theme-color': 'blue' } as React.CSSProperties}>Colored</div>;
|
|
47
|
+
* }
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* @example Legacy format (still supported)
|
|
51
|
+
* ```tsx
|
|
52
|
+
* function ResizableBox() {
|
|
53
|
+
* useProperty('--box-size', {
|
|
54
|
+
* syntax: '<length>',
|
|
55
|
+
* initialValue: '100px',
|
|
56
|
+
* });
|
|
57
|
+
*
|
|
58
|
+
* return <div style={{ width: 'var(--box-size)' }} />;
|
|
59
|
+
* }
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export function useProperty(name, options) {
|
|
63
|
+
// Memoize the options to create a stable dependency
|
|
64
|
+
const optionsKey = useMemo(() => {
|
|
65
|
+
if (!options)
|
|
66
|
+
return '';
|
|
67
|
+
return JSON.stringify({
|
|
68
|
+
syntax: options.syntax,
|
|
69
|
+
inherits: options.inherits,
|
|
70
|
+
initialValue: options.initialValue,
|
|
71
|
+
});
|
|
72
|
+
}, [options?.syntax, options?.inherits, options?.initialValue]);
|
|
73
|
+
useInsertionEffect(() => {
|
|
74
|
+
if (!name) {
|
|
75
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
76
|
+
console.warn(`[Tasty] useProperty: property name is required`);
|
|
77
|
+
}
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const injector = getGlobalInjector();
|
|
81
|
+
// Check if already defined (properties are persistent)
|
|
82
|
+
// The injector handles token parsing internally
|
|
83
|
+
if (injector.isPropertyDefined(name, { root: options?.root })) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
// Register the property
|
|
87
|
+
// The injector handles $name, #name, --name parsing and auto-sets
|
|
88
|
+
// syntax for color tokens
|
|
89
|
+
injector.property(name, {
|
|
90
|
+
syntax: options?.syntax,
|
|
91
|
+
inherits: options?.inherits,
|
|
92
|
+
initialValue: options?.initialValue,
|
|
93
|
+
root: options?.root,
|
|
94
|
+
});
|
|
95
|
+
// No cleanup - @property rules are global and persistent
|
|
96
|
+
// Re-registering is a no-op anyway due to the isPropertyDefined check
|
|
97
|
+
}, [name, optionsKey, options?.root]);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
|