@cube-dev/ui-kit 0.0.0-canary-55e23f2 → 0.0.0-canary-21dd9ff
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 +6 -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 +2 -2
- package/es/components/actions/Action/Action.js +14 -18
- package/es/components/actions/Button/Button.js +2 -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 +5 -4
- 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 +3 -3
- package/es/components/content/Title.js +3 -3
- 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 +3 -2
- 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 -2
- package/es/tasty/index.js +2 -1
- package/es/tasty/injector/flatten.js +350 -0
- package/es/tasty/injector/index.js +165 -0
- package/es/tasty/injector/injector.js +315 -0
- package/es/tasty/injector/sheet-manager.js +518 -0
- package/es/tasty/injector/types.js +10 -0
- package/es/tasty/parser/classify.js +1 -1
- package/es/tasty/parser/const.js +1 -1
- package/es/tasty/parser/lru.js +38 -2
- 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 +8 -12
- package/es/tasty/styles/createStyle.js +3 -3
- 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 +6 -8
- 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 -3
- package/es/tasty/styles/preset.js +1 -1
- package/es/tasty/styles/radius.js +1 -1
- package/es/tasty/styles/reset.js +40 -44
- 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 +92 -19
- 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 +515 -57
- package/es/tasty/utils/responsive.js +1 -1
- package/es/tasty/utils/string.js +1 -1
- package/es/tasty/utils/styles.js +3 -62
- 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/Button/Button.d.ts +1 -0
- package/types/components/actions/Menu/styled.d.ts +699 -702
- package/types/components/actions/use-action.d.ts +1 -1
- package/types/components/content/List/SectionHeading.d.ts +233 -234
- package/types/components/fields/DatePicker/DatePickerElement.d.ts +233 -234
- package/types/tasty/index.d.ts +1 -0
- package/types/tasty/injector/flatten.d.ts +16 -0
- package/types/tasty/injector/index.d.ts +64 -0
- package/types/tasty/injector/injector.d.ts +82 -0
- package/types/tasty/injector/sheet-manager.d.ts +74 -0
- package/types/tasty/injector/types.d.ts +71 -0
- package/types/tasty/parser/lru.d.ts +5 -1
- package/types/tasty/styles/color.d.ts +3 -1
- package/types/tasty/styles/reset.d.ts +1 -2
- package/types/tasty/types.d.ts +0 -2
- package/types/tasty/utils/renderStyles.d.ts +25 -7
- package/types/tasty/utils/styles.d.ts +1 -9
|
@@ -0,0 +1,518 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license MIT
|
|
3
|
+
* author: Cube Dev Team
|
|
4
|
+
* @cube-dev/ui-kit v0.0.0-canary-21dd9ff
|
|
5
|
+
* Released under the MIT license.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { Lru } from '../parser/lru';
|
|
9
|
+
export class SheetManager {
|
|
10
|
+
rootRegistries = new WeakMap();
|
|
11
|
+
config;
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this.config = config;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Get or create registry for a root (Document or ShadowRoot)
|
|
17
|
+
*/
|
|
18
|
+
getRegistry(root) {
|
|
19
|
+
let registry = this.rootRegistries.get(root);
|
|
20
|
+
if (!registry) {
|
|
21
|
+
const metrics = this.config.collectMetrics
|
|
22
|
+
? {
|
|
23
|
+
hits: 0,
|
|
24
|
+
misses: 0,
|
|
25
|
+
disposedHits: 0,
|
|
26
|
+
evictions: 0,
|
|
27
|
+
totalInsertions: 0,
|
|
28
|
+
totalDisposals: 0,
|
|
29
|
+
domCleanups: 0,
|
|
30
|
+
startTime: Date.now(),
|
|
31
|
+
}
|
|
32
|
+
: undefined;
|
|
33
|
+
const disposedCache = new Lru(this.config.cacheSize || 500);
|
|
34
|
+
registry = {
|
|
35
|
+
sheets: [],
|
|
36
|
+
refCounts: new Map(),
|
|
37
|
+
rules: new Map(),
|
|
38
|
+
deletionQueue: [],
|
|
39
|
+
ruleTextSet: new Set(),
|
|
40
|
+
disposedCache,
|
|
41
|
+
cleanupTimeouts: new Map(),
|
|
42
|
+
metrics,
|
|
43
|
+
classCounter: 0,
|
|
44
|
+
};
|
|
45
|
+
// Perform DOM cleanup only when an item is evicted from the LRU
|
|
46
|
+
disposedCache.setOnEvict((key) => {
|
|
47
|
+
this.performActualCleanup(registry, key);
|
|
48
|
+
if (registry.metrics) {
|
|
49
|
+
registry.metrics.evictions++;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
this.rootRegistries.set(root, registry);
|
|
53
|
+
}
|
|
54
|
+
return registry;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Create a new stylesheet for the registry
|
|
58
|
+
*/
|
|
59
|
+
createSheet(registry, root) {
|
|
60
|
+
const sheet = this.createStyleElement(root);
|
|
61
|
+
const sheetInfo = {
|
|
62
|
+
sheet,
|
|
63
|
+
ruleCount: 0,
|
|
64
|
+
holes: [],
|
|
65
|
+
};
|
|
66
|
+
registry.sheets.push(sheetInfo);
|
|
67
|
+
return sheetInfo;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Create a style element and append to document
|
|
71
|
+
*/
|
|
72
|
+
createStyleElement(root) {
|
|
73
|
+
const style = root.createElement?.('style') ||
|
|
74
|
+
document.createElement('style');
|
|
75
|
+
if (this.config.nonce) {
|
|
76
|
+
style.nonce = this.config.nonce;
|
|
77
|
+
}
|
|
78
|
+
style.setAttribute('data-tasty', '');
|
|
79
|
+
// Append to head or shadow root
|
|
80
|
+
if ('head' in root && root.head) {
|
|
81
|
+
root.head.appendChild(style);
|
|
82
|
+
}
|
|
83
|
+
else if ('appendChild' in root) {
|
|
84
|
+
root.appendChild(style);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
document.head.appendChild(style);
|
|
88
|
+
}
|
|
89
|
+
// Verify it was actually added - log only if there's a problem and we're not using forceTextInjection
|
|
90
|
+
if (!style.isConnected && !this.config.forceTextInjection) {
|
|
91
|
+
console.error('SheetManager: Style element failed to connect to DOM!', {
|
|
92
|
+
parentNode: style.parentNode?.nodeName,
|
|
93
|
+
isConnected: style.isConnected,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
return style;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Insert CSS rules as a single block
|
|
100
|
+
*/
|
|
101
|
+
insertRule(registry, flattenedRules, className, root) {
|
|
102
|
+
// Find or create a sheet with available space
|
|
103
|
+
let targetSheet = this.findAvailableSheet(registry, root);
|
|
104
|
+
if (!targetSheet) {
|
|
105
|
+
targetSheet = this.createSheet(registry, root);
|
|
106
|
+
}
|
|
107
|
+
const ruleIndex = this.findAvailableRuleIndex(targetSheet);
|
|
108
|
+
const sheetIndex = registry.sheets.indexOf(targetSheet);
|
|
109
|
+
try {
|
|
110
|
+
// Group rules by selector and at-rules to combine declarations
|
|
111
|
+
const groupedRules = [];
|
|
112
|
+
const groupMap = new Map();
|
|
113
|
+
const atKey = (at) => (at && at.length ? at.join('|') : '');
|
|
114
|
+
flattenedRules.forEach((r) => {
|
|
115
|
+
const key = `${atKey(r.atRules)}||${r.selector}`;
|
|
116
|
+
const existing = groupMap.get(key);
|
|
117
|
+
if (existing) {
|
|
118
|
+
// Append declarations, preserving order
|
|
119
|
+
existing.declarations = existing.declarations
|
|
120
|
+
? `${existing.declarations} ${r.declarations}`
|
|
121
|
+
: r.declarations;
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
groupMap.set(key, {
|
|
125
|
+
idx: groupedRules.length,
|
|
126
|
+
selector: r.selector,
|
|
127
|
+
atRules: r.atRules,
|
|
128
|
+
declarations: r.declarations,
|
|
129
|
+
});
|
|
130
|
+
groupedRules.push({ ...r });
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
// Normalize groupedRules from map (with merged declarations)
|
|
134
|
+
groupMap.forEach((val) => {
|
|
135
|
+
groupedRules[val.idx] = {
|
|
136
|
+
selector: val.selector,
|
|
137
|
+
atRules: val.atRules,
|
|
138
|
+
declarations: val.declarations,
|
|
139
|
+
};
|
|
140
|
+
});
|
|
141
|
+
// Insert grouped rules
|
|
142
|
+
const insertedRuleTexts = [];
|
|
143
|
+
let currentRuleIndex = ruleIndex;
|
|
144
|
+
let firstInsertedIndex = null;
|
|
145
|
+
let lastInsertedIndex = null;
|
|
146
|
+
for (const rule of groupedRules) {
|
|
147
|
+
const declarations = rule.declarations;
|
|
148
|
+
const baseRule = `${rule.selector} { ${declarations} }`;
|
|
149
|
+
// Wrap with at-rules if present
|
|
150
|
+
let fullRule = baseRule;
|
|
151
|
+
if (rule.atRules && rule.atRules.length > 0) {
|
|
152
|
+
fullRule = rule.atRules.reduce((css, atRule) => `${atRule} { ${css} }`, baseRule);
|
|
153
|
+
}
|
|
154
|
+
// Insert individual rule into style element
|
|
155
|
+
const styleElement = targetSheet.sheet;
|
|
156
|
+
const styleSheet = styleElement.sheet;
|
|
157
|
+
if (styleSheet && !this.config.forceTextInjection) {
|
|
158
|
+
const maxIndex = styleSheet.cssRules.length;
|
|
159
|
+
const safeIndex = Math.min(Math.max(0, currentRuleIndex), maxIndex);
|
|
160
|
+
styleSheet.insertRule(fullRule, safeIndex);
|
|
161
|
+
if (firstInsertedIndex == null)
|
|
162
|
+
firstInsertedIndex = safeIndex;
|
|
163
|
+
lastInsertedIndex = safeIndex;
|
|
164
|
+
currentRuleIndex = safeIndex + 1;
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
// Use textContent (either as fallback or when forceTextInjection is enabled)
|
|
168
|
+
styleElement.textContent =
|
|
169
|
+
(styleElement.textContent || '') + '\n' + fullRule;
|
|
170
|
+
if (firstInsertedIndex == null)
|
|
171
|
+
firstInsertedIndex = currentRuleIndex;
|
|
172
|
+
lastInsertedIndex = currentRuleIndex;
|
|
173
|
+
currentRuleIndex++;
|
|
174
|
+
}
|
|
175
|
+
// CRITICAL DEBUG: Verify the style element is in DOM only if there are issues and we're not using forceTextInjection
|
|
176
|
+
if (!styleElement.parentNode && !this.config.forceTextInjection) {
|
|
177
|
+
console.error('SheetManager: Style element is NOT in DOM! This is the problem!', {
|
|
178
|
+
className,
|
|
179
|
+
ruleIndex: currentRuleIndex,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
// Conditionally store cssText and track for debug
|
|
183
|
+
if (this.config.debugMode) {
|
|
184
|
+
insertedRuleTexts.push(fullRule);
|
|
185
|
+
try {
|
|
186
|
+
registry.ruleTextSet.add(fullRule);
|
|
187
|
+
}
|
|
188
|
+
catch (_) {
|
|
189
|
+
// noop: defensive in case ruleTextSet is unavailable
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// currentRuleIndex already adjusted above
|
|
193
|
+
}
|
|
194
|
+
// Update sheet info based on the number of rules inserted
|
|
195
|
+
const finalRuleIndex = currentRuleIndex - 1;
|
|
196
|
+
if (finalRuleIndex >= targetSheet.ruleCount) {
|
|
197
|
+
targetSheet.ruleCount = finalRuleIndex + 1;
|
|
198
|
+
}
|
|
199
|
+
return {
|
|
200
|
+
className,
|
|
201
|
+
ruleIndex: firstInsertedIndex ?? ruleIndex,
|
|
202
|
+
sheetIndex,
|
|
203
|
+
cssText: this.config.debugMode ? insertedRuleTexts : [],
|
|
204
|
+
endRuleIndex: lastInsertedIndex ?? finalRuleIndex,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
console.warn('Failed to insert CSS rules:', error, {
|
|
209
|
+
flattenedRules,
|
|
210
|
+
className,
|
|
211
|
+
});
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Insert global CSS rules
|
|
217
|
+
*/
|
|
218
|
+
insertGlobalRule(registry, flattenedRules, className, root) {
|
|
219
|
+
// For now, global rules are handled the same way as regular rules
|
|
220
|
+
return this.insertRule(registry, flattenedRules, className, root);
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Delete a CSS rule from the sheet
|
|
224
|
+
*/
|
|
225
|
+
deleteRule(registry, ruleInfo) {
|
|
226
|
+
const sheet = registry.sheets[ruleInfo.sheetIndex];
|
|
227
|
+
if (!sheet) {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
try {
|
|
231
|
+
const texts = Array.isArray(ruleInfo.cssText)
|
|
232
|
+
? ruleInfo.cssText.slice()
|
|
233
|
+
: [];
|
|
234
|
+
const styleElement = sheet.sheet;
|
|
235
|
+
const styleSheet = styleElement.sheet;
|
|
236
|
+
if (styleSheet) {
|
|
237
|
+
const rules = styleSheet.cssRules;
|
|
238
|
+
// Prefer index-based deletion when possible
|
|
239
|
+
const startIdx = Math.max(0, ruleInfo.ruleIndex);
|
|
240
|
+
const endIdx = Math.min(rules.length - 1, Number.isFinite(ruleInfo.endRuleIndex)
|
|
241
|
+
? ruleInfo.endRuleIndex
|
|
242
|
+
: startIdx - 1);
|
|
243
|
+
if (Number.isFinite(startIdx) && endIdx >= startIdx) {
|
|
244
|
+
for (let idx = endIdx; idx >= startIdx; idx--) {
|
|
245
|
+
if (idx < 0 || idx >= styleSheet.cssRules.length)
|
|
246
|
+
continue;
|
|
247
|
+
styleSheet.deleteRule(idx);
|
|
248
|
+
}
|
|
249
|
+
sheet.ruleCount = Math.max(0, sheet.ruleCount - (endIdx - startIdx + 1));
|
|
250
|
+
}
|
|
251
|
+
else if (this.config.debugMode && texts.length) {
|
|
252
|
+
// Fallback: locate each rule by exact cssText and delete (debug mode only)
|
|
253
|
+
for (const text of texts) {
|
|
254
|
+
let idx = -1;
|
|
255
|
+
for (let i = styleSheet.cssRules.length - 1; i >= 0; i--) {
|
|
256
|
+
if (styleSheet.cssRules[i].cssText === text) {
|
|
257
|
+
idx = i;
|
|
258
|
+
break;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
if (idx >= 0) {
|
|
262
|
+
styleSheet.deleteRule(idx);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
sheet.ruleCount = Math.max(0, sheet.ruleCount - texts.length);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
// Remove texts from validation set
|
|
269
|
+
if (this.config.debugMode) {
|
|
270
|
+
try {
|
|
271
|
+
for (const text of texts) {
|
|
272
|
+
registry.ruleTextSet.delete(text);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
catch (_) {
|
|
276
|
+
// noop
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
catch (error) {
|
|
281
|
+
console.warn('Failed to delete CSS rule:', error);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Find a sheet with available space or return null
|
|
286
|
+
*/
|
|
287
|
+
findAvailableSheet(registry, root) {
|
|
288
|
+
const maxRules = this.config.maxRulesPerSheet;
|
|
289
|
+
if (!maxRules) {
|
|
290
|
+
// No limit, use the last sheet if it exists
|
|
291
|
+
const lastSheet = registry.sheets[registry.sheets.length - 1];
|
|
292
|
+
return lastSheet || null;
|
|
293
|
+
}
|
|
294
|
+
// Find sheet with space
|
|
295
|
+
for (const sheet of registry.sheets) {
|
|
296
|
+
if (sheet.ruleCount < maxRules) {
|
|
297
|
+
return sheet;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return null; // No available sheet found
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Find an available rule index in the sheet
|
|
304
|
+
*/
|
|
305
|
+
findAvailableRuleIndex(sheet) {
|
|
306
|
+
// Always append to the end - CSS doesn't have holes
|
|
307
|
+
return sheet.ruleCount;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Move a ruleset to disposed cache for potential reuse
|
|
311
|
+
*/
|
|
312
|
+
moveToDisposedCache(registry, className) {
|
|
313
|
+
const ruleInfo = registry.rules.get(className);
|
|
314
|
+
if (!ruleInfo)
|
|
315
|
+
return;
|
|
316
|
+
// Move to disposed cache
|
|
317
|
+
const disposedInfo = {
|
|
318
|
+
ruleInfo,
|
|
319
|
+
disposedAt: Date.now(),
|
|
320
|
+
recentlyUsed: false,
|
|
321
|
+
};
|
|
322
|
+
registry.disposedCache.set(className, disposedInfo);
|
|
323
|
+
// Remove from active registry
|
|
324
|
+
registry.rules.delete(className);
|
|
325
|
+
registry.refCounts.delete(className);
|
|
326
|
+
// Update metrics
|
|
327
|
+
if (registry.metrics) {
|
|
328
|
+
registry.metrics.totalDisposals++;
|
|
329
|
+
}
|
|
330
|
+
// If we have a disposed LRU cache, don't schedule DOM cleanup.
|
|
331
|
+
// Cleanup will occur on LRU eviction or via manual forceCleanup.
|
|
332
|
+
if ((this.config.cacheSize || 0) > 0) {
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
// Schedule lazy cleanup if configured (legacy behavior when no cache)
|
|
336
|
+
if (this.config.idleCleanup && typeof requestIdleCallback !== 'undefined') {
|
|
337
|
+
// Use requestIdleCallback for cleanup when available and enabled
|
|
338
|
+
const timeoutId = requestIdleCallback(() => {
|
|
339
|
+
this.performActualCleanup(registry, className);
|
|
340
|
+
});
|
|
341
|
+
registry.cleanupTimeouts.set(className, timeoutId);
|
|
342
|
+
}
|
|
343
|
+
else {
|
|
344
|
+
const cleanupDelay = this.config.cleanupDelay || 5000;
|
|
345
|
+
if (cleanupDelay > 0) {
|
|
346
|
+
const timeoutId = setTimeout(() => {
|
|
347
|
+
this.performActualCleanup(registry, className);
|
|
348
|
+
}, cleanupDelay);
|
|
349
|
+
registry.cleanupTimeouts.set(className, timeoutId);
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
// Immediate cleanup
|
|
353
|
+
this.performActualCleanup(registry, className);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Restore a ruleset from disposed cache
|
|
359
|
+
*/
|
|
360
|
+
restoreFromDisposedCache(registry, className) {
|
|
361
|
+
const disposedInfo = registry.disposedCache.get(className);
|
|
362
|
+
if (!disposedInfo)
|
|
363
|
+
return null;
|
|
364
|
+
// Cancel any scheduled cleanup
|
|
365
|
+
const timeoutId = registry.cleanupTimeouts.get(className);
|
|
366
|
+
if (timeoutId) {
|
|
367
|
+
if (this.config.idleCleanup &&
|
|
368
|
+
typeof cancelIdleCallback !== 'undefined') {
|
|
369
|
+
cancelIdleCallback(timeoutId);
|
|
370
|
+
}
|
|
371
|
+
else {
|
|
372
|
+
clearTimeout(timeoutId);
|
|
373
|
+
}
|
|
374
|
+
registry.cleanupTimeouts.delete(className);
|
|
375
|
+
}
|
|
376
|
+
// Restore to active registry
|
|
377
|
+
registry.rules.set(className, disposedInfo.ruleInfo);
|
|
378
|
+
registry.refCounts.set(className, 1);
|
|
379
|
+
// Remove from disposed cache
|
|
380
|
+
registry.disposedCache.delete(className);
|
|
381
|
+
// Mark as recently used for optimization
|
|
382
|
+
disposedInfo.recentlyUsed = true;
|
|
383
|
+
// Update metrics
|
|
384
|
+
if (registry.metrics) {
|
|
385
|
+
registry.metrics.disposedHits++;
|
|
386
|
+
}
|
|
387
|
+
return disposedInfo.ruleInfo;
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Actually remove CSS rules from DOM (lazy cleanup)
|
|
391
|
+
*/
|
|
392
|
+
performActualCleanup(registry, className) {
|
|
393
|
+
const disposedInfo = registry.disposedCache.get(className);
|
|
394
|
+
if (!disposedInfo)
|
|
395
|
+
return;
|
|
396
|
+
// Remove from DOM
|
|
397
|
+
this.deleteRule(registry, disposedInfo.ruleInfo);
|
|
398
|
+
// Remove from disposed cache
|
|
399
|
+
registry.disposedCache.delete(className);
|
|
400
|
+
// Clean up timeout tracking
|
|
401
|
+
registry.cleanupTimeouts.delete(className);
|
|
402
|
+
// Update metrics
|
|
403
|
+
if (registry.metrics) {
|
|
404
|
+
registry.metrics.domCleanups++;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Process the deletion queue for cleanup
|
|
409
|
+
*/
|
|
410
|
+
processCleanupQueue(registry) {
|
|
411
|
+
const { deletionQueue } = registry;
|
|
412
|
+
if (deletionQueue.length === 0) {
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
// Process deletions
|
|
416
|
+
const toDelete = [...deletionQueue];
|
|
417
|
+
deletionQueue.length = 0; // Clear queue
|
|
418
|
+
for (const className of toDelete) {
|
|
419
|
+
// Check if still referenced
|
|
420
|
+
const refCount = registry.refCounts.get(className) || 0;
|
|
421
|
+
if (refCount <= 0) {
|
|
422
|
+
// Move to disposed cache
|
|
423
|
+
const ruleInfo = registry.rules.get(className);
|
|
424
|
+
if (ruleInfo) {
|
|
425
|
+
this.moveToDisposedCache(registry, className);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Get total number of rules across all sheets
|
|
432
|
+
*/
|
|
433
|
+
getTotalRuleCount(registry) {
|
|
434
|
+
return registry.sheets.reduce((total, sheet) => total + sheet.ruleCount - sheet.holes.length, 0);
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* Get CSS text from all sheets (for SSR)
|
|
438
|
+
*/
|
|
439
|
+
getCssText(registry) {
|
|
440
|
+
const cssChunks = [];
|
|
441
|
+
for (const sheet of registry.sheets) {
|
|
442
|
+
try {
|
|
443
|
+
const styleElement = sheet.sheet;
|
|
444
|
+
if (styleElement.textContent) {
|
|
445
|
+
cssChunks.push(styleElement.textContent);
|
|
446
|
+
}
|
|
447
|
+
else if (styleElement.sheet) {
|
|
448
|
+
const rules = Array.from(styleElement.sheet.cssRules);
|
|
449
|
+
cssChunks.push(rules.map((rule) => rule.cssText).join('\n'));
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
catch (error) {
|
|
453
|
+
console.warn('Failed to read CSS from sheet:', error);
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
return cssChunks.join('\n');
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* Get cache performance metrics
|
|
460
|
+
*/
|
|
461
|
+
getMetrics(registry) {
|
|
462
|
+
return registry.metrics || null;
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Reset cache performance metrics
|
|
466
|
+
*/
|
|
467
|
+
resetMetrics(registry) {
|
|
468
|
+
if (registry.metrics) {
|
|
469
|
+
registry.metrics = {
|
|
470
|
+
hits: 0,
|
|
471
|
+
misses: 0,
|
|
472
|
+
disposedHits: 0,
|
|
473
|
+
evictions: 0,
|
|
474
|
+
totalInsertions: 0,
|
|
475
|
+
totalDisposals: 0,
|
|
476
|
+
domCleanups: 0,
|
|
477
|
+
startTime: Date.now(),
|
|
478
|
+
};
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* Clean up resources for a root
|
|
483
|
+
*/
|
|
484
|
+
cleanup(root) {
|
|
485
|
+
const registry = this.rootRegistries.get(root);
|
|
486
|
+
if (!registry) {
|
|
487
|
+
return;
|
|
488
|
+
}
|
|
489
|
+
// Clear all cleanup timeouts
|
|
490
|
+
for (const timeoutId of registry.cleanupTimeouts.values()) {
|
|
491
|
+
if (this.config.idleCleanup &&
|
|
492
|
+
typeof cancelIdleCallback !== 'undefined') {
|
|
493
|
+
cancelIdleCallback(timeoutId);
|
|
494
|
+
}
|
|
495
|
+
else {
|
|
496
|
+
clearTimeout(timeoutId);
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
registry.cleanupTimeouts.clear();
|
|
500
|
+
// Remove all sheets
|
|
501
|
+
for (const sheet of registry.sheets) {
|
|
502
|
+
try {
|
|
503
|
+
// Remove style element
|
|
504
|
+
const styleElement = sheet.sheet;
|
|
505
|
+
if (styleElement.parentNode) {
|
|
506
|
+
styleElement.parentNode.removeChild(styleElement);
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
catch (error) {
|
|
510
|
+
console.warn('Failed to cleanup sheet:', error);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
// Clear registry
|
|
514
|
+
this.rootRegistries.delete(root);
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
|
package/es/tasty/parser/const.js
CHANGED
package/es/tasty/parser/lru.js
CHANGED
|
@@ -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-21dd9ff
|
|
5
5
|
* Released under the MIT license.
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -10,7 +10,8 @@ export class Lru {
|
|
|
10
10
|
map = new Map();
|
|
11
11
|
head = null;
|
|
12
12
|
tail = null;
|
|
13
|
-
|
|
13
|
+
onEvict;
|
|
14
|
+
constructor(limit = 1000, onEvict) {
|
|
14
15
|
this.limit = limit;
|
|
15
16
|
// Normalize limit; fall back to sensible default (1000) to keep caching enabled
|
|
16
17
|
let normalized = Number.isFinite(this.limit)
|
|
@@ -19,6 +20,10 @@ export class Lru {
|
|
|
19
20
|
if (normalized <= 0)
|
|
20
21
|
normalized = 1000;
|
|
21
22
|
this.limit = normalized;
|
|
23
|
+
this.onEvict = onEvict;
|
|
24
|
+
}
|
|
25
|
+
setOnEvict(fn) {
|
|
26
|
+
this.onEvict = fn;
|
|
22
27
|
}
|
|
23
28
|
get(key) {
|
|
24
29
|
const node = this.map.get(key);
|
|
@@ -47,6 +52,29 @@ export class Lru {
|
|
|
47
52
|
if (this.map.size > this.limit)
|
|
48
53
|
this.evict();
|
|
49
54
|
}
|
|
55
|
+
delete(key) {
|
|
56
|
+
const node = this.map.get(key);
|
|
57
|
+
if (!node)
|
|
58
|
+
return;
|
|
59
|
+
if (node.prev) {
|
|
60
|
+
const prevNode = this.map.get(node.prev);
|
|
61
|
+
if (prevNode)
|
|
62
|
+
prevNode.next = node.next;
|
|
63
|
+
}
|
|
64
|
+
if (node.next) {
|
|
65
|
+
const nextNode = this.map.get(node.next);
|
|
66
|
+
if (nextNode)
|
|
67
|
+
nextNode.prev = node.prev;
|
|
68
|
+
}
|
|
69
|
+
if (this.head === key)
|
|
70
|
+
this.head = node.next;
|
|
71
|
+
if (this.tail === key)
|
|
72
|
+
this.tail = node.prev;
|
|
73
|
+
this.map.delete(key);
|
|
74
|
+
}
|
|
75
|
+
keys() {
|
|
76
|
+
return this.map.keys();
|
|
77
|
+
}
|
|
50
78
|
touch(key, node) {
|
|
51
79
|
if (this.head === key)
|
|
52
80
|
return; // already MRU
|
|
@@ -94,6 +122,14 @@ export class Lru {
|
|
|
94
122
|
if (this.head === old)
|
|
95
123
|
this.head = null;
|
|
96
124
|
this.map.delete(old);
|
|
125
|
+
if (this.onEvict) {
|
|
126
|
+
try {
|
|
127
|
+
this.onEvict(old, node.value);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
// ignore user callback errors
|
|
131
|
+
}
|
|
132
|
+
}
|
|
97
133
|
}
|
|
98
134
|
clear() {
|
|
99
135
|
this.map.clear();
|
package/es/tasty/parser/types.js
CHANGED
package/es/tasty/styles/align.js
CHANGED