@cube-dev/ui-kit 0.0.0-canary-0692b88 → 0.0.0-canary-72a72ab
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/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 +1 -1
- package/es/components/fields/ComboBox/index.js +1 -1
- package/es/components/fields/DatePicker/DateInput.js +1 -1
- package/es/components/fields/DatePicker/DateInputBase.js +1 -1
- package/es/components/fields/DatePicker/DatePicker.js +1 -1
- package/es/components/fields/DatePicker/DatePickerButton.js +1 -1
- package/es/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/es/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/es/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/es/components/fields/DatePicker/DateRangePicker.js +1 -1
- package/es/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
- package/es/components/fields/DatePicker/TimeInput.js +1 -1
- package/es/components/fields/DatePicker/index.js +1 -1
- package/es/components/fields/DatePicker/intl.js +1 -1
- package/es/components/fields/DatePicker/parseDate.js +1 -1
- package/es/components/fields/DatePicker/props.js +1 -1
- package/es/components/fields/DatePicker/types.js +1 -1
- package/es/components/fields/DatePicker/utils.js +1 -1
- package/es/components/fields/FileInput/FileInput.js +1 -1
- package/es/components/fields/FilterListBox/FilterListBox.js +1 -1
- package/es/components/fields/FilterListBox/index.js +1 -1
- package/es/components/fields/FilterPicker/FilterPicker.js +1 -1
- package/es/components/fields/FilterPicker/index.js +1 -1
- package/es/components/fields/Input/Input.js +1 -1
- package/es/components/fields/Input/index.js +1 -1
- package/es/components/fields/ListBox/ListBox.js +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 +15 -156
- package/es/tasty/index.js +1 -1
- package/es/tasty/injector/flatten.js +1 -1
- package/es/tasty/injector/index.js +1 -1
- package/es/tasty/injector/injector.js +6 -49
- package/es/tasty/injector/sheet-manager.js +110 -355
- 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 +1 -1
- 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/mergeStyles.js +1 -1
- package/es/tasty/utils/modAttrs.js +1 -1
- package/es/tasty/utils/renderStyles.js +1 -1
- package/es/tasty/utils/responsive.js +1 -1
- package/es/tasty/utils/string.js +1 -1
- package/es/tasty/utils/styles.js +1 -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/tasty/debug.d.ts +2 -27
- package/types/tasty/injector/sheet-manager.d.ts +0 -27
- package/types/tasty/injector/types.d.ts +0 -37
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license MIT
|
|
3
3
|
* author: Cube Dev Team
|
|
4
|
-
* @cube-dev/ui-kit v0.0.0-canary-
|
|
4
|
+
* @cube-dev/ui-kit v0.0.0-canary-72a72ab
|
|
5
5
|
* Released under the MIT license.
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -38,10 +38,6 @@ export class SheetManager {
|
|
|
38
38
|
bulkCleanupTimeout: null,
|
|
39
39
|
metrics,
|
|
40
40
|
classCounter: 0,
|
|
41
|
-
batchedRules: new Map(),
|
|
42
|
-
batchedRuleMeta: new Map(),
|
|
43
|
-
classToBatchedKeys: new Map(),
|
|
44
|
-
unusedBatchedClasses: new Set(),
|
|
45
41
|
};
|
|
46
42
|
this.rootRegistries.set(root, registry);
|
|
47
43
|
}
|
|
@@ -93,105 +89,113 @@ export class SheetManager {
|
|
|
93
89
|
* Insert CSS rules as a single block
|
|
94
90
|
*/
|
|
95
91
|
insertRule(registry, flattenedRules, className, root) {
|
|
92
|
+
// Find or create a sheet with available space
|
|
93
|
+
let targetSheet = this.findAvailableSheet(registry, root);
|
|
94
|
+
if (!targetSheet) {
|
|
95
|
+
targetSheet = this.createSheet(registry, root);
|
|
96
|
+
}
|
|
97
|
+
const ruleIndex = this.findAvailableRuleIndex(targetSheet);
|
|
98
|
+
const sheetIndex = registry.sheets.indexOf(targetSheet);
|
|
96
99
|
try {
|
|
97
|
-
//
|
|
100
|
+
// Group rules by selector and at-rules to combine declarations
|
|
98
101
|
const groupedRules = [];
|
|
99
102
|
const groupMap = new Map();
|
|
100
103
|
const atKey = (at) => (at && at.length ? at.join('|') : '');
|
|
101
|
-
|
|
104
|
+
flattenedRules.forEach((r) => {
|
|
102
105
|
const key = `${atKey(r.atRules)}||${r.selector}`;
|
|
103
106
|
const existing = groupMap.get(key);
|
|
104
107
|
if (existing) {
|
|
105
|
-
|
|
108
|
+
// Append declarations, preserving order
|
|
109
|
+
existing.declarations = existing.declarations
|
|
110
|
+
? `${existing.declarations} ${r.declarations}`
|
|
111
|
+
: r.declarations;
|
|
106
112
|
}
|
|
107
113
|
else {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
// Ensure registry maps exist for this class
|
|
114
|
-
if (!registry.classToBatchedKeys.has(className)) {
|
|
115
|
-
registry.classToBatchedKeys.set(className, new Set());
|
|
116
|
-
}
|
|
117
|
-
// Apply batching per grouped rule
|
|
118
|
-
for (const rule of groupedRules) {
|
|
119
|
-
const normalizedDecl = this.normalizeDeclarations(rule.declarations);
|
|
120
|
-
const { selectorTemplate } = this.makeSelectorTemplate(rule.selector, className);
|
|
121
|
-
const batchKey = this.getBatchKey(rule.atRules, selectorTemplate, normalizedDecl);
|
|
122
|
-
// Record meta
|
|
123
|
-
if (!registry.batchedRuleMeta.has(batchKey)) {
|
|
124
|
-
registry.batchedRuleMeta.set(batchKey, {
|
|
125
|
-
selectorTemplate,
|
|
126
|
-
declarations: normalizedDecl,
|
|
127
|
-
atRules: rule.atRules && rule.atRules.length
|
|
128
|
-
? [...rule.atRules]
|
|
129
|
-
: undefined,
|
|
114
|
+
groupMap.set(key, {
|
|
115
|
+
idx: groupedRules.length,
|
|
116
|
+
selector: r.selector,
|
|
117
|
+
atRules: r.atRules,
|
|
118
|
+
declarations: r.declarations,
|
|
130
119
|
});
|
|
120
|
+
groupedRules.push({ ...r });
|
|
131
121
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
}
|
|
140
|
-
// Unmark class as unused if it was marked
|
|
141
|
-
if (registry.unusedBatchedClasses.has(className)) {
|
|
142
|
-
registry.unusedBatchedClasses.delete(className);
|
|
143
|
-
}
|
|
144
|
-
continue;
|
|
145
|
-
}
|
|
146
|
-
// Check if this exact rule already exists as a non-batched rule in any sheet
|
|
147
|
-
// and convert it to a batched rule instead of duplicating
|
|
148
|
-
const existingClassWithSameRule = this.findClassWithIdenticalRule(registry, batchKey, className);
|
|
149
|
-
if (existingClassWithSameRule) {
|
|
150
|
-
// Convert existing rule to batched and add current class
|
|
151
|
-
this.convertToBatchedRule(registry, existingClassWithSameRule, className, batchKey, root);
|
|
152
|
-
continue;
|
|
153
|
-
}
|
|
154
|
-
// Need to create a new CSS rule for this batch key
|
|
155
|
-
const { sheet, sheetIndex, ruleIndex } = this.ensureTargetSheetAndIndex(registry, root);
|
|
156
|
-
const entry = {
|
|
157
|
-
key: batchKey,
|
|
158
|
-
selectorTemplate,
|
|
159
|
-
declarations: normalizedDecl,
|
|
160
|
-
atRules: rule.atRules && rule.atRules.length ? [...rule.atRules] : undefined,
|
|
161
|
-
classNames: new Set([className]),
|
|
162
|
-
sheetIndex,
|
|
163
|
-
ruleIndex,
|
|
122
|
+
});
|
|
123
|
+
// Normalize groupedRules from map (with merged declarations)
|
|
124
|
+
groupMap.forEach((val) => {
|
|
125
|
+
groupedRules[val.idx] = {
|
|
126
|
+
selector: val.selector,
|
|
127
|
+
atRules: val.atRules,
|
|
128
|
+
declarations: val.declarations,
|
|
164
129
|
};
|
|
165
|
-
|
|
166
|
-
|
|
130
|
+
});
|
|
131
|
+
// Insert grouped rules
|
|
132
|
+
const insertedRuleTexts = [];
|
|
133
|
+
let currentRuleIndex = ruleIndex;
|
|
134
|
+
let firstInsertedIndex = null;
|
|
135
|
+
let lastInsertedIndex = null;
|
|
136
|
+
for (const rule of groupedRules) {
|
|
137
|
+
const declarations = rule.declarations;
|
|
138
|
+
const baseRule = `${rule.selector} { ${declarations} }`;
|
|
139
|
+
// Wrap with at-rules if present
|
|
140
|
+
let fullRule = baseRule;
|
|
141
|
+
if (rule.atRules && rule.atRules.length > 0) {
|
|
142
|
+
fullRule = rule.atRules.reduce((css, atRule) => `${atRule} { ${css} }`, baseRule);
|
|
143
|
+
}
|
|
144
|
+
// Insert individual rule into style element
|
|
145
|
+
const styleElement = targetSheet.sheet;
|
|
167
146
|
const styleSheet = styleElement.sheet;
|
|
168
147
|
if (styleSheet && !this.config.forceTextInjection) {
|
|
169
148
|
const maxIndex = styleSheet.cssRules.length;
|
|
170
|
-
const safeIndex = Math.min(Math.max(0,
|
|
171
|
-
styleSheet.insertRule(
|
|
149
|
+
const safeIndex = Math.min(Math.max(0, currentRuleIndex), maxIndex);
|
|
150
|
+
styleSheet.insertRule(fullRule, safeIndex);
|
|
151
|
+
if (firstInsertedIndex == null)
|
|
152
|
+
firstInsertedIndex = safeIndex;
|
|
153
|
+
lastInsertedIndex = safeIndex;
|
|
154
|
+
currentRuleIndex = safeIndex + 1;
|
|
172
155
|
}
|
|
173
156
|
else {
|
|
157
|
+
// Use textContent (either as fallback or when forceTextInjection is enabled)
|
|
174
158
|
styleElement.textContent =
|
|
175
|
-
(styleElement.textContent || '') + '\n' +
|
|
176
|
-
|
|
159
|
+
(styleElement.textContent || '') + '\n' + fullRule;
|
|
160
|
+
if (firstInsertedIndex == null)
|
|
161
|
+
firstInsertedIndex = currentRuleIndex;
|
|
162
|
+
lastInsertedIndex = currentRuleIndex;
|
|
163
|
+
currentRuleIndex++;
|
|
177
164
|
}
|
|
178
|
-
//
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
165
|
+
// CRITICAL DEBUG: Verify the style element is in DOM only if there are issues and we're not using forceTextInjection
|
|
166
|
+
if (!styleElement.parentNode && !this.config.forceTextInjection) {
|
|
167
|
+
console.error('SheetManager: Style element is NOT in DOM! This is the problem!', {
|
|
168
|
+
className,
|
|
169
|
+
ruleIndex: currentRuleIndex,
|
|
170
|
+
});
|
|
183
171
|
}
|
|
172
|
+
// Conditionally store cssText and track for debug
|
|
173
|
+
if (this.config.debugMode) {
|
|
174
|
+
insertedRuleTexts.push(fullRule);
|
|
175
|
+
try {
|
|
176
|
+
registry.ruleTextSet.add(fullRule);
|
|
177
|
+
}
|
|
178
|
+
catch (_) {
|
|
179
|
+
// noop: defensive in case ruleTextSet is unavailable
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// currentRuleIndex already adjusted above
|
|
183
|
+
}
|
|
184
|
+
// Update sheet info based on the number of rules inserted
|
|
185
|
+
const finalRuleIndex = currentRuleIndex - 1;
|
|
186
|
+
if (finalRuleIndex >= targetSheet.ruleCount) {
|
|
187
|
+
targetSheet.ruleCount = finalRuleIndex + 1;
|
|
184
188
|
}
|
|
185
|
-
// For batched insertion, we don't create per-class RuleInfo ranges anymore
|
|
186
189
|
return {
|
|
187
190
|
className,
|
|
188
|
-
ruleIndex:
|
|
189
|
-
sheetIndex
|
|
190
|
-
cssText: [],
|
|
191
|
+
ruleIndex: firstInsertedIndex ?? ruleIndex,
|
|
192
|
+
sheetIndex,
|
|
193
|
+
cssText: this.config.debugMode ? insertedRuleTexts : [],
|
|
194
|
+
endRuleIndex: lastInsertedIndex ?? finalRuleIndex,
|
|
191
195
|
};
|
|
192
196
|
}
|
|
193
197
|
catch (error) {
|
|
194
|
-
console.warn('Failed to insert CSS rules
|
|
198
|
+
console.warn('Failed to insert CSS rules:', error, {
|
|
195
199
|
flattenedRules,
|
|
196
200
|
className,
|
|
197
201
|
});
|
|
@@ -296,34 +300,21 @@ export class SheetManager {
|
|
|
296
300
|
* Mark a ruleset as unused but keep it in the stylesheet
|
|
297
301
|
*/
|
|
298
302
|
markAsUnused(registry, className) {
|
|
299
|
-
// If this class participates in batched rules, just mark it as unused
|
|
300
|
-
const keys = registry.classToBatchedKeys.get(className);
|
|
301
|
-
if (keys && keys.size) {
|
|
302
|
-
registry.unusedBatchedClasses.add(className);
|
|
303
|
-
registry.refCounts.delete(className);
|
|
304
|
-
if (registry.metrics) {
|
|
305
|
-
registry.metrics.totalUnused++;
|
|
306
|
-
}
|
|
307
|
-
// Schedule cleanup when we have enough unused classes
|
|
308
|
-
const threshold = this.config.unusedStylesThreshold || 500;
|
|
309
|
-
if (registry.unusedBatchedClasses.size >= threshold) {
|
|
310
|
-
this.scheduleBulkCleanup(registry);
|
|
311
|
-
}
|
|
312
|
-
return; // handled via batched path
|
|
313
|
-
}
|
|
314
|
-
// Fallback to legacy unused path for non-batched rules
|
|
315
303
|
const ruleInfo = registry.rules.get(className);
|
|
316
304
|
if (!ruleInfo)
|
|
317
305
|
return;
|
|
306
|
+
// Mark as unused (but keep in registry.rules)
|
|
318
307
|
const unusedInfo = {
|
|
319
308
|
ruleInfo,
|
|
320
309
|
markedUnusedAt: Date.now(),
|
|
321
310
|
};
|
|
322
311
|
registry.unusedRules.set(className, unusedInfo);
|
|
323
312
|
registry.refCounts.delete(className);
|
|
313
|
+
// Update metrics
|
|
324
314
|
if (registry.metrics) {
|
|
325
315
|
registry.metrics.totalUnused++;
|
|
326
316
|
}
|
|
317
|
+
// Schedule bulk cleanup if threshold exceeded
|
|
327
318
|
const threshold = this.config.unusedStylesThreshold || 500;
|
|
328
319
|
if (registry.unusedRules.size >= threshold) {
|
|
329
320
|
this.scheduleBulkCleanup(registry);
|
|
@@ -368,79 +359,41 @@ export class SheetManager {
|
|
|
368
359
|
* Perform bulk cleanup of all unused styles
|
|
369
360
|
*/
|
|
370
361
|
performBulkCleanup(registry) {
|
|
362
|
+
if (registry.unusedRules.size === 0)
|
|
363
|
+
return;
|
|
364
|
+
const classNamesToCleanup = Array.from(registry.unusedRules.keys());
|
|
371
365
|
let cleanedUpCount = 0;
|
|
372
|
-
//
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
const sheetIndex = unusedInfo.ruleInfo.sheetIndex;
|
|
382
|
-
if (!rulesBySheet.has(sheetIndex)) {
|
|
383
|
-
rulesBySheet.set(sheetIndex, []);
|
|
384
|
-
}
|
|
385
|
-
rulesBySheet
|
|
386
|
-
.get(sheetIndex)
|
|
387
|
-
.push({ className, ruleInfo: unusedInfo.ruleInfo });
|
|
366
|
+
// Group by sheet for efficient deletion
|
|
367
|
+
const rulesBySheet = new Map();
|
|
368
|
+
for (const className of classNamesToCleanup) {
|
|
369
|
+
const unusedInfo = registry.unusedRules.get(className);
|
|
370
|
+
if (!unusedInfo)
|
|
371
|
+
continue;
|
|
372
|
+
const sheetIndex = unusedInfo.ruleInfo.sheetIndex;
|
|
373
|
+
if (!rulesBySheet.has(sheetIndex)) {
|
|
374
|
+
rulesBySheet.set(sheetIndex, []);
|
|
388
375
|
}
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
376
|
+
rulesBySheet
|
|
377
|
+
.get(sheetIndex)
|
|
378
|
+
.push({ className, ruleInfo: unusedInfo.ruleInfo });
|
|
379
|
+
}
|
|
380
|
+
// Delete rules from each sheet (in reverse order to preserve indices)
|
|
381
|
+
for (const [sheetIndex, rulesInSheet] of rulesBySheet) {
|
|
382
|
+
// Sort by rule index in descending order for safe deletion
|
|
383
|
+
rulesInSheet.sort((a, b) => b.ruleInfo.ruleIndex - a.ruleInfo.ruleIndex);
|
|
384
|
+
for (const { className, ruleInfo } of rulesInSheet) {
|
|
385
|
+
this.deleteRule(registry, ruleInfo);
|
|
386
|
+
registry.rules.delete(className);
|
|
387
|
+
registry.unusedRules.delete(className);
|
|
388
|
+
cleanedUpCount++;
|
|
399
389
|
}
|
|
400
390
|
}
|
|
401
|
-
// Handle batched unused classes
|
|
402
|
-
if (registry.unusedBatchedClasses.size > 0) {
|
|
403
|
-
cleanedUpCount += this.cleanupBatchedUnusedClasses(registry);
|
|
404
|
-
}
|
|
405
391
|
// Update metrics
|
|
406
392
|
if (registry.metrics) {
|
|
407
393
|
registry.metrics.bulkCleanups++;
|
|
408
394
|
registry.metrics.stylesCleanedUp += cleanedUpCount;
|
|
409
395
|
}
|
|
410
396
|
}
|
|
411
|
-
/**
|
|
412
|
-
* Clean up unused classes from batched rules
|
|
413
|
-
*/
|
|
414
|
-
cleanupBatchedUnusedClasses(registry) {
|
|
415
|
-
const unusedClasses = Array.from(registry.unusedBatchedClasses);
|
|
416
|
-
let cleanedUpCount = 0;
|
|
417
|
-
for (const className of unusedClasses) {
|
|
418
|
-
const keys = registry.classToBatchedKeys.get(className);
|
|
419
|
-
if (!keys)
|
|
420
|
-
continue;
|
|
421
|
-
for (const key of keys) {
|
|
422
|
-
const entry = registry.batchedRules.get(key);
|
|
423
|
-
if (!entry)
|
|
424
|
-
continue;
|
|
425
|
-
// Remove class from the batched rule
|
|
426
|
-
entry.classNames.delete(className);
|
|
427
|
-
if (entry.classNames.size === 0) {
|
|
428
|
-
// Remove the entire batched rule if no classes left
|
|
429
|
-
this.removeBatchedEntry(registry, entry);
|
|
430
|
-
registry.batchedRules.delete(key);
|
|
431
|
-
}
|
|
432
|
-
else {
|
|
433
|
-
// Update the CSS to remove this class from the selector
|
|
434
|
-
this.updateBatchedRuleCss(registry, entry, document);
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
// Clean up the class mappings
|
|
438
|
-
registry.classToBatchedKeys.delete(className);
|
|
439
|
-
registry.unusedBatchedClasses.delete(className);
|
|
440
|
-
cleanedUpCount++;
|
|
441
|
-
}
|
|
442
|
-
return cleanedUpCount;
|
|
443
|
-
}
|
|
444
397
|
/**
|
|
445
398
|
* Process the deletion queue for cleanup
|
|
446
399
|
*/
|
|
@@ -534,204 +487,6 @@ export class SheetManager {
|
|
|
534
487
|
// Clear registry
|
|
535
488
|
this.rootRegistries.delete(root);
|
|
536
489
|
}
|
|
537
|
-
/** Normalize declaration list by sorting properties for stable keys */
|
|
538
|
-
normalizeDeclarations(declarations) {
|
|
539
|
-
return declarations
|
|
540
|
-
.split(';')
|
|
541
|
-
.map((d) => d.trim())
|
|
542
|
-
.filter(Boolean)
|
|
543
|
-
.sort((a, b) => a.localeCompare(b))
|
|
544
|
-
.join(';');
|
|
545
|
-
}
|
|
546
|
-
/** Build selector template normalizing class references to placeholders.
|
|
547
|
-
* Rules:
|
|
548
|
-
* - Replace any occurrence of :is(.class[, .class]*) with :is(__CLASS__)
|
|
549
|
-
* - If starts with .<name>.<name>, replace with __CLASS__.__CLASS__ (legacy specificity)
|
|
550
|
-
* - Else if starts with .<name>, replace with __CLASS__
|
|
551
|
-
*/
|
|
552
|
-
makeSelectorTemplate(selector, className) {
|
|
553
|
-
// Normalize any :is(.tX, .tY) occurrences first
|
|
554
|
-
const isClassList = /:is\(\s*\.[A-Za-z0-9_-]+(?:\s*,\s*\.[A-Za-z0-9_-]+)*\s*\)/g;
|
|
555
|
-
let normalized = selector.replace(isClassList, ':is(__CLASS__)');
|
|
556
|
-
// Legacy patterns that may still start with plain class
|
|
557
|
-
const doubleRe = /^\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/;
|
|
558
|
-
const singleRe = /^\.[A-Za-z0-9_-]+/;
|
|
559
|
-
if (doubleRe.test(normalized)) {
|
|
560
|
-
normalized = normalized.replace(doubleRe, '__CLASS__.__CLASS__');
|
|
561
|
-
}
|
|
562
|
-
else if (singleRe.test(normalized)) {
|
|
563
|
-
normalized = normalized.replace(singleRe, '__CLASS__');
|
|
564
|
-
}
|
|
565
|
-
return { selectorTemplate: normalized };
|
|
566
|
-
}
|
|
567
|
-
/** Compose a unique batch key */
|
|
568
|
-
getBatchKey(atRules, selectorTemplate, normalizedDecl) {
|
|
569
|
-
const at = atRules && atRules.length ? atRules.join('|') : '';
|
|
570
|
-
return `${at}||${selectorTemplate}||${normalizedDecl}`;
|
|
571
|
-
}
|
|
572
|
-
/** Ensure there is a target sheet and available rule index */
|
|
573
|
-
ensureTargetSheetAndIndex(registry, root) {
|
|
574
|
-
let sheet = this.findAvailableSheet(registry, root);
|
|
575
|
-
if (!sheet) {
|
|
576
|
-
sheet = this.createSheet(registry, root);
|
|
577
|
-
}
|
|
578
|
-
const ruleIndex = this.findAvailableRuleIndex(sheet);
|
|
579
|
-
const sheetIndex = registry.sheets.indexOf(sheet);
|
|
580
|
-
return { sheet, sheetIndex, ruleIndex };
|
|
581
|
-
}
|
|
582
|
-
/** Compose CSS text for a batched rule entry */
|
|
583
|
-
composeCssForEntry(entry) {
|
|
584
|
-
const classList = Array.from(entry.classNames)
|
|
585
|
-
.sort((a, b) => {
|
|
586
|
-
const aNum = parseInt(a.slice(1));
|
|
587
|
-
const bNum = parseInt(b.slice(1));
|
|
588
|
-
return aNum - bNum;
|
|
589
|
-
})
|
|
590
|
-
.map((c) => `.${c}`)
|
|
591
|
-
.join(', ');
|
|
592
|
-
// If template expects doubled specificity, replicate :is twice
|
|
593
|
-
let selector = entry.selectorTemplate
|
|
594
|
-
.replace(/:is\(__CLASS__\)/g, `:is(${classList})`)
|
|
595
|
-
.replace(/__CLASS__\.__CLASS__/g, `:is(${classList}):is(${classList})`)
|
|
596
|
-
.replace(/__CLASS__/g, `:is(${classList})`);
|
|
597
|
-
const baseRule = `${selector} { ${entry.declarations} }`;
|
|
598
|
-
if (entry.atRules && entry.atRules.length) {
|
|
599
|
-
return entry.atRules.reduce((acc, at) => `${at} { ${acc} }`, baseRule);
|
|
600
|
-
}
|
|
601
|
-
return baseRule;
|
|
602
|
-
}
|
|
603
|
-
/** Update CSSOM/textContent for an existing batched rule */
|
|
604
|
-
updateBatchedRuleCss(registry, entry, root) {
|
|
605
|
-
const sheet = registry.sheets[entry.sheetIndex];
|
|
606
|
-
if (!sheet)
|
|
607
|
-
return;
|
|
608
|
-
const styleElement = sheet.sheet;
|
|
609
|
-
const styleSheet = styleElement.sheet;
|
|
610
|
-
const newCssText = this.composeCssForEntry(entry);
|
|
611
|
-
if (styleSheet && !this.config.forceTextInjection) {
|
|
612
|
-
// Replace rule at the same index
|
|
613
|
-
const idx = Math.max(0, Math.min(entry.ruleIndex, styleSheet.cssRules.length - 1));
|
|
614
|
-
try {
|
|
615
|
-
styleSheet.deleteRule(idx);
|
|
616
|
-
}
|
|
617
|
-
catch {
|
|
618
|
-
// Ignore CSSOM errors when deleting rules
|
|
619
|
-
}
|
|
620
|
-
const insertIdx = Math.min(idx, styleSheet.cssRules.length);
|
|
621
|
-
styleSheet.insertRule(newCssText, insertIdx);
|
|
622
|
-
entry.ruleIndex = insertIdx;
|
|
623
|
-
}
|
|
624
|
-
else {
|
|
625
|
-
// Text content replacement
|
|
626
|
-
const old = entry.currentCssText || '';
|
|
627
|
-
const fullText = styleElement.textContent || '';
|
|
628
|
-
if (old) {
|
|
629
|
-
styleElement.textContent = fullText.replace(old, newCssText);
|
|
630
|
-
}
|
|
631
|
-
else {
|
|
632
|
-
styleElement.textContent =
|
|
633
|
-
(fullText ? fullText + '\n' : '') + newCssText;
|
|
634
|
-
}
|
|
635
|
-
entry.currentCssText = newCssText;
|
|
636
|
-
}
|
|
637
|
-
}
|
|
638
|
-
/** Remove a batched rule entirely from the stylesheet */
|
|
639
|
-
removeBatchedEntry(registry, entry) {
|
|
640
|
-
const sheet = registry.sheets[entry.sheetIndex];
|
|
641
|
-
if (!sheet)
|
|
642
|
-
return;
|
|
643
|
-
const styleElement = sheet.sheet;
|
|
644
|
-
const styleSheet = styleElement.sheet;
|
|
645
|
-
if (styleSheet && !this.config.forceTextInjection) {
|
|
646
|
-
const idx = entry.ruleIndex;
|
|
647
|
-
if (idx >= 0 && idx < styleSheet.cssRules.length) {
|
|
648
|
-
try {
|
|
649
|
-
styleSheet.deleteRule(idx);
|
|
650
|
-
sheet.ruleCount = Math.max(0, sheet.ruleCount - 1);
|
|
651
|
-
}
|
|
652
|
-
catch {
|
|
653
|
-
// Ignore CSSOM errors when deleting rules
|
|
654
|
-
}
|
|
655
|
-
}
|
|
656
|
-
}
|
|
657
|
-
else {
|
|
658
|
-
const old = entry.currentCssText || '';
|
|
659
|
-
if (old) {
|
|
660
|
-
const fullText = styleElement.textContent || '';
|
|
661
|
-
styleElement.textContent = fullText.replace(old, '');
|
|
662
|
-
}
|
|
663
|
-
sheet.ruleCount = Math.max(0, sheet.ruleCount - 1);
|
|
664
|
-
}
|
|
665
|
-
}
|
|
666
|
-
/** Find existing class that has an identical rule (same batch key) */
|
|
667
|
-
findClassWithIdenticalRule(registry, batchKey, excludeClassName) {
|
|
668
|
-
const meta = registry.batchedRuleMeta.get(batchKey);
|
|
669
|
-
if (!meta)
|
|
670
|
-
return null;
|
|
671
|
-
// Look through all classes to find one that has this batch key but isn't batched yet
|
|
672
|
-
for (const [className, keys] of registry.classToBatchedKeys.entries()) {
|
|
673
|
-
if (className === excludeClassName)
|
|
674
|
-
continue;
|
|
675
|
-
if (keys.has(batchKey) && !registry.batchedRules.has(batchKey)) {
|
|
676
|
-
return className;
|
|
677
|
-
}
|
|
678
|
-
}
|
|
679
|
-
return null;
|
|
680
|
-
}
|
|
681
|
-
/** Convert an existing single-class rule to a batched rule with additional class */
|
|
682
|
-
convertToBatchedRule(registry, existingClassName, newClassName, batchKey, root) {
|
|
683
|
-
const meta = registry.batchedRuleMeta.get(batchKey);
|
|
684
|
-
if (!meta)
|
|
685
|
-
return;
|
|
686
|
-
// Find the existing rule info for the existing class
|
|
687
|
-
const existingRuleInfo = registry.rules.get(existingClassName);
|
|
688
|
-
if (!existingRuleInfo || existingRuleInfo.sheetIndex < 0)
|
|
689
|
-
return;
|
|
690
|
-
// Create a new batched entry at the same location
|
|
691
|
-
const entry = {
|
|
692
|
-
key: batchKey,
|
|
693
|
-
selectorTemplate: meta.selectorTemplate,
|
|
694
|
-
declarations: meta.declarations,
|
|
695
|
-
atRules: meta.atRules,
|
|
696
|
-
classNames: new Set([existingClassName, newClassName]),
|
|
697
|
-
sheetIndex: existingRuleInfo.sheetIndex,
|
|
698
|
-
ruleIndex: existingRuleInfo.ruleIndex,
|
|
699
|
-
};
|
|
700
|
-
// Update the CSS rule to use batched selector
|
|
701
|
-
const newCssText = this.composeCssForEntry(entry);
|
|
702
|
-
const sheet = registry.sheets[entry.sheetIndex];
|
|
703
|
-
if (!sheet)
|
|
704
|
-
return;
|
|
705
|
-
const styleElement = sheet.sheet;
|
|
706
|
-
const styleSheet = styleElement.sheet;
|
|
707
|
-
if (styleSheet && !this.config.forceTextInjection) {
|
|
708
|
-
try {
|
|
709
|
-
// Replace the existing rule
|
|
710
|
-
const idx = Math.max(0, Math.min(entry.ruleIndex, styleSheet.cssRules.length - 1));
|
|
711
|
-
styleSheet.deleteRule(idx);
|
|
712
|
-
styleSheet.insertRule(newCssText, idx);
|
|
713
|
-
}
|
|
714
|
-
catch {
|
|
715
|
-
// Ignore CSSOM errors when updating rules
|
|
716
|
-
}
|
|
717
|
-
}
|
|
718
|
-
else {
|
|
719
|
-
// Replace in text content
|
|
720
|
-
const oldCssText = existingRuleInfo.cssText?.[0] || '';
|
|
721
|
-
if (oldCssText) {
|
|
722
|
-
const fullText = styleElement.textContent || '';
|
|
723
|
-
styleElement.textContent = fullText.replace(oldCssText, newCssText);
|
|
724
|
-
}
|
|
725
|
-
entry.currentCssText = newCssText;
|
|
726
|
-
}
|
|
727
|
-
// Update registry
|
|
728
|
-
registry.batchedRules.set(batchKey, entry);
|
|
729
|
-
// Update class mappings
|
|
730
|
-
if (!registry.classToBatchedKeys.has(newClassName)) {
|
|
731
|
-
registry.classToBatchedKeys.set(newClassName, new Set());
|
|
732
|
-
}
|
|
733
|
-
registry.classToBatchedKeys.get(newClassName).add(batchKey);
|
|
734
|
-
}
|
|
735
490
|
}
|
|
736
491
|
|
|
737
492
|
|
package/es/tasty/parser/const.js
CHANGED
package/es/tasty/parser/lru.js
CHANGED
package/es/tasty/parser/types.js
CHANGED
package/es/tasty/styles/align.js
CHANGED