@cube-dev/ui-kit 0.98.8 → 0.99.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 +44 -0
- package/es/_internal/hooks/index.js +10 -10
- package/es/_internal/hooks/use-chained-callback.js +2 -2
- package/es/_internal/hooks/use-debounced-value.js +1 -1
- package/es/_internal/hooks/use-deprecation-warning.js +2 -2
- package/es/_internal/hooks/use-effect-once.js +1 -1
- package/es/_internal/hooks/use-event.js +2 -2
- package/es/_internal/hooks/use-is-first-render.js +1 -1
- package/es/_internal/hooks/use-sync-ref.js +2 -2
- package/es/_internal/hooks/use-timer/index.js +3 -3
- package/es/_internal/hooks/use-timer/timer.js +1 -1
- package/es/_internal/hooks/use-timer/use-timer.js +3 -3
- package/es/_internal/hooks/use-update-effect.js +2 -2
- package/es/_internal/hooks/use-warn.js +3 -3
- package/es/_internal/index.js +2 -2
- package/es/components/Block.js +2 -2
- package/es/components/CollectionItem.js +3 -3
- package/es/components/GlobalStyles.js +56 -65
- package/es/components/GridProvider.js +4 -4
- package/es/components/HiddenInput.js +2 -2
- package/es/components/OpenTrasition.js +1 -1
- package/es/components/Root.js +22 -64
- package/es/components/actions/Action/Action.js +3 -3
- package/es/components/actions/Button/Button.js +12 -12
- package/es/components/actions/Button/index.js +2 -2
- package/es/components/actions/ButtonGroup/ButtonGroup.js +4 -4
- package/es/components/actions/CommandMenu/CommandMenu.js +11 -11
- package/es/components/actions/CommandMenu/index.js +2 -2
- package/es/components/actions/CommandMenu/styled.js +2 -2
- package/es/components/actions/ItemAction/ItemAction.js +9 -9
- package/es/components/actions/ItemAction/index.js +2 -2
- package/es/components/actions/ItemActionContext.js +1 -1
- package/es/components/actions/ItemButton/ItemButton.js +9 -9
- package/es/components/actions/ItemButton/index.js +2 -2
- package/es/components/actions/Link/Link.js +2 -2
- package/es/components/actions/Menu/Menu.js +10 -10
- package/es/components/actions/Menu/MenuItem.js +7 -7
- package/es/components/actions/Menu/MenuSection.js +4 -4
- package/es/components/actions/Menu/MenuTrigger.js +6 -6
- package/es/components/actions/Menu/SubMenuTrigger.js +6 -6
- 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 +10 -10
- package/es/components/actions/Menu/styled.js +5 -5
- package/es/components/actions/index.js +13 -13
- package/es/components/actions/use-action.js +7 -7
- package/es/components/actions/use-anchored-menu.js +6 -6
- package/es/components/actions/use-context-menu.js +6 -6
- package/es/components/content/ActiveZone/ActiveZone.js +4 -4
- package/es/components/content/Alert/Alert.js +4 -4
- package/es/components/content/Alert/index.js +2 -2
- package/es/components/content/Alert/types.js +1 -1
- package/es/components/content/Alert/use-alert.js +3 -3
- package/es/components/content/Avatar/Avatar.js +2 -2
- package/es/components/content/Badge/Badge.js +4 -4
- package/es/components/content/Card/Card.js +2 -2
- package/es/components/content/Content.js +3 -3
- package/es/components/content/CopyPasteBlock/CopyPasteBlock.js +8 -8
- package/es/components/content/CopyPasteBlock/index.js +2 -2
- package/es/components/content/CopySnippet/CopySnippet.js +9 -9
- package/es/components/content/CopySnippet/index.js +2 -2
- package/es/components/content/Disclosure/Disclosure.js +6 -6
- package/es/components/content/Disclosure/index.js +2 -2
- package/es/components/content/Divider.js +3 -3
- package/es/components/content/Footer.js +3 -3
- package/es/components/content/Header.js +3 -3
- package/es/components/content/HotKeys/HotKeys.js +5 -5
- package/es/components/content/HotKeys/index.js +2 -2
- package/es/components/content/Item/Item.js +25 -20
- package/es/components/content/Item/index.js +3 -3
- package/es/components/content/ItemBadge/ItemBadge.js +8 -8
- package/es/components/content/ItemBadge/index.js +2 -2
- package/es/components/content/Layout/GridLayout.js +13 -13
- package/es/components/content/Layout/Layout.js +7 -6
- package/es/components/content/Layout/LayoutBlock.js +4 -3
- package/es/components/content/Layout/LayoutCenter.js +3 -3
- package/es/components/content/Layout/LayoutContainer.js +4 -4
- package/es/components/content/Layout/LayoutContent.js +6 -5
- package/es/components/content/Layout/LayoutContext.js +1 -1
- package/es/components/content/Layout/LayoutFlex.js +4 -3
- package/es/components/content/Layout/LayoutFooter.js +4 -3
- package/es/components/content/Layout/LayoutGrid.js +4 -3
- package/es/components/content/Layout/LayoutHeader.js +8 -7
- package/es/components/content/Layout/LayoutPane.js +8 -7
- package/es/components/content/Layout/LayoutPanel.js +10 -9
- package/es/components/content/Layout/LayoutPanelHeader.js +7 -7
- package/es/components/content/Layout/LayoutToolbar.js +4 -3
- package/es/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
- package/es/components/content/Layout/index.js +16 -16
- package/es/components/content/Layout/utils.js +1 -1
- package/es/components/content/List/SectionHeading.js +3 -3
- package/es/components/content/List/index.js +2 -2
- package/es/components/content/Paragraph.js +3 -3
- package/es/components/content/Placeholder/Placeholder.js +2 -2
- package/es/components/content/PrismCode/PrismCode.js +7 -7
- package/es/components/content/PrismCode/prismSetup.js +1 -1
- package/es/components/content/PrismDiffCode/PrismDiffCode.js +2 -2
- package/es/components/content/Result/Result.js +4 -4
- package/es/components/content/Skeleton/Skeleton.js +5 -5
- package/es/components/content/Tag/Tag.js +4 -4
- package/es/components/content/Text.js +3 -3
- package/es/components/content/TextItem/TextItem.js +5 -5
- package/es/components/content/TextItem/index.js +2 -2
- package/es/components/content/Title.js +4 -4
- package/es/components/content/highlightText.js +2 -2
- package/es/components/content/use-auto-tooltip.js +2 -2
- package/es/components/fields/Checkbox/Checkbox.js +12 -12
- package/es/components/fields/Checkbox/CheckboxGroup.js +7 -7
- package/es/components/fields/Checkbox/context.js +1 -1
- package/es/components/fields/Checkbox/index.js +3 -3
- package/es/components/fields/ComboBox/ComboBox.js +18 -18
- package/es/components/fields/ComboBox/index.js +2 -2
- package/es/components/fields/DatePicker/DateInput.js +10 -10
- package/es/components/fields/DatePicker/DateInputBase.js +6 -6
- package/es/components/fields/DatePicker/DatePicker.js +14 -14
- package/es/components/fields/DatePicker/DatePickerButton.js +4 -4
- package/es/components/fields/DatePicker/DatePickerElement.js +3 -3
- package/es/components/fields/DatePicker/DatePickerInput.js +5 -5
- package/es/components/fields/DatePicker/DatePickerSegment.js +2 -2
- package/es/components/fields/DatePicker/DateRangePicker.js +15 -15
- package/es/components/fields/DatePicker/DateRangeSeparatedPicker.js +15 -15
- package/es/components/fields/DatePicker/TimeInput.js +9 -9
- package/es/components/fields/DatePicker/index.js +8 -8
- 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 +6 -6
- package/es/components/fields/FilterListBox/FilterListBox.js +10 -10
- package/es/components/fields/FilterListBox/index.js +2 -2
- package/es/components/fields/FilterPicker/FilterPicker.js +14 -14
- package/es/components/fields/FilterPicker/index.js +2 -2
- package/es/components/fields/Input/Input.js +6 -6
- package/es/components/fields/Input/index.js +2 -2
- package/es/components/fields/ListBox/ListBox.js +14 -14
- package/es/components/fields/ListBox/index.js +2 -2
- package/es/components/fields/NumberInput/NumberInput.js +8 -8
- package/es/components/fields/NumberInput/StepButton.js +4 -4
- package/es/components/fields/PasswordInput/PasswordInput.js +8 -8
- package/es/components/fields/Picker/Picker.js +13 -13
- package/es/components/fields/Picker/index.js +2 -2
- package/es/components/fields/RadioGroup/Radio.js +10 -10
- package/es/components/fields/RadioGroup/RadioGroup.js +7 -7
- package/es/components/fields/RadioGroup/context.js +1 -1
- package/es/components/fields/RadioGroup/index.js +3 -3
- package/es/components/fields/SearchInput/SearchInput.js +8 -8
- package/es/components/fields/SearchInput/index.js +2 -2
- package/es/components/fields/Select/Select.js +20 -20
- package/es/components/fields/Select/index.js +2 -2
- package/es/components/fields/Slider/Gradation.js +2 -2
- package/es/components/fields/Slider/Header.js +1 -1
- package/es/components/fields/Slider/RangeSlider.js +5 -5
- package/es/components/fields/Slider/Slider.js +7 -7
- package/es/components/fields/Slider/SliderBase.js +6 -6
- package/es/components/fields/Slider/SliderInput.js +2 -2
- package/es/components/fields/Slider/SliderThumb.js +3 -3
- package/es/components/fields/Slider/SliderTrack.js +2 -2
- package/es/components/fields/Slider/elements.js +2 -2
- package/es/components/fields/Slider/index.js +4 -4
- package/es/components/fields/Slider/types.js +1 -1
- package/es/components/fields/Switch/Switch.js +11 -11
- package/es/components/fields/Switch/index.js +2 -2
- package/es/components/fields/TextArea/TextArea.js +7 -7
- package/es/components/fields/TextArea/index.js +2 -2
- package/es/components/fields/TextInput/TextInput.js +6 -6
- package/es/components/fields/TextInput/TextInputBase.js +9 -9
- package/es/components/fields/TextInput/index.js +3 -3
- package/es/components/fields/TextInputMapper/TextInputMapper.js +14 -14
- package/es/components/fields/TextInputMapper/index.js +2 -2
- package/es/components/fields/index.js +20 -20
- package/es/components/form/FieldWrapper/FieldWrapper.js +9 -9
- package/es/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
- package/es/components/form/FieldWrapper/index.js +4 -4
- package/es/components/form/FieldWrapper/types.js +1 -1
- package/es/components/form/Form/Field.js +6 -6
- package/es/components/form/Form/Form.js +6 -6
- package/es/components/form/Form/ResetButton/ResetButton.js +6 -6
- package/es/components/form/Form/ResetButton/index.js +2 -2
- package/es/components/form/Form/SubmitButton/SubmitButton.js +4 -4
- package/es/components/form/Form/SubmitButton/index.js +2 -2
- package/es/components/form/Form/SubmitError.js +3 -3
- package/es/components/form/Form/index.js +11 -11
- package/es/components/form/Form/types.js +1 -1
- package/es/components/form/Form/use-field/index.js +4 -4
- package/es/components/form/Form/use-field/types.js +1 -1
- package/es/components/form/Form/use-field/use-field-props.js +6 -6
- package/es/components/form/Form/use-field/use-field.js +4 -4
- package/es/components/form/Form/use-form.js +3 -3
- package/es/components/form/Form/validation.js +1 -1
- package/es/components/form/Label.js +3 -3
- package/es/components/form/index.js +5 -5
- package/es/components/form/wrapper.js +3 -3
- package/es/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
- package/es/components/helpers/DisplayTransition/index.js +2 -2
- package/es/components/helpers/IconSwitch/IconSwitch.js +3 -3
- package/es/components/helpers/index.js +3 -3
- package/es/components/layout/Flex.js +2 -2
- package/es/components/layout/Flow.js +2 -2
- package/es/components/layout/Grid.js +2 -2
- package/es/components/layout/Panel.js +2 -2
- package/es/components/layout/Prefix.js +3 -3
- package/es/components/layout/ResizablePanel.js +5 -5
- package/es/components/layout/Space.js +2 -2
- package/es/components/layout/Suffix.js +3 -3
- package/es/components/organisms/FileTabs/FileTabs.js +8 -8
- package/es/components/organisms/StatsCard/StatsCard.js +4 -4
- package/es/components/other/Calendar/Calendar.js +8 -8
- package/es/components/other/Calendar/CalendarCell.js +2 -2
- package/es/components/other/Calendar/CalendarGrid.js +3 -3
- package/es/components/other/Calendar/RangeCalendar.js +8 -8
- package/es/components/other/CloudLogo/CloudLogo.js +3 -3
- package/es/components/overlays/AlertDialog/AlertDialog.js +11 -10
- package/es/components/overlays/AlertDialog/AlertDialogApiProvider.js +2 -2
- package/es/components/overlays/AlertDialog/AlertDialogZone.js +4 -4
- package/es/components/overlays/AlertDialog/index.js +4 -4
- package/es/components/overlays/AlertDialog/types.js +1 -1
- package/es/components/overlays/Dialog/Dialog.js +7 -7
- package/es/components/overlays/Dialog/DialogContainer.js +3 -3
- package/es/components/overlays/Dialog/DialogForm.js +8 -8
- package/es/components/overlays/Dialog/DialogTrigger.js +4 -4
- package/es/components/overlays/Dialog/context.js +1 -1
- package/es/components/overlays/Dialog/index.js +6 -6
- package/es/components/overlays/Dialog/use-dialog-container.js +4 -4
- package/es/components/overlays/Modal/Modal.js +5 -5
- package/es/components/overlays/Modal/OpenTransition.js +1 -1
- package/es/components/overlays/Modal/Overlay.js +3 -3
- package/es/components/overlays/Modal/Popover.js +4 -4
- package/es/components/overlays/Modal/Tray.js +6 -6
- package/es/components/overlays/Modal/Underlay.js +2 -2
- package/es/components/overlays/Modal/index.js +7 -7
- package/es/components/overlays/Modal/types.js +1 -1
- package/es/components/overlays/NewNotifications/Bar/FloatingNotification.js +5 -5
- package/es/components/overlays/NewNotifications/Bar/NotificationsBar.js +7 -7
- package/es/components/overlays/NewNotifications/Bar/TransitionComponent.js +36 -34
- package/es/components/overlays/NewNotifications/Bar/index.js +2 -2
- package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogContext.js +1 -1
- package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.js +8 -8
- package/es/components/overlays/NewNotifications/Dialog/index.js +2 -2
- package/es/components/overlays/NewNotifications/Notification.js +4 -4
- package/es/components/overlays/NewNotifications/NotificationView/NotificationAction.js +5 -5
- package/es/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.js +4 -4
- package/es/components/overlays/NewNotifications/NotificationView/NotificationDescription.js +4 -4
- package/es/components/overlays/NewNotifications/NotificationView/NotificationFooter.js +3 -3
- package/es/components/overlays/NewNotifications/NotificationView/NotificationHeader.js +3 -3
- package/es/components/overlays/NewNotifications/NotificationView/NotificationIcon.js +4 -4
- package/es/components/overlays/NewNotifications/NotificationView/NotificationProvider.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationView.js +12 -12
- package/es/components/overlays/NewNotifications/NotificationView/index.js +3 -3
- 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 +5 -5
- package/es/components/overlays/NewNotifications/NotificationsContext/index.js +3 -3
- package/es/components/overlays/NewNotifications/NotificationsContext/use-notifications.js +2 -2
- package/es/components/overlays/NewNotifications/NotificationsList/NotificationsList.js +4 -4
- package/es/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.js +5 -5
- package/es/components/overlays/NewNotifications/NotificationsList/index.js +2 -2
- package/es/components/overlays/NewNotifications/NotificationsList/types.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/index.js +6 -6
- 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 +2 -2
- package/es/components/overlays/NewNotifications/hooks/use-notifications-list.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/use-notifications-observer.js +3 -3
- package/es/components/overlays/NewNotifications/index.js +7 -7
- package/es/components/overlays/NewNotifications/types.js +1 -1
- package/es/components/overlays/Notification/Notification.js +7 -7
- package/es/components/overlays/OverlayWrapper.js +2 -2
- package/es/components/overlays/Toasts/Toast.js +4 -4
- package/es/components/overlays/Toasts/index.js +3 -3
- package/es/components/overlays/Toasts/types.js +1 -1
- package/es/components/overlays/Toasts/use-toasts-api.js +2 -2
- package/es/components/overlays/Tooltip/Tooltip.js +4 -4
- package/es/components/overlays/Tooltip/TooltipProvider.js +3 -3
- package/es/components/overlays/Tooltip/TooltipTrigger.js +6 -6
- package/es/components/overlays/Tooltip/context.js +1 -1
- package/es/components/overlays/Tooltip/index.js +4 -4
- package/es/components/portal/Portal.js +2 -2
- package/es/components/portal/PortalProvider.js +1 -1
- package/es/components/portal/index.js +3 -3
- package/es/components/portal/types.js +1 -1
- package/es/components/portal/usePortal.js +2 -2
- package/es/components/shared/InvalidIcon.js +2 -2
- package/es/components/shared/ValidIcon.js +2 -2
- package/es/components/status/LoadingAnimation/LoadingAnimation.js +58 -114
- package/es/components/status/LoadingAnimation/index.js +2 -2
- package/es/components/status/Spin/Cube.js +95 -179
- package/es/components/status/Spin/InternalSpinner.js +5 -5
- package/es/components/status/Spin/Spin.js +4 -4
- package/es/components/status/Spin/SpinsContainer.js +28 -30
- package/es/components/status/Spin/index.js +2 -2
- package/es/components/status/Spin/types.js +1 -1
- package/es/components/status/index.js +3 -3
- package/es/data/item-themes.js +1 -1
- package/es/data/themes.js +1 -1
- package/es/icons/AdjustmentsHorizontalIcon.js +2 -2
- package/es/icons/AdjustmentsIcon.js +2 -2
- package/es/icons/AiIcon.js +2 -2
- package/es/icons/AreaChartIcon.js +2 -2
- package/es/icons/BackwardIcon.js +2 -2
- package/es/icons/BarChartIcon.js +2 -2
- package/es/icons/BellFilledIcon.js +2 -2
- package/es/icons/BellIcon.js +2 -2
- package/es/icons/BooleanIcon.js +2 -2
- package/es/icons/CalendarEditIcon.js +2 -2
- package/es/icons/CalendarIcon.js +2 -2
- package/es/icons/CaretDownIcon.js +2 -2
- package/es/icons/CaretUpIcon.js +2 -2
- package/es/icons/ChartAreaStackedIcon.js +2 -2
- package/es/icons/ChartAreaStackedPercentageIcon.js +2 -2
- package/es/icons/ChartBarGroupedHorizontalIcon.js +2 -2
- package/es/icons/ChartBarGroupedIcon.js +2 -2
- package/es/icons/ChartBarHorizontalIcon.js +2 -2
- package/es/icons/ChartBarLineIcon.js +2 -2
- package/es/icons/ChartBarStackedHorizontalIcon.js +2 -2
- package/es/icons/ChartBarStackedIcon.js +2 -2
- package/es/icons/ChartBarStackedPercentageHorizontalIcon.js +2 -2
- package/es/icons/ChartBarStackedPercentageIcon.js +2 -2
- package/es/icons/ChartBoxPlot2Icon.js +2 -2
- package/es/icons/ChartBoxPlotIcon.js +2 -2
- package/es/icons/ChartBubbleIcon.js +2 -2
- package/es/icons/ChartDonut2Icon.js +2 -2
- package/es/icons/ChartFunnelIcon.js +2 -2
- package/es/icons/ChartHeatmapIcon.js +2 -2
- package/es/icons/ChartKPIIcon.js +2 -2
- package/es/icons/ChartPie2Icon.js +2 -2
- package/es/icons/ChartScatterIcon.js +2 -2
- package/es/icons/CheckCircleFilledIcon.js +2 -2
- package/es/icons/CheckCircleIcon.js +2 -2
- package/es/icons/CheckIcon.js +2 -2
- package/es/icons/CircleFilledIcon.js +2 -2
- package/es/icons/ClearIcon.js +2 -2
- package/es/icons/CloseCircleFilledIcon.js +2 -2
- package/es/icons/CloseCircleIcon.js +2 -2
- package/es/icons/CloseIcon.js +2 -2
- package/es/icons/CodeIcon.js +2 -2
- package/es/icons/ColumnTotalIcon.js +2 -2
- package/es/icons/CopyIcon.js +2 -2
- package/es/icons/CountIcon.js +2 -2
- package/es/icons/CubeIcon.js +2 -2
- package/es/icons/CubePauseIcon.js +2 -2
- package/es/icons/CubePlayIcon.js +2 -2
- package/es/icons/CurrencyDollarIcon.js +2 -2
- package/es/icons/DangerIcon.js +2 -2
- package/es/icons/DashboardIcon.js +2 -2
- package/es/icons/DatabaseIcon.js +2 -2
- package/es/icons/DecimalDecreaseIcon.js +2 -2
- package/es/icons/DecimalIncreaseIcon.js +2 -2
- package/es/icons/DirectionIcon.js +3 -3
- package/es/icons/DonutIcon.js +2 -2
- package/es/icons/DownIcon.js +2 -2
- package/es/icons/EditIcon.js +2 -2
- package/es/icons/ExclamationCircleFilledIcon.js +2 -2
- package/es/icons/ExclamationCircleIcon.js +2 -2
- package/es/icons/ExclamationIcon.js +2 -2
- package/es/icons/EyeIcon.js +2 -2
- package/es/icons/EyeInvisibleIcon.js +2 -2
- package/es/icons/FilterIcon.js +2 -2
- package/es/icons/FolderFilledIcon.js +2 -2
- package/es/icons/FolderIcon.js +2 -2
- package/es/icons/FolderOpenFilledIcon.js +2 -2
- package/es/icons/FolderOpenIcon.js +2 -2
- package/es/icons/ForwardIcon.js +2 -2
- package/es/icons/HierarchyIcon.js +2 -2
- package/es/icons/HierarchyOpenIcon.js +2 -2
- package/es/icons/Icon.js +2 -2
- package/es/icons/InfoCircleIcon.js +2 -2
- package/es/icons/InfoIcon.js +2 -2
- package/es/icons/KeyIcon.js +2 -2
- package/es/icons/LeftIcon.js +2 -2
- package/es/icons/LineChartIcon.js +2 -2
- package/es/icons/LoadingIcon.js +2 -2
- package/es/icons/LockFilledIcon.js +2 -2
- package/es/icons/LockIcon.js +2 -2
- package/es/icons/MoreIcon.js +2 -2
- package/es/icons/NotAllowedIcon.js +2 -2
- package/es/icons/Number123Icon.js +2 -2
- package/es/icons/NumberIcon.js +2 -2
- package/es/icons/PauseCircleFilledIcon.js +2 -2
- package/es/icons/PauseCircleIcon.js +2 -2
- package/es/icons/PauseIcon.js +2 -2
- package/es/icons/PercentageIcon.js +2 -2
- package/es/icons/PieChartIcon.js +2 -2
- package/es/icons/PlayCircleIcon.js +2 -2
- package/es/icons/PlayIcon.js +2 -2
- package/es/icons/PlusIcon.js +2 -2
- package/es/icons/ProgressBarIcon.js +2 -2
- package/es/icons/ReloadIcon.js +2 -2
- package/es/icons/ReportIcon.js +2 -2
- package/es/icons/ReturnIcon.js +2 -2
- package/es/icons/RightIcon.js +2 -2
- package/es/icons/RowTotalsIcon.js +2 -2
- package/es/icons/SchemeIcon.js +2 -2
- package/es/icons/SearchIcon.js +2 -2
- package/es/icons/SemanticQueryIcon.js +12 -0
- package/es/icons/SettingsIcon.js +2 -2
- package/es/icons/ShieldFilledIcon.js +2 -2
- package/es/icons/ShieldIcon.js +2 -2
- package/es/icons/SlashIcon.js +2 -2
- package/es/icons/SparklesIcon.js +2 -2
- package/es/icons/SqlIcon.js +2 -2
- package/es/icons/StatsIcon.js +2 -2
- package/es/icons/StopIcon.js +2 -2
- package/es/icons/StringIcon.js +2 -2
- package/es/icons/SubtotalsIcon.js +2 -2
- package/es/icons/SwitchIcon.js +2 -2
- package/es/icons/TableIcon.js +2 -2
- package/es/icons/ThumbsDownIcon.js +2 -2
- package/es/icons/ThumbsUpIcon.js +2 -2
- package/es/icons/ThunderboltCrossedIcon.js +2 -2
- package/es/icons/ThunderboltFilledIcon.js +2 -2
- package/es/icons/ThunderboltIcon.js +2 -2
- package/es/icons/TimeIcon.js +2 -2
- package/es/icons/TrashIcon.js +2 -2
- package/es/icons/UnlockIcon.js +2 -2
- package/es/icons/UpIcon.js +2 -2
- package/es/icons/UserGroupIcon.js +2 -2
- package/es/icons/UserIcon.js +2 -2
- package/es/icons/UserLockIcon.js +2 -2
- package/es/icons/ViewIcon.js +2 -2
- package/es/icons/WarningFilledIcon.js +2 -2
- package/es/icons/WarningIcon.js +2 -2
- package/es/icons/index.js +129 -128
- package/es/icons/wrap-icon.js +2 -2
- package/es/index.js +73 -74
- package/es/provider.js +4 -10
- 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 +2 -2
- package/es/shared/form.js +1 -1
- package/es/shared/index.js +2 -2
- package/es/stories/Form.legacy-stories.js +4 -4
- package/es/stories/FormFieldArgs.js +2 -2
- package/es/stories/SimpleLayout.stories.js +2 -2
- package/es/stories/Tasty.stories.js +2 -2
- package/es/stories/components/ConfirmDeletionDialogForm.js +2 -2
- package/es/stories/components/DialogFormApp.js +3 -3
- package/es/stories/components/StyledButton.js +19 -15
- package/es/stories/lists/baseProps.js +2 -2
- package/es/stories/playground/PlaygroundEditor.js +89 -0
- package/es/stories/playground/PlaygroundLayout.js +16 -0
- package/es/stories/playground/PlaygroundOutput.js +92 -0
- package/es/stories/playground/PlaygroundPreview.js +91 -0
- package/es/stories/playground/components/Button.js +45 -0
- package/es/stories/playground/components/Card.js +20 -0
- package/es/stories/playground/components/ScrollProgress.js +17 -0
- package/es/stories/playground/examples.js +158 -0
- package/es/tasty/chunks/cacheKey.js +98 -0
- package/es/tasty/chunks/definitions.js +281 -0
- package/es/tasty/chunks/index.js +12 -0
- package/es/tasty/chunks/renderChunk.js +97 -0
- package/es/tasty/config.js +280 -0
- package/es/tasty/debug.js +195 -9
- package/es/tasty/hooks/index.js +12 -0
- package/es/tasty/hooks/useGlobalStyles.js +67 -0
- package/es/tasty/hooks/useRawCSS.js +40 -0
- package/es/tasty/hooks/useStyles.js +206 -0
- package/es/tasty/index.js +31 -17
- package/es/tasty/injector/index.js +34 -90
- package/es/tasty/injector/injector.js +81 -299
- package/es/tasty/injector/sheet-manager.js +138 -3
- package/es/tasty/injector/types.js +1 -1
- package/es/tasty/keyframes/index.js +301 -0
- package/es/tasty/parser/classify.js +8 -6
- package/es/tasty/parser/const.js +1 -1
- package/es/tasty/parser/lru.js +1 -1
- package/es/tasty/parser/parser.js +18 -5
- package/es/tasty/parser/tokenizer.js +1 -1
- package/es/tasty/parser/types.js +2 -1
- package/es/tasty/pipeline/conditions.js +426 -0
- package/es/tasty/pipeline/exclusive.js +311 -0
- package/es/tasty/pipeline/index.js +543 -0
- package/es/tasty/pipeline/materialize.js +1260 -0
- package/es/tasty/pipeline/parseStateKey.js +592 -0
- package/es/tasty/pipeline/simplify.js +898 -0
- package/es/tasty/plugins/index.js +26 -0
- package/es/tasty/plugins/okhsl-plugin.js +400 -0
- package/es/tasty/plugins/types.js +10 -0
- package/es/tasty/states/index.js +523 -0
- package/es/tasty/static/index.js +47 -0
- package/es/tasty/static/tastyStatic.js +55 -0
- package/es/tasty/static/types.js +34 -0
- package/es/tasty/styles/align.js +1 -1
- package/es/tasty/styles/border.js +2 -2
- package/es/tasty/styles/boxShadow.combinator.js +1 -1
- package/es/tasty/styles/color.js +3 -3
- package/es/tasty/styles/createStyle.js +3 -3
- package/es/tasty/styles/dimension.js +2 -2
- package/es/tasty/styles/display.js +1 -1
- package/es/tasty/styles/fade.js +2 -2
- package/es/tasty/styles/fill.js +11 -21
- package/es/tasty/styles/flow.js +1 -1
- package/es/tasty/styles/font.js +1 -1
- package/es/tasty/styles/fontStyle.js +1 -1
- package/es/tasty/styles/gap.js +2 -2
- package/es/tasty/styles/groupRadius.js +2 -2
- package/es/tasty/styles/height.js +2 -2
- package/es/tasty/styles/index.js +3 -3
- package/es/tasty/styles/inset.js +2 -2
- package/es/tasty/styles/justify.js +1 -1
- package/es/tasty/styles/list.js +1 -1
- package/es/tasty/styles/margin.js +76 -56
- package/es/tasty/styles/outline.js +2 -2
- package/es/tasty/styles/padding.js +76 -56
- package/es/tasty/styles/place.js +1 -1
- package/es/tasty/styles/predefined.js +28 -27
- package/es/tasty/styles/preset.js +2 -2
- package/es/tasty/styles/radius.js +5 -12
- package/es/tasty/styles/reset.js +3 -7
- package/es/tasty/styles/scrollbar.js +2 -2
- package/es/tasty/styles/shadow.js +2 -2
- package/es/tasty/styles/styledScrollbar.js +1 -1
- package/es/tasty/styles/transition.js +10 -3
- package/es/tasty/styles/types.js +1 -1
- package/es/tasty/styles/width.js +2 -2
- package/es/tasty/tasty.js +81 -122
- 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 +2 -2
- package/es/tasty/utils/modAttrs.js +3 -3
- package/es/tasty/utils/processTokens.js +88 -2
- package/es/tasty/utils/string.js +1 -1
- package/es/tasty/utils/styles.js +255 -22
- package/es/tasty/utils/typography.js +67 -0
- package/es/tasty/utils/warnings.js +1 -1
- package/es/tasty/zero/babel.js +453 -0
- package/es/tasty/zero/css-writer.js +94 -0
- package/es/tasty/zero/extractor.js +222 -0
- package/es/tasty/zero/index.js +28 -0
- package/es/tasty/zero/next.js +102 -0
- package/es/tokens/base.js +64 -0
- package/es/tokens/colors.js +68 -0
- package/es/tokens/index.js +63 -0
- package/es/tokens/layout.js +26 -0
- package/es/tokens/shadows.js +27 -0
- package/es/tokens/sizes.js +42 -0
- package/es/tokens/spacing.js +22 -0
- package/es/tokens/typography.js +237 -0
- package/es/utils/ResizeSensor.js +1 -1
- package/es/utils/index.js +10 -10
- 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 +2 -2
- package/es/utils/react/chain.js +1 -1
- package/es/utils/react/forwardRefWithGenerics.js +1 -1
- package/es/utils/react/index.js +17 -17
- 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 +4 -4
- package/es/utils/react/nullableValue.js +1 -1
- package/es/utils/react/resolveIcon.js +1 -1
- package/es/utils/react/sharedStore.js +2 -2
- package/es/utils/react/useCombinedRefs.js +1 -1
- package/es/utils/react/useControlledFocusVisible.js +2 -2
- package/es/utils/react/useEventBus.js +1 -1
- package/es/utils/react/useId.js +2 -2
- package/es/utils/react/useIsDarwin.js +1 -1
- package/es/utils/react/useKeySymbols.js +2 -2
- package/es/utils/react/useLayoutEffect.js +1 -1
- package/es/utils/react/useLocalStorage.js +2 -2
- 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 +14 -4
- package/types/components/GlobalStyles.d.ts +2 -1
- package/types/components/HiddenInput.d.ts +828 -826
- package/types/components/Root.d.ts +1 -0
- package/types/components/actions/Button/Button.d.ts +1649 -1645
- package/types/components/actions/CommandMenu/styled.d.ts +4140 -4130
- package/types/components/actions/ItemActionContext.d.ts +1 -1
- package/types/components/actions/Menu/styled.d.ts +4893 -4883
- package/types/components/actions/use-action.d.ts +1 -1
- package/types/components/content/List/SectionHeading.d.ts +251 -251
- package/types/components/content/Text.d.ts +1487 -1487
- package/types/components/fields/DatePicker/DatePickerElement.d.ts +251 -251
- package/types/components/fields/Select/Select.d.ts +828 -826
- package/types/components/fields/Slider/elements.d.ts +4968 -4956
- package/types/components/overlays/AlertDialog/AlertDialog.d.ts +1 -1
- package/types/components/status/Spin/Cube.d.ts +1 -1
- package/types/components/status/Spin/SpinsContainer.d.ts +6 -3
- package/types/icons/SemanticQueryIcon.d.ts +4 -0
- package/types/icons/index.d.ts +1 -0
- package/types/index.d.ts +1 -4
- package/types/provider.d.ts +1 -2
- package/types/stories/components/StyledButton.d.ts +1 -1
- package/types/stories/playground/PlaygroundEditor.d.ts +6 -0
- package/types/stories/playground/PlaygroundLayout.d.ts +8 -0
- package/types/stories/playground/PlaygroundOutput.d.ts +5 -0
- package/types/stories/playground/PlaygroundPreview.d.ts +6 -0
- package/types/stories/playground/components/Button.d.ts +11 -0
- package/types/stories/playground/components/Card.d.ts +7 -0
- package/types/stories/playground/components/ScrollProgress.d.ts +5 -0
- package/types/stories/playground/examples.d.ts +7 -0
- package/types/tasty/chunks/cacheKey.d.ts +26 -0
- package/types/tasty/chunks/definitions.d.ts +75 -0
- package/types/tasty/chunks/index.d.ts +4 -0
- package/types/tasty/chunks/renderChunk.d.ts +25 -0
- package/types/tasty/config.d.ts +171 -0
- package/types/tasty/debug.d.ts +35 -0
- package/types/tasty/hooks/index.d.ts +4 -0
- package/types/tasty/hooks/useGlobalStyles.d.ts +22 -0
- package/types/tasty/hooks/useRawCSS.d.ts +50 -0
- package/types/tasty/hooks/useStyles.d.ts +35 -0
- package/types/tasty/index.d.ts +14 -4
- package/types/tasty/injector/index.d.ts +30 -19
- package/types/tasty/injector/injector.d.ts +19 -13
- package/types/tasty/injector/sheet-manager.d.ts +25 -1
- package/types/tasty/injector/types.d.ts +23 -2
- package/types/tasty/keyframes/index.d.ts +49 -0
- package/types/tasty/parser/parser.d.ts +4 -0
- package/types/tasty/parser/types.d.ts +1 -0
- package/types/tasty/pipeline/conditions.d.ts +243 -0
- package/types/tasty/pipeline/exclusive.d.ts +103 -0
- package/types/tasty/pipeline/index.d.ts +67 -0
- package/types/tasty/pipeline/materialize.d.ts +162 -0
- package/types/tasty/pipeline/parseStateKey.d.ts +20 -0
- package/types/tasty/pipeline/simplify.d.ts +28 -0
- package/types/tasty/plugins/index.d.ts +17 -0
- package/types/tasty/plugins/okhsl-plugin.d.ts +45 -0
- package/types/tasty/plugins/types.d.ts +34 -0
- package/types/tasty/states/index.d.ts +101 -0
- package/types/tasty/static/index.d.ts +39 -0
- package/types/tasty/static/tastyStatic.d.ts +41 -0
- package/types/tasty/static/types.d.ts +44 -0
- package/types/tasty/styles/fill.d.ts +11 -1
- package/types/tasty/styles/margin.d.ts +3 -1
- package/types/tasty/styles/padding.d.ts +3 -1
- package/types/tasty/styles/radius.d.ts +2 -10
- package/types/tasty/styles/types.d.ts +24 -3
- package/types/tasty/tasty.d.ts +892 -840
- package/types/tasty/utils/styles.d.ts +50 -6
- package/types/tasty/utils/typography.d.ts +32 -0
- package/types/tasty/zero/babel.d.ts +63 -0
- package/types/tasty/zero/css-writer.d.ts +41 -0
- package/types/tasty/zero/extractor.d.ts +40 -0
- package/types/tasty/zero/index.d.ts +18 -0
- package/types/tasty/zero/next.d.ts +57 -0
- package/types/tokens/base.d.ts +8 -0
- package/types/tokens/colors.d.ts +6 -0
- package/types/tokens/index.d.ts +41 -0
- package/types/tokens/layout.d.ts +7 -0
- package/types/tokens/shadows.d.ts +12 -0
- package/types/tokens/sizes.d.ts +25 -0
- package/types/tokens/spacing.d.ts +8 -0
- package/types/tokens/typography.d.ts +30 -0
- package/es/components/navigation/LegacyTabs/LegacyTabs.js +0 -275
- package/es/components/other/Base64Upload/Base64Upload.js +0 -103
- package/es/icons/add-new-icon.js +0 -129
- package/es/tasty/providers/BreakpointsProvider.js +0 -16
- package/es/tasty/utils/getModCombinations.js +0 -38
- package/es/tasty/utils/renderStyles.js +0 -1050
- package/es/tasty/utils/responsive.js +0 -60
- package/es/tokens.js +0 -309
- package/types/components/navigation/LegacyTabs/LegacyTabs.d.ts +0 -43
- package/types/components/other/Base64Upload/Base64Upload.d.ts +0 -5
- package/types/icons/add-new-icon.d.ts +0 -2
- package/types/tasty/providers/BreakpointsProvider.d.ts +0 -8
- package/types/tasty/utils/getModCombinations.d.ts +0 -9
- package/types/tasty/utils/renderStyles.d.ts +0 -41
- package/types/tasty/utils/responsive.d.ts +0 -8
- package/types/tokens.d.ts +0 -221
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license MIT
|
|
3
|
+
* author: Cube Dev Team
|
|
4
|
+
* @cube-dev/ui-kit v0.99.0
|
|
5
|
+
* Released under the MIT license.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Tasty Configuration Module
|
|
10
|
+
*
|
|
11
|
+
* Centralizes all tasty configuration, including:
|
|
12
|
+
* - Style injector settings (nonce, cleanup thresholds, etc.)
|
|
13
|
+
* - Global predefined states for advanced state mapping
|
|
14
|
+
* - stylesGenerated flag that locks configuration after first style generation
|
|
15
|
+
*
|
|
16
|
+
* Configuration must be done BEFORE any styles are generated.
|
|
17
|
+
* After the first `inject()` call, configuration is locked and attempts to
|
|
18
|
+
* reconfigure will emit a warning and be ignored.
|
|
19
|
+
*/
|
|
20
|
+
import { StyleInjector } from './injector/injector.js';
|
|
21
|
+
import { setGlobalPredefinedStates } from './states/index.js';
|
|
22
|
+
import { isDevEnv } from './utils/isDevEnv.js';
|
|
23
|
+
import { CUSTOM_UNITS, getGlobalFuncs, getGlobalParser } from './utils/styles.js';
|
|
24
|
+
// Warnings tracking to avoid duplicates
|
|
25
|
+
const emittedWarnings = new Set();
|
|
26
|
+
const devMode = isDevEnv();
|
|
27
|
+
/**
|
|
28
|
+
* Emit a warning only once
|
|
29
|
+
*/
|
|
30
|
+
function warnOnce(key, message) {
|
|
31
|
+
if (devMode && !emittedWarnings.has(key)) {
|
|
32
|
+
emittedWarnings.add(key);
|
|
33
|
+
console.warn(message);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// ============================================================================
|
|
37
|
+
// Configuration State
|
|
38
|
+
// ============================================================================
|
|
39
|
+
// Track whether styles have been generated (locks configuration)
|
|
40
|
+
let stylesGenerated = false;
|
|
41
|
+
// Current configuration (null until first configure() or auto-configured on first use)
|
|
42
|
+
let currentConfig = null;
|
|
43
|
+
// Global keyframes storage (null = no keyframes configured, empty object checked via hasGlobalKeyframes)
|
|
44
|
+
let globalKeyframes = null;
|
|
45
|
+
// Global injector instance key
|
|
46
|
+
const GLOBAL_INJECTOR_KEY = '__TASTY_GLOBAL_INJECTOR__';
|
|
47
|
+
/**
|
|
48
|
+
* Detect if we're running in a test environment
|
|
49
|
+
*/
|
|
50
|
+
export function isTestEnvironment() {
|
|
51
|
+
// Check Node.js environment
|
|
52
|
+
if (typeof process !== 'undefined' && process.env?.NODE_ENV === 'test') {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
// Check for Jest globals (safely)
|
|
56
|
+
if (typeof global !== 'undefined') {
|
|
57
|
+
const g = global;
|
|
58
|
+
if (g.jest || g.expect || g.describe || g.it) {
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Check for jsdom environment (common in tests)
|
|
63
|
+
if (typeof window !== 'undefined' &&
|
|
64
|
+
window.navigator?.userAgent?.includes('jsdom')) {
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
// Check for other test runners
|
|
68
|
+
if (typeof globalThis !== 'undefined') {
|
|
69
|
+
const gt = globalThis;
|
|
70
|
+
if (gt.vitest || gt.mocha) {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Create default configuration with optional test environment detection
|
|
78
|
+
*/
|
|
79
|
+
function createDefaultConfig(isTest) {
|
|
80
|
+
return {
|
|
81
|
+
maxRulesPerSheet: 8192,
|
|
82
|
+
unusedStylesThreshold: 500,
|
|
83
|
+
bulkCleanupDelay: 5000,
|
|
84
|
+
idleCleanup: true,
|
|
85
|
+
forceTextInjection: isTest ?? false,
|
|
86
|
+
devMode: isDevEnv(),
|
|
87
|
+
bulkCleanupBatchRatio: 0.5,
|
|
88
|
+
unusedStylesMinAgeMs: 10000,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
// ============================================================================
|
|
92
|
+
// stylesGenerated Flag Management
|
|
93
|
+
// ============================================================================
|
|
94
|
+
/**
|
|
95
|
+
* Mark that styles have been generated (called by injector on first inject)
|
|
96
|
+
* This locks the configuration - no further changes allowed.
|
|
97
|
+
*/
|
|
98
|
+
export function markStylesGenerated() {
|
|
99
|
+
stylesGenerated = true;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Check if styles have been generated (configuration is locked)
|
|
103
|
+
*/
|
|
104
|
+
export function hasStylesGenerated() {
|
|
105
|
+
return stylesGenerated;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Reset styles generated flag (for testing only)
|
|
109
|
+
*/
|
|
110
|
+
export function resetStylesGenerated() {
|
|
111
|
+
stylesGenerated = false;
|
|
112
|
+
emittedWarnings.clear();
|
|
113
|
+
}
|
|
114
|
+
// ============================================================================
|
|
115
|
+
// Global Keyframes Management
|
|
116
|
+
// ============================================================================
|
|
117
|
+
/**
|
|
118
|
+
* Check if any global keyframes are configured.
|
|
119
|
+
* Fast path: returns false if no keyframes were ever set.
|
|
120
|
+
*/
|
|
121
|
+
export function hasGlobalKeyframes() {
|
|
122
|
+
return globalKeyframes !== null && Object.keys(globalKeyframes).length > 0;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get global keyframes configuration.
|
|
126
|
+
* Returns null if no keyframes configured (fast path for zero-overhead).
|
|
127
|
+
*/
|
|
128
|
+
export function getGlobalKeyframes() {
|
|
129
|
+
return globalKeyframes;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Set global keyframes (called from configure).
|
|
133
|
+
* Internal use only.
|
|
134
|
+
*/
|
|
135
|
+
function setGlobalKeyframes(keyframes) {
|
|
136
|
+
if (stylesGenerated) {
|
|
137
|
+
warnOnce('keyframes-after-styles', `[Tasty] Cannot update keyframes after styles have been generated.\n` +
|
|
138
|
+
`The new keyframes will be ignored.`);
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
globalKeyframes = keyframes;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Check if configuration is locked (styles have been generated)
|
|
145
|
+
*/
|
|
146
|
+
export function isConfigLocked() {
|
|
147
|
+
return stylesGenerated;
|
|
148
|
+
}
|
|
149
|
+
// ============================================================================
|
|
150
|
+
// Configuration API
|
|
151
|
+
// ============================================================================
|
|
152
|
+
/**
|
|
153
|
+
* Configure the Tasty style system.
|
|
154
|
+
*
|
|
155
|
+
* Must be called BEFORE any styles are generated (before first render that uses tasty).
|
|
156
|
+
* After styles are generated, configuration is locked and calls to configure() will
|
|
157
|
+
* emit a warning and be ignored.
|
|
158
|
+
*
|
|
159
|
+
* @example
|
|
160
|
+
* ```ts
|
|
161
|
+
* import { configure } from '@cube-dev/ui-kit';
|
|
162
|
+
*
|
|
163
|
+
* // Configure before app renders
|
|
164
|
+
* configure({
|
|
165
|
+
* nonce: 'abc123',
|
|
166
|
+
* states: {
|
|
167
|
+
* '@mobile': '@media(w < 768px)',
|
|
168
|
+
* '@dark': '@root(theme=dark)',
|
|
169
|
+
* },
|
|
170
|
+
* });
|
|
171
|
+
* ```
|
|
172
|
+
*/
|
|
173
|
+
export function configure(config = {}) {
|
|
174
|
+
if (stylesGenerated) {
|
|
175
|
+
warnOnce('configure-after-styles', `[Tasty] Cannot call configure() after styles have been generated.\n` +
|
|
176
|
+
`Configuration must be done before the first render. The configuration will be ignored.`);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
// Collect merged values from plugins first, then override with direct config
|
|
180
|
+
let mergedStates = {};
|
|
181
|
+
let mergedUnits = {};
|
|
182
|
+
let mergedFuncs = {};
|
|
183
|
+
// Process plugins in order
|
|
184
|
+
if (config.plugins) {
|
|
185
|
+
for (const plugin of config.plugins) {
|
|
186
|
+
if (plugin.states) {
|
|
187
|
+
mergedStates = { ...mergedStates, ...plugin.states };
|
|
188
|
+
}
|
|
189
|
+
if (plugin.units) {
|
|
190
|
+
mergedUnits = { ...mergedUnits, ...plugin.units };
|
|
191
|
+
}
|
|
192
|
+
if (plugin.funcs) {
|
|
193
|
+
mergedFuncs = { ...mergedFuncs, ...plugin.funcs };
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// Direct config overrides plugins
|
|
198
|
+
if (config.states) {
|
|
199
|
+
mergedStates = { ...mergedStates, ...config.states };
|
|
200
|
+
}
|
|
201
|
+
if (config.units) {
|
|
202
|
+
mergedUnits = { ...mergedUnits, ...config.units };
|
|
203
|
+
}
|
|
204
|
+
if (config.funcs) {
|
|
205
|
+
mergedFuncs = { ...mergedFuncs, ...config.funcs };
|
|
206
|
+
}
|
|
207
|
+
// Handle predefined states
|
|
208
|
+
if (Object.keys(mergedStates).length > 0) {
|
|
209
|
+
setGlobalPredefinedStates(mergedStates);
|
|
210
|
+
}
|
|
211
|
+
// Handle parser configuration (merge semantics - extend, not replace)
|
|
212
|
+
const parser = getGlobalParser();
|
|
213
|
+
if (config.parserCacheSize !== undefined) {
|
|
214
|
+
parser.updateOptions({ cacheSize: config.parserCacheSize });
|
|
215
|
+
}
|
|
216
|
+
if (Object.keys(mergedUnits).length > 0) {
|
|
217
|
+
// Merge with existing units
|
|
218
|
+
const currentUnits = parser.getUnits() ?? CUSTOM_UNITS;
|
|
219
|
+
parser.setUnits({ ...currentUnits, ...mergedUnits });
|
|
220
|
+
}
|
|
221
|
+
if (Object.keys(mergedFuncs).length > 0) {
|
|
222
|
+
// Merge with existing funcs
|
|
223
|
+
const currentFuncs = getGlobalFuncs();
|
|
224
|
+
const finalFuncs = { ...currentFuncs, ...mergedFuncs };
|
|
225
|
+
parser.setFuncs(finalFuncs);
|
|
226
|
+
// Also update the global registry so customFunc() continues to work
|
|
227
|
+
Object.assign(currentFuncs, mergedFuncs);
|
|
228
|
+
}
|
|
229
|
+
// Handle keyframes
|
|
230
|
+
if (config.keyframes) {
|
|
231
|
+
setGlobalKeyframes(config.keyframes);
|
|
232
|
+
}
|
|
233
|
+
// Create config without states, parser options, plugins, and keyframes (handled separately)
|
|
234
|
+
const { states: _states, parserCacheSize: _parserCacheSize, units: _units, funcs: _funcs, plugins: _plugins, keyframes: _keyframes, ...injectorConfig } = config;
|
|
235
|
+
const fullConfig = {
|
|
236
|
+
...createDefaultConfig(),
|
|
237
|
+
...currentConfig,
|
|
238
|
+
...injectorConfig,
|
|
239
|
+
};
|
|
240
|
+
// Store the config
|
|
241
|
+
currentConfig = fullConfig;
|
|
242
|
+
// Create/replace the global injector
|
|
243
|
+
const storage = typeof window !== 'undefined' ? window : globalThis;
|
|
244
|
+
storage[GLOBAL_INJECTOR_KEY] = new StyleInjector(fullConfig);
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Get the current configuration.
|
|
248
|
+
* If not configured, returns default configuration.
|
|
249
|
+
*/
|
|
250
|
+
export function getConfig() {
|
|
251
|
+
if (!currentConfig) {
|
|
252
|
+
currentConfig = createDefaultConfig(isTestEnvironment());
|
|
253
|
+
}
|
|
254
|
+
return currentConfig;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Get the global injector instance.
|
|
258
|
+
* Auto-configures with defaults if not already configured.
|
|
259
|
+
*/
|
|
260
|
+
export function getGlobalInjector() {
|
|
261
|
+
const storage = typeof window !== 'undefined' ? window : globalThis;
|
|
262
|
+
if (!storage[GLOBAL_INJECTOR_KEY]) {
|
|
263
|
+
configure();
|
|
264
|
+
}
|
|
265
|
+
return storage[GLOBAL_INJECTOR_KEY];
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Reset configuration (for testing only).
|
|
269
|
+
* Clears the global injector and allows reconfiguration.
|
|
270
|
+
*/
|
|
271
|
+
export function resetConfig() {
|
|
272
|
+
stylesGenerated = false;
|
|
273
|
+
currentConfig = null;
|
|
274
|
+
globalKeyframes = null;
|
|
275
|
+
emittedWarnings.clear();
|
|
276
|
+
const storage = typeof window !== 'undefined' ? window : globalThis;
|
|
277
|
+
delete storage[GLOBAL_INJECTOR_KEY];
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
|
package/es/tasty/debug.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license MIT
|
|
3
3
|
* author: Cube Dev Team
|
|
4
|
-
* @cube-dev/ui-kit v0.
|
|
4
|
+
* @cube-dev/ui-kit v0.99.0
|
|
5
5
|
* Released under the MIT license.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Debug utilities for inspecting tasty-generated CSS at runtime
|
|
10
10
|
*/
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
11
|
+
import { CHUNK_NAMES } from './chunks/definitions.js';
|
|
12
|
+
import { getCssTextForNode, injector } from './injector/index.js';
|
|
13
|
+
import { isDevEnv } from './utils/isDevEnv.js';
|
|
13
14
|
/**
|
|
14
15
|
* Pretty-print CSS with proper indentation and formatting
|
|
15
16
|
*/
|
|
@@ -246,6 +247,95 @@ function getPageStats(options) {
|
|
|
246
247
|
}
|
|
247
248
|
return { cssSize, ruleCount, stylesheetCount, skippedStylesheets };
|
|
248
249
|
}
|
|
250
|
+
// ============================================================================
|
|
251
|
+
// Chunk-aware helpers (for style chunking optimization)
|
|
252
|
+
// ============================================================================
|
|
253
|
+
/**
|
|
254
|
+
* Extract chunk name from a cache key.
|
|
255
|
+
*
|
|
256
|
+
* Cache keys have the format: "chunkName\0key:value\0key:value..."
|
|
257
|
+
* or "[states:...]\0chunkName\0..." for predefined states.
|
|
258
|
+
*
|
|
259
|
+
* @param cacheKey - The cache key to parse
|
|
260
|
+
* @returns The chunk name, or null if not found
|
|
261
|
+
*/
|
|
262
|
+
function extractChunkNameFromCacheKey(cacheKey) {
|
|
263
|
+
// Cache keys are separated by \0 (null character)
|
|
264
|
+
const parts = cacheKey.split('\0');
|
|
265
|
+
for (const part of parts) {
|
|
266
|
+
// Skip predefined states prefix
|
|
267
|
+
if (part.startsWith('[states:'))
|
|
268
|
+
continue;
|
|
269
|
+
// First non-states part that doesn't contain : is the chunk name
|
|
270
|
+
if (!part.includes(':') && part.length > 0) {
|
|
271
|
+
return part;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
return null;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Get chunk info for a className by reverse-looking up its cache key.
|
|
278
|
+
*
|
|
279
|
+
* @param className - The tasty class name (e.g., "t0", "t123")
|
|
280
|
+
* @param root - The document or shadow root to search in
|
|
281
|
+
* @returns Object with chunk name and cache key, or nulls if not found
|
|
282
|
+
*/
|
|
283
|
+
function getChunkForClassName(className, root = document) {
|
|
284
|
+
const registry = injector.instance['sheetManager']?.getRegistry(root);
|
|
285
|
+
if (!registry) {
|
|
286
|
+
return { chunkName: null, cacheKey: null };
|
|
287
|
+
}
|
|
288
|
+
// Reverse lookup: find the cache key for this className
|
|
289
|
+
for (const [cacheKey, cn] of registry.cacheKeyToClassName) {
|
|
290
|
+
if (cn === className) {
|
|
291
|
+
return {
|
|
292
|
+
chunkName: extractChunkNameFromCacheKey(cacheKey),
|
|
293
|
+
cacheKey,
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return { chunkName: null, cacheKey: null };
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Get chunk breakdown statistics for all styles.
|
|
301
|
+
*
|
|
302
|
+
* @param root - The document or shadow root to search in
|
|
303
|
+
* @returns Object with breakdown by chunk type and totals
|
|
304
|
+
*/
|
|
305
|
+
function getChunkBreakdown(root = document) {
|
|
306
|
+
const registry = injector.instance['sheetManager']?.getRegistry(root);
|
|
307
|
+
if (!registry) {
|
|
308
|
+
return {
|
|
309
|
+
byChunk: {},
|
|
310
|
+
totalChunkTypes: 0,
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
const byChunk = {};
|
|
314
|
+
// Group classes by chunk
|
|
315
|
+
for (const [cacheKey, className] of registry.cacheKeyToClassName) {
|
|
316
|
+
const chunkName = extractChunkNameFromCacheKey(cacheKey) || 'unknown';
|
|
317
|
+
if (!byChunk[chunkName]) {
|
|
318
|
+
byChunk[chunkName] = { classes: [], cssSize: 0, ruleCount: 0 };
|
|
319
|
+
}
|
|
320
|
+
byChunk[chunkName].classes.push(className);
|
|
321
|
+
// Get CSS for this class
|
|
322
|
+
const css = injector.instance.getCssTextForClasses([className], { root });
|
|
323
|
+
byChunk[chunkName].cssSize += css.length;
|
|
324
|
+
byChunk[chunkName].ruleCount += (css.match(/\{[^}]*\}/g) || []).length;
|
|
325
|
+
}
|
|
326
|
+
// Sort classes within each chunk for consistency
|
|
327
|
+
for (const entry of Object.values(byChunk)) {
|
|
328
|
+
entry.classes.sort((a, b) => {
|
|
329
|
+
const aNum = parseInt(a.slice(1));
|
|
330
|
+
const bNum = parseInt(b.slice(1));
|
|
331
|
+
return aNum - bNum;
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
return {
|
|
335
|
+
byChunk,
|
|
336
|
+
totalChunkTypes: Object.keys(byChunk).length,
|
|
337
|
+
};
|
|
338
|
+
}
|
|
249
339
|
/**
|
|
250
340
|
* Concise tastyDebug API for inspecting styles at runtime
|
|
251
341
|
*/
|
|
@@ -316,6 +406,7 @@ export const tastyDebug = {
|
|
|
316
406
|
return {
|
|
317
407
|
element: null,
|
|
318
408
|
classes: [],
|
|
409
|
+
chunks: [],
|
|
319
410
|
css: '',
|
|
320
411
|
size: 0,
|
|
321
412
|
rules: 0,
|
|
@@ -325,12 +416,18 @@ export const tastyDebug = {
|
|
|
325
416
|
const tastyClasses = classList
|
|
326
417
|
.split(/\s+/)
|
|
327
418
|
.filter((cls) => /^t\d+$/.test(cls));
|
|
419
|
+
// Get chunk info for each tasty class
|
|
420
|
+
const chunks = tastyClasses.map((className) => ({
|
|
421
|
+
className,
|
|
422
|
+
chunkName: getChunkForClassName(className, root).chunkName,
|
|
423
|
+
}));
|
|
328
424
|
const css = getCssTextForNode(element, { root });
|
|
329
425
|
const prettifiedCSS = prettifyCSS(css);
|
|
330
426
|
const ruleCount = (css.match(/\{[^}]*\}/g) || []).length;
|
|
331
427
|
return {
|
|
332
428
|
element,
|
|
333
429
|
classes: tastyClasses,
|
|
430
|
+
chunks,
|
|
334
431
|
css: prettifiedCSS,
|
|
335
432
|
size: css.length,
|
|
336
433
|
rules: ruleCount,
|
|
@@ -370,7 +467,63 @@ export const tastyDebug = {
|
|
|
370
467
|
const { root } = opts || {};
|
|
371
468
|
injector.instance.resetMetrics({ root });
|
|
372
469
|
},
|
|
373
|
-
// 5)
|
|
470
|
+
// 5) Chunk breakdown (style chunking optimization)
|
|
471
|
+
/**
|
|
472
|
+
* Get breakdown of styles by chunk type.
|
|
473
|
+
*
|
|
474
|
+
* With style chunking enabled, styles are split into logical chunks
|
|
475
|
+
* (appearance, font, dimension, container, etc.) for better caching
|
|
476
|
+
* and CSS reuse.
|
|
477
|
+
*
|
|
478
|
+
* @param opts - Options including root document/shadow root
|
|
479
|
+
* @returns Breakdown by chunk type with class counts and CSS sizes
|
|
480
|
+
*/
|
|
481
|
+
chunks(opts) {
|
|
482
|
+
const { root = document, log = false } = opts || {};
|
|
483
|
+
const breakdown = getChunkBreakdown(root);
|
|
484
|
+
const totalClasses = Object.values(breakdown.byChunk).reduce((sum, entry) => sum + entry.classes.length, 0);
|
|
485
|
+
if (log) {
|
|
486
|
+
console.group('🧩 Style Chunk Breakdown');
|
|
487
|
+
// Define display order matching CHUNK_NAMES
|
|
488
|
+
const displayOrder = [
|
|
489
|
+
CHUNK_NAMES.COMBINED, // non-chunked styles (e.g., @starting-style)
|
|
490
|
+
CHUNK_NAMES.APPEARANCE,
|
|
491
|
+
CHUNK_NAMES.FONT,
|
|
492
|
+
CHUNK_NAMES.DIMENSION,
|
|
493
|
+
CHUNK_NAMES.CONTAINER,
|
|
494
|
+
CHUNK_NAMES.SCROLLBAR,
|
|
495
|
+
CHUNK_NAMES.POSITION,
|
|
496
|
+
CHUNK_NAMES.MISC,
|
|
497
|
+
CHUNK_NAMES.SUBCOMPONENTS,
|
|
498
|
+
];
|
|
499
|
+
// Show chunks in order
|
|
500
|
+
for (const chunkName of displayOrder) {
|
|
501
|
+
const data = breakdown.byChunk[chunkName];
|
|
502
|
+
if (data) {
|
|
503
|
+
const sizeStr = data.cssSize > 1024
|
|
504
|
+
? `${(data.cssSize / 1024).toFixed(1)}KB`
|
|
505
|
+
: `${data.cssSize}B`;
|
|
506
|
+
console.log(` • ${chunkName}: ${data.classes.length} classes, ${sizeStr}, ${data.ruleCount} rules`);
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
// Show any unknown chunks
|
|
510
|
+
for (const [chunkName, data] of Object.entries(breakdown.byChunk)) {
|
|
511
|
+
if (!displayOrder.includes(chunkName)) {
|
|
512
|
+
const sizeStr = data.cssSize > 1024
|
|
513
|
+
? `${(data.cssSize / 1024).toFixed(1)}KB`
|
|
514
|
+
: `${data.cssSize}B`;
|
|
515
|
+
console.log(` • ${chunkName}: ${data.classes.length} classes, ${sizeStr}, ${data.ruleCount} rules`);
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
console.log(`📊 Total: ${totalClasses} classes across ${breakdown.totalChunkTypes} chunk types`);
|
|
519
|
+
console.groupEnd();
|
|
520
|
+
}
|
|
521
|
+
return {
|
|
522
|
+
...breakdown,
|
|
523
|
+
totalClasses,
|
|
524
|
+
};
|
|
525
|
+
},
|
|
526
|
+
// 6) Get CSS for specific global types
|
|
374
527
|
getGlobalTypeCSS(type, opts) {
|
|
375
528
|
const { root = document } = opts || {};
|
|
376
529
|
const registry = injector.instance['sheetManager']?.getRegistry(root);
|
|
@@ -565,6 +718,8 @@ export const tastyDebug = {
|
|
|
565
718
|
propertyCSSSize: Math.round(propertyData.size * scaleFactor),
|
|
566
719
|
};
|
|
567
720
|
}
|
|
721
|
+
// Get chunk breakdown
|
|
722
|
+
const chunkBreakdown = getChunkBreakdown(root);
|
|
568
723
|
const summary = {
|
|
569
724
|
activeClasses: cacheStatus.classes.active,
|
|
570
725
|
unusedClasses: cacheStatus.classes.unused,
|
|
@@ -591,6 +746,7 @@ export const tastyDebug = {
|
|
|
591
746
|
propertyCount: definitions.properties.length,
|
|
592
747
|
keyframeCount: definitions.keyframes.length,
|
|
593
748
|
cleanupSummary,
|
|
749
|
+
chunkBreakdown,
|
|
594
750
|
};
|
|
595
751
|
if (log) {
|
|
596
752
|
console.group('🎨 Comprehensive Tasty Debug Summary');
|
|
@@ -602,7 +758,7 @@ export const tastyDebug = {
|
|
|
602
758
|
console.log(` • Active CSS: ${summary.activeCSSSize} characters`);
|
|
603
759
|
console.log(` • Unused CSS: ${summary.unusedCSSSize} characters`);
|
|
604
760
|
console.log(` • Global CSS (injectGlobal): ${summary.globalCSSSize} characters (${summary.globalRuleCount} rules)`);
|
|
605
|
-
console.log(` • Raw CSS (
|
|
761
|
+
console.log(` • Raw CSS (injectRawCSS/useRawCSS): ${summary.rawCSSSize} characters (${summary.rawRuleCount} rules)`);
|
|
606
762
|
console.log(` • Keyframes CSS: ${summary.keyframesCSSSize} characters (${summary.keyframesRuleCount} rules)`);
|
|
607
763
|
console.log(` • Property CSS: ${summary.propertyCSSSize} characters (${summary.propertyRuleCount} rules)`);
|
|
608
764
|
// Show breakdown calculation
|
|
@@ -652,6 +808,30 @@ export const tastyDebug = {
|
|
|
652
808
|
: '0';
|
|
653
809
|
console.log(` • Overall cache hit rate: ${hitRate}%`);
|
|
654
810
|
}
|
|
811
|
+
// Show chunk breakdown
|
|
812
|
+
if (summary.chunkBreakdown.totalChunkTypes > 0) {
|
|
813
|
+
console.log('🧩 Style Chunk Breakdown:');
|
|
814
|
+
const displayOrder = [
|
|
815
|
+
CHUNK_NAMES.COMBINED, // non-chunked styles (e.g., @starting-style)
|
|
816
|
+
CHUNK_NAMES.APPEARANCE,
|
|
817
|
+
CHUNK_NAMES.FONT,
|
|
818
|
+
CHUNK_NAMES.DIMENSION,
|
|
819
|
+
CHUNK_NAMES.CONTAINER,
|
|
820
|
+
CHUNK_NAMES.SCROLLBAR,
|
|
821
|
+
CHUNK_NAMES.POSITION,
|
|
822
|
+
CHUNK_NAMES.MISC,
|
|
823
|
+
CHUNK_NAMES.SUBCOMPONENTS,
|
|
824
|
+
];
|
|
825
|
+
for (const chunkName of displayOrder) {
|
|
826
|
+
const data = summary.chunkBreakdown.byChunk[chunkName];
|
|
827
|
+
if (data) {
|
|
828
|
+
const sizeStr = data.cssSize > 1024
|
|
829
|
+
? `${(data.cssSize / 1024).toFixed(1)}KB`
|
|
830
|
+
: `${data.cssSize}B`;
|
|
831
|
+
console.log(` • ${chunkName}: ${data.classes.length} classes, ${sizeStr}, ${data.ruleCount} rules`);
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
}
|
|
655
835
|
console.log('🔍 Details:');
|
|
656
836
|
console.log(' • Active classes:', summary.activeClasses);
|
|
657
837
|
console.log(' • Unused classes:', summary.unusedClasses);
|
|
@@ -735,15 +915,15 @@ export const tastyDebug = {
|
|
|
735
915
|
console.groupEnd();
|
|
736
916
|
console.groupEnd();
|
|
737
917
|
},
|
|
738
|
-
//
|
|
918
|
+
// 12) Show help and usage examples
|
|
739
919
|
help() {
|
|
740
920
|
console.group('🎨 tastyDebug - Quick Start Guide');
|
|
741
921
|
console.log('💡 Essential commands:');
|
|
742
922
|
console.log(' • tastyDebug.summary({ log: true }) - comprehensive overview');
|
|
923
|
+
console.log(' • tastyDebug.chunks({ log: true }) - style chunk breakdown');
|
|
743
924
|
console.log(' • tastyDebug.log("active") - beautiful CSS display');
|
|
744
925
|
console.log(' • tastyDebug.css("active") - get active CSS');
|
|
745
|
-
console.log(' • tastyDebug.inspect(".my-element") -
|
|
746
|
-
console.log(' • tastyDebug.global({ log: true }) - global CSS analysis');
|
|
926
|
+
console.log(' • tastyDebug.inspect(".my-element") - element inspection with chunk info');
|
|
747
927
|
console.log(' • tastyDebug.cache() - cache status');
|
|
748
928
|
console.log(' • tastyDebug.defs() - defined properties & keyframes');
|
|
749
929
|
console.log(' • tastyDebug.pageCSS({ log: true }) - all page CSS');
|
|
@@ -752,7 +932,7 @@ export const tastyDebug = {
|
|
|
752
932
|
console.log(' • "all" - all tasty CSS + global CSS');
|
|
753
933
|
console.log(' • "active" - CSS for classes in DOM');
|
|
754
934
|
console.log(' • "unused" - CSS for classes with refCount = 0');
|
|
755
|
-
console.log(' • "global" - only global CSS (
|
|
935
|
+
console.log(' • "global" - only global CSS (injectGlobal)');
|
|
756
936
|
console.log(' • "page" - ALL page CSS (including non-tasty)');
|
|
757
937
|
console.log(' • "t123" - specific tasty class');
|
|
758
938
|
console.log(' • [".my-selector"] - CSS selector');
|
|
@@ -762,6 +942,12 @@ export const tastyDebug = {
|
|
|
762
942
|
console.log(' • { title: "Custom" } - custom title for log()');
|
|
763
943
|
console.log(' • { root: shadowRoot } - target Shadow DOM');
|
|
764
944
|
console.log(' • { prettify: false } - skip CSS formatting');
|
|
945
|
+
console.log('');
|
|
946
|
+
console.log('🧩 Style Chunking:');
|
|
947
|
+
console.log(' Elements have multiple classes (one per chunk: appearance, font, dimension, etc.)');
|
|
948
|
+
console.log(' • tastyDebug.chunks({ log: true }) - breakdown by chunk type');
|
|
949
|
+
console.log(' • tastyDebug.inspect() - shows which chunk each class belongs to');
|
|
950
|
+
console.log(' Chunk types: combined (non-chunked), appearance, font, dimension, container, scrollbar, position, misc, subcomponents');
|
|
765
951
|
console.groupEnd();
|
|
766
952
|
},
|
|
767
953
|
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license MIT
|
|
3
|
+
* author: Cube Dev Team
|
|
4
|
+
* @cube-dev/ui-kit v0.99.0
|
|
5
|
+
* Released under the MIT license.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export { useStyles } from './useStyles.js';
|
|
9
|
+
export { useGlobalStyles } from './useGlobalStyles.js';
|
|
10
|
+
export { useRawCSS } from './useRawCSS.js';
|
|
11
|
+
|
|
12
|
+
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license MIT
|
|
3
|
+
* author: Cube Dev Team
|
|
4
|
+
* @cube-dev/ui-kit v0.99.0
|
|
5
|
+
* Released under the MIT license.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { useInsertionEffect, useMemo, useRef } from 'react';
|
|
9
|
+
import { injectGlobal } from '../injector/index.js';
|
|
10
|
+
import { renderStyles } from '../pipeline/index.js';
|
|
11
|
+
/**
|
|
12
|
+
* Hook to inject global styles for a given selector.
|
|
13
|
+
* Useful for styling elements by selector without generating classNames.
|
|
14
|
+
*
|
|
15
|
+
* @param selector - CSS selector to apply styles to (e.g., '.my-class', ':root', 'body')
|
|
16
|
+
* @param styles - Tasty styles object
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```tsx
|
|
20
|
+
* function MyComponent() {
|
|
21
|
+
* useGlobalStyles('.card', {
|
|
22
|
+
* padding: '2x',
|
|
23
|
+
* radius: '1r',
|
|
24
|
+
* fill: '#white',
|
|
25
|
+
* });
|
|
26
|
+
*
|
|
27
|
+
* return <div className="card">Content</div>;
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export function useGlobalStyles(selector, styles) {
|
|
32
|
+
const disposeRef = useRef(null);
|
|
33
|
+
// Render styles with the provided selector
|
|
34
|
+
// Note: renderStyles overload with selector string returns StyleResult[] directly
|
|
35
|
+
const styleResults = useMemo(() => {
|
|
36
|
+
if (!styles)
|
|
37
|
+
return [];
|
|
38
|
+
// Validate selector - empty string would cause renderStyles to return RenderResult instead of StyleResult[]
|
|
39
|
+
if (!selector) {
|
|
40
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
41
|
+
console.warn('[Tasty] useGlobalStyles: selector is required and cannot be empty. ' +
|
|
42
|
+
'Styles will not be injected.');
|
|
43
|
+
}
|
|
44
|
+
return [];
|
|
45
|
+
}
|
|
46
|
+
const result = renderStyles(styles, selector);
|
|
47
|
+
// When a non-empty selector is provided, renderStyles returns StyleResult[]
|
|
48
|
+
return result;
|
|
49
|
+
}, [styles, selector]);
|
|
50
|
+
// Inject as global styles
|
|
51
|
+
useInsertionEffect(() => {
|
|
52
|
+
disposeRef.current?.();
|
|
53
|
+
if (styleResults.length > 0) {
|
|
54
|
+
const { dispose } = injectGlobal(styleResults);
|
|
55
|
+
disposeRef.current = dispose;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
disposeRef.current = null;
|
|
59
|
+
}
|
|
60
|
+
return () => {
|
|
61
|
+
disposeRef.current?.();
|
|
62
|
+
disposeRef.current = null;
|
|
63
|
+
};
|
|
64
|
+
}, [styleResults]);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
|