@cube-dev/ui-kit 0.0.0-canary-40524e2 → 0.0.0-canary-49dca2f
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/CollectionItem.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/OpenTrasition.js +1 -1
- package/es/components/Root.js +1 -1
- package/es/components/actions/Action/Action.js +1 -1
- package/es/components/actions/Button/Button.js +2 -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/ItemAction/ItemAction.js +5 -5
- package/es/components/actions/ItemAction/index.js +1 -1
- package/es/components/actions/ItemActionContext.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/Link/Link.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 +2 -2
- 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/Item/Item.js +97 -55
- package/es/components/content/Item/index.js +1 -1
- package/es/components/content/ItemBadge/ItemBadge.js +2 -2
- package/es/components/content/ItemBadge/index.js +1 -1
- package/es/components/content/List/SectionHeading.js +1 -1
- package/es/components/content/List/index.js +1 -1
- package/es/components/content/Paragraph.js +1 -1
- package/es/components/content/Placeholder/Placeholder.js +1 -1
- package/es/components/content/PrismCode/PrismCode.js +1 -1
- package/es/components/content/PrismCode/prismSetup.js +1 -1
- package/es/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
- package/es/components/content/Result/Result.js +1 -1
- package/es/components/content/Skeleton/Skeleton.js +1 -1
- package/es/components/content/Tag/Tag.js +1 -1
- package/es/components/content/Text.js +1 -1
- package/es/components/content/Title.js +1 -1
- package/es/components/fields/Checkbox/Checkbox.js +1 -1
- package/es/components/fields/Checkbox/CheckboxGroup.js +1 -1
- package/es/components/fields/Checkbox/context.js +1 -1
- package/es/components/fields/Checkbox/index.js +1 -1
- package/es/components/fields/ComboBox/ComboBox.js +3 -2
- 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/Picker/Picker.js +1 -1
- package/es/components/fields/Picker/index.js +1 -1
- package/es/components/fields/RadioGroup/Radio.js +2 -2
- package/es/components/fields/RadioGroup/RadioGroup.js +1 -1
- package/es/components/fields/RadioGroup/context.js +1 -1
- package/es/components/fields/RadioGroup/index.js +1 -1
- package/es/components/fields/SearchInput/SearchInput.js +1 -1
- package/es/components/fields/SearchInput/index.js +1 -1
- package/es/components/fields/Select/Select.js +1 -1
- package/es/components/fields/Select/index.js +1 -1
- package/es/components/fields/Slider/Gradation.js +1 -1
- package/es/components/fields/Slider/Header.js +1 -1
- package/es/components/fields/Slider/RangeSlider.js +1 -1
- package/es/components/fields/Slider/Slider.js +1 -1
- package/es/components/fields/Slider/SliderBase.js +1 -1
- package/es/components/fields/Slider/SliderInput.js +1 -1
- package/es/components/fields/Slider/SliderThumb.js +1 -1
- package/es/components/fields/Slider/SliderTrack.js +1 -1
- package/es/components/fields/Slider/elements.js +1 -1
- package/es/components/fields/Slider/index.js +1 -1
- package/es/components/fields/Slider/types.js +1 -1
- package/es/components/fields/Switch/Switch.js +1 -1
- package/es/components/fields/Switch/index.js +1 -1
- package/es/components/fields/TextArea/TextArea.js +1 -1
- package/es/components/fields/TextArea/index.js +1 -1
- package/es/components/fields/TextInput/TextInput.js +1 -1
- package/es/components/fields/TextInput/TextInputBase.js +1 -1
- package/es/components/fields/TextInput/index.js +1 -1
- package/es/components/fields/TextInputMapper/TextInputMapper.js +1 -1
- package/es/components/fields/TextInputMapper/index.js +1 -1
- package/es/components/fields/index.js +1 -1
- package/es/components/form/FieldWrapper/FieldWrapper.js +1 -1
- package/es/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
- package/es/components/form/FieldWrapper/index.js +1 -1
- package/es/components/form/FieldWrapper/types.js +1 -1
- package/es/components/form/Form/Field.js +1 -1
- package/es/components/form/Form/Form.js +1 -1
- package/es/components/form/Form/ResetButton/ResetButton.js +1 -1
- package/es/components/form/Form/ResetButton/index.js +1 -1
- package/es/components/form/Form/SubmitButton/SubmitButton.js +1 -1
- package/es/components/form/Form/SubmitButton/index.js +1 -1
- package/es/components/form/Form/SubmitError.js +1 -1
- package/es/components/form/Form/index.js +1 -1
- package/es/components/form/Form/types.js +1 -1
- package/es/components/form/Form/use-field/index.js +1 -1
- package/es/components/form/Form/use-field/types.js +1 -1
- package/es/components/form/Form/use-field/use-field-props.js +1 -1
- package/es/components/form/Form/use-field/use-field.js +1 -1
- package/es/components/form/Form/use-form.js +1 -1
- package/es/components/form/Form/validation.js +1 -1
- package/es/components/form/Label.js +1 -1
- package/es/components/form/index.js +1 -1
- package/es/components/form/wrapper.js +1 -1
- package/es/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
- package/es/components/helpers/index.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/organisms/FileTabs/FileTabs.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/NotificationsDialogContext.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 +2 -2
- 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/ChartHeatmapIcon.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/CubePauseIcon.js +1 -1
- package/es/icons/CubePlayIcon.js +1 -1
- package/es/icons/CurrencyDollarIcon.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/DecimalDecreaseIcon.js +1 -1
- package/es/icons/DecimalIncreaseIcon.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/HierarchyOpenIcon.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/Number123Icon.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/PercentageIcon.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/ProgressBarIcon.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/TrashIcon.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/providers/navigation.types.js +1 -1
- package/es/providers/navigationAdapter.default.js +1 -1
- package/es/services/notification.js +1 -1
- package/es/shared/form.js +1 -1
- package/es/shared/index.js +1 -1
- package/es/stories/Form.legacy-stories.js +1 -1
- package/es/stories/FormFieldArgs.js +1 -1
- package/es/stories/Layout.stories.js +1 -1
- package/es/stories/Tasty.stories.js +1 -1
- package/es/stories/components/ConfirmDeletionDialogForm.js +1 -1
- package/es/stories/components/DialogFormApp.js +1 -1
- package/es/stories/components/StyledButton.js +1 -1
- package/es/stories/lists/baseProps.js +1 -1
- package/es/tasty/debug.js +1 -1
- package/es/tasty/index.js +1 -1
- package/es/tasty/injector/index.js +1 -1
- package/es/tasty/injector/injector.js +1 -1
- package/es/tasty/injector/sheet-manager.js +1 -1
- package/es/tasty/injector/types.js +1 -1
- package/es/tasty/parser/classify.js +1 -1
- package/es/tasty/parser/const.js +1 -1
- package/es/tasty/parser/lru.js +1 -1
- package/es/tasty/parser/parser.js +1 -1
- package/es/tasty/parser/tokenizer.js +1 -1
- package/es/tasty/parser/types.js +1 -1
- package/es/tasty/providers/BreakpointsProvider.js +1 -1
- package/es/tasty/styles/align.js +1 -1
- package/es/tasty/styles/border.js +1 -1
- package/es/tasty/styles/boxShadow.combinator.js +1 -1
- package/es/tasty/styles/color.js +1 -1
- package/es/tasty/styles/createStyle.js +1 -1
- package/es/tasty/styles/dimension.js +1 -1
- package/es/tasty/styles/display.js +1 -1
- package/es/tasty/styles/fade.js +1 -1
- package/es/tasty/styles/fill.js +1 -1
- package/es/tasty/styles/flow.js +1 -1
- package/es/tasty/styles/font.js +1 -1
- package/es/tasty/styles/fontStyle.js +1 -1
- package/es/tasty/styles/gap.js +1 -1
- package/es/tasty/styles/groupRadius.js +1 -1
- package/es/tasty/styles/height.js +1 -1
- package/es/tasty/styles/index.js +1 -1
- package/es/tasty/styles/inset.js +1 -1
- package/es/tasty/styles/justify.js +1 -1
- package/es/tasty/styles/list.js +1 -1
- package/es/tasty/styles/margin.js +1 -1
- package/es/tasty/styles/outline.js +1 -1
- package/es/tasty/styles/padding.js +1 -1
- package/es/tasty/styles/place.js +1 -1
- package/es/tasty/styles/predefined.js +1 -1
- package/es/tasty/styles/preset.js +1 -1
- package/es/tasty/styles/radius.js +1 -1
- package/es/tasty/styles/reset.js +1 -1
- package/es/tasty/styles/scrollbar.js +1 -1
- package/es/tasty/styles/shadow.js +1 -1
- package/es/tasty/styles/styledScrollbar.js +1 -1
- package/es/tasty/styles/transition.js +1 -1
- package/es/tasty/styles/types.js +1 -1
- package/es/tasty/styles/width.js +1 -1
- package/es/tasty/tasty.js +6 -5
- package/es/tasty/types.js +1 -1
- package/es/tasty/utils/cache-wrapper.js +1 -1
- package/es/tasty/utils/case-converter.js +1 -1
- package/es/tasty/utils/colors.js +1 -1
- package/es/tasty/utils/dotize.js +1 -1
- package/es/tasty/utils/filterBaseProps.js +1 -1
- package/es/tasty/utils/getDisplayName.js +1 -1
- package/es/tasty/utils/getModCombinations.js +1 -1
- package/es/tasty/utils/isDevEnv.js +1 -1
- package/es/tasty/utils/mergeStyles.js +1 -1
- package/es/tasty/utils/modAttrs.js +1 -1
- package/es/tasty/utils/renderStyles.js +232 -181
- package/es/tasty/utils/responsive.js +1 -1
- package/es/tasty/utils/string.js +1 -1
- package/es/tasty/utils/styles.js +1 -1
- package/es/tasty/utils/warnings.js +1 -1
- package/es/tokens.js +1 -1
- package/es/utils/ResizeSensor.js +1 -1
- package/es/utils/index.js +1 -1
- package/es/utils/modules.js +1 -1
- package/es/utils/promise.js +1 -1
- package/es/utils/raf.js +1 -1
- package/es/utils/random.js +1 -1
- package/es/utils/range.js +1 -1
- package/es/utils/react/RenderCache.js +1 -1
- package/es/utils/react/Slots.js +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/tree.js +1 -1
- package/es/utils/warnings.js +1 -1
- package/es/version.js +2 -2
- package/package.json +1 -1
- package/types/tasty/styles/types.d.ts +6 -1
- package/types/tasty/utils/renderStyles.d.ts +10 -2
|
@@ -1,25 +1,35 @@
|
|
|
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-49dca2f
|
|
5
5
|
* Released under the MIT license.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
-
* Style rendering that works with structured style objects
|
|
10
|
-
* Eliminates CSS string parsing for better performance
|
|
9
|
+
* Style rendering that works with structured style objects.
|
|
10
|
+
* Eliminates CSS string parsing for better performance.
|
|
11
|
+
*
|
|
12
|
+
* Key optimizations:
|
|
13
|
+
* - Early exit checks (hasSameAttributeConflicts) handle common cases without overhead
|
|
14
|
+
* - Logical rule caching (logicalRulesCache) memoizes expensive style processing
|
|
15
|
+
* - Conflict detection prevents invalid CSS selector combinations
|
|
16
|
+
* - Not-selector optimization reduces CSS size
|
|
17
|
+
* - Priority-based filtering handles mod precedence correctly
|
|
18
|
+
* - Consolidated mod processing eliminates code duplication
|
|
11
19
|
*/
|
|
12
20
|
import { Lru } from '../parser/lru';
|
|
13
21
|
import { createStyle, STYLE_HANDLER_MAP } from '../styles';
|
|
14
22
|
import { getModCombinationsIterative } from './getModCombinations';
|
|
15
23
|
import { normalizeStyleZones, pointsToZones, } from './responsive';
|
|
16
|
-
import { computeState, getModSelector, styleStateMapToStyleStateDataList, } from './styles';
|
|
24
|
+
import { computeState, getModSelector, stringifyStyles, styleStateMapToStyleStateDataList, } from './styles';
|
|
17
25
|
// Detect if a value is a state map whose entries contain responsive arrays
|
|
18
26
|
function stateMapHasResponsiveArrays(value) {
|
|
19
27
|
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
20
28
|
return false;
|
|
21
29
|
return Object.values(value).some((v) => Array.isArray(v));
|
|
22
30
|
}
|
|
31
|
+
// Cache logical rules per styles+breakpoints to avoid recomputation across identical calls
|
|
32
|
+
const logicalRulesCache = new Lru(5000);
|
|
23
33
|
// Normalize selector suffixes coming from `$` in style handler results.
|
|
24
34
|
// Some legacy handlers return suffixes starting with `&` (e.g. '& > *').
|
|
25
35
|
// The renderer expects suffixes without the ampersand because it adds
|
|
@@ -81,26 +91,20 @@ function getSelector(key, styles) {
|
|
|
81
91
|
}
|
|
82
92
|
return null;
|
|
83
93
|
}
|
|
84
|
-
|
|
85
|
-
|
|
94
|
+
/**
|
|
95
|
+
* Parse attribute selector into its components.
|
|
96
|
+
* Simple regex parsing - JS engines optimize repeated patterns internally.
|
|
97
|
+
*/
|
|
86
98
|
function parseAttributeSelector(selector) {
|
|
87
|
-
// Check cache first
|
|
88
|
-
const cached = attributeSelectorCache.get(selector);
|
|
89
|
-
if (cached !== undefined) {
|
|
90
|
-
return cached;
|
|
91
|
-
}
|
|
92
99
|
// Match patterns like [data-size="medium"] or [data-selected]
|
|
93
100
|
const match = selector.match(/^\[([^=\]]+)(?:="([^"]+)")?\]$/);
|
|
94
|
-
|
|
101
|
+
return match
|
|
95
102
|
? {
|
|
96
103
|
attribute: match[1],
|
|
97
104
|
value: match[2] || 'true', // Handle boolean attributes
|
|
98
105
|
fullSelector: selector,
|
|
99
106
|
}
|
|
100
107
|
: null;
|
|
101
|
-
// Cache the result
|
|
102
|
-
attributeSelectorCache.set(selector, result);
|
|
103
|
-
return result;
|
|
104
108
|
}
|
|
105
109
|
function hasConflictingAttributeSelectors(mods, parsedMods) {
|
|
106
110
|
const attributeValues = new Map();
|
|
@@ -136,15 +140,17 @@ function createAttributeConflictChecker(parsedMods) {
|
|
|
136
140
|
return (combination) => hasConflictingAttributeSelectors(combination, parsedMods);
|
|
137
141
|
}
|
|
138
142
|
// Build precomputed attribute maps for efficient not selector optimization
|
|
139
|
-
function buildAttributeMaps(currentMods, allMods) {
|
|
143
|
+
function buildAttributeMaps(currentMods, allMods, parsedModsCache) {
|
|
140
144
|
const allAttributes = new Map();
|
|
141
145
|
const currentAttributes = new Map();
|
|
142
|
-
const parsedMods = new Map();
|
|
143
|
-
// Parse all mods once and cache results
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
parsedMods.
|
|
146
|
+
const parsedMods = parsedModsCache || new Map();
|
|
147
|
+
// Parse all mods once and cache results (only if cache not provided)
|
|
148
|
+
if (!parsedModsCache) {
|
|
149
|
+
const allModsSet = new Set([...currentMods, ...allMods]);
|
|
150
|
+
for (const mod of allModsSet) {
|
|
151
|
+
if (!parsedMods.has(mod)) {
|
|
152
|
+
parsedMods.set(mod, parseAttributeSelector(mod));
|
|
153
|
+
}
|
|
148
154
|
}
|
|
149
155
|
}
|
|
150
156
|
// Build map of all possible values for each attribute
|
|
@@ -214,6 +220,14 @@ function optimizeNotSelectors(currentMods, allMods, precomputedMaps) {
|
|
|
214
220
|
const maps = precomputedMaps || buildAttributeMaps(currentMods, allMods);
|
|
215
221
|
const notMods = allMods.filter((mod) => !currentMods.includes(mod));
|
|
216
222
|
const optimizedNotMods = [];
|
|
223
|
+
// Precompute presence of negative boolean attributes to avoid repeated scans
|
|
224
|
+
const negativeBooleanByAttr = new Set();
|
|
225
|
+
for (const mod of notMods) {
|
|
226
|
+
const p = maps.parsedMods.get(mod);
|
|
227
|
+
if (p && p.value === 'true') {
|
|
228
|
+
negativeBooleanByAttr.add(p.attribute);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
217
231
|
// Build maps of positive selector states for subsumption optimization
|
|
218
232
|
const positiveAttributes = new Map();
|
|
219
233
|
const positiveBooleans = new Set();
|
|
@@ -254,17 +268,8 @@ function optimizeNotSelectors(currentMods, allMods, precomputedMaps) {
|
|
|
254
268
|
// Case 7 subsumption: If we have a value negative and boolean negative for same attribute
|
|
255
269
|
// The boolean negative implies value negative, so skip the value negative
|
|
256
270
|
if (parsed && parsed.value !== 'true') {
|
|
257
|
-
//
|
|
258
|
-
|
|
259
|
-
const p = maps.parsedMods.get(m);
|
|
260
|
-
return (p &&
|
|
261
|
-
p.value === 'true' &&
|
|
262
|
-
p.attribute === parsed.attribute &&
|
|
263
|
-
!currentMods.includes(m));
|
|
264
|
-
});
|
|
265
|
-
if (booleanMod) {
|
|
266
|
-
// We have both !([data-attr]) and !([data-attr="value"])
|
|
267
|
-
// Skip the value negative as it's subsumed by attribute negative
|
|
271
|
+
// If we also have the boolean attribute in negative mods, skip the value negative
|
|
272
|
+
if (negativeBooleanByAttr.has(parsed.attribute)) {
|
|
268
273
|
continue;
|
|
269
274
|
}
|
|
270
275
|
}
|
|
@@ -272,6 +277,39 @@ function optimizeNotSelectors(currentMods, allMods, precomputedMaps) {
|
|
|
272
277
|
}
|
|
273
278
|
return optimizedNotMods;
|
|
274
279
|
}
|
|
280
|
+
/**
|
|
281
|
+
* Quick check if there are any same-attribute conflicts (boolean vs value for same attribute).
|
|
282
|
+
* Returns true if conflicts exist, false if filtering can be skipped.
|
|
283
|
+
* This early exit optimization handles the common case efficiently.
|
|
284
|
+
*/
|
|
285
|
+
function hasSameAttributeConflicts(allMods, parsedModsCache) {
|
|
286
|
+
const attributeCounts = new Map();
|
|
287
|
+
for (const mod of allMods) {
|
|
288
|
+
const parsed = parsedModsCache.get(mod);
|
|
289
|
+
if (!parsed)
|
|
290
|
+
continue;
|
|
291
|
+
const isBool = parsed.value === 'true';
|
|
292
|
+
const existing = attributeCounts.get(parsed.attribute);
|
|
293
|
+
if (existing) {
|
|
294
|
+
// Already have both types for this attribute - conflict exists!
|
|
295
|
+
if ((isBool && existing.hasValue) || (!isBool && existing.hasBool)) {
|
|
296
|
+
return true;
|
|
297
|
+
}
|
|
298
|
+
// Update the types we've seen
|
|
299
|
+
if (isBool)
|
|
300
|
+
existing.hasBool = true;
|
|
301
|
+
else
|
|
302
|
+
existing.hasValue = true;
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
attributeCounts.set(parsed.attribute, {
|
|
306
|
+
hasBool: isBool,
|
|
307
|
+
hasValue: !isBool,
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return false;
|
|
312
|
+
}
|
|
275
313
|
/**
|
|
276
314
|
* Filter mods based on priority order for same-attribute conflicts.
|
|
277
315
|
* If a boolean selector has higher priority than value selectors for the same attribute,
|
|
@@ -280,47 +318,46 @@ function optimizeNotSelectors(currentMods, allMods, precomputedMaps) {
|
|
|
280
318
|
* Priority is determined by order in the styleStates (after reversal - earlier = higher priority)
|
|
281
319
|
*/
|
|
282
320
|
function filterModsByPriority(allMods, styleStates, lookupStyles, parsedModsCache) {
|
|
283
|
-
//
|
|
284
|
-
|
|
285
|
-
if (!parsedModsCache) {
|
|
286
|
-
|
|
287
|
-
if (!parsedMods.has(mod)) {
|
|
288
|
-
parsedMods.set(mod, parseAttributeSelector(getModSelector(mod)));
|
|
289
|
-
}
|
|
290
|
-
}
|
|
321
|
+
// Early exit: if no same-attribute conflicts exist, skip all the expensive work
|
|
322
|
+
// This handles the common case efficiently without any cache overhead
|
|
323
|
+
if (!hasSameAttributeConflicts(allMods, parsedModsCache)) {
|
|
324
|
+
return allMods;
|
|
291
325
|
}
|
|
292
326
|
// Build priority map: for each mod, find its earliest appearance in any state list
|
|
293
327
|
const modPriorities = new Map();
|
|
294
328
|
for (const style of lookupStyles) {
|
|
295
329
|
const states = styleStates[style];
|
|
296
|
-
if (!states)
|
|
297
|
-
continue;
|
|
330
|
+
if (!states || states.length === 0)
|
|
331
|
+
continue; // Skip empty states
|
|
298
332
|
// states are already reversed (higher priority = lower index)
|
|
299
|
-
states.
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
333
|
+
for (let index = 0; index < states.length; index++) {
|
|
334
|
+
const state = states[index];
|
|
335
|
+
if (!state.mods || state.mods.length === 0)
|
|
336
|
+
continue; // Skip empty mods
|
|
337
|
+
for (const mod of state.mods) {
|
|
303
338
|
const currentPriority = modPriorities.get(mod);
|
|
304
339
|
if (currentPriority === undefined || index < currentPriority) {
|
|
305
340
|
modPriorities.set(mod, index);
|
|
306
341
|
}
|
|
307
|
-
}
|
|
308
|
-
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
309
344
|
}
|
|
310
345
|
// Group mods by attribute
|
|
311
346
|
const attributeGroups = new Map();
|
|
312
347
|
for (const mod of allMods) {
|
|
313
|
-
const parsed =
|
|
348
|
+
const parsed = parsedModsCache.get(mod);
|
|
314
349
|
if (!parsed)
|
|
315
350
|
continue;
|
|
316
351
|
const priority = modPriorities.get(mod);
|
|
317
352
|
if (priority === undefined)
|
|
318
353
|
continue;
|
|
319
354
|
const isBool = parsed.value === 'true';
|
|
320
|
-
|
|
321
|
-
|
|
355
|
+
let group = attributeGroups.get(parsed.attribute);
|
|
356
|
+
if (!group) {
|
|
357
|
+
group = [];
|
|
358
|
+
attributeGroups.set(parsed.attribute, group);
|
|
322
359
|
}
|
|
323
|
-
|
|
360
|
+
group.push({
|
|
324
361
|
mod,
|
|
325
362
|
isBool,
|
|
326
363
|
priority,
|
|
@@ -329,12 +366,18 @@ function filterModsByPriority(allMods, styleStates, lookupStyles, parsedModsCach
|
|
|
329
366
|
// Filter: for each attribute, if boolean has higher priority than any value, remove values
|
|
330
367
|
const modsToRemove = new Set();
|
|
331
368
|
for (const [attribute, group] of attributeGroups.entries()) {
|
|
369
|
+
// Only process attributes with more than one mod
|
|
370
|
+
if (group.length <= 1)
|
|
371
|
+
continue;
|
|
332
372
|
const boolMods = group.filter((m) => m.isBool);
|
|
333
373
|
const valueMods = group.filter((m) => !m.isBool);
|
|
374
|
+
// Only check if we have both types
|
|
375
|
+
if (boolMods.length === 0 || valueMods.length === 0)
|
|
376
|
+
continue;
|
|
334
377
|
// Check if any boolean has higher priority (lower index) than all values
|
|
335
378
|
for (const boolMod of boolMods) {
|
|
336
379
|
const hasHigherPriorityThanAllValues = valueMods.every((valueMod) => boolMod.priority < valueMod.priority);
|
|
337
|
-
if (hasHigherPriorityThanAllValues
|
|
380
|
+
if (hasHigherPriorityThanAllValues) {
|
|
338
381
|
// This boolean shadows all value mods for this attribute
|
|
339
382
|
valueMods.forEach((valueMod) => modsToRemove.add(valueMod.mod));
|
|
340
383
|
}
|
|
@@ -500,6 +543,124 @@ function convertHandlerResultToCSS(result, selectorSuffix = '') {
|
|
|
500
543
|
const normalizedSingle = $ ? normalizeDollarSelectorSuffix(String($)) : '';
|
|
501
544
|
return `&${finalSelectorSuffix}${normalizedSingle}{\n${renderedStyles}}\n`;
|
|
502
545
|
}
|
|
546
|
+
/**
|
|
547
|
+
* Process state maps with mod combinations and generate logical rules.
|
|
548
|
+
* This consolidates the common logic for handling mod combinations, priority filtering,
|
|
549
|
+
* contradiction checking, and selector optimization.
|
|
550
|
+
*/
|
|
551
|
+
function processStateMapsWithModCombinations(styleStates, lookupStyles, zones, handler, parentSuffix, allLogicalRules, cachedNormalizeStyleZones, breakpointIdx, responsiveOrigin = false) {
|
|
552
|
+
// Collect all mods from style states
|
|
553
|
+
const allMods = [];
|
|
554
|
+
const seenMods = new Set();
|
|
555
|
+
for (const style of lookupStyles) {
|
|
556
|
+
const states = styleStates[style];
|
|
557
|
+
if (!states)
|
|
558
|
+
continue;
|
|
559
|
+
for (const state of states) {
|
|
560
|
+
if (state.mods) {
|
|
561
|
+
for (const mod of state.mods) {
|
|
562
|
+
if (!seenMods.has(mod)) {
|
|
563
|
+
seenMods.add(mod);
|
|
564
|
+
allMods.push(mod);
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
if (allMods.length === 0) {
|
|
571
|
+
// No mods - just call handler with default state values
|
|
572
|
+
const stateProps = {};
|
|
573
|
+
lookupStyles.forEach((style) => {
|
|
574
|
+
const states = styleStates[style];
|
|
575
|
+
if (states && states.length > 0) {
|
|
576
|
+
stateProps[style] = states[0].value;
|
|
577
|
+
}
|
|
578
|
+
});
|
|
579
|
+
const result = handler(stateProps);
|
|
580
|
+
if (!result)
|
|
581
|
+
return;
|
|
582
|
+
const logicalRules = explodeHandlerResult(result, zones, parentSuffix, breakpointIdx, responsiveOrigin);
|
|
583
|
+
allLogicalRules.push(...logicalRules);
|
|
584
|
+
return;
|
|
585
|
+
}
|
|
586
|
+
// Parse all mods once and share the cache across all operations
|
|
587
|
+
const parsedModsCache = new Map();
|
|
588
|
+
for (const mod of allMods) {
|
|
589
|
+
parsedModsCache.set(mod, parseAttributeSelector(getModSelector(mod)));
|
|
590
|
+
}
|
|
591
|
+
// Apply priority-based filtering for same-attribute boolean vs value conflicts
|
|
592
|
+
const filteredMods = filterModsByPriority(allMods, styleStates, lookupStyles, parsedModsCache);
|
|
593
|
+
// Precompute attribute maps once for all combinations
|
|
594
|
+
const attributeMaps = buildAttributeMaps([], filteredMods, parsedModsCache);
|
|
595
|
+
// Generate combinations with conflict-aware pruning
|
|
596
|
+
const conflictChecker = createAttributeConflictChecker(attributeMaps.parsedMods);
|
|
597
|
+
const combinations = getModCombinationsIterative(filteredMods, true, conflictChecker);
|
|
598
|
+
// Process each mod combination
|
|
599
|
+
combinations.forEach((modCombination) => {
|
|
600
|
+
const stateProps = {};
|
|
601
|
+
// Find matching state for each style
|
|
602
|
+
lookupStyles.forEach((style) => {
|
|
603
|
+
const states = styleStates[style];
|
|
604
|
+
const matchingState = states.find((state) => computeState(state.model, (mod) => modCombination.includes(mod)));
|
|
605
|
+
if (matchingState) {
|
|
606
|
+
stateProps[style] = matchingState.value;
|
|
607
|
+
}
|
|
608
|
+
});
|
|
609
|
+
// Use precomputed maps for efficient not selector optimization
|
|
610
|
+
const currentMaps = buildAttributeMaps(modCombination, filteredMods, parsedModsCache);
|
|
611
|
+
// Compute raw NOTs for contradiction check (before optimization)
|
|
612
|
+
const rawNotMods = filteredMods.filter((mod) => !modCombination.includes(mod));
|
|
613
|
+
// Check for contradictions between positive and negative selectors
|
|
614
|
+
if (hasContradiction(modCombination, rawNotMods, currentMaps.parsedMods)) {
|
|
615
|
+
return; // Skip this invalid combination
|
|
616
|
+
}
|
|
617
|
+
// Optimize NOT selectors afterwards (pure simplification)
|
|
618
|
+
const optimizedNotMods = optimizeNotSelectors(modCombination, filteredMods, currentMaps);
|
|
619
|
+
// Build the mod selector string
|
|
620
|
+
const modsSelectors = `${modCombination
|
|
621
|
+
.map(getModSelector)
|
|
622
|
+
.join('')}${optimizedNotMods
|
|
623
|
+
.map((mod) => {
|
|
624
|
+
const sel = getModSelector(mod);
|
|
625
|
+
return sel.startsWith(':not(') ? sel.slice(5, -1) : `:not(${sel})`;
|
|
626
|
+
})
|
|
627
|
+
.join('')}`;
|
|
628
|
+
// Check if any state value is responsive (array)
|
|
629
|
+
const hasResponsiveStateValues = lookupStyles.some((style) => Array.isArray(stateProps[style]));
|
|
630
|
+
if (hasResponsiveStateValues) {
|
|
631
|
+
// Fan out by breakpoint for responsive state values
|
|
632
|
+
const propsByPoint = zones.map((_, i) => {
|
|
633
|
+
const pointProps = {};
|
|
634
|
+
lookupStyles.forEach((style) => {
|
|
635
|
+
const v = stateProps[style];
|
|
636
|
+
if (Array.isArray(v)) {
|
|
637
|
+
const arr = cachedNormalizeStyleZones(v, zones.length);
|
|
638
|
+
pointProps[style] = arr?.[i];
|
|
639
|
+
}
|
|
640
|
+
else {
|
|
641
|
+
pointProps[style] = v;
|
|
642
|
+
}
|
|
643
|
+
});
|
|
644
|
+
return pointProps;
|
|
645
|
+
});
|
|
646
|
+
propsByPoint.forEach((props, bpIdx) => {
|
|
647
|
+
const res = handler(props);
|
|
648
|
+
if (!res)
|
|
649
|
+
return;
|
|
650
|
+
const logical = explodeHandlerResult(res, zones, `${modsSelectors}${parentSuffix}`, bpIdx, true);
|
|
651
|
+
allLogicalRules.push(...logical);
|
|
652
|
+
});
|
|
653
|
+
}
|
|
654
|
+
else {
|
|
655
|
+
// Simple non-responsive state values
|
|
656
|
+
const result = handler(stateProps);
|
|
657
|
+
if (!result)
|
|
658
|
+
return;
|
|
659
|
+
const logical = explodeHandlerResult(result, zones, `${modsSelectors}${parentSuffix}`, breakpointIdx, responsiveOrigin);
|
|
660
|
+
allLogicalRules.push(...logical);
|
|
661
|
+
}
|
|
662
|
+
});
|
|
663
|
+
}
|
|
503
664
|
/**
|
|
504
665
|
* Convert logical rules to final StyleResult format
|
|
505
666
|
*/
|
|
@@ -714,62 +875,20 @@ function generateLogicalRules(styles, responsive = [], parentSuffix = '') {
|
|
|
714
875
|
return v && typeof v === 'object' && !Array.isArray(v);
|
|
715
876
|
});
|
|
716
877
|
if (hasStateMapsAtPoint) {
|
|
717
|
-
|
|
878
|
+
// Build styleStates from point props
|
|
718
879
|
const styleStates = {};
|
|
719
880
|
lookupStyles.forEach((style) => {
|
|
720
881
|
const v = pointProps[style];
|
|
721
882
|
if (v && typeof v === 'object' && !Array.isArray(v)) {
|
|
722
|
-
const { states
|
|
883
|
+
const { states } = styleStateMapToStyleStateDataList(v);
|
|
723
884
|
styleStates[style] = states;
|
|
724
|
-
mods.forEach((m) => allMods.add(m));
|
|
725
885
|
}
|
|
726
886
|
else {
|
|
727
887
|
styleStates[style] = [{ mods: [], notMods: [], value: v }];
|
|
728
888
|
}
|
|
729
889
|
});
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
const filteredMods = filterModsByPriority(allModsArray, styleStates, lookupStyles);
|
|
733
|
-
// Precompute attribute maps once for all combinations
|
|
734
|
-
const attributeMaps = buildAttributeMaps([], filteredMods);
|
|
735
|
-
// Generate combinations with conflict-aware pruning
|
|
736
|
-
const conflictChecker = createAttributeConflictChecker(attributeMaps.parsedMods);
|
|
737
|
-
const combinations = getModCombinationsIterative(filteredMods, true, conflictChecker);
|
|
738
|
-
combinations.forEach((modCombination) => {
|
|
739
|
-
const stateProps = {};
|
|
740
|
-
lookupStyles.forEach((style) => {
|
|
741
|
-
const states = styleStates[style];
|
|
742
|
-
const matchingState = states.find((state) => computeState(state.model, (mod) => modCombination.includes(mod)));
|
|
743
|
-
if (matchingState) {
|
|
744
|
-
stateProps[style] = matchingState.value;
|
|
745
|
-
}
|
|
746
|
-
});
|
|
747
|
-
// Use precomputed maps for efficient not selector optimization
|
|
748
|
-
const currentMaps = buildAttributeMaps(modCombination, filteredMods);
|
|
749
|
-
// Compute raw NOTs for contradiction check (before optimization)
|
|
750
|
-
const rawNotMods = filteredMods.filter((mod) => !modCombination.includes(mod));
|
|
751
|
-
// Check for contradictions between positive and negative selectors
|
|
752
|
-
if (hasContradiction(modCombination, rawNotMods, currentMaps.parsedMods)) {
|
|
753
|
-
return; // Skip this invalid combination
|
|
754
|
-
}
|
|
755
|
-
// Optimize NOT selectors afterwards (pure simplification)
|
|
756
|
-
const optimizedNotMods = optimizeNotSelectors(modCombination, filteredMods, currentMaps);
|
|
757
|
-
const modsSelectors = `${modCombination
|
|
758
|
-
.map(getModSelector)
|
|
759
|
-
.join('')}${optimizedNotMods
|
|
760
|
-
.map((mod) => {
|
|
761
|
-
const sel = getModSelector(mod);
|
|
762
|
-
return sel.startsWith(':not(')
|
|
763
|
-
? sel.slice(5, -1)
|
|
764
|
-
: `:not(${sel})`;
|
|
765
|
-
})
|
|
766
|
-
.join('')}`;
|
|
767
|
-
const result = handler(stateProps);
|
|
768
|
-
if (!result)
|
|
769
|
-
return;
|
|
770
|
-
const logicalRules = explodeHandlerResult(result, zones || [], `${modsSelectors}${parentSuffix}`, breakpointIdx, true);
|
|
771
|
-
allLogicalRules.push(...logicalRules);
|
|
772
|
-
});
|
|
890
|
+
// Use the consolidated helper for mod combination processing
|
|
891
|
+
processStateMapsWithModCombinations(styleStates, lookupStyles, zones || [], handler, parentSuffix, allLogicalRules, cachedNormalizeStyleZones, breakpointIdx, true);
|
|
773
892
|
}
|
|
774
893
|
else {
|
|
775
894
|
const result = handler(pointProps);
|
|
@@ -787,96 +906,21 @@ function generateLogicalRules(styles, responsive = [], parentSuffix = '') {
|
|
|
787
906
|
return value && typeof value === 'object' && !Array.isArray(value);
|
|
788
907
|
});
|
|
789
908
|
if (hasStateMaps) {
|
|
790
|
-
//
|
|
791
|
-
const allMods = new Set();
|
|
909
|
+
// Build styleStates from styleMap
|
|
792
910
|
const styleStates = {};
|
|
793
911
|
lookupStyles.forEach((style) => {
|
|
794
912
|
const value = styleMap[style];
|
|
795
913
|
if (value && typeof value === 'object' && !Array.isArray(value)) {
|
|
796
|
-
const { states
|
|
914
|
+
const { states } = styleStateMapToStyleStateDataList(value);
|
|
797
915
|
styleStates[style] = states;
|
|
798
|
-
mods.forEach((mod) => allMods.add(mod));
|
|
799
916
|
}
|
|
800
917
|
else {
|
|
801
918
|
// Simple value, create a single state
|
|
802
919
|
styleStates[style] = [{ mods: [], notMods: [], value }];
|
|
803
920
|
}
|
|
804
921
|
});
|
|
805
|
-
//
|
|
806
|
-
|
|
807
|
-
// Apply priority-based filtering for same-attribute boolean vs value conflicts
|
|
808
|
-
const filteredMods = filterModsByPriority(allModsArray, styleStates, lookupStyles);
|
|
809
|
-
// Precompute attribute maps once for all combinations
|
|
810
|
-
const attributeMaps = buildAttributeMaps([], filteredMods);
|
|
811
|
-
// Generate combinations with conflict-aware pruning
|
|
812
|
-
const conflictChecker = createAttributeConflictChecker(attributeMaps.parsedMods);
|
|
813
|
-
const combinations = getModCombinationsIterative(filteredMods, true, conflictChecker);
|
|
814
|
-
combinations.forEach((modCombination) => {
|
|
815
|
-
const stateProps = {};
|
|
816
|
-
lookupStyles.forEach((style) => {
|
|
817
|
-
const states = styleStates[style];
|
|
818
|
-
// Find the matching state for this mod combination
|
|
819
|
-
const matchingState = states.find((state) => {
|
|
820
|
-
return computeState(state.model, (mod) => modCombination.includes(mod));
|
|
821
|
-
});
|
|
822
|
-
if (matchingState) {
|
|
823
|
-
stateProps[style] = matchingState.value;
|
|
824
|
-
}
|
|
825
|
-
});
|
|
826
|
-
// Use precomputed maps for efficient not selector optimization
|
|
827
|
-
const currentMaps = buildAttributeMaps(modCombination, filteredMods);
|
|
828
|
-
// Compute raw NOTs for contradiction check (before optimization)
|
|
829
|
-
const rawNotMods = filteredMods.filter((mod) => !modCombination.includes(mod));
|
|
830
|
-
// Check for contradictions between positive and negative selectors
|
|
831
|
-
if (hasContradiction(modCombination, rawNotMods, currentMaps.parsedMods)) {
|
|
832
|
-
return; // Skip this invalid combination
|
|
833
|
-
}
|
|
834
|
-
// Optimize NOT selectors afterwards (pure simplification)
|
|
835
|
-
const optimizedNotMods = optimizeNotSelectors(modCombination, filteredMods, currentMaps);
|
|
836
|
-
const modsSelectors = `${modCombination
|
|
837
|
-
.map(getModSelector)
|
|
838
|
-
.join('')}${optimizedNotMods
|
|
839
|
-
.map((mod) => {
|
|
840
|
-
const sel = getModSelector(mod);
|
|
841
|
-
return sel.startsWith(':not(')
|
|
842
|
-
? sel.slice(5, -1)
|
|
843
|
-
: `:not(${sel})`;
|
|
844
|
-
})
|
|
845
|
-
.join('')}`;
|
|
846
|
-
// If any state value is responsive (array), fan-out by breakpoint
|
|
847
|
-
const hasResponsiveStateValues = lookupStyles.some((style) => Array.isArray(stateProps[style]));
|
|
848
|
-
if (hasResponsiveStateValues) {
|
|
849
|
-
const propsByPoint = zones.map((_, i) => {
|
|
850
|
-
const pointProps = {};
|
|
851
|
-
lookupStyles.forEach((style) => {
|
|
852
|
-
const v = stateProps[style];
|
|
853
|
-
if (Array.isArray(v)) {
|
|
854
|
-
const arr = cachedNormalizeStyleZones(v, zones.length);
|
|
855
|
-
pointProps[style] = arr?.[i];
|
|
856
|
-
}
|
|
857
|
-
else {
|
|
858
|
-
pointProps[style] = v;
|
|
859
|
-
}
|
|
860
|
-
});
|
|
861
|
-
return pointProps;
|
|
862
|
-
});
|
|
863
|
-
propsByPoint.forEach((props, breakpointIdx) => {
|
|
864
|
-
const res = handler(props);
|
|
865
|
-
if (!res)
|
|
866
|
-
return;
|
|
867
|
-
const logical = explodeHandlerResult(res, zones || [], `${modsSelectors}${parentSuffix}`, breakpointIdx, true);
|
|
868
|
-
allLogicalRules.push(...logical);
|
|
869
|
-
});
|
|
870
|
-
}
|
|
871
|
-
else {
|
|
872
|
-
// Simple non-responsive state values
|
|
873
|
-
const result = handler(stateProps);
|
|
874
|
-
if (!result)
|
|
875
|
-
return;
|
|
876
|
-
const logical = explodeHandlerResult(result, zones || [], `${modsSelectors}${parentSuffix}`);
|
|
877
|
-
allLogicalRules.push(...logical);
|
|
878
|
-
}
|
|
879
|
-
});
|
|
922
|
+
// Use the consolidated helper for mod combination processing
|
|
923
|
+
processStateMapsWithModCombinations(styleStates, lookupStyles, zones || [], handler, parentSuffix, allLogicalRules, cachedNormalizeStyleZones);
|
|
880
924
|
}
|
|
881
925
|
else {
|
|
882
926
|
// Simple case: no state maps, call handler directly
|
|
@@ -898,8 +942,15 @@ export function renderStyles(styles, responsive = [], classNameOrSelector) {
|
|
|
898
942
|
if (!styles) {
|
|
899
943
|
return directSelector ? [] : { rules: [] };
|
|
900
944
|
}
|
|
901
|
-
// Generate logical rules using shared pipeline
|
|
902
|
-
const
|
|
945
|
+
// Generate logical rules using shared pipeline (memoized per styles+breakpoints)
|
|
946
|
+
const stylesKey = stringifyStyles(styles);
|
|
947
|
+
const bpKey = (responsive || []).join(',');
|
|
948
|
+
const lrKey = `${stylesKey}#${bpKey}`;
|
|
949
|
+
let allLogicalRules = logicalRulesCache.get(lrKey);
|
|
950
|
+
if (!allLogicalRules) {
|
|
951
|
+
allLogicalRules = generateLogicalRules(styles, responsive);
|
|
952
|
+
logicalRulesCache.set(lrKey, allLogicalRules);
|
|
953
|
+
}
|
|
903
954
|
const zones = pointsToZones(responsive || []);
|
|
904
955
|
if (directSelector) {
|
|
905
956
|
// Direct selector mode: convert logical rules directly to StyleResult format
|
package/es/tasty/utils/string.js
CHANGED
package/es/tasty/utils/styles.js
CHANGED
package/es/tokens.js
CHANGED
package/es/utils/ResizeSensor.js
CHANGED
package/es/utils/index.js
CHANGED
package/es/utils/modules.js
CHANGED
package/es/utils/promise.js
CHANGED