@cube-dev/ui-kit 0.74.3 → 0.76.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (512) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/es/_internal/hooks/index.js +1 -1
  3. package/es/_internal/hooks/use-chained-callback.js +1 -1
  4. package/es/_internal/hooks/use-debounced-value.js +1 -1
  5. package/es/_internal/hooks/use-deprecation-warning.js +1 -1
  6. package/es/_internal/hooks/use-effect-once.js +1 -1
  7. package/es/_internal/hooks/use-event.js +1 -1
  8. package/es/_internal/hooks/use-is-first-render.js +1 -1
  9. package/es/_internal/hooks/use-sync-ref.js +1 -1
  10. package/es/_internal/hooks/use-timer/index.js +1 -1
  11. package/es/_internal/hooks/use-timer/timer.js +1 -1
  12. package/es/_internal/hooks/use-timer/use-timer.js +1 -1
  13. package/es/_internal/hooks/use-update-effect.js +1 -1
  14. package/es/_internal/hooks/use-warn.js +1 -1
  15. package/es/_internal/index.js +1 -1
  16. package/es/components/Block.js +1 -1
  17. package/es/components/GlobalStyles.js +10 -15
  18. package/es/components/GridProvider.js +1 -1
  19. package/es/components/HiddenInput.js +25 -24
  20. package/es/components/Item.js +1 -1
  21. package/es/components/OpenTrasition.js +1 -1
  22. package/es/components/Root.js +2 -2
  23. package/es/components/actions/Action/Action.js +15 -19
  24. package/es/components/actions/Button/Button.js +2 -1
  25. package/es/components/actions/Button/index.js +1 -1
  26. package/es/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  27. package/es/components/actions/CommandMenu/CommandMenu.js +1 -1
  28. package/es/components/actions/CommandMenu/index.js +1 -1
  29. package/es/components/actions/CommandMenu/styled.js +1 -1
  30. package/es/components/actions/ItemButton/ItemButton.js +1 -1
  31. package/es/components/actions/ItemButton/index.js +1 -1
  32. package/es/components/actions/Menu/Menu.js +1 -1
  33. package/es/components/actions/Menu/MenuItem.js +3 -8
  34. package/es/components/actions/Menu/MenuSection.js +1 -1
  35. package/es/components/actions/Menu/MenuTrigger.js +1 -1
  36. package/es/components/actions/Menu/SubMenuTrigger.js +1 -1
  37. package/es/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  38. package/es/components/actions/Menu/context.js +1 -1
  39. package/es/components/actions/Menu/index.js +1 -1
  40. package/es/components/actions/Menu/styled.js +1 -1
  41. package/es/components/actions/index.js +1 -1
  42. package/es/components/actions/use-action.js +1 -1
  43. package/es/components/actions/use-anchored-menu.js +1 -1
  44. package/es/components/actions/use-context-menu.js +1 -1
  45. package/es/components/content/ActiveZone/ActiveZone.js +1 -1
  46. package/es/components/content/Alert/Alert.js +1 -1
  47. package/es/components/content/Alert/index.js +1 -1
  48. package/es/components/content/Alert/types.js +1 -1
  49. package/es/components/content/Alert/use-alert.js +1 -1
  50. package/es/components/content/Avatar/Avatar.js +1 -1
  51. package/es/components/content/Badge/Badge.js +1 -1
  52. package/es/components/content/Card/Card.js +1 -1
  53. package/es/components/content/Content.js +1 -1
  54. package/es/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  55. package/es/components/content/CopyPasteBlock/index.js +1 -1
  56. package/es/components/content/CopySnippet/CopySnippet.js +1 -1
  57. package/es/components/content/CopySnippet/index.js +1 -1
  58. package/es/components/content/Divider.js +1 -1
  59. package/es/components/content/Footer.js +1 -1
  60. package/es/components/content/Header.js +1 -1
  61. package/es/components/content/HotKeys/HotKeys.js +1 -1
  62. package/es/components/content/HotKeys/index.js +1 -1
  63. package/es/components/content/ItemBase/ItemBase.js +9 -3
  64. package/es/components/content/ItemBase/index.js +1 -1
  65. package/es/components/content/List/SectionHeading.js +1 -1
  66. package/es/components/content/List/index.js +1 -1
  67. package/es/components/content/Paragraph.js +1 -1
  68. package/es/components/content/Placeholder/Placeholder.js +46 -41
  69. package/es/components/content/PrismCode/PrismCode.js +1 -1
  70. package/es/components/content/PrismCode/prismSetup.js +1 -1
  71. package/es/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  72. package/es/components/content/Result/Result.js +1 -1
  73. package/es/components/content/Skeleton/Skeleton.js +1 -1
  74. package/es/components/content/Tag/Tag.js +1 -1
  75. package/es/components/content/Text.js +3 -3
  76. package/es/components/content/Title.js +3 -3
  77. package/es/components/fields/Checkbox/Checkbox.js +1 -1
  78. package/es/components/fields/Checkbox/CheckboxGroup.js +1 -1
  79. package/es/components/fields/Checkbox/context.js +1 -1
  80. package/es/components/fields/Checkbox/index.js +1 -1
  81. package/es/components/fields/ComboBox/ComboBox.js +3 -7
  82. package/es/components/fields/ComboBox/index.js +1 -1
  83. package/es/components/fields/DatePicker/DateInput.js +1 -1
  84. package/es/components/fields/DatePicker/DateInputBase.js +1 -1
  85. package/es/components/fields/DatePicker/DatePicker.js +1 -1
  86. package/es/components/fields/DatePicker/DatePickerButton.js +1 -1
  87. package/es/components/fields/DatePicker/DatePickerElement.js +1 -1
  88. package/es/components/fields/DatePicker/DatePickerInput.js +1 -1
  89. package/es/components/fields/DatePicker/DatePickerSegment.js +1 -1
  90. package/es/components/fields/DatePicker/DateRangePicker.js +1 -1
  91. package/es/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  92. package/es/components/fields/DatePicker/TimeInput.js +1 -1
  93. package/es/components/fields/DatePicker/index.js +1 -1
  94. package/es/components/fields/DatePicker/intl.js +1 -1
  95. package/es/components/fields/DatePicker/parseDate.js +1 -1
  96. package/es/components/fields/DatePicker/props.js +1 -1
  97. package/es/components/fields/DatePicker/types.js +1 -1
  98. package/es/components/fields/DatePicker/utils.js +1 -1
  99. package/es/components/fields/FileInput/FileInput.js +1 -1
  100. package/es/components/fields/FilterListBox/FilterListBox.js +1 -1
  101. package/es/components/fields/FilterListBox/index.js +1 -1
  102. package/es/components/fields/FilterPicker/FilterPicker.js +3 -3
  103. package/es/components/fields/FilterPicker/index.js +1 -1
  104. package/es/components/fields/Input/Input.js +1 -1
  105. package/es/components/fields/Input/index.js +1 -1
  106. package/es/components/fields/ListBox/ListBox.js +1 -1
  107. package/es/components/fields/ListBox/index.js +1 -1
  108. package/es/components/fields/NumberInput/NumberInput.js +1 -1
  109. package/es/components/fields/NumberInput/StepButton.js +1 -1
  110. package/es/components/fields/PasswordInput/PasswordInput.js +1 -1
  111. package/es/components/fields/RadioGroup/Radio.js +2 -2
  112. package/es/components/fields/RadioGroup/RadioGroup.js +1 -1
  113. package/es/components/fields/RadioGroup/context.js +1 -1
  114. package/es/components/fields/RadioGroup/index.js +1 -1
  115. package/es/components/fields/SearchInput/SearchInput.js +1 -1
  116. package/es/components/fields/SearchInput/index.js +1 -1
  117. package/es/components/fields/Select/Select.js +1 -1
  118. package/es/components/fields/Select/index.js +1 -1
  119. package/es/components/fields/Slider/Gradation.js +1 -1
  120. package/es/components/fields/Slider/Header.js +1 -1
  121. package/es/components/fields/Slider/RangeSlider.js +1 -1
  122. package/es/components/fields/Slider/Slider.js +1 -1
  123. package/es/components/fields/Slider/SliderBase.js +1 -1
  124. package/es/components/fields/Slider/SliderInput.js +1 -1
  125. package/es/components/fields/Slider/SliderThumb.js +1 -1
  126. package/es/components/fields/Slider/SliderTrack.js +1 -1
  127. package/es/components/fields/Slider/elements.js +1 -1
  128. package/es/components/fields/Slider/index.js +1 -1
  129. package/es/components/fields/Slider/types.js +1 -1
  130. package/es/components/fields/Switch/Switch.js +1 -1
  131. package/es/components/fields/Switch/index.js +1 -1
  132. package/es/components/fields/TextArea/TextArea.js +1 -1
  133. package/es/components/fields/TextArea/index.js +1 -1
  134. package/es/components/fields/TextInput/TextInput.js +1 -1
  135. package/es/components/fields/TextInput/TextInputBase.js +3 -2
  136. package/es/components/fields/TextInput/index.js +1 -1
  137. package/es/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  138. package/es/components/fields/TextInputMapper/index.js +1 -1
  139. package/es/components/fields/index.js +1 -1
  140. package/es/components/form/FieldWrapper/FieldWrapper.js +1 -1
  141. package/es/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  142. package/es/components/form/FieldWrapper/index.js +1 -1
  143. package/es/components/form/FieldWrapper/types.js +1 -1
  144. package/es/components/form/Form/Field.js +1 -1
  145. package/es/components/form/Form/Form.js +1 -1
  146. package/es/components/form/Form/ResetButton/ResetButton.js +1 -1
  147. package/es/components/form/Form/ResetButton/index.js +1 -1
  148. package/es/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  149. package/es/components/form/Form/SubmitButton/index.js +1 -1
  150. package/es/components/form/Form/SubmitError.js +1 -1
  151. package/es/components/form/Form/index.js +1 -1
  152. package/es/components/form/Form/types.js +1 -1
  153. package/es/components/form/Form/use-field/index.js +1 -1
  154. package/es/components/form/Form/use-field/types.js +1 -1
  155. package/es/components/form/Form/use-field/use-field-props.js +1 -1
  156. package/es/components/form/Form/use-field/use-field.js +1 -1
  157. package/es/components/form/Form/use-form.js +1 -1
  158. package/es/components/form/Form/validation.js +1 -1
  159. package/es/components/form/Label.js +1 -1
  160. package/es/components/form/index.js +1 -1
  161. package/es/components/form/wrapper.js +1 -1
  162. package/es/components/layout/Flex.js +1 -1
  163. package/es/components/layout/Flow.js +1 -1
  164. package/es/components/layout/Grid.js +1 -1
  165. package/es/components/layout/Panel.js +1 -1
  166. package/es/components/layout/Prefix.js +1 -1
  167. package/es/components/layout/ResizablePanel.js +1 -1
  168. package/es/components/layout/Space.js +1 -1
  169. package/es/components/layout/Suffix.js +1 -1
  170. package/es/components/navigation/LegacyTabs/LegacyTabs.js +1 -1
  171. package/es/components/navigation/Link/Link.js +1 -1
  172. package/es/components/organisms/FileTabs/FileTabs.js +1 -1
  173. package/es/components/organisms/Modal/Modal.js +59 -68
  174. package/es/components/organisms/StatsCard/StatsCard.js +1 -1
  175. package/es/components/other/Base64Upload/Base64Upload.js +1 -1
  176. package/es/components/other/Calendar/Calendar.js +1 -1
  177. package/es/components/other/Calendar/CalendarCell.js +1 -1
  178. package/es/components/other/Calendar/CalendarGrid.js +1 -1
  179. package/es/components/other/Calendar/RangeCalendar.js +1 -1
  180. package/es/components/other/CloudLogo/CloudLogo.js +1 -1
  181. package/es/components/overlays/AlertDialog/AlertDialog.js +1 -1
  182. package/es/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  183. package/es/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  184. package/es/components/overlays/AlertDialog/index.js +1 -1
  185. package/es/components/overlays/AlertDialog/types.js +1 -1
  186. package/es/components/overlays/Dialog/Dialog.js +1 -1
  187. package/es/components/overlays/Dialog/DialogContainer.js +1 -1
  188. package/es/components/overlays/Dialog/DialogForm.js +1 -1
  189. package/es/components/overlays/Dialog/DialogTrigger.js +1 -1
  190. package/es/components/overlays/Dialog/context.js +1 -1
  191. package/es/components/overlays/Dialog/index.js +1 -1
  192. package/es/components/overlays/Dialog/use-dialog-container.js +1 -1
  193. package/es/components/overlays/Modal/Modal.js +1 -1
  194. package/es/components/overlays/Modal/OpenTransition.js +1 -1
  195. package/es/components/overlays/Modal/Overlay.js +1 -1
  196. package/es/components/overlays/Modal/Popover.js +1 -1
  197. package/es/components/overlays/Modal/Tray.js +1 -1
  198. package/es/components/overlays/Modal/Underlay.js +1 -1
  199. package/es/components/overlays/Modal/index.js +1 -1
  200. package/es/components/overlays/Modal/types.js +1 -1
  201. package/es/components/overlays/NewNotifications/Bar/FloatingNotification.js +1 -1
  202. package/es/components/overlays/NewNotifications/Bar/NotificationsBar.js +1 -1
  203. package/es/components/overlays/NewNotifications/Bar/TransitionComponent.js +1 -1
  204. package/es/components/overlays/NewNotifications/Bar/index.js +1 -1
  205. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.js +1 -1
  206. package/es/components/overlays/NewNotifications/Dialog/index.js +1 -1
  207. package/es/components/overlays/NewNotifications/Notification.js +1 -1
  208. package/es/components/overlays/NewNotifications/NotificationView/NotificationAction.js +1 -1
  209. package/es/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.js +1 -1
  210. package/es/components/overlays/NewNotifications/NotificationView/NotificationDescription.js +1 -1
  211. package/es/components/overlays/NewNotifications/NotificationView/NotificationFooter.js +1 -1
  212. package/es/components/overlays/NewNotifications/NotificationView/NotificationHeader.js +1 -1
  213. package/es/components/overlays/NewNotifications/NotificationView/NotificationIcon.js +1 -1
  214. package/es/components/overlays/NewNotifications/NotificationView/NotificationProvider.js +1 -1
  215. package/es/components/overlays/NewNotifications/NotificationView/NotificationView.js +1 -1
  216. package/es/components/overlays/NewNotifications/NotificationView/index.js +1 -1
  217. package/es/components/overlays/NewNotifications/NotificationView/types.js +1 -1
  218. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.js +1 -1
  219. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.js +1 -1
  220. package/es/components/overlays/NewNotifications/NotificationsContext/index.js +1 -1
  221. package/es/components/overlays/NewNotifications/NotificationsContext/use-notifications.js +1 -1
  222. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsList.js +1 -1
  223. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.js +1 -1
  224. package/es/components/overlays/NewNotifications/NotificationsList/index.js +1 -1
  225. package/es/components/overlays/NewNotifications/NotificationsList/types.js +1 -1
  226. package/es/components/overlays/NewNotifications/hooks/index.js +1 -1
  227. package/es/components/overlays/NewNotifications/hooks/types.js +1 -1
  228. package/es/components/overlays/NewNotifications/hooks/use-notification-list-item.js +1 -1
  229. package/es/components/overlays/NewNotifications/hooks/use-notifications-api.js +1 -1
  230. package/es/components/overlays/NewNotifications/hooks/use-notifications-list.js +1 -1
  231. package/es/components/overlays/NewNotifications/hooks/use-notifications-observer.js +1 -1
  232. package/es/components/overlays/NewNotifications/index.js +1 -1
  233. package/es/components/overlays/NewNotifications/types.js +1 -1
  234. package/es/components/overlays/Notification/Notification.js +1 -1
  235. package/es/components/overlays/OverlayWrapper.js +1 -1
  236. package/es/components/overlays/Toasts/Toast.js +1 -1
  237. package/es/components/overlays/Toasts/index.js +1 -1
  238. package/es/components/overlays/Toasts/types.js +1 -1
  239. package/es/components/overlays/Toasts/use-toasts-api.js +1 -1
  240. package/es/components/overlays/Tooltip/Tooltip.js +1 -1
  241. package/es/components/overlays/Tooltip/TooltipProvider.js +1 -1
  242. package/es/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  243. package/es/components/overlays/Tooltip/context.js +1 -1
  244. package/es/components/overlays/Tooltip/index.js +1 -1
  245. package/es/components/portal/Portal.js +1 -1
  246. package/es/components/portal/PortalProvider.js +1 -1
  247. package/es/components/portal/index.js +1 -1
  248. package/es/components/portal/types.js +1 -1
  249. package/es/components/portal/usePortal.js +1 -1
  250. package/es/components/shared/InvalidIcon.js +1 -1
  251. package/es/components/shared/ValidIcon.js +1 -1
  252. package/es/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  253. package/es/components/status/LoadingAnimation/index.js +1 -1
  254. package/es/components/status/Spin/Cube.js +1 -1
  255. package/es/components/status/Spin/InternalSpinner.js +1 -1
  256. package/es/components/status/Spin/Spin.js +1 -1
  257. package/es/components/status/Spin/SpinsContainer.js +1 -1
  258. package/es/components/status/Spin/index.js +1 -1
  259. package/es/components/status/Spin/types.js +1 -1
  260. package/es/components/status/index.js +1 -1
  261. package/es/data/item-themes.js +1 -1
  262. package/es/data/themes.js +1 -1
  263. package/es/icons/AdjustmentsHorizontalIcon.js +1 -1
  264. package/es/icons/AdjustmentsIcon.js +1 -1
  265. package/es/icons/AiIcon.js +1 -1
  266. package/es/icons/AreaChartIcon.js +1 -1
  267. package/es/icons/BackwardIcon.js +1 -1
  268. package/es/icons/BarChartIcon.js +1 -1
  269. package/es/icons/BellFilledIcon.js +1 -1
  270. package/es/icons/BellIcon.js +1 -1
  271. package/es/icons/BooleanIcon.js +1 -1
  272. package/es/icons/CalendarEditIcon.js +1 -1
  273. package/es/icons/CalendarIcon.js +1 -1
  274. package/es/icons/CaretDownIcon.js +1 -1
  275. package/es/icons/CaretUpIcon.js +1 -1
  276. package/es/icons/ChartAreaStackedIcon.js +1 -1
  277. package/es/icons/ChartAreaStackedPercentageIcon.js +1 -1
  278. package/es/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  279. package/es/icons/ChartBarGroupedIcon.js +1 -1
  280. package/es/icons/ChartBarHorizontalIcon.js +1 -1
  281. package/es/icons/ChartBarLineIcon.js +1 -1
  282. package/es/icons/ChartBarStackedHorizontalIcon.js +1 -1
  283. package/es/icons/ChartBarStackedIcon.js +1 -1
  284. package/es/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  285. package/es/icons/ChartBarStackedPercentageIcon.js +1 -1
  286. package/es/icons/ChartBoxPlot2Icon.js +1 -1
  287. package/es/icons/ChartBoxPlotIcon.js +1 -1
  288. package/es/icons/ChartBubbleIcon.js +1 -1
  289. package/es/icons/ChartDonut2Icon.js +1 -1
  290. package/es/icons/ChartFunnelIcon.js +1 -1
  291. package/es/icons/ChartKPIIcon.js +1 -1
  292. package/es/icons/ChartPie2Icon.js +1 -1
  293. package/es/icons/ChartScatterIcon.js +1 -1
  294. package/es/icons/CheckCircleFilledIcon.js +1 -1
  295. package/es/icons/CheckCircleIcon.js +1 -1
  296. package/es/icons/CheckIcon.js +1 -1
  297. package/es/icons/CircleFilledIcon.js +1 -1
  298. package/es/icons/ClearIcon.js +1 -1
  299. package/es/icons/CloseCircleFilledIcon.js +1 -1
  300. package/es/icons/CloseCircleIcon.js +1 -1
  301. package/es/icons/CloseIcon.js +1 -1
  302. package/es/icons/CodeIcon.js +1 -1
  303. package/es/icons/CopyIcon.js +1 -1
  304. package/es/icons/CountIcon.js +1 -1
  305. package/es/icons/CubeIcon.js +1 -1
  306. package/es/icons/DangerIcon.js +1 -1
  307. package/es/icons/DashboardIcon.js +1 -1
  308. package/es/icons/DatabaseIcon.js +1 -1
  309. package/es/icons/DirectionIcon.js +1 -1
  310. package/es/icons/DonutIcon.js +1 -1
  311. package/es/icons/DownIcon.js +1 -1
  312. package/es/icons/EditIcon.js +1 -1
  313. package/es/icons/ExclamationCircleFilledIcon.js +1 -1
  314. package/es/icons/ExclamationCircleIcon.js +1 -1
  315. package/es/icons/ExclamationIcon.js +1 -1
  316. package/es/icons/EyeIcon.js +1 -1
  317. package/es/icons/EyeInvisibleIcon.js +1 -1
  318. package/es/icons/FilterIcon.js +1 -1
  319. package/es/icons/FolderFilledIcon.js +1 -1
  320. package/es/icons/FolderIcon.js +1 -1
  321. package/es/icons/FolderOpenFilledIcon.js +1 -1
  322. package/es/icons/FolderOpenIcon.js +1 -1
  323. package/es/icons/ForwardIcon.js +1 -1
  324. package/es/icons/HierarchyIcon.js +1 -1
  325. package/es/icons/Icon.js +1 -1
  326. package/es/icons/InfoCircleIcon.js +1 -1
  327. package/es/icons/InfoIcon.js +1 -1
  328. package/es/icons/KeyIcon.js +1 -1
  329. package/es/icons/LeftIcon.js +1 -1
  330. package/es/icons/LineChartIcon.js +1 -1
  331. package/es/icons/LoadingIcon.js +1 -1
  332. package/es/icons/LockFilledIcon.js +1 -1
  333. package/es/icons/LockIcon.js +1 -1
  334. package/es/icons/MoreIcon.js +1 -1
  335. package/es/icons/NotAllowedIcon.js +1 -1
  336. package/es/icons/NumberIcon.js +1 -1
  337. package/es/icons/PauseCircleFilledIcon.js +1 -1
  338. package/es/icons/PauseCircleIcon.js +1 -1
  339. package/es/icons/PauseIcon.js +1 -1
  340. package/es/icons/PieChartIcon.js +1 -1
  341. package/es/icons/PlayCircleIcon.js +1 -1
  342. package/es/icons/PlayIcon.js +1 -1
  343. package/es/icons/PlusIcon.js +1 -1
  344. package/es/icons/ReloadIcon.js +1 -1
  345. package/es/icons/ReportIcon.js +1 -1
  346. package/es/icons/ReturnIcon.js +1 -1
  347. package/es/icons/RightIcon.js +1 -1
  348. package/es/icons/SchemeIcon.js +1 -1
  349. package/es/icons/SearchIcon.js +1 -1
  350. package/es/icons/SettingsIcon.js +1 -1
  351. package/es/icons/ShieldFilledIcon.js +1 -1
  352. package/es/icons/ShieldIcon.js +1 -1
  353. package/es/icons/SlashIcon.js +1 -1
  354. package/es/icons/SparklesIcon.js +1 -1
  355. package/es/icons/SqlIcon.js +1 -1
  356. package/es/icons/StatsIcon.js +1 -1
  357. package/es/icons/StopIcon.js +1 -1
  358. package/es/icons/StringIcon.js +1 -1
  359. package/es/icons/SwitchIcon.js +1 -1
  360. package/es/icons/TableIcon.js +1 -1
  361. package/es/icons/ThumbsDownIcon.js +1 -1
  362. package/es/icons/ThumbsUpIcon.js +1 -1
  363. package/es/icons/ThunderboltCrossedIcon.js +1 -1
  364. package/es/icons/ThunderboltFilledIcon.js +1 -1
  365. package/es/icons/ThunderboltIcon.js +1 -1
  366. package/es/icons/TimeIcon.js +1 -1
  367. package/es/icons/UnlockIcon.js +1 -1
  368. package/es/icons/UpIcon.js +1 -1
  369. package/es/icons/UserGroupIcon.js +1 -1
  370. package/es/icons/UserIcon.js +1 -1
  371. package/es/icons/UserLockIcon.js +1 -1
  372. package/es/icons/ViewIcon.js +1 -1
  373. package/es/icons/WarningFilledIcon.js +1 -1
  374. package/es/icons/WarningIcon.js +1 -1
  375. package/es/icons/add-new-icon.js +1 -1
  376. package/es/icons/index.js +1 -1
  377. package/es/icons/wrap-icon.js +1 -1
  378. package/es/index.js +1 -1
  379. package/es/provider.js +1 -1
  380. package/es/providers/TrackingProvider.js +1 -1
  381. package/es/services/notification.js +1 -1
  382. package/es/shared/form.js +1 -1
  383. package/es/shared/index.js +1 -1
  384. package/es/stories/Form.legacy-stories.js +1 -1
  385. package/es/stories/FormFieldArgs.js +1 -1
  386. package/es/stories/Layout.stories.js +1 -1
  387. package/es/stories/Tasty.stories.js +1 -1
  388. package/es/stories/components/ConfirmDeletionDialogForm.js +1 -1
  389. package/es/stories/components/DialogFormApp.js +1 -1
  390. package/es/stories/components/StyledButton.js +1 -1
  391. package/es/stories/lists/baseProps.js +1 -2
  392. package/es/tasty/debug.js +703 -0
  393. package/es/tasty/index.js +3 -1
  394. package/es/tasty/injector/index.js +187 -0
  395. package/es/tasty/injector/injector.js +678 -0
  396. package/es/tasty/injector/sheet-manager.js +912 -0
  397. package/es/tasty/injector/types.js +10 -0
  398. package/es/tasty/parser/classify.js +1 -1
  399. package/es/tasty/parser/const.js +1 -1
  400. package/es/tasty/parser/lru.js +38 -2
  401. package/es/tasty/parser/parser.js +1 -1
  402. package/es/tasty/parser/tokenizer.js +1 -1
  403. package/es/tasty/parser/types.js +1 -1
  404. package/es/tasty/providers/BreakpointsProvider.js +1 -1
  405. package/es/tasty/styles/align.js +1 -1
  406. package/es/tasty/styles/border.js +1 -1
  407. package/es/tasty/styles/boxShadow.combinator.js +1 -1
  408. package/es/tasty/styles/color.js +8 -12
  409. package/es/tasty/styles/createStyle.js +19 -4
  410. package/es/tasty/styles/dimension.js +1 -1
  411. package/es/tasty/styles/display.js +1 -1
  412. package/es/tasty/styles/fade.js +1 -1
  413. package/es/tasty/styles/fill.js +6 -8
  414. package/es/tasty/styles/flow.js +1 -1
  415. package/es/tasty/styles/font.js +1 -1
  416. package/es/tasty/styles/fontStyle.js +1 -1
  417. package/es/tasty/styles/gap.js +1 -1
  418. package/es/tasty/styles/groupRadius.js +1 -1
  419. package/es/tasty/styles/height.js +1 -1
  420. package/es/tasty/styles/index.js +1 -1
  421. package/es/tasty/styles/inset.js +1 -1
  422. package/es/tasty/styles/justify.js +1 -1
  423. package/es/tasty/styles/list.js +1 -1
  424. package/es/tasty/styles/margin.js +1 -1
  425. package/es/tasty/styles/marginBlock.js +1 -1
  426. package/es/tasty/styles/marginInline.js +1 -1
  427. package/es/tasty/styles/outline.js +1 -1
  428. package/es/tasty/styles/padding.js +1 -1
  429. package/es/tasty/styles/paddingBlock.js +1 -1
  430. package/es/tasty/styles/paddingInline.js +1 -1
  431. package/es/tasty/styles/place.js +1 -1
  432. package/es/tasty/styles/predefined.js +1 -3
  433. package/es/tasty/styles/preset.js +1 -1
  434. package/es/tasty/styles/radius.js +1 -1
  435. package/es/tasty/styles/reset.js +40 -44
  436. package/es/tasty/styles/scrollbar.js +1 -1
  437. package/es/tasty/styles/shadow.js +1 -1
  438. package/es/tasty/styles/styledScrollbar.js +1 -1
  439. package/es/tasty/styles/transition.js +2 -1
  440. package/es/tasty/styles/types.js +1 -1
  441. package/es/tasty/styles/width.js +1 -1
  442. package/es/tasty/tasty.js +120 -35
  443. package/es/tasty/types.js +1 -1
  444. package/es/tasty/utils/cache-wrapper.js +1 -1
  445. package/es/tasty/utils/case-converter.js +1 -1
  446. package/es/tasty/utils/colors.js +1 -1
  447. package/es/tasty/utils/dotize.js +1 -1
  448. package/es/tasty/utils/filterBaseProps.js +1 -1
  449. package/es/tasty/utils/getDisplayName.js +1 -1
  450. package/es/tasty/utils/getModCombinations.js +26 -30
  451. package/es/tasty/utils/isDevEnv.js +36 -0
  452. package/es/tasty/utils/mergeStyles.js +1 -1
  453. package/es/tasty/utils/modAttrs.js +1 -1
  454. package/es/tasty/utils/renderStyles.js +710 -58
  455. package/es/tasty/utils/responsive.js +1 -7
  456. package/es/tasty/utils/string.js +1 -1
  457. package/es/tasty/utils/styles.js +100 -235
  458. package/es/tasty/utils/warnings.js +1 -1
  459. package/es/tokens.js +1 -12
  460. package/es/type-checks.js +1 -1
  461. package/es/utils/ResizeSensor.js +1 -1
  462. package/es/utils/modules.js +1 -1
  463. package/es/utils/promise.js +1 -1
  464. package/es/utils/random.js +1 -1
  465. package/es/utils/range.js +1 -1
  466. package/es/utils/react/Slots.js +1 -1
  467. package/es/utils/react/chain.js +1 -1
  468. package/es/utils/react/forwardRefWithGenerics.js +1 -1
  469. package/es/utils/react/index.js +1 -1
  470. package/es/utils/react/interactions.js +1 -1
  471. package/es/utils/react/isTextOnly.js +1 -1
  472. package/es/utils/react/mapProps.js +1 -1
  473. package/es/utils/react/mergeProps.js +1 -1
  474. package/es/utils/react/nullableValue.js +1 -1
  475. package/es/utils/react/sharedStore.js +1 -1
  476. package/es/utils/react/useCombinedRefs.js +1 -1
  477. package/es/utils/react/useControlledFocusVisible.js +1 -1
  478. package/es/utils/react/useEventBus.js +1 -1
  479. package/es/utils/react/useId.js +1 -1
  480. package/es/utils/react/useIsDarwin.js +1 -1
  481. package/es/utils/react/useKeySymbols.js +1 -1
  482. package/es/utils/react/useLayoutEffect.js +1 -1
  483. package/es/utils/react/useQaProps.js +1 -1
  484. package/es/utils/react/useViewportSize.js +1 -1
  485. package/es/utils/react/wrapNodeIfPlain.js +1 -1
  486. package/es/utils/transitions.js +1 -1
  487. package/es/utils/tree.js +1 -1
  488. package/es/utils/warnings.js +1 -1
  489. package/es/version.js +2 -2
  490. package/package.json +1 -1
  491. package/types/components/HiddenInput.d.ts +1 -3
  492. package/types/components/actions/Button/Button.d.ts +1 -0
  493. package/types/components/actions/Menu/styled.d.ts +762 -765
  494. package/types/components/actions/use-action.d.ts +1 -1
  495. package/types/components/content/List/SectionHeading.d.ts +254 -255
  496. package/types/components/fields/DatePicker/DatePickerElement.d.ts +254 -255
  497. package/types/tasty/debug.d.ts +163 -0
  498. package/types/tasty/index.d.ts +2 -0
  499. package/types/tasty/injector/index.d.ts +87 -0
  500. package/types/tasty/injector/injector.d.ts +111 -0
  501. package/types/tasty/injector/sheet-manager.d.ts +98 -0
  502. package/types/tasty/injector/types.d.ts +106 -0
  503. package/types/tasty/parser/lru.d.ts +5 -1
  504. package/types/tasty/styles/color.d.ts +3 -1
  505. package/types/tasty/styles/reset.d.ts +1 -2
  506. package/types/tasty/types.d.ts +0 -2
  507. package/types/tasty/utils/getModCombinations.d.ts +9 -1
  508. package/types/tasty/utils/isDevEnv.d.ts +6 -0
  509. package/types/tasty/utils/renderStyles.d.ts +30 -7
  510. package/types/tasty/utils/responsive.d.ts +0 -1
  511. package/types/tasty/utils/styles.d.ts +7 -90
  512. package/types/tokens.d.ts +0 -11
@@ -0,0 +1,703 @@
1
+ /**
2
+ * @license MIT
3
+ * author: Cube Dev Team
4
+ * @cube-dev/ui-kit v0.76.0
5
+ * Released under the MIT license.
6
+ */
7
+
8
+ /**
9
+ * Debug utilities for inspecting tasty-generated CSS at runtime
10
+ */
11
+ import { getCssTextForNode, injector } from './injector';
12
+ import { isDevEnv } from './utils/isDevEnv';
13
+ /**
14
+ * Pretty-print CSS with proper indentation and formatting
15
+ */
16
+ function prettifyCSS(css) {
17
+ if (!css || css.trim() === '') {
18
+ return '';
19
+ }
20
+ // First, normalize whitespace but preserve structure
21
+ let formatted = css.replace(/\s+/g, ' ').trim();
22
+ // Add newlines after opening braces
23
+ formatted = formatted.replace(/\s*\{\s*/g, ' {\n');
24
+ // Add newlines after semicolons (but not inside strings or functions)
25
+ formatted = formatted.replace(/;(?![^"']*["'][^"']*$)(?![^()]*\))/g, ';\n');
26
+ // Add newlines before closing braces
27
+ formatted = formatted.replace(/\s*\}\s*/g, '\n}\n');
28
+ // Handle comma-separated selectors (only outside of property values)
29
+ // This regex looks for commas that are:
30
+ // 1. Not inside quotes
31
+ // 2. Not inside parentheses (CSS functions)
32
+ // 3. Not followed by a colon (not in a property value)
33
+ formatted = formatted.replace(/,(?![^"']*["'][^"']*$)(?![^()]*\))(?=.*:.*\{|.*\{)/g, ',\n');
34
+ // Process line by line for proper indentation
35
+ const lines = formatted.split('\n');
36
+ let indentLevel = 0;
37
+ const indentSize = 2;
38
+ const formattedLines = lines.map((line) => {
39
+ const trimmed = line.trim();
40
+ if (!trimmed)
41
+ return '';
42
+ // Handle closing braces - decrease indent first
43
+ if (trimmed === '}') {
44
+ indentLevel = Math.max(0, indentLevel - 1);
45
+ return ' '.repeat(indentLevel * indentSize) + trimmed;
46
+ }
47
+ // Current line with proper indentation
48
+ const indent = ' '.repeat(indentLevel * indentSize);
49
+ let result = indent + trimmed;
50
+ // Handle opening braces - increase indent for next line
51
+ if (trimmed.endsWith('{')) {
52
+ indentLevel++;
53
+ }
54
+ return result;
55
+ });
56
+ // Clean up the result and ensure proper spacing
57
+ let result = formattedLines
58
+ .filter((line) => line.trim()) // Remove empty lines
59
+ .join('\n')
60
+ .replace(/\n{3,}/g, '\n\n') // Max 2 consecutive newlines
61
+ .trim();
62
+ // Final cleanup: ensure single spaces in function calls
63
+ result = result.replace(/,\s+/g, ', ');
64
+ return result;
65
+ }
66
+ // Helper functions
67
+ function findAllTastyClasses(root = document) {
68
+ const classes = new Set();
69
+ const elements = root.querySelectorAll?.('[class]') || [];
70
+ elements.forEach((element) => {
71
+ const classList = element.getAttribute('class');
72
+ if (classList) {
73
+ const tastyClasses = classList
74
+ .split(/\s+/)
75
+ .filter((cls) => /^t\d+$/.test(cls));
76
+ tastyClasses.forEach((cls) => classes.add(cls));
77
+ }
78
+ });
79
+ return Array.from(classes).sort((a, b) => {
80
+ const aNum = parseInt(a.slice(1));
81
+ const bNum = parseInt(b.slice(1));
82
+ return aNum - bNum;
83
+ });
84
+ }
85
+ function findAllStyledClasses(root = document) {
86
+ // Extract tasty classes from all CSS text by parsing selectors
87
+ const allCSS = injector.instance.getCssText({ root });
88
+ const classes = new Set();
89
+ // Simple regex to find .t{number} class selectors
90
+ const classRegex = /\.t(\d+)/g;
91
+ let match;
92
+ while ((match = classRegex.exec(allCSS)) !== null) {
93
+ classes.add(`t${match[1]}`);
94
+ }
95
+ return Array.from(classes).sort((a, b) => {
96
+ const aNum = parseInt(a.slice(1));
97
+ const bNum = parseInt(b.slice(1));
98
+ return aNum - bNum;
99
+ });
100
+ }
101
+ function extractCSSRules(css) {
102
+ const rules = [];
103
+ // Remove comments
104
+ let cleanCSS = css.replace(/\/\*[\s\S]*?\*\//g, '');
105
+ let i = 0;
106
+ while (i < cleanCSS.length) {
107
+ // Skip whitespace
108
+ while (i < cleanCSS.length && /\s/.test(cleanCSS[i])) {
109
+ i++;
110
+ }
111
+ if (i >= cleanCSS.length)
112
+ break;
113
+ // Find selector start
114
+ const selectorStart = i;
115
+ let braceDepth = 0;
116
+ let inString = false;
117
+ let stringChar = '';
118
+ // Find opening brace
119
+ while (i < cleanCSS.length) {
120
+ const char = cleanCSS[i];
121
+ if (inString) {
122
+ if (char === stringChar && cleanCSS[i - 1] !== '\\') {
123
+ inString = false;
124
+ }
125
+ }
126
+ else {
127
+ if (char === '"' || char === "'") {
128
+ inString = true;
129
+ stringChar = char;
130
+ }
131
+ else if (char === '{') {
132
+ braceDepth++;
133
+ if (braceDepth === 1)
134
+ break;
135
+ }
136
+ }
137
+ i++;
138
+ }
139
+ if (i >= cleanCSS.length)
140
+ break;
141
+ const selector = cleanCSS.substring(selectorStart, i).trim();
142
+ i++; // Skip opening brace
143
+ // Find matching closing brace
144
+ const contentStart = i;
145
+ braceDepth = 1;
146
+ inString = false;
147
+ while (i < cleanCSS.length && braceDepth > 0) {
148
+ const char = cleanCSS[i];
149
+ if (inString) {
150
+ if (char === stringChar && cleanCSS[i - 1] !== '\\') {
151
+ inString = false;
152
+ }
153
+ }
154
+ else {
155
+ if (char === '"' || char === "'") {
156
+ inString = true;
157
+ stringChar = char;
158
+ }
159
+ else if (char === '{') {
160
+ braceDepth++;
161
+ }
162
+ else if (char === '}') {
163
+ braceDepth--;
164
+ }
165
+ }
166
+ i++;
167
+ }
168
+ const content = cleanCSS.substring(contentStart, i - 1).trim();
169
+ if (content && selector) {
170
+ rules.push({ selector, declarations: content });
171
+ }
172
+ }
173
+ return rules;
174
+ }
175
+ function getGlobalCSS(root = document) {
176
+ const allCSS = injector.instance.getCssText({ root });
177
+ const rules = extractCSSRules(allCSS);
178
+ const globalRules = rules.filter((rule) => {
179
+ const selectors = rule.selector.split(',').map((s) => s.trim());
180
+ return !selectors.every((selector) => {
181
+ const cleanSelector = selector.replace(/[.#:\s>+~[\]()]/g, ' ');
182
+ const parts = cleanSelector.split(/\s+/).filter(Boolean);
183
+ return parts.length > 0 && parts.every((part) => /^t\d+$/.test(part));
184
+ });
185
+ });
186
+ const globalCSS = globalRules
187
+ .map((rule) => `${rule.selector} { ${rule.declarations} }`)
188
+ .join('\n');
189
+ return prettifyCSS(globalCSS);
190
+ }
191
+ function getPageCSS(options) {
192
+ const root = options?.root || document;
193
+ const includeCrossOrigin = options?.includeCrossOrigin ?? false;
194
+ const cssChunks = [];
195
+ try {
196
+ if ('styleSheets' in root) {
197
+ const styleSheets = Array.from(root.styleSheets);
198
+ for (const sheet of styleSheets) {
199
+ try {
200
+ if (sheet.cssRules) {
201
+ const rules = Array.from(sheet.cssRules);
202
+ cssChunks.push(rules.map((rule) => rule.cssText).join('\n'));
203
+ }
204
+ }
205
+ catch (e) {
206
+ // Cross-origin sheet or other access error
207
+ if (includeCrossOrigin) {
208
+ cssChunks.push(`/* Cross-origin stylesheet: ${sheet.href || 'inline'} */`);
209
+ }
210
+ }
211
+ }
212
+ }
213
+ }
214
+ catch (e) {
215
+ // Fallback error handling
216
+ }
217
+ return cssChunks.join('\n');
218
+ }
219
+ function getPageStats(options) {
220
+ const root = options?.root || document;
221
+ const includeCrossOrigin = options?.includeCrossOrigin ?? false;
222
+ let cssSize = 0;
223
+ let ruleCount = 0;
224
+ let stylesheetCount = 0;
225
+ let skippedStylesheets = 0;
226
+ try {
227
+ if ('styleSheets' in root) {
228
+ const styleSheets = Array.from(root.styleSheets);
229
+ stylesheetCount = styleSheets.length;
230
+ for (const sheet of styleSheets) {
231
+ try {
232
+ if (sheet.cssRules) {
233
+ const rules = Array.from(sheet.cssRules);
234
+ ruleCount += rules.length;
235
+ cssSize += rules.reduce((sum, rule) => sum + rule.cssText.length, 0);
236
+ }
237
+ }
238
+ catch (e) {
239
+ skippedStylesheets++;
240
+ }
241
+ }
242
+ }
243
+ }
244
+ catch (e) {
245
+ // Fallback error handling
246
+ }
247
+ return { cssSize, ruleCount, stylesheetCount, skippedStylesheets };
248
+ }
249
+ /**
250
+ * Concise tastyDebug API for inspecting styles at runtime
251
+ */
252
+ export const tastyDebug = {
253
+ // 1) One function to get CSS from anywhere
254
+ css(target, opts) {
255
+ const { root = document, prettify = true, log = false } = opts || {};
256
+ let css = '';
257
+ if (typeof target === 'string') {
258
+ if (target === 'all') {
259
+ css = injector.instance.getCssText({ root });
260
+ }
261
+ else if (target === 'global') {
262
+ css = getGlobalCSS(root);
263
+ }
264
+ else if (target === 'active') {
265
+ const activeClasses = findAllTastyClasses(root);
266
+ css = injector.instance.getCssTextForClasses(activeClasses, { root });
267
+ }
268
+ else if (target === 'unused') {
269
+ // Get unused classes (refCount = 0) from the registry
270
+ const registry = injector.instance['sheetManager']?.getRegistry(root);
271
+ const unusedClasses = registry
272
+ ? Array.from(registry.refCounts.entries())
273
+ .filter(([, refCount]) => refCount === 0)
274
+ .map(([className]) => className)
275
+ : [];
276
+ css = injector.instance.getCssTextForClasses(unusedClasses, { root });
277
+ }
278
+ else if (target === 'page') {
279
+ css = getPageCSS({ root, includeCrossOrigin: true });
280
+ }
281
+ else if (/^t\d+$/.test(target)) {
282
+ // Single tasty class
283
+ css = injector.instance.getCssTextForClasses([target], { root });
284
+ }
285
+ else {
286
+ // CSS selector - find element and get its CSS
287
+ const element = root.querySelector?.(target);
288
+ if (element) {
289
+ css = getCssTextForNode(element, { root });
290
+ }
291
+ }
292
+ }
293
+ else if (Array.isArray(target)) {
294
+ // Array of tasty classes
295
+ css = injector.instance.getCssTextForClasses(target, { root });
296
+ }
297
+ else if (target instanceof Element) {
298
+ // DOM element
299
+ css = getCssTextForNode(target, { root });
300
+ }
301
+ const result = prettify ? prettifyCSS(css) : css;
302
+ if (log) {
303
+ console.group(`🎨 CSS for ${Array.isArray(target) ? `[${target.join(', ')}]` : target}`);
304
+ console.log(result || '(empty)');
305
+ console.groupEnd();
306
+ }
307
+ return result;
308
+ },
309
+ // 2) Element-level inspection
310
+ inspect(target, opts) {
311
+ const { root = document } = opts || {};
312
+ const element = typeof target === 'string'
313
+ ? root.querySelector?.(target)
314
+ : target;
315
+ if (!element) {
316
+ return {
317
+ element: null,
318
+ classes: [],
319
+ css: '',
320
+ size: 0,
321
+ rules: 0,
322
+ };
323
+ }
324
+ const classList = element.getAttribute('class') || '';
325
+ const tastyClasses = classList
326
+ .split(/\s+/)
327
+ .filter((cls) => /^t\d+$/.test(cls));
328
+ const css = getCssTextForNode(element, { root });
329
+ const prettifiedCSS = prettifyCSS(css);
330
+ const ruleCount = (css.match(/\{[^}]*\}/g) || []).length;
331
+ return {
332
+ element,
333
+ classes: tastyClasses,
334
+ css: prettifiedCSS,
335
+ size: css.length,
336
+ rules: ruleCount,
337
+ };
338
+ },
339
+ // 3) Cache + metrics at a glance
340
+ cache(opts) {
341
+ const { root = document } = opts || {};
342
+ const activeClasses = findAllTastyClasses(root);
343
+ const allClasses = findAllStyledClasses(root);
344
+ // Get unused classes (refCount = 0) from the registry
345
+ const registry = injector.instance['sheetManager']?.getRegistry(root);
346
+ const unusedClasses = registry
347
+ ? Array.from(registry.refCounts.entries())
348
+ .filter(([, refCount]) => refCount === 0)
349
+ .map(([className]) => className)
350
+ : [];
351
+ return {
352
+ classes: {
353
+ active: activeClasses,
354
+ unused: unusedClasses,
355
+ all: [...activeClasses, ...unusedClasses],
356
+ },
357
+ metrics: injector.instance.getMetrics({ root }),
358
+ };
359
+ },
360
+ // 4) Cleanup + metrics utilities
361
+ cleanup(opts) {
362
+ const { root } = opts || {};
363
+ injector.instance.cleanup(root);
364
+ },
365
+ metrics(opts) {
366
+ const { root } = opts || {};
367
+ return injector.instance.getMetrics({ root });
368
+ },
369
+ resetMetrics(opts) {
370
+ const { root } = opts || {};
371
+ injector.instance.resetMetrics({ root });
372
+ },
373
+ // 5) Tasty global CSS and selector analysis
374
+ global(opts) {
375
+ const { root = document, log = false } = opts || {};
376
+ const css = getGlobalCSS(root);
377
+ const rules = extractCSSRules(css);
378
+ // Analyze selectors
379
+ const selectors = {
380
+ elements: [],
381
+ classes: [],
382
+ ids: [],
383
+ pseudoClasses: [],
384
+ mediaQueries: [],
385
+ keyframes: [],
386
+ other: [],
387
+ };
388
+ rules.forEach((rule) => {
389
+ const selector = rule.selector;
390
+ if (selector.startsWith('@media')) {
391
+ selectors.mediaQueries.push(selector);
392
+ }
393
+ else if (selector.startsWith('@keyframes')) {
394
+ selectors.keyframes.push(selector);
395
+ }
396
+ else if (selector.includes('.') &&
397
+ !selector.includes('#') &&
398
+ !selector.includes(':')) {
399
+ selectors.classes.push(selector);
400
+ }
401
+ else if (selector.includes('#') &&
402
+ !selector.includes('.') &&
403
+ !selector.includes(':')) {
404
+ selectors.ids.push(selector);
405
+ }
406
+ else if (selector.includes(':')) {
407
+ selectors.pseudoClasses.push(selector);
408
+ }
409
+ else if (/^[a-zA-Z][a-zA-Z0-9]*$/.test(selector.trim())) {
410
+ selectors.elements.push(selector);
411
+ }
412
+ else {
413
+ selectors.other.push(selector);
414
+ }
415
+ });
416
+ const result = {
417
+ css,
418
+ totalRules: rules.length,
419
+ totalCSSSize: css.length,
420
+ selectors,
421
+ };
422
+ if (log) {
423
+ console.group(`🌍 Global CSS (${result.totalRules} rules)`);
424
+ console.log(`📊 Size: ${result.totalCSSSize} characters`);
425
+ console.log('🎯 Selector breakdown:', result.selectors);
426
+ console.log('🎨 CSS:\n' + result.css);
427
+ console.groupEnd();
428
+ }
429
+ return result;
430
+ },
431
+ // 6) Defined @property and keyframes
432
+ defs(opts) {
433
+ const { root = document } = opts || {};
434
+ // Get properties from injector if available, otherwise scan CSS
435
+ let properties = [];
436
+ try {
437
+ const registry = injector.instance['sheetManager']?.getRegistry(root);
438
+ if (registry?.injectedProperties) {
439
+ properties = Array.from(registry.injectedProperties).sort();
440
+ }
441
+ }
442
+ catch {
443
+ // Fallback: scan CSS for @property rules
444
+ const allCSS = injector.instance.getCssText({ root });
445
+ const propRegex = /@property\s+(--[a-z0-9-]+)/gi;
446
+ const propSet = new Set();
447
+ let match;
448
+ while ((match = propRegex.exec(allCSS)) !== null) {
449
+ propSet.add(match[1]);
450
+ }
451
+ properties = Array.from(propSet).sort();
452
+ }
453
+ // Get keyframes
454
+ let keyframes = [];
455
+ try {
456
+ const registry = injector.instance['sheetManager']?.getRegistry(root);
457
+ if (registry) {
458
+ for (const entry of registry.keyframesCache.values()) {
459
+ keyframes.push({
460
+ name: entry.name,
461
+ refCount: entry.refCount,
462
+ });
463
+ }
464
+ keyframes.sort((a, b) => a.name.localeCompare(b.name));
465
+ }
466
+ }
467
+ catch {
468
+ // Fallback: scan CSS for @keyframes rules
469
+ const allCSS = injector.instance.getCssText({ root });
470
+ const keyframesRegex = /@keyframes\s+([a-zA-Z0-9_-]+)/gi;
471
+ const keyframesSet = new Set();
472
+ let match;
473
+ while ((match = keyframesRegex.exec(allCSS)) !== null) {
474
+ keyframesSet.add(match[1]);
475
+ }
476
+ keyframes = Array.from(keyframesSet)
477
+ .sort()
478
+ .map((name) => ({ name, refCount: 1 }));
479
+ }
480
+ return { properties, keyframes };
481
+ },
482
+ // 7) One-shot overview
483
+ summary(opts) {
484
+ const { root = document, log = false, includePageCSS = false } = opts || {};
485
+ const cacheStatus = this.cache({ root });
486
+ const globalBreakdown = this.global({ root });
487
+ const definitions = this.defs({ root });
488
+ const metrics = this.metrics({ root });
489
+ const activeCSS = this.css('active', { root, prettify: false });
490
+ const unusedCSS = this.css('unused', { root, prettify: false });
491
+ const allCSS = this.css('all', { root, prettify: false });
492
+ // Build cleanup summary from metrics
493
+ const cleanupSummary = {
494
+ enabled: !!metrics,
495
+ totalCleanups: metrics?.cleanupHistory?.length || 0,
496
+ totalClassesDeleted: metrics?.cleanupHistory?.reduce((sum, c) => sum + c.classesDeleted, 0) || 0,
497
+ totalCssDeleted: metrics?.cleanupHistory?.reduce((sum, c) => sum + c.cssSize, 0) || 0,
498
+ totalRulesDeleted: metrics?.cleanupHistory?.reduce((sum, c) => sum + c.rulesDeleted, 0) ||
499
+ 0,
500
+ averageClassesPerCleanup: 0,
501
+ averageCssPerCleanup: 0,
502
+ averageRulesPerCleanup: 0,
503
+ lastCleanup: undefined,
504
+ };
505
+ if (cleanupSummary.totalCleanups > 0) {
506
+ cleanupSummary.averageClassesPerCleanup =
507
+ cleanupSummary.totalClassesDeleted / cleanupSummary.totalCleanups;
508
+ cleanupSummary.averageCssPerCleanup =
509
+ cleanupSummary.totalCssDeleted / cleanupSummary.totalCleanups;
510
+ cleanupSummary.averageRulesPerCleanup =
511
+ cleanupSummary.totalRulesDeleted / cleanupSummary.totalCleanups;
512
+ const lastCleanup = metrics?.cleanupHistory?.[metrics.cleanupHistory.length - 1];
513
+ if (lastCleanup) {
514
+ cleanupSummary.lastCleanup = {
515
+ ...lastCleanup,
516
+ date: new Date(lastCleanup.timestamp).toISOString(),
517
+ };
518
+ }
519
+ }
520
+ let page;
521
+ if (includePageCSS) {
522
+ const pageStats = getPageStats({ root, includeCrossOrigin: true });
523
+ page = {
524
+ ...pageStats,
525
+ css: includePageCSS === 'all'
526
+ ? getPageCSS({ root, includeCrossOrigin: true })
527
+ : undefined,
528
+ };
529
+ }
530
+ const summary = {
531
+ activeClasses: cacheStatus.classes.active,
532
+ unusedClasses: cacheStatus.classes.unused,
533
+ totalStyledClasses: cacheStatus.classes.all,
534
+ activeCSSSize: activeCSS.length,
535
+ unusedCSSSize: unusedCSS.length,
536
+ totalCSSSize: allCSS.length,
537
+ activeCSS: prettifyCSS(activeCSS),
538
+ unusedCSS: prettifyCSS(unusedCSS),
539
+ allCSS: prettifyCSS(allCSS),
540
+ globalCSS: globalBreakdown.css,
541
+ globalCSSSize: globalBreakdown.totalCSSSize,
542
+ globalRuleCount: globalBreakdown.totalRules,
543
+ page,
544
+ metrics,
545
+ definedProperties: definitions.properties,
546
+ definedKeyframes: definitions.keyframes,
547
+ propertyCount: definitions.properties.length,
548
+ keyframeCount: definitions.keyframes.length,
549
+ cleanupSummary,
550
+ };
551
+ if (log) {
552
+ console.group('🎨 Comprehensive Tasty Debug Summary');
553
+ console.log(`📊 Style Cache Status:`);
554
+ console.log(` • Active classes (in DOM): ${summary.activeClasses.length}`);
555
+ console.log(` • Unused classes (refCount = 0): ${summary.unusedClasses.length}`);
556
+ console.log(` • Total styled classes: ${summary.totalStyledClasses.length}`);
557
+ console.log(`💾 CSS Size:`);
558
+ console.log(` • Active CSS: ${summary.activeCSSSize} characters`);
559
+ console.log(` • Unused CSS: ${summary.unusedCSSSize} characters`);
560
+ console.log(` • Global CSS: ${summary.globalCSSSize} characters (${summary.globalRuleCount} rules)`);
561
+ console.log(` • Total CSS: ${summary.totalCSSSize} characters`);
562
+ if (page) {
563
+ console.log(`📄 Page CSS:`);
564
+ console.log(` • Total page CSS: ${page.cssSize} characters`);
565
+ console.log(` • Total page rules: ${page.ruleCount}`);
566
+ console.log(` • Stylesheets: ${page.stylesheetCount} (${page.skippedStylesheets} skipped)`);
567
+ }
568
+ console.log('🏷️ Properties & Keyframes:');
569
+ console.log(` • Defined @property: ${summary.propertyCount}`);
570
+ console.log(` • Defined @keyframes: ${summary.keyframeCount}`);
571
+ if (metrics) {
572
+ console.log(`⚡ Performance Metrics:`);
573
+ console.log(` • Cache hits: ${metrics.hits}`);
574
+ console.log(` • Cache misses: ${metrics.misses}`);
575
+ console.log(` • Cached style reuses: ${metrics.unusedHits}`);
576
+ const hitRate = metrics.hits + metrics.misses > 0
577
+ ? (((metrics.hits + (metrics.unusedHits || 0)) /
578
+ (metrics.hits + metrics.misses)) *
579
+ 100).toFixed(1)
580
+ : '0';
581
+ console.log(` • Overall cache hit rate: ${hitRate}%`);
582
+ }
583
+ console.log('🔍 Details:');
584
+ console.log(' • Active classes:', summary.activeClasses);
585
+ console.log(' • Unused classes:', summary.unusedClasses);
586
+ console.groupEnd();
587
+ }
588
+ return summary;
589
+ },
590
+ // 8) Page-level CSS helpers
591
+ pageCSS(opts) {
592
+ const { root = document, prettify = true, log = false, includeCrossOrigin = true, } = opts || {};
593
+ const css = getPageCSS({ root, includeCrossOrigin });
594
+ const result = prettify ? prettifyCSS(css) : css;
595
+ if (log) {
596
+ console.group('📄 Page CSS (All Stylesheets)');
597
+ console.log(result || '(empty)');
598
+ console.groupEnd();
599
+ }
600
+ return result;
601
+ },
602
+ pageStats(opts) {
603
+ const { root = document, includeCrossOrigin = true } = opts || {};
604
+ return getPageStats({ root, includeCrossOrigin });
605
+ },
606
+ // 9) Install globally
607
+ install() {
608
+ if (typeof window !== 'undefined' &&
609
+ window.tastyDebug !== tastyDebug) {
610
+ window.tastyDebug = tastyDebug;
611
+ console.log('🎨 tastyDebug installed on window. Run tastyDebug.help() for quick start guide.');
612
+ }
613
+ },
614
+ // 10) Beautiful console logging with collapsible CSS
615
+ log(target, opts) {
616
+ const { title, ...cssOpts } = opts || {};
617
+ const css = tastyDebug.css(target, cssOpts);
618
+ if (!css.trim()) {
619
+ console.warn(`🎨 No CSS found for target: ${String(target)}`);
620
+ return;
621
+ }
622
+ const targetStr = Array.isArray(target)
623
+ ? target.join(', ')
624
+ : String(target);
625
+ const displayTitle = title || `CSS for "${targetStr}"`;
626
+ // Get some stats about the CSS
627
+ const lines = css.split('\n').length;
628
+ const size = new Blob([css]).size;
629
+ const sizeStr = size > 1024 ? `${(size / 1024).toFixed(1)}KB` : `${size}B`;
630
+ // Count CSS rules (blocks with opening braces)
631
+ const ruleCount = (css.match(/\{/g) || []).length;
632
+ console.group(`🎨 ${displayTitle} (${ruleCount} rules, ${lines} lines, ${sizeStr})`);
633
+ // Detect sub-elements in CSS
634
+ const subElementMatches = css.match(/\[data-element="([^"]+)"\]/g) || [];
635
+ const subElements = [
636
+ ...new Set(subElementMatches
637
+ .map((match) => match.match(/\[data-element="([^"]+)"\]/)?.[1])
638
+ .filter(Boolean)),
639
+ ];
640
+ if (subElements.length > 0) {
641
+ console.log(`🧩 Sub-elements found: ${subElements.join(', ')}`);
642
+ // Show stats and CSS for each sub-element
643
+ subElements.forEach((element) => {
644
+ const elementSelector = `[data-element="${element}"]`;
645
+ const elementRegex = new RegExp(`[^}]*\\[data-element="${element.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}"\\][^{]*\\{[^}]*\\}`, 'gm');
646
+ const elementCSS = (css.match(elementRegex) || []).join('\n');
647
+ if (elementCSS) {
648
+ const elementRules = (elementCSS.match(/\{/g) || []).length;
649
+ const elementLines = elementCSS.split('\n').length;
650
+ const elementSize = new Blob([elementCSS]).size;
651
+ const elementSizeStr = elementSize > 1024
652
+ ? `${(elementSize / 1024).toFixed(1)}KB`
653
+ : `${elementSize}B`;
654
+ console.groupCollapsed(`🧩 ${element} (${elementRules} rules, ${elementLines} lines, ${elementSizeStr})`);
655
+ console.log(`%c${elementCSS}`, 'color: #666; font-family: monospace; font-size: 12px; white-space: pre;');
656
+ console.groupEnd();
657
+ }
658
+ });
659
+ }
660
+ // Full CSS in collapsible group (hidden by default)
661
+ console.groupCollapsed('📄 Full CSS (click to expand)');
662
+ console.log(`%c${css}`, 'color: #666; font-family: monospace; font-size: 12px; white-space: pre;');
663
+ console.groupEnd();
664
+ console.groupEnd();
665
+ },
666
+ // 11) Show help and usage examples
667
+ help() {
668
+ console.group('🎨 tastyDebug - Quick Start Guide');
669
+ console.log('💡 Essential commands:');
670
+ console.log(' • tastyDebug.summary({ log: true }) - comprehensive overview');
671
+ console.log(' • tastyDebug.log("active") - beautiful CSS display');
672
+ console.log(' • tastyDebug.css("active") - get active CSS');
673
+ console.log(' • tastyDebug.inspect(".my-element") - detailed element inspection');
674
+ console.log(' • tastyDebug.global({ log: true }) - global CSS analysis');
675
+ console.log(' • tastyDebug.cache() - cache status');
676
+ console.log(' • tastyDebug.defs() - defined properties & keyframes');
677
+ console.log(' • tastyDebug.pageCSS({ log: true }) - all page CSS');
678
+ console.log('');
679
+ console.log('📖 Common targets for css()/log():');
680
+ console.log(' • "all" - all tasty CSS + global CSS');
681
+ console.log(' • "active" - CSS for classes in DOM');
682
+ console.log(' • "unused" - CSS for classes with refCount = 0');
683
+ console.log(' • "global" - only global CSS (createGlobalStyle)');
684
+ console.log(' • "page" - ALL page CSS (including non-tasty)');
685
+ console.log(' • "t123" - specific tasty class');
686
+ console.log(' • [".my-selector"] - CSS selector');
687
+ console.log('');
688
+ console.log('🔧 Available options:');
689
+ console.log(' • { log: true } - auto-log results to console');
690
+ console.log(' • { title: "Custom" } - custom title for log()');
691
+ console.log(' • { root: shadowRoot } - target Shadow DOM');
692
+ console.log(' • { prettify: false } - skip CSS formatting');
693
+ console.groupEnd();
694
+ },
695
+ };
696
+ /**
697
+ * Auto-install in development
698
+ */
699
+ if (typeof window !== 'undefined' && isDevEnv()) {
700
+ tastyDebug.install();
701
+ }
702
+
703
+