@cube-dev/ui-kit 0.98.9 → 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 +36 -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 +15 -15
- 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 -11
- 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 +2 -2
- 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 -129
- 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/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/status/Spin/Cube.d.ts +1 -1
- package/types/components/status/Spin/SpinsContainer.d.ts +6 -3
- 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,523 @@
|
|
|
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
|
+
* Advanced State Mapping - Predefined States Management
|
|
10
|
+
*
|
|
11
|
+
* This module handles global and local predefined states for the Tasty styling system.
|
|
12
|
+
* See ADVANCED_STATE_MAPPING.md for full specification.
|
|
13
|
+
*/
|
|
14
|
+
import { hasStylesGenerated } from '../config.js';
|
|
15
|
+
import { isDevEnv } from '../utils/isDevEnv.js';
|
|
16
|
+
// Built-in state names that cannot be overridden
|
|
17
|
+
const BUILTIN_STATES = new Set(['@starting', '@keyframes', '@supports']);
|
|
18
|
+
// Reserved prefixes that are built-in
|
|
19
|
+
const RESERVED_PREFIXES = [
|
|
20
|
+
'@media',
|
|
21
|
+
'@root',
|
|
22
|
+
'@own',
|
|
23
|
+
'@(',
|
|
24
|
+
'@starting',
|
|
25
|
+
'@keyframes',
|
|
26
|
+
'@supports',
|
|
27
|
+
];
|
|
28
|
+
// Global predefined states storage
|
|
29
|
+
let globalPredefinedStates = {};
|
|
30
|
+
// Warnings tracking to avoid duplicates
|
|
31
|
+
const emittedWarnings = new Set();
|
|
32
|
+
const devMode = isDevEnv();
|
|
33
|
+
/**
|
|
34
|
+
* Emit a warning only once
|
|
35
|
+
*/
|
|
36
|
+
function warnOnce(key, message) {
|
|
37
|
+
if (devMode && !emittedWarnings.has(key)) {
|
|
38
|
+
emittedWarnings.add(key);
|
|
39
|
+
console.warn(message);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Configure global predefined states
|
|
44
|
+
*/
|
|
45
|
+
export function setGlobalPredefinedStates(states) {
|
|
46
|
+
if (hasStylesGenerated()) {
|
|
47
|
+
const newStateNames = Object.keys(states).join(', ');
|
|
48
|
+
warnOnce(`dynamic-states:${newStateNames}`, `[Tasty] Cannot update predefined states after styles have been generated.\n` +
|
|
49
|
+
`The new definition(s) for ${newStateNames} will be ignored.`);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
// Validate state names
|
|
53
|
+
for (const [name, value] of Object.entries(states)) {
|
|
54
|
+
// Check for valid name format
|
|
55
|
+
if (!/^@[A-Za-z][A-Za-z0-9-]*$/.test(name)) {
|
|
56
|
+
warnOnce(`invalid-state-name:${name}`, `[Tasty] Invalid predefined state name '${name}'. Must start with '@' followed by a letter.`);
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
// Check for reserved names
|
|
60
|
+
if (BUILTIN_STATES.has(name)) {
|
|
61
|
+
warnOnce(`reserved-state:${name}`, `[Tasty] Cannot define predefined state '${name}'. This name is reserved for built-in functionality.`);
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
// Check for reserved prefixes (but only exact matches, not user-defined states like @mobile)
|
|
65
|
+
// Reserved prefixes are: @media, @root, @own, @(
|
|
66
|
+
// A user state like @mobile should NOT be blocked
|
|
67
|
+
const isReservedPrefix = name === '@media' ||
|
|
68
|
+
name === '@root' ||
|
|
69
|
+
name === '@own' ||
|
|
70
|
+
name.startsWith('@(');
|
|
71
|
+
if (isReservedPrefix) {
|
|
72
|
+
warnOnce(`reserved-prefix:${name}`, `[Tasty] Cannot define predefined state '${name}'. This prefix is reserved for built-in functionality.`);
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
// Check for cross-references
|
|
76
|
+
const crossRefs = extractPredefinedStateRefs(value);
|
|
77
|
+
if (crossRefs.length > 0) {
|
|
78
|
+
warnOnce(`cross-ref:${name}`, `[Tasty] Predefined state '${name}' references another predefined state '${crossRefs[0]}'.\n` +
|
|
79
|
+
`Predefined states cannot reference each other. Use the full definition instead.`);
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
// Check for duplicates
|
|
83
|
+
if (globalPredefinedStates[name] &&
|
|
84
|
+
globalPredefinedStates[name] !== value) {
|
|
85
|
+
warnOnce(`duplicate-state:${name}`, `[Tasty] Duplicate predefined state '${name}' in configure(). The last definition will be used.`);
|
|
86
|
+
}
|
|
87
|
+
globalPredefinedStates[name] = value;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get global predefined states
|
|
92
|
+
*/
|
|
93
|
+
export function getGlobalPredefinedStates() {
|
|
94
|
+
return globalPredefinedStates;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Clear global predefined states (for testing only)
|
|
98
|
+
*/
|
|
99
|
+
export function clearGlobalPredefinedStates() {
|
|
100
|
+
globalPredefinedStates = {};
|
|
101
|
+
emittedWarnings.clear();
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Regex to match predefined state references in a string
|
|
105
|
+
* Matches @name that is NOT followed by ( or : and is a complete word
|
|
106
|
+
* Uses word boundary and negative lookahead
|
|
107
|
+
*/
|
|
108
|
+
const PREDEFINED_STATE_PATTERN = /@([A-Za-z][A-Za-z0-9-]*)(?![A-Za-z0-9-:(])/g;
|
|
109
|
+
/**
|
|
110
|
+
* Extract predefined state references from a string
|
|
111
|
+
*/
|
|
112
|
+
export function extractPredefinedStateRefs(value) {
|
|
113
|
+
const matches = value.matchAll(PREDEFINED_STATE_PATTERN);
|
|
114
|
+
const refs = [];
|
|
115
|
+
for (const match of matches) {
|
|
116
|
+
const stateName = '@' + match[1];
|
|
117
|
+
// Skip built-in states (@starting) and duplicates
|
|
118
|
+
// Note: @media, @root, @own are always followed by '(' so the regex
|
|
119
|
+
// negative lookahead (?![A-Za-z0-9-:(]) already excludes them
|
|
120
|
+
if (!BUILTIN_STATES.has(stateName) && !refs.includes(stateName)) {
|
|
121
|
+
refs.push(stateName);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return refs;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Check if a state key is a predefined state reference
|
|
128
|
+
*/
|
|
129
|
+
export function isPredefinedStateRef(stateKey) {
|
|
130
|
+
if (!stateKey.startsWith('@'))
|
|
131
|
+
return false;
|
|
132
|
+
if (BUILTIN_STATES.has(stateKey))
|
|
133
|
+
return false;
|
|
134
|
+
// Check if it's NOT a built-in prefix
|
|
135
|
+
for (const prefix of RESERVED_PREFIXES) {
|
|
136
|
+
if (stateKey === prefix || stateKey.startsWith(prefix)) {
|
|
137
|
+
// Check if it's exactly @media, @root, @own, or starts with @( or @media(
|
|
138
|
+
if (stateKey === '@media' ||
|
|
139
|
+
stateKey.startsWith('@media(') ||
|
|
140
|
+
stateKey.startsWith('@media:')) {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
if (stateKey === '@root' || stateKey.startsWith('@root('))
|
|
144
|
+
return false;
|
|
145
|
+
if (stateKey === '@own' || stateKey.startsWith('@own('))
|
|
146
|
+
return false;
|
|
147
|
+
if (stateKey.startsWith('@('))
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Must match the predefined state pattern
|
|
152
|
+
return /^@[A-Za-z][A-Za-z0-9-]*$/.test(stateKey);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Extract local predefined states from a styles object
|
|
156
|
+
* Local predefined states are top-level keys starting with @ that have string values
|
|
157
|
+
* and are valid predefined state names (not built-in like @media, @root, etc.)
|
|
158
|
+
*/
|
|
159
|
+
export function extractLocalPredefinedStates(styles) {
|
|
160
|
+
const localStates = {};
|
|
161
|
+
if (!styles || typeof styles !== 'object') {
|
|
162
|
+
return localStates;
|
|
163
|
+
}
|
|
164
|
+
for (const [key, value] of Object.entries(styles)) {
|
|
165
|
+
// Check if it's a predefined state definition (starts with @, has string value)
|
|
166
|
+
if (key.startsWith('@') && typeof value === 'string') {
|
|
167
|
+
// Validate name format - must be @[letter][letters/numbers/dashes]*
|
|
168
|
+
if (!/^@[A-Za-z][A-Za-z0-9-]*$/.test(key)) {
|
|
169
|
+
continue; // Skip invalid names silently (might be something else)
|
|
170
|
+
}
|
|
171
|
+
// Skip built-in states
|
|
172
|
+
if (BUILTIN_STATES.has(key)) {
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
// Skip reserved prefixes
|
|
176
|
+
if (key === '@media' ||
|
|
177
|
+
key === '@root' ||
|
|
178
|
+
key === '@own' ||
|
|
179
|
+
key.startsWith('@(')) {
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
// Check for cross-references (predefined states cannot reference each other)
|
|
183
|
+
const crossRefs = extractPredefinedStateRefs(value);
|
|
184
|
+
if (crossRefs.length > 0) {
|
|
185
|
+
warnOnce(`local-cross-ref:${key}`, `[Tasty] Predefined state '${key}' references another predefined state '${crossRefs[0]}'.\n` +
|
|
186
|
+
`Predefined states cannot reference each other. Use the full definition instead.`);
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
localStates[key] = value;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return localStates;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Create a state parser context from styles
|
|
196
|
+
*/
|
|
197
|
+
export function createStateParserContext(styles, isSubElement) {
|
|
198
|
+
const localStates = styles ? extractLocalPredefinedStates(styles) : {};
|
|
199
|
+
return {
|
|
200
|
+
localPredefinedStates: localStates,
|
|
201
|
+
globalPredefinedStates: getGlobalPredefinedStates(),
|
|
202
|
+
isSubElement,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Resolve a predefined state reference to its value
|
|
207
|
+
* Returns the resolved value or null if not found
|
|
208
|
+
*/
|
|
209
|
+
export function resolvePredefinedState(stateKey, ctx) {
|
|
210
|
+
// Check local first (higher priority)
|
|
211
|
+
if (ctx.localPredefinedStates[stateKey]) {
|
|
212
|
+
return ctx.localPredefinedStates[stateKey];
|
|
213
|
+
}
|
|
214
|
+
// Then check global
|
|
215
|
+
if (ctx.globalPredefinedStates[stateKey]) {
|
|
216
|
+
return ctx.globalPredefinedStates[stateKey];
|
|
217
|
+
}
|
|
218
|
+
// Not found - emit warning
|
|
219
|
+
warnOnce(`undefined-state:${stateKey}`, `[Tasty] Undefined predefined state '${stateKey}'.\n` +
|
|
220
|
+
`Define it in configure({ states: { '${stateKey}': '...' } }) or in the component's styles.`);
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Normalize state key by trimming whitespace and removing trailing/leading operators
|
|
225
|
+
*/
|
|
226
|
+
export function normalizeStateKey(stateKey) {
|
|
227
|
+
const warnings = [];
|
|
228
|
+
let key = stateKey;
|
|
229
|
+
// Check for whitespace-only
|
|
230
|
+
if (key.trim() === '') {
|
|
231
|
+
if (key !== '') {
|
|
232
|
+
warnings.push(`[Tasty] Whitespace-only state key normalized to default state ''.`);
|
|
233
|
+
}
|
|
234
|
+
return { key: '', warnings };
|
|
235
|
+
}
|
|
236
|
+
// Trim whitespace
|
|
237
|
+
key = key.trim();
|
|
238
|
+
// Remove trailing operators
|
|
239
|
+
const trailingOpMatch = key.match(/\s*[&|^]\s*$/);
|
|
240
|
+
if (trailingOpMatch) {
|
|
241
|
+
const originalKey = key;
|
|
242
|
+
key = key.slice(0, -trailingOpMatch[0].length).trim();
|
|
243
|
+
warnings.push(`[Tasty] State key '${originalKey}' has trailing operator. Normalized to '${key}'.`);
|
|
244
|
+
}
|
|
245
|
+
// Remove leading operators (except !)
|
|
246
|
+
const leadingOpMatch = key.match(/^\s*[&|^]\s*/);
|
|
247
|
+
if (leadingOpMatch) {
|
|
248
|
+
const originalKey = key;
|
|
249
|
+
key = key.slice(leadingOpMatch[0].length).trim();
|
|
250
|
+
warnings.push(`[Tasty] State key '${originalKey}' has leading operator. Normalized to '${key}'.`);
|
|
251
|
+
}
|
|
252
|
+
return { key, warnings };
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Expand dimension shorthands in a condition string
|
|
256
|
+
* w -> width, h -> height, is -> inline-size, bs -> block-size
|
|
257
|
+
*/
|
|
258
|
+
export function expandDimensionShorthands(condition) {
|
|
259
|
+
// Replace dimension shorthands (only when they appear as standalone words)
|
|
260
|
+
let result = condition;
|
|
261
|
+
// w -> width (but not part of other words)
|
|
262
|
+
result = result.replace(/\bw\b/g, 'width');
|
|
263
|
+
// h -> height
|
|
264
|
+
result = result.replace(/\bh\b/g, 'height');
|
|
265
|
+
// is -> inline-size
|
|
266
|
+
result = result.replace(/\bis\b/g, 'inline-size');
|
|
267
|
+
// bs -> block-size
|
|
268
|
+
result = result.replace(/\bbs\b/g, 'block-size');
|
|
269
|
+
return result;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Convert tasty units in a string (e.g., 40x -> calc(var(--gap) * 40))
|
|
273
|
+
*/
|
|
274
|
+
export function expandTastyUnits(value) {
|
|
275
|
+
// Match number followed by 'x' unit (tasty gap unit)
|
|
276
|
+
return value.replace(/(\d+(?:\.\d+)?)\s*x\b/g, (_, num) => {
|
|
277
|
+
return `calc(var(--gap) * ${num})`;
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Parse an advanced state key and return its type and components
|
|
282
|
+
*/
|
|
283
|
+
export function parseAdvancedState(stateKey, ctx) {
|
|
284
|
+
const raw = stateKey;
|
|
285
|
+
// Check for @starting (exact match)
|
|
286
|
+
if (stateKey === '@starting') {
|
|
287
|
+
return {
|
|
288
|
+
type: 'starting',
|
|
289
|
+
condition: '',
|
|
290
|
+
raw,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
// Check for @media:type (e.g., @media:print)
|
|
294
|
+
if (stateKey.startsWith('@media:')) {
|
|
295
|
+
const mediaType = stateKey.slice(7); // Remove '@media:'
|
|
296
|
+
if (!['all', 'screen', 'print', 'speech'].includes(mediaType)) {
|
|
297
|
+
warnOnce(`unknown-media-type:${mediaType}`, `[Tasty] Unknown media type '${mediaType}'. Valid types: all, screen, print, speech.`);
|
|
298
|
+
}
|
|
299
|
+
return {
|
|
300
|
+
type: 'media',
|
|
301
|
+
condition: '',
|
|
302
|
+
mediaType,
|
|
303
|
+
raw,
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
// Check for @media(...) - media query with condition
|
|
307
|
+
if (stateKey.startsWith('@media(')) {
|
|
308
|
+
const endParen = findMatchingParen(stateKey, 6);
|
|
309
|
+
if (endParen === -1) {
|
|
310
|
+
warnOnce(`unclosed-media:${stateKey}`, `[Tasty] Unclosed media query '${stateKey}'. Missing closing parenthesis.`);
|
|
311
|
+
return { type: 'modifier', condition: stateKey, raw };
|
|
312
|
+
}
|
|
313
|
+
let condition = stateKey.slice(7, endParen);
|
|
314
|
+
// Check for empty condition
|
|
315
|
+
if (!condition.trim()) {
|
|
316
|
+
warnOnce(`empty-media:${stateKey}`, `[Tasty] Empty media query condition '${stateKey}'.`);
|
|
317
|
+
return { type: 'modifier', condition: stateKey, raw };
|
|
318
|
+
}
|
|
319
|
+
// Expand shorthands and units
|
|
320
|
+
condition = expandDimensionShorthands(condition);
|
|
321
|
+
condition = expandTastyUnits(condition);
|
|
322
|
+
return {
|
|
323
|
+
type: 'media',
|
|
324
|
+
condition,
|
|
325
|
+
raw,
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
// Check for @root(...) - root state
|
|
329
|
+
if (stateKey.startsWith('@root(')) {
|
|
330
|
+
const endParen = findMatchingParen(stateKey, 5);
|
|
331
|
+
if (endParen === -1) {
|
|
332
|
+
warnOnce(`unclosed-root:${stateKey}`, `[Tasty] Unclosed root state '${stateKey}'. Missing closing parenthesis.`);
|
|
333
|
+
return { type: 'modifier', condition: stateKey, raw };
|
|
334
|
+
}
|
|
335
|
+
const condition = stateKey.slice(6, endParen);
|
|
336
|
+
if (!condition.trim()) {
|
|
337
|
+
warnOnce(`empty-root:${stateKey}`, `[Tasty] Empty root state condition '${stateKey}'.`);
|
|
338
|
+
return { type: 'modifier', condition: stateKey, raw };
|
|
339
|
+
}
|
|
340
|
+
return {
|
|
341
|
+
type: 'root',
|
|
342
|
+
condition,
|
|
343
|
+
raw,
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
// Check for @own(...) - sub-element own state
|
|
347
|
+
if (stateKey.startsWith('@own(')) {
|
|
348
|
+
const endParen = findMatchingParen(stateKey, 4);
|
|
349
|
+
if (endParen === -1) {
|
|
350
|
+
warnOnce(`unclosed-own:${stateKey}`, `[Tasty] Unclosed own state '${stateKey}'. Missing closing parenthesis.`);
|
|
351
|
+
return { type: 'modifier', condition: stateKey, raw };
|
|
352
|
+
}
|
|
353
|
+
const condition = stateKey.slice(5, endParen);
|
|
354
|
+
if (!condition.trim()) {
|
|
355
|
+
warnOnce(`empty-own:${stateKey}`, `[Tasty] Empty own state condition '${stateKey}'.`);
|
|
356
|
+
return { type: 'modifier', condition: stateKey, raw };
|
|
357
|
+
}
|
|
358
|
+
// Check if used outside sub-element context
|
|
359
|
+
if (!ctx.isSubElement) {
|
|
360
|
+
warnOnce(`own-outside-subelement:${stateKey}`, `[Tasty] @own(${condition}) used outside sub-element context.\n` +
|
|
361
|
+
`@own() is equivalent to '${condition}' at the root level. ` +
|
|
362
|
+
`Did you mean to use it inside a sub-element?`);
|
|
363
|
+
// Treat as regular modifier
|
|
364
|
+
return {
|
|
365
|
+
type: 'modifier',
|
|
366
|
+
condition,
|
|
367
|
+
raw,
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
return {
|
|
371
|
+
type: 'own',
|
|
372
|
+
condition,
|
|
373
|
+
raw,
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
// Check for @(...) - container query (unnamed or named)
|
|
377
|
+
if (stateKey.startsWith('@(')) {
|
|
378
|
+
const endParen = findMatchingParen(stateKey, 1);
|
|
379
|
+
if (endParen === -1) {
|
|
380
|
+
warnOnce(`unclosed-container:${stateKey}`, `[Tasty] Unclosed container query '${stateKey}'. Missing closing parenthesis.`);
|
|
381
|
+
return { type: 'modifier', condition: stateKey, raw };
|
|
382
|
+
}
|
|
383
|
+
const content = stateKey.slice(2, endParen);
|
|
384
|
+
if (!content.trim()) {
|
|
385
|
+
warnOnce(`empty-container:${stateKey}`, `[Tasty] Empty container query '${stateKey}'.`);
|
|
386
|
+
return { type: 'modifier', condition: stateKey, raw };
|
|
387
|
+
}
|
|
388
|
+
// Check if named container (first token is name, followed by comma)
|
|
389
|
+
const commaIndex = content.indexOf(',');
|
|
390
|
+
let containerName;
|
|
391
|
+
let condition;
|
|
392
|
+
if (commaIndex !== -1) {
|
|
393
|
+
// Named container: @(layout, w < 600px)
|
|
394
|
+
containerName = content.slice(0, commaIndex).trim();
|
|
395
|
+
condition = content.slice(commaIndex + 1).trim();
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
// Unnamed container: @(w < 600px)
|
|
399
|
+
condition = content.trim();
|
|
400
|
+
}
|
|
401
|
+
// Check for style query (starts with $)
|
|
402
|
+
if (condition.startsWith('$')) {
|
|
403
|
+
// Style query: @(layout, $compact) or @(layout, $variant=compact)
|
|
404
|
+
const styleCondition = parseStyleQuery(condition);
|
|
405
|
+
if (!styleCondition) {
|
|
406
|
+
warnOnce(`invalid-style-query:${stateKey}`, `[Tasty] Invalid style query '${condition}' in container query.`);
|
|
407
|
+
return { type: 'modifier', condition: stateKey, raw };
|
|
408
|
+
}
|
|
409
|
+
condition = styleCondition;
|
|
410
|
+
}
|
|
411
|
+
else {
|
|
412
|
+
// Dimension query - expand shorthands and units
|
|
413
|
+
condition = expandDimensionShorthands(condition);
|
|
414
|
+
condition = expandTastyUnits(condition);
|
|
415
|
+
}
|
|
416
|
+
return {
|
|
417
|
+
type: 'container',
|
|
418
|
+
condition,
|
|
419
|
+
containerName,
|
|
420
|
+
raw,
|
|
421
|
+
};
|
|
422
|
+
}
|
|
423
|
+
// Check for predefined state reference
|
|
424
|
+
if (isPredefinedStateRef(stateKey)) {
|
|
425
|
+
const resolved = resolvePredefinedState(stateKey, ctx);
|
|
426
|
+
if (resolved) {
|
|
427
|
+
// Recursively parse the resolved value to extract the actual state type
|
|
428
|
+
// (e.g., @mobile -> @media(w < 768px) should become a media state)
|
|
429
|
+
const parsedResolved = parseAdvancedState(resolved, ctx);
|
|
430
|
+
return {
|
|
431
|
+
...parsedResolved,
|
|
432
|
+
raw, // Keep original raw for traceability
|
|
433
|
+
};
|
|
434
|
+
}
|
|
435
|
+
// If not resolved, treat as modifier (will likely produce invalid CSS)
|
|
436
|
+
return {
|
|
437
|
+
type: 'modifier',
|
|
438
|
+
condition: stateKey,
|
|
439
|
+
raw,
|
|
440
|
+
};
|
|
441
|
+
}
|
|
442
|
+
// Regular modifier (boolean mod, pseudo-class, class, attribute)
|
|
443
|
+
return {
|
|
444
|
+
type: 'modifier',
|
|
445
|
+
condition: stateKey,
|
|
446
|
+
raw,
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Parse a style query condition (e.g., $compact, $variant=compact, $variant="very compact")
|
|
451
|
+
*/
|
|
452
|
+
function parseStyleQuery(condition) {
|
|
453
|
+
// Remove $ prefix
|
|
454
|
+
const query = condition.slice(1);
|
|
455
|
+
// Check for comparison operators (not supported)
|
|
456
|
+
if (/[<>]/.test(query)) {
|
|
457
|
+
warnOnce(`style-query-comparison:${condition}`, `[Tasty] Style queries only support equality. '${condition}' is invalid. Use '${condition.split(/[<>]/)[0]}=...' instead.`);
|
|
458
|
+
return null;
|
|
459
|
+
}
|
|
460
|
+
// Check for equality
|
|
461
|
+
const eqIndex = query.indexOf('=');
|
|
462
|
+
if (eqIndex === -1) {
|
|
463
|
+
// Just existence check: style(--compact)
|
|
464
|
+
return `style(--${query})`;
|
|
465
|
+
}
|
|
466
|
+
const propName = query.slice(0, eqIndex).trim();
|
|
467
|
+
let value = query.slice(eqIndex + 1).trim();
|
|
468
|
+
// Handle quoted values
|
|
469
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
470
|
+
(value.startsWith("'") && value.endsWith("'"))) {
|
|
471
|
+
// Keep quotes for CSS
|
|
472
|
+
}
|
|
473
|
+
else {
|
|
474
|
+
// Add quotes if needed
|
|
475
|
+
value = `"${value}"`;
|
|
476
|
+
}
|
|
477
|
+
// Expand tasty units in value
|
|
478
|
+
value = expandTastyUnits(value);
|
|
479
|
+
return `style(--${propName}: ${value})`;
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* Find matching closing parenthesis
|
|
483
|
+
*/
|
|
484
|
+
function findMatchingParen(str, startIndex) {
|
|
485
|
+
let depth = 1;
|
|
486
|
+
let i = startIndex + 1;
|
|
487
|
+
while (i < str.length && depth > 0) {
|
|
488
|
+
if (str[i] === '(')
|
|
489
|
+
depth++;
|
|
490
|
+
else if (str[i] === ')')
|
|
491
|
+
depth--;
|
|
492
|
+
i++;
|
|
493
|
+
}
|
|
494
|
+
return depth === 0 ? i - 1 : -1;
|
|
495
|
+
}
|
|
496
|
+
/**
|
|
497
|
+
* Check if a state key is an advanced state (starts with @)
|
|
498
|
+
*/
|
|
499
|
+
export function isAdvancedState(stateKey) {
|
|
500
|
+
return stateKey.startsWith('@') || stateKey.startsWith('!@');
|
|
501
|
+
}
|
|
502
|
+
/**
|
|
503
|
+
* Detect the type of advanced state from a raw state key
|
|
504
|
+
*/
|
|
505
|
+
export function detectAdvancedStateType(stateKey) {
|
|
506
|
+
// Handle negation prefix
|
|
507
|
+
const key = stateKey.startsWith('!') ? stateKey.slice(1) : stateKey;
|
|
508
|
+
if (key === '@starting')
|
|
509
|
+
return 'starting';
|
|
510
|
+
if (key.startsWith('@media'))
|
|
511
|
+
return 'media';
|
|
512
|
+
if (key.startsWith('@root('))
|
|
513
|
+
return 'root';
|
|
514
|
+
if (key.startsWith('@own('))
|
|
515
|
+
return 'own';
|
|
516
|
+
if (key.startsWith('@('))
|
|
517
|
+
return 'container';
|
|
518
|
+
if (isPredefinedStateRef(key))
|
|
519
|
+
return 'predefined';
|
|
520
|
+
return 'modifier';
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
|
|
@@ -0,0 +1,47 @@
|
|
|
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
|
+
* Build-time only module for zero-runtime static site generation.
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { tastyStatic } from '@cube-dev/ui-kit/tasty/static';
|
|
14
|
+
*
|
|
15
|
+
* // Returns StaticStyle object (className + styles + toString)
|
|
16
|
+
* const button = tastyStatic({
|
|
17
|
+
* fill: '#blue',
|
|
18
|
+
* padding: '2x',
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* // Extend existing styles
|
|
22
|
+
* const primaryButton = tastyStatic(button, {
|
|
23
|
+
* fill: '#purple',
|
|
24
|
+
* });
|
|
25
|
+
*
|
|
26
|
+
* // Global styles (removed at build time)
|
|
27
|
+
* tastyStatic('.heading', { preset: 'h1' });
|
|
28
|
+
*
|
|
29
|
+
* // Usage in JSX
|
|
30
|
+
* <div className={button} /> // toString() coercion
|
|
31
|
+
* <div className={button.className} /> // Explicit
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* Requires the Babel plugin to be configured:
|
|
35
|
+
* ```javascript
|
|
36
|
+
* // babel.config.js
|
|
37
|
+
* plugins: [
|
|
38
|
+
* ['@cube-dev/ui-kit/tasty/zero/babel', { output: 'public/tasty.css' }]
|
|
39
|
+
* ]
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export { tastyStatic } from './tastyStatic.js';
|
|
43
|
+
export { createStaticStyle, isStaticStyle } from './types.js';
|
|
44
|
+
// Re-export mergeStyles for advanced use cases
|
|
45
|
+
export { mergeStyles } from '../utils/mergeStyles.js';
|
|
46
|
+
|
|
47
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
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
|
+
import { mergeStyles } from '../utils/mergeStyles.js';
|
|
9
|
+
import { createStaticStyle, isStaticStyle } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Build-time only function for zero-runtime static site generation.
|
|
12
|
+
*
|
|
13
|
+
* This function is transformed by the Babel plugin:
|
|
14
|
+
* - `tastyStatic(styles)` → StaticStyle object with className
|
|
15
|
+
* - `tastyStatic(base, styles)` → StaticStyle object with merged styles
|
|
16
|
+
* - `tastyStatic(selector, styles)` → removed entirely
|
|
17
|
+
*
|
|
18
|
+
* At runtime (during development/build), this function returns a placeholder.
|
|
19
|
+
* In production, all calls are replaced/removed by the build plugin.
|
|
20
|
+
*/
|
|
21
|
+
export function tastyStatic(stylesOrBaseOrSelector, styles) {
|
|
22
|
+
// This code only executes if the Babel plugin hasn't processed the file yet.
|
|
23
|
+
// In a properly configured build, this function is never called at runtime.
|
|
24
|
+
if (typeof stylesOrBaseOrSelector === 'string') {
|
|
25
|
+
// Selector mode: tastyStatic(selector, styles)
|
|
26
|
+
// The plugin will remove this call entirely
|
|
27
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
28
|
+
console.warn(`[tasty] tastyStatic('${stylesOrBaseOrSelector}', styles) was called at runtime. ` +
|
|
29
|
+
'This indicates the Babel plugin is not configured. ' +
|
|
30
|
+
'Add @cube-dev/ui-kit/tasty/zero/babel to your Babel config.');
|
|
31
|
+
}
|
|
32
|
+
return; // void
|
|
33
|
+
}
|
|
34
|
+
if (isStaticStyle(stylesOrBaseOrSelector)) {
|
|
35
|
+
// Extension mode: tastyStatic(base, styles)
|
|
36
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
37
|
+
console.warn('[tasty] tastyStatic(base, styles) was called at runtime. ' +
|
|
38
|
+
'This indicates the Babel plugin is not configured. ' +
|
|
39
|
+
'Add @cube-dev/ui-kit/tasty/zero/babel to your Babel config.');
|
|
40
|
+
}
|
|
41
|
+
// Merge styles for dev mode preview (won't have real classNames)
|
|
42
|
+
const mergedStyles = mergeStyles(stylesOrBaseOrSelector.styles, styles || {});
|
|
43
|
+
return createStaticStyle('__TASTY_STATIC_NOT_TRANSFORMED__', mergedStyles);
|
|
44
|
+
}
|
|
45
|
+
// Styles mode: tastyStatic(styles)
|
|
46
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
47
|
+
console.warn('[tasty] tastyStatic(styles) was called at runtime. ' +
|
|
48
|
+
'This indicates the Babel plugin is not configured. ' +
|
|
49
|
+
'Add @cube-dev/ui-kit/tasty/zero/babel to your Babel config.');
|
|
50
|
+
}
|
|
51
|
+
// Return placeholder - styles won't be applied without the plugin
|
|
52
|
+
return createStaticStyle('__TASTY_STATIC_NOT_TRANSFORMED__', stylesOrBaseOrSelector);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
|
|
@@ -0,0 +1,34 @@
|
|
|
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
|
+
* Create a StaticStyle object.
|
|
10
|
+
* Used internally by the Babel plugin to generate output.
|
|
11
|
+
*/
|
|
12
|
+
export function createStaticStyle(className, styles) {
|
|
13
|
+
return {
|
|
14
|
+
className,
|
|
15
|
+
styles,
|
|
16
|
+
toString() {
|
|
17
|
+
return this.className;
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Type guard to check if a value is a StaticStyle object.
|
|
23
|
+
*/
|
|
24
|
+
export function isStaticStyle(value) {
|
|
25
|
+
return (typeof value === 'object' &&
|
|
26
|
+
value !== null &&
|
|
27
|
+
'className' in value &&
|
|
28
|
+
'styles' in value &&
|
|
29
|
+
'toString' in value &&
|
|
30
|
+
typeof value.className === 'string' &&
|
|
31
|
+
typeof value.styles === 'object');
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
|
package/es/tasty/styles/align.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license MIT
|
|
3
3
|
* author: Cube Dev Team
|
|
4
|
-
* @cube-dev/ui-kit v0.
|
|
4
|
+
* @cube-dev/ui-kit v0.99.0
|
|
5
5
|
* Released under the MIT license.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import { DIRECTIONS, filterMods, parseStyle } from '../utils/styles';
|
|
8
|
+
import { DIRECTIONS, filterMods, parseStyle } from '../utils/styles.js';
|
|
9
9
|
const BORDER_STYLES = [
|
|
10
10
|
'none',
|
|
11
11
|
'hidden',
|