@cube-dev/ui-kit 0.0.0-canary-2757f7b → 0.0.0-canary-b8a6873

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 (541) hide show
  1. package/README.md +12 -0
  2. package/dist/README.md +12 -0
  3. package/dist/_internal/hooks/use-chained-callback.js +1 -1
  4. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  5. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  6. package/dist/_internal/hooks/use-event.js +1 -1
  7. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  8. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  9. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  10. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  11. package/dist/_internal/hooks/use-warn.js +1 -1
  12. package/dist/components/Block.js +1 -1
  13. package/dist/components/CollectionItem.js +1 -1
  14. package/dist/components/GlobalStyles.js +3 -2
  15. package/dist/components/GlobalStyles.js.map +1 -1
  16. package/dist/components/GridProvider.js +1 -1
  17. package/dist/components/HiddenInput.js +1 -1
  18. package/dist/components/Root.d.ts +10 -0
  19. package/dist/components/Root.js +7 -3
  20. package/dist/components/Root.js.map +1 -1
  21. package/dist/components/actions/Action/Action.js +1 -1
  22. package/dist/components/actions/Banner/Banner.js +1 -1
  23. package/dist/components/actions/Button/Button.js +1 -1
  24. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  25. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  26. package/dist/components/actions/ButtonSplit/context.js +1 -1
  27. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  28. package/dist/components/actions/CommandMenu/styled.js +1 -1
  29. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  30. package/dist/components/actions/ItemActionContext.js +1 -1
  31. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  32. package/dist/components/actions/Link/Link.js +1 -1
  33. package/dist/components/actions/Menu/Menu.js +1 -1
  34. package/dist/components/actions/Menu/MenuItem.js +1 -1
  35. package/dist/components/actions/Menu/MenuSection.js +1 -1
  36. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  37. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  38. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  39. package/dist/components/actions/Menu/context.js +1 -1
  40. package/dist/components/actions/Menu/styled.js +1 -1
  41. package/dist/components/actions/index.js +1 -1
  42. package/dist/components/actions/use-action.js +1 -1
  43. package/dist/components/actions/use-anchored-menu.js +1 -1
  44. package/dist/components/actions/use-context-menu.js +1 -1
  45. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  46. package/dist/components/content/Alert/Alert.js +1 -1
  47. package/dist/components/content/Alert/use-alert.js +1 -1
  48. package/dist/components/content/Avatar/Avatar.js +1 -1
  49. package/dist/components/content/Badge/Badge.js +1 -1
  50. package/dist/components/content/Card/Card.js +1 -1
  51. package/dist/components/content/Content.js +1 -1
  52. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  53. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  54. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  55. package/dist/components/content/Divider.js +1 -1
  56. package/dist/components/content/Footer.js +1 -1
  57. package/dist/components/content/Header.js +1 -1
  58. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  59. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  60. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  61. package/dist/components/content/Item/Item.d.ts +1 -2
  62. package/dist/components/content/Item/Item.js +1 -1
  63. package/dist/components/content/Item/Item.js.map +1 -1
  64. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  65. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  66. package/dist/components/content/Layout/GridLayout.js +1 -1
  67. package/dist/components/content/Layout/Layout.js +1 -1
  68. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  69. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  70. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  71. package/dist/components/content/Layout/LayoutContent.js +1 -1
  72. package/dist/components/content/Layout/LayoutContext.js +1 -1
  73. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  74. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  75. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  76. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  77. package/dist/components/content/Layout/LayoutPane.js +1 -1
  78. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  79. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  80. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  81. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  82. package/dist/components/content/Layout/index.js +1 -1
  83. package/dist/components/content/Layout/utils.js +1 -1
  84. package/dist/components/content/Paragraph.js +1 -1
  85. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  86. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  87. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  88. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  89. package/dist/components/content/Result/Result.js +1 -1
  90. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  91. package/dist/components/content/Tag/Tag.js +1 -1
  92. package/dist/components/content/Text.d.ts +35 -28
  93. package/dist/components/content/Text.js +1 -1
  94. package/dist/components/content/Text.js.map +1 -1
  95. package/dist/components/content/TextItem/TextItem.js +1 -1
  96. package/dist/components/content/Title.d.ts +0 -6
  97. package/dist/components/content/Title.js +3 -2
  98. package/dist/components/content/Title.js.map +1 -1
  99. package/dist/components/content/Tree/Tree.js +1 -1
  100. package/dist/components/content/Tree/TreeNode.js +1 -1
  101. package/dist/components/content/Tree/TreeNode.js.map +1 -1
  102. package/dist/components/content/Tree/styled.js +1 -1
  103. package/dist/components/content/Tree/tree-index.js +1 -1
  104. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  105. package/dist/components/content/Tree/use-load-data.js +1 -1
  106. package/dist/components/content/highlightText.js +1 -1
  107. package/dist/components/content/use-auto-tooltip.d.ts +1 -0
  108. package/dist/components/content/use-auto-tooltip.js +1 -1
  109. package/dist/components/content/use-auto-tooltip.js.map +1 -1
  110. package/dist/components/fields/Checkbox/Checkbox.d.ts +2 -2
  111. package/dist/components/fields/Checkbox/Checkbox.js +2 -2
  112. package/dist/components/fields/Checkbox/Checkbox.js.map +1 -1
  113. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  114. package/dist/components/fields/Checkbox/context.js +1 -1
  115. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  116. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  117. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  118. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  119. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  120. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  121. package/dist/components/fields/DatePicker/DateInputBase.js.map +1 -1
  122. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  123. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  124. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  125. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  126. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  127. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  128. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  129. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  130. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  131. package/dist/components/fields/DatePicker/props.js +1 -1
  132. package/dist/components/fields/DatePicker/utils.js +1 -1
  133. package/dist/components/fields/FileInput/FileInput.d.ts +1 -2
  134. package/dist/components/fields/FileInput/FileInput.js +1 -1
  135. package/dist/components/fields/FileInput/FileInput.js.map +1 -1
  136. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  137. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  138. package/dist/components/fields/Input/Input.js +1 -1
  139. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  140. package/dist/components/fields/ListBox/ListBox.js +1 -1
  141. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  142. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  143. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  144. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  145. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  146. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  147. package/dist/components/fields/Picker/Picker.js +1 -1
  148. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  149. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  150. package/dist/components/fields/RadioGroup/context.js +1 -1
  151. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  152. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  153. package/dist/components/fields/Select/Select.d.ts +1 -2
  154. package/dist/components/fields/Select/Select.js +1 -1
  155. package/dist/components/fields/Select/Select.js.map +1 -1
  156. package/dist/components/fields/Slider/Gradation.js +1 -1
  157. package/dist/components/fields/Slider/HueSlider.js +1 -1
  158. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  159. package/dist/components/fields/Slider/Slider.js +1 -1
  160. package/dist/components/fields/Slider/SliderBase.js +1 -1
  161. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  162. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  163. package/dist/components/fields/Slider/elements.js +1 -1
  164. package/dist/components/fields/Slider/index.js +1 -1
  165. package/dist/components/fields/Switch/Switch.d.ts +2 -2
  166. package/dist/components/fields/Switch/Switch.js +1 -1
  167. package/dist/components/fields/Switch/Switch.js.map +1 -1
  168. package/dist/components/fields/TextArea/TextArea.js +1 -1
  169. package/dist/components/fields/TextInput/TextInput.js +1 -1
  170. package/dist/components/fields/TextInput/TextInputBase.d.ts +1 -2
  171. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  172. package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
  173. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  174. package/dist/components/form/FieldWrapper/FieldWrapper.d.ts +1 -2
  175. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  176. package/dist/components/form/FieldWrapper/types.d.ts +1 -2
  177. package/dist/components/form/Form/Field.js +1 -1
  178. package/dist/components/form/Form/Form.js +1 -1
  179. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  180. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  181. package/dist/components/form/Form/SubmitError.js +1 -1
  182. package/dist/components/form/Form/index.js +1 -1
  183. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  184. package/dist/components/form/Form/use-field/use-field.js +1 -1
  185. package/dist/components/form/Form/use-form.js +1 -1
  186. package/dist/components/form/Form/validation.js +1 -1
  187. package/dist/components/form/Label.js +1 -1
  188. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  189. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  190. package/dist/components/form/validation/use-validation-props.js +1 -1
  191. package/dist/components/form/wrapper.js +1 -1
  192. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  193. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  194. package/dist/components/layout/Board/Board.js +1 -1
  195. package/dist/components/layout/Board/BoardProvider.js +1 -1
  196. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  197. package/dist/components/layout/Board/Widget.js +1 -1
  198. package/dist/components/layout/Board/WidgetHost.js +1 -1
  199. package/dist/components/layout/Board/board-context.js +1 -1
  200. package/dist/components/layout/Board/board-store.js +1 -1
  201. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  202. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  203. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  204. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  205. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  206. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  207. package/dist/components/layout/Board/index.js +1 -1
  208. package/dist/components/layout/Board/responsive-utils.js +1 -1
  209. package/dist/components/layout/Board/use-board-layout.js +1 -1
  210. package/dist/components/layout/Board/use-board-registry.js +1 -1
  211. package/dist/components/layout/Flex.js +1 -1
  212. package/dist/components/layout/Flow.js +1 -1
  213. package/dist/components/layout/Grid.js +1 -1
  214. package/dist/components/layout/Panel.js +1 -1
  215. package/dist/components/layout/Prefix.js +1 -1
  216. package/dist/components/layout/ResizablePanel.js +1 -1
  217. package/dist/components/layout/Space.js +1 -1
  218. package/dist/components/layout/Suffix.js +1 -1
  219. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  220. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  221. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  222. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  223. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  224. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  225. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  226. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  227. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  228. package/dist/components/navigation/Tabs/styled.js +1 -1
  229. package/dist/components/navigation/Tabs/types.js +1 -1
  230. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  231. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  232. package/dist/components/organisms/FileTabs/FileTabs.js +1 -1
  233. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  234. package/dist/components/other/Calendar/Calendar.js +1 -1
  235. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  236. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  237. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  238. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  239. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  240. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  241. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  242. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  243. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  244. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  245. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  246. package/dist/components/overlays/Dialog/context.js +1 -1
  247. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  248. package/dist/components/overlays/Modal/Modal.js +1 -1
  249. package/dist/components/overlays/Modal/Modal.js.map +1 -1
  250. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  251. package/dist/components/overlays/Modal/Overlay.js +1 -1
  252. package/dist/components/overlays/Modal/Overlay.js.map +1 -1
  253. package/dist/components/overlays/Modal/Popover.js +1 -1
  254. package/dist/components/overlays/Modal/Tray.js +1 -1
  255. package/dist/components/overlays/Modal/Tray.js.map +1 -1
  256. package/dist/components/overlays/Modal/Underlay.js +1 -1
  257. package/dist/components/overlays/Notifications/Notification.js +1 -1
  258. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  259. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  260. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  261. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  262. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  263. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  264. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  265. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  266. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  267. package/dist/components/overlays/Notifications/index.js +1 -1
  268. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  269. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  270. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  271. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  272. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  273. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  274. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  275. package/dist/components/overlays/Toast/index.js +1 -1
  276. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  277. package/dist/components/overlays/Toast/useToast.js +1 -1
  278. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  279. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  280. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  281. package/dist/components/overlays/Tooltip/context.js +1 -1
  282. package/dist/components/overlays/Tooltip/context.js.map +1 -1
  283. package/dist/components/portal/Portal.js +1 -1
  284. package/dist/components/portal/PortalProvider.js +1 -1
  285. package/dist/components/portal/usePortal.js +1 -1
  286. package/dist/components/shared/DraggableCollection.js +1 -1
  287. package/dist/components/shared/InvalidIcon.js +1 -1
  288. package/dist/components/shared/ValidIcon.js +1 -1
  289. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  290. package/dist/components/status/Spin/Cube.js +1 -1
  291. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  292. package/dist/components/status/Spin/Spin.js +1 -1
  293. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  294. package/dist/data/item-themes.js +1 -1
  295. package/dist/data/themes.js +1 -1
  296. package/dist/eslint-plugin/defaults.generated.js +1 -1
  297. package/dist/eslint-plugin/index.js +1 -1
  298. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  299. package/dist/i18n/I18nProvider.js +1 -1
  300. package/dist/i18n/createFormatter.js +1 -1
  301. package/dist/i18n/index.js +1 -1
  302. package/dist/i18n/instance.js +1 -1
  303. package/dist/i18n/locales/de-DE/uikit.js +1 -1
  304. package/dist/i18n/locales/en-US/uikit.js +1 -1
  305. package/dist/i18n/locales/es-ES/uikit.js +1 -1
  306. package/dist/i18n/locales/es-MX/uikit.js +1 -1
  307. package/dist/i18n/locales/fr-FR/uikit.js +1 -1
  308. package/dist/i18n/locales/it-IT/uikit.js +1 -1
  309. package/dist/i18n/locales/ja-JP/uikit.js +1 -1
  310. package/dist/i18n/locales/nb-NO/uikit.js +1 -1
  311. package/dist/i18n/locales/pt-BR/uikit.js +1 -1
  312. package/dist/i18n/locales/pt-PT/uikit.js +1 -1
  313. package/dist/i18n/locales/sv-SE/uikit.js +1 -1
  314. package/dist/i18n/locales/vi-VN/uikit.js +1 -1
  315. package/dist/i18n/locales.js +1 -1
  316. package/dist/i18n/useFormatter.js +1 -1
  317. package/dist/i18n/useI18n.js +1 -1
  318. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  319. package/dist/icons/AdjustmentsIcon.js +1 -1
  320. package/dist/icons/AiIcon.js +1 -1
  321. package/dist/icons/AreaChartIcon.js +1 -1
  322. package/dist/icons/BackwardIcon.js +1 -1
  323. package/dist/icons/BarChartIcon.js +1 -1
  324. package/dist/icons/BellFilledIcon.js +1 -1
  325. package/dist/icons/BellIcon.js +1 -1
  326. package/dist/icons/BooleanIcon.js +1 -1
  327. package/dist/icons/CalendarEditIcon.js +1 -1
  328. package/dist/icons/CalendarIcon.js +1 -1
  329. package/dist/icons/CaretDownIcon.js +1 -1
  330. package/dist/icons/CaretUpIcon.js +1 -1
  331. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  332. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  333. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  334. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  335. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  336. package/dist/icons/ChartBarLineIcon.js +1 -1
  337. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  338. package/dist/icons/ChartBarStackedIcon.js +1 -1
  339. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  340. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  341. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  342. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  343. package/dist/icons/ChartBubbleIcon.js +1 -1
  344. package/dist/icons/ChartDonut2Icon.js +1 -1
  345. package/dist/icons/ChartFunnelIcon.js +1 -1
  346. package/dist/icons/ChartHeatmapIcon.js +1 -1
  347. package/dist/icons/ChartKPIIcon.js +1 -1
  348. package/dist/icons/ChartPie2Icon.js +1 -1
  349. package/dist/icons/ChartScatterIcon.js +1 -1
  350. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  351. package/dist/icons/CheckCircleIcon.js +1 -1
  352. package/dist/icons/CheckIcon.js +1 -1
  353. package/dist/icons/CircleFilledIcon.js +1 -1
  354. package/dist/icons/ClearIcon.js +1 -1
  355. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  356. package/dist/icons/CloseCircleIcon.js +1 -1
  357. package/dist/icons/CloseIcon.js +1 -1
  358. package/dist/icons/CodeIcon.js +1 -1
  359. package/dist/icons/ColumnTotalIcon.js +1 -1
  360. package/dist/icons/CopyIcon.js +1 -1
  361. package/dist/icons/CountIcon.js +1 -1
  362. package/dist/icons/CubeIcon.js +1 -1
  363. package/dist/icons/CubePauseIcon.js +1 -1
  364. package/dist/icons/CubePlayIcon.js +1 -1
  365. package/dist/icons/CurrencyDollarIcon.js +1 -1
  366. package/dist/icons/DangerIcon.js +1 -1
  367. package/dist/icons/DashboardIcon.js +1 -1
  368. package/dist/icons/DatabaseIcon.js +1 -1
  369. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  370. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  371. package/dist/icons/DirectionIcon.js +1 -1
  372. package/dist/icons/DonutIcon.js +1 -1
  373. package/dist/icons/DownIcon.js +1 -1
  374. package/dist/icons/EditIcon.js +1 -1
  375. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  376. package/dist/icons/ExclamationCircleIcon.js +1 -1
  377. package/dist/icons/ExclamationIcon.js +1 -1
  378. package/dist/icons/EyeIcon.js +1 -1
  379. package/dist/icons/EyeInvisibleIcon.js +1 -1
  380. package/dist/icons/FilterIcon.js +1 -1
  381. package/dist/icons/FolderFilledIcon.js +1 -1
  382. package/dist/icons/FolderIcon.js +1 -1
  383. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  384. package/dist/icons/FolderOpenIcon.js +1 -1
  385. package/dist/icons/ForwardIcon.js +1 -1
  386. package/dist/icons/GripVerticalIcon.js +1 -1
  387. package/dist/icons/HierarchyIcon.js +1 -1
  388. package/dist/icons/HierarchyOpenIcon.js +1 -1
  389. package/dist/icons/Icon.js +1 -1
  390. package/dist/icons/InfoCircleIcon.js +1 -1
  391. package/dist/icons/InfoIcon.js +1 -1
  392. package/dist/icons/KeyIcon.js +1 -1
  393. package/dist/icons/LeftIcon.js +1 -1
  394. package/dist/icons/LineChartIcon.js +1 -1
  395. package/dist/icons/LoadingIcon.js +1 -1
  396. package/dist/icons/LockFilledIcon.js +1 -1
  397. package/dist/icons/LockIcon.js +1 -1
  398. package/dist/icons/MoreIcon.js +1 -1
  399. package/dist/icons/NotAllowedIcon.js +1 -1
  400. package/dist/icons/Number123Icon.js +1 -1
  401. package/dist/icons/NumberIcon.js +1 -1
  402. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  403. package/dist/icons/PauseCircleIcon.js +1 -1
  404. package/dist/icons/PauseIcon.js +1 -1
  405. package/dist/icons/PercentageIcon.js +1 -1
  406. package/dist/icons/PieChartIcon.js +1 -1
  407. package/dist/icons/PlayCircleIcon.js +1 -1
  408. package/dist/icons/PlayIcon.js +1 -1
  409. package/dist/icons/PlusIcon.js +1 -1
  410. package/dist/icons/ProgressBarIcon.js +1 -1
  411. package/dist/icons/ReloadIcon.js +1 -1
  412. package/dist/icons/ReportIcon.js +1 -1
  413. package/dist/icons/ReturnIcon.js +1 -1
  414. package/dist/icons/RightIcon.js +1 -1
  415. package/dist/icons/RowTotalsIcon.js +1 -1
  416. package/dist/icons/SchemeIcon.js +1 -1
  417. package/dist/icons/SearchIcon.js +1 -1
  418. package/dist/icons/SemanticQueryIcon.js +1 -1
  419. package/dist/icons/SettingsIcon.js +1 -1
  420. package/dist/icons/ShieldFilledIcon.js +1 -1
  421. package/dist/icons/ShieldIcon.js +1 -1
  422. package/dist/icons/SlashIcon.js +1 -1
  423. package/dist/icons/SparklesIcon.js +1 -1
  424. package/dist/icons/SqlIcon.js +1 -1
  425. package/dist/icons/StatsIcon.js +1 -1
  426. package/dist/icons/StopIcon.js +1 -1
  427. package/dist/icons/StringIcon.js +1 -1
  428. package/dist/icons/SubtotalsIcon.js +1 -1
  429. package/dist/icons/SwitchIcon.js +1 -1
  430. package/dist/icons/TableIcon.js +1 -1
  431. package/dist/icons/ThumbsDownIcon.js +1 -1
  432. package/dist/icons/ThumbsUpIcon.js +1 -1
  433. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  434. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  435. package/dist/icons/ThunderboltIcon.js +1 -1
  436. package/dist/icons/TimeIcon.js +1 -1
  437. package/dist/icons/TrashIcon.js +1 -1
  438. package/dist/icons/UnlockIcon.js +1 -1
  439. package/dist/icons/UpIcon.js +1 -1
  440. package/dist/icons/UserGroupIcon.js +1 -1
  441. package/dist/icons/UserIcon.js +1 -1
  442. package/dist/icons/UserLockIcon.js +1 -1
  443. package/dist/icons/ViewIcon.js +1 -1
  444. package/dist/icons/WarningFilledIcon.js +1 -1
  445. package/dist/icons/WarningIcon.js +1 -1
  446. package/dist/icons/wrap-icon.js +1 -1
  447. package/dist/index.d.ts +6 -6
  448. package/dist/index.js +6 -5
  449. package/dist/index.js.map +1 -1
  450. package/dist/provider.d.ts +1 -1
  451. package/dist/provider.js +1 -1
  452. package/dist/provider.js.map +1 -1
  453. package/dist/providers/TrackingProvider.js +1 -1
  454. package/dist/providers/navigationAdapter.default.js +1 -1
  455. package/dist/shared/form.d.ts +28 -3
  456. package/dist/shared/index.d.ts +1 -1
  457. package/dist/tokens/base.js +1 -1
  458. package/dist/tokens/colors.d.ts +41 -2
  459. package/dist/tokens/colors.js +77 -9
  460. package/dist/tokens/colors.js.map +1 -1
  461. package/dist/tokens/index.d.ts +3 -2
  462. package/dist/tokens/index.js +23 -16
  463. package/dist/tokens/index.js.map +1 -1
  464. package/dist/tokens/layout.js +1 -1
  465. package/dist/tokens/lazy-styles.js +10 -6
  466. package/dist/tokens/lazy-styles.js.map +1 -1
  467. package/dist/tokens/palette-config.d.ts +203 -0
  468. package/dist/tokens/palette-config.js +253 -0
  469. package/dist/tokens/palette-config.js.map +1 -0
  470. package/dist/tokens/palette.d.ts +45 -5
  471. package/dist/tokens/palette.js +567 -403
  472. package/dist/tokens/palette.js.map +1 -1
  473. package/dist/tokens/shadows.js +1 -1
  474. package/dist/tokens/sizes.js +1 -1
  475. package/dist/tokens/spacing.js +1 -1
  476. package/dist/tokens/typography.js +1 -1
  477. package/dist/utils/ResizeSensor.js +1 -1
  478. package/dist/utils/is-dev-env.js +1 -1
  479. package/dist/utils/modules.js +1 -1
  480. package/dist/utils/promise.js +1 -1
  481. package/dist/utils/raf.js +1 -1
  482. package/dist/utils/random.js +1 -1
  483. package/dist/utils/range.js +1 -1
  484. package/dist/utils/react/RenderCache.js +1 -1
  485. package/dist/utils/react/Slots.js +1 -1
  486. package/dist/utils/react/chain.js +1 -1
  487. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  488. package/dist/utils/react/index.js +1 -1
  489. package/dist/utils/react/interactions.js +1 -1
  490. package/dist/utils/react/isTextOnly.js +1 -1
  491. package/dist/utils/react/mapProps.js +1 -1
  492. package/dist/utils/react/mergeProps.d.ts +1 -1
  493. package/dist/utils/react/mergeProps.js +1 -1
  494. package/dist/utils/react/mergeProps.js.map +1 -1
  495. package/dist/utils/react/nullableValue.d.ts +1 -1
  496. package/dist/utils/react/nullableValue.js +1 -1
  497. package/dist/utils/react/nullableValue.js.map +1 -1
  498. package/dist/utils/react/resolveIcon.js +1 -1
  499. package/dist/utils/react/sharedStore.js +1 -1
  500. package/dist/utils/react/useCombinedRefs.js +1 -1
  501. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  502. package/dist/utils/react/useEventBus.js +1 -1
  503. package/dist/utils/react/useId.js +1 -1
  504. package/dist/utils/react/useIsDarwin.js +1 -1
  505. package/dist/utils/react/useKeySymbols.js +1 -1
  506. package/dist/utils/react/useLayoutEffect.js +1 -1
  507. package/dist/utils/react/useLocalStorage.js +1 -1
  508. package/dist/utils/react/useMergeStyles.js +1 -1
  509. package/dist/utils/react/usePopoverSync.js +1 -1
  510. package/dist/utils/react/useQaProps.js +1 -1
  511. package/dist/utils/react/useViewportSize.js +1 -1
  512. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  513. package/dist/utils/selection.js +1 -1
  514. package/dist/utils/styles.js +1 -1
  515. package/dist/utils/tree.js +1 -1
  516. package/dist/utils/warnings.js +1 -1
  517. package/dist/version.js +3 -3
  518. package/docs/Colors.md +4 -0
  519. package/docs/Theming.md +314 -0
  520. package/docs/Usage.md +30 -3
  521. package/docs/components/Root.md +1 -0
  522. package/docs/glaze/api.md +156 -8
  523. package/docs/glaze/methodology.md +21 -1
  524. package/docs/glaze/okhst.md +13 -0
  525. package/docs/tasty/README.md +1 -3
  526. package/docs/tasty/ai-agents.md +7 -21
  527. package/docs/tasty/configuration.md +30 -220
  528. package/docs/tasty/debug.md +7 -7
  529. package/docs/tasty/design-system.md +2 -2
  530. package/docs/tasty/dsl.md +8 -68
  531. package/docs/tasty/injector.md +4 -31
  532. package/docs/tasty/methodology.md +1 -1
  533. package/docs/tasty/pipeline.md +3 -3
  534. package/docs/tasty/react-api.md +1 -61
  535. package/docs/tasty/ssr.md +33 -40
  536. package/docs/tasty/styles.md +9 -27
  537. package/docs/tasty/tasty-static.md +6 -8
  538. package/package.json +4 -4
  539. package/dist/props.d.ts +0 -13
  540. package/docs/tasty/migration-v3.md +0 -285
  541. package/docs/tasty/plugins.md +0 -349
package/docs/tasty/dsl.md CHANGED
@@ -123,7 +123,7 @@ mods={{ hovered: true, theme: 'danger' }}
123
123
  // → data-hovered="" data-theme="danger"
124
124
  ```
125
125
 
126
- Modifiers can also be exposed as top-level component props via `modProps` — see [React API — Mod Props](react-api.md#mod-props).
126
+ Modifiers can also be exposed as top-level component props via `modProps` — see [Runtime — Mod Props](react-api.md#mod-props).
127
127
 
128
128
  ---
129
129
 
@@ -683,24 +683,24 @@ const AnimatedGradient = tasty({
683
683
 
684
684
  Here `$gradient-angle: '0deg'` is detected as `<angle>` and `#theme` as `<color>` (via the `#name` naming convention), so both transitions work without any manual `@property` declarations. Numeric types (`<number>`, `<length>`, `<percentage>`, `<angle>`, `<time>`) are inferred from values; `<color>` is inferred from `#name` tokens.
685
685
 
686
- Use explicit `@property` when you need non-default settings like `inherits: false`:
686
+ Use explicit `@properties` when you need non-default settings like `inherits: false`:
687
687
 
688
688
  ```jsx
689
- '@property': {
689
+ '@properties': {
690
690
  '$gradient-angle': { syntax: '<angle>', inherits: false, initialValue: '0deg' },
691
691
  },
692
692
  ```
693
693
 
694
694
  ---
695
695
 
696
- ## Font Face (`@font-face`)
696
+ ## Font Face (`@fontFace`)
697
697
 
698
698
  Register custom fonts directly inside a `styles` object. Keys are font-family names, values are descriptor objects (or arrays of them for multiple weights/styles).
699
699
 
700
700
  ```ts
701
701
  const Heading = tasty({
702
702
  styles: {
703
- '@font-face': {
703
+ '@fontFace': {
704
704
  'Brand Sans': {
705
705
  src: 'url("/fonts/brand-sans.woff2") format("woff2")',
706
706
  fontDisplay: 'swap',
@@ -716,7 +716,7 @@ const Heading = tasty({
716
716
  Supply an array to register several variants of the same family:
717
717
 
718
718
  ```ts
719
- '@font-face': {
719
+ '@fontFace': {
720
720
  'Brand Sans': [
721
721
  { src: 'url("/fonts/brand-regular.woff2") format("woff2")', fontWeight: 400, fontDisplay: 'swap' },
722
722
  { src: 'url("/fonts/brand-bold.woff2") format("woff2")', fontWeight: 700, fontDisplay: 'swap' },
@@ -745,7 +745,7 @@ Supply an array to register several variants of the same family:
745
745
 
746
746
  ---
747
747
 
748
- ## Counter Style (`@counter-style`)
748
+ ## Counter Style (`@counterStyle`)
749
749
 
750
750
  Define custom list markers via the CSS `@counter-style` at-rule. Keys are counter-style names, values are descriptor objects.
751
751
 
@@ -753,7 +753,7 @@ Define custom list markers via the CSS `@counter-style` at-rule. Keys are counte
753
753
  const EmojiList = tasty({
754
754
  tag: 'ol',
755
755
  styles: {
756
- '@counter-style': {
756
+ '@counterStyle': {
757
757
  thumbs: {
758
758
  system: 'cyclic',
759
759
  symbols: '"👍"',
@@ -784,66 +784,6 @@ const EmojiList = tasty({
784
784
 
785
785
  ---
786
786
 
787
- ## Functions (`@function`)
788
-
789
- Define reusable, parameterized CSS [custom functions](https://developer.mozilla.org/en-US/docs/Web/CSS/@function) via the CSS `@function` at-rule. A custom function takes parameters and returns a single value — like a dynamic custom property.
790
-
791
- The token convention follows Tasty's `$` vs `$$` distinction:
792
-
793
- - **`$$name`** — the literal callable name (`--name`). Used for the **definition key** and for **invocation** `$$name(...)`, mirroring the existing `$$gradient-angle` → `--gradient-angle` sugar. The definition key matches the call site.
794
- - **`$name`** — a custom-property declaration/reference (`var(--name)`). Used for **parameters** and **local variables**, exactly like declaring custom props in a styles object.
795
- - **Local variables** are declared directly as `$name` keys on the descriptor — the body reads like a mini styles object.
796
- - `result`, local-variable values, and parameter `default` values flow through the full Tasty DSL, so units (`2x`), color tokens (`#theme`), auto-calc (`(-1 * $value)` → `calc(-1 * var(--value))`), and fallbacks (`($shadow-color, black)` → `var(--shadow-color, black)`) all work.
797
-
798
- ```ts
799
- const Box = tasty({
800
- styles: {
801
- '@function': {
802
- // simplest: one bare param + result (auto-calc, no explicit calc())
803
- '$$negative': { args: ['$value'], result: '(-1 * $value)' },
804
-
805
- // typed param + default + return type + local variable
806
- '$$shadow': {
807
- args: { '$shadow-color': { syntax: '<color>', default: 'inherit' } },
808
- returns: '<color>',
809
- '$offset': '2px', // local variable
810
- result: '$offset $offset ($shadow-color, black)',
811
- },
812
- },
813
- marginTop: '$$negative(10px)', // → margin-top: --negative(10px)
814
- boxShadow: '$$shadow(#accent)', // → box-shadow: --shadow(var(--accent-color))
815
- },
816
- });
817
- ```
818
-
819
- Generated CSS:
820
-
821
- ```css
822
- @function --negative(--value) { result: calc(-1 * var(--value)); }
823
- @function --shadow(--shadow-color <color>: inherit) returns <color> {
824
- --offset: 2px;
825
- result: var(--offset) var(--offset) var(--shadow-color, black);
826
- }
827
- .t0 { margin-top: --negative(10px); box-shadow: --shadow(var(--accent-color)); }
828
- ```
829
-
830
- ### Descriptor shape
831
-
832
- | Field | Type | Notes |
833
- |---|---|---|
834
- | `result` (required) | `string` | The `result:` value, parsed through the Tasty DSL. |
835
- | `args` | `string[]` \| `Record<string, FunctionParameter>` | Ordered parameters. Array form lists bare names; object form maps names to type/default. |
836
- | `returns` | `string` | Optional return type, e.g. `'<color>'`. |
837
- | `$name` keys | `string \| number` | Any `$name` key declares a local variable `--name` (value parsed). |
838
-
839
- A `FunctionParameter` is one of: `true` (bare param), a string CSS type shorthand (`'<length>'`), or `{ syntax?: string; default?: string | number }`.
840
-
841
- Functions can also be registered with the [`useFunction`](react-api.md#usefunction) hook or globally via [`configure({ functions })`](configuration.md#functions) (the same map also accepts bare-key parse functions).
842
-
843
- > `@function` is permanent — injected once and never cleaned up, like `@counter-style`. It is an experimental CSS feature ([Chrome 139+](https://developer.mozilla.org/en-US/docs/Web/CSS/@function)); unsupported browsers safely ignore the native rule, so use it as progressive enhancement — or enable the [`configure({ polyfills: { functions: true } })`](configuration.md#polyfills) inline polyfill to expand `$$name(...)` calls into plain CSS for full cross-browser support.
844
-
845
- ---
846
-
847
787
  ## Style Properties
848
788
 
849
789
  For a complete reference of all enhanced style properties — syntax, values, modifiers, and recommendations — see **[Style Properties Reference](styles.md)**.
@@ -11,7 +11,7 @@ The Style Injector is the core engine behind Tasty's styling system, providing:
11
11
  - **Hash-based deduplication** - Identical CSS gets the same className
12
12
  - **Reference counting** - Automatic cleanup when components unmount (refCount = 0)
13
13
  - **CSS nesting flattening** - Handles `&`, `.Class`, `SubElement` patterns
14
- - **At-rule injection** - First-class `@keyframes`, `@property`, `@font-face`, `@counter-style`, and `@function` support
14
+ - **Keyframes injection** - First-class `@keyframes` support with immediate disposal
15
15
  - **Smart cleanup** - CSS rules batched cleanup, keyframes disposed immediately
16
16
  - **SSR support** - Deterministic class names and CSS extraction
17
17
  - **Multiple roots** - Works with Document and ShadowRoot
@@ -250,33 +250,6 @@ Dispose, ref-counted cleanup and GC therefore behave identically in every mode.
250
250
 
251
251
  ---
252
252
 
253
- ### At-rule injection
254
-
255
- Beyond ordinary rules, the injector has a dedicated entry point per at-rule. All of them deduplicate by name and are **permanent** — there is no ref-counting or dispose, because a rule that other CSS references by name cannot be safely removed while any of it might still apply.
256
-
257
- | Function | Injects | Notes |
258
- |---|---|---|
259
- | `keyframes(steps, nameOrOptions?)` | `@keyframes` | The exception: ref-counted and disposed immediately when unused. Returns the injected name, which may differ from the requested one. |
260
- | `property(name, options?)` | `@property` | `name` accepts `$name`, `#name`, or `--name`. Usually unnecessary — types are inferred automatically unless `configure({ autoPropertyTypes: false })`. |
261
- | `fontFace(family, descriptors, options?)` | `@font-face` | Deduplicated by family **and** descriptor content, so several faces of one family coexist. |
262
- | `counterStyle(name, descriptors, options?)` | `@counter-style` | |
263
- | `func(name, definition, options?)` | `@function` | `name` accepts `$$name`, `$name`, or `--name`. Abbreviated because `function` is a reserved word. |
264
-
265
- Every one of these takes an optional `root` (a `Document` or `ShadowRoot`).
266
-
267
- `func()` also accepts `weak: true`, which registers the rule **without** overriding an existing one of the same name. `configure()` uses it for global `@function` definitions so a component-local definition always wins over the global default, regardless of which is injected first.
268
-
269
- ```ts
270
- import { counterStyle, fontFace, func, property } from '@tenphi/tasty';
271
-
272
- property('$card-elevation', { syntax: '<number>', initialValue: '0' });
273
- fontFace('Inter', { src: 'url(/inter.woff2)', fontWeight: '400 700' });
274
- counterStyle('dashes', { system: 'cyclic', symbols: '"—"', suffix: ' ' });
275
- func('$$negative', { args: ['$value'], result: '(-1 * $value)' });
276
- ```
277
-
278
- ---
279
-
280
253
  ## Advanced Features
281
254
 
282
255
  ### Style Result Format
@@ -392,14 +365,14 @@ const shadowAnimation = keyframes({
392
365
  ### Server-Side Rendering
393
366
 
394
367
  ```typescript
395
- import { getCSSText, getCSSTextForNode } from '@tenphi/tasty';
368
+ import { getCssText, getCssTextForNode } from '@tenphi/tasty';
396
369
 
397
370
  // Extract all CSS for SSR
398
- const cssText = getCSSText();
371
+ const cssText = getCssText();
399
372
 
400
373
  // Extract CSS for specific DOM subtree (like jest-styled-components)
401
374
  const container = render(<MyComponent />);
402
- const componentCSS = getCSSTextForNode(container);
375
+ const componentCSS = getCssTextForNode(container);
403
376
  ```
404
377
 
405
378
  ### Test Environment Detection
@@ -214,7 +214,7 @@ The array form is simpler but types all values as `ModValue`:
214
214
  modProps: ['isLoading', 'isSelected'] as const,
215
215
  ```
216
216
 
217
- For the full API reference, see [React API — Mod Props](react-api.md#mod-props).
217
+ For the full API reference, see [Runtime — Mod Props](react-api.md#mod-props).
218
218
 
219
219
  ---
220
220
 
@@ -6,7 +6,7 @@ This document describes the style rendering pipeline that transforms style objec
6
6
 
7
7
  ## Overview
8
8
 
9
- The pipeline takes a `Styles` object and produces an array of `CSSRule` objects ready for injection into the DOM. The entry point is `renderStyles`, which has two overloads: called with a selector or class (`renderStyles(styles, '.t1')`) it returns the rules directly; called without one (`renderStyles(styles)`) it returns `{ rules }` for a caller that will allocate the class name itself. The per-handler flow is:
9
+ The pipeline takes a `Styles` object and produces an array of `CSSRule` objects ready for injection into the DOM. Entry points include `renderStylesPipeline` (full pipeline + optional class-name prefixing) and `renderStyles` (direct selector/class mode). The per-handler flow is:
10
10
 
11
11
  ```
12
12
  Input: Styles Object
@@ -539,7 +539,7 @@ interface CSSRule {
539
539
  }
540
540
  ```
541
541
 
542
- When `renderStyles` runs **without** a selector, returned rules include `needsClassName: true` (compatibility field for the injector); that flag is not part of `CSSRule` inside `materialize.ts`.
542
+ When `renderStylesPipeline` runs **without** a class name, returned rules include `needsClassName: true` (compatibility field for the injector); that flag is not part of `CSSRule` inside `materialize.ts`.
543
543
 
544
544
  ---
545
545
 
@@ -691,7 +691,7 @@ Each snapshot yields distinct declarations; no merge.
691
691
 
692
692
  ### Stage 7: Materialize CSS
693
693
 
694
- Using `renderStyles(styles, '.t1')` (the class is doubled — `.t1.t1` — so Tasty owns specificity without `!important`):
694
+ Using `renderStyles(styles, '.t1')` (single class prefix; `renderStylesPipeline` doubles the class for specificity when a class name is supplied):
695
695
 
696
696
  ```css
697
697
  .t1[data-hovered] {
@@ -1,6 +1,6 @@
1
1
  # React API
2
2
 
3
- The React-specific `tasty()` component factory, component props, and style functions. All Tasty style functions — `tasty()` components, `useStyles()`, `useGlobalStyles()`, `useRawCSS()`, `useKeyframes()`, `useProperty()`, `useFontFace()`, `useCounterStyle()`, and `useFunction()` — are hook-free and compatible with React Server Components. No `'use client'` directive needed. For the shared style language (state maps, tokens, units, extending semantics), see [Style DSL](dsl.md). For global configuration, see [Configuration](configuration.md). For the broader docs map, see the [Docs Hub](README.md).
3
+ The React-specific `tasty()` component factory, component props, and style functions. All Tasty style functions — `tasty()` components, `useStyles()`, `useGlobalStyles()`, `useRawCSS()`, `useKeyframes()`, `useProperty()`, `useFontFace()`, and `useCounterStyle()` — are hook-free and compatible with React Server Components. No `'use client'` directive needed. For the shared style language (state maps, tokens, units, extending semantics), see [Style DSL](dsl.md). For global configuration, see [Configuration](configuration.md). For the broader docs map, see the [Docs Hub](README.md).
4
4
 
5
5
  > **Note:** This file was previously named `runtime.md`. All functionality documented here works in both server and client contexts — "runtime" referred to style computation during React rendering, not to client-side JavaScript.
6
6
 
@@ -98,26 +98,6 @@ Style props accept state maps, so responsive values work through the same API:
98
98
 
99
99
  For predefined style prop lists (`FLOW_STYLES`, `POSITION_STYLES`, `DIMENSION_STYLES`, etc.) and guidance on which props to expose per component category, see [Methodology — styleProps as the public API](methodology.md#styleprops-as-the-public-api).
100
100
 
101
- ### Always-available style props
102
-
103
- A small set of style properties — `display`, `font`, `preset`, `hide`, `whiteSpace`, `opacity`, and `transition` — are always harvested as style props on every `tasty()` component, even when `styleProps` is omitted. This means you can pass `<Card display="grid" />` or `<Text preset="h1" />` without declaring them. When you do declare `styleProps`, these base props are unioned with your list (not replaced).
104
-
105
- ---
106
-
107
- ## `Element`
108
-
109
- `Element` is the unstyled base component exported from the main entry — equivalent to `tasty({})` (a `div` with no default styles). It accepts all Tasty props (`styles`, `styleProps`, `mods`, `tokens`, `as`, `qa`, `theme`, the `is*` props, etc.) and is useful as a generic styled box or as a building block for layout primitives.
110
-
111
- ```jsx
112
- import { Element } from '@tenphi/tasty';
113
-
114
- <Element as="section" padding="4x" fill="#surface">
115
- Content
116
- </Element>
117
- ```
118
-
119
- > Note: `Element` shadows the global DOM `Element` type when imported from `@tenphi/tasty`. In files that need the DOM type, alias the import: `import { Element as TastyElement } from '@tenphi/tasty'`.
120
-
121
101
  ---
122
102
 
123
103
  ## Mod Props
@@ -599,46 +579,6 @@ function useCounterStyle(
599
579
  ): string;
600
580
  ```
601
581
 
602
- ### useFunction
603
-
604
- Register a CSS `@function` (custom function). Permanent — no cleanup on unmount. Deduplicates by function name. The function name accepts `$$name` (matching the call site `$$name(...)`), `$name`, or `--name`.
605
-
606
- ```tsx
607
- import { tasty, useFunction } from '@tenphi/tasty';
608
-
609
- const Box = tasty({ styles: { marginTop: '$$negative(10px)' } });
610
-
611
- function Layout() {
612
- useFunction('$$negative', { args: ['$value'], result: '(-1 * $value)' });
613
- return <Box />;
614
- }
615
- ```
616
-
617
- Call the function through the Tasty DSL rather than a raw `style` prop. An inline `style` value reaches the browser unparsed, so the `$$name(...)` sugar is never expanded — and under `configure({ polyfills: { functions: true } })` it silently does nothing, because the polyfill rewrites calls at parse time.
618
-
619
- Inside a `tasty()` component you call functions with the same `$$name(...)` sugar:
620
-
621
- ```tsx
622
- const Box = tasty({
623
- styles: {
624
- '@function': { '$$negative': { args: ['$value'], result: '(-1 * $value)' } },
625
- marginTop: '$$negative(10px)',
626
- },
627
- });
628
- ```
629
-
630
- Signature:
631
-
632
- ```ts
633
- function useFunction(
634
- name: string,
635
- definition: FunctionDefinition,
636
- options?: { root?: Document | ShadowRoot },
637
- ): void;
638
- ```
639
-
640
- See the [Functions section of the DSL reference](dsl.md#functions-function) for the full descriptor shape, token conventions, and value-sugar support. `@function` is an experimental CSS feature — unsupported browsers safely ignore the native rule, or enable the [`polyfills.functions`](configuration.md#polyfills) inline polyfill for full cross-browser support.
641
-
642
582
  ### Troubleshooting
643
583
 
644
584
  - Styles are not updating: make sure `configure()` runs before first render, and verify the generated class name or global rule with [Debug Utilities](debug.md).
package/docs/tasty/ssr.md CHANGED
@@ -18,18 +18,18 @@ The Astro integration (`@tenphi/tasty/ssr/astro`) has no additional dependencies
18
18
 
19
19
  ## How It Works
20
20
 
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 and serializes them as `<style>` tags plus a class-list script in the HTML. On the client, `hydrateTastyClasses()` pre-populates the injector's rules map with the rendered class names so that `computeStyles()` 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
- tasty() renders hydrateTastyClasses() reads window.__TASTY__
27
- └─ computeStyles() └─ marks rendered class names as already-in-DOM
26
+ tasty() renders hydrateTastyCache() pre-populates cache
27
+ └─ computeStyles() └─ cacheKey → className map ready
28
28
  └─ collector.collect()
29
29
  tasty() renders
30
30
  After render: └─ computeStyles()
31
- <style data-tasty-ssr> └─ class name known → skip pipeline
32
- <script> (pushes to __TASTY__) └─ no CSS re-injection
31
+ <style data-tasty-ssr> └─ cache hit → skip pipeline
32
+ <script data-tasty-cache> └─ no CSS re-injection
33
33
  ```
34
34
 
35
35
  ---
@@ -85,8 +85,8 @@ That's it. All `tasty()` components inside the tree automatically get SSR suppor
85
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
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
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 pushes the rendered class names into `window.__TASTY__` for each flush. This streaming-friendly approach accumulates the class list incrementally as Suspense boundaries resolve.
89
- - When the `@tenphi/tasty/ssr/next` module loads on the client, `hydrateTastyClasses()` runs automatically from `window.__TASTY__` and pre-populates the injector's rules map. During hydration, `computeStyles()` sees the class name is already registered and skips the entire pipeline.
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
91
  ### Using Tasty in Server Components
92
92
 
@@ -188,7 +188,7 @@ This gives you:
188
188
 
189
189
  - A `ServerStyleCollector` per request via `AsyncLocalStorage`, deduplicating CSS across all React trees on the page
190
190
  - A single consolidated `<style data-tasty-ssr>` injected into `</head>`
191
- - A `<script>` tag pushing the rendered class names into `window.__TASTY__` for client hydration
191
+ - A `<script data-tasty-cache>` tag with the `cacheKey -> className` map for client hydration
192
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
193
 
194
194
  All style functions (`useGlobalStyles`, `useRawCSS`, `useKeyframes`, `useProperty`, `useFontFace`, `useCounterStyle`) work on the server.
@@ -223,7 +223,7 @@ export default defineConfig({
223
223
  });
224
224
  ```
225
225
 
226
- This gives the same middleware deduplication and hook support, but ships zero client-side JavaScript. No class-list `<script>` is emitted.
226
+ This gives the same middleware deduplication and hook support, but ships zero client-side JavaScript. No `<script data-tasty-cache>` is emitted.
227
227
 
228
228
  ### Manual middleware (advanced)
229
229
 
@@ -258,7 +258,7 @@ export const onRequest = tastyMiddleware({ transferCache: false });
258
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
259
 
260
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 class list from `window.__TASTY__` and pre-populates the injector's rules map. The island's `computeStyles()` calls see the class names as already registered and skip the pipeline during hydration.
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
262
  - The middleware reads the full response body, then injects the collected CSS into `</head>` before sending the final HTML.
263
263
 
264
264
  ### CSP nonce
@@ -274,30 +274,31 @@ Any React-based framework can integrate using `runWithCollector`, which binds a
274
274
  ```tsx
275
275
  import {
276
276
  ServerStyleCollector,
277
- createServerStyleCollector,
278
277
  runWithCollector,
279
- hydrateTastyClasses,
278
+ hydrateTastyCache,
280
279
  } from '@tenphi/tasty/ssr';
281
280
  import { renderToString } from 'react-dom/server';
282
281
  import { hydrateRoot } from 'react-dom/client';
283
282
 
284
283
  // ── Server ──────────────────────────────────────────────
285
284
 
286
- const collector = createServerStyleCollector();
285
+ const collector = new ServerStyleCollector();
287
286
 
288
287
  const html = await runWithCollector(collector, () =>
289
288
  renderToString(<App />)
290
289
  );
291
290
 
292
291
  const css = collector.getCSS();
293
- const classNames = collector.getRenderedClassNames();
292
+ const cacheState = collector.getCacheState();
294
293
 
295
294
  // Embed in your HTML template:
296
295
  const fullHtml = `
297
296
  <html>
298
297
  <head>
299
298
  <style data-tasty-ssr>${css}</style>
300
- <script>(window.__TASTY__=window.__TASTY__||[]).push(${JSON.stringify(classNames)})</script>
299
+ <script data-tasty-cache type="application/json">
300
+ ${JSON.stringify(cacheState)}
301
+ </script>
301
302
  </head>
302
303
  <body>
303
304
  <div id="root">${html}</div>
@@ -308,7 +309,7 @@ const fullHtml = `
308
309
  // ── Client ──────────────────────────────────────────────
309
310
 
310
311
  // Before hydration:
311
- hydrateTastyClasses(); // reads from window.__TASTY__
312
+ hydrateTastyCache(); // reads from <script data-tasty-cache>
312
313
 
313
314
  hydrateRoot(document.getElementById('root'), <App />);
314
315
  ```
@@ -318,7 +319,7 @@ hydrateRoot(document.getElementById('root'), <App />);
318
319
  For streaming with `renderToPipeableStream`, use `flushCSS()` instead of `getCSS()`:
319
320
 
320
321
  ```tsx
321
- const collector = createServerStyleCollector();
322
+ const collector = new ServerStyleCollector();
322
323
 
323
324
  const stream = await runWithCollector(collector, () =>
324
325
  renderToPipeableStream(<App />, {
@@ -329,14 +330,12 @@ const stream = await runWithCollector(collector, () =>
329
330
  stream.pipe(res);
330
331
  },
331
332
  onAllReady() {
332
- // Flush any remaining styles + class list
333
+ // Flush any remaining styles + cache state
333
334
  const css = collector.flushCSS();
334
335
  if (css) res.write(`<style data-tasty-ssr>${css}</style>`);
335
336
 
336
- const classNames = collector.getRenderedClassNames();
337
- res.write(
338
- `<script>(window.__TASTY__=window.__TASTY__||[]).push(${JSON.stringify(classNames)})</script>`,
339
- );
337
+ const state = collector.getCacheState();
338
+ res.write(`<script data-tasty-cache type="application/json">${JSON.stringify(state)}</script>`);
340
339
  },
341
340
  })
342
341
  );
@@ -350,7 +349,7 @@ const stream = await runWithCollector(collector, () =>
350
349
 
351
350
  | Import path | Description |
352
351
  |---|---|
353
- | `@tenphi/tasty/ssr` | Core SSR API: `ServerStyleCollector`, `createServerStyleCollector`, `runWithCollector`, `hydrateTastyClasses` |
352
+ | `@tenphi/tasty/ssr` | Core SSR API: `ServerStyleCollector`, `runWithCollector`, `hydrateTastyCache` |
354
353
  | `@tenphi/tasty/ssr/next` | Next.js App Router: `TastyRegistry` component |
355
354
  | `@tenphi/tasty/ssr/astro` | Astro: `tastyIntegration`, `tastyMiddleware` |
356
355
  | `@tenphi/tasty/ssr/astro-client` | Astro: client-side cache hydration (auto-injected by integration, or import manually) |
@@ -359,7 +358,7 @@ const stream = await runWithCollector(collector, () =>
359
358
 
360
359
  Server-safe style collector. One instance per request.
361
360
 
362
- Constructor: `new ServerStyleCollector(namePrefix?)`, or use the `createServerStyleCollector(namePrefix?)` factory. The optional `namePrefix` overrides the value from `configure({ namePrefix })`; in normal usage you pass nothing and let the global config drive it. See [Configuration: Name prefix](configuration.md#name-prefix).
361
+ Constructor: `new ServerStyleCollector(namePrefix?)`. The optional `namePrefix` overrides the value from `configure({ namePrefix })`; in normal usage you pass nothing and let the global config drive it. See [Configuration: Name prefix](configuration.md#name-prefix).
363
362
 
364
363
  | Method | Description |
365
364
  |---|---|
@@ -376,7 +375,7 @@ Constructor: `new ServerStyleCollector(namePrefix?)`, or use the `createServerSt
376
375
  | `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. |
377
376
  | `getCSS()` | Get all collected CSS as a single string. For non-streaming SSR. |
378
377
  | `flushCSS()` | Get only CSS collected since the last flush. For streaming SSR. |
379
- | `getRenderedClassNames()` | Get the list of class names rendered so far. Serialized to `window.__TASTY__` for client hydration via `hydrateTastyClasses()`. |
378
+ | `getCacheState()` | Serialize `{ entries: Record<cacheKey, className>, classCounter }` for client hydration. |
380
379
 
381
380
  ### `TastyRegistry`
382
381
 
@@ -403,9 +402,9 @@ Astro middleware factory. Use for manual middleware composition.
403
402
  |---|---|---|---|
404
403
  | `transferCache` | `boolean` | `true` | Embed cache state script for island hydration |
405
404
 
406
- ### `hydrateTastyClasses(classes?)`
405
+ ### `hydrateTastyCache(state?)`
407
406
 
408
- Pre-populate the client injector's rules map with class names rendered on the server, marking them as already present in the DOM so `computeStyles()` skips re-injection during hydration. When called without arguments, reads the class list from `window.__TASTY__` (populated by the streaming `<script>` tags emitted during SSR).
407
+ Pre-populate the client injector cache. When called without arguments, reads from `window.__TASTY_SSR_CACHE__` (streaming) or `<script data-tasty-cache>` (non-streaming).
409
408
 
410
409
  ### `runWithCollector(collector, fn)`
411
410
 
@@ -421,29 +420,23 @@ The `TastyRegistry` or `tastyIntegration` is missing. Ensure your layout wraps t
421
420
 
422
421
  ### Hydration mismatch warnings
423
422
 
424
- Class names are deterministic for the same render order. If you see mismatches, ensure `hydrateTastyClasses()` 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 `hydrateTastyClasses()` before `hydrateRoot()`.
425
-
426
- Class names are also derived from the *resolved* styles, so the server and the client must configure Tasty identically. Anything that changes what a component's styles resolve to will produce a mismatch if it is registered on only one side — `namePrefix`, `recipes`, `handlers`, and the `propHandlers` / `baseStyleProps` extension points described in [Plugins](plugins.md). Call the same `configure()` on both; global CSS is deduplicated automatically, so no `typeof window` guard is needed.
423
+ 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()`.
427
424
 
428
425
  ### Styles duplicated after hydration
429
426
 
430
427
  **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.
431
428
 
432
- **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, you can remove the SSR style tags and hydration scripts manually after hydration:
429
+ **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:
433
430
 
434
431
  ```tsx
435
- import { hydrateTastyClasses } from '@tenphi/tasty/ssr';
432
+ import { hydrateTastyCache } from '@tenphi/tasty/ssr';
436
433
 
437
- hydrateTastyClasses();
434
+ hydrateTastyCache();
438
435
  hydrateRoot(root, <App />);
439
436
 
440
- // Optional: remove SSR style tags and class-list scripts after hydration
441
- document.querySelectorAll('style[data-tasty-ssr]').forEach((el) => el.remove());
442
- document
443
- .querySelectorAll('script')
444
- .forEach((el) => {
445
- if (el.textContent?.includes('__TASTY__')) el.remove();
446
- });
437
+ // Optional: remove SSR style tags after hydration
438
+ document.querySelectorAll('style[data-tasty-ssr]').forEach(el => el.remove());
439
+ document.querySelectorAll('script[data-tasty-cache]').forEach(el => el.remove());
447
440
  ```
448
441
 
449
442
  ### `AsyncLocalStorage` not available
@@ -1,6 +1,6 @@
1
1
  # Style Properties Reference
2
2
 
3
- All standard CSS properties are supported in Tasty and benefit from its syntax sugar: design tokens (`$name`, `#name`), custom units (`2x`, `1r`, `1bw`), color opacity (`#purple.5`), auto-calc (`(100% - 2x)`), and [custom functions](dsl.md#functions-function) (`$$negative(10px)`). Values are parsed through the Tasty engine automatically.
3
+ All standard CSS properties are supported in Tasty and benefit from its syntax sugar: design tokens (`$name`, `#name`), custom units (`2x`, `1r`, `1bw`), color opacity (`#purple.5`), auto-calc (`(100% - 2x)`), and custom functions. Values are parsed through the Tasty engine automatically.
4
4
 
5
5
  The properties documented below have **custom handlers** with enhanced syntax. They should be **preferred** over their raw CSS equivalents because they:
6
6
 
@@ -100,23 +100,18 @@ For flex/grid layouts, outputs native `gap`. For block layouts, emulates gap usi
100
100
 
101
101
  Element padding with directional modifiers and multi-group support. Use **comma-separated groups** to set a base value and then override specific directions.
102
102
 
103
- **Syntax:** `[value]` | `[block inline]` | `[top right bottom left]` | `[value direction...]` — comma-separated for multiple groups
103
+ **Syntax:** `[value]` | `[top right]` | `[top right bottom left]` | `[value directions...]` — comma-separated for multiple groups
104
104
 
105
105
  **Direction modifiers:** `top`, `right`, `bottom`, `left`
106
106
 
107
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
108
 
109
- **One value per directional group.** A group that names direction modifiers takes **exactly one** value, applied to every direction it names. For different values per side, use comma-separated groups: `padding: '2x top, 4x right'`. Writing `padding: '2x 4x top right'` ignores `4x` and warns in development — the parser keeps values and modifiers in separate buckets, so their interleaving in the source is not recoverable and `'2x 4x top right'`, `'2x top 4x right'` and `'top 2x right 4x'` are all the same input.
110
-
111
- A group that names *no* direction keeps plain CSS shorthand order, which is unambiguous and unchanged.
112
-
113
109
  | Value | Effect |
114
110
  |-------|--------|
115
111
  | `"2x"` | All sides `2x` |
116
112
  | `"2x 1x"` | Top/bottom `2x`, left/right `1x` |
117
113
  | `"2x top"` | Top `2x`, right/bottom/left `0` |
118
114
  | `"1x left right"` | Left and right `1x`, top/bottom `0` |
119
- | `"2x top, 4x right"` | Top `2x`, right `4x`, bottom/left `0` |
120
115
  | `"1x, 2x top"` | All sides `1x`, then top overridden to `2x` |
121
116
  | `"1x, 2x top bottom"` | Left/right `1x`, top/bottom `2x` |
122
117
  | `"2x longhand"` | All sides `2x`, output as 4 individual `padding-*` properties |
@@ -133,20 +128,17 @@ Individual props `paddingTop`, `paddingRight`, `paddingBottom`, `paddingLeft`, `
133
128
 
134
129
  Element margin. Same syntax, modifiers, and multi-group support as `padding`.
135
130
 
136
- **Syntax:** `[value]` | `[block inline]` | `[top right bottom left]` | `[value direction...]` — comma-separated for multiple groups
131
+ **Syntax:** `[value]` | `[top right]` | `[top right bottom left]` | `[value directions...]` — comma-separated for multiple groups
137
132
 
138
133
  **Direction modifiers:** `top`, `right`, `bottom`, `left`
139
134
 
140
135
  **Output modifier:** `longhand` — forces output as individual CSS longhand properties (`margin-top`, etc.) instead of the `margin` shorthand.
141
136
 
142
- The [one-value-per-directional-group rule](#padding) from `padding` applies here too.
143
-
144
137
  | Value | Effect |
145
138
  |-------|--------|
146
139
  | `"2x"` | All sides `2x` |
147
140
  | `"2x 1x"` | Top/bottom `2x`, left/right `1x` |
148
141
  | `"2x top"` | Top `2x`, right/bottom/left `0` |
149
- | `"2x top, 4x right"` | Top `2x`, right `4x`, bottom/left `0` |
150
142
  | `"auto left right, 1x top bottom"` | Left/right `auto`, top/bottom `1x` |
151
143
  | `true` | All sides `1x` |
152
144
  | Number | Converted to `px` |
@@ -199,22 +191,17 @@ Separate `minHeight` and `maxHeight` props are supported and override values fro
199
191
 
200
192
  Positioning offsets with directional modifiers and multi-group support. Same directional syntax as `padding`.
201
193
 
202
- **Syntax:** `[value]` | `[block inline]` | `[top right bottom left]` | `[value direction...]` — comma-separated for multiple groups
194
+ **Syntax:** `[value]` | `[top right]` | `[top right bottom left]` | `[value directions...]` — comma-separated for multiple groups
203
195
 
204
196
  **Direction modifiers:** `top`, `right`, `bottom`, `left`
205
197
 
206
- The [one-value-per-directional-group rule](#padding) from `padding` applies here too, with `dock`
207
- as the single exception.
208
-
209
198
  **`dock` modifier:** pins the named edge and spans its full length, by also applying the value
210
199
  to the two perpendicular sides. `inset: 'bottom dock'` gives `inset: auto 0 0 0` — anchored to
211
200
  the bottom, full width. Without a direction, `dock` fills every side.
212
201
 
213
- `dock` is the one place a directional group takes **two** values: the first insets the named
214
- edge, the second the sides it spans. `inset: '2x 4x bottom dock'` pins the bottom at `2x` and
215
- insets the sides by `4x`. A third value, or a second value without `dock`, is ignored and warns
216
- in development. With several directions the first value applies to each named edge and the
217
- second to every side they span.
202
+ A second value applies to the spanned sides: `inset: '2x 4x bottom dock'` pins the bottom at
203
+ `2x` and insets the sides by `4x`. Intended for a single edge — combining `dock` with several
204
+ directions has no well-defined meaning.
218
205
 
219
206
  **Output modifier:** `longhand` — forces output as individual CSS properties (`top`, `right`, `bottom`, `left`) instead of the `inset` shorthand.
220
207
 
@@ -585,20 +572,15 @@ Scrollbar styling using CSS standard properties (`scrollbar-width`, `scrollbar-c
585
572
 
586
573
  Gradient-based edge fading using CSS masks. Use **comma-separated groups** to set different widths and colors per direction.
587
574
 
588
- **Syntax:** `[width] [direction...] [#from-color] [#to-color]` — comma-separated for multiple groups
575
+ **Syntax:** `[width] [directions...] [#from-color] [#to-color]` — comma-separated for multiple groups
589
576
 
590
577
  **Direction modifiers:** `top`, `right`, `bottom`, `left`
591
578
 
592
- A group that names edges takes a **single** width, applied to every edge it names — different
593
- widths per edge come from comma groups. A group that names no edge covers all four and keeps
594
- plain CSS shorthand order, like `padding`. See the [`padding` rule](#padding).
595
-
596
579
  | Value | Effect |
597
580
  |-------|--------|
598
581
  | `"top"` | Fade top edge, default width (`2x`), all other edges unfaded |
599
582
  | `"2x left right"` | Fade left and right edges with `2x` width, top/bottom unfaded |
600
- | `"3x 1x"` | All edges faded — top/bottom `3x`, left/right `1x` (CSS shorthand order) |
601
- | `"3x top, 1x bottom"` | Fade top with `3x` width, bottom with `1x` width |
583
+ | `"3x 1x top bottom"` | Fade top with `3x` width, bottom with `1x` width |
602
584
  | `"2x #transparent #dark"` | All edges faded with `2x` width, from `#transparent` to `#dark` |
603
585
  | `"top #a #b, bottom #c #d"` | Top fades from `#a` to `#b`, bottom fades from `#c` to `#d` |
604
586