@cube-dev/ui-kit 0.0.0-canary-76be278 → 0.0.0-canary-7e4ec9d
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 +67 -61
- 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 +52 -12
- package/es/components/actions/Action/Action.js +1 -1
- package/es/components/actions/Button/Button.js +2 -2
- package/es/components/actions/Button/index.js +1 -1
- package/es/components/actions/ButtonGroup/ButtonGroup.js +1 -1
- package/es/components/actions/CommandMenu/CommandMenu.js +1 -1
- package/es/components/actions/CommandMenu/index.js +1 -1
- package/es/components/actions/CommandMenu/styled.js +1 -1
- package/es/components/actions/ItemAction/ItemAction.js +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 +2 -2
- package/es/components/content/CopyPasteBlock/index.js +1 -1
- package/es/components/content/CopySnippet/CopySnippet.js +1 -1
- package/es/components/content/CopySnippet/index.js +1 -1
- package/es/components/content/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 +2 -2
- 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 -2
- 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 -2
- 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 -2
- package/es/components/content/Layout/LayoutPanel.js +1 -2
- 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 +2 -2
- 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 -2
- package/es/provider.js +8 -2
- 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 +14 -18
- package/es/stories/lists/baseProps.js +1 -1
- package/es/tasty/debug.js +7 -193
- package/es/tasty/index.js +4 -18
- package/es/tasty/injector/index.js +87 -31
- package/es/tasty/injector/injector.js +279 -30
- package/es/tasty/injector/sheet-manager.js +2 -126
- package/es/tasty/injector/types.js +1 -1
- package/es/tasty/parser/classify.js +3 -5
- package/es/tasty/parser/const.js +1 -1
- package/es/tasty/parser/lru.js +1 -1
- package/es/tasty/parser/parser.js +1 -14
- package/es/tasty/parser/tokenizer.js +1 -1
- package/es/tasty/parser/types.js +1 -2
- package/es/tasty/providers/BreakpointsProvider.js +16 -0
- 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 +20 -10
- 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 +55 -75
- package/es/tasty/styles/outline.js +1 -1
- package/es/tasty/styles/padding.js +55 -75
- package/es/tasty/styles/place.js +1 -1
- package/es/tasty/styles/predefined.js +2 -3
- 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 +117 -76
- 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 +38 -0
- package/es/tasty/utils/isDevEnv.js +1 -1
- package/es/tasty/utils/mergeStyles.js +2 -2
- package/es/tasty/utils/modAttrs.js +1 -1
- package/es/tasty/utils/processTokens.js +1 -1
- package/es/tasty/utils/renderStyles.js +1050 -0
- package/es/tasty/utils/responsive.js +60 -0
- package/es/tasty/utils/string.js +1 -1
- package/es/tasty/utils/styles.js +19 -252
- package/es/tasty/utils/warnings.js +1 -1
- package/es/tokens.js +309 -0
- 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 -3
- package/types/components/GlobalStyles.d.ts +1 -2
- package/types/components/HiddenInput.d.ts +826 -827
- package/types/components/Root.d.ts +0 -1
- package/types/components/actions/Button/Button.d.ts +1645 -1647
- package/types/components/actions/CommandMenu/styled.d.ts +4130 -4135
- package/types/components/actions/Menu/styled.d.ts +4379 -4384
- package/types/components/actions/use-action.d.ts +1 -1
- package/types/components/content/List/SectionHeading.d.ts +83 -83
- package/types/components/content/Text.d.ts +311 -311
- package/types/components/fields/DatePicker/DatePickerElement.d.ts +83 -83
- package/types/components/fields/Select/Select.d.ts +826 -827
- package/types/components/fields/Slider/elements.d.ts +4956 -4962
- package/types/index.d.ts +0 -1
- package/types/provider.d.ts +2 -1
- package/types/stories/components/StyledButton.d.ts +1 -1
- package/types/tasty/debug.d.ts +0 -35
- package/types/tasty/index.d.ts +4 -14
- package/types/tasty/injector/index.d.ts +19 -30
- package/types/tasty/injector/injector.d.ts +13 -13
- package/types/tasty/injector/sheet-manager.d.ts +1 -25
- package/types/tasty/injector/types.d.ts +1 -20
- package/types/tasty/parser/parser.d.ts +0 -4
- package/types/tasty/parser/types.d.ts +0 -1
- package/types/tasty/providers/BreakpointsProvider.d.ts +8 -0
- package/types/tasty/styles/fill.d.ts +1 -11
- package/types/tasty/styles/margin.d.ts +1 -3
- package/types/tasty/styles/padding.d.ts +1 -3
- package/types/tasty/styles/types.d.ts +3 -13
- package/types/tasty/tasty.d.ts +840 -891
- package/types/tasty/utils/getModCombinations.d.ts +9 -0
- package/types/tasty/utils/renderStyles.d.ts +41 -0
- package/types/tasty/utils/responsive.d.ts +8 -0
- package/types/tasty/utils/styles.d.ts +6 -50
- package/types/tokens.d.ts +221 -0
- package/es/tasty/chunks/cacheKey.js +0 -98
- package/es/tasty/chunks/definitions.js +0 -280
- package/es/tasty/chunks/index.js +0 -12
- package/es/tasty/chunks/renderChunk.js +0 -97
- package/es/tasty/config.js +0 -244
- package/es/tasty/hooks/index.js +0 -12
- package/es/tasty/hooks/useGlobalStyles.js +0 -67
- package/es/tasty/hooks/useRawCSS.js +0 -40
- package/es/tasty/hooks/useStyles.js +0 -146
- package/es/tasty/pipeline/conditions.js +0 -469
- package/es/tasty/pipeline/exclusive.js +0 -193
- package/es/tasty/pipeline/index.js +0 -515
- package/es/tasty/pipeline/materialize.js +0 -1001
- package/es/tasty/pipeline/parseStateKey.js +0 -565
- package/es/tasty/pipeline/simplify.js +0 -786
- package/es/tasty/plugins/index.js +0 -26
- package/es/tasty/plugins/okhsl-plugin.js +0 -400
- package/es/tasty/plugins/types.js +0 -10
- package/es/tasty/states/index.js +0 -515
- package/es/tasty/static/index.js +0 -47
- package/es/tasty/static/tastyStatic.js +0 -55
- package/es/tasty/static/types.js +0 -34
- package/es/tasty/utils/typography.js +0 -67
- package/es/tasty/zero/babel.js +0 -401
- package/es/tasty/zero/css-writer.js +0 -94
- package/es/tasty/zero/extractor.js +0 -75
- package/es/tasty/zero/index.js +0 -28
- package/es/tasty/zero/next.js +0 -102
- package/es/tokens/base.js +0 -64
- package/es/tokens/colors.js +0 -68
- package/es/tokens/index.js +0 -63
- package/es/tokens/layout.js +0 -26
- package/es/tokens/shadows.js +0 -27
- package/es/tokens/sizes.js +0 -44
- package/es/tokens/spacing.js +0 -22
- package/es/tokens/typography.js +0 -237
- package/types/tasty/chunks/cacheKey.d.ts +0 -26
- package/types/tasty/chunks/definitions.d.ts +0 -75
- package/types/tasty/chunks/index.d.ts +0 -4
- package/types/tasty/chunks/renderChunk.d.ts +0 -25
- package/types/tasty/config.d.ts +0 -145
- package/types/tasty/hooks/index.d.ts +0 -4
- package/types/tasty/hooks/useGlobalStyles.d.ts +0 -22
- package/types/tasty/hooks/useRawCSS.d.ts +0 -50
- package/types/tasty/hooks/useStyles.d.ts +0 -38
- package/types/tasty/pipeline/conditions.d.ts +0 -248
- package/types/tasty/pipeline/exclusive.d.ts +0 -78
- package/types/tasty/pipeline/index.d.ts +0 -67
- package/types/tasty/pipeline/materialize.d.ts +0 -115
- package/types/tasty/pipeline/parseStateKey.d.ts +0 -20
- package/types/tasty/pipeline/simplify.d.ts +0 -28
- package/types/tasty/plugins/index.d.ts +0 -17
- package/types/tasty/plugins/okhsl-plugin.d.ts +0 -45
- package/types/tasty/plugins/types.d.ts +0 -34
- package/types/tasty/states/index.d.ts +0 -101
- package/types/tasty/static/index.d.ts +0 -39
- package/types/tasty/static/tastyStatic.d.ts +0 -41
- package/types/tasty/static/types.d.ts +0 -44
- package/types/tasty/utils/typography.d.ts +0 -32
- package/types/tasty/zero/babel.d.ts +0 -56
- package/types/tasty/zero/css-writer.d.ts +0 -41
- package/types/tasty/zero/extractor.d.ts +0 -19
- package/types/tasty/zero/index.d.ts +0 -18
- package/types/tasty/zero/next.d.ts +0 -57
- package/types/tokens/base.d.ts +0 -8
- package/types/tokens/colors.d.ts +0 -6
- package/types/tokens/index.d.ts +0 -41
- package/types/tokens/layout.d.ts +0 -7
- package/types/tokens/shadows.d.ts +0 -12
- package/types/tokens/sizes.d.ts +0 -27
- package/types/tokens/spacing.d.ts +0 -8
- package/types/tokens/typography.d.ts +0 -30
|
@@ -1,786 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license MIT
|
|
3
|
-
* author: Cube Dev Team
|
|
4
|
-
* @cube-dev/ui-kit v0.0.0-canary-76be278
|
|
5
|
-
* Released under the MIT license.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Condition Simplification Engine
|
|
10
|
-
*
|
|
11
|
-
* Simplifies condition trees by applying boolean algebra rules,
|
|
12
|
-
* detecting contradictions, merging ranges, and deduplicating terms.
|
|
13
|
-
*
|
|
14
|
-
* This is critical for:
|
|
15
|
-
* 1. Detecting invalid combinations (A & !A → FALSE)
|
|
16
|
-
* 2. Reducing CSS output size
|
|
17
|
-
* 3. Producing cleaner selectors
|
|
18
|
-
*/
|
|
19
|
-
import { Lru } from '../parser/lru';
|
|
20
|
-
import { falseCondition, getConditionUniqueId, trueCondition, } from './conditions';
|
|
21
|
-
// ============================================================================
|
|
22
|
-
// Caching
|
|
23
|
-
// ============================================================================
|
|
24
|
-
const simplifyCache = new Lru(5000);
|
|
25
|
-
// ============================================================================
|
|
26
|
-
// Main Simplify Function
|
|
27
|
-
// ============================================================================
|
|
28
|
-
/**
|
|
29
|
-
* Simplify a condition tree aggressively.
|
|
30
|
-
*
|
|
31
|
-
* This applies all possible simplification rules:
|
|
32
|
-
* - Boolean algebra (identity, annihilator, idempotent, absorption)
|
|
33
|
-
* - Contradiction detection (A & !A → FALSE)
|
|
34
|
-
* - Tautology detection (A | !A → TRUE)
|
|
35
|
-
* - Range intersection for numeric queries
|
|
36
|
-
* - Attribute value conflict detection
|
|
37
|
-
* - Deduplication and sorting
|
|
38
|
-
*/
|
|
39
|
-
export function simplifyCondition(node) {
|
|
40
|
-
// Check cache
|
|
41
|
-
const key = getConditionUniqueId(node);
|
|
42
|
-
const cached = simplifyCache.get(key);
|
|
43
|
-
if (cached) {
|
|
44
|
-
return cached;
|
|
45
|
-
}
|
|
46
|
-
const result = simplifyInner(node);
|
|
47
|
-
// Cache result
|
|
48
|
-
simplifyCache.set(key, result);
|
|
49
|
-
return result;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Clear the simplify cache (for testing)
|
|
53
|
-
*/
|
|
54
|
-
export function clearSimplifyCache() {
|
|
55
|
-
simplifyCache.clear();
|
|
56
|
-
}
|
|
57
|
-
// ============================================================================
|
|
58
|
-
// Inner Simplification
|
|
59
|
-
// ============================================================================
|
|
60
|
-
function simplifyInner(node) {
|
|
61
|
-
// Base cases
|
|
62
|
-
if (node.kind === 'true' || node.kind === 'false') {
|
|
63
|
-
return node;
|
|
64
|
-
}
|
|
65
|
-
// State conditions - return as-is (they're already leaf nodes)
|
|
66
|
-
if (node.kind === 'state') {
|
|
67
|
-
return node;
|
|
68
|
-
}
|
|
69
|
-
// Compound conditions - recursively simplify
|
|
70
|
-
if (node.kind === 'compound') {
|
|
71
|
-
// First, recursively simplify all children
|
|
72
|
-
const simplifiedChildren = node.children.map((c) => simplifyInner(c));
|
|
73
|
-
// Then apply compound-specific simplifications
|
|
74
|
-
if (node.operator === 'AND') {
|
|
75
|
-
return simplifyAnd(simplifiedChildren);
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
return simplifyOr(simplifiedChildren);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
return node;
|
|
82
|
-
}
|
|
83
|
-
// ============================================================================
|
|
84
|
-
// AND Simplification
|
|
85
|
-
// ============================================================================
|
|
86
|
-
function simplifyAnd(children) {
|
|
87
|
-
let terms = [];
|
|
88
|
-
// Flatten nested ANDs and handle TRUE/FALSE
|
|
89
|
-
for (const child of children) {
|
|
90
|
-
if (child.kind === 'false') {
|
|
91
|
-
// AND with FALSE → FALSE
|
|
92
|
-
return falseCondition();
|
|
93
|
-
}
|
|
94
|
-
if (child.kind === 'true') {
|
|
95
|
-
// AND with TRUE → skip (identity)
|
|
96
|
-
continue;
|
|
97
|
-
}
|
|
98
|
-
if (child.kind === 'compound' && child.operator === 'AND') {
|
|
99
|
-
// Flatten nested AND
|
|
100
|
-
terms.push(...child.children);
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
terms.push(child);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
// Empty → TRUE
|
|
107
|
-
if (terms.length === 0) {
|
|
108
|
-
return trueCondition();
|
|
109
|
-
}
|
|
110
|
-
// Single term → return it
|
|
111
|
-
if (terms.length === 1) {
|
|
112
|
-
return terms[0];
|
|
113
|
-
}
|
|
114
|
-
// Check for contradictions
|
|
115
|
-
if (hasContradiction(terms)) {
|
|
116
|
-
return falseCondition();
|
|
117
|
-
}
|
|
118
|
-
// Check for range contradictions in media/container queries
|
|
119
|
-
if (hasRangeContradiction(terms)) {
|
|
120
|
-
return falseCondition();
|
|
121
|
-
}
|
|
122
|
-
// Check for attribute value conflicts
|
|
123
|
-
if (hasAttributeConflict(terms)) {
|
|
124
|
-
return falseCondition();
|
|
125
|
-
}
|
|
126
|
-
// Check for container style query conflicts
|
|
127
|
-
if (hasContainerStyleConflict(terms)) {
|
|
128
|
-
return falseCondition();
|
|
129
|
-
}
|
|
130
|
-
// Remove redundant negations implied by positive terms
|
|
131
|
-
// e.g., style(--variant: danger) implies NOT style(--variant: success)
|
|
132
|
-
// and style(--variant: danger) implies style(--variant) (existence)
|
|
133
|
-
terms = removeImpliedNegations(terms);
|
|
134
|
-
// Deduplicate (by uniqueId)
|
|
135
|
-
terms = deduplicateTerms(terms);
|
|
136
|
-
// Try to merge numeric ranges
|
|
137
|
-
terms = mergeRanges(terms);
|
|
138
|
-
// Sort for canonical form
|
|
139
|
-
terms = sortTerms(terms);
|
|
140
|
-
// Apply absorption: A & (A | B) → A
|
|
141
|
-
terms = applyAbsorptionAnd(terms);
|
|
142
|
-
if (terms.length === 0) {
|
|
143
|
-
return trueCondition();
|
|
144
|
-
}
|
|
145
|
-
if (terms.length === 1) {
|
|
146
|
-
return terms[0];
|
|
147
|
-
}
|
|
148
|
-
return {
|
|
149
|
-
kind: 'compound',
|
|
150
|
-
operator: 'AND',
|
|
151
|
-
children: terms,
|
|
152
|
-
};
|
|
153
|
-
}
|
|
154
|
-
// ============================================================================
|
|
155
|
-
// OR Simplification
|
|
156
|
-
// ============================================================================
|
|
157
|
-
function simplifyOr(children) {
|
|
158
|
-
let terms = [];
|
|
159
|
-
// Flatten nested ORs and handle TRUE/FALSE
|
|
160
|
-
for (const child of children) {
|
|
161
|
-
if (child.kind === 'true') {
|
|
162
|
-
// OR with TRUE → TRUE
|
|
163
|
-
return trueCondition();
|
|
164
|
-
}
|
|
165
|
-
if (child.kind === 'false') {
|
|
166
|
-
// OR with FALSE → skip (identity)
|
|
167
|
-
continue;
|
|
168
|
-
}
|
|
169
|
-
if (child.kind === 'compound' && child.operator === 'OR') {
|
|
170
|
-
// Flatten nested OR
|
|
171
|
-
terms.push(...child.children);
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
174
|
-
terms.push(child);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
// Empty → FALSE
|
|
178
|
-
if (terms.length === 0) {
|
|
179
|
-
return falseCondition();
|
|
180
|
-
}
|
|
181
|
-
// Single term → return it
|
|
182
|
-
if (terms.length === 1) {
|
|
183
|
-
return terms[0];
|
|
184
|
-
}
|
|
185
|
-
// Check for tautologies (A | !A)
|
|
186
|
-
if (hasTautology(terms)) {
|
|
187
|
-
return trueCondition();
|
|
188
|
-
}
|
|
189
|
-
// Deduplicate
|
|
190
|
-
terms = deduplicateTerms(terms);
|
|
191
|
-
// Sort for canonical form
|
|
192
|
-
terms = sortTerms(terms);
|
|
193
|
-
// Apply absorption: A | (A & B) → A
|
|
194
|
-
terms = applyAbsorptionOr(terms);
|
|
195
|
-
if (terms.length === 0) {
|
|
196
|
-
return falseCondition();
|
|
197
|
-
}
|
|
198
|
-
if (terms.length === 1) {
|
|
199
|
-
return terms[0];
|
|
200
|
-
}
|
|
201
|
-
return {
|
|
202
|
-
kind: 'compound',
|
|
203
|
-
operator: 'OR',
|
|
204
|
-
children: terms,
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
// ============================================================================
|
|
208
|
-
// Contradiction Detection
|
|
209
|
-
// ============================================================================
|
|
210
|
-
/**
|
|
211
|
-
* Check if any term contradicts another (A & !A)
|
|
212
|
-
*/
|
|
213
|
-
function hasContradiction(terms) {
|
|
214
|
-
const uniqueIds = new Set();
|
|
215
|
-
for (const term of terms) {
|
|
216
|
-
if (term.kind !== 'state')
|
|
217
|
-
continue;
|
|
218
|
-
const id = term.uniqueId;
|
|
219
|
-
// Check if negation exists
|
|
220
|
-
const negatedId = term.negated ? id.slice(1) : `!${id}`;
|
|
221
|
-
if (uniqueIds.has(negatedId)) {
|
|
222
|
-
return true;
|
|
223
|
-
}
|
|
224
|
-
uniqueIds.add(id);
|
|
225
|
-
}
|
|
226
|
-
return false;
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* Check for tautologies (A | !A)
|
|
230
|
-
*/
|
|
231
|
-
function hasTautology(terms) {
|
|
232
|
-
const uniqueIds = new Set();
|
|
233
|
-
for (const term of terms) {
|
|
234
|
-
if (term.kind !== 'state')
|
|
235
|
-
continue;
|
|
236
|
-
const id = term.uniqueId;
|
|
237
|
-
const negatedId = term.negated ? id.slice(1) : `!${id}`;
|
|
238
|
-
if (uniqueIds.has(negatedId)) {
|
|
239
|
-
return true;
|
|
240
|
-
}
|
|
241
|
-
uniqueIds.add(id);
|
|
242
|
-
}
|
|
243
|
-
return false;
|
|
244
|
-
}
|
|
245
|
-
// ============================================================================
|
|
246
|
-
// Range Contradiction Detection
|
|
247
|
-
// ============================================================================
|
|
248
|
-
/**
|
|
249
|
-
* Check for range contradictions in media/container queries
|
|
250
|
-
* e.g., @media(w < 400px) & @media(w > 800px) → FALSE
|
|
251
|
-
*/
|
|
252
|
-
function hasRangeContradiction(terms) {
|
|
253
|
-
// Group by dimension
|
|
254
|
-
const mediaByDim = new Map();
|
|
255
|
-
const containerByDim = new Map();
|
|
256
|
-
for (const term of terms) {
|
|
257
|
-
if (term.kind !== 'state')
|
|
258
|
-
continue;
|
|
259
|
-
if (term.type === 'media' &&
|
|
260
|
-
term.subtype === 'dimension' &&
|
|
261
|
-
!term.negated) {
|
|
262
|
-
const key = term.dimension || 'width';
|
|
263
|
-
if (!mediaByDim.has(key)) {
|
|
264
|
-
mediaByDim.set(key, []);
|
|
265
|
-
}
|
|
266
|
-
mediaByDim.get(key).push(term);
|
|
267
|
-
}
|
|
268
|
-
if (term.type === 'container' &&
|
|
269
|
-
term.subtype === 'dimension' &&
|
|
270
|
-
!term.negated) {
|
|
271
|
-
const key = `${term.containerName || '_'}:${term.dimension || 'width'}`;
|
|
272
|
-
if (!containerByDim.has(key)) {
|
|
273
|
-
containerByDim.set(key, []);
|
|
274
|
-
}
|
|
275
|
-
containerByDim.get(key).push(term);
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
// Check each dimension group for impossible ranges
|
|
279
|
-
for (const conditions of mediaByDim.values()) {
|
|
280
|
-
if (rangesAreImpossible(conditions)) {
|
|
281
|
-
return true;
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
for (const conditions of containerByDim.values()) {
|
|
285
|
-
if (rangesAreImpossible(conditions)) {
|
|
286
|
-
return true;
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
return false;
|
|
290
|
-
}
|
|
291
|
-
/**
|
|
292
|
-
* Check if a set of range conditions are impossible to satisfy together
|
|
293
|
-
*/
|
|
294
|
-
function rangesAreImpossible(conditions) {
|
|
295
|
-
let lowerBound = null;
|
|
296
|
-
let lowerInclusive = false;
|
|
297
|
-
let upperBound = null;
|
|
298
|
-
let upperInclusive = false;
|
|
299
|
-
for (const cond of conditions) {
|
|
300
|
-
if (cond.lowerBound?.valueNumeric != null) {
|
|
301
|
-
const value = cond.lowerBound.valueNumeric;
|
|
302
|
-
const inclusive = cond.lowerBound.inclusive;
|
|
303
|
-
if (lowerBound === null || value > lowerBound) {
|
|
304
|
-
lowerBound = value;
|
|
305
|
-
lowerInclusive = inclusive;
|
|
306
|
-
}
|
|
307
|
-
else if (value === lowerBound && !inclusive) {
|
|
308
|
-
lowerInclusive = false;
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
if (cond.upperBound?.valueNumeric != null) {
|
|
312
|
-
const value = cond.upperBound.valueNumeric;
|
|
313
|
-
const inclusive = cond.upperBound.inclusive;
|
|
314
|
-
if (upperBound === null || value < upperBound) {
|
|
315
|
-
upperBound = value;
|
|
316
|
-
upperInclusive = inclusive;
|
|
317
|
-
}
|
|
318
|
-
else if (value === upperBound && !inclusive) {
|
|
319
|
-
upperInclusive = false;
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
// Check if ranges are impossible
|
|
324
|
-
if (lowerBound !== null && upperBound !== null) {
|
|
325
|
-
if (lowerBound > upperBound) {
|
|
326
|
-
return true;
|
|
327
|
-
}
|
|
328
|
-
if (lowerBound === upperBound && (!lowerInclusive || !upperInclusive)) {
|
|
329
|
-
return true;
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
return false;
|
|
333
|
-
}
|
|
334
|
-
// ============================================================================
|
|
335
|
-
// Attribute Conflict Detection
|
|
336
|
-
// ============================================================================
|
|
337
|
-
/**
|
|
338
|
-
* Check for attribute value conflicts
|
|
339
|
-
* e.g., [data-theme="dark"] & [data-theme="light"] → FALSE
|
|
340
|
-
* e.g., [data-theme="dark"] & ![data-theme] → FALSE
|
|
341
|
-
*/
|
|
342
|
-
function hasAttributeConflict(terms) {
|
|
343
|
-
// Group modifiers by attribute
|
|
344
|
-
const modifiersByAttr = new Map();
|
|
345
|
-
for (const term of terms) {
|
|
346
|
-
if (term.kind !== 'state' || term.type !== 'modifier')
|
|
347
|
-
continue;
|
|
348
|
-
const attr = term.attribute;
|
|
349
|
-
if (!modifiersByAttr.has(attr)) {
|
|
350
|
-
modifiersByAttr.set(attr, { positive: [], negated: [] });
|
|
351
|
-
}
|
|
352
|
-
const group = modifiersByAttr.get(attr);
|
|
353
|
-
if (term.negated) {
|
|
354
|
-
group.negated.push(term);
|
|
355
|
-
}
|
|
356
|
-
else {
|
|
357
|
-
group.positive.push(term);
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
// Check each attribute for conflicts
|
|
361
|
-
for (const [attr, group] of modifiersByAttr) {
|
|
362
|
-
// Multiple different values for same attribute in positive → conflict
|
|
363
|
-
const positiveValues = group.positive
|
|
364
|
-
.filter((m) => m.value !== undefined)
|
|
365
|
-
.map((m) => m.value);
|
|
366
|
-
const uniquePositiveValues = new Set(positiveValues);
|
|
367
|
-
if (uniquePositiveValues.size > 1) {
|
|
368
|
-
return true;
|
|
369
|
-
}
|
|
370
|
-
// Positive value + negated boolean for same attribute → conflict
|
|
371
|
-
// e.g., [data-theme="dark"] & ![data-theme]
|
|
372
|
-
const hasPositiveValue = group.positive.some((m) => m.value !== undefined);
|
|
373
|
-
const hasNegatedBoolean = group.negated.some((m) => m.value === undefined);
|
|
374
|
-
if (hasPositiveValue && hasNegatedBoolean) {
|
|
375
|
-
return true;
|
|
376
|
-
}
|
|
377
|
-
// Positive boolean + negated value (same value) → tautology not conflict
|
|
378
|
-
// But positive value + negated same value → conflict
|
|
379
|
-
for (const pos of group.positive) {
|
|
380
|
-
if (pos.value !== undefined) {
|
|
381
|
-
for (const neg of group.negated) {
|
|
382
|
-
if (neg.value === pos.value) {
|
|
383
|
-
return true; // [data-x="y"] & ![data-x="y"]
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
return false;
|
|
390
|
-
}
|
|
391
|
-
// ============================================================================
|
|
392
|
-
// Container Style Query Conflict Detection
|
|
393
|
-
// ============================================================================
|
|
394
|
-
/**
|
|
395
|
-
* Check for container style query conflicts
|
|
396
|
-
* e.g., style(--variant: danger) & style(--variant: success) → FALSE
|
|
397
|
-
* e.g., style(--variant: danger) & not style(--variant) → FALSE
|
|
398
|
-
*/
|
|
399
|
-
function hasContainerStyleConflict(terms) {
|
|
400
|
-
// Group container style queries by property (and container name)
|
|
401
|
-
const styleByProp = new Map();
|
|
402
|
-
for (const term of terms) {
|
|
403
|
-
if (term.kind !== 'state' ||
|
|
404
|
-
term.type !== 'container' ||
|
|
405
|
-
term.subtype !== 'style')
|
|
406
|
-
continue;
|
|
407
|
-
const key = `${term.containerName || '_'}:${term.property}`;
|
|
408
|
-
if (!styleByProp.has(key)) {
|
|
409
|
-
styleByProp.set(key, { positive: [], negated: [] });
|
|
410
|
-
}
|
|
411
|
-
const group = styleByProp.get(key);
|
|
412
|
-
if (term.negated) {
|
|
413
|
-
group.negated.push(term);
|
|
414
|
-
}
|
|
415
|
-
else {
|
|
416
|
-
group.positive.push(term);
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
// Check each property for conflicts
|
|
420
|
-
for (const [, group] of styleByProp) {
|
|
421
|
-
// Multiple different values for same property in positive → conflict
|
|
422
|
-
// e.g., style(--variant: danger) & style(--variant: success)
|
|
423
|
-
const positiveValues = group.positive
|
|
424
|
-
.filter((c) => c.propertyValue !== undefined)
|
|
425
|
-
.map((c) => c.propertyValue);
|
|
426
|
-
const uniquePositiveValues = new Set(positiveValues);
|
|
427
|
-
if (uniquePositiveValues.size > 1) {
|
|
428
|
-
return true;
|
|
429
|
-
}
|
|
430
|
-
// Positive value + negated existence → conflict
|
|
431
|
-
// e.g., style(--variant: danger) & not style(--variant)
|
|
432
|
-
const hasPositiveValue = group.positive.some((c) => c.propertyValue !== undefined);
|
|
433
|
-
const hasNegatedExistence = group.negated.some((c) => c.propertyValue === undefined);
|
|
434
|
-
if (hasPositiveValue && hasNegatedExistence) {
|
|
435
|
-
return true;
|
|
436
|
-
}
|
|
437
|
-
// Positive value + negated same value → conflict
|
|
438
|
-
// e.g., style(--variant: danger) & not style(--variant: danger)
|
|
439
|
-
for (const pos of group.positive) {
|
|
440
|
-
if (pos.propertyValue !== undefined) {
|
|
441
|
-
for (const neg of group.negated) {
|
|
442
|
-
if (neg.propertyValue === pos.propertyValue) {
|
|
443
|
-
return true;
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
}
|
|
449
|
-
return false;
|
|
450
|
-
}
|
|
451
|
-
// ============================================================================
|
|
452
|
-
// Implied Negation Removal
|
|
453
|
-
// ============================================================================
|
|
454
|
-
/**
|
|
455
|
-
* Remove negations that are implied by positive terms.
|
|
456
|
-
*
|
|
457
|
-
* Key optimizations:
|
|
458
|
-
* 1. style(--variant: danger) implies NOT style(--variant: success)
|
|
459
|
-
* → If we have style(--variant: danger) & not style(--variant: success),
|
|
460
|
-
* the negation is redundant and can be removed.
|
|
461
|
-
*
|
|
462
|
-
* 2. [data-theme="dark"] implies NOT [data-theme="light"]
|
|
463
|
-
* → Same logic for attribute selectors.
|
|
464
|
-
*
|
|
465
|
-
* This produces cleaner CSS:
|
|
466
|
-
* Before: @container style(--variant: danger) and (not style(--variant: success))
|
|
467
|
-
* After: @container style(--variant: danger)
|
|
468
|
-
*/
|
|
469
|
-
function removeImpliedNegations(terms) {
|
|
470
|
-
// Build sets of positive container style properties with specific values
|
|
471
|
-
const positiveContainerStyles = new Map();
|
|
472
|
-
// key: "containerName:property", value: propertyValue (or undefined for existence)
|
|
473
|
-
// Build sets of positive modifier attributes with specific values
|
|
474
|
-
const positiveModifiers = new Map();
|
|
475
|
-
// key: "attribute", value: value (or undefined for boolean)
|
|
476
|
-
for (const term of terms) {
|
|
477
|
-
if (term.kind !== 'state' || term.negated)
|
|
478
|
-
continue;
|
|
479
|
-
if (term.type === 'container' && term.subtype === 'style') {
|
|
480
|
-
const key = `${term.containerName || '_'}:${term.property}`;
|
|
481
|
-
// Only track if we have a specific value (not just existence check)
|
|
482
|
-
if (term.propertyValue !== undefined) {
|
|
483
|
-
positiveContainerStyles.set(key, term.propertyValue);
|
|
484
|
-
}
|
|
485
|
-
}
|
|
486
|
-
if (term.type === 'modifier' && term.value !== undefined) {
|
|
487
|
-
positiveModifiers.set(term.attribute, term.value);
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
// Filter out redundant negations
|
|
491
|
-
return terms.filter((term) => {
|
|
492
|
-
if (term.kind !== 'state' || !term.negated)
|
|
493
|
-
return true;
|
|
494
|
-
// Check container style negations
|
|
495
|
-
if (term.type === 'container' && term.subtype === 'style') {
|
|
496
|
-
const key = `${term.containerName || '_'}:${term.property}`;
|
|
497
|
-
const positiveValue = positiveContainerStyles.get(key);
|
|
498
|
-
if (positiveValue !== undefined) {
|
|
499
|
-
// We have a positive style(--prop: X) for this property
|
|
500
|
-
if (term.propertyValue === undefined) {
|
|
501
|
-
// Negating existence: not style(--prop)
|
|
502
|
-
// But we have style(--prop: X), which implies existence → contradiction
|
|
503
|
-
// This should have been caught by hasContainerStyleConflict
|
|
504
|
-
return true;
|
|
505
|
-
}
|
|
506
|
-
if (term.propertyValue !== positiveValue) {
|
|
507
|
-
// Negating a different value: not style(--prop: Y)
|
|
508
|
-
// We have style(--prop: X), which implies not style(--prop: Y)
|
|
509
|
-
// → This negation is redundant!
|
|
510
|
-
return false;
|
|
511
|
-
}
|
|
512
|
-
}
|
|
513
|
-
}
|
|
514
|
-
// Check modifier negations
|
|
515
|
-
if (term.type === 'modifier') {
|
|
516
|
-
const positiveValue = positiveModifiers.get(term.attribute);
|
|
517
|
-
if (positiveValue !== undefined && term.value !== undefined) {
|
|
518
|
-
// We have [attr="X"] and this is not [attr="Y"]
|
|
519
|
-
if (term.value !== positiveValue) {
|
|
520
|
-
// [attr="X"] implies not [attr="Y"] → redundant
|
|
521
|
-
return false;
|
|
522
|
-
}
|
|
523
|
-
}
|
|
524
|
-
}
|
|
525
|
-
return true;
|
|
526
|
-
});
|
|
527
|
-
}
|
|
528
|
-
// ============================================================================
|
|
529
|
-
// Deduplication
|
|
530
|
-
// ============================================================================
|
|
531
|
-
function deduplicateTerms(terms) {
|
|
532
|
-
const seen = new Set();
|
|
533
|
-
const result = [];
|
|
534
|
-
for (const term of terms) {
|
|
535
|
-
const id = getConditionUniqueId(term);
|
|
536
|
-
if (!seen.has(id)) {
|
|
537
|
-
seen.add(id);
|
|
538
|
-
result.push(term);
|
|
539
|
-
}
|
|
540
|
-
}
|
|
541
|
-
return result;
|
|
542
|
-
}
|
|
543
|
-
// ============================================================================
|
|
544
|
-
// Range Merging
|
|
545
|
-
// ============================================================================
|
|
546
|
-
/**
|
|
547
|
-
* Merge compatible range conditions
|
|
548
|
-
* e.g., @media(w >= 400px) & @media(w <= 800px) → @media(400px <= w <= 800px)
|
|
549
|
-
*/
|
|
550
|
-
function mergeRanges(terms) {
|
|
551
|
-
// Group media conditions by dimension
|
|
552
|
-
const mediaByDim = new Map();
|
|
553
|
-
const containerByDim = new Map();
|
|
554
|
-
terms.forEach((term, index) => {
|
|
555
|
-
if (term.kind !== 'state')
|
|
556
|
-
return;
|
|
557
|
-
if (term.type === 'media' &&
|
|
558
|
-
term.subtype === 'dimension' &&
|
|
559
|
-
!term.negated) {
|
|
560
|
-
const key = term.dimension || 'width';
|
|
561
|
-
if (!mediaByDim.has(key)) {
|
|
562
|
-
mediaByDim.set(key, { conditions: [], indices: [] });
|
|
563
|
-
}
|
|
564
|
-
const group = mediaByDim.get(key);
|
|
565
|
-
group.conditions.push(term);
|
|
566
|
-
group.indices.push(index);
|
|
567
|
-
}
|
|
568
|
-
if (term.type === 'container' &&
|
|
569
|
-
term.subtype === 'dimension' &&
|
|
570
|
-
!term.negated) {
|
|
571
|
-
const key = `${term.containerName || '_'}:${term.dimension || 'width'}`;
|
|
572
|
-
if (!containerByDim.has(key)) {
|
|
573
|
-
containerByDim.set(key, { conditions: [], indices: [] });
|
|
574
|
-
}
|
|
575
|
-
const group = containerByDim.get(key);
|
|
576
|
-
group.conditions.push(term);
|
|
577
|
-
group.indices.push(index);
|
|
578
|
-
}
|
|
579
|
-
});
|
|
580
|
-
// Track indices to remove
|
|
581
|
-
const indicesToRemove = new Set();
|
|
582
|
-
const mergedTerms = [];
|
|
583
|
-
// Merge media conditions
|
|
584
|
-
for (const [dim, group] of mediaByDim) {
|
|
585
|
-
if (group.conditions.length > 1) {
|
|
586
|
-
const merged = mergeMediaRanges(group.conditions);
|
|
587
|
-
if (merged) {
|
|
588
|
-
group.indices.forEach((i) => indicesToRemove.add(i));
|
|
589
|
-
mergedTerms.push(merged);
|
|
590
|
-
}
|
|
591
|
-
}
|
|
592
|
-
}
|
|
593
|
-
// Merge container conditions
|
|
594
|
-
for (const [, group] of containerByDim) {
|
|
595
|
-
if (group.conditions.length > 1) {
|
|
596
|
-
const merged = mergeContainerRanges(group.conditions);
|
|
597
|
-
if (merged) {
|
|
598
|
-
group.indices.forEach((i) => indicesToRemove.add(i));
|
|
599
|
-
mergedTerms.push(merged);
|
|
600
|
-
}
|
|
601
|
-
}
|
|
602
|
-
}
|
|
603
|
-
// Build result
|
|
604
|
-
const result = [];
|
|
605
|
-
terms.forEach((term, index) => {
|
|
606
|
-
if (!indicesToRemove.has(index)) {
|
|
607
|
-
result.push(term);
|
|
608
|
-
}
|
|
609
|
-
});
|
|
610
|
-
result.push(...mergedTerms);
|
|
611
|
-
return result;
|
|
612
|
-
}
|
|
613
|
-
function mergeMediaRanges(conditions) {
|
|
614
|
-
if (conditions.length === 0)
|
|
615
|
-
return null;
|
|
616
|
-
let lowerBound;
|
|
617
|
-
let upperBound;
|
|
618
|
-
for (const cond of conditions) {
|
|
619
|
-
if (cond.lowerBound) {
|
|
620
|
-
if (!lowerBound ||
|
|
621
|
-
(cond.lowerBound.valueNumeric ?? -Infinity) >
|
|
622
|
-
(lowerBound.valueNumeric ?? -Infinity)) {
|
|
623
|
-
lowerBound = cond.lowerBound;
|
|
624
|
-
}
|
|
625
|
-
}
|
|
626
|
-
if (cond.upperBound) {
|
|
627
|
-
if (!upperBound ||
|
|
628
|
-
(cond.upperBound.valueNumeric ?? Infinity) <
|
|
629
|
-
(upperBound.valueNumeric ?? Infinity)) {
|
|
630
|
-
upperBound = cond.upperBound;
|
|
631
|
-
}
|
|
632
|
-
}
|
|
633
|
-
}
|
|
634
|
-
const base = conditions[0];
|
|
635
|
-
// Build a merged condition
|
|
636
|
-
const merged = {
|
|
637
|
-
kind: 'state',
|
|
638
|
-
type: 'media',
|
|
639
|
-
subtype: 'dimension',
|
|
640
|
-
negated: false,
|
|
641
|
-
raw: buildMergedRaw(base.dimension || 'width', lowerBound, upperBound),
|
|
642
|
-
uniqueId: '', // Will be recalculated
|
|
643
|
-
dimension: base.dimension,
|
|
644
|
-
lowerBound,
|
|
645
|
-
upperBound,
|
|
646
|
-
};
|
|
647
|
-
// Recalculate uniqueId
|
|
648
|
-
const parts = ['media', 'dim', merged.dimension];
|
|
649
|
-
if (lowerBound) {
|
|
650
|
-
parts.push(lowerBound.inclusive ? '>=' : '>');
|
|
651
|
-
parts.push(lowerBound.value);
|
|
652
|
-
}
|
|
653
|
-
if (upperBound) {
|
|
654
|
-
parts.push(upperBound.inclusive ? '<=' : '<');
|
|
655
|
-
parts.push(upperBound.value);
|
|
656
|
-
}
|
|
657
|
-
merged.uniqueId = parts.join(':');
|
|
658
|
-
return merged;
|
|
659
|
-
}
|
|
660
|
-
function mergeContainerRanges(conditions) {
|
|
661
|
-
if (conditions.length === 0)
|
|
662
|
-
return null;
|
|
663
|
-
let lowerBound;
|
|
664
|
-
let upperBound;
|
|
665
|
-
for (const cond of conditions) {
|
|
666
|
-
if (cond.lowerBound) {
|
|
667
|
-
if (!lowerBound ||
|
|
668
|
-
(cond.lowerBound.valueNumeric ?? -Infinity) >
|
|
669
|
-
(lowerBound.valueNumeric ?? -Infinity)) {
|
|
670
|
-
lowerBound = cond.lowerBound;
|
|
671
|
-
}
|
|
672
|
-
}
|
|
673
|
-
if (cond.upperBound) {
|
|
674
|
-
if (!upperBound ||
|
|
675
|
-
(cond.upperBound.valueNumeric ?? Infinity) <
|
|
676
|
-
(upperBound.valueNumeric ?? Infinity)) {
|
|
677
|
-
upperBound = cond.upperBound;
|
|
678
|
-
}
|
|
679
|
-
}
|
|
680
|
-
}
|
|
681
|
-
const base = conditions[0];
|
|
682
|
-
const merged = {
|
|
683
|
-
kind: 'state',
|
|
684
|
-
type: 'container',
|
|
685
|
-
subtype: 'dimension',
|
|
686
|
-
negated: false,
|
|
687
|
-
raw: buildMergedRaw(base.dimension || 'width', lowerBound, upperBound),
|
|
688
|
-
uniqueId: '', // Will be recalculated
|
|
689
|
-
containerName: base.containerName,
|
|
690
|
-
dimension: base.dimension,
|
|
691
|
-
lowerBound,
|
|
692
|
-
upperBound,
|
|
693
|
-
};
|
|
694
|
-
// Recalculate uniqueId
|
|
695
|
-
const name = merged.containerName || '_';
|
|
696
|
-
const parts = ['container', 'dim', name, merged.dimension];
|
|
697
|
-
if (lowerBound) {
|
|
698
|
-
parts.push(lowerBound.inclusive ? '>=' : '>');
|
|
699
|
-
parts.push(lowerBound.value);
|
|
700
|
-
}
|
|
701
|
-
if (upperBound) {
|
|
702
|
-
parts.push(upperBound.inclusive ? '<=' : '<');
|
|
703
|
-
parts.push(upperBound.value);
|
|
704
|
-
}
|
|
705
|
-
merged.uniqueId = parts.join(':');
|
|
706
|
-
return merged;
|
|
707
|
-
}
|
|
708
|
-
function buildMergedRaw(dimension, lowerBound, upperBound) {
|
|
709
|
-
if (lowerBound && upperBound) {
|
|
710
|
-
const lowerOp = lowerBound.inclusive ? '<=' : '<';
|
|
711
|
-
const upperOp = upperBound.inclusive ? '<=' : '<';
|
|
712
|
-
return `@media(${lowerBound.value} ${lowerOp} ${dimension} ${upperOp} ${upperBound.value})`;
|
|
713
|
-
}
|
|
714
|
-
else if (upperBound) {
|
|
715
|
-
const op = upperBound.inclusive ? '<=' : '<';
|
|
716
|
-
return `@media(${dimension} ${op} ${upperBound.value})`;
|
|
717
|
-
}
|
|
718
|
-
else if (lowerBound) {
|
|
719
|
-
const op = lowerBound.inclusive ? '>=' : '>';
|
|
720
|
-
return `@media(${dimension} ${op} ${lowerBound.value})`;
|
|
721
|
-
}
|
|
722
|
-
return '@media()';
|
|
723
|
-
}
|
|
724
|
-
// ============================================================================
|
|
725
|
-
// Sorting
|
|
726
|
-
// ============================================================================
|
|
727
|
-
function sortTerms(terms) {
|
|
728
|
-
return [...terms].sort((a, b) => {
|
|
729
|
-
const idA = getConditionUniqueId(a);
|
|
730
|
-
const idB = getConditionUniqueId(b);
|
|
731
|
-
return idA.localeCompare(idB);
|
|
732
|
-
});
|
|
733
|
-
}
|
|
734
|
-
// ============================================================================
|
|
735
|
-
// Absorption
|
|
736
|
-
// ============================================================================
|
|
737
|
-
/**
|
|
738
|
-
* Apply absorption law for AND: A & (A | B) → A
|
|
739
|
-
*/
|
|
740
|
-
function applyAbsorptionAnd(terms) {
|
|
741
|
-
// Collect all unique IDs of simple terms
|
|
742
|
-
const simpleIds = new Set();
|
|
743
|
-
for (const term of terms) {
|
|
744
|
-
if (term.kind !== 'compound') {
|
|
745
|
-
simpleIds.add(getConditionUniqueId(term));
|
|
746
|
-
}
|
|
747
|
-
}
|
|
748
|
-
// Filter out OR terms that are absorbed
|
|
749
|
-
return terms.filter((term) => {
|
|
750
|
-
if (term.kind === 'compound' && term.operator === 'OR') {
|
|
751
|
-
// If any child of this OR is in simpleIds, absorb the whole OR
|
|
752
|
-
for (const child of term.children) {
|
|
753
|
-
if (simpleIds.has(getConditionUniqueId(child))) {
|
|
754
|
-
return false; // Absorb
|
|
755
|
-
}
|
|
756
|
-
}
|
|
757
|
-
}
|
|
758
|
-
return true;
|
|
759
|
-
});
|
|
760
|
-
}
|
|
761
|
-
/**
|
|
762
|
-
* Apply absorption law for OR: A | (A & B) → A
|
|
763
|
-
*/
|
|
764
|
-
function applyAbsorptionOr(terms) {
|
|
765
|
-
// Collect all unique IDs of simple terms
|
|
766
|
-
const simpleIds = new Set();
|
|
767
|
-
for (const term of terms) {
|
|
768
|
-
if (term.kind !== 'compound') {
|
|
769
|
-
simpleIds.add(getConditionUniqueId(term));
|
|
770
|
-
}
|
|
771
|
-
}
|
|
772
|
-
// Filter out AND terms that are absorbed
|
|
773
|
-
return terms.filter((term) => {
|
|
774
|
-
if (term.kind === 'compound' && term.operator === 'AND') {
|
|
775
|
-
// If any child of this AND is in simpleIds, absorb the whole AND
|
|
776
|
-
for (const child of term.children) {
|
|
777
|
-
if (simpleIds.has(getConditionUniqueId(child))) {
|
|
778
|
-
return false; // Absorb
|
|
779
|
-
}
|
|
780
|
-
}
|
|
781
|
-
}
|
|
782
|
-
return true;
|
|
783
|
-
});
|
|
784
|
-
}
|
|
785
|
-
|
|
786
|
-
|