@cube-dev/ui-kit 0.106.1 → 0.107.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 +13 -0
- package/es/_internal/hooks/index.js +1 -1
- package/es/_internal/hooks/use-chained-callback.js +1 -1
- package/es/_internal/hooks/use-debounced-value.js +1 -1
- package/es/_internal/hooks/use-deprecation-warning.js +1 -1
- package/es/_internal/hooks/use-effect-once.js +1 -1
- package/es/_internal/hooks/use-event.js +1 -1
- package/es/_internal/hooks/use-is-first-render.js +1 -1
- package/es/_internal/hooks/use-sync-ref.js +1 -1
- package/es/_internal/hooks/use-timer/index.js +1 -1
- package/es/_internal/hooks/use-timer/timer.js +1 -1
- package/es/_internal/hooks/use-timer/use-timer.js +1 -1
- package/es/_internal/hooks/use-update-effect.js +1 -1
- package/es/_internal/hooks/use-warn.js +1 -1
- package/es/_internal/index.js +1 -1
- package/es/components/Block.js +1 -1
- package/es/components/CollectionItem.js +1 -1
- package/es/components/GlobalStyles.js +1 -1
- package/es/components/GridProvider.js +1 -1
- package/es/components/HiddenInput.js +1 -1
- package/es/components/OpenTrasition.js +1 -1
- package/es/components/Root.js +1 -1
- package/es/components/actions/Action/Action.js +1 -1
- package/es/components/actions/Button/Button.js +1 -1
- package/es/components/actions/Button/index.js +1 -1
- package/es/components/actions/ButtonGroup/ButtonGroup.js +1 -1
- package/es/components/actions/CommandMenu/CommandMenu.js +1 -1
- package/es/components/actions/CommandMenu/index.js +1 -1
- package/es/components/actions/CommandMenu/styled.js +1 -1
- package/es/components/actions/ItemAction/ItemAction.js +1 -1
- package/es/components/actions/ItemAction/index.js +1 -1
- package/es/components/actions/ItemActionContext.js +1 -1
- package/es/components/actions/ItemButton/ItemButton.js +1 -1
- package/es/components/actions/ItemButton/index.js +1 -1
- package/es/components/actions/Link/Link.js +1 -1
- package/es/components/actions/Menu/Menu.js +1 -1
- package/es/components/actions/Menu/MenuItem.js +1 -1
- package/es/components/actions/Menu/MenuSection.js +1 -1
- package/es/components/actions/Menu/MenuTrigger.js +1 -1
- package/es/components/actions/Menu/SubMenuTrigger.js +1 -1
- package/es/components/actions/Menu/SubmenuTriggerContext.js +1 -1
- package/es/components/actions/Menu/context.js +1 -1
- package/es/components/actions/Menu/index.js +1 -1
- package/es/components/actions/Menu/styled.js +1 -1
- package/es/components/actions/index.js +1 -1
- package/es/components/actions/use-action.js +1 -1
- package/es/components/actions/use-anchored-menu.js +1 -1
- package/es/components/actions/use-context-menu.js +1 -1
- package/es/components/content/ActiveZone/ActiveZone.js +1 -1
- package/es/components/content/Alert/Alert.js +1 -1
- package/es/components/content/Alert/index.js +1 -1
- package/es/components/content/Alert/types.js +1 -1
- package/es/components/content/Alert/use-alert.js +1 -1
- package/es/components/content/Avatar/Avatar.js +1 -1
- package/es/components/content/Badge/Badge.js +1 -1
- package/es/components/content/Card/Card.js +1 -1
- package/es/components/content/Content.js +1 -1
- package/es/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
- package/es/components/content/CopyPasteBlock/index.js +1 -1
- package/es/components/content/CopySnippet/CopySnippet.js +1 -1
- package/es/components/content/CopySnippet/index.js +1 -1
- package/es/components/content/Disclosure/Disclosure.js +1 -1
- package/es/components/content/Disclosure/index.js +1 -1
- package/es/components/content/Divider.js +1 -1
- package/es/components/content/Footer.js +1 -1
- package/es/components/content/Header.js +1 -1
- package/es/components/content/HotKeys/HotKeys.js +1 -1
- package/es/components/content/HotKeys/index.js +1 -1
- package/es/components/content/Item/Item.js +1 -1
- package/es/components/content/Item/index.js +1 -1
- package/es/components/content/ItemBadge/ItemBadge.js +1 -1
- package/es/components/content/ItemBadge/index.js +1 -1
- package/es/components/content/Layout/GridLayout.js +1 -1
- package/es/components/content/Layout/Layout.js +1 -1
- package/es/components/content/Layout/LayoutBlock.js +1 -1
- package/es/components/content/Layout/LayoutCenter.js +1 -1
- package/es/components/content/Layout/LayoutContainer.js +1 -1
- package/es/components/content/Layout/LayoutContent.js +1 -1
- package/es/components/content/Layout/LayoutContext.js +1 -1
- package/es/components/content/Layout/LayoutFlex.js +1 -1
- package/es/components/content/Layout/LayoutFooter.js +1 -1
- package/es/components/content/Layout/LayoutGrid.js +1 -1
- package/es/components/content/Layout/LayoutHeader.js +1 -1
- package/es/components/content/Layout/LayoutPane.js +1 -1
- package/es/components/content/Layout/LayoutPanel.js +1 -1
- package/es/components/content/Layout/LayoutPanelHeader.js +1 -1
- package/es/components/content/Layout/LayoutToolbar.js +1 -1
- package/es/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
- package/es/components/content/Layout/index.js +1 -1
- package/es/components/content/Layout/utils.js +1 -1
- package/es/components/content/List/SectionHeading.js +1 -1
- package/es/components/content/List/index.js +1 -1
- package/es/components/content/Paragraph.js +1 -1
- package/es/components/content/Placeholder/Placeholder.js +1 -1
- package/es/components/content/PrismCode/PrismCode.js +1 -1
- package/es/components/content/PrismCode/prismSetup.js +1 -1
- package/es/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
- package/es/components/content/Result/Result.js +1 -1
- package/es/components/content/Skeleton/Skeleton.js +1 -1
- package/es/components/content/Tag/Tag.js +1 -1
- package/es/components/content/Text.js +1 -1
- package/es/components/content/TextItem/TextItem.js +1 -1
- package/es/components/content/TextItem/index.js +1 -1
- package/es/components/content/Title.js +1 -1
- package/es/components/content/highlightText.js +1 -1
- package/es/components/content/use-auto-tooltip.js +1 -1
- package/es/components/fields/Checkbox/Checkbox.js +1 -1
- package/es/components/fields/Checkbox/CheckboxGroup.js +1 -1
- package/es/components/fields/Checkbox/context.js +1 -1
- package/es/components/fields/Checkbox/index.js +1 -1
- package/es/components/fields/ComboBox/ComboBox.js +1 -1
- package/es/components/fields/ComboBox/index.js +1 -1
- package/es/components/fields/DatePicker/DateInput.js +1 -1
- package/es/components/fields/DatePicker/DateInputBase.js +1 -1
- package/es/components/fields/DatePicker/DatePicker.js +1 -1
- package/es/components/fields/DatePicker/DatePickerButton.js +1 -1
- package/es/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/es/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/es/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/es/components/fields/DatePicker/DateRangePicker.js +1 -1
- package/es/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
- package/es/components/fields/DatePicker/TimeInput.js +1 -1
- package/es/components/fields/DatePicker/index.js +1 -1
- package/es/components/fields/DatePicker/intl.js +1 -1
- package/es/components/fields/DatePicker/parseDate.js +1 -1
- package/es/components/fields/DatePicker/props.js +1 -1
- package/es/components/fields/DatePicker/types.js +1 -1
- package/es/components/fields/DatePicker/utils.js +1 -1
- package/es/components/fields/FileInput/FileInput.js +1 -1
- package/es/components/fields/FilterListBox/FilterListBox.js +1 -1
- package/es/components/fields/FilterListBox/index.js +1 -1
- package/es/components/fields/FilterPicker/FilterPicker.js +1 -1
- package/es/components/fields/FilterPicker/index.js +1 -1
- package/es/components/fields/Input/Input.js +1 -1
- package/es/components/fields/Input/index.js +1 -1
- package/es/components/fields/ListBox/ListBox.js +1 -1
- package/es/components/fields/ListBox/index.js +1 -1
- package/es/components/fields/NumberInput/NumberInput.js +1 -1
- package/es/components/fields/NumberInput/StepButton.js +1 -1
- package/es/components/fields/PasswordInput/PasswordInput.js +1 -1
- package/es/components/fields/Picker/Picker.js +1 -1
- package/es/components/fields/Picker/index.js +1 -1
- package/es/components/fields/RadioGroup/Radio.js +1 -1
- package/es/components/fields/RadioGroup/RadioGroup.js +1 -1
- package/es/components/fields/RadioGroup/context.js +1 -1
- package/es/components/fields/RadioGroup/index.js +1 -1
- package/es/components/fields/SearchInput/SearchInput.js +1 -1
- package/es/components/fields/SearchInput/index.js +1 -1
- package/es/components/fields/Select/Select.js +1 -1
- package/es/components/fields/Select/index.js +1 -1
- package/es/components/fields/Slider/Gradation.js +1 -1
- package/es/components/fields/Slider/Header.js +1 -1
- package/es/components/fields/Slider/RangeSlider.js +1 -1
- package/es/components/fields/Slider/Slider.js +1 -1
- package/es/components/fields/Slider/SliderBase.js +1 -1
- package/es/components/fields/Slider/SliderInput.js +1 -1
- package/es/components/fields/Slider/SliderThumb.js +1 -1
- package/es/components/fields/Slider/SliderTrack.js +1 -1
- package/es/components/fields/Slider/elements.js +1 -1
- package/es/components/fields/Slider/index.js +1 -1
- package/es/components/fields/Slider/types.js +1 -1
- package/es/components/fields/Switch/Switch.js +1 -1
- package/es/components/fields/Switch/index.js +1 -1
- package/es/components/fields/TextArea/TextArea.js +1 -1
- package/es/components/fields/TextArea/index.js +1 -1
- package/es/components/fields/TextInput/TextInput.js +1 -1
- package/es/components/fields/TextInput/TextInputBase.js +1 -1
- package/es/components/fields/TextInput/index.js +1 -1
- package/es/components/fields/TextInputMapper/TextInputMapper.js +1 -1
- package/es/components/fields/TextInputMapper/index.js +1 -1
- package/es/components/fields/index.js +1 -1
- package/es/components/form/FieldWrapper/FieldWrapper.js +1 -1
- package/es/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
- package/es/components/form/FieldWrapper/index.js +1 -1
- package/es/components/form/FieldWrapper/types.js +1 -1
- package/es/components/form/Form/Field.js +1 -1
- package/es/components/form/Form/Form.js +1 -1
- package/es/components/form/Form/ResetButton/ResetButton.js +1 -1
- package/es/components/form/Form/ResetButton/index.js +1 -1
- package/es/components/form/Form/SubmitButton/SubmitButton.js +1 -1
- package/es/components/form/Form/SubmitButton/index.js +1 -1
- package/es/components/form/Form/SubmitError.js +1 -1
- package/es/components/form/Form/index.js +1 -1
- package/es/components/form/Form/types.js +1 -1
- package/es/components/form/Form/use-field/index.js +1 -1
- package/es/components/form/Form/use-field/types.js +1 -1
- package/es/components/form/Form/use-field/use-field-props.js +1 -1
- package/es/components/form/Form/use-field/use-field.js +1 -1
- package/es/components/form/Form/use-form.js +1 -1
- package/es/components/form/Form/validation.js +1 -1
- package/es/components/form/Label.js +1 -1
- package/es/components/form/index.js +1 -1
- package/es/components/form/wrapper.js +1 -1
- package/es/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
- package/es/components/helpers/DisplayTransition/index.js +1 -1
- package/es/components/helpers/IconSwitch/IconSwitch.js +1 -1
- package/es/components/helpers/index.js +1 -1
- package/es/components/layout/Flex.js +1 -1
- package/es/components/layout/Flow.js +1 -1
- package/es/components/layout/Grid.js +1 -1
- package/es/components/layout/Panel.js +1 -1
- package/es/components/layout/Prefix.js +1 -1
- package/es/components/layout/ResizablePanel.js +1 -1
- package/es/components/layout/Space.js +1 -1
- package/es/components/layout/Suffix.js +1 -1
- package/es/components/navigation/Tabs/DraggableTabList.js +1 -1
- package/es/components/navigation/Tabs/EditableTitle.js +1 -1
- package/es/components/navigation/Tabs/TabButton.js +1 -1
- package/es/components/navigation/Tabs/TabDropIndicator.js +1 -1
- package/es/components/navigation/Tabs/TabPanel.js +1 -1
- package/es/components/navigation/Tabs/TabPicker.js +1 -1
- package/es/components/navigation/Tabs/Tabs.js +1 -1
- package/es/components/navigation/Tabs/TabsAction.js +1 -1
- package/es/components/navigation/Tabs/TabsContext.js +1 -1
- package/es/components/navigation/Tabs/index.js +1 -1
- package/es/components/navigation/Tabs/styled.js +1 -1
- package/es/components/navigation/Tabs/types.js +1 -1
- package/es/components/navigation/Tabs/use-tab-editing.js +1 -1
- package/es/components/navigation/Tabs/use-tab-indicator.js +1 -1
- package/es/components/navigation/index.js +1 -1
- package/es/components/organisms/FileTabs/FileTabs.js +1 -1
- package/es/components/organisms/StatsCard/StatsCard.js +1 -1
- package/es/components/other/Calendar/Calendar.js +1 -1
- package/es/components/other/Calendar/CalendarCell.js +1 -1
- package/es/components/other/Calendar/CalendarGrid.js +1 -1
- package/es/components/other/Calendar/RangeCalendar.js +1 -1
- package/es/components/other/CloudLogo/CloudLogo.js +1 -1
- package/es/components/overlays/AlertDialog/AlertDialog.js +1 -1
- package/es/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
- package/es/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
- package/es/components/overlays/AlertDialog/index.js +1 -1
- package/es/components/overlays/AlertDialog/types.js +1 -1
- package/es/components/overlays/Dialog/Dialog.js +1 -1
- package/es/components/overlays/Dialog/DialogContainer.js +1 -1
- package/es/components/overlays/Dialog/DialogForm.js +1 -1
- package/es/components/overlays/Dialog/DialogTrigger.js +1 -1
- package/es/components/overlays/Dialog/context.js +1 -1
- package/es/components/overlays/Dialog/index.js +1 -1
- package/es/components/overlays/Dialog/use-dialog-container.js +1 -1
- package/es/components/overlays/Modal/Modal.js +1 -1
- package/es/components/overlays/Modal/OpenTransition.js +1 -1
- package/es/components/overlays/Modal/Overlay.js +1 -1
- package/es/components/overlays/Modal/Popover.js +1 -1
- package/es/components/overlays/Modal/Tray.js +1 -1
- package/es/components/overlays/Modal/Underlay.js +1 -1
- package/es/components/overlays/Modal/index.js +1 -1
- package/es/components/overlays/Modal/types.js +1 -1
- package/es/components/overlays/NewNotifications/Bar/FloatingNotification.js +1 -1
- package/es/components/overlays/NewNotifications/Bar/NotificationsBar.js +1 -1
- package/es/components/overlays/NewNotifications/Bar/TransitionComponent.js +1 -1
- package/es/components/overlays/NewNotifications/Bar/index.js +1 -1
- package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogContext.js +1 -1
- package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.js +1 -1
- package/es/components/overlays/NewNotifications/Dialog/index.js +1 -1
- package/es/components/overlays/NewNotifications/Notification.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationAction.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationDescription.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationFooter.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationHeader.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationIcon.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationProvider.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationView.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/index.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/types.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsContext/index.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsContext/use-notifications.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsList/NotificationsList.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsList/index.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsList/types.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/index.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/types.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/use-notification-list-item.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/use-notifications-api.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/use-notifications-list.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/use-notifications-observer.js +1 -1
- package/es/components/overlays/NewNotifications/index.js +1 -1
- package/es/components/overlays/NewNotifications/types.js +1 -1
- package/es/components/overlays/Notification/Notification.js +1 -1
- package/es/components/overlays/OverlayWrapper.js +1 -1
- package/es/components/overlays/Toast/ToastItem.js +1 -1
- package/es/components/overlays/Toast/ToastProvider.js +1 -1
- package/es/components/overlays/Toast/index.js +1 -1
- package/es/components/overlays/Toast/types.js +1 -1
- package/es/components/overlays/Toast/useProgressToast.js +1 -1
- package/es/components/overlays/Toast/useToast.js +1 -1
- package/es/components/overlays/Tooltip/Tooltip.js +1 -1
- package/es/components/overlays/Tooltip/TooltipProvider.js +1 -1
- package/es/components/overlays/Tooltip/TooltipTrigger.js +1 -1
- package/es/components/overlays/Tooltip/context.js +1 -1
- package/es/components/overlays/Tooltip/index.js +1 -1
- package/es/components/portal/Portal.js +1 -1
- package/es/components/portal/PortalProvider.js +1 -1
- package/es/components/portal/index.js +1 -1
- package/es/components/portal/types.js +1 -1
- package/es/components/portal/usePortal.js +1 -1
- package/es/components/shared/InvalidIcon.js +1 -1
- package/es/components/shared/ValidIcon.js +1 -1
- package/es/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
- package/es/components/status/LoadingAnimation/index.js +1 -1
- package/es/components/status/Spin/Cube.js +1 -1
- package/es/components/status/Spin/InternalSpinner.js +1 -1
- package/es/components/status/Spin/Spin.js +1 -1
- package/es/components/status/Spin/SpinsContainer.js +1 -1
- package/es/components/status/Spin/index.js +1 -1
- package/es/components/status/Spin/types.js +1 -1
- package/es/components/status/index.js +1 -1
- package/es/data/item-themes.js +1 -1
- package/es/data/themes.js +1 -1
- package/es/icons/AdjustmentsHorizontalIcon.js +1 -1
- package/es/icons/AdjustmentsIcon.js +1 -1
- package/es/icons/AiIcon.js +1 -1
- package/es/icons/AreaChartIcon.js +1 -1
- package/es/icons/BackwardIcon.js +1 -1
- package/es/icons/BarChartIcon.js +1 -1
- package/es/icons/BellFilledIcon.js +1 -1
- package/es/icons/BellIcon.js +1 -1
- package/es/icons/BooleanIcon.js +1 -1
- package/es/icons/CalendarEditIcon.js +1 -1
- package/es/icons/CalendarIcon.js +1 -1
- package/es/icons/CaretDownIcon.js +1 -1
- package/es/icons/CaretUpIcon.js +1 -1
- package/es/icons/ChartAreaStackedIcon.js +1 -1
- package/es/icons/ChartAreaStackedPercentageIcon.js +1 -1
- package/es/icons/ChartBarGroupedHorizontalIcon.js +1 -1
- package/es/icons/ChartBarGroupedIcon.js +1 -1
- package/es/icons/ChartBarHorizontalIcon.js +1 -1
- package/es/icons/ChartBarLineIcon.js +1 -1
- package/es/icons/ChartBarStackedHorizontalIcon.js +1 -1
- package/es/icons/ChartBarStackedIcon.js +1 -1
- package/es/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
- package/es/icons/ChartBarStackedPercentageIcon.js +1 -1
- package/es/icons/ChartBoxPlot2Icon.js +1 -1
- package/es/icons/ChartBoxPlotIcon.js +1 -1
- package/es/icons/ChartBubbleIcon.js +1 -1
- package/es/icons/ChartDonut2Icon.js +1 -1
- package/es/icons/ChartFunnelIcon.js +1 -1
- package/es/icons/ChartHeatmapIcon.js +1 -1
- package/es/icons/ChartKPIIcon.js +1 -1
- package/es/icons/ChartPie2Icon.js +1 -1
- package/es/icons/ChartScatterIcon.js +1 -1
- package/es/icons/CheckCircleFilledIcon.js +1 -1
- package/es/icons/CheckCircleIcon.js +1 -1
- package/es/icons/CheckIcon.js +1 -1
- package/es/icons/CircleFilledIcon.js +1 -1
- package/es/icons/ClearIcon.js +1 -1
- package/es/icons/CloseCircleFilledIcon.js +1 -1
- package/es/icons/CloseCircleIcon.js +1 -1
- package/es/icons/CloseIcon.js +1 -1
- package/es/icons/CodeIcon.js +1 -1
- package/es/icons/ColumnTotalIcon.js +1 -1
- package/es/icons/CopyIcon.js +1 -1
- package/es/icons/CountIcon.js +1 -1
- package/es/icons/CubeIcon.js +1 -1
- package/es/icons/CubePauseIcon.js +1 -1
- package/es/icons/CubePlayIcon.js +1 -1
- package/es/icons/CurrencyDollarIcon.js +1 -1
- package/es/icons/DangerIcon.js +1 -1
- package/es/icons/DashboardIcon.js +1 -1
- package/es/icons/DatabaseIcon.js +1 -1
- package/es/icons/DecimalDecreaseIcon.js +1 -1
- package/es/icons/DecimalIncreaseIcon.js +1 -1
- package/es/icons/DirectionIcon.js +1 -1
- package/es/icons/DonutIcon.js +1 -1
- package/es/icons/DownIcon.js +1 -1
- package/es/icons/EditIcon.js +1 -1
- package/es/icons/ExclamationCircleFilledIcon.js +1 -1
- package/es/icons/ExclamationCircleIcon.js +1 -1
- package/es/icons/ExclamationIcon.js +1 -1
- package/es/icons/EyeIcon.js +1 -1
- package/es/icons/EyeInvisibleIcon.js +1 -1
- package/es/icons/FilterIcon.js +1 -1
- package/es/icons/FolderFilledIcon.js +1 -1
- package/es/icons/FolderIcon.js +1 -1
- package/es/icons/FolderOpenFilledIcon.js +1 -1
- package/es/icons/FolderOpenIcon.js +1 -1
- package/es/icons/ForwardIcon.js +1 -1
- package/es/icons/HierarchyIcon.js +1 -1
- package/es/icons/HierarchyOpenIcon.js +1 -1
- package/es/icons/Icon.js +1 -1
- package/es/icons/InfoCircleIcon.js +1 -1
- package/es/icons/InfoIcon.js +1 -1
- package/es/icons/KeyIcon.js +1 -1
- package/es/icons/LeftIcon.js +1 -1
- package/es/icons/LineChartIcon.js +1 -1
- package/es/icons/LoadingIcon.js +1 -1
- package/es/icons/LockFilledIcon.js +1 -1
- package/es/icons/LockIcon.js +1 -1
- package/es/icons/MoreIcon.js +1 -1
- package/es/icons/NotAllowedIcon.js +1 -1
- package/es/icons/Number123Icon.js +1 -1
- package/es/icons/NumberIcon.js +1 -1
- package/es/icons/PauseCircleFilledIcon.js +1 -1
- package/es/icons/PauseCircleIcon.js +1 -1
- package/es/icons/PauseIcon.js +1 -1
- package/es/icons/PercentageIcon.js +1 -1
- package/es/icons/PieChartIcon.js +1 -1
- package/es/icons/PlayCircleIcon.js +1 -1
- package/es/icons/PlayIcon.js +1 -1
- package/es/icons/PlusIcon.js +1 -1
- package/es/icons/ProgressBarIcon.js +1 -1
- package/es/icons/ReloadIcon.js +1 -1
- package/es/icons/ReportIcon.js +1 -1
- package/es/icons/ReturnIcon.js +1 -1
- package/es/icons/RightIcon.js +1 -1
- package/es/icons/RowTotalsIcon.js +1 -1
- package/es/icons/SchemeIcon.js +1 -1
- package/es/icons/SearchIcon.js +1 -1
- package/es/icons/SemanticQueryIcon.js +1 -1
- package/es/icons/SettingsIcon.js +1 -1
- package/es/icons/ShieldFilledIcon.js +1 -1
- package/es/icons/ShieldIcon.js +1 -1
- package/es/icons/SlashIcon.js +1 -1
- package/es/icons/SparklesIcon.js +1 -1
- package/es/icons/SqlIcon.js +1 -1
- package/es/icons/StatsIcon.js +1 -1
- package/es/icons/StopIcon.js +1 -1
- package/es/icons/StringIcon.js +1 -1
- package/es/icons/SubtotalsIcon.js +1 -1
- package/es/icons/SwitchIcon.js +1 -1
- package/es/icons/TableIcon.js +1 -1
- package/es/icons/ThumbsDownIcon.js +1 -1
- package/es/icons/ThumbsUpIcon.js +1 -1
- package/es/icons/ThunderboltCrossedIcon.js +1 -1
- package/es/icons/ThunderboltFilledIcon.js +1 -1
- package/es/icons/ThunderboltIcon.js +1 -1
- package/es/icons/TimeIcon.js +1 -1
- package/es/icons/TrashIcon.js +1 -1
- package/es/icons/UnlockIcon.js +1 -1
- package/es/icons/UpIcon.js +1 -1
- package/es/icons/UserGroupIcon.js +1 -1
- package/es/icons/UserIcon.js +1 -1
- package/es/icons/UserLockIcon.js +1 -1
- package/es/icons/ViewIcon.js +1 -1
- package/es/icons/WarningFilledIcon.js +1 -1
- package/es/icons/WarningIcon.js +1 -1
- package/es/icons/index.js +1 -1
- package/es/icons/wrap-icon.js +1 -1
- package/es/index.js +1 -1
- package/es/provider.js +1 -1
- package/es/providers/TrackingProvider.js +1 -1
- package/es/providers/navigation.types.js +1 -1
- package/es/providers/navigationAdapter.default.js +1 -1
- package/es/services/notification.js +1 -1
- package/es/shared/form.js +1 -1
- package/es/shared/index.js +1 -1
- package/es/stories/Form.legacy-stories.js +1 -1
- package/es/stories/FormFieldArgs.js +1 -1
- package/es/stories/SimpleLayout.stories.js +1 -1
- package/es/stories/Tasty.stories.js +1 -1
- package/es/stories/components/ConfirmDeletionDialogForm.js +1 -1
- package/es/stories/components/DialogFormApp.js +1 -1
- package/es/stories/components/StyledButton.js +1 -1
- package/es/stories/lists/baseProps.js +1 -1
- package/es/stories/playground/PlaygroundEditor.js +1 -1
- package/es/stories/playground/PlaygroundLayout.js +1 -1
- package/es/stories/playground/PlaygroundOutput.js +1 -1
- package/es/stories/playground/PlaygroundPreview.js +1 -1
- package/es/stories/playground/components/Button.js +1 -1
- package/es/stories/playground/components/Card.js +1 -1
- package/es/stories/playground/components/ScrollProgress.js +1 -1
- package/es/stories/playground/examples.js +1 -1
- package/es/tasty/chunks/cacheKey.js +1 -1
- package/es/tasty/chunks/definitions.js +1 -1
- package/es/tasty/chunks/index.js +1 -1
- package/es/tasty/chunks/renderChunk.js +1 -1
- package/es/tasty/config.js +1 -1
- package/es/tasty/debug.js +1 -1
- package/es/tasty/hooks/index.js +1 -1
- package/es/tasty/hooks/useGlobalStyles.js +1 -1
- package/es/tasty/hooks/useKeyframes.js +1 -1
- package/es/tasty/hooks/useProperty.js +1 -1
- package/es/tasty/hooks/useRawCSS.js +1 -1
- package/es/tasty/hooks/useStyles.js +1 -1
- package/es/tasty/index.js +1 -1
- package/es/tasty/injector/index.js +1 -1
- package/es/tasty/injector/injector.js +1 -1
- package/es/tasty/injector/sheet-manager.js +1 -1
- package/es/tasty/injector/types.js +1 -1
- package/es/tasty/keyframes/index.js +1 -1
- package/es/tasty/parser/classify.js +1 -1
- package/es/tasty/parser/const.js +1 -1
- package/es/tasty/parser/lru.js +1 -1
- package/es/tasty/parser/parser.js +1 -1
- package/es/tasty/parser/tokenizer.js +1 -1
- package/es/tasty/parser/types.js +1 -1
- package/es/tasty/pipeline/conditions.js +1 -1
- package/es/tasty/pipeline/exclusive.js +1 -1
- package/es/tasty/pipeline/index.js +445 -37
- package/es/tasty/pipeline/materialize.js +1 -1
- package/es/tasty/pipeline/parseStateKey.js +1 -1
- package/es/tasty/pipeline/simplify.js +1 -1
- package/es/tasty/plugins/index.js +1 -1
- package/es/tasty/plugins/okhsl-plugin.js +1 -1
- package/es/tasty/plugins/types.js +1 -1
- package/es/tasty/properties/index.js +1 -1
- package/es/tasty/states/index.js +1 -1
- package/es/tasty/static/index.js +1 -1
- package/es/tasty/static/tastyStatic.js +1 -1
- package/es/tasty/static/types.js +1 -1
- package/es/tasty/styles/align.js +1 -1
- package/es/tasty/styles/border.js +1 -1
- package/es/tasty/styles/boxShadow.combinator.js +1 -1
- package/es/tasty/styles/color.js +1 -1
- package/es/tasty/styles/createStyle.js +1 -1
- package/es/tasty/styles/dimension.js +1 -1
- package/es/tasty/styles/display.js +1 -1
- package/es/tasty/styles/fade.js +1 -1
- package/es/tasty/styles/fill.js +1 -1
- package/es/tasty/styles/flow.js +1 -1
- package/es/tasty/styles/gap.js +1 -1
- package/es/tasty/styles/height.js +1 -1
- package/es/tasty/styles/index.js +1 -1
- package/es/tasty/styles/inset.js +1 -1
- package/es/tasty/styles/justify.js +1 -1
- package/es/tasty/styles/list.js +1 -1
- package/es/tasty/styles/margin.js +1 -1
- package/es/tasty/styles/outline.js +1 -1
- package/es/tasty/styles/padding.js +1 -1
- package/es/tasty/styles/place.js +1 -1
- package/es/tasty/styles/predefined.js +1 -1
- package/es/tasty/styles/preset.js +1 -1
- package/es/tasty/styles/radius.js +1 -1
- package/es/tasty/styles/reset.js +1 -1
- package/es/tasty/styles/scrollbar.js +1 -1
- package/es/tasty/styles/shadow.js +1 -1
- package/es/tasty/styles/styledScrollbar.js +1 -1
- package/es/tasty/styles/transition.js +1 -1
- package/es/tasty/styles/types.js +1 -1
- package/es/tasty/styles/width.js +1 -1
- package/es/tasty/tasty.js +1 -1
- package/es/tasty/types.js +1 -1
- package/es/tasty/utils/cache-wrapper.js +1 -1
- package/es/tasty/utils/case-converter.js +1 -1
- package/es/tasty/utils/colors.js +1 -1
- package/es/tasty/utils/dotize.js +1 -1
- package/es/tasty/utils/filter-base-props.js +1 -1
- package/es/tasty/utils/get-display-name.js +1 -1
- package/es/tasty/utils/hsl-to-rgb.js +1 -1
- package/es/tasty/utils/is-dev-env.js +1 -1
- package/es/tasty/utils/merge-styles.js +1 -1
- package/es/tasty/utils/mod-attrs.js +1 -1
- package/es/tasty/utils/okhsl-to-rgb.js +1 -1
- package/es/tasty/utils/process-tokens.js +1 -1
- package/es/tasty/utils/rgb-to-okhsl.js +1 -1
- package/es/tasty/utils/string.js +1 -1
- package/es/tasty/utils/styles.js +1 -1
- package/es/tasty/utils/typography.js +1 -1
- package/es/tasty/utils/warnings.js +1 -1
- package/es/tasty/zero/babel.js +1 -1
- package/es/tasty/zero/css-writer.js +1 -1
- package/es/tasty/zero/extractor.js +1 -1
- package/es/tasty/zero/index.js +1 -1
- package/es/tasty/zero/next.js +1 -1
- package/es/tokens/base.js +1 -1
- package/es/tokens/colors.js +1 -1
- package/es/tokens/index.js +1 -1
- package/es/tokens/layout.js +1 -1
- package/es/tokens/shadows.js +1 -1
- package/es/tokens/sizes.js +1 -1
- package/es/tokens/spacing.js +1 -1
- package/es/tokens/typography.js +1 -1
- package/es/utils/ResizeSensor.js +1 -1
- package/es/utils/index.js +1 -1
- package/es/utils/modules.js +1 -1
- package/es/utils/promise.js +1 -1
- package/es/utils/raf.js +1 -1
- package/es/utils/random.js +1 -1
- package/es/utils/range.js +1 -1
- package/es/utils/react/RenderCache.js +1 -1
- package/es/utils/react/Slots.js +1 -1
- package/es/utils/react/chain.js +1 -1
- package/es/utils/react/forwardRefWithGenerics.js +1 -1
- package/es/utils/react/index.js +1 -1
- package/es/utils/react/interactions.js +1 -1
- package/es/utils/react/isTextOnly.js +1 -1
- package/es/utils/react/mapProps.js +1 -1
- package/es/utils/react/mergeProps.js +1 -1
- package/es/utils/react/nullableValue.js +1 -1
- package/es/utils/react/resolveIcon.js +1 -1
- package/es/utils/react/sharedStore.js +1 -1
- package/es/utils/react/useCombinedRefs.js +1 -1
- package/es/utils/react/useControlledFocusVisible.js +1 -1
- package/es/utils/react/useEventBus.js +1 -1
- package/es/utils/react/useId.js +1 -1
- package/es/utils/react/useIsDarwin.js +1 -1
- package/es/utils/react/useKeySymbols.js +1 -1
- package/es/utils/react/useLayoutEffect.js +1 -1
- package/es/utils/react/useLocalStorage.js +1 -1
- package/es/utils/react/useQaProps.js +1 -1
- package/es/utils/react/useViewportSize.js +1 -1
- package/es/utils/react/wrapNodeIfPlain.js +1 -1
- package/es/utils/tree.js +1 -1
- package/es/utils/warnings.js +1 -1
- package/es/version.js +2 -2
- package/package.json +1 -1
- package/types/tasty/pipeline/index.d.ts +17 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license MIT
|
|
3
3
|
* author: Cube Dev Team
|
|
4
|
-
* @cube-dev/ui-kit v0.
|
|
4
|
+
* @cube-dev/ui-kit v0.107.0
|
|
5
5
|
* Released under the MIT license.
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -125,15 +125,19 @@ function processStyles(styles, selectorSuffix, parserContext, allRules) {
|
|
|
125
125
|
const nestedStyles = styles[key];
|
|
126
126
|
if (!nestedStyles || typeof nestedStyles !== 'object')
|
|
127
127
|
continue;
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
128
|
+
// Get all selectors (handles comma-separated patterns)
|
|
129
|
+
const suffixes = getAllSelectors(key, nestedStyles);
|
|
130
|
+
if (!suffixes)
|
|
131
|
+
continue; // Invalid selector, skip
|
|
132
|
+
// Create sub-element context for @own() validation
|
|
133
|
+
const subContext = {
|
|
134
|
+
...parserContext,
|
|
135
|
+
isSubElement: true,
|
|
136
|
+
};
|
|
137
|
+
// Remove $ from nested styles
|
|
138
|
+
const { $: _omit, ...cleanedStyles } = nestedStyles;
|
|
139
|
+
// Process for each selector (multiple selectors = same styles applied to each)
|
|
140
|
+
for (const suffix of suffixes) {
|
|
137
141
|
processStyles(cleanedStyles, selectorSuffix + suffix, subContext, allRules);
|
|
138
142
|
}
|
|
139
143
|
}
|
|
@@ -233,44 +237,446 @@ export function isSelector(key) {
|
|
|
233
237
|
return key.startsWith('&') || key.startsWith('.') || /^[A-Z]/.test(key);
|
|
234
238
|
}
|
|
235
239
|
/**
|
|
236
|
-
* Get selector
|
|
240
|
+
* Get all selector suffixes for a sub-element key.
|
|
241
|
+
*
|
|
242
|
+
* Handles three types of selector keys:
|
|
243
|
+
* - `&` prefix: Raw selector suffix (e.g., `&:hover` → `:hover`)
|
|
244
|
+
* - `.` prefix: Class selector (e.g., `.active` → ` .active`)
|
|
245
|
+
* - Uppercase: Sub-element with optional `$` affix pattern
|
|
246
|
+
*
|
|
247
|
+
* @param key - The sub-element key (e.g., 'Label', '&:hover', '.active')
|
|
248
|
+
* @param styles - The styles object, may contain `$` property for selector affix
|
|
249
|
+
* @returns Array of selector suffixes, or null if invalid (with console warning)
|
|
250
|
+
*
|
|
251
|
+
* @example
|
|
252
|
+
* getAllSelectors('Label', {})
|
|
253
|
+
* // → [' [data-element="Label"]']
|
|
254
|
+
*
|
|
255
|
+
* getAllSelectors('Cell', { $: '>, >Body>' })
|
|
256
|
+
* // → ['> [data-element="Cell"]', ' [data-element="Body"] > [data-element="Cell"]']
|
|
237
257
|
*/
|
|
238
|
-
function
|
|
258
|
+
function getAllSelectors(key, styles) {
|
|
239
259
|
if (key.startsWith('&')) {
|
|
240
|
-
return key.slice(1);
|
|
260
|
+
return [key.slice(1)];
|
|
241
261
|
}
|
|
242
262
|
if (key.startsWith('.')) {
|
|
243
|
-
return ` ${key}
|
|
263
|
+
return [` ${key}`];
|
|
244
264
|
}
|
|
245
265
|
if (/^[A-Z]/.test(key)) {
|
|
246
266
|
const affix = styles?.$;
|
|
247
267
|
if (affix !== undefined) {
|
|
248
|
-
const
|
|
249
|
-
|
|
268
|
+
const result = processAffix(String(affix), key);
|
|
269
|
+
if (!result.valid) {
|
|
270
|
+
console.warn(`[Tasty] ${result.reason}`);
|
|
271
|
+
return null; // Skip this sub-element entirely
|
|
272
|
+
}
|
|
273
|
+
return result.selectors;
|
|
250
274
|
}
|
|
251
|
-
return ` [data-element="${key}"]
|
|
275
|
+
return [` [data-element="${key}"]`];
|
|
252
276
|
}
|
|
253
277
|
return null;
|
|
254
278
|
}
|
|
255
279
|
/**
|
|
256
|
-
*
|
|
280
|
+
* Process selector affix pattern and return selector(s)
|
|
281
|
+
*
|
|
282
|
+
* Supports:
|
|
283
|
+
* - Direct child: '>'
|
|
284
|
+
* - Chained elements: '>Body>Row>'
|
|
285
|
+
* - HTML tags: 'a', '>ul>li', 'button:hover'
|
|
286
|
+
* - Pseudo-elements on root: '::before'
|
|
287
|
+
* - Pseudo on sub-element: '@::before', '>@:hover'
|
|
288
|
+
* - Classes: '.active', '>@.active'
|
|
289
|
+
* - Multiple selectors: '>, >Body>'
|
|
290
|
+
* - Sibling combinators (after element): '>Item+', '>Item~'
|
|
257
291
|
*/
|
|
258
|
-
function
|
|
292
|
+
function processAffix(affix, key) {
|
|
259
293
|
const trimmed = affix.trim();
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
294
|
+
// Empty = default behavior (descendant selector with key)
|
|
295
|
+
if (!trimmed) {
|
|
296
|
+
return { valid: true, selectors: [` [data-element="${key}"]`] };
|
|
297
|
+
}
|
|
298
|
+
// Split by comma for multiple selectors
|
|
299
|
+
const patterns = trimmed.split(',').map((p) => p.trim());
|
|
300
|
+
const selectors = [];
|
|
301
|
+
for (const pattern of patterns) {
|
|
302
|
+
const validation = validatePattern(pattern);
|
|
303
|
+
if (!validation.valid) {
|
|
304
|
+
return validation;
|
|
305
|
+
}
|
|
306
|
+
const selector = processSinglePattern(pattern, key);
|
|
307
|
+
selectors.push(selector);
|
|
308
|
+
}
|
|
309
|
+
return { valid: true, selectors };
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Recognized token patterns for selector affix validation.
|
|
313
|
+
*
|
|
314
|
+
* These patterns are used to tokenize and validate `$` affix strings.
|
|
315
|
+
* Order matters: more specific patterns must come first to avoid
|
|
316
|
+
* partial matches (e.g., `::before` must match before `:` alone).
|
|
317
|
+
*
|
|
318
|
+
* Unrecognized tokens (like `#id`, `*`, or numbers) will cause validation to fail.
|
|
319
|
+
*/
|
|
320
|
+
const VALID_TOKEN_PATTERNS = [
|
|
321
|
+
/^[>+~]/, // Combinators: >, +, ~
|
|
322
|
+
/^[A-Z][a-zA-Z0-9]*/, // Uppercase element names → [data-element="..."]
|
|
323
|
+
/^@/, // @ placeholder for key injection position
|
|
324
|
+
/^::?[a-z][a-z0-9-]*(?:\([^)]*\))?/, // Pseudo-elements/classes (:hover, ::before, :not(.x))
|
|
325
|
+
/^\.[a-zA-Z_-][a-zA-Z0-9_-]*/, // Class selectors (.active, .is-open)
|
|
326
|
+
/^\[[^\]]+\]/, // Attribute selectors ([type="text"], [role])
|
|
327
|
+
/^[a-z][a-z0-9-]*/, // HTML tag names (a, div, button, my-component)
|
|
328
|
+
/^\s+/, // Whitespace (ignored during parsing)
|
|
329
|
+
/^&/, // Root reference (stripped, kept for backward compat)
|
|
330
|
+
];
|
|
331
|
+
/**
|
|
332
|
+
* Scan a pattern for unrecognized tokens.
|
|
333
|
+
*
|
|
334
|
+
* Iterates through the pattern, consuming recognized tokens until
|
|
335
|
+
* either the pattern is fully consumed (valid) or an unrecognized
|
|
336
|
+
* character sequence is found (invalid).
|
|
337
|
+
*
|
|
338
|
+
* @param pattern - The selector pattern to validate
|
|
339
|
+
* @returns The first unrecognized token found, or null if all tokens are valid
|
|
340
|
+
*
|
|
341
|
+
* @example
|
|
342
|
+
* findUnrecognizedTokens('>Body>Row>') // → null (valid)
|
|
343
|
+
* findUnrecognizedTokens('123') // → '123' (invalid)
|
|
344
|
+
* findUnrecognizedTokens('#myId') // → '#' (invalid)
|
|
345
|
+
*/
|
|
346
|
+
function findUnrecognizedTokens(pattern) {
|
|
347
|
+
let remaining = pattern;
|
|
348
|
+
while (remaining.length > 0) {
|
|
349
|
+
let matched = false;
|
|
350
|
+
for (const regex of VALID_TOKEN_PATTERNS) {
|
|
351
|
+
const match = remaining.match(regex);
|
|
352
|
+
if (match) {
|
|
353
|
+
remaining = remaining.slice(match[0].length);
|
|
354
|
+
matched = true;
|
|
355
|
+
break;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
if (!matched) {
|
|
359
|
+
// Found unrecognized content - extract the problematic part
|
|
360
|
+
const unrecognized = remaining.match(/^[^\s>+~@.:[\]A-Z]+/);
|
|
361
|
+
return unrecognized ? unrecognized[0] : remaining[0];
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
return null;
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Validate a selector pattern for structural correctness.
|
|
368
|
+
*
|
|
369
|
+
* Checks for:
|
|
370
|
+
* 1. Out-of-scope selectors: Patterns starting with `+` or `~` target siblings
|
|
371
|
+
* of the root element, which is outside the component's DOM scope.
|
|
372
|
+
* 2. Consecutive combinators: Patterns like `>>` or `>+` are malformed CSS.
|
|
373
|
+
* 3. Unrecognized tokens: Characters/sequences not matching valid CSS selectors.
|
|
374
|
+
*
|
|
375
|
+
* @param pattern - A single selector pattern (already split by comma)
|
|
376
|
+
* @returns AffixResult indicating validity and error reason if invalid
|
|
377
|
+
*
|
|
378
|
+
* @example
|
|
379
|
+
* validatePattern('>Body>Row>') // → { valid: true, selectors: [] }
|
|
380
|
+
* validatePattern('+') // → { valid: false, reason: '...outside root scope...' }
|
|
381
|
+
* validatePattern('>>') // → { valid: false, reason: '...consecutive combinators...' }
|
|
382
|
+
*/
|
|
383
|
+
function validatePattern(pattern) {
|
|
384
|
+
const trimmed = pattern.trim();
|
|
385
|
+
// Patterns starting with + or ~ target siblings of the root element,
|
|
386
|
+
// which is outside the component's scope. Valid sibling patterns must
|
|
387
|
+
// be preceded by an element: ">Item+", ">Item~"
|
|
388
|
+
if (/^[+~]/.test(trimmed)) {
|
|
389
|
+
return {
|
|
390
|
+
valid: false,
|
|
391
|
+
reason: `Selector affix "${pattern}" targets elements outside the root scope. ` +
|
|
392
|
+
`Sibling selectors (+, ~) must be preceded by an element inside the root. ` +
|
|
393
|
+
`Use ">Element+" or ">Element~" instead.`,
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
// Check for consecutive combinators
|
|
397
|
+
if (/[>+~]{2,}/.test(trimmed.replace(/\s+/g, ''))) {
|
|
398
|
+
return {
|
|
399
|
+
valid: false,
|
|
400
|
+
reason: `Selector affix "${pattern}" contains consecutive combinators.`,
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
// Check for unrecognized tokens (e.g., lowercase text like "foo")
|
|
404
|
+
const unrecognized = findUnrecognizedTokens(trimmed);
|
|
405
|
+
if (unrecognized) {
|
|
406
|
+
return {
|
|
407
|
+
valid: false,
|
|
408
|
+
reason: `Selector affix "${pattern}" contains unrecognized token "${unrecognized}". ` +
|
|
409
|
+
`Valid tokens: combinators (>, +, ~), element names (Uppercase), ` +
|
|
410
|
+
`@ placeholder, pseudo (:hover, ::before), class (.name), attribute ([attr]).`,
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
return { valid: true, selectors: [] };
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Process a single selector pattern into a CSS selector suffix.
|
|
417
|
+
*
|
|
418
|
+
* This is the main transformation function that converts a `$` affix pattern
|
|
419
|
+
* into a valid CSS selector suffix. It handles:
|
|
420
|
+
*
|
|
421
|
+
* 1. `@` placeholder replacement with `[data-element="key"]`
|
|
422
|
+
* 2. Key injection based on pattern ending (see `shouldInjectKey`)
|
|
423
|
+
* 3. Proper spacing for descendant vs direct child selectors
|
|
424
|
+
*
|
|
425
|
+
* @param pattern - A single validated selector pattern
|
|
426
|
+
* @param key - The sub-element key to inject (e.g., 'Label', 'Cell')
|
|
427
|
+
* @returns CSS selector suffix ready to append to the root selector
|
|
428
|
+
*
|
|
429
|
+
* @example
|
|
430
|
+
* processSinglePattern('>', 'Row')
|
|
431
|
+
* // → '> [data-element="Row"]'
|
|
432
|
+
*
|
|
433
|
+
* processSinglePattern('>Body>Row>', 'Cell')
|
|
434
|
+
* // → '> [data-element="Body"] > [data-element="Row"] > [data-element="Cell"]'
|
|
435
|
+
*
|
|
436
|
+
* processSinglePattern('::before', 'Before')
|
|
437
|
+
* // → '::before' (no key injection for pseudo on root)
|
|
438
|
+
*
|
|
439
|
+
* processSinglePattern('>@:hover', 'Item')
|
|
440
|
+
* // → '> [data-element="Item"]:hover'
|
|
441
|
+
*/
|
|
442
|
+
function processSinglePattern(pattern, key) {
|
|
443
|
+
// Strip leading & if present (implicit root reference, kept for compat)
|
|
444
|
+
let normalized = pattern.replace(/^&/, '').trim();
|
|
445
|
+
if (!normalized) {
|
|
446
|
+
return ` [data-element="${key}"]`;
|
|
447
|
+
}
|
|
448
|
+
// Pseudo-elements/classes at start apply directly to root (no space prefix)
|
|
449
|
+
const startsWithPseudo = /^::?[a-z]/.test(normalized);
|
|
450
|
+
// Transform the pattern: convert element names and normalize spacing
|
|
451
|
+
let result = transformPattern(normalized);
|
|
452
|
+
// Handle @ placeholder: explicit key injection position
|
|
453
|
+
if (result.includes('@')) {
|
|
454
|
+
// Remove space between @ and following class/pseudo for proper attachment
|
|
455
|
+
// e.g., "@ .active" → "[el].active", but "@ > span" → "[el] > span"
|
|
456
|
+
result = result.replace(/@ (?=[.:])/g, '@');
|
|
457
|
+
result = result.replace(/@/g, `[data-element="${key}"]`);
|
|
458
|
+
if (!startsWithPseudo && !result.startsWith(' ')) {
|
|
459
|
+
result = ' ' + result;
|
|
460
|
+
}
|
|
461
|
+
return result;
|
|
462
|
+
}
|
|
463
|
+
// Auto-inject key based on pattern ending (see shouldInjectKey for rules)
|
|
464
|
+
if (shouldInjectKey(normalized)) {
|
|
465
|
+
result = result + ' ' + `[data-element="${key}"]`;
|
|
466
|
+
}
|
|
467
|
+
// Add space prefix for selectors targeting inside root (not pseudo on root)
|
|
468
|
+
if (!startsWithPseudo && !result.startsWith(' ')) {
|
|
469
|
+
result = ' ' + result;
|
|
470
|
+
}
|
|
471
|
+
return result;
|
|
472
|
+
}
|
|
473
|
+
/**
|
|
474
|
+
* Transform a selector pattern by converting element names and normalizing spacing.
|
|
475
|
+
*
|
|
476
|
+
* This is a character-by-character tokenizer that:
|
|
477
|
+
* - Converts uppercase names to `[data-element="Name"]` selectors
|
|
478
|
+
* - Adds proper spacing around combinators (>, +, ~)
|
|
479
|
+
* - Preserves lowercase tags, classes, pseudos, and attributes as-is
|
|
480
|
+
* - Keeps @ placeholder for later replacement
|
|
481
|
+
*
|
|
482
|
+
* The tokenizer handles these token types in order:
|
|
483
|
+
* 1. Whitespace (skipped)
|
|
484
|
+
* 2. Combinators: >, +, ~ (add surrounding spaces)
|
|
485
|
+
* 3. Uppercase names: Body, Row (convert to [data-element="..."])
|
|
486
|
+
* 4. @ placeholder (keep for later replacement)
|
|
487
|
+
* 5. Pseudo: :hover, ::before (attach to previous token)
|
|
488
|
+
* 6. Tags: a, div, button (keep as-is with spacing)
|
|
489
|
+
* 7. Classes: .active (attach to previous element/tag/placeholder)
|
|
490
|
+
* 8. Attributes: [type="text"] (keep as-is)
|
|
491
|
+
*
|
|
492
|
+
* @param pattern - The raw selector pattern to transform
|
|
493
|
+
* @returns Transformed pattern with proper CSS selector syntax
|
|
494
|
+
*
|
|
495
|
+
* @example
|
|
496
|
+
* transformPattern('>Body>Row>')
|
|
497
|
+
* // → '> [data-element="Body"] > [data-element="Row"] >'
|
|
498
|
+
*
|
|
499
|
+
* transformPattern('button.primary:hover')
|
|
500
|
+
* // → 'button.primary:hover'
|
|
501
|
+
*/
|
|
502
|
+
function transformPattern(pattern) {
|
|
503
|
+
let result = '';
|
|
504
|
+
let i = 0;
|
|
505
|
+
while (i < pattern.length) {
|
|
506
|
+
const char = pattern[i];
|
|
507
|
+
// Skip whitespace
|
|
508
|
+
if (/\s/.test(char)) {
|
|
509
|
+
i++;
|
|
510
|
+
continue;
|
|
511
|
+
}
|
|
512
|
+
// Combinator: > + ~
|
|
513
|
+
if (/[>+~]/.test(char)) {
|
|
514
|
+
// Add combinator with surrounding spaces
|
|
515
|
+
if (result && !result.endsWith(' ')) {
|
|
516
|
+
result += ' ';
|
|
517
|
+
}
|
|
518
|
+
result += char;
|
|
519
|
+
i++;
|
|
520
|
+
continue;
|
|
521
|
+
}
|
|
522
|
+
// Uppercase element name
|
|
523
|
+
if (/[A-Z]/.test(char)) {
|
|
524
|
+
// Read the full element name
|
|
525
|
+
let name = '';
|
|
526
|
+
while (i < pattern.length && /[a-zA-Z0-9]/.test(pattern[i])) {
|
|
527
|
+
name += pattern[i];
|
|
528
|
+
i++;
|
|
529
|
+
}
|
|
530
|
+
// Add with proper spacing
|
|
531
|
+
if (result && !result.endsWith(' ')) {
|
|
532
|
+
result += ' ';
|
|
533
|
+
}
|
|
534
|
+
result += `[data-element="${name}"]`;
|
|
535
|
+
continue;
|
|
536
|
+
}
|
|
537
|
+
// @ placeholder
|
|
538
|
+
if (char === '@') {
|
|
539
|
+
if (result && !result.endsWith(' ')) {
|
|
540
|
+
result += ' ';
|
|
541
|
+
}
|
|
542
|
+
result += '@';
|
|
543
|
+
i++;
|
|
544
|
+
// Don't add space after @ - let the next token attach if it's a class/pseudo
|
|
545
|
+
continue;
|
|
546
|
+
}
|
|
547
|
+
// Pseudo-element/class (::before, :hover)
|
|
548
|
+
if (char === ':') {
|
|
549
|
+
// Don't add space before pseudo if attached to previous element
|
|
550
|
+
let pseudo = '';
|
|
551
|
+
while (i < pattern.length &&
|
|
552
|
+
!/[\s>+~,@]/.test(pattern[i]) &&
|
|
553
|
+
!/[A-Z]/.test(pattern[i])) {
|
|
554
|
+
pseudo += pattern[i];
|
|
555
|
+
i++;
|
|
556
|
+
}
|
|
557
|
+
result += pseudo;
|
|
558
|
+
continue;
|
|
559
|
+
}
|
|
560
|
+
// Lowercase HTML tag name (a, div, button, my-component)
|
|
561
|
+
if (/[a-z]/.test(char)) {
|
|
562
|
+
let tag = '';
|
|
563
|
+
while (i < pattern.length && /[a-z0-9-]/.test(pattern[i])) {
|
|
564
|
+
tag += pattern[i];
|
|
565
|
+
i++;
|
|
566
|
+
}
|
|
567
|
+
// Add with proper spacing
|
|
568
|
+
if (result && !result.endsWith(' ')) {
|
|
569
|
+
result += ' ';
|
|
570
|
+
}
|
|
571
|
+
result += tag;
|
|
572
|
+
continue;
|
|
573
|
+
}
|
|
574
|
+
// Class (.active, .myClass, .navItem)
|
|
575
|
+
if (char === '.') {
|
|
576
|
+
// Keep attached if directly after ] (element), @ (placeholder), or alphanumeric (tag)
|
|
577
|
+
// Otherwise add space (standalone class selector)
|
|
578
|
+
const lastNonSpace = result.replace(/\s+$/, '').slice(-1);
|
|
579
|
+
const attachToLast = lastNonSpace === ']' ||
|
|
580
|
+
lastNonSpace === '@' ||
|
|
581
|
+
/[a-zA-Z0-9-]/.test(lastNonSpace);
|
|
582
|
+
if (result && !attachToLast && !result.endsWith(' ')) {
|
|
583
|
+
result += ' ';
|
|
584
|
+
}
|
|
585
|
+
// Start with the dot
|
|
586
|
+
let cls = '.';
|
|
587
|
+
i++;
|
|
588
|
+
// Class names can contain uppercase letters (camelCase, BEM, etc.)
|
|
589
|
+
// Stop at: whitespace, combinators, comma, @, or new token starters (. : [)
|
|
590
|
+
while (i < pattern.length && /[a-zA-Z0-9_-]/.test(pattern[i])) {
|
|
591
|
+
cls += pattern[i];
|
|
592
|
+
i++;
|
|
593
|
+
}
|
|
594
|
+
result += cls;
|
|
595
|
+
continue;
|
|
596
|
+
}
|
|
597
|
+
// Attribute selector [...]
|
|
598
|
+
if (char === '[') {
|
|
599
|
+
// Keep attached if directly after ] (element), @ (placeholder), or alphanumeric (tag)
|
|
600
|
+
// Otherwise add space (standalone attribute selector)
|
|
601
|
+
const lastNonSpace = result.replace(/\s+$/, '').slice(-1);
|
|
602
|
+
const attachToLast = lastNonSpace === ']' ||
|
|
603
|
+
lastNonSpace === '@' ||
|
|
604
|
+
/[a-zA-Z0-9-]/.test(lastNonSpace);
|
|
605
|
+
if (result && !attachToLast && !result.endsWith(' ')) {
|
|
606
|
+
result += ' ';
|
|
607
|
+
}
|
|
608
|
+
let attr = '';
|
|
609
|
+
let depth = 0;
|
|
610
|
+
while (i < pattern.length) {
|
|
611
|
+
attr += pattern[i];
|
|
612
|
+
if (pattern[i] === '[')
|
|
613
|
+
depth++;
|
|
614
|
+
if (pattern[i] === ']')
|
|
615
|
+
depth--;
|
|
616
|
+
i++;
|
|
617
|
+
if (depth === 0)
|
|
618
|
+
break;
|
|
619
|
+
}
|
|
620
|
+
result += attr;
|
|
621
|
+
continue;
|
|
622
|
+
}
|
|
623
|
+
// Other characters - just append
|
|
624
|
+
result += char;
|
|
625
|
+
i++;
|
|
626
|
+
}
|
|
627
|
+
return result;
|
|
628
|
+
}
|
|
629
|
+
/**
|
|
630
|
+
* Determine if the sub-element key should be auto-injected based on pattern ending.
|
|
631
|
+
*
|
|
632
|
+
* Key injection rules (when no @ placeholder is present):
|
|
633
|
+
*
|
|
634
|
+
* | Pattern Ending | Inject Key? | Example | Result |
|
|
635
|
+
* |----------------|-------------|---------|--------|
|
|
636
|
+
* | Combinator (>, +, ~) | Yes | `'>Body>'` | `> [data-element="Body"] > [el]` |
|
|
637
|
+
* | Uppercase element | Yes | `'>Body>Row'` | `> [el1] > [el2] [key]` |
|
|
638
|
+
* | Lowercase tag | Yes | `'>ul>li'` | `> ul > li [key]` |
|
|
639
|
+
* | Pseudo (:hover, ::before) | No | `'::before'` | `::before` |
|
|
640
|
+
* | Class (.active) | No | `'.active'` | `.active` |
|
|
641
|
+
* | Attribute ([type]) | No | `'[type="text"]'` | `[type="text"]` |
|
|
642
|
+
*
|
|
643
|
+
* @param pattern - The normalized pattern (after stripping &)
|
|
644
|
+
* @returns true if key should be injected, false otherwise
|
|
645
|
+
*
|
|
646
|
+
* @example
|
|
647
|
+
* shouldInjectKey('>') // → true (trailing combinator)
|
|
648
|
+
* shouldInjectKey('>Body>Row') // → true (ends with element)
|
|
649
|
+
* shouldInjectKey('>ul>li') // → true (ends with tag)
|
|
650
|
+
* shouldInjectKey('::before') // → false (ends with pseudo)
|
|
651
|
+
* shouldInjectKey('.active') // → false (ends with class)
|
|
652
|
+
* shouldInjectKey('a:hover') // → false (ends with pseudo)
|
|
653
|
+
* shouldInjectKey('button.primary') // → false (ends with class)
|
|
654
|
+
*/
|
|
655
|
+
function shouldInjectKey(pattern) {
|
|
656
|
+
const trimmed = pattern.trim();
|
|
657
|
+
// Rule 1: Ends with combinator → inject key after it
|
|
658
|
+
// e.g., '>' → '> [data-element="Key"]'
|
|
659
|
+
if (/[>+~]$/.test(trimmed)) {
|
|
660
|
+
return true;
|
|
661
|
+
}
|
|
662
|
+
// Rule 2: Ends with uppercase element name → inject key as descendant
|
|
663
|
+
// The lookbehind ensures we're matching a standalone element name, not
|
|
664
|
+
// part of a class like .myClass (where C is preceded by lowercase)
|
|
665
|
+
// e.g., '>Body' → '> [data-element="Body"] [data-element="Key"]'
|
|
666
|
+
if (/(?:^|[\s>+~\]:])[A-Z][a-zA-Z0-9]*$/.test(trimmed)) {
|
|
667
|
+
return true;
|
|
668
|
+
}
|
|
669
|
+
// Rule 3: Ends with lowercase tag name → inject key as descendant
|
|
670
|
+
// The negative lookbehind (?<![:.]) ensures we don't match:
|
|
671
|
+
// - ':hover' (pseudo ending)
|
|
672
|
+
// - '.primary' (class ending)
|
|
673
|
+
// e.g., '>ul>li' → '> ul > li [data-element="Key"]'
|
|
674
|
+
if (/(?<![:.])(?:^|[\s>+~])[a-z][a-z0-9-]*$/.test(trimmed)) {
|
|
675
|
+
return true;
|
|
676
|
+
}
|
|
677
|
+
// Rule 4: Otherwise (pseudo, class, attribute) → no injection
|
|
678
|
+
// The pattern is complete as-is, applying to root or a specific selector
|
|
679
|
+
return false;
|
|
274
680
|
}
|
|
275
681
|
/**
|
|
276
682
|
* Normalize selector suffix from $ property
|
|
@@ -464,7 +870,7 @@ function materializeComputedRule(rule) {
|
|
|
464
870
|
}
|
|
465
871
|
return rules;
|
|
466
872
|
}
|
|
467
|
-
export function renderStyles(styles, classNameOrSelector) {
|
|
873
|
+
export function renderStyles(styles, classNameOrSelector, options) {
|
|
468
874
|
// Check if we have a direct selector/className
|
|
469
875
|
const directSelector = !!classNameOrSelector;
|
|
470
876
|
if (!styles) {
|
|
@@ -483,6 +889,7 @@ export function renderStyles(styles, classNameOrSelector) {
|
|
|
483
889
|
}
|
|
484
890
|
// Direct selector/className mode: return StyleResult[] directly
|
|
485
891
|
if (directSelector) {
|
|
892
|
+
const shouldDouble = options?.doubleSelector ?? false;
|
|
486
893
|
return rules.map((rule) => {
|
|
487
894
|
// Handle selector as array (OR conditions) or string
|
|
488
895
|
const selectorParts = Array.isArray(rule.selector)
|
|
@@ -495,9 +902,10 @@ export function renderStyles(styles, classNameOrSelector) {
|
|
|
495
902
|
let sel = part
|
|
496
903
|
? `${classNameOrSelector}${part}`
|
|
497
904
|
: classNameOrSelector;
|
|
498
|
-
//
|
|
499
|
-
|
|
500
|
-
|
|
905
|
+
// Double class selector for increased specificity if requested
|
|
906
|
+
// This is used when the caller explicitly wants higher specificity
|
|
907
|
+
if (shouldDouble && sel.startsWith('.')) {
|
|
908
|
+
const classMatch = sel.match(/^\.[a-zA-Z_-][a-zA-Z0-9_-]*/);
|
|
501
909
|
if (classMatch) {
|
|
502
910
|
const baseClass = classMatch[0];
|
|
503
911
|
sel = baseClass + sel;
|
package/es/tasty/states/index.js
CHANGED
package/es/tasty/static/index.js
CHANGED
package/es/tasty/static/types.js
CHANGED
package/es/tasty/styles/align.js
CHANGED