@cube-dev/ui-kit 0.98.9 → 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 +36 -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 +15 -15
- 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 -11
- 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 +2 -2
- 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 -129
- 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/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/status/Spin/Cube.d.ts +1 -1
- package/types/components/status/Spin/SpinsContainer.d.ts +6 -3
- 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
|
@@ -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.99.0
|
|
5
5
|
* Released under the MIT license.
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -9,10 +9,8 @@
|
|
|
9
9
|
* Style injector that works with structured style objects
|
|
10
10
|
* Eliminates CSS string parsing for better performance
|
|
11
11
|
*/
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
// Simple CSS text to StyleResult converter for injectGlobal backward compatibility
|
|
15
|
-
import { SheetManager } from './sheet-manager';
|
|
12
|
+
import { parseStyle } from '../utils/styles.js';
|
|
13
|
+
import { SheetManager } from './sheet-manager.js';
|
|
16
14
|
/**
|
|
17
15
|
* Generate sequential class name with format t{number}
|
|
18
16
|
*/
|
|
@@ -106,13 +104,25 @@ export class StyleInjector {
|
|
|
106
104
|
let newSelector = rule.selector;
|
|
107
105
|
// If rule needs className prepended
|
|
108
106
|
if (rule.needsClassName) {
|
|
109
|
-
//
|
|
110
|
-
|
|
107
|
+
// Handle multiple selectors (separated by ||| for OR conditions)
|
|
108
|
+
const selectorParts = newSelector ? newSelector.split('|||') : [''];
|
|
109
|
+
const classPrefix = `.${className}.${className}`;
|
|
110
|
+
newSelector = selectorParts
|
|
111
|
+
.map((part) => {
|
|
112
|
+
const classSelector = part ? `${classPrefix}${part}` : classPrefix;
|
|
113
|
+
// If there's a root prefix, add it before the class selector
|
|
114
|
+
if (rule.rootPrefix) {
|
|
115
|
+
return `${rule.rootPrefix} ${classSelector}`;
|
|
116
|
+
}
|
|
117
|
+
return classSelector;
|
|
118
|
+
})
|
|
119
|
+
.join(', ');
|
|
111
120
|
}
|
|
112
121
|
return {
|
|
113
122
|
...rule,
|
|
114
123
|
selector: newSelector,
|
|
115
124
|
needsClassName: undefined, // Remove the flag after processing
|
|
125
|
+
rootPrefix: undefined, // Remove rootPrefix after processing
|
|
116
126
|
};
|
|
117
127
|
});
|
|
118
128
|
// Before inserting, auto-register @property for any color custom properties being defined.
|
|
@@ -202,26 +212,20 @@ export class StyleInjector {
|
|
|
202
212
|
};
|
|
203
213
|
}
|
|
204
214
|
/**
|
|
205
|
-
* Inject
|
|
215
|
+
* Inject raw CSS text directly without parsing
|
|
216
|
+
* This is a low-overhead alternative to createGlobalStyle for raw CSS
|
|
217
|
+
* The CSS is inserted into a separate style element to avoid conflicts with tasty's chunking
|
|
206
218
|
*/
|
|
207
|
-
|
|
219
|
+
injectRawCSS(css, options) {
|
|
208
220
|
const root = options?.root || document;
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
const
|
|
216
|
-
|
|
217
|
-
registry.metrics.totalInsertions++;
|
|
218
|
-
}
|
|
219
|
-
return {
|
|
220
|
-
dispose: () => {
|
|
221
|
-
if (info)
|
|
222
|
-
this.sheetManager.deleteGlobalRule(registry, key);
|
|
223
|
-
},
|
|
224
|
-
};
|
|
221
|
+
return this.sheetManager.injectRawCSS(css, root);
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Get raw CSS text for SSR
|
|
225
|
+
*/
|
|
226
|
+
getRawCSSText(options) {
|
|
227
|
+
const root = options?.root || document;
|
|
228
|
+
return this.sheetManager.getRawCSSText(root);
|
|
225
229
|
}
|
|
226
230
|
/**
|
|
227
231
|
* Dispose of a className
|
|
@@ -330,9 +334,9 @@ export class StyleInjector {
|
|
|
330
334
|
syntax = `"${syntax}"`;
|
|
331
335
|
parts.push(`syntax: ${syntax};`);
|
|
332
336
|
}
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
}
|
|
337
|
+
// inherits is required by the CSS @property spec - default to true
|
|
338
|
+
const inherits = options?.inherits ?? true;
|
|
339
|
+
parts.push(`inherits: ${inherits ? 'true' : 'false'};`);
|
|
336
340
|
if (options?.initialValue != null) {
|
|
337
341
|
let initialValueStr;
|
|
338
342
|
if (typeof options.initialValue === 'number') {
|
|
@@ -364,6 +368,12 @@ export class StyleInjector {
|
|
|
364
368
|
}
|
|
365
369
|
/**
|
|
366
370
|
* Inject keyframes and return object with toString() and dispose()
|
|
371
|
+
*
|
|
372
|
+
* Keyframes are cached by content (steps). If the same content is injected
|
|
373
|
+
* multiple times with different provided names, the first injected name is reused.
|
|
374
|
+
*
|
|
375
|
+
* If the same name is provided with different content (collision), a unique
|
|
376
|
+
* name is generated to avoid overwriting the existing keyframes.
|
|
367
377
|
*/
|
|
368
378
|
keyframes(steps, nameOrOptions) {
|
|
369
379
|
// Parse parameters
|
|
@@ -377,32 +387,49 @@ export class StyleInjector {
|
|
|
377
387
|
dispose: () => { },
|
|
378
388
|
};
|
|
379
389
|
}
|
|
380
|
-
// Generate cache key
|
|
381
|
-
const
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
// Check if already cached
|
|
385
|
-
const existing = registry.keyframesCache.get(cacheKey);
|
|
390
|
+
// Generate content-based cache key (independent of provided name)
|
|
391
|
+
const contentHash = JSON.stringify(steps);
|
|
392
|
+
// Check if this exact content is already cached
|
|
393
|
+
const existing = registry.keyframesCache.get(contentHash);
|
|
386
394
|
if (existing) {
|
|
387
395
|
existing.refCount++;
|
|
388
396
|
return {
|
|
389
397
|
toString: () => existing.name,
|
|
390
|
-
dispose: () => this.disposeKeyframes(
|
|
398
|
+
dispose: () => this.disposeKeyframes(contentHash, registry),
|
|
391
399
|
};
|
|
392
400
|
}
|
|
393
|
-
//
|
|
394
|
-
|
|
401
|
+
// Determine the actual name to use
|
|
402
|
+
let actualName;
|
|
403
|
+
if (providedName) {
|
|
404
|
+
// Check if this name is already used with different content
|
|
405
|
+
const existingContentForName = registry.keyframesNameToContent.get(providedName);
|
|
406
|
+
if (existingContentForName && existingContentForName !== contentHash) {
|
|
407
|
+
// Name collision: same name, different content
|
|
408
|
+
// Generate a unique name to avoid overwriting
|
|
409
|
+
actualName = `${providedName}-k${registry.keyframesCounter++}`;
|
|
410
|
+
}
|
|
411
|
+
else {
|
|
412
|
+
// Name is available or used with same content
|
|
413
|
+
actualName = providedName;
|
|
414
|
+
// Track this name -> content mapping
|
|
415
|
+
registry.keyframesNameToContent.set(providedName, contentHash);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
else {
|
|
419
|
+
// No name provided, generate one
|
|
420
|
+
actualName = `k${registry.keyframesCounter++}`;
|
|
421
|
+
}
|
|
395
422
|
// Insert keyframes
|
|
396
|
-
const info = this.sheetManager.insertKeyframes(registry, steps,
|
|
423
|
+
const info = this.sheetManager.insertKeyframes(registry, steps, actualName, root);
|
|
397
424
|
if (!info) {
|
|
398
425
|
return {
|
|
399
426
|
toString: () => '',
|
|
400
427
|
dispose: () => { },
|
|
401
428
|
};
|
|
402
429
|
}
|
|
403
|
-
// Cache the result
|
|
404
|
-
registry.keyframesCache.set(
|
|
405
|
-
name,
|
|
430
|
+
// Cache the result by content hash
|
|
431
|
+
registry.keyframesCache.set(contentHash, {
|
|
432
|
+
name: actualName,
|
|
406
433
|
refCount: 1,
|
|
407
434
|
info,
|
|
408
435
|
});
|
|
@@ -412,22 +439,30 @@ export class StyleInjector {
|
|
|
412
439
|
registry.metrics.misses++;
|
|
413
440
|
}
|
|
414
441
|
return {
|
|
415
|
-
toString: () =>
|
|
416
|
-
dispose: () => this.disposeKeyframes(
|
|
442
|
+
toString: () => actualName,
|
|
443
|
+
dispose: () => this.disposeKeyframes(contentHash, registry),
|
|
417
444
|
};
|
|
418
445
|
}
|
|
419
446
|
/**
|
|
420
447
|
* Dispose keyframes
|
|
421
448
|
*/
|
|
422
|
-
disposeKeyframes(
|
|
423
|
-
const entry = registry.keyframesCache.get(
|
|
449
|
+
disposeKeyframes(contentHash, registry) {
|
|
450
|
+
const entry = registry.keyframesCache.get(contentHash);
|
|
424
451
|
if (!entry)
|
|
425
452
|
return;
|
|
426
453
|
entry.refCount--;
|
|
427
454
|
if (entry.refCount <= 0) {
|
|
428
455
|
// Dispose immediately - keyframes are global and safe to clean up right away
|
|
429
456
|
this.sheetManager.deleteKeyframes(registry, entry.info);
|
|
430
|
-
registry.keyframesCache.delete(
|
|
457
|
+
registry.keyframesCache.delete(contentHash);
|
|
458
|
+
// Clean up name-to-content mapping if this name was tracked
|
|
459
|
+
// Find and remove the mapping for this content hash
|
|
460
|
+
for (const [name, hash] of registry.keyframesNameToContent.entries()) {
|
|
461
|
+
if (hash === contentHash) {
|
|
462
|
+
registry.keyframesNameToContent.delete(name);
|
|
463
|
+
break;
|
|
464
|
+
}
|
|
465
|
+
}
|
|
431
466
|
// Update metrics
|
|
432
467
|
if (registry.metrics) {
|
|
433
468
|
registry.metrics.totalUnused++;
|
|
@@ -442,259 +477,6 @@ export class StyleInjector {
|
|
|
442
477
|
const targetRoot = root || document;
|
|
443
478
|
this.sheetManager.cleanup(targetRoot);
|
|
444
479
|
}
|
|
445
|
-
/**
|
|
446
|
-
* Create a global style component like styled-components createGlobalStyle
|
|
447
|
-
* Returns a React component that injects global styles when mounted and cleans up when unmounted
|
|
448
|
-
*/
|
|
449
|
-
createGlobalStyle(strings, ...interpolations) {
|
|
450
|
-
const injector = this; // Capture the injector instance
|
|
451
|
-
class GlobalStyleComponent extends Component {
|
|
452
|
-
disposeFunction = null;
|
|
453
|
-
componentDidMount() {
|
|
454
|
-
this.injectStyles();
|
|
455
|
-
}
|
|
456
|
-
componentDidUpdate() {
|
|
457
|
-
this.disposeStyles();
|
|
458
|
-
this.injectStyles();
|
|
459
|
-
}
|
|
460
|
-
componentWillUnmount() {
|
|
461
|
-
this.disposeStyles();
|
|
462
|
-
}
|
|
463
|
-
injectStyles = () => {
|
|
464
|
-
const css = this.interpolateTemplate();
|
|
465
|
-
if (css.trim()) {
|
|
466
|
-
const styleResults = this.parseCSSToStyleResults(css);
|
|
467
|
-
// Use a special method for createGlobalStyle to distinguish from injectGlobal
|
|
468
|
-
const result = injector.injectCreateGlobalStyle(styleResults, {
|
|
469
|
-
root: this.props.root,
|
|
470
|
-
});
|
|
471
|
-
this.disposeFunction = result.dispose;
|
|
472
|
-
}
|
|
473
|
-
};
|
|
474
|
-
disposeStyles = () => {
|
|
475
|
-
if (this.disposeFunction) {
|
|
476
|
-
this.disposeFunction();
|
|
477
|
-
this.disposeFunction = null;
|
|
478
|
-
}
|
|
479
|
-
};
|
|
480
|
-
interpolateTemplate = () => {
|
|
481
|
-
let result = strings[0];
|
|
482
|
-
for (let i = 0; i < interpolations.length; i++) {
|
|
483
|
-
const interpolation = interpolations[i];
|
|
484
|
-
const value = typeof interpolation === 'function'
|
|
485
|
-
? interpolation(this.props)
|
|
486
|
-
: interpolation;
|
|
487
|
-
result += String(value) + strings[i + 1];
|
|
488
|
-
}
|
|
489
|
-
return result;
|
|
490
|
-
};
|
|
491
|
-
parseCSSToStyleResults = (css) => {
|
|
492
|
-
const rules = [];
|
|
493
|
-
// Enhanced CSS parser for global styles that handles nested rules
|
|
494
|
-
this.parseCSS(css, rules, [], '');
|
|
495
|
-
return rules;
|
|
496
|
-
};
|
|
497
|
-
parseCSS = (css, rules, atRuleStack, parentSelector = '') => {
|
|
498
|
-
// Remove both CSS and JavaScript-style comments
|
|
499
|
-
let cleanCSS = css.replace(/\/\*[\s\S]*?\*\//g, ''); // CSS comments
|
|
500
|
-
cleanCSS = cleanCSS.replace(/\/\/.*$/gm, ''); // JavaScript-style comments
|
|
501
|
-
let i = 0;
|
|
502
|
-
while (i < cleanCSS.length) {
|
|
503
|
-
// Skip whitespace
|
|
504
|
-
while (i < cleanCSS.length && /\s/.test(cleanCSS[i])) {
|
|
505
|
-
i++;
|
|
506
|
-
}
|
|
507
|
-
if (i >= cleanCSS.length)
|
|
508
|
-
break;
|
|
509
|
-
// Find the next selector or at-rule
|
|
510
|
-
let selectorStart = i;
|
|
511
|
-
let braceDepth = 0;
|
|
512
|
-
let inString = false;
|
|
513
|
-
let stringChar = '';
|
|
514
|
-
// Find the opening brace
|
|
515
|
-
while (i < cleanCSS.length) {
|
|
516
|
-
const char = cleanCSS[i];
|
|
517
|
-
if (inString) {
|
|
518
|
-
if (char === stringChar && cleanCSS[i - 1] !== '\\') {
|
|
519
|
-
inString = false;
|
|
520
|
-
}
|
|
521
|
-
}
|
|
522
|
-
else {
|
|
523
|
-
if (char === '"' || char === "'") {
|
|
524
|
-
inString = true;
|
|
525
|
-
stringChar = char;
|
|
526
|
-
}
|
|
527
|
-
else if (char === '{') {
|
|
528
|
-
braceDepth++;
|
|
529
|
-
if (braceDepth === 1) {
|
|
530
|
-
break; // Found the opening brace
|
|
531
|
-
}
|
|
532
|
-
}
|
|
533
|
-
else if (char === '}') {
|
|
534
|
-
braceDepth--;
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
|
-
i++;
|
|
538
|
-
}
|
|
539
|
-
if (i >= cleanCSS.length)
|
|
540
|
-
break;
|
|
541
|
-
const selectorPart = cleanCSS.substring(selectorStart, i).trim();
|
|
542
|
-
i++; // Skip the opening brace
|
|
543
|
-
// Find the matching closing brace
|
|
544
|
-
const contentStart = i;
|
|
545
|
-
braceDepth = 1;
|
|
546
|
-
inString = false;
|
|
547
|
-
while (i < cleanCSS.length && braceDepth > 0) {
|
|
548
|
-
const char = cleanCSS[i];
|
|
549
|
-
if (inString) {
|
|
550
|
-
if (char === stringChar && cleanCSS[i - 1] !== '\\') {
|
|
551
|
-
inString = false;
|
|
552
|
-
}
|
|
553
|
-
}
|
|
554
|
-
else {
|
|
555
|
-
if (char === '"' || char === "'") {
|
|
556
|
-
inString = true;
|
|
557
|
-
stringChar = char;
|
|
558
|
-
}
|
|
559
|
-
else if (char === '{') {
|
|
560
|
-
braceDepth++;
|
|
561
|
-
}
|
|
562
|
-
else if (char === '}') {
|
|
563
|
-
braceDepth--;
|
|
564
|
-
}
|
|
565
|
-
}
|
|
566
|
-
i++;
|
|
567
|
-
}
|
|
568
|
-
const content = cleanCSS.substring(contentStart, i - 1).trim();
|
|
569
|
-
// Check if this is an at-rule
|
|
570
|
-
if (selectorPart.startsWith('@')) {
|
|
571
|
-
const atSelector = selectorPart.trim();
|
|
572
|
-
// Leaf at-rules that contain declarations directly and should be emitted as-is
|
|
573
|
-
const leafAtRules = [
|
|
574
|
-
'@font-face',
|
|
575
|
-
'@property',
|
|
576
|
-
'@page',
|
|
577
|
-
'@counter-style',
|
|
578
|
-
'@font-feature-values',
|
|
579
|
-
'@font-palette-values',
|
|
580
|
-
'@color-profile',
|
|
581
|
-
];
|
|
582
|
-
const isLeafAtRule = leafAtRules.some((prefix) => atSelector.startsWith(prefix));
|
|
583
|
-
if (isLeafAtRule) {
|
|
584
|
-
// Emit the at-rule with its declarations directly
|
|
585
|
-
if (content.trim()) {
|
|
586
|
-
rules.push({
|
|
587
|
-
selector: atSelector,
|
|
588
|
-
declarations: content,
|
|
589
|
-
atRules: atRuleStack.length > 0 ? [...atRuleStack] : undefined,
|
|
590
|
-
});
|
|
591
|
-
}
|
|
592
|
-
}
|
|
593
|
-
else {
|
|
594
|
-
// Wrapper at-rule (e.g., @media, @supports, @keyframes) — parse its content
|
|
595
|
-
const newAtRuleStack = [...atRuleStack, atSelector];
|
|
596
|
-
this.parseCSS(content, rules, newAtRuleStack, parentSelector);
|
|
597
|
-
}
|
|
598
|
-
}
|
|
599
|
-
else {
|
|
600
|
-
// Check if content contains nested rules (has { and })
|
|
601
|
-
if (content.includes('{') && content.includes('}')) {
|
|
602
|
-
// This selector has nested rules, parse them
|
|
603
|
-
const { declarations, nestedCSS } = this.separateDeclarationsAndNested(content);
|
|
604
|
-
// Process the selector (handle & syntax)
|
|
605
|
-
const processedSelector = this.processSelector(selectorPart, parentSelector);
|
|
606
|
-
// Add declarations if any
|
|
607
|
-
if (declarations.trim()) {
|
|
608
|
-
rules.push({
|
|
609
|
-
selector: processedSelector,
|
|
610
|
-
declarations: declarations.trim(),
|
|
611
|
-
atRules: atRuleStack.length > 0 ? [...atRuleStack] : undefined,
|
|
612
|
-
});
|
|
613
|
-
}
|
|
614
|
-
// Parse nested CSS with current selector as parent
|
|
615
|
-
if (nestedCSS.trim()) {
|
|
616
|
-
this.parseCSS(nestedCSS, rules, atRuleStack, processedSelector);
|
|
617
|
-
}
|
|
618
|
-
}
|
|
619
|
-
else {
|
|
620
|
-
// This is a regular selector with only declarations
|
|
621
|
-
const processedSelector = this.processSelector(selectorPart, parentSelector);
|
|
622
|
-
if (content && processedSelector) {
|
|
623
|
-
rules.push({
|
|
624
|
-
selector: processedSelector,
|
|
625
|
-
declarations: content,
|
|
626
|
-
atRules: atRuleStack.length > 0 ? [...atRuleStack] : undefined,
|
|
627
|
-
});
|
|
628
|
-
}
|
|
629
|
-
}
|
|
630
|
-
}
|
|
631
|
-
}
|
|
632
|
-
};
|
|
633
|
-
separateDeclarationsAndNested = (content) => {
|
|
634
|
-
const declarations = [];
|
|
635
|
-
const nestedRules = [];
|
|
636
|
-
let i = 0;
|
|
637
|
-
let currentDeclaration = '';
|
|
638
|
-
while (i < content.length) {
|
|
639
|
-
const char = content[i];
|
|
640
|
-
if (char === '{') {
|
|
641
|
-
// Found start of nested rule, find the selector before it
|
|
642
|
-
let selectorStart = currentDeclaration.lastIndexOf(';') + 1;
|
|
643
|
-
if (selectorStart === 0 && currentDeclaration.trim()) {
|
|
644
|
-
// No semicolon found, this might be the first rule
|
|
645
|
-
selectorStart = 0;
|
|
646
|
-
}
|
|
647
|
-
const beforeBrace = currentDeclaration.substring(0, selectorStart);
|
|
648
|
-
const selector = currentDeclaration.substring(selectorStart).trim();
|
|
649
|
-
if (beforeBrace.trim()) {
|
|
650
|
-
declarations.push(beforeBrace.trim());
|
|
651
|
-
}
|
|
652
|
-
// Find the matching closing brace
|
|
653
|
-
let braceDepth = 1;
|
|
654
|
-
let ruleStart = i + 1;
|
|
655
|
-
i++; // Skip opening brace
|
|
656
|
-
while (i < content.length && braceDepth > 0) {
|
|
657
|
-
if (content[i] === '{')
|
|
658
|
-
braceDepth++;
|
|
659
|
-
else if (content[i] === '}')
|
|
660
|
-
braceDepth--;
|
|
661
|
-
i++;
|
|
662
|
-
}
|
|
663
|
-
const ruleContent = content.substring(ruleStart, i - 1);
|
|
664
|
-
nestedRules.push(`${selector} { ${ruleContent} }`);
|
|
665
|
-
currentDeclaration = '';
|
|
666
|
-
}
|
|
667
|
-
else {
|
|
668
|
-
currentDeclaration += char;
|
|
669
|
-
i++;
|
|
670
|
-
}
|
|
671
|
-
}
|
|
672
|
-
// Add remaining declarations
|
|
673
|
-
if (currentDeclaration.trim()) {
|
|
674
|
-
declarations.push(currentDeclaration.trim());
|
|
675
|
-
}
|
|
676
|
-
return {
|
|
677
|
-
declarations: declarations.join(' '),
|
|
678
|
-
nestedCSS: nestedRules.join('\n'),
|
|
679
|
-
};
|
|
680
|
-
};
|
|
681
|
-
processSelector = (selector, parentSelector) => {
|
|
682
|
-
if (!parentSelector) {
|
|
683
|
-
return selector;
|
|
684
|
-
}
|
|
685
|
-
// Handle & syntax - replace & with parent selector
|
|
686
|
-
if (selector.includes('&')) {
|
|
687
|
-
return selector.replace(/&/g, parentSelector);
|
|
688
|
-
}
|
|
689
|
-
// If no &, treat as descendant selector
|
|
690
|
-
return `${parentSelector} ${selector}`;
|
|
691
|
-
};
|
|
692
|
-
render() {
|
|
693
|
-
return null;
|
|
694
|
-
}
|
|
695
|
-
}
|
|
696
|
-
return GlobalStyleComponent;
|
|
697
|
-
}
|
|
698
480
|
}
|
|
699
481
|
|
|
700
482
|
|
|
@@ -1,14 +1,20 @@
|
|
|
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
|
-
import { createStyle, STYLE_HANDLER_MAP } from '../styles';
|
|
8
|
+
import { createStyle, STYLE_HANDLER_MAP } from '../styles/index.js';
|
|
9
9
|
export class SheetManager {
|
|
10
10
|
rootRegistries = new WeakMap();
|
|
11
11
|
config;
|
|
12
|
+
/** Dedicated style elements for raw CSS per root */
|
|
13
|
+
rawStyleElements = new WeakMap();
|
|
14
|
+
/** Tracking for raw CSS blocks per root */
|
|
15
|
+
rawCSSBlocks = new WeakMap();
|
|
16
|
+
/** Counter for generating unique raw CSS IDs */
|
|
17
|
+
rawCSSCounter = 0;
|
|
12
18
|
constructor(config) {
|
|
13
19
|
this.config = config;
|
|
14
20
|
}
|
|
@@ -41,6 +47,7 @@ export class SheetManager {
|
|
|
41
47
|
metrics,
|
|
42
48
|
classCounter: 0,
|
|
43
49
|
keyframesCache: new Map(),
|
|
50
|
+
keyframesNameToContent: new Map(),
|
|
44
51
|
keyframesCounter: 0,
|
|
45
52
|
injectedProperties: new Set(),
|
|
46
53
|
globalRules: new Map(),
|
|
@@ -237,8 +244,11 @@ export class SheetManager {
|
|
|
237
244
|
currentRuleIndex = idx + 1;
|
|
238
245
|
anyInserted = true;
|
|
239
246
|
}
|
|
240
|
-
catch (
|
|
247
|
+
catch (singleErr) {
|
|
241
248
|
// Skip unsupported selector in this engine (e.g., ::-moz-selection in Blink)
|
|
249
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
250
|
+
console.warn('[tasty] Browser rejected CSS rule:', singleRule, singleErr);
|
|
251
|
+
}
|
|
242
252
|
}
|
|
243
253
|
}
|
|
244
254
|
// If none inserted, continue without throwing to avoid aborting the whole batch
|
|
@@ -248,6 +258,9 @@ export class SheetManager {
|
|
|
248
258
|
}
|
|
249
259
|
else {
|
|
250
260
|
// Single selector failed — skip it silently (likely unsupported in this engine)
|
|
261
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
262
|
+
console.warn('[tasty] Browser rejected CSS rule:', fullRule, e);
|
|
263
|
+
}
|
|
251
264
|
}
|
|
252
265
|
}
|
|
253
266
|
}
|
|
@@ -834,6 +847,16 @@ export class SheetManager {
|
|
|
834
847
|
info.ruleIndex < styleSheet.cssRules.length) {
|
|
835
848
|
styleSheet.deleteRule(info.ruleIndex);
|
|
836
849
|
sheet.ruleCount = Math.max(0, sheet.ruleCount - 1);
|
|
850
|
+
// Adjust indices for all other rules in the same sheet
|
|
851
|
+
// This is critical - when a keyframe rule is deleted, all rules
|
|
852
|
+
// with higher indices shift down by 1
|
|
853
|
+
this.adjustIndicesAfterDeletion(registry, info.sheetIndex, info.ruleIndex, info.ruleIndex, 1,
|
|
854
|
+
// Create a dummy RuleInfo to satisfy the function signature
|
|
855
|
+
{
|
|
856
|
+
className: '',
|
|
857
|
+
ruleIndex: info.ruleIndex,
|
|
858
|
+
sheetIndex: info.sheetIndex,
|
|
859
|
+
});
|
|
837
860
|
}
|
|
838
861
|
}
|
|
839
862
|
}
|
|
@@ -906,6 +929,118 @@ export class SheetManager {
|
|
|
906
929
|
}
|
|
907
930
|
// Clear registry
|
|
908
931
|
this.rootRegistries.delete(root);
|
|
932
|
+
// Clean up raw CSS style element
|
|
933
|
+
const rawStyleElement = this.rawStyleElements.get(root);
|
|
934
|
+
if (rawStyleElement?.parentNode) {
|
|
935
|
+
rawStyleElement.parentNode.removeChild(rawStyleElement);
|
|
936
|
+
}
|
|
937
|
+
this.rawStyleElements.delete(root);
|
|
938
|
+
this.rawCSSBlocks.delete(root);
|
|
939
|
+
}
|
|
940
|
+
/**
|
|
941
|
+
* Get or create a dedicated style element for raw CSS
|
|
942
|
+
* Raw CSS is kept separate from tasty-managed sheets to avoid index conflicts
|
|
943
|
+
*/
|
|
944
|
+
getOrCreateRawStyleElement(root) {
|
|
945
|
+
let styleElement = this.rawStyleElements.get(root);
|
|
946
|
+
if (!styleElement) {
|
|
947
|
+
styleElement =
|
|
948
|
+
root.createElement?.('style') ||
|
|
949
|
+
document.createElement('style');
|
|
950
|
+
if (this.config.nonce) {
|
|
951
|
+
styleElement.nonce = this.config.nonce;
|
|
952
|
+
}
|
|
953
|
+
styleElement.setAttribute('data-tasty-raw', '');
|
|
954
|
+
// Append to head or shadow root
|
|
955
|
+
if ('head' in root && root.head) {
|
|
956
|
+
root.head.appendChild(styleElement);
|
|
957
|
+
}
|
|
958
|
+
else if ('appendChild' in root) {
|
|
959
|
+
root.appendChild(styleElement);
|
|
960
|
+
}
|
|
961
|
+
else {
|
|
962
|
+
document.head.appendChild(styleElement);
|
|
963
|
+
}
|
|
964
|
+
this.rawStyleElements.set(root, styleElement);
|
|
965
|
+
this.rawCSSBlocks.set(root, new Map());
|
|
966
|
+
}
|
|
967
|
+
return styleElement;
|
|
968
|
+
}
|
|
969
|
+
/**
|
|
970
|
+
* Inject raw CSS text directly without parsing
|
|
971
|
+
* Returns a dispose function to remove the injected CSS
|
|
972
|
+
*/
|
|
973
|
+
injectRawCSS(css, root) {
|
|
974
|
+
if (!css.trim()) {
|
|
975
|
+
return { dispose: () => { } };
|
|
976
|
+
}
|
|
977
|
+
const styleElement = this.getOrCreateRawStyleElement(root);
|
|
978
|
+
const blocksMap = this.rawCSSBlocks.get(root);
|
|
979
|
+
// Generate unique ID for this block
|
|
980
|
+
const id = `raw_${this.rawCSSCounter++}`;
|
|
981
|
+
// Calculate offsets
|
|
982
|
+
const currentContent = styleElement.textContent || '';
|
|
983
|
+
const startOffset = currentContent.length;
|
|
984
|
+
const cssWithNewline = (currentContent ? '\n' : '') + css;
|
|
985
|
+
const endOffset = startOffset + cssWithNewline.length;
|
|
986
|
+
// Append CSS
|
|
987
|
+
styleElement.textContent = currentContent + cssWithNewline;
|
|
988
|
+
// Track the block
|
|
989
|
+
const info = {
|
|
990
|
+
id,
|
|
991
|
+
css,
|
|
992
|
+
startOffset,
|
|
993
|
+
endOffset,
|
|
994
|
+
};
|
|
995
|
+
blocksMap.set(id, info);
|
|
996
|
+
return {
|
|
997
|
+
dispose: () => {
|
|
998
|
+
this.disposeRawCSS(id, root);
|
|
999
|
+
},
|
|
1000
|
+
};
|
|
1001
|
+
}
|
|
1002
|
+
/**
|
|
1003
|
+
* Remove a raw CSS block by ID
|
|
1004
|
+
*/
|
|
1005
|
+
disposeRawCSS(id, root) {
|
|
1006
|
+
const styleElement = this.rawStyleElements.get(root);
|
|
1007
|
+
const blocksMap = this.rawCSSBlocks.get(root);
|
|
1008
|
+
if (!styleElement || !blocksMap) {
|
|
1009
|
+
return;
|
|
1010
|
+
}
|
|
1011
|
+
const info = blocksMap.get(id);
|
|
1012
|
+
if (!info) {
|
|
1013
|
+
return;
|
|
1014
|
+
}
|
|
1015
|
+
// Remove from tracking
|
|
1016
|
+
blocksMap.delete(id);
|
|
1017
|
+
// Rebuild the CSS content from remaining blocks
|
|
1018
|
+
// This is simpler and more reliable than trying to splice strings
|
|
1019
|
+
const remainingBlocks = Array.from(blocksMap.values());
|
|
1020
|
+
if (remainingBlocks.length === 0) {
|
|
1021
|
+
styleElement.textContent = '';
|
|
1022
|
+
}
|
|
1023
|
+
else {
|
|
1024
|
+
// Rebuild with remaining CSS blocks in order of their original insertion
|
|
1025
|
+
// Sort by original startOffset to maintain order
|
|
1026
|
+
remainingBlocks.sort((a, b) => a.startOffset - b.startOffset);
|
|
1027
|
+
const newContent = remainingBlocks.map((block) => block.css).join('\n');
|
|
1028
|
+
styleElement.textContent = newContent;
|
|
1029
|
+
// Update offsets for remaining blocks
|
|
1030
|
+
let offset = 0;
|
|
1031
|
+
for (const block of remainingBlocks) {
|
|
1032
|
+
block.startOffset = offset;
|
|
1033
|
+
block.endOffset = offset + block.css.length;
|
|
1034
|
+
offset = block.endOffset + 1; // +1 for newline
|
|
1035
|
+
}
|
|
1036
|
+
}
|
|
1037
|
+
}
|
|
1038
|
+
/**
|
|
1039
|
+
* Get the raw CSS content for SSR
|
|
1040
|
+
*/
|
|
1041
|
+
getRawCSSText(root) {
|
|
1042
|
+
const styleElement = this.rawStyleElements.get(root);
|
|
1043
|
+
return styleElement?.textContent || '';
|
|
909
1044
|
}
|
|
910
1045
|
}
|
|
911
1046
|
|