@cube-dev/ui-kit 0.74.3 → 0.75.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 (510) hide show
  1. package/CHANGELOG.md +14 -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 +1 -1
  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 +1 -1
  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 +906 -0
  393. package/es/tasty/index.js +3 -1
  394. package/es/tasty/injector/index.js +171 -0
  395. package/es/tasty/injector/injector.js +688 -0
  396. package/es/tasty/injector/sheet-manager.js +754 -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 +94 -20
  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/mergeStyles.js +1 -1
  452. package/es/tasty/utils/modAttrs.js +1 -1
  453. package/es/tasty/utils/renderStyles.js +670 -58
  454. package/es/tasty/utils/responsive.js +1 -7
  455. package/es/tasty/utils/string.js +1 -1
  456. package/es/tasty/utils/styles.js +62 -235
  457. package/es/tasty/utils/warnings.js +1 -1
  458. package/es/tokens.js +1 -12
  459. package/es/type-checks.js +1 -1
  460. package/es/utils/ResizeSensor.js +1 -1
  461. package/es/utils/modules.js +1 -1
  462. package/es/utils/promise.js +1 -1
  463. package/es/utils/random.js +1 -1
  464. package/es/utils/range.js +1 -1
  465. package/es/utils/react/Slots.js +1 -1
  466. package/es/utils/react/chain.js +1 -1
  467. package/es/utils/react/forwardRefWithGenerics.js +1 -1
  468. package/es/utils/react/index.js +1 -1
  469. package/es/utils/react/interactions.js +1 -1
  470. package/es/utils/react/isTextOnly.js +1 -1
  471. package/es/utils/react/mapProps.js +1 -1
  472. package/es/utils/react/mergeProps.js +1 -1
  473. package/es/utils/react/nullableValue.js +1 -1
  474. package/es/utils/react/sharedStore.js +1 -1
  475. package/es/utils/react/useCombinedRefs.js +1 -1
  476. package/es/utils/react/useControlledFocusVisible.js +1 -1
  477. package/es/utils/react/useEventBus.js +1 -1
  478. package/es/utils/react/useId.js +1 -1
  479. package/es/utils/react/useIsDarwin.js +1 -1
  480. package/es/utils/react/useKeySymbols.js +1 -1
  481. package/es/utils/react/useLayoutEffect.js +1 -1
  482. package/es/utils/react/useQaProps.js +1 -1
  483. package/es/utils/react/useViewportSize.js +1 -1
  484. package/es/utils/react/wrapNodeIfPlain.js +1 -1
  485. package/es/utils/transitions.js +1 -1
  486. package/es/utils/tree.js +1 -1
  487. package/es/utils/warnings.js +1 -1
  488. package/es/version.js +2 -2
  489. package/package.json +1 -1
  490. package/types/components/HiddenInput.d.ts +1 -3
  491. package/types/components/actions/Button/Button.d.ts +1 -0
  492. package/types/components/actions/Menu/styled.d.ts +702 -705
  493. package/types/components/actions/use-action.d.ts +1 -1
  494. package/types/components/content/List/SectionHeading.d.ts +234 -235
  495. package/types/components/fields/DatePicker/DatePickerElement.d.ts +234 -235
  496. package/types/tasty/debug.d.ts +250 -0
  497. package/types/tasty/index.d.ts +2 -0
  498. package/types/tasty/injector/index.d.ts +71 -0
  499. package/types/tasty/injector/injector.d.ts +109 -0
  500. package/types/tasty/injector/sheet-manager.d.ts +94 -0
  501. package/types/tasty/injector/types.d.ts +90 -0
  502. package/types/tasty/parser/lru.d.ts +5 -1
  503. package/types/tasty/styles/color.d.ts +3 -1
  504. package/types/tasty/styles/reset.d.ts +1 -2
  505. package/types/tasty/types.d.ts +0 -2
  506. package/types/tasty/utils/getModCombinations.d.ts +9 -1
  507. package/types/tasty/utils/renderStyles.d.ts +25 -7
  508. package/types/tasty/utils/responsive.d.ts +0 -1
  509. package/types/tasty/utils/styles.d.ts +6 -90
  510. package/types/tokens.d.ts +0 -11
@@ -0,0 +1,688 @@
1
+ /**
2
+ * @license MIT
3
+ * author: Cube Dev Team
4
+ * @cube-dev/ui-kit v0.75.0
5
+ * Released under the MIT license.
6
+ */
7
+
8
+ /**
9
+ * Style injector that works with structured style objects
10
+ * Eliminates CSS string parsing for better performance
11
+ */
12
+ import { Component } from 'react';
13
+ import { parseStyle } from '../utils/styles';
14
+ // Simple CSS text to StyleResult converter for injectGlobal backward compatibility
15
+ import { SheetManager } from './sheet-manager';
16
+ /**
17
+ * Generate sequential class name with format t{number}
18
+ */
19
+ function generateClassName(counter) {
20
+ return `t${counter}`;
21
+ }
22
+ export class StyleInjector {
23
+ sheetManager;
24
+ config;
25
+ cleanupScheduled = false;
26
+ constructor(config = {}) {
27
+ this.config = config;
28
+ this.sheetManager = new SheetManager(config);
29
+ }
30
+ /**
31
+ * Inject styles from StyleResult objects
32
+ */
33
+ inject(rules, options) {
34
+ const root = options?.root || document;
35
+ const registry = this.sheetManager.getRegistry(root);
36
+ if (rules.length === 0) {
37
+ return {
38
+ className: '',
39
+ dispose: () => { },
40
+ };
41
+ }
42
+ // Rules are now in StyleRule format directly
43
+ // Try to dedupe by className first — if the same class was already inserted, reuse it
44
+ // Only extract className if it looks like a generated tasty className (t + digits)
45
+ const preExtractedClass = this.extractClassName(rules);
46
+ const generatedClass = preExtractedClass && /^t\d+$/.test(preExtractedClass)
47
+ ? preExtractedClass
48
+ : null;
49
+ if (generatedClass && registry.rules.has(generatedClass)) {
50
+ const currentRefCount = registry.refCounts.get(generatedClass) || 0;
51
+ registry.refCounts.set(generatedClass, currentRefCount + 1);
52
+ // If this class was previously marked as unused, clear that state now
53
+ if (registry.unusedRules.has(generatedClass)) {
54
+ registry.unusedRules.delete(generatedClass);
55
+ if (registry.metrics) {
56
+ // Consider this a reuse rather than a cold miss
57
+ registry.metrics.unusedHits++;
58
+ }
59
+ }
60
+ // Update metrics
61
+ if (registry.metrics) {
62
+ registry.metrics.hits++;
63
+ }
64
+ return {
65
+ className: generatedClass,
66
+ dispose: () => this.dispose(generatedClass, registry),
67
+ };
68
+ }
69
+ // Try to restore from unused styles if className exists but is not active
70
+ if (generatedClass &&
71
+ registry.rules.has(generatedClass) &&
72
+ !registry.refCounts.has(generatedClass)) {
73
+ const restored = this.sheetManager.restoreFromUnused(registry, generatedClass);
74
+ if (restored) {
75
+ // Update metrics
76
+ if (registry.metrics) {
77
+ registry.metrics.hits++;
78
+ }
79
+ return {
80
+ className: generatedClass,
81
+ dispose: () => this.dispose(generatedClass, registry),
82
+ };
83
+ }
84
+ }
85
+ // No active cache dedupe — rely on provided className or disposed cache only
86
+ // Generate final className - only use extracted className if it's a generated tasty className
87
+ const className = generatedClass
88
+ ? generatedClass
89
+ : generateClassName(registry.classCounter++);
90
+ // If a different pre-extracted class was used in rules, rewrite selectors to the final class
91
+ // Also increase specificity for class-based selectors by duplicating the class
92
+ const rulesToInsert = generatedClass && generatedClass !== className
93
+ ? rules.map((r) => {
94
+ if (r.selector.startsWith('.' + generatedClass)) {
95
+ const newSelector = '.' + className + r.selector.slice(generatedClass.length + 1);
96
+ // Increase specificity by duplicating the class for class-based selectors
97
+ const specificSelector = newSelector.startsWith('.' + className) &&
98
+ /^\.t\d+/.test(newSelector)
99
+ ? '.' + className + newSelector
100
+ : newSelector;
101
+ return {
102
+ ...r,
103
+ selector: specificSelector,
104
+ };
105
+ }
106
+ return r;
107
+ })
108
+ : rules.map((r) => {
109
+ // Increase specificity for class-based selectors by duplicating the class
110
+ if (r.selector.startsWith('.') && /^\.t\d+/.test(r.selector)) {
111
+ const classMatch = r.selector.match(/^\.t\d+/);
112
+ if (classMatch) {
113
+ const baseClass = classMatch[0];
114
+ return {
115
+ ...r,
116
+ selector: baseClass + r.selector,
117
+ };
118
+ }
119
+ }
120
+ return r;
121
+ });
122
+ // Before inserting, auto-register @property for any color custom properties being defined.
123
+ // Fast parse: split declarations by ';' and match "--*-color:"
124
+ // Do this only when we actually insert (i.e., no cache hit above)
125
+ const colorPropRegex = /^\s*(--[a-z0-9-]+-color)\s*:/i;
126
+ for (const rule of rulesToInsert) {
127
+ // Skip if no declarations
128
+ if (!rule.declarations)
129
+ continue;
130
+ const parts = rule.declarations.split(/;+\s*/);
131
+ for (const part of parts) {
132
+ if (!part)
133
+ continue;
134
+ const match = colorPropRegex.exec(part);
135
+ if (match) {
136
+ const propName = match[1];
137
+ // Register @property only if not already defined for this root
138
+ if (!this.isPropertyDefined(propName, { root })) {
139
+ this.property(propName, {
140
+ syntax: '<color>',
141
+ initialValue: 'transparent',
142
+ root,
143
+ });
144
+ }
145
+ }
146
+ }
147
+ }
148
+ // Insert rules using existing sheet manager
149
+ const ruleInfo = this.sheetManager.insertRule(registry, rulesToInsert, className, root);
150
+ if (!ruleInfo) {
151
+ // Update metrics
152
+ if (registry.metrics) {
153
+ registry.metrics.misses++;
154
+ }
155
+ return {
156
+ className,
157
+ dispose: () => { },
158
+ };
159
+ }
160
+ // Store in registry
161
+ registry.refCounts.set(className, 1);
162
+ registry.rules.set(className, ruleInfo);
163
+ // Update metrics
164
+ if (registry.metrics) {
165
+ registry.metrics.totalInsertions++;
166
+ registry.metrics.misses++;
167
+ }
168
+ return {
169
+ className,
170
+ dispose: () => this.dispose(className, registry),
171
+ };
172
+ }
173
+ /**
174
+ * Extract className from rules (assumes first rule contains the base className)
175
+ */
176
+ extractClassName(rules) {
177
+ for (const rule of rules) {
178
+ const match = rule.selector.match(/^\.([a-zA-Z0-9_-]+)/);
179
+ if (match) {
180
+ return match[1];
181
+ }
182
+ }
183
+ return null;
184
+ }
185
+ /**
186
+ * Generate cache key from style rules with optimized deduplication
187
+ */
188
+ generateCacheKey(rules) {
189
+ const normalizeSelector = (selector) => {
190
+ const match = selector.match(/^\.[a-zA-Z0-9_-]+(.*)$/);
191
+ return match ? match[1] : selector;
192
+ };
193
+ // Sort rules to ensure consistent cache keys for equivalent rule sets
194
+ const sortedRules = [...rules].sort((a, b) => {
195
+ const aKey = `${normalizeSelector(a.selector)}${a.atRules ? a.atRules.join('|') : ''}`;
196
+ const bKey = `${normalizeSelector(b.selector)}${b.atRules ? b.atRules.join('|') : ''}`;
197
+ return aKey.localeCompare(bKey);
198
+ });
199
+ return sortedRules
200
+ .map((rule) => {
201
+ const at = rule.atRules && rule.atRules.length
202
+ ? `@${rule.atRules.join('|')}`
203
+ : '';
204
+ const sel = normalizeSelector(rule.selector);
205
+ // Normalize declarations by sorting properties for consistent caching
206
+ const normalizedDeclarations = rule.declarations
207
+ .split(';')
208
+ .filter(Boolean)
209
+ .map((decl) => decl.trim())
210
+ .sort()
211
+ .join(';');
212
+ return `${sel}{${normalizedDeclarations}}${at}`;
213
+ })
214
+ .join('');
215
+ }
216
+ /**
217
+ * Dispose of a className
218
+ */
219
+ dispose(className, registry) {
220
+ const currentRefCount = registry.refCounts.get(className) || 0;
221
+ if (currentRefCount <= 1) {
222
+ // Mark as unused immediately
223
+ this.sheetManager.markAsUnused(registry, className);
224
+ }
225
+ else {
226
+ registry.refCounts.set(className, currentRefCount - 1);
227
+ }
228
+ }
229
+ /**
230
+ * Cleanup unused rules
231
+ */
232
+ cleanup(root) {
233
+ const registry = this.sheetManager.getRegistry(root || document);
234
+ this.sheetManager.processCleanupQueue(registry);
235
+ }
236
+ /**
237
+ * Force bulk cleanup of unused styles
238
+ */
239
+ forceBulkCleanup(root) {
240
+ const registry = this.sheetManager.getRegistry(root || document);
241
+ this.sheetManager['performBulkCleanup'](registry);
242
+ }
243
+ /**
244
+ * Get CSS text from all sheets (for SSR)
245
+ */
246
+ getCssText(options) {
247
+ const root = options?.root || document;
248
+ const registry = this.sheetManager.getRegistry(root);
249
+ return this.sheetManager.getCssText(registry);
250
+ }
251
+ /**
252
+ * Get CSS only for the provided tasty classNames (e.g., ["t0","t3"])
253
+ */
254
+ getCssTextForClasses(classNames, options) {
255
+ const root = options?.root || document;
256
+ const registry = this.sheetManager.getRegistry(root);
257
+ const cssChunks = [];
258
+ for (const cls of classNames) {
259
+ const info = registry.rules.get(cls);
260
+ if (info) {
261
+ if (info.cssText && info.cssText.length) {
262
+ cssChunks.push(...info.cssText);
263
+ }
264
+ else {
265
+ // Fallback: try to read from live sheet by index range
266
+ const sheet = registry.sheets[info.sheetIndex];
267
+ const styleSheet = sheet?.sheet?.sheet;
268
+ if (styleSheet) {
269
+ const start = Math.max(0, info.ruleIndex);
270
+ const end = Math.min(styleSheet.cssRules.length - 1, info.endRuleIndex ?? info.ruleIndex);
271
+ for (let i = start; i <= end; i++) {
272
+ const rule = styleSheet.cssRules[i];
273
+ if (rule)
274
+ cssChunks.push(rule.cssText);
275
+ }
276
+ }
277
+ }
278
+ }
279
+ }
280
+ return cssChunks.join('\n');
281
+ }
282
+ /**
283
+ * Get cache performance metrics
284
+ */
285
+ getMetrics(options) {
286
+ const root = options?.root || document;
287
+ const registry = this.sheetManager.getRegistry(root);
288
+ return this.sheetManager.getMetrics(registry);
289
+ }
290
+ /**
291
+ * Reset cache performance metrics
292
+ */
293
+ resetMetrics(options) {
294
+ const root = options?.root || document;
295
+ const registry = this.sheetManager.getRegistry(root);
296
+ this.sheetManager.resetMetrics(registry);
297
+ }
298
+ /**
299
+ * Force cleanup of unused styles (useful for memory pressure)
300
+ */
301
+ forceCleanupUnused(options) {
302
+ const root = options?.root || document;
303
+ const registry = this.sheetManager.getRegistry(root);
304
+ this.sheetManager['performBulkCleanup'](registry);
305
+ }
306
+ /**
307
+ * Define a CSS @property custom property
308
+ * Example:
309
+ * @property --rotation { syntax: "<angle>"; inherits: false; initial-value: 45deg; }
310
+ * Note: No caching or dispose — this defines a global property.
311
+ */
312
+ property(name, options) {
313
+ const root = options?.root || document;
314
+ const registry = this.sheetManager.getRegistry(root);
315
+ // Check if already defined to avoid duplicates
316
+ if (registry.injectedProperties.has(name)) {
317
+ return;
318
+ }
319
+ const parts = [];
320
+ if (options?.syntax != null) {
321
+ let syntax = String(options.syntax).trim();
322
+ if (!/^['"]/u.test(syntax))
323
+ syntax = `"${syntax}"`;
324
+ parts.push(`syntax: ${syntax};`);
325
+ }
326
+ if (options?.inherits != null) {
327
+ parts.push(`inherits: ${options.inherits ? 'true' : 'false'};`);
328
+ }
329
+ if (options?.initialValue != null) {
330
+ let initialValueStr;
331
+ if (typeof options.initialValue === 'number') {
332
+ initialValueStr = String(options.initialValue);
333
+ }
334
+ else {
335
+ // Process via tasty parser to resolve custom units/functions
336
+ initialValueStr = parseStyle(options.initialValue).output;
337
+ }
338
+ parts.push(`initial-value: ${initialValueStr};`);
339
+ }
340
+ const declarations = parts.join(' ').trim();
341
+ const rule = {
342
+ selector: `@property ${name}`,
343
+ declarations,
344
+ };
345
+ // Insert as a global rule; ignore returned info (no tracking/dispose)
346
+ this.sheetManager.insertGlobalRule(registry, [rule], `property:${name}`, root);
347
+ // Track that this property was injected
348
+ registry.injectedProperties.add(name);
349
+ }
350
+ /**
351
+ * Check whether a given @property name was already injected by this injector
352
+ */
353
+ isPropertyDefined(name, options) {
354
+ const root = options?.root || document;
355
+ const registry = this.sheetManager.getRegistry(root);
356
+ return registry.injectedProperties.has(name);
357
+ }
358
+ /**
359
+ * Inject keyframes and return object with toString() and dispose()
360
+ */
361
+ keyframes(steps, nameOrOptions) {
362
+ // Parse parameters
363
+ const isStringName = typeof nameOrOptions === 'string';
364
+ const providedName = isStringName ? nameOrOptions : nameOrOptions?.name;
365
+ const root = isStringName ? document : nameOrOptions?.root || document;
366
+ const registry = this.sheetManager.getRegistry(root);
367
+ if (Object.keys(steps).length === 0) {
368
+ return {
369
+ toString: () => '',
370
+ dispose: () => { },
371
+ };
372
+ }
373
+ // Generate cache key from steps and name
374
+ const cacheKey = providedName
375
+ ? `${providedName}:${JSON.stringify(steps)}`
376
+ : JSON.stringify(steps);
377
+ // Check if already cached
378
+ const existing = registry.keyframesCache.get(cacheKey);
379
+ if (existing) {
380
+ existing.refCount++;
381
+ return {
382
+ toString: () => existing.name,
383
+ dispose: () => this.disposeKeyframes(cacheKey, registry),
384
+ };
385
+ }
386
+ // Use provided name or generate new one
387
+ const name = providedName || `k${registry.keyframesCounter++}`;
388
+ // Insert keyframes
389
+ const info = this.sheetManager.insertKeyframes(registry, steps, name, root);
390
+ if (!info) {
391
+ return {
392
+ toString: () => '',
393
+ dispose: () => { },
394
+ };
395
+ }
396
+ // Cache the result
397
+ registry.keyframesCache.set(cacheKey, {
398
+ name,
399
+ refCount: 1,
400
+ info,
401
+ });
402
+ // Update metrics
403
+ if (registry.metrics) {
404
+ registry.metrics.totalInsertions++;
405
+ registry.metrics.misses++;
406
+ }
407
+ return {
408
+ toString: () => name,
409
+ dispose: () => this.disposeKeyframes(cacheKey, registry),
410
+ };
411
+ }
412
+ /**
413
+ * Dispose keyframes
414
+ */
415
+ disposeKeyframes(cacheKey, registry) {
416
+ const entry = registry.keyframesCache.get(cacheKey);
417
+ if (!entry)
418
+ return;
419
+ entry.refCount--;
420
+ if (entry.refCount <= 0) {
421
+ // Mark as unused
422
+ registry.keyframesCache.delete(cacheKey);
423
+ this.sheetManager.markKeyframesAsUnused(registry, entry.name);
424
+ }
425
+ }
426
+ /**
427
+ * Destroy all resources for a root
428
+ */
429
+ destroy(root) {
430
+ const targetRoot = root || document;
431
+ this.sheetManager.cleanup(targetRoot);
432
+ }
433
+ /**
434
+ * Create a global style component like styled-components createGlobalStyle
435
+ * Returns a React component that injects global styles when mounted and cleans up when unmounted
436
+ */
437
+ createGlobalStyle(strings, ...interpolations) {
438
+ const injector = this; // Capture the injector instance
439
+ class GlobalStyleComponent extends Component {
440
+ disposeFunction = null;
441
+ componentDidMount() {
442
+ this.injectStyles();
443
+ }
444
+ componentDidUpdate() {
445
+ this.disposeStyles();
446
+ this.injectStyles();
447
+ }
448
+ componentWillUnmount() {
449
+ this.disposeStyles();
450
+ }
451
+ injectStyles = () => {
452
+ const css = this.interpolateTemplate();
453
+ if (css.trim()) {
454
+ const styleResults = this.parseCSSToStyleResults(css);
455
+ // Bind the inject method to the outer injector instance
456
+ const result = injector.inject(styleResults, {
457
+ root: this.props.root,
458
+ });
459
+ this.disposeFunction = result.dispose;
460
+ }
461
+ };
462
+ disposeStyles = () => {
463
+ if (this.disposeFunction) {
464
+ this.disposeFunction();
465
+ this.disposeFunction = null;
466
+ }
467
+ };
468
+ interpolateTemplate = () => {
469
+ let result = strings[0];
470
+ for (let i = 0; i < interpolations.length; i++) {
471
+ const interpolation = interpolations[i];
472
+ const value = typeof interpolation === 'function'
473
+ ? interpolation(this.props)
474
+ : interpolation;
475
+ result += String(value) + strings[i + 1];
476
+ }
477
+ return result;
478
+ };
479
+ parseCSSToStyleResults = (css) => {
480
+ const rules = [];
481
+ // Enhanced CSS parser for global styles that handles nested rules
482
+ this.parseCSS(css, rules, [], '');
483
+ return rules;
484
+ };
485
+ parseCSS = (css, rules, atRuleStack, parentSelector = '') => {
486
+ // Remove both CSS and JavaScript-style comments
487
+ let cleanCSS = css.replace(/\/\*[\s\S]*?\*\//g, ''); // CSS comments
488
+ cleanCSS = cleanCSS.replace(/\/\/.*$/gm, ''); // JavaScript-style comments
489
+ let i = 0;
490
+ while (i < cleanCSS.length) {
491
+ // Skip whitespace
492
+ while (i < cleanCSS.length && /\s/.test(cleanCSS[i])) {
493
+ i++;
494
+ }
495
+ if (i >= cleanCSS.length)
496
+ break;
497
+ // Find the next selector or at-rule
498
+ let selectorStart = i;
499
+ let braceDepth = 0;
500
+ let inString = false;
501
+ let stringChar = '';
502
+ // Find the opening brace
503
+ while (i < cleanCSS.length) {
504
+ const char = cleanCSS[i];
505
+ if (inString) {
506
+ if (char === stringChar && cleanCSS[i - 1] !== '\\') {
507
+ inString = false;
508
+ }
509
+ }
510
+ else {
511
+ if (char === '"' || char === "'") {
512
+ inString = true;
513
+ stringChar = char;
514
+ }
515
+ else if (char === '{') {
516
+ braceDepth++;
517
+ if (braceDepth === 1) {
518
+ break; // Found the opening brace
519
+ }
520
+ }
521
+ else if (char === '}') {
522
+ braceDepth--;
523
+ }
524
+ }
525
+ i++;
526
+ }
527
+ if (i >= cleanCSS.length)
528
+ break;
529
+ const selectorPart = cleanCSS.substring(selectorStart, i).trim();
530
+ i++; // Skip the opening brace
531
+ // Find the matching closing brace
532
+ const contentStart = i;
533
+ braceDepth = 1;
534
+ inString = false;
535
+ while (i < cleanCSS.length && braceDepth > 0) {
536
+ const char = cleanCSS[i];
537
+ if (inString) {
538
+ if (char === stringChar && cleanCSS[i - 1] !== '\\') {
539
+ inString = false;
540
+ }
541
+ }
542
+ else {
543
+ if (char === '"' || char === "'") {
544
+ inString = true;
545
+ stringChar = char;
546
+ }
547
+ else if (char === '{') {
548
+ braceDepth++;
549
+ }
550
+ else if (char === '}') {
551
+ braceDepth--;
552
+ }
553
+ }
554
+ i++;
555
+ }
556
+ const content = cleanCSS.substring(contentStart, i - 1).trim();
557
+ // Check if this is an at-rule
558
+ if (selectorPart.startsWith('@')) {
559
+ const atSelector = selectorPart.trim();
560
+ // Leaf at-rules that contain declarations directly and should be emitted as-is
561
+ const leafAtRules = [
562
+ '@font-face',
563
+ '@property',
564
+ '@page',
565
+ '@counter-style',
566
+ '@font-feature-values',
567
+ '@font-palette-values',
568
+ '@color-profile',
569
+ ];
570
+ const isLeafAtRule = leafAtRules.some((prefix) => atSelector.startsWith(prefix));
571
+ if (isLeafAtRule) {
572
+ // Emit the at-rule with its declarations directly
573
+ if (content.trim()) {
574
+ rules.push({
575
+ selector: atSelector,
576
+ declarations: content,
577
+ atRules: atRuleStack.length > 0 ? [...atRuleStack] : undefined,
578
+ });
579
+ }
580
+ }
581
+ else {
582
+ // Wrapper at-rule (e.g., @media, @supports, @keyframes) — parse its content
583
+ const newAtRuleStack = [...atRuleStack, atSelector];
584
+ this.parseCSS(content, rules, newAtRuleStack, parentSelector);
585
+ }
586
+ }
587
+ else {
588
+ // Check if content contains nested rules (has { and })
589
+ if (content.includes('{') && content.includes('}')) {
590
+ // This selector has nested rules, parse them
591
+ const { declarations, nestedCSS } = this.separateDeclarationsAndNested(content);
592
+ // Process the selector (handle & syntax)
593
+ const processedSelector = this.processSelector(selectorPart, parentSelector);
594
+ // Add declarations if any
595
+ if (declarations.trim()) {
596
+ rules.push({
597
+ selector: processedSelector,
598
+ declarations: declarations.trim(),
599
+ atRules: atRuleStack.length > 0 ? [...atRuleStack] : undefined,
600
+ });
601
+ }
602
+ // Parse nested CSS with current selector as parent
603
+ if (nestedCSS.trim()) {
604
+ this.parseCSS(nestedCSS, rules, atRuleStack, processedSelector);
605
+ }
606
+ }
607
+ else {
608
+ // This is a regular selector with only declarations
609
+ const processedSelector = this.processSelector(selectorPart, parentSelector);
610
+ if (content && processedSelector) {
611
+ rules.push({
612
+ selector: processedSelector,
613
+ declarations: content,
614
+ atRules: atRuleStack.length > 0 ? [...atRuleStack] : undefined,
615
+ });
616
+ }
617
+ }
618
+ }
619
+ }
620
+ };
621
+ separateDeclarationsAndNested = (content) => {
622
+ const declarations = [];
623
+ const nestedRules = [];
624
+ let i = 0;
625
+ let currentDeclaration = '';
626
+ while (i < content.length) {
627
+ const char = content[i];
628
+ if (char === '{') {
629
+ // Found start of nested rule, find the selector before it
630
+ let selectorStart = currentDeclaration.lastIndexOf(';') + 1;
631
+ if (selectorStart === 0 && currentDeclaration.trim()) {
632
+ // No semicolon found, this might be the first rule
633
+ selectorStart = 0;
634
+ }
635
+ const beforeBrace = currentDeclaration.substring(0, selectorStart);
636
+ const selector = currentDeclaration.substring(selectorStart).trim();
637
+ if (beforeBrace.trim()) {
638
+ declarations.push(beforeBrace.trim());
639
+ }
640
+ // Find the matching closing brace
641
+ let braceDepth = 1;
642
+ let ruleStart = i + 1;
643
+ i++; // Skip opening brace
644
+ while (i < content.length && braceDepth > 0) {
645
+ if (content[i] === '{')
646
+ braceDepth++;
647
+ else if (content[i] === '}')
648
+ braceDepth--;
649
+ i++;
650
+ }
651
+ const ruleContent = content.substring(ruleStart, i - 1);
652
+ nestedRules.push(`${selector} { ${ruleContent} }`);
653
+ currentDeclaration = '';
654
+ }
655
+ else {
656
+ currentDeclaration += char;
657
+ i++;
658
+ }
659
+ }
660
+ // Add remaining declarations
661
+ if (currentDeclaration.trim()) {
662
+ declarations.push(currentDeclaration.trim());
663
+ }
664
+ return {
665
+ declarations: declarations.join(' '),
666
+ nestedCSS: nestedRules.join('\n'),
667
+ };
668
+ };
669
+ processSelector = (selector, parentSelector) => {
670
+ if (!parentSelector) {
671
+ return selector;
672
+ }
673
+ // Handle & syntax - replace & with parent selector
674
+ if (selector.includes('&')) {
675
+ return selector.replace(/&/g, parentSelector);
676
+ }
677
+ // If no &, treat as descendant selector
678
+ return `${parentSelector} ${selector}`;
679
+ };
680
+ render() {
681
+ return null;
682
+ }
683
+ }
684
+ return GlobalStyleComponent;
685
+ }
686
+ }
687
+
688
+