@cube-dev/ui-kit 0.75.0 → 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 (501) 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 +1 -1
  18. package/es/components/GridProvider.js +1 -1
  19. package/es/components/HiddenInput.js +1 -1
  20. package/es/components/Item.js +1 -1
  21. package/es/components/OpenTrasition.js +1 -1
  22. package/es/components/Root.js +1 -1
  23. package/es/components/actions/Action/Action.js +1 -1
  24. package/es/components/actions/Button/Button.js +1 -1
  25. package/es/components/actions/Button/index.js +1 -1
  26. package/es/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  27. package/es/components/actions/CommandMenu/CommandMenu.js +1 -1
  28. package/es/components/actions/CommandMenu/index.js +1 -1
  29. package/es/components/actions/CommandMenu/styled.js +1 -1
  30. package/es/components/actions/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 +1 -1
  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 +1 -1
  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 +1 -1
  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 +1 -1
  76. package/es/components/content/Title.js +1 -1
  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 +1 -1
  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 +1 -1
  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 +1 -1
  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 -1
  392. package/es/tasty/debug.js +541 -744
  393. package/es/tasty/index.js +1 -1
  394. package/es/tasty/injector/index.js +31 -15
  395. package/es/tasty/injector/injector.js +138 -148
  396. package/es/tasty/injector/sheet-manager.js +292 -134
  397. package/es/tasty/injector/types.js +1 -1
  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 +1 -1
  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 +1 -1
  409. package/es/tasty/styles/createStyle.js +1 -1
  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 +1 -1
  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 -1
  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 +1 -1
  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 +1 -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 +61 -50
  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 +1 -1
  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 +44 -4
  455. package/es/tasty/utils/responsive.js +1 -1
  456. package/es/tasty/utils/string.js +1 -1
  457. package/es/tasty/utils/styles.js +39 -1
  458. package/es/tasty/utils/warnings.js +1 -1
  459. package/es/tokens.js +1 -1
  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/actions/Menu/styled.d.ts +60 -60
  492. package/types/components/content/List/SectionHeading.d.ts +20 -20
  493. package/types/components/fields/DatePicker/DatePickerElement.d.ts +20 -20
  494. package/types/tasty/debug.d.ts +135 -222
  495. package/types/tasty/injector/index.d.ts +18 -2
  496. package/types/tasty/injector/injector.d.ts +20 -18
  497. package/types/tasty/injector/sheet-manager.d.ts +19 -15
  498. package/types/tasty/injector/types.d.ts +29 -13
  499. package/types/tasty/utils/isDevEnv.d.ts +6 -0
  500. package/types/tasty/utils/renderStyles.d.ts +6 -1
  501. package/types/tasty/utils/styles.d.ts +1 -0
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.75.0
4
+ * @cube-dev/ui-kit v0.76.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -18,11 +18,10 @@ export class SheetManager {
18
18
  getRegistry(root) {
19
19
  let registry = this.rootRegistries.get(root);
20
20
  if (!registry) {
21
- const metrics = this.config.collectMetrics
21
+ const metrics = this.config.devMode
22
22
  ? {
23
23
  hits: 0,
24
24
  misses: 0,
25
- unusedHits: 0,
26
25
  bulkCleanups: 0,
27
26
  totalInsertions: 0,
28
27
  totalUnused: 0,
@@ -35,15 +34,16 @@ export class SheetManager {
35
34
  sheets: [],
36
35
  refCounts: new Map(),
37
36
  rules: new Map(),
38
- unusedRules: new Map(),
37
+ cacheKeyToClassName: new Map(),
39
38
  ruleTextSet: new Set(),
40
39
  bulkCleanupTimeout: null,
40
+ cleanupCheckTimeout: null,
41
41
  metrics,
42
42
  classCounter: 0,
43
43
  keyframesCache: new Map(),
44
- unusedKeyframes: new Map(),
45
44
  keyframesCounter: 0,
46
45
  injectedProperties: new Set(),
46
+ globalRules: new Map(),
47
47
  };
48
48
  this.rootRegistries.set(root, registry);
49
49
  }
@@ -100,7 +100,6 @@ export class SheetManager {
100
100
  if (!targetSheet) {
101
101
  targetSheet = this.createSheet(registry, root);
102
102
  }
103
- const ruleIndex = this.findAvailableRuleIndex(targetSheet);
104
103
  const sheetIndex = registry.sheets.indexOf(targetSheet);
105
104
  try {
106
105
  // Group rules by selector and at-rules to combine declarations
@@ -136,7 +135,9 @@ export class SheetManager {
136
135
  });
137
136
  // Insert grouped rules
138
137
  const insertedRuleTexts = [];
139
- let currentRuleIndex = ruleIndex;
138
+ const insertedIndices = []; // Track exact indices
139
+ // Calculate rule index atomically right before insertion to prevent race conditions
140
+ let currentRuleIndex = this.findAvailableRuleIndex(targetSheet);
140
141
  let firstInsertedIndex = null;
141
142
  let lastInsertedIndex = null;
142
143
  for (const rule of groupedRules) {
@@ -151,8 +152,10 @@ export class SheetManager {
151
152
  const styleElement = targetSheet.sheet;
152
153
  const styleSheet = styleElement.sheet;
153
154
  if (styleSheet && !this.config.forceTextInjection) {
155
+ // Calculate index atomically for each rule to prevent concurrent insertion races
154
156
  const maxIndex = styleSheet.cssRules.length;
155
- const safeIndex = Math.min(Math.max(0, currentRuleIndex), maxIndex);
157
+ const atomicRuleIndex = this.findAvailableRuleIndex(targetSheet);
158
+ const safeIndex = Math.min(Math.max(0, atomicRuleIndex), maxIndex);
156
159
  // Helper: split comma-separated selectors safely (ignores commas inside [] () " ')
157
160
  const splitSelectorsSafely = (selectorList) => {
158
161
  const parts = [];
@@ -199,6 +202,9 @@ export class SheetManager {
199
202
  };
200
203
  try {
201
204
  styleSheet.insertRule(fullRule, safeIndex);
205
+ // Update sheet ruleCount immediately to prevent concurrent race conditions
206
+ targetSheet.ruleCount++;
207
+ insertedIndices.push(safeIndex); // Track this index
202
208
  if (firstInsertedIndex == null)
203
209
  firstInsertedIndex = safeIndex;
204
210
  lastInsertedIndex = safeIndex;
@@ -217,9 +223,14 @@ export class SheetManager {
217
223
  singleRule = rule.atRules.reduce((css, atRule) => `${atRule} { ${css} }`, singleBase);
218
224
  }
219
225
  try {
226
+ // Calculate index atomically for each individual selector insertion
220
227
  const maxIdx = styleSheet.cssRules.length;
221
- const idx = Math.min(Math.max(0, currentRuleIndex), maxIdx);
228
+ const atomicIdx = this.findAvailableRuleIndex(targetSheet);
229
+ const idx = Math.min(Math.max(0, atomicIdx), maxIdx);
222
230
  styleSheet.insertRule(singleRule, idx);
231
+ // Update sheet ruleCount immediately
232
+ targetSheet.ruleCount++;
233
+ insertedIndices.push(idx); // Track this index
223
234
  if (firstInsertedIndex == null)
224
235
  firstInsertedIndex = idx;
225
236
  lastInsertedIndex = idx;
@@ -242,12 +253,17 @@ export class SheetManager {
242
253
  }
243
254
  else {
244
255
  // Use textContent (either as fallback or when forceTextInjection is enabled)
256
+ // Calculate index atomically for textContent insertion too
257
+ const atomicRuleIndex = this.findAvailableRuleIndex(targetSheet);
245
258
  styleElement.textContent =
246
259
  (styleElement.textContent || '') + '\n' + fullRule;
260
+ // Update sheet ruleCount immediately
261
+ targetSheet.ruleCount++;
262
+ insertedIndices.push(atomicRuleIndex); // Track this index
247
263
  if (firstInsertedIndex == null)
248
- firstInsertedIndex = currentRuleIndex;
249
- lastInsertedIndex = currentRuleIndex;
250
- currentRuleIndex++;
264
+ firstInsertedIndex = atomicRuleIndex;
265
+ lastInsertedIndex = atomicRuleIndex;
266
+ currentRuleIndex = atomicRuleIndex + 1;
251
267
  }
252
268
  // CRITICAL DEBUG: Verify the style element is in DOM only if there are issues and we're not using forceTextInjection
253
269
  if (!styleElement.parentNode && !this.config.forceTextInjection) {
@@ -256,8 +272,8 @@ export class SheetManager {
256
272
  ruleIndex: currentRuleIndex,
257
273
  });
258
274
  }
259
- // Conditionally store cssText and track for debug
260
- if (this.config.debugMode) {
275
+ // Dev-only: store cssText for debugging tools
276
+ if (this.config.devMode) {
261
277
  insertedRuleTexts.push(fullRule);
262
278
  try {
263
279
  registry.ruleTextSet.add(fullRule);
@@ -268,17 +284,15 @@ export class SheetManager {
268
284
  }
269
285
  // currentRuleIndex already adjusted above
270
286
  }
271
- // Update sheet info based on the number of rules inserted
272
- const finalRuleIndex = currentRuleIndex - 1;
273
- if (finalRuleIndex >= targetSheet.ruleCount) {
274
- targetSheet.ruleCount = finalRuleIndex + 1;
275
- }
287
+ // Sheet ruleCount is now updated immediately after each insertion
288
+ // No need for deferred update logic
276
289
  return {
277
290
  className,
278
- ruleIndex: firstInsertedIndex ?? ruleIndex,
291
+ ruleIndex: firstInsertedIndex ?? 0,
279
292
  sheetIndex,
280
- cssText: this.config.debugMode ? insertedRuleTexts : [],
281
- endRuleIndex: lastInsertedIndex ?? finalRuleIndex,
293
+ cssText: this.config.devMode ? insertedRuleTexts : undefined,
294
+ endRuleIndex: lastInsertedIndex ?? firstInsertedIndex ?? 0,
295
+ indices: insertedIndices.length > 0 ? insertedIndices : undefined,
282
296
  };
283
297
  }
284
298
  catch (error) {
@@ -292,9 +306,103 @@ export class SheetManager {
292
306
  /**
293
307
  * Insert global CSS rules
294
308
  */
295
- insertGlobalRule(registry, flattenedRules, className, root) {
296
- // For now, global rules are handled the same way as regular rules
297
- return this.insertRule(registry, flattenedRules, className, root);
309
+ insertGlobalRule(registry, flattenedRules, globalKey, root) {
310
+ // Insert the rule using the same mechanism as regular rules
311
+ const ruleInfo = this.insertRule(registry, flattenedRules, globalKey, root);
312
+ // Track global rules for index adjustment
313
+ if (ruleInfo) {
314
+ registry.globalRules.set(globalKey, ruleInfo);
315
+ }
316
+ return ruleInfo;
317
+ }
318
+ /**
319
+ * Delete a global CSS rule by key
320
+ */
321
+ deleteGlobalRule(registry, globalKey) {
322
+ const ruleInfo = registry.globalRules.get(globalKey);
323
+ if (!ruleInfo) {
324
+ return;
325
+ }
326
+ // Delete the rule using the standard deletion mechanism
327
+ this.deleteRule(registry, ruleInfo);
328
+ // Remove from global rules tracking
329
+ registry.globalRules.delete(globalKey);
330
+ }
331
+ /**
332
+ * Adjust rule indices after deletion to account for shifting
333
+ */
334
+ adjustIndicesAfterDeletion(registry, sheetIndex, startIdx, endIdx, deleteCount, deletedRuleInfo, deletedIndices) {
335
+ try {
336
+ // Helper function to adjust a single RuleInfo
337
+ const adjustRuleInfo = (info) => {
338
+ if (info === deletedRuleInfo)
339
+ return; // Skip the deleted rule
340
+ if (info.sheetIndex !== sheetIndex)
341
+ return; // Different sheet
342
+ // If info has exact indices, adjust them
343
+ if (info.indices && info.indices.length > 0 && deletedIndices) {
344
+ // Sort deleted indices for efficient binary search
345
+ const sortedDeleted = [...deletedIndices].sort((a, b) => a - b);
346
+ // Adjust each index based on how many deleted indices are before it
347
+ info.indices = info.indices.map((idx) => {
348
+ // Count how many deleted indices are less than this index
349
+ let shift = 0;
350
+ for (const delIdx of sortedDeleted) {
351
+ if (delIdx < idx)
352
+ shift++;
353
+ else
354
+ break;
355
+ }
356
+ return idx - shift;
357
+ });
358
+ // Update ruleIndex and endRuleIndex to match adjusted indices
359
+ if (info.indices.length > 0) {
360
+ info.ruleIndex = Math.min(...info.indices);
361
+ info.endRuleIndex = Math.max(...info.indices);
362
+ }
363
+ }
364
+ else {
365
+ // Fallback: adjust using range logic
366
+ const infoEnd = info.endRuleIndex ?? info.ruleIndex;
367
+ if (info.ruleIndex > endIdx) {
368
+ // Rule is after deleted range - shift left
369
+ info.ruleIndex = Math.max(0, info.ruleIndex - deleteCount);
370
+ if (info.endRuleIndex != null) {
371
+ info.endRuleIndex = Math.max(info.ruleIndex, infoEnd - deleteCount);
372
+ }
373
+ }
374
+ else if (info.ruleIndex <= endIdx && infoEnd >= startIdx) {
375
+ // Rule overlaps with deleted range (should not normally happen)
376
+ // Clamp endRuleIndex to avoid pointing into deleted region
377
+ if (info.endRuleIndex != null) {
378
+ const newEnd = Math.max(info.ruleIndex, startIdx - 1);
379
+ info.endRuleIndex = Math.max(info.ruleIndex, newEnd);
380
+ }
381
+ }
382
+ }
383
+ };
384
+ // Adjust active rules
385
+ for (const info of registry.rules.values()) {
386
+ adjustRuleInfo(info);
387
+ }
388
+ // Adjust global rules
389
+ for (const info of registry.globalRules.values()) {
390
+ adjustRuleInfo(info);
391
+ }
392
+ // No need to separately adjust unused rules since they're part of the rules Map
393
+ // Adjust keyframes indices stored in cache
394
+ for (const entry of registry.keyframesCache.values()) {
395
+ const ki = entry.info;
396
+ if (ki.sheetIndex !== sheetIndex)
397
+ continue;
398
+ if (ki.ruleIndex > endIdx) {
399
+ ki.ruleIndex = Math.max(0, ki.ruleIndex - deleteCount);
400
+ }
401
+ }
402
+ }
403
+ catch (_) {
404
+ // Defensive: do not let index adjustments crash cleanup
405
+ }
298
406
  }
299
407
  /**
300
408
  * Delete a CSS rule from the sheet
@@ -305,45 +413,57 @@ export class SheetManager {
305
413
  return;
306
414
  }
307
415
  try {
308
- const texts = Array.isArray(ruleInfo.cssText)
416
+ const texts = this.config.devMode && Array.isArray(ruleInfo.cssText)
309
417
  ? ruleInfo.cssText.slice()
310
418
  : [];
311
419
  const styleElement = sheet.sheet;
312
420
  const styleSheet = styleElement.sheet;
313
421
  if (styleSheet) {
314
422
  const rules = styleSheet.cssRules;
315
- // Prefer index-based deletion when possible
316
- const startIdx = Math.max(0, ruleInfo.ruleIndex);
317
- const endIdx = Math.min(rules.length - 1, Number.isFinite(ruleInfo.endRuleIndex)
318
- ? ruleInfo.endRuleIndex
319
- : startIdx - 1);
320
- if (Number.isFinite(startIdx) && endIdx >= startIdx) {
321
- for (let idx = endIdx; idx >= startIdx; idx--) {
322
- if (idx < 0 || idx >= styleSheet.cssRules.length)
323
- continue;
324
- styleSheet.deleteRule(idx);
325
- }
326
- sheet.ruleCount = Math.max(0, sheet.ruleCount - (endIdx - startIdx + 1));
327
- }
328
- else if (this.config.debugMode && texts.length) {
329
- // Fallback: locate each rule by exact cssText and delete (debug mode only)
330
- for (const text of texts) {
331
- let idx = -1;
332
- for (let i = styleSheet.cssRules.length - 1; i >= 0; i--) {
333
- if (styleSheet.cssRules[i].cssText === text) {
334
- idx = i;
335
- break;
423
+ // Use exact indices if available, otherwise fall back to range
424
+ if (ruleInfo.indices && ruleInfo.indices.length > 0) {
425
+ // NEW: Delete using exact tracked indices
426
+ const sortedIndices = [...ruleInfo.indices].sort((a, b) => b - a); // Sort descending
427
+ const deletedIndices = [];
428
+ for (const idx of sortedIndices) {
429
+ if (idx >= 0 && idx < styleSheet.cssRules.length) {
430
+ try {
431
+ styleSheet.deleteRule(idx);
432
+ deletedIndices.push(idx);
433
+ }
434
+ catch (e) {
435
+ console.warn(`Failed to delete rule at index ${idx}:`, e);
336
436
  }
337
437
  }
338
- if (idx >= 0) {
438
+ }
439
+ sheet.ruleCount = Math.max(0, sheet.ruleCount - deletedIndices.length);
440
+ // Adjust indices for all other rules
441
+ if (deletedIndices.length > 0) {
442
+ this.adjustIndicesAfterDeletion(registry, ruleInfo.sheetIndex, Math.min(...deletedIndices), Math.max(...deletedIndices), deletedIndices.length, ruleInfo, deletedIndices);
443
+ }
444
+ }
445
+ else {
446
+ // FALLBACK: Use old range-based deletion for backwards compatibility
447
+ const startIdx = Math.max(0, ruleInfo.ruleIndex);
448
+ const endIdx = Math.min(rules.length - 1, Number.isFinite(ruleInfo.endRuleIndex)
449
+ ? ruleInfo.endRuleIndex
450
+ : startIdx);
451
+ if (Number.isFinite(startIdx) && endIdx >= startIdx) {
452
+ const deleteCount = endIdx - startIdx + 1;
453
+ for (let idx = endIdx; idx >= startIdx; idx--) {
454
+ if (idx < 0 || idx >= styleSheet.cssRules.length)
455
+ continue;
339
456
  styleSheet.deleteRule(idx);
340
457
  }
458
+ sheet.ruleCount = Math.max(0, sheet.ruleCount - deleteCount);
459
+ // After deletion, all subsequent rule indices shift left by deleteCount.
460
+ // We must adjust stored indices for all other RuleInfo within the same sheet.
461
+ this.adjustIndicesAfterDeletion(registry, ruleInfo.sheetIndex, startIdx, endIdx, deleteCount, ruleInfo);
341
462
  }
342
- sheet.ruleCount = Math.max(0, sheet.ruleCount - texts.length);
343
463
  }
344
464
  }
345
- // Remove texts from validation set
346
- if (this.config.debugMode) {
465
+ // Dev-only: remove cssText entries from validation set
466
+ if (this.config.devMode && texts.length) {
347
467
  try {
348
468
  for (const text of texts) {
349
469
  registry.ruleTextSet.delete(text);
@@ -384,52 +504,20 @@ export class SheetManager {
384
504
  return sheet.ruleCount;
385
505
  }
386
506
  /**
387
- * Mark a ruleset as unused but keep it in the stylesheet
388
- */
389
- markAsUnused(registry, className) {
390
- const ruleInfo = registry.rules.get(className);
391
- if (!ruleInfo)
392
- return;
393
- // Mark as unused (but keep in registry.rules)
394
- const unusedInfo = {
395
- ruleInfo,
396
- markedUnusedAt: Date.now(),
397
- };
398
- registry.unusedRules.set(className, unusedInfo);
399
- registry.refCounts.delete(className);
400
- // Update metrics
401
- if (registry.metrics) {
402
- registry.metrics.totalUnused++;
403
- }
404
- // Schedule bulk cleanup if threshold exceeded
405
- const threshold = this.config.unusedStylesThreshold || 500;
406
- if (registry.unusedRules.size >= threshold) {
407
- this.scheduleBulkCleanup(registry);
408
- }
409
- }
410
- /**
411
- * Restore a ruleset from unused styles
412
- */
413
- restoreFromUnused(registry, className) {
414
- const unusedInfo = registry.unusedRules.get(className);
415
- if (!unusedInfo)
416
- return null;
417
- // Remove from unused rules (rules stays in registry.rules)
418
- registry.unusedRules.delete(className);
419
- registry.refCounts.set(className, 1);
420
- // Update metrics
421
- if (registry.metrics) {
422
- registry.metrics.unusedHits++;
423
- }
424
- return unusedInfo.ruleInfo;
425
- }
426
- /**
427
- * Schedule bulk cleanup of all unused styles
507
+ * Schedule bulk cleanup of all unused styles (non-stacking)
428
508
  */
429
509
  scheduleBulkCleanup(registry) {
430
- // Don't schedule if already scheduled
431
- if (registry.bulkCleanupTimeout)
432
- return;
510
+ // Clear any existing timeout to prevent stacking
511
+ if (registry.bulkCleanupTimeout) {
512
+ if (this.config.idleCleanup &&
513
+ typeof cancelIdleCallback !== 'undefined') {
514
+ cancelIdleCallback(registry.bulkCleanupTimeout);
515
+ }
516
+ else {
517
+ clearTimeout(registry.bulkCleanupTimeout);
518
+ }
519
+ registry.bulkCleanupTimeout = null;
520
+ }
433
521
  const performCleanup = () => {
434
522
  this.performBulkCleanup(registry);
435
523
  registry.bulkCleanupTimeout = null;
@@ -442,31 +530,54 @@ export class SheetManager {
442
530
  registry.bulkCleanupTimeout = setTimeout(performCleanup, delay);
443
531
  }
444
532
  }
533
+ /**
534
+ * Force cleanup of unused styles
535
+ */
536
+ forceCleanup(registry) {
537
+ this.performBulkCleanup(registry, true);
538
+ }
445
539
  /**
446
540
  * Perform bulk cleanup of all unused styles
447
541
  */
448
- performBulkCleanup(registry) {
449
- if (registry.unusedRules.size === 0)
450
- return;
542
+ performBulkCleanup(registry, cleanupAll = false) {
451
543
  const cleanupStartTime = Date.now();
452
- const classNamesToCleanup = Array.from(registry.unusedRules.keys());
544
+ // Calculate unused rules dynamically: rules that have refCount = 0
545
+ const unusedClassNames = Array.from(registry.refCounts.entries())
546
+ .filter(([, refCount]) => refCount === 0)
547
+ .map(([className]) => className);
548
+ if (unusedClassNames.length === 0)
549
+ return;
550
+ // Build candidates list - no age filtering needed
551
+ const candidates = unusedClassNames.map((className) => {
552
+ const ruleInfo = registry.rules.get(className); // We know it exists
553
+ return {
554
+ className,
555
+ ruleInfo,
556
+ };
557
+ });
558
+ if (candidates.length === 0)
559
+ return;
560
+ // Limit deletion scope per run (batch ratio) unless cleanupAll is true
561
+ let selected = candidates;
562
+ if (!cleanupAll) {
563
+ const ratio = this.config.bulkCleanupBatchRatio ?? 0.5;
564
+ const limit = Math.max(1, Math.floor(candidates.length * Math.min(1, Math.max(0, ratio))));
565
+ selected = candidates.slice(0, limit);
566
+ }
453
567
  let cleanedUpCount = 0;
454
568
  let totalCssSize = 0;
455
569
  let totalRulesDeleted = 0;
456
570
  // Group by sheet for efficient deletion
457
571
  const rulesBySheet = new Map();
458
572
  // Calculate CSS size before deletion and group rules
459
- for (const className of classNamesToCleanup) {
460
- const unusedInfo = registry.unusedRules.get(className);
461
- if (!unusedInfo)
462
- continue;
463
- const ruleInfo = unusedInfo.ruleInfo;
573
+ for (const { className, ruleInfo } of selected) {
464
574
  const sheetIndex = ruleInfo.sheetIndex;
465
- // Calculate CSS size for this rule
466
- const cssSize = ruleInfo.cssText.reduce((total, css) => total + css.length, 0);
467
- totalCssSize += cssSize;
468
- // Count number of rules (based on cssText array length)
469
- totalRulesDeleted += ruleInfo.cssText.length;
575
+ // Dev-only metrics: estimate CSS size and rule count if available
576
+ if (this.config.devMode && Array.isArray(ruleInfo.cssText)) {
577
+ const cssSize = ruleInfo.cssText.reduce((total, css) => total + css.length, 0);
578
+ totalCssSize += cssSize;
579
+ totalRulesDeleted += ruleInfo.cssText.length;
580
+ }
470
581
  if (!rulesBySheet.has(sheetIndex)) {
471
582
  rulesBySheet.set(sheetIndex, []);
472
583
  }
@@ -477,26 +588,53 @@ export class SheetManager {
477
588
  // Sort by rule index in descending order for safe deletion
478
589
  rulesInSheet.sort((a, b) => b.ruleInfo.ruleIndex - a.ruleInfo.ruleIndex);
479
590
  for (const { className, ruleInfo } of rulesInSheet) {
480
- // SAFETY: Re-check that the rule is still unused at deletion time.
481
- // Between scheduling and execution a class may have been restored
482
- // (refCounts set and removed from unusedRules). Skip such entries.
483
- if (!registry.unusedRules.has(className)) {
484
- continue;
485
- }
486
- if (registry.refCounts.has(className)) {
591
+ // SAFETY 1: Double-check refCount is still 0
592
+ const currentRefCount = registry.refCounts.get(className) || 0;
593
+ if (currentRefCount > 0) {
487
594
  // Class became active again; do not delete
488
595
  continue;
489
596
  }
490
- // Ensure we delete the same RuleInfo we marked earlier to avoid
491
- // accidentally deleting updated rules for the same class.
597
+ // SAFETY 2: Ensure rule wasn't replaced
598
+ // Between scheduling and execution a class may have been replaced with a new RuleInfo
492
599
  const currentInfo = registry.rules.get(className);
493
- if (currentInfo && currentInfo !== ruleInfo) {
600
+ if (currentInfo !== ruleInfo) {
494
601
  // Rule was replaced; skip deletion of the old reference
495
602
  continue;
496
603
  }
604
+ // SAFETY 3: Verify the sheet element is still valid and accessible
605
+ const sheetInfo = registry.sheets[ruleInfo.sheetIndex];
606
+ if (!sheetInfo || !sheetInfo.sheet) {
607
+ // Sheet was removed or corrupted; skip this rule
608
+ continue;
609
+ }
610
+ // SAFETY 4: Verify the stylesheet itself is accessible
611
+ const styleSheet = sheetInfo.sheet.sheet;
612
+ if (!styleSheet) {
613
+ // Stylesheet not available; skip this rule
614
+ continue;
615
+ }
616
+ // SAFETY 5: Verify rule index is still within valid range
617
+ const maxRuleIndex = styleSheet.cssRules.length - 1;
618
+ const startIdx = ruleInfo.ruleIndex;
619
+ const endIdx = ruleInfo.endRuleIndex ?? ruleInfo.ruleIndex;
620
+ if (startIdx < 0 || endIdx > maxRuleIndex || startIdx > endIdx) {
621
+ // Rule indices are out of bounds; skip this rule
622
+ continue;
623
+ }
624
+ // All safety checks passed - proceed with deletion
497
625
  this.deleteRule(registry, ruleInfo);
498
626
  registry.rules.delete(className);
499
- registry.unusedRules.delete(className);
627
+ registry.refCounts.delete(className);
628
+ // Clean up cache key mappings that point to this className
629
+ const keysToDelete = [];
630
+ for (const [key, mappedClassName,] of registry.cacheKeyToClassName.entries()) {
631
+ if (mappedClassName === className) {
632
+ keysToDelete.push(key);
633
+ }
634
+ }
635
+ for (const key of keysToDelete) {
636
+ registry.cacheKeyToClassName.delete(key);
637
+ }
500
638
  cleanedUpCount++;
501
639
  }
502
640
  }
@@ -513,13 +651,6 @@ export class SheetManager {
513
651
  });
514
652
  }
515
653
  }
516
- /**
517
- * Process the deletion queue for cleanup
518
- */
519
- processCleanupQueue(registry) {
520
- // This method is kept for compatibility but the logic has changed
521
- // We no longer use a deletion queue, instead marking styles as unused immediately
522
- }
523
654
  /**
524
655
  * Get total number of rules across all sheets
525
656
  */
@@ -552,7 +683,14 @@ export class SheetManager {
552
683
  * Get cache performance metrics
553
684
  */
554
685
  getMetrics(registry) {
555
- return registry.metrics || null;
686
+ if (!registry.metrics)
687
+ return null;
688
+ // Calculate unusedHits on demand - only count CSS rules since keyframes are disposed immediately
689
+ const unusedRulesCount = Array.from(registry.refCounts.values()).filter((count) => count === 0).length;
690
+ return {
691
+ ...registry.metrics,
692
+ unusedHits: unusedRulesCount,
693
+ };
556
694
  }
557
695
  /**
558
696
  * Reset cache performance metrics
@@ -562,7 +700,6 @@ export class SheetManager {
562
700
  registry.metrics = {
563
701
  hits: 0,
564
702
  misses: 0,
565
- unusedHits: 0,
566
703
  bulkCleanups: 0,
567
704
  totalInsertions: 0,
568
705
  totalUnused: 0,
@@ -674,7 +811,7 @@ export class SheetManager {
674
811
  name,
675
812
  ruleIndex,
676
813
  sheetIndex,
677
- cssText: fullRule,
814
+ cssText: this.config.devMode ? fullRule : undefined,
678
815
  };
679
816
  }
680
817
  catch (error) {
@@ -705,12 +842,28 @@ export class SheetManager {
705
842
  }
706
843
  }
707
844
  /**
708
- * Mark keyframes as unused
845
+ * Schedule async cleanup check (non-stacking)
846
+ */
847
+ checkCleanupNeeded(registry) {
848
+ // Clear any existing check timeout to prevent stacking
849
+ if (registry.cleanupCheckTimeout) {
850
+ clearTimeout(registry.cleanupCheckTimeout);
851
+ registry.cleanupCheckTimeout = null;
852
+ }
853
+ // Schedule the actual check with setTimeout(..., 0)
854
+ registry.cleanupCheckTimeout = setTimeout(() => {
855
+ this.performCleanupCheck(registry);
856
+ registry.cleanupCheckTimeout = null;
857
+ }, 0);
858
+ }
859
+ /**
860
+ * Perform the actual cleanup check (called asynchronously)
709
861
  */
710
- markKeyframesAsUnused(registry, name) {
711
- // Implementation similar to markAsUnused but for keyframes
862
+ performCleanupCheck(registry) {
863
+ // Count unused rules (refCount = 0) - keyframes are disposed immediately
864
+ const unusedRulesCount = Array.from(registry.refCounts.values()).filter((count) => count === 0).length;
712
865
  const threshold = this.config.unusedStylesThreshold || 500;
713
- if (registry.unusedKeyframes.size >= threshold) {
866
+ if (unusedRulesCount >= threshold) {
714
867
  this.scheduleBulkCleanup(registry);
715
868
  }
716
869
  }
@@ -733,6 +886,11 @@ export class SheetManager {
733
886
  }
734
887
  registry.bulkCleanupTimeout = null;
735
888
  }
889
+ // Cancel any scheduled cleanup check
890
+ if (registry.cleanupCheckTimeout) {
891
+ clearTimeout(registry.cleanupCheckTimeout);
892
+ registry.cleanupCheckTimeout = null;
893
+ }
736
894
  // Remove all sheets
737
895
  for (const sheet of registry.sheets) {
738
896
  try {
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.75.0
4
+ * @cube-dev/ui-kit v0.76.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.75.0
4
+ * @cube-dev/ui-kit v0.76.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.75.0
4
+ * @cube-dev/ui-kit v0.76.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.75.0
4
+ * @cube-dev/ui-kit v0.76.0
5
5
  * Released under the MIT license.
6
6
  */
7
7