@cube-dev/ui-kit 0.74.3 → 0.76.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (512) hide show
  1. package/CHANGELOG.md +28 -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/GlobalStyles.js +10 -15
  18. package/es/components/GridProvider.js +1 -1
  19. package/es/components/HiddenInput.js +25 -24
  20. package/es/components/Item.js +1 -1
  21. package/es/components/OpenTrasition.js +1 -1
  22. package/es/components/Root.js +2 -2
  23. package/es/components/actions/Action/Action.js +15 -19
  24. package/es/components/actions/Button/Button.js +2 -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/ItemButton/ItemButton.js +1 -1
  31. package/es/components/actions/ItemButton/index.js +1 -1
  32. package/es/components/actions/Menu/Menu.js +1 -1
  33. package/es/components/actions/Menu/MenuItem.js +3 -8
  34. package/es/components/actions/Menu/MenuSection.js +1 -1
  35. package/es/components/actions/Menu/MenuTrigger.js +1 -1
  36. package/es/components/actions/Menu/SubMenuTrigger.js +1 -1
  37. package/es/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  38. package/es/components/actions/Menu/context.js +1 -1
  39. package/es/components/actions/Menu/index.js +1 -1
  40. package/es/components/actions/Menu/styled.js +1 -1
  41. package/es/components/actions/index.js +1 -1
  42. package/es/components/actions/use-action.js +1 -1
  43. package/es/components/actions/use-anchored-menu.js +1 -1
  44. package/es/components/actions/use-context-menu.js +1 -1
  45. package/es/components/content/ActiveZone/ActiveZone.js +1 -1
  46. package/es/components/content/Alert/Alert.js +1 -1
  47. package/es/components/content/Alert/index.js +1 -1
  48. package/es/components/content/Alert/types.js +1 -1
  49. package/es/components/content/Alert/use-alert.js +1 -1
  50. package/es/components/content/Avatar/Avatar.js +1 -1
  51. package/es/components/content/Badge/Badge.js +1 -1
  52. package/es/components/content/Card/Card.js +1 -1
  53. package/es/components/content/Content.js +1 -1
  54. package/es/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  55. package/es/components/content/CopyPasteBlock/index.js +1 -1
  56. package/es/components/content/CopySnippet/CopySnippet.js +1 -1
  57. package/es/components/content/CopySnippet/index.js +1 -1
  58. package/es/components/content/Divider.js +1 -1
  59. package/es/components/content/Footer.js +1 -1
  60. package/es/components/content/Header.js +1 -1
  61. package/es/components/content/HotKeys/HotKeys.js +1 -1
  62. package/es/components/content/HotKeys/index.js +1 -1
  63. package/es/components/content/ItemBase/ItemBase.js +9 -3
  64. package/es/components/content/ItemBase/index.js +1 -1
  65. package/es/components/content/List/SectionHeading.js +1 -1
  66. package/es/components/content/List/index.js +1 -1
  67. package/es/components/content/Paragraph.js +1 -1
  68. package/es/components/content/Placeholder/Placeholder.js +46 -41
  69. package/es/components/content/PrismCode/PrismCode.js +1 -1
  70. package/es/components/content/PrismCode/prismSetup.js +1 -1
  71. package/es/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  72. package/es/components/content/Result/Result.js +1 -1
  73. package/es/components/content/Skeleton/Skeleton.js +1 -1
  74. package/es/components/content/Tag/Tag.js +1 -1
  75. package/es/components/content/Text.js +3 -3
  76. package/es/components/content/Title.js +3 -3
  77. package/es/components/fields/Checkbox/Checkbox.js +1 -1
  78. package/es/components/fields/Checkbox/CheckboxGroup.js +1 -1
  79. package/es/components/fields/Checkbox/context.js +1 -1
  80. package/es/components/fields/Checkbox/index.js +1 -1
  81. package/es/components/fields/ComboBox/ComboBox.js +3 -7
  82. package/es/components/fields/ComboBox/index.js +1 -1
  83. package/es/components/fields/DatePicker/DateInput.js +1 -1
  84. package/es/components/fields/DatePicker/DateInputBase.js +1 -1
  85. package/es/components/fields/DatePicker/DatePicker.js +1 -1
  86. package/es/components/fields/DatePicker/DatePickerButton.js +1 -1
  87. package/es/components/fields/DatePicker/DatePickerElement.js +1 -1
  88. package/es/components/fields/DatePicker/DatePickerInput.js +1 -1
  89. package/es/components/fields/DatePicker/DatePickerSegment.js +1 -1
  90. package/es/components/fields/DatePicker/DateRangePicker.js +1 -1
  91. package/es/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  92. package/es/components/fields/DatePicker/TimeInput.js +1 -1
  93. package/es/components/fields/DatePicker/index.js +1 -1
  94. package/es/components/fields/DatePicker/intl.js +1 -1
  95. package/es/components/fields/DatePicker/parseDate.js +1 -1
  96. package/es/components/fields/DatePicker/props.js +1 -1
  97. package/es/components/fields/DatePicker/types.js +1 -1
  98. package/es/components/fields/DatePicker/utils.js +1 -1
  99. package/es/components/fields/FileInput/FileInput.js +1 -1
  100. package/es/components/fields/FilterListBox/FilterListBox.js +1 -1
  101. package/es/components/fields/FilterListBox/index.js +1 -1
  102. package/es/components/fields/FilterPicker/FilterPicker.js +3 -3
  103. package/es/components/fields/FilterPicker/index.js +1 -1
  104. package/es/components/fields/Input/Input.js +1 -1
  105. package/es/components/fields/Input/index.js +1 -1
  106. package/es/components/fields/ListBox/ListBox.js +1 -1
  107. package/es/components/fields/ListBox/index.js +1 -1
  108. package/es/components/fields/NumberInput/NumberInput.js +1 -1
  109. package/es/components/fields/NumberInput/StepButton.js +1 -1
  110. package/es/components/fields/PasswordInput/PasswordInput.js +1 -1
  111. package/es/components/fields/RadioGroup/Radio.js +2 -2
  112. package/es/components/fields/RadioGroup/RadioGroup.js +1 -1
  113. package/es/components/fields/RadioGroup/context.js +1 -1
  114. package/es/components/fields/RadioGroup/index.js +1 -1
  115. package/es/components/fields/SearchInput/SearchInput.js +1 -1
  116. package/es/components/fields/SearchInput/index.js +1 -1
  117. package/es/components/fields/Select/Select.js +1 -1
  118. package/es/components/fields/Select/index.js +1 -1
  119. package/es/components/fields/Slider/Gradation.js +1 -1
  120. package/es/components/fields/Slider/Header.js +1 -1
  121. package/es/components/fields/Slider/RangeSlider.js +1 -1
  122. package/es/components/fields/Slider/Slider.js +1 -1
  123. package/es/components/fields/Slider/SliderBase.js +1 -1
  124. package/es/components/fields/Slider/SliderInput.js +1 -1
  125. package/es/components/fields/Slider/SliderThumb.js +1 -1
  126. package/es/components/fields/Slider/SliderTrack.js +1 -1
  127. package/es/components/fields/Slider/elements.js +1 -1
  128. package/es/components/fields/Slider/index.js +1 -1
  129. package/es/components/fields/Slider/types.js +1 -1
  130. package/es/components/fields/Switch/Switch.js +1 -1
  131. package/es/components/fields/Switch/index.js +1 -1
  132. package/es/components/fields/TextArea/TextArea.js +1 -1
  133. package/es/components/fields/TextArea/index.js +1 -1
  134. package/es/components/fields/TextInput/TextInput.js +1 -1
  135. package/es/components/fields/TextInput/TextInputBase.js +3 -2
  136. package/es/components/fields/TextInput/index.js +1 -1
  137. package/es/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  138. package/es/components/fields/TextInputMapper/index.js +1 -1
  139. package/es/components/fields/index.js +1 -1
  140. package/es/components/form/FieldWrapper/FieldWrapper.js +1 -1
  141. package/es/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  142. package/es/components/form/FieldWrapper/index.js +1 -1
  143. package/es/components/form/FieldWrapper/types.js +1 -1
  144. package/es/components/form/Form/Field.js +1 -1
  145. package/es/components/form/Form/Form.js +1 -1
  146. package/es/components/form/Form/ResetButton/ResetButton.js +1 -1
  147. package/es/components/form/Form/ResetButton/index.js +1 -1
  148. package/es/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  149. package/es/components/form/Form/SubmitButton/index.js +1 -1
  150. package/es/components/form/Form/SubmitError.js +1 -1
  151. package/es/components/form/Form/index.js +1 -1
  152. package/es/components/form/Form/types.js +1 -1
  153. package/es/components/form/Form/use-field/index.js +1 -1
  154. package/es/components/form/Form/use-field/types.js +1 -1
  155. package/es/components/form/Form/use-field/use-field-props.js +1 -1
  156. package/es/components/form/Form/use-field/use-field.js +1 -1
  157. package/es/components/form/Form/use-form.js +1 -1
  158. package/es/components/form/Form/validation.js +1 -1
  159. package/es/components/form/Label.js +1 -1
  160. package/es/components/form/index.js +1 -1
  161. package/es/components/form/wrapper.js +1 -1
  162. package/es/components/layout/Flex.js +1 -1
  163. package/es/components/layout/Flow.js +1 -1
  164. package/es/components/layout/Grid.js +1 -1
  165. package/es/components/layout/Panel.js +1 -1
  166. package/es/components/layout/Prefix.js +1 -1
  167. package/es/components/layout/ResizablePanel.js +1 -1
  168. package/es/components/layout/Space.js +1 -1
  169. package/es/components/layout/Suffix.js +1 -1
  170. package/es/components/navigation/LegacyTabs/LegacyTabs.js +1 -1
  171. package/es/components/navigation/Link/Link.js +1 -1
  172. package/es/components/organisms/FileTabs/FileTabs.js +1 -1
  173. package/es/components/organisms/Modal/Modal.js +59 -68
  174. package/es/components/organisms/StatsCard/StatsCard.js +1 -1
  175. package/es/components/other/Base64Upload/Base64Upload.js +1 -1
  176. package/es/components/other/Calendar/Calendar.js +1 -1
  177. package/es/components/other/Calendar/CalendarCell.js +1 -1
  178. package/es/components/other/Calendar/CalendarGrid.js +1 -1
  179. package/es/components/other/Calendar/RangeCalendar.js +1 -1
  180. package/es/components/other/CloudLogo/CloudLogo.js +1 -1
  181. package/es/components/overlays/AlertDialog/AlertDialog.js +1 -1
  182. package/es/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  183. package/es/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  184. package/es/components/overlays/AlertDialog/index.js +1 -1
  185. package/es/components/overlays/AlertDialog/types.js +1 -1
  186. package/es/components/overlays/Dialog/Dialog.js +1 -1
  187. package/es/components/overlays/Dialog/DialogContainer.js +1 -1
  188. package/es/components/overlays/Dialog/DialogForm.js +1 -1
  189. package/es/components/overlays/Dialog/DialogTrigger.js +1 -1
  190. package/es/components/overlays/Dialog/context.js +1 -1
  191. package/es/components/overlays/Dialog/index.js +1 -1
  192. package/es/components/overlays/Dialog/use-dialog-container.js +1 -1
  193. package/es/components/overlays/Modal/Modal.js +1 -1
  194. package/es/components/overlays/Modal/OpenTransition.js +1 -1
  195. package/es/components/overlays/Modal/Overlay.js +1 -1
  196. package/es/components/overlays/Modal/Popover.js +1 -1
  197. package/es/components/overlays/Modal/Tray.js +1 -1
  198. package/es/components/overlays/Modal/Underlay.js +1 -1
  199. package/es/components/overlays/Modal/index.js +1 -1
  200. package/es/components/overlays/Modal/types.js +1 -1
  201. package/es/components/overlays/NewNotifications/Bar/FloatingNotification.js +1 -1
  202. package/es/components/overlays/NewNotifications/Bar/NotificationsBar.js +1 -1
  203. package/es/components/overlays/NewNotifications/Bar/TransitionComponent.js +1 -1
  204. package/es/components/overlays/NewNotifications/Bar/index.js +1 -1
  205. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.js +1 -1
  206. package/es/components/overlays/NewNotifications/Dialog/index.js +1 -1
  207. package/es/components/overlays/NewNotifications/Notification.js +1 -1
  208. package/es/components/overlays/NewNotifications/NotificationView/NotificationAction.js +1 -1
  209. package/es/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.js +1 -1
  210. package/es/components/overlays/NewNotifications/NotificationView/NotificationDescription.js +1 -1
  211. package/es/components/overlays/NewNotifications/NotificationView/NotificationFooter.js +1 -1
  212. package/es/components/overlays/NewNotifications/NotificationView/NotificationHeader.js +1 -1
  213. package/es/components/overlays/NewNotifications/NotificationView/NotificationIcon.js +1 -1
  214. package/es/components/overlays/NewNotifications/NotificationView/NotificationProvider.js +1 -1
  215. package/es/components/overlays/NewNotifications/NotificationView/NotificationView.js +1 -1
  216. package/es/components/overlays/NewNotifications/NotificationView/index.js +1 -1
  217. package/es/components/overlays/NewNotifications/NotificationView/types.js +1 -1
  218. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.js +1 -1
  219. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.js +1 -1
  220. package/es/components/overlays/NewNotifications/NotificationsContext/index.js +1 -1
  221. package/es/components/overlays/NewNotifications/NotificationsContext/use-notifications.js +1 -1
  222. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsList.js +1 -1
  223. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.js +1 -1
  224. package/es/components/overlays/NewNotifications/NotificationsList/index.js +1 -1
  225. package/es/components/overlays/NewNotifications/NotificationsList/types.js +1 -1
  226. package/es/components/overlays/NewNotifications/hooks/index.js +1 -1
  227. package/es/components/overlays/NewNotifications/hooks/types.js +1 -1
  228. package/es/components/overlays/NewNotifications/hooks/use-notification-list-item.js +1 -1
  229. package/es/components/overlays/NewNotifications/hooks/use-notifications-api.js +1 -1
  230. package/es/components/overlays/NewNotifications/hooks/use-notifications-list.js +1 -1
  231. package/es/components/overlays/NewNotifications/hooks/use-notifications-observer.js +1 -1
  232. package/es/components/overlays/NewNotifications/index.js +1 -1
  233. package/es/components/overlays/NewNotifications/types.js +1 -1
  234. package/es/components/overlays/Notification/Notification.js +1 -1
  235. package/es/components/overlays/OverlayWrapper.js +1 -1
  236. package/es/components/overlays/Toasts/Toast.js +1 -1
  237. package/es/components/overlays/Toasts/index.js +1 -1
  238. package/es/components/overlays/Toasts/types.js +1 -1
  239. package/es/components/overlays/Toasts/use-toasts-api.js +1 -1
  240. package/es/components/overlays/Tooltip/Tooltip.js +1 -1
  241. package/es/components/overlays/Tooltip/TooltipProvider.js +1 -1
  242. package/es/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  243. package/es/components/overlays/Tooltip/context.js +1 -1
  244. package/es/components/overlays/Tooltip/index.js +1 -1
  245. package/es/components/portal/Portal.js +1 -1
  246. package/es/components/portal/PortalProvider.js +1 -1
  247. package/es/components/portal/index.js +1 -1
  248. package/es/components/portal/types.js +1 -1
  249. package/es/components/portal/usePortal.js +1 -1
  250. package/es/components/shared/InvalidIcon.js +1 -1
  251. package/es/components/shared/ValidIcon.js +1 -1
  252. package/es/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  253. package/es/components/status/LoadingAnimation/index.js +1 -1
  254. package/es/components/status/Spin/Cube.js +1 -1
  255. package/es/components/status/Spin/InternalSpinner.js +1 -1
  256. package/es/components/status/Spin/Spin.js +1 -1
  257. package/es/components/status/Spin/SpinsContainer.js +1 -1
  258. package/es/components/status/Spin/index.js +1 -1
  259. package/es/components/status/Spin/types.js +1 -1
  260. package/es/components/status/index.js +1 -1
  261. package/es/data/item-themes.js +1 -1
  262. package/es/data/themes.js +1 -1
  263. package/es/icons/AdjustmentsHorizontalIcon.js +1 -1
  264. package/es/icons/AdjustmentsIcon.js +1 -1
  265. package/es/icons/AiIcon.js +1 -1
  266. package/es/icons/AreaChartIcon.js +1 -1
  267. package/es/icons/BackwardIcon.js +1 -1
  268. package/es/icons/BarChartIcon.js +1 -1
  269. package/es/icons/BellFilledIcon.js +1 -1
  270. package/es/icons/BellIcon.js +1 -1
  271. package/es/icons/BooleanIcon.js +1 -1
  272. package/es/icons/CalendarEditIcon.js +1 -1
  273. package/es/icons/CalendarIcon.js +1 -1
  274. package/es/icons/CaretDownIcon.js +1 -1
  275. package/es/icons/CaretUpIcon.js +1 -1
  276. package/es/icons/ChartAreaStackedIcon.js +1 -1
  277. package/es/icons/ChartAreaStackedPercentageIcon.js +1 -1
  278. package/es/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  279. package/es/icons/ChartBarGroupedIcon.js +1 -1
  280. package/es/icons/ChartBarHorizontalIcon.js +1 -1
  281. package/es/icons/ChartBarLineIcon.js +1 -1
  282. package/es/icons/ChartBarStackedHorizontalIcon.js +1 -1
  283. package/es/icons/ChartBarStackedIcon.js +1 -1
  284. package/es/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  285. package/es/icons/ChartBarStackedPercentageIcon.js +1 -1
  286. package/es/icons/ChartBoxPlot2Icon.js +1 -1
  287. package/es/icons/ChartBoxPlotIcon.js +1 -1
  288. package/es/icons/ChartBubbleIcon.js +1 -1
  289. package/es/icons/ChartDonut2Icon.js +1 -1
  290. package/es/icons/ChartFunnelIcon.js +1 -1
  291. package/es/icons/ChartKPIIcon.js +1 -1
  292. package/es/icons/ChartPie2Icon.js +1 -1
  293. package/es/icons/ChartScatterIcon.js +1 -1
  294. package/es/icons/CheckCircleFilledIcon.js +1 -1
  295. package/es/icons/CheckCircleIcon.js +1 -1
  296. package/es/icons/CheckIcon.js +1 -1
  297. package/es/icons/CircleFilledIcon.js +1 -1
  298. package/es/icons/ClearIcon.js +1 -1
  299. package/es/icons/CloseCircleFilledIcon.js +1 -1
  300. package/es/icons/CloseCircleIcon.js +1 -1
  301. package/es/icons/CloseIcon.js +1 -1
  302. package/es/icons/CodeIcon.js +1 -1
  303. package/es/icons/CopyIcon.js +1 -1
  304. package/es/icons/CountIcon.js +1 -1
  305. package/es/icons/CubeIcon.js +1 -1
  306. package/es/icons/DangerIcon.js +1 -1
  307. package/es/icons/DashboardIcon.js +1 -1
  308. package/es/icons/DatabaseIcon.js +1 -1
  309. package/es/icons/DirectionIcon.js +1 -1
  310. package/es/icons/DonutIcon.js +1 -1
  311. package/es/icons/DownIcon.js +1 -1
  312. package/es/icons/EditIcon.js +1 -1
  313. package/es/icons/ExclamationCircleFilledIcon.js +1 -1
  314. package/es/icons/ExclamationCircleIcon.js +1 -1
  315. package/es/icons/ExclamationIcon.js +1 -1
  316. package/es/icons/EyeIcon.js +1 -1
  317. package/es/icons/EyeInvisibleIcon.js +1 -1
  318. package/es/icons/FilterIcon.js +1 -1
  319. package/es/icons/FolderFilledIcon.js +1 -1
  320. package/es/icons/FolderIcon.js +1 -1
  321. package/es/icons/FolderOpenFilledIcon.js +1 -1
  322. package/es/icons/FolderOpenIcon.js +1 -1
  323. package/es/icons/ForwardIcon.js +1 -1
  324. package/es/icons/HierarchyIcon.js +1 -1
  325. package/es/icons/Icon.js +1 -1
  326. package/es/icons/InfoCircleIcon.js +1 -1
  327. package/es/icons/InfoIcon.js +1 -1
  328. package/es/icons/KeyIcon.js +1 -1
  329. package/es/icons/LeftIcon.js +1 -1
  330. package/es/icons/LineChartIcon.js +1 -1
  331. package/es/icons/LoadingIcon.js +1 -1
  332. package/es/icons/LockFilledIcon.js +1 -1
  333. package/es/icons/LockIcon.js +1 -1
  334. package/es/icons/MoreIcon.js +1 -1
  335. package/es/icons/NotAllowedIcon.js +1 -1
  336. package/es/icons/NumberIcon.js +1 -1
  337. package/es/icons/PauseCircleFilledIcon.js +1 -1
  338. package/es/icons/PauseCircleIcon.js +1 -1
  339. package/es/icons/PauseIcon.js +1 -1
  340. package/es/icons/PieChartIcon.js +1 -1
  341. package/es/icons/PlayCircleIcon.js +1 -1
  342. package/es/icons/PlayIcon.js +1 -1
  343. package/es/icons/PlusIcon.js +1 -1
  344. package/es/icons/ReloadIcon.js +1 -1
  345. package/es/icons/ReportIcon.js +1 -1
  346. package/es/icons/ReturnIcon.js +1 -1
  347. package/es/icons/RightIcon.js +1 -1
  348. package/es/icons/SchemeIcon.js +1 -1
  349. package/es/icons/SearchIcon.js +1 -1
  350. package/es/icons/SettingsIcon.js +1 -1
  351. package/es/icons/ShieldFilledIcon.js +1 -1
  352. package/es/icons/ShieldIcon.js +1 -1
  353. package/es/icons/SlashIcon.js +1 -1
  354. package/es/icons/SparklesIcon.js +1 -1
  355. package/es/icons/SqlIcon.js +1 -1
  356. package/es/icons/StatsIcon.js +1 -1
  357. package/es/icons/StopIcon.js +1 -1
  358. package/es/icons/StringIcon.js +1 -1
  359. package/es/icons/SwitchIcon.js +1 -1
  360. package/es/icons/TableIcon.js +1 -1
  361. package/es/icons/ThumbsDownIcon.js +1 -1
  362. package/es/icons/ThumbsUpIcon.js +1 -1
  363. package/es/icons/ThunderboltCrossedIcon.js +1 -1
  364. package/es/icons/ThunderboltFilledIcon.js +1 -1
  365. package/es/icons/ThunderboltIcon.js +1 -1
  366. package/es/icons/TimeIcon.js +1 -1
  367. package/es/icons/UnlockIcon.js +1 -1
  368. package/es/icons/UpIcon.js +1 -1
  369. package/es/icons/UserGroupIcon.js +1 -1
  370. package/es/icons/UserIcon.js +1 -1
  371. package/es/icons/UserLockIcon.js +1 -1
  372. package/es/icons/ViewIcon.js +1 -1
  373. package/es/icons/WarningFilledIcon.js +1 -1
  374. package/es/icons/WarningIcon.js +1 -1
  375. package/es/icons/add-new-icon.js +1 -1
  376. package/es/icons/index.js +1 -1
  377. package/es/icons/wrap-icon.js +1 -1
  378. package/es/index.js +1 -1
  379. package/es/provider.js +1 -1
  380. package/es/providers/TrackingProvider.js +1 -1
  381. package/es/services/notification.js +1 -1
  382. package/es/shared/form.js +1 -1
  383. package/es/shared/index.js +1 -1
  384. package/es/stories/Form.legacy-stories.js +1 -1
  385. package/es/stories/FormFieldArgs.js +1 -1
  386. package/es/stories/Layout.stories.js +1 -1
  387. package/es/stories/Tasty.stories.js +1 -1
  388. package/es/stories/components/ConfirmDeletionDialogForm.js +1 -1
  389. package/es/stories/components/DialogFormApp.js +1 -1
  390. package/es/stories/components/StyledButton.js +1 -1
  391. package/es/stories/lists/baseProps.js +1 -2
  392. package/es/tasty/debug.js +703 -0
  393. package/es/tasty/index.js +3 -1
  394. package/es/tasty/injector/index.js +187 -0
  395. package/es/tasty/injector/injector.js +678 -0
  396. package/es/tasty/injector/sheet-manager.js +912 -0
  397. package/es/tasty/injector/types.js +10 -0
  398. package/es/tasty/parser/classify.js +1 -1
  399. package/es/tasty/parser/const.js +1 -1
  400. package/es/tasty/parser/lru.js +38 -2
  401. package/es/tasty/parser/parser.js +1 -1
  402. package/es/tasty/parser/tokenizer.js +1 -1
  403. package/es/tasty/parser/types.js +1 -1
  404. package/es/tasty/providers/BreakpointsProvider.js +1 -1
  405. package/es/tasty/styles/align.js +1 -1
  406. package/es/tasty/styles/border.js +1 -1
  407. package/es/tasty/styles/boxShadow.combinator.js +1 -1
  408. package/es/tasty/styles/color.js +8 -12
  409. package/es/tasty/styles/createStyle.js +19 -4
  410. package/es/tasty/styles/dimension.js +1 -1
  411. package/es/tasty/styles/display.js +1 -1
  412. package/es/tasty/styles/fade.js +1 -1
  413. package/es/tasty/styles/fill.js +6 -8
  414. package/es/tasty/styles/flow.js +1 -1
  415. package/es/tasty/styles/font.js +1 -1
  416. package/es/tasty/styles/fontStyle.js +1 -1
  417. package/es/tasty/styles/gap.js +1 -1
  418. package/es/tasty/styles/groupRadius.js +1 -1
  419. package/es/tasty/styles/height.js +1 -1
  420. package/es/tasty/styles/index.js +1 -1
  421. package/es/tasty/styles/inset.js +1 -1
  422. package/es/tasty/styles/justify.js +1 -1
  423. package/es/tasty/styles/list.js +1 -1
  424. package/es/tasty/styles/margin.js +1 -1
  425. package/es/tasty/styles/marginBlock.js +1 -1
  426. package/es/tasty/styles/marginInline.js +1 -1
  427. package/es/tasty/styles/outline.js +1 -1
  428. package/es/tasty/styles/padding.js +1 -1
  429. package/es/tasty/styles/paddingBlock.js +1 -1
  430. package/es/tasty/styles/paddingInline.js +1 -1
  431. package/es/tasty/styles/place.js +1 -1
  432. package/es/tasty/styles/predefined.js +1 -3
  433. package/es/tasty/styles/preset.js +1 -1
  434. package/es/tasty/styles/radius.js +1 -1
  435. package/es/tasty/styles/reset.js +40 -44
  436. package/es/tasty/styles/scrollbar.js +1 -1
  437. package/es/tasty/styles/shadow.js +1 -1
  438. package/es/tasty/styles/styledScrollbar.js +1 -1
  439. package/es/tasty/styles/transition.js +2 -1
  440. package/es/tasty/styles/types.js +1 -1
  441. package/es/tasty/styles/width.js +1 -1
  442. package/es/tasty/tasty.js +120 -35
  443. package/es/tasty/types.js +1 -1
  444. package/es/tasty/utils/cache-wrapper.js +1 -1
  445. package/es/tasty/utils/case-converter.js +1 -1
  446. package/es/tasty/utils/colors.js +1 -1
  447. package/es/tasty/utils/dotize.js +1 -1
  448. package/es/tasty/utils/filterBaseProps.js +1 -1
  449. package/es/tasty/utils/getDisplayName.js +1 -1
  450. package/es/tasty/utils/getModCombinations.js +26 -30
  451. package/es/tasty/utils/isDevEnv.js +36 -0
  452. package/es/tasty/utils/mergeStyles.js +1 -1
  453. package/es/tasty/utils/modAttrs.js +1 -1
  454. package/es/tasty/utils/renderStyles.js +710 -58
  455. package/es/tasty/utils/responsive.js +1 -7
  456. package/es/tasty/utils/string.js +1 -1
  457. package/es/tasty/utils/styles.js +100 -235
  458. package/es/tasty/utils/warnings.js +1 -1
  459. package/es/tokens.js +1 -12
  460. package/es/type-checks.js +1 -1
  461. package/es/utils/ResizeSensor.js +1 -1
  462. package/es/utils/modules.js +1 -1
  463. package/es/utils/promise.js +1 -1
  464. package/es/utils/random.js +1 -1
  465. package/es/utils/range.js +1 -1
  466. package/es/utils/react/Slots.js +1 -1
  467. package/es/utils/react/chain.js +1 -1
  468. package/es/utils/react/forwardRefWithGenerics.js +1 -1
  469. package/es/utils/react/index.js +1 -1
  470. package/es/utils/react/interactions.js +1 -1
  471. package/es/utils/react/isTextOnly.js +1 -1
  472. package/es/utils/react/mapProps.js +1 -1
  473. package/es/utils/react/mergeProps.js +1 -1
  474. package/es/utils/react/nullableValue.js +1 -1
  475. package/es/utils/react/sharedStore.js +1 -1
  476. package/es/utils/react/useCombinedRefs.js +1 -1
  477. package/es/utils/react/useControlledFocusVisible.js +1 -1
  478. package/es/utils/react/useEventBus.js +1 -1
  479. package/es/utils/react/useId.js +1 -1
  480. package/es/utils/react/useIsDarwin.js +1 -1
  481. package/es/utils/react/useKeySymbols.js +1 -1
  482. package/es/utils/react/useLayoutEffect.js +1 -1
  483. package/es/utils/react/useQaProps.js +1 -1
  484. package/es/utils/react/useViewportSize.js +1 -1
  485. package/es/utils/react/wrapNodeIfPlain.js +1 -1
  486. package/es/utils/transitions.js +1 -1
  487. package/es/utils/tree.js +1 -1
  488. package/es/utils/warnings.js +1 -1
  489. package/es/version.js +2 -2
  490. package/package.json +1 -1
  491. package/types/components/HiddenInput.d.ts +1 -3
  492. package/types/components/actions/Button/Button.d.ts +1 -0
  493. package/types/components/actions/Menu/styled.d.ts +762 -765
  494. package/types/components/actions/use-action.d.ts +1 -1
  495. package/types/components/content/List/SectionHeading.d.ts +254 -255
  496. package/types/components/fields/DatePicker/DatePickerElement.d.ts +254 -255
  497. package/types/tasty/debug.d.ts +163 -0
  498. package/types/tasty/index.d.ts +2 -0
  499. package/types/tasty/injector/index.d.ts +87 -0
  500. package/types/tasty/injector/injector.d.ts +111 -0
  501. package/types/tasty/injector/sheet-manager.d.ts +98 -0
  502. package/types/tasty/injector/types.d.ts +106 -0
  503. package/types/tasty/parser/lru.d.ts +5 -1
  504. package/types/tasty/styles/color.d.ts +3 -1
  505. package/types/tasty/styles/reset.d.ts +1 -2
  506. package/types/tasty/types.d.ts +0 -2
  507. package/types/tasty/utils/getModCombinations.d.ts +9 -1
  508. package/types/tasty/utils/isDevEnv.d.ts +6 -0
  509. package/types/tasty/utils/renderStyles.d.ts +30 -7
  510. package/types/tasty/utils/responsive.d.ts +0 -1
  511. package/types/tasty/utils/styles.d.ts +7 -90
  512. package/types/tokens.d.ts +0 -11
@@ -1,15 +1,43 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.74.3
4
+ * @cube-dev/ui-kit v0.76.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
8
+ /**
9
+ * Style rendering that works with structured style objects
10
+ * Eliminates CSS string parsing for better performance
11
+ */
12
+ import { Lru } from '../parser/lru';
8
13
  import { createStyle, STYLE_HANDLER_MAP } from '../styles';
9
- import { mediaWrapper, normalizeStyleZones } from './responsive';
14
+ import { getModCombinationsIterative } from './getModCombinations';
15
+ import { normalizeStyleZones, pointsToZones, } from './responsive';
16
+ import { computeState, getModSelector, styleStateMapToStyleStateDataList, } from './styles';
17
+ // Detect if a value is a state map whose entries contain responsive arrays
18
+ function stateMapHasResponsiveArrays(value) {
19
+ if (!value || typeof value !== 'object' || Array.isArray(value))
20
+ return false;
21
+ return Object.values(value).some((v) => Array.isArray(v));
22
+ }
23
+ // Normalize selector suffixes coming from `$` in style handler results.
24
+ // Some legacy handlers return suffixes starting with `&` (e.g. '& > *').
25
+ // The renderer expects suffixes without the ampersand because it adds
26
+ // the parent selector during materialization.
27
+ function normalizeDollarSelectorSuffix(suffix) {
28
+ if (!suffix)
29
+ return '';
30
+ return suffix.startsWith('&') ? suffix.slice(1) : suffix;
31
+ }
32
+ /**
33
+ * Check if a key represents a CSS selector
34
+ */
10
35
  export function isSelector(key) {
11
- return key.startsWith('&') || key.startsWith('.') || key.match(/^[A-Z]/);
36
+ return (key.startsWith('&') || key.startsWith('.') || key.match(/^[A-Z]/) !== null);
12
37
  }
38
+ /**
39
+ * Get the selector suffix for a key
40
+ */
13
41
  function getSelector(key) {
14
42
  if (key.startsWith('&')) {
15
43
  return key.slice(1);
@@ -22,41 +50,399 @@ function getSelector(key) {
22
50
  }
23
51
  return null;
24
52
  }
25
- /** Props level cache for `renderStyles` function. */
26
- let STYLE_CACHE = {};
27
- /** Current size of the cache. */
28
- let STYLE_CACHE_COUNT = 0;
29
- /** Cache limit. */
30
- const CACHE_LIMIT = 1000;
53
+ // Cache for parsed attribute selectors with bounded size to prevent memory leaks
54
+ const attributeSelectorCache = new Lru(5000);
55
+ function parseAttributeSelector(selector) {
56
+ // Check cache first
57
+ const cached = attributeSelectorCache.get(selector);
58
+ if (cached !== undefined) {
59
+ return cached;
60
+ }
61
+ // Match patterns like [data-size="medium"] or [data-is-selected]
62
+ const match = selector.match(/^\[([^=\]]+)(?:="([^"]+)")?\]$/);
63
+ const result = match
64
+ ? {
65
+ attribute: match[1],
66
+ value: match[2] || 'true', // Handle boolean attributes
67
+ fullSelector: selector,
68
+ }
69
+ : null;
70
+ // Cache the result
71
+ attributeSelectorCache.set(selector, result);
72
+ return result;
73
+ }
74
+ function hasConflictingAttributeSelectors(mods, parsedMods) {
75
+ const attributeMap = new Map();
76
+ for (const mod of mods) {
77
+ const parsed = parsedMods?.get(mod) ?? parseAttributeSelector(mod);
78
+ if (parsed && parsed.value !== 'true') {
79
+ if (!attributeMap.has(parsed.attribute)) {
80
+ attributeMap.set(parsed.attribute, []);
81
+ }
82
+ attributeMap.get(parsed.attribute).push(parsed.value);
83
+ }
84
+ }
85
+ // Check if any attribute has multiple values
86
+ for (const values of attributeMap.values()) {
87
+ if (values.length > 1)
88
+ return true;
89
+ }
90
+ return false;
91
+ }
92
+ /**
93
+ * Create a conflict checker function that uses precomputed attribute maps
94
+ * for efficient conflict detection during combination generation
95
+ */
96
+ function createAttributeConflictChecker(parsedMods) {
97
+ return (combination) => hasConflictingAttributeSelectors(combination, parsedMods);
98
+ }
99
+ // Build precomputed attribute maps for efficient not selector optimization
100
+ function buildAttributeMaps(currentMods, allMods) {
101
+ const allAttributes = new Map();
102
+ const currentAttributes = new Map();
103
+ const parsedMods = new Map();
104
+ // Parse all mods once and cache results
105
+ const allModsSet = new Set([...currentMods, ...allMods]);
106
+ for (const mod of allModsSet) {
107
+ if (!parsedMods.has(mod)) {
108
+ parsedMods.set(mod, parseAttributeSelector(mod));
109
+ }
110
+ }
111
+ // Build map of all possible values for each attribute
112
+ for (const mod of allMods) {
113
+ const parsed = parsedMods.get(mod);
114
+ if (parsed && parsed.value !== 'true') {
115
+ if (!allAttributes.has(parsed.attribute)) {
116
+ allAttributes.set(parsed.attribute, new Set());
117
+ }
118
+ allAttributes.get(parsed.attribute).add(parsed.value);
119
+ }
120
+ }
121
+ // Build map of current mod attribute values
122
+ for (const mod of currentMods) {
123
+ const parsed = parsedMods.get(mod);
124
+ if (parsed && parsed.value !== 'true') {
125
+ currentAttributes.set(parsed.attribute, parsed.value);
126
+ }
127
+ }
128
+ return { allAttributes, currentAttributes, parsedMods };
129
+ }
130
+ function optimizeNotSelectors(currentMods, allMods, precomputedMaps) {
131
+ const maps = precomputedMaps || buildAttributeMaps(currentMods, allMods);
132
+ const notMods = allMods.filter((mod) => !currentMods.includes(mod));
133
+ const optimizedNotMods = [];
134
+ for (const mod of notMods) {
135
+ const parsed = maps.parsedMods.get(mod);
136
+ if (parsed && parsed.value !== 'true') {
137
+ // If we already have a value for this attribute, skip this not selector
138
+ // because it's already mutually exclusive
139
+ if (maps.currentAttributes.has(parsed.attribute)) {
140
+ continue;
141
+ }
142
+ }
143
+ optimizedNotMods.push(mod);
144
+ }
145
+ return optimizedNotMods;
146
+ }
31
147
  /**
32
- * Render style props to complete Styled Components CSS.
33
- * @param styles - Complete style props.
34
- * @param responsive - A list of responsive zones
35
- * @param {string} [suffix]
36
- * @return {string}
148
+ * Explode a style handler result into logical rules with proper mapping
149
+ * Phase 1: Handler fan-out ($ selectors, arrays)
150
+ * Phase 2: Responsive fan-out (breakpoint arrays)
151
+ * Phase 3: Rule materialization
37
152
  */
38
- export function renderStyles(styles, responsive = [], suffix) {
39
- const zones = responsive;
40
- const responsiveStyles = Array.from(Array(zones.length)).map(() => '');
41
- const cacheKey = JSON.stringify({ s: styles, r: responsive, suffix });
42
- let rawStyles = '';
43
- const handlerQueue = [];
44
- if (!STYLE_CACHE[cacheKey]) {
45
- STYLE_CACHE_COUNT++;
46
- // clear cache if size is more that the limit
47
- if (STYLE_CACHE_COUNT > CACHE_LIMIT) {
48
- STYLE_CACHE_COUNT = 0;
49
- STYLE_CACHE = {};
50
- }
51
- const keys = styles ? Object.keys(styles) : [];
153
+ function explodeHandlerResult(result, zones, selectorSuffix = '', forceBreakpointIdx, responsiveOrigin = false) {
154
+ if (!result)
155
+ return [];
156
+ // Phase 1: Handler fan-out - normalize to array
157
+ const resultArray = Array.isArray(result) ? result : [result];
158
+ const logicalRules = [];
159
+ for (const item of resultArray) {
160
+ if (!item || typeof item !== 'object')
161
+ continue;
162
+ const { $, ...styleProps } = item;
163
+ // Phase 2: Responsive fan-out - handle array values
164
+ const breakpointGroups = new Map();
165
+ if (forceBreakpointIdx !== undefined) {
166
+ // When breakpoint is forced (from responsive processing), use all props for that breakpoint
167
+ const group = {};
168
+ for (const [prop, value] of Object.entries(styleProps)) {
169
+ if (value != null && value !== '') {
170
+ group[prop] = String(value);
171
+ }
172
+ }
173
+ if (Object.keys(group).length > 0) {
174
+ breakpointGroups.set(forceBreakpointIdx, group);
175
+ }
176
+ }
177
+ else {
178
+ // Normal processing - handle responsive arrays
179
+ const responsiveProps = [];
180
+ for (const [prop, value] of Object.entries(styleProps)) {
181
+ if (Array.isArray(value)) {
182
+ // Responsive array - create entry for each breakpoint
183
+ value.forEach((val, idx) => {
184
+ if (val != null && val !== '' && idx < zones.length) {
185
+ responsiveProps.push({ prop, value: val, breakpointIdx: idx });
186
+ }
187
+ });
188
+ }
189
+ else if (value != null && value !== '') {
190
+ // Single value - goes to base breakpoint
191
+ responsiveProps.push({ prop, value, breakpointIdx: 0 });
192
+ }
193
+ }
194
+ // Group by breakpoint index
195
+ for (const { prop, value, breakpointIdx } of responsiveProps) {
196
+ const group = breakpointGroups.get(breakpointIdx) || {};
197
+ group[prop] = String(value);
198
+ breakpointGroups.set(breakpointIdx, group);
199
+ }
200
+ }
201
+ // Phase 3: Selector fan-out - handle $ suffixes
202
+ // IMPORTANT: If we are already in a pseudo-element context (contains '::'),
203
+ // CSS does not allow further descendant/child selectors (e.g., '>*') after
204
+ // a pseudo-element. In such cases we must ignore only the `$`-derived
205
+ // selectors while still preserving base declarations for the current
206
+ // selector. Previously this branch returned early and accidentally dropped
207
+ // all declarations computed before, including valid base ones.
208
+ const inPseudoElementContext = selectorSuffix.includes('::');
209
+ if (inPseudoElementContext && $) {
210
+ // Skip this item entirely to avoid producing invalid selectors like
211
+ // `.t0::before>*`. Other items (without $) in the same handler result
212
+ // will still be processed and preserved.
213
+ continue;
214
+ }
215
+ const suffixes = $
216
+ ? (Array.isArray($) ? $ : [$]).map((s) => selectorSuffix + normalizeDollarSelectorSuffix(String(s)))
217
+ : [selectorSuffix];
218
+ // Early identical-breakpoint coalescing: skip duplicate declarations
219
+ const seenDeclarations = new Map();
220
+ // Process breakpoints in order to prefer lower breakpoint indices
221
+ const sortedBreakpoints = Array.from(breakpointGroups.entries()).sort(([a], [b]) => a - b);
222
+ for (const [breakpointIdx, declarations] of sortedBreakpoints) {
223
+ if (Object.keys(declarations).length === 0)
224
+ continue;
225
+ // Create a stable hash key for identical declarations
226
+ const declarationKeys = Object.keys(declarations).sort();
227
+ const declarationHash = declarationKeys
228
+ .map((key) => `${key}:${declarations[key]}`)
229
+ .join(';');
230
+ const existingBreakpointIdx = seenDeclarations.get(declarationHash);
231
+ if (existingBreakpointIdx !== undefined) {
232
+ // Skip this breakpoint as it has identical declarations to a previous one
233
+ // The CSS cascade will handle the responsive behavior correctly
234
+ continue;
235
+ }
236
+ // Mark this declaration set as seen
237
+ seenDeclarations.set(declarationHash, breakpointIdx);
238
+ // Create logical rules for this unique declaration set
239
+ for (const suffix of suffixes) {
240
+ logicalRules.push({
241
+ selectorSuffix: suffix,
242
+ breakpointIdx,
243
+ declarations,
244
+ responsiveSource: responsiveOrigin || forceBreakpointIdx !== undefined,
245
+ });
246
+ }
247
+ }
248
+ }
249
+ return logicalRules;
250
+ }
251
+ /**
252
+ * Convert handler result (CSSMap) to CSS string for global injection
253
+ */
254
+ function convertHandlerResultToCSS(result, selectorSuffix = '') {
255
+ if (!result)
256
+ return '';
257
+ if (Array.isArray(result)) {
258
+ const fragments = [];
259
+ for (const item of result) {
260
+ const itemCSS = convertHandlerResultToCSS(item, selectorSuffix);
261
+ if (itemCSS) {
262
+ fragments.push(itemCSS);
263
+ }
264
+ }
265
+ return fragments.join('');
266
+ }
267
+ const { $, css, ...styleProps } = result;
268
+ const styleFragments = [];
269
+ // Process style properties using array accumulation
270
+ for (const [styleName, value] of Object.entries(styleProps)) {
271
+ if (Array.isArray(value)) {
272
+ // Handle array values
273
+ for (const val of value) {
274
+ if (val) {
275
+ styleFragments.push(`${styleName}: ${val};\n`);
276
+ }
277
+ }
278
+ }
279
+ else if (value) {
280
+ // Handle single values
281
+ styleFragments.push(`${styleName}: ${value};\n`);
282
+ }
283
+ }
284
+ let renderedStyles = styleFragments.join('');
285
+ if (css) {
286
+ renderedStyles = css + '\n' + renderedStyles;
287
+ }
288
+ if (!renderedStyles) {
289
+ return '';
290
+ }
291
+ const finalSelectorSuffix = selectorSuffix || '';
292
+ if (Array.isArray($)) {
293
+ const ruleFragments = [];
294
+ for (const suffix of $) {
295
+ const normalized = suffix
296
+ ? normalizeDollarSelectorSuffix(String(suffix))
297
+ : '';
298
+ ruleFragments.push(`&${finalSelectorSuffix}${normalized}{\n${renderedStyles}}\n`);
299
+ }
300
+ return ruleFragments.join('');
301
+ }
302
+ const normalizedSingle = $ ? normalizeDollarSelectorSuffix(String($)) : '';
303
+ return `&${finalSelectorSuffix}${normalizedSingle}{\n${renderedStyles}}\n`;
304
+ }
305
+ /**
306
+ * Convert logical rules to final StyleResult format
307
+ */
308
+ function materializeRules(logicalRules, className, zones) {
309
+ return logicalRules.map((rule) => {
310
+ // Generate base selector
311
+ let selector = `.${className}${rule.selectorSuffix}`;
312
+ // Increase specificity for tasty class selectors by duplicating the class
313
+ if (/^t\d+$/.test(className)) {
314
+ selector = `.${className}${selector}`;
315
+ }
316
+ const declarations = Object.entries(rule.declarations)
317
+ .map(([prop, value]) => `${prop}: ${value};`)
318
+ .join(' ');
319
+ const q = rule.breakpointIdx > 0
320
+ ? zones[rule.breakpointIdx]?.mediaQuery
321
+ : rule.responsiveSource
322
+ ? zones[0]?.mediaQuery
323
+ : undefined;
324
+ const atRules = q ? [`@media ${q}`] : undefined;
325
+ return {
326
+ selector,
327
+ declarations,
328
+ atRules,
329
+ };
330
+ });
331
+ }
332
+ /**
333
+ * Core style processing logic that generates logical rules
334
+ * Used by the unified renderStyles function
335
+ */
336
+ function generateLogicalRules(styles, responsive = [], parentSuffix = '') {
337
+ const zones = pointsToZones(responsive || []);
338
+ const allLogicalRules = [];
339
+ // Cache for normalizeStyleZones results to avoid repeated computation
340
+ // WeakMap allows automatic cleanup when arrays are garbage collected
341
+ const normalizeCache = new WeakMap();
342
+ // Helper function to get cached normalizeStyleZones result
343
+ function cachedNormalizeStyleZones(value, zoneNumber) {
344
+ // Only cache for arrays - other types are fast to process
345
+ if (!Array.isArray(value)) {
346
+ return normalizeStyleZones(value, zoneNumber);
347
+ }
348
+ // Check if we have a cache for this array reference
349
+ let zoneCache = normalizeCache.get(value);
350
+ if (!zoneCache) {
351
+ zoneCache = new Map();
352
+ normalizeCache.set(value, zoneCache);
353
+ }
354
+ // Check if we have a cached result for this zone count
355
+ let result = zoneCache.get(zoneNumber);
356
+ if (result === undefined) {
357
+ result = normalizeStyleZones(value, zoneNumber);
358
+ zoneCache.set(zoneNumber, result);
359
+ }
360
+ return result;
361
+ }
362
+ // Local versions of helpers that leverage cachedNormalizeStyleZones
363
+ function stateMapToArrayOfStateMapsLocal(value, zoneNumber) {
364
+ // Short-circuit for single zone - avoid array allocation
365
+ if (zoneNumber === 1) {
366
+ const singleMap = {};
367
+ for (const [state, stateValue] of Object.entries(value)) {
368
+ if (Array.isArray(stateValue)) {
369
+ // Take the first value from the array or null if empty
370
+ singleMap[state] = stateValue.length > 0 ? stateValue[0] : null;
371
+ }
372
+ else {
373
+ singleMap[state] = stateValue;
374
+ }
375
+ }
376
+ return [singleMap];
377
+ }
378
+ const result = Array.from({ length: zoneNumber }, () => ({}));
379
+ for (const [state, stateValue] of Object.entries(value)) {
380
+ const perZone = Array.isArray(stateValue)
381
+ ? cachedNormalizeStyleZones(stateValue, zoneNumber)
382
+ : Array(zoneNumber).fill(stateValue);
383
+ for (let i = 0; i < zoneNumber; i++) {
384
+ const v = perZone[i];
385
+ result[i][state] = v;
386
+ }
387
+ }
388
+ return result;
389
+ }
390
+ function normalizeArrayWithStateMapsLocal(valueArray, zoneNumber) {
391
+ // Short-circuit for single zone - avoid array propagation and mapping
392
+ if (zoneNumber === 1) {
393
+ const firstEntry = valueArray.length > 0 ? valueArray[0] : null;
394
+ if (firstEntry &&
395
+ typeof firstEntry === 'object' &&
396
+ !Array.isArray(firstEntry)) {
397
+ return [firstEntry];
398
+ }
399
+ return [{ '': firstEntry }];
400
+ }
401
+ const propagated = cachedNormalizeStyleZones(valueArray, zoneNumber);
402
+ // Trim trailing null/undefined entries to reduce processing
403
+ let lastNonNullIndex = propagated.length - 1;
404
+ while (lastNonNullIndex >= 0 && propagated[lastNonNullIndex] == null) {
405
+ lastNonNullIndex--;
406
+ }
407
+ // If all entries are null, return minimal array
408
+ if (lastNonNullIndex < 0) {
409
+ return Array.from({ length: zoneNumber }, () => ({ '': null }));
410
+ }
411
+ // Process only up to the last non-null entry, then fill the rest with the last value
412
+ const result = [];
413
+ let lastProcessedEntry = null;
414
+ for (let i = 0; i <= lastNonNullIndex; i++) {
415
+ const entry = propagated[i];
416
+ let processedEntry;
417
+ if (entry && typeof entry === 'object' && !Array.isArray(entry)) {
418
+ processedEntry = entry;
419
+ }
420
+ else {
421
+ processedEntry = { '': entry };
422
+ }
423
+ result.push(processedEntry);
424
+ lastProcessedEntry = processedEntry;
425
+ }
426
+ // Fill remaining slots with the last processed entry (CSS cascade behavior)
427
+ for (let i = lastNonNullIndex + 1; i < zoneNumber; i++) {
428
+ result.push(lastProcessedEntry || { '': null });
429
+ }
430
+ return result;
431
+ }
432
+ // Process styles recursively, preserving mod selectors and combining with nested selector suffixes
433
+ function processStyles(currentStyles, parentSuffix = '') {
434
+ const keys = Object.keys(currentStyles || {});
52
435
  const selectorKeys = keys.filter((key) => isSelector(key));
53
- let innerStyles = '';
54
- if (selectorKeys.length) {
55
- selectorKeys.forEach((key) => {
56
- const addSuffix = getSelector(key);
57
- innerStyles += renderStyles(styles?.[key], responsive, addSuffix);
58
- });
436
+ // Recurse into nested selectors first to compute proper suffix chaining
437
+ for (const key of selectorKeys) {
438
+ const suffix = getSelector(key);
439
+ if (suffix && currentStyles[key]) {
440
+ processStyles(currentStyles[key], `${parentSuffix}${suffix}`);
441
+ }
59
442
  }
443
+ // Build handler queue for style properties at this level
444
+ const handlerQueue = [];
445
+ const seenHandlers = new Set();
60
446
  keys.forEach((styleName) => {
61
447
  if (isSelector(styleName))
62
448
  return;
@@ -64,40 +450,54 @@ export function renderStyles(styles, responsive = [], suffix) {
64
450
  if (!handlers) {
65
451
  handlers = STYLE_HANDLER_MAP[styleName] = [createStyle(styleName)];
66
452
  }
67
- handlers.forEach((STYLE) => {
68
- if (handlerQueue.find((queueItem) => queueItem.handler === STYLE))
453
+ handlers.forEach((handler) => {
454
+ if (seenHandlers.has(handler)) {
69
455
  return;
456
+ }
457
+ seenHandlers.add(handler);
70
458
  let isResponsive = false;
71
- const lookupStyles = STYLE.__lookupStyles;
459
+ const lookupStyles = handler.__lookupStyles;
72
460
  const filteredStyleMap = lookupStyles.reduce((map, name) => {
73
- map[name] = styles?.[name];
74
- if (Array.isArray(map[name])) {
75
- if (map[name].length === 0) {
76
- delete map[name];
461
+ const value = currentStyles?.[name];
462
+ if (value !== undefined) {
463
+ // Case 1: state-map-of-arrays array-of-state-maps
464
+ if (value &&
465
+ typeof value === 'object' &&
466
+ !Array.isArray(value) &&
467
+ stateMapHasResponsiveArrays(value)) {
468
+ map[name] = stateMapToArrayOfStateMapsLocal(value, zones.length);
469
+ isResponsive = true;
77
470
  }
78
- else {
79
- if (map[name].length === 1) {
80
- map[name] = map[name][0];
471
+ else if (Array.isArray(value)) {
472
+ // Case 2: array that may contain state maps → normalize to array-of-state-maps
473
+ if (value.length > 0) {
474
+ map[name] = normalizeArrayWithStateMapsLocal(value, zones.length);
475
+ isResponsive = true;
81
476
  }
82
- isResponsive = true;
477
+ }
478
+ else {
479
+ map[name] = value;
83
480
  }
84
481
  }
85
482
  return map;
86
483
  }, {});
87
484
  handlerQueue.push({
88
- handler: STYLE,
485
+ handler,
89
486
  styleMap: filteredStyleMap,
90
487
  isResponsive,
91
488
  });
92
489
  });
93
490
  });
491
+ // Process handlers using the three-phase approach
94
492
  handlerQueue.forEach(({ handler, styleMap, isResponsive }) => {
95
493
  const lookupStyles = handler.__lookupStyles;
96
494
  if (isResponsive) {
495
+ // For responsive styles, resolve arrays using normalizeStyleZones
97
496
  const valueMap = lookupStyles.reduce((map, style) => {
98
- map[style] = normalizeStyleZones(styleMap[style], zones.length);
497
+ map[style] = cachedNormalizeStyleZones(styleMap[style], zones.length);
99
498
  return map;
100
499
  }, {});
500
+ // Create props for each breakpoint
101
501
  const propsByPoint = zones.map((zone, i) => {
102
502
  const pointProps = {};
103
503
  lookupStyles.forEach((style) => {
@@ -107,23 +507,275 @@ export function renderStyles(styles, responsive = [], suffix) {
107
507
  });
108
508
  return pointProps;
109
509
  });
110
- const rulesByPoint = propsByPoint.map((props) => handler(props, suffix));
111
- rulesByPoint.forEach((rules, i) => {
112
- responsiveStyles[i] += rules || '';
510
+ // Call handler for each breakpoint, with state map processing if needed
511
+ propsByPoint.forEach((pointProps, breakpointIdx) => {
512
+ const hasStateMapsAtPoint = lookupStyles.some((style) => {
513
+ const v = pointProps[style];
514
+ return v && typeof v === 'object' && !Array.isArray(v);
515
+ });
516
+ if (hasStateMapsAtPoint) {
517
+ const allMods = new Set();
518
+ const styleStates = {};
519
+ lookupStyles.forEach((style) => {
520
+ const v = pointProps[style];
521
+ if (v && typeof v === 'object' && !Array.isArray(v)) {
522
+ const { states, mods } = styleStateMapToStyleStateDataList(v);
523
+ styleStates[style] = states;
524
+ mods.forEach((m) => allMods.add(m));
525
+ }
526
+ else {
527
+ styleStates[style] = [{ mods: [], notMods: [], value: v }];
528
+ }
529
+ });
530
+ const allModsArray = Array.from(allMods);
531
+ // Precompute attribute maps once for all combinations
532
+ const attributeMaps = buildAttributeMaps([], allModsArray);
533
+ // Generate combinations with conflict-aware pruning
534
+ const conflictChecker = createAttributeConflictChecker(attributeMaps.parsedMods);
535
+ const combinations = getModCombinationsIterative(allModsArray, true, conflictChecker);
536
+ combinations.forEach((modCombination) => {
537
+ const stateProps = {};
538
+ lookupStyles.forEach((style) => {
539
+ const states = styleStates[style];
540
+ const matchingState = states.find((state) => computeState(state.model, (mod) => modCombination.includes(mod)));
541
+ if (matchingState) {
542
+ stateProps[style] = matchingState.value;
543
+ }
544
+ });
545
+ // Use precomputed maps for efficient not selector optimization
546
+ const currentMaps = buildAttributeMaps(modCombination, allModsArray);
547
+ const optimizedNotMods = optimizeNotSelectors(modCombination, allModsArray, currentMaps);
548
+ const modsSelectors = `${modCombination
549
+ .map(getModSelector)
550
+ .join('')}${optimizedNotMods
551
+ .map((mod) => {
552
+ const sel = getModSelector(mod);
553
+ return sel.startsWith(':not(')
554
+ ? sel.slice(5, -1)
555
+ : `:not(${sel})`;
556
+ })
557
+ .join('')}`;
558
+ const result = handler(stateProps);
559
+ if (!result)
560
+ return;
561
+ const logicalRules = explodeHandlerResult(result, zones || [], `${modsSelectors}${parentSuffix}`, breakpointIdx, true);
562
+ allLogicalRules.push(...logicalRules);
563
+ });
564
+ }
565
+ else {
566
+ const result = handler(pointProps);
567
+ if (!result)
568
+ return;
569
+ const logicalRules = explodeHandlerResult(result, zones || [], parentSuffix, breakpointIdx, true);
570
+ allLogicalRules.push(...logicalRules);
571
+ }
113
572
  });
114
573
  }
115
574
  else {
116
- rawStyles +=
117
- handler(styleMap, suffix) || '';
575
+ // For non-responsive styles, check if any values have state maps
576
+ const hasStateMaps = lookupStyles.some((style) => {
577
+ const value = styleMap[style];
578
+ return value && typeof value === 'object' && !Array.isArray(value);
579
+ });
580
+ if (hasStateMaps) {
581
+ // Process each style property individually for state resolution
582
+ const allMods = new Set();
583
+ const styleStates = {};
584
+ lookupStyles.forEach((style) => {
585
+ const value = styleMap[style];
586
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
587
+ const { states, mods } = styleStateMapToStyleStateDataList(value);
588
+ styleStates[style] = states;
589
+ mods.forEach((mod) => allMods.add(mod));
590
+ }
591
+ else {
592
+ // Simple value, create a single state
593
+ styleStates[style] = [{ mods: [], notMods: [], value }];
594
+ }
595
+ });
596
+ // Generate all possible mod combinations
597
+ const allModsArray = Array.from(allMods);
598
+ // Precompute attribute maps once for all combinations
599
+ const attributeMaps = buildAttributeMaps([], allModsArray);
600
+ // Generate combinations with conflict-aware pruning
601
+ const conflictChecker = createAttributeConflictChecker(attributeMaps.parsedMods);
602
+ const combinations = getModCombinationsIterative(allModsArray, true, conflictChecker);
603
+ combinations.forEach((modCombination) => {
604
+ const stateProps = {};
605
+ lookupStyles.forEach((style) => {
606
+ const states = styleStates[style];
607
+ // Find the matching state for this mod combination
608
+ const matchingState = states.find((state) => {
609
+ return computeState(state.model, (mod) => modCombination.includes(mod));
610
+ });
611
+ if (matchingState) {
612
+ stateProps[style] = matchingState.value;
613
+ }
614
+ });
615
+ // Use precomputed maps for efficient not selector optimization
616
+ const currentMaps = buildAttributeMaps(modCombination, allModsArray);
617
+ const optimizedNotMods = optimizeNotSelectors(modCombination, allModsArray, currentMaps);
618
+ const modsSelectors = `${modCombination
619
+ .map(getModSelector)
620
+ .join('')}${optimizedNotMods
621
+ .map((mod) => {
622
+ const sel = getModSelector(mod);
623
+ return sel.startsWith(':not(')
624
+ ? sel.slice(5, -1)
625
+ : `:not(${sel})`;
626
+ })
627
+ .join('')}`;
628
+ // If any state value is responsive (array), fan-out by breakpoint
629
+ const hasResponsiveStateValues = lookupStyles.some((style) => Array.isArray(stateProps[style]));
630
+ if (hasResponsiveStateValues) {
631
+ const propsByPoint = zones.map((_, i) => {
632
+ const pointProps = {};
633
+ lookupStyles.forEach((style) => {
634
+ const v = stateProps[style];
635
+ if (Array.isArray(v)) {
636
+ const arr = cachedNormalizeStyleZones(v, zones.length);
637
+ pointProps[style] = arr?.[i];
638
+ }
639
+ else {
640
+ pointProps[style] = v;
641
+ }
642
+ });
643
+ return pointProps;
644
+ });
645
+ propsByPoint.forEach((props, breakpointIdx) => {
646
+ const res = handler(props);
647
+ if (!res)
648
+ return;
649
+ const logical = explodeHandlerResult(res, zones || [], `${modsSelectors}${parentSuffix}`, breakpointIdx, true);
650
+ allLogicalRules.push(...logical);
651
+ });
652
+ }
653
+ else {
654
+ // Simple non-responsive state values
655
+ const result = handler(stateProps);
656
+ if (!result)
657
+ return;
658
+ const logical = explodeHandlerResult(result, zones || [], `${modsSelectors}${parentSuffix}`);
659
+ allLogicalRules.push(...logical);
660
+ }
661
+ });
662
+ }
663
+ else {
664
+ // Simple case: no state maps, call handler directly
665
+ const result = handler(styleMap);
666
+ if (result) {
667
+ const logical = explodeHandlerResult(result, zones || [], parentSuffix);
668
+ allLogicalRules.push(...logical);
669
+ }
670
+ }
118
671
  }
119
672
  });
120
- STYLE_CACHE[cacheKey] = `&${suffix || ''}{outline: none;\n&[hidden]{display: none !important;}}${rawStyles}${responsive &&
121
- responsive.length &&
122
- responsiveStyles.filter((s) => s).length
123
- ? mediaWrapper(responsiveStyles, zones)
124
- : ''}${innerStyles}`;
125
673
  }
126
- return STYLE_CACHE[cacheKey];
674
+ // Kick off processing from the root styles with empty suffix
675
+ processStyles(styles, parentSuffix);
676
+ return allLogicalRules;
677
+ }
678
+ export function renderStyles(styles, responsive = [], classNameOrSelector) {
679
+ const directSelector = !!classNameOrSelector;
680
+ if (!styles) {
681
+ return directSelector ? [] : { rules: [] };
682
+ }
683
+ // Generate logical rules using shared pipeline
684
+ const allLogicalRules = generateLogicalRules(styles, responsive);
685
+ const zones = pointsToZones(responsive || []);
686
+ if (directSelector) {
687
+ // Direct selector mode: convert logical rules directly to StyleResult format
688
+ if (!classNameOrSelector) {
689
+ throw new Error('directSelector mode requires classNameOrSelector');
690
+ }
691
+ return allLogicalRules.map((rule) => {
692
+ // Replace & with the actual selector or append suffix to selector
693
+ let finalSelector = rule.selectorSuffix
694
+ ? `${classNameOrSelector}${rule.selectorSuffix}`
695
+ : classNameOrSelector;
696
+ // Increase specificity for tasty class selectors by duplicating the class
697
+ if (finalSelector.startsWith('.') && /^\.t\d+/.test(finalSelector)) {
698
+ const classMatch = finalSelector.match(/^\.t\d+/);
699
+ if (classMatch) {
700
+ const baseClass = classMatch[0];
701
+ finalSelector = baseClass + finalSelector;
702
+ }
703
+ }
704
+ const declarations = Object.entries(rule.declarations)
705
+ .map(([prop, value]) => `${prop}: ${value};`)
706
+ .join(' ');
707
+ const q = rule.breakpointIdx > 0
708
+ ? zones[rule.breakpointIdx]?.mediaQuery
709
+ : rule.responsiveSource
710
+ ? zones[0]?.mediaQuery
711
+ : undefined;
712
+ const atRules = q ? [`@media ${q}`] : undefined;
713
+ return {
714
+ selector: finalSelector,
715
+ declarations,
716
+ atRules,
717
+ };
718
+ });
719
+ }
720
+ // Standard mode: use accumulation and materialization with className
721
+ const accumulatedRules = new Map();
722
+ for (const rule of allLogicalRules) {
723
+ // Create a key based on breakpointIdx, selectorSuffix, and responsiveOrigin
724
+ const ruleKey = `${rule.breakpointIdx}|${rule.selectorSuffix}|${rule.responsiveSource}`;
725
+ const existing = accumulatedRules.get(ruleKey);
726
+ if (existing) {
727
+ // Merge declarations from this rule into the existing one
728
+ Object.assign(existing.declarations, rule.declarations);
729
+ }
730
+ else {
731
+ // Create a new accumulated rule
732
+ accumulatedRules.set(ruleKey, {
733
+ selectorSuffix: rule.selectorSuffix,
734
+ breakpointIdx: rule.breakpointIdx,
735
+ declarations: { ...rule.declarations },
736
+ responsiveSource: rule.responsiveSource,
737
+ });
738
+ }
739
+ }
740
+ // If no className provided, return rules with needsClassName flag
741
+ if (!classNameOrSelector) {
742
+ const materializedRules = Array.from(accumulatedRules.values()).map((rule) => {
743
+ const declarations = Object.entries(rule.declarations)
744
+ .map(([prop, value]) => `${prop}: ${value};`)
745
+ .join(' ');
746
+ const q = rule.breakpointIdx > 0
747
+ ? zones[rule.breakpointIdx]?.mediaQuery
748
+ : rule.responsiveSource
749
+ ? zones[0]?.mediaQuery
750
+ : undefined;
751
+ const atRules = q ? [`@media ${q}`] : undefined;
752
+ return {
753
+ selector: rule.selectorSuffix || '',
754
+ declarations,
755
+ atRules,
756
+ needsClassName: true, // Flag for injector to prepend className
757
+ };
758
+ });
759
+ return {
760
+ rules: materializedRules,
761
+ };
762
+ }
763
+ // Materialize the accumulated logical rules into final format
764
+ const finalRulesRaw = materializeRules(Array.from(accumulatedRules.values()), classNameOrSelector, zones || []);
765
+ // Simplified deduplication (should be much less work now)
766
+ const seen = new Set();
767
+ const finalRules = finalRulesRaw.filter((rule) => {
768
+ const at = rule.atRules && rule.atRules.length ? `@${rule.atRules.join('|')}` : '';
769
+ const key = `${rule.selector}|${rule.declarations}|${at}`;
770
+ if (seen.has(key))
771
+ return false;
772
+ seen.add(key);
773
+ return true;
774
+ });
775
+ return {
776
+ rules: finalRules,
777
+ className: classNameOrSelector,
778
+ };
127
779
  }
128
780
 
129
781