@cube-dev/ui-kit 0.106.0 → 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.
Files changed (600) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/es/_internal/hooks/index.js +1 -1
  3. package/es/_internal/hooks/use-chained-callback.js +1 -1
  4. package/es/_internal/hooks/use-debounced-value.js +1 -1
  5. package/es/_internal/hooks/use-deprecation-warning.js +1 -1
  6. package/es/_internal/hooks/use-effect-once.js +1 -1
  7. package/es/_internal/hooks/use-event.js +1 -1
  8. package/es/_internal/hooks/use-is-first-render.js +1 -1
  9. package/es/_internal/hooks/use-sync-ref.js +1 -1
  10. package/es/_internal/hooks/use-timer/index.js +1 -1
  11. package/es/_internal/hooks/use-timer/timer.js +1 -1
  12. package/es/_internal/hooks/use-timer/use-timer.js +1 -1
  13. package/es/_internal/hooks/use-update-effect.js +1 -1
  14. package/es/_internal/hooks/use-warn.js +1 -1
  15. package/es/_internal/index.js +1 -1
  16. package/es/components/Block.js +1 -1
  17. package/es/components/CollectionItem.js +1 -1
  18. package/es/components/GlobalStyles.js +1 -1
  19. package/es/components/GridProvider.js +1 -1
  20. package/es/components/HiddenInput.js +1 -1
  21. package/es/components/OpenTrasition.js +1 -1
  22. package/es/components/Root.js +1 -1
  23. package/es/components/actions/Action/Action.js +1 -1
  24. package/es/components/actions/Button/Button.js +1 -1
  25. package/es/components/actions/Button/index.js +1 -1
  26. package/es/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  27. package/es/components/actions/CommandMenu/CommandMenu.js +1 -1
  28. package/es/components/actions/CommandMenu/index.js +1 -1
  29. package/es/components/actions/CommandMenu/styled.js +1 -1
  30. package/es/components/actions/ItemAction/ItemAction.js +1 -1
  31. package/es/components/actions/ItemAction/index.js +1 -1
  32. package/es/components/actions/ItemActionContext.js +1 -1
  33. package/es/components/actions/ItemButton/ItemButton.js +1 -1
  34. package/es/components/actions/ItemButton/index.js +1 -1
  35. package/es/components/actions/Link/Link.js +1 -1
  36. package/es/components/actions/Menu/Menu.js +1 -1
  37. package/es/components/actions/Menu/MenuItem.js +1 -1
  38. package/es/components/actions/Menu/MenuSection.js +1 -1
  39. package/es/components/actions/Menu/MenuTrigger.js +1 -1
  40. package/es/components/actions/Menu/SubMenuTrigger.js +1 -1
  41. package/es/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  42. package/es/components/actions/Menu/context.js +1 -1
  43. package/es/components/actions/Menu/index.js +1 -1
  44. package/es/components/actions/Menu/styled.js +1 -1
  45. package/es/components/actions/index.js +1 -1
  46. package/es/components/actions/use-action.js +1 -1
  47. package/es/components/actions/use-anchored-menu.js +1 -1
  48. package/es/components/actions/use-context-menu.js +1 -1
  49. package/es/components/content/ActiveZone/ActiveZone.js +1 -1
  50. package/es/components/content/Alert/Alert.js +1 -1
  51. package/es/components/content/Alert/index.js +1 -1
  52. package/es/components/content/Alert/types.js +1 -1
  53. package/es/components/content/Alert/use-alert.js +1 -1
  54. package/es/components/content/Avatar/Avatar.js +1 -1
  55. package/es/components/content/Badge/Badge.js +1 -1
  56. package/es/components/content/Card/Card.js +1 -1
  57. package/es/components/content/Content.js +1 -1
  58. package/es/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  59. package/es/components/content/CopyPasteBlock/index.js +1 -1
  60. package/es/components/content/CopySnippet/CopySnippet.js +1 -1
  61. package/es/components/content/CopySnippet/index.js +1 -1
  62. package/es/components/content/Disclosure/Disclosure.js +1 -1
  63. package/es/components/content/Disclosure/index.js +1 -1
  64. package/es/components/content/Divider.js +1 -1
  65. package/es/components/content/Footer.js +1 -1
  66. package/es/components/content/Header.js +1 -1
  67. package/es/components/content/HotKeys/HotKeys.js +1 -1
  68. package/es/components/content/HotKeys/index.js +1 -1
  69. package/es/components/content/Item/Item.js +1 -1
  70. package/es/components/content/Item/index.js +1 -1
  71. package/es/components/content/ItemBadge/ItemBadge.js +1 -1
  72. package/es/components/content/ItemBadge/index.js +1 -1
  73. package/es/components/content/Layout/GridLayout.js +1 -1
  74. package/es/components/content/Layout/Layout.js +1 -1
  75. package/es/components/content/Layout/LayoutBlock.js +1 -1
  76. package/es/components/content/Layout/LayoutCenter.js +1 -1
  77. package/es/components/content/Layout/LayoutContainer.js +1 -1
  78. package/es/components/content/Layout/LayoutContent.js +1 -1
  79. package/es/components/content/Layout/LayoutContext.js +1 -1
  80. package/es/components/content/Layout/LayoutFlex.js +1 -1
  81. package/es/components/content/Layout/LayoutFooter.js +1 -1
  82. package/es/components/content/Layout/LayoutGrid.js +1 -1
  83. package/es/components/content/Layout/LayoutHeader.js +1 -1
  84. package/es/components/content/Layout/LayoutPane.js +1 -1
  85. package/es/components/content/Layout/LayoutPanel.js +1 -1
  86. package/es/components/content/Layout/LayoutPanelHeader.js +1 -1
  87. package/es/components/content/Layout/LayoutToolbar.js +1 -1
  88. package/es/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  89. package/es/components/content/Layout/index.js +1 -1
  90. package/es/components/content/Layout/utils.js +1 -1
  91. package/es/components/content/List/SectionHeading.js +1 -1
  92. package/es/components/content/List/index.js +1 -1
  93. package/es/components/content/Paragraph.js +1 -1
  94. package/es/components/content/Placeholder/Placeholder.js +1 -1
  95. package/es/components/content/PrismCode/PrismCode.js +1 -1
  96. package/es/components/content/PrismCode/prismSetup.js +1 -1
  97. package/es/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  98. package/es/components/content/Result/Result.js +1 -1
  99. package/es/components/content/Skeleton/Skeleton.js +1 -1
  100. package/es/components/content/Tag/Tag.js +1 -1
  101. package/es/components/content/Text.js +1 -1
  102. package/es/components/content/TextItem/TextItem.js +1 -1
  103. package/es/components/content/TextItem/index.js +1 -1
  104. package/es/components/content/Title.js +1 -1
  105. package/es/components/content/highlightText.js +1 -1
  106. package/es/components/content/use-auto-tooltip.js +1 -1
  107. package/es/components/fields/Checkbox/Checkbox.js +1 -1
  108. package/es/components/fields/Checkbox/CheckboxGroup.js +1 -1
  109. package/es/components/fields/Checkbox/context.js +1 -1
  110. package/es/components/fields/Checkbox/index.js +1 -1
  111. package/es/components/fields/ComboBox/ComboBox.js +1 -1
  112. package/es/components/fields/ComboBox/index.js +1 -1
  113. package/es/components/fields/DatePicker/DateInput.js +1 -1
  114. package/es/components/fields/DatePicker/DateInputBase.js +1 -1
  115. package/es/components/fields/DatePicker/DatePicker.js +1 -1
  116. package/es/components/fields/DatePicker/DatePickerButton.js +1 -1
  117. package/es/components/fields/DatePicker/DatePickerElement.js +1 -1
  118. package/es/components/fields/DatePicker/DatePickerInput.js +1 -1
  119. package/es/components/fields/DatePicker/DatePickerSegment.js +1 -1
  120. package/es/components/fields/DatePicker/DateRangePicker.js +1 -1
  121. package/es/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  122. package/es/components/fields/DatePicker/TimeInput.js +1 -1
  123. package/es/components/fields/DatePicker/index.js +1 -1
  124. package/es/components/fields/DatePicker/intl.js +1 -1
  125. package/es/components/fields/DatePicker/parseDate.js +1 -1
  126. package/es/components/fields/DatePicker/props.js +1 -1
  127. package/es/components/fields/DatePicker/types.js +1 -1
  128. package/es/components/fields/DatePicker/utils.js +1 -1
  129. package/es/components/fields/FileInput/FileInput.js +1 -1
  130. package/es/components/fields/FilterListBox/FilterListBox.js +1 -1
  131. package/es/components/fields/FilterListBox/index.js +1 -1
  132. package/es/components/fields/FilterPicker/FilterPicker.js +1 -1
  133. package/es/components/fields/FilterPicker/index.js +1 -1
  134. package/es/components/fields/Input/Input.js +1 -1
  135. package/es/components/fields/Input/index.js +1 -1
  136. package/es/components/fields/ListBox/ListBox.js +1 -1
  137. package/es/components/fields/ListBox/index.js +1 -1
  138. package/es/components/fields/NumberInput/NumberInput.js +1 -1
  139. package/es/components/fields/NumberInput/StepButton.js +1 -1
  140. package/es/components/fields/PasswordInput/PasswordInput.js +1 -1
  141. package/es/components/fields/Picker/Picker.js +1 -1
  142. package/es/components/fields/Picker/index.js +1 -1
  143. package/es/components/fields/RadioGroup/Radio.js +1 -1
  144. package/es/components/fields/RadioGroup/RadioGroup.js +1 -1
  145. package/es/components/fields/RadioGroup/context.js +1 -1
  146. package/es/components/fields/RadioGroup/index.js +1 -1
  147. package/es/components/fields/SearchInput/SearchInput.js +1 -1
  148. package/es/components/fields/SearchInput/index.js +1 -1
  149. package/es/components/fields/Select/Select.js +1 -1
  150. package/es/components/fields/Select/index.js +1 -1
  151. package/es/components/fields/Slider/Gradation.js +1 -1
  152. package/es/components/fields/Slider/Header.js +1 -1
  153. package/es/components/fields/Slider/RangeSlider.js +1 -1
  154. package/es/components/fields/Slider/Slider.js +1 -1
  155. package/es/components/fields/Slider/SliderBase.js +1 -1
  156. package/es/components/fields/Slider/SliderInput.js +1 -1
  157. package/es/components/fields/Slider/SliderThumb.js +1 -1
  158. package/es/components/fields/Slider/SliderTrack.js +1 -1
  159. package/es/components/fields/Slider/elements.js +1 -1
  160. package/es/components/fields/Slider/index.js +1 -1
  161. package/es/components/fields/Slider/types.js +1 -1
  162. package/es/components/fields/Switch/Switch.js +1 -1
  163. package/es/components/fields/Switch/index.js +1 -1
  164. package/es/components/fields/TextArea/TextArea.js +1 -1
  165. package/es/components/fields/TextArea/index.js +1 -1
  166. package/es/components/fields/TextInput/TextInput.js +1 -1
  167. package/es/components/fields/TextInput/TextInputBase.js +1 -1
  168. package/es/components/fields/TextInput/index.js +1 -1
  169. package/es/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  170. package/es/components/fields/TextInputMapper/index.js +1 -1
  171. package/es/components/fields/index.js +1 -1
  172. package/es/components/form/FieldWrapper/FieldWrapper.js +1 -1
  173. package/es/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  174. package/es/components/form/FieldWrapper/index.js +1 -1
  175. package/es/components/form/FieldWrapper/types.js +1 -1
  176. package/es/components/form/Form/Field.js +1 -1
  177. package/es/components/form/Form/Form.js +1 -1
  178. package/es/components/form/Form/ResetButton/ResetButton.js +1 -1
  179. package/es/components/form/Form/ResetButton/index.js +1 -1
  180. package/es/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  181. package/es/components/form/Form/SubmitButton/index.js +1 -1
  182. package/es/components/form/Form/SubmitError.js +1 -1
  183. package/es/components/form/Form/index.js +1 -1
  184. package/es/components/form/Form/types.js +1 -1
  185. package/es/components/form/Form/use-field/index.js +1 -1
  186. package/es/components/form/Form/use-field/types.js +1 -1
  187. package/es/components/form/Form/use-field/use-field-props.js +1 -1
  188. package/es/components/form/Form/use-field/use-field.js +1 -1
  189. package/es/components/form/Form/use-form.js +1 -1
  190. package/es/components/form/Form/validation.js +1 -1
  191. package/es/components/form/Label.js +1 -1
  192. package/es/components/form/index.js +1 -1
  193. package/es/components/form/wrapper.js +1 -1
  194. package/es/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  195. package/es/components/helpers/DisplayTransition/index.js +1 -1
  196. package/es/components/helpers/IconSwitch/IconSwitch.js +1 -1
  197. package/es/components/helpers/index.js +1 -1
  198. package/es/components/layout/Flex.js +1 -1
  199. package/es/components/layout/Flow.js +1 -1
  200. package/es/components/layout/Grid.js +1 -1
  201. package/es/components/layout/Panel.js +1 -1
  202. package/es/components/layout/Prefix.js +1 -1
  203. package/es/components/layout/ResizablePanel.js +1 -1
  204. package/es/components/layout/Space.js +1 -1
  205. package/es/components/layout/Suffix.js +1 -1
  206. package/es/components/navigation/Tabs/DraggableTabList.js +1 -1
  207. package/es/components/navigation/Tabs/EditableTitle.js +1 -1
  208. package/es/components/navigation/Tabs/TabButton.js +1 -1
  209. package/es/components/navigation/Tabs/TabDropIndicator.js +1 -1
  210. package/es/components/navigation/Tabs/TabPanel.js +1 -1
  211. package/es/components/navigation/Tabs/TabPicker.js +1 -1
  212. package/es/components/navigation/Tabs/Tabs.js +1 -1
  213. package/es/components/navigation/Tabs/TabsAction.js +1 -1
  214. package/es/components/navigation/Tabs/TabsContext.js +1 -1
  215. package/es/components/navigation/Tabs/index.js +1 -1
  216. package/es/components/navigation/Tabs/styled.js +1 -1
  217. package/es/components/navigation/Tabs/types.js +1 -1
  218. package/es/components/navigation/Tabs/use-tab-editing.js +1 -1
  219. package/es/components/navigation/Tabs/use-tab-indicator.js +1 -1
  220. package/es/components/navigation/index.js +1 -1
  221. package/es/components/organisms/FileTabs/FileTabs.js +1 -1
  222. package/es/components/organisms/StatsCard/StatsCard.js +1 -1
  223. package/es/components/other/Calendar/Calendar.js +1 -1
  224. package/es/components/other/Calendar/CalendarCell.js +1 -1
  225. package/es/components/other/Calendar/CalendarGrid.js +1 -1
  226. package/es/components/other/Calendar/RangeCalendar.js +1 -1
  227. package/es/components/other/CloudLogo/CloudLogo.js +1 -1
  228. package/es/components/overlays/AlertDialog/AlertDialog.js +1 -1
  229. package/es/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  230. package/es/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  231. package/es/components/overlays/AlertDialog/index.js +1 -1
  232. package/es/components/overlays/AlertDialog/types.js +1 -1
  233. package/es/components/overlays/Dialog/Dialog.js +1 -1
  234. package/es/components/overlays/Dialog/DialogContainer.js +1 -1
  235. package/es/components/overlays/Dialog/DialogForm.js +1 -1
  236. package/es/components/overlays/Dialog/DialogTrigger.js +1 -1
  237. package/es/components/overlays/Dialog/context.js +1 -1
  238. package/es/components/overlays/Dialog/index.js +1 -1
  239. package/es/components/overlays/Dialog/use-dialog-container.js +1 -1
  240. package/es/components/overlays/Modal/Modal.js +1 -1
  241. package/es/components/overlays/Modal/OpenTransition.js +1 -1
  242. package/es/components/overlays/Modal/Overlay.js +1 -1
  243. package/es/components/overlays/Modal/Popover.js +1 -1
  244. package/es/components/overlays/Modal/Tray.js +1 -1
  245. package/es/components/overlays/Modal/Underlay.js +1 -1
  246. package/es/components/overlays/Modal/index.js +1 -1
  247. package/es/components/overlays/Modal/types.js +1 -1
  248. package/es/components/overlays/NewNotifications/Bar/FloatingNotification.js +1 -1
  249. package/es/components/overlays/NewNotifications/Bar/NotificationsBar.js +1 -1
  250. package/es/components/overlays/NewNotifications/Bar/TransitionComponent.js +1 -1
  251. package/es/components/overlays/NewNotifications/Bar/index.js +1 -1
  252. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogContext.js +1 -1
  253. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.js +1 -1
  254. package/es/components/overlays/NewNotifications/Dialog/index.js +1 -1
  255. package/es/components/overlays/NewNotifications/Notification.js +1 -1
  256. package/es/components/overlays/NewNotifications/NotificationView/NotificationAction.js +1 -1
  257. package/es/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.js +1 -1
  258. package/es/components/overlays/NewNotifications/NotificationView/NotificationDescription.js +1 -1
  259. package/es/components/overlays/NewNotifications/NotificationView/NotificationFooter.js +1 -1
  260. package/es/components/overlays/NewNotifications/NotificationView/NotificationHeader.js +1 -1
  261. package/es/components/overlays/NewNotifications/NotificationView/NotificationIcon.js +1 -1
  262. package/es/components/overlays/NewNotifications/NotificationView/NotificationProvider.js +1 -1
  263. package/es/components/overlays/NewNotifications/NotificationView/NotificationView.js +1 -1
  264. package/es/components/overlays/NewNotifications/NotificationView/index.js +1 -1
  265. package/es/components/overlays/NewNotifications/NotificationView/types.js +1 -1
  266. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.js +1 -1
  267. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.js +1 -1
  268. package/es/components/overlays/NewNotifications/NotificationsContext/index.js +1 -1
  269. package/es/components/overlays/NewNotifications/NotificationsContext/use-notifications.js +1 -1
  270. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsList.js +1 -1
  271. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.js +1 -1
  272. package/es/components/overlays/NewNotifications/NotificationsList/index.js +1 -1
  273. package/es/components/overlays/NewNotifications/NotificationsList/types.js +1 -1
  274. package/es/components/overlays/NewNotifications/hooks/index.js +1 -1
  275. package/es/components/overlays/NewNotifications/hooks/types.js +1 -1
  276. package/es/components/overlays/NewNotifications/hooks/use-notification-list-item.js +1 -1
  277. package/es/components/overlays/NewNotifications/hooks/use-notifications-api.js +1 -1
  278. package/es/components/overlays/NewNotifications/hooks/use-notifications-list.js +1 -1
  279. package/es/components/overlays/NewNotifications/hooks/use-notifications-observer.js +1 -1
  280. package/es/components/overlays/NewNotifications/index.js +1 -1
  281. package/es/components/overlays/NewNotifications/types.js +1 -1
  282. package/es/components/overlays/Notification/Notification.js +1 -1
  283. package/es/components/overlays/OverlayWrapper.js +1 -1
  284. package/es/components/overlays/Toast/ToastItem.js +3 -3
  285. package/es/components/overlays/Toast/ToastProvider.js +1 -1
  286. package/es/components/overlays/Toast/index.js +1 -1
  287. package/es/components/overlays/Toast/types.js +1 -1
  288. package/es/components/overlays/Toast/useProgressToast.js +1 -1
  289. package/es/components/overlays/Toast/useToast.js +1 -1
  290. package/es/components/overlays/Tooltip/Tooltip.js +1 -1
  291. package/es/components/overlays/Tooltip/TooltipProvider.js +1 -1
  292. package/es/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  293. package/es/components/overlays/Tooltip/context.js +1 -1
  294. package/es/components/overlays/Tooltip/index.js +1 -1
  295. package/es/components/portal/Portal.js +1 -1
  296. package/es/components/portal/PortalProvider.js +1 -1
  297. package/es/components/portal/index.js +1 -1
  298. package/es/components/portal/types.js +1 -1
  299. package/es/components/portal/usePortal.js +1 -1
  300. package/es/components/shared/InvalidIcon.js +1 -1
  301. package/es/components/shared/ValidIcon.js +1 -1
  302. package/es/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  303. package/es/components/status/LoadingAnimation/index.js +1 -1
  304. package/es/components/status/Spin/Cube.js +1 -1
  305. package/es/components/status/Spin/InternalSpinner.js +1 -1
  306. package/es/components/status/Spin/Spin.js +1 -1
  307. package/es/components/status/Spin/SpinsContainer.js +1 -1
  308. package/es/components/status/Spin/index.js +1 -1
  309. package/es/components/status/Spin/types.js +1 -1
  310. package/es/components/status/index.js +1 -1
  311. package/es/data/item-themes.js +1 -1
  312. package/es/data/themes.js +1 -1
  313. package/es/icons/AdjustmentsHorizontalIcon.js +1 -1
  314. package/es/icons/AdjustmentsIcon.js +1 -1
  315. package/es/icons/AiIcon.js +1 -1
  316. package/es/icons/AreaChartIcon.js +1 -1
  317. package/es/icons/BackwardIcon.js +1 -1
  318. package/es/icons/BarChartIcon.js +1 -1
  319. package/es/icons/BellFilledIcon.js +1 -1
  320. package/es/icons/BellIcon.js +1 -1
  321. package/es/icons/BooleanIcon.js +1 -1
  322. package/es/icons/CalendarEditIcon.js +1 -1
  323. package/es/icons/CalendarIcon.js +1 -1
  324. package/es/icons/CaretDownIcon.js +1 -1
  325. package/es/icons/CaretUpIcon.js +1 -1
  326. package/es/icons/ChartAreaStackedIcon.js +1 -1
  327. package/es/icons/ChartAreaStackedPercentageIcon.js +1 -1
  328. package/es/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  329. package/es/icons/ChartBarGroupedIcon.js +1 -1
  330. package/es/icons/ChartBarHorizontalIcon.js +1 -1
  331. package/es/icons/ChartBarLineIcon.js +1 -1
  332. package/es/icons/ChartBarStackedHorizontalIcon.js +1 -1
  333. package/es/icons/ChartBarStackedIcon.js +1 -1
  334. package/es/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  335. package/es/icons/ChartBarStackedPercentageIcon.js +1 -1
  336. package/es/icons/ChartBoxPlot2Icon.js +1 -1
  337. package/es/icons/ChartBoxPlotIcon.js +1 -1
  338. package/es/icons/ChartBubbleIcon.js +1 -1
  339. package/es/icons/ChartDonut2Icon.js +1 -1
  340. package/es/icons/ChartFunnelIcon.js +1 -1
  341. package/es/icons/ChartHeatmapIcon.js +1 -1
  342. package/es/icons/ChartKPIIcon.js +1 -1
  343. package/es/icons/ChartPie2Icon.js +1 -1
  344. package/es/icons/ChartScatterIcon.js +1 -1
  345. package/es/icons/CheckCircleFilledIcon.js +1 -1
  346. package/es/icons/CheckCircleIcon.js +1 -1
  347. package/es/icons/CheckIcon.js +1 -1
  348. package/es/icons/CircleFilledIcon.js +1 -1
  349. package/es/icons/ClearIcon.js +1 -1
  350. package/es/icons/CloseCircleFilledIcon.js +1 -1
  351. package/es/icons/CloseCircleIcon.js +1 -1
  352. package/es/icons/CloseIcon.js +1 -1
  353. package/es/icons/CodeIcon.js +1 -1
  354. package/es/icons/ColumnTotalIcon.js +1 -1
  355. package/es/icons/CopyIcon.js +1 -1
  356. package/es/icons/CountIcon.js +1 -1
  357. package/es/icons/CubeIcon.js +1 -1
  358. package/es/icons/CubePauseIcon.js +1 -1
  359. package/es/icons/CubePlayIcon.js +1 -1
  360. package/es/icons/CurrencyDollarIcon.js +1 -1
  361. package/es/icons/DangerIcon.js +1 -1
  362. package/es/icons/DashboardIcon.js +1 -1
  363. package/es/icons/DatabaseIcon.js +1 -1
  364. package/es/icons/DecimalDecreaseIcon.js +1 -1
  365. package/es/icons/DecimalIncreaseIcon.js +1 -1
  366. package/es/icons/DirectionIcon.js +1 -1
  367. package/es/icons/DonutIcon.js +1 -1
  368. package/es/icons/DownIcon.js +1 -1
  369. package/es/icons/EditIcon.js +1 -1
  370. package/es/icons/ExclamationCircleFilledIcon.js +1 -1
  371. package/es/icons/ExclamationCircleIcon.js +1 -1
  372. package/es/icons/ExclamationIcon.js +1 -1
  373. package/es/icons/EyeIcon.js +1 -1
  374. package/es/icons/EyeInvisibleIcon.js +1 -1
  375. package/es/icons/FilterIcon.js +1 -1
  376. package/es/icons/FolderFilledIcon.js +1 -1
  377. package/es/icons/FolderIcon.js +1 -1
  378. package/es/icons/FolderOpenFilledIcon.js +1 -1
  379. package/es/icons/FolderOpenIcon.js +1 -1
  380. package/es/icons/ForwardIcon.js +1 -1
  381. package/es/icons/HierarchyIcon.js +1 -1
  382. package/es/icons/HierarchyOpenIcon.js +1 -1
  383. package/es/icons/Icon.js +1 -1
  384. package/es/icons/InfoCircleIcon.js +1 -1
  385. package/es/icons/InfoIcon.js +1 -1
  386. package/es/icons/KeyIcon.js +1 -1
  387. package/es/icons/LeftIcon.js +1 -1
  388. package/es/icons/LineChartIcon.js +1 -1
  389. package/es/icons/LoadingIcon.js +1 -1
  390. package/es/icons/LockFilledIcon.js +1 -1
  391. package/es/icons/LockIcon.js +1 -1
  392. package/es/icons/MoreIcon.js +1 -1
  393. package/es/icons/NotAllowedIcon.js +1 -1
  394. package/es/icons/Number123Icon.js +1 -1
  395. package/es/icons/NumberIcon.js +1 -1
  396. package/es/icons/PauseCircleFilledIcon.js +1 -1
  397. package/es/icons/PauseCircleIcon.js +1 -1
  398. package/es/icons/PauseIcon.js +1 -1
  399. package/es/icons/PercentageIcon.js +1 -1
  400. package/es/icons/PieChartIcon.js +1 -1
  401. package/es/icons/PlayCircleIcon.js +1 -1
  402. package/es/icons/PlayIcon.js +1 -1
  403. package/es/icons/PlusIcon.js +1 -1
  404. package/es/icons/ProgressBarIcon.js +1 -1
  405. package/es/icons/ReloadIcon.js +1 -1
  406. package/es/icons/ReportIcon.js +1 -1
  407. package/es/icons/ReturnIcon.js +1 -1
  408. package/es/icons/RightIcon.js +1 -1
  409. package/es/icons/RowTotalsIcon.js +1 -1
  410. package/es/icons/SchemeIcon.js +1 -1
  411. package/es/icons/SearchIcon.js +1 -1
  412. package/es/icons/SemanticQueryIcon.js +1 -1
  413. package/es/icons/SettingsIcon.js +1 -1
  414. package/es/icons/ShieldFilledIcon.js +1 -1
  415. package/es/icons/ShieldIcon.js +1 -1
  416. package/es/icons/SlashIcon.js +1 -1
  417. package/es/icons/SparklesIcon.js +1 -1
  418. package/es/icons/SqlIcon.js +1 -1
  419. package/es/icons/StatsIcon.js +1 -1
  420. package/es/icons/StopIcon.js +1 -1
  421. package/es/icons/StringIcon.js +1 -1
  422. package/es/icons/SubtotalsIcon.js +1 -1
  423. package/es/icons/SwitchIcon.js +1 -1
  424. package/es/icons/TableIcon.js +1 -1
  425. package/es/icons/ThumbsDownIcon.js +1 -1
  426. package/es/icons/ThumbsUpIcon.js +1 -1
  427. package/es/icons/ThunderboltCrossedIcon.js +1 -1
  428. package/es/icons/ThunderboltFilledIcon.js +1 -1
  429. package/es/icons/ThunderboltIcon.js +1 -1
  430. package/es/icons/TimeIcon.js +1 -1
  431. package/es/icons/TrashIcon.js +1 -1
  432. package/es/icons/UnlockIcon.js +1 -1
  433. package/es/icons/UpIcon.js +1 -1
  434. package/es/icons/UserGroupIcon.js +1 -1
  435. package/es/icons/UserIcon.js +1 -1
  436. package/es/icons/UserLockIcon.js +1 -1
  437. package/es/icons/ViewIcon.js +1 -1
  438. package/es/icons/WarningFilledIcon.js +1 -1
  439. package/es/icons/WarningIcon.js +1 -1
  440. package/es/icons/index.js +1 -1
  441. package/es/icons/wrap-icon.js +1 -1
  442. package/es/index.js +1 -1
  443. package/es/provider.js +1 -1
  444. package/es/providers/TrackingProvider.js +1 -1
  445. package/es/providers/navigation.types.js +1 -1
  446. package/es/providers/navigationAdapter.default.js +1 -1
  447. package/es/services/notification.js +1 -1
  448. package/es/shared/form.js +1 -1
  449. package/es/shared/index.js +1 -1
  450. package/es/stories/Form.legacy-stories.js +1 -1
  451. package/es/stories/FormFieldArgs.js +1 -1
  452. package/es/stories/SimpleLayout.stories.js +1 -1
  453. package/es/stories/Tasty.stories.js +1 -1
  454. package/es/stories/components/ConfirmDeletionDialogForm.js +1 -1
  455. package/es/stories/components/DialogFormApp.js +1 -1
  456. package/es/stories/components/StyledButton.js +1 -1
  457. package/es/stories/lists/baseProps.js +1 -1
  458. package/es/stories/playground/PlaygroundEditor.js +1 -1
  459. package/es/stories/playground/PlaygroundLayout.js +1 -1
  460. package/es/stories/playground/PlaygroundOutput.js +1 -1
  461. package/es/stories/playground/PlaygroundPreview.js +1 -1
  462. package/es/stories/playground/components/Button.js +1 -1
  463. package/es/stories/playground/components/Card.js +1 -1
  464. package/es/stories/playground/components/ScrollProgress.js +1 -1
  465. package/es/stories/playground/examples.js +1 -1
  466. package/es/tasty/chunks/cacheKey.js +1 -1
  467. package/es/tasty/chunks/definitions.js +1 -1
  468. package/es/tasty/chunks/index.js +1 -1
  469. package/es/tasty/chunks/renderChunk.js +1 -1
  470. package/es/tasty/config.js +1 -1
  471. package/es/tasty/debug.js +1 -1
  472. package/es/tasty/hooks/index.js +1 -1
  473. package/es/tasty/hooks/useGlobalStyles.js +1 -1
  474. package/es/tasty/hooks/useKeyframes.js +1 -1
  475. package/es/tasty/hooks/useProperty.js +1 -1
  476. package/es/tasty/hooks/useRawCSS.js +1 -1
  477. package/es/tasty/hooks/useStyles.js +1 -1
  478. package/es/tasty/index.js +1 -1
  479. package/es/tasty/injector/index.js +1 -1
  480. package/es/tasty/injector/injector.js +1 -1
  481. package/es/tasty/injector/sheet-manager.js +1 -1
  482. package/es/tasty/injector/types.js +1 -1
  483. package/es/tasty/keyframes/index.js +1 -1
  484. package/es/tasty/parser/classify.js +1 -1
  485. package/es/tasty/parser/const.js +1 -1
  486. package/es/tasty/parser/lru.js +1 -1
  487. package/es/tasty/parser/parser.js +1 -1
  488. package/es/tasty/parser/tokenizer.js +1 -1
  489. package/es/tasty/parser/types.js +1 -1
  490. package/es/tasty/pipeline/conditions.js +1 -1
  491. package/es/tasty/pipeline/exclusive.js +1 -1
  492. package/es/tasty/pipeline/index.js +445 -37
  493. package/es/tasty/pipeline/materialize.js +1 -1
  494. package/es/tasty/pipeline/parseStateKey.js +1 -1
  495. package/es/tasty/pipeline/simplify.js +1 -1
  496. package/es/tasty/plugins/index.js +1 -1
  497. package/es/tasty/plugins/okhsl-plugin.js +1 -1
  498. package/es/tasty/plugins/types.js +1 -1
  499. package/es/tasty/properties/index.js +1 -1
  500. package/es/tasty/states/index.js +1 -1
  501. package/es/tasty/static/index.js +1 -1
  502. package/es/tasty/static/tastyStatic.js +1 -1
  503. package/es/tasty/static/types.js +1 -1
  504. package/es/tasty/styles/align.js +1 -1
  505. package/es/tasty/styles/border.js +1 -1
  506. package/es/tasty/styles/boxShadow.combinator.js +1 -1
  507. package/es/tasty/styles/color.js +1 -1
  508. package/es/tasty/styles/createStyle.js +1 -1
  509. package/es/tasty/styles/dimension.js +1 -1
  510. package/es/tasty/styles/display.js +1 -1
  511. package/es/tasty/styles/fade.js +1 -1
  512. package/es/tasty/styles/fill.js +1 -1
  513. package/es/tasty/styles/flow.js +1 -1
  514. package/es/tasty/styles/gap.js +1 -1
  515. package/es/tasty/styles/height.js +1 -1
  516. package/es/tasty/styles/index.js +1 -1
  517. package/es/tasty/styles/inset.js +1 -1
  518. package/es/tasty/styles/justify.js +1 -1
  519. package/es/tasty/styles/list.js +1 -1
  520. package/es/tasty/styles/margin.js +1 -1
  521. package/es/tasty/styles/outline.js +1 -1
  522. package/es/tasty/styles/padding.js +1 -1
  523. package/es/tasty/styles/place.js +1 -1
  524. package/es/tasty/styles/predefined.js +1 -1
  525. package/es/tasty/styles/preset.js +1 -1
  526. package/es/tasty/styles/radius.js +1 -1
  527. package/es/tasty/styles/reset.js +1 -1
  528. package/es/tasty/styles/scrollbar.js +1 -1
  529. package/es/tasty/styles/shadow.js +1 -1
  530. package/es/tasty/styles/styledScrollbar.js +1 -1
  531. package/es/tasty/styles/transition.js +1 -1
  532. package/es/tasty/styles/types.js +1 -1
  533. package/es/tasty/styles/width.js +1 -1
  534. package/es/tasty/tasty.js +1 -1
  535. package/es/tasty/types.js +1 -1
  536. package/es/tasty/utils/cache-wrapper.js +1 -1
  537. package/es/tasty/utils/case-converter.js +1 -1
  538. package/es/tasty/utils/colors.js +1 -1
  539. package/es/tasty/utils/dotize.js +1 -1
  540. package/es/tasty/utils/filter-base-props.js +1 -1
  541. package/es/tasty/utils/get-display-name.js +1 -1
  542. package/es/tasty/utils/hsl-to-rgb.js +1 -1
  543. package/es/tasty/utils/is-dev-env.js +1 -1
  544. package/es/tasty/utils/merge-styles.js +1 -1
  545. package/es/tasty/utils/mod-attrs.js +1 -1
  546. package/es/tasty/utils/okhsl-to-rgb.js +1 -1
  547. package/es/tasty/utils/process-tokens.js +1 -1
  548. package/es/tasty/utils/rgb-to-okhsl.js +1 -1
  549. package/es/tasty/utils/string.js +1 -1
  550. package/es/tasty/utils/styles.js +1 -1
  551. package/es/tasty/utils/typography.js +1 -1
  552. package/es/tasty/utils/warnings.js +1 -1
  553. package/es/tasty/zero/babel.js +1 -1
  554. package/es/tasty/zero/css-writer.js +1 -1
  555. package/es/tasty/zero/extractor.js +1 -1
  556. package/es/tasty/zero/index.js +1 -1
  557. package/es/tasty/zero/next.js +1 -1
  558. package/es/tokens/base.js +1 -1
  559. package/es/tokens/colors.js +1 -1
  560. package/es/tokens/index.js +1 -1
  561. package/es/tokens/layout.js +1 -1
  562. package/es/tokens/shadows.js +1 -1
  563. package/es/tokens/sizes.js +1 -1
  564. package/es/tokens/spacing.js +1 -1
  565. package/es/tokens/typography.js +1 -1
  566. package/es/utils/ResizeSensor.js +1 -1
  567. package/es/utils/index.js +1 -1
  568. package/es/utils/modules.js +1 -1
  569. package/es/utils/promise.js +1 -1
  570. package/es/utils/raf.js +1 -1
  571. package/es/utils/random.js +1 -1
  572. package/es/utils/range.js +1 -1
  573. package/es/utils/react/RenderCache.js +1 -1
  574. package/es/utils/react/Slots.js +1 -1
  575. package/es/utils/react/chain.js +1 -1
  576. package/es/utils/react/forwardRefWithGenerics.js +1 -1
  577. package/es/utils/react/index.js +1 -1
  578. package/es/utils/react/interactions.js +1 -1
  579. package/es/utils/react/isTextOnly.js +1 -1
  580. package/es/utils/react/mapProps.js +1 -1
  581. package/es/utils/react/mergeProps.js +1 -1
  582. package/es/utils/react/nullableValue.js +1 -1
  583. package/es/utils/react/resolveIcon.js +1 -1
  584. package/es/utils/react/sharedStore.js +1 -1
  585. package/es/utils/react/useCombinedRefs.js +1 -1
  586. package/es/utils/react/useControlledFocusVisible.js +1 -1
  587. package/es/utils/react/useEventBus.js +1 -1
  588. package/es/utils/react/useId.js +1 -1
  589. package/es/utils/react/useIsDarwin.js +1 -1
  590. package/es/utils/react/useKeySymbols.js +1 -1
  591. package/es/utils/react/useLayoutEffect.js +1 -1
  592. package/es/utils/react/useLocalStorage.js +1 -1
  593. package/es/utils/react/useQaProps.js +1 -1
  594. package/es/utils/react/useViewportSize.js +1 -1
  595. package/es/utils/react/wrapNodeIfPlain.js +1 -1
  596. package/es/utils/tree.js +1 -1
  597. package/es/utils/warnings.js +1 -1
  598. package/es/version.js +2 -2
  599. package/package.json +1 -1
  600. 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.106.0
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
- const suffix = getSelector(key, nestedStyles);
129
- if (suffix) {
130
- // Create sub-element context for @own() validation
131
- const subContext = {
132
- ...parserContext,
133
- isSubElement: true,
134
- };
135
- // Remove $ from nested styles
136
- const { $: _omit, ...cleanedStyles } = nestedStyles;
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 suffix for a key
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 getSelector(key, styles) {
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 prefix = transformSelectorAffix(String(affix));
249
- return `${prefix}[data-element="${key}"]`;
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
- * Transform selector affix
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 transformSelectorAffix(affix) {
292
+ function processAffix(affix, key) {
259
293
  const trimmed = affix.trim();
260
- if (!trimmed)
261
- return ' ';
262
- // Validate that combinators have spaces around them
263
- // Check for capitalized words adjacent to combinators without spaces
264
- const invalidPattern = /[A-Z][a-z]*[>+~]|[>+~][A-Z][a-z]*/;
265
- if (invalidPattern.test(trimmed)) {
266
- console.error(`[Tasty] Invalid selector affix ($) syntax: "${affix}"\n` +
267
- `Combinators (>, +, ~) must have spaces around them when used with element names.\n` +
268
- `Example: Use "$: '> Body > Row'" instead of "$: '>Body>Row'"\n` +
269
- `This is a design choice: the parser uses simple whitespace splitting for performance.`);
270
- }
271
- const tokens = trimmed.split(/\s+/);
272
- const transformed = tokens.map((token) => /^[A-Z]/.test(token) ? `[data-element="${token}"]` : token);
273
- return ` ${transformed.join(' ')} `;
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
- // Increase specificity for tasty class selectors by duplicating the class
499
- if (sel.startsWith('.') && /^\.t\d+/.test(sel)) {
500
- const classMatch = sel.match(/^\.t\d+/);
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;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.106.0
4
+ * @cube-dev/ui-kit v0.107.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.106.0
4
+ * @cube-dev/ui-kit v0.107.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.106.0
4
+ * @cube-dev/ui-kit v0.107.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.106.0
4
+ * @cube-dev/ui-kit v0.107.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.106.0
4
+ * @cube-dev/ui-kit v0.107.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.106.0
4
+ * @cube-dev/ui-kit v0.107.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.106.0
4
+ * @cube-dev/ui-kit v0.107.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.106.0
4
+ * @cube-dev/ui-kit v0.107.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.106.0
4
+ * @cube-dev/ui-kit v0.107.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.106.0
4
+ * @cube-dev/ui-kit v0.107.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.106.0
4
+ * @cube-dev/ui-kit v0.107.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.106.0
4
+ * @cube-dev/ui-kit v0.107.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.106.0
4
+ * @cube-dev/ui-kit v0.107.0
5
5
  * Released under the MIT license.
6
6
  */
7
7