@cube-dev/ui-kit 0.98.8 → 0.99.0
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/CHANGELOG.md +44 -0
- package/es/_internal/hooks/index.js +10 -10
- package/es/_internal/hooks/use-chained-callback.js +2 -2
- package/es/_internal/hooks/use-debounced-value.js +1 -1
- package/es/_internal/hooks/use-deprecation-warning.js +2 -2
- package/es/_internal/hooks/use-effect-once.js +1 -1
- package/es/_internal/hooks/use-event.js +2 -2
- package/es/_internal/hooks/use-is-first-render.js +1 -1
- package/es/_internal/hooks/use-sync-ref.js +2 -2
- package/es/_internal/hooks/use-timer/index.js +3 -3
- package/es/_internal/hooks/use-timer/timer.js +1 -1
- package/es/_internal/hooks/use-timer/use-timer.js +3 -3
- package/es/_internal/hooks/use-update-effect.js +2 -2
- package/es/_internal/hooks/use-warn.js +3 -3
- package/es/_internal/index.js +2 -2
- package/es/components/Block.js +2 -2
- package/es/components/CollectionItem.js +3 -3
- package/es/components/GlobalStyles.js +56 -65
- package/es/components/GridProvider.js +4 -4
- package/es/components/HiddenInput.js +2 -2
- package/es/components/OpenTrasition.js +1 -1
- package/es/components/Root.js +22 -64
- package/es/components/actions/Action/Action.js +3 -3
- package/es/components/actions/Button/Button.js +12 -12
- package/es/components/actions/Button/index.js +2 -2
- package/es/components/actions/ButtonGroup/ButtonGroup.js +4 -4
- package/es/components/actions/CommandMenu/CommandMenu.js +11 -11
- package/es/components/actions/CommandMenu/index.js +2 -2
- package/es/components/actions/CommandMenu/styled.js +2 -2
- package/es/components/actions/ItemAction/ItemAction.js +9 -9
- package/es/components/actions/ItemAction/index.js +2 -2
- package/es/components/actions/ItemActionContext.js +1 -1
- package/es/components/actions/ItemButton/ItemButton.js +9 -9
- package/es/components/actions/ItemButton/index.js +2 -2
- package/es/components/actions/Link/Link.js +2 -2
- package/es/components/actions/Menu/Menu.js +10 -10
- package/es/components/actions/Menu/MenuItem.js +7 -7
- package/es/components/actions/Menu/MenuSection.js +4 -4
- package/es/components/actions/Menu/MenuTrigger.js +6 -6
- package/es/components/actions/Menu/SubMenuTrigger.js +6 -6
- 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 +10 -10
- package/es/components/actions/Menu/styled.js +5 -5
- package/es/components/actions/index.js +13 -13
- package/es/components/actions/use-action.js +7 -7
- package/es/components/actions/use-anchored-menu.js +6 -6
- package/es/components/actions/use-context-menu.js +6 -6
- package/es/components/content/ActiveZone/ActiveZone.js +4 -4
- package/es/components/content/Alert/Alert.js +4 -4
- package/es/components/content/Alert/index.js +2 -2
- package/es/components/content/Alert/types.js +1 -1
- package/es/components/content/Alert/use-alert.js +3 -3
- package/es/components/content/Avatar/Avatar.js +2 -2
- package/es/components/content/Badge/Badge.js +4 -4
- package/es/components/content/Card/Card.js +2 -2
- package/es/components/content/Content.js +3 -3
- package/es/components/content/CopyPasteBlock/CopyPasteBlock.js +8 -8
- package/es/components/content/CopyPasteBlock/index.js +2 -2
- package/es/components/content/CopySnippet/CopySnippet.js +9 -9
- package/es/components/content/CopySnippet/index.js +2 -2
- package/es/components/content/Disclosure/Disclosure.js +6 -6
- package/es/components/content/Disclosure/index.js +2 -2
- package/es/components/content/Divider.js +3 -3
- package/es/components/content/Footer.js +3 -3
- package/es/components/content/Header.js +3 -3
- package/es/components/content/HotKeys/HotKeys.js +5 -5
- package/es/components/content/HotKeys/index.js +2 -2
- package/es/components/content/Item/Item.js +25 -20
- package/es/components/content/Item/index.js +3 -3
- package/es/components/content/ItemBadge/ItemBadge.js +8 -8
- package/es/components/content/ItemBadge/index.js +2 -2
- package/es/components/content/Layout/GridLayout.js +13 -13
- package/es/components/content/Layout/Layout.js +7 -6
- package/es/components/content/Layout/LayoutBlock.js +4 -3
- package/es/components/content/Layout/LayoutCenter.js +3 -3
- package/es/components/content/Layout/LayoutContainer.js +4 -4
- package/es/components/content/Layout/LayoutContent.js +6 -5
- package/es/components/content/Layout/LayoutContext.js +1 -1
- package/es/components/content/Layout/LayoutFlex.js +4 -3
- package/es/components/content/Layout/LayoutFooter.js +4 -3
- package/es/components/content/Layout/LayoutGrid.js +4 -3
- package/es/components/content/Layout/LayoutHeader.js +8 -7
- package/es/components/content/Layout/LayoutPane.js +8 -7
- package/es/components/content/Layout/LayoutPanel.js +10 -9
- package/es/components/content/Layout/LayoutPanelHeader.js +7 -7
- package/es/components/content/Layout/LayoutToolbar.js +4 -3
- package/es/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
- package/es/components/content/Layout/index.js +16 -16
- package/es/components/content/Layout/utils.js +1 -1
- package/es/components/content/List/SectionHeading.js +3 -3
- package/es/components/content/List/index.js +2 -2
- package/es/components/content/Paragraph.js +3 -3
- package/es/components/content/Placeholder/Placeholder.js +2 -2
- package/es/components/content/PrismCode/PrismCode.js +7 -7
- package/es/components/content/PrismCode/prismSetup.js +1 -1
- package/es/components/content/PrismDiffCode/PrismDiffCode.js +2 -2
- package/es/components/content/Result/Result.js +4 -4
- package/es/components/content/Skeleton/Skeleton.js +5 -5
- package/es/components/content/Tag/Tag.js +4 -4
- package/es/components/content/Text.js +3 -3
- package/es/components/content/TextItem/TextItem.js +5 -5
- package/es/components/content/TextItem/index.js +2 -2
- package/es/components/content/Title.js +4 -4
- package/es/components/content/highlightText.js +2 -2
- package/es/components/content/use-auto-tooltip.js +2 -2
- package/es/components/fields/Checkbox/Checkbox.js +12 -12
- package/es/components/fields/Checkbox/CheckboxGroup.js +7 -7
- package/es/components/fields/Checkbox/context.js +1 -1
- package/es/components/fields/Checkbox/index.js +3 -3
- package/es/components/fields/ComboBox/ComboBox.js +18 -18
- package/es/components/fields/ComboBox/index.js +2 -2
- package/es/components/fields/DatePicker/DateInput.js +10 -10
- package/es/components/fields/DatePicker/DateInputBase.js +6 -6
- package/es/components/fields/DatePicker/DatePicker.js +14 -14
- package/es/components/fields/DatePicker/DatePickerButton.js +4 -4
- package/es/components/fields/DatePicker/DatePickerElement.js +3 -3
- package/es/components/fields/DatePicker/DatePickerInput.js +5 -5
- package/es/components/fields/DatePicker/DatePickerSegment.js +2 -2
- package/es/components/fields/DatePicker/DateRangePicker.js +15 -15
- package/es/components/fields/DatePicker/DateRangeSeparatedPicker.js +15 -15
- package/es/components/fields/DatePicker/TimeInput.js +9 -9
- package/es/components/fields/DatePicker/index.js +8 -8
- 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 +6 -6
- package/es/components/fields/FilterListBox/FilterListBox.js +10 -10
- package/es/components/fields/FilterListBox/index.js +2 -2
- package/es/components/fields/FilterPicker/FilterPicker.js +14 -14
- package/es/components/fields/FilterPicker/index.js +2 -2
- package/es/components/fields/Input/Input.js +6 -6
- package/es/components/fields/Input/index.js +2 -2
- package/es/components/fields/ListBox/ListBox.js +14 -14
- package/es/components/fields/ListBox/index.js +2 -2
- package/es/components/fields/NumberInput/NumberInput.js +8 -8
- package/es/components/fields/NumberInput/StepButton.js +4 -4
- package/es/components/fields/PasswordInput/PasswordInput.js +8 -8
- package/es/components/fields/Picker/Picker.js +13 -13
- package/es/components/fields/Picker/index.js +2 -2
- package/es/components/fields/RadioGroup/Radio.js +10 -10
- package/es/components/fields/RadioGroup/RadioGroup.js +7 -7
- package/es/components/fields/RadioGroup/context.js +1 -1
- package/es/components/fields/RadioGroup/index.js +3 -3
- package/es/components/fields/SearchInput/SearchInput.js +8 -8
- package/es/components/fields/SearchInput/index.js +2 -2
- package/es/components/fields/Select/Select.js +20 -20
- package/es/components/fields/Select/index.js +2 -2
- package/es/components/fields/Slider/Gradation.js +2 -2
- package/es/components/fields/Slider/Header.js +1 -1
- package/es/components/fields/Slider/RangeSlider.js +5 -5
- package/es/components/fields/Slider/Slider.js +7 -7
- package/es/components/fields/Slider/SliderBase.js +6 -6
- package/es/components/fields/Slider/SliderInput.js +2 -2
- package/es/components/fields/Slider/SliderThumb.js +3 -3
- package/es/components/fields/Slider/SliderTrack.js +2 -2
- package/es/components/fields/Slider/elements.js +2 -2
- package/es/components/fields/Slider/index.js +4 -4
- package/es/components/fields/Slider/types.js +1 -1
- package/es/components/fields/Switch/Switch.js +11 -11
- package/es/components/fields/Switch/index.js +2 -2
- package/es/components/fields/TextArea/TextArea.js +7 -7
- package/es/components/fields/TextArea/index.js +2 -2
- package/es/components/fields/TextInput/TextInput.js +6 -6
- package/es/components/fields/TextInput/TextInputBase.js +9 -9
- package/es/components/fields/TextInput/index.js +3 -3
- package/es/components/fields/TextInputMapper/TextInputMapper.js +14 -14
- package/es/components/fields/TextInputMapper/index.js +2 -2
- package/es/components/fields/index.js +20 -20
- package/es/components/form/FieldWrapper/FieldWrapper.js +9 -9
- package/es/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
- package/es/components/form/FieldWrapper/index.js +4 -4
- package/es/components/form/FieldWrapper/types.js +1 -1
- package/es/components/form/Form/Field.js +6 -6
- package/es/components/form/Form/Form.js +6 -6
- package/es/components/form/Form/ResetButton/ResetButton.js +6 -6
- package/es/components/form/Form/ResetButton/index.js +2 -2
- package/es/components/form/Form/SubmitButton/SubmitButton.js +4 -4
- package/es/components/form/Form/SubmitButton/index.js +2 -2
- package/es/components/form/Form/SubmitError.js +3 -3
- package/es/components/form/Form/index.js +11 -11
- package/es/components/form/Form/types.js +1 -1
- package/es/components/form/Form/use-field/index.js +4 -4
- package/es/components/form/Form/use-field/types.js +1 -1
- package/es/components/form/Form/use-field/use-field-props.js +6 -6
- package/es/components/form/Form/use-field/use-field.js +4 -4
- package/es/components/form/Form/use-form.js +3 -3
- package/es/components/form/Form/validation.js +1 -1
- package/es/components/form/Label.js +3 -3
- package/es/components/form/index.js +5 -5
- package/es/components/form/wrapper.js +3 -3
- package/es/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
- package/es/components/helpers/DisplayTransition/index.js +2 -2
- package/es/components/helpers/IconSwitch/IconSwitch.js +3 -3
- package/es/components/helpers/index.js +3 -3
- package/es/components/layout/Flex.js +2 -2
- package/es/components/layout/Flow.js +2 -2
- package/es/components/layout/Grid.js +2 -2
- package/es/components/layout/Panel.js +2 -2
- package/es/components/layout/Prefix.js +3 -3
- package/es/components/layout/ResizablePanel.js +5 -5
- package/es/components/layout/Space.js +2 -2
- package/es/components/layout/Suffix.js +3 -3
- package/es/components/organisms/FileTabs/FileTabs.js +8 -8
- package/es/components/organisms/StatsCard/StatsCard.js +4 -4
- package/es/components/other/Calendar/Calendar.js +8 -8
- package/es/components/other/Calendar/CalendarCell.js +2 -2
- package/es/components/other/Calendar/CalendarGrid.js +3 -3
- package/es/components/other/Calendar/RangeCalendar.js +8 -8
- package/es/components/other/CloudLogo/CloudLogo.js +3 -3
- package/es/components/overlays/AlertDialog/AlertDialog.js +11 -10
- package/es/components/overlays/AlertDialog/AlertDialogApiProvider.js +2 -2
- package/es/components/overlays/AlertDialog/AlertDialogZone.js +4 -4
- package/es/components/overlays/AlertDialog/index.js +4 -4
- package/es/components/overlays/AlertDialog/types.js +1 -1
- package/es/components/overlays/Dialog/Dialog.js +7 -7
- package/es/components/overlays/Dialog/DialogContainer.js +3 -3
- package/es/components/overlays/Dialog/DialogForm.js +8 -8
- package/es/components/overlays/Dialog/DialogTrigger.js +4 -4
- package/es/components/overlays/Dialog/context.js +1 -1
- package/es/components/overlays/Dialog/index.js +6 -6
- package/es/components/overlays/Dialog/use-dialog-container.js +4 -4
- package/es/components/overlays/Modal/Modal.js +5 -5
- package/es/components/overlays/Modal/OpenTransition.js +1 -1
- package/es/components/overlays/Modal/Overlay.js +3 -3
- package/es/components/overlays/Modal/Popover.js +4 -4
- package/es/components/overlays/Modal/Tray.js +6 -6
- package/es/components/overlays/Modal/Underlay.js +2 -2
- package/es/components/overlays/Modal/index.js +7 -7
- package/es/components/overlays/Modal/types.js +1 -1
- package/es/components/overlays/NewNotifications/Bar/FloatingNotification.js +5 -5
- package/es/components/overlays/NewNotifications/Bar/NotificationsBar.js +7 -7
- package/es/components/overlays/NewNotifications/Bar/TransitionComponent.js +36 -34
- package/es/components/overlays/NewNotifications/Bar/index.js +2 -2
- package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogContext.js +1 -1
- package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.js +8 -8
- package/es/components/overlays/NewNotifications/Dialog/index.js +2 -2
- package/es/components/overlays/NewNotifications/Notification.js +4 -4
- package/es/components/overlays/NewNotifications/NotificationView/NotificationAction.js +5 -5
- package/es/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.js +4 -4
- package/es/components/overlays/NewNotifications/NotificationView/NotificationDescription.js +4 -4
- package/es/components/overlays/NewNotifications/NotificationView/NotificationFooter.js +3 -3
- package/es/components/overlays/NewNotifications/NotificationView/NotificationHeader.js +3 -3
- package/es/components/overlays/NewNotifications/NotificationView/NotificationIcon.js +4 -4
- package/es/components/overlays/NewNotifications/NotificationView/NotificationProvider.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationView.js +12 -12
- package/es/components/overlays/NewNotifications/NotificationView/index.js +3 -3
- 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 +5 -5
- package/es/components/overlays/NewNotifications/NotificationsContext/index.js +3 -3
- package/es/components/overlays/NewNotifications/NotificationsContext/use-notifications.js +2 -2
- package/es/components/overlays/NewNotifications/NotificationsList/NotificationsList.js +4 -4
- package/es/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.js +5 -5
- package/es/components/overlays/NewNotifications/NotificationsList/index.js +2 -2
- package/es/components/overlays/NewNotifications/NotificationsList/types.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/index.js +6 -6
- 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 +2 -2
- package/es/components/overlays/NewNotifications/hooks/use-notifications-list.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/use-notifications-observer.js +3 -3
- package/es/components/overlays/NewNotifications/index.js +7 -7
- package/es/components/overlays/NewNotifications/types.js +1 -1
- package/es/components/overlays/Notification/Notification.js +7 -7
- package/es/components/overlays/OverlayWrapper.js +2 -2
- package/es/components/overlays/Toasts/Toast.js +4 -4
- package/es/components/overlays/Toasts/index.js +3 -3
- package/es/components/overlays/Toasts/types.js +1 -1
- package/es/components/overlays/Toasts/use-toasts-api.js +2 -2
- package/es/components/overlays/Tooltip/Tooltip.js +4 -4
- package/es/components/overlays/Tooltip/TooltipProvider.js +3 -3
- package/es/components/overlays/Tooltip/TooltipTrigger.js +6 -6
- package/es/components/overlays/Tooltip/context.js +1 -1
- package/es/components/overlays/Tooltip/index.js +4 -4
- package/es/components/portal/Portal.js +2 -2
- package/es/components/portal/PortalProvider.js +1 -1
- package/es/components/portal/index.js +3 -3
- package/es/components/portal/types.js +1 -1
- package/es/components/portal/usePortal.js +2 -2
- package/es/components/shared/InvalidIcon.js +2 -2
- package/es/components/shared/ValidIcon.js +2 -2
- package/es/components/status/LoadingAnimation/LoadingAnimation.js +58 -114
- package/es/components/status/LoadingAnimation/index.js +2 -2
- package/es/components/status/Spin/Cube.js +95 -179
- package/es/components/status/Spin/InternalSpinner.js +5 -5
- package/es/components/status/Spin/Spin.js +4 -4
- package/es/components/status/Spin/SpinsContainer.js +28 -30
- package/es/components/status/Spin/index.js +2 -2
- package/es/components/status/Spin/types.js +1 -1
- package/es/components/status/index.js +3 -3
- package/es/data/item-themes.js +1 -1
- package/es/data/themes.js +1 -1
- package/es/icons/AdjustmentsHorizontalIcon.js +2 -2
- package/es/icons/AdjustmentsIcon.js +2 -2
- package/es/icons/AiIcon.js +2 -2
- package/es/icons/AreaChartIcon.js +2 -2
- package/es/icons/BackwardIcon.js +2 -2
- package/es/icons/BarChartIcon.js +2 -2
- package/es/icons/BellFilledIcon.js +2 -2
- package/es/icons/BellIcon.js +2 -2
- package/es/icons/BooleanIcon.js +2 -2
- package/es/icons/CalendarEditIcon.js +2 -2
- package/es/icons/CalendarIcon.js +2 -2
- package/es/icons/CaretDownIcon.js +2 -2
- package/es/icons/CaretUpIcon.js +2 -2
- package/es/icons/ChartAreaStackedIcon.js +2 -2
- package/es/icons/ChartAreaStackedPercentageIcon.js +2 -2
- package/es/icons/ChartBarGroupedHorizontalIcon.js +2 -2
- package/es/icons/ChartBarGroupedIcon.js +2 -2
- package/es/icons/ChartBarHorizontalIcon.js +2 -2
- package/es/icons/ChartBarLineIcon.js +2 -2
- package/es/icons/ChartBarStackedHorizontalIcon.js +2 -2
- package/es/icons/ChartBarStackedIcon.js +2 -2
- package/es/icons/ChartBarStackedPercentageHorizontalIcon.js +2 -2
- package/es/icons/ChartBarStackedPercentageIcon.js +2 -2
- package/es/icons/ChartBoxPlot2Icon.js +2 -2
- package/es/icons/ChartBoxPlotIcon.js +2 -2
- package/es/icons/ChartBubbleIcon.js +2 -2
- package/es/icons/ChartDonut2Icon.js +2 -2
- package/es/icons/ChartFunnelIcon.js +2 -2
- package/es/icons/ChartHeatmapIcon.js +2 -2
- package/es/icons/ChartKPIIcon.js +2 -2
- package/es/icons/ChartPie2Icon.js +2 -2
- package/es/icons/ChartScatterIcon.js +2 -2
- package/es/icons/CheckCircleFilledIcon.js +2 -2
- package/es/icons/CheckCircleIcon.js +2 -2
- package/es/icons/CheckIcon.js +2 -2
- package/es/icons/CircleFilledIcon.js +2 -2
- package/es/icons/ClearIcon.js +2 -2
- package/es/icons/CloseCircleFilledIcon.js +2 -2
- package/es/icons/CloseCircleIcon.js +2 -2
- package/es/icons/CloseIcon.js +2 -2
- package/es/icons/CodeIcon.js +2 -2
- package/es/icons/ColumnTotalIcon.js +2 -2
- package/es/icons/CopyIcon.js +2 -2
- package/es/icons/CountIcon.js +2 -2
- package/es/icons/CubeIcon.js +2 -2
- package/es/icons/CubePauseIcon.js +2 -2
- package/es/icons/CubePlayIcon.js +2 -2
- package/es/icons/CurrencyDollarIcon.js +2 -2
- package/es/icons/DangerIcon.js +2 -2
- package/es/icons/DashboardIcon.js +2 -2
- package/es/icons/DatabaseIcon.js +2 -2
- package/es/icons/DecimalDecreaseIcon.js +2 -2
- package/es/icons/DecimalIncreaseIcon.js +2 -2
- package/es/icons/DirectionIcon.js +3 -3
- package/es/icons/DonutIcon.js +2 -2
- package/es/icons/DownIcon.js +2 -2
- package/es/icons/EditIcon.js +2 -2
- package/es/icons/ExclamationCircleFilledIcon.js +2 -2
- package/es/icons/ExclamationCircleIcon.js +2 -2
- package/es/icons/ExclamationIcon.js +2 -2
- package/es/icons/EyeIcon.js +2 -2
- package/es/icons/EyeInvisibleIcon.js +2 -2
- package/es/icons/FilterIcon.js +2 -2
- package/es/icons/FolderFilledIcon.js +2 -2
- package/es/icons/FolderIcon.js +2 -2
- package/es/icons/FolderOpenFilledIcon.js +2 -2
- package/es/icons/FolderOpenIcon.js +2 -2
- package/es/icons/ForwardIcon.js +2 -2
- package/es/icons/HierarchyIcon.js +2 -2
- package/es/icons/HierarchyOpenIcon.js +2 -2
- package/es/icons/Icon.js +2 -2
- package/es/icons/InfoCircleIcon.js +2 -2
- package/es/icons/InfoIcon.js +2 -2
- package/es/icons/KeyIcon.js +2 -2
- package/es/icons/LeftIcon.js +2 -2
- package/es/icons/LineChartIcon.js +2 -2
- package/es/icons/LoadingIcon.js +2 -2
- package/es/icons/LockFilledIcon.js +2 -2
- package/es/icons/LockIcon.js +2 -2
- package/es/icons/MoreIcon.js +2 -2
- package/es/icons/NotAllowedIcon.js +2 -2
- package/es/icons/Number123Icon.js +2 -2
- package/es/icons/NumberIcon.js +2 -2
- package/es/icons/PauseCircleFilledIcon.js +2 -2
- package/es/icons/PauseCircleIcon.js +2 -2
- package/es/icons/PauseIcon.js +2 -2
- package/es/icons/PercentageIcon.js +2 -2
- package/es/icons/PieChartIcon.js +2 -2
- package/es/icons/PlayCircleIcon.js +2 -2
- package/es/icons/PlayIcon.js +2 -2
- package/es/icons/PlusIcon.js +2 -2
- package/es/icons/ProgressBarIcon.js +2 -2
- package/es/icons/ReloadIcon.js +2 -2
- package/es/icons/ReportIcon.js +2 -2
- package/es/icons/ReturnIcon.js +2 -2
- package/es/icons/RightIcon.js +2 -2
- package/es/icons/RowTotalsIcon.js +2 -2
- package/es/icons/SchemeIcon.js +2 -2
- package/es/icons/SearchIcon.js +2 -2
- package/es/icons/SemanticQueryIcon.js +12 -0
- package/es/icons/SettingsIcon.js +2 -2
- package/es/icons/ShieldFilledIcon.js +2 -2
- package/es/icons/ShieldIcon.js +2 -2
- package/es/icons/SlashIcon.js +2 -2
- package/es/icons/SparklesIcon.js +2 -2
- package/es/icons/SqlIcon.js +2 -2
- package/es/icons/StatsIcon.js +2 -2
- package/es/icons/StopIcon.js +2 -2
- package/es/icons/StringIcon.js +2 -2
- package/es/icons/SubtotalsIcon.js +2 -2
- package/es/icons/SwitchIcon.js +2 -2
- package/es/icons/TableIcon.js +2 -2
- package/es/icons/ThumbsDownIcon.js +2 -2
- package/es/icons/ThumbsUpIcon.js +2 -2
- package/es/icons/ThunderboltCrossedIcon.js +2 -2
- package/es/icons/ThunderboltFilledIcon.js +2 -2
- package/es/icons/ThunderboltIcon.js +2 -2
- package/es/icons/TimeIcon.js +2 -2
- package/es/icons/TrashIcon.js +2 -2
- package/es/icons/UnlockIcon.js +2 -2
- package/es/icons/UpIcon.js +2 -2
- package/es/icons/UserGroupIcon.js +2 -2
- package/es/icons/UserIcon.js +2 -2
- package/es/icons/UserLockIcon.js +2 -2
- package/es/icons/ViewIcon.js +2 -2
- package/es/icons/WarningFilledIcon.js +2 -2
- package/es/icons/WarningIcon.js +2 -2
- package/es/icons/index.js +129 -128
- package/es/icons/wrap-icon.js +2 -2
- package/es/index.js +73 -74
- package/es/provider.js +4 -10
- 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 +2 -2
- package/es/shared/form.js +1 -1
- package/es/shared/index.js +2 -2
- package/es/stories/Form.legacy-stories.js +4 -4
- package/es/stories/FormFieldArgs.js +2 -2
- package/es/stories/SimpleLayout.stories.js +2 -2
- package/es/stories/Tasty.stories.js +2 -2
- package/es/stories/components/ConfirmDeletionDialogForm.js +2 -2
- package/es/stories/components/DialogFormApp.js +3 -3
- package/es/stories/components/StyledButton.js +19 -15
- package/es/stories/lists/baseProps.js +2 -2
- package/es/stories/playground/PlaygroundEditor.js +89 -0
- package/es/stories/playground/PlaygroundLayout.js +16 -0
- package/es/stories/playground/PlaygroundOutput.js +92 -0
- package/es/stories/playground/PlaygroundPreview.js +91 -0
- package/es/stories/playground/components/Button.js +45 -0
- package/es/stories/playground/components/Card.js +20 -0
- package/es/stories/playground/components/ScrollProgress.js +17 -0
- package/es/stories/playground/examples.js +158 -0
- package/es/tasty/chunks/cacheKey.js +98 -0
- package/es/tasty/chunks/definitions.js +281 -0
- package/es/tasty/chunks/index.js +12 -0
- package/es/tasty/chunks/renderChunk.js +97 -0
- package/es/tasty/config.js +280 -0
- package/es/tasty/debug.js +195 -9
- package/es/tasty/hooks/index.js +12 -0
- package/es/tasty/hooks/useGlobalStyles.js +67 -0
- package/es/tasty/hooks/useRawCSS.js +40 -0
- package/es/tasty/hooks/useStyles.js +206 -0
- package/es/tasty/index.js +31 -17
- package/es/tasty/injector/index.js +34 -90
- package/es/tasty/injector/injector.js +81 -299
- package/es/tasty/injector/sheet-manager.js +138 -3
- package/es/tasty/injector/types.js +1 -1
- package/es/tasty/keyframes/index.js +301 -0
- package/es/tasty/parser/classify.js +8 -6
- package/es/tasty/parser/const.js +1 -1
- package/es/tasty/parser/lru.js +1 -1
- package/es/tasty/parser/parser.js +18 -5
- package/es/tasty/parser/tokenizer.js +1 -1
- package/es/tasty/parser/types.js +2 -1
- package/es/tasty/pipeline/conditions.js +426 -0
- package/es/tasty/pipeline/exclusive.js +311 -0
- package/es/tasty/pipeline/index.js +543 -0
- package/es/tasty/pipeline/materialize.js +1260 -0
- package/es/tasty/pipeline/parseStateKey.js +592 -0
- package/es/tasty/pipeline/simplify.js +898 -0
- package/es/tasty/plugins/index.js +26 -0
- package/es/tasty/plugins/okhsl-plugin.js +400 -0
- package/es/tasty/plugins/types.js +10 -0
- package/es/tasty/states/index.js +523 -0
- package/es/tasty/static/index.js +47 -0
- package/es/tasty/static/tastyStatic.js +55 -0
- package/es/tasty/static/types.js +34 -0
- package/es/tasty/styles/align.js +1 -1
- package/es/tasty/styles/border.js +2 -2
- package/es/tasty/styles/boxShadow.combinator.js +1 -1
- package/es/tasty/styles/color.js +3 -3
- package/es/tasty/styles/createStyle.js +3 -3
- package/es/tasty/styles/dimension.js +2 -2
- package/es/tasty/styles/display.js +1 -1
- package/es/tasty/styles/fade.js +2 -2
- package/es/tasty/styles/fill.js +11 -21
- 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 +2 -2
- package/es/tasty/styles/groupRadius.js +2 -2
- package/es/tasty/styles/height.js +2 -2
- package/es/tasty/styles/index.js +3 -3
- package/es/tasty/styles/inset.js +2 -2
- package/es/tasty/styles/justify.js +1 -1
- package/es/tasty/styles/list.js +1 -1
- package/es/tasty/styles/margin.js +76 -56
- package/es/tasty/styles/outline.js +2 -2
- package/es/tasty/styles/padding.js +76 -56
- package/es/tasty/styles/place.js +1 -1
- package/es/tasty/styles/predefined.js +28 -27
- package/es/tasty/styles/preset.js +2 -2
- package/es/tasty/styles/radius.js +5 -12
- package/es/tasty/styles/reset.js +3 -7
- package/es/tasty/styles/scrollbar.js +2 -2
- package/es/tasty/styles/shadow.js +2 -2
- package/es/tasty/styles/styledScrollbar.js +1 -1
- package/es/tasty/styles/transition.js +10 -3
- package/es/tasty/styles/types.js +1 -1
- package/es/tasty/styles/width.js +2 -2
- package/es/tasty/tasty.js +81 -122
- 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 +2 -2
- package/es/tasty/utils/modAttrs.js +3 -3
- package/es/tasty/utils/processTokens.js +88 -2
- package/es/tasty/utils/string.js +1 -1
- package/es/tasty/utils/styles.js +255 -22
- package/es/tasty/utils/typography.js +67 -0
- package/es/tasty/utils/warnings.js +1 -1
- package/es/tasty/zero/babel.js +453 -0
- package/es/tasty/zero/css-writer.js +94 -0
- package/es/tasty/zero/extractor.js +222 -0
- package/es/tasty/zero/index.js +28 -0
- package/es/tasty/zero/next.js +102 -0
- package/es/tokens/base.js +64 -0
- package/es/tokens/colors.js +68 -0
- package/es/tokens/index.js +63 -0
- package/es/tokens/layout.js +26 -0
- package/es/tokens/shadows.js +27 -0
- package/es/tokens/sizes.js +42 -0
- package/es/tokens/spacing.js +22 -0
- package/es/tokens/typography.js +237 -0
- package/es/utils/ResizeSensor.js +1 -1
- package/es/utils/index.js +10 -10
- 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 +2 -2
- package/es/utils/react/chain.js +1 -1
- package/es/utils/react/forwardRefWithGenerics.js +1 -1
- package/es/utils/react/index.js +17 -17
- 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 +4 -4
- package/es/utils/react/nullableValue.js +1 -1
- package/es/utils/react/resolveIcon.js +1 -1
- package/es/utils/react/sharedStore.js +2 -2
- package/es/utils/react/useCombinedRefs.js +1 -1
- package/es/utils/react/useControlledFocusVisible.js +2 -2
- package/es/utils/react/useEventBus.js +1 -1
- package/es/utils/react/useId.js +2 -2
- package/es/utils/react/useIsDarwin.js +1 -1
- package/es/utils/react/useKeySymbols.js +2 -2
- package/es/utils/react/useLayoutEffect.js +1 -1
- package/es/utils/react/useLocalStorage.js +2 -2
- 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 +14 -4
- package/types/components/GlobalStyles.d.ts +2 -1
- package/types/components/HiddenInput.d.ts +828 -826
- package/types/components/Root.d.ts +1 -0
- package/types/components/actions/Button/Button.d.ts +1649 -1645
- package/types/components/actions/CommandMenu/styled.d.ts +4140 -4130
- package/types/components/actions/ItemActionContext.d.ts +1 -1
- package/types/components/actions/Menu/styled.d.ts +4893 -4883
- package/types/components/actions/use-action.d.ts +1 -1
- package/types/components/content/List/SectionHeading.d.ts +251 -251
- package/types/components/content/Text.d.ts +1487 -1487
- package/types/components/fields/DatePicker/DatePickerElement.d.ts +251 -251
- package/types/components/fields/Select/Select.d.ts +828 -826
- package/types/components/fields/Slider/elements.d.ts +4968 -4956
- package/types/components/overlays/AlertDialog/AlertDialog.d.ts +1 -1
- package/types/components/status/Spin/Cube.d.ts +1 -1
- package/types/components/status/Spin/SpinsContainer.d.ts +6 -3
- package/types/icons/SemanticQueryIcon.d.ts +4 -0
- package/types/icons/index.d.ts +1 -0
- package/types/index.d.ts +1 -4
- package/types/provider.d.ts +1 -2
- package/types/stories/components/StyledButton.d.ts +1 -1
- package/types/stories/playground/PlaygroundEditor.d.ts +6 -0
- package/types/stories/playground/PlaygroundLayout.d.ts +8 -0
- package/types/stories/playground/PlaygroundOutput.d.ts +5 -0
- package/types/stories/playground/PlaygroundPreview.d.ts +6 -0
- package/types/stories/playground/components/Button.d.ts +11 -0
- package/types/stories/playground/components/Card.d.ts +7 -0
- package/types/stories/playground/components/ScrollProgress.d.ts +5 -0
- package/types/stories/playground/examples.d.ts +7 -0
- package/types/tasty/chunks/cacheKey.d.ts +26 -0
- package/types/tasty/chunks/definitions.d.ts +75 -0
- package/types/tasty/chunks/index.d.ts +4 -0
- package/types/tasty/chunks/renderChunk.d.ts +25 -0
- package/types/tasty/config.d.ts +171 -0
- package/types/tasty/debug.d.ts +35 -0
- package/types/tasty/hooks/index.d.ts +4 -0
- package/types/tasty/hooks/useGlobalStyles.d.ts +22 -0
- package/types/tasty/hooks/useRawCSS.d.ts +50 -0
- package/types/tasty/hooks/useStyles.d.ts +35 -0
- package/types/tasty/index.d.ts +14 -4
- package/types/tasty/injector/index.d.ts +30 -19
- package/types/tasty/injector/injector.d.ts +19 -13
- package/types/tasty/injector/sheet-manager.d.ts +25 -1
- package/types/tasty/injector/types.d.ts +23 -2
- package/types/tasty/keyframes/index.d.ts +49 -0
- package/types/tasty/parser/parser.d.ts +4 -0
- package/types/tasty/parser/types.d.ts +1 -0
- package/types/tasty/pipeline/conditions.d.ts +243 -0
- package/types/tasty/pipeline/exclusive.d.ts +103 -0
- package/types/tasty/pipeline/index.d.ts +67 -0
- package/types/tasty/pipeline/materialize.d.ts +162 -0
- package/types/tasty/pipeline/parseStateKey.d.ts +20 -0
- package/types/tasty/pipeline/simplify.d.ts +28 -0
- package/types/tasty/plugins/index.d.ts +17 -0
- package/types/tasty/plugins/okhsl-plugin.d.ts +45 -0
- package/types/tasty/plugins/types.d.ts +34 -0
- package/types/tasty/states/index.d.ts +101 -0
- package/types/tasty/static/index.d.ts +39 -0
- package/types/tasty/static/tastyStatic.d.ts +41 -0
- package/types/tasty/static/types.d.ts +44 -0
- package/types/tasty/styles/fill.d.ts +11 -1
- package/types/tasty/styles/margin.d.ts +3 -1
- package/types/tasty/styles/padding.d.ts +3 -1
- package/types/tasty/styles/radius.d.ts +2 -10
- package/types/tasty/styles/types.d.ts +24 -3
- package/types/tasty/tasty.d.ts +892 -840
- package/types/tasty/utils/styles.d.ts +50 -6
- package/types/tasty/utils/typography.d.ts +32 -0
- package/types/tasty/zero/babel.d.ts +63 -0
- package/types/tasty/zero/css-writer.d.ts +41 -0
- package/types/tasty/zero/extractor.d.ts +40 -0
- package/types/tasty/zero/index.d.ts +18 -0
- package/types/tasty/zero/next.d.ts +57 -0
- package/types/tokens/base.d.ts +8 -0
- package/types/tokens/colors.d.ts +6 -0
- package/types/tokens/index.d.ts +41 -0
- package/types/tokens/layout.d.ts +7 -0
- package/types/tokens/shadows.d.ts +12 -0
- package/types/tokens/sizes.d.ts +25 -0
- package/types/tokens/spacing.d.ts +8 -0
- package/types/tokens/typography.d.ts +30 -0
- package/es/components/navigation/LegacyTabs/LegacyTabs.js +0 -275
- package/es/components/other/Base64Upload/Base64Upload.js +0 -103
- package/es/icons/add-new-icon.js +0 -129
- package/es/tasty/providers/BreakpointsProvider.js +0 -16
- package/es/tasty/utils/getModCombinations.js +0 -38
- package/es/tasty/utils/renderStyles.js +0 -1050
- package/es/tasty/utils/responsive.js +0 -60
- package/es/tokens.js +0 -309
- package/types/components/navigation/LegacyTabs/LegacyTabs.d.ts +0 -43
- package/types/components/other/Base64Upload/Base64Upload.d.ts +0 -5
- package/types/icons/add-new-icon.d.ts +0 -2
- package/types/tasty/providers/BreakpointsProvider.d.ts +0 -8
- package/types/tasty/utils/getModCombinations.d.ts +0 -9
- package/types/tasty/utils/renderStyles.d.ts +0 -41
- package/types/tasty/utils/responsive.d.ts +0 -8
- package/types/tokens.d.ts +0 -221
|
@@ -0,0 +1,543 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license MIT
|
|
3
|
+
* author: Cube Dev Team
|
|
4
|
+
* @cube-dev/ui-kit v0.99.0
|
|
5
|
+
* Released under the MIT license.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Tasty Style Rendering Pipeline
|
|
10
|
+
*
|
|
11
|
+
* This is the main entrypoint for the new pipeline implementation.
|
|
12
|
+
* It implements the complete flow from style objects to CSS rules.
|
|
13
|
+
*
|
|
14
|
+
* Pipeline stages:
|
|
15
|
+
* 1. PARSE CONDITIONS - Parse state keys into ConditionNode trees
|
|
16
|
+
* 2. BUILD EXCLUSIVE CONDITIONS - AND with negation of higher-priority conditions
|
|
17
|
+
* 3. SIMPLIFY CONDITIONS - Apply boolean algebra, detect contradictions
|
|
18
|
+
* 4. GROUP BY HANDLER - Collect styles per handler, compute combinations
|
|
19
|
+
* 5. COMPUTE CSS VALUES - Call handlers to get CSS declarations
|
|
20
|
+
* 6. MERGE BY VALUE - Merge rules with identical CSS output
|
|
21
|
+
* 7. MATERIALIZE CSS - Convert conditions to CSS selectors + at-rules
|
|
22
|
+
*/
|
|
23
|
+
import { Lru } from '../parser/lru.js';
|
|
24
|
+
import { createStateParserContext } from '../states/index.js';
|
|
25
|
+
import { createStyle, STYLE_HANDLER_MAP } from '../styles/index.js';
|
|
26
|
+
import { stringifyStyles } from '../utils/styles.js';
|
|
27
|
+
import { and, or, trueCondition, } from './conditions.js';
|
|
28
|
+
import { buildExclusiveConditions, expandExclusiveOrs, expandOrConditions, isValueMapping, parseStyleEntries, } from './exclusive.js';
|
|
29
|
+
import { buildAtRulesFromVariant, conditionToCSS, modifierToCSS, pseudoToCSS, rootConditionsToCSS, } from './materialize.js';
|
|
30
|
+
import { parseStateKey } from './parseStateKey.js';
|
|
31
|
+
import { simplifyCondition } from './simplify.js';
|
|
32
|
+
// ============================================================================
|
|
33
|
+
// Caching
|
|
34
|
+
// ============================================================================
|
|
35
|
+
const pipelineCache = new Lru(5000);
|
|
36
|
+
// ============================================================================
|
|
37
|
+
// Main Pipeline Function
|
|
38
|
+
// ============================================================================
|
|
39
|
+
/**
|
|
40
|
+
* Render styles using the new pipeline.
|
|
41
|
+
*
|
|
42
|
+
* This is the main entrypoint that implements the complete flow.
|
|
43
|
+
*/
|
|
44
|
+
export function renderStylesPipeline(styles, className) {
|
|
45
|
+
if (!styles) {
|
|
46
|
+
return { rules: [], className };
|
|
47
|
+
}
|
|
48
|
+
// Check cache
|
|
49
|
+
const cacheKey = stringifyStyles(styles);
|
|
50
|
+
let rules = pipelineCache.get(cacheKey);
|
|
51
|
+
if (!rules) {
|
|
52
|
+
// Create parser context
|
|
53
|
+
const parserContext = createStateParserContext(styles);
|
|
54
|
+
// Run pipeline
|
|
55
|
+
rules = runPipeline(styles, parserContext);
|
|
56
|
+
// Cache result
|
|
57
|
+
pipelineCache.set(cacheKey, rules);
|
|
58
|
+
}
|
|
59
|
+
// If no className, rules need it to be prepended later
|
|
60
|
+
if (!className) {
|
|
61
|
+
return {
|
|
62
|
+
rules: rules.map((r) => ({
|
|
63
|
+
...r,
|
|
64
|
+
needsClassName: true,
|
|
65
|
+
})),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
// Prepend className to selectors
|
|
69
|
+
const finalRules = rules.map((rule) => {
|
|
70
|
+
// Parse the selector to find where to insert className
|
|
71
|
+
let selector = rule.selector;
|
|
72
|
+
// If selector starts with :root, insert className after the :root part
|
|
73
|
+
if (rule.rootPrefix) {
|
|
74
|
+
selector = `${rule.rootPrefix} .${className}.${className}${selector}`;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
selector = `.${className}.${className}${selector}`;
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
...rule,
|
|
81
|
+
selector,
|
|
82
|
+
};
|
|
83
|
+
});
|
|
84
|
+
return {
|
|
85
|
+
rules: finalRules,
|
|
86
|
+
className,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Clear the pipeline cache (for testing)
|
|
91
|
+
*/
|
|
92
|
+
export function clearPipelineCache() {
|
|
93
|
+
pipelineCache.clear();
|
|
94
|
+
}
|
|
95
|
+
// ============================================================================
|
|
96
|
+
// Pipeline Implementation
|
|
97
|
+
// ============================================================================
|
|
98
|
+
function runPipeline(styles, parserContext) {
|
|
99
|
+
const allRules = [];
|
|
100
|
+
// Process styles recursively (including nested selectors)
|
|
101
|
+
processStyles(styles, '', parserContext, allRules);
|
|
102
|
+
// Deduplicate rules
|
|
103
|
+
const seen = new Set();
|
|
104
|
+
const dedupedRules = allRules.filter((rule) => {
|
|
105
|
+
// Include rootPrefix in dedup key - rules with different root prefixes are distinct
|
|
106
|
+
const key = `${rule.selector}|${rule.declarations}|${JSON.stringify(rule.atRules || [])}|${rule.rootPrefix || ''}`;
|
|
107
|
+
if (seen.has(key))
|
|
108
|
+
return false;
|
|
109
|
+
seen.add(key);
|
|
110
|
+
return true;
|
|
111
|
+
});
|
|
112
|
+
return dedupedRules;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Process styles at a given nesting level
|
|
116
|
+
*/
|
|
117
|
+
function processStyles(styles, selectorSuffix, parserContext, allRules) {
|
|
118
|
+
const keys = Object.keys(styles);
|
|
119
|
+
// Separate selector keys from style keys
|
|
120
|
+
// Skip @keyframes (processed separately) and other @ prefixed keys (predefined states)
|
|
121
|
+
const selectorKeys = keys.filter((key) => isSelector(key));
|
|
122
|
+
const styleKeys = keys.filter((key) => !isSelector(key) && !key.startsWith('@'));
|
|
123
|
+
// Process nested selectors first
|
|
124
|
+
for (const key of selectorKeys) {
|
|
125
|
+
const nestedStyles = styles[key];
|
|
126
|
+
if (!nestedStyles || typeof nestedStyles !== 'object')
|
|
127
|
+
continue;
|
|
128
|
+
const suffix = getSelector(key, nestedStyles);
|
|
129
|
+
if (suffix) {
|
|
130
|
+
// Create sub-element context for @own() validation
|
|
131
|
+
const subContext = {
|
|
132
|
+
...parserContext,
|
|
133
|
+
isSubElement: true,
|
|
134
|
+
};
|
|
135
|
+
// Remove $ from nested styles
|
|
136
|
+
const { $: _omit, ...cleanedStyles } = nestedStyles;
|
|
137
|
+
processStyles(cleanedStyles, selectorSuffix + suffix, subContext, allRules);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// Build handler queue
|
|
141
|
+
const handlerQueue = buildHandlerQueue(styleKeys, styles);
|
|
142
|
+
// Process each handler
|
|
143
|
+
for (const { handler, styleMap } of handlerQueue) {
|
|
144
|
+
const lookupStyles = handler.__lookupStyles;
|
|
145
|
+
// Stage 1 & 2: Parse and build exclusive conditions for each style
|
|
146
|
+
// Exclusive conditions ensure each CSS rule applies to exactly one state.
|
|
147
|
+
// OR conditions in exclusives are properly expanded to DNF (multiple CSS selectors).
|
|
148
|
+
const exclusiveByStyle = new Map();
|
|
149
|
+
for (const styleName of lookupStyles) {
|
|
150
|
+
const value = styleMap[styleName];
|
|
151
|
+
if (value === undefined)
|
|
152
|
+
continue;
|
|
153
|
+
if (isValueMapping(value)) {
|
|
154
|
+
// Parse entries from value mapping
|
|
155
|
+
const parsed = parseStyleEntries(styleName, value, (stateKey) => parseStateKey(stateKey, { context: parserContext }));
|
|
156
|
+
// Expand OR conditions into exclusive branches
|
|
157
|
+
// This ensures OR branches like `A | B | C` become:
|
|
158
|
+
// A, B & !A, C & !A & !B
|
|
159
|
+
const expanded = expandOrConditions(parsed);
|
|
160
|
+
// Build exclusive conditions across all entries
|
|
161
|
+
const exclusive = buildExclusiveConditions(expanded);
|
|
162
|
+
// Expand ORs from De Morgan negation into exclusive branches
|
|
163
|
+
// This transforms: !A | !B → !A, (A & !B)
|
|
164
|
+
// Ensures each CSS rule has proper at-rule context
|
|
165
|
+
const fullyExpanded = expandExclusiveOrs(exclusive);
|
|
166
|
+
exclusiveByStyle.set(styleName, fullyExpanded);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
// Simple value - single entry with TRUE condition
|
|
170
|
+
exclusiveByStyle.set(styleName, [
|
|
171
|
+
{
|
|
172
|
+
styleKey: styleName,
|
|
173
|
+
stateKey: '',
|
|
174
|
+
value,
|
|
175
|
+
condition: trueCondition(),
|
|
176
|
+
priority: 0,
|
|
177
|
+
exclusiveCondition: trueCondition(),
|
|
178
|
+
},
|
|
179
|
+
]);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// Stage 4: Compute all valid state combinations
|
|
183
|
+
const stateSnapshots = computeStateCombinations(exclusiveByStyle, lookupStyles);
|
|
184
|
+
// Stage 5: Call handler for each snapshot
|
|
185
|
+
const computedRules = [];
|
|
186
|
+
for (const snapshot of stateSnapshots) {
|
|
187
|
+
const result = handler(snapshot.values);
|
|
188
|
+
if (!result)
|
|
189
|
+
continue;
|
|
190
|
+
// Handler may return single or array
|
|
191
|
+
const results = Array.isArray(result) ? result : [result];
|
|
192
|
+
for (const r of results) {
|
|
193
|
+
if (!r || typeof r !== 'object')
|
|
194
|
+
continue;
|
|
195
|
+
const { $, ...styleProps } = r;
|
|
196
|
+
const declarations = {};
|
|
197
|
+
for (const [prop, val] of Object.entries(styleProps)) {
|
|
198
|
+
if (val != null && val !== '') {
|
|
199
|
+
declarations[prop] = String(val);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
if (Object.keys(declarations).length === 0)
|
|
203
|
+
continue;
|
|
204
|
+
// Handle $ suffixes
|
|
205
|
+
const suffixes = $
|
|
206
|
+
? (Array.isArray($) ? $ : [$]).map((s) => selectorSuffix + normalizeSelectorSuffix(String(s)))
|
|
207
|
+
: [selectorSuffix];
|
|
208
|
+
for (const suffix of suffixes) {
|
|
209
|
+
computedRules.push({
|
|
210
|
+
condition: snapshot.condition,
|
|
211
|
+
declarations,
|
|
212
|
+
selectorSuffix: suffix,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// Stage 6: Merge rules with identical CSS output
|
|
218
|
+
const mergedRules = mergeByValue(computedRules);
|
|
219
|
+
// Stage 7: Materialize to CSS
|
|
220
|
+
for (const rule of mergedRules) {
|
|
221
|
+
const cssRules = materializeComputedRule(rule);
|
|
222
|
+
allRules.push(...cssRules);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// ============================================================================
|
|
227
|
+
// Helper Functions
|
|
228
|
+
// ============================================================================
|
|
229
|
+
/**
|
|
230
|
+
* Check if a key is a CSS selector
|
|
231
|
+
*/
|
|
232
|
+
export function isSelector(key) {
|
|
233
|
+
return key.startsWith('&') || key.startsWith('.') || /^[A-Z]/.test(key);
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Get selector suffix for a key
|
|
237
|
+
*/
|
|
238
|
+
function getSelector(key, styles) {
|
|
239
|
+
if (key.startsWith('&')) {
|
|
240
|
+
return key.slice(1);
|
|
241
|
+
}
|
|
242
|
+
if (key.startsWith('.')) {
|
|
243
|
+
return ` ${key}`;
|
|
244
|
+
}
|
|
245
|
+
if (/^[A-Z]/.test(key)) {
|
|
246
|
+
const affix = styles?.$;
|
|
247
|
+
if (affix !== undefined) {
|
|
248
|
+
const prefix = transformSelectorAffix(String(affix));
|
|
249
|
+
return `${prefix}[data-element="${key}"]`;
|
|
250
|
+
}
|
|
251
|
+
return ` [data-element="${key}"]`;
|
|
252
|
+
}
|
|
253
|
+
return null;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Transform selector affix
|
|
257
|
+
*/
|
|
258
|
+
function transformSelectorAffix(affix) {
|
|
259
|
+
const trimmed = affix.trim();
|
|
260
|
+
if (!trimmed)
|
|
261
|
+
return ' ';
|
|
262
|
+
// Validate that combinators have spaces around them
|
|
263
|
+
// Check for capitalized words adjacent to combinators without spaces
|
|
264
|
+
const invalidPattern = /[A-Z][a-z]*[>+~]|[>+~][A-Z][a-z]*/;
|
|
265
|
+
if (invalidPattern.test(trimmed)) {
|
|
266
|
+
console.error(`[Tasty] Invalid selector affix ($) syntax: "${affix}"\n` +
|
|
267
|
+
`Combinators (>, +, ~) must have spaces around them when used with element names.\n` +
|
|
268
|
+
`Example: Use "$: '> Body > Row'" instead of "$: '>Body>Row'"\n` +
|
|
269
|
+
`This is a design choice: the parser uses simple whitespace splitting for performance.`);
|
|
270
|
+
}
|
|
271
|
+
const tokens = trimmed.split(/\s+/);
|
|
272
|
+
const transformed = tokens.map((token) => /^[A-Z]/.test(token) ? `[data-element="${token}"]` : token);
|
|
273
|
+
return ` ${transformed.join(' ')} `;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Normalize selector suffix from $ property
|
|
277
|
+
*/
|
|
278
|
+
function normalizeSelectorSuffix(suffix) {
|
|
279
|
+
if (!suffix)
|
|
280
|
+
return '';
|
|
281
|
+
return suffix.startsWith('&') ? suffix.slice(1) : suffix;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Build handler queue from style keys
|
|
285
|
+
*/
|
|
286
|
+
function buildHandlerQueue(styleKeys, styles) {
|
|
287
|
+
const queue = [];
|
|
288
|
+
const seenHandlers = new Set();
|
|
289
|
+
for (const styleName of styleKeys) {
|
|
290
|
+
let handlers = STYLE_HANDLER_MAP[styleName];
|
|
291
|
+
if (!handlers) {
|
|
292
|
+
handlers = STYLE_HANDLER_MAP[styleName] = [createStyle(styleName)];
|
|
293
|
+
}
|
|
294
|
+
for (const handler of handlers) {
|
|
295
|
+
if (seenHandlers.has(handler))
|
|
296
|
+
continue;
|
|
297
|
+
seenHandlers.add(handler);
|
|
298
|
+
const lookupStyles = handler.__lookupStyles;
|
|
299
|
+
const styleMap = {};
|
|
300
|
+
for (const name of lookupStyles) {
|
|
301
|
+
if (styles[name] !== undefined) {
|
|
302
|
+
styleMap[name] = styles[name];
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
queue.push({ handler, styleMap });
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
return queue;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Compute all valid state combinations for a handler's lookup styles
|
|
312
|
+
*/
|
|
313
|
+
function computeStateCombinations(exclusiveByStyle, lookupStyles) {
|
|
314
|
+
// Get entries for each style
|
|
315
|
+
const entriesPerStyle = lookupStyles.map((style) => exclusiveByStyle.get(style) || []);
|
|
316
|
+
// Cartesian product of all combinations
|
|
317
|
+
const combinations = cartesianProduct(entriesPerStyle);
|
|
318
|
+
// Build snapshots, simplifying and filtering impossible combinations
|
|
319
|
+
const snapshots = [];
|
|
320
|
+
for (const combo of combinations) {
|
|
321
|
+
// Combine all exclusive conditions with AND
|
|
322
|
+
const conditions = combo.map((e) => e.exclusiveCondition);
|
|
323
|
+
const combined = and(...conditions);
|
|
324
|
+
const simplified = simplifyCondition(combined);
|
|
325
|
+
// Skip impossible combinations
|
|
326
|
+
if (simplified.kind === 'false')
|
|
327
|
+
continue;
|
|
328
|
+
// Build values map
|
|
329
|
+
const values = {};
|
|
330
|
+
for (const entry of combo) {
|
|
331
|
+
values[entry.styleKey] = entry.value;
|
|
332
|
+
}
|
|
333
|
+
snapshots.push({
|
|
334
|
+
condition: simplified,
|
|
335
|
+
values,
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
return snapshots;
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Cartesian product of arrays
|
|
342
|
+
*/
|
|
343
|
+
function cartesianProduct(arrays) {
|
|
344
|
+
if (arrays.length === 0)
|
|
345
|
+
return [[]];
|
|
346
|
+
// Filter out empty arrays
|
|
347
|
+
const nonEmpty = arrays.filter((a) => a.length > 0);
|
|
348
|
+
if (nonEmpty.length === 0)
|
|
349
|
+
return [[]];
|
|
350
|
+
return nonEmpty.reduce((acc, arr) => acc.flatMap((combo) => arr.map((item) => [...combo, item])), [[]]);
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Merge rules with identical CSS output
|
|
354
|
+
*/
|
|
355
|
+
function mergeByValue(rules) {
|
|
356
|
+
// Group by selectorSuffix + declarations
|
|
357
|
+
const groups = new Map();
|
|
358
|
+
for (const rule of rules) {
|
|
359
|
+
const key = `${rule.selectorSuffix}|${JSON.stringify(rule.declarations)}`;
|
|
360
|
+
if (!groups.has(key)) {
|
|
361
|
+
groups.set(key, []);
|
|
362
|
+
}
|
|
363
|
+
groups.get(key).push(rule);
|
|
364
|
+
}
|
|
365
|
+
// Merge conditions with OR for each group
|
|
366
|
+
const merged = [];
|
|
367
|
+
for (const [, groupRules] of groups) {
|
|
368
|
+
if (groupRules.length === 1) {
|
|
369
|
+
merged.push(groupRules[0]);
|
|
370
|
+
}
|
|
371
|
+
else {
|
|
372
|
+
// Merge conditions with OR
|
|
373
|
+
const mergedCondition = simplifyCondition(or(...groupRules.map((r) => r.condition)));
|
|
374
|
+
merged.push({
|
|
375
|
+
condition: mergedCondition,
|
|
376
|
+
declarations: groupRules[0].declarations,
|
|
377
|
+
selectorSuffix: groupRules[0].selectorSuffix,
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
return merged;
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Build selector fragment from a variant (without className prefix)
|
|
385
|
+
*/
|
|
386
|
+
function buildSelectorFromVariant(variant, selectorSuffix) {
|
|
387
|
+
let selector = '';
|
|
388
|
+
// Add modifier selectors
|
|
389
|
+
for (const mod of variant.modifierConditions) {
|
|
390
|
+
selector += modifierToCSS(mod);
|
|
391
|
+
}
|
|
392
|
+
// Add pseudo selectors
|
|
393
|
+
for (const pseudo of variant.pseudoConditions) {
|
|
394
|
+
selector += pseudoToCSS(pseudo);
|
|
395
|
+
}
|
|
396
|
+
selector += selectorSuffix;
|
|
397
|
+
// Add own selectors (after sub-element)
|
|
398
|
+
for (const own of variant.ownConditions) {
|
|
399
|
+
if ('attribute' in own) {
|
|
400
|
+
selector += modifierToCSS(own);
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
selector += pseudoToCSS(own);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
return selector;
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Materialize a computed rule to final CSS format
|
|
410
|
+
*
|
|
411
|
+
* Returns an array because OR conditions may generate multiple CSS rules
|
|
412
|
+
* (when different branches have different at-rules)
|
|
413
|
+
*/
|
|
414
|
+
function materializeComputedRule(rule) {
|
|
415
|
+
const components = conditionToCSS(rule.condition);
|
|
416
|
+
if (components.isImpossible || components.variants.length === 0) {
|
|
417
|
+
return [];
|
|
418
|
+
}
|
|
419
|
+
const declarations = Object.entries(rule.declarations)
|
|
420
|
+
.map(([prop, value]) => `${prop}: ${value};`)
|
|
421
|
+
.join(' ');
|
|
422
|
+
// Helper to get root prefix key for grouping
|
|
423
|
+
const getRootPrefixKey = (variant) => {
|
|
424
|
+
return variant.rootConditions
|
|
425
|
+
.map((r) => (r.negated ? `!${r.selector}` : r.selector))
|
|
426
|
+
.sort()
|
|
427
|
+
.join('|');
|
|
428
|
+
};
|
|
429
|
+
// Group variants by their at-rules (variants with same at-rules can be combined with commas)
|
|
430
|
+
const byAtRules = new Map();
|
|
431
|
+
for (const variant of components.variants) {
|
|
432
|
+
const atRules = buildAtRulesFromVariant(variant);
|
|
433
|
+
const key = atRules.sort().join('|||') + '###' + getRootPrefixKey(variant);
|
|
434
|
+
const group = byAtRules.get(key);
|
|
435
|
+
if (group) {
|
|
436
|
+
group.variants.push(variant);
|
|
437
|
+
}
|
|
438
|
+
else {
|
|
439
|
+
byAtRules.set(key, {
|
|
440
|
+
variants: [variant],
|
|
441
|
+
atRules,
|
|
442
|
+
rootPrefix: rootConditionsToCSS(variant.rootConditions),
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
// Generate one CSSRule per at-rules group
|
|
447
|
+
const rules = [];
|
|
448
|
+
for (const [, group] of byAtRules) {
|
|
449
|
+
// Build selector fragments for each variant (will be joined with className later)
|
|
450
|
+
const selectorFragments = group.variants.map((v) => buildSelectorFromVariant(v, rule.selectorSuffix));
|
|
451
|
+
// Store as array if multiple, string if single
|
|
452
|
+
const selector = selectorFragments.length === 1 ? selectorFragments[0] : selectorFragments;
|
|
453
|
+
const cssRule = {
|
|
454
|
+
selector,
|
|
455
|
+
declarations,
|
|
456
|
+
};
|
|
457
|
+
if (group.atRules.length > 0) {
|
|
458
|
+
cssRule.atRules = group.atRules;
|
|
459
|
+
}
|
|
460
|
+
if (group.rootPrefix) {
|
|
461
|
+
cssRule.rootPrefix = group.rootPrefix;
|
|
462
|
+
}
|
|
463
|
+
rules.push(cssRule);
|
|
464
|
+
}
|
|
465
|
+
return rules;
|
|
466
|
+
}
|
|
467
|
+
export function renderStyles(styles, classNameOrSelector) {
|
|
468
|
+
// Check if we have a direct selector/className
|
|
469
|
+
const directSelector = !!classNameOrSelector;
|
|
470
|
+
if (!styles) {
|
|
471
|
+
return directSelector ? [] : { rules: [] };
|
|
472
|
+
}
|
|
473
|
+
// Check cache
|
|
474
|
+
const cacheKey = stringifyStyles(styles);
|
|
475
|
+
let rules = pipelineCache.get(cacheKey);
|
|
476
|
+
if (!rules) {
|
|
477
|
+
// Create parser context
|
|
478
|
+
const parserContext = createStateParserContext(styles);
|
|
479
|
+
// Run pipeline
|
|
480
|
+
rules = runPipeline(styles, parserContext);
|
|
481
|
+
// Cache result
|
|
482
|
+
pipelineCache.set(cacheKey, rules);
|
|
483
|
+
}
|
|
484
|
+
// Direct selector/className mode: return StyleResult[] directly
|
|
485
|
+
if (directSelector) {
|
|
486
|
+
return rules.map((rule) => {
|
|
487
|
+
// Handle selector as array (OR conditions) or string
|
|
488
|
+
const selectorParts = Array.isArray(rule.selector)
|
|
489
|
+
? rule.selector
|
|
490
|
+
: rule.selector
|
|
491
|
+
? [rule.selector]
|
|
492
|
+
: [''];
|
|
493
|
+
let finalSelector = selectorParts
|
|
494
|
+
.map((part) => {
|
|
495
|
+
let sel = part
|
|
496
|
+
? `${classNameOrSelector}${part}`
|
|
497
|
+
: classNameOrSelector;
|
|
498
|
+
// Increase specificity for tasty class selectors by duplicating the class
|
|
499
|
+
if (sel.startsWith('.') && /^\.t\d+/.test(sel)) {
|
|
500
|
+
const classMatch = sel.match(/^\.t\d+/);
|
|
501
|
+
if (classMatch) {
|
|
502
|
+
const baseClass = classMatch[0];
|
|
503
|
+
sel = baseClass + sel;
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
// Handle root prefix for this selector
|
|
507
|
+
if (rule.rootPrefix) {
|
|
508
|
+
sel = `${rule.rootPrefix} ${sel}`;
|
|
509
|
+
}
|
|
510
|
+
return sel;
|
|
511
|
+
})
|
|
512
|
+
.join(', ');
|
|
513
|
+
const result = {
|
|
514
|
+
selector: finalSelector,
|
|
515
|
+
declarations: rule.declarations,
|
|
516
|
+
};
|
|
517
|
+
if (rule.atRules && rule.atRules.length > 0) {
|
|
518
|
+
result.atRules = rule.atRules;
|
|
519
|
+
}
|
|
520
|
+
return result;
|
|
521
|
+
});
|
|
522
|
+
}
|
|
523
|
+
// No className mode: return RenderResult with needsClassName flag
|
|
524
|
+
// Normalize selector to string (join array with placeholder that injector will handle)
|
|
525
|
+
return {
|
|
526
|
+
rules: rules.map((r) => ({
|
|
527
|
+
selector: Array.isArray(r.selector)
|
|
528
|
+
? r.selector.join('|||')
|
|
529
|
+
: r.selector,
|
|
530
|
+
declarations: r.declarations,
|
|
531
|
+
atRules: r.atRules,
|
|
532
|
+
needsClassName: true,
|
|
533
|
+
rootPrefix: r.rootPrefix,
|
|
534
|
+
})),
|
|
535
|
+
};
|
|
536
|
+
}
|
|
537
|
+
export { and, or, not, trueCondition, falseCondition } from './conditions.js';
|
|
538
|
+
export { parseStateKey } from './parseStateKey.js';
|
|
539
|
+
export { simplifyCondition } from './simplify.js';
|
|
540
|
+
export { buildExclusiveConditions } from './exclusive.js';
|
|
541
|
+
export { conditionToCSS } from './materialize.js';
|
|
542
|
+
|
|
543
|
+
|