@cube-dev/ui-kit 0.75.0 → 0.76.1
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 +20 -0
- package/es/_internal/hooks/index.js +1 -1
- package/es/_internal/hooks/use-chained-callback.js +1 -1
- package/es/_internal/hooks/use-debounced-value.js +1 -1
- package/es/_internal/hooks/use-deprecation-warning.js +1 -1
- package/es/_internal/hooks/use-effect-once.js +1 -1
- package/es/_internal/hooks/use-event.js +1 -1
- package/es/_internal/hooks/use-is-first-render.js +1 -1
- package/es/_internal/hooks/use-sync-ref.js +1 -1
- package/es/_internal/hooks/use-timer/index.js +1 -1
- package/es/_internal/hooks/use-timer/timer.js +1 -1
- package/es/_internal/hooks/use-timer/use-timer.js +1 -1
- package/es/_internal/hooks/use-update-effect.js +1 -1
- package/es/_internal/hooks/use-warn.js +1 -1
- package/es/_internal/index.js +1 -1
- package/es/components/Block.js +1 -1
- package/es/components/GlobalStyles.js +1 -1
- package/es/components/GridProvider.js +1 -1
- package/es/components/HiddenInput.js +1 -1
- package/es/components/Item.js +1 -1
- package/es/components/OpenTrasition.js +1 -1
- package/es/components/Root.js +1 -1
- package/es/components/actions/Action/Action.js +1 -1
- package/es/components/actions/Button/Button.js +1 -1
- package/es/components/actions/Button/index.js +1 -1
- package/es/components/actions/ButtonGroup/ButtonGroup.js +1 -1
- package/es/components/actions/CommandMenu/CommandMenu.js +1 -1
- package/es/components/actions/CommandMenu/index.js +1 -1
- package/es/components/actions/CommandMenu/styled.js +1 -1
- package/es/components/actions/ItemButton/ItemButton.js +1 -1
- package/es/components/actions/ItemButton/index.js +1 -1
- package/es/components/actions/Menu/Menu.js +1 -1
- package/es/components/actions/Menu/MenuItem.js +1 -1
- package/es/components/actions/Menu/MenuSection.js +1 -1
- package/es/components/actions/Menu/MenuTrigger.js +1 -1
- package/es/components/actions/Menu/SubMenuTrigger.js +1 -1
- package/es/components/actions/Menu/SubmenuTriggerContext.js +1 -1
- package/es/components/actions/Menu/context.js +1 -1
- package/es/components/actions/Menu/index.js +1 -1
- package/es/components/actions/Menu/styled.js +1 -1
- package/es/components/actions/index.js +1 -1
- package/es/components/actions/use-action.js +1 -1
- package/es/components/actions/use-anchored-menu.js +1 -1
- package/es/components/actions/use-context-menu.js +1 -1
- package/es/components/content/ActiveZone/ActiveZone.js +1 -1
- package/es/components/content/Alert/Alert.js +1 -1
- package/es/components/content/Alert/index.js +1 -1
- package/es/components/content/Alert/types.js +1 -1
- package/es/components/content/Alert/use-alert.js +1 -1
- package/es/components/content/Avatar/Avatar.js +1 -1
- package/es/components/content/Badge/Badge.js +1 -1
- package/es/components/content/Card/Card.js +1 -1
- package/es/components/content/Content.js +1 -1
- package/es/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
- package/es/components/content/CopyPasteBlock/index.js +1 -1
- package/es/components/content/CopySnippet/CopySnippet.js +1 -1
- package/es/components/content/CopySnippet/index.js +1 -1
- package/es/components/content/Divider.js +1 -1
- package/es/components/content/Footer.js +1 -1
- package/es/components/content/Header.js +1 -1
- package/es/components/content/HotKeys/HotKeys.js +1 -1
- package/es/components/content/HotKeys/index.js +1 -1
- package/es/components/content/ItemBase/ItemBase.js +1 -1
- package/es/components/content/ItemBase/index.js +1 -1
- package/es/components/content/List/SectionHeading.js +1 -1
- package/es/components/content/List/index.js +1 -1
- package/es/components/content/Paragraph.js +1 -1
- package/es/components/content/Placeholder/Placeholder.js +1 -1
- package/es/components/content/PrismCode/PrismCode.js +1 -1
- package/es/components/content/PrismCode/prismSetup.js +1 -1
- package/es/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
- package/es/components/content/Result/Result.js +1 -1
- package/es/components/content/Skeleton/Skeleton.js +1 -1
- package/es/components/content/Tag/Tag.js +1 -1
- package/es/components/content/Text.js +1 -1
- package/es/components/content/Title.js +1 -1
- package/es/components/fields/Checkbox/Checkbox.js +1 -1
- package/es/components/fields/Checkbox/CheckboxGroup.js +1 -1
- package/es/components/fields/Checkbox/context.js +1 -1
- package/es/components/fields/Checkbox/index.js +1 -1
- package/es/components/fields/ComboBox/ComboBox.js +3 -7
- package/es/components/fields/ComboBox/index.js +1 -1
- package/es/components/fields/DatePicker/DateInput.js +1 -1
- package/es/components/fields/DatePicker/DateInputBase.js +1 -1
- package/es/components/fields/DatePicker/DatePicker.js +1 -1
- package/es/components/fields/DatePicker/DatePickerButton.js +1 -1
- package/es/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/es/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/es/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/es/components/fields/DatePicker/DateRangePicker.js +1 -1
- package/es/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
- package/es/components/fields/DatePicker/TimeInput.js +1 -1
- package/es/components/fields/DatePicker/index.js +1 -1
- package/es/components/fields/DatePicker/intl.js +1 -1
- package/es/components/fields/DatePicker/parseDate.js +1 -1
- package/es/components/fields/DatePicker/props.js +1 -1
- package/es/components/fields/DatePicker/types.js +1 -1
- package/es/components/fields/DatePicker/utils.js +1 -1
- package/es/components/fields/FileInput/FileInput.js +1 -1
- package/es/components/fields/FilterListBox/FilterListBox.js +1 -1
- package/es/components/fields/FilterListBox/index.js +1 -1
- package/es/components/fields/FilterPicker/FilterPicker.js +3 -3
- package/es/components/fields/FilterPicker/index.js +1 -1
- package/es/components/fields/Input/Input.js +1 -1
- package/es/components/fields/Input/index.js +1 -1
- package/es/components/fields/ListBox/ListBox.js +1 -1
- package/es/components/fields/ListBox/index.js +1 -1
- package/es/components/fields/NumberInput/NumberInput.js +1 -1
- package/es/components/fields/NumberInput/StepButton.js +1 -1
- package/es/components/fields/PasswordInput/PasswordInput.js +1 -1
- package/es/components/fields/RadioGroup/Radio.js +1 -1
- package/es/components/fields/RadioGroup/RadioGroup.js +1 -1
- package/es/components/fields/RadioGroup/context.js +1 -1
- package/es/components/fields/RadioGroup/index.js +1 -1
- package/es/components/fields/SearchInput/SearchInput.js +1 -1
- package/es/components/fields/SearchInput/index.js +1 -1
- package/es/components/fields/Select/Select.js +1 -1
- package/es/components/fields/Select/index.js +1 -1
- package/es/components/fields/Slider/Gradation.js +1 -1
- package/es/components/fields/Slider/Header.js +1 -1
- package/es/components/fields/Slider/RangeSlider.js +1 -1
- package/es/components/fields/Slider/Slider.js +1 -1
- package/es/components/fields/Slider/SliderBase.js +1 -1
- package/es/components/fields/Slider/SliderInput.js +1 -1
- package/es/components/fields/Slider/SliderThumb.js +1 -1
- package/es/components/fields/Slider/SliderTrack.js +1 -1
- package/es/components/fields/Slider/elements.js +1 -1
- package/es/components/fields/Slider/index.js +1 -1
- package/es/components/fields/Slider/types.js +1 -1
- package/es/components/fields/Switch/Switch.js +1 -1
- package/es/components/fields/Switch/index.js +1 -1
- package/es/components/fields/TextArea/TextArea.js +1 -1
- package/es/components/fields/TextArea/index.js +1 -1
- package/es/components/fields/TextInput/TextInput.js +1 -1
- package/es/components/fields/TextInput/TextInputBase.js +1 -1
- package/es/components/fields/TextInput/index.js +1 -1
- package/es/components/fields/TextInputMapper/TextInputMapper.js +1 -1
- package/es/components/fields/TextInputMapper/index.js +1 -1
- package/es/components/fields/index.js +1 -1
- package/es/components/form/FieldWrapper/FieldWrapper.js +1 -1
- package/es/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
- package/es/components/form/FieldWrapper/index.js +1 -1
- package/es/components/form/FieldWrapper/types.js +1 -1
- package/es/components/form/Form/Field.js +1 -1
- package/es/components/form/Form/Form.js +1 -1
- package/es/components/form/Form/ResetButton/ResetButton.js +1 -1
- package/es/components/form/Form/ResetButton/index.js +1 -1
- package/es/components/form/Form/SubmitButton/SubmitButton.js +1 -1
- package/es/components/form/Form/SubmitButton/index.js +1 -1
- package/es/components/form/Form/SubmitError.js +1 -1
- package/es/components/form/Form/index.js +1 -1
- package/es/components/form/Form/types.js +1 -1
- package/es/components/form/Form/use-field/index.js +1 -1
- package/es/components/form/Form/use-field/types.js +1 -1
- package/es/components/form/Form/use-field/use-field-props.js +1 -1
- package/es/components/form/Form/use-field/use-field.js +1 -1
- package/es/components/form/Form/use-form.js +1 -1
- package/es/components/form/Form/validation.js +1 -1
- package/es/components/form/Label.js +1 -1
- package/es/components/form/index.js +1 -1
- package/es/components/form/wrapper.js +1 -1
- package/es/components/layout/Flex.js +1 -1
- package/es/components/layout/Flow.js +1 -1
- package/es/components/layout/Grid.js +1 -1
- package/es/components/layout/Panel.js +1 -1
- package/es/components/layout/Prefix.js +1 -1
- package/es/components/layout/ResizablePanel.js +1 -1
- package/es/components/layout/Space.js +1 -1
- package/es/components/layout/Suffix.js +1 -1
- package/es/components/navigation/LegacyTabs/LegacyTabs.js +1 -1
- package/es/components/navigation/Link/Link.js +1 -1
- package/es/components/organisms/FileTabs/FileTabs.js +1 -1
- package/es/components/organisms/Modal/Modal.js +1 -1
- package/es/components/organisms/StatsCard/StatsCard.js +1 -1
- package/es/components/other/Base64Upload/Base64Upload.js +1 -1
- package/es/components/other/Calendar/Calendar.js +1 -1
- package/es/components/other/Calendar/CalendarCell.js +1 -1
- package/es/components/other/Calendar/CalendarGrid.js +1 -1
- package/es/components/other/Calendar/RangeCalendar.js +1 -1
- package/es/components/other/CloudLogo/CloudLogo.js +1 -1
- package/es/components/overlays/AlertDialog/AlertDialog.js +1 -1
- package/es/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
- package/es/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
- package/es/components/overlays/AlertDialog/index.js +1 -1
- package/es/components/overlays/AlertDialog/types.js +1 -1
- package/es/components/overlays/Dialog/Dialog.js +1 -1
- package/es/components/overlays/Dialog/DialogContainer.js +1 -1
- package/es/components/overlays/Dialog/DialogForm.js +1 -1
- package/es/components/overlays/Dialog/DialogTrigger.js +1 -1
- package/es/components/overlays/Dialog/context.js +1 -1
- package/es/components/overlays/Dialog/index.js +1 -1
- package/es/components/overlays/Dialog/use-dialog-container.js +1 -1
- package/es/components/overlays/Modal/Modal.js +1 -1
- package/es/components/overlays/Modal/OpenTransition.js +1 -1
- package/es/components/overlays/Modal/Overlay.js +1 -1
- package/es/components/overlays/Modal/Popover.js +1 -1
- package/es/components/overlays/Modal/Tray.js +1 -1
- package/es/components/overlays/Modal/Underlay.js +1 -1
- package/es/components/overlays/Modal/index.js +1 -1
- package/es/components/overlays/Modal/types.js +1 -1
- package/es/components/overlays/NewNotifications/Bar/FloatingNotification.js +1 -1
- package/es/components/overlays/NewNotifications/Bar/NotificationsBar.js +1 -1
- package/es/components/overlays/NewNotifications/Bar/TransitionComponent.js +1 -1
- package/es/components/overlays/NewNotifications/Bar/index.js +1 -1
- package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.js +1 -1
- package/es/components/overlays/NewNotifications/Dialog/index.js +1 -1
- package/es/components/overlays/NewNotifications/Notification.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationAction.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationDescription.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationFooter.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationHeader.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationIcon.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationProvider.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationView.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/index.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/types.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsContext/index.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsContext/use-notifications.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsList/NotificationsList.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsList/index.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsList/types.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/index.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/types.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/use-notification-list-item.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/use-notifications-api.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/use-notifications-list.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/use-notifications-observer.js +1 -1
- package/es/components/overlays/NewNotifications/index.js +1 -1
- package/es/components/overlays/NewNotifications/types.js +1 -1
- package/es/components/overlays/Notification/Notification.js +1 -1
- package/es/components/overlays/OverlayWrapper.js +1 -1
- package/es/components/overlays/Toasts/Toast.js +1 -1
- package/es/components/overlays/Toasts/index.js +1 -1
- package/es/components/overlays/Toasts/types.js +1 -1
- package/es/components/overlays/Toasts/use-toasts-api.js +1 -1
- package/es/components/overlays/Tooltip/Tooltip.js +1 -1
- package/es/components/overlays/Tooltip/TooltipProvider.js +1 -1
- package/es/components/overlays/Tooltip/TooltipTrigger.js +1 -1
- package/es/components/overlays/Tooltip/context.js +1 -1
- package/es/components/overlays/Tooltip/index.js +1 -1
- package/es/components/portal/Portal.js +1 -1
- package/es/components/portal/PortalProvider.js +1 -1
- package/es/components/portal/index.js +1 -1
- package/es/components/portal/types.js +1 -1
- package/es/components/portal/usePortal.js +1 -1
- package/es/components/shared/InvalidIcon.js +1 -1
- package/es/components/shared/ValidIcon.js +1 -1
- package/es/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
- package/es/components/status/LoadingAnimation/index.js +1 -1
- package/es/components/status/Spin/Cube.js +1 -1
- package/es/components/status/Spin/InternalSpinner.js +1 -1
- package/es/components/status/Spin/Spin.js +1 -1
- package/es/components/status/Spin/SpinsContainer.js +1 -1
- package/es/components/status/Spin/index.js +1 -1
- package/es/components/status/Spin/types.js +1 -1
- package/es/components/status/index.js +1 -1
- package/es/data/item-themes.js +1 -1
- package/es/data/themes.js +1 -1
- package/es/icons/AdjustmentsHorizontalIcon.js +1 -1
- package/es/icons/AdjustmentsIcon.js +1 -1
- package/es/icons/AiIcon.js +1 -1
- package/es/icons/AreaChartIcon.js +1 -1
- package/es/icons/BackwardIcon.js +1 -1
- package/es/icons/BarChartIcon.js +1 -1
- package/es/icons/BellFilledIcon.js +1 -1
- package/es/icons/BellIcon.js +1 -1
- package/es/icons/BooleanIcon.js +1 -1
- package/es/icons/CalendarEditIcon.js +1 -1
- package/es/icons/CalendarIcon.js +1 -1
- package/es/icons/CaretDownIcon.js +1 -1
- package/es/icons/CaretUpIcon.js +1 -1
- package/es/icons/ChartAreaStackedIcon.js +1 -1
- package/es/icons/ChartAreaStackedPercentageIcon.js +1 -1
- package/es/icons/ChartBarGroupedHorizontalIcon.js +1 -1
- package/es/icons/ChartBarGroupedIcon.js +1 -1
- package/es/icons/ChartBarHorizontalIcon.js +1 -1
- package/es/icons/ChartBarLineIcon.js +1 -1
- package/es/icons/ChartBarStackedHorizontalIcon.js +1 -1
- package/es/icons/ChartBarStackedIcon.js +1 -1
- package/es/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
- package/es/icons/ChartBarStackedPercentageIcon.js +1 -1
- package/es/icons/ChartBoxPlot2Icon.js +1 -1
- package/es/icons/ChartBoxPlotIcon.js +1 -1
- package/es/icons/ChartBubbleIcon.js +1 -1
- package/es/icons/ChartDonut2Icon.js +1 -1
- package/es/icons/ChartFunnelIcon.js +1 -1
- package/es/icons/ChartKPIIcon.js +1 -1
- package/es/icons/ChartPie2Icon.js +1 -1
- package/es/icons/ChartScatterIcon.js +1 -1
- package/es/icons/CheckCircleFilledIcon.js +1 -1
- package/es/icons/CheckCircleIcon.js +1 -1
- package/es/icons/CheckIcon.js +1 -1
- package/es/icons/CircleFilledIcon.js +1 -1
- package/es/icons/ClearIcon.js +1 -1
- package/es/icons/CloseCircleFilledIcon.js +1 -1
- package/es/icons/CloseCircleIcon.js +1 -1
- package/es/icons/CloseIcon.js +1 -1
- package/es/icons/CodeIcon.js +1 -1
- package/es/icons/CopyIcon.js +1 -1
- package/es/icons/CountIcon.js +1 -1
- package/es/icons/CubeIcon.js +1 -1
- package/es/icons/DangerIcon.js +1 -1
- package/es/icons/DashboardIcon.js +1 -1
- package/es/icons/DatabaseIcon.js +1 -1
- package/es/icons/DirectionIcon.js +1 -1
- package/es/icons/DonutIcon.js +1 -1
- package/es/icons/DownIcon.js +1 -1
- package/es/icons/EditIcon.js +1 -1
- package/es/icons/ExclamationCircleFilledIcon.js +1 -1
- package/es/icons/ExclamationCircleIcon.js +1 -1
- package/es/icons/ExclamationIcon.js +1 -1
- package/es/icons/EyeIcon.js +1 -1
- package/es/icons/EyeInvisibleIcon.js +1 -1
- package/es/icons/FilterIcon.js +1 -1
- package/es/icons/FolderFilledIcon.js +1 -1
- package/es/icons/FolderIcon.js +1 -1
- package/es/icons/FolderOpenFilledIcon.js +1 -1
- package/es/icons/FolderOpenIcon.js +1 -1
- package/es/icons/ForwardIcon.js +1 -1
- package/es/icons/HierarchyIcon.js +1 -1
- package/es/icons/Icon.js +1 -1
- package/es/icons/InfoCircleIcon.js +1 -1
- package/es/icons/InfoIcon.js +1 -1
- package/es/icons/KeyIcon.js +1 -1
- package/es/icons/LeftIcon.js +1 -1
- package/es/icons/LineChartIcon.js +1 -1
- package/es/icons/LoadingIcon.js +1 -1
- package/es/icons/LockFilledIcon.js +1 -1
- package/es/icons/LockIcon.js +1 -1
- package/es/icons/MoreIcon.js +1 -1
- package/es/icons/NotAllowedIcon.js +1 -1
- package/es/icons/NumberIcon.js +1 -1
- package/es/icons/PauseCircleFilledIcon.js +1 -1
- package/es/icons/PauseCircleIcon.js +1 -1
- package/es/icons/PauseIcon.js +1 -1
- package/es/icons/PieChartIcon.js +1 -1
- package/es/icons/PlayCircleIcon.js +1 -1
- package/es/icons/PlayIcon.js +1 -1
- package/es/icons/PlusIcon.js +1 -1
- package/es/icons/ReloadIcon.js +1 -1
- package/es/icons/ReportIcon.js +1 -1
- package/es/icons/ReturnIcon.js +1 -1
- package/es/icons/RightIcon.js +1 -1
- package/es/icons/SchemeIcon.js +1 -1
- package/es/icons/SearchIcon.js +1 -1
- package/es/icons/SettingsIcon.js +1 -1
- package/es/icons/ShieldFilledIcon.js +1 -1
- package/es/icons/ShieldIcon.js +1 -1
- package/es/icons/SlashIcon.js +1 -1
- package/es/icons/SparklesIcon.js +1 -1
- package/es/icons/SqlIcon.js +1 -1
- package/es/icons/StatsIcon.js +1 -1
- package/es/icons/StopIcon.js +1 -1
- package/es/icons/StringIcon.js +1 -1
- package/es/icons/SwitchIcon.js +1 -1
- package/es/icons/TableIcon.js +1 -1
- package/es/icons/ThumbsDownIcon.js +1 -1
- package/es/icons/ThumbsUpIcon.js +1 -1
- package/es/icons/ThunderboltCrossedIcon.js +1 -1
- package/es/icons/ThunderboltFilledIcon.js +1 -1
- package/es/icons/ThunderboltIcon.js +1 -1
- package/es/icons/TimeIcon.js +1 -1
- package/es/icons/UnlockIcon.js +1 -1
- package/es/icons/UpIcon.js +1 -1
- package/es/icons/UserGroupIcon.js +1 -1
- package/es/icons/UserIcon.js +1 -1
- package/es/icons/UserLockIcon.js +1 -1
- package/es/icons/ViewIcon.js +1 -1
- package/es/icons/WarningFilledIcon.js +1 -1
- package/es/icons/WarningIcon.js +1 -1
- package/es/icons/add-new-icon.js +1 -1
- package/es/icons/index.js +1 -1
- package/es/icons/wrap-icon.js +1 -1
- package/es/index.js +1 -1
- package/es/provider.js +1 -1
- package/es/providers/TrackingProvider.js +1 -1
- package/es/services/notification.js +1 -1
- package/es/shared/form.js +1 -1
- package/es/shared/index.js +1 -1
- package/es/stories/Form.legacy-stories.js +1 -1
- package/es/stories/FormFieldArgs.js +1 -1
- package/es/stories/Layout.stories.js +1 -1
- package/es/stories/Tasty.stories.js +1 -1
- package/es/stories/components/ConfirmDeletionDialogForm.js +1 -1
- package/es/stories/components/DialogFormApp.js +1 -1
- package/es/stories/components/StyledButton.js +1 -1
- package/es/stories/lists/baseProps.js +1 -1
- package/es/tasty/debug.js +644 -775
- package/es/tasty/index.js +1 -1
- package/es/tasty/injector/index.js +37 -15
- package/es/tasty/injector/injector.js +157 -145
- package/es/tasty/injector/sheet-manager.js +292 -134
- package/es/tasty/injector/types.js +1 -1
- package/es/tasty/parser/classify.js +1 -1
- package/es/tasty/parser/const.js +1 -1
- package/es/tasty/parser/lru.js +1 -1
- package/es/tasty/parser/parser.js +1 -1
- package/es/tasty/parser/tokenizer.js +1 -1
- package/es/tasty/parser/types.js +1 -1
- package/es/tasty/providers/BreakpointsProvider.js +1 -1
- package/es/tasty/styles/align.js +1 -1
- package/es/tasty/styles/border.js +1 -1
- package/es/tasty/styles/boxShadow.combinator.js +1 -1
- package/es/tasty/styles/color.js +1 -1
- package/es/tasty/styles/createStyle.js +1 -1
- package/es/tasty/styles/dimension.js +1 -1
- package/es/tasty/styles/display.js +1 -1
- package/es/tasty/styles/fade.js +1 -1
- package/es/tasty/styles/fill.js +1 -1
- 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 +1 -1
- package/es/tasty/styles/groupRadius.js +1 -1
- package/es/tasty/styles/height.js +1 -1
- package/es/tasty/styles/index.js +1 -1
- package/es/tasty/styles/inset.js +1 -1
- package/es/tasty/styles/justify.js +1 -1
- package/es/tasty/styles/list.js +1 -1
- package/es/tasty/styles/margin.js +1 -1
- package/es/tasty/styles/marginBlock.js +1 -1
- package/es/tasty/styles/marginInline.js +1 -1
- package/es/tasty/styles/outline.js +1 -1
- package/es/tasty/styles/padding.js +1 -1
- package/es/tasty/styles/paddingBlock.js +1 -1
- package/es/tasty/styles/paddingInline.js +1 -1
- package/es/tasty/styles/place.js +1 -1
- package/es/tasty/styles/predefined.js +1 -1
- package/es/tasty/styles/preset.js +1 -1
- package/es/tasty/styles/radius.js +1 -1
- package/es/tasty/styles/reset.js +1 -1
- package/es/tasty/styles/scrollbar.js +1 -1
- package/es/tasty/styles/shadow.js +1 -1
- package/es/tasty/styles/styledScrollbar.js +1 -1
- package/es/tasty/styles/transition.js +1 -1
- package/es/tasty/styles/types.js +1 -1
- package/es/tasty/styles/width.js +1 -1
- package/es/tasty/tasty.js +61 -50
- 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/getModCombinations.js +1 -1
- package/es/tasty/utils/isDevEnv.js +36 -0
- package/es/tasty/utils/mergeStyles.js +1 -1
- package/es/tasty/utils/modAttrs.js +1 -1
- package/es/tasty/utils/renderStyles.js +44 -4
- package/es/tasty/utils/responsive.js +1 -1
- package/es/tasty/utils/string.js +1 -1
- package/es/tasty/utils/styles.js +39 -1
- package/es/tasty/utils/warnings.js +1 -1
- package/es/tokens.js +1 -1
- package/es/type-checks.js +1 -1
- package/es/utils/ResizeSensor.js +1 -1
- package/es/utils/modules.js +1 -1
- package/es/utils/promise.js +1 -1
- package/es/utils/random.js +1 -1
- package/es/utils/range.js +1 -1
- package/es/utils/react/Slots.js +1 -1
- package/es/utils/react/chain.js +1 -1
- package/es/utils/react/forwardRefWithGenerics.js +1 -1
- package/es/utils/react/index.js +1 -1
- package/es/utils/react/interactions.js +1 -1
- package/es/utils/react/isTextOnly.js +1 -1
- package/es/utils/react/mapProps.js +1 -1
- package/es/utils/react/mergeProps.js +1 -1
- package/es/utils/react/nullableValue.js +1 -1
- package/es/utils/react/sharedStore.js +1 -1
- package/es/utils/react/useCombinedRefs.js +1 -1
- package/es/utils/react/useControlledFocusVisible.js +1 -1
- package/es/utils/react/useEventBus.js +1 -1
- package/es/utils/react/useId.js +1 -1
- package/es/utils/react/useIsDarwin.js +1 -1
- package/es/utils/react/useKeySymbols.js +1 -1
- package/es/utils/react/useLayoutEffect.js +1 -1
- package/es/utils/react/useQaProps.js +1 -1
- package/es/utils/react/useViewportSize.js +1 -1
- package/es/utils/react/wrapNodeIfPlain.js +1 -1
- package/es/utils/transitions.js +1 -1
- package/es/utils/tree.js +1 -1
- package/es/utils/warnings.js +1 -1
- package/es/version.js +2 -2
- package/package.json +1 -1
- package/types/components/actions/Menu/styled.d.ts +60 -60
- package/types/components/content/List/SectionHeading.d.ts +20 -20
- package/types/components/fields/DatePicker/DatePickerElement.d.ts +20 -20
- package/types/tasty/debug.d.ts +133 -222
- package/types/tasty/injector/index.d.ts +18 -2
- package/types/tasty/injector/injector.d.ts +24 -16
- package/types/tasty/injector/sheet-manager.d.ts +19 -15
- package/types/tasty/injector/types.d.ts +29 -13
- package/types/tasty/utils/isDevEnv.d.ts +6 -0
- package/types/tasty/utils/renderStyles.d.ts +6 -1
- package/types/tasty/utils/styles.d.ts +1 -0
package/es/tasty/index.js
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
/**
|
2
2
|
* @license MIT
|
3
3
|
* author: Cube Dev Team
|
4
|
-
* @cube-dev/ui-kit v0.
|
4
|
+
* @cube-dev/ui-kit v0.76.1
|
5
5
|
* Released under the MIT license.
|
6
6
|
*/
|
7
7
|
|
8
|
+
import { isDevEnv } from '../utils/isDevEnv';
|
8
9
|
import { StyleInjector } from './injector';
|
9
10
|
// Use a more robust global singleton that survives React Strict Mode
|
10
11
|
const GLOBAL_INJECTOR_KEY = '__TASTY_GLOBAL_INJECTOR__';
|
@@ -38,17 +39,26 @@ function isTestEnvironment() {
|
|
38
39
|
return false;
|
39
40
|
}
|
40
41
|
/**
|
41
|
-
*
|
42
|
+
* Create default configuration with optional test environment detection
|
42
43
|
*/
|
43
|
-
|
44
|
-
|
44
|
+
function createDefaultConfig(isTest) {
|
45
|
+
return {
|
45
46
|
maxRulesPerSheet: 8192, // safer default cap per sheet
|
46
|
-
unusedStylesThreshold:
|
47
|
+
unusedStylesThreshold: 500, // default threshold for bulk cleanup of unused styles
|
47
48
|
bulkCleanupDelay: 5000, // default delay before bulk cleanup (ignored if idleCleanup is true)
|
48
49
|
idleCleanup: true, // default to using requestIdleCallback instead of setTimeout
|
49
|
-
|
50
|
-
|
51
|
-
|
50
|
+
forceTextInjection: isTest ?? false, // auto-enable for test environments
|
51
|
+
devMode: isDevEnv(), // enable dev features: performance tracking and debug info
|
52
|
+
bulkCleanupBatchRatio: 0.5,
|
53
|
+
unusedStylesMinAgeMs: 10000,
|
54
|
+
};
|
55
|
+
}
|
56
|
+
/**
|
57
|
+
* Configure the global style injector
|
58
|
+
*/
|
59
|
+
export function configure(config = {}) {
|
60
|
+
const fullConfig = {
|
61
|
+
...createDefaultConfig(),
|
52
62
|
...config,
|
53
63
|
};
|
54
64
|
// Store on window to survive React Strict Mode resets
|
@@ -70,12 +80,30 @@ function getGlobalInjector() {
|
|
70
80
|
}
|
71
81
|
return storage[GLOBAL_INJECTOR_KEY];
|
72
82
|
}
|
83
|
+
/**
|
84
|
+
* Allocate a className for a cacheKey without injecting styles yet
|
85
|
+
*/
|
86
|
+
export function allocateClassName(cacheKey, options) {
|
87
|
+
return getGlobalInjector().allocateClassName(cacheKey, options);
|
88
|
+
}
|
73
89
|
/**
|
74
90
|
* Inject styles and return className with dispose function
|
75
91
|
*/
|
76
92
|
export function inject(rules, options) {
|
77
93
|
return getGlobalInjector().inject(rules, options);
|
78
94
|
}
|
95
|
+
/**
|
96
|
+
* Inject global rules that should not reserve tasty class names
|
97
|
+
*/
|
98
|
+
export function injectGlobal(rules, options) {
|
99
|
+
return getGlobalInjector().injectGlobal(rules, options);
|
100
|
+
}
|
101
|
+
/**
|
102
|
+
* Internal method for createGlobalStyle - not exported publicly
|
103
|
+
*/
|
104
|
+
function injectCreateGlobalStyle(rules, options) {
|
105
|
+
return getGlobalInjector().injectCreateGlobalStyle(rules, options);
|
106
|
+
}
|
79
107
|
/**
|
80
108
|
* Inject keyframes and return object with toString() and dispose()
|
81
109
|
*/
|
@@ -147,13 +175,7 @@ export function destroy(root) {
|
|
147
175
|
export function createInjector(config = {}) {
|
148
176
|
const isTest = isTestEnvironment();
|
149
177
|
const fullConfig = {
|
150
|
-
|
151
|
-
unusedStylesThreshold: 500, // default threshold for bulk cleanup of unused styles
|
152
|
-
bulkCleanupDelay: 5000, // default delay before bulk cleanup (ignored if idleCleanup is true)
|
153
|
-
idleCleanup: true, // default to using requestIdleCallback instead of setTimeout
|
154
|
-
collectMetrics: false, // default to no performance tracking
|
155
|
-
forceTextInjection: isTest, // auto-enable for test environments
|
156
|
-
debugMode: false, // reduce memory usage by avoiding full cssText storage
|
178
|
+
...createDefaultConfig(isTest),
|
157
179
|
...config,
|
158
180
|
};
|
159
181
|
return new StyleInjector(fullConfig);
|
@@ -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.76.1
|
5
5
|
* Released under the MIT license.
|
6
6
|
*/
|
7
7
|
|
@@ -23,10 +23,42 @@ export class StyleInjector {
|
|
23
23
|
sheetManager;
|
24
24
|
config;
|
25
25
|
cleanupScheduled = false;
|
26
|
+
globalRuleCounter = 0;
|
26
27
|
constructor(config = {}) {
|
27
28
|
this.config = config;
|
28
29
|
this.sheetManager = new SheetManager(config);
|
29
30
|
}
|
31
|
+
/**
|
32
|
+
* Allocate a className for a cacheKey without injecting styles yet.
|
33
|
+
* This allows separating className allocation (render phase) from style injection (insertion phase).
|
34
|
+
*/
|
35
|
+
allocateClassName(cacheKey, options) {
|
36
|
+
const root = options?.root || document;
|
37
|
+
const registry = this.sheetManager.getRegistry(root);
|
38
|
+
// Check if we can reuse existing className for this cache key
|
39
|
+
if (registry.cacheKeyToClassName.has(cacheKey)) {
|
40
|
+
const className = registry.cacheKeyToClassName.get(cacheKey);
|
41
|
+
return {
|
42
|
+
className,
|
43
|
+
isNewAllocation: false,
|
44
|
+
};
|
45
|
+
}
|
46
|
+
// Generate new className and reserve it
|
47
|
+
const className = generateClassName(registry.classCounter++);
|
48
|
+
// Create placeholder RuleInfo to reserve the className
|
49
|
+
const placeholderRuleInfo = {
|
50
|
+
className,
|
51
|
+
ruleIndex: -1, // Placeholder - will be set during actual injection
|
52
|
+
sheetIndex: -1, // Placeholder - will be set during actual injection
|
53
|
+
};
|
54
|
+
// Store RuleInfo only once by className, and map cacheKey separately
|
55
|
+
registry.rules.set(className, placeholderRuleInfo);
|
56
|
+
registry.cacheKeyToClassName.set(cacheKey, className);
|
57
|
+
return {
|
58
|
+
className,
|
59
|
+
isNewAllocation: true,
|
60
|
+
};
|
61
|
+
}
|
30
62
|
/**
|
31
63
|
* Inject styles from StyleResult objects
|
32
64
|
*/
|
@@ -40,85 +72,49 @@ export class StyleInjector {
|
|
40
72
|
};
|
41
73
|
}
|
42
74
|
// Rules are now in StyleRule format directly
|
43
|
-
//
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
const
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
}
|
59
|
-
}
|
60
|
-
// Update metrics
|
61
|
-
if (registry.metrics) {
|
62
|
-
registry.metrics.hits++;
|
63
|
-
}
|
64
|
-
return {
|
65
|
-
className: generatedClass,
|
66
|
-
dispose: () => this.dispose(generatedClass, registry),
|
67
|
-
};
|
68
|
-
}
|
69
|
-
// Try to restore from unused styles if className exists but is not active
|
70
|
-
if (generatedClass &&
|
71
|
-
registry.rules.has(generatedClass) &&
|
72
|
-
!registry.refCounts.has(generatedClass)) {
|
73
|
-
const restored = this.sheetManager.restoreFromUnused(registry, generatedClass);
|
74
|
-
if (restored) {
|
75
|
+
// Check if we can reuse based on cache key
|
76
|
+
const cacheKey = options?.cacheKey;
|
77
|
+
let className;
|
78
|
+
let isPreAllocated = false;
|
79
|
+
if (cacheKey && registry.cacheKeyToClassName.has(cacheKey)) {
|
80
|
+
// Reuse existing class for this cache key
|
81
|
+
className = registry.cacheKeyToClassName.get(cacheKey);
|
82
|
+
const existingRuleInfo = registry.rules.get(className);
|
83
|
+
// Check if this is a placeholder (pre-allocated but not yet injected)
|
84
|
+
isPreAllocated =
|
85
|
+
existingRuleInfo.ruleIndex === -1 && existingRuleInfo.sheetIndex === -1;
|
86
|
+
if (!isPreAllocated) {
|
87
|
+
// Already injected - just increment refCount
|
88
|
+
const currentRefCount = registry.refCounts.get(className) || 0;
|
89
|
+
registry.refCounts.set(className, currentRefCount + 1);
|
75
90
|
// Update metrics
|
76
91
|
if (registry.metrics) {
|
77
92
|
registry.metrics.hits++;
|
78
93
|
}
|
79
94
|
return {
|
80
|
-
className
|
81
|
-
dispose: () => this.dispose(
|
95
|
+
className,
|
96
|
+
dispose: () => this.dispose(className, registry),
|
82
97
|
};
|
83
98
|
}
|
84
99
|
}
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
selector: specificSelector,
|
104
|
-
};
|
105
|
-
}
|
106
|
-
return r;
|
107
|
-
})
|
108
|
-
: rules.map((r) => {
|
109
|
-
// Increase specificity for class-based selectors by duplicating the class
|
110
|
-
if (r.selector.startsWith('.') && /^\.t\d+/.test(r.selector)) {
|
111
|
-
const classMatch = r.selector.match(/^\.t\d+/);
|
112
|
-
if (classMatch) {
|
113
|
-
const baseClass = classMatch[0];
|
114
|
-
return {
|
115
|
-
...r,
|
116
|
-
selector: baseClass + r.selector,
|
117
|
-
};
|
118
|
-
}
|
119
|
-
}
|
120
|
-
return r;
|
121
|
-
});
|
100
|
+
else {
|
101
|
+
// Generate new className
|
102
|
+
className = generateClassName(registry.classCounter++);
|
103
|
+
}
|
104
|
+
// Process rules: handle needsClassName flag and apply specificity
|
105
|
+
const rulesToInsert = rules.map((rule) => {
|
106
|
+
let newSelector = rule.selector;
|
107
|
+
// If rule needs className prepended
|
108
|
+
if (rule.needsClassName) {
|
109
|
+
// Simple concatenation: .className (double specificity) + selectorSuffix
|
110
|
+
newSelector = `.${className}.${className}${newSelector}`;
|
111
|
+
}
|
112
|
+
return {
|
113
|
+
...rule,
|
114
|
+
selector: newSelector,
|
115
|
+
needsClassName: undefined, // Remove the flag after processing
|
116
|
+
};
|
117
|
+
});
|
122
118
|
// Before inserting, auto-register @property for any color custom properties being defined.
|
123
119
|
// Fast parse: split declarations by ';' and match "--*-color:"
|
124
120
|
// Do this only when we actually insert (i.e., no cache hit above)
|
@@ -159,7 +155,18 @@ export class StyleInjector {
|
|
159
155
|
}
|
160
156
|
// Store in registry
|
161
157
|
registry.refCounts.set(className, 1);
|
162
|
-
|
158
|
+
if (isPreAllocated) {
|
159
|
+
// Update the existing placeholder entry with real rule info
|
160
|
+
registry.rules.set(className, ruleInfo);
|
161
|
+
// cacheKey mapping already exists from allocation
|
162
|
+
}
|
163
|
+
else {
|
164
|
+
// Store new entries
|
165
|
+
registry.rules.set(className, ruleInfo);
|
166
|
+
if (cacheKey) {
|
167
|
+
registry.cacheKeyToClassName.set(cacheKey, className);
|
168
|
+
}
|
169
|
+
}
|
163
170
|
// Update metrics
|
164
171
|
if (registry.metrics) {
|
165
172
|
registry.metrics.totalInsertions++;
|
@@ -171,74 +178,78 @@ export class StyleInjector {
|
|
171
178
|
};
|
172
179
|
}
|
173
180
|
/**
|
174
|
-
*
|
181
|
+
* Inject global styles (rules without a generated tasty class selector)
|
182
|
+
* This ensures we don't reserve a tasty class name (t{number}) for global rules,
|
183
|
+
* which could otherwise collide with element-level styles and break lookups.
|
175
184
|
*/
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
}
|
185
|
+
injectGlobal(rules, options) {
|
186
|
+
const root = options?.root || document;
|
187
|
+
const registry = this.sheetManager.getRegistry(root);
|
188
|
+
if (!rules || rules.length === 0) {
|
189
|
+
return { dispose: () => { } };
|
182
190
|
}
|
183
|
-
|
191
|
+
// Use a non-tasty identifier to avoid any collisions with .t{number} classes
|
192
|
+
const key = `global:${this.globalRuleCounter++}`;
|
193
|
+
const info = this.sheetManager.insertGlobalRule(registry, rules, key, root);
|
194
|
+
if (registry.metrics) {
|
195
|
+
registry.metrics.totalInsertions++;
|
196
|
+
}
|
197
|
+
return {
|
198
|
+
dispose: () => {
|
199
|
+
if (info)
|
200
|
+
this.sheetManager.deleteGlobalRule(registry, key);
|
201
|
+
},
|
202
|
+
};
|
184
203
|
}
|
185
204
|
/**
|
186
|
-
*
|
205
|
+
* Inject styles from createGlobalStyle (separate from injectGlobal for tracking)
|
187
206
|
*/
|
188
|
-
|
189
|
-
const
|
190
|
-
|
191
|
-
|
207
|
+
injectCreateGlobalStyle(rules, options) {
|
208
|
+
const root = options?.root || document;
|
209
|
+
const registry = this.sheetManager.getRegistry(root);
|
210
|
+
if (!rules || rules.length === 0) {
|
211
|
+
return { dispose: () => { } };
|
212
|
+
}
|
213
|
+
// Use a different prefix to distinguish from injectGlobal
|
214
|
+
const key = `raw:${this.globalRuleCounter++}`;
|
215
|
+
const info = this.sheetManager.insertGlobalRule(registry, rules, key, root);
|
216
|
+
if (registry.metrics) {
|
217
|
+
registry.metrics.totalInsertions++;
|
218
|
+
}
|
219
|
+
return {
|
220
|
+
dispose: () => {
|
221
|
+
if (info)
|
222
|
+
this.sheetManager.deleteGlobalRule(registry, key);
|
223
|
+
},
|
192
224
|
};
|
193
|
-
// Sort rules to ensure consistent cache keys for equivalent rule sets
|
194
|
-
const sortedRules = [...rules].sort((a, b) => {
|
195
|
-
const aKey = `${normalizeSelector(a.selector)}${a.atRules ? a.atRules.join('|') : ''}`;
|
196
|
-
const bKey = `${normalizeSelector(b.selector)}${b.atRules ? b.atRules.join('|') : ''}`;
|
197
|
-
return aKey.localeCompare(bKey);
|
198
|
-
});
|
199
|
-
return sortedRules
|
200
|
-
.map((rule) => {
|
201
|
-
const at = rule.atRules && rule.atRules.length
|
202
|
-
? `@${rule.atRules.join('|')}`
|
203
|
-
: '';
|
204
|
-
const sel = normalizeSelector(rule.selector);
|
205
|
-
// Normalize declarations by sorting properties for consistent caching
|
206
|
-
const normalizedDeclarations = rule.declarations
|
207
|
-
.split(';')
|
208
|
-
.filter(Boolean)
|
209
|
-
.map((decl) => decl.trim())
|
210
|
-
.sort()
|
211
|
-
.join(';');
|
212
|
-
return `${sel}{${normalizedDeclarations}}${at}`;
|
213
|
-
})
|
214
|
-
.join('');
|
215
225
|
}
|
216
226
|
/**
|
217
227
|
* Dispose of a className
|
218
228
|
*/
|
219
229
|
dispose(className, registry) {
|
220
|
-
const currentRefCount = registry.refCounts.get(className)
|
221
|
-
|
222
|
-
|
223
|
-
|
230
|
+
const currentRefCount = registry.refCounts.get(className);
|
231
|
+
// Guard against stale double-dispose or mismatched lifecycle
|
232
|
+
if (currentRefCount == null || currentRefCount <= 0) {
|
233
|
+
return;
|
224
234
|
}
|
225
|
-
|
226
|
-
|
235
|
+
const newRefCount = currentRefCount - 1;
|
236
|
+
registry.refCounts.set(className, newRefCount);
|
237
|
+
if (newRefCount === 0) {
|
238
|
+
// Update metrics
|
239
|
+
if (registry.metrics) {
|
240
|
+
registry.metrics.totalUnused++;
|
241
|
+
}
|
242
|
+
// Check if cleanup should be scheduled
|
243
|
+
this.sheetManager.checkCleanupNeeded(registry);
|
227
244
|
}
|
228
245
|
}
|
229
|
-
/**
|
230
|
-
* Cleanup unused rules
|
231
|
-
*/
|
232
|
-
cleanup(root) {
|
233
|
-
const registry = this.sheetManager.getRegistry(root || document);
|
234
|
-
this.sheetManager.processCleanupQueue(registry);
|
235
|
-
}
|
236
246
|
/**
|
237
247
|
* Force bulk cleanup of unused styles
|
238
248
|
*/
|
239
|
-
|
249
|
+
cleanup(root) {
|
240
250
|
const registry = this.sheetManager.getRegistry(root || document);
|
241
|
-
|
251
|
+
// Clean up ALL unused rules regardless of batch ratio
|
252
|
+
this.sheetManager.forceCleanup(registry);
|
242
253
|
}
|
243
254
|
/**
|
244
255
|
* Get CSS text from all sheets (for SSR)
|
@@ -258,16 +269,16 @@ export class StyleInjector {
|
|
258
269
|
for (const cls of classNames) {
|
259
270
|
const info = registry.rules.get(cls);
|
260
271
|
if (info) {
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
const
|
267
|
-
|
268
|
-
if (
|
269
|
-
|
270
|
-
|
272
|
+
// Always prefer reading from the live stylesheet, since indices can change
|
273
|
+
const sheet = registry.sheets[info.sheetIndex];
|
274
|
+
const styleSheet = sheet?.sheet?.sheet;
|
275
|
+
if (styleSheet) {
|
276
|
+
const start = Math.max(0, info.ruleIndex);
|
277
|
+
const end = Math.min(styleSheet.cssRules.length - 1, info.endRuleIndex ?? info.ruleIndex);
|
278
|
+
// Additional validation: ensure indices are valid and in correct order
|
279
|
+
if (start >= 0 &&
|
280
|
+
end >= start &&
|
281
|
+
start < styleSheet.cssRules.length) {
|
271
282
|
for (let i = start; i <= end; i++) {
|
272
283
|
const rule = styleSheet.cssRules[i];
|
273
284
|
if (rule)
|
@@ -275,6 +286,10 @@ export class StyleInjector {
|
|
275
286
|
}
|
276
287
|
}
|
277
288
|
}
|
289
|
+
else if (info.cssText && info.cssText.length) {
|
290
|
+
// Fallback in environments without CSSOM access
|
291
|
+
cssChunks.push(...info.cssText);
|
292
|
+
}
|
278
293
|
}
|
279
294
|
}
|
280
295
|
return cssChunks.join('\n');
|
@@ -295,14 +310,6 @@ export class StyleInjector {
|
|
295
310
|
const registry = this.sheetManager.getRegistry(root);
|
296
311
|
this.sheetManager.resetMetrics(registry);
|
297
312
|
}
|
298
|
-
/**
|
299
|
-
* Force cleanup of unused styles (useful for memory pressure)
|
300
|
-
*/
|
301
|
-
forceCleanupUnused(options) {
|
302
|
-
const root = options?.root || document;
|
303
|
-
const registry = this.sheetManager.getRegistry(root);
|
304
|
-
this.sheetManager['performBulkCleanup'](registry);
|
305
|
-
}
|
306
313
|
/**
|
307
314
|
* Define a CSS @property custom property
|
308
315
|
* Example:
|
@@ -418,9 +425,14 @@ export class StyleInjector {
|
|
418
425
|
return;
|
419
426
|
entry.refCount--;
|
420
427
|
if (entry.refCount <= 0) {
|
421
|
-
//
|
428
|
+
// Dispose immediately - keyframes are global and safe to clean up right away
|
429
|
+
this.sheetManager.deleteKeyframes(registry, entry.info);
|
422
430
|
registry.keyframesCache.delete(cacheKey);
|
423
|
-
|
431
|
+
// Update metrics
|
432
|
+
if (registry.metrics) {
|
433
|
+
registry.metrics.totalUnused++;
|
434
|
+
registry.metrics.stylesCleanedUp++;
|
435
|
+
}
|
424
436
|
}
|
425
437
|
}
|
426
438
|
/**
|
@@ -452,8 +464,8 @@ export class StyleInjector {
|
|
452
464
|
const css = this.interpolateTemplate();
|
453
465
|
if (css.trim()) {
|
454
466
|
const styleResults = this.parseCSSToStyleResults(css);
|
455
|
-
//
|
456
|
-
const result = injector.
|
467
|
+
// Use a special method for createGlobalStyle to distinguish from injectGlobal
|
468
|
+
const result = injector.injectCreateGlobalStyle(styleResults, {
|
457
469
|
root: this.props.root,
|
458
470
|
});
|
459
471
|
this.disposeFunction = result.dispose;
|