@cube-dev/ui-kit 0.126.0 → 0.127.1

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 (451) hide show
  1. package/dist/CHANGELOG.md +49 -0
  2. package/dist/_internal/hooks/use-chained-callback.js +1 -1
  3. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  4. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  5. package/dist/_internal/hooks/use-event.js +1 -1
  6. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  7. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  8. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  9. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  10. package/dist/_internal/hooks/use-warn.js +1 -1
  11. package/dist/components/Block.js +1 -1
  12. package/dist/components/CollectionItem.js +1 -1
  13. package/dist/components/GlobalStyles.js +1 -1
  14. package/dist/components/GridProvider.js +1 -1
  15. package/dist/components/HiddenInput.js +1 -1
  16. package/dist/components/Root.js +1 -1
  17. package/dist/components/actions/Action/Action.js +1 -1
  18. package/dist/components/actions/Banner/Banner.js +1 -1
  19. package/dist/components/actions/Button/Button.js +1 -1
  20. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  21. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  22. package/dist/components/actions/ButtonSplit/context.js +1 -1
  23. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  24. package/dist/components/actions/CommandMenu/CommandMenu.js.map +1 -1
  25. package/dist/components/actions/CommandMenu/styled.js +1 -1
  26. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  27. package/dist/components/actions/ItemActionContext.js +1 -1
  28. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  29. package/dist/components/actions/Link/Link.js +1 -1
  30. package/dist/components/actions/Menu/Menu.js +1 -1
  31. package/dist/components/actions/Menu/Menu.js.map +1 -1
  32. package/dist/components/actions/Menu/MenuItem.js +1 -1
  33. package/dist/components/actions/Menu/MenuSection.js +1 -1
  34. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  35. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  36. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  37. package/dist/components/actions/Menu/context.js +1 -1
  38. package/dist/components/actions/Menu/styled.js +1 -2
  39. package/dist/components/actions/Menu/styled.js.map +1 -1
  40. package/dist/components/actions/index.js +1 -1
  41. package/dist/components/actions/use-action.js +1 -1
  42. package/dist/components/actions/use-anchored-menu.js +1 -1
  43. package/dist/components/actions/use-context-menu.js +1 -1
  44. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  45. package/dist/components/content/Alert/Alert.js +1 -1
  46. package/dist/components/content/Alert/use-alert.js +1 -1
  47. package/dist/components/content/Avatar/Avatar.js +1 -1
  48. package/dist/components/content/Badge/Badge.js +1 -1
  49. package/dist/components/content/Card/Card.js +1 -1
  50. package/dist/components/content/Content.js +1 -1
  51. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  52. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  53. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  54. package/dist/components/content/Divider.js +1 -1
  55. package/dist/components/content/Footer.js +1 -1
  56. package/dist/components/content/Header.js +1 -1
  57. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  58. package/dist/components/content/Item/Item.js +1 -1
  59. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  60. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  61. package/dist/components/content/Layout/GridLayout.js +1 -1
  62. package/dist/components/content/Layout/Layout.js +1 -1
  63. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  64. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  65. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  66. package/dist/components/content/Layout/LayoutContent.js +1 -1
  67. package/dist/components/content/Layout/LayoutContext.js +1 -1
  68. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  69. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  70. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  71. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  72. package/dist/components/content/Layout/LayoutPane.js +1 -1
  73. package/dist/components/content/Layout/LayoutPanel.js +5 -1
  74. package/dist/components/content/Layout/LayoutPanel.js.map +1 -1
  75. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  76. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  77. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  78. package/dist/components/content/Layout/index.js +1 -1
  79. package/dist/components/content/Layout/utils.js +1 -1
  80. package/dist/components/content/Paragraph.js +1 -1
  81. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  82. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  83. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  84. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  85. package/dist/components/content/Result/Result.js +1 -1
  86. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  87. package/dist/components/content/Tag/Tag.js +1 -1
  88. package/dist/components/content/Text.js +1 -1
  89. package/dist/components/content/TextItem/TextItem.js +1 -1
  90. package/dist/components/content/Title.js +1 -1
  91. package/dist/components/content/highlightText.js +1 -1
  92. package/dist/components/content/use-auto-tooltip.js +1 -1
  93. package/dist/components/fields/Checkbox/Checkbox.js +2 -2
  94. package/dist/components/fields/Checkbox/Checkbox.js.map +1 -1
  95. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  96. package/dist/components/fields/Checkbox/context.js +1 -1
  97. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  98. package/dist/components/fields/DatePicker/DateInput.d.ts +4 -4
  99. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  100. package/dist/components/fields/DatePicker/DateInput.js.map +1 -1
  101. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  102. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  103. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  104. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  105. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  106. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  107. package/dist/components/fields/DatePicker/DateRangePicker.d.ts +4 -4
  108. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  109. package/dist/components/fields/DatePicker/DateRangePicker.js.map +1 -1
  110. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  111. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  112. package/dist/components/fields/DatePicker/intl.js +1 -1
  113. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  114. package/dist/components/fields/DatePicker/props.js +1 -1
  115. package/dist/components/fields/DatePicker/utils.js +1 -1
  116. package/dist/components/fields/FileInput/FileInput.js +1 -1
  117. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  118. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  119. package/dist/components/fields/Input/Input.js +1 -1
  120. package/dist/components/fields/ListBox/ListBox.js +1 -1
  121. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  122. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  123. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  124. package/dist/components/fields/Picker/Picker.js +1 -1
  125. package/dist/components/fields/Picker/Picker.js.map +1 -1
  126. package/dist/components/fields/RadioGroup/Radio.d.ts +1 -0
  127. package/dist/components/fields/RadioGroup/Radio.js +5 -8
  128. package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
  129. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  130. package/dist/components/fields/RadioGroup/context.js +1 -1
  131. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  132. package/dist/components/fields/Select/Select.d.ts +1 -1
  133. package/dist/components/fields/Select/Select.js +1 -1
  134. package/dist/components/fields/Slider/Gradation.js +1 -1
  135. package/dist/components/fields/Slider/HueSlider.js +1 -1
  136. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  137. package/dist/components/fields/Slider/Slider.js +1 -1
  138. package/dist/components/fields/Slider/SliderBase.js +1 -1
  139. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  140. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  141. package/dist/components/fields/Slider/elements.js +1 -1
  142. package/dist/components/fields/Slider/index.js +1 -1
  143. package/dist/components/fields/Switch/Switch.js +1 -1
  144. package/dist/components/fields/TextArea/TextArea.js +1 -1
  145. package/dist/components/fields/TextInput/TextInput.js +1 -1
  146. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  147. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  148. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  149. package/dist/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  150. package/dist/components/form/Form/Field.js +1 -1
  151. package/dist/components/form/Form/Form.js +1 -1
  152. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  153. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  154. package/dist/components/form/Form/SubmitError.js +1 -1
  155. package/dist/components/form/Form/index.js +1 -1
  156. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  157. package/dist/components/form/Form/use-field/use-field.js +1 -1
  158. package/dist/components/form/Form/use-form.js +1 -1
  159. package/dist/components/form/Form/validation.js +1 -1
  160. package/dist/components/form/Label.js +1 -1
  161. package/dist/components/form/wrapper.js +1 -1
  162. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  163. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  164. package/dist/components/layout/Flex.js +1 -1
  165. package/dist/components/layout/Flow.js +1 -1
  166. package/dist/components/layout/Grid.js +1 -1
  167. package/dist/components/layout/Grid.js.map +1 -1
  168. package/dist/components/layout/Panel.js +1 -1
  169. package/dist/components/layout/Prefix.js +1 -1
  170. package/dist/components/layout/ResizablePanel.js +1 -1
  171. package/dist/components/layout/Space.js +1 -1
  172. package/dist/components/layout/Suffix.js +1 -1
  173. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  174. package/dist/components/navigation/Tabs/EditableTitle.js +1 -1
  175. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  176. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  177. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  178. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  179. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  180. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  181. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  182. package/dist/components/navigation/Tabs/styled.js +1 -1
  183. package/dist/components/navigation/Tabs/types.d.ts +4 -2
  184. package/dist/components/navigation/Tabs/types.js +3 -2
  185. package/dist/components/navigation/Tabs/types.js.map +1 -1
  186. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  187. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  188. package/dist/components/organisms/FileTabs/FileTabs.js +1 -1
  189. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  190. package/dist/components/other/Calendar/Calendar.js +1 -1
  191. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  192. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  193. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  194. package/dist/components/other/CloudLogo/CloudLogo.js +1 -1
  195. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  196. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  197. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  198. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  199. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  200. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  201. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  202. package/dist/components/overlays/Dialog/context.js +1 -1
  203. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  204. package/dist/components/overlays/Modal/Modal.js +1 -1
  205. package/dist/components/overlays/Modal/OpenTransition.js +1 -1
  206. package/dist/components/overlays/Modal/Overlay.js +1 -1
  207. package/dist/components/overlays/Modal/Popover.js +1 -1
  208. package/dist/components/overlays/Modal/Tray.js +1 -1
  209. package/dist/components/overlays/Modal/Underlay.js +1 -1
  210. package/dist/components/overlays/Notifications/Notification.js +1 -1
  211. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  212. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  213. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  214. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  215. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  216. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  217. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  218. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  219. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  220. package/dist/components/overlays/Notifications/index.js +1 -1
  221. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  222. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  223. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  224. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  225. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  226. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  227. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  228. package/dist/components/overlays/Toast/index.js +1 -1
  229. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  230. package/dist/components/overlays/Toast/useToast.js +1 -1
  231. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  232. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  233. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  234. package/dist/components/overlays/Tooltip/context.js +1 -1
  235. package/dist/components/portal/Portal.js +1 -1
  236. package/dist/components/portal/PortalProvider.js +1 -1
  237. package/dist/components/portal/usePortal.js +1 -1
  238. package/dist/components/shared/InvalidIcon.js +1 -1
  239. package/dist/components/shared/ValidIcon.js +1 -1
  240. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  241. package/dist/components/status/Spin/Cube.js +1 -1
  242. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  243. package/dist/components/status/Spin/Spin.js +1 -1
  244. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  245. package/dist/data/item-themes.js +1 -1
  246. package/dist/data/themes.js +1 -1
  247. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  248. package/dist/icons/AdjustmentsIcon.js +1 -1
  249. package/dist/icons/AiIcon.js +1 -1
  250. package/dist/icons/AreaChartIcon.js +1 -1
  251. package/dist/icons/BackwardIcon.js +1 -1
  252. package/dist/icons/BarChartIcon.js +1 -1
  253. package/dist/icons/BellFilledIcon.js +1 -1
  254. package/dist/icons/BellIcon.js +1 -1
  255. package/dist/icons/BooleanIcon.js +1 -1
  256. package/dist/icons/CalendarEditIcon.js +1 -1
  257. package/dist/icons/CalendarIcon.js +1 -1
  258. package/dist/icons/CaretDownIcon.js +1 -1
  259. package/dist/icons/CaretUpIcon.js +1 -1
  260. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  261. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  262. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  263. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  264. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  265. package/dist/icons/ChartBarLineIcon.js +1 -1
  266. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  267. package/dist/icons/ChartBarStackedIcon.js +1 -1
  268. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  269. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  270. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  271. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  272. package/dist/icons/ChartBubbleIcon.js +1 -1
  273. package/dist/icons/ChartDonut2Icon.js +1 -1
  274. package/dist/icons/ChartFunnelIcon.js +1 -1
  275. package/dist/icons/ChartHeatmapIcon.js +1 -1
  276. package/dist/icons/ChartKPIIcon.js +1 -1
  277. package/dist/icons/ChartPie2Icon.js +1 -1
  278. package/dist/icons/ChartScatterIcon.js +1 -1
  279. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  280. package/dist/icons/CheckCircleIcon.js +1 -1
  281. package/dist/icons/CheckIcon.js +1 -1
  282. package/dist/icons/CircleFilledIcon.js +1 -1
  283. package/dist/icons/ClearIcon.js +1 -1
  284. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  285. package/dist/icons/CloseCircleIcon.js +1 -1
  286. package/dist/icons/CloseIcon.js +1 -1
  287. package/dist/icons/CodeIcon.js +1 -1
  288. package/dist/icons/ColumnTotalIcon.js +1 -1
  289. package/dist/icons/CopyIcon.js +1 -1
  290. package/dist/icons/CountIcon.js +1 -1
  291. package/dist/icons/CubeIcon.js +1 -1
  292. package/dist/icons/CubePauseIcon.js +1 -1
  293. package/dist/icons/CubePlayIcon.js +1 -1
  294. package/dist/icons/CurrencyDollarIcon.js +1 -1
  295. package/dist/icons/DangerIcon.js +1 -1
  296. package/dist/icons/DashboardIcon.js +1 -1
  297. package/dist/icons/DatabaseIcon.js +1 -1
  298. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  299. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  300. package/dist/icons/DirectionIcon.js +1 -1
  301. package/dist/icons/DonutIcon.js +1 -1
  302. package/dist/icons/DownIcon.js +1 -1
  303. package/dist/icons/EditIcon.js +1 -1
  304. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  305. package/dist/icons/ExclamationCircleIcon.js +1 -1
  306. package/dist/icons/ExclamationIcon.js +1 -1
  307. package/dist/icons/EyeIcon.js +1 -1
  308. package/dist/icons/EyeInvisibleIcon.js +1 -1
  309. package/dist/icons/FilterIcon.js +1 -1
  310. package/dist/icons/FolderFilledIcon.js +1 -1
  311. package/dist/icons/FolderIcon.js +1 -1
  312. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  313. package/dist/icons/FolderOpenIcon.js +1 -1
  314. package/dist/icons/ForwardIcon.js +1 -1
  315. package/dist/icons/HierarchyIcon.js +1 -1
  316. package/dist/icons/HierarchyOpenIcon.js +1 -1
  317. package/dist/icons/Icon.js +1 -1
  318. package/dist/icons/InfoCircleIcon.js +1 -1
  319. package/dist/icons/InfoIcon.js +1 -1
  320. package/dist/icons/KeyIcon.js +1 -1
  321. package/dist/icons/LeftIcon.js +1 -1
  322. package/dist/icons/LineChartIcon.js +1 -1
  323. package/dist/icons/LoadingIcon.js +1 -1
  324. package/dist/icons/LockFilledIcon.js +1 -1
  325. package/dist/icons/LockIcon.js +1 -1
  326. package/dist/icons/MoreIcon.js +1 -1
  327. package/dist/icons/NotAllowedIcon.js +1 -1
  328. package/dist/icons/Number123Icon.js +1 -1
  329. package/dist/icons/NumberIcon.js +1 -1
  330. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  331. package/dist/icons/PauseCircleIcon.js +1 -1
  332. package/dist/icons/PauseIcon.js +1 -1
  333. package/dist/icons/PercentageIcon.js +1 -1
  334. package/dist/icons/PieChartIcon.js +1 -1
  335. package/dist/icons/PlayCircleIcon.js +1 -1
  336. package/dist/icons/PlayIcon.js +1 -1
  337. package/dist/icons/PlusIcon.js +1 -1
  338. package/dist/icons/ProgressBarIcon.js +1 -1
  339. package/dist/icons/ReloadIcon.js +1 -1
  340. package/dist/icons/ReportIcon.js +1 -1
  341. package/dist/icons/ReturnIcon.js +1 -1
  342. package/dist/icons/RightIcon.js +1 -1
  343. package/dist/icons/RowTotalsIcon.js +1 -1
  344. package/dist/icons/SchemeIcon.js +1 -1
  345. package/dist/icons/SearchIcon.js +1 -1
  346. package/dist/icons/SemanticQueryIcon.js +1 -1
  347. package/dist/icons/SettingsIcon.js +1 -1
  348. package/dist/icons/ShieldFilledIcon.js +1 -1
  349. package/dist/icons/ShieldIcon.js +1 -1
  350. package/dist/icons/SlashIcon.js +1 -1
  351. package/dist/icons/SparklesIcon.js +1 -1
  352. package/dist/icons/SqlIcon.js +1 -1
  353. package/dist/icons/StatsIcon.js +1 -1
  354. package/dist/icons/StopIcon.js +1 -1
  355. package/dist/icons/StringIcon.js +1 -1
  356. package/dist/icons/SubtotalsIcon.js +1 -1
  357. package/dist/icons/SwitchIcon.js +1 -1
  358. package/dist/icons/TableIcon.js +1 -1
  359. package/dist/icons/ThumbsDownIcon.js +1 -1
  360. package/dist/icons/ThumbsUpIcon.js +1 -1
  361. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  362. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  363. package/dist/icons/ThunderboltIcon.js +1 -1
  364. package/dist/icons/TimeIcon.js +1 -1
  365. package/dist/icons/TrashIcon.js +1 -1
  366. package/dist/icons/UnlockIcon.js +1 -1
  367. package/dist/icons/UpIcon.js +1 -1
  368. package/dist/icons/UserGroupIcon.js +1 -1
  369. package/dist/icons/UserIcon.js +1 -1
  370. package/dist/icons/UserLockIcon.js +1 -1
  371. package/dist/icons/ViewIcon.js +1 -1
  372. package/dist/icons/WarningFilledIcon.js +1 -1
  373. package/dist/icons/WarningIcon.js +1 -1
  374. package/dist/icons/wrap-icon.js +1 -1
  375. package/dist/index.d.ts +2 -2
  376. package/dist/index.js +1 -1
  377. package/dist/provider.js +1 -1
  378. package/dist/providers/TrackingProvider.js +1 -1
  379. package/dist/providers/navigationAdapter.default.js +1 -1
  380. package/dist/tokens/base.js +1 -1
  381. package/dist/tokens/colors.js +1 -1
  382. package/dist/tokens/index.d.ts +1 -1
  383. package/dist/tokens/index.js +1 -1
  384. package/dist/tokens/index.js.map +1 -1
  385. package/dist/tokens/layout.js +1 -1
  386. package/dist/tokens/shadows.js +1 -1
  387. package/dist/tokens/sizes.js +1 -1
  388. package/dist/tokens/spacing.js +1 -1
  389. package/dist/tokens/typography.d.ts +1 -1
  390. package/dist/tokens/typography.js +1 -1
  391. package/dist/utils/ResizeSensor.js +1 -1
  392. package/dist/utils/is-dev-env.js +1 -1
  393. package/dist/utils/modules.js +1 -1
  394. package/dist/utils/promise.js +1 -1
  395. package/dist/utils/raf.js +1 -1
  396. package/dist/utils/random.js +1 -1
  397. package/dist/utils/range.js +1 -1
  398. package/dist/utils/react/RenderCache.js +1 -1
  399. package/dist/utils/react/Slots.js +1 -1
  400. package/dist/utils/react/chain.js +1 -1
  401. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  402. package/dist/utils/react/index.js +1 -1
  403. package/dist/utils/react/interactions.js +1 -1
  404. package/dist/utils/react/isTextOnly.js +1 -1
  405. package/dist/utils/react/mapProps.js +1 -1
  406. package/dist/utils/react/mergeProps.js +1 -1
  407. package/dist/utils/react/nullableValue.js +1 -1
  408. package/dist/utils/react/resolveIcon.js +1 -1
  409. package/dist/utils/react/sharedStore.js +1 -1
  410. package/dist/utils/react/useCombinedRefs.js +1 -1
  411. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  412. package/dist/utils/react/useEventBus.js +1 -1
  413. package/dist/utils/react/useId.js +1 -1
  414. package/dist/utils/react/useIsDarwin.js +1 -1
  415. package/dist/utils/react/useKeySymbols.js +1 -1
  416. package/dist/utils/react/useLayoutEffect.js +1 -1
  417. package/dist/utils/react/useLocalStorage.js +1 -1
  418. package/dist/utils/react/useMergeStyles.js +1 -1
  419. package/dist/utils/react/useQaProps.js +1 -1
  420. package/dist/utils/react/useViewportSize.js +1 -1
  421. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  422. package/dist/utils/selection.js +1 -1
  423. package/dist/utils/styles.d.ts +1 -1
  424. package/dist/utils/styles.js +5 -4
  425. package/dist/utils/styles.js.map +1 -1
  426. package/dist/utils/tree.js +1 -1
  427. package/dist/utils/warnings.js +1 -1
  428. package/dist/version.js +2 -2
  429. package/docs/components/fields/ComboBox.md +27 -0
  430. package/docs/components/fields/FilterListBox.md +25 -0
  431. package/docs/components/fields/FilterPicker.md +34 -0
  432. package/docs/components/fields/ListBox.md +38 -8
  433. package/docs/components/fields/Picker.md +25 -0
  434. package/docs/components/fields/Select.md +2 -0
  435. package/docs/components/navigation/Tabs.md +2 -2
  436. package/docs/tasty/README.md +4 -4
  437. package/docs/tasty/adoption.md +5 -3
  438. package/docs/tasty/comparison.md +24 -25
  439. package/docs/tasty/configuration.md +69 -1
  440. package/docs/tasty/debug.md +11 -9
  441. package/docs/tasty/design-system.md +22 -10
  442. package/docs/tasty/dsl.md +23 -8
  443. package/docs/tasty/getting-started.md +10 -10
  444. package/docs/tasty/injector.md +41 -25
  445. package/docs/tasty/methodology.md +52 -3
  446. package/docs/tasty/{PIPELINE.md → pipeline.md} +204 -50
  447. package/docs/tasty/{runtime.md → react-api.md} +104 -32
  448. package/docs/tasty/ssr.md +139 -81
  449. package/docs/tasty/styles.md +17 -0
  450. package/docs/tasty/tasty-static.md +101 -2
  451. package/package.json +2 -2
package/docs/tasty/ssr.md CHANGED
@@ -18,16 +18,16 @@ The Astro integration (`@tenphi/tasty/ssr/astro`) has no additional dependencies
18
18
 
19
19
  ## How It Works
20
20
 
21
- When the environment can execute runtime React code during server rendering, the same `tasty()` and `useStyles()` calls can run there too. In Next.js, generic React SSR, and Astro islands, Tasty simply changes where that runtime-generated CSS goes: `useStyles()` detects a `ServerStyleCollector` and collects CSS into it instead of trying to access the DOM. The collector accumulates all styles, serializes them as `<style>` tags and a cache state script in the HTML. On the client, `hydrateTastyCache()` pre-populates the injector cache so that `useStyles()` skips the rendering pipeline entirely during hydration.
21
+ `tasty()` components are hook-free and use `computeStyles()` internally a synchronous, framework-agnostic function. On the server, `computeStyles()` discovers a `ServerStyleCollector` via a registered getter (module-level for Next.js, `globalThis` for Astro/generic frameworks using `AsyncLocalStorage`) and collects CSS into it instead of trying to access the DOM. On the client, CSS is injected synchronously into the DOM during render; the injector's content-based cache makes this idempotent. The collector accumulates all styles, serializes them as `<style>` tags and a cache state script in the HTML. On the client, `hydrateTastyCache()` pre-populates the injector cache so that `computeStyles()` skips the rendering pipeline entirely during hydration.
22
22
 
23
23
  ```
24
24
  Server Client
25
25
  ────── ──────
26
26
  tasty() renders hydrateTastyCache() pre-populates cache
27
- └─ useStyles() └─ cacheKey → className map ready
27
+ └─ computeStyles() └─ cacheKey → className map ready
28
28
  └─ collector.collect()
29
29
  tasty() renders
30
- After render: └─ useStyles()
30
+ After render: └─ computeStyles()
31
31
  <style data-tasty-ssr> └─ cache hit → skip pipeline
32
32
  <script data-tasty-cache> └─ no CSS re-injection
33
33
  ```
@@ -82,15 +82,21 @@ That's it. All `tasty()` components inside the tree automatically get SSR suppor
82
82
 
83
83
  ### How it works
84
84
 
85
- - `TastyRegistry` is a `'use client'` component, but Next.js still server-renders it on initial page load.
86
- - During SSR, `useStyles()` finds the collector via React context and pushes CSS rules to it.
87
- - `TastyRegistry` uses `useServerInsertedHTML` to flush collected CSS into the HTML stream as `<style data-tasty-ssr>` tags. This is fully streaming-compatible -- styles are injected alongside each Suspense boundary as it resolves.
88
- - A companion `<script>` tag transfers the `cacheKey → className` mapping to the client.
89
- - When the module loads on the client, `hydrateTastyCache()` runs automatically and pre-populates the injector cache. During hydration, `useStyles()` hits the cache and skips the entire pipeline.
85
+ - `TastyRegistry` is a `'use client'` component, but Next.js still server-renders it on initial page load. The `'use client'` boundary is required solely to access `useServerInsertedHTML` — **not** because `tasty()` components need the client.
86
+ - During SSR, `TastyRegistry` creates a `ServerStyleCollector` and registers it via a module-level getter (not `globalThis` — this avoids leaking between Next.js's separate RSC and SSR module graphs). It also wraps children in a React context provider so that hooks inside the SSR tree can discover the collector. All style functions — `tasty()` components, `computeStyles()`, `useStyles()`, `useGlobalStyles()`, `useRawCSS()`, `useKeyframes()`, `useProperty()`, `useFontFace()`, and `useCounterStyle()` discover the collector through the module-level getter or context provider.
87
+ - `TastyRegistry` uses `useServerInsertedHTML` to flush collected CSS into the HTML stream as `<style data-tasty-ssr>` tags. This is fully streaming-compatible styles are injected alongside each Suspense boundary as it resolves.
88
+ - A companion inline `<script>` tag merges the `cacheKey → className` mapping into `window.__TASTY_SSR_CACHE__` for each flush. This streaming-friendly approach accumulates cache entries incrementally as Suspense boundaries resolve.
89
+ - When the `@tenphi/tasty/ssr/next` module loads on the client, `hydrateTastyCache()` runs automatically from `window.__TASTY_SSR_CACHE__` and pre-populates the injector cache. During hydration, `computeStyles()` hits the cache and skips the entire pipeline.
90
90
 
91
- ### Using tasty() in Server Components
91
+ ### Using Tasty in Server Components
92
92
 
93
- `tasty()` components use React hooks internally, so they require `'use client'`. However, this does **not** prevent them from being used in Server Component pages. In Next.js, `'use client'` components are still server-rendered on initial load. Dynamic `styleProps` like `<Grid flow="column">` work normally when a `tasty()` component is imported into a Server Component page.
93
+ All Tasty style functions are hook-free and do not require `'use client'`. They can be used directly in React Server Components:
94
+
95
+ - `tasty()` components — dynamic `styleProps` like `<Grid flow="column">` work normally
96
+ - `useStyles()`, `useGlobalStyles()`, `useRawCSS()` — inject styles by class or selector
97
+ - `useKeyframes()`, `useProperty()`, `useFontFace()`, `useCounterStyle()` — inject ancillary CSS rules
98
+
99
+ During SSR, all functions discover the collector via the same global getter registered by `TastyRegistry` — no React context or client boundary needed. In RSC mode without a collector (e.g., Astro zero-setup), CSS is accumulated in a per-request cache and flushed into an inline `<style>` tag by the next `tasty()` component in the tree. Ensure at least one `tasty()` component is present in every RSC render tree — standalone style functions alone cannot emit their CSS without a `tasty()` component to trigger the flush.
94
100
 
95
101
  ### Options
96
102
 
@@ -116,18 +122,17 @@ The nonce is automatically applied to all `<style>` and `<script>` tags injected
116
122
 
117
123
  ## Astro
118
124
 
119
- ### 1. Add the middleware
120
-
121
- Create or update your Astro middleware:
125
+ Tasty offers three levels of Astro integration. Choose the one that matches your needs:
122
126
 
123
- ```ts
124
- // src/middleware.ts
125
- import { tastyMiddleware } from '@tenphi/tasty/ssr/astro';
127
+ | Setup | Config needed | Deduplication | Hooks work | Client JS |
128
+ |---|---|---|---|---|
129
+ | Zero setup | None | Per render tree | Yes (within each tree) | None |
130
+ | `tastyIntegration({ islands: false })` | One line | Cross-tree | Yes | None |
131
+ | `tastyIntegration()` | One line | Cross-tree | Yes | Auto-hydration |
126
132
 
127
- export const onRequest = tastyMiddleware();
128
- ```
133
+ ### Zero setup (static pages)
129
134
 
130
- ### 2. Use tasty() components as normal
135
+ `tasty()` components work in Astro with **no configuration**. Each component emits its own inline `<style>` tag during server rendering via the RSC inline path. Just import and use:
131
136
 
132
137
  ```tsx
133
138
  // src/components/Card.tsx
@@ -153,56 +158,123 @@ import Card from '../components/Card.tsx';
153
158
 
154
159
  <html>
155
160
  <body>
156
- <Card>Static card styles collected by middleware</Card>
157
- <Card client:load>Island card — styles hydrated on client</Card>
161
+ <Card>Styled with zero setup</Card>
158
162
  </body>
159
163
  </html>
160
164
  ```
161
165
 
162
- ### How it works
166
+ **Trade-offs**: Styles are deduplicated within each React render tree, but Astro renders separate component trees independently, so shared CSS (tokens, `@property` rules) may appear more than once. All style functions (`useGlobalStyles`, `useRawCSS`, `useKeyframes`, `useProperty`, `useFontFace`, `useCounterStyle`) work in zero-setup mode — their CSS is accumulated in the RSC cache and flushed by the next `tasty()` component in the tree.
163
167
 
164
- Astro's `@astrojs/react` renderer calls `renderToString()` for each React component without wrapping the tree in a provider. The middleware uses `AsyncLocalStorage` to make the collector available to all `useStyles()` calls within the request.
168
+ Best for quick prototyping, small static sites, or trying Tasty out in Astro.
165
169
 
166
- - **Static components** (no `client:*`): Styles are collected during `renderToString` and injected into `</head>`. No JavaScript is shipped for these components.
167
- - **Islands** (`client:load`, `client:visible`, etc.): Styles are collected during SSR the same way. On the client, importing `@tenphi/tasty/ssr/astro` auto-hydrates the cache from `<script data-tasty-cache>`. The island's `useStyles()` calls hit the cache during hydration.
170
+ ### Astro Integration (recommended)
168
171
 
169
- ### Client-side hydration for islands
172
+ For production use, add `tastyIntegration()` to your Astro config. This registers middleware automatically and, by default, injects client-side hydration for islands.
170
173
 
171
- The `@tenphi/tasty/ssr/astro` module auto-hydrates when imported on the client. To ensure the cache is warm before any island renders, import it in a shared entry point or in each island component:
174
+ #### With islands (default)
172
175
 
173
- ```tsx
174
- // src/components/MyIsland.tsx
175
- import '@tenphi/tasty/ssr/astro'; // auto-hydrates cache on import
176
- import { tasty } from '@tenphi/tasty';
176
+ ```ts
177
+ // astro.config.mjs
178
+ import { defineConfig } from 'astro/config';
179
+ import react from '@astrojs/react';
180
+ import { tastyIntegration } from '@tenphi/tasty/ssr/astro';
177
181
 
178
- const MyIsland = tasty({
179
- styles: { padding: '2x', fill: '#blue' },
182
+ export default defineConfig({
183
+ integrations: [react(), tastyIntegration()],
180
184
  });
185
+ ```
186
+
187
+ This gives you:
188
+
189
+ - A `ServerStyleCollector` per request via `AsyncLocalStorage`, deduplicating CSS across all React trees on the page
190
+ - A single consolidated `<style data-tasty-ssr>` injected into `</head>`
191
+ - A `<script data-tasty-cache>` tag with the `cacheKey -> className` map for client hydration
192
+ - Auto-injected client hydration script (via `injectScript('before-hydration')`) so islands skip the style pipeline during hydration -- no need to import anything manually in each island component
193
+
194
+ All style functions (`useGlobalStyles`, `useRawCSS`, `useKeyframes`, `useProperty`, `useFontFace`, `useCounterStyle`) work on the server.
195
+
196
+ ```astro
197
+ ---
198
+ // src/pages/index.astro
199
+ import Card from '../components/Card.tsx';
200
+ import Interactive from '../components/Interactive.tsx';
201
+ ---
181
202
 
182
- export default MyIsland;
203
+ <html>
204
+ <body>
205
+ <Card>Static -- styles in <style data-tasty-ssr></Card>
206
+ <Interactive client:load>Island -- cache hydrated automatically</Interactive>
207
+ </body>
208
+ </html>
183
209
  ```
184
210
 
185
- ### Options
211
+ #### Static only (no client JS)
212
+
213
+ If your site has no `client:*` islands, skip the hydration script and cache transfer:
214
+
215
+ ```ts
216
+ // astro.config.mjs
217
+ import { defineConfig } from 'astro/config';
218
+ import react from '@astrojs/react';
219
+ import { tastyIntegration } from '@tenphi/tasty/ssr/astro';
220
+
221
+ export default defineConfig({
222
+ integrations: [react(), tastyIntegration({ islands: false })],
223
+ });
224
+ ```
225
+
226
+ This gives the same middleware deduplication and hook support, but ships zero client-side JavaScript. No `<script data-tasty-cache>` is emitted.
227
+
228
+ ### Manual middleware (advanced)
229
+
230
+ If you need to compose Tasty's middleware with other middleware (e.g., via `sequence()`), use `tastyMiddleware()` directly:
231
+
232
+ ```ts
233
+ // src/middleware.ts
234
+ import { sequence } from 'astro:middleware';
235
+ import { tastyMiddleware } from '@tenphi/tasty/ssr/astro';
236
+
237
+ export const onRequest = sequence(
238
+ tastyMiddleware(),
239
+ myOtherMiddleware,
240
+ );
241
+ ```
242
+
243
+ For island hydration with manual middleware, import the client module in a shared entry point or in each island:
244
+
245
+ ```tsx
246
+ import '@tenphi/tasty/ssr/astro-client';
247
+ ```
248
+
249
+ #### Options
186
250
 
187
251
  ```ts
188
- // Skip cache state transfer
252
+ // Skip cache state transfer (static-only, no islands)
189
253
  export const onRequest = tastyMiddleware({ transferCache: false });
190
254
  ```
191
255
 
256
+ ### How it works
257
+
258
+ Astro's `@astrojs/react` renderer calls `renderToString()` for each React component without wrapping the tree in a provider. The middleware creates a `ServerStyleCollector` and binds it via `AsyncLocalStorage`. All `computeStyles()` calls within the request discover this collector automatically.
259
+
260
+ - **Static components** (no `client:*`): Styles are collected during `renderToString` and injected into `</head>` as a single `<style>` tag. No JavaScript is shipped.
261
+ - **Islands** (`client:load`, `client:visible`, etc.): Styles are collected during SSR the same way. On the client, the hydration script (auto-injected by `tastyIntegration()` or manually via `@tenphi/tasty/ssr/astro-client`) reads the cache state from `<script data-tasty-cache>` and pre-populates the injector. The island's `computeStyles()` calls hit the cache during hydration.
262
+ - The middleware reads the full response body, then injects the collected CSS into `</head>` before sending the final HTML.
263
+
192
264
  ### CSP nonce
193
265
 
194
- Same as Next.js -- call `configure({ nonce: '...' })` before any rendering happens. The middleware reads the nonce and applies it to injected tags.
266
+ Call `configure({ nonce: '...' })` before any rendering happens. The middleware reads the nonce and applies it to injected `<style>` and `<script>` tags.
195
267
 
196
268
  ---
197
269
 
198
270
  ## Generic Framework Integration
199
271
 
200
- Any React-based framework can integrate using the core SSR API:
272
+ Any React-based framework can integrate using `runWithCollector`, which binds a `ServerStyleCollector` to the current async context via `AsyncLocalStorage`. All style function calls within the render automatically discover the collector.
201
273
 
202
274
  ```tsx
203
275
  import {
204
276
  ServerStyleCollector,
205
- TastySSRContext,
277
+ runWithCollector,
206
278
  hydrateTastyCache,
207
279
  } from '@tenphi/tasty/ssr';
208
280
  import { renderToString } from 'react-dom/server';
@@ -212,10 +284,8 @@ import { hydrateRoot } from 'react-dom/client';
212
284
 
213
285
  const collector = new ServerStyleCollector();
214
286
 
215
- const html = renderToString(
216
- <TastySSRContext.Provider value={collector}>
217
- <App />
218
- </TastySSRContext.Provider>
287
+ const html = await runWithCollector(collector, () =>
288
+ renderToString(<App />)
219
289
  );
220
290
 
221
291
  const css = collector.getCSS();
@@ -251,11 +321,8 @@ For streaming with `renderToPipeableStream`, use `flushCSS()` instead of `getCSS
251
321
  ```tsx
252
322
  const collector = new ServerStyleCollector();
253
323
 
254
- const stream = renderToPipeableStream(
255
- <TastySSRContext.Provider value={collector}>
256
- <App />
257
- </TastySSRContext.Provider>,
258
- {
324
+ const stream = await runWithCollector(collector, () =>
325
+ renderToPipeableStream(<App />, {
259
326
  onShellReady() {
260
327
  // Flush styles collected so far
261
328
  const css = collector.flushCSS();
@@ -270,29 +337,8 @@ const stream = renderToPipeableStream(
270
337
  const state = collector.getCacheState();
271
338
  res.write(`<script data-tasty-cache type="application/json">${JSON.stringify(state)}</script>`);
272
339
  },
273
- }
274
- );
275
- ```
276
-
277
- ### AsyncLocalStorage (no React context)
278
-
279
- If your framework doesn't support wrapping the React tree with a provider, use `runWithCollector`:
280
-
281
- ```tsx
282
- import {
283
- ServerStyleCollector,
284
- runWithCollector,
285
- hydrateTastyCache,
286
- } from '@tenphi/tasty/ssr';
287
-
288
- const collector = new ServerStyleCollector();
289
-
290
- const html = await runWithCollector(collector, () =>
291
- renderToString(<App />)
340
+ })
292
341
  );
293
-
294
- const css = collector.getCSS();
295
- // ... inject into HTML as above
296
342
  ```
297
343
 
298
344
  ---
@@ -303,9 +349,10 @@ const css = collector.getCSS();
303
349
 
304
350
  | Import path | Description |
305
351
  |---|---|
306
- | `@tenphi/tasty/ssr` | Core SSR API: `ServerStyleCollector`, `TastySSRContext`, `runWithCollector`, `hydrateTastyCache` |
352
+ | `@tenphi/tasty/ssr` | Core SSR API: `ServerStyleCollector`, `runWithCollector`, `hydrateTastyCache` |
307
353
  | `@tenphi/tasty/ssr/next` | Next.js App Router: `TastyRegistry` component |
308
- | `@tenphi/tasty/ssr/astro` | Astro: `tastyMiddleware`, auto-hydration on import |
354
+ | `@tenphi/tasty/ssr/astro` | Astro: `tastyIntegration`, `tastyMiddleware` |
355
+ | `@tenphi/tasty/ssr/astro-client` | Astro: client-side cache hydration (auto-injected by integration, or import manually) |
309
356
 
310
357
  ### `ServerStyleCollector`
311
358
 
@@ -316,17 +363,18 @@ Server-safe style collector. One instance per request.
316
363
  | `allocateClassName(cacheKey)` | Allocate a sequential class name (`t0`, `t1`, ...) for a cache key. Returns `{ className, isNewAllocation }`. |
317
364
  | `collectChunk(cacheKey, className, rules)` | Record CSS rules for a chunk. Deduplicated by `cacheKey`. |
318
365
  | `collectKeyframes(name, css)` | Record a `@keyframes` rule. Deduplicated by name. |
366
+ | `allocateKeyframeName(providedName?)` | Allocate a keyframe name. Returns `providedName` if given, otherwise generates one (`k0`, `k1`, ...). |
319
367
  | `collectProperty(name, css)` | Record a `@property` rule. Deduplicated by name. |
320
368
  | `collectFontFace(key, css)` | Record a `@font-face` rule. Deduplicated by content hash. |
321
369
  | `collectCounterStyle(name, css)` | Record a `@counter-style` rule. Deduplicated by name. |
370
+ | `allocateCounterStyleName(providedName?)` | Allocate a counter-style name. Returns `providedName` if given, otherwise generates one (`cs0`, `cs1`, ...). |
371
+ | `collectGlobalStyles(key, css)` | Record global styles (from `useGlobalStyles`). Deduplicated by key. |
372
+ | `collectRawCSS(key, css)` | Record raw CSS text (from `useRawCSS`). Deduplicated by key. |
373
+ | `collectInternals()` | Collect internal `@property` rules, `:root` token defaults, `@font-face`, and `@counter-style` rules from the global config. Called automatically on first chunk collection; idempotent. |
322
374
  | `getCSS()` | Get all collected CSS as a single string. For non-streaming SSR. |
323
375
  | `flushCSS()` | Get only CSS collected since the last flush. For streaming SSR. |
324
376
  | `getCacheState()` | Serialize `{ entries: Record<cacheKey, className>, classCounter }` for client hydration. |
325
377
 
326
- ### `TastySSRContext`
327
-
328
- React context (`createContext<ServerStyleCollector | null>(null)`). Used by `useStyles()` to find the collector during SSR.
329
-
330
378
  ### `TastyRegistry`
331
379
 
332
380
  Next.js App Router component. Props:
@@ -336,9 +384,17 @@ Next.js App Router component. Props:
336
384
  | `children` | `ReactNode` | required | Application tree |
337
385
  | `transferCache` | `boolean` | `true` | Embed cache state script for zero-cost hydration |
338
386
 
387
+ ### `tastyIntegration(options?)`
388
+
389
+ Astro integration factory. Registers middleware and optionally injects client hydration.
390
+
391
+ | Option | Type | Default | Description |
392
+ |---|---|---|---|
393
+ | `islands` | `boolean` | `true` | When `true`, injects client hydration script and enables `transferCache`. When `false`, no client JS is shipped. |
394
+
339
395
  ### `tastyMiddleware(options?)`
340
396
 
341
- Astro middleware factory. Options:
397
+ Astro middleware factory. Use for manual middleware composition.
342
398
 
343
399
  | Option | Type | Default | Description |
344
400
  |---|---|---|---|
@@ -350,7 +406,7 @@ Pre-populate the client injector cache. When called without arguments, reads fro
350
406
 
351
407
  ### `runWithCollector(collector, fn)`
352
408
 
353
- Run a function with a `ServerStyleCollector` bound to the current async context via `AsyncLocalStorage`. All `useStyles()` calls within `fn` (and async continuations) will find this collector.
409
+ Run a function with a `ServerStyleCollector` bound to the current async context via `AsyncLocalStorage`. All style function calls within `fn` (and async continuations) — including `computeStyles()`, `useStyles()`, `useGlobalStyles()`, `useRawCSS()`, `useKeyframes()`, `useProperty()`, `useFontFace()`, and `useCounterStyle()` — will find this collector.
354
410
 
355
411
  ---
356
412
 
@@ -358,15 +414,17 @@ Run a function with a `ServerStyleCollector` bound to the current async context
358
414
 
359
415
  ### Styles flash on page load (FOUC)
360
416
 
361
- The `TastyRegistry` or `tastyMiddleware` is missing. Ensure your layout wraps the app with `TastyRegistry` (Next.js) or the middleware is registered (Astro).
417
+ The `TastyRegistry` or `tastyIntegration` is missing. Ensure your layout wraps the app with `TastyRegistry` (Next.js) or that `tastyIntegration()` is in your Astro config (or `tastyMiddleware()` is registered manually).
362
418
 
363
419
  ### Hydration mismatch warnings
364
420
 
365
- Class names are deterministic for the same render order. If you see mismatches, ensure `hydrateTastyCache()` runs before React hydration. For Next.js, this is automatic. For Astro, import `@tenphi/tasty/ssr/astro` in your island components. For custom setups, call `hydrateTastyCache()` before `hydrateRoot()`.
421
+ Class names are deterministic for the same render order. If you see mismatches, ensure `hydrateTastyCache()` runs before React hydration. For Next.js, this is automatic. For Astro with `tastyIntegration()`, this is also automatic. For manual Astro middleware setups, import `@tenphi/tasty/ssr/astro-client` in your island components. For custom setups, call `hydrateTastyCache()` before `hydrateRoot()`.
366
422
 
367
423
  ### Styles duplicated after hydration
368
424
 
369
- This is expected and harmless. SSR `<style data-tasty-ssr>` tags remain in the DOM. The client injector creates separate `<style>` elements for any new styles. SSR styles are never modified or removed by the client. If this is a concern for very large apps, call `cleanupSSRStyles()` after hydration:
425
+ **Global CSS** (`:root` tokens, `@property`, `globalStyles`, `@font-face`, `@counter-style`) configured via `configure()` is automatically deduplicated. When Tasty detects `<style data-tasty-ssr>` in the document, it skips client-side injection of globals that were already rendered by the SSR collector. This means `configure()` can be called with the full config on both server and client no `typeof window === 'undefined'` guard is needed.
426
+
427
+ **Component CSS**: SSR `<style data-tasty-ssr>` tags remain in the DOM. The client injector creates separate `<style>` elements for any new styles. SSR styles are never modified or removed by the client. If this is a concern for very large apps, call `cleanupSSRStyles()` after hydration:
370
428
 
371
429
  ```tsx
372
430
  import { hydrateTastyCache } from '@tenphi/tasty/ssr';
@@ -104,6 +104,8 @@ Element padding with directional modifiers and multi-group support. Use **comma-
104
104
 
105
105
  **Direction modifiers:** `top`, `right`, `bottom`, `left`
106
106
 
107
+ **Output modifier:** `longhand` — forces output as individual CSS longhand properties (`padding-top`, `padding-right`, `padding-bottom`, `padding-left`) instead of the `padding` shorthand. Useful when children need to selectively inherit individual directions.
108
+
107
109
  | Value | Effect |
108
110
  |-------|--------|
109
111
  | `"2x"` | All sides `2x` |
@@ -112,6 +114,7 @@ Element padding with directional modifiers and multi-group support. Use **comma-
112
114
  | `"1x left right"` | Left and right `1x`, top/bottom `0` |
113
115
  | `"1x, 2x top"` | All sides `1x`, then top overridden to `2x` |
114
116
  | `"1x, 2x top bottom"` | Left/right `1x`, top/bottom `2x` |
117
+ | `"2x longhand"` | All sides `2x`, output as 4 individual `padding-*` properties |
115
118
  | `true` | All sides `1x` |
116
119
  | Number | Converted to `px` |
117
120
 
@@ -129,6 +132,8 @@ Element margin. Same syntax, modifiers, and multi-group support as `padding`.
129
132
 
130
133
  **Direction modifiers:** `top`, `right`, `bottom`, `left`
131
134
 
135
+ **Output modifier:** `longhand` — forces output as individual CSS longhand properties (`margin-top`, etc.) instead of the `margin` shorthand.
136
+
132
137
  | Value | Effect |
133
138
  |-------|--------|
134
139
  | `"2x"` | All sides `2x` |
@@ -190,12 +195,15 @@ Positioning offsets with directional modifiers and multi-group support. Same dir
190
195
 
191
196
  **Direction modifiers:** `top`, `right`, `bottom`, `left`
192
197
 
198
+ **Output modifier:** `longhand` — forces output as individual CSS properties (`top`, `right`, `bottom`, `left`) instead of the `inset` shorthand.
199
+
193
200
  | Value | Effect |
194
201
  |-------|--------|
195
202
  | `"0"` | All sides `0` |
196
203
  | `"2x top"` | Top `2x`, right/bottom/left `auto` |
197
204
  | `"1x left right"` | Left and right `1x`, top/bottom `auto` |
198
205
  | `"0, 2x top"` | All sides `0`, then top overridden to `2x` |
206
+ | `"0 longhand"` | All sides `0`, output as individual `top`/`right`/`bottom`/`left` |
199
207
  | `true` | All sides `0` |
200
208
 
201
209
  Later comma-separated groups override earlier groups for conflicting directions.
@@ -281,12 +289,15 @@ Border shorthand with directional and multi-group support. Use **comma-separated
281
289
 
282
290
  **Direction modifiers:** `top`, `right`, `bottom`, `left`
283
291
 
292
+ **Output modifier:** `longhand` — forces output as individual CSS properties (`border-top`, `border-right`, `border-bottom`, `border-left`) instead of the `border` shorthand. Useful when children need to selectively inherit individual sides.
293
+
284
294
  | Value | Effect |
285
295
  |-------|--------|
286
296
  | `true` | Default border (`1bw solid #border`) on all sides |
287
297
  | `"2bw dashed #purple"` | All sides: 2bw dashed purple |
288
298
  | `"2bw top"` | Top only: 2bw solid `#border`, others: 0 |
289
299
  | `"dotted #danger left right"` | Left/right: 1bw dotted `#danger`, others: 0 |
300
+ | `"1bw longhand"` | All sides: 1bw solid `#border`, output as 4 individual `border-*` properties |
290
301
  | `"1bw #red, 2bw #blue top"` | All sides: 1bw solid `#red`, top overridden to 2bw solid `#blue` |
291
302
  | `"1bw, dashed top bottom, #purple left right"` | Base: 1bw solid `#border`, top/bottom: 1bw dashed `#border`, left/right: 1bw solid `#purple` |
292
303
 
@@ -306,9 +317,12 @@ Border radius with shape presets and directional modifiers.
306
317
  | `"ellipse"` | Circular (`50%`) |
307
318
  | `"leaf"` | Asymmetric: sharp, round, sharp, round |
308
319
  | `"backleaf"` | Asymmetric: round, sharp, round, sharp |
320
+ | `"inherit"` | Inherit border-radius from parent |
309
321
 
310
322
  **Direction modifiers:** `top`, `right`, `bottom`, `left` — rounds only the specified corners.
311
323
 
324
+ **Output modifier:** `longhand` — forces output as individual CSS longhand properties (`border-top-left-radius`, `border-top-right-radius`, `border-bottom-right-radius`, `border-bottom-left-radius`) instead of the `border-radius` shorthand. Useful when children need to selectively inherit individual corners via `radius: 'inherit left'`.
325
+
312
326
  | Value | Effect |
313
327
  |-------|--------|
314
328
  | `"2r"` | All corners `2r` |
@@ -317,6 +331,9 @@ Border radius with shape presets and directional modifiers.
317
331
  | `"1r top"` | Top-left and top-right `1r`, bottom-left and bottom-right `0` |
318
332
  | `"leaf"` | Alternating sharp/round corners (top-left `0`, top-right `1r`, bottom-right `0`, bottom-left `1r`) |
319
333
  | `"backleaf"` | Inverse leaf (top-left `1r`, top-right `0`, bottom-right `1r`, bottom-left `0`) |
334
+ | `"1r longhand"` | All corners `1r`, output as 4 individual `border-*-radius` properties |
335
+ | `"inherit"` | All corners inherit from parent (`border-radius: inherit`) |
336
+ | `"inherit right"` | Right corners inherit from parent (uses longhand properties) |
320
337
 
321
338
  ### `outline`
322
339
 
@@ -157,14 +157,27 @@ module.exports = {
157
157
  | Option | Type | Default | Description |
158
158
  |--------|------|---------|-------------|
159
159
  | `output` | `string` | `'tasty.css'` | Path for generated CSS file |
160
+ | `mode` | `'file' \| 'inject'` | `'file'` | `'file'` writes CSS to disk; `'inject'` embeds CSS inline in JS (see [Inject Mode](#inject-mode)) |
160
161
  | `configFile` | `string` | — | Absolute path to a TS/JS module that default-exports a `TastyZeroConfig` object. JSON-serializable alternative to `config` — required for Turbopack. |
161
162
  | `config` | `TastyZeroConfig \| () => TastyZeroConfig` | `{}` | Inline config object or factory function. Takes precedence over `configFile`. |
162
163
  | `configDeps` | `string[]` | `[]` | Absolute file paths that affect config (for cache invalidation) |
163
- | `config.states` | `Record<string, string>` | `{}` | Predefined state aliases |
164
+ | `injectImport` | `boolean` | `true` | Replace `@tenphi/tasty/static` imports with an import of the generated CSS file. Set to `false` to manage CSS imports manually. |
165
+ | `config.states` | `Record<string, string>` | `{}` | Predefined state aliases (e.g. `{ '@mobile': '@media(w < 768px)' }`) |
164
166
  | `config.devMode` | `boolean` | `false` | Add source comments to CSS |
167
+ | `config.tokens` | `ConfigTokens` | — | Design tokens injected as CSS custom properties on `:root`. Values are parsed through the Tasty DSL. Supports state maps for responsive/themed tokens. |
168
+ | `config.replaceTokens` | `Record<string, string \| number>` | — | Parse-time token substitution. Keys use `$name` for custom properties and `#name` for color tokens. |
165
169
  | `config.recipes` | `Record<string, RecipeStyles>` | `{}` | Predefined style recipes |
170
+ | `config.keyframes` | `Record<string, KeyframesSteps>` | — | Global `@keyframes` definitions available to all `tastyStatic` calls |
166
171
  | `config.fontFace` | `Record<string, FontFaceInput>` | — | Global `@font-face` definitions |
167
172
  | `config.counterStyle` | `Record<string, CounterStyleDescriptors>` | — | Global `@counter-style` definitions |
173
+ | `config.units` | `Record<string, string \| UnitHandler>` | — | Custom units for the style parser (merged with built-ins). E.g. `{ em: 'em', vw: 'vw' }` |
174
+ | `config.funcs` | `Record<string, Function>` | — | Custom functions for the style parser (merged with existing) |
175
+ | `config.plugins` | `TastyPlugin[]` | — | Plugins that extend tasty with custom functions, units, states, and handlers |
176
+ | `config.handlers` | `Record<string, StyleHandlerDefinition>` | — | Custom style handlers that transform style properties into CSS declarations |
177
+ | `config.presets` | `Record<string, TypographyPreset>` | — | Typography presets — shorthand for `generateTypographyTokens()`. Generated tokens merge under explicit `tokens`. |
178
+ | `config.globalStyles` | `Record<string, Styles>` | — | Global Tasty styles keyed by CSS selector. Supports the full style syntax. |
179
+ | `config.autoPropertyTypes` | `boolean` | `true` | Automatically infer and register CSS `@property` declarations from values |
180
+ | `config.parserCacheSize` | `number` | `1000` | Parser LRU cache size. Larger values improve performance for builds with many unique style values |
168
181
 
169
182
  ---
170
183
 
@@ -224,6 +237,7 @@ export default withTastyZero({
224
237
  | Option | Type | Default | Description |
225
238
  |--------|------|---------|-------------|
226
239
  | `output` | `string` | `'public/tasty.css'` | Output path for CSS relative to project root |
240
+ | `mode` | `'file' \| 'inject'` | `'file'` | `'file'` writes CSS to disk; `'inject'` embeds CSS inline in JS |
227
241
  | `enabled` | `boolean` | `true` | Enable/disable the plugin |
228
242
  | `configFile` | `string` | — | Path to a TS/JS module that default-exports `TastyZeroConfig`. Recommended for Turbopack compatibility. |
229
243
  | `config` | `TastyZeroConfig` | — | Inline config object. For static configs that don't change during dev. |
@@ -333,6 +347,91 @@ export const Button = () => <button className={button}>Click</button>;
333
347
 
334
348
  ---
335
349
 
350
+ ## Inject Mode
351
+
352
+ By default the Babel plugin writes CSS to a file (`mode: 'file'`). **Inject mode** (`mode: 'inject'`) embeds CSS inline in your JavaScript and injects it at runtime via a tiny injector. No CSS file is produced.
353
+
354
+ This is ideal for **reusable components**, **extensions**, and **libraries** where consumers shouldn't need to manage an external CSS file.
355
+
356
+ ### How It Works
357
+
358
+ 1. The Babel plugin extracts CSS at build time (same pipeline as file mode).
359
+ 2. Instead of writing to a `.css` file, the CSS is embedded as string literals in the JS output.
360
+ 3. The `@tenphi/tasty/static` import is rewritten to `@tenphi/tasty/static/inject`.
361
+ 4. Each `tastyStatic` call becomes a self-contained expression that injects its CSS and evaluates to a `StaticStyle` object.
362
+
363
+ ### Configuration
364
+
365
+ ```javascript
366
+ // babel.config.js
367
+ module.exports = {
368
+ plugins: [
369
+ ['@tenphi/tasty/babel-plugin', {
370
+ mode: 'inject',
371
+ config: {
372
+ states: { '@mobile': '@media(w < 768px)' },
373
+ },
374
+ }]
375
+ ]
376
+ };
377
+ ```
378
+
379
+ With Next.js:
380
+
381
+ ```typescript
382
+ // next.config.ts
383
+ import { withTastyZero } from '@tenphi/tasty/next';
384
+
385
+ export default withTastyZero({
386
+ mode: 'inject',
387
+ configFile: './app/tasty-zero.config.ts',
388
+ })({
389
+ reactStrictMode: true,
390
+ });
391
+ ```
392
+
393
+ When `mode` is `'inject'`, the `output` and `injectImport` options are ignored.
394
+
395
+ ### Build Transformation (inject mode)
396
+
397
+ **Before:**
398
+
399
+ ```tsx
400
+ import { tastyStatic } from '@tenphi/tasty/static';
401
+
402
+ const button = tastyStatic({
403
+ padding: '2x 4x',
404
+ fill: '#purple',
405
+ });
406
+
407
+ tastyStatic('.heading', { preset: 'h1' });
408
+ ```
409
+
410
+ **After:**
411
+
412
+ ```tsx
413
+ import { injectCSS as _$i } from '@tenphi/tasty/static/inject';
414
+
415
+ const button = (_$i("ts3f2a1b ts8c4d2e", ".ts3f2a1b.ts3f2a1b{padding:16px 32px}\n.ts8c4d2e.ts8c4d2e{background:#9370db}"), {
416
+ className: 'ts3f2a1b ts8c4d2e',
417
+ styles: { padding: '2x 4x', fill: '#purple' },
418
+ toString() { return this.className; }
419
+ });
420
+
421
+ _$i(".heading", ".heading{font-size:2.5rem;font-weight:700;line-height:1.2}");
422
+ ```
423
+
424
+ ### Dev Mode / HMR
425
+
426
+ Class names are content-hashed (`ts` + MD5). When styles change, a new hash produces a new `_$i` call that injects fresh CSS. The injector deduplicates by id, so unchanged styles are skipped. Old CSS stays in the DOM but is harmless since no elements reference those class names.
427
+
428
+ ### Limitations (inject mode)
429
+
430
+ - **Client-side only** — Styles are injected via the DOM, so they are not available during SSR. For server-rendered apps, use `mode: 'file'` or the runtime `tasty()`.
431
+ - **Larger JS bundle** — CSS is embedded in JavaScript, increasing bundle size. Best suited for components and extensions, not full-app styling.
432
+
433
+ ---
434
+
336
435
  ## Style Extension
337
436
 
338
437
  ```tsx
@@ -429,5 +528,5 @@ const card = tastyStatic({
429
528
 
430
529
  - [Docs Hub](README.md) — Choose the right guide by task or rendering mode
431
530
  - [Style DSL](dsl.md) — State maps, tokens, units, extending semantics (shared by runtime and static)
432
- - [Runtime API](runtime.md) — Runtime styling: `tasty()` factory, component props, variants, sub-elements, hooks
531
+ - [React API](react-api.md) — Runtime styling: `tasty()` factory, component props, variants, sub-elements, style functions
433
532
  - [Configuration](configuration.md) — Global configuration: tokens, recipes, custom units, and style handlers
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cube-dev/ui-kit",
3
- "version": "0.126.0",
3
+ "version": "0.127.1",
4
4
  "type": "module",
5
5
  "description": "UIKit for Cube Projects",
6
6
  "repository": {
@@ -45,7 +45,7 @@
45
45
  "@react-types/shared": "^3.32.1",
46
46
  "@tabler/icons-react": "^3.31.0",
47
47
  "@tanstack/react-virtual": "^3.13.12",
48
- "@tenphi/tasty": "1.1.0",
48
+ "@tenphi/tasty": "2.0.3",
49
49
  "clipboard-copy": "^4.0.1",
50
50
  "clsx": "^1.1.1",
51
51
  "diff": "^8.0.3",