@godxjp/ui 16.9.2 → 16.9.4

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 (325) hide show
  1. package/dist/app/app-provider.d.ts +3 -3
  2. package/dist/app/app-provider.js +10 -10
  3. package/dist/app/date-format-labels.d.ts +2 -2
  4. package/dist/app/date-format-labels.js +2 -2
  5. package/dist/app/date-formats.d.ts +1 -1
  6. package/dist/app/date-formats.js +1 -1
  7. package/dist/app/index.d.ts +14 -14
  8. package/dist/app/index.js +14 -14
  9. package/dist/app/locales.d.ts +1 -1
  10. package/dist/app/request-headers.d.ts +1 -1
  11. package/dist/app/request-headers.js +1 -1
  12. package/dist/app/storage.d.ts +2 -2
  13. package/dist/app/storage.js +4 -4
  14. package/dist/app/theme-axes.d.ts +1 -1
  15. package/dist/app/time-format-labels.d.ts +2 -2
  16. package/dist/app/time-format-labels.js +2 -2
  17. package/dist/app/timezones.d.ts +1 -1
  18. package/dist/app/timezones.js +1 -1
  19. package/dist/app/types.d.ts +6 -6
  20. package/dist/app/types.js +2 -2
  21. package/dist/app/use-formatting.d.ts +4 -4
  22. package/dist/app/use-formatting.js +2 -2
  23. package/dist/components/admin/index.d.ts +24 -24
  24. package/dist/components/admin/index.js +21 -21
  25. package/dist/components/charts/area-chart.d.ts +2 -2
  26. package/dist/components/charts/area-chart.js +1 -1
  27. package/dist/components/charts/bar-chart.d.ts +2 -2
  28. package/dist/components/charts/bar-chart.js +1 -1
  29. package/dist/components/charts/chart-cartesian.d.ts +1 -1
  30. package/dist/components/charts/chart-cartesian.js +4 -4
  31. package/dist/components/charts/chart-frame.js +2 -2
  32. package/dist/components/charts/chart-summary.d.ts +1 -1
  33. package/dist/components/charts/index.d.ts +10 -10
  34. package/dist/components/charts/index.js +5 -5
  35. package/dist/components/charts/line-chart.d.ts +2 -2
  36. package/dist/components/charts/line-chart.js +1 -1
  37. package/dist/components/charts/pie-chart.d.ts +2 -2
  38. package/dist/components/charts/pie-chart.js +4 -4
  39. package/dist/components/data-display/accordion.d.ts +1 -1
  40. package/dist/components/data-display/accordion.js +1 -1
  41. package/dist/components/data-display/avatar.d.ts +1 -1
  42. package/dist/components/data-display/avatar.js +1 -1
  43. package/dist/components/data-display/badge.d.ts +1 -1
  44. package/dist/components/data-display/badge.js +3 -3
  45. package/dist/components/data-display/card.js +1 -1
  46. package/dist/components/data-display/carousel.js +2 -2
  47. package/dist/components/data-display/data-table.d.ts +1 -1
  48. package/dist/components/data-display/data-table.js +12 -12
  49. package/dist/components/data-display/descriptions.d.ts +1 -1
  50. package/dist/components/data-display/descriptions.js +1 -1
  51. package/dist/components/data-display/empty-state.d.ts +2 -2
  52. package/dist/components/data-display/empty-state.js +1 -1
  53. package/dist/components/data-display/hover-card.d.ts +1 -1
  54. package/dist/components/data-display/hover-card.js +1 -1
  55. package/dist/components/data-display/index.d.ts +26 -26
  56. package/dist/components/data-display/index.js +17 -17
  57. package/dist/components/data-display/list-row.js +2 -2
  58. package/dist/components/data-display/popover.js +1 -1
  59. package/dist/components/data-display/scroll-area.js +1 -1
  60. package/dist/components/data-display/table.js +2 -2
  61. package/dist/components/data-display/tree-list.js +1 -1
  62. package/dist/components/data-entry/calendar.d.ts +2 -2
  63. package/dist/components/data-entry/calendar.js +3 -3
  64. package/dist/components/data-entry/cascader.d.ts +3 -3
  65. package/dist/components/data-entry/cascader.js +8 -8
  66. package/dist/components/data-entry/checkbox-group.d.ts +2 -2
  67. package/dist/components/data-entry/checkbox-group.js +4 -4
  68. package/dist/components/data-entry/checkbox.d.ts +1 -1
  69. package/dist/components/data-entry/checkbox.js +2 -2
  70. package/dist/components/data-entry/choice-option.js +1 -1
  71. package/dist/components/data-entry/color-picker.d.ts +2 -2
  72. package/dist/components/data-entry/color-picker.js +4 -4
  73. package/dist/components/data-entry/command.js +2 -2
  74. package/dist/components/data-entry/date-picker.d.ts +2 -2
  75. package/dist/components/data-entry/date-picker.js +7 -7
  76. package/dist/components/data-entry/date-range-picker.d.ts +2 -2
  77. package/dist/components/data-entry/date-range-picker.js +6 -6
  78. package/dist/components/data-entry/field.d.ts +2 -2
  79. package/dist/components/data-entry/field.js +2 -2
  80. package/dist/components/data-entry/form-field.d.ts +2 -2
  81. package/dist/components/data-entry/form-field.js +3 -3
  82. package/dist/components/data-entry/form.d.ts +5 -5
  83. package/dist/components/data-entry/form.js +2 -2
  84. package/dist/components/data-entry/index.d.ts +59 -59
  85. package/dist/components/data-entry/index.js +33 -33
  86. package/dist/components/data-entry/input-otp.d.ts +1 -1
  87. package/dist/components/data-entry/input-otp.js +1 -1
  88. package/dist/components/data-entry/input.js +2 -2
  89. package/dist/components/data-entry/label.js +1 -1
  90. package/dist/components/data-entry/month-picker.d.ts +2 -2
  91. package/dist/components/data-entry/month-picker.js +5 -5
  92. package/dist/components/data-entry/month-range-picker.d.ts +2 -2
  93. package/dist/components/data-entry/month-range-picker.js +5 -5
  94. package/dist/components/data-entry/number-input.d.ts +2 -2
  95. package/dist/components/data-entry/number-input.js +4 -4
  96. package/dist/components/data-entry/password-input.d.ts +2 -2
  97. package/dist/components/data-entry/password-input.js +1 -1
  98. package/dist/components/data-entry/radio.d.ts +2 -2
  99. package/dist/components/data-entry/radio.js +3 -3
  100. package/dist/components/data-entry/rating.d.ts +2 -2
  101. package/dist/components/data-entry/rating.js +1 -1
  102. package/dist/components/data-entry/search-input.js +5 -5
  103. package/dist/components/data-entry/search-select.d.ts +2 -2
  104. package/dist/components/data-entry/search-select.js +7 -7
  105. package/dist/components/data-entry/select.d.ts +1 -1
  106. package/dist/components/data-entry/select.js +3 -3
  107. package/dist/components/data-entry/slider.d.ts +1 -1
  108. package/dist/components/data-entry/slider.js +1 -1
  109. package/dist/components/data-entry/switch.d.ts +1 -1
  110. package/dist/components/data-entry/switch.js +1 -1
  111. package/dist/components/data-entry/tag-input.d.ts +2 -2
  112. package/dist/components/data-entry/tag-input.js +1 -1
  113. package/dist/components/data-entry/textarea.js +3 -3
  114. package/dist/components/data-entry/time-picker.d.ts +2 -2
  115. package/dist/components/data-entry/time-picker.js +5 -5
  116. package/dist/components/data-entry/toggle-group.d.ts +1 -1
  117. package/dist/components/data-entry/toggle-group.js +1 -1
  118. package/dist/components/data-entry/toggle.d.ts +2 -2
  119. package/dist/components/data-entry/toggle.js +1 -1
  120. package/dist/components/data-entry/transfer.d.ts +2 -2
  121. package/dist/components/data-entry/transfer.js +7 -7
  122. package/dist/components/data-entry/tree-select.d.ts +3 -3
  123. package/dist/components/data-entry/tree-select.js +11 -11
  124. package/dist/components/data-entry/upload-crop-dialog.js +5 -5
  125. package/dist/components/data-entry/upload.d.ts +5 -5
  126. package/dist/components/data-entry/upload.js +10 -10
  127. package/dist/components/data-entry/use-upload-draft.d.ts +1 -1
  128. package/dist/components/data-entry/use-upload-draft.js +1 -1
  129. package/dist/components/feedback/alert.d.ts +29 -29
  130. package/dist/components/feedback/alert.js +5 -5
  131. package/dist/components/feedback/dialog.d.ts +3 -3
  132. package/dist/components/feedback/dialog.js +7 -7
  133. package/dist/components/feedback/index.d.ts +10 -10
  134. package/dist/components/feedback/index.js +7 -7
  135. package/dist/components/feedback/overlay-header-tone.d.ts +1 -1
  136. package/dist/components/feedback/sheet.d.ts +1 -1
  137. package/dist/components/feedback/sheet.js +2 -2
  138. package/dist/components/feedback/skeleton.js +2 -2
  139. package/dist/components/feedback/tooltip.js +1 -1
  140. package/dist/components/general/button.d.ts +8 -8
  141. package/dist/components/general/button.js +4 -4
  142. package/dist/components/general/index.d.ts +4 -4
  143. package/dist/components/general/index.js +2 -2
  144. package/dist/components/general/typography.d.ts +9 -9
  145. package/dist/components/general/typography.js +1 -1
  146. package/dist/components/layout/app-shell.d.ts +2 -2
  147. package/dist/components/layout/app-shell.js +1 -1
  148. package/dist/components/layout/aspect-ratio.d.ts +1 -1
  149. package/dist/components/layout/aspect-ratio.js +1 -1
  150. package/dist/components/layout/breadcrumb.d.ts +1 -1
  151. package/dist/components/layout/breadcrumb.js +1 -1
  152. package/dist/components/layout/flex.d.ts +2 -2
  153. package/dist/components/layout/flex.js +2 -2
  154. package/dist/components/layout/index.d.ts +19 -19
  155. package/dist/components/layout/index.js +11 -11
  156. package/dist/components/layout/page-container.d.ts +3 -3
  157. package/dist/components/layout/page-container.js +2 -2
  158. package/dist/components/layout/resizable.js +1 -1
  159. package/dist/components/layout/responsive-grid.d.ts +1 -1
  160. package/dist/components/layout/separator.d.ts +1 -1
  161. package/dist/components/layout/separator.js +1 -1
  162. package/dist/components/layout/sidebar.d.ts +2 -2
  163. package/dist/components/layout/sidebar.js +5 -5
  164. package/dist/components/layout/topbar.d.ts +2 -2
  165. package/dist/components/layout/topbar.js +1 -1
  166. package/dist/components/navigation/app-setting-picker.d.ts +2 -2
  167. package/dist/components/navigation/app-setting-picker.js +9 -9
  168. package/dist/components/navigation/context-menu.js +1 -1
  169. package/dist/components/navigation/dropdown-menu.js +1 -1
  170. package/dist/components/navigation/filter-bar.d.ts +2 -2
  171. package/dist/components/navigation/filter-bar.js +3 -3
  172. package/dist/components/navigation/index.d.ts +12 -12
  173. package/dist/components/navigation/index.js +9 -9
  174. package/dist/components/navigation/menubar.js +1 -1
  175. package/dist/components/navigation/navigation-menu.js +1 -1
  176. package/dist/components/navigation/pagination.d.ts +2 -2
  177. package/dist/components/navigation/pagination.js +5 -5
  178. package/dist/components/navigation/steps.d.ts +2 -2
  179. package/dist/components/navigation/steps.js +3 -3
  180. package/dist/components/navigation/tabs.js +1 -1
  181. package/dist/components/query/data-state.d.ts +2 -2
  182. package/dist/components/query/data-state.js +1 -1
  183. package/dist/components/query/index.d.ts +10 -10
  184. package/dist/components/query/index.js +5 -5
  185. package/dist/components/query/infinite-query-state.d.ts +2 -2
  186. package/dist/components/query/infinite-query-state.js +3 -3
  187. package/dist/components/query/mutation-feedback.d.ts +2 -2
  188. package/dist/components/query/mutation-feedback.js +1 -1
  189. package/dist/components/query/prefetch-link.d.ts +2 -2
  190. package/dist/components/query/query-refetch-button.d.ts +2 -2
  191. package/dist/components/query/query-refetch-button.js +1 -1
  192. package/dist/components/ui/accordion.js +1 -1
  193. package/dist/components/ui/alert-dialog.d.ts +1 -1
  194. package/dist/components/ui/alert-dialog.js +1 -1
  195. package/dist/components/ui/alert.d.ts +1 -1
  196. package/dist/components/ui/alert.js +1 -1
  197. package/dist/components/ui/aspect-ratio.js +1 -1
  198. package/dist/components/ui/avatar.js +1 -1
  199. package/dist/components/ui/badge.d.ts +1 -1
  200. package/dist/components/ui/badge.js +1 -1
  201. package/dist/components/ui/button.d.ts +1 -1
  202. package/dist/components/ui/button.js +1 -1
  203. package/dist/components/ui/calendar.d.ts +1 -1
  204. package/dist/components/ui/calendar.js +1 -1
  205. package/dist/components/ui/card.d.ts +1 -1
  206. package/dist/components/ui/card.js +1 -1
  207. package/dist/components/ui/carousel.d.ts +1 -1
  208. package/dist/components/ui/carousel.js +1 -1
  209. package/dist/components/ui/checkbox.d.ts +1 -1
  210. package/dist/components/ui/checkbox.js +1 -1
  211. package/dist/components/ui/color-picker.d.ts +1 -1
  212. package/dist/components/ui/color-picker.js +1 -1
  213. package/dist/components/ui/command.d.ts +1 -1
  214. package/dist/components/ui/command.js +1 -1
  215. package/dist/components/ui/context-menu.d.ts +1 -1
  216. package/dist/components/ui/context-menu.js +1 -1
  217. package/dist/components/ui/date-picker.d.ts +1 -1
  218. package/dist/components/ui/date-picker.js +1 -1
  219. package/dist/components/ui/date-range-picker.d.ts +1 -1
  220. package/dist/components/ui/date-range-picker.js +1 -1
  221. package/dist/components/ui/dialog.d.ts +1 -1
  222. package/dist/components/ui/dialog.js +1 -1
  223. package/dist/components/ui/dropdown-menu.d.ts +1 -1
  224. package/dist/components/ui/dropdown-menu.js +1 -1
  225. package/dist/components/ui/hover-card.js +1 -1
  226. package/dist/components/ui/index.d.ts +42 -42
  227. package/dist/components/ui/index.js +42 -42
  228. package/dist/components/ui/input-otp.js +1 -1
  229. package/dist/components/ui/input.d.ts +1 -1
  230. package/dist/components/ui/input.js +1 -1
  231. package/dist/components/ui/label.d.ts +1 -1
  232. package/dist/components/ui/label.js +1 -1
  233. package/dist/components/ui/menubar.d.ts +1 -1
  234. package/dist/components/ui/menubar.js +1 -1
  235. package/dist/components/ui/navigation-menu.d.ts +1 -1
  236. package/dist/components/ui/navigation-menu.js +1 -1
  237. package/dist/components/ui/pagination.d.ts +1 -1
  238. package/dist/components/ui/pagination.js +1 -1
  239. package/dist/components/ui/password-input.d.ts +1 -1
  240. package/dist/components/ui/password-input.js +3 -3
  241. package/dist/components/ui/password-strength.d.ts +1 -1
  242. package/dist/components/ui/password-strength.js +1 -1
  243. package/dist/components/ui/popover.d.ts +1 -1
  244. package/dist/components/ui/popover.js +1 -1
  245. package/dist/components/ui/radio.d.ts +1 -1
  246. package/dist/components/ui/radio.js +1 -1
  247. package/dist/components/ui/rating.js +2 -2
  248. package/dist/components/ui/resizable.d.ts +1 -1
  249. package/dist/components/ui/resizable.js +1 -1
  250. package/dist/components/ui/scroll-area.d.ts +1 -1
  251. package/dist/components/ui/scroll-area.js +1 -1
  252. package/dist/components/ui/select.d.ts +1 -1
  253. package/dist/components/ui/select.js +1 -1
  254. package/dist/components/ui/separator.js +1 -1
  255. package/dist/components/ui/sheet.d.ts +1 -1
  256. package/dist/components/ui/sheet.js +1 -1
  257. package/dist/components/ui/skeleton.d.ts +1 -1
  258. package/dist/components/ui/skeleton.js +1 -1
  259. package/dist/components/ui/slider.d.ts +1 -1
  260. package/dist/components/ui/slider.js +1 -1
  261. package/dist/components/ui/sonner.d.ts +1 -1
  262. package/dist/components/ui/sonner.js +1 -1
  263. package/dist/components/ui/switch.d.ts +1 -1
  264. package/dist/components/ui/switch.js +1 -1
  265. package/dist/components/ui/table.d.ts +1 -1
  266. package/dist/components/ui/table.js +1 -1
  267. package/dist/components/ui/tabs.d.ts +1 -1
  268. package/dist/components/ui/tabs.js +1 -1
  269. package/dist/components/ui/tag-input.js +2 -2
  270. package/dist/components/ui/textarea.d.ts +1 -1
  271. package/dist/components/ui/textarea.js +1 -1
  272. package/dist/components/ui/time-picker.d.ts +1 -1
  273. package/dist/components/ui/time-picker.js +1 -1
  274. package/dist/components/ui/toggle-group.d.ts +1 -1
  275. package/dist/components/ui/toggle-group.js +2 -2
  276. package/dist/components/ui/toggle.js +1 -1
  277. package/dist/components/ui/upload.d.ts +1 -1
  278. package/dist/components/ui/upload.js +1 -1
  279. package/dist/form/form-field-control.d.ts +2 -2
  280. package/dist/form/form-field-control.js +1 -1
  281. package/dist/form/form-root.d.ts +2 -2
  282. package/dist/form/form-root.js +1 -1
  283. package/dist/form/index.d.ts +7 -7
  284. package/dist/form/index.js +3 -3
  285. package/dist/form/use-zod-form.d.ts +2 -2
  286. package/dist/i18n/index.d.ts +3 -3
  287. package/dist/i18n/index.js +2 -2
  288. package/dist/i18n/translate.d.ts +2 -2
  289. package/dist/i18n/translate.js +3 -3
  290. package/dist/i18n/use-translation.d.ts +4 -4
  291. package/dist/i18n/use-translation.js +3 -3
  292. package/dist/index.d.ts +11 -11
  293. package/dist/index.js +7 -7
  294. package/dist/lib/datetime/detect.js +1 -1
  295. package/dist/lib/datetime/format-date.d.ts +2 -2
  296. package/dist/lib/datetime/format-date.js +4 -4
  297. package/dist/lib/datetime/format.d.ts +2 -2
  298. package/dist/lib/datetime/format.js +6 -6
  299. package/dist/lib/datetime/index.d.ts +5 -5
  300. package/dist/lib/datetime/index.js +5 -5
  301. package/dist/lib/datetime/parse.js +1 -1
  302. package/dist/lib/datetime/sync.d.ts +1 -1
  303. package/dist/lib/datetime/sync.js +2 -2
  304. package/dist/lib/format.d.ts +2 -2
  305. package/dist/lib/format.js +2 -2
  306. package/dist/lib/variants.d.ts +1 -1
  307. package/dist/props/components/app.prop.d.ts +3 -3
  308. package/dist/props/components/charts.prop.d.ts +1 -1
  309. package/dist/props/components/data-display.prop.d.ts +1 -1
  310. package/dist/props/components/data-entry.prop.d.ts +3 -3
  311. package/dist/props/components/feedback.prop.d.ts +1 -1
  312. package/dist/props/components/form.prop.d.ts +1 -1
  313. package/dist/props/components/general.prop.d.ts +1 -1
  314. package/dist/props/components/index.d.ts +10 -10
  315. package/dist/props/components/layout.prop.d.ts +1 -1
  316. package/dist/props/components/navigation.prop.d.ts +1 -1
  317. package/dist/props/components/query.prop.d.ts +2 -2
  318. package/dist/props/index.d.ts +7 -7
  319. package/dist/props/index.js +3 -3
  320. package/dist/props/vocabulary/data.prop.d.ts +2 -2
  321. package/dist/props/vocabulary/index.d.ts +6 -6
  322. package/dist/props/vocabulary/navigation.prop.d.ts +1 -1
  323. package/dist/styles/control.css +16 -0
  324. package/package.json +2 -2
  325. package/scripts/ui-audit.mjs +7 -2
@@ -198,6 +198,22 @@
198
198
  padding: 0;
199
199
  }
200
200
 
201
+ /* Icon-only sizes must be square at the SAME height as their text-size counterpart, so an
202
+ * icon button can sit flush beside a labelled one (split buttons, toolbars). Derive them from
203
+ * the density tokens — never from a hand-written offset off the base --control-height, which
204
+ * is how icon-sm drifted a step down to the xs height (issue #133). */
205
+ .ui-button--icon-sm {
206
+ width: var(--control-height-sm);
207
+ height: var(--control-height-sm);
208
+ padding: 0;
209
+ }
210
+
211
+ .ui-button--icon-lg {
212
+ width: var(--control-height-lg);
213
+ height: var(--control-height-lg);
214
+ padding: 0;
215
+ }
216
+
201
217
  .ui-control {
202
218
  height: var(--control-height);
203
219
  padding-inline-start: var(--control-padding-x);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@godxjp/ui",
3
- "version": "16.9.2",
3
+ "version": "16.9.4",
4
4
  "type": "module",
5
5
  "packageManager": "pnpm@10.29.1",
6
6
  "sideEffects": false,
@@ -294,7 +294,7 @@
294
294
  "docs:sync-primitives": "node preview/scripts/sync-primitive-docs.mjs && prettier --write \"docs/primitives/**/*.tsx\"",
295
295
  "audit": "node scripts/ui-audit.mjs",
296
296
  "audit:examples": "node scripts/ui-audit.mjs docs",
297
- "build": "tsup && tsc -p tsconfig.build.json && node scripts/copy-styles.mjs && node scripts/add-use-client.mjs",
297
+ "build": "tsup && tsc -p tsconfig.build.json && node scripts/copy-styles.mjs && node scripts/fix-esm-extensions.mjs && node scripts/add-use-client.mjs",
298
298
  "dev": "node scripts/dev.mjs",
299
299
  "prepublishOnly": "pnpm run build",
300
300
  "check:audit-sync": "node scripts/check-audit-sync.mjs",
@@ -259,7 +259,12 @@ const RULES = [
259
259
  {
260
260
  id: "raw-intl-date",
261
261
  severity: "warn",
262
- test: /\.toLocale(?:Date|Time)?String\(\s*\)|new Date\([^)]*\)\.(?:getMonth|getDate|getFullYear)\(\)\s*\+/,
262
+ // Only the unambiguously-Date methods: `.toLocaleDateString()` / `.toLocaleTimeString()`.
263
+ // Bare `.toLocaleString()` is excluded on purpose — it is overwhelmingly
264
+ // `Number.prototype.toLocaleString()` (legit locale number formatting), and matching it
265
+ // false-flagged every formatted count/amount. A date+time `Date.toLocaleString()` is rare and
266
+ // still partly covered by the hand-built `new Date(...).getMonth()+` alternative below.
267
+ test: /\.toLocale(?:Date|Time)String\(\s*\)|new Date\([^)]*\)\.(?:getMonth|getDate|getFullYear)\(\)\s*\+/,
263
268
  standard: "ISO 8601 · IANA tz database · ECMA-402 Intl.DateTimeFormat",
264
269
  message:
265
270
  "Don't hand-build or locale-default dates. Use formatDate from @godxjp/ui/datetime (Intl.DateTimeFormat + IANA timezone + ISO-8601), which respects the AppProvider locale/timezone.",
@@ -404,7 +409,7 @@ function walk(dir, acc = []) {
404
409
  // sub-component sits FLUSH (no padding). Per-line regexes can't see across lines, so this is a
405
410
  // whole-file pass. The body must be wrapped in <CardContent> (titles in <CardHeader>).
406
411
  const CARD_FLUSH =
407
- /<Card(?![^>]*\bp-0\b)(?:\s[^>]*)?>\s*<(?!CardContent|CardHeader|CardCover|CardFooter|\/Card)/g;
412
+ /<Card(?![^>]*\bp-0\b)(?:\s[^>]*)?>\s*<(?!CardContent|CardHeader|CardCover|CardFooter|CardBar|\/Card)/g;
408
413
 
409
414
  // Structural: a bare <label>/<Label> paired with a TEXT control (its sibling) instead of a
410
415
  // <FormField>. FormField OWNS the label↔control association (htmlFor/id), aria-describedby/