@cube-dev/ui-kit 0.0.0-canary-388f6d5 → 0.0.0-canary-d7e15f1

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 +6 -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 +1 -1
  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 +436 -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.0.0-canary-388f6d5
4
+ * @cube-dev/ui-kit v0.0.0-canary-d7e15f1
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,437 @@ 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)
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
+ let cls = '';
586
+ while (i < pattern.length &&
587
+ !/[\s>+~,@]/.test(pattern[i]) &&
588
+ !/[A-Z]/.test(pattern[i])) {
589
+ // Allow : in class parsing to handle pseudo after class
590
+ cls += pattern[i];
591
+ i++;
592
+ }
593
+ result += cls;
594
+ continue;
595
+ }
596
+ // Attribute selector [...]
597
+ if (char === '[') {
598
+ if (result && !result.endsWith(' ') && !result.endsWith(']')) {
599
+ result += ' ';
600
+ }
601
+ let attr = '';
602
+ let depth = 0;
603
+ while (i < pattern.length) {
604
+ attr += pattern[i];
605
+ if (pattern[i] === '[')
606
+ depth++;
607
+ if (pattern[i] === ']')
608
+ depth--;
609
+ i++;
610
+ if (depth === 0)
611
+ break;
612
+ }
613
+ result += attr;
614
+ continue;
615
+ }
616
+ // Other characters - just append
617
+ result += char;
618
+ i++;
619
+ }
620
+ return result;
621
+ }
622
+ /**
623
+ * Determine if the sub-element key should be auto-injected based on pattern ending.
624
+ *
625
+ * Key injection rules (when no @ placeholder is present):
626
+ *
627
+ * | Pattern Ending | Inject Key? | Example | Result |
628
+ * |----------------|-------------|---------|--------|
629
+ * | Combinator (>, +, ~) | Yes | `'>Body>'` | `> [data-element="Body"] > [el]` |
630
+ * | Uppercase element | Yes | `'>Body>Row'` | `> [el1] > [el2] [key]` |
631
+ * | Lowercase tag | Yes | `'>ul>li'` | `> ul > li [key]` |
632
+ * | Pseudo (:hover, ::before) | No | `'::before'` | `::before` |
633
+ * | Class (.active) | No | `'.active'` | `.active` |
634
+ * | Attribute ([type]) | No | `'[type="text"]'` | `[type="text"]` |
635
+ *
636
+ * @param pattern - The normalized pattern (after stripping &)
637
+ * @returns true if key should be injected, false otherwise
638
+ *
639
+ * @example
640
+ * shouldInjectKey('>') // → true (trailing combinator)
641
+ * shouldInjectKey('>Body>Row') // → true (ends with element)
642
+ * shouldInjectKey('>ul>li') // → true (ends with tag)
643
+ * shouldInjectKey('::before') // → false (ends with pseudo)
644
+ * shouldInjectKey('.active') // → false (ends with class)
645
+ * shouldInjectKey('a:hover') // → false (ends with pseudo)
646
+ * shouldInjectKey('button.primary') // → false (ends with class)
647
+ */
648
+ function shouldInjectKey(pattern) {
649
+ const trimmed = pattern.trim();
650
+ // Rule 1: Ends with combinator → inject key after it
651
+ // e.g., '>' → '> [data-element="Key"]'
652
+ if (/[>+~]$/.test(trimmed)) {
653
+ return true;
654
+ }
655
+ // Rule 2: Ends with uppercase element name → inject key as descendant
656
+ // e.g., '>Body' → '> [data-element="Body"] [data-element="Key"]'
657
+ if (/[A-Z][a-zA-Z0-9]*$/.test(trimmed)) {
658
+ return true;
659
+ }
660
+ // Rule 3: Ends with lowercase tag name → inject key as descendant
661
+ // The negative lookbehind (?<![:.]) ensures we don't match:
662
+ // - ':hover' (pseudo ending)
663
+ // - '.primary' (class ending)
664
+ // e.g., '>ul>li' → '> ul > li [data-element="Key"]'
665
+ if (/(?<![:.])(?:^|[\s>+~])[a-z][a-z0-9-]*$/.test(trimmed)) {
666
+ return true;
667
+ }
668
+ // Rule 4: Otherwise (pseudo, class, attribute) → no injection
669
+ // The pattern is complete as-is, applying to root or a specific selector
670
+ return false;
274
671
  }
275
672
  /**
276
673
  * Normalize selector suffix from $ property
@@ -464,7 +861,7 @@ function materializeComputedRule(rule) {
464
861
  }
465
862
  return rules;
466
863
  }
467
- export function renderStyles(styles, classNameOrSelector) {
864
+ export function renderStyles(styles, classNameOrSelector, options) {
468
865
  // Check if we have a direct selector/className
469
866
  const directSelector = !!classNameOrSelector;
470
867
  if (!styles) {
@@ -483,6 +880,7 @@ export function renderStyles(styles, classNameOrSelector) {
483
880
  }
484
881
  // Direct selector/className mode: return StyleResult[] directly
485
882
  if (directSelector) {
883
+ const shouldDouble = options?.doubleSelector ?? false;
486
884
  return rules.map((rule) => {
487
885
  // Handle selector as array (OR conditions) or string
488
886
  const selectorParts = Array.isArray(rule.selector)
@@ -495,9 +893,10 @@ export function renderStyles(styles, classNameOrSelector) {
495
893
  let sel = part
496
894
  ? `${classNameOrSelector}${part}`
497
895
  : 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+/);
896
+ // Double class selector for increased specificity if requested
897
+ // This is used when the caller explicitly wants higher specificity
898
+ if (shouldDouble && sel.startsWith('.')) {
899
+ const classMatch = sel.match(/^\.[a-zA-Z_-][a-zA-Z0-9_-]*/);
501
900
  if (classMatch) {
502
901
  const baseClass = classMatch[0];
503
902
  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.0.0-canary-388f6d5
4
+ * @cube-dev/ui-kit v0.0.0-canary-d7e15f1
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.0.0-canary-388f6d5
4
+ * @cube-dev/ui-kit v0.0.0-canary-d7e15f1
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.0.0-canary-388f6d5
4
+ * @cube-dev/ui-kit v0.0.0-canary-d7e15f1
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.0.0-canary-388f6d5
4
+ * @cube-dev/ui-kit v0.0.0-canary-d7e15f1
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.0.0-canary-388f6d5
4
+ * @cube-dev/ui-kit v0.0.0-canary-d7e15f1
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.0.0-canary-388f6d5
4
+ * @cube-dev/ui-kit v0.0.0-canary-d7e15f1
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.0.0-canary-388f6d5
4
+ * @cube-dev/ui-kit v0.0.0-canary-d7e15f1
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.0.0-canary-388f6d5
4
+ * @cube-dev/ui-kit v0.0.0-canary-d7e15f1
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.0.0-canary-388f6d5
4
+ * @cube-dev/ui-kit v0.0.0-canary-d7e15f1
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.0.0-canary-388f6d5
4
+ * @cube-dev/ui-kit v0.0.0-canary-d7e15f1
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.0.0-canary-388f6d5
4
+ * @cube-dev/ui-kit v0.0.0-canary-d7e15f1
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.0.0-canary-388f6d5
4
+ * @cube-dev/ui-kit v0.0.0-canary-d7e15f1
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.0.0-canary-388f6d5
4
+ * @cube-dev/ui-kit v0.0.0-canary-d7e15f1
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.0.0-canary-388f6d5
4
+ * @cube-dev/ui-kit v0.0.0-canary-d7e15f1
5
5
  * Released under the MIT license.
6
6
  */
7
7