@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
@@ -0,0 +1,678 @@
1
+ /**
2
+ * @license MIT
3
+ * author: Cube Dev Team
4
+ * @cube-dev/ui-kit v0.76.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
+ globalRuleCounter = 0;
27
+ constructor(config = {}) {
28
+ this.config = config;
29
+ this.sheetManager = new SheetManager(config);
30
+ }
31
+ /**
32
+ * Allocate a className for a cacheKey without injecting styles yet.
33
+ * This allows separating className allocation (render phase) from style injection (insertion phase).
34
+ */
35
+ allocateClassName(cacheKey, options) {
36
+ const root = options?.root || document;
37
+ const registry = this.sheetManager.getRegistry(root);
38
+ // Check if we can reuse existing className for this cache key
39
+ if (registry.cacheKeyToClassName.has(cacheKey)) {
40
+ const className = registry.cacheKeyToClassName.get(cacheKey);
41
+ return {
42
+ className,
43
+ isNewAllocation: false,
44
+ };
45
+ }
46
+ // Generate new className and reserve it
47
+ const className = generateClassName(registry.classCounter++);
48
+ // Create placeholder RuleInfo to reserve the className
49
+ const placeholderRuleInfo = {
50
+ className,
51
+ ruleIndex: -1, // Placeholder - will be set during actual injection
52
+ sheetIndex: -1, // Placeholder - will be set during actual injection
53
+ };
54
+ // Store RuleInfo only once by className, and map cacheKey separately
55
+ registry.rules.set(className, placeholderRuleInfo);
56
+ registry.cacheKeyToClassName.set(cacheKey, className);
57
+ return {
58
+ className,
59
+ isNewAllocation: true,
60
+ };
61
+ }
62
+ /**
63
+ * Inject styles from StyleResult objects
64
+ */
65
+ inject(rules, options) {
66
+ const root = options?.root || document;
67
+ const registry = this.sheetManager.getRegistry(root);
68
+ if (rules.length === 0) {
69
+ return {
70
+ className: '',
71
+ dispose: () => { },
72
+ };
73
+ }
74
+ // Rules are now in StyleRule format directly
75
+ // Check if we can reuse based on cache key
76
+ const cacheKey = options?.cacheKey;
77
+ let className;
78
+ let isPreAllocated = false;
79
+ if (cacheKey && registry.cacheKeyToClassName.has(cacheKey)) {
80
+ // Reuse existing class for this cache key
81
+ className = registry.cacheKeyToClassName.get(cacheKey);
82
+ const existingRuleInfo = registry.rules.get(className);
83
+ // Check if this is a placeholder (pre-allocated but not yet injected)
84
+ isPreAllocated =
85
+ existingRuleInfo.ruleIndex === -1 && existingRuleInfo.sheetIndex === -1;
86
+ if (!isPreAllocated) {
87
+ // Already injected - just increment refCount
88
+ const currentRefCount = registry.refCounts.get(className) || 0;
89
+ registry.refCounts.set(className, currentRefCount + 1);
90
+ // Update metrics
91
+ if (registry.metrics) {
92
+ registry.metrics.hits++;
93
+ }
94
+ return {
95
+ className,
96
+ dispose: () => this.dispose(className, registry),
97
+ };
98
+ }
99
+ }
100
+ else {
101
+ // Generate new className
102
+ className = generateClassName(registry.classCounter++);
103
+ }
104
+ // Process rules: handle needsClassName flag and apply specificity
105
+ const rulesToInsert = rules.map((rule) => {
106
+ let newSelector = rule.selector;
107
+ // If rule needs className prepended
108
+ if (rule.needsClassName) {
109
+ // Simple concatenation: .className (double specificity) + selectorSuffix
110
+ newSelector = `.${className}.${className}${newSelector}`;
111
+ }
112
+ return {
113
+ ...rule,
114
+ selector: newSelector,
115
+ needsClassName: undefined, // Remove the flag after processing
116
+ };
117
+ });
118
+ // Before inserting, auto-register @property for any color custom properties being defined.
119
+ // Fast parse: split declarations by ';' and match "--*-color:"
120
+ // Do this only when we actually insert (i.e., no cache hit above)
121
+ const colorPropRegex = /^\s*(--[a-z0-9-]+-color)\s*:/i;
122
+ for (const rule of rulesToInsert) {
123
+ // Skip if no declarations
124
+ if (!rule.declarations)
125
+ continue;
126
+ const parts = rule.declarations.split(/;+\s*/);
127
+ for (const part of parts) {
128
+ if (!part)
129
+ continue;
130
+ const match = colorPropRegex.exec(part);
131
+ if (match) {
132
+ const propName = match[1];
133
+ // Register @property only if not already defined for this root
134
+ if (!this.isPropertyDefined(propName, { root })) {
135
+ this.property(propName, {
136
+ syntax: '<color>',
137
+ initialValue: 'transparent',
138
+ root,
139
+ });
140
+ }
141
+ }
142
+ }
143
+ }
144
+ // Insert rules using existing sheet manager
145
+ const ruleInfo = this.sheetManager.insertRule(registry, rulesToInsert, className, root);
146
+ if (!ruleInfo) {
147
+ // Update metrics
148
+ if (registry.metrics) {
149
+ registry.metrics.misses++;
150
+ }
151
+ return {
152
+ className,
153
+ dispose: () => { },
154
+ };
155
+ }
156
+ // Store in registry
157
+ registry.refCounts.set(className, 1);
158
+ if (isPreAllocated) {
159
+ // Update the existing placeholder entry with real rule info
160
+ registry.rules.set(className, ruleInfo);
161
+ // cacheKey mapping already exists from allocation
162
+ }
163
+ else {
164
+ // Store new entries
165
+ registry.rules.set(className, ruleInfo);
166
+ if (cacheKey) {
167
+ registry.cacheKeyToClassName.set(cacheKey, className);
168
+ }
169
+ }
170
+ // Update metrics
171
+ if (registry.metrics) {
172
+ registry.metrics.totalInsertions++;
173
+ registry.metrics.misses++;
174
+ }
175
+ return {
176
+ className,
177
+ dispose: () => this.dispose(className, registry),
178
+ };
179
+ }
180
+ /**
181
+ * Inject global styles (rules without a generated tasty class selector)
182
+ * This ensures we don't reserve a tasty class name (t{number}) for global rules,
183
+ * which could otherwise collide with element-level styles and break lookups.
184
+ */
185
+ injectGlobal(rules, options) {
186
+ const root = options?.root || document;
187
+ const registry = this.sheetManager.getRegistry(root);
188
+ if (!rules || rules.length === 0) {
189
+ return { dispose: () => { } };
190
+ }
191
+ // Use a non-tasty identifier to avoid any collisions with .t{number} classes
192
+ const key = `global:${this.globalRuleCounter++}`;
193
+ const info = this.sheetManager.insertGlobalRule(registry, rules, key, root);
194
+ if (registry.metrics) {
195
+ registry.metrics.totalInsertions++;
196
+ }
197
+ return {
198
+ dispose: () => {
199
+ if (info)
200
+ this.sheetManager.deleteGlobalRule(registry, key);
201
+ },
202
+ };
203
+ }
204
+ /**
205
+ * Dispose of a className
206
+ */
207
+ dispose(className, registry) {
208
+ const currentRefCount = registry.refCounts.get(className);
209
+ // Guard against stale double-dispose or mismatched lifecycle
210
+ if (currentRefCount == null || currentRefCount <= 0) {
211
+ return;
212
+ }
213
+ const newRefCount = currentRefCount - 1;
214
+ registry.refCounts.set(className, newRefCount);
215
+ if (newRefCount === 0) {
216
+ // Update metrics
217
+ if (registry.metrics) {
218
+ registry.metrics.totalUnused++;
219
+ }
220
+ // Check if cleanup should be scheduled
221
+ this.sheetManager.checkCleanupNeeded(registry);
222
+ }
223
+ }
224
+ /**
225
+ * Force bulk cleanup of unused styles
226
+ */
227
+ cleanup(root) {
228
+ const registry = this.sheetManager.getRegistry(root || document);
229
+ // Clean up ALL unused rules regardless of batch ratio
230
+ this.sheetManager.forceCleanup(registry);
231
+ }
232
+ /**
233
+ * Get CSS text from all sheets (for SSR)
234
+ */
235
+ getCssText(options) {
236
+ const root = options?.root || document;
237
+ const registry = this.sheetManager.getRegistry(root);
238
+ return this.sheetManager.getCssText(registry);
239
+ }
240
+ /**
241
+ * Get CSS only for the provided tasty classNames (e.g., ["t0","t3"])
242
+ */
243
+ getCssTextForClasses(classNames, options) {
244
+ const root = options?.root || document;
245
+ const registry = this.sheetManager.getRegistry(root);
246
+ const cssChunks = [];
247
+ for (const cls of classNames) {
248
+ const info = registry.rules.get(cls);
249
+ if (info) {
250
+ // Always prefer reading from the live stylesheet, since indices can change
251
+ const sheet = registry.sheets[info.sheetIndex];
252
+ const styleSheet = sheet?.sheet?.sheet;
253
+ if (styleSheet) {
254
+ const start = Math.max(0, info.ruleIndex);
255
+ const end = Math.min(styleSheet.cssRules.length - 1, info.endRuleIndex ?? info.ruleIndex);
256
+ // Additional validation: ensure indices are valid and in correct order
257
+ if (start >= 0 &&
258
+ end >= start &&
259
+ start < styleSheet.cssRules.length) {
260
+ for (let i = start; i <= end; i++) {
261
+ const rule = styleSheet.cssRules[i];
262
+ if (rule)
263
+ cssChunks.push(rule.cssText);
264
+ }
265
+ }
266
+ }
267
+ else if (info.cssText && info.cssText.length) {
268
+ // Fallback in environments without CSSOM access
269
+ cssChunks.push(...info.cssText);
270
+ }
271
+ }
272
+ }
273
+ return cssChunks.join('\n');
274
+ }
275
+ /**
276
+ * Get cache performance metrics
277
+ */
278
+ getMetrics(options) {
279
+ const root = options?.root || document;
280
+ const registry = this.sheetManager.getRegistry(root);
281
+ return this.sheetManager.getMetrics(registry);
282
+ }
283
+ /**
284
+ * Reset cache performance metrics
285
+ */
286
+ resetMetrics(options) {
287
+ const root = options?.root || document;
288
+ const registry = this.sheetManager.getRegistry(root);
289
+ this.sheetManager.resetMetrics(registry);
290
+ }
291
+ /**
292
+ * Define a CSS @property custom property
293
+ * Example:
294
+ * @property --rotation { syntax: "<angle>"; inherits: false; initial-value: 45deg; }
295
+ * Note: No caching or dispose — this defines a global property.
296
+ */
297
+ property(name, options) {
298
+ const root = options?.root || document;
299
+ const registry = this.sheetManager.getRegistry(root);
300
+ // Check if already defined to avoid duplicates
301
+ if (registry.injectedProperties.has(name)) {
302
+ return;
303
+ }
304
+ const parts = [];
305
+ if (options?.syntax != null) {
306
+ let syntax = String(options.syntax).trim();
307
+ if (!/^['"]/u.test(syntax))
308
+ syntax = `"${syntax}"`;
309
+ parts.push(`syntax: ${syntax};`);
310
+ }
311
+ if (options?.inherits != null) {
312
+ parts.push(`inherits: ${options.inherits ? 'true' : 'false'};`);
313
+ }
314
+ if (options?.initialValue != null) {
315
+ let initialValueStr;
316
+ if (typeof options.initialValue === 'number') {
317
+ initialValueStr = String(options.initialValue);
318
+ }
319
+ else {
320
+ // Process via tasty parser to resolve custom units/functions
321
+ initialValueStr = parseStyle(options.initialValue).output;
322
+ }
323
+ parts.push(`initial-value: ${initialValueStr};`);
324
+ }
325
+ const declarations = parts.join(' ').trim();
326
+ const rule = {
327
+ selector: `@property ${name}`,
328
+ declarations,
329
+ };
330
+ // Insert as a global rule; ignore returned info (no tracking/dispose)
331
+ this.sheetManager.insertGlobalRule(registry, [rule], `property:${name}`, root);
332
+ // Track that this property was injected
333
+ registry.injectedProperties.add(name);
334
+ }
335
+ /**
336
+ * Check whether a given @property name was already injected by this injector
337
+ */
338
+ isPropertyDefined(name, options) {
339
+ const root = options?.root || document;
340
+ const registry = this.sheetManager.getRegistry(root);
341
+ return registry.injectedProperties.has(name);
342
+ }
343
+ /**
344
+ * Inject keyframes and return object with toString() and dispose()
345
+ */
346
+ keyframes(steps, nameOrOptions) {
347
+ // Parse parameters
348
+ const isStringName = typeof nameOrOptions === 'string';
349
+ const providedName = isStringName ? nameOrOptions : nameOrOptions?.name;
350
+ const root = isStringName ? document : nameOrOptions?.root || document;
351
+ const registry = this.sheetManager.getRegistry(root);
352
+ if (Object.keys(steps).length === 0) {
353
+ return {
354
+ toString: () => '',
355
+ dispose: () => { },
356
+ };
357
+ }
358
+ // Generate cache key from steps and name
359
+ const cacheKey = providedName
360
+ ? `${providedName}:${JSON.stringify(steps)}`
361
+ : JSON.stringify(steps);
362
+ // Check if already cached
363
+ const existing = registry.keyframesCache.get(cacheKey);
364
+ if (existing) {
365
+ existing.refCount++;
366
+ return {
367
+ toString: () => existing.name,
368
+ dispose: () => this.disposeKeyframes(cacheKey, registry),
369
+ };
370
+ }
371
+ // Use provided name or generate new one
372
+ const name = providedName || `k${registry.keyframesCounter++}`;
373
+ // Insert keyframes
374
+ const info = this.sheetManager.insertKeyframes(registry, steps, name, root);
375
+ if (!info) {
376
+ return {
377
+ toString: () => '',
378
+ dispose: () => { },
379
+ };
380
+ }
381
+ // Cache the result
382
+ registry.keyframesCache.set(cacheKey, {
383
+ name,
384
+ refCount: 1,
385
+ info,
386
+ });
387
+ // Update metrics
388
+ if (registry.metrics) {
389
+ registry.metrics.totalInsertions++;
390
+ registry.metrics.misses++;
391
+ }
392
+ return {
393
+ toString: () => name,
394
+ dispose: () => this.disposeKeyframes(cacheKey, registry),
395
+ };
396
+ }
397
+ /**
398
+ * Dispose keyframes
399
+ */
400
+ disposeKeyframes(cacheKey, registry) {
401
+ const entry = registry.keyframesCache.get(cacheKey);
402
+ if (!entry)
403
+ return;
404
+ entry.refCount--;
405
+ if (entry.refCount <= 0) {
406
+ // Dispose immediately - keyframes are global and safe to clean up right away
407
+ this.sheetManager.deleteKeyframes(registry, entry.info);
408
+ registry.keyframesCache.delete(cacheKey);
409
+ // Update metrics
410
+ if (registry.metrics) {
411
+ registry.metrics.totalUnused++;
412
+ registry.metrics.stylesCleanedUp++;
413
+ }
414
+ }
415
+ }
416
+ /**
417
+ * Destroy all resources for a root
418
+ */
419
+ destroy(root) {
420
+ const targetRoot = root || document;
421
+ this.sheetManager.cleanup(targetRoot);
422
+ }
423
+ /**
424
+ * Create a global style component like styled-components createGlobalStyle
425
+ * Returns a React component that injects global styles when mounted and cleans up when unmounted
426
+ */
427
+ createGlobalStyle(strings, ...interpolations) {
428
+ const injector = this; // Capture the injector instance
429
+ class GlobalStyleComponent extends Component {
430
+ disposeFunction = null;
431
+ componentDidMount() {
432
+ this.injectStyles();
433
+ }
434
+ componentDidUpdate() {
435
+ this.disposeStyles();
436
+ this.injectStyles();
437
+ }
438
+ componentWillUnmount() {
439
+ this.disposeStyles();
440
+ }
441
+ injectStyles = () => {
442
+ const css = this.interpolateTemplate();
443
+ if (css.trim()) {
444
+ const styleResults = this.parseCSSToStyleResults(css);
445
+ // Bind the global inject method to the outer injector instance
446
+ const result = injector.injectGlobal(styleResults, {
447
+ root: this.props.root,
448
+ });
449
+ this.disposeFunction = result.dispose;
450
+ }
451
+ };
452
+ disposeStyles = () => {
453
+ if (this.disposeFunction) {
454
+ this.disposeFunction();
455
+ this.disposeFunction = null;
456
+ }
457
+ };
458
+ interpolateTemplate = () => {
459
+ let result = strings[0];
460
+ for (let i = 0; i < interpolations.length; i++) {
461
+ const interpolation = interpolations[i];
462
+ const value = typeof interpolation === 'function'
463
+ ? interpolation(this.props)
464
+ : interpolation;
465
+ result += String(value) + strings[i + 1];
466
+ }
467
+ return result;
468
+ };
469
+ parseCSSToStyleResults = (css) => {
470
+ const rules = [];
471
+ // Enhanced CSS parser for global styles that handles nested rules
472
+ this.parseCSS(css, rules, [], '');
473
+ return rules;
474
+ };
475
+ parseCSS = (css, rules, atRuleStack, parentSelector = '') => {
476
+ // Remove both CSS and JavaScript-style comments
477
+ let cleanCSS = css.replace(/\/\*[\s\S]*?\*\//g, ''); // CSS comments
478
+ cleanCSS = cleanCSS.replace(/\/\/.*$/gm, ''); // JavaScript-style comments
479
+ let i = 0;
480
+ while (i < cleanCSS.length) {
481
+ // Skip whitespace
482
+ while (i < cleanCSS.length && /\s/.test(cleanCSS[i])) {
483
+ i++;
484
+ }
485
+ if (i >= cleanCSS.length)
486
+ break;
487
+ // Find the next selector or at-rule
488
+ let selectorStart = i;
489
+ let braceDepth = 0;
490
+ let inString = false;
491
+ let stringChar = '';
492
+ // Find the opening brace
493
+ while (i < cleanCSS.length) {
494
+ const char = cleanCSS[i];
495
+ if (inString) {
496
+ if (char === stringChar && cleanCSS[i - 1] !== '\\') {
497
+ inString = false;
498
+ }
499
+ }
500
+ else {
501
+ if (char === '"' || char === "'") {
502
+ inString = true;
503
+ stringChar = char;
504
+ }
505
+ else if (char === '{') {
506
+ braceDepth++;
507
+ if (braceDepth === 1) {
508
+ break; // Found the opening brace
509
+ }
510
+ }
511
+ else if (char === '}') {
512
+ braceDepth--;
513
+ }
514
+ }
515
+ i++;
516
+ }
517
+ if (i >= cleanCSS.length)
518
+ break;
519
+ const selectorPart = cleanCSS.substring(selectorStart, i).trim();
520
+ i++; // Skip the opening brace
521
+ // Find the matching closing brace
522
+ const contentStart = i;
523
+ braceDepth = 1;
524
+ inString = false;
525
+ while (i < cleanCSS.length && braceDepth > 0) {
526
+ const char = cleanCSS[i];
527
+ if (inString) {
528
+ if (char === stringChar && cleanCSS[i - 1] !== '\\') {
529
+ inString = false;
530
+ }
531
+ }
532
+ else {
533
+ if (char === '"' || char === "'") {
534
+ inString = true;
535
+ stringChar = char;
536
+ }
537
+ else if (char === '{') {
538
+ braceDepth++;
539
+ }
540
+ else if (char === '}') {
541
+ braceDepth--;
542
+ }
543
+ }
544
+ i++;
545
+ }
546
+ const content = cleanCSS.substring(contentStart, i - 1).trim();
547
+ // Check if this is an at-rule
548
+ if (selectorPart.startsWith('@')) {
549
+ const atSelector = selectorPart.trim();
550
+ // Leaf at-rules that contain declarations directly and should be emitted as-is
551
+ const leafAtRules = [
552
+ '@font-face',
553
+ '@property',
554
+ '@page',
555
+ '@counter-style',
556
+ '@font-feature-values',
557
+ '@font-palette-values',
558
+ '@color-profile',
559
+ ];
560
+ const isLeafAtRule = leafAtRules.some((prefix) => atSelector.startsWith(prefix));
561
+ if (isLeafAtRule) {
562
+ // Emit the at-rule with its declarations directly
563
+ if (content.trim()) {
564
+ rules.push({
565
+ selector: atSelector,
566
+ declarations: content,
567
+ atRules: atRuleStack.length > 0 ? [...atRuleStack] : undefined,
568
+ });
569
+ }
570
+ }
571
+ else {
572
+ // Wrapper at-rule (e.g., @media, @supports, @keyframes) — parse its content
573
+ const newAtRuleStack = [...atRuleStack, atSelector];
574
+ this.parseCSS(content, rules, newAtRuleStack, parentSelector);
575
+ }
576
+ }
577
+ else {
578
+ // Check if content contains nested rules (has { and })
579
+ if (content.includes('{') && content.includes('}')) {
580
+ // This selector has nested rules, parse them
581
+ const { declarations, nestedCSS } = this.separateDeclarationsAndNested(content);
582
+ // Process the selector (handle & syntax)
583
+ const processedSelector = this.processSelector(selectorPart, parentSelector);
584
+ // Add declarations if any
585
+ if (declarations.trim()) {
586
+ rules.push({
587
+ selector: processedSelector,
588
+ declarations: declarations.trim(),
589
+ atRules: atRuleStack.length > 0 ? [...atRuleStack] : undefined,
590
+ });
591
+ }
592
+ // Parse nested CSS with current selector as parent
593
+ if (nestedCSS.trim()) {
594
+ this.parseCSS(nestedCSS, rules, atRuleStack, processedSelector);
595
+ }
596
+ }
597
+ else {
598
+ // This is a regular selector with only declarations
599
+ const processedSelector = this.processSelector(selectorPart, parentSelector);
600
+ if (content && processedSelector) {
601
+ rules.push({
602
+ selector: processedSelector,
603
+ declarations: content,
604
+ atRules: atRuleStack.length > 0 ? [...atRuleStack] : undefined,
605
+ });
606
+ }
607
+ }
608
+ }
609
+ }
610
+ };
611
+ separateDeclarationsAndNested = (content) => {
612
+ const declarations = [];
613
+ const nestedRules = [];
614
+ let i = 0;
615
+ let currentDeclaration = '';
616
+ while (i < content.length) {
617
+ const char = content[i];
618
+ if (char === '{') {
619
+ // Found start of nested rule, find the selector before it
620
+ let selectorStart = currentDeclaration.lastIndexOf(';') + 1;
621
+ if (selectorStart === 0 && currentDeclaration.trim()) {
622
+ // No semicolon found, this might be the first rule
623
+ selectorStart = 0;
624
+ }
625
+ const beforeBrace = currentDeclaration.substring(0, selectorStart);
626
+ const selector = currentDeclaration.substring(selectorStart).trim();
627
+ if (beforeBrace.trim()) {
628
+ declarations.push(beforeBrace.trim());
629
+ }
630
+ // Find the matching closing brace
631
+ let braceDepth = 1;
632
+ let ruleStart = i + 1;
633
+ i++; // Skip opening brace
634
+ while (i < content.length && braceDepth > 0) {
635
+ if (content[i] === '{')
636
+ braceDepth++;
637
+ else if (content[i] === '}')
638
+ braceDepth--;
639
+ i++;
640
+ }
641
+ const ruleContent = content.substring(ruleStart, i - 1);
642
+ nestedRules.push(`${selector} { ${ruleContent} }`);
643
+ currentDeclaration = '';
644
+ }
645
+ else {
646
+ currentDeclaration += char;
647
+ i++;
648
+ }
649
+ }
650
+ // Add remaining declarations
651
+ if (currentDeclaration.trim()) {
652
+ declarations.push(currentDeclaration.trim());
653
+ }
654
+ return {
655
+ declarations: declarations.join(' '),
656
+ nestedCSS: nestedRules.join('\n'),
657
+ };
658
+ };
659
+ processSelector = (selector, parentSelector) => {
660
+ if (!parentSelector) {
661
+ return selector;
662
+ }
663
+ // Handle & syntax - replace & with parent selector
664
+ if (selector.includes('&')) {
665
+ return selector.replace(/&/g, parentSelector);
666
+ }
667
+ // If no &, treat as descendant selector
668
+ return `${parentSelector} ${selector}`;
669
+ };
670
+ render() {
671
+ return null;
672
+ }
673
+ }
674
+ return GlobalStyleComponent;
675
+ }
676
+ }
677
+
678
+