@cube-dev/ui-kit 0.0.0-canary-fe57a1b → 0.0.0-canary-9e3bcfc
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 +1 -1
- package/es/components/actions/Button/index.js +1 -1
- package/es/components/actions/ButtonGroup/ButtonGroup.js +1 -1
- package/es/components/actions/CommandMenu/CommandMenu.js +1 -1
- package/es/components/actions/CommandMenu/index.js +1 -1
- package/es/components/actions/CommandMenu/styled.js +1 -1
- package/es/components/actions/ItemAction/ItemAction.js +1 -1
- 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 +1 -1
- package/es/components/content/CopyPasteBlock/index.js +1 -1
- package/es/components/content/CopySnippet/CopySnippet.js +1 -1
- package/es/components/content/CopySnippet/index.js +1 -1
- package/es/components/content/Disclosure/Disclosure.js +1 -1
- package/es/components/content/Disclosure/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 +1 -1
- package/es/components/content/Item/index.js +1 -1
- package/es/components/content/ItemBadge/ItemBadge.js +1 -1
- package/es/components/content/ItemBadge/index.js +1 -1
- package/es/components/content/Layout/GridLayout.js +1 -1
- package/es/components/content/Layout/Layout.js +1 -1
- package/es/components/content/Layout/LayoutBlock.js +1 -1
- package/es/components/content/Layout/LayoutCenter.js +1 -1
- package/es/components/content/Layout/LayoutContainer.js +1 -1
- package/es/components/content/Layout/LayoutContent.js +1 -1
- package/es/components/content/Layout/LayoutContext.js +1 -1
- package/es/components/content/Layout/LayoutFlex.js +1 -1
- package/es/components/content/Layout/LayoutFooter.js +1 -1
- package/es/components/content/Layout/LayoutGrid.js +1 -1
- package/es/components/content/Layout/LayoutHeader.js +1 -1
- package/es/components/content/Layout/LayoutPane.js +1 -1
- package/es/components/content/Layout/LayoutPanel.js +1 -1
- package/es/components/content/Layout/LayoutPanelHeader.js +1 -1
- package/es/components/content/Layout/LayoutToolbar.js +1 -1
- package/es/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
- package/es/components/content/Layout/index.js +1 -1
- package/es/components/content/Layout/utils.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/TextItem/TextItem.js +1 -1
- package/es/components/content/TextItem/index.js +1 -1
- package/es/components/content/Title.js +1 -1
- package/es/components/content/highlightText.js +1 -1
- package/es/components/content/use-auto-tooltip.js +1 -1
- package/es/components/fields/Checkbox/Checkbox.js +1 -1
- package/es/components/fields/Checkbox/CheckboxGroup.js +1 -1
- package/es/components/fields/Checkbox/context.js +1 -1
- package/es/components/fields/Checkbox/index.js +1 -1
- package/es/components/fields/ComboBox/ComboBox.js +1 -1
- package/es/components/fields/ComboBox/index.js +1 -1
- package/es/components/fields/DatePicker/DateInput.js +1 -1
- package/es/components/fields/DatePicker/DateInputBase.js +1 -1
- package/es/components/fields/DatePicker/DatePicker.js +1 -1
- package/es/components/fields/DatePicker/DatePickerButton.js +1 -1
- package/es/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/es/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/es/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/es/components/fields/DatePicker/DateRangePicker.js +1 -1
- package/es/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
- package/es/components/fields/DatePicker/TimeInput.js +1 -1
- package/es/components/fields/DatePicker/index.js +1 -1
- package/es/components/fields/DatePicker/intl.js +1 -1
- package/es/components/fields/DatePicker/parseDate.js +1 -1
- package/es/components/fields/DatePicker/props.js +1 -1
- package/es/components/fields/DatePicker/types.js +1 -1
- package/es/components/fields/DatePicker/utils.js +1 -1
- package/es/components/fields/FileInput/FileInput.js +1 -1
- package/es/components/fields/FilterListBox/FilterListBox.js +1 -1
- package/es/components/fields/FilterListBox/index.js +1 -1
- package/es/components/fields/FilterPicker/FilterPicker.js +1 -1
- package/es/components/fields/FilterPicker/index.js +1 -1
- package/es/components/fields/Input/Input.js +1 -1
- package/es/components/fields/Input/index.js +1 -1
- package/es/components/fields/ListBox/ListBox.js +1 -1
- package/es/components/fields/ListBox/index.js +1 -1
- package/es/components/fields/NumberInput/NumberInput.js +1 -1
- package/es/components/fields/NumberInput/StepButton.js +1 -1
- package/es/components/fields/PasswordInput/PasswordInput.js +1 -1
- package/es/components/fields/Picker/Picker.js +1 -1
- package/es/components/fields/Picker/index.js +1 -1
- package/es/components/fields/RadioGroup/Radio.js +1 -1
- package/es/components/fields/RadioGroup/RadioGroup.js +1 -1
- package/es/components/fields/RadioGroup/context.js +1 -1
- package/es/components/fields/RadioGroup/index.js +1 -1
- package/es/components/fields/SearchInput/SearchInput.js +1 -1
- package/es/components/fields/SearchInput/index.js +1 -1
- package/es/components/fields/Select/Select.js +1 -1
- package/es/components/fields/Select/index.js +1 -1
- package/es/components/fields/Slider/Gradation.js +1 -1
- package/es/components/fields/Slider/Header.js +1 -1
- package/es/components/fields/Slider/RangeSlider.js +1 -1
- package/es/components/fields/Slider/Slider.js +1 -1
- package/es/components/fields/Slider/SliderBase.js +1 -1
- package/es/components/fields/Slider/SliderInput.js +1 -1
- package/es/components/fields/Slider/SliderThumb.js +1 -1
- package/es/components/fields/Slider/SliderTrack.js +1 -1
- package/es/components/fields/Slider/elements.js +1 -1
- package/es/components/fields/Slider/index.js +1 -1
- package/es/components/fields/Slider/types.js +1 -1
- package/es/components/fields/Switch/Switch.js +1 -1
- package/es/components/fields/Switch/index.js +1 -1
- package/es/components/fields/TextArea/TextArea.js +1 -1
- package/es/components/fields/TextArea/index.js +1 -1
- package/es/components/fields/TextInput/TextInput.js +1 -1
- package/es/components/fields/TextInput/TextInputBase.js +1 -1
- package/es/components/fields/TextInput/index.js +1 -1
- package/es/components/fields/TextInputMapper/TextInputMapper.js +1 -1
- package/es/components/fields/TextInputMapper/index.js +1 -1
- package/es/components/fields/index.js +1 -1
- package/es/components/form/FieldWrapper/FieldWrapper.js +1 -1
- package/es/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
- package/es/components/form/FieldWrapper/index.js +1 -1
- package/es/components/form/FieldWrapper/types.js +1 -1
- package/es/components/form/Form/Field.js +1 -1
- package/es/components/form/Form/Form.js +1 -1
- package/es/components/form/Form/ResetButton/ResetButton.js +1 -1
- package/es/components/form/Form/ResetButton/index.js +1 -1
- package/es/components/form/Form/SubmitButton/SubmitButton.js +1 -1
- package/es/components/form/Form/SubmitButton/index.js +1 -1
- package/es/components/form/Form/SubmitError.js +1 -1
- package/es/components/form/Form/index.js +1 -1
- package/es/components/form/Form/types.js +1 -1
- package/es/components/form/Form/use-field/index.js +1 -1
- package/es/components/form/Form/use-field/types.js +1 -1
- package/es/components/form/Form/use-field/use-field-props.js +1 -1
- package/es/components/form/Form/use-field/use-field.js +1 -1
- package/es/components/form/Form/use-form.js +1 -1
- package/es/components/form/Form/validation.js +1 -1
- package/es/components/form/Label.js +1 -1
- package/es/components/form/index.js +1 -1
- package/es/components/form/wrapper.js +1 -1
- package/es/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
- package/es/components/helpers/DisplayTransition/index.js +1 -1
- package/es/components/helpers/IconSwitch/IconSwitch.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 +1 -1
- package/es/data/themes.js +1 -1
- package/es/icons/AdjustmentsHorizontalIcon.js +1 -1
- package/es/icons/AdjustmentsIcon.js +1 -1
- package/es/icons/AiIcon.js +1 -1
- package/es/icons/AreaChartIcon.js +1 -1
- package/es/icons/BackwardIcon.js +1 -1
- package/es/icons/BarChartIcon.js +1 -1
- package/es/icons/BellFilledIcon.js +1 -1
- package/es/icons/BellIcon.js +1 -1
- package/es/icons/BooleanIcon.js +1 -1
- package/es/icons/CalendarEditIcon.js +1 -1
- package/es/icons/CalendarIcon.js +1 -1
- package/es/icons/CaretDownIcon.js +1 -1
- package/es/icons/CaretUpIcon.js +1 -1
- package/es/icons/ChartAreaStackedIcon.js +1 -1
- package/es/icons/ChartAreaStackedPercentageIcon.js +1 -1
- package/es/icons/ChartBarGroupedHorizontalIcon.js +1 -1
- package/es/icons/ChartBarGroupedIcon.js +1 -1
- package/es/icons/ChartBarHorizontalIcon.js +1 -1
- package/es/icons/ChartBarLineIcon.js +1 -1
- package/es/icons/ChartBarStackedHorizontalIcon.js +1 -1
- package/es/icons/ChartBarStackedIcon.js +1 -1
- package/es/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
- package/es/icons/ChartBarStackedPercentageIcon.js +1 -1
- package/es/icons/ChartBoxPlot2Icon.js +1 -1
- package/es/icons/ChartBoxPlotIcon.js +1 -1
- package/es/icons/ChartBubbleIcon.js +1 -1
- package/es/icons/ChartDonut2Icon.js +1 -1
- package/es/icons/ChartFunnelIcon.js +1 -1
- package/es/icons/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/ColumnTotalIcon.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/RowTotalsIcon.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/SubtotalsIcon.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/SimpleLayout.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/chunks/cacheKey.js +1 -1
- package/es/tasty/chunks/definitions.js +1 -1
- package/es/tasty/chunks/index.js +1 -1
- package/es/tasty/chunks/renderChunk.js +1 -1
- package/es/tasty/debug.js +1 -1
- package/es/tasty/hooks/index.js +1 -1
- package/es/tasty/hooks/useGlobalStyles.js +1 -1
- package/es/tasty/hooks/useStyles.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 +8 -2
- 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/pipeline/conditions.js +1 -1
- package/es/tasty/pipeline/exclusive.js +1 -1
- package/es/tasty/pipeline/index.js +1 -1
- package/es/tasty/pipeline/materialize.js +345 -301
- package/es/tasty/pipeline/parseStateKey.js +1 -1
- package/es/tasty/pipeline/simplify.js +146 -1
- package/es/tasty/states/index.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 +56 -24
- package/es/tasty/styles/outline.js +1 -1
- package/es/tasty/styles/padding.js +56 -24
- package/es/tasty/styles/place.js +1 -1
- package/es/tasty/styles/predefined.js +1 -1
- package/es/tasty/styles/preset.js +1 -1
- package/es/tasty/styles/radius.js +1 -1
- package/es/tasty/styles/reset.js +1 -1
- package/es/tasty/styles/scrollbar.js +1 -1
- package/es/tasty/styles/shadow.js +1 -1
- package/es/tasty/styles/styledScrollbar.js +1 -1
- package/es/tasty/styles/transition.js +1 -1
- package/es/tasty/styles/types.js +1 -1
- package/es/tasty/styles/width.js +1 -1
- package/es/tasty/tasty.js +1 -1
- package/es/tasty/types.js +1 -1
- package/es/tasty/utils/cache-wrapper.js +1 -1
- package/es/tasty/utils/case-converter.js +1 -1
- package/es/tasty/utils/colors.js +1 -1
- package/es/tasty/utils/dotize.js +1 -1
- package/es/tasty/utils/filterBaseProps.js +1 -1
- package/es/tasty/utils/getDisplayName.js +1 -1
- package/es/tasty/utils/isDevEnv.js +1 -1
- package/es/tasty/utils/mergeStyles.js +1 -1
- package/es/tasty/utils/modAttrs.js +1 -1
- package/es/tasty/utils/processTokens.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/resolveIcon.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/useLocalStorage.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/pipeline/materialize.d.ts +52 -4
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license MIT
|
|
3
3
|
* author: Cube Dev Team
|
|
4
|
-
* @cube-dev/ui-kit v0.0.0-canary-
|
|
4
|
+
* @cube-dev/ui-kit v0.0.0-canary-9e3bcfc
|
|
5
5
|
* Released under the MIT license.
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -50,8 +50,8 @@ function emptyVariant() {
|
|
|
50
50
|
return {
|
|
51
51
|
modifierSelectors: [],
|
|
52
52
|
ownSelectors: [],
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
mediaConditions: [],
|
|
54
|
+
containerConditions: [],
|
|
55
55
|
startingStyle: false,
|
|
56
56
|
};
|
|
57
57
|
}
|
|
@@ -95,11 +95,11 @@ function conditionToCSSInner(node) {
|
|
|
95
95
|
function stateToCSS(state) {
|
|
96
96
|
switch (state.type) {
|
|
97
97
|
case 'media': {
|
|
98
|
-
// Media
|
|
99
|
-
const mediaResults =
|
|
100
|
-
const variants = mediaResults.map((
|
|
98
|
+
// Media conditions can return multiple variants for negated ranges (OR branches)
|
|
99
|
+
const mediaResults = mediaToParsed(state);
|
|
100
|
+
const variants = mediaResults.map((mediaCond) => {
|
|
101
101
|
const v = emptyVariant();
|
|
102
|
-
v.
|
|
102
|
+
v.mediaConditions.push(mediaCond);
|
|
103
103
|
return v;
|
|
104
104
|
});
|
|
105
105
|
return { variants, isImpossible: false };
|
|
@@ -114,7 +114,7 @@ function stateToCSS(state) {
|
|
|
114
114
|
variant.modifierSelectors.push(pseudoToCSS(state));
|
|
115
115
|
break;
|
|
116
116
|
case 'container':
|
|
117
|
-
variant.
|
|
117
|
+
variant.containerConditions.push(containerToParsed(state));
|
|
118
118
|
break;
|
|
119
119
|
case 'root':
|
|
120
120
|
variant.rootPrefix = rootToCSS(state);
|
|
@@ -167,17 +167,21 @@ function pseudoToCSS(state) {
|
|
|
167
167
|
return state.pseudo;
|
|
168
168
|
}
|
|
169
169
|
/**
|
|
170
|
-
* Convert media condition to
|
|
171
|
-
* Returns an array because negated ranges produce OR branches (two separate
|
|
170
|
+
* Convert media condition to parsed structure(s)
|
|
171
|
+
* Returns an array because negated ranges produce OR branches (two separate conditions)
|
|
172
172
|
*/
|
|
173
|
-
function
|
|
173
|
+
function mediaToParsed(state) {
|
|
174
174
|
if (state.subtype === 'type') {
|
|
175
175
|
// @media:print → @media print (or @media not print)
|
|
176
176
|
const mediaType = state.mediaType || 'all';
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
177
|
+
return [
|
|
178
|
+
{
|
|
179
|
+
subtype: 'type',
|
|
180
|
+
negated: state.negated ?? false,
|
|
181
|
+
condition: mediaType,
|
|
182
|
+
mediaType: state.mediaType,
|
|
183
|
+
},
|
|
184
|
+
];
|
|
181
185
|
}
|
|
182
186
|
else if (state.subtype === 'feature') {
|
|
183
187
|
// @media(prefers-contrast: high) → @media (prefers-contrast: high)
|
|
@@ -188,70 +192,27 @@ function mediaToCSS(state) {
|
|
|
188
192
|
else {
|
|
189
193
|
condition = `(${state.feature})`;
|
|
190
194
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
195
|
+
return [
|
|
196
|
+
{
|
|
197
|
+
subtype: 'feature',
|
|
198
|
+
negated: state.negated ?? false,
|
|
199
|
+
condition,
|
|
200
|
+
feature: state.feature,
|
|
201
|
+
featureValue: state.featureValue,
|
|
202
|
+
},
|
|
203
|
+
];
|
|
196
204
|
}
|
|
197
205
|
else {
|
|
198
206
|
// Dimension query - negation is handled by inverting the condition
|
|
199
207
|
// because "not (width < x)" doesn't work reliably in browsers
|
|
200
|
-
|
|
201
|
-
// dimensionToMediaCondition returns array for negated ranges (OR branches)
|
|
202
|
-
return conditions.map((c) => `@media ${c}`);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* Convert container condition to CSS at-rule
|
|
207
|
-
* Container queries support "not (condition)" syntax, so we can use it directly
|
|
208
|
-
*/
|
|
209
|
-
function containerToCSS(state) {
|
|
210
|
-
const name = state.containerName ? `${state.containerName} ` : '';
|
|
211
|
-
let condition;
|
|
212
|
-
if (state.subtype === 'style') {
|
|
213
|
-
// Style query: @container style(--prop: value)
|
|
214
|
-
if (state.propertyValue) {
|
|
215
|
-
condition = `style(--${state.property}: ${state.propertyValue})`;
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
condition = `style(--${state.property})`;
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
else {
|
|
222
|
-
// Dimension query - container queries support "not (condition)"
|
|
223
|
-
condition = dimensionToContainerCondition(state.dimension || 'width', state.lowerBound, state.upperBound);
|
|
224
|
-
}
|
|
225
|
-
if (state.negated) {
|
|
226
|
-
return `@container ${name}not ${condition}`;
|
|
227
|
-
}
|
|
228
|
-
return `@container ${name}${condition}`;
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* Convert dimension bounds to container query condition (single string)
|
|
232
|
-
* Container queries support "not (condition)", so no need to invert manually
|
|
233
|
-
*/
|
|
234
|
-
function dimensionToContainerCondition(dimension, lowerBound, upperBound) {
|
|
235
|
-
if (lowerBound && upperBound) {
|
|
236
|
-
const lowerOp = lowerBound.inclusive ? '<=' : '<';
|
|
237
|
-
const upperOp = upperBound.inclusive ? '<=' : '<';
|
|
238
|
-
return `(${lowerBound.value} ${lowerOp} ${dimension} ${upperOp} ${upperBound.value})`;
|
|
239
|
-
}
|
|
240
|
-
else if (upperBound) {
|
|
241
|
-
const op = upperBound.inclusive ? '<=' : '<';
|
|
242
|
-
return `(${dimension} ${op} ${upperBound.value})`;
|
|
243
|
-
}
|
|
244
|
-
else if (lowerBound) {
|
|
245
|
-
const op = lowerBound.inclusive ? '>=' : '>';
|
|
246
|
-
return `(${dimension} ${op} ${lowerBound.value})`;
|
|
208
|
+
return dimensionToMediaParsed(state.dimension || 'width', state.lowerBound, state.upperBound, state.negated ?? false);
|
|
247
209
|
}
|
|
248
|
-
return '(width)'; // Fallback
|
|
249
210
|
}
|
|
250
211
|
/**
|
|
251
|
-
* Convert dimension bounds to media condition(s)
|
|
212
|
+
* Convert dimension bounds to parsed media condition(s)
|
|
252
213
|
* Returns an array because negated ranges produce OR branches (two separate conditions)
|
|
253
214
|
*/
|
|
254
|
-
function
|
|
215
|
+
function dimensionToMediaParsed(dimension, lowerBound, upperBound, negated) {
|
|
255
216
|
if (negated) {
|
|
256
217
|
// Invert the condition manually since "not (width < x)" doesn't work in browsers
|
|
257
218
|
// Single bounds: flip the operator → returns single condition
|
|
@@ -262,42 +223,143 @@ function dimensionToMediaCondition(dimension, lowerBound, upperBound, negated) {
|
|
|
262
223
|
const lowerOp = lowerBound.inclusive ? '<' : '<=';
|
|
263
224
|
const upperOp = upperBound.inclusive ? '>' : '>=';
|
|
264
225
|
return [
|
|
265
|
-
|
|
266
|
-
|
|
226
|
+
{
|
|
227
|
+
subtype: 'dimension',
|
|
228
|
+
negated: false,
|
|
229
|
+
condition: `(${dimension} ${lowerOp} ${lowerBound.value})`,
|
|
230
|
+
dimension,
|
|
231
|
+
upperBound: {
|
|
232
|
+
value: lowerBound.value,
|
|
233
|
+
valueNumeric: lowerBound.valueNumeric,
|
|
234
|
+
inclusive: !lowerBound.inclusive,
|
|
235
|
+
},
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
subtype: 'dimension',
|
|
239
|
+
negated: false,
|
|
240
|
+
condition: `(${dimension} ${upperOp} ${upperBound.value})`,
|
|
241
|
+
dimension,
|
|
242
|
+
lowerBound: {
|
|
243
|
+
value: upperBound.value,
|
|
244
|
+
valueNumeric: upperBound.valueNumeric,
|
|
245
|
+
inclusive: !upperBound.inclusive,
|
|
246
|
+
},
|
|
247
|
+
},
|
|
267
248
|
];
|
|
268
249
|
}
|
|
269
250
|
else if (upperBound) {
|
|
270
251
|
// (dim < upper) negated is (dim >= upper)
|
|
271
252
|
// (dim <= upper) negated is (dim > upper)
|
|
272
253
|
const op = upperBound.inclusive ? '>' : '>=';
|
|
273
|
-
return [
|
|
254
|
+
return [
|
|
255
|
+
{
|
|
256
|
+
subtype: 'dimension',
|
|
257
|
+
negated: false,
|
|
258
|
+
condition: `(${dimension} ${op} ${upperBound.value})`,
|
|
259
|
+
dimension,
|
|
260
|
+
lowerBound: {
|
|
261
|
+
value: upperBound.value,
|
|
262
|
+
valueNumeric: upperBound.valueNumeric,
|
|
263
|
+
inclusive: !upperBound.inclusive,
|
|
264
|
+
},
|
|
265
|
+
},
|
|
266
|
+
];
|
|
274
267
|
}
|
|
275
268
|
else if (lowerBound) {
|
|
276
269
|
// (dim >= lower) negated is (dim < lower)
|
|
277
270
|
// (dim > lower) negated is (dim <= lower)
|
|
278
271
|
const op = lowerBound.inclusive ? '<' : '<=';
|
|
279
|
-
return [
|
|
272
|
+
return [
|
|
273
|
+
{
|
|
274
|
+
subtype: 'dimension',
|
|
275
|
+
negated: false,
|
|
276
|
+
condition: `(${dimension} ${op} ${lowerBound.value})`,
|
|
277
|
+
dimension,
|
|
278
|
+
upperBound: {
|
|
279
|
+
value: lowerBound.value,
|
|
280
|
+
valueNumeric: lowerBound.valueNumeric,
|
|
281
|
+
inclusive: !lowerBound.inclusive,
|
|
282
|
+
},
|
|
283
|
+
},
|
|
284
|
+
];
|
|
280
285
|
}
|
|
281
|
-
// Fallback - should not happen
|
|
282
|
-
return ['(width < 0px)'];
|
|
283
286
|
}
|
|
284
|
-
//
|
|
287
|
+
// Non-negated conditions
|
|
288
|
+
let condition;
|
|
285
289
|
if (lowerBound && upperBound) {
|
|
286
290
|
const lowerOp = lowerBound.inclusive ? '<=' : '<';
|
|
287
291
|
const upperOp = upperBound.inclusive ? '<=' : '<';
|
|
288
|
-
|
|
289
|
-
`(${lowerBound.value} ${lowerOp} ${dimension} ${upperOp} ${upperBound.value})`,
|
|
290
|
-
];
|
|
292
|
+
condition = `(${lowerBound.value} ${lowerOp} ${dimension} ${upperOp} ${upperBound.value})`;
|
|
291
293
|
}
|
|
292
294
|
else if (upperBound) {
|
|
293
295
|
const op = upperBound.inclusive ? '<=' : '<';
|
|
294
|
-
|
|
296
|
+
condition = `(${dimension} ${op} ${upperBound.value})`;
|
|
295
297
|
}
|
|
296
298
|
else if (lowerBound) {
|
|
297
299
|
const op = lowerBound.inclusive ? '>=' : '>';
|
|
298
|
-
|
|
300
|
+
condition = `(${dimension} ${op} ${lowerBound.value})`;
|
|
299
301
|
}
|
|
300
|
-
|
|
302
|
+
else {
|
|
303
|
+
condition = `(${dimension})`;
|
|
304
|
+
}
|
|
305
|
+
return [
|
|
306
|
+
{
|
|
307
|
+
subtype: 'dimension',
|
|
308
|
+
negated: false,
|
|
309
|
+
condition,
|
|
310
|
+
dimension,
|
|
311
|
+
lowerBound,
|
|
312
|
+
upperBound,
|
|
313
|
+
},
|
|
314
|
+
];
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Convert container condition to parsed structure
|
|
318
|
+
* This enables structured analysis for contradiction detection and condition combining
|
|
319
|
+
*/
|
|
320
|
+
function containerToParsed(state) {
|
|
321
|
+
let condition;
|
|
322
|
+
if (state.subtype === 'style') {
|
|
323
|
+
// Style query: style(--prop: value)
|
|
324
|
+
if (state.propertyValue) {
|
|
325
|
+
condition = `style(--${state.property}: ${state.propertyValue})`;
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
condition = `style(--${state.property})`;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
// Dimension query
|
|
333
|
+
condition = dimensionToContainerCondition(state.dimension || 'width', state.lowerBound, state.upperBound);
|
|
334
|
+
}
|
|
335
|
+
return {
|
|
336
|
+
name: state.containerName,
|
|
337
|
+
condition,
|
|
338
|
+
negated: state.negated ?? false,
|
|
339
|
+
subtype: state.subtype,
|
|
340
|
+
property: state.property,
|
|
341
|
+
propertyValue: state.propertyValue,
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Convert dimension bounds to container query condition (single string)
|
|
346
|
+
* Container queries support "not (condition)", so no need to invert manually
|
|
347
|
+
*/
|
|
348
|
+
function dimensionToContainerCondition(dimension, lowerBound, upperBound) {
|
|
349
|
+
if (lowerBound && upperBound) {
|
|
350
|
+
const lowerOp = lowerBound.inclusive ? '<=' : '<';
|
|
351
|
+
const upperOp = upperBound.inclusive ? '<=' : '<';
|
|
352
|
+
return `(${lowerBound.value} ${lowerOp} ${dimension} ${upperOp} ${upperBound.value})`;
|
|
353
|
+
}
|
|
354
|
+
else if (upperBound) {
|
|
355
|
+
const op = upperBound.inclusive ? '<=' : '<';
|
|
356
|
+
return `(${dimension} ${op} ${upperBound.value})`;
|
|
357
|
+
}
|
|
358
|
+
else if (lowerBound) {
|
|
359
|
+
const op = lowerBound.inclusive ? '>=' : '>';
|
|
360
|
+
return `(${dimension} ${op} ${lowerBound.value})`;
|
|
361
|
+
}
|
|
362
|
+
return '(width)'; // Fallback
|
|
301
363
|
}
|
|
302
364
|
/**
|
|
303
365
|
* Convert root condition to CSS selector prefix
|
|
@@ -345,8 +407,11 @@ function dedupeArray(arr) {
|
|
|
345
407
|
* Deduplicates selectors to avoid `.foo:not([x]):not([x])` repetition
|
|
346
408
|
*/
|
|
347
409
|
function mergeVariants(a, b) {
|
|
348
|
-
|
|
349
|
-
|
|
410
|
+
// Merge media conditions and check for contradictions
|
|
411
|
+
const mergedMedia = dedupeMediaConditions([
|
|
412
|
+
...a.mediaConditions,
|
|
413
|
+
...b.mediaConditions,
|
|
414
|
+
]);
|
|
350
415
|
if (hasMediaContradiction(mergedMedia)) {
|
|
351
416
|
return null; // Impossible variant
|
|
352
417
|
}
|
|
@@ -363,10 +428,10 @@ function mergeVariants(a, b) {
|
|
|
363
428
|
if (hasModifierContradiction(mergedModifiers)) {
|
|
364
429
|
return null; // Impossible variant
|
|
365
430
|
}
|
|
366
|
-
// Merge container
|
|
367
|
-
const mergedContainers =
|
|
368
|
-
...a.
|
|
369
|
-
...b.
|
|
431
|
+
// Merge container conditions and check for contradictions
|
|
432
|
+
const mergedContainers = dedupeContainerConditions([
|
|
433
|
+
...a.containerConditions,
|
|
434
|
+
...b.containerConditions,
|
|
370
435
|
]);
|
|
371
436
|
if (hasContainerStyleContradiction(mergedContainers)) {
|
|
372
437
|
return null; // Impossible variant
|
|
@@ -374,169 +439,101 @@ function mergeVariants(a, b) {
|
|
|
374
439
|
return {
|
|
375
440
|
modifierSelectors: mergedModifiers,
|
|
376
441
|
ownSelectors: dedupeArray([...a.ownSelectors, ...b.ownSelectors]),
|
|
377
|
-
|
|
378
|
-
|
|
442
|
+
mediaConditions: mergedMedia,
|
|
443
|
+
containerConditions: mergedContainers,
|
|
379
444
|
rootPrefix: combinedRoot,
|
|
380
445
|
startingStyle: a.startingStyle || b.startingStyle,
|
|
381
446
|
};
|
|
382
447
|
}
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
const lowerVal = parseValue(rangeMatch[1]);
|
|
395
|
-
const upperVal = parseValue(rangeMatch[5]);
|
|
396
|
-
if (lowerVal && upperVal && lowerVal.unit === upperVal.unit) {
|
|
397
|
-
return {
|
|
398
|
-
dimension: rangeMatch[3].toLowerCase(),
|
|
399
|
-
lowerBound: {
|
|
400
|
-
value: lowerVal.value,
|
|
401
|
-
unit: lowerVal.unit,
|
|
402
|
-
inclusive: rangeMatch[2] === '<=',
|
|
403
|
-
},
|
|
404
|
-
upperBound: {
|
|
405
|
-
value: upperVal.value,
|
|
406
|
-
unit: upperVal.unit,
|
|
407
|
-
inclusive: rangeMatch[4] === '<=',
|
|
408
|
-
},
|
|
409
|
-
};
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
// Try single bound: (width < 600px) or (width >= 900px)
|
|
413
|
-
const singleMatch = condition.match(/\(\s*(width|height)\s*(<=?|>=?)\s*(\d+(?:\.\d+)?(?:px|em|rem|vh|vw|%))\s*\)/i);
|
|
414
|
-
if (singleMatch) {
|
|
415
|
-
const val = parseValue(singleMatch[3]);
|
|
416
|
-
if (val) {
|
|
417
|
-
const op = singleMatch[2];
|
|
418
|
-
if (op === '<' || op === '<=') {
|
|
419
|
-
return {
|
|
420
|
-
dimension: singleMatch[1].toLowerCase(),
|
|
421
|
-
upperBound: {
|
|
422
|
-
value: val.value,
|
|
423
|
-
unit: val.unit,
|
|
424
|
-
inclusive: op === '<=',
|
|
425
|
-
},
|
|
426
|
-
};
|
|
427
|
-
}
|
|
428
|
-
else {
|
|
429
|
-
return {
|
|
430
|
-
dimension: singleMatch[1].toLowerCase(),
|
|
431
|
-
lowerBound: {
|
|
432
|
-
value: val.value,
|
|
433
|
-
unit: val.unit,
|
|
434
|
-
inclusive: op === '>=',
|
|
435
|
-
},
|
|
436
|
-
};
|
|
437
|
-
}
|
|
448
|
+
/**
|
|
449
|
+
* Deduplicate media conditions by their key (subtype + condition + negated)
|
|
450
|
+
*/
|
|
451
|
+
function dedupeMediaConditions(conditions) {
|
|
452
|
+
const seen = new Set();
|
|
453
|
+
const result = [];
|
|
454
|
+
for (const c of conditions) {
|
|
455
|
+
const key = `${c.subtype}|${c.condition}|${c.negated}`;
|
|
456
|
+
if (!seen.has(key)) {
|
|
457
|
+
seen.add(key);
|
|
458
|
+
result.push(c);
|
|
438
459
|
}
|
|
439
460
|
}
|
|
440
|
-
return
|
|
461
|
+
return result;
|
|
441
462
|
}
|
|
442
463
|
/**
|
|
443
|
-
*
|
|
444
|
-
* e.g., "width >= 900px" and "width < 900px" are contradictory
|
|
445
|
-
* Also handles ranges: "(600px <= width < 900px)" and "(width < 600px)" are contradictory
|
|
464
|
+
* Deduplicate container conditions by their key (name + condition + negated)
|
|
446
465
|
*/
|
|
447
|
-
function
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
// Check if units are compatible (only compare if same unit)
|
|
456
|
-
const getUnit = (bound) => bound?.unit;
|
|
457
|
-
const units = [aLower, aUpper, bLower, bUpper]
|
|
458
|
-
.filter(Boolean)
|
|
459
|
-
.map((b) => b.unit);
|
|
460
|
-
if (units.length > 0 && !units.every((u) => u === units[0])) {
|
|
461
|
-
return false; // Different units, can't determine
|
|
462
|
-
}
|
|
463
|
-
// Two conditions contradict if their valid ranges don't overlap
|
|
464
|
-
// A range is [aLowerVal, aUpperVal) or similar
|
|
465
|
-
// Default: -Infinity to +Infinity
|
|
466
|
-
const aLowerVal = aLower?.value ?? -Infinity;
|
|
467
|
-
const aUpperVal = aUpper?.value ?? Infinity;
|
|
468
|
-
const bLowerVal = bLower?.value ?? -Infinity;
|
|
469
|
-
const bUpperVal = bUpper?.value ?? Infinity;
|
|
470
|
-
// For non-inclusive bounds, adjust slightly for comparison
|
|
471
|
-
// But for simplicity, we'll use strict non-overlap check
|
|
472
|
-
// Two ranges [aL, aU) and [bL, bU) don't overlap if:
|
|
473
|
-
// aU <= bL or bU <= aL (considering inclusivity)
|
|
474
|
-
// Check if a's upper bound is at or below b's lower bound
|
|
475
|
-
if (aUpper && bLower && aUpper.value === bLower.value) {
|
|
476
|
-
// Same value - check inclusivity
|
|
477
|
-
// If a.upper is exclusive (<) and b.lower is inclusive (>=), they don't overlap at this point
|
|
478
|
-
// If a.upper is inclusive (<=) and b.lower is exclusive (>), they don't overlap
|
|
479
|
-
if (!aUpper.inclusive && bLower.inclusive) {
|
|
480
|
-
return true; // a < X and X <= b → no overlap at X
|
|
481
|
-
}
|
|
482
|
-
if (aUpper.inclusive && !bLower.inclusive) {
|
|
483
|
-
return true; // a <= X and X > b → no overlap at X
|
|
484
|
-
}
|
|
485
|
-
}
|
|
486
|
-
if (aUpperVal < bLowerVal)
|
|
487
|
-
return true;
|
|
488
|
-
// Check if b's upper bound is at or below a's lower bound
|
|
489
|
-
if (bUpper && aLower && bUpper.value === aLower.value) {
|
|
490
|
-
if (!bUpper.inclusive && aLower.inclusive) {
|
|
491
|
-
return true;
|
|
492
|
-
}
|
|
493
|
-
if (bUpper.inclusive && !aLower.inclusive) {
|
|
494
|
-
return true;
|
|
466
|
+
function dedupeContainerConditions(conditions) {
|
|
467
|
+
const seen = new Set();
|
|
468
|
+
const result = [];
|
|
469
|
+
for (const c of conditions) {
|
|
470
|
+
const key = `${c.name ?? ''}|${c.condition}|${c.negated}`;
|
|
471
|
+
if (!seen.has(key)) {
|
|
472
|
+
seen.add(key);
|
|
473
|
+
result.push(c);
|
|
495
474
|
}
|
|
496
475
|
}
|
|
497
|
-
|
|
498
|
-
return true;
|
|
499
|
-
return false;
|
|
476
|
+
return result;
|
|
500
477
|
}
|
|
501
478
|
/**
|
|
502
|
-
* Check if a set of media
|
|
503
|
-
* e.g.,
|
|
504
|
-
* or
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
const
|
|
518
|
-
|
|
519
|
-
|
|
479
|
+
* Check if a set of media conditions contains contradictions
|
|
480
|
+
* e.g., (prefers-color-scheme: light) AND NOT (prefers-color-scheme: light)
|
|
481
|
+
* or (width >= 900px) AND (width < 600px)
|
|
482
|
+
*
|
|
483
|
+
* Uses parsed media conditions for efficient analysis without regex parsing.
|
|
484
|
+
*/
|
|
485
|
+
function hasMediaContradiction(conditions) {
|
|
486
|
+
// Track conditions by their key (condition string) to detect A and NOT A
|
|
487
|
+
const featureConditions = new Map(); // key -> isPositive
|
|
488
|
+
const typeConditions = new Map(); // mediaType -> isPositive
|
|
489
|
+
// Track dimension conditions for range contradiction detection
|
|
490
|
+
const dimensionsByDim = new Map();
|
|
491
|
+
for (const cond of conditions) {
|
|
492
|
+
if (cond.subtype === 'type') {
|
|
493
|
+
// Type query: check for direct contradiction (print AND NOT print)
|
|
494
|
+
const key = cond.mediaType || 'all';
|
|
495
|
+
const existing = typeConditions.get(key);
|
|
496
|
+
if (existing !== undefined && existing !== !cond.negated) {
|
|
497
|
+
return true; // Contradiction: positive AND negated
|
|
520
498
|
}
|
|
521
|
-
|
|
522
|
-
}
|
|
523
|
-
else if (
|
|
524
|
-
//
|
|
525
|
-
const key =
|
|
526
|
-
const existing =
|
|
527
|
-
if (existing && !
|
|
528
|
-
return true; //
|
|
499
|
+
typeConditions.set(key, !cond.negated);
|
|
500
|
+
}
|
|
501
|
+
else if (cond.subtype === 'feature') {
|
|
502
|
+
// Feature query: check for direct contradiction
|
|
503
|
+
const key = cond.condition;
|
|
504
|
+
const existing = featureConditions.get(key);
|
|
505
|
+
if (existing !== undefined && existing !== !cond.negated) {
|
|
506
|
+
return true; // Contradiction: positive AND negated
|
|
529
507
|
}
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
508
|
+
featureConditions.set(key, !cond.negated);
|
|
509
|
+
}
|
|
510
|
+
else if (cond.subtype === 'dimension') {
|
|
511
|
+
// Dimension query: check for range contradictions
|
|
512
|
+
// Note: negated conditions are already inverted in dimensionToMediaParsed
|
|
513
|
+
const dim = cond.dimension || 'width';
|
|
514
|
+
let bounds = dimensionsByDim.get(dim);
|
|
515
|
+
if (!bounds) {
|
|
516
|
+
bounds = { lowerBound: null, upperBound: null };
|
|
517
|
+
dimensionsByDim.set(dim, bounds);
|
|
518
|
+
}
|
|
519
|
+
// Track the effective bounds
|
|
520
|
+
if (cond.lowerBound?.valueNumeric != null) {
|
|
521
|
+
const value = cond.lowerBound.valueNumeric;
|
|
522
|
+
if (bounds.lowerBound === null || value > bounds.lowerBound) {
|
|
523
|
+
bounds.lowerBound = value;
|
|
538
524
|
}
|
|
539
|
-
|
|
525
|
+
}
|
|
526
|
+
if (cond.upperBound?.valueNumeric != null) {
|
|
527
|
+
const value = cond.upperBound.valueNumeric;
|
|
528
|
+
if (bounds.upperBound === null || value < bounds.upperBound) {
|
|
529
|
+
bounds.upperBound = value;
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
// Check for impossible range
|
|
533
|
+
if (bounds.lowerBound !== null &&
|
|
534
|
+
bounds.upperBound !== null &&
|
|
535
|
+
bounds.lowerBound >= bounds.upperBound) {
|
|
536
|
+
return true;
|
|
540
537
|
}
|
|
541
538
|
}
|
|
542
539
|
}
|
|
@@ -585,47 +582,47 @@ function hasSelectorStringContradiction(selector) {
|
|
|
585
582
|
return false;
|
|
586
583
|
}
|
|
587
584
|
/**
|
|
588
|
-
* Check if container
|
|
589
|
-
* e.g.,
|
|
585
|
+
* Check if container conditions contain contradictions in style queries
|
|
586
|
+
* e.g., style(--variant: danger) and style(--variant: success) together
|
|
590
587
|
* Same property with different values = always false
|
|
588
|
+
*
|
|
589
|
+
* Uses parsed container conditions for efficient analysis without regex parsing.
|
|
591
590
|
*/
|
|
592
|
-
function hasContainerStyleContradiction(
|
|
591
|
+
function hasContainerStyleContradiction(conditions) {
|
|
593
592
|
// Track style queries by property name
|
|
594
|
-
// key: property name, value: { hasExistence: boolean, values: Set<string
|
|
593
|
+
// key: property name, value: { hasExistence: boolean, values: Set<string>, hasNegatedExistence: boolean }
|
|
595
594
|
const styleQueries = new Map();
|
|
596
|
-
for (const
|
|
597
|
-
//
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
595
|
+
for (const cond of conditions) {
|
|
596
|
+
// Only analyze style queries
|
|
597
|
+
if (cond.subtype !== 'style' || !cond.property) {
|
|
598
|
+
continue;
|
|
599
|
+
}
|
|
600
|
+
const property = cond.property;
|
|
601
|
+
const value = cond.propertyValue;
|
|
602
|
+
if (!styleQueries.has(property)) {
|
|
603
|
+
styleQueries.set(property, {
|
|
604
|
+
hasExistence: false,
|
|
605
|
+
values: new Set(),
|
|
606
|
+
hasNegatedExistence: false,
|
|
607
|
+
});
|
|
608
|
+
}
|
|
609
|
+
const entry = styleQueries.get(property);
|
|
610
|
+
if (cond.negated) {
|
|
611
|
+
if (value === undefined) {
|
|
612
|
+
// not style(--prop) - negated existence check
|
|
613
|
+
entry.hasNegatedExistence = true;
|
|
610
614
|
}
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
// They just mean "not this value"
|
|
615
|
+
// Negated value checks don't contradict positive value checks directly
|
|
616
|
+
// They just mean "not this value"
|
|
617
|
+
}
|
|
618
|
+
else {
|
|
619
|
+
if (value === undefined) {
|
|
620
|
+
// style(--prop) - existence check
|
|
621
|
+
entry.hasExistence = true;
|
|
619
622
|
}
|
|
620
623
|
else {
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
entry.hasExistence = true;
|
|
624
|
-
}
|
|
625
|
-
else {
|
|
626
|
-
// style(--prop: value) - value check
|
|
627
|
-
entry.values.add(value);
|
|
628
|
-
}
|
|
624
|
+
// style(--prop: value) - value check
|
|
625
|
+
entry.values.add(value);
|
|
629
626
|
}
|
|
630
627
|
}
|
|
631
628
|
}
|
|
@@ -663,11 +660,19 @@ function combineRootPrefixes(a, b) {
|
|
|
663
660
|
* Get a unique key for a variant (for deduplication)
|
|
664
661
|
*/
|
|
665
662
|
function getVariantKey(v) {
|
|
663
|
+
const containerKey = v.containerConditions
|
|
664
|
+
.map((c) => `${c.name ?? ''}:${c.negated ? '!' : ''}${c.condition}`)
|
|
665
|
+
.sort()
|
|
666
|
+
.join('|');
|
|
667
|
+
const mediaKey = v.mediaConditions
|
|
668
|
+
.map((c) => `${c.subtype}:${c.negated ? '!' : ''}${c.condition}`)
|
|
669
|
+
.sort()
|
|
670
|
+
.join('|');
|
|
666
671
|
return [
|
|
667
672
|
v.modifierSelectors.slice().sort().join('|'),
|
|
668
673
|
v.ownSelectors.slice().sort().join('|'),
|
|
669
|
-
|
|
670
|
-
|
|
674
|
+
mediaKey,
|
|
675
|
+
containerKey,
|
|
671
676
|
v.rootPrefix || '',
|
|
672
677
|
v.startingStyle ? '1' : '0',
|
|
673
678
|
].join('###');
|
|
@@ -689,11 +694,11 @@ function isVariantSuperset(a, b) {
|
|
|
689
694
|
return false;
|
|
690
695
|
if (a.startingStyle !== b.startingStyle)
|
|
691
696
|
return false;
|
|
692
|
-
// Check if a.
|
|
693
|
-
if (!
|
|
697
|
+
// Check if a.mediaConditions is superset of b.mediaConditions
|
|
698
|
+
if (!isMediaConditionsSuperset(a.mediaConditions, b.mediaConditions))
|
|
694
699
|
return false;
|
|
695
|
-
// Check if a.
|
|
696
|
-
if (!
|
|
700
|
+
// Check if a.containerConditions is superset of b.containerConditions
|
|
701
|
+
if (!isContainerConditionsSuperset(a.containerConditions, b.containerConditions))
|
|
697
702
|
return false;
|
|
698
703
|
// Check if a.modifierSelectors is superset of b.modifierSelectors
|
|
699
704
|
if (!isArraySuperset(a.modifierSelectors, b.modifierSelectors))
|
|
@@ -703,16 +708,40 @@ function isVariantSuperset(a, b) {
|
|
|
703
708
|
return false;
|
|
704
709
|
// A is a superset if it has all of B's items (possibly more)
|
|
705
710
|
// and at least one category has strictly more items
|
|
706
|
-
const aTotal = a.
|
|
707
|
-
a.
|
|
711
|
+
const aTotal = a.mediaConditions.length +
|
|
712
|
+
a.containerConditions.length +
|
|
708
713
|
a.modifierSelectors.length +
|
|
709
714
|
a.ownSelectors.length;
|
|
710
|
-
const bTotal = b.
|
|
711
|
-
b.
|
|
715
|
+
const bTotal = b.mediaConditions.length +
|
|
716
|
+
b.containerConditions.length +
|
|
712
717
|
b.modifierSelectors.length +
|
|
713
718
|
b.ownSelectors.length;
|
|
714
719
|
return aTotal > bTotal;
|
|
715
720
|
}
|
|
721
|
+
/**
|
|
722
|
+
* Check if media conditions A is a superset of B
|
|
723
|
+
*/
|
|
724
|
+
function isMediaConditionsSuperset(a, b) {
|
|
725
|
+
const aKeys = new Set(a.map((c) => `${c.subtype}|${c.condition}|${c.negated}`));
|
|
726
|
+
for (const c of b) {
|
|
727
|
+
const key = `${c.subtype}|${c.condition}|${c.negated}`;
|
|
728
|
+
if (!aKeys.has(key))
|
|
729
|
+
return false;
|
|
730
|
+
}
|
|
731
|
+
return true;
|
|
732
|
+
}
|
|
733
|
+
/**
|
|
734
|
+
* Check if container conditions A is a superset of B
|
|
735
|
+
*/
|
|
736
|
+
function isContainerConditionsSuperset(a, b) {
|
|
737
|
+
const aKeys = new Set(a.map((c) => `${c.name ?? ''}|${c.condition}|${c.negated}`));
|
|
738
|
+
for (const c of b) {
|
|
739
|
+
const key = `${c.name ?? ''}|${c.condition}|${c.negated}`;
|
|
740
|
+
if (!aKeys.has(key))
|
|
741
|
+
return false;
|
|
742
|
+
}
|
|
743
|
+
return true;
|
|
744
|
+
}
|
|
716
745
|
/**
|
|
717
746
|
* Check if array A contains all elements of array B (superset)
|
|
718
747
|
*/
|
|
@@ -747,12 +776,12 @@ function dedupeVariants(variants) {
|
|
|
747
776
|
result.sort((a, b) => {
|
|
748
777
|
const aCount = a.modifierSelectors.length +
|
|
749
778
|
a.ownSelectors.length +
|
|
750
|
-
a.
|
|
751
|
-
a.
|
|
779
|
+
a.mediaConditions.length +
|
|
780
|
+
a.containerConditions.length;
|
|
752
781
|
const bCount = b.modifierSelectors.length +
|
|
753
782
|
b.ownSelectors.length +
|
|
754
|
-
b.
|
|
755
|
-
b.
|
|
783
|
+
b.mediaConditions.length +
|
|
784
|
+
b.containerConditions.length;
|
|
756
785
|
return aCount - bCount;
|
|
757
786
|
});
|
|
758
787
|
// Remove variants that are supersets of earlier (less restrictive) variants
|
|
@@ -880,23 +909,38 @@ export function buildCSSSelectorFromVariant(className, variant, selectorSuffix =
|
|
|
880
909
|
*/
|
|
881
910
|
export function buildAtRulesFromVariant(variant) {
|
|
882
911
|
const atRules = [];
|
|
883
|
-
// Add media rules
|
|
884
|
-
if (variant.
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
912
|
+
// Add media rules - combine all conditions with "and"
|
|
913
|
+
if (variant.mediaConditions.length > 0) {
|
|
914
|
+
const conditionParts = variant.mediaConditions.map((c) => {
|
|
915
|
+
if (c.subtype === 'type') {
|
|
916
|
+
// Media type: print, screen, etc.
|
|
917
|
+
return c.negated ? `not ${c.condition}` : c.condition;
|
|
918
|
+
}
|
|
919
|
+
else {
|
|
920
|
+
// Feature or dimension: (condition) or not (condition)
|
|
921
|
+
return c.negated ? `not ${c.condition}` : c.condition;
|
|
922
|
+
}
|
|
923
|
+
});
|
|
924
|
+
atRules.push(`@media ${conditionParts.join(' and ')}`);
|
|
925
|
+
}
|
|
926
|
+
// Add container rules - group by container name and combine with "and"
|
|
927
|
+
if (variant.containerConditions.length > 0) {
|
|
928
|
+
// Group conditions by container name (undefined = unnamed/nearest)
|
|
929
|
+
const byName = new Map();
|
|
930
|
+
for (const cond of variant.containerConditions) {
|
|
931
|
+
const group = byName.get(cond.name) || [];
|
|
932
|
+
group.push(cond);
|
|
933
|
+
byName.set(cond.name, group);
|
|
934
|
+
}
|
|
935
|
+
// Build one @container rule per container name
|
|
936
|
+
for (const [name, conditions] of byName) {
|
|
937
|
+
// CSS Container Query syntax requires parentheses around negated conditions:
|
|
938
|
+
// @container (not style(--x)) and style(--y) - NOT @container not style(--x) and style(--y)
|
|
939
|
+
const conditionParts = conditions.map((c) => c.negated ? `(not ${c.condition})` : c.condition);
|
|
940
|
+
const namePrefix = name ? `${name} ` : '';
|
|
941
|
+
atRules.push(`@container ${namePrefix}${conditionParts.join(' and ')}`);
|
|
942
|
+
}
|
|
943
|
+
}
|
|
900
944
|
// Add starting-style
|
|
901
945
|
if (variant.startingStyle) {
|
|
902
946
|
atRules.push('@starting-style');
|