@gunkin/uiify 0.0.19-alpha → 0.0.22-alpha

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 (439) hide show
  1. package/agents/components.md +14 -1
  2. package/agents/index.md +32 -1
  3. package/agents/reference/components/alert.md +44 -0
  4. package/agents/reference/components/aspect-ratio.md +26 -0
  5. package/agents/reference/components/avatar.md +32 -0
  6. package/agents/reference/components/badge.md +31 -0
  7. package/agents/reference/components/breadcrumb.md +11 -1
  8. package/agents/reference/components/button.md +4 -4
  9. package/agents/reference/components/candle-chart.md +20 -1
  10. package/agents/reference/components/card.md +24 -0
  11. package/agents/reference/components/carousel.md +3 -2
  12. package/agents/reference/components/checkbox.md +2 -0
  13. package/agents/reference/components/combobox.md +2 -1
  14. package/agents/reference/components/date-picker.md +23 -0
  15. package/agents/reference/components/description-list.md +38 -0
  16. package/agents/reference/components/drawer.md +8 -1
  17. package/agents/reference/components/dropdown-menu.md +1 -1
  18. package/agents/reference/components/empty.md +45 -0
  19. package/agents/reference/components/fieldset.md +31 -0
  20. package/agents/reference/components/file-upload.md +12 -1
  21. package/agents/reference/components/form-error-summary.md +33 -0
  22. package/agents/reference/components/input-group.md +33 -0
  23. package/agents/reference/components/item.md +52 -0
  24. package/agents/reference/components/line-chart.md +1 -0
  25. package/agents/reference/components/modal.md +8 -1
  26. package/agents/reference/components/number-field.md +14 -3
  27. package/agents/reference/components/pagination.md +22 -1
  28. package/agents/reference/components/progress.md +16 -0
  29. package/agents/reference/components/slider.md +9 -1
  30. package/agents/reference/components/spinner.md +8 -1
  31. package/agents/reference/components/toast.md +14 -1
  32. package/dist/components/alert/Alert.d.ts +15 -0
  33. package/dist/components/alert/Alert.d.ts.map +1 -0
  34. package/dist/components/alert/Alert.js +61 -0
  35. package/dist/components/alert/Alert.js.map +1 -0
  36. package/dist/components/alert/index.d.ts +3 -0
  37. package/dist/components/alert/index.d.ts.map +1 -0
  38. package/dist/components/alert/index.js +7 -0
  39. package/dist/components/alert/index.js.map +1 -0
  40. package/dist/components/alert/types.d.ts +20 -0
  41. package/dist/components/alert/types.d.ts.map +1 -0
  42. package/dist/components/alert/types.js +1 -0
  43. package/dist/components/alert/types.js.map +1 -0
  44. package/dist/components/alert.d.ts +1 -0
  45. package/dist/components/alert.js +1 -0
  46. package/dist/components/aspect-ratio/AspectRatio.d.ts +7 -0
  47. package/dist/components/aspect-ratio/AspectRatio.d.ts.map +1 -0
  48. package/dist/components/aspect-ratio/AspectRatio.js +26 -0
  49. package/dist/components/aspect-ratio/AspectRatio.js.map +1 -0
  50. package/dist/components/aspect-ratio/index.d.ts +3 -0
  51. package/dist/components/aspect-ratio/index.d.ts.map +1 -0
  52. package/dist/components/aspect-ratio/index.js +5 -0
  53. package/dist/components/aspect-ratio/index.js.map +1 -0
  54. package/dist/components/aspect-ratio/types.d.ts +9 -0
  55. package/dist/components/aspect-ratio/types.d.ts.map +1 -0
  56. package/dist/components/aspect-ratio/types.js +1 -0
  57. package/dist/components/aspect-ratio/types.js.map +1 -0
  58. package/dist/components/aspect-ratio.d.ts +1 -0
  59. package/dist/components/aspect-ratio.js +1 -0
  60. package/dist/components/avatar/Avatar.d.ts +7 -0
  61. package/dist/components/avatar/Avatar.d.ts.map +1 -0
  62. package/dist/components/avatar/Avatar.js +24 -0
  63. package/dist/components/avatar/Avatar.js.map +1 -0
  64. package/dist/components/avatar/index.d.ts +3 -0
  65. package/dist/components/avatar/index.d.ts.map +1 -0
  66. package/dist/components/avatar/index.js +5 -0
  67. package/dist/components/avatar/index.js.map +1 -0
  68. package/dist/components/avatar/types.d.ts +12 -0
  69. package/dist/components/avatar/types.d.ts.map +1 -0
  70. package/dist/components/avatar/types.js +1 -0
  71. package/dist/components/avatar/types.js.map +1 -0
  72. package/dist/components/avatar.d.ts +1 -0
  73. package/dist/components/avatar.js +1 -0
  74. package/dist/components/badge/Badge.d.ts +7 -0
  75. package/dist/components/badge/Badge.d.ts.map +1 -0
  76. package/dist/components/badge/Badge.js +21 -0
  77. package/dist/components/badge/Badge.js.map +1 -0
  78. package/dist/components/badge/index.d.ts +3 -0
  79. package/dist/components/badge/index.d.ts.map +1 -0
  80. package/dist/components/badge/index.js +5 -0
  81. package/dist/components/badge/index.js.map +1 -0
  82. package/dist/components/badge/types.d.ts +11 -0
  83. package/dist/components/badge/types.d.ts.map +1 -0
  84. package/dist/components/badge/types.js +1 -0
  85. package/dist/components/badge/types.js.map +1 -0
  86. package/dist/components/badge.d.ts +1 -0
  87. package/dist/components/badge.js +1 -0
  88. package/dist/components/behavior.css +21 -9
  89. package/dist/components/behavior.css.map +1 -1
  90. package/dist/components/breadcrumb/Breadcrumb.d.ts.map +1 -1
  91. package/dist/components/breadcrumb/Breadcrumb.js +21 -4
  92. package/dist/components/breadcrumb/Breadcrumb.js.map +1 -1
  93. package/dist/components/breadcrumb/index.d.ts +1 -1
  94. package/dist/components/breadcrumb/index.d.ts.map +1 -1
  95. package/dist/components/breadcrumb/index.js.map +1 -1
  96. package/dist/components/breadcrumb/types.d.ts +7 -0
  97. package/dist/components/breadcrumb/types.d.ts.map +1 -1
  98. package/dist/components/button/types.d.ts +4 -0
  99. package/dist/components/button/types.d.ts.map +1 -1
  100. package/dist/components/candle-chart/CandleChart.d.ts +1 -1
  101. package/dist/components/candle-chart/CandleChart.d.ts.map +1 -1
  102. package/dist/components/candle-chart/CandleChart.js +81 -46
  103. package/dist/components/candle-chart/CandleChart.js.map +1 -1
  104. package/dist/components/candle-chart/client/CandleChartClient.d.ts.map +1 -1
  105. package/dist/components/candle-chart/client/CandleChartClient.js +5 -0
  106. package/dist/components/candle-chart/client/CandleChartClient.js.map +1 -1
  107. package/dist/components/candle-chart/index.d.ts +1 -1
  108. package/dist/components/candle-chart/index.d.ts.map +1 -1
  109. package/dist/components/candle-chart/index.js.map +1 -1
  110. package/dist/components/candle-chart/types.d.ts +17 -0
  111. package/dist/components/candle-chart/types.d.ts.map +1 -1
  112. package/dist/components/card/Card.d.ts +7 -0
  113. package/dist/components/card/Card.d.ts.map +1 -0
  114. package/dist/components/card/Card.js +16 -0
  115. package/dist/components/card/Card.js.map +1 -0
  116. package/dist/components/card/index.d.ts +3 -0
  117. package/dist/components/card/index.d.ts.map +1 -0
  118. package/dist/components/card/index.js +5 -0
  119. package/dist/components/card/index.js.map +1 -0
  120. package/dist/components/card/types.d.ts +7 -0
  121. package/dist/components/card/types.d.ts.map +1 -0
  122. package/dist/components/card/types.js +1 -0
  123. package/dist/components/card/types.js.map +1 -0
  124. package/dist/components/card.d.ts +1 -0
  125. package/dist/components/card.js +1 -0
  126. package/dist/components/carousel/CarouselMarkup.d.ts.map +1 -1
  127. package/dist/components/carousel/CarouselMarkup.js +20 -3
  128. package/dist/components/carousel/CarouselMarkup.js.map +1 -1
  129. package/dist/components/carousel/carousel-markup.js +2 -2
  130. package/dist/components/carousel/carousel-markup.js.map +1 -1
  131. package/dist/components/carousel/types.d.ts +3 -2
  132. package/dist/components/carousel/types.d.ts.map +1 -1
  133. package/dist/components/checkbox/types.d.ts +2 -0
  134. package/dist/components/checkbox/types.d.ts.map +1 -1
  135. package/dist/components/combobox/Combobox.d.ts.map +1 -1
  136. package/dist/components/combobox/Combobox.js +37 -23
  137. package/dist/components/combobox/Combobox.js.map +1 -1
  138. package/dist/components/combobox/combobox-store.d.ts.map +1 -1
  139. package/dist/components/combobox/combobox-store.js +5 -2
  140. package/dist/components/combobox/combobox-store.js.map +1 -1
  141. package/dist/components/combobox/types.d.ts +2 -3
  142. package/dist/components/combobox/types.d.ts.map +1 -1
  143. package/dist/components/context-menu/ContextMenu.d.ts.map +1 -1
  144. package/dist/components/context-menu/ContextMenu.js +25 -5
  145. package/dist/components/context-menu/ContextMenu.js.map +1 -1
  146. package/dist/components/date-picker/DatePicker.d.ts +7 -0
  147. package/dist/components/date-picker/DatePicker.d.ts.map +1 -0
  148. package/dist/components/date-picker/DatePicker.js +19 -0
  149. package/dist/components/date-picker/DatePicker.js.map +1 -0
  150. package/dist/components/date-picker/index.d.ts +3 -0
  151. package/dist/components/date-picker/index.d.ts.map +1 -0
  152. package/dist/components/date-picker/index.js +5 -0
  153. package/dist/components/date-picker/index.js.map +1 -0
  154. package/dist/components/date-picker/types.d.ts +5 -0
  155. package/dist/components/date-picker/types.d.ts.map +1 -0
  156. package/dist/components/date-picker/types.js +1 -0
  157. package/dist/components/date-picker/types.js.map +1 -0
  158. package/dist/components/date-picker.d.ts +1 -0
  159. package/dist/components/date-picker.js +1 -0
  160. package/dist/components/description-list/DescriptionList.d.ts +15 -0
  161. package/dist/components/description-list/DescriptionList.d.ts.map +1 -0
  162. package/dist/components/description-list/DescriptionList.js +48 -0
  163. package/dist/components/description-list/DescriptionList.js.map +1 -0
  164. package/dist/components/description-list/index.d.ts +3 -0
  165. package/dist/components/description-list/index.d.ts.map +1 -0
  166. package/dist/components/description-list/index.js +7 -0
  167. package/dist/components/description-list/index.js.map +1 -0
  168. package/dist/components/description-list/types.d.ts +15 -0
  169. package/dist/components/description-list/types.d.ts.map +1 -0
  170. package/dist/components/description-list/types.js +1 -0
  171. package/dist/components/description-list/types.js.map +1 -0
  172. package/dist/components/description-list.d.ts +1 -0
  173. package/dist/components/description-list.js +1 -0
  174. package/dist/components/drawer/DrawerNative.d.ts +1 -1
  175. package/dist/components/drawer/DrawerNative.d.ts.map +1 -1
  176. package/dist/components/drawer/DrawerNative.js +5 -2
  177. package/dist/components/drawer/DrawerNative.js.map +1 -1
  178. package/dist/components/drawer/index.d.ts +1 -1
  179. package/dist/components/drawer/index.d.ts.map +1 -1
  180. package/dist/components/drawer/index.js.map +1 -1
  181. package/dist/components/drawer/types.d.ts +4 -0
  182. package/dist/components/drawer/types.d.ts.map +1 -1
  183. package/dist/components/dropdown-menu/DropdownMenu.d.ts.map +1 -1
  184. package/dist/components/dropdown-menu/DropdownMenu.js +31 -15
  185. package/dist/components/dropdown-menu/DropdownMenu.js.map +1 -1
  186. package/dist/components/dropdown-menu/DropdownMenuBar.d.ts.map +1 -1
  187. package/dist/components/dropdown-menu/DropdownMenuBar.js +7 -5
  188. package/dist/components/dropdown-menu/DropdownMenuBar.js.map +1 -1
  189. package/dist/components/dropdown-menu/types.d.ts +1 -1
  190. package/dist/components/dropdown-menu/types.d.ts.map +1 -1
  191. package/dist/components/empty/Empty.d.ts +19 -0
  192. package/dist/components/empty/Empty.d.ts.map +1 -0
  193. package/dist/components/empty/Empty.js +56 -0
  194. package/dist/components/empty/Empty.js.map +1 -0
  195. package/dist/components/empty/index.d.ts +3 -0
  196. package/dist/components/empty/index.d.ts.map +1 -0
  197. package/dist/components/empty/index.js +8 -0
  198. package/dist/components/empty/index.js.map +1 -0
  199. package/dist/components/empty/types.d.ts +19 -0
  200. package/dist/components/empty/types.d.ts.map +1 -0
  201. package/dist/components/empty/types.js +1 -0
  202. package/dist/components/empty/types.js.map +1 -0
  203. package/dist/components/empty.d.ts +1 -0
  204. package/dist/components/empty.js +1 -0
  205. package/dist/components/fieldset/Fieldset.d.ts +11 -0
  206. package/dist/components/fieldset/Fieldset.d.ts.map +1 -0
  207. package/dist/components/fieldset/Fieldset.js +38 -0
  208. package/dist/components/fieldset/Fieldset.js.map +1 -0
  209. package/dist/components/fieldset/index.d.ts +3 -0
  210. package/dist/components/fieldset/index.d.ts.map +1 -0
  211. package/dist/components/fieldset/index.js +6 -0
  212. package/dist/components/fieldset/index.js.map +1 -0
  213. package/dist/components/fieldset/types.d.ts +11 -0
  214. package/dist/components/fieldset/types.d.ts.map +1 -0
  215. package/dist/components/fieldset/types.js +1 -0
  216. package/dist/components/fieldset/types.js.map +1 -0
  217. package/dist/components/fieldset.d.ts +1 -0
  218. package/dist/components/fieldset.js +1 -0
  219. package/dist/components/file-upload/FileUpload.d.ts.map +1 -1
  220. package/dist/components/file-upload/FileUpload.js +11 -4
  221. package/dist/components/file-upload/FileUpload.js.map +1 -1
  222. package/dist/components/file-upload/FileUploadRoot.d.ts +1 -1
  223. package/dist/components/file-upload/FileUploadRoot.d.ts.map +1 -1
  224. package/dist/components/file-upload/FileUploadRoot.js +9 -0
  225. package/dist/components/file-upload/FileUploadRoot.js.map +1 -1
  226. package/dist/components/file-upload/index.d.ts +1 -1
  227. package/dist/components/file-upload/index.d.ts.map +1 -1
  228. package/dist/components/file-upload/index.js.map +1 -1
  229. package/dist/components/file-upload/types.d.ts +8 -0
  230. package/dist/components/file-upload/types.d.ts.map +1 -1
  231. package/dist/components/form-error-summary/FormErrorSummary.d.ts +7 -0
  232. package/dist/components/form-error-summary/FormErrorSummary.d.ts.map +1 -0
  233. package/dist/components/form-error-summary/FormErrorSummary.js +25 -0
  234. package/dist/components/form-error-summary/FormErrorSummary.js.map +1 -0
  235. package/dist/components/form-error-summary/index.d.ts +3 -0
  236. package/dist/components/form-error-summary/index.d.ts.map +1 -0
  237. package/dist/components/form-error-summary/index.js +5 -0
  238. package/dist/components/form-error-summary/index.js.map +1 -0
  239. package/dist/components/form-error-summary/types.d.ts +12 -0
  240. package/dist/components/form-error-summary/types.d.ts.map +1 -0
  241. package/dist/components/form-error-summary/types.js +1 -0
  242. package/dist/components/form-error-summary/types.js.map +1 -0
  243. package/dist/components/form-error-summary.d.ts +1 -0
  244. package/dist/components/form-error-summary.js +1 -0
  245. package/dist/components/index.d.ts +13 -0
  246. package/dist/components/index.d.ts.map +1 -1
  247. package/dist/components/index.js +13 -0
  248. package/dist/components/index.js.map +1 -1
  249. package/dist/components/input-group/InputGroup.d.ts +5 -0
  250. package/dist/components/input-group/InputGroup.d.ts.map +1 -0
  251. package/dist/components/input-group/InputGroup.js +37 -0
  252. package/dist/components/input-group/InputGroup.js.map +1 -0
  253. package/dist/components/input-group/index.d.ts +3 -0
  254. package/dist/components/input-group/index.d.ts.map +1 -0
  255. package/dist/components/input-group/index.js +6 -0
  256. package/dist/components/input-group/index.js.map +1 -0
  257. package/dist/components/input-group/types.d.ts +12 -0
  258. package/dist/components/input-group/types.d.ts.map +1 -0
  259. package/dist/components/input-group/types.js +1 -0
  260. package/dist/components/input-group/types.js.map +1 -0
  261. package/dist/components/input-group.d.ts +1 -0
  262. package/dist/components/input-group.js +1 -0
  263. package/dist/components/internal/native-check-control/NativeCheckControl.d.ts.map +1 -1
  264. package/dist/components/internal/native-check-control/NativeCheckControl.js +4 -0
  265. package/dist/components/internal/native-check-control/NativeCheckControl.js.map +1 -1
  266. package/dist/components/internal/native-check-control/types.d.ts +2 -0
  267. package/dist/components/internal/native-check-control/types.d.ts.map +1 -1
  268. package/dist/components/item/Item.d.ts +23 -0
  269. package/dist/components/item/Item.d.ts.map +1 -0
  270. package/dist/components/item/Item.js +64 -0
  271. package/dist/components/item/Item.js.map +1 -0
  272. package/dist/components/item/index.d.ts +3 -0
  273. package/dist/components/item/index.d.ts.map +1 -0
  274. package/dist/components/item/index.js +9 -0
  275. package/dist/components/item/index.js.map +1 -0
  276. package/dist/components/item/types.d.ts +23 -0
  277. package/dist/components/item/types.d.ts.map +1 -0
  278. package/dist/components/item/types.js +1 -0
  279. package/dist/components/item/types.js.map +1 -0
  280. package/dist/components/item.d.ts +1 -0
  281. package/dist/components/item.js +1 -0
  282. package/dist/components/line-chart/LineChart.d.ts.map +1 -1
  283. package/dist/components/line-chart/LineChart.js +3 -2
  284. package/dist/components/line-chart/LineChart.js.map +1 -1
  285. package/dist/components/line-chart/line-chart-geometry.d.ts +2 -2
  286. package/dist/components/line-chart/line-chart-geometry.d.ts.map +1 -1
  287. package/dist/components/line-chart/line-chart-geometry.js +6 -6
  288. package/dist/components/line-chart/line-chart-geometry.js.map +1 -1
  289. package/dist/components/line-chart/types.d.ts +2 -0
  290. package/dist/components/line-chart/types.d.ts.map +1 -1
  291. package/dist/components/modal/Modal.d.ts +1 -1
  292. package/dist/components/modal/Modal.d.ts.map +1 -1
  293. package/dist/components/modal/Modal.js +5 -2
  294. package/dist/components/modal/Modal.js.map +1 -1
  295. package/dist/components/modal/index.d.ts +1 -1
  296. package/dist/components/modal/index.d.ts.map +1 -1
  297. package/dist/components/modal/index.js.map +1 -1
  298. package/dist/components/modal/types.d.ts +4 -0
  299. package/dist/components/modal/types.d.ts.map +1 -1
  300. package/dist/components/number-field/NumberField.d.ts +1 -1
  301. package/dist/components/number-field/NumberField.d.ts.map +1 -1
  302. package/dist/components/number-field/NumberField.js +25 -5
  303. package/dist/components/number-field/NumberField.js.map +1 -1
  304. package/dist/components/number-field/format.d.ts +1 -1
  305. package/dist/components/number-field/format.d.ts.map +1 -1
  306. package/dist/components/number-field/format.js +32 -7
  307. package/dist/components/number-field/format.js.map +1 -1
  308. package/dist/components/number-field/index.d.ts +1 -1
  309. package/dist/components/number-field/index.d.ts.map +1 -1
  310. package/dist/components/number-field/index.js.map +1 -1
  311. package/dist/components/number-field/types.d.ts +11 -2
  312. package/dist/components/number-field/types.d.ts.map +1 -1
  313. package/dist/components/otp-input/OtpInput.d.ts.map +1 -1
  314. package/dist/components/otp-input/OtpInput.js +2 -0
  315. package/dist/components/otp-input/OtpInput.js.map +1 -1
  316. package/dist/components/pagination/Pagination.d.ts.map +1 -1
  317. package/dist/components/pagination/Pagination.js +93 -29
  318. package/dist/components/pagination/Pagination.js.map +1 -1
  319. package/dist/components/pagination/PaginationShell.d.ts +2 -1
  320. package/dist/components/pagination/PaginationShell.d.ts.map +1 -1
  321. package/dist/components/pagination/PaginationShell.js +44 -9
  322. package/dist/components/pagination/PaginationShell.js.map +1 -1
  323. package/dist/components/pagination/index.d.ts +1 -1
  324. package/dist/components/pagination/index.d.ts.map +1 -1
  325. package/dist/components/pagination/index.js.map +1 -1
  326. package/dist/components/pagination/types.d.ts +18 -0
  327. package/dist/components/pagination/types.d.ts.map +1 -1
  328. package/dist/components/progress/Progress.d.ts +7 -0
  329. package/dist/components/progress/Progress.d.ts.map +1 -0
  330. package/dist/components/progress/Progress.js +9 -0
  331. package/dist/components/progress/Progress.js.map +1 -0
  332. package/dist/components/progress/index.d.ts +3 -0
  333. package/dist/components/progress/index.d.ts.map +1 -0
  334. package/dist/components/progress/index.js +5 -0
  335. package/dist/components/progress/index.js.map +1 -0
  336. package/dist/components/progress/types.d.ts +3 -0
  337. package/dist/components/progress/types.d.ts.map +1 -0
  338. package/dist/components/progress/types.js +1 -0
  339. package/dist/components/progress/types.js.map +1 -0
  340. package/dist/components/progress.d.ts +1 -0
  341. package/dist/components/progress.js +1 -0
  342. package/dist/components/slider/client/SliderClient.d.ts.map +1 -1
  343. package/dist/components/slider/client/SliderClient.js +11 -2
  344. package/dist/components/slider/client/SliderClient.js.map +1 -1
  345. package/dist/components/slider/index.d.ts +1 -1
  346. package/dist/components/slider/index.d.ts.map +1 -1
  347. package/dist/components/slider/index.js.map +1 -1
  348. package/dist/components/slider/types.d.ts +5 -0
  349. package/dist/components/slider/types.d.ts.map +1 -1
  350. package/dist/components/spinner/Spinner.d.ts.map +1 -1
  351. package/dist/components/spinner/Spinner.js +6 -3
  352. package/dist/components/spinner/Spinner.js.map +1 -1
  353. package/dist/components/spinner/index.d.ts +1 -1
  354. package/dist/components/spinner/index.d.ts.map +1 -1
  355. package/dist/components/spinner/index.js.map +1 -1
  356. package/dist/components/spinner/types.d.ts +4 -0
  357. package/dist/components/spinner/types.d.ts.map +1 -1
  358. package/dist/components/tags-input/TagsInput.d.ts.map +1 -1
  359. package/dist/components/tags-input/TagsInput.js +2 -0
  360. package/dist/components/tags-input/TagsInput.js.map +1 -1
  361. package/dist/components/toast/Toast.d.ts +1 -1
  362. package/dist/components/toast/Toast.d.ts.map +1 -1
  363. package/dist/components/toast/Toast.js +33 -29
  364. package/dist/components/toast/Toast.js.map +1 -1
  365. package/dist/components/toast/ToastElements.d.ts.map +1 -1
  366. package/dist/components/toast/ToastElements.js +24 -12
  367. package/dist/components/toast/ToastElements.js.map +1 -1
  368. package/dist/components/toast/index.d.ts +1 -1
  369. package/dist/components/toast/index.d.ts.map +1 -1
  370. package/dist/components/toast/index.js.map +1 -1
  371. package/dist/components/toast/types.d.ts +10 -0
  372. package/dist/components/toast/types.d.ts.map +1 -1
  373. package/dist/components/toolbar/Toolbar.d.ts +2 -2
  374. package/dist/components/toolbar/Toolbar.d.ts.map +1 -1
  375. package/dist/components/toolbar/Toolbar.js +8 -4
  376. package/dist/components/toolbar/Toolbar.js.map +1 -1
  377. package/dist/core/direction.d.ts +2 -0
  378. package/dist/core/direction.d.ts.map +1 -1
  379. package/dist/core/direction.js +8 -3
  380. package/dist/core/direction.js.map +1 -1
  381. package/dist/core/dismissable-layer-registry.d.ts.map +1 -1
  382. package/dist/core/dismissable-layer-registry.js +3 -1
  383. package/dist/core/dismissable-layer-registry.js.map +1 -1
  384. package/dist/core/format-label.d.ts +2 -0
  385. package/dist/core/format-label.d.ts.map +1 -0
  386. package/dist/core/format-label.js +13 -0
  387. package/dist/core/format-label.js.map +1 -0
  388. package/dist/core/ime.d.ts +16 -0
  389. package/dist/core/ime.d.ts.map +1 -0
  390. package/dist/core/ime.js +7 -0
  391. package/dist/core/ime.js.map +1 -0
  392. package/dist/core/index.d.ts +3 -0
  393. package/dist/core/index.d.ts.map +1 -1
  394. package/dist/core/index.js +3 -0
  395. package/dist/core/index.js.map +1 -1
  396. package/dist/core/roving-focus-store.d.ts +3 -2
  397. package/dist/core/roving-focus-store.d.ts.map +1 -1
  398. package/dist/core/roving-focus-store.js +5 -3
  399. package/dist/core/roving-focus-store.js.map +1 -1
  400. package/dist/core/roving-focus.d.ts.map +1 -1
  401. package/dist/core/roving-focus.js +10 -5
  402. package/dist/core/roving-focus.js.map +1 -1
  403. package/dist/core/text-direction.d.ts +7 -0
  404. package/dist/core/text-direction.d.ts.map +1 -0
  405. package/dist/core/text-direction.js +7 -0
  406. package/dist/core/text-direction.js.map +1 -0
  407. package/dist/styles/index.css +1 -1
  408. package/package.json +2 -1
  409. package/skills/uiify/SKILL.md +43 -34
  410. package/skills/uiify/references/elements/alert-modal.md +5 -5
  411. package/skills/uiify/references/elements/aspect-ratio.md +59 -0
  412. package/skills/uiify/references/elements/avatar.md +10 -19
  413. package/skills/uiify/references/elements/badge.md +11 -19
  414. package/skills/uiify/references/elements/button.md +5 -5
  415. package/skills/uiify/references/elements/candle-chart.md +2 -0
  416. package/skills/uiify/references/elements/card.md +10 -21
  417. package/skills/uiify/references/elements/carousel.md +2 -0
  418. package/skills/uiify/references/elements/checkbox.md +1 -1
  419. package/skills/uiify/references/elements/date-picker.md +11 -15
  420. package/skills/uiify/references/elements/description-list.md +38 -0
  421. package/skills/uiify/references/elements/empty-state.md +12 -23
  422. package/skills/uiify/references/elements/field.md +2 -2
  423. package/skills/uiify/references/elements/fieldset.md +39 -0
  424. package/skills/uiify/references/elements/form-error-summary.md +39 -0
  425. package/skills/uiify/references/elements/inline-alert.md +11 -19
  426. package/skills/uiify/references/elements/input-group.md +39 -0
  427. package/skills/uiify/references/elements/item.md +39 -0
  428. package/skills/uiify/references/elements/modal.md +1 -1
  429. package/skills/uiify/references/elements/number-field.md +2 -0
  430. package/skills/uiify/references/elements/pagination.md +2 -0
  431. package/skills/uiify/references/elements/progress-bar.md +11 -20
  432. package/skills/uiify/references/elements/select.md +1 -1
  433. package/skills/uiify/references/examples/alert-confirmation.md +21 -9
  434. package/skills/uiify/references/examples/field-validation.md +2 -2
  435. package/skills/uiify/references/examples/select-basic.md +1 -1
  436. package/skills/uiify/references/examples/table-controls.md +3 -2
  437. package/skills/uiify/references/guides/i18n.md +21 -0
  438. package/skills/uiify/references/guides/verification.md +9 -0
  439. package/skills/uiify/scripts/static.mjs +79 -0
@@ -0,0 +1,38 @@
1
+ # description-list
2
+
3
+ Binding: description-list
4
+
5
+ Present descriptive terms and their associated values.
6
+
7
+ ## Use when
8
+
9
+ Show descriptive metadata as terms with associated values, such as status and owner.
10
+
11
+ ## Avoid when
12
+
13
+ Use a table for tabular data and a list for tasks or actions. Do not use `dl` as a generic visual grid without term/value relationships.
14
+
15
+ ## Structure
16
+
17
+ `DescriptionList` renders `dl`; compose `DescriptionTerm` (`dt`) and `DescriptionDetails` (`dd`) in consumer-authored source order. Keep each term adjacent to its description. Multiple terms or descriptions may be grouped when the content calls for it; no table roles or action-column API is added.
18
+
19
+ ## Responsive
20
+
21
+ Let terms and long values wrap. A visual grid may stack at narrow widths, but DOM order remains term then details and uses logical CSS.
22
+
23
+ ## States
24
+
25
+ This is static descriptive content with no selection or interaction state.
26
+
27
+ ## Verify
28
+
29
+ Check source order, term/value pairing, long and CJK values, RTL, and zoom reflow. Assistive-technology announcements vary; no browser or screen-reader verification is recorded.
30
+
31
+ ## Common mistake
32
+
33
+ Do not replace the native `dl`/`dt`/`dd` structure with table roles or make values depend on visual column alignment.
34
+
35
+ ## Sources
36
+
37
+ - [design-system.service.gov.uk](https://design-system.service.gov.uk/components/summary-list/) (verified 2026-10-19)
38
+ - [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/dl) (verified 2026-10-19)
@@ -1,50 +1,39 @@
1
1
  # empty-state
2
2
 
3
- Binding: gap
3
+ Binding: empty
4
4
 
5
- Explain why a collection has no items and offer a relevant next step.
5
+ Explain an empty collection and offer a relevant next step.
6
6
 
7
7
  ## Use when
8
8
 
9
- A collection has no items and the person needs to understand what is empty and what useful step is available next.
9
+ A collection has no items and the person needs a clear explanation and useful next step.
10
10
 
11
11
  ## Avoid when
12
12
 
13
- Do not show an empty state for loading, filtered no-results, access denial, and a genuinely new collection as though they were the same cause. Name the actual state.
13
+ Do not use the same message for loading, errors, access denial, or filtered no-results. Name the actual state.
14
14
 
15
15
  ## Structure
16
16
 
17
- This is an app-level composition, not a UIify component. Give the section a heading that names the collection and one relevant next step; use a link for navigation or a button for an in-place action.
17
+ `Empty` renders a `section`; compose `EmptyTitle` (`h2`), `EmptyDescription` (`p`), and optional `EmptyContent` (`div`). Use a heading level that fits the page. For a button-styled destination, use the published `Button` with `as="a"` and `href`; use a plain link when link styling is intended. Keep all copy caller-owned. This is static content: it does not announce with `status` or `alert`.
18
18
 
19
19
  ## Responsive
20
20
 
21
- Keep the message and action close in reading order, use a concise line length, and do not center long explanatory copy in an unnecessarily narrow area.
21
+ Keep the explanation and action close in source order. Let long and translated copy wrap; do not constrain it to a narrow text column.
22
22
 
23
23
  ## States
24
24
 
25
- Distinguish first-use empty, filtered no-results, unavailable/error, and loading states. Explain a recovery action for filters and avoid suggesting creation when the person lacks permission.
25
+ Distinguish first-use empty from no matches, loading, and unavailable/error. A caller that updates results dynamically owns any announcement behavior.
26
26
 
27
27
  ## Verify
28
28
 
29
- Check the heading and action name, real destination/behavior, keyboard access, state-specific copy, and narrow/zoom layout.
29
+ Check heading order, relevant action and destination, keyboard access, translated long-copy reflow, and static reading without JavaScript. Browser and assistive-technology proof is pending.
30
30
 
31
31
  ## Common mistake
32
32
 
33
- “No results” should offer a way to clear or change filters, not a create action unrelated to the search.
34
-
35
- ## Custom implementation
36
-
37
- ```html
38
- <section aria-labelledby="empty-title">
39
- <h2 id="empty-title">No invoices yet</h2>
40
- <p>Create an invoice to see it listed here.</p>
41
- <a href="/invoices/new">Create invoice</a>
42
- </section>
43
- ```
44
-
45
- This is an app-level composition; UIify does not currently ship this component.
33
+ Do not label static content as a live region or offer an unrelated create action for a filtered search.
46
34
 
47
35
  ## Sources
48
36
 
49
- - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/headings-and-labels.html) (verified 2026-10-16)
50
- - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-16)
37
+ - [ui.shadcn.com](https://ui.shadcn.com/docs/components/base/empty) (verified 2026-10-19)
38
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/headings-and-labels.html) (verified 2026-10-19)
39
+ - [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles/alert_role) (verified 2026-10-19)
@@ -22,7 +22,7 @@ Keep labels and help text close to the control at narrow widths. Let long instru
22
22
 
23
23
  ## States
24
24
 
25
- Native required validation works without JavaScript. For application validation, set `invalid` on Root and Control and render `Field.Error` with the same state after validation. The control's accessible description includes the error while invalid.
25
+ Native required validation works without JavaScript. For application validation, set `invalid` on Root and Control and render `Field.Error` with the same state after validation. Keep `Field.Description` mounted alongside the conditional Error: Control always references its derived description ID. Parts own their IDs and Control's ARIA relationships; omit manual `id`/`aria-describedby` overrides. The error is included while invalid.
26
26
 
27
27
  ## Verify
28
28
 
@@ -30,7 +30,7 @@ Click the label and confirm its control receives focus. Inspect the accessibilit
30
30
 
31
31
  ## Common mistake
32
32
 
33
- A label and control with different `fieldId` values disconnect the visible label from the input and its instructions.
33
+ Use `Field.Control as="input"`, which supplies the UIify Input marker and derived control ID. A standalone `Input id={rootId}` duplicates Root's ID and disconnects Field.Label. Do not guess ID suffixes; adapt the complete example. Click the label to verify the relationship.
34
34
 
35
35
  Example: `references/examples/field-validation.md`.
36
36
 
@@ -0,0 +1,39 @@
1
+ # fieldset
2
+
3
+ Binding: fieldset
4
+
5
+ Give related form controls a native group name with a legend.
6
+
7
+ ## Use when
8
+
9
+ Related controls need a native group name, such as contact preferences or one radio question.
10
+
11
+ ## Avoid when
12
+
13
+ Do not wrap every individual field in a fieldset or use one for unrelated controls.
14
+
15
+ ## Structure
16
+
17
+ `Fieldset` renders `fieldset`; put `FieldsetLegend` (`legend`) first. The legend names the group, not each control. Give every input its own label. Compose published `Checkbox` controls for checkbox choices; `name` and `value` preserve native form submission. Keep caller-authored help/error relationships and native fieldset props.
18
+
19
+ ## Responsive
20
+
21
+ Let legend and labels wrap in source order. Style the native outer group without obscuring descendant focus.
22
+
23
+ ## States
24
+
25
+ Preserve native `disabled`: it disables descendant controls except controls inside the first legend. The component adds no synthetic group role or hidden legend.
26
+
27
+ ## Verify
28
+
29
+ Check first-child legend, individual labels, group announcement, keyboard access, disabled descendants, RTL, and narrow/zoom reflow. Browser and assistive-technology proof is pending.
30
+
31
+ ## Common mistake
32
+
33
+ Do not use `role="group"` on a `div` instead of native fieldset/legend semantics, or treat the legend as a control's label.
34
+
35
+ ## Sources
36
+
37
+ - [design-system.service.gov.uk](https://design-system.service.gov.uk/components/fieldset/) (verified 2026-10-19)
38
+ - [html.spec.whatwg.org](https://html.spec.whatwg.org/multipage/forms.html) (verified 2026-10-19)
39
+ - [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/fieldset) (verified 2026-10-19)
@@ -0,0 +1,39 @@
1
+ # form-error-summary
2
+
3
+ Binding: form-error-summary
4
+
5
+ List form errors with links to the affected fields.
6
+
7
+ ## Use when
8
+
9
+ A server-rendered form response needs a summary of errors and navigation to affected fields.
10
+
11
+ ## Avoid when
12
+
13
+ Do not expect this static component to validate fields, announce dynamic updates, move focus, or repair missing IDs.
14
+
15
+ ## Structure
16
+
17
+ `FormErrorSummary` takes required `title: ReactNode` and `errors: readonly { href: string; message: ReactNode }[]`. It renders a `section`, heading, and list of links. Name the section with native `aria-label` when useful. Each `href` must target a unique field ID in the same form instance. Use the published `Input` or `Field.Control` for matching fields, and associate matching inline error text with the control using caller-owned `aria-describedby`. An empty error array renders `null`.
18
+
19
+ ## Responsive
20
+
21
+ Keep error links readable and allow long messages to wrap. Preserve the document order between the summary and form.
22
+
23
+ ## States
24
+
25
+ The component is static and has no `role="alert"`, live region, focus movement, or validation engine. Use dynamic announcements only in caller-owned behavior when the application updates errors.
26
+
27
+ ## Verify
28
+
29
+ Check every link target, matching field and inline description, empty rendering, keyboard fragment navigation, and long-copy reflow. Browser and assistive-technology behavior is pending verification.
30
+
31
+ ## Common mistake
32
+
33
+ Do not repeat field IDs when mounting multiple examples: prefix every input, label, description and error link consistently. Do not render dead fragment links, replace inline errors with the summary, promise automatic focus, or mark initial static content as an urgent alert.
34
+
35
+ ## Sources
36
+
37
+ - [design-system.service.gov.uk](https://design-system.service.gov.uk/components/error-summary/) (verified 2026-10-19)
38
+ - [www.w3.org](https://www.w3.org/WAI/tutorials/forms/notifications/) (verified 2026-10-19)
39
+ - [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles/alert_role) (verified 2026-10-19)
@@ -1,46 +1,38 @@
1
1
  # inline-alert
2
2
 
3
- Binding: gap
3
+ Binding: alert
4
4
 
5
- Give a short message context beside the content it affects.
5
+ Give a short persistent message context beside the content it affects.
6
6
 
7
7
  ## Use when
8
8
 
9
- A message belongs beside the content or control it explains. Use status for a non-urgent update and alert only when the information requires immediate attention.
9
+ A message belongs beside the content or control it explains and should remain visible.
10
10
 
11
11
  ## Avoid when
12
12
 
13
- Do not use assertive announcements for routine success, or a toast for an error that must remain visible while the person fixes it.
13
+ Do not use a persistent alert for transient success or add an assertive live role to routine initial content.
14
14
 
15
15
  ## Structure
16
16
 
17
- This is an app-level composition, not a UIify component. Place concise text in a semantic status/alert element next to the affected content; include a heading when it helps identify the issue.
17
+ Compose `Alert`, `AlertTitle`, and `AlertDescription` from `@gunkin/uiify/components/alert`. The static root owns `data-uiify-alert` and a `data-variant` (default `secondary`). It supplies a decorative text symbol: ⓘ, ✓, ⚠︎, or × for `secondary`, `success`, `warning`, or `destructive`. Pass `symbol="!"` to override it or `symbol={false}` to hide it. No SVG or demo layout is needed. Title/description expose `data-part="title|description"`; the built-in glyph is `data-part="symbol"`. The component adds no `role` by default.
18
18
 
19
19
  ## Responsive
20
20
 
21
- Keep the message in reading order beside the affected field or section. Let text wrap and do not communicate severity by color alone.
21
+ Keep the message beside affected content. The optional package stylesheet handles wrapping, logical symbol placement and part typography. With Tailwind, style those same attributes/parts. Keep severity in the title or description; the glyph is hidden from assistive technology.
22
22
 
23
23
  ## States
24
24
 
25
- Use role=status for dynamic, non-urgent updates; use role=alert for urgent messages that should be announced immediately. Keep the message visible until the related issue can be addressed.
25
+ Pass `role="status"` for a dynamic non-urgent update or `role="alert"` for urgent content only when timing and urgency warrant announcement. Alert does not dismiss or move focus.
26
26
 
27
27
  ## Verify
28
28
 
29
- Check announcement timing and role, reading order, message visibility, color contrast, and the relationship to its field/section. Avoid repeating the same announcement through multiple live regions.
29
+ Check every variant, a hidden/custom symbol, default role, native props/ref forwarding and copied CSS/Tailwind code. For dynamic messages, test actual announcement timing and avoid duplicate live regions.
30
30
 
31
31
  ## Common mistake
32
32
 
33
- Do not move focus to routine status text; the live region should announce the update while focus stays on the user's task.
34
-
35
- ## Custom implementation
36
-
37
- ```html
38
- <p role="status">Changes saved.</p>
39
- ```
40
-
41
- This is an app-level composition; UIify does not currently ship this component.
33
+ Use the real `variant` instead of making every outcome `secondary` and rebuilding its icon/layout in a demo wrapper. `role="alert"` is only for an urgent announcement.
42
34
 
43
35
  ## Sources
44
36
 
45
- - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/status-messages.html) (verified 2026-10-16)
46
- - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-16)
37
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/status-messages.html) (verified 2026-10-19)
38
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-19)
@@ -0,0 +1,39 @@
1
+ # input-group
2
+
3
+ Binding: input-group
4
+
5
+ Place text affixes or a related action beside a native input.
6
+
7
+ ## Use when
8
+
9
+ Place a short prefix/suffix or a related native action beside an input.
10
+
11
+ ## Avoid when
12
+
13
+ Do not use affix text as the only label or make passive text look clickable. Keep the input separate when the grouping harms reflow.
14
+
15
+ ## Structure
16
+
17
+ `InputGroup` is a `div` layout wrapper. Compose the published `Input` for a matching field and `Button` for a related action; keep native children only when their needed behavior is not covered. Use `InputGroupAddon` for an add-on; its required `align` is `start` or `end` and appears as `data-align`. Keep a visible label associated with the input. If affix text gives instructions or a unit, include it in the input's `aria-describedby`.
18
+
19
+ ## Responsive
20
+
21
+ Let the input shrink and long affix/action text wrap without clipping or hiding controls. Keep start/input/end in source order and use logical inline layout for RTL.
22
+
23
+ ## States
24
+
25
+ Native input and action own their focus, disabled, and validation states. Keep server-invalid styling visible while the input is focused. Disabling an input does not disable a separate action. The group adds no click-to-focus behavior.
26
+
27
+ ## Verify
28
+
29
+ With scripts disabled, check the label, affix, independently operable action, focus order, RTL, and long-copy reflow at narrow width and zoom. Browser proof is pending.
30
+
31
+ ## Common mistake
32
+
33
+ Do not treat a protocol prefix or icon as a label. A displayed prefix is not part of the submitted value: a domain-only field with `https://` beside it uses `type="text"` and caller-owned URL assembly; `type="url"` expects the complete URL. Use unique field/description IDs for each example instance. Do not show an inert verification/copy button; use a real native form action or link.
34
+
35
+ ## Sources
36
+
37
+ - [designsystem.digital.gov](https://designsystem.digital.gov/components/input-prefix-suffix/) (verified 2026-10-19)
38
+ - [ui.shadcn.com](https://ui.shadcn.com/docs/components/aria/input-group) (verified 2026-10-19)
39
+ - [www.w3.org](https://www.w3.org/WAI/tutorials/forms/labels/) (verified 2026-10-19)
@@ -0,0 +1,39 @@
1
+ # item
2
+
3
+ Binding: item
4
+
5
+ Compose a list row with primary content, metadata, media, and a separate action.
6
+
7
+ ## Use when
8
+
9
+ A real list needs a row with leading media, primary content, metadata, and a separate action.
10
+
11
+ ## Avoid when
12
+
13
+ Do not use standalone `li` outside `ul`/`ol`. This is not a selectable list, menu, or whole-row click target.
14
+
15
+ ## Structure
16
+
17
+ Put `Item` (`li` by default) inside `ul` or `ol`. Compose sibling `ItemMedia` (`span`), `ItemContent` (`div`), optional `ItemMetadata` (`div`), and `ItemActions` (`div`). Put primary navigation in an actual link and use the published `Button` for button actions. Choose meaningful image alt text or `alt=""` for decorative media.
18
+
19
+ ## Responsive
20
+
21
+ Keep DOM order aligned with reading order. Allow title and metadata to wrap and keep actions visible at narrow widths and zoom; do not rely on truncation for essential text.
22
+
23
+ ## States
24
+
25
+ There is no selection, hover-reveal, or list keyboard state. Child links/buttons own their native states and focus.
26
+
27
+ ## Verify
28
+
29
+ Check list/list-item semantics, source and tab order, image alternatives, long/CJK text, RTL, and zoom reflow. Browser and assistive-technology proof is pending.
30
+
31
+ ## Common mistake
32
+
33
+ Do not turn the whole row into a click handler or nest an action button inside a row link.
34
+
35
+ ## Sources
36
+
37
+ - [ui.shadcn.com](https://ui.shadcn.com/docs/components/aria/item) (verified 2026-10-19)
38
+ - [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/li) (verified 2026-10-19)
39
+ - [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/ul) (verified 2026-10-19)
@@ -22,7 +22,7 @@ On narrow screens the default modal becomes a full-width bottom sheet. Its body
22
22
 
23
23
  ## States
24
24
 
25
- The native `show-modal` dialog blocks interaction with the page. Its default dismissal allows Escape; `dismiss="none"` requires an explicit close action. Controlled or initially open state requires `ModalClientContent` from `@gunkin/uiify/components/modal/client`.
25
+ The native `show-modal` dialog blocks interaction with the page. Default dismissal allows Escape. `dismiss="none"` uses native `closedby`; Safari ignores it and still permits Escape. Verify supported engines. Controlled or initially open state requires `ModalClientContent` from `@gunkin/uiify/components/modal/client`.
26
26
 
27
27
  ## Verify
28
28
 
@@ -8,6 +8,8 @@ Enter a numeric quantity with optional bounds and step controls.
8
8
 
9
9
  Enter a quantity for which numeric stepping and bounds are meaningful.
10
10
 
11
+ Set `locale` to control both number formatting and parsing, including locale-specific digits and separators.
12
+
11
13
  ## Avoid when
12
14
 
13
15
  Do not use a number field for identifiers, postal codes, card numbers, or values where spinbutton behavior is not useful; use a text input instead.
@@ -8,6 +8,8 @@ Navigate between pages of a result set.
8
8
 
9
9
  Let people move through a result set split into discrete pages.
10
10
 
11
+ Set `locale` to format page numbers, and translate the `labels.page` template using its `{page}` placeholder.
12
+
11
13
  ## Avoid when
12
14
 
13
15
  Do not paginate a small result set that is easier to scan as one list, or imply that ellipses are links.
@@ -1,47 +1,38 @@
1
1
  # progress-bar
2
2
 
3
- Binding: gap
3
+ Binding: progress
4
4
 
5
- Show determinate completion of a task.
5
+ Show determinate or indeterminate progress for a task.
6
6
 
7
7
  ## Use when
8
8
 
9
- A task has measurable completion with a known range. Use native <progress> and provide a programmatic label.
9
+ Show the completion of a task with a known range, or use indeterminate progress when the amount completed is unknown.
10
10
 
11
11
  ## Avoid when
12
12
 
13
- Do not use it for a quantity like disk space or a score; use <meter>. For unknown duration, omit value for indeterminate progress or use a labeled spinner.
13
+ Do not use Progress for a static measurement or score; use `meter` for a measured quantity.
14
14
 
15
15
  ## Structure
16
16
 
17
- This is an app-level composition, not a UIify component. Associate a visible <label> with <progress>, set max and the current value, and add a text status if the exact progress matters to the task.
17
+ `Progress` renders native `<progress>`. Set `value` and a positive `max` for a known amount; omit `value` for indeterminate progress. Give it an accessible name with an associated `<label>`, `aria-label`, or `aria-labelledby`.
18
18
 
19
19
  ## Responsive
20
20
 
21
- Keep the label and progress indicator together in reading order; allow the label and textual status to wrap on narrow screens.
21
+ Keep the label and indicator together in reading order. The optional skin fills the available inline size; native browser rendering can differ.
22
22
 
23
23
  ## States
24
24
 
25
- A present value is determinate; omit value when the amount completed is not known. Use a positive max and keep value within 0..max. Mark the described region busy while it is updating when appropriate.
25
+ The browser exposes determinate or indeterminate semantics from the native attributes. UIify does not simulate value changes or announce them.
26
26
 
27
27
  ## Verify
28
28
 
29
- Check accessible name, min/max/current values, determinate and indeterminate states, changing value, completion message, and responsive layout.
29
+ Unit and public-page tests check native determinate and indeterminate markup and an associated label. In the consuming page, keep `value` between zero and `max` and check the accessible name.
30
30
 
31
31
  ## Common mistake
32
32
 
33
- Fallback text inside <progress> is not its accessible label; associate an actual label or aria-label.
34
-
35
- ## Custom implementation
36
-
37
- ```html
38
- <label for="upload-progress">Upload</label>
39
- <progress id="upload-progress" value="3" max="5"></progress>
40
- ```
41
-
42
- This is an app-level composition; UIify does not currently ship this component.
33
+ Text inside `<progress>` is not its accessible name; associate a label or provide an ARIA name.
43
34
 
44
35
  ## Sources
45
36
 
46
- - [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/progress) (verified 2026-10-16)
47
- - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-16)
37
+ - [developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/progress) (verified 2026-10-19)
38
+ - [www.w3.org](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) (verified 2026-10-19)
@@ -14,7 +14,7 @@ Avoid a select when users must compare several options at once or when the task
14
14
 
15
15
  ## Structure
16
16
 
17
- Associate a visible label with the select. Group related options with `optgroup` and provide an empty prompt only when the value is genuinely optional.
17
+ Wrap `Select.Root` in a native `<label>` as in the example. Alternatively, match a native label's `htmlFor` to an explicit unique `id` on Select.Root. `Field.Label` derives the ID for Field.Control; it does not label a standalone Select.Root. Do not reuse Field.Root's ID on the select. Group related options with `optgroup`; an empty prompt is for an optional value.
18
18
 
19
19
  ## Responsive
20
20
 
@@ -7,18 +7,30 @@ Export: `AlertConfirmation`
7
7
  ## Source
8
8
 
9
9
  ```tsx
10
- import { AlertModal } from "@gunkin/uiify";
10
+ "use client";
11
+
12
+ import { useRef, useState } from "react";
13
+ import { AlertModalAction, AlertModalCancel, AlertModalContent, AlertModalTrigger } from "@gunkin/uiify/components/alert-modal";
11
14
 
12
15
  export function AlertConfirmation() {
16
+ const [deleted, setDeleted] = useState(false);
17
+ const heading = useRef<HTMLHeadingElement>(null);
13
18
  return (
14
- <AlertModal
15
- id="delete-draft"
16
- title="Delete draft?"
17
- description="This permanently removes the draft."
18
- trigger="Delete draft"
19
- cancelLabel="Keep draft"
20
- actionLabel="Delete"
21
- />
19
+ <section>
20
+ <h2 ref={heading} tabIndex={-1}>Draft</h2>
21
+ {deleted ? <p role="status">Draft removed from this demo.</p> : <>
22
+ <AlertModalTrigger target="delete-draft">Delete draft</AlertModalTrigger>
23
+ <AlertModalContent id="delete-draft" aria-labelledby="delete-draft-title" aria-describedby="delete-draft-description">
24
+ <h3 id="delete-draft-title">Delete draft?</h3>
25
+ <p id="delete-draft-description">This removes the draft from this demo.</p>
26
+ <AlertModalCancel target="delete-draft">Keep draft</AlertModalCancel>
27
+ <AlertModalAction target="delete-draft" onClick={() => {
28
+ setDeleted(true);
29
+ requestAnimationFrame(() => heading.current?.focus());
30
+ }}>Delete</AlertModalAction>
31
+ </AlertModalContent>
32
+ </>}
33
+ </section>
22
34
  );
23
35
  }
24
36
  ```
@@ -10,7 +10,7 @@ Export: `FieldValidation`
10
10
  "use client";
11
11
 
12
12
  import { useState } from "react";
13
- import { Field } from "@gunkin/uiify";
13
+ import { Field } from "@gunkin/uiify/components/field";
14
14
 
15
15
  export function FieldValidation() {
16
16
  const [email, setEmail] = useState("");
@@ -18,7 +18,7 @@ export function FieldValidation() {
18
18
  return (
19
19
  <Field.Root id="email" invalid={invalid}>
20
20
  <Field.Label fieldId="email">Email</Field.Label>
21
- <Field.Control fieldId="email" as="input" type="email" invalid={invalid} value={email} onChange={(event) => setEmail(event.currentTarget.value)} />
21
+ <Field.Control fieldId="email" as="input" name="email" type="email" invalid={invalid} value={email} onChange={(event) => setEmail(event.currentTarget.value)} />
22
22
  <Field.Description fieldId="email">We will send your receipt here.</Field.Description>
23
23
  {invalid ? <Field.Error fieldId="email" invalid>Enter a valid email address.</Field.Error> : null}
24
24
  </Field.Root>
@@ -7,7 +7,7 @@ Export: `SelectBasic`
7
7
  ## Source
8
8
 
9
9
  ```tsx
10
- import { Select } from "@gunkin/uiify";
10
+ import { Select } from "@gunkin/uiify/components/select";
11
11
 
12
12
  export function SelectBasic() {
13
13
  return (
@@ -10,7 +10,8 @@ Export: `TableControls`
10
10
  "use client";
11
11
 
12
12
  import { useState } from "react";
13
- import { Table } from "@gunkin/uiify";
13
+ import { Input } from "@gunkin/uiify/components/input";
14
+ import { Table } from "@gunkin/uiify/components/table";
14
15
 
15
16
  const people = ["Ada Lovelace", "Grace Hopper", "Katherine Johnson"];
16
17
 
@@ -19,7 +20,7 @@ export function TableControls() {
19
20
  const visible = people.filter((person) => person.toLowerCase().includes(query.toLowerCase()));
20
21
  return (
21
22
  <section>
22
- <label>Filter people <input value={query} onChange={(event) => setQuery(event.currentTarget.value)} /></label>
23
+ <label>Filter people <Input value={query} onValueChange={setQuery} /></label>
23
24
  <Table.Root>
24
25
  <Table.Header><Table.Row id="header"><Table.ColumnHeader id="name-heading">Name</Table.ColumnHeader></Table.Row></Table.Header>
25
26
  <Table.Body>{visible.map((person) => <Table.Row id={person} key={person}><Table.Cell>{person}</Table.Cell></Table.Row>)}</Table.Body>
@@ -0,0 +1,21 @@
1
+ # Localization
2
+
3
+ Use this guide when the project has an i18n setup (`next-intl`, `i18next`, `react-intl`, `@lingui/*`, `@inlang/paraglide-*`, or `locales/`, `messages/`, or `i18n/` folders), the request mentions languages, translation, RTL, Arabic, Hebrew or CJK, or the page declares `<html dir="rtl">`.
4
+
5
+ ## Copy
6
+
7
+ Put every user-visible string in the project's message catalog. Pass translated UIify strings through `labels`, using `{name}` templates instead of concatenation, and pass the page language through `locale`. Do not leave UIify's English defaults on a non-English page.
8
+
9
+ ## Direction and formatting
10
+
11
+ Set `lang` and `dir` on `<html>` on the server. UIify reads direction from the DOM; use `dir` props only for an island that differs. Use logical CSS such as `margin-inline-start`, `inset-inline-end` and `text-align: start` in custom styles. Mirror directional icons with `:dir(rtl)`.
12
+
13
+ Format numbers and dates with `Intl.*` and the page locale; do not hand-format them. Custom key handlers on text inputs should start with `isComposingKeyEvent(event)`.
14
+
15
+ ## Typography and language picker
16
+
17
+ Avoid `letter-spacing` and uppercase styling on Arabic or CJK text. Let `:lang()` choose fonts. Use plain links and endonyms in a language picker, no flags, and mark the current language with `aria-current`.
18
+
19
+ ## Verify
20
+
21
+ Render once with `dir="rtl"` and once with a long-text locale such as German or a pseudo-locale. Check overflow, popup anchoring and arrow keys.
@@ -0,0 +1,9 @@
1
+ # Optional static lint
2
+
3
+ Run `node <resolved-skill-directory>/scripts/lint.mjs <project-root>` when the project's existing checks do not cover the relevant JSX attributes. Resolve the script from this skill directory, not the project root.
4
+
5
+ It runs the static checks compiled from the published laws when this skill was built and prints their names. It does not read `DESIGN.md` or other design files.
6
+
7
+ It inspects literal attributes of lowercase intrinsic JSX tags and of parts imported from `@gunkin/uiify/components` or `@gunkin/uiify/elements` (for example `Button` or `Field.Control`). Other custom components and computed attribute values are not analyzed.
8
+
9
+ No findings is not proof of accessibility. Missing parsers or execution failures mean unavailable, never a pass. Reuse project build, typecheck and tests, browser interaction checks, and axe coverage for the requested page; this lint does not replace them.