@cube-dev/ui-kit 0.0.0-canary-d09344a → 0.0.0-canary-ad2c384
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 +2 -2
- package/es/components/OpenTrasition.js +1 -1
- package/es/components/Root.js +3 -3
- package/es/components/actions/Action/Action.js +2 -2
- package/es/components/actions/Button/Button.js +27 -25
- 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 +4 -4
- package/es/components/actions/ItemAction/ItemAction.js +7 -7
- package/es/components/actions/ItemAction/index.js +1 -1
- package/es/components/actions/ItemActionContext.js +1 -1
- package/es/components/actions/ItemButton/ItemButton.js +8 -8
- 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 +9 -9
- 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 +2 -2
- package/es/components/content/Alert/Alert.js +3 -3
- 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 +3 -3
- package/es/components/content/Card/Card.js +1 -1
- package/es/components/content/Content.js +1 -1
- package/es/components/content/CopyPasteBlock/CopyPasteBlock.js +6 -6
- 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 +4 -4
- package/es/components/content/HotKeys/index.js +1 -1
- package/es/components/content/Item/Item.js +88 -87
- 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 +4 -4
- package/es/components/content/Text.js +1 -1
- package/es/components/content/Title.js +7 -7
- package/es/components/fields/Checkbox/Checkbox.js +2 -2
- 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 +2 -3
- 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 +3 -3
- 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 +3 -3
- package/es/components/fields/FilterListBox/FilterListBox.js +5 -5
- 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/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 +2 -2
- 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 +2 -2
- 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 +17 -17
- 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 +12 -12
- 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 +2 -2
- 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 +6 -6
- package/es/components/organisms/FileTabs/FileTabs.js +6 -6
- package/es/components/organisms/StatsCard/StatsCard.js +1 -1
- package/es/components/other/Base64Upload/Base64Upload.js +5 -5
- package/es/components/other/Calendar/Calendar.js +1 -1
- package/es/components/other/Calendar/CalendarCell.js +2 -2
- 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 +20 -19
- 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 +10 -9
- 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 +4 -4
- 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 +3 -3
- 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 +9 -10
- 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 +3 -24
- package/es/tasty/utils/renderStyles.js +140 -385
- package/es/tasty/utils/responsive.js +1 -1
- package/es/tasty/utils/string.js +1 -1
- package/es/tasty/utils/styles.js +3 -47
- 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/components/Root.d.ts +1 -0
- package/types/components/actions/Button/Button.d.ts +25 -23
- package/types/components/actions/Menu/styled.d.ts +3 -3
- package/types/components/content/List/SectionHeading.d.ts +1 -1
- package/types/components/fields/DatePicker/DatePickerElement.d.ts +1 -1
- package/types/tasty/styles/types.d.ts +1 -6
- package/types/tasty/types.d.ts +1 -1
- package/types/tasty/utils/renderStyles.d.ts +2 -10
|
@@ -1,35 +1,25 @@
|
|
|
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-ad2c384
|
|
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
|
|
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
|
|
9
|
+
* Style rendering that works with structured style objects
|
|
10
|
+
* Eliminates CSS string parsing for better performance
|
|
19
11
|
*/
|
|
20
12
|
import { Lru } from '../parser/lru';
|
|
21
13
|
import { createStyle, STYLE_HANDLER_MAP } from '../styles';
|
|
22
14
|
import { getModCombinationsIterative } from './getModCombinations';
|
|
23
15
|
import { normalizeStyleZones, pointsToZones, } from './responsive';
|
|
24
|
-
import { computeState, getModSelector,
|
|
16
|
+
import { computeState, getModSelector, styleStateMapToStyleStateDataList, } from './styles';
|
|
25
17
|
// Detect if a value is a state map whose entries contain responsive arrays
|
|
26
18
|
function stateMapHasResponsiveArrays(value) {
|
|
27
19
|
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
28
20
|
return false;
|
|
29
21
|
return Object.values(value).some((v) => Array.isArray(v));
|
|
30
22
|
}
|
|
31
|
-
// Cache logical rules per styles+breakpoints to avoid recomputation across identical calls
|
|
32
|
-
const logicalRulesCache = new Lru(5000);
|
|
33
23
|
// Normalize selector suffixes coming from `$` in style handler results.
|
|
34
24
|
// Some legacy handlers return suffixes starting with `&` (e.g. '& > *').
|
|
35
25
|
// The renderer expects suffixes without the ampersand because it adds
|
|
@@ -58,15 +48,6 @@ function transformSelectorAffix(affix) {
|
|
|
58
48
|
const trimmed = affix.trim();
|
|
59
49
|
if (!trimmed)
|
|
60
50
|
return ' ';
|
|
61
|
-
// Validate that combinators have spaces around them
|
|
62
|
-
// Check for capitalized words adjacent to combinators without spaces
|
|
63
|
-
const invalidPattern = /[A-Z][a-z]*[>+~]|[>+~][A-Z][a-z]*/;
|
|
64
|
-
if (invalidPattern.test(trimmed)) {
|
|
65
|
-
console.error(`[Tasty] Invalid selector affix ($) syntax: "${affix}"\n` +
|
|
66
|
-
`Combinators (>, +, ~) must have spaces around them when used with element names.\n` +
|
|
67
|
-
`Example: Use "$: '> Body > Row'" instead of "$: '>Body>Row'"\n` +
|
|
68
|
-
`This is a design choice: the parser uses simple whitespace splitting for performance.`);
|
|
69
|
-
}
|
|
70
51
|
const tokens = trimmed.split(/\s+/);
|
|
71
52
|
const transformed = tokens.map((token) => /^[A-Z]/.test(token) ? `[data-element="${token}"]` : token);
|
|
72
53
|
return ` ${transformed.join(' ')} `;
|
|
@@ -91,42 +72,40 @@ function getSelector(key, styles) {
|
|
|
91
72
|
}
|
|
92
73
|
return null;
|
|
93
74
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
* Simple regex parsing - JS engines optimize repeated patterns internally.
|
|
97
|
-
*/
|
|
75
|
+
// Cache for parsed attribute selectors with bounded size to prevent memory leaks
|
|
76
|
+
const attributeSelectorCache = new Lru(5000);
|
|
98
77
|
function parseAttributeSelector(selector) {
|
|
99
|
-
//
|
|
78
|
+
// Check cache first
|
|
79
|
+
const cached = attributeSelectorCache.get(selector);
|
|
80
|
+
if (cached !== undefined) {
|
|
81
|
+
return cached;
|
|
82
|
+
}
|
|
83
|
+
// Match patterns like [data-size="medium"] or [data-is-selected]
|
|
100
84
|
const match = selector.match(/^\[([^=\]]+)(?:="([^"]+)")?\]$/);
|
|
101
|
-
|
|
85
|
+
const result = match
|
|
102
86
|
? {
|
|
103
87
|
attribute: match[1],
|
|
104
88
|
value: match[2] || 'true', // Handle boolean attributes
|
|
105
89
|
fullSelector: selector,
|
|
106
90
|
}
|
|
107
91
|
: null;
|
|
92
|
+
// Cache the result
|
|
93
|
+
attributeSelectorCache.set(selector, result);
|
|
94
|
+
return result;
|
|
108
95
|
}
|
|
109
96
|
function hasConflictingAttributeSelectors(mods, parsedMods) {
|
|
110
|
-
const
|
|
111
|
-
const attributeBooleans = new Set();
|
|
97
|
+
const attributeMap = new Map();
|
|
112
98
|
for (const mod of mods) {
|
|
113
99
|
const parsed = parsedMods?.get(mod) ?? parseAttributeSelector(mod);
|
|
114
|
-
if (
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
// Boolean attribute
|
|
118
|
-
attributeBooleans.add(parsed.attribute);
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
// Value attribute
|
|
122
|
-
if (!attributeValues.has(parsed.attribute)) {
|
|
123
|
-
attributeValues.set(parsed.attribute, []);
|
|
100
|
+
if (parsed && parsed.value !== 'true') {
|
|
101
|
+
if (!attributeMap.has(parsed.attribute)) {
|
|
102
|
+
attributeMap.set(parsed.attribute, []);
|
|
124
103
|
}
|
|
125
|
-
|
|
104
|
+
attributeMap.get(parsed.attribute).push(parsed.value);
|
|
126
105
|
}
|
|
127
106
|
}
|
|
128
|
-
// Check
|
|
129
|
-
for (const values of
|
|
107
|
+
// Check if any attribute has multiple values
|
|
108
|
+
for (const values of attributeMap.values()) {
|
|
130
109
|
if (values.length > 1)
|
|
131
110
|
return true;
|
|
132
111
|
}
|
|
@@ -140,17 +119,15 @@ function createAttributeConflictChecker(parsedMods) {
|
|
|
140
119
|
return (combination) => hasConflictingAttributeSelectors(combination, parsedMods);
|
|
141
120
|
}
|
|
142
121
|
// Build precomputed attribute maps for efficient not selector optimization
|
|
143
|
-
function buildAttributeMaps(currentMods, allMods
|
|
122
|
+
function buildAttributeMaps(currentMods, allMods) {
|
|
144
123
|
const allAttributes = new Map();
|
|
145
124
|
const currentAttributes = new Map();
|
|
146
|
-
const parsedMods =
|
|
147
|
-
// Parse all mods once and cache results
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
parsedMods.set(mod, parseAttributeSelector(mod));
|
|
153
|
-
}
|
|
125
|
+
const parsedMods = new Map();
|
|
126
|
+
// Parse all mods once and cache results
|
|
127
|
+
const allModsSet = new Set([...currentMods, ...allMods]);
|
|
128
|
+
for (const mod of allModsSet) {
|
|
129
|
+
if (!parsedMods.has(mod)) {
|
|
130
|
+
parsedMods.set(mod, parseAttributeSelector(mod));
|
|
154
131
|
}
|
|
155
132
|
}
|
|
156
133
|
// Build map of all possible values for each attribute
|
|
@@ -172,219 +149,23 @@ function buildAttributeMaps(currentMods, allMods, parsedModsCache) {
|
|
|
172
149
|
}
|
|
173
150
|
return { allAttributes, currentAttributes, parsedMods };
|
|
174
151
|
}
|
|
175
|
-
/**
|
|
176
|
-
* Check if a combination of positive and negative selectors creates a contradiction
|
|
177
|
-
* Returns true if the combination is INVALID and should be pruned
|
|
178
|
-
*/
|
|
179
|
-
function hasContradiction(currentMods, notMods, parsedMods) {
|
|
180
|
-
// Build maps of positive selector states
|
|
181
|
-
const positiveAttributes = new Map();
|
|
182
|
-
const positiveBooleans = new Set();
|
|
183
|
-
for (const mod of currentMods) {
|
|
184
|
-
const parsed = parsedMods.get(mod);
|
|
185
|
-
if (parsed) {
|
|
186
|
-
if (parsed.value === 'true') {
|
|
187
|
-
// Boolean attribute (e.g., [data-theme])
|
|
188
|
-
positiveBooleans.add(parsed.attribute);
|
|
189
|
-
}
|
|
190
|
-
else {
|
|
191
|
-
// Value attribute (e.g., [data-theme="danger"])
|
|
192
|
-
if (!positiveAttributes.has(parsed.attribute)) {
|
|
193
|
-
positiveAttributes.set(parsed.attribute, []);
|
|
194
|
-
}
|
|
195
|
-
positiveAttributes.get(parsed.attribute).push(parsed.value);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
// Check negative selectors for contradictions
|
|
200
|
-
for (const mod of notMods) {
|
|
201
|
-
const parsed = parsedMods.get(mod);
|
|
202
|
-
if (parsed) {
|
|
203
|
-
if (parsed.value === 'true') {
|
|
204
|
-
// Negative boolean: !([data-theme])
|
|
205
|
-
// Case 6: Value positive + attribute negative = CONTRADICTION
|
|
206
|
-
if (positiveAttributes.has(parsed.attribute) ||
|
|
207
|
-
positiveBooleans.has(parsed.attribute)) {
|
|
208
|
-
return true; // INVALID: can't have value without attribute
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
else {
|
|
212
|
-
// Negative value: !([data-theme="danger"])
|
|
213
|
-
// No contradiction - this is valid
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
return false;
|
|
218
|
-
}
|
|
219
152
|
function optimizeNotSelectors(currentMods, allMods, precomputedMaps) {
|
|
220
153
|
const maps = precomputedMaps || buildAttributeMaps(currentMods, allMods);
|
|
221
154
|
const notMods = allMods.filter((mod) => !currentMods.includes(mod));
|
|
222
155
|
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
|
-
}
|
|
231
|
-
// Build maps of positive selector states for subsumption optimization
|
|
232
|
-
const positiveAttributes = new Map();
|
|
233
|
-
const positiveBooleans = new Set();
|
|
234
|
-
for (const mod of currentMods) {
|
|
235
|
-
const parsed = maps.parsedMods.get(mod);
|
|
236
|
-
if (parsed) {
|
|
237
|
-
if (parsed.value === 'true') {
|
|
238
|
-
positiveBooleans.add(parsed.attribute);
|
|
239
|
-
}
|
|
240
|
-
else {
|
|
241
|
-
if (!positiveAttributes.has(parsed.attribute)) {
|
|
242
|
-
positiveAttributes.set(parsed.attribute, []);
|
|
243
|
-
}
|
|
244
|
-
positiveAttributes.get(parsed.attribute).push(parsed.value);
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
156
|
for (const mod of notMods) {
|
|
249
157
|
const parsed = maps.parsedMods.get(mod);
|
|
250
158
|
if (parsed && parsed.value !== 'true') {
|
|
251
|
-
// Negative value selector
|
|
252
159
|
// If we already have a value for this attribute, skip this not selector
|
|
253
|
-
// because it's already mutually exclusive
|
|
254
|
-
if (maps.currentAttributes.has(parsed.attribute)) {
|
|
255
|
-
continue;
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
// If we have a positive value for this attribute, skip the negative boolean
|
|
259
|
-
// This avoids producing selectors like [data-attr="x"]:not([data-attr])
|
|
260
|
-
if (parsed && parsed.value === 'true') {
|
|
160
|
+
// because it's already mutually exclusive
|
|
261
161
|
if (maps.currentAttributes.has(parsed.attribute)) {
|
|
262
162
|
continue;
|
|
263
163
|
}
|
|
264
164
|
}
|
|
265
|
-
// Case 4 subsumption: If we have a value positive and boolean positive for same attribute
|
|
266
|
-
// The value implies the boolean, so we can skip the boolean from positive mods
|
|
267
|
-
// (This is handled elsewhere - the value selector is more specific)
|
|
268
|
-
// Case 7 subsumption: If we have a value negative and boolean negative for same attribute
|
|
269
|
-
// The boolean negative implies value negative, so skip the value negative
|
|
270
|
-
if (parsed && parsed.value !== 'true') {
|
|
271
|
-
// If we also have the boolean attribute in negative mods, skip the value negative
|
|
272
|
-
if (negativeBooleanByAttr.has(parsed.attribute)) {
|
|
273
|
-
continue;
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
165
|
optimizedNotMods.push(mod);
|
|
277
166
|
}
|
|
278
167
|
return optimizedNotMods;
|
|
279
168
|
}
|
|
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
|
-
}
|
|
313
|
-
/**
|
|
314
|
-
* Filter mods based on priority order for same-attribute conflicts.
|
|
315
|
-
* If a boolean selector has higher priority than value selectors for the same attribute,
|
|
316
|
-
* remove the value selectors (they would be shadowed by the boolean).
|
|
317
|
-
*
|
|
318
|
-
* Priority is determined by order in the styleStates (after reversal - earlier = higher priority)
|
|
319
|
-
*/
|
|
320
|
-
function filterModsByPriority(allMods, styleStates, lookupStyles, parsedModsCache) {
|
|
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;
|
|
325
|
-
}
|
|
326
|
-
// Build priority map: for each mod, find its earliest appearance in any state list
|
|
327
|
-
const modPriorities = new Map();
|
|
328
|
-
for (const style of lookupStyles) {
|
|
329
|
-
const states = styleStates[style];
|
|
330
|
-
if (!states || states.length === 0)
|
|
331
|
-
continue; // Skip empty states
|
|
332
|
-
// states are already reversed (higher priority = lower index)
|
|
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) {
|
|
338
|
-
const currentPriority = modPriorities.get(mod);
|
|
339
|
-
if (currentPriority === undefined || index < currentPriority) {
|
|
340
|
-
modPriorities.set(mod, index);
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
// Group mods by attribute
|
|
346
|
-
const attributeGroups = new Map();
|
|
347
|
-
for (const mod of allMods) {
|
|
348
|
-
const parsed = parsedModsCache.get(mod);
|
|
349
|
-
if (!parsed)
|
|
350
|
-
continue;
|
|
351
|
-
const priority = modPriorities.get(mod);
|
|
352
|
-
if (priority === undefined)
|
|
353
|
-
continue;
|
|
354
|
-
const isBool = parsed.value === 'true';
|
|
355
|
-
let group = attributeGroups.get(parsed.attribute);
|
|
356
|
-
if (!group) {
|
|
357
|
-
group = [];
|
|
358
|
-
attributeGroups.set(parsed.attribute, group);
|
|
359
|
-
}
|
|
360
|
-
group.push({
|
|
361
|
-
mod,
|
|
362
|
-
isBool,
|
|
363
|
-
priority,
|
|
364
|
-
});
|
|
365
|
-
}
|
|
366
|
-
// Filter: for each attribute, if boolean has higher priority than any value, remove values
|
|
367
|
-
const modsToRemove = new Set();
|
|
368
|
-
for (const [attribute, group] of attributeGroups.entries()) {
|
|
369
|
-
// Only process attributes with more than one mod
|
|
370
|
-
if (group.length <= 1)
|
|
371
|
-
continue;
|
|
372
|
-
const boolMods = group.filter((m) => m.isBool);
|
|
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;
|
|
377
|
-
// Check if any boolean has higher priority (lower index) than all values
|
|
378
|
-
for (const boolMod of boolMods) {
|
|
379
|
-
const hasHigherPriorityThanAllValues = valueMods.every((valueMod) => boolMod.priority < valueMod.priority);
|
|
380
|
-
if (hasHigherPriorityThanAllValues) {
|
|
381
|
-
// This boolean shadows all value mods for this attribute
|
|
382
|
-
valueMods.forEach((valueMod) => modsToRemove.add(valueMod.mod));
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
return allMods.filter((mod) => !modsToRemove.has(mod));
|
|
387
|
-
}
|
|
388
169
|
/**
|
|
389
170
|
* Explode a style handler result into logical rules with proper mapping
|
|
390
171
|
* Phase 1: Handler fan-out ($ selectors, arrays)
|
|
@@ -543,124 +324,6 @@ function convertHandlerResultToCSS(result, selectorSuffix = '') {
|
|
|
543
324
|
const normalizedSingle = $ ? normalizeDollarSelectorSuffix(String($)) : '';
|
|
544
325
|
return `&${finalSelectorSuffix}${normalizedSingle}{\n${renderedStyles}}\n`;
|
|
545
326
|
}
|
|
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
|
-
}
|
|
664
327
|
/**
|
|
665
328
|
* Convert logical rules to final StyleResult format
|
|
666
329
|
*/
|
|
@@ -875,20 +538,53 @@ function generateLogicalRules(styles, responsive = [], parentSuffix = '') {
|
|
|
875
538
|
return v && typeof v === 'object' && !Array.isArray(v);
|
|
876
539
|
});
|
|
877
540
|
if (hasStateMapsAtPoint) {
|
|
878
|
-
|
|
541
|
+
const allMods = new Set();
|
|
879
542
|
const styleStates = {};
|
|
880
543
|
lookupStyles.forEach((style) => {
|
|
881
544
|
const v = pointProps[style];
|
|
882
545
|
if (v && typeof v === 'object' && !Array.isArray(v)) {
|
|
883
|
-
const { states } = styleStateMapToStyleStateDataList(v);
|
|
546
|
+
const { states, mods } = styleStateMapToStyleStateDataList(v);
|
|
884
547
|
styleStates[style] = states;
|
|
548
|
+
mods.forEach((m) => allMods.add(m));
|
|
885
549
|
}
|
|
886
550
|
else {
|
|
887
551
|
styleStates[style] = [{ mods: [], notMods: [], value: v }];
|
|
888
552
|
}
|
|
889
553
|
});
|
|
890
|
-
|
|
891
|
-
|
|
554
|
+
const allModsArray = Array.from(allMods);
|
|
555
|
+
// Precompute attribute maps once for all combinations
|
|
556
|
+
const attributeMaps = buildAttributeMaps([], allModsArray);
|
|
557
|
+
// Generate combinations with conflict-aware pruning
|
|
558
|
+
const conflictChecker = createAttributeConflictChecker(attributeMaps.parsedMods);
|
|
559
|
+
const combinations = getModCombinationsIterative(allModsArray, true, conflictChecker);
|
|
560
|
+
combinations.forEach((modCombination) => {
|
|
561
|
+
const stateProps = {};
|
|
562
|
+
lookupStyles.forEach((style) => {
|
|
563
|
+
const states = styleStates[style];
|
|
564
|
+
const matchingState = states.find((state) => computeState(state.model, (mod) => modCombination.includes(mod)));
|
|
565
|
+
if (matchingState) {
|
|
566
|
+
stateProps[style] = matchingState.value;
|
|
567
|
+
}
|
|
568
|
+
});
|
|
569
|
+
// Use precomputed maps for efficient not selector optimization
|
|
570
|
+
const currentMaps = buildAttributeMaps(modCombination, allModsArray);
|
|
571
|
+
const optimizedNotMods = optimizeNotSelectors(modCombination, allModsArray, currentMaps);
|
|
572
|
+
const modsSelectors = `${modCombination
|
|
573
|
+
.map(getModSelector)
|
|
574
|
+
.join('')}${optimizedNotMods
|
|
575
|
+
.map((mod) => {
|
|
576
|
+
const sel = getModSelector(mod);
|
|
577
|
+
return sel.startsWith(':not(')
|
|
578
|
+
? sel.slice(5, -1)
|
|
579
|
+
: `:not(${sel})`;
|
|
580
|
+
})
|
|
581
|
+
.join('')}`;
|
|
582
|
+
const result = handler(stateProps);
|
|
583
|
+
if (!result)
|
|
584
|
+
return;
|
|
585
|
+
const logicalRules = explodeHandlerResult(result, zones || [], `${modsSelectors}${parentSuffix}`, breakpointIdx, true);
|
|
586
|
+
allLogicalRules.push(...logicalRules);
|
|
587
|
+
});
|
|
892
588
|
}
|
|
893
589
|
else {
|
|
894
590
|
const result = handler(pointProps);
|
|
@@ -906,21 +602,87 @@ function generateLogicalRules(styles, responsive = [], parentSuffix = '') {
|
|
|
906
602
|
return value && typeof value === 'object' && !Array.isArray(value);
|
|
907
603
|
});
|
|
908
604
|
if (hasStateMaps) {
|
|
909
|
-
//
|
|
605
|
+
// Process each style property individually for state resolution
|
|
606
|
+
const allMods = new Set();
|
|
910
607
|
const styleStates = {};
|
|
911
608
|
lookupStyles.forEach((style) => {
|
|
912
609
|
const value = styleMap[style];
|
|
913
610
|
if (value && typeof value === 'object' && !Array.isArray(value)) {
|
|
914
|
-
const { states } = styleStateMapToStyleStateDataList(value);
|
|
611
|
+
const { states, mods } = styleStateMapToStyleStateDataList(value);
|
|
915
612
|
styleStates[style] = states;
|
|
613
|
+
mods.forEach((mod) => allMods.add(mod));
|
|
916
614
|
}
|
|
917
615
|
else {
|
|
918
616
|
// Simple value, create a single state
|
|
919
617
|
styleStates[style] = [{ mods: [], notMods: [], value }];
|
|
920
618
|
}
|
|
921
619
|
});
|
|
922
|
-
//
|
|
923
|
-
|
|
620
|
+
// Generate all possible mod combinations
|
|
621
|
+
const allModsArray = Array.from(allMods);
|
|
622
|
+
// Precompute attribute maps once for all combinations
|
|
623
|
+
const attributeMaps = buildAttributeMaps([], allModsArray);
|
|
624
|
+
// Generate combinations with conflict-aware pruning
|
|
625
|
+
const conflictChecker = createAttributeConflictChecker(attributeMaps.parsedMods);
|
|
626
|
+
const combinations = getModCombinationsIterative(allModsArray, true, conflictChecker);
|
|
627
|
+
combinations.forEach((modCombination) => {
|
|
628
|
+
const stateProps = {};
|
|
629
|
+
lookupStyles.forEach((style) => {
|
|
630
|
+
const states = styleStates[style];
|
|
631
|
+
// Find the matching state for this mod combination
|
|
632
|
+
const matchingState = states.find((state) => {
|
|
633
|
+
return computeState(state.model, (mod) => modCombination.includes(mod));
|
|
634
|
+
});
|
|
635
|
+
if (matchingState) {
|
|
636
|
+
stateProps[style] = matchingState.value;
|
|
637
|
+
}
|
|
638
|
+
});
|
|
639
|
+
// Use precomputed maps for efficient not selector optimization
|
|
640
|
+
const currentMaps = buildAttributeMaps(modCombination, allModsArray);
|
|
641
|
+
const optimizedNotMods = optimizeNotSelectors(modCombination, allModsArray, currentMaps);
|
|
642
|
+
const modsSelectors = `${modCombination
|
|
643
|
+
.map(getModSelector)
|
|
644
|
+
.join('')}${optimizedNotMods
|
|
645
|
+
.map((mod) => {
|
|
646
|
+
const sel = getModSelector(mod);
|
|
647
|
+
return sel.startsWith(':not(')
|
|
648
|
+
? sel.slice(5, -1)
|
|
649
|
+
: `:not(${sel})`;
|
|
650
|
+
})
|
|
651
|
+
.join('')}`;
|
|
652
|
+
// If any state value is responsive (array), fan-out by breakpoint
|
|
653
|
+
const hasResponsiveStateValues = lookupStyles.some((style) => Array.isArray(stateProps[style]));
|
|
654
|
+
if (hasResponsiveStateValues) {
|
|
655
|
+
const propsByPoint = zones.map((_, i) => {
|
|
656
|
+
const pointProps = {};
|
|
657
|
+
lookupStyles.forEach((style) => {
|
|
658
|
+
const v = stateProps[style];
|
|
659
|
+
if (Array.isArray(v)) {
|
|
660
|
+
const arr = cachedNormalizeStyleZones(v, zones.length);
|
|
661
|
+
pointProps[style] = arr?.[i];
|
|
662
|
+
}
|
|
663
|
+
else {
|
|
664
|
+
pointProps[style] = v;
|
|
665
|
+
}
|
|
666
|
+
});
|
|
667
|
+
return pointProps;
|
|
668
|
+
});
|
|
669
|
+
propsByPoint.forEach((props, breakpointIdx) => {
|
|
670
|
+
const res = handler(props);
|
|
671
|
+
if (!res)
|
|
672
|
+
return;
|
|
673
|
+
const logical = explodeHandlerResult(res, zones || [], `${modsSelectors}${parentSuffix}`, breakpointIdx, true);
|
|
674
|
+
allLogicalRules.push(...logical);
|
|
675
|
+
});
|
|
676
|
+
}
|
|
677
|
+
else {
|
|
678
|
+
// Simple non-responsive state values
|
|
679
|
+
const result = handler(stateProps);
|
|
680
|
+
if (!result)
|
|
681
|
+
return;
|
|
682
|
+
const logical = explodeHandlerResult(result, zones || [], `${modsSelectors}${parentSuffix}`);
|
|
683
|
+
allLogicalRules.push(...logical);
|
|
684
|
+
}
|
|
685
|
+
});
|
|
924
686
|
}
|
|
925
687
|
else {
|
|
926
688
|
// Simple case: no state maps, call handler directly
|
|
@@ -942,15 +704,8 @@ export function renderStyles(styles, responsive = [], classNameOrSelector) {
|
|
|
942
704
|
if (!styles) {
|
|
943
705
|
return directSelector ? [] : { rules: [] };
|
|
944
706
|
}
|
|
945
|
-
// Generate logical rules using shared pipeline
|
|
946
|
-
const
|
|
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
|
-
}
|
|
707
|
+
// Generate logical rules using shared pipeline
|
|
708
|
+
const allLogicalRules = generateLogicalRules(styles, responsive);
|
|
954
709
|
const zones = pointsToZones(responsive || []);
|
|
955
710
|
if (directSelector) {
|
|
956
711
|
// Direct selector mode: convert logical rules directly to StyleResult format
|