@cube-dev/ui-kit 0.0.0-canary-40524e2 → 0.0.0-canary-49dca2f

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 (510) hide show
  1. package/es/_internal/hooks/index.js +1 -1
  2. package/es/_internal/hooks/use-chained-callback.js +1 -1
  3. package/es/_internal/hooks/use-debounced-value.js +1 -1
  4. package/es/_internal/hooks/use-deprecation-warning.js +1 -1
  5. package/es/_internal/hooks/use-effect-once.js +1 -1
  6. package/es/_internal/hooks/use-event.js +1 -1
  7. package/es/_internal/hooks/use-is-first-render.js +1 -1
  8. package/es/_internal/hooks/use-sync-ref.js +1 -1
  9. package/es/_internal/hooks/use-timer/index.js +1 -1
  10. package/es/_internal/hooks/use-timer/timer.js +1 -1
  11. package/es/_internal/hooks/use-timer/use-timer.js +1 -1
  12. package/es/_internal/hooks/use-update-effect.js +1 -1
  13. package/es/_internal/hooks/use-warn.js +1 -1
  14. package/es/_internal/index.js +1 -1
  15. package/es/components/Block.js +1 -1
  16. package/es/components/CollectionItem.js +1 -1
  17. package/es/components/GlobalStyles.js +1 -1
  18. package/es/components/GridProvider.js +1 -1
  19. package/es/components/HiddenInput.js +1 -1
  20. package/es/components/OpenTrasition.js +1 -1
  21. package/es/components/Root.js +1 -1
  22. package/es/components/actions/Action/Action.js +1 -1
  23. package/es/components/actions/Button/Button.js +2 -2
  24. package/es/components/actions/Button/index.js +1 -1
  25. package/es/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  26. package/es/components/actions/CommandMenu/CommandMenu.js +1 -1
  27. package/es/components/actions/CommandMenu/index.js +1 -1
  28. package/es/components/actions/CommandMenu/styled.js +1 -1
  29. package/es/components/actions/ItemAction/ItemAction.js +5 -5
  30. package/es/components/actions/ItemAction/index.js +1 -1
  31. package/es/components/actions/ItemActionContext.js +1 -1
  32. package/es/components/actions/ItemButton/ItemButton.js +1 -1
  33. package/es/components/actions/ItemButton/index.js +1 -1
  34. package/es/components/actions/Link/Link.js +1 -1
  35. package/es/components/actions/Menu/Menu.js +1 -1
  36. package/es/components/actions/Menu/MenuItem.js +1 -1
  37. package/es/components/actions/Menu/MenuSection.js +1 -1
  38. package/es/components/actions/Menu/MenuTrigger.js +1 -1
  39. package/es/components/actions/Menu/SubMenuTrigger.js +1 -1
  40. package/es/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  41. package/es/components/actions/Menu/context.js +1 -1
  42. package/es/components/actions/Menu/index.js +1 -1
  43. package/es/components/actions/Menu/styled.js +1 -1
  44. package/es/components/actions/index.js +1 -1
  45. package/es/components/actions/use-action.js +1 -1
  46. package/es/components/actions/use-anchored-menu.js +1 -1
  47. package/es/components/actions/use-context-menu.js +1 -1
  48. package/es/components/content/ActiveZone/ActiveZone.js +1 -1
  49. package/es/components/content/Alert/Alert.js +1 -1
  50. package/es/components/content/Alert/index.js +1 -1
  51. package/es/components/content/Alert/types.js +1 -1
  52. package/es/components/content/Alert/use-alert.js +1 -1
  53. package/es/components/content/Avatar/Avatar.js +1 -1
  54. package/es/components/content/Badge/Badge.js +1 -1
  55. package/es/components/content/Card/Card.js +1 -1
  56. package/es/components/content/Content.js +1 -1
  57. package/es/components/content/CopyPasteBlock/CopyPasteBlock.js +2 -2
  58. package/es/components/content/CopyPasteBlock/index.js +1 -1
  59. package/es/components/content/CopySnippet/CopySnippet.js +1 -1
  60. package/es/components/content/CopySnippet/index.js +1 -1
  61. package/es/components/content/Divider.js +1 -1
  62. package/es/components/content/Footer.js +1 -1
  63. package/es/components/content/Header.js +1 -1
  64. package/es/components/content/HotKeys/HotKeys.js +1 -1
  65. package/es/components/content/HotKeys/index.js +1 -1
  66. package/es/components/content/Item/Item.js +97 -55
  67. package/es/components/content/Item/index.js +1 -1
  68. package/es/components/content/ItemBadge/ItemBadge.js +2 -2
  69. package/es/components/content/ItemBadge/index.js +1 -1
  70. package/es/components/content/List/SectionHeading.js +1 -1
  71. package/es/components/content/List/index.js +1 -1
  72. package/es/components/content/Paragraph.js +1 -1
  73. package/es/components/content/Placeholder/Placeholder.js +1 -1
  74. package/es/components/content/PrismCode/PrismCode.js +1 -1
  75. package/es/components/content/PrismCode/prismSetup.js +1 -1
  76. package/es/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  77. package/es/components/content/Result/Result.js +1 -1
  78. package/es/components/content/Skeleton/Skeleton.js +1 -1
  79. package/es/components/content/Tag/Tag.js +1 -1
  80. package/es/components/content/Text.js +1 -1
  81. package/es/components/content/Title.js +1 -1
  82. package/es/components/fields/Checkbox/Checkbox.js +1 -1
  83. package/es/components/fields/Checkbox/CheckboxGroup.js +1 -1
  84. package/es/components/fields/Checkbox/context.js +1 -1
  85. package/es/components/fields/Checkbox/index.js +1 -1
  86. package/es/components/fields/ComboBox/ComboBox.js +3 -2
  87. package/es/components/fields/ComboBox/index.js +1 -1
  88. package/es/components/fields/DatePicker/DateInput.js +1 -1
  89. package/es/components/fields/DatePicker/DateInputBase.js +1 -1
  90. package/es/components/fields/DatePicker/DatePicker.js +1 -1
  91. package/es/components/fields/DatePicker/DatePickerButton.js +1 -1
  92. package/es/components/fields/DatePicker/DatePickerElement.js +1 -1
  93. package/es/components/fields/DatePicker/DatePickerInput.js +1 -1
  94. package/es/components/fields/DatePicker/DatePickerSegment.js +1 -1
  95. package/es/components/fields/DatePicker/DateRangePicker.js +1 -1
  96. package/es/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  97. package/es/components/fields/DatePicker/TimeInput.js +1 -1
  98. package/es/components/fields/DatePicker/index.js +1 -1
  99. package/es/components/fields/DatePicker/intl.js +1 -1
  100. package/es/components/fields/DatePicker/parseDate.js +1 -1
  101. package/es/components/fields/DatePicker/props.js +1 -1
  102. package/es/components/fields/DatePicker/types.js +1 -1
  103. package/es/components/fields/DatePicker/utils.js +1 -1
  104. package/es/components/fields/FileInput/FileInput.js +1 -1
  105. package/es/components/fields/FilterListBox/FilterListBox.js +1 -1
  106. package/es/components/fields/FilterListBox/index.js +1 -1
  107. package/es/components/fields/FilterPicker/FilterPicker.js +1 -1
  108. package/es/components/fields/FilterPicker/index.js +1 -1
  109. package/es/components/fields/Input/Input.js +1 -1
  110. package/es/components/fields/Input/index.js +1 -1
  111. package/es/components/fields/ListBox/ListBox.js +1 -1
  112. package/es/components/fields/ListBox/index.js +1 -1
  113. package/es/components/fields/NumberInput/NumberInput.js +1 -1
  114. package/es/components/fields/NumberInput/StepButton.js +1 -1
  115. package/es/components/fields/PasswordInput/PasswordInput.js +1 -1
  116. package/es/components/fields/Picker/Picker.js +1 -1
  117. package/es/components/fields/Picker/index.js +1 -1
  118. package/es/components/fields/RadioGroup/Radio.js +2 -2
  119. package/es/components/fields/RadioGroup/RadioGroup.js +1 -1
  120. package/es/components/fields/RadioGroup/context.js +1 -1
  121. package/es/components/fields/RadioGroup/index.js +1 -1
  122. package/es/components/fields/SearchInput/SearchInput.js +1 -1
  123. package/es/components/fields/SearchInput/index.js +1 -1
  124. package/es/components/fields/Select/Select.js +1 -1
  125. package/es/components/fields/Select/index.js +1 -1
  126. package/es/components/fields/Slider/Gradation.js +1 -1
  127. package/es/components/fields/Slider/Header.js +1 -1
  128. package/es/components/fields/Slider/RangeSlider.js +1 -1
  129. package/es/components/fields/Slider/Slider.js +1 -1
  130. package/es/components/fields/Slider/SliderBase.js +1 -1
  131. package/es/components/fields/Slider/SliderInput.js +1 -1
  132. package/es/components/fields/Slider/SliderThumb.js +1 -1
  133. package/es/components/fields/Slider/SliderTrack.js +1 -1
  134. package/es/components/fields/Slider/elements.js +1 -1
  135. package/es/components/fields/Slider/index.js +1 -1
  136. package/es/components/fields/Slider/types.js +1 -1
  137. package/es/components/fields/Switch/Switch.js +1 -1
  138. package/es/components/fields/Switch/index.js +1 -1
  139. package/es/components/fields/TextArea/TextArea.js +1 -1
  140. package/es/components/fields/TextArea/index.js +1 -1
  141. package/es/components/fields/TextInput/TextInput.js +1 -1
  142. package/es/components/fields/TextInput/TextInputBase.js +1 -1
  143. package/es/components/fields/TextInput/index.js +1 -1
  144. package/es/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  145. package/es/components/fields/TextInputMapper/index.js +1 -1
  146. package/es/components/fields/index.js +1 -1
  147. package/es/components/form/FieldWrapper/FieldWrapper.js +1 -1
  148. package/es/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  149. package/es/components/form/FieldWrapper/index.js +1 -1
  150. package/es/components/form/FieldWrapper/types.js +1 -1
  151. package/es/components/form/Form/Field.js +1 -1
  152. package/es/components/form/Form/Form.js +1 -1
  153. package/es/components/form/Form/ResetButton/ResetButton.js +1 -1
  154. package/es/components/form/Form/ResetButton/index.js +1 -1
  155. package/es/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  156. package/es/components/form/Form/SubmitButton/index.js +1 -1
  157. package/es/components/form/Form/SubmitError.js +1 -1
  158. package/es/components/form/Form/index.js +1 -1
  159. package/es/components/form/Form/types.js +1 -1
  160. package/es/components/form/Form/use-field/index.js +1 -1
  161. package/es/components/form/Form/use-field/types.js +1 -1
  162. package/es/components/form/Form/use-field/use-field-props.js +1 -1
  163. package/es/components/form/Form/use-field/use-field.js +1 -1
  164. package/es/components/form/Form/use-form.js +1 -1
  165. package/es/components/form/Form/validation.js +1 -1
  166. package/es/components/form/Label.js +1 -1
  167. package/es/components/form/index.js +1 -1
  168. package/es/components/form/wrapper.js +1 -1
  169. package/es/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  170. package/es/components/helpers/index.js +1 -1
  171. package/es/components/layout/Flex.js +1 -1
  172. package/es/components/layout/Flow.js +1 -1
  173. package/es/components/layout/Grid.js +1 -1
  174. package/es/components/layout/Panel.js +1 -1
  175. package/es/components/layout/Prefix.js +1 -1
  176. package/es/components/layout/ResizablePanel.js +1 -1
  177. package/es/components/layout/Space.js +1 -1
  178. package/es/components/layout/Suffix.js +1 -1
  179. package/es/components/navigation/LegacyTabs/LegacyTabs.js +1 -1
  180. package/es/components/organisms/FileTabs/FileTabs.js +1 -1
  181. package/es/components/organisms/StatsCard/StatsCard.js +1 -1
  182. package/es/components/other/Base64Upload/Base64Upload.js +1 -1
  183. package/es/components/other/Calendar/Calendar.js +1 -1
  184. package/es/components/other/Calendar/CalendarCell.js +1 -1
  185. package/es/components/other/Calendar/CalendarGrid.js +1 -1
  186. package/es/components/other/Calendar/RangeCalendar.js +1 -1
  187. package/es/components/other/CloudLogo/CloudLogo.js +1 -1
  188. package/es/components/overlays/AlertDialog/AlertDialog.js +1 -1
  189. package/es/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  190. package/es/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  191. package/es/components/overlays/AlertDialog/index.js +1 -1
  192. package/es/components/overlays/AlertDialog/types.js +1 -1
  193. package/es/components/overlays/Dialog/Dialog.js +1 -1
  194. package/es/components/overlays/Dialog/DialogContainer.js +1 -1
  195. package/es/components/overlays/Dialog/DialogForm.js +1 -1
  196. package/es/components/overlays/Dialog/DialogTrigger.js +1 -1
  197. package/es/components/overlays/Dialog/context.js +1 -1
  198. package/es/components/overlays/Dialog/index.js +1 -1
  199. package/es/components/overlays/Dialog/use-dialog-container.js +1 -1
  200. package/es/components/overlays/Modal/Modal.js +1 -1
  201. package/es/components/overlays/Modal/OpenTransition.js +1 -1
  202. package/es/components/overlays/Modal/Overlay.js +1 -1
  203. package/es/components/overlays/Modal/Popover.js +1 -1
  204. package/es/components/overlays/Modal/Tray.js +1 -1
  205. package/es/components/overlays/Modal/Underlay.js +1 -1
  206. package/es/components/overlays/Modal/index.js +1 -1
  207. package/es/components/overlays/Modal/types.js +1 -1
  208. package/es/components/overlays/NewNotifications/Bar/FloatingNotification.js +1 -1
  209. package/es/components/overlays/NewNotifications/Bar/NotificationsBar.js +1 -1
  210. package/es/components/overlays/NewNotifications/Bar/TransitionComponent.js +1 -1
  211. package/es/components/overlays/NewNotifications/Bar/index.js +1 -1
  212. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogContext.js +1 -1
  213. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.js +1 -1
  214. package/es/components/overlays/NewNotifications/Dialog/index.js +1 -1
  215. package/es/components/overlays/NewNotifications/Notification.js +1 -1
  216. package/es/components/overlays/NewNotifications/NotificationView/NotificationAction.js +1 -1
  217. package/es/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.js +1 -1
  218. package/es/components/overlays/NewNotifications/NotificationView/NotificationDescription.js +1 -1
  219. package/es/components/overlays/NewNotifications/NotificationView/NotificationFooter.js +1 -1
  220. package/es/components/overlays/NewNotifications/NotificationView/NotificationHeader.js +1 -1
  221. package/es/components/overlays/NewNotifications/NotificationView/NotificationIcon.js +1 -1
  222. package/es/components/overlays/NewNotifications/NotificationView/NotificationProvider.js +1 -1
  223. package/es/components/overlays/NewNotifications/NotificationView/NotificationView.js +1 -1
  224. package/es/components/overlays/NewNotifications/NotificationView/index.js +1 -1
  225. package/es/components/overlays/NewNotifications/NotificationView/types.js +1 -1
  226. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.js +1 -1
  227. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.js +1 -1
  228. package/es/components/overlays/NewNotifications/NotificationsContext/index.js +1 -1
  229. package/es/components/overlays/NewNotifications/NotificationsContext/use-notifications.js +1 -1
  230. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsList.js +1 -1
  231. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.js +1 -1
  232. package/es/components/overlays/NewNotifications/NotificationsList/index.js +1 -1
  233. package/es/components/overlays/NewNotifications/NotificationsList/types.js +1 -1
  234. package/es/components/overlays/NewNotifications/hooks/index.js +1 -1
  235. package/es/components/overlays/NewNotifications/hooks/types.js +1 -1
  236. package/es/components/overlays/NewNotifications/hooks/use-notification-list-item.js +1 -1
  237. package/es/components/overlays/NewNotifications/hooks/use-notifications-api.js +1 -1
  238. package/es/components/overlays/NewNotifications/hooks/use-notifications-list.js +1 -1
  239. package/es/components/overlays/NewNotifications/hooks/use-notifications-observer.js +1 -1
  240. package/es/components/overlays/NewNotifications/index.js +1 -1
  241. package/es/components/overlays/NewNotifications/types.js +1 -1
  242. package/es/components/overlays/Notification/Notification.js +1 -1
  243. package/es/components/overlays/OverlayWrapper.js +1 -1
  244. package/es/components/overlays/Toasts/Toast.js +1 -1
  245. package/es/components/overlays/Toasts/index.js +1 -1
  246. package/es/components/overlays/Toasts/types.js +1 -1
  247. package/es/components/overlays/Toasts/use-toasts-api.js +1 -1
  248. package/es/components/overlays/Tooltip/Tooltip.js +1 -1
  249. package/es/components/overlays/Tooltip/TooltipProvider.js +1 -1
  250. package/es/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  251. package/es/components/overlays/Tooltip/context.js +1 -1
  252. package/es/components/overlays/Tooltip/index.js +1 -1
  253. package/es/components/portal/Portal.js +1 -1
  254. package/es/components/portal/PortalProvider.js +1 -1
  255. package/es/components/portal/index.js +1 -1
  256. package/es/components/portal/types.js +1 -1
  257. package/es/components/portal/usePortal.js +1 -1
  258. package/es/components/shared/InvalidIcon.js +1 -1
  259. package/es/components/shared/ValidIcon.js +1 -1
  260. package/es/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  261. package/es/components/status/LoadingAnimation/index.js +1 -1
  262. package/es/components/status/Spin/Cube.js +1 -1
  263. package/es/components/status/Spin/InternalSpinner.js +1 -1
  264. package/es/components/status/Spin/Spin.js +1 -1
  265. package/es/components/status/Spin/SpinsContainer.js +1 -1
  266. package/es/components/status/Spin/index.js +1 -1
  267. package/es/components/status/Spin/types.js +1 -1
  268. package/es/components/status/index.js +1 -1
  269. package/es/data/item-themes.js +2 -2
  270. package/es/data/themes.js +1 -1
  271. package/es/icons/AdjustmentsHorizontalIcon.js +1 -1
  272. package/es/icons/AdjustmentsIcon.js +1 -1
  273. package/es/icons/AiIcon.js +1 -1
  274. package/es/icons/AreaChartIcon.js +1 -1
  275. package/es/icons/BackwardIcon.js +1 -1
  276. package/es/icons/BarChartIcon.js +1 -1
  277. package/es/icons/BellFilledIcon.js +1 -1
  278. package/es/icons/BellIcon.js +1 -1
  279. package/es/icons/BooleanIcon.js +1 -1
  280. package/es/icons/CalendarEditIcon.js +1 -1
  281. package/es/icons/CalendarIcon.js +1 -1
  282. package/es/icons/CaretDownIcon.js +1 -1
  283. package/es/icons/CaretUpIcon.js +1 -1
  284. package/es/icons/ChartAreaStackedIcon.js +1 -1
  285. package/es/icons/ChartAreaStackedPercentageIcon.js +1 -1
  286. package/es/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  287. package/es/icons/ChartBarGroupedIcon.js +1 -1
  288. package/es/icons/ChartBarHorizontalIcon.js +1 -1
  289. package/es/icons/ChartBarLineIcon.js +1 -1
  290. package/es/icons/ChartBarStackedHorizontalIcon.js +1 -1
  291. package/es/icons/ChartBarStackedIcon.js +1 -1
  292. package/es/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  293. package/es/icons/ChartBarStackedPercentageIcon.js +1 -1
  294. package/es/icons/ChartBoxPlot2Icon.js +1 -1
  295. package/es/icons/ChartBoxPlotIcon.js +1 -1
  296. package/es/icons/ChartBubbleIcon.js +1 -1
  297. package/es/icons/ChartDonut2Icon.js +1 -1
  298. package/es/icons/ChartFunnelIcon.js +1 -1
  299. package/es/icons/ChartHeatmapIcon.js +1 -1
  300. package/es/icons/ChartKPIIcon.js +1 -1
  301. package/es/icons/ChartPie2Icon.js +1 -1
  302. package/es/icons/ChartScatterIcon.js +1 -1
  303. package/es/icons/CheckCircleFilledIcon.js +1 -1
  304. package/es/icons/CheckCircleIcon.js +1 -1
  305. package/es/icons/CheckIcon.js +1 -1
  306. package/es/icons/CircleFilledIcon.js +1 -1
  307. package/es/icons/ClearIcon.js +1 -1
  308. package/es/icons/CloseCircleFilledIcon.js +1 -1
  309. package/es/icons/CloseCircleIcon.js +1 -1
  310. package/es/icons/CloseIcon.js +1 -1
  311. package/es/icons/CodeIcon.js +1 -1
  312. package/es/icons/CopyIcon.js +1 -1
  313. package/es/icons/CountIcon.js +1 -1
  314. package/es/icons/CubeIcon.js +1 -1
  315. package/es/icons/CubePauseIcon.js +1 -1
  316. package/es/icons/CubePlayIcon.js +1 -1
  317. package/es/icons/CurrencyDollarIcon.js +1 -1
  318. package/es/icons/DangerIcon.js +1 -1
  319. package/es/icons/DashboardIcon.js +1 -1
  320. package/es/icons/DatabaseIcon.js +1 -1
  321. package/es/icons/DecimalDecreaseIcon.js +1 -1
  322. package/es/icons/DecimalIncreaseIcon.js +1 -1
  323. package/es/icons/DirectionIcon.js +1 -1
  324. package/es/icons/DonutIcon.js +1 -1
  325. package/es/icons/DownIcon.js +1 -1
  326. package/es/icons/EditIcon.js +1 -1
  327. package/es/icons/ExclamationCircleFilledIcon.js +1 -1
  328. package/es/icons/ExclamationCircleIcon.js +1 -1
  329. package/es/icons/ExclamationIcon.js +1 -1
  330. package/es/icons/EyeIcon.js +1 -1
  331. package/es/icons/EyeInvisibleIcon.js +1 -1
  332. package/es/icons/FilterIcon.js +1 -1
  333. package/es/icons/FolderFilledIcon.js +1 -1
  334. package/es/icons/FolderIcon.js +1 -1
  335. package/es/icons/FolderOpenFilledIcon.js +1 -1
  336. package/es/icons/FolderOpenIcon.js +1 -1
  337. package/es/icons/ForwardIcon.js +1 -1
  338. package/es/icons/HierarchyIcon.js +1 -1
  339. package/es/icons/HierarchyOpenIcon.js +1 -1
  340. package/es/icons/Icon.js +1 -1
  341. package/es/icons/InfoCircleIcon.js +1 -1
  342. package/es/icons/InfoIcon.js +1 -1
  343. package/es/icons/KeyIcon.js +1 -1
  344. package/es/icons/LeftIcon.js +1 -1
  345. package/es/icons/LineChartIcon.js +1 -1
  346. package/es/icons/LoadingIcon.js +1 -1
  347. package/es/icons/LockFilledIcon.js +1 -1
  348. package/es/icons/LockIcon.js +1 -1
  349. package/es/icons/MoreIcon.js +1 -1
  350. package/es/icons/NotAllowedIcon.js +1 -1
  351. package/es/icons/Number123Icon.js +1 -1
  352. package/es/icons/NumberIcon.js +1 -1
  353. package/es/icons/PauseCircleFilledIcon.js +1 -1
  354. package/es/icons/PauseCircleIcon.js +1 -1
  355. package/es/icons/PauseIcon.js +1 -1
  356. package/es/icons/PercentageIcon.js +1 -1
  357. package/es/icons/PieChartIcon.js +1 -1
  358. package/es/icons/PlayCircleIcon.js +1 -1
  359. package/es/icons/PlayIcon.js +1 -1
  360. package/es/icons/PlusIcon.js +1 -1
  361. package/es/icons/ProgressBarIcon.js +1 -1
  362. package/es/icons/ReloadIcon.js +1 -1
  363. package/es/icons/ReportIcon.js +1 -1
  364. package/es/icons/ReturnIcon.js +1 -1
  365. package/es/icons/RightIcon.js +1 -1
  366. package/es/icons/SchemeIcon.js +1 -1
  367. package/es/icons/SearchIcon.js +1 -1
  368. package/es/icons/SettingsIcon.js +1 -1
  369. package/es/icons/ShieldFilledIcon.js +1 -1
  370. package/es/icons/ShieldIcon.js +1 -1
  371. package/es/icons/SlashIcon.js +1 -1
  372. package/es/icons/SparklesIcon.js +1 -1
  373. package/es/icons/SqlIcon.js +1 -1
  374. package/es/icons/StatsIcon.js +1 -1
  375. package/es/icons/StopIcon.js +1 -1
  376. package/es/icons/StringIcon.js +1 -1
  377. package/es/icons/SwitchIcon.js +1 -1
  378. package/es/icons/TableIcon.js +1 -1
  379. package/es/icons/ThumbsDownIcon.js +1 -1
  380. package/es/icons/ThumbsUpIcon.js +1 -1
  381. package/es/icons/ThunderboltCrossedIcon.js +1 -1
  382. package/es/icons/ThunderboltFilledIcon.js +1 -1
  383. package/es/icons/ThunderboltIcon.js +1 -1
  384. package/es/icons/TimeIcon.js +1 -1
  385. package/es/icons/TrashIcon.js +1 -1
  386. package/es/icons/UnlockIcon.js +1 -1
  387. package/es/icons/UpIcon.js +1 -1
  388. package/es/icons/UserGroupIcon.js +1 -1
  389. package/es/icons/UserIcon.js +1 -1
  390. package/es/icons/UserLockIcon.js +1 -1
  391. package/es/icons/ViewIcon.js +1 -1
  392. package/es/icons/WarningFilledIcon.js +1 -1
  393. package/es/icons/WarningIcon.js +1 -1
  394. package/es/icons/add-new-icon.js +1 -1
  395. package/es/icons/index.js +1 -1
  396. package/es/icons/wrap-icon.js +1 -1
  397. package/es/index.js +1 -1
  398. package/es/provider.js +1 -1
  399. package/es/providers/TrackingProvider.js +1 -1
  400. package/es/providers/navigation.types.js +1 -1
  401. package/es/providers/navigationAdapter.default.js +1 -1
  402. package/es/services/notification.js +1 -1
  403. package/es/shared/form.js +1 -1
  404. package/es/shared/index.js +1 -1
  405. package/es/stories/Form.legacy-stories.js +1 -1
  406. package/es/stories/FormFieldArgs.js +1 -1
  407. package/es/stories/Layout.stories.js +1 -1
  408. package/es/stories/Tasty.stories.js +1 -1
  409. package/es/stories/components/ConfirmDeletionDialogForm.js +1 -1
  410. package/es/stories/components/DialogFormApp.js +1 -1
  411. package/es/stories/components/StyledButton.js +1 -1
  412. package/es/stories/lists/baseProps.js +1 -1
  413. package/es/tasty/debug.js +1 -1
  414. package/es/tasty/index.js +1 -1
  415. package/es/tasty/injector/index.js +1 -1
  416. package/es/tasty/injector/injector.js +1 -1
  417. package/es/tasty/injector/sheet-manager.js +1 -1
  418. package/es/tasty/injector/types.js +1 -1
  419. package/es/tasty/parser/classify.js +1 -1
  420. package/es/tasty/parser/const.js +1 -1
  421. package/es/tasty/parser/lru.js +1 -1
  422. package/es/tasty/parser/parser.js +1 -1
  423. package/es/tasty/parser/tokenizer.js +1 -1
  424. package/es/tasty/parser/types.js +1 -1
  425. package/es/tasty/providers/BreakpointsProvider.js +1 -1
  426. package/es/tasty/styles/align.js +1 -1
  427. package/es/tasty/styles/border.js +1 -1
  428. package/es/tasty/styles/boxShadow.combinator.js +1 -1
  429. package/es/tasty/styles/color.js +1 -1
  430. package/es/tasty/styles/createStyle.js +1 -1
  431. package/es/tasty/styles/dimension.js +1 -1
  432. package/es/tasty/styles/display.js +1 -1
  433. package/es/tasty/styles/fade.js +1 -1
  434. package/es/tasty/styles/fill.js +1 -1
  435. package/es/tasty/styles/flow.js +1 -1
  436. package/es/tasty/styles/font.js +1 -1
  437. package/es/tasty/styles/fontStyle.js +1 -1
  438. package/es/tasty/styles/gap.js +1 -1
  439. package/es/tasty/styles/groupRadius.js +1 -1
  440. package/es/tasty/styles/height.js +1 -1
  441. package/es/tasty/styles/index.js +1 -1
  442. package/es/tasty/styles/inset.js +1 -1
  443. package/es/tasty/styles/justify.js +1 -1
  444. package/es/tasty/styles/list.js +1 -1
  445. package/es/tasty/styles/margin.js +1 -1
  446. package/es/tasty/styles/outline.js +1 -1
  447. package/es/tasty/styles/padding.js +1 -1
  448. package/es/tasty/styles/place.js +1 -1
  449. package/es/tasty/styles/predefined.js +1 -1
  450. package/es/tasty/styles/preset.js +1 -1
  451. package/es/tasty/styles/radius.js +1 -1
  452. package/es/tasty/styles/reset.js +1 -1
  453. package/es/tasty/styles/scrollbar.js +1 -1
  454. package/es/tasty/styles/shadow.js +1 -1
  455. package/es/tasty/styles/styledScrollbar.js +1 -1
  456. package/es/tasty/styles/transition.js +1 -1
  457. package/es/tasty/styles/types.js +1 -1
  458. package/es/tasty/styles/width.js +1 -1
  459. package/es/tasty/tasty.js +6 -5
  460. package/es/tasty/types.js +1 -1
  461. package/es/tasty/utils/cache-wrapper.js +1 -1
  462. package/es/tasty/utils/case-converter.js +1 -1
  463. package/es/tasty/utils/colors.js +1 -1
  464. package/es/tasty/utils/dotize.js +1 -1
  465. package/es/tasty/utils/filterBaseProps.js +1 -1
  466. package/es/tasty/utils/getDisplayName.js +1 -1
  467. package/es/tasty/utils/getModCombinations.js +1 -1
  468. package/es/tasty/utils/isDevEnv.js +1 -1
  469. package/es/tasty/utils/mergeStyles.js +1 -1
  470. package/es/tasty/utils/modAttrs.js +1 -1
  471. package/es/tasty/utils/renderStyles.js +232 -181
  472. package/es/tasty/utils/responsive.js +1 -1
  473. package/es/tasty/utils/string.js +1 -1
  474. package/es/tasty/utils/styles.js +1 -1
  475. package/es/tasty/utils/warnings.js +1 -1
  476. package/es/tokens.js +1 -1
  477. package/es/utils/ResizeSensor.js +1 -1
  478. package/es/utils/index.js +1 -1
  479. package/es/utils/modules.js +1 -1
  480. package/es/utils/promise.js +1 -1
  481. package/es/utils/raf.js +1 -1
  482. package/es/utils/random.js +1 -1
  483. package/es/utils/range.js +1 -1
  484. package/es/utils/react/RenderCache.js +1 -1
  485. package/es/utils/react/Slots.js +1 -1
  486. package/es/utils/react/chain.js +1 -1
  487. package/es/utils/react/forwardRefWithGenerics.js +1 -1
  488. package/es/utils/react/index.js +1 -1
  489. package/es/utils/react/interactions.js +1 -1
  490. package/es/utils/react/isTextOnly.js +1 -1
  491. package/es/utils/react/mapProps.js +1 -1
  492. package/es/utils/react/mergeProps.js +1 -1
  493. package/es/utils/react/nullableValue.js +1 -1
  494. package/es/utils/react/sharedStore.js +1 -1
  495. package/es/utils/react/useCombinedRefs.js +1 -1
  496. package/es/utils/react/useControlledFocusVisible.js +1 -1
  497. package/es/utils/react/useEventBus.js +1 -1
  498. package/es/utils/react/useId.js +1 -1
  499. package/es/utils/react/useIsDarwin.js +1 -1
  500. package/es/utils/react/useKeySymbols.js +1 -1
  501. package/es/utils/react/useLayoutEffect.js +1 -1
  502. package/es/utils/react/useQaProps.js +1 -1
  503. package/es/utils/react/useViewportSize.js +1 -1
  504. package/es/utils/react/wrapNodeIfPlain.js +1 -1
  505. package/es/utils/tree.js +1 -1
  506. package/es/utils/warnings.js +1 -1
  507. package/es/version.js +2 -2
  508. package/package.json +1 -1
  509. package/types/tasty/styles/types.d.ts +6 -1
  510. package/types/tasty/utils/renderStyles.d.ts +10 -2
@@ -1,25 +1,35 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.0.0-canary-40524e2
4
+ * @cube-dev/ui-kit v0.0.0-canary-49dca2f
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
8
8
  /**
9
- * Style rendering that works with structured style objects
10
- * Eliminates CSS string parsing for better performance
9
+ * Style rendering that works with structured style objects.
10
+ * Eliminates CSS string parsing for better performance.
11
+ *
12
+ * Key optimizations:
13
+ * - Early exit checks (hasSameAttributeConflicts) handle common cases without overhead
14
+ * - Logical rule caching (logicalRulesCache) memoizes expensive style processing
15
+ * - Conflict detection prevents invalid CSS selector combinations
16
+ * - Not-selector optimization reduces CSS size
17
+ * - Priority-based filtering handles mod precedence correctly
18
+ * - Consolidated mod processing eliminates code duplication
11
19
  */
12
20
  import { Lru } from '../parser/lru';
13
21
  import { createStyle, STYLE_HANDLER_MAP } from '../styles';
14
22
  import { getModCombinationsIterative } from './getModCombinations';
15
23
  import { normalizeStyleZones, pointsToZones, } from './responsive';
16
- import { computeState, getModSelector, styleStateMapToStyleStateDataList, } from './styles';
24
+ import { computeState, getModSelector, stringifyStyles, styleStateMapToStyleStateDataList, } from './styles';
17
25
  // Detect if a value is a state map whose entries contain responsive arrays
18
26
  function stateMapHasResponsiveArrays(value) {
19
27
  if (!value || typeof value !== 'object' || Array.isArray(value))
20
28
  return false;
21
29
  return Object.values(value).some((v) => Array.isArray(v));
22
30
  }
31
+ // Cache logical rules per styles+breakpoints to avoid recomputation across identical calls
32
+ const logicalRulesCache = new Lru(5000);
23
33
  // Normalize selector suffixes coming from `$` in style handler results.
24
34
  // Some legacy handlers return suffixes starting with `&` (e.g. '& > *').
25
35
  // The renderer expects suffixes without the ampersand because it adds
@@ -81,26 +91,20 @@ function getSelector(key, styles) {
81
91
  }
82
92
  return null;
83
93
  }
84
- // Cache for parsed attribute selectors with bounded size to prevent memory leaks
85
- const attributeSelectorCache = new Lru(5000);
94
+ /**
95
+ * Parse attribute selector into its components.
96
+ * Simple regex parsing - JS engines optimize repeated patterns internally.
97
+ */
86
98
  function parseAttributeSelector(selector) {
87
- // Check cache first
88
- const cached = attributeSelectorCache.get(selector);
89
- if (cached !== undefined) {
90
- return cached;
91
- }
92
99
  // Match patterns like [data-size="medium"] or [data-selected]
93
100
  const match = selector.match(/^\[([^=\]]+)(?:="([^"]+)")?\]$/);
94
- const result = match
101
+ return match
95
102
  ? {
96
103
  attribute: match[1],
97
104
  value: match[2] || 'true', // Handle boolean attributes
98
105
  fullSelector: selector,
99
106
  }
100
107
  : null;
101
- // Cache the result
102
- attributeSelectorCache.set(selector, result);
103
- return result;
104
108
  }
105
109
  function hasConflictingAttributeSelectors(mods, parsedMods) {
106
110
  const attributeValues = new Map();
@@ -136,15 +140,17 @@ function createAttributeConflictChecker(parsedMods) {
136
140
  return (combination) => hasConflictingAttributeSelectors(combination, parsedMods);
137
141
  }
138
142
  // Build precomputed attribute maps for efficient not selector optimization
139
- function buildAttributeMaps(currentMods, allMods) {
143
+ function buildAttributeMaps(currentMods, allMods, parsedModsCache) {
140
144
  const allAttributes = new Map();
141
145
  const currentAttributes = new Map();
142
- const parsedMods = new Map();
143
- // Parse all mods once and cache results
144
- const allModsSet = new Set([...currentMods, ...allMods]);
145
- for (const mod of allModsSet) {
146
- if (!parsedMods.has(mod)) {
147
- parsedMods.set(mod, parseAttributeSelector(mod));
146
+ const parsedMods = parsedModsCache || new Map();
147
+ // Parse all mods once and cache results (only if cache not provided)
148
+ if (!parsedModsCache) {
149
+ const allModsSet = new Set([...currentMods, ...allMods]);
150
+ for (const mod of allModsSet) {
151
+ if (!parsedMods.has(mod)) {
152
+ parsedMods.set(mod, parseAttributeSelector(mod));
153
+ }
148
154
  }
149
155
  }
150
156
  // Build map of all possible values for each attribute
@@ -214,6 +220,14 @@ function optimizeNotSelectors(currentMods, allMods, precomputedMaps) {
214
220
  const maps = precomputedMaps || buildAttributeMaps(currentMods, allMods);
215
221
  const notMods = allMods.filter((mod) => !currentMods.includes(mod));
216
222
  const optimizedNotMods = [];
223
+ // Precompute presence of negative boolean attributes to avoid repeated scans
224
+ const negativeBooleanByAttr = new Set();
225
+ for (const mod of notMods) {
226
+ const p = maps.parsedMods.get(mod);
227
+ if (p && p.value === 'true') {
228
+ negativeBooleanByAttr.add(p.attribute);
229
+ }
230
+ }
217
231
  // Build maps of positive selector states for subsumption optimization
218
232
  const positiveAttributes = new Map();
219
233
  const positiveBooleans = new Set();
@@ -254,17 +268,8 @@ function optimizeNotSelectors(currentMods, allMods, precomputedMaps) {
254
268
  // Case 7 subsumption: If we have a value negative and boolean negative for same attribute
255
269
  // The boolean negative implies value negative, so skip the value negative
256
270
  if (parsed && parsed.value !== 'true') {
257
- // Check if we also have the boolean attribute in negative mods
258
- const booleanMod = allMods.find((m) => {
259
- const p = maps.parsedMods.get(m);
260
- return (p &&
261
- p.value === 'true' &&
262
- p.attribute === parsed.attribute &&
263
- !currentMods.includes(m));
264
- });
265
- if (booleanMod) {
266
- // We have both !([data-attr]) and !([data-attr="value"])
267
- // Skip the value negative as it's subsumed by attribute negative
271
+ // If we also have the boolean attribute in negative mods, skip the value negative
272
+ if (negativeBooleanByAttr.has(parsed.attribute)) {
268
273
  continue;
269
274
  }
270
275
  }
@@ -272,6 +277,39 @@ function optimizeNotSelectors(currentMods, allMods, precomputedMaps) {
272
277
  }
273
278
  return optimizedNotMods;
274
279
  }
280
+ /**
281
+ * Quick check if there are any same-attribute conflicts (boolean vs value for same attribute).
282
+ * Returns true if conflicts exist, false if filtering can be skipped.
283
+ * This early exit optimization handles the common case efficiently.
284
+ */
285
+ function hasSameAttributeConflicts(allMods, parsedModsCache) {
286
+ const attributeCounts = new Map();
287
+ for (const mod of allMods) {
288
+ const parsed = parsedModsCache.get(mod);
289
+ if (!parsed)
290
+ continue;
291
+ const isBool = parsed.value === 'true';
292
+ const existing = attributeCounts.get(parsed.attribute);
293
+ if (existing) {
294
+ // Already have both types for this attribute - conflict exists!
295
+ if ((isBool && existing.hasValue) || (!isBool && existing.hasBool)) {
296
+ return true;
297
+ }
298
+ // Update the types we've seen
299
+ if (isBool)
300
+ existing.hasBool = true;
301
+ else
302
+ existing.hasValue = true;
303
+ }
304
+ else {
305
+ attributeCounts.set(parsed.attribute, {
306
+ hasBool: isBool,
307
+ hasValue: !isBool,
308
+ });
309
+ }
310
+ }
311
+ return false;
312
+ }
275
313
  /**
276
314
  * Filter mods based on priority order for same-attribute conflicts.
277
315
  * If a boolean selector has higher priority than value selectors for the same attribute,
@@ -280,47 +318,46 @@ function optimizeNotSelectors(currentMods, allMods, precomputedMaps) {
280
318
  * Priority is determined by order in the styleStates (after reversal - earlier = higher priority)
281
319
  */
282
320
  function filterModsByPriority(allMods, styleStates, lookupStyles, parsedModsCache) {
283
- // Parse all mods once
284
- const parsedMods = parsedModsCache || new Map();
285
- if (!parsedModsCache) {
286
- for (const mod of allMods) {
287
- if (!parsedMods.has(mod)) {
288
- parsedMods.set(mod, parseAttributeSelector(getModSelector(mod)));
289
- }
290
- }
321
+ // Early exit: if no same-attribute conflicts exist, skip all the expensive work
322
+ // This handles the common case efficiently without any cache overhead
323
+ if (!hasSameAttributeConflicts(allMods, parsedModsCache)) {
324
+ return allMods;
291
325
  }
292
326
  // Build priority map: for each mod, find its earliest appearance in any state list
293
327
  const modPriorities = new Map();
294
328
  for (const style of lookupStyles) {
295
329
  const states = styleStates[style];
296
- if (!states)
297
- continue;
330
+ if (!states || states.length === 0)
331
+ continue; // Skip empty states
298
332
  // states are already reversed (higher priority = lower index)
299
- states.forEach((state, index) => {
300
- if (!state.mods)
301
- return;
302
- state.mods.forEach((mod) => {
333
+ for (let index = 0; index < states.length; index++) {
334
+ const state = states[index];
335
+ if (!state.mods || state.mods.length === 0)
336
+ continue; // Skip empty mods
337
+ for (const mod of state.mods) {
303
338
  const currentPriority = modPriorities.get(mod);
304
339
  if (currentPriority === undefined || index < currentPriority) {
305
340
  modPriorities.set(mod, index);
306
341
  }
307
- });
308
- });
342
+ }
343
+ }
309
344
  }
310
345
  // Group mods by attribute
311
346
  const attributeGroups = new Map();
312
347
  for (const mod of allMods) {
313
- const parsed = parsedMods.get(mod);
348
+ const parsed = parsedModsCache.get(mod);
314
349
  if (!parsed)
315
350
  continue;
316
351
  const priority = modPriorities.get(mod);
317
352
  if (priority === undefined)
318
353
  continue;
319
354
  const isBool = parsed.value === 'true';
320
- if (!attributeGroups.has(parsed.attribute)) {
321
- attributeGroups.set(parsed.attribute, []);
355
+ let group = attributeGroups.get(parsed.attribute);
356
+ if (!group) {
357
+ group = [];
358
+ attributeGroups.set(parsed.attribute, group);
322
359
  }
323
- attributeGroups.get(parsed.attribute).push({
360
+ group.push({
324
361
  mod,
325
362
  isBool,
326
363
  priority,
@@ -329,12 +366,18 @@ function filterModsByPriority(allMods, styleStates, lookupStyles, parsedModsCach
329
366
  // Filter: for each attribute, if boolean has higher priority than any value, remove values
330
367
  const modsToRemove = new Set();
331
368
  for (const [attribute, group] of attributeGroups.entries()) {
369
+ // Only process attributes with more than one mod
370
+ if (group.length <= 1)
371
+ continue;
332
372
  const boolMods = group.filter((m) => m.isBool);
333
373
  const valueMods = group.filter((m) => !m.isBool);
374
+ // Only check if we have both types
375
+ if (boolMods.length === 0 || valueMods.length === 0)
376
+ continue;
334
377
  // Check if any boolean has higher priority (lower index) than all values
335
378
  for (const boolMod of boolMods) {
336
379
  const hasHigherPriorityThanAllValues = valueMods.every((valueMod) => boolMod.priority < valueMod.priority);
337
- if (hasHigherPriorityThanAllValues && valueMods.length > 0) {
380
+ if (hasHigherPriorityThanAllValues) {
338
381
  // This boolean shadows all value mods for this attribute
339
382
  valueMods.forEach((valueMod) => modsToRemove.add(valueMod.mod));
340
383
  }
@@ -500,6 +543,124 @@ function convertHandlerResultToCSS(result, selectorSuffix = '') {
500
543
  const normalizedSingle = $ ? normalizeDollarSelectorSuffix(String($)) : '';
501
544
  return `&${finalSelectorSuffix}${normalizedSingle}{\n${renderedStyles}}\n`;
502
545
  }
546
+ /**
547
+ * Process state maps with mod combinations and generate logical rules.
548
+ * This consolidates the common logic for handling mod combinations, priority filtering,
549
+ * contradiction checking, and selector optimization.
550
+ */
551
+ function processStateMapsWithModCombinations(styleStates, lookupStyles, zones, handler, parentSuffix, allLogicalRules, cachedNormalizeStyleZones, breakpointIdx, responsiveOrigin = false) {
552
+ // Collect all mods from style states
553
+ const allMods = [];
554
+ const seenMods = new Set();
555
+ for (const style of lookupStyles) {
556
+ const states = styleStates[style];
557
+ if (!states)
558
+ continue;
559
+ for (const state of states) {
560
+ if (state.mods) {
561
+ for (const mod of state.mods) {
562
+ if (!seenMods.has(mod)) {
563
+ seenMods.add(mod);
564
+ allMods.push(mod);
565
+ }
566
+ }
567
+ }
568
+ }
569
+ }
570
+ if (allMods.length === 0) {
571
+ // No mods - just call handler with default state values
572
+ const stateProps = {};
573
+ lookupStyles.forEach((style) => {
574
+ const states = styleStates[style];
575
+ if (states && states.length > 0) {
576
+ stateProps[style] = states[0].value;
577
+ }
578
+ });
579
+ const result = handler(stateProps);
580
+ if (!result)
581
+ return;
582
+ const logicalRules = explodeHandlerResult(result, zones, parentSuffix, breakpointIdx, responsiveOrigin);
583
+ allLogicalRules.push(...logicalRules);
584
+ return;
585
+ }
586
+ // Parse all mods once and share the cache across all operations
587
+ const parsedModsCache = new Map();
588
+ for (const mod of allMods) {
589
+ parsedModsCache.set(mod, parseAttributeSelector(getModSelector(mod)));
590
+ }
591
+ // Apply priority-based filtering for same-attribute boolean vs value conflicts
592
+ const filteredMods = filterModsByPriority(allMods, styleStates, lookupStyles, parsedModsCache);
593
+ // Precompute attribute maps once for all combinations
594
+ const attributeMaps = buildAttributeMaps([], filteredMods, parsedModsCache);
595
+ // Generate combinations with conflict-aware pruning
596
+ const conflictChecker = createAttributeConflictChecker(attributeMaps.parsedMods);
597
+ const combinations = getModCombinationsIterative(filteredMods, true, conflictChecker);
598
+ // Process each mod combination
599
+ combinations.forEach((modCombination) => {
600
+ const stateProps = {};
601
+ // Find matching state for each style
602
+ lookupStyles.forEach((style) => {
603
+ const states = styleStates[style];
604
+ const matchingState = states.find((state) => computeState(state.model, (mod) => modCombination.includes(mod)));
605
+ if (matchingState) {
606
+ stateProps[style] = matchingState.value;
607
+ }
608
+ });
609
+ // Use precomputed maps for efficient not selector optimization
610
+ const currentMaps = buildAttributeMaps(modCombination, filteredMods, parsedModsCache);
611
+ // Compute raw NOTs for contradiction check (before optimization)
612
+ const rawNotMods = filteredMods.filter((mod) => !modCombination.includes(mod));
613
+ // Check for contradictions between positive and negative selectors
614
+ if (hasContradiction(modCombination, rawNotMods, currentMaps.parsedMods)) {
615
+ return; // Skip this invalid combination
616
+ }
617
+ // Optimize NOT selectors afterwards (pure simplification)
618
+ const optimizedNotMods = optimizeNotSelectors(modCombination, filteredMods, currentMaps);
619
+ // Build the mod selector string
620
+ const modsSelectors = `${modCombination
621
+ .map(getModSelector)
622
+ .join('')}${optimizedNotMods
623
+ .map((mod) => {
624
+ const sel = getModSelector(mod);
625
+ return sel.startsWith(':not(') ? sel.slice(5, -1) : `:not(${sel})`;
626
+ })
627
+ .join('')}`;
628
+ // Check if any state value is responsive (array)
629
+ const hasResponsiveStateValues = lookupStyles.some((style) => Array.isArray(stateProps[style]));
630
+ if (hasResponsiveStateValues) {
631
+ // Fan out by breakpoint for responsive state values
632
+ const propsByPoint = zones.map((_, i) => {
633
+ const pointProps = {};
634
+ lookupStyles.forEach((style) => {
635
+ const v = stateProps[style];
636
+ if (Array.isArray(v)) {
637
+ const arr = cachedNormalizeStyleZones(v, zones.length);
638
+ pointProps[style] = arr?.[i];
639
+ }
640
+ else {
641
+ pointProps[style] = v;
642
+ }
643
+ });
644
+ return pointProps;
645
+ });
646
+ propsByPoint.forEach((props, bpIdx) => {
647
+ const res = handler(props);
648
+ if (!res)
649
+ return;
650
+ const logical = explodeHandlerResult(res, zones, `${modsSelectors}${parentSuffix}`, bpIdx, true);
651
+ allLogicalRules.push(...logical);
652
+ });
653
+ }
654
+ else {
655
+ // Simple non-responsive state values
656
+ const result = handler(stateProps);
657
+ if (!result)
658
+ return;
659
+ const logical = explodeHandlerResult(result, zones, `${modsSelectors}${parentSuffix}`, breakpointIdx, responsiveOrigin);
660
+ allLogicalRules.push(...logical);
661
+ }
662
+ });
663
+ }
503
664
  /**
504
665
  * Convert logical rules to final StyleResult format
505
666
  */
@@ -714,62 +875,20 @@ function generateLogicalRules(styles, responsive = [], parentSuffix = '') {
714
875
  return v && typeof v === 'object' && !Array.isArray(v);
715
876
  });
716
877
  if (hasStateMapsAtPoint) {
717
- const allMods = new Set();
878
+ // Build styleStates from point props
718
879
  const styleStates = {};
719
880
  lookupStyles.forEach((style) => {
720
881
  const v = pointProps[style];
721
882
  if (v && typeof v === 'object' && !Array.isArray(v)) {
722
- const { states, mods } = styleStateMapToStyleStateDataList(v);
883
+ const { states } = styleStateMapToStyleStateDataList(v);
723
884
  styleStates[style] = states;
724
- mods.forEach((m) => allMods.add(m));
725
885
  }
726
886
  else {
727
887
  styleStates[style] = [{ mods: [], notMods: [], value: v }];
728
888
  }
729
889
  });
730
- const allModsArray = Array.from(allMods);
731
- // Apply priority-based filtering for same-attribute boolean vs value conflicts
732
- const filteredMods = filterModsByPriority(allModsArray, styleStates, lookupStyles);
733
- // Precompute attribute maps once for all combinations
734
- const attributeMaps = buildAttributeMaps([], filteredMods);
735
- // Generate combinations with conflict-aware pruning
736
- const conflictChecker = createAttributeConflictChecker(attributeMaps.parsedMods);
737
- const combinations = getModCombinationsIterative(filteredMods, true, conflictChecker);
738
- combinations.forEach((modCombination) => {
739
- const stateProps = {};
740
- lookupStyles.forEach((style) => {
741
- const states = styleStates[style];
742
- const matchingState = states.find((state) => computeState(state.model, (mod) => modCombination.includes(mod)));
743
- if (matchingState) {
744
- stateProps[style] = matchingState.value;
745
- }
746
- });
747
- // Use precomputed maps for efficient not selector optimization
748
- const currentMaps = buildAttributeMaps(modCombination, filteredMods);
749
- // Compute raw NOTs for contradiction check (before optimization)
750
- const rawNotMods = filteredMods.filter((mod) => !modCombination.includes(mod));
751
- // Check for contradictions between positive and negative selectors
752
- if (hasContradiction(modCombination, rawNotMods, currentMaps.parsedMods)) {
753
- return; // Skip this invalid combination
754
- }
755
- // Optimize NOT selectors afterwards (pure simplification)
756
- const optimizedNotMods = optimizeNotSelectors(modCombination, filteredMods, currentMaps);
757
- const modsSelectors = `${modCombination
758
- .map(getModSelector)
759
- .join('')}${optimizedNotMods
760
- .map((mod) => {
761
- const sel = getModSelector(mod);
762
- return sel.startsWith(':not(')
763
- ? sel.slice(5, -1)
764
- : `:not(${sel})`;
765
- })
766
- .join('')}`;
767
- const result = handler(stateProps);
768
- if (!result)
769
- return;
770
- const logicalRules = explodeHandlerResult(result, zones || [], `${modsSelectors}${parentSuffix}`, breakpointIdx, true);
771
- allLogicalRules.push(...logicalRules);
772
- });
890
+ // Use the consolidated helper for mod combination processing
891
+ processStateMapsWithModCombinations(styleStates, lookupStyles, zones || [], handler, parentSuffix, allLogicalRules, cachedNormalizeStyleZones, breakpointIdx, true);
773
892
  }
774
893
  else {
775
894
  const result = handler(pointProps);
@@ -787,96 +906,21 @@ function generateLogicalRules(styles, responsive = [], parentSuffix = '') {
787
906
  return value && typeof value === 'object' && !Array.isArray(value);
788
907
  });
789
908
  if (hasStateMaps) {
790
- // Process each style property individually for state resolution
791
- const allMods = new Set();
909
+ // Build styleStates from styleMap
792
910
  const styleStates = {};
793
911
  lookupStyles.forEach((style) => {
794
912
  const value = styleMap[style];
795
913
  if (value && typeof value === 'object' && !Array.isArray(value)) {
796
- const { states, mods } = styleStateMapToStyleStateDataList(value);
914
+ const { states } = styleStateMapToStyleStateDataList(value);
797
915
  styleStates[style] = states;
798
- mods.forEach((mod) => allMods.add(mod));
799
916
  }
800
917
  else {
801
918
  // Simple value, create a single state
802
919
  styleStates[style] = [{ mods: [], notMods: [], value }];
803
920
  }
804
921
  });
805
- // Generate all possible mod combinations
806
- const allModsArray = Array.from(allMods);
807
- // Apply priority-based filtering for same-attribute boolean vs value conflicts
808
- const filteredMods = filterModsByPriority(allModsArray, styleStates, lookupStyles);
809
- // Precompute attribute maps once for all combinations
810
- const attributeMaps = buildAttributeMaps([], filteredMods);
811
- // Generate combinations with conflict-aware pruning
812
- const conflictChecker = createAttributeConflictChecker(attributeMaps.parsedMods);
813
- const combinations = getModCombinationsIterative(filteredMods, true, conflictChecker);
814
- combinations.forEach((modCombination) => {
815
- const stateProps = {};
816
- lookupStyles.forEach((style) => {
817
- const states = styleStates[style];
818
- // Find the matching state for this mod combination
819
- const matchingState = states.find((state) => {
820
- return computeState(state.model, (mod) => modCombination.includes(mod));
821
- });
822
- if (matchingState) {
823
- stateProps[style] = matchingState.value;
824
- }
825
- });
826
- // Use precomputed maps for efficient not selector optimization
827
- const currentMaps = buildAttributeMaps(modCombination, filteredMods);
828
- // Compute raw NOTs for contradiction check (before optimization)
829
- const rawNotMods = filteredMods.filter((mod) => !modCombination.includes(mod));
830
- // Check for contradictions between positive and negative selectors
831
- if (hasContradiction(modCombination, rawNotMods, currentMaps.parsedMods)) {
832
- return; // Skip this invalid combination
833
- }
834
- // Optimize NOT selectors afterwards (pure simplification)
835
- const optimizedNotMods = optimizeNotSelectors(modCombination, filteredMods, currentMaps);
836
- const modsSelectors = `${modCombination
837
- .map(getModSelector)
838
- .join('')}${optimizedNotMods
839
- .map((mod) => {
840
- const sel = getModSelector(mod);
841
- return sel.startsWith(':not(')
842
- ? sel.slice(5, -1)
843
- : `:not(${sel})`;
844
- })
845
- .join('')}`;
846
- // If any state value is responsive (array), fan-out by breakpoint
847
- const hasResponsiveStateValues = lookupStyles.some((style) => Array.isArray(stateProps[style]));
848
- if (hasResponsiveStateValues) {
849
- const propsByPoint = zones.map((_, i) => {
850
- const pointProps = {};
851
- lookupStyles.forEach((style) => {
852
- const v = stateProps[style];
853
- if (Array.isArray(v)) {
854
- const arr = cachedNormalizeStyleZones(v, zones.length);
855
- pointProps[style] = arr?.[i];
856
- }
857
- else {
858
- pointProps[style] = v;
859
- }
860
- });
861
- return pointProps;
862
- });
863
- propsByPoint.forEach((props, breakpointIdx) => {
864
- const res = handler(props);
865
- if (!res)
866
- return;
867
- const logical = explodeHandlerResult(res, zones || [], `${modsSelectors}${parentSuffix}`, breakpointIdx, true);
868
- allLogicalRules.push(...logical);
869
- });
870
- }
871
- else {
872
- // Simple non-responsive state values
873
- const result = handler(stateProps);
874
- if (!result)
875
- return;
876
- const logical = explodeHandlerResult(result, zones || [], `${modsSelectors}${parentSuffix}`);
877
- allLogicalRules.push(...logical);
878
- }
879
- });
922
+ // Use the consolidated helper for mod combination processing
923
+ processStateMapsWithModCombinations(styleStates, lookupStyles, zones || [], handler, parentSuffix, allLogicalRules, cachedNormalizeStyleZones);
880
924
  }
881
925
  else {
882
926
  // Simple case: no state maps, call handler directly
@@ -898,8 +942,15 @@ export function renderStyles(styles, responsive = [], classNameOrSelector) {
898
942
  if (!styles) {
899
943
  return directSelector ? [] : { rules: [] };
900
944
  }
901
- // Generate logical rules using shared pipeline
902
- const allLogicalRules = generateLogicalRules(styles, responsive);
945
+ // Generate logical rules using shared pipeline (memoized per styles+breakpoints)
946
+ const stylesKey = stringifyStyles(styles);
947
+ const bpKey = (responsive || []).join(',');
948
+ const lrKey = `${stylesKey}#${bpKey}`;
949
+ let allLogicalRules = logicalRulesCache.get(lrKey);
950
+ if (!allLogicalRules) {
951
+ allLogicalRules = generateLogicalRules(styles, responsive);
952
+ logicalRulesCache.set(lrKey, allLogicalRules);
953
+ }
903
954
  const zones = pointsToZones(responsive || []);
904
955
  if (directSelector) {
905
956
  // Direct selector mode: convert logical rules directly to StyleResult format
@@ -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-40524e2
4
+ * @cube-dev/ui-kit v0.0.0-canary-49dca2f
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-40524e2
4
+ * @cube-dev/ui-kit v0.0.0-canary-49dca2f
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-40524e2
4
+ * @cube-dev/ui-kit v0.0.0-canary-49dca2f
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-40524e2
4
+ * @cube-dev/ui-kit v0.0.0-canary-49dca2f
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
package/es/tokens.js CHANGED
@@ -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-40524e2
4
+ * @cube-dev/ui-kit v0.0.0-canary-49dca2f
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-40524e2
4
+ * @cube-dev/ui-kit v0.0.0-canary-49dca2f
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
package/es/utils/index.js CHANGED
@@ -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-40524e2
4
+ * @cube-dev/ui-kit v0.0.0-canary-49dca2f
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-40524e2
4
+ * @cube-dev/ui-kit v0.0.0-canary-49dca2f
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-40524e2
4
+ * @cube-dev/ui-kit v0.0.0-canary-49dca2f
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
package/es/utils/raf.js CHANGED
@@ -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-40524e2
4
+ * @cube-dev/ui-kit v0.0.0-canary-49dca2f
5
5
  * Released under the MIT license.
6
6
  */
7
7