@k8ordo/ui 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. package/README.md +197 -187
  2. package/dist/_virtual/_rolldown/runtime.mjs +13 -0
  3. package/dist/components/_internal/focus-ring.css +37 -0
  4. package/dist/components/_internal/focus-ring.module.mjs +9 -0
  5. package/dist/components/_internal/form-value.d.mts +33 -0
  6. package/dist/components/_internal/form-value.mjs +91 -0
  7. package/dist/components/_internal/high-contrast.css +18 -0
  8. package/dist/components/_internal/high-contrast.module.mjs +5 -0
  9. package/dist/components/_internal/ignore-changes.d.mts +20 -0
  10. package/dist/components/_internal/ignore-changes.mjs +37 -0
  11. package/dist/components/_internal/nav-link.css +78 -0
  12. package/dist/components/_internal/nav-link.d.mts +5 -0
  13. package/dist/components/_internal/nav-link.mjs +8 -0
  14. package/dist/components/_internal/nav-link.module.mjs +14 -0
  15. package/dist/components/_internal/sr-only.css +17 -0
  16. package/dist/components/_internal/sr-only.module.mjs +5 -0
  17. package/dist/components/_internal/status-tone.css +37 -0
  18. package/dist/components/_internal/status-tone.d.mts +20 -0
  19. package/dist/components/_internal/status-tone.mjs +22 -0
  20. package/dist/components/_internal/status-tone.module.mjs +14 -0
  21. package/dist/components/ai/_internal/attachment-preview.css +75 -0
  22. package/dist/components/ai/_internal/attachment-preview.d.mts +14 -0
  23. package/dist/components/ai/_internal/attachment-preview.mjs +50 -0
  24. package/dist/components/ai/_internal/attachment-preview.module.mjs +14 -0
  25. package/dist/components/ai/_internal/collapsible.css +62 -0
  26. package/dist/components/ai/_internal/collapsible.d.mts +4 -3
  27. package/dist/components/ai/_internal/collapsible.mjs +42 -33
  28. package/dist/components/ai/_internal/collapsible.module.mjs +12 -0
  29. package/dist/components/ai/_internal/icons.d.mts +7 -0
  30. package/dist/components/ai/_internal/icons.mjs +14 -0
  31. package/dist/components/ai/_internal/streaming-cursor.css +28 -0
  32. package/dist/components/ai/_internal/streaming-cursor.d.mts +2 -3
  33. package/dist/components/ai/_internal/streaming-cursor.mjs +2 -1
  34. package/dist/components/ai/_internal/streaming-cursor.module.mjs +8 -0
  35. package/dist/components/ai/attachment/attachment.css +17 -0
  36. package/dist/components/ai/attachment/attachment.d.mts +14 -0
  37. package/dist/components/ai/attachment/attachment.mjs +25 -0
  38. package/dist/components/ai/attachment/attachment.module.mjs +8 -0
  39. package/dist/components/ai/attachment/index.d.mts +13 -0
  40. package/dist/components/ai/attachment/index.mjs +8 -0
  41. package/dist/components/ai/conversation/conversation.css +71 -0
  42. package/dist/components/ai/conversation/conversation.d.mts +4 -5
  43. package/dist/components/ai/conversation/conversation.mjs +38 -34
  44. package/dist/components/ai/conversation/conversation.module.mjs +11 -0
  45. package/dist/components/ai/conversation/index.d.mts +2 -3
  46. package/dist/components/ai/index.d.mts +4 -2
  47. package/dist/components/ai/index.mjs +3 -1
  48. package/dist/components/ai/message/index.d.mts +29 -3
  49. package/dist/components/ai/message/index.mjs +7 -2
  50. package/dist/components/ai/message/message.css +71 -0
  51. package/dist/components/ai/message/message.d.mts +34 -4
  52. package/dist/components/ai/message/message.mjs +99 -9
  53. package/dist/components/ai/message/message.module.mjs +18 -0
  54. package/dist/components/ai/prompt-input/index.d.mts +11 -4
  55. package/dist/components/ai/prompt-input/index.mjs +3 -1
  56. package/dist/components/ai/prompt-input/prompt-input.css +101 -0
  57. package/dist/components/ai/prompt-input/prompt-input.d.mts +15 -6
  58. package/dist/components/ai/prompt-input/prompt-input.mjs +152 -37
  59. package/dist/components/ai/prompt-input/prompt-input.module.mjs +15 -0
  60. package/dist/components/ai/reasoning/reasoning.css +16 -0
  61. package/dist/components/ai/reasoning/reasoning.d.mts +2 -3
  62. package/dist/components/ai/reasoning/reasoning.mjs +5 -5
  63. package/dist/components/ai/reasoning/reasoning.module.mjs +8 -0
  64. package/dist/components/ai/response/response.css +453 -0
  65. package/dist/components/ai/response/response.d.mts +4 -6
  66. package/dist/components/ai/response/response.mjs +20 -15
  67. package/dist/components/ai/response/response.module.mjs +8 -0
  68. package/dist/components/ai/source/index.d.mts +12 -0
  69. package/dist/components/ai/source/index.mjs +8 -0
  70. package/dist/components/ai/source/source.css +54 -0
  71. package/dist/components/ai/source/source.d.mts +13 -0
  72. package/dist/components/ai/source/source.mjs +51 -0
  73. package/dist/components/ai/source/source.module.mjs +12 -0
  74. package/dist/components/ai/suggestion/index.d.mts +2 -3
  75. package/dist/components/ai/suggestion/suggestion.css +32 -0
  76. package/dist/components/ai/suggestion/suggestion.d.mts +3 -4
  77. package/dist/components/ai/suggestion/suggestion.mjs +7 -6
  78. package/dist/components/ai/suggestion/suggestion.module.mjs +8 -0
  79. package/dist/components/ai/tool-invocation/approval-bar.css +26 -0
  80. package/dist/components/ai/tool-invocation/approval-bar.d.mts +11 -0
  81. package/dist/components/ai/tool-invocation/approval-bar.mjs +59 -0
  82. package/dist/components/ai/tool-invocation/approval-bar.module.mjs +9 -0
  83. package/dist/components/ai/tool-invocation/tool-invocation.css +55 -0
  84. package/dist/components/ai/tool-invocation/tool-invocation.d.mts +5 -5
  85. package/dist/components/ai/tool-invocation/tool-invocation.mjs +39 -18
  86. package/dist/components/ai/tool-invocation/tool-invocation.module.mjs +15 -0
  87. package/dist/components/ai/types.d.mts +21 -4
  88. package/dist/components/buttons/button/button.css +158 -0
  89. package/dist/components/buttons/button/button.d.mts +32 -9
  90. package/dist/components/buttons/button/button.mjs +46 -36
  91. package/dist/components/buttons/button/button.module.mjs +23 -0
  92. package/dist/components/buttons/button/index.d.mts +2 -2
  93. package/dist/components/buttons/copy-button/copy-button.css +15 -0
  94. package/dist/components/buttons/copy-button/copy-button.d.mts +10 -0
  95. package/dist/components/buttons/copy-button/copy-button.mjs +70 -0
  96. package/dist/components/buttons/copy-button/copy-button.module.mjs +8 -0
  97. package/dist/components/buttons/copy-button/index.d.mts +2 -0
  98. package/dist/components/buttons/copy-button/index.mjs +2 -0
  99. package/dist/components/buttons/icon-button/icon-button.css +81 -0
  100. package/dist/components/buttons/icon-button/icon-button.d.mts +39 -12
  101. package/dist/components/buttons/icon-button/icon-button.mjs +70 -57
  102. package/dist/components/buttons/icon-button/icon-button.module.mjs +15 -0
  103. package/dist/components/buttons/icon-button/index.d.mts +2 -2
  104. package/dist/components/buttons/toolbar/index.d.mts +14 -0
  105. package/dist/components/buttons/toolbar/index.mjs +9 -0
  106. package/dist/components/buttons/toolbar/toolbar.css +30 -0
  107. package/dist/components/buttons/toolbar/toolbar.d.mts +18 -0
  108. package/dist/components/buttons/toolbar/toolbar.mjs +111 -0
  109. package/dist/components/buttons/toolbar/toolbar.module.mjs +9 -0
  110. package/dist/components/data-display/accordion/accordion-button.css +48 -0
  111. package/dist/components/data-display/accordion/accordion-button.d.mts +2 -3
  112. package/dist/components/data-display/accordion/accordion-button.mjs +5 -4
  113. package/dist/components/data-display/accordion/accordion-button.module.mjs +9 -0
  114. package/dist/components/data-display/accordion/accordion-item.css +11 -0
  115. package/dist/components/data-display/accordion/accordion-item.d.mts +2 -3
  116. package/dist/components/data-display/accordion/accordion-item.mjs +2 -1
  117. package/dist/components/data-display/accordion/accordion-item.module.mjs +5 -0
  118. package/dist/components/data-display/accordion/accordion-panel.css +9 -0
  119. package/dist/components/data-display/accordion/accordion-panel.d.mts +2 -3
  120. package/dist/components/data-display/accordion/accordion-panel.mjs +2 -2
  121. package/dist/components/data-display/accordion/accordion-panel.module.mjs +5 -0
  122. package/dist/components/data-display/accordion/accordion.css +19 -0
  123. package/dist/components/data-display/accordion/accordion.d.mts +2 -3
  124. package/dist/components/data-display/accordion/accordion.mjs +2 -1
  125. package/dist/components/data-display/accordion/accordion.module.mjs +5 -0
  126. package/dist/components/data-display/accordion/context.d.mts +3 -3
  127. package/dist/components/data-display/accordion/index.d.mts +2 -3
  128. package/dist/components/data-display/avatar/avatar.css +95 -0
  129. package/dist/components/data-display/avatar/avatar.d.mts +2 -3
  130. package/dist/components/data-display/avatar/avatar.mjs +22 -6
  131. package/dist/components/data-display/avatar/avatar.module.mjs +18 -0
  132. package/dist/components/data-display/badge/badge.css +160 -0
  133. package/dist/components/data-display/badge/badge.d.mts +2 -3
  134. package/dist/components/data-display/badge/badge.mjs +30 -5
  135. package/dist/components/data-display/badge/badge.module.mjs +21 -0
  136. package/dist/components/data-display/card/card.css +44 -0
  137. package/dist/components/data-display/card/card.d.mts +2 -3
  138. package/dist/components/data-display/card/card.mjs +12 -2
  139. package/dist/components/data-display/card/card.module.mjs +12 -0
  140. package/dist/components/data-display/carousel/carousel.css +83 -0
  141. package/dist/components/data-display/carousel/carousel.d.mts +11 -0
  142. package/dist/components/data-display/carousel/carousel.mjs +186 -0
  143. package/dist/components/data-display/carousel/carousel.module.mjs +18 -0
  144. package/dist/components/data-display/carousel/index.d.mts +11 -0
  145. package/dist/components/data-display/carousel/index.mjs +8 -0
  146. package/dist/components/data-display/code/code.css +37 -0
  147. package/dist/components/data-display/code/code.d.mts +2 -3
  148. package/dist/components/data-display/code/code.mjs +7 -6
  149. package/dist/components/data-display/code/code.module.mjs +9 -0
  150. package/dist/components/data-display/code/find-all-colors.d.mts +2 -3
  151. package/dist/components/data-display/code/find-all-colors.mjs +0 -161
  152. package/dist/components/data-display/code-block/code-block.css +161 -0
  153. package/dist/components/data-display/code-block/code-block.d.mts +12 -0
  154. package/dist/components/data-display/code-block/code-block.mjs +44 -0
  155. package/dist/components/data-display/code-block/code-block.module.mjs +11 -0
  156. package/dist/components/data-display/code-block/highlight.d.mts +9 -0
  157. package/dist/components/data-display/code-block/highlight.mjs +54 -0
  158. package/dist/components/data-display/code-block/index.d.mts +2 -0
  159. package/dist/components/data-display/code-block/index.mjs +2 -0
  160. package/dist/components/data-display/data-table/data-table.css +74 -0
  161. package/dist/components/data-display/data-table/data-table.d.mts +31 -0
  162. package/dist/components/data-display/data-table/data-table.mjs +155 -0
  163. package/dist/components/data-display/data-table/data-table.module.mjs +14 -0
  164. package/dist/components/data-display/data-table/index.d.mts +2 -0
  165. package/dist/components/data-display/data-table/index.mjs +2 -0
  166. package/dist/components/data-display/heading/heading.css +99 -0
  167. package/dist/components/data-display/heading/heading.d.mts +2 -3
  168. package/dist/components/data-display/heading/heading.mjs +15 -14
  169. package/dist/components/data-display/heading/heading.module.mjs +20 -0
  170. package/dist/components/data-display/kbd/index.d.mts +2 -0
  171. package/dist/components/data-display/kbd/index.mjs +2 -0
  172. package/dist/components/data-display/kbd/kbd.css +21 -0
  173. package/dist/components/data-display/kbd/kbd.d.mts +8 -0
  174. package/dist/components/data-display/kbd/kbd.mjs +17 -0
  175. package/dist/components/data-display/kbd/kbd.module.mjs +5 -0
  176. package/dist/components/data-display/prose/index.d.mts +2 -0
  177. package/dist/components/data-display/prose/index.mjs +2 -0
  178. package/dist/components/data-display/prose/prose.css +253 -0
  179. package/dist/components/data-display/prose/prose.d.mts +5 -0
  180. package/dist/components/data-display/prose/prose.mjs +10 -0
  181. package/dist/components/data-display/prose/prose.module.mjs +5 -0
  182. package/dist/components/data-display/table/table.css +107 -0
  183. package/dist/components/data-display/table/table.d.mts +10 -9
  184. package/dist/components/data-display/table/table.mjs +26 -15
  185. package/dist/components/data-display/table/table.module.mjs +22 -0
  186. package/dist/components/data-display/tree/index.d.mts +2 -0
  187. package/dist/components/data-display/tree/index.mjs +2 -0
  188. package/dist/components/data-display/tree/tree.css +84 -0
  189. package/dist/components/data-display/tree/tree.d.mts +20 -0
  190. package/dist/components/data-display/tree/tree.mjs +151 -0
  191. package/dist/components/data-display/tree/tree.module.mjs +15 -0
  192. package/dist/components/feedback/alert/alert.css +42 -0
  193. package/dist/components/feedback/alert/alert.d.mts +3 -4
  194. package/dist/components/feedback/alert/alert.mjs +20 -23
  195. package/dist/components/feedback/alert/alert.module.mjs +14 -0
  196. package/dist/components/feedback/callout/callout.css +38 -0
  197. package/dist/components/feedback/callout/callout.d.mts +10 -0
  198. package/dist/components/feedback/callout/callout.mjs +38 -0
  199. package/dist/components/feedback/callout/callout.module.mjs +11 -0
  200. package/dist/components/feedback/callout/index.d.mts +2 -0
  201. package/dist/components/feedback/callout/index.mjs +2 -0
  202. package/dist/components/feedback/empty-state/empty-state.css +36 -0
  203. package/dist/components/feedback/empty-state/empty-state.d.mts +10 -0
  204. package/dist/components/feedback/empty-state/empty-state.mjs +27 -0
  205. package/dist/components/feedback/empty-state/empty-state.module.mjs +11 -0
  206. package/dist/components/feedback/empty-state/index.d.mts +2 -0
  207. package/dist/components/feedback/empty-state/index.mjs +2 -0
  208. package/dist/components/feedback/progress/progress.css +78 -0
  209. package/dist/components/feedback/progress/progress.d.mts +5 -5
  210. package/dist/components/feedback/progress/progress.mjs +17 -3
  211. package/dist/components/feedback/progress/progress.module.mjs +12 -0
  212. package/dist/components/feedback/skeleton/skeleton.css +64 -0
  213. package/dist/components/feedback/skeleton/skeleton.d.mts +2 -3
  214. package/dist/components/feedback/skeleton/skeleton.mjs +19 -2
  215. package/dist/components/feedback/skeleton/skeleton.module.mjs +17 -0
  216. package/dist/components/feedback/spinner/spinner.css +40 -0
  217. package/dist/components/feedback/spinner/spinner.d.mts +2 -3
  218. package/dist/components/feedback/spinner/spinner.mjs +13 -7
  219. package/dist/components/feedback/spinner/spinner.module.mjs +12 -0
  220. package/dist/components/feedback/toast/context.d.mts +8 -9
  221. package/dist/components/feedback/toast/provider.css +69 -0
  222. package/dist/components/feedback/toast/provider.d.mts +2 -3
  223. package/dist/components/feedback/toast/provider.mjs +17 -13
  224. package/dist/components/feedback/toast/provider.module.mjs +12 -0
  225. package/dist/components/feedback/toast/toast.d.mts +2 -3
  226. package/dist/components/form/autocomplete/autocomplete.css +154 -0
  227. package/dist/components/form/autocomplete/autocomplete.d.mts +2 -3
  228. package/dist/components/form/autocomplete/autocomplete.mjs +70 -46
  229. package/dist/components/form/autocomplete/autocomplete.module.mjs +21 -0
  230. package/dist/components/form/calendar/calendar.css +98 -0
  231. package/dist/components/form/calendar/calendar.d.mts +14 -0
  232. package/dist/components/form/calendar/calendar.mjs +182 -0
  233. package/dist/components/form/calendar/calendar.module.mjs +18 -0
  234. package/dist/components/form/calendar/index.d.mts +2 -0
  235. package/dist/components/form/calendar/index.mjs +2 -0
  236. package/dist/components/form/checkbox/checkbox.css +90 -0
  237. package/dist/components/form/checkbox/checkbox.d.mts +4 -3
  238. package/dist/components/form/checkbox/checkbox.mjs +29 -27
  239. package/dist/components/form/checkbox/checkbox.module.mjs +13 -0
  240. package/dist/components/form/checkbox-card/checkbox-card.css +138 -0
  241. package/dist/components/form/checkbox-card/checkbox-card.d.mts +3 -4
  242. package/dist/components/form/checkbox-card/checkbox-card.mjs +17 -23
  243. package/dist/components/form/checkbox-card/checkbox-card.module.mjs +17 -0
  244. package/dist/components/form/checkbox-group/checkbox-group.css +15 -0
  245. package/dist/components/form/checkbox-group/checkbox-group.d.mts +7 -5
  246. package/dist/components/form/checkbox-group/checkbox-group.mjs +12 -16
  247. package/dist/components/form/checkbox-group/checkbox-group.module.mjs +8 -0
  248. package/dist/components/form/checkbox-group/index.d.mts +4 -3
  249. package/dist/components/form/color-picker/color-picker.css +172 -0
  250. package/dist/components/form/color-picker/color-picker.d.mts +28 -0
  251. package/dist/components/form/color-picker/color-picker.mjs +239 -0
  252. package/dist/components/form/color-picker/color-picker.module.mjs +20 -0
  253. package/dist/components/form/color-picker/index.d.mts +2 -0
  254. package/dist/components/form/color-picker/index.mjs +2 -0
  255. package/dist/components/form/combobox/combobox.css +143 -0
  256. package/dist/components/form/combobox/combobox.d.mts +32 -0
  257. package/dist/components/form/combobox/combobox.mjs +278 -0
  258. package/dist/components/form/combobox/combobox.module.mjs +19 -0
  259. package/dist/components/form/combobox/index.d.mts +2 -0
  260. package/dist/components/form/combobox/index.mjs +2 -0
  261. package/dist/components/form/date-field/date-field.css +31 -0
  262. package/dist/components/form/date-field/date-field.d.mts +8 -0
  263. package/dist/components/form/date-field/date-field.mjs +20 -0
  264. package/dist/components/form/date-field/date-field.module.mjs +5 -0
  265. package/dist/components/form/date-field/index.d.mts +2 -0
  266. package/dist/components/form/date-field/index.mjs +2 -0
  267. package/dist/components/form/date-picker/date-picker.css +90 -0
  268. package/dist/components/form/date-picker/date-picker.d.mts +12 -0
  269. package/dist/components/form/date-picker/date-picker.mjs +77 -0
  270. package/dist/components/form/date-picker/date-picker.module.mjs +14 -0
  271. package/dist/components/form/date-picker/index.d.mts +2 -0
  272. package/dist/components/form/date-picker/index.mjs +2 -0
  273. package/dist/components/form/file-field/file-field.css +88 -0
  274. package/dist/components/form/file-field/file-field.d.mts +9 -7
  275. package/dist/components/form/file-field/file-field.mjs +130 -37
  276. package/dist/components/form/file-field/file-field.module.mjs +17 -0
  277. package/dist/components/form/file-field/index.d.mts +5 -3
  278. package/dist/components/form/file-field/index.mjs +2 -1
  279. package/dist/components/form/form/form.css +11 -0
  280. package/dist/components/form/form/form.d.mts +4 -4
  281. package/dist/components/form/form/form.mjs +2 -1
  282. package/dist/components/form/form/form.module.mjs +5 -0
  283. package/dist/components/form/form-control/form-control.css +43 -0
  284. package/dist/components/form/form-control/form-control.d.mts +2 -3
  285. package/dist/components/form/form-control/form-control.mjs +11 -10
  286. package/dist/components/form/form-control/form-control.module.mjs +12 -0
  287. package/dist/components/form/number-field/cast.d.mts +2 -3
  288. package/dist/components/form/number-field/cast.mjs +3 -22
  289. package/dist/components/form/number-field/number-field.css +122 -0
  290. package/dist/components/form/number-field/number-field.d.mts +10 -10
  291. package/dist/components/form/number-field/number-field.mjs +126 -54
  292. package/dist/components/form/number-field/number-field.module.mjs +10 -0
  293. package/dist/components/form/password-input/password-input.css +88 -0
  294. package/dist/components/form/password-input/password-input.d.mts +2 -3
  295. package/dist/components/form/password-input/password-input.mjs +15 -12
  296. package/dist/components/form/password-input/password-input.module.mjs +12 -0
  297. package/dist/components/form/radio/radio.css +89 -0
  298. package/dist/components/form/radio/radio.d.mts +3 -3
  299. package/dist/components/form/radio/radio.mjs +15 -19
  300. package/dist/components/form/radio/radio.module.mjs +16 -0
  301. package/dist/components/form/radio-card/radio-card.css +147 -0
  302. package/dist/components/form/radio-card/radio-card.d.mts +4 -4
  303. package/dist/components/form/radio-card/radio-card.mjs +17 -23
  304. package/dist/components/form/radio-card/radio-card.module.mjs +19 -0
  305. package/dist/components/form/range-slider/index.d.mts +2 -0
  306. package/dist/components/form/range-slider/index.mjs +2 -0
  307. package/dist/components/form/range-slider/range-slider.css +67 -0
  308. package/dist/components/form/range-slider/range-slider.d.mts +30 -0
  309. package/dist/components/form/range-slider/range-slider.mjs +135 -0
  310. package/dist/components/form/range-slider/range-slider.module.mjs +14 -0
  311. package/dist/components/form/select/select.css +74 -0
  312. package/dist/components/form/select/select.d.mts +2 -3
  313. package/dist/components/form/select/select.mjs +25 -8
  314. package/dist/components/form/select/select.module.mjs +12 -0
  315. package/dist/components/form/slider/range-input-class.css +97 -0
  316. package/dist/components/form/slider/range-input-class.d.mts +7 -0
  317. package/dist/components/form/slider/range-input-class.mjs +10 -0
  318. package/dist/components/form/slider/range-input-class.module.mjs +8 -0
  319. package/dist/components/form/slider/slider.css +55 -0
  320. package/dist/components/form/slider/slider.d.mts +6 -7
  321. package/dist/components/form/slider/slider.mjs +44 -11
  322. package/dist/components/form/slider/slider.module.mjs +12 -0
  323. package/dist/components/form/switch/switch.css +103 -0
  324. package/dist/components/form/switch/switch.d.mts +2 -3
  325. package/dist/components/form/switch/switch.mjs +14 -17
  326. package/dist/components/form/switch/switch.module.mjs +16 -0
  327. package/dist/components/form/text-field/text-field.css +41 -0
  328. package/dist/components/form/text-field/text-field.d.mts +4 -5
  329. package/dist/components/form/text-field/text-field.mjs +2 -3
  330. package/dist/components/form/text-field/text-field.module.mjs +5 -0
  331. package/dist/components/form/textarea/textarea.css +50 -0
  332. package/dist/components/form/textarea/textarea.d.mts +3 -3
  333. package/dist/components/form/textarea/textarea.mjs +6 -20
  334. package/dist/components/form/textarea/textarea.module.mjs +9 -0
  335. package/dist/components/icons/base.css +40 -0
  336. package/dist/components/icons/base.d.mts +4 -5
  337. package/dist/components/icons/base.mjs +10 -10
  338. package/dist/components/icons/base.module.mjs +13 -0
  339. package/dist/components/icons/browsers.d.mts +5 -6
  340. package/dist/components/icons/color-scale.d.mts +2 -3
  341. package/dist/components/icons/github-mark.d.mts +2 -3
  342. package/dist/components/icons/logo.css +17 -0
  343. package/dist/components/icons/logo.d.mts +3 -4
  344. package/dist/components/icons/logo.mjs +4 -3
  345. package/dist/components/icons/logo.module.mjs +9 -0
  346. package/dist/components/icons/lucide-deep.d.mts +3 -1
  347. package/dist/components/icons/lucide-imports.d.mts +3 -1
  348. package/dist/components/icons/lucide-imports.mjs +3 -1
  349. package/dist/components/icons/lucide.d.mts +60 -61
  350. package/dist/components/icons/qiita.d.mts +2 -3
  351. package/dist/components/icons/twitter.css +9 -0
  352. package/dist/components/icons/twitter.d.mts +2 -3
  353. package/dist/components/icons/twitter.mjs +2 -1
  354. package/dist/components/icons/twitter.module.mjs +5 -0
  355. package/dist/components/icons/vertical-writing.d.mts +2 -3
  356. package/dist/components/index.d.mts +48 -9
  357. package/dist/components/index.mjs +32 -10
  358. package/dist/components/layout/_shared/gap.css +25 -0
  359. package/dist/components/layout/_shared/gap.d.mts +8 -9
  360. package/dist/components/layout/_shared/gap.mjs +6 -5
  361. package/dist/components/layout/_shared/gap.module.mjs +11 -0
  362. package/dist/components/layout/_shared/padding.css +25 -0
  363. package/dist/components/layout/_shared/padding.d.mts +8 -9
  364. package/dist/components/layout/_shared/padding.mjs +6 -5
  365. package/dist/components/layout/_shared/padding.module.mjs +11 -0
  366. package/dist/components/layout/grid/grid.css +93 -0
  367. package/dist/components/layout/grid/grid.d.mts +5 -6
  368. package/dist/components/layout/grid/grid.mjs +21 -20
  369. package/dist/components/layout/grid/grid.module.mjs +25 -0
  370. package/dist/components/layout/resizable-panels/index.d.mts +18 -0
  371. package/dist/components/layout/resizable-panels/index.mjs +9 -0
  372. package/dist/components/layout/resizable-panels/resizable-panels.css +77 -0
  373. package/dist/components/layout/resizable-panels/resizable-panels.d.mts +21 -0
  374. package/dist/components/layout/resizable-panels/resizable-panels.mjs +164 -0
  375. package/dist/components/layout/resizable-panels/resizable-panels.module.mjs +16 -0
  376. package/dist/components/layout/separator/separator.css +37 -0
  377. package/dist/components/layout/separator/separator.d.mts +2 -3
  378. package/dist/components/layout/separator/separator.mjs +12 -9
  379. package/dist/components/layout/separator/separator.module.mjs +12 -0
  380. package/dist/components/layout/stack/stack.css +49 -0
  381. package/dist/components/layout/stack/stack.d.mts +3 -4
  382. package/dist/components/layout/stack/stack.mjs +11 -10
  383. package/dist/components/layout/stack/stack.module.mjs +17 -0
  384. package/dist/components/navigation/anchor/anchor.css +29 -0
  385. package/dist/components/navigation/anchor/anchor.d.mts +2 -3
  386. package/dist/components/navigation/anchor/anchor.mjs +5 -2
  387. package/dist/components/navigation/anchor/anchor.module.mjs +8 -0
  388. package/dist/components/navigation/breadcrumb/breadcrumb.css +72 -0
  389. package/dist/components/navigation/breadcrumb/breadcrumb.d.mts +5 -6
  390. package/dist/components/navigation/breadcrumb/breadcrumb.mjs +15 -9
  391. package/dist/components/navigation/breadcrumb/breadcrumb.module.mjs +14 -0
  392. package/dist/components/navigation/breadcrumb/index.d.mts +2 -3
  393. package/dist/components/navigation/pagination/pagination.css +36 -0
  394. package/dist/components/navigation/pagination/pagination.d.mts +2 -3
  395. package/dist/components/navigation/pagination/pagination.mjs +9 -8
  396. package/dist/components/navigation/pagination/pagination.module.mjs +11 -0
  397. package/dist/components/navigation/side-nav/index.d.mts +16 -0
  398. package/dist/components/navigation/side-nav/index.mjs +10 -0
  399. package/dist/components/navigation/side-nav/side-nav.css +73 -0
  400. package/dist/components/navigation/side-nav/side-nav.d.mts +31 -0
  401. package/dist/components/navigation/side-nav/side-nav.mjs +62 -0
  402. package/dist/components/navigation/side-nav/side-nav.module.mjs +11 -0
  403. package/dist/components/navigation/stepper/index.d.mts +2 -0
  404. package/dist/components/navigation/stepper/index.mjs +2 -0
  405. package/dist/components/navigation/stepper/stepper.css +151 -0
  406. package/dist/components/navigation/stepper/stepper.d.mts +19 -0
  407. package/dist/components/navigation/stepper/stepper.mjs +87 -0
  408. package/dist/components/navigation/stepper/stepper.module.mjs +29 -0
  409. package/dist/components/navigation/table-of-contents/index.d.mts +2 -0
  410. package/dist/components/navigation/table-of-contents/index.mjs +2 -0
  411. package/dist/components/navigation/table-of-contents/table-of-contents.css +17 -0
  412. package/dist/components/navigation/table-of-contents/table-of-contents.d.mts +12 -0
  413. package/dist/components/navigation/table-of-contents/table-of-contents.mjs +94 -0
  414. package/dist/components/navigation/table-of-contents/table-of-contents.module.mjs +8 -0
  415. package/dist/components/navigation/tabs/index.d.mts +2 -3
  416. package/dist/components/navigation/tabs/tabs.css +70 -0
  417. package/dist/components/navigation/tabs/tabs.d.mts +5 -6
  418. package/dist/components/navigation/tabs/tabs.mjs +51 -42
  419. package/dist/components/navigation/tabs/tabs.module.mjs +12 -0
  420. package/dist/components/observers/fragment-instance.d.mts +1 -0
  421. package/dist/components/observers/in-view/in-view.d.mts +11 -0
  422. package/dist/components/observers/in-view/in-view.mjs +60 -0
  423. package/dist/components/observers/in-view/index.d.mts +2 -0
  424. package/dist/components/observers/in-view/index.mjs +2 -0
  425. package/dist/components/observers/resize/index.d.mts +2 -0
  426. package/dist/components/observers/resize/index.mjs +2 -0
  427. package/dist/components/observers/resize/resize.d.mts +7 -0
  428. package/dist/components/observers/resize/resize.mjs +25 -0
  429. package/dist/components/overlays/_internal/modal-dialog-context.d.mts +4 -5
  430. package/dist/components/overlays/_internal/use-can-hover.d.mts +2 -3
  431. package/dist/components/overlays/_internal/use-hover-intent.d.mts +3 -4
  432. package/dist/components/overlays/_internal/use-list-navigation.d.mts +17 -11
  433. package/dist/components/overlays/_internal/use-list-navigation.mjs +42 -26
  434. package/dist/components/overlays/command-palette/command-palette.css +91 -0
  435. package/dist/components/overlays/command-palette/command-palette.d.mts +24 -0
  436. package/dist/components/overlays/command-palette/command-palette.mjs +139 -0
  437. package/dist/components/overlays/command-palette/command-palette.module.mjs +14 -0
  438. package/dist/components/overlays/command-palette/index.d.mts +2 -0
  439. package/dist/components/overlays/command-palette/index.mjs +2 -0
  440. package/dist/components/overlays/context-menu/context-menu.d.mts +13 -0
  441. package/dist/components/overlays/context-menu/context-menu.mjs +79 -0
  442. package/dist/components/overlays/context-menu/index.d.mts +21 -0
  443. package/dist/components/overlays/context-menu/index.mjs +13 -0
  444. package/dist/components/overlays/dialog/dialog.css +31 -0
  445. package/dist/components/overlays/dialog/dialog.d.mts +4 -5
  446. package/dist/components/overlays/dialog/dialog.mjs +10 -7
  447. package/dist/components/overlays/dialog/dialog.module.mjs +10 -0
  448. package/dist/components/overlays/dialog/index.d.mts +2 -3
  449. package/dist/components/overlays/drawer/drawer.css +48 -0
  450. package/dist/components/overlays/drawer/drawer.d.mts +2 -3
  451. package/dist/components/overlays/drawer/drawer.mjs +11 -10
  452. package/dist/components/overlays/drawer/drawer.module.mjs +13 -0
  453. package/dist/components/overlays/dropdown-menu/dropdown-menu.d.mts +7 -10
  454. package/dist/components/overlays/dropdown-menu/dropdown-menu.mjs +10 -9
  455. package/dist/components/overlays/dropdown-menu/hooks.d.mts +7 -7
  456. package/dist/components/overlays/dropdown-menu/hooks.mjs +3 -3
  457. package/dist/components/overlays/dropdown-menu/index.d.mts +8 -10
  458. package/dist/components/overlays/dropdown-menu/shared.css +51 -0
  459. package/dist/components/overlays/dropdown-menu/shared.d.mts +3 -6
  460. package/dist/components/overlays/dropdown-menu/shared.mjs +4 -6
  461. package/dist/components/overlays/dropdown-menu/shared.module.mjs +8 -0
  462. package/dist/components/overlays/dropdown-menu/sub-menu.css +28 -0
  463. package/dist/components/overlays/dropdown-menu/sub-menu.d.mts +3 -6
  464. package/dist/components/overlays/dropdown-menu/sub-menu.mjs +15 -15
  465. package/dist/components/overlays/dropdown-menu/sub-menu.module.mjs +9 -0
  466. package/dist/components/overlays/dropdown-menu/use-safe-triangle.d.mts +2 -3
  467. package/dist/components/overlays/list-box/hooks.d.mts +6 -5
  468. package/dist/components/overlays/list-box/hooks.mjs +5 -4
  469. package/dist/components/overlays/list-box/index.d.mts +2 -3
  470. package/dist/components/overlays/list-box/list-box.css +74 -0
  471. package/dist/components/overlays/list-box/list-box.d.mts +5 -6
  472. package/dist/components/overlays/list-box/list-box.mjs +15 -13
  473. package/dist/components/overlays/list-box/list-box.module.mjs +10 -0
  474. package/dist/components/overlays/modal/modal.css +119 -0
  475. package/dist/components/overlays/modal/modal.d.mts +2 -3
  476. package/dist/components/overlays/modal/modal.mjs +14 -11
  477. package/dist/components/overlays/modal/modal.module.mjs +11 -0
  478. package/dist/components/overlays/popover/anchor-positioning.d.mts +4 -5
  479. package/dist/components/overlays/popover/escape-stack.d.mts +2 -3
  480. package/dist/components/overlays/popover/hooks.d.mts +7 -8
  481. package/dist/components/overlays/popover/index.d.mts +2 -2
  482. package/dist/components/overlays/popover/popover.css +51 -0
  483. package/dist/components/overlays/popover/popover.d.mts +4 -4
  484. package/dist/components/overlays/popover/popover.mjs +11 -5
  485. package/dist/components/overlays/popover/popover.module.mjs +11 -0
  486. package/dist/components/overlays/tooltip/bridge.css +68 -0
  487. package/dist/components/overlays/tooltip/bridge.d.mts +2 -3
  488. package/dist/components/overlays/tooltip/bridge.mjs +7 -21
  489. package/dist/components/overlays/tooltip/bridge.module.mjs +11 -0
  490. package/dist/components/overlays/tooltip/index.d.mts +2 -2
  491. package/dist/components/overlays/tooltip/tooltip.css +15 -0
  492. package/dist/components/overlays/tooltip/tooltip.d.mts +5 -6
  493. package/dist/components/overlays/tooltip/tooltip.mjs +3 -2
  494. package/dist/components/overlays/tooltip/tooltip.module.mjs +5 -0
  495. package/dist/components/providers/index.d.mts +1 -2
  496. package/dist/components/providers/portal-root.d.mts +9 -7
  497. package/dist/components/providers/portal-root.mjs +7 -7
  498. package/dist/components/providers/ui-provider.d.mts +2 -6
  499. package/dist/components/providers/ui-provider.mjs +1 -5
  500. package/dist/helpers/chain.d.mts +2 -3
  501. package/dist/helpers/chain.mjs +0 -23
  502. package/dist/helpers/create-safe-context.d.mts +2 -3
  503. package/dist/helpers/create-safe-context.mjs +0 -17
  504. package/dist/helpers/index.d.mts +1 -2
  505. package/dist/helpers/index.mjs +2 -3
  506. package/dist/helpers/merge-props.d.mts +2 -3
  507. package/dist/helpers/merge-props.mjs +2 -37
  508. package/dist/helpers/merge-refs.d.mts +2 -3
  509. package/dist/helpers/merge-refs.mjs +0 -32
  510. package/dist/hooks/click-away/index.d.mts +2 -3
  511. package/dist/hooks/controllable-state/index.d.mts +2 -3
  512. package/dist/hooks/controllable-state/index.mjs +9 -11
  513. package/dist/hooks/index.d.mts +2 -20
  514. package/dist/hooks/index.mjs +2 -19
  515. package/dist/hooks/writing-mode/index.d.mts +15 -5
  516. package/dist/hooks/writing-mode/index.mjs +21 -14
  517. package/dist/i18n/current.d.mts +23 -0
  518. package/dist/i18n/current.mjs +43 -0
  519. package/dist/i18n/en.d.mts +2 -3
  520. package/dist/i18n/en.mjs +46 -0
  521. package/dist/i18n/index.d.mts +3 -2
  522. package/dist/i18n/index.mjs +4 -3
  523. package/dist/i18n/ja.d.mts +2 -3
  524. package/dist/i18n/ja.mjs +46 -0
  525. package/dist/i18n/messages.d.mts +81 -3
  526. package/dist/i18n/usage.d.mts +8 -0
  527. package/dist/i18n/usage.mjs +131 -0
  528. package/dist/index.d.mts +29 -34
  529. package/dist/index.mjs +32 -35
  530. package/dist/integrations/_shared/openui-defs.d.mts +3 -4
  531. package/dist/integrations/_shared/openui-defs.mjs +123 -54
  532. package/dist/integrations/_shared/renderers.css +50 -0
  533. package/dist/integrations/_shared/renderers.d.mts +71 -52
  534. package/dist/integrations/_shared/renderers.mjs +288 -30
  535. package/dist/integrations/_shared/renderers.module.mjs +14 -0
  536. package/dist/integrations/_shared/schemas.d.mts +387 -103
  537. package/dist/integrations/_shared/schemas.mjs +165 -27
  538. package/dist/integrations/ai-sdk/index.d.mts +2 -2
  539. package/dist/integrations/ai-sdk/map-parts.d.mts +25 -7
  540. package/dist/integrations/ai-sdk/map-parts.mjs +28 -3
  541. package/dist/integrations/json-render/catalog.d.mts +336 -18
  542. package/dist/integrations/json-render/catalog.mjs +120 -57
  543. package/dist/integrations/json-render/registry.d.mts +3 -4
  544. package/dist/integrations/json-render/registry.mjs +38 -4
  545. package/dist/integrations/openui/form-views.d.mts +23 -18
  546. package/dist/integrations/openui/form-views.mjs +27 -3
  547. package/dist/integrations/openui/library.d.mts +59 -7
  548. package/dist/integrations/openui/library.mjs +18 -3
  549. package/dist/integrations/openui/prompt.d.mts +2 -3
  550. package/dist/internal/accepts-file.d.mts +8 -0
  551. package/dist/internal/accepts-file.mjs +19 -0
  552. package/dist/internal/carries-files.d.mts +3 -0
  553. package/dist/internal/carries-files.mjs +4 -0
  554. package/dist/internal/clamp.d.mts +2 -3
  555. package/dist/internal/clamp.mjs +0 -11
  556. package/dist/internal/commit-input-value.d.mts +10 -0
  557. package/dist/internal/commit-input-value.mjs +15 -0
  558. package/dist/internal/dropped-files.d.mts +3 -0
  559. package/dist/internal/dropped-files.mjs +8 -0
  560. package/dist/internal/focus-trap.d.mts +5 -6
  561. package/dist/internal/focus-trap.mjs +4 -4
  562. package/dist/internal/hex-color.d.mts +22 -0
  563. package/dist/internal/hex-color.mjs +53 -0
  564. package/dist/internal/iso-date.d.mts +39 -0
  565. package/dist/internal/iso-date.mjs +98 -0
  566. package/dist/internal/to-precision.d.mts +2 -3
  567. package/dist/internal/to-precision.mjs +0 -8
  568. package/dist/styles/index.css +513 -2526
  569. package/dist/styles/tailwind.css +217 -17
  570. package/dist/styles/tokens.d.mts +1 -2
  571. package/dist/styles/tokens.mjs +1 -2
  572. package/dist/types/variables.d.mts +7 -9
  573. package/docs/GUIDE.md +239 -72
  574. package/docs/llms.txt +11 -7
  575. package/docs/props.generated.json +2156 -309
  576. package/docs/references/ai-chat.md +345 -62
  577. package/docs/references/color.md +222 -78
  578. package/docs/references/components.md +1664 -242
  579. package/docs/references/generative-ui.md +125 -17
  580. package/docs/references/interaction-design.md +65 -35
  581. package/docs/references/spatial-design.md +83 -63
  582. package/docs/references/types.md +101 -0
  583. package/docs/references/typography.md +159 -51
  584. package/package.json +64 -62
  585. package/dist/components/_internal/focus-ring.d.mts +0 -8
  586. package/dist/components/_internal/focus-ring.mjs +0 -8
  587. package/dist/components/layout/scroll-linked/index.d.mts +0 -2
  588. package/dist/components/layout/scroll-linked/index.mjs +0 -2
  589. package/dist/components/layout/scroll-linked/scroll-linked.d.mts +0 -14
  590. package/dist/components/layout/scroll-linked/scroll-linked.mjs +0 -59
  591. package/dist/helpers/cn.d.mts +0 -5
  592. package/dist/helpers/cn.mjs +0 -27
  593. package/dist/hooks/breakpoint/index.d.mts +0 -5
  594. package/dist/hooks/breakpoint/index.mjs +0 -24
  595. package/dist/hooks/client/index.d.mts +0 -4
  596. package/dist/hooks/client/index.mjs +0 -6
  597. package/dist/hooks/clipboard/index.d.mts +0 -7
  598. package/dist/hooks/clipboard/index.mjs +0 -15
  599. package/dist/hooks/debounced-transition/index.d.mts +0 -5
  600. package/dist/hooks/debounced-transition/index.mjs +0 -49
  601. package/dist/hooks/deferred-debounce/index.d.mts +0 -4
  602. package/dist/hooks/deferred-debounce/index.mjs +0 -9
  603. package/dist/hooks/disclosure/index.d.mts +0 -10
  604. package/dist/hooks/disclosure/index.mjs +0 -20
  605. package/dist/hooks/hover/index.d.mts +0 -12
  606. package/dist/hooks/hover/index.mjs +0 -19
  607. package/dist/hooks/intersection-observer/index.d.mts +0 -3
  608. package/dist/hooks/intersection-observer/index.mjs +0 -3
  609. package/dist/hooks/intersection-observer/use-in-view.d.mts +0 -11
  610. package/dist/hooks/intersection-observer/use-in-view.mjs +0 -18
  611. package/dist/hooks/intersection-observer/use-intersection-observer.d.mts +0 -11
  612. package/dist/hooks/intersection-observer/use-intersection-observer.mjs +0 -33
  613. package/dist/hooks/interval/index.d.mts +0 -4
  614. package/dist/hooks/interval/index.mjs +0 -19
  615. package/dist/hooks/resize/index.d.mts +0 -8
  616. package/dist/hooks/resize/index.mjs +0 -24
  617. package/dist/hooks/scroll-direction/index.d.mts +0 -13
  618. package/dist/hooks/scroll-direction/index.mjs +0 -67
  619. package/dist/hooks/scroll-lock/index.d.mts +0 -9
  620. package/dist/hooks/scroll-lock/index.mjs +0 -59
  621. package/dist/hooks/step/index.d.mts +0 -15
  622. package/dist/hooks/step/index.mjs +0 -39
  623. package/dist/hooks/timeout/index.d.mts +0 -4
  624. package/dist/hooks/timeout/index.mjs +0 -19
  625. package/dist/hooks/window-resize/index.d.mts +0 -11
  626. package/dist/hooks/window-resize/index.mjs +0 -21
  627. package/dist/hooks/window-size/index.d.mts +0 -8
  628. package/dist/hooks/window-size/index.mjs +0 -31
  629. package/dist/i18n/context.d.mts +0 -9
  630. package/dist/i18n/context.mjs +0 -19
  631. package/dist/styles/base.css +0 -315
  632. package/dist/styles/tokens.css +0 -380
  633. package/dist/styles/tokens.generated.d.mts +0 -840
  634. package/dist/styles/tokens.generated.mjs +0 -813
  635. package/dist/styles/utilities.css +0 -62
  636. package/docs/references/helpers.md +0 -223
  637. package/docs/references/hooks.md +0 -301
@@ -10,10 +10,103 @@ Both are optional peer dependencies — install only the one you use.
10
10
  ```bash
11
11
  # json-render
12
12
  pnpm add @json-render/core @json-render/react zod
13
- # OpenUI
14
- pnpm add @openuidev/react-lang zod
15
- # Add this too if you use OpenUI's server-safe prompt entry:
16
- pnpm add @openuidev/lang-core
13
+ # OpenUI — both entries import lang-core directly, so install both packages
14
+ pnpm add @openuidev/react-lang @openuidev/lang-core zod
15
+ ```
16
+
17
+ `@openuidev/lang-core` is not optional for OpenUI: `@k8ordo/ui/openui` builds its
18
+ component library with it and `@k8ordo/ui/openui/prompt` is the React-free entry
19
+ on top of it. `@openuidev/react-lang` depends on it as well, but pnpm will not
20
+ let your app resolve a dependency of a dependency — declare it yourself.
21
+
22
+ Both frameworks are 0.x, where a minor bump is a breaking release, so
23
+ `@k8ordo/ui` declares a range that stops at the next minor. The peer table in
24
+ the package's README (`node_modules/@k8ordo/ui/README.md` when installed via
25
+ npm) lists the current range for each package. Pick a version inside it.
26
+
27
+ Within that range, resolve exactly **one copy** of each framework. The adapters
28
+ read the framework's own React context — `useStateField` for OpenUI,
29
+ `useBoundProp` for json-render — so if your app and `@k8ordo/ui` end up on two
30
+ different copies, the context objects are different objects: every schema check,
31
+ the types, and the build all pass, and the form views throw
32
+ `useOpenUI must be used within a <Renderer /> component.` at render time. With
33
+ pnpm this happens as soon as your version differs from the one `@k8ordo/ui`
34
+ resolves, even when both satisfy the range.
35
+
36
+ ## What the catalog covers
37
+
38
+ Both adapters register the same components, and the prompts they generate list
39
+ them. Most are the exported component of the same name. A few are shaped for a
40
+ model instead:
41
+
42
+ - **Icons** are one `Icon` entry whose `name` picks the glyph from a curated
43
+ set of icons that need nothing but a size. `ChevronIcon` has an entry of its
44
+ own, and `AlertIcon` is the `StatusIcon` entry.
45
+ - **Toasts** are a `Toast` entry, standing in for `ToastProvider` and
46
+ `useToast`: a self-contained widget whose `triggerLabel` button shows the
47
+ toast.
48
+ - **Overlays** (`Modal`, `Dialog`, `Drawer`, `Popover`, `Tooltip`,
49
+ `DropdownMenu`) are self-contained widgets too. Each declares its own trigger
50
+ with `triggerLabel` and handles opening and closing itself.
51
+ - **Compound components** (`Tabs`, `Accordion`, `Table`, `Breadcrumb`, …) are
52
+ one entry each, with their parts flattened into data such as
53
+ `tabs: [{ label, content }]`. `Carousel` is one container entry whose
54
+ children are its slides, one child per slide.
55
+ - **Kbd** takes `keys: string[]` and draws the whole shortcut, one key cap per
56
+ entry, where the component itself is one key.
57
+
58
+ Every other component the package exports is either in the catalog or in the
59
+ list below, and the package's tests keep it that way.
60
+
61
+ ## What the catalog leaves out
62
+
63
+ These exports are left out on purpose, so a model cannot place them:
64
+
65
+ - `ContextMenu` — it opens on a right-click, which nothing on screen invites,
66
+ so actions put in it would be hidden in a generated UI. It belongs on your
67
+ application's own content (a file, a row).
68
+ - `InView`, `Resize` — they report to a callback and draw nothing of their own,
69
+ and a spec has no code to receive the report.
70
+ - `UIProvider` — your application mounts it once, around the generated UI as
71
+ well.
72
+ - `PortalRootProvider`, `usePortalRoot` — wiring for your own `createPortal`
73
+ calls. The generated overlays open their own surfaces.
74
+ - `Conversation`, `Message`, `PromptInput`, `Reasoning`, `Suggestion`,
75
+ `ToolInvocation`, `Attachment`, and `Source` from `@k8ordo/ui/ai`, and
76
+ `Response` from
77
+ `@k8ordo/ui/ai/response` — the chat the generated UI is shown in. Your
78
+ application builds it from its message stream; a spec does not place it.
79
+ - `CodeBlock` from `@k8ordo/ui/code-block` — it highlights on the server, as an
80
+ async Server Component. The generated UI renders on the client, where it
81
+ cannot run, and placing it there would ship the highlighter to the browser.
82
+ `Code` (inline code) is in the catalog.
83
+ - `CommandPalette` — every item runs a function of your application, which a
84
+ spec cannot write, and it is chrome your application opens from a shortcut
85
+ rather than something placed in a reply. For actions inside the generated UI,
86
+ use `Button` or `DropdownMenu`.
87
+ - `ResizablePanels` — it divides a parent of fixed size into a workspace, the
88
+ frame an application draws around its content. The generated UI flows inside
89
+ a message and has no height to divide; to set things side by side, use
90
+ `Grid`.
91
+ - `Prose` — it typesets the bare HTML that Markdown renders to. A spec places
92
+ components, which keep their own look, so it would have nothing to typeset;
93
+ lay a flow out with `Stack`.
94
+ - `TableOfContents` — it points at the ids of the document's headings and
95
+ follows the scroll. The headings a spec places carry no id, so there would be
96
+ nothing to point at.
97
+
98
+ ## Prompt language
99
+
100
+ Everything the adapters hand the model — component descriptions, `uiRules`,
101
+ schema descriptions, and the repair prompt — is English, whatever your
102
+ application's locale. The model reads it; your users never see it. To pin the
103
+ language of the text the model writes into the UI, add a rule of your own:
104
+
105
+ ```tsx
106
+ // json-render
107
+ catalog.prompt({ customRules: [...uiRules, 'Write all UI text in Japanese.'] });
108
+ // OpenUI
109
+ prompt({ additionalRules: ['Write all UI text in Japanese.'] });
17
110
  ```
18
111
 
19
112
  ## json-render
@@ -40,13 +133,20 @@ collect form values.
40
133
 
41
134
  ```tsx
42
135
  'use client';
136
+ import type { UISpec } from '@k8ordo/ui/json-render';
43
137
  import { JsonRenderUI } from '@k8ordo/ui/json-render/registry';
44
138
 
45
- export function GenUi({ spec }: { spec: unknown }) {
139
+ export function GenUi({ spec }: { spec: UISpec }) {
46
140
  return <JsonRenderUI spec={spec} />;
47
141
  }
48
142
  ```
49
143
 
144
+ Props:
145
+
146
+ - `spec`: `Spec | null` (required; a `UISpec` is assignable to json-render's `Spec` without a cast, and `null` renders nothing)
147
+ - `loading`: boolean (passed to `Renderer`: set it while the spec is still streaming in, so children that have not arrived yet are skipped without a warning)
148
+ - `onStateChange`: `(changes: Array<{ path: string; value: unknown }>) => void` (called once per state update with every changed path and its new value)
149
+
50
150
  For an advanced setup (your own `navigate`, `handlers`, or
51
151
  `validationFunctions`), pass the low-level `registry` straight to
52
152
  `@json-render/react`'s `JSONUIProvider` / `Renderer`.
@@ -54,9 +154,12 @@ For an advanced setup (your own `navigate`, `handlers`, or
54
154
  ### 3. Validate LLM output, then render or repair it
55
155
 
56
156
  `validateGeneratedSpec` applies mechanical fixes, validates the structure, then
57
- validates props per component. On failure it returns a repair prompt you can
58
- send straight back to the LLM. Use it instead of `catalog.validate()`, which
59
- rejects valid specs in the current upstream version.
157
+ validates props per component. On failure it returns the `issues` it found (each
158
+ a `message`, plus the `elementKey` of the offending element when there is one)
159
+ and a repair prompt built from them that you can send straight back to the LLM.
160
+ Use it instead of `catalog.validate()`, which rejects valid specs in the current
161
+ upstream version. The result and issue types are exported as
162
+ `ValidateGeneratedSpecResult` and `GeneratedSpecIssue`.
60
163
 
61
164
  ```tsx
62
165
  import { validateGeneratedSpec } from '@k8ordo/ui/json-render';
@@ -87,8 +190,9 @@ const spec = {
87
190
  } satisfies UISpec;
88
191
  ```
89
192
 
90
- `ComponentName` and `ComponentProps<K>` are exported as well, so you can pull
91
- out the props type of a specific component.
193
+ `UISpecElement` (one element of a `UISpec`), `ComponentName`, and
194
+ `ComponentProps<K>` are exported as well, so you can pull out the props type of a
195
+ specific component.
92
196
 
93
197
  ## OpenUI
94
198
 
@@ -114,10 +218,14 @@ import { prompt } from '@k8ordo/ui/openui/prompt';
114
218
  const systemPrompt = prompt(); // No React dependency — callable from RSC or an API route
115
219
  ```
116
220
 
117
- In OpenUI a `Stack` or `Grid` cannot sit directly inside another `Stack` or
118
- `Grid` (self-referential schemas are unsupported). When you need nested layout,
119
- put the `Stack` / `Grid` inside a `Card`. json-render is slot-based and nests
120
- freely.
221
+ `prompt` takes an optional `PromptOptions` from `@openuidev/lang-core`
222
+ (`preamble`, `additionalRules`, `examples`, …) and passes it straight through to
223
+ the library's prompt generation.
224
+
225
+ Containers nest freely in OpenUI, as they do in json-render: `Stack`, `Grid`,
226
+ `Card`, `Form`, `Modal`, `Dialog`, `Drawer`, and `Popover` each list every
227
+ container among their children, so a `Card` can sit inside a `Stack` and a
228
+ `Stack` inside another `Stack`.
121
229
 
122
230
  ## Exports at a glance
123
231
 
@@ -126,8 +234,8 @@ freely.
126
234
  | `@k8ordo/ui/json-render` | server-safe | `catalog`, `validateGeneratedSpec`, `uiRules`, types (`UISpec`, …) |
127
235
  | `@k8ordo/ui/json-render/registry` | `'use client'` | `JsonRenderUI` (pre-wired), `registry` (low level) |
128
236
  | `@k8ordo/ui/openui` | `'use client'` | `library` (rendering) |
129
- | `@k8ordo/ui/openui/prompt` | server-safe | `prompt()` (prompt generation) |
237
+ | `@k8ordo/ui/openui/prompt` | server-safe | `prompt(options?)` (prompt generation) |
130
238
 
131
239
  > All of them assume you have loaded `@k8ordo/ui/styles.css` (or
132
- > `@k8ordo/ui/tailwind.css` in a Tailwind CSS 4 project) and wrapped the tree in
133
- > `UIProvider`.
240
+ > `@k8ordo/ui/tailwind.css` after Tailwind, in a Tailwind CSS 4 project) and
241
+ > wrapped the tree in `UIProvider`.
@@ -6,26 +6,33 @@ Interaction in `@k8ordo/ui` follows one principle: quiet change.
6
6
 
7
7
  Design with these eight states in mind.
8
8
 
9
- | State | Style |
10
- | -------- | ----------------------------------------------------- |
11
- | Default | The base style |
12
- | Hover | `hover:bg-bg-mute` — a gentle color shift |
13
- | Focus | `focus-visible:ring-2 focus-visible:ring-border-info` |
14
- | Active | `active:bg-bg-emphasize` |
15
- | Disabled | `opacity-50 cursor-not-allowed` |
16
- | Loading | A spinner or a skeleton |
17
- | Selected | `bg-primary-bg-subtle` |
18
- | Error | `border-border-error` + `text-fg-error` |
9
+ | State | Style |
10
+ | -------- | --------------------------------------------------------- |
11
+ | Default | The base style |
12
+ | Hover | `--color-bg-mute` — a gentle color shift |
13
+ | Focus | `box-shadow: var(--shadow-ring-info)` on `:focus-visible` |
14
+ | Active | `--color-bg-emphasize` |
15
+ | Disabled | `opacity: 0.5; cursor: not-allowed` |
16
+ | Loading | A spinner or a skeleton |
17
+ | Selected | `--color-primary-bg-subtle` |
18
+ | Error | `--color-border-error` + `--color-fg-error` |
19
19
 
20
20
  ## Transitions
21
21
 
22
22
  Restrained, natural motion.
23
23
 
24
- | Purpose | Recommended setting |
25
- | ------------------------------ | ------------------------------------------ |
26
- | Hover color change | `transition-colors duration-150 ease-out` |
27
- | Opacity change | `transition-opacity duration-200 ease-out` |
28
- | When size changes are involved | `transition-all duration-150 ease-out` |
24
+ | Purpose | Recommended setting |
25
+ | ------------------------------ | -------------------------------------------------------- |
26
+ | Hover color change | the colors over `--duration-fast` with `--easing-out` |
27
+ | Opacity change | `opacity` over `--duration-moderate` with `--easing-out` |
28
+ | When size changes are involved | the changing properties over `--duration-fast` |
29
+ | A page or a panel replaced | `<ViewTransition>` — the browser's cross-fade |
30
+
31
+ `--duration-fast` is 150ms, `--duration-moderate` 200ms and `--duration-slow`
32
+ 300ms. `--easing-out` and `--easing-in-out` are Tailwind's curves
33
+ (`cubic-bezier(0, 0, 0.2, 1)` and `cubic-bezier(0.4, 0, 0.2, 1)`), not the CSS
34
+ keywords of the same name. With `tailwind.css`: `transition-colors
35
+ duration-150 ease-out`.
29
36
 
30
37
  ### Timing principles
31
38
 
@@ -36,32 +43,54 @@ Restrained, natural motion.
36
43
 
37
44
  ### Choosing an animation
38
45
 
39
- ```tsx
40
- // Good: transition-colors (only the color changes)
41
- className = 'transition-colors hover:bg-bg-mute';
42
-
43
- // OK: transition-all (only when several properties change)
44
- className = 'transition-all hover:bg-bg-mute hover:scale-[1.02]';
45
-
46
- // Bad: bounce or spring easing
47
- className = 'animate-bounce';
46
+ ```css
47
+ /* Good: transition only the colors that change */
48
+ .item {
49
+ transition-property: color, background-color;
50
+ transition-duration: var(--duration-fast);
51
+ transition-timing-function: var(--easing-out);
52
+ }
53
+
54
+ @media (hover: hover) {
55
+ .item:hover {
56
+ background-color: var(--color-bg-mute);
57
+ }
58
+ }
59
+
60
+ /* OK: list every property when several change */
61
+ .card {
62
+ transition-property: background-color, scale;
63
+ transition-duration: var(--duration-fast);
64
+ transition-timing-function: var(--easing-out);
65
+ }
66
+
67
+ /* Bad: bounce or spring easing */
48
68
  ```
49
69
 
50
70
  ## Focus management
51
71
 
52
- - Use `focus-visible`, not `focus` — no ring appears on a mouse click
53
- - Keep the focus ring consistent with `ring-border-info`
54
- - Clear the default outline with `outline-hidden` before applying the ring
55
-
56
- ```tsx
57
- className =
58
- 'focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-border-info';
72
+ - Use `:focus-visible`, not `:focus` — no ring appears on a mouse click
73
+ - Keep the focus ring consistent with `--shadow-ring-info`
74
+ - Clear the default outline before applying the ring, and give it back under forced colors, where the ring (a shadow) disappears
75
+ - Keep focus on a button that is waiting on its own action: show the wait with `aria-busy` and `aria-disabled` and ignore presses, rather than setting `disabled`. Chromium moves focus to `body` when the focused element becomes disabled, so the keyboard user who pressed it loses their place. `Button` and `IconButton` do this for `onAction`
76
+ - For the same reason, a text field whose form's action is pending turns `readOnly`, not `disabled`, and ignores the keys that would change its value, so the user who pressed Enter in it keeps their place. `TextField`, `Textarea`, `PasswordInput`, `NumberField`, `DateField`, `DatePicker`, `ColorPicker`, `Combobox`, and `Autocomplete` do this. `readOnly` does not apply to a checkbox, radio, range, or select, yet Enter in one still submits the form through its submit button, so `Checkbox`, `Radio`, `Switch`, `Slider`, `RangeSlider`, and `Select` take `aria-disabled` instead and ignore what would change their value. A checkbox or radio cancels the click in the capture phase and stops it there: cancelled any later, React's change tracking has already recorded the toggle the browser then undoes, calls `onChange` for it, and misses the next real one. A range ignores the arrow, Home, End, and Page keys and the pointer; a select ignores those keys, Space, F4, typed characters, and the pointer
77
+
78
+ ```css
79
+ .control:focus-visible {
80
+ outline-style: none;
81
+ box-shadow: var(--shadow-ring-info);
82
+
83
+ @media (forced-colors: active) {
84
+ outline: 2px solid transparent;
85
+ outline-offset: 2px;
86
+ }
87
+ }
59
88
  ```
60
89
 
61
90
  ## Form design
62
91
 
63
92
  - Put the label above the input (a left-aligned label reads badly in Japanese)
64
- - Put the error message directly under the input, as `text-fg-error text-sm`
93
+ - Put the error message directly under the input, in `--color-fg-error` at `--font-size-sm`
65
94
  - Mark required fields with `*` after the label
66
95
  - Validate on submit; keep real-time validation to a minimum
67
96
  - Use the `FormControl` component so labels and errors stay consistent
@@ -83,13 +112,14 @@ import { FormControl, TextField } from '@k8ordo/ui';
83
112
 
84
113
  - Set `aria-label` / `aria-describedby` where they belong
85
114
  - Guarantee keyboard navigation (Tab, Enter, Escape, arrow keys)
86
- - Respect `prefers-reduced-motion` — the motion library handles it for you
115
+ - Respect `prefers-reduced-motion`. Under it the stylesheet turns off the open animation of Popover and what is built on it (DropdownMenu, ListBox, Tooltip), the Toast, Modal, and Drawer animations, the Tabs indicator slide, and every view transition; `Card`'s hover scale runs only under `prefers-reduced-motion: no-preference`. Skeleton's pulse, Spinner's spin, and the Accordion chevron, Switch thumb, and Progress bar transitions keep running. Put your own motion under `@media (prefers-reduced-motion: no-preference)`
87
116
  - Never signal state with color alone; pair it with an icon or text
117
+ - The components follow `prefers-contrast: more` and stay legible under `forced-colors: active` (see [High contrast and forced colors](./color.md#high-contrast-and-forced-colors)); do the same in your own UI
88
118
 
89
119
  ## What not to do
90
120
 
91
121
  - Bounce or spring easing
92
122
  - Animation longer than 300ms
93
- - A strong primary color (`bg-primary-bg`) on hover
94
- - `cursor-pointer` on anything that is not a button (links do not need it either)
123
+ - A strong primary color (`--color-primary-bg`) on hover
124
+ - `cursor: pointer` on anything that is not a button (links do not need it either)
95
125
  - A submit button with no double-click guard
@@ -5,32 +5,34 @@ leave room.
5
5
 
6
6
  ## Spacing principles
7
7
 
8
- A 4pt spacing system, using Tailwind's standard scale.
8
+ A 4pt spacing system: one token, `--spacing` (0.25rem), multiplied by the step
9
+ you want — `calc(var(--spacing) * 6)` is 1.5rem. With `tailwind.css`, the
10
+ step is the utility's number (`p-6`, `gap-8`).
9
11
 
10
12
  ### Padding inside a component
11
13
 
12
- | Use | Class | Value |
13
- | ----------------- | ------ | ----- |
14
- | Compact | `p-4` | 16px |
15
- | Standard | `p-6` | 24px |
16
- | Generous | `p-8` | 32px |
17
- | Inside a big card | `p-10` | 40px |
14
+ | Use | Step | Value |
15
+ | ----------------- | ---- | ----- |
16
+ | Compact | 4 | 16px |
17
+ | Standard | 6 | 24px |
18
+ | Generous | 8 | 32px |
19
+ | Inside a big card | 10 | 40px |
18
20
 
19
21
  ### Spacing between blocks of text
20
22
 
21
- | Relationship | Class | Use |
22
- | ---------------------- | ------- | --------------------------------------- |
23
- | Closely related | `mt-2` | Descriptions, help text |
24
- | Standard | `mt-4` | Between paragraphs, between form fields |
25
- | Between sections | `mt-8` | A section break |
26
- | Between major sections | `mt-12` | A page-level break |
23
+ | Relationship | Step | Use |
24
+ | ---------------------- | ---- | --------------------------------------- |
25
+ | Closely related | 2 | Descriptions, help text |
26
+ | Standard | 4 | Between paragraphs, between form fields |
27
+ | Between sections | 8 | A section break |
28
+ | Between major sections | 12 | A page-level break |
27
29
 
28
30
  ### Spacing between sections
29
31
 
30
- | Relationship | Class | Use |
31
- | ---------------- | ------------------ | ------------------------------ |
32
- | Between cards | `gap-6` | Cards side by side (in a grid) |
33
- | Between sections | `gap-8` – `gap-10` | Sections stacked vertically |
32
+ | Relationship | Step | Use |
33
+ | ---------------- | ------ | ------------------------------ |
34
+ | Between cards | 6 | Cards side by side (in a grid) |
35
+ | Between sections | 8 – 10 | Sections stacked vertically |
34
36
 
35
37
  ## Border radius
36
38
 
@@ -40,74 +42,92 @@ Vary the radius with the element's role.
40
42
 
41
43
  ### Things you touch (soft)
42
44
 
43
- | Use | Class | Value |
44
- | ----------------------------- | -------------- | ----- |
45
- | Button | `rounded-full` | Pill |
46
- | Input, Textarea, Select | `rounded-xl` | 1rem |
47
- | Card, CheckboxCard, RadioCard | `rounded-xl` | 1rem |
45
+ | Use | Token | Value |
46
+ | ----------------------------- | --------------- | ----- |
47
+ | Button | `--radius-full` | Pill |
48
+ | Input, Textarea, Select | `--radius-xl` | 1rem |
49
+ | Card, CheckboxCard, RadioCard | `--radius-xl` | 1rem |
48
50
 
49
51
  ### Things you read (precise)
50
52
 
51
- | Use | Class | Value |
52
- | -------- | -------------- | ------------------------------ |
53
- | Alert | `rounded-lg` | 0.75rem |
54
- | Badge | `rounded-full` | Pill (fine, since it is small) |
55
- | Tabs | As-is | |
56
- | Checkbox | `rounded-md` | 0.5rem |
53
+ | Use | Token | Value |
54
+ | -------- | --------------- | ------------------------------ |
55
+ | Alert | `--radius-lg` | 0.75rem |
56
+ | Callout | `--radius-lg` | 0.75rem |
57
+ | Badge | `--radius-full` | Pill (fine, since it is small) |
58
+ | Tabs | As-is | |
59
+ | Checkbox | `--radius-md` | 0.5rem |
57
60
 
58
61
  ### Everything else
59
62
 
60
- | Use | Class |
61
- | -------------------------------- | -------------- |
62
- | Dialog, Modal | `rounded-lg` |
63
- | Avatar, IconButton, progress bar | `rounded-full` |
63
+ | Use | Token |
64
+ | -------------------------------- | --------------- |
65
+ | Dialog, Modal | `--radius-lg` |
66
+ | Avatar, IconButton, progress bar | `--radius-full` |
67
+
68
+ With `tailwind.css` these are `rounded-full`, `rounded-xl`, … .
64
69
 
65
70
  ## Shadow
66
71
 
67
72
  Express depth with a soft, gentle shadow.
68
73
 
69
- | Use | Style |
70
- | ------------------------ | ---------------------------------------------------------- |
71
- | Card (default) | `shadow-sm` (with `appearance="shadow"`) |
72
- | Card (bordered) | `border border-border-mute` (with `appearance="bordered"`) |
73
- | Modal / Dialog / Tooltip | `shadow-md` |
74
- | Dropdown / ListBox | `shadow-md` |
75
- | Button | None |
74
+ | Use | Style |
75
+ | ------------------------ | -------------------------------------------------------- |
76
+ | Card (default) | `--shadow-sm` (with `variant="shadow"`) |
77
+ | Card (outlined) | a 1px `--color-border-mute` border (`variant="outline"`) |
78
+ | Modal / Dialog / Tooltip | `--shadow-md` |
79
+ | Dropdown / ListBox | `--shadow-md` |
80
+ | Button | None |
76
81
 
77
- Never use `shadow-xl` or heavier.
82
+ Never use `--shadow-xl` or heavier. The focus ring is a shadow too,
83
+ `--shadow-ring-info`; with a surface's own shadow, list the ring first:
84
+ `box-shadow: var(--shadow-ring-info), var(--shadow-xs)`.
78
85
 
79
86
  ## Page structure
80
87
 
81
88
  ### The bg-subtle plus white card pattern
82
89
 
83
- Make the page background `bg-bg-subtle` (a light grey) and float the content on
84
- white cards.
90
+ Make the page background `--color-bg-subtle` (a light grey) and float the
91
+ content on white cards.
92
+
93
+ ```css
94
+ .page {
95
+ min-height: 100vh;
96
+ background-color: var(--color-bg-subtle);
97
+ }
98
+
99
+ .body {
100
+ padding: calc(var(--spacing) * 6);
101
+ }
102
+ ```
85
103
 
86
104
  ```tsx
87
105
  // Good: a white card floating on a grey ground
88
- <div className="bg-bg-subtle min-h-screen">
89
- <Card appearance="shadow">
90
- <div className="p-8">Content</div>
106
+ <div className={styles.page}>
107
+ <Card variant="shadow">
108
+ <div className={styles.body}>Content</div>
91
109
  </Card>
92
110
  </div>
93
111
  ```
94
112
 
95
113
  ### Build hierarchy out of spacing
96
114
 
97
- ```tsx
98
- // Good: the size of the gap shows how related things are
99
- <section className="mt-12">
100
- <Heading level="h2">Section</Heading>
101
- <p className="mt-2">A description that belongs to it</p>
102
- <div className="mt-8">Content that sits a little apart</div>
103
- </section>
104
-
105
- // Bad: the same gap everywhere
106
- <section className="mt-4">
107
- <Heading level="h2">Section</Heading>
108
- <p className="mt-4">Description</p>
109
- <div className="mt-4">Content</div>
110
- </section>
115
+ Let the size of the gap show how related things are: 12 steps above a
116
+ section, 2 between a heading and the description that belongs to it, 8 before
117
+ content that sits a little apart. The same gap everywhere flattens the page.
118
+
119
+ ```css
120
+ .section {
121
+ margin-top: calc(var(--spacing) * 12);
122
+ }
123
+
124
+ .description {
125
+ margin-top: calc(var(--spacing) * 2);
126
+ }
127
+
128
+ .content {
129
+ margin-top: calc(var(--spacing) * 8);
130
+ }
111
131
  ```
112
132
 
113
133
  ### A card is not the answer to everything
@@ -117,10 +137,10 @@ Content does not have to go in a card. Spacing and a separator are often enough.
117
137
  ```tsx
118
138
  import { Separator } from '@k8ordo/ui';
119
139
 
120
- // Good: divide with a separator
140
+ // Good: divide with a separator (.divider { padding-block: calc(var(--spacing) * 8); })
121
141
  <div>
122
142
  <section>Content A</section>
123
- <div className="py-8">
143
+ <div className={styles.divider}>
124
144
  <Separator />
125
145
  </div>
126
146
  <section>Content B</section>
@@ -133,7 +153,7 @@ import { Separator } from '@k8ordo/ui';
133
153
 
134
154
  ## What not to do
135
155
 
136
- - Extremely tight spacing such as `gap-1` or `p-1`
156
+ - Extremely tight spacing such as one step (`calc(var(--spacing) * 1)`)
137
157
  - Cramming content in (space wins over information density)
138
158
  - Nested cards (Card in Card)
139
- - A z-index above 12
159
+ - A z-index of your own: stack with `--z-index-raised` (inside a component), `--z-index-overlay`, `--z-index-modal` and `--z-index-toast`
@@ -0,0 +1,101 @@
1
+ # Types
2
+
3
+ The shared types `@k8ordo/ui` exports for typing component props.
4
+
5
+ ```tsx
6
+ import type {
7
+ Direction,
8
+ DrawerSide,
9
+ ModalSide,
10
+ Option,
11
+ Placement,
12
+ Status,
13
+ } from '@k8ordo/ui';
14
+ ```
15
+
16
+ ## Status
17
+
18
+ ```tsx
19
+ type Status = 'success' | 'info' | 'warning' | 'error';
20
+ ```
21
+
22
+ Used for the status of `Alert`, `Callout`, `Toast`, and `AlertIcon`. `Badge` takes its own `tone`, which also allows `'neutral'`.
23
+
24
+ ## Direction
25
+
26
+ ```tsx
27
+ type Direction = 'up' | 'down' | 'right' | 'left';
28
+ ```
29
+
30
+ Used to point ChevronIcon and similar icons.
31
+
32
+ ## Placement
33
+
34
+ ```tsx
35
+ type Placement =
36
+ | 'top'
37
+ | 'top-start'
38
+ | 'top-end'
39
+ | 'bottom'
40
+ | 'bottom-start'
41
+ | 'bottom-end'
42
+ | 'left'
43
+ | 'left-start'
44
+ | 'left-end'
45
+ | 'right'
46
+ | 'right-start'
47
+ | 'right-end';
48
+ ```
49
+
50
+ Placement relative to an anchor element, for Popover, Tooltip, DropdownMenu,
51
+ and ListBox (the `placement` prop), and for IconButton's tooltip
52
+ (`tooltipPlacement`).
53
+
54
+ ## ModalSide
55
+
56
+ ```tsx
57
+ type ModalSide = 'center' | 'bottom' | 'left' | 'right';
58
+ ```
59
+
60
+ Which viewport edge a Modal sticks to (the `side` prop). It is a different
61
+ idea from `Placement`, which is relative to an anchor, so the prop name differs
62
+ too.
63
+
64
+ ## DrawerSide
65
+
66
+ ```tsx
67
+ type DrawerSide = Extract<ModalSide, 'left' | 'right'>;
68
+ ```
69
+
70
+ The subset of `ModalSide` a Drawer accepts: a drawer always slides in from an
71
+ edge, so `center` is excluded.
72
+
73
+ ## Option
74
+
75
+ ```tsx
76
+ type Option = Readonly<{ value: string; label: string }>;
77
+ ```
78
+
79
+ Used for the choices in Radio, Select, Autocomplete, and similar components.
80
+
81
+ ## Component prop types
82
+
83
+ The root also exports types that belong to one component, for typing your own
84
+ code around it:
85
+
86
+ | Type | What it types |
87
+ | --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
88
+ | `StackProps` / `GridProps` | Every prop of `Stack` / `Grid`, for a component that wraps one |
89
+ | `GapSize` / `PaddingSize` | The `none`–`xl` scale of `gap` (Stack, Grid) and `padding` (Stack) |
90
+ | `ButtonRenderItemProps` / `IconButtonRenderItemProps` | What `renderItem` receives on `Button` / `IconButton` |
91
+ | `IconButtonTriggerProps` | `Partial<TooltipTriggerProps>`: the tooltip wiring in `IconButtonRenderItemProps`' `triggerProps` |
92
+ | `PopoverTriggerProps` / `PopoverContentProps` / `TooltipTriggerProps` | What `renderItem` receives on `Popover.Trigger` / `Popover.Content` / `Tooltip.Trigger` |
93
+ | `ToolbarItemProps` | What `renderItem` receives on `Toolbar.Item`: `ref`, `tabIndex`, `onFocus` |
94
+ | `CommandPaletteItem` | A command in `CommandPalette`: `id`, `label`, `onSelect`, plus `group`, `keywords`, `shortcut` |
95
+ | `AlertAction` / `ToastAction` / `ToastOptions` | `Alert`'s `action`, and the `action` and `duration` a toast takes |
96
+ | `ColorPickerSwatch` | A preset in `ColorPicker`'s `swatches`: `value` (`#rrggbb`) and `label`, the color's name |
97
+ | `ComboboxSearch` | `Combobox`'s `search`: `(query, { signal }) => Promise<readonly Option[]>` |
98
+ | `CheckboxCardOption` / `RadioCardOption` | A choice in `CheckboxCard` / `RadioCard`: `value` and `label`, plus `description`, `visual`, `disabled` |
99
+ | `StepperStep` | A step in `Stepper`: `label`, plus `description` |
100
+ | `CellAlign` | A table cell's `align`: `'left'`, `'center'`, or `'right'` |
101
+ | `BaseIconProps` / `IconRenderProps` | An icon's `size`, and the props an icon puts on its `<svg>` |