@cube-dev/ui-kit 0.0.0-canary-0f4773b → 0.0.0-canary-458bf0e
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 +2 -2
- package/es/components/actions/Action/Action.js +18 -14
- package/es/components/actions/Button/Button.js +1 -2
- 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 +8 -3
- 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 +4 -5
- 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 +2 -2
- 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 +2 -3
- 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 +2 -1
- package/es/tasty/index.js +1 -3
- package/es/tasty/parser/classify.js +1 -1
- package/es/tasty/parser/const.js +1 -1
- package/es/tasty/parser/lru.js +2 -38
- 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 +12 -8
- 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 +8 -6
- 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 +3 -1
- package/es/tasty/styles/preset.js +1 -1
- package/es/tasty/styles/radius.js +1 -1
- package/es/tasty/styles/reset.js +44 -40
- 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 +19 -92
- 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 +57 -789
- package/es/tasty/utils/responsive.js +1 -1
- package/es/tasty/utils/string.js +1 -1
- package/es/tasty/utils/styles.js +62 -3
- 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 +0 -1
- package/types/components/actions/Menu/styled.d.ts +702 -699
- package/types/components/actions/use-action.d.ts +1 -1
- package/types/components/content/List/SectionHeading.d.ts +234 -233
- package/types/components/fields/DatePicker/DatePickerElement.d.ts +234 -233
- package/types/tasty/index.d.ts +0 -2
- package/types/tasty/parser/lru.d.ts +1 -5
- package/types/tasty/styles/color.d.ts +1 -3
- package/types/tasty/styles/reset.d.ts +2 -1
- package/types/tasty/types.d.ts +2 -0
- package/types/tasty/utils/renderStyles.d.ts +7 -25
- package/types/tasty/utils/styles.d.ts +9 -1
- package/es/tasty/debug.js +0 -282
- package/es/tasty/injector/flatten.js +0 -350
- package/es/tasty/injector/index.js +0 -165
- package/es/tasty/injector/injector.js +0 -293
- package/es/tasty/injector/sheet-manager.js +0 -492
- package/es/tasty/injector/types.js +0 -10
- package/types/tasty/debug.d.ts +0 -69
- package/types/tasty/injector/flatten.d.ts +0 -16
- package/types/tasty/injector/index.d.ts +0 -64
- package/types/tasty/injector/injector.d.ts +0 -82
- package/types/tasty/injector/sheet-manager.d.ts +0 -78
- package/types/tasty/injector/types.d.ts +0 -68
|
@@ -1,74 +1,15 @@
|
|
|
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-458bf0e
|
|
5
5
|
* Released under the MIT license.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
/**
|
|
9
|
-
* Style rendering that works with structured style objects
|
|
10
|
-
* Eliminates CSS string parsing for better performance
|
|
11
|
-
*/
|
|
12
8
|
import { createStyle, STYLE_HANDLER_MAP } from '../styles';
|
|
13
|
-
import { mediaWrapper, normalizeStyleZones
|
|
14
|
-
import { computeState, getModSelector, styleStateMapToStyleStateDataList, } from './styles';
|
|
15
|
-
// Detect if a value is a state map whose entries contain responsive arrays
|
|
16
|
-
function stateMapHasResponsiveArrays(value) {
|
|
17
|
-
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
18
|
-
return false;
|
|
19
|
-
return Object.values(value).some((v) => Array.isArray(v));
|
|
20
|
-
}
|
|
21
|
-
// Convert a state-map-of-arrays into an array-of-state-maps of length zoneNumber
|
|
22
|
-
// Example:
|
|
23
|
-
// { '': ['1x', '2x'], large: [null, '3x'] } →
|
|
24
|
-
// [ { '': '1x', large: null }, { '': '2x', large: '3x' } ]
|
|
25
|
-
function stateMapToArrayOfStateMaps(value, zoneNumber) {
|
|
26
|
-
const result = Array.from({ length: zoneNumber }, () => ({}));
|
|
27
|
-
for (const [state, stateValue] of Object.entries(value)) {
|
|
28
|
-
const perZone = Array.isArray(stateValue)
|
|
29
|
-
? normalizeStyleZones(stateValue, zoneNumber)
|
|
30
|
-
: Array(zoneNumber).fill(stateValue);
|
|
31
|
-
for (let i = 0; i < zoneNumber; i++) {
|
|
32
|
-
const v = perZone[i];
|
|
33
|
-
// Always include the state in the result, even if null or empty
|
|
34
|
-
// This preserves the state structure across all breakpoints
|
|
35
|
-
result[i][state] = v;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
return result;
|
|
39
|
-
}
|
|
40
|
-
// Normalize an array that may contain plain values and/or state maps into
|
|
41
|
-
// an array-of-state-maps of fixed length zoneNumber with propagation.
|
|
42
|
-
// Example:
|
|
43
|
-
// ['1x', { '': '1x', large: '2x' }] (zoneNumber=2) →
|
|
44
|
-
// [ { '': '1x' }, { '': '1x', large: '2x' } ]
|
|
45
|
-
function normalizeArrayWithStateMaps(valueArray, zoneNumber) {
|
|
46
|
-
const propagated = normalizeStyleZones(valueArray, zoneNumber);
|
|
47
|
-
return propagated.map((entry) => {
|
|
48
|
-
if (entry && typeof entry === 'object' && !Array.isArray(entry)) {
|
|
49
|
-
return entry;
|
|
50
|
-
}
|
|
51
|
-
return { '': entry };
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
// Normalize selector suffixes coming from `$` in style handler results.
|
|
55
|
-
// Some legacy handlers return suffixes starting with `&` (e.g. '& > *').
|
|
56
|
-
// The renderer expects suffixes without the ampersand because it adds
|
|
57
|
-
// the parent selector during materialization.
|
|
58
|
-
function normalizeDollarSelectorSuffix(suffix) {
|
|
59
|
-
if (!suffix)
|
|
60
|
-
return '';
|
|
61
|
-
return suffix.startsWith('&') ? suffix.slice(1) : suffix;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Check if a key represents a CSS selector
|
|
65
|
-
*/
|
|
9
|
+
import { mediaWrapper, normalizeStyleZones } from './responsive';
|
|
66
10
|
export function isSelector(key) {
|
|
67
|
-
return
|
|
11
|
+
return key.startsWith('&') || key.startsWith('.') || key.match(/^[A-Z]/);
|
|
68
12
|
}
|
|
69
|
-
/**
|
|
70
|
-
* Get the selector suffix for a key
|
|
71
|
-
*/
|
|
72
13
|
function getSelector(key) {
|
|
73
14
|
if (key.startsWith('&')) {
|
|
74
15
|
return key.slice(1);
|
|
@@ -81,258 +22,41 @@ function getSelector(key) {
|
|
|
81
22
|
}
|
|
82
23
|
return null;
|
|
83
24
|
}
|
|
84
|
-
function
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
attribute: match[1],
|
|
91
|
-
value: match[2] || 'true', // Handle boolean attributes
|
|
92
|
-
fullSelector: selector,
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
function hasConflictingAttributeSelectors(mods) {
|
|
96
|
-
const attributeMap = new Map();
|
|
97
|
-
for (const mod of mods) {
|
|
98
|
-
const parsed = parseAttributeSelector(mod);
|
|
99
|
-
if (parsed && parsed.value !== 'true') {
|
|
100
|
-
if (!attributeMap.has(parsed.attribute)) {
|
|
101
|
-
attributeMap.set(parsed.attribute, []);
|
|
102
|
-
}
|
|
103
|
-
attributeMap.get(parsed.attribute).push(parsed.value);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
// Check if any attribute has multiple values
|
|
107
|
-
for (const values of attributeMap.values()) {
|
|
108
|
-
if (values.length > 1)
|
|
109
|
-
return true;
|
|
110
|
-
}
|
|
111
|
-
return false;
|
|
112
|
-
}
|
|
113
|
-
function optimizeNotSelectors(currentMods, allMods) {
|
|
114
|
-
const attributeMap = new Map();
|
|
115
|
-
const currentAttributeMap = new Map();
|
|
116
|
-
// Build map of all possible values for each attribute
|
|
117
|
-
for (const mod of allMods) {
|
|
118
|
-
const parsed = parseAttributeSelector(mod);
|
|
119
|
-
if (parsed && parsed.value !== 'true') {
|
|
120
|
-
if (!attributeMap.has(parsed.attribute)) {
|
|
121
|
-
attributeMap.set(parsed.attribute, new Set());
|
|
122
|
-
}
|
|
123
|
-
attributeMap.get(parsed.attribute).add(parsed.value);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
// Build map of current mod attribute values
|
|
127
|
-
for (const mod of currentMods) {
|
|
128
|
-
const parsed = parseAttributeSelector(mod);
|
|
129
|
-
if (parsed && parsed.value !== 'true') {
|
|
130
|
-
currentAttributeMap.set(parsed.attribute, parsed.value);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
const notMods = allMods.filter((mod) => !currentMods.includes(mod));
|
|
134
|
-
const optimizedNotMods = [];
|
|
135
|
-
for (const mod of notMods) {
|
|
136
|
-
const parsed = parseAttributeSelector(mod);
|
|
137
|
-
if (parsed && parsed.value !== 'true') {
|
|
138
|
-
// If we already have a value for this attribute, skip this not selector
|
|
139
|
-
// because it's already mutually exclusive
|
|
140
|
-
if (currentAttributeMap.has(parsed.attribute)) {
|
|
141
|
-
continue;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
optimizedNotMods.push(mod);
|
|
145
|
-
}
|
|
146
|
-
return optimizedNotMods;
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Explode a style handler result into logical rules with proper mapping
|
|
150
|
-
* Phase 1: Handler fan-out ($ selectors, arrays)
|
|
151
|
-
* Phase 2: Responsive fan-out (breakpoint arrays)
|
|
152
|
-
* Phase 3: Rule materialization
|
|
153
|
-
*/
|
|
154
|
-
function explodeHandlerResult(result, zones, selectorSuffix = '', forceBreakpointIdx, responsiveOrigin = false) {
|
|
155
|
-
if (!result)
|
|
156
|
-
return [];
|
|
157
|
-
// Phase 1: Handler fan-out - normalize to array
|
|
158
|
-
const resultArray = Array.isArray(result) ? result : [result];
|
|
159
|
-
const logicalRules = [];
|
|
160
|
-
for (const item of resultArray) {
|
|
161
|
-
if (!item || typeof item !== 'object')
|
|
162
|
-
continue;
|
|
163
|
-
const { $, css, ...styleProps } = item;
|
|
164
|
-
// Phase 2: Responsive fan-out - handle array values
|
|
165
|
-
const breakpointGroups = new Map();
|
|
166
|
-
if (forceBreakpointIdx !== undefined) {
|
|
167
|
-
// When breakpoint is forced (from responsive processing), use all props for that breakpoint
|
|
168
|
-
const group = {};
|
|
169
|
-
for (const [prop, value] of Object.entries(styleProps)) {
|
|
170
|
-
if (value != null && value !== '') {
|
|
171
|
-
group[prop] = String(value);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
if (Object.keys(group).length > 0) {
|
|
175
|
-
breakpointGroups.set(forceBreakpointIdx, group);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
// Normal processing - handle responsive arrays
|
|
180
|
-
const responsiveProps = [];
|
|
181
|
-
for (const [prop, value] of Object.entries(styleProps)) {
|
|
182
|
-
if (Array.isArray(value)) {
|
|
183
|
-
// Responsive array - create entry for each breakpoint
|
|
184
|
-
value.forEach((val, idx) => {
|
|
185
|
-
if (val != null && val !== '' && idx < zones.length) {
|
|
186
|
-
responsiveProps.push({ prop, value: val, breakpointIdx: idx });
|
|
187
|
-
}
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
else if (value != null && value !== '') {
|
|
191
|
-
// Single value - goes to base breakpoint
|
|
192
|
-
responsiveProps.push({ prop, value, breakpointIdx: 0 });
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
// Group by breakpoint index
|
|
196
|
-
for (const { prop, value, breakpointIdx } of responsiveProps) {
|
|
197
|
-
const group = breakpointGroups.get(breakpointIdx) || {};
|
|
198
|
-
group[prop] = String(value);
|
|
199
|
-
breakpointGroups.set(breakpointIdx, group);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
// Handle raw CSS if present (add to base breakpoint)
|
|
203
|
-
if (css && typeof css === 'string') {
|
|
204
|
-
const baseGroup = breakpointGroups.get(0) || {};
|
|
205
|
-
// For now, we'll add raw CSS as a special property
|
|
206
|
-
// This is a limitation - raw CSS should be parsed properly
|
|
207
|
-
baseGroup['--raw-css'] = css;
|
|
208
|
-
breakpointGroups.set(0, baseGroup);
|
|
209
|
-
}
|
|
210
|
-
// Phase 3: Selector fan-out - handle $ suffixes
|
|
211
|
-
// IMPORTANT: If we are already in a pseudo-element context (contains '::'),
|
|
212
|
-
// CSS does not allow further descendant/child selectors (e.g., '>*') after
|
|
213
|
-
// a pseudo-element. In such cases we must ignore only the `$`-derived
|
|
214
|
-
// selectors while still preserving base declarations for the current
|
|
215
|
-
// selector. Previously this branch returned early and accidentally dropped
|
|
216
|
-
// all declarations computed before, including valid base ones.
|
|
217
|
-
const inPseudoElementContext = selectorSuffix.includes('::');
|
|
218
|
-
if (inPseudoElementContext && $) {
|
|
219
|
-
// Skip this item entirely to avoid producing invalid selectors like
|
|
220
|
-
// `.t0::before>*`. Other items (without $) in the same handler result
|
|
221
|
-
// will still be processed and preserved.
|
|
222
|
-
continue;
|
|
223
|
-
}
|
|
224
|
-
const suffixes = $
|
|
225
|
-
? (Array.isArray($) ? $ : [$]).map((s) => selectorSuffix + normalizeDollarSelectorSuffix(String(s)))
|
|
226
|
-
: [selectorSuffix];
|
|
227
|
-
// Create logical rules for each breakpoint × selector combination
|
|
228
|
-
for (const [breakpointIdx, declarations] of breakpointGroups) {
|
|
229
|
-
if (Object.keys(declarations).length === 0)
|
|
230
|
-
continue;
|
|
231
|
-
for (const suffix of suffixes) {
|
|
232
|
-
logicalRules.push({
|
|
233
|
-
selectorSuffix: suffix,
|
|
234
|
-
breakpointIdx,
|
|
235
|
-
declarations,
|
|
236
|
-
responsiveSource: responsiveOrigin || forceBreakpointIdx !== undefined,
|
|
237
|
-
});
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
return logicalRules;
|
|
242
|
-
}
|
|
243
|
-
/**
|
|
244
|
-
* Convert handler result (CSSMap) to CSS string for global injection
|
|
245
|
-
*/
|
|
246
|
-
function convertHandlerResultToCSS(result, selectorSuffix = '') {
|
|
247
|
-
if (!result)
|
|
248
|
-
return '';
|
|
249
|
-
if (Array.isArray(result)) {
|
|
250
|
-
return result.reduce((css, item) => {
|
|
251
|
-
return css + convertHandlerResultToCSS(item, selectorSuffix);
|
|
252
|
-
}, '');
|
|
253
|
-
}
|
|
254
|
-
const { $, css, ...styleProps } = result;
|
|
255
|
-
let renderedStyles = Object.keys(styleProps).reduce((styleList, styleName) => {
|
|
256
|
-
const value = styleProps[styleName];
|
|
257
|
-
if (Array.isArray(value)) {
|
|
258
|
-
return (styleList +
|
|
259
|
-
value.reduce((css, val) => {
|
|
260
|
-
if (val) {
|
|
261
|
-
return css + `${styleName}: ${val};\n`;
|
|
262
|
-
}
|
|
263
|
-
return css;
|
|
264
|
-
}, ''));
|
|
265
|
-
}
|
|
266
|
-
if (value) {
|
|
267
|
-
return `${styleList}${styleName}: ${value};\n`;
|
|
268
|
-
}
|
|
269
|
-
return styleList;
|
|
270
|
-
}, '');
|
|
271
|
-
if (css) {
|
|
272
|
-
renderedStyles = css + '\n' + renderedStyles;
|
|
273
|
-
}
|
|
274
|
-
if (!renderedStyles) {
|
|
275
|
-
return '';
|
|
276
|
-
}
|
|
277
|
-
const finalSelectorSuffix = selectorSuffix || '';
|
|
278
|
-
if (Array.isArray($)) {
|
|
279
|
-
return $.reduce((rend, suffix) => {
|
|
280
|
-
const normalized = suffix
|
|
281
|
-
? normalizeDollarSelectorSuffix(String(suffix))
|
|
282
|
-
: '';
|
|
283
|
-
return (rend + `&${finalSelectorSuffix}${normalized}{\n${renderedStyles}}\n`);
|
|
284
|
-
}, '');
|
|
285
|
-
}
|
|
286
|
-
const normalizedSingle = $ ? normalizeDollarSelectorSuffix(String($)) : '';
|
|
287
|
-
return `&${finalSelectorSuffix}${normalizedSingle}{\n${renderedStyles}}\n`;
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* Convert logical rules to final StyleResult format
|
|
291
|
-
*/
|
|
292
|
-
function materializeRules(logicalRules, className, zones) {
|
|
293
|
-
return logicalRules.map((rule) => {
|
|
294
|
-
const selector = `.${className}${rule.selectorSuffix}`;
|
|
295
|
-
const declarations = Object.entries(rule.declarations)
|
|
296
|
-
.filter(([key]) => key !== '--raw-css') // Skip raw CSS for now
|
|
297
|
-
.map(([prop, value]) => `${prop}: ${value};`)
|
|
298
|
-
.join(' ');
|
|
299
|
-
const q = rule.breakpointIdx > 0
|
|
300
|
-
? zones[rule.breakpointIdx]?.mediaQuery
|
|
301
|
-
: rule.responsiveSource
|
|
302
|
-
? zones[0]?.mediaQuery
|
|
303
|
-
: undefined;
|
|
304
|
-
const atRules = q ? [`@media ${q}`] : undefined;
|
|
305
|
-
return {
|
|
306
|
-
selector,
|
|
307
|
-
declarations,
|
|
308
|
-
atRules,
|
|
309
|
-
};
|
|
310
|
-
});
|
|
311
|
-
}
|
|
25
|
+
/** Props level cache for `renderStyles` function. */
|
|
26
|
+
let STYLE_CACHE = {};
|
|
27
|
+
/** Current size of the cache. */
|
|
28
|
+
let STYLE_CACHE_COUNT = 0;
|
|
29
|
+
/** Cache limit. */
|
|
30
|
+
const CACHE_LIMIT = 1000;
|
|
312
31
|
/**
|
|
313
|
-
* Render
|
|
314
|
-
*
|
|
32
|
+
* Render style props to complete Styled Components CSS.
|
|
33
|
+
* @param styles - Complete style props.
|
|
34
|
+
* @param responsive - A list of responsive zones
|
|
35
|
+
* @param {string} [suffix]
|
|
36
|
+
* @return {string}
|
|
315
37
|
*/
|
|
316
|
-
export function renderStyles(styles, responsive = [],
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
38
|
+
export function renderStyles(styles, responsive = [], suffix) {
|
|
39
|
+
const zones = responsive;
|
|
40
|
+
const responsiveStyles = Array.from(Array(zones.length)).map(() => '');
|
|
41
|
+
const cacheKey = JSON.stringify({ s: styles, r: responsive, suffix });
|
|
42
|
+
let rawStyles = '';
|
|
43
|
+
const handlerQueue = [];
|
|
44
|
+
if (!STYLE_CACHE[cacheKey]) {
|
|
45
|
+
STYLE_CACHE_COUNT++;
|
|
46
|
+
// clear cache if size is more that the limit
|
|
47
|
+
if (STYLE_CACHE_COUNT > CACHE_LIMIT) {
|
|
48
|
+
STYLE_CACHE_COUNT = 0;
|
|
49
|
+
STYLE_CACHE = {};
|
|
50
|
+
}
|
|
51
|
+
const keys = styles ? Object.keys(styles) : [];
|
|
326
52
|
const selectorKeys = keys.filter((key) => isSelector(key));
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
}
|
|
53
|
+
let innerStyles = '';
|
|
54
|
+
if (selectorKeys.length) {
|
|
55
|
+
selectorKeys.forEach((key) => {
|
|
56
|
+
const addSuffix = getSelector(key);
|
|
57
|
+
innerStyles += renderStyles(styles?.[key], responsive, addSuffix);
|
|
58
|
+
});
|
|
333
59
|
}
|
|
334
|
-
// Build handler queue for style properties at this level
|
|
335
|
-
const handlerQueue = [];
|
|
336
60
|
keys.forEach((styleName) => {
|
|
337
61
|
if (isSelector(styleName))
|
|
338
62
|
return;
|
|
@@ -340,53 +64,40 @@ export function renderStyles(styles, responsive = [], className = 'unknown') {
|
|
|
340
64
|
if (!handlers) {
|
|
341
65
|
handlers = STYLE_HANDLER_MAP[styleName] = [createStyle(styleName)];
|
|
342
66
|
}
|
|
343
|
-
handlers.forEach((
|
|
344
|
-
if (handlerQueue.find((queueItem) => queueItem.handler ===
|
|
67
|
+
handlers.forEach((STYLE) => {
|
|
68
|
+
if (handlerQueue.find((queueItem) => queueItem.handler === STYLE))
|
|
345
69
|
return;
|
|
346
|
-
}
|
|
347
70
|
let isResponsive = false;
|
|
348
|
-
const lookupStyles =
|
|
71
|
+
const lookupStyles = STYLE.__lookupStyles;
|
|
349
72
|
const filteredStyleMap = lookupStyles.reduce((map, name) => {
|
|
350
|
-
|
|
351
|
-
if (
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
typeof value === 'object' &&
|
|
355
|
-
!Array.isArray(value) &&
|
|
356
|
-
stateMapHasResponsiveArrays(value)) {
|
|
357
|
-
map[name] = stateMapToArrayOfStateMaps(value, zones.length);
|
|
358
|
-
isResponsive = true;
|
|
359
|
-
}
|
|
360
|
-
else if (Array.isArray(value)) {
|
|
361
|
-
// Case 2: array that may contain state maps → normalize to array-of-state-maps
|
|
362
|
-
if (value.length > 0) {
|
|
363
|
-
map[name] = normalizeArrayWithStateMaps(value, zones.length);
|
|
364
|
-
isResponsive = true;
|
|
365
|
-
}
|
|
73
|
+
map[name] = styles?.[name];
|
|
74
|
+
if (Array.isArray(map[name])) {
|
|
75
|
+
if (map[name].length === 0) {
|
|
76
|
+
delete map[name];
|
|
366
77
|
}
|
|
367
78
|
else {
|
|
368
|
-
map[name]
|
|
79
|
+
if (map[name].length === 1) {
|
|
80
|
+
map[name] = map[name][0];
|
|
81
|
+
}
|
|
82
|
+
isResponsive = true;
|
|
369
83
|
}
|
|
370
84
|
}
|
|
371
85
|
return map;
|
|
372
86
|
}, {});
|
|
373
87
|
handlerQueue.push({
|
|
374
|
-
handler,
|
|
88
|
+
handler: STYLE,
|
|
375
89
|
styleMap: filteredStyleMap,
|
|
376
90
|
isResponsive,
|
|
377
91
|
});
|
|
378
92
|
});
|
|
379
93
|
});
|
|
380
|
-
// Process handlers using the three-phase approach
|
|
381
94
|
handlerQueue.forEach(({ handler, styleMap, isResponsive }) => {
|
|
382
95
|
const lookupStyles = handler.__lookupStyles;
|
|
383
96
|
if (isResponsive) {
|
|
384
|
-
// For responsive styles, resolve arrays using normalizeStyleZones
|
|
385
97
|
const valueMap = lookupStyles.reduce((map, style) => {
|
|
386
98
|
map[style] = normalizeStyleZones(styleMap[style], zones.length);
|
|
387
99
|
return map;
|
|
388
100
|
}, {});
|
|
389
|
-
// Create props for each breakpoint
|
|
390
101
|
const propsByPoint = zones.map((zone, i) => {
|
|
391
102
|
const pointProps = {};
|
|
392
103
|
lookupStyles.forEach((style) => {
|
|
@@ -396,466 +107,23 @@ export function renderStyles(styles, responsive = [], className = 'unknown') {
|
|
|
396
107
|
});
|
|
397
108
|
return pointProps;
|
|
398
109
|
});
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
const v = pointProps[style];
|
|
403
|
-
return v && typeof v === 'object' && !Array.isArray(v);
|
|
404
|
-
});
|
|
405
|
-
if (hasStateMapsAtPoint) {
|
|
406
|
-
const allMods = new Set();
|
|
407
|
-
const styleStates = {};
|
|
408
|
-
lookupStyles.forEach((style) => {
|
|
409
|
-
const v = pointProps[style];
|
|
410
|
-
if (v && typeof v === 'object' && !Array.isArray(v)) {
|
|
411
|
-
const { states, mods } = styleStateMapToStyleStateDataList(v);
|
|
412
|
-
styleStates[style] = states;
|
|
413
|
-
mods.forEach((m) => allMods.add(m));
|
|
414
|
-
}
|
|
415
|
-
else {
|
|
416
|
-
styleStates[style] = [{ mods: [], notMods: [], value: v }];
|
|
417
|
-
}
|
|
418
|
-
});
|
|
419
|
-
const allModsArray = Array.from(allMods);
|
|
420
|
-
const combinations = [[]];
|
|
421
|
-
for (let i = 0; i < allModsArray.length; i++) {
|
|
422
|
-
const currentLength = combinations.length;
|
|
423
|
-
for (let j = 0; j < currentLength; j++) {
|
|
424
|
-
const newCombination = [...combinations[j], allModsArray[i]];
|
|
425
|
-
if (!hasConflictingAttributeSelectors(newCombination)) {
|
|
426
|
-
combinations.push(newCombination);
|
|
427
|
-
}
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
combinations.forEach((modCombination) => {
|
|
431
|
-
const stateProps = {};
|
|
432
|
-
lookupStyles.forEach((style) => {
|
|
433
|
-
const states = styleStates[style];
|
|
434
|
-
const matchingState = states.find((state) => computeState(state.model, (mod) => modCombination.includes(mod)));
|
|
435
|
-
if (matchingState) {
|
|
436
|
-
stateProps[style] = matchingState.value;
|
|
437
|
-
}
|
|
438
|
-
});
|
|
439
|
-
const optimizedNotMods = optimizeNotSelectors(modCombination, allModsArray);
|
|
440
|
-
const modsSelectors = `${modCombination
|
|
441
|
-
.map(getModSelector)
|
|
442
|
-
.join('')}${optimizedNotMods
|
|
443
|
-
.map((mod) => {
|
|
444
|
-
const sel = getModSelector(mod);
|
|
445
|
-
return sel.startsWith(':not(')
|
|
446
|
-
? sel.slice(5, -1)
|
|
447
|
-
: `:not(${sel})`;
|
|
448
|
-
})
|
|
449
|
-
.join('')}`;
|
|
450
|
-
const result = handler(stateProps);
|
|
451
|
-
if (!result)
|
|
452
|
-
return;
|
|
453
|
-
const logicalRules = explodeHandlerResult(result, zones || [], `${modsSelectors}${parentSuffix}`, breakpointIdx, true);
|
|
454
|
-
allLogicalRules.push(...logicalRules);
|
|
455
|
-
});
|
|
456
|
-
}
|
|
457
|
-
else {
|
|
458
|
-
const result = handler(pointProps);
|
|
459
|
-
if (!result)
|
|
460
|
-
return;
|
|
461
|
-
const logicalRules = explodeHandlerResult(result, zones || [], parentSuffix, breakpointIdx, true);
|
|
462
|
-
allLogicalRules.push(...logicalRules);
|
|
463
|
-
}
|
|
110
|
+
const rulesByPoint = propsByPoint.map((props) => handler(props, suffix));
|
|
111
|
+
rulesByPoint.forEach((rules, i) => {
|
|
112
|
+
responsiveStyles[i] += rules || '';
|
|
464
113
|
});
|
|
465
114
|
}
|
|
466
115
|
else {
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
const value = styleMap[style];
|
|
470
|
-
return value && typeof value === 'object' && !Array.isArray(value);
|
|
471
|
-
});
|
|
472
|
-
if (hasStateMaps) {
|
|
473
|
-
// Process each style property individually for state resolution
|
|
474
|
-
const allMods = new Set();
|
|
475
|
-
const styleStates = {};
|
|
476
|
-
lookupStyles.forEach((style) => {
|
|
477
|
-
const value = styleMap[style];
|
|
478
|
-
if (value && typeof value === 'object' && !Array.isArray(value)) {
|
|
479
|
-
const { states, mods } = styleStateMapToStyleStateDataList(value);
|
|
480
|
-
styleStates[style] = states;
|
|
481
|
-
mods.forEach((mod) => allMods.add(mod));
|
|
482
|
-
}
|
|
483
|
-
else {
|
|
484
|
-
// Simple value, create a single state
|
|
485
|
-
styleStates[style] = [{ mods: [], notMods: [], value }];
|
|
486
|
-
}
|
|
487
|
-
});
|
|
488
|
-
// Generate all possible mod combinations
|
|
489
|
-
const allModsArray = Array.from(allMods);
|
|
490
|
-
const combinations = [[]]; // Start with empty combination
|
|
491
|
-
// Generate all combinations (including empty)
|
|
492
|
-
for (let i = 0; i < allModsArray.length; i++) {
|
|
493
|
-
const currentLength = combinations.length;
|
|
494
|
-
for (let j = 0; j < currentLength; j++) {
|
|
495
|
-
const newCombination = [...combinations[j], allModsArray[i]];
|
|
496
|
-
// Skip combinations with conflicting attribute selectors
|
|
497
|
-
if (!hasConflictingAttributeSelectors(newCombination)) {
|
|
498
|
-
combinations.push(newCombination);
|
|
499
|
-
}
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
|
-
combinations.forEach((modCombination) => {
|
|
503
|
-
const stateProps = {};
|
|
504
|
-
lookupStyles.forEach((style) => {
|
|
505
|
-
const states = styleStates[style];
|
|
506
|
-
// Find the matching state for this mod combination
|
|
507
|
-
const matchingState = states.find((state) => {
|
|
508
|
-
return computeState(state.model, (mod) => modCombination.includes(mod));
|
|
509
|
-
});
|
|
510
|
-
if (matchingState) {
|
|
511
|
-
stateProps[style] = matchingState.value;
|
|
512
|
-
}
|
|
513
|
-
});
|
|
514
|
-
const optimizedNotMods = optimizeNotSelectors(modCombination, allModsArray);
|
|
515
|
-
const modsSelectors = `${modCombination
|
|
516
|
-
.map(getModSelector)
|
|
517
|
-
.join('')}${optimizedNotMods
|
|
518
|
-
.map((mod) => {
|
|
519
|
-
const sel = getModSelector(mod);
|
|
520
|
-
return sel.startsWith(':not(')
|
|
521
|
-
? sel.slice(5, -1)
|
|
522
|
-
: `:not(${sel})`;
|
|
523
|
-
})
|
|
524
|
-
.join('')}`;
|
|
525
|
-
// If any state value is responsive (array), fan-out by breakpoint
|
|
526
|
-
const hasResponsiveStateValues = lookupStyles.some((style) => Array.isArray(stateProps[style]));
|
|
527
|
-
if (hasResponsiveStateValues) {
|
|
528
|
-
const propsByPoint = zones.map((_, i) => {
|
|
529
|
-
const pointProps = {};
|
|
530
|
-
lookupStyles.forEach((style) => {
|
|
531
|
-
const v = stateProps[style];
|
|
532
|
-
if (Array.isArray(v)) {
|
|
533
|
-
const arr = normalizeStyleZones(v, zones.length);
|
|
534
|
-
pointProps[style] = arr?.[i];
|
|
535
|
-
}
|
|
536
|
-
else {
|
|
537
|
-
pointProps[style] = v;
|
|
538
|
-
}
|
|
539
|
-
});
|
|
540
|
-
return pointProps;
|
|
541
|
-
});
|
|
542
|
-
propsByPoint.forEach((props, breakpointIdx) => {
|
|
543
|
-
const res = handler(props);
|
|
544
|
-
if (!res)
|
|
545
|
-
return;
|
|
546
|
-
const logical = explodeHandlerResult(res, zones || [], `${modsSelectors}${parentSuffix}`, breakpointIdx, true);
|
|
547
|
-
allLogicalRules.push(...logical);
|
|
548
|
-
});
|
|
549
|
-
}
|
|
550
|
-
else {
|
|
551
|
-
// Simple non-responsive state values
|
|
552
|
-
const result = handler(stateProps);
|
|
553
|
-
if (!result)
|
|
554
|
-
return;
|
|
555
|
-
const logical = explodeHandlerResult(result, zones || [], `${modsSelectors}${parentSuffix}`);
|
|
556
|
-
allLogicalRules.push(...logical);
|
|
557
|
-
}
|
|
558
|
-
});
|
|
559
|
-
}
|
|
560
|
-
else {
|
|
561
|
-
// Simple case: no state maps, call handler directly
|
|
562
|
-
const result = handler(styleMap);
|
|
563
|
-
if (result) {
|
|
564
|
-
const logical = explodeHandlerResult(result, zones || [], parentSuffix);
|
|
565
|
-
allLogicalRules.push(...logical);
|
|
566
|
-
}
|
|
567
|
-
}
|
|
116
|
+
rawStyles +=
|
|
117
|
+
handler(styleMap, suffix) || '';
|
|
568
118
|
}
|
|
569
119
|
});
|
|
120
|
+
STYLE_CACHE[cacheKey] = `&${suffix || ''}{outline: none;\n&[hidden]{display: none !important;}}${rawStyles}${responsive &&
|
|
121
|
+
responsive.length &&
|
|
122
|
+
responsiveStyles.filter((s) => s).length
|
|
123
|
+
? mediaWrapper(responsiveStyles, zones)
|
|
124
|
+
: ''}${innerStyles}`;
|
|
570
125
|
}
|
|
571
|
-
|
|
572
|
-
processStyles(styles, '');
|
|
573
|
-
// Materialize all logical rules into final format
|
|
574
|
-
const finalRulesRaw = materializeRules(allLogicalRules, className, zones || []);
|
|
575
|
-
// De-duplicate identical rules (same selector, declarations, and at-rules)
|
|
576
|
-
const seen = new Set();
|
|
577
|
-
const finalRules = finalRulesRaw.filter((rule) => {
|
|
578
|
-
const at = rule.atRules && rule.atRules.length ? `@${rule.atRules.join('|')}` : '';
|
|
579
|
-
const key = `${rule.selector}|${rule.declarations}|${at}`;
|
|
580
|
-
if (seen.has(key))
|
|
581
|
-
return false;
|
|
582
|
-
seen.add(key);
|
|
583
|
-
return true;
|
|
584
|
-
});
|
|
585
|
-
return {
|
|
586
|
-
rules: finalRules,
|
|
587
|
-
className,
|
|
588
|
-
};
|
|
589
|
-
}
|
|
590
|
-
/**
|
|
591
|
-
* Render styles for global injection (without class names)
|
|
592
|
-
* Returns CSS with & selectors that injectGlobal can process
|
|
593
|
-
*/
|
|
594
|
-
export function renderStylesForGlobal(styles, responsive = []) {
|
|
595
|
-
if (!styles) {
|
|
596
|
-
return '';
|
|
597
|
-
}
|
|
598
|
-
const zones = pointsToZones(responsive || []);
|
|
599
|
-
const handlerQueue = [];
|
|
600
|
-
const keys = Object.keys(styles);
|
|
601
|
-
const selectorKeys = keys.filter((key) => isSelector(key));
|
|
602
|
-
const declarations = [];
|
|
603
|
-
const responsiveStyles = Array.from(Array(zones.length)).map(() => '');
|
|
604
|
-
let innerStyles = '';
|
|
605
|
-
// Handle nested selectors (like &:hover, .SubElement)
|
|
606
|
-
for (const key of selectorKeys) {
|
|
607
|
-
const selectorSuffix = getSelector(key);
|
|
608
|
-
if (selectorSuffix && styles[key]) {
|
|
609
|
-
const nestedStyles = styles[key];
|
|
610
|
-
innerStyles += renderStylesForGlobal(nestedStyles, responsive).replace(/&/g, `&${selectorSuffix}`);
|
|
611
|
-
}
|
|
612
|
-
}
|
|
613
|
-
// Build handler queue for base styles
|
|
614
|
-
keys.forEach((styleName) => {
|
|
615
|
-
if (isSelector(styleName))
|
|
616
|
-
return;
|
|
617
|
-
let handlers = STYLE_HANDLER_MAP[styleName];
|
|
618
|
-
if (!handlers) {
|
|
619
|
-
handlers = STYLE_HANDLER_MAP[styleName] = [createStyle(styleName)];
|
|
620
|
-
}
|
|
621
|
-
handlers.forEach((handler) => {
|
|
622
|
-
if (handlerQueue.find((queueItem) => queueItem.handler === handler)) {
|
|
623
|
-
return;
|
|
624
|
-
}
|
|
625
|
-
let isResponsive = false;
|
|
626
|
-
const lookupStyles = handler.__lookupStyles;
|
|
627
|
-
const filteredStyleMap = lookupStyles.reduce((map, name) => {
|
|
628
|
-
const value = styles?.[name];
|
|
629
|
-
if (value !== undefined) {
|
|
630
|
-
if (value &&
|
|
631
|
-
typeof value === 'object' &&
|
|
632
|
-
!Array.isArray(value) &&
|
|
633
|
-
stateMapHasResponsiveArrays(value)) {
|
|
634
|
-
map[name] = stateMapToArrayOfStateMaps(value, zones.length);
|
|
635
|
-
isResponsive = true;
|
|
636
|
-
}
|
|
637
|
-
else if (Array.isArray(value)) {
|
|
638
|
-
if (value.length > 0) {
|
|
639
|
-
map[name] = normalizeArrayWithStateMaps(value, zones.length);
|
|
640
|
-
isResponsive = true;
|
|
641
|
-
}
|
|
642
|
-
}
|
|
643
|
-
else {
|
|
644
|
-
map[name] = value;
|
|
645
|
-
}
|
|
646
|
-
}
|
|
647
|
-
return map;
|
|
648
|
-
}, {});
|
|
649
|
-
handlerQueue.push({
|
|
650
|
-
handler,
|
|
651
|
-
styleMap: filteredStyleMap,
|
|
652
|
-
isResponsive,
|
|
653
|
-
});
|
|
654
|
-
});
|
|
655
|
-
});
|
|
656
|
-
// Process handlers using approach
|
|
657
|
-
handlerQueue.forEach(({ handler, styleMap, isResponsive }) => {
|
|
658
|
-
const lookupStyles = handler.__lookupStyles;
|
|
659
|
-
if (isResponsive) {
|
|
660
|
-
// For responsive styles, resolve arrays using normalizeStyleZones
|
|
661
|
-
const valueMap = lookupStyles.reduce((map, style) => {
|
|
662
|
-
map[style] = normalizeStyleZones(styleMap[style], zones.length);
|
|
663
|
-
return map;
|
|
664
|
-
}, {});
|
|
665
|
-
// Create props for each breakpoint
|
|
666
|
-
const propsByPoint = zones.map((zone, i) => {
|
|
667
|
-
const pointProps = {};
|
|
668
|
-
lookupStyles.forEach((style) => {
|
|
669
|
-
if (valueMap != null && valueMap[style] != null) {
|
|
670
|
-
pointProps[style] = valueMap[style][i];
|
|
671
|
-
}
|
|
672
|
-
});
|
|
673
|
-
return pointProps;
|
|
674
|
-
});
|
|
675
|
-
// Call handler for each breakpoint and convert to CSS, with state processing
|
|
676
|
-
propsByPoint.forEach((pointProps, i) => {
|
|
677
|
-
const hasStateMapsAtPoint = lookupStyles.some((style) => {
|
|
678
|
-
const v = pointProps[style];
|
|
679
|
-
return v && typeof v === 'object' && !Array.isArray(v);
|
|
680
|
-
});
|
|
681
|
-
if (hasStateMapsAtPoint) {
|
|
682
|
-
const allMods = new Set();
|
|
683
|
-
const styleStates = {};
|
|
684
|
-
lookupStyles.forEach((style) => {
|
|
685
|
-
const v = pointProps[style];
|
|
686
|
-
if (v && typeof v === 'object' && !Array.isArray(v)) {
|
|
687
|
-
const { states, mods } = styleStateMapToStyleStateDataList(v);
|
|
688
|
-
styleStates[style] = states;
|
|
689
|
-
mods.forEach((m) => allMods.add(m));
|
|
690
|
-
}
|
|
691
|
-
else {
|
|
692
|
-
styleStates[style] = [{ mods: [], notMods: [], value: v }];
|
|
693
|
-
}
|
|
694
|
-
});
|
|
695
|
-
const allModsArray = Array.from(allMods);
|
|
696
|
-
const combinations = [[]];
|
|
697
|
-
for (let a = 0; a < allModsArray.length; a++) {
|
|
698
|
-
const currentLength = combinations.length;
|
|
699
|
-
for (let b = 0; b < currentLength; b++) {
|
|
700
|
-
const newCombination = [...combinations[b], allModsArray[a]];
|
|
701
|
-
if (!hasConflictingAttributeSelectors(newCombination)) {
|
|
702
|
-
combinations.push(newCombination);
|
|
703
|
-
}
|
|
704
|
-
}
|
|
705
|
-
}
|
|
706
|
-
combinations.forEach((modCombination) => {
|
|
707
|
-
const stateProps = {};
|
|
708
|
-
lookupStyles.forEach((style) => {
|
|
709
|
-
const states = styleStates[style];
|
|
710
|
-
const matchingState = states.find((state) => computeState(state.model, (mod) => modCombination.includes(mod)));
|
|
711
|
-
if (matchingState) {
|
|
712
|
-
stateProps[style] = matchingState.value;
|
|
713
|
-
}
|
|
714
|
-
});
|
|
715
|
-
const optimizedNotMods = optimizeNotSelectors(modCombination, allModsArray);
|
|
716
|
-
const modsSelectors = `${modCombination
|
|
717
|
-
.map(getModSelector)
|
|
718
|
-
.join('')}${optimizedNotMods
|
|
719
|
-
.map((mod) => {
|
|
720
|
-
const sel = getModSelector(mod);
|
|
721
|
-
return sel.startsWith(':not(')
|
|
722
|
-
? sel.slice(5, -1)
|
|
723
|
-
: `:not(${sel})`;
|
|
724
|
-
})
|
|
725
|
-
.join('')}`;
|
|
726
|
-
const result = handler(stateProps);
|
|
727
|
-
if (!result)
|
|
728
|
-
return;
|
|
729
|
-
const cssResult = convertHandlerResultToCSS(result, modsSelectors);
|
|
730
|
-
if (cssResult) {
|
|
731
|
-
responsiveStyles[i] += cssResult;
|
|
732
|
-
}
|
|
733
|
-
});
|
|
734
|
-
}
|
|
735
|
-
else {
|
|
736
|
-
const result = handler(pointProps);
|
|
737
|
-
if (!result)
|
|
738
|
-
return;
|
|
739
|
-
const cssResult = convertHandlerResultToCSS(result);
|
|
740
|
-
if (cssResult) {
|
|
741
|
-
responsiveStyles[i] += cssResult;
|
|
742
|
-
}
|
|
743
|
-
}
|
|
744
|
-
});
|
|
745
|
-
}
|
|
746
|
-
else {
|
|
747
|
-
// For non-responsive styles, check if any values have state maps
|
|
748
|
-
const hasStateMaps = lookupStyles.some((style) => {
|
|
749
|
-
const value = styleMap[style];
|
|
750
|
-
return value && typeof value === 'object' && !Array.isArray(value);
|
|
751
|
-
});
|
|
752
|
-
if (hasStateMaps) {
|
|
753
|
-
// Process each style property individually for state resolution
|
|
754
|
-
const allMods = new Set();
|
|
755
|
-
const styleStates = {};
|
|
756
|
-
lookupStyles.forEach((style) => {
|
|
757
|
-
const value = styleMap[style];
|
|
758
|
-
if (value && typeof value === 'object' && !Array.isArray(value)) {
|
|
759
|
-
const { states, mods } = styleStateMapToStyleStateDataList(value);
|
|
760
|
-
styleStates[style] = states;
|
|
761
|
-
mods.forEach((mod) => allMods.add(mod));
|
|
762
|
-
}
|
|
763
|
-
else {
|
|
764
|
-
// Simple value, create a single state
|
|
765
|
-
styleStates[style] = [{ mods: [], notMods: [], value }];
|
|
766
|
-
}
|
|
767
|
-
});
|
|
768
|
-
// Generate all possible mod combinations
|
|
769
|
-
const allModsArray = Array.from(allMods);
|
|
770
|
-
const combinations = [[]]; // Start with empty combination
|
|
771
|
-
// Generate all combinations (including empty)
|
|
772
|
-
for (let i = 0; i < allModsArray.length; i++) {
|
|
773
|
-
const currentLength = combinations.length;
|
|
774
|
-
for (let j = 0; j < currentLength; j++) {
|
|
775
|
-
const newCombination = [...combinations[j], allModsArray[i]];
|
|
776
|
-
// Skip combinations with conflicting attribute selectors
|
|
777
|
-
if (!hasConflictingAttributeSelectors(newCombination)) {
|
|
778
|
-
combinations.push(newCombination);
|
|
779
|
-
}
|
|
780
|
-
}
|
|
781
|
-
}
|
|
782
|
-
combinations.forEach((modCombination) => {
|
|
783
|
-
const stateProps = {};
|
|
784
|
-
lookupStyles.forEach((style) => {
|
|
785
|
-
const states = styleStates[style];
|
|
786
|
-
// Find the matching state for this mod combination
|
|
787
|
-
const matchingState = states.find((state) => {
|
|
788
|
-
return computeState(state.model, (mod) => modCombination.includes(mod));
|
|
789
|
-
});
|
|
790
|
-
if (matchingState) {
|
|
791
|
-
stateProps[style] = matchingState.value;
|
|
792
|
-
}
|
|
793
|
-
});
|
|
794
|
-
const result = handler(stateProps);
|
|
795
|
-
if (!result)
|
|
796
|
-
return;
|
|
797
|
-
const optimizedNotMods = optimizeNotSelectors(modCombination, allModsArray);
|
|
798
|
-
const modsSelectors = `${modCombination
|
|
799
|
-
.map(getModSelector)
|
|
800
|
-
.join('')}${optimizedNotMods
|
|
801
|
-
.map((mod) => {
|
|
802
|
-
const sel = getModSelector(mod);
|
|
803
|
-
return sel.startsWith(':not(')
|
|
804
|
-
? sel.slice(5, -1)
|
|
805
|
-
: `:not(${sel})`;
|
|
806
|
-
})
|
|
807
|
-
.join('')}`;
|
|
808
|
-
// Convert to CSS with proper selectors
|
|
809
|
-
const cssResult = convertHandlerResultToCSS(result, modsSelectors);
|
|
810
|
-
if (cssResult) {
|
|
811
|
-
if (cssResult.startsWith('& {') && !cssResult.includes('&', 2)) {
|
|
812
|
-
// Simple rule: "& { declarations }"
|
|
813
|
-
const declarationBlock = cssResult.slice(3, -1).trim();
|
|
814
|
-
if (declarationBlock) {
|
|
815
|
-
declarations.push(declarationBlock);
|
|
816
|
-
}
|
|
817
|
-
}
|
|
818
|
-
else {
|
|
819
|
-
// Complex rule with nested selectors or state modifiers
|
|
820
|
-
innerStyles += cssResult;
|
|
821
|
-
}
|
|
822
|
-
}
|
|
823
|
-
});
|
|
824
|
-
}
|
|
825
|
-
else {
|
|
826
|
-
// Simple case: no state maps, call handler directly
|
|
827
|
-
const result = handler(styleMap);
|
|
828
|
-
if (result) {
|
|
829
|
-
const cssResult = convertHandlerResultToCSS(result);
|
|
830
|
-
if (cssResult) {
|
|
831
|
-
if (cssResult.startsWith('& {') && !cssResult.includes('&', 2)) {
|
|
832
|
-
// Simple rule: "& { declarations }"
|
|
833
|
-
const declarationBlock = cssResult.slice(3, -1).trim();
|
|
834
|
-
if (declarationBlock) {
|
|
835
|
-
declarations.push(declarationBlock);
|
|
836
|
-
}
|
|
837
|
-
}
|
|
838
|
-
else {
|
|
839
|
-
// Complex rule with nested selectors or state modifiers
|
|
840
|
-
innerStyles += cssResult;
|
|
841
|
-
}
|
|
842
|
-
}
|
|
843
|
-
}
|
|
844
|
-
}
|
|
845
|
-
}
|
|
846
|
-
});
|
|
847
|
-
// Build final CSS similar to original renderStyles
|
|
848
|
-
// Merge all declarations into a single rule
|
|
849
|
-
const baseRule = declarations.length > 0 ? `& { ${declarations.join('\n')} }` : '';
|
|
850
|
-
const mediaRules = responsive && responsive.length && responsiveStyles.some((s) => s)
|
|
851
|
-
? mediaWrapper(responsiveStyles, zones)
|
|
852
|
-
: '';
|
|
853
|
-
// Ensure we always separate the base rule, inner complex selectors and media rules with
|
|
854
|
-
// a newline so the selector replacement step ( & -> actual selector ) cannot accidentally
|
|
855
|
-
// concatenate two selectors and create the invalid form "..selector selector".
|
|
856
|
-
const parts = [baseRule, innerStyles, mediaRules].filter(Boolean);
|
|
857
|
-
const result = parts.join('\n');
|
|
858
|
-
return result;
|
|
126
|
+
return STYLE_CACHE[cacheKey];
|
|
859
127
|
}
|
|
860
128
|
|
|
861
129
|
|