@cube-dev/ui-kit 0.74.3 → 0.75.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (510) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/es/_internal/hooks/index.js +1 -1
  3. package/es/_internal/hooks/use-chained-callback.js +1 -1
  4. package/es/_internal/hooks/use-debounced-value.js +1 -1
  5. package/es/_internal/hooks/use-deprecation-warning.js +1 -1
  6. package/es/_internal/hooks/use-effect-once.js +1 -1
  7. package/es/_internal/hooks/use-event.js +1 -1
  8. package/es/_internal/hooks/use-is-first-render.js +1 -1
  9. package/es/_internal/hooks/use-sync-ref.js +1 -1
  10. package/es/_internal/hooks/use-timer/index.js +1 -1
  11. package/es/_internal/hooks/use-timer/timer.js +1 -1
  12. package/es/_internal/hooks/use-timer/use-timer.js +1 -1
  13. package/es/_internal/hooks/use-update-effect.js +1 -1
  14. package/es/_internal/hooks/use-warn.js +1 -1
  15. package/es/_internal/index.js +1 -1
  16. package/es/components/Block.js +1 -1
  17. package/es/components/GlobalStyles.js +10 -15
  18. package/es/components/GridProvider.js +1 -1
  19. package/es/components/HiddenInput.js +25 -24
  20. package/es/components/Item.js +1 -1
  21. package/es/components/OpenTrasition.js +1 -1
  22. package/es/components/Root.js +2 -2
  23. package/es/components/actions/Action/Action.js +15 -19
  24. package/es/components/actions/Button/Button.js +2 -1
  25. package/es/components/actions/Button/index.js +1 -1
  26. package/es/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  27. package/es/components/actions/CommandMenu/CommandMenu.js +1 -1
  28. package/es/components/actions/CommandMenu/index.js +1 -1
  29. package/es/components/actions/CommandMenu/styled.js +1 -1
  30. package/es/components/actions/ItemButton/ItemButton.js +1 -1
  31. package/es/components/actions/ItemButton/index.js +1 -1
  32. package/es/components/actions/Menu/Menu.js +1 -1
  33. package/es/components/actions/Menu/MenuItem.js +3 -8
  34. package/es/components/actions/Menu/MenuSection.js +1 -1
  35. package/es/components/actions/Menu/MenuTrigger.js +1 -1
  36. package/es/components/actions/Menu/SubMenuTrigger.js +1 -1
  37. package/es/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  38. package/es/components/actions/Menu/context.js +1 -1
  39. package/es/components/actions/Menu/index.js +1 -1
  40. package/es/components/actions/Menu/styled.js +1 -1
  41. package/es/components/actions/index.js +1 -1
  42. package/es/components/actions/use-action.js +1 -1
  43. package/es/components/actions/use-anchored-menu.js +1 -1
  44. package/es/components/actions/use-context-menu.js +1 -1
  45. package/es/components/content/ActiveZone/ActiveZone.js +1 -1
  46. package/es/components/content/Alert/Alert.js +1 -1
  47. package/es/components/content/Alert/index.js +1 -1
  48. package/es/components/content/Alert/types.js +1 -1
  49. package/es/components/content/Alert/use-alert.js +1 -1
  50. package/es/components/content/Avatar/Avatar.js +1 -1
  51. package/es/components/content/Badge/Badge.js +1 -1
  52. package/es/components/content/Card/Card.js +1 -1
  53. package/es/components/content/Content.js +1 -1
  54. package/es/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  55. package/es/components/content/CopyPasteBlock/index.js +1 -1
  56. package/es/components/content/CopySnippet/CopySnippet.js +1 -1
  57. package/es/components/content/CopySnippet/index.js +1 -1
  58. package/es/components/content/Divider.js +1 -1
  59. package/es/components/content/Footer.js +1 -1
  60. package/es/components/content/Header.js +1 -1
  61. package/es/components/content/HotKeys/HotKeys.js +1 -1
  62. package/es/components/content/HotKeys/index.js +1 -1
  63. package/es/components/content/ItemBase/ItemBase.js +9 -3
  64. package/es/components/content/ItemBase/index.js +1 -1
  65. package/es/components/content/List/SectionHeading.js +1 -1
  66. package/es/components/content/List/index.js +1 -1
  67. package/es/components/content/Paragraph.js +1 -1
  68. package/es/components/content/Placeholder/Placeholder.js +46 -41
  69. package/es/components/content/PrismCode/PrismCode.js +1 -1
  70. package/es/components/content/PrismCode/prismSetup.js +1 -1
  71. package/es/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  72. package/es/components/content/Result/Result.js +1 -1
  73. package/es/components/content/Skeleton/Skeleton.js +1 -1
  74. package/es/components/content/Tag/Tag.js +1 -1
  75. package/es/components/content/Text.js +3 -3
  76. package/es/components/content/Title.js +3 -3
  77. package/es/components/fields/Checkbox/Checkbox.js +1 -1
  78. package/es/components/fields/Checkbox/CheckboxGroup.js +1 -1
  79. package/es/components/fields/Checkbox/context.js +1 -1
  80. package/es/components/fields/Checkbox/index.js +1 -1
  81. package/es/components/fields/ComboBox/ComboBox.js +1 -1
  82. package/es/components/fields/ComboBox/index.js +1 -1
  83. package/es/components/fields/DatePicker/DateInput.js +1 -1
  84. package/es/components/fields/DatePicker/DateInputBase.js +1 -1
  85. package/es/components/fields/DatePicker/DatePicker.js +1 -1
  86. package/es/components/fields/DatePicker/DatePickerButton.js +1 -1
  87. package/es/components/fields/DatePicker/DatePickerElement.js +1 -1
  88. package/es/components/fields/DatePicker/DatePickerInput.js +1 -1
  89. package/es/components/fields/DatePicker/DatePickerSegment.js +1 -1
  90. package/es/components/fields/DatePicker/DateRangePicker.js +1 -1
  91. package/es/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  92. package/es/components/fields/DatePicker/TimeInput.js +1 -1
  93. package/es/components/fields/DatePicker/index.js +1 -1
  94. package/es/components/fields/DatePicker/intl.js +1 -1
  95. package/es/components/fields/DatePicker/parseDate.js +1 -1
  96. package/es/components/fields/DatePicker/props.js +1 -1
  97. package/es/components/fields/DatePicker/types.js +1 -1
  98. package/es/components/fields/DatePicker/utils.js +1 -1
  99. package/es/components/fields/FileInput/FileInput.js +1 -1
  100. package/es/components/fields/FilterListBox/FilterListBox.js +1 -1
  101. package/es/components/fields/FilterListBox/index.js +1 -1
  102. package/es/components/fields/FilterPicker/FilterPicker.js +1 -1
  103. package/es/components/fields/FilterPicker/index.js +1 -1
  104. package/es/components/fields/Input/Input.js +1 -1
  105. package/es/components/fields/Input/index.js +1 -1
  106. package/es/components/fields/ListBox/ListBox.js +1 -1
  107. package/es/components/fields/ListBox/index.js +1 -1
  108. package/es/components/fields/NumberInput/NumberInput.js +1 -1
  109. package/es/components/fields/NumberInput/StepButton.js +1 -1
  110. package/es/components/fields/PasswordInput/PasswordInput.js +1 -1
  111. package/es/components/fields/RadioGroup/Radio.js +2 -2
  112. package/es/components/fields/RadioGroup/RadioGroup.js +1 -1
  113. package/es/components/fields/RadioGroup/context.js +1 -1
  114. package/es/components/fields/RadioGroup/index.js +1 -1
  115. package/es/components/fields/SearchInput/SearchInput.js +1 -1
  116. package/es/components/fields/SearchInput/index.js +1 -1
  117. package/es/components/fields/Select/Select.js +1 -1
  118. package/es/components/fields/Select/index.js +1 -1
  119. package/es/components/fields/Slider/Gradation.js +1 -1
  120. package/es/components/fields/Slider/Header.js +1 -1
  121. package/es/components/fields/Slider/RangeSlider.js +1 -1
  122. package/es/components/fields/Slider/Slider.js +1 -1
  123. package/es/components/fields/Slider/SliderBase.js +1 -1
  124. package/es/components/fields/Slider/SliderInput.js +1 -1
  125. package/es/components/fields/Slider/SliderThumb.js +1 -1
  126. package/es/components/fields/Slider/SliderTrack.js +1 -1
  127. package/es/components/fields/Slider/elements.js +1 -1
  128. package/es/components/fields/Slider/index.js +1 -1
  129. package/es/components/fields/Slider/types.js +1 -1
  130. package/es/components/fields/Switch/Switch.js +1 -1
  131. package/es/components/fields/Switch/index.js +1 -1
  132. package/es/components/fields/TextArea/TextArea.js +1 -1
  133. package/es/components/fields/TextArea/index.js +1 -1
  134. package/es/components/fields/TextInput/TextInput.js +1 -1
  135. package/es/components/fields/TextInput/TextInputBase.js +3 -2
  136. package/es/components/fields/TextInput/index.js +1 -1
  137. package/es/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  138. package/es/components/fields/TextInputMapper/index.js +1 -1
  139. package/es/components/fields/index.js +1 -1
  140. package/es/components/form/FieldWrapper/FieldWrapper.js +1 -1
  141. package/es/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  142. package/es/components/form/FieldWrapper/index.js +1 -1
  143. package/es/components/form/FieldWrapper/types.js +1 -1
  144. package/es/components/form/Form/Field.js +1 -1
  145. package/es/components/form/Form/Form.js +1 -1
  146. package/es/components/form/Form/ResetButton/ResetButton.js +1 -1
  147. package/es/components/form/Form/ResetButton/index.js +1 -1
  148. package/es/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  149. package/es/components/form/Form/SubmitButton/index.js +1 -1
  150. package/es/components/form/Form/SubmitError.js +1 -1
  151. package/es/components/form/Form/index.js +1 -1
  152. package/es/components/form/Form/types.js +1 -1
  153. package/es/components/form/Form/use-field/index.js +1 -1
  154. package/es/components/form/Form/use-field/types.js +1 -1
  155. package/es/components/form/Form/use-field/use-field-props.js +1 -1
  156. package/es/components/form/Form/use-field/use-field.js +1 -1
  157. package/es/components/form/Form/use-form.js +1 -1
  158. package/es/components/form/Form/validation.js +1 -1
  159. package/es/components/form/Label.js +1 -1
  160. package/es/components/form/index.js +1 -1
  161. package/es/components/form/wrapper.js +1 -1
  162. package/es/components/layout/Flex.js +1 -1
  163. package/es/components/layout/Flow.js +1 -1
  164. package/es/components/layout/Grid.js +1 -1
  165. package/es/components/layout/Panel.js +1 -1
  166. package/es/components/layout/Prefix.js +1 -1
  167. package/es/components/layout/ResizablePanel.js +1 -1
  168. package/es/components/layout/Space.js +1 -1
  169. package/es/components/layout/Suffix.js +1 -1
  170. package/es/components/navigation/LegacyTabs/LegacyTabs.js +1 -1
  171. package/es/components/navigation/Link/Link.js +1 -1
  172. package/es/components/organisms/FileTabs/FileTabs.js +1 -1
  173. package/es/components/organisms/Modal/Modal.js +59 -68
  174. package/es/components/organisms/StatsCard/StatsCard.js +1 -1
  175. package/es/components/other/Base64Upload/Base64Upload.js +1 -1
  176. package/es/components/other/Calendar/Calendar.js +1 -1
  177. package/es/components/other/Calendar/CalendarCell.js +1 -1
  178. package/es/components/other/Calendar/CalendarGrid.js +1 -1
  179. package/es/components/other/Calendar/RangeCalendar.js +1 -1
  180. package/es/components/other/CloudLogo/CloudLogo.js +1 -1
  181. package/es/components/overlays/AlertDialog/AlertDialog.js +1 -1
  182. package/es/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  183. package/es/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  184. package/es/components/overlays/AlertDialog/index.js +1 -1
  185. package/es/components/overlays/AlertDialog/types.js +1 -1
  186. package/es/components/overlays/Dialog/Dialog.js +1 -1
  187. package/es/components/overlays/Dialog/DialogContainer.js +1 -1
  188. package/es/components/overlays/Dialog/DialogForm.js +1 -1
  189. package/es/components/overlays/Dialog/DialogTrigger.js +1 -1
  190. package/es/components/overlays/Dialog/context.js +1 -1
  191. package/es/components/overlays/Dialog/index.js +1 -1
  192. package/es/components/overlays/Dialog/use-dialog-container.js +1 -1
  193. package/es/components/overlays/Modal/Modal.js +1 -1
  194. package/es/components/overlays/Modal/OpenTransition.js +1 -1
  195. package/es/components/overlays/Modal/Overlay.js +1 -1
  196. package/es/components/overlays/Modal/Popover.js +1 -1
  197. package/es/components/overlays/Modal/Tray.js +1 -1
  198. package/es/components/overlays/Modal/Underlay.js +1 -1
  199. package/es/components/overlays/Modal/index.js +1 -1
  200. package/es/components/overlays/Modal/types.js +1 -1
  201. package/es/components/overlays/NewNotifications/Bar/FloatingNotification.js +1 -1
  202. package/es/components/overlays/NewNotifications/Bar/NotificationsBar.js +1 -1
  203. package/es/components/overlays/NewNotifications/Bar/TransitionComponent.js +1 -1
  204. package/es/components/overlays/NewNotifications/Bar/index.js +1 -1
  205. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.js +1 -1
  206. package/es/components/overlays/NewNotifications/Dialog/index.js +1 -1
  207. package/es/components/overlays/NewNotifications/Notification.js +1 -1
  208. package/es/components/overlays/NewNotifications/NotificationView/NotificationAction.js +1 -1
  209. package/es/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.js +1 -1
  210. package/es/components/overlays/NewNotifications/NotificationView/NotificationDescription.js +1 -1
  211. package/es/components/overlays/NewNotifications/NotificationView/NotificationFooter.js +1 -1
  212. package/es/components/overlays/NewNotifications/NotificationView/NotificationHeader.js +1 -1
  213. package/es/components/overlays/NewNotifications/NotificationView/NotificationIcon.js +1 -1
  214. package/es/components/overlays/NewNotifications/NotificationView/NotificationProvider.js +1 -1
  215. package/es/components/overlays/NewNotifications/NotificationView/NotificationView.js +1 -1
  216. package/es/components/overlays/NewNotifications/NotificationView/index.js +1 -1
  217. package/es/components/overlays/NewNotifications/NotificationView/types.js +1 -1
  218. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.js +1 -1
  219. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.js +1 -1
  220. package/es/components/overlays/NewNotifications/NotificationsContext/index.js +1 -1
  221. package/es/components/overlays/NewNotifications/NotificationsContext/use-notifications.js +1 -1
  222. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsList.js +1 -1
  223. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.js +1 -1
  224. package/es/components/overlays/NewNotifications/NotificationsList/index.js +1 -1
  225. package/es/components/overlays/NewNotifications/NotificationsList/types.js +1 -1
  226. package/es/components/overlays/NewNotifications/hooks/index.js +1 -1
  227. package/es/components/overlays/NewNotifications/hooks/types.js +1 -1
  228. package/es/components/overlays/NewNotifications/hooks/use-notification-list-item.js +1 -1
  229. package/es/components/overlays/NewNotifications/hooks/use-notifications-api.js +1 -1
  230. package/es/components/overlays/NewNotifications/hooks/use-notifications-list.js +1 -1
  231. package/es/components/overlays/NewNotifications/hooks/use-notifications-observer.js +1 -1
  232. package/es/components/overlays/NewNotifications/index.js +1 -1
  233. package/es/components/overlays/NewNotifications/types.js +1 -1
  234. package/es/components/overlays/Notification/Notification.js +1 -1
  235. package/es/components/overlays/OverlayWrapper.js +1 -1
  236. package/es/components/overlays/Toasts/Toast.js +1 -1
  237. package/es/components/overlays/Toasts/index.js +1 -1
  238. package/es/components/overlays/Toasts/types.js +1 -1
  239. package/es/components/overlays/Toasts/use-toasts-api.js +1 -1
  240. package/es/components/overlays/Tooltip/Tooltip.js +1 -1
  241. package/es/components/overlays/Tooltip/TooltipProvider.js +1 -1
  242. package/es/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  243. package/es/components/overlays/Tooltip/context.js +1 -1
  244. package/es/components/overlays/Tooltip/index.js +1 -1
  245. package/es/components/portal/Portal.js +1 -1
  246. package/es/components/portal/PortalProvider.js +1 -1
  247. package/es/components/portal/index.js +1 -1
  248. package/es/components/portal/types.js +1 -1
  249. package/es/components/portal/usePortal.js +1 -1
  250. package/es/components/shared/InvalidIcon.js +1 -1
  251. package/es/components/shared/ValidIcon.js +1 -1
  252. package/es/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  253. package/es/components/status/LoadingAnimation/index.js +1 -1
  254. package/es/components/status/Spin/Cube.js +1 -1
  255. package/es/components/status/Spin/InternalSpinner.js +1 -1
  256. package/es/components/status/Spin/Spin.js +1 -1
  257. package/es/components/status/Spin/SpinsContainer.js +1 -1
  258. package/es/components/status/Spin/index.js +1 -1
  259. package/es/components/status/Spin/types.js +1 -1
  260. package/es/components/status/index.js +1 -1
  261. package/es/data/item-themes.js +1 -1
  262. package/es/data/themes.js +1 -1
  263. package/es/icons/AdjustmentsHorizontalIcon.js +1 -1
  264. package/es/icons/AdjustmentsIcon.js +1 -1
  265. package/es/icons/AiIcon.js +1 -1
  266. package/es/icons/AreaChartIcon.js +1 -1
  267. package/es/icons/BackwardIcon.js +1 -1
  268. package/es/icons/BarChartIcon.js +1 -1
  269. package/es/icons/BellFilledIcon.js +1 -1
  270. package/es/icons/BellIcon.js +1 -1
  271. package/es/icons/BooleanIcon.js +1 -1
  272. package/es/icons/CalendarEditIcon.js +1 -1
  273. package/es/icons/CalendarIcon.js +1 -1
  274. package/es/icons/CaretDownIcon.js +1 -1
  275. package/es/icons/CaretUpIcon.js +1 -1
  276. package/es/icons/ChartAreaStackedIcon.js +1 -1
  277. package/es/icons/ChartAreaStackedPercentageIcon.js +1 -1
  278. package/es/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  279. package/es/icons/ChartBarGroupedIcon.js +1 -1
  280. package/es/icons/ChartBarHorizontalIcon.js +1 -1
  281. package/es/icons/ChartBarLineIcon.js +1 -1
  282. package/es/icons/ChartBarStackedHorizontalIcon.js +1 -1
  283. package/es/icons/ChartBarStackedIcon.js +1 -1
  284. package/es/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  285. package/es/icons/ChartBarStackedPercentageIcon.js +1 -1
  286. package/es/icons/ChartBoxPlot2Icon.js +1 -1
  287. package/es/icons/ChartBoxPlotIcon.js +1 -1
  288. package/es/icons/ChartBubbleIcon.js +1 -1
  289. package/es/icons/ChartDonut2Icon.js +1 -1
  290. package/es/icons/ChartFunnelIcon.js +1 -1
  291. package/es/icons/ChartKPIIcon.js +1 -1
  292. package/es/icons/ChartPie2Icon.js +1 -1
  293. package/es/icons/ChartScatterIcon.js +1 -1
  294. package/es/icons/CheckCircleFilledIcon.js +1 -1
  295. package/es/icons/CheckCircleIcon.js +1 -1
  296. package/es/icons/CheckIcon.js +1 -1
  297. package/es/icons/CircleFilledIcon.js +1 -1
  298. package/es/icons/ClearIcon.js +1 -1
  299. package/es/icons/CloseCircleFilledIcon.js +1 -1
  300. package/es/icons/CloseCircleIcon.js +1 -1
  301. package/es/icons/CloseIcon.js +1 -1
  302. package/es/icons/CodeIcon.js +1 -1
  303. package/es/icons/CopyIcon.js +1 -1
  304. package/es/icons/CountIcon.js +1 -1
  305. package/es/icons/CubeIcon.js +1 -1
  306. package/es/icons/DangerIcon.js +1 -1
  307. package/es/icons/DashboardIcon.js +1 -1
  308. package/es/icons/DatabaseIcon.js +1 -1
  309. package/es/icons/DirectionIcon.js +1 -1
  310. package/es/icons/DonutIcon.js +1 -1
  311. package/es/icons/DownIcon.js +1 -1
  312. package/es/icons/EditIcon.js +1 -1
  313. package/es/icons/ExclamationCircleFilledIcon.js +1 -1
  314. package/es/icons/ExclamationCircleIcon.js +1 -1
  315. package/es/icons/ExclamationIcon.js +1 -1
  316. package/es/icons/EyeIcon.js +1 -1
  317. package/es/icons/EyeInvisibleIcon.js +1 -1
  318. package/es/icons/FilterIcon.js +1 -1
  319. package/es/icons/FolderFilledIcon.js +1 -1
  320. package/es/icons/FolderIcon.js +1 -1
  321. package/es/icons/FolderOpenFilledIcon.js +1 -1
  322. package/es/icons/FolderOpenIcon.js +1 -1
  323. package/es/icons/ForwardIcon.js +1 -1
  324. package/es/icons/HierarchyIcon.js +1 -1
  325. package/es/icons/Icon.js +1 -1
  326. package/es/icons/InfoCircleIcon.js +1 -1
  327. package/es/icons/InfoIcon.js +1 -1
  328. package/es/icons/KeyIcon.js +1 -1
  329. package/es/icons/LeftIcon.js +1 -1
  330. package/es/icons/LineChartIcon.js +1 -1
  331. package/es/icons/LoadingIcon.js +1 -1
  332. package/es/icons/LockFilledIcon.js +1 -1
  333. package/es/icons/LockIcon.js +1 -1
  334. package/es/icons/MoreIcon.js +1 -1
  335. package/es/icons/NotAllowedIcon.js +1 -1
  336. package/es/icons/NumberIcon.js +1 -1
  337. package/es/icons/PauseCircleFilledIcon.js +1 -1
  338. package/es/icons/PauseCircleIcon.js +1 -1
  339. package/es/icons/PauseIcon.js +1 -1
  340. package/es/icons/PieChartIcon.js +1 -1
  341. package/es/icons/PlayCircleIcon.js +1 -1
  342. package/es/icons/PlayIcon.js +1 -1
  343. package/es/icons/PlusIcon.js +1 -1
  344. package/es/icons/ReloadIcon.js +1 -1
  345. package/es/icons/ReportIcon.js +1 -1
  346. package/es/icons/ReturnIcon.js +1 -1
  347. package/es/icons/RightIcon.js +1 -1
  348. package/es/icons/SchemeIcon.js +1 -1
  349. package/es/icons/SearchIcon.js +1 -1
  350. package/es/icons/SettingsIcon.js +1 -1
  351. package/es/icons/ShieldFilledIcon.js +1 -1
  352. package/es/icons/ShieldIcon.js +1 -1
  353. package/es/icons/SlashIcon.js +1 -1
  354. package/es/icons/SparklesIcon.js +1 -1
  355. package/es/icons/SqlIcon.js +1 -1
  356. package/es/icons/StatsIcon.js +1 -1
  357. package/es/icons/StopIcon.js +1 -1
  358. package/es/icons/StringIcon.js +1 -1
  359. package/es/icons/SwitchIcon.js +1 -1
  360. package/es/icons/TableIcon.js +1 -1
  361. package/es/icons/ThumbsDownIcon.js +1 -1
  362. package/es/icons/ThumbsUpIcon.js +1 -1
  363. package/es/icons/ThunderboltCrossedIcon.js +1 -1
  364. package/es/icons/ThunderboltFilledIcon.js +1 -1
  365. package/es/icons/ThunderboltIcon.js +1 -1
  366. package/es/icons/TimeIcon.js +1 -1
  367. package/es/icons/UnlockIcon.js +1 -1
  368. package/es/icons/UpIcon.js +1 -1
  369. package/es/icons/UserGroupIcon.js +1 -1
  370. package/es/icons/UserIcon.js +1 -1
  371. package/es/icons/UserLockIcon.js +1 -1
  372. package/es/icons/ViewIcon.js +1 -1
  373. package/es/icons/WarningFilledIcon.js +1 -1
  374. package/es/icons/WarningIcon.js +1 -1
  375. package/es/icons/add-new-icon.js +1 -1
  376. package/es/icons/index.js +1 -1
  377. package/es/icons/wrap-icon.js +1 -1
  378. package/es/index.js +1 -1
  379. package/es/provider.js +1 -1
  380. package/es/providers/TrackingProvider.js +1 -1
  381. package/es/services/notification.js +1 -1
  382. package/es/shared/form.js +1 -1
  383. package/es/shared/index.js +1 -1
  384. package/es/stories/Form.legacy-stories.js +1 -1
  385. package/es/stories/FormFieldArgs.js +1 -1
  386. package/es/stories/Layout.stories.js +1 -1
  387. package/es/stories/Tasty.stories.js +1 -1
  388. package/es/stories/components/ConfirmDeletionDialogForm.js +1 -1
  389. package/es/stories/components/DialogFormApp.js +1 -1
  390. package/es/stories/components/StyledButton.js +1 -1
  391. package/es/stories/lists/baseProps.js +1 -2
  392. package/es/tasty/debug.js +906 -0
  393. package/es/tasty/index.js +3 -1
  394. package/es/tasty/injector/index.js +171 -0
  395. package/es/tasty/injector/injector.js +688 -0
  396. package/es/tasty/injector/sheet-manager.js +754 -0
  397. package/es/tasty/injector/types.js +10 -0
  398. package/es/tasty/parser/classify.js +1 -1
  399. package/es/tasty/parser/const.js +1 -1
  400. package/es/tasty/parser/lru.js +38 -2
  401. package/es/tasty/parser/parser.js +1 -1
  402. package/es/tasty/parser/tokenizer.js +1 -1
  403. package/es/tasty/parser/types.js +1 -1
  404. package/es/tasty/providers/BreakpointsProvider.js +1 -1
  405. package/es/tasty/styles/align.js +1 -1
  406. package/es/tasty/styles/border.js +1 -1
  407. package/es/tasty/styles/boxShadow.combinator.js +1 -1
  408. package/es/tasty/styles/color.js +8 -12
  409. package/es/tasty/styles/createStyle.js +19 -4
  410. package/es/tasty/styles/dimension.js +1 -1
  411. package/es/tasty/styles/display.js +1 -1
  412. package/es/tasty/styles/fade.js +1 -1
  413. package/es/tasty/styles/fill.js +6 -8
  414. package/es/tasty/styles/flow.js +1 -1
  415. package/es/tasty/styles/font.js +1 -1
  416. package/es/tasty/styles/fontStyle.js +1 -1
  417. package/es/tasty/styles/gap.js +1 -1
  418. package/es/tasty/styles/groupRadius.js +1 -1
  419. package/es/tasty/styles/height.js +1 -1
  420. package/es/tasty/styles/index.js +1 -1
  421. package/es/tasty/styles/inset.js +1 -1
  422. package/es/tasty/styles/justify.js +1 -1
  423. package/es/tasty/styles/list.js +1 -1
  424. package/es/tasty/styles/margin.js +1 -1
  425. package/es/tasty/styles/marginBlock.js +1 -1
  426. package/es/tasty/styles/marginInline.js +1 -1
  427. package/es/tasty/styles/outline.js +1 -1
  428. package/es/tasty/styles/padding.js +1 -1
  429. package/es/tasty/styles/paddingBlock.js +1 -1
  430. package/es/tasty/styles/paddingInline.js +1 -1
  431. package/es/tasty/styles/place.js +1 -1
  432. package/es/tasty/styles/predefined.js +1 -3
  433. package/es/tasty/styles/preset.js +1 -1
  434. package/es/tasty/styles/radius.js +1 -1
  435. package/es/tasty/styles/reset.js +40 -44
  436. package/es/tasty/styles/scrollbar.js +1 -1
  437. package/es/tasty/styles/shadow.js +1 -1
  438. package/es/tasty/styles/styledScrollbar.js +1 -1
  439. package/es/tasty/styles/transition.js +2 -1
  440. package/es/tasty/styles/types.js +1 -1
  441. package/es/tasty/styles/width.js +1 -1
  442. package/es/tasty/tasty.js +94 -20
  443. package/es/tasty/types.js +1 -1
  444. package/es/tasty/utils/cache-wrapper.js +1 -1
  445. package/es/tasty/utils/case-converter.js +1 -1
  446. package/es/tasty/utils/colors.js +1 -1
  447. package/es/tasty/utils/dotize.js +1 -1
  448. package/es/tasty/utils/filterBaseProps.js +1 -1
  449. package/es/tasty/utils/getDisplayName.js +1 -1
  450. package/es/tasty/utils/getModCombinations.js +26 -30
  451. package/es/tasty/utils/mergeStyles.js +1 -1
  452. package/es/tasty/utils/modAttrs.js +1 -1
  453. package/es/tasty/utils/renderStyles.js +670 -58
  454. package/es/tasty/utils/responsive.js +1 -7
  455. package/es/tasty/utils/string.js +1 -1
  456. package/es/tasty/utils/styles.js +62 -235
  457. package/es/tasty/utils/warnings.js +1 -1
  458. package/es/tokens.js +1 -12
  459. package/es/type-checks.js +1 -1
  460. package/es/utils/ResizeSensor.js +1 -1
  461. package/es/utils/modules.js +1 -1
  462. package/es/utils/promise.js +1 -1
  463. package/es/utils/random.js +1 -1
  464. package/es/utils/range.js +1 -1
  465. package/es/utils/react/Slots.js +1 -1
  466. package/es/utils/react/chain.js +1 -1
  467. package/es/utils/react/forwardRefWithGenerics.js +1 -1
  468. package/es/utils/react/index.js +1 -1
  469. package/es/utils/react/interactions.js +1 -1
  470. package/es/utils/react/isTextOnly.js +1 -1
  471. package/es/utils/react/mapProps.js +1 -1
  472. package/es/utils/react/mergeProps.js +1 -1
  473. package/es/utils/react/nullableValue.js +1 -1
  474. package/es/utils/react/sharedStore.js +1 -1
  475. package/es/utils/react/useCombinedRefs.js +1 -1
  476. package/es/utils/react/useControlledFocusVisible.js +1 -1
  477. package/es/utils/react/useEventBus.js +1 -1
  478. package/es/utils/react/useId.js +1 -1
  479. package/es/utils/react/useIsDarwin.js +1 -1
  480. package/es/utils/react/useKeySymbols.js +1 -1
  481. package/es/utils/react/useLayoutEffect.js +1 -1
  482. package/es/utils/react/useQaProps.js +1 -1
  483. package/es/utils/react/useViewportSize.js +1 -1
  484. package/es/utils/react/wrapNodeIfPlain.js +1 -1
  485. package/es/utils/transitions.js +1 -1
  486. package/es/utils/tree.js +1 -1
  487. package/es/utils/warnings.js +1 -1
  488. package/es/version.js +2 -2
  489. package/package.json +1 -1
  490. package/types/components/HiddenInput.d.ts +1 -3
  491. package/types/components/actions/Button/Button.d.ts +1 -0
  492. package/types/components/actions/Menu/styled.d.ts +702 -705
  493. package/types/components/actions/use-action.d.ts +1 -1
  494. package/types/components/content/List/SectionHeading.d.ts +234 -235
  495. package/types/components/fields/DatePicker/DatePickerElement.d.ts +234 -235
  496. package/types/tasty/debug.d.ts +250 -0
  497. package/types/tasty/index.d.ts +2 -0
  498. package/types/tasty/injector/index.d.ts +71 -0
  499. package/types/tasty/injector/injector.d.ts +109 -0
  500. package/types/tasty/injector/sheet-manager.d.ts +94 -0
  501. package/types/tasty/injector/types.d.ts +90 -0
  502. package/types/tasty/parser/lru.d.ts +5 -1
  503. package/types/tasty/styles/color.d.ts +3 -1
  504. package/types/tasty/styles/reset.d.ts +1 -2
  505. package/types/tasty/types.d.ts +0 -2
  506. package/types/tasty/utils/getModCombinations.d.ts +9 -1
  507. package/types/tasty/utils/renderStyles.d.ts +25 -7
  508. package/types/tasty/utils/responsive.d.ts +0 -1
  509. package/types/tasty/utils/styles.d.ts +6 -90
  510. package/types/tokens.d.ts +0 -11
@@ -0,0 +1,906 @@
1
+ /**
2
+ * @license MIT
3
+ * author: Cube Dev Team
4
+ * @cube-dev/ui-kit v0.75.0
5
+ * Released under the MIT license.
6
+ */
7
+
8
+ /**
9
+ * Debug utilities for inspecting tasty-generated CSS at runtime
10
+ */
11
+ import { getCssText, getCssTextForNode, injector } from './injector';
12
+ /**
13
+ * Pretty-print CSS with proper indentation and formatting
14
+ */
15
+ function prettifyCSS(css) {
16
+ if (!css || css.trim() === '') {
17
+ return '';
18
+ }
19
+ // First, normalize whitespace but preserve structure
20
+ let formatted = css.replace(/\s+/g, ' ').trim();
21
+ // Add newlines after opening braces
22
+ formatted = formatted.replace(/\s*\{\s*/g, ' {\n');
23
+ // Add newlines after semicolons (but not inside strings or functions)
24
+ formatted = formatted.replace(/;(?![^"']*["'][^"']*$)(?![^()]*\))/g, ';\n');
25
+ // Add newlines before closing braces
26
+ formatted = formatted.replace(/\s*\}\s*/g, '\n}\n');
27
+ // Handle comma-separated selectors (only outside of property values)
28
+ // This regex looks for commas that are:
29
+ // 1. Not inside quotes
30
+ // 2. Not inside parentheses (CSS functions)
31
+ // 3. Not followed by a colon (not in a property value)
32
+ formatted = formatted.replace(/,(?![^"']*["'][^"']*$)(?![^()]*\))(?=.*:.*\{|.*\{)/g, ',\n');
33
+ // Process line by line for proper indentation
34
+ const lines = formatted.split('\n');
35
+ let indentLevel = 0;
36
+ const indentSize = 2;
37
+ const formattedLines = lines.map((line) => {
38
+ const trimmed = line.trim();
39
+ if (!trimmed)
40
+ return '';
41
+ // Handle closing braces - decrease indent first
42
+ if (trimmed === '}') {
43
+ indentLevel = Math.max(0, indentLevel - 1);
44
+ return ' '.repeat(indentLevel * indentSize) + trimmed;
45
+ }
46
+ // Current line with proper indentation
47
+ const indent = ' '.repeat(indentLevel * indentSize);
48
+ let result = indent + trimmed;
49
+ // Handle opening braces - increase indent for next line
50
+ if (trimmed.endsWith('{')) {
51
+ indentLevel++;
52
+ }
53
+ return result;
54
+ });
55
+ // Clean up the result and ensure proper spacing
56
+ let result = formattedLines
57
+ .filter((line) => line.trim()) // Remove empty lines
58
+ .join('\n')
59
+ .replace(/\n{3,}/g, '\n\n') // Max 2 consecutive newlines
60
+ .trim();
61
+ // Final cleanup: ensure single spaces in function calls
62
+ result = result.replace(/,\s+/g, ', ');
63
+ return result;
64
+ }
65
+ /**
66
+ * Debug utilities for inspecting tasty styles in runtime applications
67
+ */
68
+ export const tastyDebug = {
69
+ /**
70
+ * Get CSS for a specific tasty class (e.g., 't24')
71
+ */
72
+ getCSSForClass(className) {
73
+ if (!className.match(/^t\d+$/)) {
74
+ console.warn(`"${className}" doesn't look like a tasty class. Expected format: t{number}`);
75
+ }
76
+ const css = injector.instance.getCssTextForClasses([className]);
77
+ return prettifyCSS(css);
78
+ },
79
+ /**
80
+ * Get CSS for multiple tasty classes
81
+ */
82
+ getCSSForClasses(classNames) {
83
+ const css = injector.instance.getCssTextForClasses(classNames);
84
+ return prettifyCSS(css);
85
+ },
86
+ /**
87
+ * Log CSS for a specific tasty class (e.g., 't24') to console
88
+ */
89
+ logCSSForClass(className) {
90
+ if (!className.match(/^t\d+$/)) {
91
+ console.warn(`"${className}" doesn't look like a tasty class. Expected format: t{number}`);
92
+ }
93
+ const css = this.getCSSForClass(className);
94
+ this.logCSS(css, `CSS for class "${className}"`);
95
+ },
96
+ /**
97
+ * Log CSS for multiple tasty classes to console
98
+ */
99
+ logCSSForClasses(classNames) {
100
+ const css = this.getCSSForClasses(classNames);
101
+ const title = `CSS for classes [${classNames.join(', ')}]`;
102
+ this.logCSS(css, title);
103
+ },
104
+ /**
105
+ * Inspect an element by CSS selector and get its tasty CSS
106
+ */
107
+ inspectElement(selector) {
108
+ const element = document.querySelector(selector);
109
+ if (!element) {
110
+ return `Element not found: ${selector}`;
111
+ }
112
+ console.group(`🎨 Tasty CSS for "${selector}"`);
113
+ console.log('Element:', element);
114
+ const css = getCssTextForNode(element);
115
+ if (css) {
116
+ const prettified = prettifyCSS(css);
117
+ console.log('Generated CSS:\n' + prettified);
118
+ console.groupEnd();
119
+ return prettified;
120
+ }
121
+ else {
122
+ console.log('No tasty CSS found for this element');
123
+ console.groupEnd();
124
+ return 'No tasty CSS found';
125
+ }
126
+ },
127
+ /**
128
+ * Inspect a DOM element directly and get its tasty CSS
129
+ */
130
+ inspectDOMElement(element) {
131
+ if (!element) {
132
+ return 'Element is null or undefined';
133
+ }
134
+ console.group('🎨 Tasty CSS for element');
135
+ console.log('Element:', element);
136
+ const css = getCssTextForNode(element);
137
+ if (css) {
138
+ const prettified = prettifyCSS(css);
139
+ console.log('Generated CSS:\n' + prettified);
140
+ console.groupEnd();
141
+ return prettified;
142
+ }
143
+ else {
144
+ console.log('No tasty CSS found for this element');
145
+ console.groupEnd();
146
+ return 'No tasty CSS found';
147
+ }
148
+ },
149
+ /**
150
+ * Get all tasty CSS currently injected into the page
151
+ */
152
+ getAllCSS() {
153
+ return getCssText();
154
+ },
155
+ /**
156
+ * Find all tasty classes used in the page (in DOM)
157
+ */
158
+ findAllTastyClasses() {
159
+ const classes = new Set();
160
+ // Find all elements with class attributes
161
+ const elements = document.querySelectorAll('[class]');
162
+ elements.forEach((element) => {
163
+ const classList = element.getAttribute('class');
164
+ if (classList) {
165
+ // Extract tasty classes (t + digits)
166
+ const tastyClasses = classList
167
+ .split(/\s+/)
168
+ .filter((cls) => /^t\d+$/.test(cls));
169
+ tastyClasses.forEach((cls) => classes.add(cls));
170
+ }
171
+ });
172
+ return Array.from(classes).sort((a, b) => {
173
+ // Sort numerically by the number part
174
+ const aNum = parseInt(a.slice(1));
175
+ const bNum = parseInt(b.slice(1));
176
+ return aNum - bNum;
177
+ });
178
+ },
179
+ /**
180
+ * Find all tasty classes that have styles in the stylesheet (used + unused)
181
+ */
182
+ findAllStyledClasses() {
183
+ const registry = injector.instance['sheetManager'].getRegistry(document);
184
+ const classes = new Set();
185
+ // Add all classes from rules map (active + unused)
186
+ if (registry?.rules) {
187
+ for (const className of registry.rules.keys()) {
188
+ if (/^t\d+$/.test(className)) {
189
+ classes.add(className);
190
+ }
191
+ }
192
+ }
193
+ return Array.from(classes).sort((a, b) => {
194
+ // Sort numerically by the number part
195
+ const aNum = parseInt(a.slice(1));
196
+ const bNum = parseInt(b.slice(1));
197
+ return aNum - bNum;
198
+ });
199
+ },
200
+ /**
201
+ * Get active vs cached class breakdown
202
+ */
203
+ getClassUsage() {
204
+ const domClasses = this.findAllTastyClasses();
205
+ const styledClasses = this.findAllStyledClasses();
206
+ const registry = injector.instance['sheetManager'].getRegistry(document);
207
+ const activeClasses = domClasses;
208
+ const cachedClasses = styledClasses.filter((cls) => !domClasses.includes(cls));
209
+ // Also check unusedRules registry for classes that are marked as cached (unused but kept for performance)
210
+ if (registry?.unusedRules) {
211
+ for (const className of registry.unusedRules.keys()) {
212
+ if (/^t\d+$/.test(className) && !cachedClasses.includes(className)) {
213
+ cachedClasses.push(className);
214
+ }
215
+ }
216
+ }
217
+ return {
218
+ activeClasses: activeClasses.sort((a, b) => {
219
+ const aNum = parseInt(a.slice(1));
220
+ const bNum = parseInt(b.slice(1));
221
+ return aNum - bNum;
222
+ }),
223
+ cachedClasses: cachedClasses.sort((a, b) => {
224
+ const aNum = parseInt(a.slice(1));
225
+ const bNum = parseInt(b.slice(1));
226
+ return aNum - bNum;
227
+ }),
228
+ totalStyledClasses: styledClasses,
229
+ };
230
+ },
231
+ /**
232
+ * Get a comprehensive summary of all tasty styles
233
+ */
234
+ getSummary() {
235
+ const usage = this.getClassUsage();
236
+ const allCSS = this.getAllCSS();
237
+ const activeCSS = this.getCSSForClasses(usage.activeClasses);
238
+ const cachedCSS = this.getCSSForClasses(usage.cachedClasses);
239
+ const globalCSS = this.getGlobalCSS();
240
+ const globalBreakdown = this.getGlobalCSSBreakdown();
241
+ const metrics = injector.instance.getMetrics();
242
+ const definedProperties = this.getDefinedProperties();
243
+ const definedKeyframes = this.getDefinedKeyframes();
244
+ const cleanupSummary = this.getCleanupSummary();
245
+ const summary = {
246
+ activeClasses: usage.activeClasses,
247
+ cachedClasses: usage.cachedClasses,
248
+ totalStyledClasses: usage.totalStyledClasses,
249
+ activeCSSSize: activeCSS.length,
250
+ cachedCSSSize: cachedCSS.length,
251
+ totalCSSSize: allCSS.length,
252
+ activeCSS,
253
+ cachedCSS,
254
+ allCSS,
255
+ globalCSS,
256
+ globalCSSSize: globalCSS.length,
257
+ globalRuleCount: globalBreakdown.totalRules,
258
+ metrics,
259
+ definedProperties,
260
+ definedKeyframes,
261
+ propertyCount: definedProperties.length,
262
+ keyframeCount: definedKeyframes.length,
263
+ cleanupSummary,
264
+ };
265
+ console.group('🎨 Comprehensive Tasty Debug Summary');
266
+ console.log(`📊 Style Cache Status:`);
267
+ console.log(` • Active classes (in DOM): ${summary.activeClasses.length}`);
268
+ console.log(` • Cached classes (performance cache): ${summary.cachedClasses.length}`);
269
+ console.log(` • Total styled classes: ${summary.totalStyledClasses.length}`);
270
+ console.log(`💾 CSS Size:`);
271
+ console.log(` • Active CSS: ${summary.activeCSSSize} characters`);
272
+ console.log(` • Cached CSS: ${summary.cachedCSSSize} characters`);
273
+ console.log(` • Global CSS: ${summary.globalCSSSize} characters (${summary.globalRuleCount} rules)`);
274
+ console.log(` • Total CSS: ${summary.totalCSSSize} characters`);
275
+ console.log('🏷️ Properties & Keyframes:');
276
+ console.log(` • Defined @property: ${definedProperties.length}`);
277
+ console.log(` • Defined keyframes: ${definedKeyframes.length}`);
278
+ if (definedProperties.length > 0) {
279
+ console.log(' • Properties:', definedProperties);
280
+ }
281
+ if (definedKeyframes.length > 0) {
282
+ console.log(' • Keyframes:', definedKeyframes.map((k) => `${k.name} (refs: ${k.refCount})`));
283
+ }
284
+ console.log('🧹 Cleanup Statistics:');
285
+ if (cleanupSummary.enabled) {
286
+ console.log(` • Total cleanups performed: ${cleanupSummary.totalCleanups}`);
287
+ console.log(` • Total classes deleted: ${cleanupSummary.totalClassesDeleted}`);
288
+ console.log(` • Total CSS deleted: ${cleanupSummary.totalCssDeleted} chars`);
289
+ console.log(` • Total rules deleted: ${cleanupSummary.totalRulesDeleted}`);
290
+ if (cleanupSummary.totalCleanups > 0) {
291
+ console.log(` • Avg classes per cleanup: ${cleanupSummary.averageClassesPerCleanup.toFixed(1)}`);
292
+ console.log(` • Avg CSS per cleanup: ${cleanupSummary.averageCssPerCleanup.toFixed(0)} chars`);
293
+ console.log(` • Avg rules per cleanup: ${cleanupSummary.averageRulesPerCleanup.toFixed(1)}`);
294
+ }
295
+ if (cleanupSummary.lastCleanup) {
296
+ console.log(` • Last cleanup: ${cleanupSummary.lastCleanup.date}`);
297
+ }
298
+ }
299
+ else {
300
+ console.log(' • Metrics collection disabled (enable with collectMetrics: true)');
301
+ }
302
+ console.log(`⚡ Performance Metrics:`);
303
+ if (metrics) {
304
+ console.log(` • Cache hits: ${metrics.hits}`);
305
+ console.log(` • Cache misses: ${metrics.misses}`);
306
+ console.log(` • Cached style reuses: ${metrics.unusedHits}`);
307
+ console.log(` • Total insertions: ${metrics.totalInsertions}`);
308
+ console.log(` • Styles cleaned up: ${metrics.stylesCleanedUp}`);
309
+ const hitRate = metrics.hits + metrics.misses > 0
310
+ ? (((metrics.hits + metrics.unusedHits) /
311
+ (metrics.hits + metrics.misses)) *
312
+ 100).toFixed(1)
313
+ : 0;
314
+ console.log(` • Overall cache hit rate: ${hitRate}%`);
315
+ }
316
+ else {
317
+ console.log(` • Metrics not available (enable with collectMetrics: true)`);
318
+ }
319
+ console.log('🔍 Details:');
320
+ console.log(' • Active classes:', summary.activeClasses);
321
+ console.log(' • Cached classes:', summary.cachedClasses);
322
+ console.log('ℹ️ Note: Cached styles are kept for performance - avoiding expensive DOM operations');
323
+ console.groupEnd();
324
+ return summary;
325
+ },
326
+ /**
327
+ * Helper to log CSS in a readable format
328
+ */
329
+ logCSS(css, title = 'CSS') {
330
+ if (!css || css.trim() === '') {
331
+ console.log(`${title}: (empty)`);
332
+ return;
333
+ }
334
+ console.group(`🎨 ${title}`);
335
+ const prettified = prettifyCSS(css);
336
+ console.log(prettified);
337
+ console.groupEnd();
338
+ },
339
+ /**
340
+ * Advanced inspection with detailed breakdown and statistics
341
+ */
342
+ inspect(target) {
343
+ const element = typeof target === 'string' ? document.querySelector(target) : target;
344
+ if (!element) {
345
+ console.error(`Element not found: ${target}`);
346
+ return {
347
+ element: null,
348
+ tastyClasses: [],
349
+ css: '',
350
+ cssSize: 0,
351
+ ruleCount: 0,
352
+ breakdown: {},
353
+ stats: {
354
+ totalClasses: 0,
355
+ totalRules: 0,
356
+ totalCSSSize: 0,
357
+ averageRulesPerClass: 0,
358
+ averageCSSPerClass: 0,
359
+ },
360
+ };
361
+ }
362
+ // Find tasty classes on this element
363
+ const classList = element.getAttribute('class') || '';
364
+ const tastyClasses = classList
365
+ .split(/\s+/)
366
+ .filter((cls) => /^t\d+$/.test(cls));
367
+ // Get CSS for the entire subtree
368
+ const fullCSS = getCssTextForNode(element);
369
+ const prettifiedCSS = prettifyCSS(fullCSS);
370
+ // Count CSS rules in the full CSS
371
+ const ruleCount = (fullCSS.match(/\{[^}]*\}/g) || []).length;
372
+ // Get CSS breakdown per class with detailed stats
373
+ const breakdown = {};
374
+ let totalClassRules = 0;
375
+ let totalClassCSSSize = 0;
376
+ tastyClasses.forEach((className) => {
377
+ const classCSS = this.getCSSForClass(className);
378
+ const classRuleCount = (classCSS.match(/\{[^}]*\}/g) || []).length;
379
+ breakdown[className] = {
380
+ css: classCSS,
381
+ cssSize: classCSS.length,
382
+ ruleCount: classRuleCount,
383
+ };
384
+ totalClassRules += classRuleCount;
385
+ totalClassCSSSize += classCSS.length;
386
+ });
387
+ // Calculate statistics
388
+ const stats = {
389
+ totalClasses: tastyClasses.length,
390
+ totalRules: totalClassRules,
391
+ totalCSSSize: totalClassCSSSize,
392
+ averageRulesPerClass: tastyClasses.length > 0 ? totalClassRules / tastyClasses.length : 0,
393
+ averageCSSPerClass: tastyClasses.length > 0 ? totalClassCSSSize / tastyClasses.length : 0,
394
+ };
395
+ const result = {
396
+ element,
397
+ tastyClasses,
398
+ css: prettifiedCSS,
399
+ cssSize: fullCSS.length,
400
+ ruleCount,
401
+ breakdown,
402
+ stats,
403
+ };
404
+ console.group(`🔍 Detailed Tasty Inspection`);
405
+ console.log('Element:', element);
406
+ console.log('📊 Overview:');
407
+ console.log(` • Tasty classes: ${stats.totalClasses}`);
408
+ console.log(` • Total rules applied: ${ruleCount}`);
409
+ console.log(` • Total CSS size: ${fullCSS.length} characters`);
410
+ console.log('🏷️ Classes:', tastyClasses);
411
+ console.log('📈 Statistics:');
412
+ console.log(` • Rules per class (avg): ${stats.averageRulesPerClass.toFixed(1)}`);
413
+ console.log(` • CSS per class (avg): ${stats.averageCSSPerClass.toFixed(0)} chars`);
414
+ console.log('🎨 Element CSS:\n' + prettifiedCSS);
415
+ console.log('🔨 CSS breakdown by class:');
416
+ Object.entries(breakdown).forEach(([className, data]) => {
417
+ console.log(` ${className}: ${data.ruleCount} rules, ${data.cssSize} chars`);
418
+ });
419
+ console.groupEnd();
420
+ return result;
421
+ },
422
+ /**
423
+ * Get CSS for active classes only
424
+ */
425
+ getActiveCSS() {
426
+ const usage = this.getClassUsage();
427
+ return this.getCSSForClasses(usage.activeClasses);
428
+ },
429
+ /**
430
+ * Get CSS for cached classes only
431
+ */
432
+ getCachedCSS() {
433
+ const usage = this.getClassUsage();
434
+ return this.getCSSForClasses(usage.cachedClasses);
435
+ },
436
+ /**
437
+ * Get all defined @property custom properties
438
+ */
439
+ getDefinedProperties() {
440
+ const registry = injector.instance['sheetManager'].getRegistry(document);
441
+ if (!registry?.injectedProperties) {
442
+ return [];
443
+ }
444
+ return Array.from(registry.injectedProperties).sort();
445
+ },
446
+ /**
447
+ * Get all defined keyframes
448
+ */
449
+ getDefinedKeyframes() {
450
+ const registry = injector.instance['sheetManager'].getRegistry(document);
451
+ if (!registry?.keyframesCache) {
452
+ return [];
453
+ }
454
+ const keyframes = [];
455
+ for (const [cacheKey, entry] of registry.keyframesCache.entries()) {
456
+ keyframes.push({
457
+ name: entry.name,
458
+ refCount: entry.refCount,
459
+ cssText: entry.info?.cssText,
460
+ });
461
+ }
462
+ return keyframes.sort((a, b) => a.name.localeCompare(b.name));
463
+ },
464
+ /**
465
+ * Check if a specific @property is defined
466
+ */
467
+ isPropertyDefined(propertyName) {
468
+ return injector.instance.isPropertyDefined(propertyName);
469
+ },
470
+ /**
471
+ * Check if a specific keyframe is defined
472
+ */
473
+ isKeyframeDefined(keyframeName) {
474
+ const registry = injector.instance['sheetManager'].getRegistry(document);
475
+ if (!registry?.keyframesCache) {
476
+ return false;
477
+ }
478
+ for (const entry of registry.keyframesCache.values()) {
479
+ if (entry.name === keyframeName) {
480
+ return true;
481
+ }
482
+ }
483
+ return false;
484
+ },
485
+ /**
486
+ * Get detailed cleanup statistics history
487
+ */
488
+ getCleanupHistory() {
489
+ const registry = injector.instance['sheetManager'].getRegistry(document);
490
+ if (!registry?.metrics?.cleanupHistory) {
491
+ return {
492
+ totalCleanups: 0,
493
+ totalClassesDeleted: 0,
494
+ totalCssDeleted: 0,
495
+ totalRulesDeleted: 0,
496
+ cleanupHistory: [],
497
+ };
498
+ }
499
+ const history = registry.metrics.cleanupHistory;
500
+ const totalClassesDeleted = history.reduce((sum, cleanup) => sum + cleanup.classesDeleted, 0);
501
+ const totalCssDeleted = history.reduce((sum, cleanup) => sum + cleanup.cssSize, 0);
502
+ const totalRulesDeleted = history.reduce((sum, cleanup) => sum + cleanup.rulesDeleted, 0);
503
+ return {
504
+ totalCleanups: history.length,
505
+ totalClassesDeleted,
506
+ totalCssDeleted,
507
+ totalRulesDeleted,
508
+ cleanupHistory: history.map((cleanup) => ({
509
+ ...cleanup,
510
+ date: new Date(cleanup.timestamp).toISOString(),
511
+ })),
512
+ };
513
+ },
514
+ /**
515
+ * Get cleanup statistics summary
516
+ */
517
+ getCleanupSummary() {
518
+ const registry = injector.instance['sheetManager'].getRegistry(document);
519
+ if (!registry?.metrics) {
520
+ return {
521
+ enabled: false,
522
+ totalCleanups: 0,
523
+ totalClassesDeleted: 0,
524
+ totalCssDeleted: 0,
525
+ totalRulesDeleted: 0,
526
+ averageClassesPerCleanup: 0,
527
+ averageCssPerCleanup: 0,
528
+ averageRulesPerCleanup: 0,
529
+ };
530
+ }
531
+ const history = registry.metrics.cleanupHistory || [];
532
+ const totalClassesDeleted = history.reduce((sum, cleanup) => sum + cleanup.classesDeleted, 0);
533
+ const totalCssDeleted = history.reduce((sum, cleanup) => sum + cleanup.cssSize, 0);
534
+ const totalRulesDeleted = history.reduce((sum, cleanup) => sum + cleanup.rulesDeleted, 0);
535
+ const totalCleanups = history.length;
536
+ const lastCleanup = history.length > 0 ? history[history.length - 1] : undefined;
537
+ return {
538
+ enabled: true,
539
+ totalCleanups,
540
+ totalClassesDeleted,
541
+ totalCssDeleted,
542
+ totalRulesDeleted,
543
+ averageClassesPerCleanup: totalCleanups > 0 ? totalClassesDeleted / totalCleanups : 0,
544
+ averageCssPerCleanup: totalCleanups > 0 ? totalCssDeleted / totalCleanups : 0,
545
+ averageRulesPerCleanup: totalCleanups > 0 ? totalRulesDeleted / totalCleanups : 0,
546
+ lastCleanup: lastCleanup
547
+ ? {
548
+ ...lastCleanup,
549
+ date: new Date(lastCleanup.timestamp).toISOString(),
550
+ }
551
+ : undefined,
552
+ };
553
+ },
554
+ /**
555
+ * Log cleanup history to console in a readable format
556
+ */
557
+ logCleanupHistory() {
558
+ const cleanupData = this.getCleanupHistory();
559
+ if (cleanupData.totalCleanups === 0) {
560
+ console.log('🧹 No cleanup history available');
561
+ return;
562
+ }
563
+ console.group(`🧹 Cleanup History (${cleanupData.totalCleanups} cleanups)`);
564
+ console.log('📊 Total Statistics:');
565
+ console.log(` • Total classes deleted: ${cleanupData.totalClassesDeleted}`);
566
+ console.log(` • Total CSS deleted: ${cleanupData.totalCssDeleted} characters`);
567
+ console.log(` • Total rules deleted: ${cleanupData.totalRulesDeleted}`);
568
+ console.log('\n📅 Cleanup Sessions:');
569
+ cleanupData.cleanupHistory.forEach((cleanup, index) => {
570
+ console.log(` ${index + 1}. ${cleanup.date}`);
571
+ console.log(` • Classes: ${cleanup.classesDeleted}`);
572
+ console.log(` • CSS: ${cleanup.cssSize} chars`);
573
+ console.log(` • Rules: ${cleanup.rulesDeleted}`);
574
+ });
575
+ console.groupEnd();
576
+ },
577
+ /**
578
+ * Get all global CSS rules (non-tasty class selectors)
579
+ */
580
+ getGlobalCSS() {
581
+ const allCSS = this.getAllCSS();
582
+ // Split CSS into rules and filter out tasty class rules
583
+ const rules = this.extractCSSRules(allCSS);
584
+ const globalRules = rules.filter((rule) => {
585
+ // Filter out rules that only contain tasty classes (t + digits)
586
+ const selectors = rule.selector.split(',').map((s) => s.trim());
587
+ return !selectors.every((selector) => {
588
+ // Check if selector is purely a tasty class or contains only tasty classes
589
+ const cleanSelector = selector.replace(/[.#:\s>+~[\]()]/g, ' ');
590
+ const parts = cleanSelector.split(/\s+/).filter(Boolean);
591
+ return parts.length > 0 && parts.every((part) => /^t\d+$/.test(part));
592
+ });
593
+ });
594
+ const globalCSS = globalRules
595
+ .map((rule) => `${rule.selector} { ${rule.declarations} }`)
596
+ .join('\n');
597
+ return prettifyCSS(globalCSS);
598
+ },
599
+ /**
600
+ * Log global CSS to console
601
+ */
602
+ logGlobalCSS() {
603
+ const globalCSS = this.getGlobalCSS();
604
+ if (!globalCSS.trim()) {
605
+ console.log('🌍 No global CSS found');
606
+ return;
607
+ }
608
+ this.logCSS(globalCSS, 'Global CSS (createGlobalStyle)');
609
+ },
610
+ /**
611
+ * Get global CSS rules breakdown with detailed analysis
612
+ */
613
+ getGlobalCSSBreakdown() {
614
+ const allCSS = this.getAllCSS();
615
+ const rules = this.extractCSSRules(allCSS);
616
+ const globalRules = rules.filter((rule) => {
617
+ const selectors = rule.selector.split(',').map((s) => s.trim());
618
+ return !selectors.every((selector) => {
619
+ const cleanSelector = selector.replace(/[.#:\s>+~[\]()]/g, ' ');
620
+ const parts = cleanSelector.split(/\s+/).filter(Boolean);
621
+ return parts.length > 0 && parts.every((part) => /^t\d+$/.test(part));
622
+ });
623
+ });
624
+ const breakdown = globalRules.map((rule) => ({
625
+ selector: rule.selector,
626
+ declarations: rule.declarations,
627
+ ruleCount: 1,
628
+ }));
629
+ const css = globalRules
630
+ .map((rule) => `${rule.selector} { ${rule.declarations} }`)
631
+ .join('\n');
632
+ const prettifiedCSS = prettifyCSS(css);
633
+ // Analyze selectors
634
+ const selectors = {
635
+ elements: [],
636
+ classes: [],
637
+ ids: [],
638
+ pseudoClasses: [],
639
+ mediaQueries: [],
640
+ keyframes: [],
641
+ other: [],
642
+ };
643
+ globalRules.forEach((rule) => {
644
+ const selector = rule.selector;
645
+ // Categorize selectors
646
+ if (selector.startsWith('@media')) {
647
+ selectors.mediaQueries.push(selector);
648
+ }
649
+ else if (selector.startsWith('@keyframes')) {
650
+ selectors.keyframes.push(selector);
651
+ }
652
+ else if (selector.includes('.') &&
653
+ !selector.includes('#') &&
654
+ !selector.includes(':')) {
655
+ selectors.classes.push(selector);
656
+ }
657
+ else if (selector.includes('#') &&
658
+ !selector.includes('.') &&
659
+ !selector.includes(':')) {
660
+ selectors.ids.push(selector);
661
+ }
662
+ else if (selector.includes(':')) {
663
+ selectors.pseudoClasses.push(selector);
664
+ }
665
+ else if (/^[a-zA-Z][a-zA-Z0-9]*$/.test(selector.trim())) {
666
+ selectors.elements.push(selector);
667
+ }
668
+ else {
669
+ selectors.other.push(selector);
670
+ }
671
+ });
672
+ return {
673
+ globalRules: breakdown,
674
+ totalRules: breakdown.length,
675
+ totalCSSSize: css.length,
676
+ css: prettifiedCSS,
677
+ selectors,
678
+ };
679
+ },
680
+ /**
681
+ * Log detailed global CSS breakdown
682
+ */
683
+ logGlobalCSSBreakdown() {
684
+ const breakdown = this.getGlobalCSSBreakdown();
685
+ if (breakdown.totalRules === 0) {
686
+ console.log('🌍 No global CSS rules found');
687
+ return;
688
+ }
689
+ console.group(`🌍 Global CSS Breakdown (${breakdown.totalRules} rules)`);
690
+ console.log(`📊 Statistics:`);
691
+ console.log(` • Total global rules: ${breakdown.totalRules}`);
692
+ console.log(` • Total CSS size: ${breakdown.totalCSSSize} characters`);
693
+ console.log(`🎯 Selector Analysis:`);
694
+ if (breakdown.selectors.elements.length > 0) {
695
+ console.log(` • Element selectors: ${breakdown.selectors.elements.length}`, breakdown.selectors.elements.slice(0, 5));
696
+ }
697
+ if (breakdown.selectors.classes.length > 0) {
698
+ console.log(` • Class selectors: ${breakdown.selectors.classes.length}`, breakdown.selectors.classes.slice(0, 5));
699
+ }
700
+ if (breakdown.selectors.ids.length > 0) {
701
+ console.log(` • ID selectors: ${breakdown.selectors.ids.length}`, breakdown.selectors.ids.slice(0, 5));
702
+ }
703
+ if (breakdown.selectors.pseudoClasses.length > 0) {
704
+ console.log(` • Pseudo-class selectors: ${breakdown.selectors.pseudoClasses.length}`, breakdown.selectors.pseudoClasses.slice(0, 5));
705
+ }
706
+ if (breakdown.selectors.mediaQueries.length > 0) {
707
+ console.log(` • Media queries: ${breakdown.selectors.mediaQueries.length}`, breakdown.selectors.mediaQueries.slice(0, 3));
708
+ }
709
+ if (breakdown.selectors.keyframes.length > 0) {
710
+ console.log(` • Keyframe rules: ${breakdown.selectors.keyframes.length}`, breakdown.selectors.keyframes.slice(0, 3));
711
+ }
712
+ if (breakdown.selectors.other.length > 0) {
713
+ console.log(` • Other selectors: ${breakdown.selectors.other.length}`, breakdown.selectors.other.slice(0, 5));
714
+ }
715
+ console.log(`🎨 CSS Output:`);
716
+ console.log(breakdown.css);
717
+ console.groupEnd();
718
+ },
719
+ /**
720
+ * Helper to extract CSS rules from raw CSS text
721
+ */
722
+ extractCSSRules(css) {
723
+ const rules = [];
724
+ // Remove comments
725
+ let cleanCSS = css.replace(/\/\*[\s\S]*?\*\//g, '');
726
+ // Enhanced parser that handles nested CSS properly
727
+ this.parseCSSSafe(cleanCSS, rules);
728
+ return rules;
729
+ },
730
+ /**
731
+ * Safe CSS parser that handles nested rules properly
732
+ */
733
+ parseCSSSafe(css, rules) {
734
+ let i = 0;
735
+ while (i < css.length) {
736
+ // Skip whitespace
737
+ while (i < css.length && /\s/.test(css[i])) {
738
+ i++;
739
+ }
740
+ if (i >= css.length)
741
+ break;
742
+ // Find selector start
743
+ const selectorStart = i;
744
+ let braceDepth = 0;
745
+ let inString = false;
746
+ let stringChar = '';
747
+ // Find opening brace for this rule
748
+ while (i < css.length) {
749
+ const char = css[i];
750
+ if (inString) {
751
+ if (char === stringChar && css[i - 1] !== '\\') {
752
+ inString = false;
753
+ }
754
+ }
755
+ else {
756
+ if (char === '"' || char === "'") {
757
+ inString = true;
758
+ stringChar = char;
759
+ }
760
+ else if (char === '{') {
761
+ braceDepth++;
762
+ if (braceDepth === 1) {
763
+ break; // Found opening brace
764
+ }
765
+ }
766
+ }
767
+ i++;
768
+ }
769
+ if (i >= css.length)
770
+ break;
771
+ const selector = css.substring(selectorStart, i).trim();
772
+ i++; // Skip opening brace
773
+ // Find matching closing brace and extract content
774
+ const contentStart = i;
775
+ braceDepth = 1;
776
+ inString = false;
777
+ while (i < css.length && braceDepth > 0) {
778
+ const char = css[i];
779
+ if (inString) {
780
+ if (char === stringChar && css[i - 1] !== '\\') {
781
+ inString = false;
782
+ }
783
+ }
784
+ else {
785
+ if (char === '"' || char === "'") {
786
+ inString = true;
787
+ stringChar = char;
788
+ }
789
+ else if (char === '{') {
790
+ braceDepth++;
791
+ }
792
+ else if (char === '}') {
793
+ braceDepth--;
794
+ }
795
+ }
796
+ i++;
797
+ }
798
+ const content = css.substring(contentStart, i - 1).trim();
799
+ // Check if content has nested rules
800
+ if (content.includes('{') && content.includes('}')) {
801
+ // Extract declarations (before any nested rules)
802
+ const declarationMatch = content.match(/^([^{]*)/);
803
+ const declarations = declarationMatch ? declarationMatch[1].trim() : '';
804
+ if (declarations) {
805
+ rules.push({ selector, declarations });
806
+ }
807
+ // Extract and parse nested rules recursively
808
+ const nestedStart = content.indexOf('{');
809
+ if (nestedStart !== -1) {
810
+ const nestedCSS = content.substring(nestedStart);
811
+ this.parseCSSSafe(nestedCSS, rules);
812
+ }
813
+ }
814
+ else if (content.trim()) {
815
+ // Simple rule with just declarations
816
+ rules.push({ selector, declarations: content });
817
+ }
818
+ }
819
+ },
820
+ /**
821
+ * Debug method to see raw CSS content and rule parsing
822
+ */
823
+ debugRawCSS() {
824
+ const allCSS = this.getAllCSS();
825
+ console.group('🔍 Raw CSS Debug');
826
+ console.log('📝 Raw CSS length:', allCSS.length);
827
+ console.log('📝 Raw CSS preview (first 2000 chars):');
828
+ console.log(allCSS.substring(0, 2000));
829
+ const rules = this.extractCSSRules(allCSS);
830
+ console.log('📊 Total extracted rules:', rules.length);
831
+ console.log('📋 First 10 rules:');
832
+ rules.slice(0, 10).forEach((rule, i) => {
833
+ console.log(` ${i + 1}. ${rule.selector}`);
834
+ });
835
+ // Show some examples of what gets filtered as tasty vs global
836
+ const tastyRules = rules.filter((rule) => {
837
+ const selectors = rule.selector.split(',').map((s) => s.trim());
838
+ return selectors.every((selector) => {
839
+ const cleanSelector = selector.replace(/[.#:\s>+~[\]()]/g, ' ');
840
+ const parts = cleanSelector.split(/\s+/).filter(Boolean);
841
+ return parts.length > 0 && parts.every((part) => /^t\d+$/.test(part));
842
+ });
843
+ });
844
+ const globalRules = rules.filter((rule) => {
845
+ const selectors = rule.selector.split(',').map((s) => s.trim());
846
+ return !selectors.every((selector) => {
847
+ const cleanSelector = selector.replace(/[.#:\s>+~[\]()]/g, ' ');
848
+ const parts = cleanSelector.split(/\s+/).filter(Boolean);
849
+ return parts.length > 0 && parts.every((part) => /^t\d+$/.test(part));
850
+ });
851
+ });
852
+ console.log('🏷️ Tasty class rules found:', tastyRules.length);
853
+ console.log('🌍 Global rules found:', globalRules.length);
854
+ if (globalRules.length > 0) {
855
+ console.log('📋 First 5 global rules:');
856
+ globalRules.slice(0, 5).forEach((rule, i) => {
857
+ console.log(` ${i + 1}. ${rule.selector}`);
858
+ });
859
+ }
860
+ console.groupEnd();
861
+ },
862
+ };
863
+ /**
864
+ * Check if we're in a development environment at runtime
865
+ * Uses bracket notation to avoid bundler compilation
866
+ */
867
+ function isDevelopmentEnvironment() {
868
+ if (typeof process === 'undefined')
869
+ return false;
870
+ // Use bracket notation to avoid bundler replacement
871
+ const nodeEnv = process.env?.['NODE_ENV'];
872
+ return nodeEnv === 'development' || nodeEnv !== 'production';
873
+ }
874
+ /**
875
+ * Install tastyDebug on window object for easy access in browser console
876
+ * Only in non-production environments
877
+ */
878
+ export function installGlobalDebug(options) {
879
+ const shouldInstall = options?.force || isDevelopmentEnvironment();
880
+ if (typeof window !== 'undefined' &&
881
+ shouldInstall &&
882
+ window.tastyDebug !== tastyDebug) {
883
+ window.tastyDebug = tastyDebug;
884
+ console.log('🎨 tastyDebug installed on window.\n' +
885
+ '💡 Quick start:\n' +
886
+ ' • tastyDebug.getSummary() - comprehensive overview with properties, keyframes & global CSS\n' +
887
+ ' • tastyDebug.inspect(".my-element") - detailed element inspection\n' +
888
+ ' • tastyDebug.getGlobalCSS() - get all global CSS from createGlobalStyle()\n' +
889
+ ' • tastyDebug.logGlobalCSS() - log global CSS to console\n' +
890
+ ' • tastyDebug.logGlobalCSSBreakdown() - detailed global CSS analysis\n' +
891
+ ' • tastyDebug.debugRawCSS() - debug raw CSS parsing and filtering\n' +
892
+ ' • tastyDebug.getDefinedProperties() - list all @property definitions\n' +
893
+ ' • tastyDebug.getDefinedKeyframes() - list all keyframe definitions\n' +
894
+ ' • tastyDebug.getActiveCSS() / getCachedCSS() - get specific CSS\n' +
895
+ ' • tastyDebug.getCleanupSummary() - cleanup statistics overview\n' +
896
+ ' • tastyDebug.logCleanupHistory() - detailed cleanup history');
897
+ }
898
+ }
899
+ /**
900
+ * Auto-install in development
901
+ */
902
+ if (typeof window !== 'undefined' && isDevelopmentEnvironment()) {
903
+ installGlobalDebug();
904
+ }
905
+
906
+