@godxjp/ui 31.31.7 → 32.0.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 (728) hide show
  1. package/README.md +102 -121
  2. package/agent/START-HERE.md +10 -10
  3. package/agent/components/Accordion.json +2 -2
  4. package/agent/components/AccountChip.json +1 -1
  5. package/agent/components/Actions.json +1 -1
  6. package/agent/components/Activity.json +2 -2
  7. package/agent/components/Affix.json +1 -1
  8. package/agent/components/Alert.json +22 -6
  9. package/agent/components/AlertDialog.json +8 -1
  10. package/agent/components/Anchor.json +4 -3
  11. package/agent/components/AppLauncher.json +2 -2
  12. package/agent/components/AppProvider.json +19 -11
  13. package/agent/components/AppSettingPicker.json +18 -2
  14. package/agent/components/AppShell.json +4 -5
  15. package/agent/components/AreaChart.json +0 -1
  16. package/agent/components/AspectRatio.json +2 -2
  17. package/agent/components/Attachments.json +3 -3
  18. package/agent/components/AuthAccountSummary.json +1 -1
  19. package/agent/components/AuthDivider.json +1 -1
  20. package/agent/components/AuthExpiryProvider.json +0 -1
  21. package/agent/components/AuthFooter.json +2 -2
  22. package/agent/components/AuthIdentity.json +3 -3
  23. package/agent/components/AuthStack.json +1 -1
  24. package/agent/components/Avatar.json +2 -12
  25. package/agent/components/Badge.json +1 -1
  26. package/agent/components/BarChart.json +0 -1
  27. package/agent/components/BranchScopePicker.json +1 -1
  28. package/agent/components/Breadcrumb.json +1 -1
  29. package/agent/components/Button.json +3 -3
  30. package/agent/components/Calendar.json +1 -1
  31. package/agent/components/Card.json +2 -2
  32. package/agent/components/CardBar.json +0 -1
  33. package/agent/components/CardContent.json +0 -1
  34. package/agent/components/Carousel.json +4 -3
  35. package/agent/components/Cascader.json +1 -1
  36. package/agent/components/CenteredShell.json +78 -17
  37. package/agent/components/ChatBubble.json +3 -3
  38. package/agent/components/ChatBubbleList.json +3 -3
  39. package/agent/components/ChatComposer.json +3 -3
  40. package/agent/components/ChatSuggestion.json +3 -3
  41. package/agent/components/Checkbox.json +1 -1
  42. package/agent/components/CheckboxGroup.json +0 -1
  43. package/agent/components/CodeBlock.json +1 -1
  44. package/agent/components/Collapsible.json +4 -4
  45. package/agent/components/ColorPicker.json +1 -1
  46. package/agent/components/Command.json +5 -5
  47. package/agent/components/CommandPalette.json +1 -1
  48. package/agent/components/CompactBarTrend.json +1 -1
  49. package/agent/components/Conversations.json +3 -3
  50. package/agent/components/CredentialReveal.json +1 -1
  51. package/agent/components/DataState.json +2 -2
  52. package/agent/components/DataTable.json +1 -1
  53. package/agent/components/DatePicker.json +1 -1
  54. package/agent/components/Descriptions.json +1 -1
  55. package/agent/components/Dialog.json +2 -2
  56. package/agent/components/DraggablePanel.json +5 -4
  57. package/agent/components/DropdownMenu.json +1 -1
  58. package/agent/components/EmojiPicker.json +3 -2
  59. package/agent/components/EmptyState.json +1 -1
  60. package/agent/components/ErrorSurface.json +3 -3
  61. package/agent/components/FeatureList.json +1 -1
  62. package/agent/components/Field.json +0 -1
  63. package/agent/components/Flex.json +34 -4
  64. package/agent/components/FloatButton.json +6 -5
  65. package/agent/components/Form.json +1 -1
  66. package/agent/components/FormErrors.json +0 -1
  67. package/agent/components/FormField.json +6 -6
  68. package/agent/components/FormFieldArray.json +0 -1
  69. package/agent/components/FormFieldControl.json +0 -1
  70. package/agent/components/FormRoot.json +1 -1
  71. package/agent/components/Heading.json +3 -0
  72. package/agent/components/Icon.json +1 -1
  73. package/agent/components/Image.json +7 -4
  74. package/agent/components/InfiniteQueryState.json +1 -1
  75. package/agent/components/Input.json +1 -1
  76. package/agent/components/InputOTP.json +2 -2
  77. package/agent/components/Label.json +3 -3
  78. package/agent/components/LegalDocumentShell.json +5 -4
  79. package/agent/components/Legend.json +1 -1
  80. package/agent/components/LineChart.json +0 -1
  81. package/agent/components/Link.json +0 -1
  82. package/agent/components/ListRow.json +1 -1
  83. package/agent/components/Logo.json +5 -4
  84. package/agent/components/Marquee.json +4 -3
  85. package/agent/components/Masonry.json +4 -3
  86. package/agent/components/MasterDetail.json +1 -1
  87. package/agent/components/MegaMenu.json +4 -3
  88. package/agent/components/MobileShell.json +4 -4
  89. package/agent/components/NavList.json +1 -1
  90. package/agent/components/NumberInput.json +1 -1
  91. package/agent/components/OrgChart.json +4 -3
  92. package/agent/components/OrgSwitcher.json +1 -1
  93. package/agent/components/OverlayPortalProvider.json +0 -1
  94. package/agent/components/PageContainer.json +3 -3
  95. package/agent/components/PageCover.json +3 -2
  96. package/agent/components/Pagination.json +1 -1
  97. package/agent/components/PasswordInput.json +1 -1
  98. package/agent/components/PasswordStrength.json +1 -1
  99. package/agent/components/PermissionMatrix.json +1 -1
  100. package/agent/components/PieChart.json +0 -1
  101. package/agent/components/Popover.json +31 -6
  102. package/agent/components/PrefetchLink.json +1 -1
  103. package/agent/components/Progress.json +1 -1
  104. package/agent/components/Prose.json +1 -1
  105. package/agent/components/QrCode.json +1 -1
  106. package/agent/components/Radio.json +0 -1
  107. package/agent/components/RadioGroup.json +2 -2
  108. package/agent/components/RangeTimeline.json +2 -1
  109. package/agent/components/Rating.json +1 -1
  110. package/agent/components/RecordPicker.json +1 -1
  111. package/agent/components/ResizablePanel.json +1 -1
  112. package/agent/components/ResponsiveGrid.json +2 -2
  113. package/agent/components/Reveal.json +3 -3
  114. package/agent/components/ScrollArea.json +2 -2
  115. package/agent/components/SearchInput.json +1 -1
  116. package/agent/components/Segmented.json +1 -1
  117. package/agent/components/Select.json +7 -5
  118. package/agent/components/Separator.json +1 -1
  119. package/agent/components/ServiceCatalogCta.json +0 -1
  120. package/agent/components/ServiceLauncherCard.json +1 -1
  121. package/agent/components/ServiceRolePanel.json +1 -1
  122. package/agent/components/Sheet.json +5 -5
  123. package/agent/components/Sidebar.json +1 -1
  124. package/agent/components/Skeleton.json +26 -12
  125. package/agent/components/Slider.json +2 -2
  126. package/agent/components/SortableList.json +3 -2
  127. package/agent/components/SplitPane.json +1 -1
  128. package/agent/components/StatCard.json +1 -1
  129. package/agent/components/Steps.json +1 -1
  130. package/agent/components/Swatch.json +1 -1
  131. package/agent/components/Switch.json +1 -1
  132. package/agent/components/Table.json +1 -1
  133. package/agent/components/Tabs.json +3 -3
  134. package/agent/components/Text.json +5 -1
  135. package/agent/components/TextDiff.json +5 -4
  136. package/agent/components/Textarea.json +1 -1
  137. package/agent/components/ThemeScope.json +1 -1
  138. package/agent/components/ThoughtChain.json +3 -3
  139. package/agent/components/TimePicker.json +1 -1
  140. package/agent/components/Timeline.json +1 -1
  141. package/agent/components/TimelineGrid.json +5 -4
  142. package/agent/components/Toaster.json +0 -1
  143. package/agent/components/Toggle.json +3 -3
  144. package/agent/components/ToggleGroup.json +1 -1
  145. package/agent/components/Toolbar.json +10 -3
  146. package/agent/components/Tooltip.json +9 -9
  147. package/agent/components/Topbar.json +1 -1
  148. package/agent/components/TopbarItem.json +1 -1
  149. package/agent/components/Transfer.json +2 -2
  150. package/agent/components/Tree.json +1 -1
  151. package/agent/components/TreeSelect.json +1 -1
  152. package/agent/components/TwoFactorSetup.json +1 -1
  153. package/agent/components/Upload.json +1 -1
  154. package/agent/components/UploadCropDialog.json +1 -1
  155. package/agent/components/Welcome.json +3 -3
  156. package/agent/components/formatDate.json +2 -2
  157. package/agent/components/inertiaUpload.json +0 -1
  158. package/agent/components/useZodForm.json +0 -1
  159. package/agent/components-index.json +80 -154
  160. package/agent/components.json +541 -1737
  161. package/agent/index.json +10 -10
  162. package/agent/llms.txt +9 -9
  163. package/agent/patterns/account-recovery-settings.json +1 -1
  164. package/agent/patterns/auth-recovery-panels.json +2 -2
  165. package/agent/patterns/error-pages.json +1 -1
  166. package/agent/patterns/pricing-plans.json +17 -0
  167. package/agent/patterns-index.json +17 -1
  168. package/agent/patterns.json +21 -4
  169. package/agent/rules.json +30 -65
  170. package/agent/tokens.json +27 -57
  171. package/agent/vocabulary.json +3 -3
  172. package/dist/app/app-provider.d.ts +5 -3
  173. package/dist/app/app-provider.js +47 -12
  174. package/dist/app/date-format-labels.d.ts +3 -1
  175. package/dist/app/date-format-labels.js +2 -4
  176. package/dist/app/date-formats.d.ts +21 -2
  177. package/dist/app/date-formats.js +51 -2
  178. package/dist/app/index.d.ts +3 -1
  179. package/dist/app/index.js +5 -0
  180. package/dist/app/locales.d.ts +58 -3
  181. package/dist/app/locales.js +134 -8
  182. package/dist/app/preset.d.ts +25 -0
  183. package/dist/app/preset.js +10 -0
  184. package/dist/app/request-headers.d.ts +3 -3
  185. package/dist/app/request-headers.js +19 -10
  186. package/dist/app/settings-scope.d.ts +54 -0
  187. package/dist/app/settings-scope.js +46 -0
  188. package/dist/app/tenant-theme.js +8 -3
  189. package/dist/app/time-format-labels.d.ts +4 -1
  190. package/dist/app/time-format-labels.js +7 -1
  191. package/dist/app/types.d.ts +10 -2
  192. package/dist/app/use-formatting.d.ts +1 -1
  193. package/dist/components/admin/index.d.ts +1 -1
  194. package/dist/components/admin/index.js +1 -1
  195. package/dist/components/data-display/accordion.d.ts +51 -1
  196. package/dist/components/data-display/accordion.js +247 -1
  197. package/dist/components/data-display/avatar.d.ts +16 -1
  198. package/dist/components/data-display/avatar.js +109 -1
  199. package/dist/components/data-display/credential-reveal.d.ts +9 -2
  200. package/dist/components/data-display/credential-reveal.js +156 -1
  201. package/dist/components/data-display/image.js +5 -3
  202. package/dist/components/data-display/index.d.ts +0 -21
  203. package/dist/components/data-display/index.js +1 -43
  204. package/dist/components/data-display/popover.d.ts +15 -3
  205. package/dist/components/data-display/popover.js +168 -2
  206. package/dist/components/data-entry/branch-scope-picker.d.ts +1 -1
  207. package/dist/components/data-entry/index.d.ts +5 -12
  208. package/dist/components/data-entry/index.js +11 -12
  209. package/dist/components/data-entry/input-otp.d.ts +48 -2
  210. package/dist/components/data-entry/input-otp.js +94 -1
  211. package/dist/components/data-entry/number-input.d.ts +1 -1
  212. package/dist/components/data-entry/password-input.d.ts +38 -2
  213. package/dist/components/data-entry/password-input.js +56 -1
  214. package/dist/components/data-entry/rating.d.ts +38 -2
  215. package/dist/components/data-entry/rating.js +127 -1
  216. package/dist/components/data-entry/segmented.d.ts +94 -2
  217. package/dist/components/data-entry/segmented.js +104 -1
  218. package/dist/components/{ui/tag-input.d.ts → data-entry/select-tags-inline.d.ts} +7 -4
  219. package/dist/components/{ui/tag-input.js → data-entry/select-tags-inline.js} +4 -4
  220. package/dist/components/data-entry/select.js +4 -0
  221. package/dist/components/data-entry/toggle-group.d.ts +108 -2
  222. package/dist/components/data-entry/toggle-group.js +189 -1
  223. package/dist/components/data-entry/toggle.d.ts +86 -2
  224. package/dist/components/data-entry/toggle.js +153 -2
  225. package/dist/components/feedback/alert.d.ts +5 -3
  226. package/dist/components/feedback/alert.js +14 -2
  227. package/dist/components/feedback/index.d.ts +2 -6
  228. package/dist/components/feedback/index.js +1 -13
  229. package/dist/components/feedback/skeleton.d.ts +4 -17
  230. package/dist/components/feedback/skeleton.js +3 -40
  231. package/dist/components/general/index.d.ts +2 -4
  232. package/dist/components/general/index.js +1 -6
  233. package/dist/components/general/typography.d.ts +4 -58
  234. package/dist/components/general/typography.js +7 -141
  235. package/dist/components/layout/aspect-ratio.d.ts +24 -1
  236. package/dist/components/layout/aspect-ratio.js +18 -1
  237. package/dist/components/layout/auth-divider.js +1 -1
  238. package/dist/components/layout/auth-identity.js +6 -2
  239. package/dist/components/layout/centered-shell.d.ts +13 -8
  240. package/dist/components/layout/centered-shell.js +43 -1
  241. package/dist/components/layout/flex.d.ts +1 -1
  242. package/dist/components/layout/flex.js +73 -1
  243. package/dist/components/layout/index.d.ts +1 -13
  244. package/dist/components/layout/index.js +0 -12
  245. package/dist/components/layout/separator.d.ts +25 -2
  246. package/dist/components/layout/separator.js +71 -1
  247. package/dist/components/navigation/{app-setting-toggle.d.ts → app-setting-cycle.d.ts} +3 -4
  248. package/dist/components/navigation/{app-setting-toggle.js → app-setting-cycle.js} +3 -3
  249. package/dist/components/navigation/app-setting-picker.d.ts +6 -2
  250. package/dist/components/navigation/app-setting-picker.js +20 -2
  251. package/dist/components/navigation/index.d.ts +3 -11
  252. package/dist/components/navigation/index.js +1 -9
  253. package/dist/components/navigation/tabs.js +1 -1
  254. package/dist/components/ui/carousel.d.ts +1 -1
  255. package/dist/components/ui/carousel.js +1 -1
  256. package/dist/components/ui/index.d.ts +11 -5
  257. package/dist/components/ui/index.js +5 -5
  258. package/dist/contracts/measurement.json +2 -2
  259. package/dist/email/brand-mark.d.ts +3 -2
  260. package/dist/email/brand-mark.js +1 -1
  261. package/dist/email/tokens.generated.d.ts +6 -6
  262. package/dist/email/tokens.generated.js +6 -6
  263. package/dist/i18n/locale-tags.d.ts +25 -0
  264. package/dist/i18n/locale-tags.js +59 -0
  265. package/dist/i18n/translate.d.ts +20 -3
  266. package/dist/i18n/translate.js +25 -14
  267. package/dist/i18n/use-translation.d.ts +3 -3
  268. package/dist/i18n/use-translation.js +4 -2
  269. package/dist/{components/navigation → lab}/anchor.d.ts +2 -2
  270. package/dist/{components/navigation → lab}/anchor.js +5 -5
  271. package/dist/{components/data-display → lab}/carousel.js +2 -2
  272. package/dist/{components/layout → lab}/draggable-panel.d.ts +8 -8
  273. package/dist/{components/layout → lab}/draggable-panel.js +2 -2
  274. package/dist/{components/data-entry → lab}/emoji-picker.d.ts +2 -2
  275. package/dist/{components/data-entry → lab}/emoji-picker.js +6 -6
  276. package/dist/{components/general → lab}/float-button.d.ts +8 -8
  277. package/dist/{components/general → lab}/float-button.js +7 -7
  278. package/dist/lab/index.d.ts +39 -0
  279. package/dist/lab/index.js +48 -0
  280. package/dist/{components/layout → lab}/legal-document-shell.d.ts +2 -2
  281. package/dist/{components/layout → lab}/legal-document-shell.js +4 -4
  282. package/dist/{components/data-display → lab}/marquee.d.ts +5 -5
  283. package/dist/{components/data-display → lab}/marquee.js +5 -5
  284. package/dist/{components/layout → lab}/masonry.d.ts +2 -2
  285. package/dist/{components/layout → lab}/masonry.js +3 -3
  286. package/dist/{components/navigation → lab}/mega-menu.d.ts +4 -4
  287. package/dist/{components/navigation → lab}/mega-menu.js +2 -2
  288. package/dist/{components/data-display → lab}/org-chart.d.ts +2 -2
  289. package/dist/{components/data-display → lab}/org-chart.js +4 -4
  290. package/dist/{components/layout → lab}/page-cover.d.ts +2 -2
  291. package/dist/{components/layout → lab}/page-cover.js +2 -2
  292. package/dist/{components/data-display → lab}/range-timeline.d.ts +1 -1
  293. package/dist/{components/data-display → lab}/range-timeline.js +6 -6
  294. package/dist/{components/data-entry → lab}/sortable-list.d.ts +2 -2
  295. package/dist/{components/data-entry → lab}/sortable-list.js +3 -3
  296. package/dist/{components/data-display → lab}/text-diff.d.ts +3 -3
  297. package/dist/{components/data-display → lab}/text-diff.js +4 -4
  298. package/dist/{components/data-display → lab}/timeline-grid.d.ts +2 -2
  299. package/dist/{components/data-display → lab}/timeline-grid.js +1 -1
  300. package/dist/lib/control-styles.js +1 -1
  301. package/dist/lib/datetime/format.js +20 -6
  302. package/dist/lib/datetime/sync.d.ts +6 -2
  303. package/dist/lib/datetime/sync.js +14 -18
  304. package/dist/lib/platform.d.ts +1 -1
  305. package/dist/props/components/app.prop.d.ts +28 -13
  306. package/dist/props/components/data-display.prop.d.ts +19 -29
  307. package/dist/props/components/feedback.prop.d.ts +15 -44
  308. package/dist/props/components/general.prop.d.ts +2 -64
  309. package/dist/props/components/index.d.ts +9 -1
  310. package/dist/props/components/layout.prop.d.ts +41 -57
  311. package/dist/props/registry.d.ts +48 -101
  312. package/dist/props/registry.js +45 -129
  313. package/dist/props/vocabulary/index.d.ts +1 -1
  314. package/dist/props/vocabulary/interaction.prop.d.ts +3 -12
  315. package/dist/styles/alert-layout.css +0 -29
  316. package/dist/styles/data-display-layout.css +14 -22
  317. package/dist/styles/dialog-layout.css +4 -0
  318. package/dist/styles/fonts/OFL.txt +93 -0
  319. package/dist/styles/form-layout.css +4 -0
  320. package/dist/styles/index.css +0 -2
  321. package/dist/styles/layers.json +44 -179
  322. package/dist/styles/text-layout.css +0 -15
  323. package/dist/styles.css +2 -0
  324. package/dist/themes/godx.css +43 -0
  325. package/dist/themes/godx.d.ts +13 -0
  326. package/dist/themes/godx.js +12 -0
  327. package/dist/tokens/components/feedback.css +0 -6
  328. package/dist/tokens/derived.css +23 -22
  329. package/dist/tokens/foundation.css +4 -6
  330. package/docs/COMPOSITION-VS-COMPONENT.md +58 -33
  331. package/docs/CONSUMER-RULES.md +1 -1
  332. package/docs/CUSTOMER-THEMING.md +17 -53
  333. package/docs/migrations/v32.md +98 -0
  334. package/package.json +58 -19
  335. package/scripts/_agent-setup.mjs +54 -3
  336. package/scripts/brand-accent.generated.mjs +15 -2
  337. package/scripts/cli.mjs +36 -11
  338. package/scripts/codemod.mjs +522 -0
  339. package/scripts/consumer-rule.md +21 -43
  340. package/scripts/postinstall.mjs +10 -47
  341. package/scripts/prune-css.mjs +1 -1
  342. package/scripts/ui-audit.mjs +5 -2
  343. package/dist/components/data-display/chat-bubble.d.ts +0 -30
  344. package/dist/components/data-display/chat-bubble.js +0 -229
  345. package/dist/components/data-display/hover-card.d.ts +0 -1
  346. package/dist/components/data-display/hover-card.js +0 -7
  347. package/dist/components/data-display/thought-chain.d.ts +0 -42
  348. package/dist/components/data-display/thought-chain.js +0 -177
  349. package/dist/components/data-display/thumbnail.d.ts +0 -37
  350. package/dist/components/data-display/thumbnail.js +0 -20
  351. package/dist/components/data-display/welcome.d.ts +0 -26
  352. package/dist/components/data-display/welcome.js +0 -37
  353. package/dist/components/data-entry/attachments.d.ts +0 -19
  354. package/dist/components/data-entry/attachments.js +0 -366
  355. package/dist/components/data-entry/chat-composer.d.ts +0 -51
  356. package/dist/components/data-entry/chat-composer.js +0 -200
  357. package/dist/components/data-entry/chat-suggestion.d.ts +0 -28
  358. package/dist/components/data-entry/chat-suggestion.js +0 -309
  359. package/dist/components/data-entry/tag-input.d.ts +0 -2
  360. package/dist/components/data-entry/tag-input.js +0 -5
  361. package/dist/components/feedback/banner.d.ts +0 -21
  362. package/dist/components/feedback/banner.js +0 -19
  363. package/dist/components/feedback/callout.d.ts +0 -23
  364. package/dist/components/feedback/callout.js +0 -42
  365. package/dist/components/layout/auth-shell.d.ts +0 -10
  366. package/dist/components/layout/auth-shell.js +0 -42
  367. package/dist/components/layout/space-compact.d.ts +0 -65
  368. package/dist/components/layout/space-compact.js +0 -52
  369. package/dist/components/navigation/conversations.d.ts +0 -39
  370. package/dist/components/navigation/conversations.js +0 -371
  371. package/dist/components/ui/accordion.d.ts +0 -51
  372. package/dist/components/ui/accordion.js +0 -254
  373. package/dist/components/ui/aspect-ratio.d.ts +0 -24
  374. package/dist/components/ui/aspect-ratio.js +0 -21
  375. package/dist/components/ui/avatar.d.ts +0 -16
  376. package/dist/components/ui/avatar.js +0 -115
  377. package/dist/components/ui/credential-reveal.d.ts +0 -9
  378. package/dist/components/ui/credential-reveal.js +0 -160
  379. package/dist/components/ui/hover-card.d.ts +0 -47
  380. package/dist/components/ui/hover-card.js +0 -205
  381. package/dist/components/ui/input-otp.d.ts +0 -48
  382. package/dist/components/ui/input-otp.js +0 -101
  383. package/dist/components/ui/password-input.d.ts +0 -38
  384. package/dist/components/ui/password-input.js +0 -60
  385. package/dist/components/ui/rating.d.ts +0 -38
  386. package/dist/components/ui/rating.js +0 -131
  387. package/dist/components/ui/segmented.d.ts +0 -94
  388. package/dist/components/ui/segmented.js +0 -108
  389. package/dist/components/ui/separator.d.ts +0 -25
  390. package/dist/components/ui/separator.js +0 -74
  391. package/dist/components/ui/toggle-group.d.ts +0 -108
  392. package/dist/components/ui/toggle-group.js +0 -194
  393. package/dist/components/ui/toggle.d.ts +0 -86
  394. package/dist/components/ui/toggle.js +0 -156
  395. package/docs/CANONICAL-CONTRACTS.md +0 -206
  396. package/docs/COMPONENTS.md +0 -163
  397. package/docs/DATETIME.md +0 -78
  398. package/docs/DEVELOPMENT.md +0 -269
  399. package/docs/FRAME-A11Y-CI.md +0 -287
  400. package/docs/FRAME-COVERAGE-LEDGER.md +0 -123
  401. package/docs/FRAME-COVERAGE-REPORT.md +0 -228
  402. package/docs/FRAME-COVERAGE-STANDARD.md +0 -65
  403. package/docs/FRAME-COVERAGE.md +0 -29
  404. package/docs/MEASUREMENT-CONTRACT.md +0 -109
  405. package/docs/PROPS-REGISTRY.md +0 -61
  406. package/docs/PROPS-VOCABULARY.md +0 -100
  407. package/docs/REGISTRY.md +0 -70
  408. package/docs/TESTING.md +0 -107
  409. package/docs/THEME-API-COVERAGE.md +0 -538
  410. package/docs/WHAT-BELONGS-HERE.md +0 -179
  411. package/docs/asset-modules.d.ts +0 -53
  412. package/docs/assets/cover-terrain.svg +0 -6
  413. package/docs/assets/portrait-amber.svg +0 -5
  414. package/docs/assets/portrait-clay.svg +0 -5
  415. package/docs/assets/portrait-indigo.svg +0 -5
  416. package/docs/assets/portrait-iris.svg +0 -5
  417. package/docs/assets/portrait-moss.svg +0 -5
  418. package/docs/assets/portrait-plum.svg +0 -5
  419. package/docs/assets/portrait-slate.svg +0 -5
  420. package/docs/assets/service-mark-rose.svg +0 -6
  421. package/docs/assets/service-mark-teal.svg +0 -5
  422. package/docs/assets/shot-landscape.svg +0 -12
  423. package/docs/assets/shot-portrait.svg +0 -10
  424. package/docs/assets/tcgm/card-1.svg +0 -1
  425. package/docs/assets/tcgm/card-2.svg +0 -1
  426. package/docs/assets/tcgm/card-3.svg +0 -1
  427. package/docs/assets/tcgm/card-4.svg +0 -1
  428. package/docs/assets/tcgm/card-5.svg +0 -1
  429. package/docs/assets/tcgm/card-6.svg +0 -1
  430. package/docs/assets/tcgm/hero-prism.svg +0 -1
  431. package/docs/assets/tcgm/scene-1.svg +0 -1
  432. package/docs/assets/tcgm/scene-2.svg +0 -1
  433. package/docs/assets/tcgm/scene-3.svg +0 -1
  434. package/docs/assets/tcgm/scene-4.svg +0 -1
  435. package/docs/assets/tcgm/scene-5.svg +0 -1
  436. package/docs/assets/tcgm/tcgm-lockup-color.svg +0 -1
  437. package/docs/assets/tcgm/tcgm-symbol-color.svg +0 -1
  438. package/docs/charts/cjk-category-axis.tsx +0 -81
  439. package/docs/charts/compact-bar-trend.tsx +0 -327
  440. package/docs/charts/size-tiers.tsx +0 -192
  441. package/docs/data-display/accordion.tsx +0 -99
  442. package/docs/data-display/avatar.tsx +0 -502
  443. package/docs/data-display/badge.tsx +0 -335
  444. package/docs/data-display/card/examples/detail-panel.tsx +0 -106
  445. package/docs/data-display/card/examples/tab-list.tsx +0 -97
  446. package/docs/data-display/card/index.md +0 -3
  447. package/docs/data-display/card/index.tsx +0 -390
  448. package/docs/data-display/carousel.tsx +0 -160
  449. package/docs/data-display/charts.tsx +0 -278
  450. package/docs/data-display/chat-bubble.tsx +0 -397
  451. package/docs/data-display/code-block.tsx +0 -188
  452. package/docs/data-display/collapsible.tsx +0 -162
  453. package/docs/data-display/credential-reveal.tsx +0 -148
  454. package/docs/data-display/data-table/examples/antd-parity.tsx +0 -257
  455. package/docs/data-display/data-table/examples/approval-queue.tsx +0 -212
  456. package/docs/data-display/data-table/examples/grid-features.tsx +0 -158
  457. package/docs/data-display/data-table/examples/list-page.tsx +0 -175
  458. package/docs/data-display/data-table/examples/selectable-inbox.tsx +0 -113
  459. package/docs/data-display/data-table/examples/server-paged.tsx +0 -179
  460. package/docs/data-display/data-table/examples/striped-list.tsx +0 -173
  461. package/docs/data-display/data-table/index.md +0 -9
  462. package/docs/data-display/data-table/index.tsx +0 -407
  463. package/docs/data-display/descriptions.tsx +0 -263
  464. package/docs/data-display/empty-state.tsx +0 -164
  465. package/docs/data-display/feature-list.tsx +0 -159
  466. package/docs/data-display/hover-card.tsx +0 -181
  467. package/docs/data-display/image.tsx +0 -170
  468. package/docs/data-display/legend.tsx +0 -158
  469. package/docs/data-display/list-row.tsx +0 -441
  470. package/docs/data-display/markdown.tsx +0 -86
  471. package/docs/data-display/marquee.tsx +0 -254
  472. package/docs/data-display/org-chart.tsx +0 -165
  473. package/docs/data-display/permission-matrix.tsx +0 -188
  474. package/docs/data-display/popover-touch.tsx +0 -27
  475. package/docs/data-display/popover.tsx +0 -331
  476. package/docs/data-display/progress.tsx +0 -162
  477. package/docs/data-display/prose.tsx +0 -169
  478. package/docs/data-display/qr-code.tsx +0 -68
  479. package/docs/data-display/scroll-area.tsx +0 -420
  480. package/docs/data-display/service-launcher-card.tsx +0 -445
  481. package/docs/data-display/stat-card.tsx +0 -354
  482. package/docs/data-display/swatch.tsx +0 -107
  483. package/docs/data-display/table.tsx +0 -362
  484. package/docs/data-display/text-diff.tsx +0 -89
  485. package/docs/data-display/thought-chain.tsx +0 -176
  486. package/docs/data-display/thumbnail.tsx +0 -128
  487. package/docs/data-display/timeline-grid.tsx +0 -119
  488. package/docs/data-display/timeline.tsx +0 -671
  489. package/docs/data-display/touch-actions.tsx +0 -36
  490. package/docs/data-display/tree.tsx +0 -724
  491. package/docs/data-display/welcome.tsx +0 -115
  492. package/docs/data-entry/attachments.tsx +0 -160
  493. package/docs/data-entry/block-editor.tsx +0 -105
  494. package/docs/data-entry/branch-scope-picker.tsx +0 -128
  495. package/docs/data-entry/calendar.tsx +0 -226
  496. package/docs/data-entry/cascader.tsx +0 -380
  497. package/docs/data-entry/chat-composer.tsx +0 -619
  498. package/docs/data-entry/chat-suggestion.tsx +0 -301
  499. package/docs/data-entry/checkbox.tsx +0 -256
  500. package/docs/data-entry/color-picker.tsx +0 -189
  501. package/docs/data-entry/command-palette.tsx +0 -179
  502. package/docs/data-entry/command.tsx +0 -341
  503. package/docs/data-entry/country-picker-recipe.tsx +0 -175
  504. package/docs/data-entry/date-picker.tsx +0 -452
  505. package/docs/data-entry/emoji-picker.tsx +0 -35
  506. package/docs/data-entry/form/examples/employee-settings.tsx +0 -267
  507. package/docs/data-entry/form/examples/invoice-form.tsx +0 -387
  508. package/docs/data-entry/form-dynamic-fields.tsx +0 -199
  509. package/docs/data-entry/form-field/examples/a11y-contract.tsx +0 -242
  510. package/docs/data-entry/form-field/examples/create-form.tsx +0 -107
  511. package/docs/data-entry/form-field/index.md +0 -8
  512. package/docs/data-entry/form-field/index.tsx +0 -337
  513. package/docs/data-entry/form-inertia.tsx +0 -80
  514. package/docs/data-entry/form-root.tsx +0 -112
  515. package/docs/data-entry/form.tsx +0 -1498
  516. package/docs/data-entry/input-otp.tsx +0 -258
  517. package/docs/data-entry/input.tsx +0 -796
  518. package/docs/data-entry/label.tsx +0 -102
  519. package/docs/data-entry/markdown-editor.tsx +0 -69
  520. package/docs/data-entry/number-input.tsx +0 -279
  521. package/docs/data-entry/password-input.tsx +0 -102
  522. package/docs/data-entry/password-strength.tsx +0 -99
  523. package/docs/data-entry/radio-group.tsx +0 -316
  524. package/docs/data-entry/rating.tsx +0 -91
  525. package/docs/data-entry/record-picker.tsx +0 -209
  526. package/docs/data-entry/search-input.tsx +0 -121
  527. package/docs/data-entry/segmented-in-filter-row.tsx +0 -60
  528. package/docs/data-entry/segmented.tsx +0 -300
  529. package/docs/data-entry/select-async-contracts.tsx +0 -108
  530. package/docs/data-entry/select-matrix.tsx +0 -209
  531. package/docs/data-entry/select.tsx +0 -547
  532. package/docs/data-entry/slider.tsx +0 -212
  533. package/docs/data-entry/sortable-list.tsx +0 -76
  534. package/docs/data-entry/switch.tsx +0 -314
  535. package/docs/data-entry/tag-input.tsx +0 -145
  536. package/docs/data-entry/textarea.tsx +0 -249
  537. package/docs/data-entry/time-picker.tsx +0 -187
  538. package/docs/data-entry/time-range-picker.tsx +0 -55
  539. package/docs/data-entry/toggle-count.tsx +0 -348
  540. package/docs/data-entry/toggle-group.tsx +0 -438
  541. package/docs/data-entry/toggle.tsx +0 -217
  542. package/docs/data-entry/transfer.tsx +0 -115
  543. package/docs/data-entry/tree-select.tsx +0 -204
  544. package/docs/data-entry/upload-crop-dialog.tsx +0 -109
  545. package/docs/data-entry/upload.tsx +0 -310
  546. package/docs/feedback/alert-dialog.tsx +0 -270
  547. package/docs/feedback/alert.tsx +0 -248
  548. package/docs/feedback/auth-expiry.tsx +0 -104
  549. package/docs/feedback/banner.tsx +0 -183
  550. package/docs/feedback/callout.tsx +0 -220
  551. package/docs/feedback/danger-confirm.tsx +0 -91
  552. package/docs/feedback/dialog-touch.tsx +0 -24
  553. package/docs/feedback/dialog.tsx +0 -373
  554. package/docs/feedback/sheet.tsx +0 -510
  555. package/docs/feedback/skeleton.tsx +0 -168
  556. package/docs/feedback/toast.tsx +0 -135
  557. package/docs/feedback/tooltip.tsx +0 -171
  558. package/docs/feedback/two-factor-setup.tsx +0 -68
  559. package/docs/foundation/_email-specimen.ts +0 -274
  560. package/docs/foundation/_theme-editor-scope.ts +0 -222
  561. package/docs/foundation/colors.tsx +0 -207
  562. package/docs/foundation/density.tsx +0 -242
  563. package/docs/foundation/email-tokens.tsx +0 -323
  564. package/docs/foundation/radius-shadow.tsx +0 -154
  565. package/docs/foundation/spacing.tsx +0 -216
  566. package/docs/foundation/theme-editor.tsx +0 -654
  567. package/docs/foundation/typography.tsx +0 -147
  568. package/docs/general/actions.tsx +0 -175
  569. package/docs/general/activity.tsx +0 -289
  570. package/docs/general/button/examples/destructive-confirm.tsx +0 -90
  571. package/docs/general/button/examples/form-actions.tsx +0 -87
  572. package/docs/general/button/examples/toolbar.tsx +0 -160
  573. package/docs/general/button/index.md +0 -16
  574. package/docs/general/button/index.tsx +0 -236
  575. package/docs/general/float-button.tsx +0 -133
  576. package/docs/general/icon.tsx +0 -217
  577. package/docs/general/logo.tsx +0 -194
  578. package/docs/general/reveal.tsx +0 -309
  579. package/docs/general/typography.tsx +0 -542
  580. package/docs/i18n/messages/en.json +0 -1715
  581. package/docs/i18n/messages/ja.json +0 -1708
  582. package/docs/i18n/messages/vi.json +0 -1708
  583. package/docs/layout/account-chip.tsx +0 -72
  584. package/docs/layout/admin-collection.tsx +0 -122
  585. package/docs/layout/affix.tsx +0 -209
  586. package/docs/layout/app-launcher.tsx +0 -211
  587. package/docs/layout/app-shell-arrangements.tsx +0 -225
  588. package/docs/layout/app-shell-narrow-bar.tsx +0 -205
  589. package/docs/layout/app-shell-states.tsx +0 -171
  590. package/docs/layout/app-shell.tsx +0 -395
  591. package/docs/layout/aspect-ratio.tsx +0 -135
  592. package/docs/layout/auth-account-summary.tsx +0 -103
  593. package/docs/layout/auth-divider.tsx +0 -28
  594. package/docs/layout/auth-footer.tsx +0 -37
  595. package/docs/layout/auth-identity.tsx +0 -70
  596. package/docs/layout/auth-recovery/examples/mfa-challenge.md +0 -41
  597. package/docs/layout/auth-recovery/examples/mfa-challenge.tsx +0 -254
  598. package/docs/layout/auth-recovery/examples/mobile-390.md +0 -25
  599. package/docs/layout/auth-recovery/examples/mobile-390.tsx +0 -82
  600. package/docs/layout/auth-recovery/examples/password-recovery.md +0 -24
  601. package/docs/layout/auth-recovery/examples/password-recovery.tsx +0 -197
  602. package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.md +0 -27
  603. package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.tsx +0 -156
  604. package/docs/layout/auth-recovery/index.md +0 -140
  605. package/docs/layout/auth-recovery/index.tsx +0 -96
  606. package/docs/layout/auth-shell-context.tsx +0 -103
  607. package/docs/layout/auth-shell-device.tsx +0 -112
  608. package/docs/layout/auth-shell-registration.tsx +0 -338
  609. package/docs/layout/auth-shell-variants.tsx +0 -143
  610. package/docs/layout/auth-shell.tsx +0 -59
  611. package/docs/layout/auth-stack.tsx +0 -40
  612. package/docs/layout/centered-shell.tsx +0 -102
  613. package/docs/layout/draggable-panel.tsx +0 -127
  614. package/docs/layout/error-surface/examples/application-403.tsx +0 -84
  615. package/docs/layout/error-surface/examples/application-404.tsx +0 -77
  616. package/docs/layout/error-surface/examples/system-500.tsx +0 -47
  617. package/docs/layout/error-surface/examples/system-503.tsx +0 -48
  618. package/docs/layout/error-surface/index.md +0 -153
  619. package/docs/layout/error-surface/index.tsx +0 -239
  620. package/docs/layout/flex.tsx +0 -444
  621. package/docs/layout/legal-document-shell/_data.ts +0 -110
  622. package/docs/layout/legal-document-shell/examples/desktop-1440.md +0 -12
  623. package/docs/layout/legal-document-shell/examples/desktop-1440.tsx +0 -83
  624. package/docs/layout/legal-document-shell/examples/mobile-390.md +0 -22
  625. package/docs/layout/legal-document-shell/examples/mobile-390.tsx +0 -70
  626. package/docs/layout/legal-document-shell/examples/tablet-1024.md +0 -3
  627. package/docs/layout/legal-document-shell/examples/tablet-1024.tsx +0 -84
  628. package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.md +0 -18
  629. package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.tsx +0 -61
  630. package/docs/layout/legal-document-shell/index.md +0 -51
  631. package/docs/layout/legal-document-shell/index.tsx +0 -101
  632. package/docs/layout/masonry.tsx +0 -291
  633. package/docs/layout/master-detail.tsx +0 -390
  634. package/docs/layout/mobile-shell.tsx +0 -106
  635. package/docs/layout/nav-list.tsx +0 -584
  636. package/docs/layout/org-switcher.tsx +0 -131
  637. package/docs/layout/page-container.tsx +0 -1020
  638. package/docs/layout/page-cover.tsx +0 -56
  639. package/docs/layout/resizable-panel.tsx +0 -419
  640. package/docs/layout/responsive-grid.tsx +0 -403
  641. package/docs/layout/separator.tsx +0 -327
  642. package/docs/layout/service-role-panel.tsx +0 -144
  643. package/docs/layout/sidebar.tsx +0 -689
  644. package/docs/layout/space-compact.tsx +0 -202
  645. package/docs/layout/split-pane.tsx +0 -532
  646. package/docs/layout/topbar-item.tsx +0 -233
  647. package/docs/layout/topbar.tsx +0 -360
  648. package/docs/navigation/anchor.tsx +0 -295
  649. package/docs/navigation/app-setting-picker.tsx +0 -178
  650. package/docs/navigation/app-setting-toggle.tsx +0 -111
  651. package/docs/navigation/breadcrumb.tsx +0 -207
  652. package/docs/navigation/card-tabs.tsx +0 -344
  653. package/docs/navigation/conversations.tsx +0 -176
  654. package/docs/navigation/dropdown-menu.tsx +0 -345
  655. package/docs/navigation/filter-bar.tsx +0 -247
  656. package/docs/navigation/mega-menu-panel.tsx +0 -86
  657. package/docs/navigation/mega-menu.tsx +0 -254
  658. package/docs/navigation/pagination.tsx +0 -293
  659. package/docs/navigation/steps.tsx +0 -315
  660. package/docs/navigation/tabs-rtl.tsx +0 -28
  661. package/docs/navigation/tabs.tsx +0 -755
  662. package/docs/navigation/toolbar.tsx +0 -347
  663. package/docs/providers/app-provider.tsx +0 -191
  664. package/docs/providers/format-date.tsx +0 -230
  665. package/docs/providers/theme-scope.tsx +0 -186
  666. package/docs/query/button-refetch.tsx +0 -161
  667. package/docs/query/data-state.tsx +0 -262
  668. package/docs/query/infinite-query-state.tsx +0 -97
  669. package/docs/query/mutation-feedback.tsx +0 -128
  670. package/docs/query/touch-actions.tsx +0 -68
  671. package/docs/react-router/prefetch-link.tsx +0 -262
  672. package/docs/roadmap/ai-chat-components.md +0 -206
  673. package/docs/roadmap/antd-parity.md +0 -155
  674. package/docs/roadmap/badge-tag-chip-count.md +0 -172
  675. package/docs/roadmap/list-masonry.md +0 -159
  676. package/docs/roadmap/parity-audit-data-display-feedback.md +0 -567
  677. package/docs/roadmap/parity-audit-data-entry.md +0 -368
  678. package/docs/roadmap/parity-audit-layout-navigation-general.md +0 -459
  679. package/docs/roadmap/parity-backlog.md +0 -77
  680. package/docs/roadmap/tree-components.md +0 -151
  681. package/docs/roadmap/website-components.md +0 -813
  682. package/docs/showcase/acme-portal.tsx +0 -461
  683. package/docs/showcase/acme-website.tsx +0 -499
  684. package/docs/showcase/caimono-price-comparison.tsx +0 -919
  685. package/docs/showcase/case1-warehouse-dashboard.tsx +0 -358
  686. package/docs/showcase/case2-employee-me.tsx +0 -438
  687. package/docs/showcase/case3-approval-workflow.tsx +0 -531
  688. package/docs/showcase/case4-login.tsx +0 -312
  689. package/docs/showcase/case5-shift-calendar.tsx +0 -702
  690. package/docs/showcase/case6-agency-handy.tsx +0 -1120
  691. package/docs/showcase/futurelastic-web.tsx +0 -441
  692. package/docs/showcase/marketing-page.tsx +0 -895
  693. package/docs/showcase/org-switcher.tsx +0 -320
  694. package/docs/showcase/permission-matrix.tsx +0 -354
  695. package/docs/showcase/public-landing.tsx +0 -210
  696. package/docs/showcase/settings-account-sections.tsx +0 -559
  697. package/docs/showcase/settings-security-mfa.tsx +0 -145
  698. package/docs/showcase/table-approval-queue.tsx +0 -199
  699. package/docs/showcase/table-bulk-actions.tsx +0 -468
  700. package/docs/showcase/table-compact-kintone.tsx +0 -438
  701. package/docs/showcase/table-conditional-format.tsx +0 -367
  702. package/docs/showcase/table-crud-list.tsx +0 -544
  703. package/docs/showcase/table-density.tsx +0 -349
  704. package/docs/showcase/table-expandable-rows.tsx +0 -496
  705. package/docs/showcase/table-filter-chips.tsx +0 -468
  706. package/docs/showcase/table-footer-totals.tsx +0 -328
  707. package/docs/showcase/table-grouped-subtotals.tsx +0 -398
  708. package/docs/showcase/table-master-detail.tsx +0 -482
  709. package/docs/showcase/table-pagination.tsx +0 -409
  710. package/docs/showcase/table-states.tsx +0 -371
  711. package/docs/showcase/table-sticky-columns.tsx +0 -377
  712. package/docs/showcase/table-tree-rows.tsx +0 -451
  713. package/docs/showcase/table-view-tabs.tsx +0 -488
  714. package/docs/showcase/tcgm-website.tsx +0 -1047
  715. package/docs/showcase/tenant-brand-color.tsx +0 -338
  716. package/docs/showcase/theme-customization.tsx +0 -1292
  717. package/docs/showcase/theme-lab.tsx +0 -2125
  718. package/docs/themes/flat.css +0 -466
  719. package/docs/themes/glassmorphism.css +0 -960
  720. package/docs/themes/index.ts +0 -219
  721. package/docs/themes/neubrutalism.css +0 -481
  722. /package/dist/components/navigation/{filter-bar.d.ts → toolbar.d.ts} +0 -0
  723. /package/dist/components/navigation/{filter-bar.js → toolbar.js} +0 -0
  724. /package/dist/{components/data-display → lab}/carousel.d.ts +0 -0
  725. /package/dist/{components/data-entry → lab}/emoji-data.d.ts +0 -0
  726. /package/dist/{components/data-entry → lab}/emoji-data.js +0 -0
  727. /package/dist/{components/data-display → lab}/marquee-reveal.d.ts +0 -0
  728. /package/dist/{components/data-display → lab}/marquee-reveal.js +0 -0
@@ -1,368 +0,0 @@
1
- # Ant Design parity — `data-entry` group
2
-
3
- > Audit pass, read-only, 2026-09-10. Method and ledger format: `antd-parity.md` §0 / §2.
4
- > **Cập nhật 11/09/2026 — `Select` (§2.1).** Chủ dự án yêu cầu Select bám sát Ant Design 6, nên
5
- > nhiều dòng `WONT-PORT` / `COVERED-ELSEWHERE` bên dưới ĐÃ BỊ ĐẢO và nay là `PRESENT`. Lý do cũ
6
- > không sai về kỹ thuật; nó chỉ không còn là quyết định hiện hành. Hai dòng KHÔNG đảo, và vì sao:
7
- > `variant: "underlined"` (docs/DESIGN-AUTHORITY.md nêu đích danh: SmartHR vẽ ô kín — đó là quyết
8
- > định của design authority, không phải của bản kiểm này) và `virtual` (vẫn thiếu — xem dòng của nó).
9
- >
10
- > Skipped by instruction: `TreeSelect`, `Segmented`, `TagInput` chip rendering, everything chat-shaped
11
- > (`ChatComposer`, `ChatSuggestion`). 45 catalog entries carry `group: "data-entry"`.
12
-
13
- ## 1. Summary
14
-
15
- **This group is the most Ant-aligned part of the library, by a wide margin.** The prop types cite antd
16
- by name throughout (`src/props/components/data-entry.prop.ts` — `status`, `variant`, `allowClear`,
17
- `count`, `maxTagCount`, `maxTagPlaceholder`, `notFoundContent`, `popupMatchSelectWidth`,
18
- `autoClearSearchValue`, `filterSort`, `optionRender`, `menuItemSelectedIcon`, `loadData`,
19
- `showCheckedStrategy`, `hideDisabledOptions`, `showNow`, `needConfirm`, `disabledTime`,
20
- `preserveInvalidOnBlur`, `itemRender`, `beforeUpload`, `showSelectAll`, `oneWay`, `changeOnWheel`,
21
- `keyboard`, `formatter`/`parser`, `precision`, `checkedChildren`, `indeterminate`, `optionType`,
22
- `buttonStyle`, `marks`/`dots`/`included`/`reverse`/`tooltip`, `visibilityToggle`, `iconRender`,
23
- `mask`, `tokenSeparators`, `tagRender` …). The Form family goes further than antd in one direction
24
- (a server error-bag with per-field claiming, `FormErrors`, `FormErrorsProvider`) and matches it in the
25
- other (`FormRoot` + `useZodForm` + `FormFieldControl` + `FormFieldArray` cover `Form`/`rules`/
26
- `Form.List`/`dependencies`/`normalize`/`getValueFromEvent`/`preserve`/`validateStatus`/`hasFeedback`/
27
- `scrollToFirstError`/`onFinish`/`onFinishFailed`). **I propose zero new components** — every gap below
28
- closes by extending something that already exists.
29
-
30
- The five that matter, in order:
31
-
32
- 1. **`NumberInput` corrupts values by 10× in every locale whose decimal separator is `,`** — including
33
- the shipped `vi` locale. `Intl.NumberFormat` formats at rest, but the parser strips every comma as
34
- a thousands separator. Measured, not inferred (§2.3). **P0, and an i18n defect, not a parity one.**
35
- 2. **`PasswordStrength` is hardcoded English end-to-end** — no `t()` anywhere in the file, including
36
- the `aria-label` and the live region. **P0 i18n/a11y.**
37
- 3. **No option-list virtualization anywhere in `src/`** (`grep -rl 'virtual\|useVirtualizer\|react-window\|@tanstack/react-virtual' src/` → nothing).
38
- antd `Select virtual` is on by default; a 5 000-row `Select`/`Cascader` here renders 5 000 DOM
39
- nodes. Same root cause as the missing `List` in `list-masonry.md`. **P1.**
40
- 4. ~~**`Slider` never exposes a formatted value to assistive tech.**~~ CLOSED — `tooltip.formatter`
41
- is now also the thumb's `aria-valuetext` (`slider.tsx`, `slider-antd.test.tsx`), landed with the
42
- move to react-aria-components.
43
- 5. **`ColorPicker` is a native `<input type="color">` + hex box** and is the one control in the group
44
- with no `size`/`status`/`variant`/`allowClear`/`readOnly`, and no `presets`. It cannot express a
45
- brand palette, which is the ordinary enterprise use. **P1.**
46
-
47
- ### Checked and fully aligned — no non-`PRESENT` rows worth a table
48
-
49
- `Input` · `Textarea` · `PasswordInput` · `InputOTP` · `Switch` · `Checkbox` · `Radio` · `Field` ·
50
- `Form` / `FormField` / `FormErrors` / `FormRoot` / `FormFieldControl` / `FormFieldArray` /
51
- `useZodForm` · `Toggle` / `ToggleGroup` (they _are_ the coverage for antd `CheckableTag`) ·
52
- `TimeRangePicker` · `UploadCropDialog` (antd has no counterpart — it documents `antd-img-crop` as a
53
- third-party add-on).
54
-
55
- `MonthPicker` / `MonthRangePicker` used to be listed here as "fully aligned". They were not: each
56
- was a hand copy of `DatePicker` / `DateRangePicker` carrying four contracts the original had right —
57
- a `disabled` picker that still opened, bounds that greyed a chevron and clamped nothing, an
58
- unhandled Enter, and a non-ISO `name`. Reading them against ANT found nothing, because their
59
- divergence was from the component beside them. They were merged into `DatePicker` in 22.0.0
60
- (`picker="month"` / `range picker="month"`).
61
-
62
- `Command` / `CommandPalette` / `BranchScopePicker` have **no Ant Design counterpart at all**
63
- (namethatui: "command palette / command menu"); there is nothing to diff. `AutoComplete` is
64
- `Select showSearch`, `CheckableTag` is `Toggle`, `Mentions` is chat-family — all
65
- `COVERED-ELSEWHERE`, none re-audited here.
66
-
67
- ---
68
-
69
- ## 2. Ledgers
70
-
71
- ### 2.1 `Select` — `SearchSelectBaseProp` / `SearchSelectSingleProp` / `SearchSelectMultipleProp`
72
-
73
- `src/props/components/data-entry.prop.ts:941-1142`, `src/components/data-entry/search-select.tsx`.
74
-
75
- | Ant Design prop / behaviour | Status | Evidence | Verdict |
76
- | ------------------------------------------------------------------------------ | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
77
- | `virtual` — virtualized option list (default ON in antd) | `MISSING` | `grep -rl "virtual\|useVirtualizer\|react-window\|@tanstack/react-virtual" src/` → no files | Add `virtual?: boolean` + a windowed list. Shared work with `List` (`list-masonry.md`) — do it once. |
78
- | `fieldNames` — map `{label,value,options}` onto foreign row shapes | `PRESENT` | `SelectFieldNamesProp`; `src/lib/select-options.ts` normalises rows, groups and foreign keys into one list for both branches | Done. Rows in a foreign shape need a cast at the call site, exactly as Cascader's and TreeSelect's do. |
79
- | `labelInValue` — report `{value,label}` instead of a bare value | `PRESENT` | `SelectLabeledValueProp`; the adapter in `select.tsx` translates it in and out | Done. The earlier "no second dialect" ruling is REVERSED: the option riding the callback does not help the async EDIT form, which holds `{value,label}` and no option list yet. Labels that arrive on the value join the option list so the trigger can show them. |
80
- | `optionFilterProp` | `PRESENT` | `SearchSelectBaseProp.optionFilterProp` + `showSearch.optionFilterProp` | Done. The function form is still more expressive, but naming one field is the two-word answer to the common case. `optionLabelProp` stays COVERED-ELSEWHERE (`labelRender`). |
81
- | `maxTagTextLength` — truncate each chip's text | `PRESENT` | `chipLabel()` in `search-select.tsx`; test `select-antd-tags.test.tsx` | Done. Cuts what the TRIGGER shows; the value keeps its whole label. |
82
- | `listHeight` — popup max height in px | `PRESENT` | writes `--select-content-max-height` / `--search-select-list-max-height` inline | Done, and it does NOT break rule #44: the height stays a token, and `listHeight` overrides that token for one instance — the same shape `popupMatchSelectWidth`'s number already had. |
83
- | `placement` (`bottomLeft`…) | `PRESENT` | `SelectPlacementProp` — `bottomStart` / `bottomEnd` / `topStart` / `topEnd` | Done, spelled LOGICALLY (the DESIGN-AUTHORITY override antd's physical names get everywhere else). Auto-placement with collision flipping is still the default. |
84
- | `suffixIcon` / `prefix` | `PRESENT` | both branches; `suffixIcon={null}` removes the indicator (antd's own replacement for `showArrow`) | Done. `removeIcon` / `loadingIcon` stay WONT-PORT: `allowClear`'s object form already carries an icon, and the spinner is a token. |
85
- | `getPopupContainer` / `styles` / `classNames` / `popupClassName` | `WONT-PORT` | ground rule #4 | Inline-style twins and portal escape hatches. |
86
- | `tagRender` in `mode="multiple"` | `WONT-PORT` | `:1096-1104` states the reason verbatim (button-in-button) | Documented refusal; `TagInput` owns `tagRender` where chips are legal. |
87
- | `onPopupScroll` | `PRESENT` | fires BESIDE the built-in infinite scroll, never instead of it | Done. The built-in pagination and `renderLoadMore` remain the reason most call sites need neither. |
88
- | `defaultActiveFirstOption` | `MISSING` | `grep -n defaultActiveFirstOption src/` → nothing | P2. Add as `defaultActiveFirstOption?: boolean`; a search box that pre-highlights row 1 makes Enter a one-key pick. |
89
- | `onInputKeyDown` | `MISSING` | grep → nothing | P2. Real for "Enter creates a new record" flows. |
90
- | `maxTagCount: "responsive"` | `WONT-PORT` | `src/props/vocabulary/shared.prop.ts:109-113` documents the refusal | Container queries instead. Already recorded. |
91
- | `variant: "underlined"` | `WONT-PORT` | `src/props/vocabulary/interaction.prop.ts:126-130` documents the refusal | SmartHR draws full boxes. Already recorded. |
92
- | `onSelect` / `onDeselect` / `maxTagPlaceholder` **exist but are undocumented** | `MISSING` (catalog) | props at `:1093`, `:1112-1114`, `:1124`; `sed -n '5560,5990p' mcp/src/data/components.ts \| grep -n "onSelect\|onDeselect\|maxTagPlaceholder"` → **no match** | Catalog drift: three shipped props the MCP never tells a consumer about. Add three catalog rows (`godxjp-ui-mcp-catalog-sync`). |
93
-
94
- ### 2.2 `Cascader` — `CascaderProp` `src/props/components/data-entry.prop.ts:1253-1330`
95
-
96
- | Ant Design prop / behaviour | Status | Evidence | Verdict |
97
- | ------------------------------------------------------------------------------------------------------- | ------------------- | ----------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
98
- | `showSearch` **object form** — `{filter, sort, limit, render, matchInputWidth}` | `MISSING` | `showSearch?: boolean` only, `:1263`; search runs `filterTreeOptions(options, search)` uncapped, `cascader.tsx:389-393` | Add `filterOption` + `filterSort` + a result cap, spelled as Select already spells them (`:1012`, `:1017`) — **not** a nested antd-shaped `showSearch` object. antd's own `limit` default is 50; here a 5 000-leaf tree renders every match. |
99
- | `expandIcon` | `WONT-PORT` | no grep hit | Token (`--cascader-expand-*`), rule #44. |
100
- | `Cascader.Panel` — the picker without its trigger | `MISSING` | grep `CascaderPanel` → nothing | P2. Real for a "browse the catalogue" page. Extend `Cascader`, do not add a component. |
101
- | `maxTagTextLength` | `WONT-PORT` | same reasoning as Select | |
102
- | `suffixIcon` / `removeIcon` / `prefix` / `loadingIcon` / `popupRender` / `getPopupContainer` / `styles` | `WONT-PORT` | ground rule #4 | |
103
- | `placement` | `COVERED-ELSEWHERE` | Radix `PopoverContent align="start"`, `cascader.tsx:555` | |
104
- | `tagRender` | `WONT-PORT` | button-in-button, same as Select | |
105
- | `virtual` | `MISSING` | no virtualization in `src/` | Same P1 row as Select. |
106
-
107
- ### 2.3 `NumberInput` — `NumberInputProp` `:228-282` · `src/components/data-entry/number-input.tsx`
108
-
109
- | Ant Design prop / behaviour | Status | Evidence | Verdict |
110
- | ---------------------------------------------------------------------------------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
111
- | **locale round-trip** (antd `decimalSeparator` exists precisely for this) | `MISSING` — **defect** | Formats with `new Intl.NumberFormat(locale, …)` `number-input.tsx:100`; parses with `raw.normalize("NFKC").replace(/,/g, "")` `:41`; `handleBlur` re-parses the displayed draft `:220`. Measured: `Intl.NumberFormat("vi",{useGrouping:false}).format(1.5)` → `"1,5"`; `Number("1,5".normalize("NFKC").replace(/,/g,""))` → **`15`**. | **P0.** Derive the locale's decimal + group separators from `Intl.NumberFormat(locale).formatToParts()` and normalise against _those_, instead of hardcoding `,` = thousands. Keep the NFKC 全角 fold — it is correct and load-bearing for `ja`. A regression test per shipped locale (`en`, `ja`, `vi`) is the acceptance. |
112
- | `stringMode` — string in/out for values past `Number.MAX_SAFE_INTEGER` or exact decimals | `MISSING` | grep `stringMode` → nothing; value type is `number \| null` `:180-182` | P1. Money and 13-digit ids are the ordinary enterprise case; `roundTo` `:45-49` mitigates FP drift but cannot fix range. Add as an opt-in that widens the triad to `string`. |
113
- | `onStep` — fired on stepper / arrow / wheel with the direction | `MISSING` | grep `onStep` → nothing | P2. Add `onStep?: (value, info: { offset, type: "up" \| "down" }) => void`. |
114
- | `addonBefore` / `addonAfter` | `WONT-PORT` | deprecated in antd itself (use `Space.Compact`) | `prefix`/`suffix` present `:215-217`. |
115
- | `onPressEnter` | `COVERED-ELSEWHERE` | commit-on-Enter is already the behaviour, `:237` | |
116
- | `decimalSeparator` as an explicit prop | `WONT-PORT` | should follow the locale, not a prop | Fixing the round-trip above removes the need. |
117
-
118
- ### 2.4 `Slider` — `SliderProp` · `src/components/data-entry/slider.tsx`
119
-
120
- CLOSED. `Slider` moved to `react-aria-components` and took the antd 6 API with it, so every row
121
- this table used to hold is now either `PRESENT` or a recorded non-port:
122
-
123
- | Ant Design prop / behaviour | Status |
124
- | ------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------- |
125
- | `aria-valuetext` mirroring `tooltip.formatter` | `PRESENT` — a string/number `formatter` result is written onto the thumb's input |
126
- | `value`/`defaultValue`/`onChange`/`onChangeComplete` as antd spells them | `PRESENT` — the Radix-era `number[]` + `onValueChange`/`onValueCommit` spelling still compiles |
127
- | `step={null}`, `marks` object form, `dots`, `included`, `vertical` | `PRESENT` |
128
- | `range: { editable, minCount, maxCount, draggableTrack }` | `PRESENT` |
129
- | `disabled` as `boolean[]` | `PRESENT` |
130
- | `tooltip.placement` / `autoAdjustOverflow` | `PRESENT` — logical sides, flip measured against the thumb's rect |
131
- | `tooltip.getPopupContainer` | `WONT-PORT` — the bubble lives inside the thumb; nothing is portalled, so there is no container to choose |
132
- | `keyboard: false` | `WONT-PORT` — removing keyboard operation from a `role="slider"` fails WCAG 2.1.1 |
133
- | `classNames` / `styles` semantic slots | `WONT-PORT` — docs/WHAT-BELONGS-HERE.md, "lỗ kiểu dáng tự do" |
134
- | default tooltip text is not `Intl`-formatted | `MISSING` — P2, unchanged: pass `tooltip.formatter` for ¥/%/件 |
135
-
136
- ### 2.5 `ColorPicker` — `ColorPickerProp` `:893-908` · `src/components/data-entry/color-picker.tsx` (114 lines)
137
-
138
- | Ant Design prop / behaviour | Status | Evidence | Verdict |
139
- | --------------------------------------------------------------------- | ----------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
140
- | `presets` — named swatch groups | `MISSING` | whole file read; only `<input type="color">` `color-picker.tsx:84-93` + a hex `Input` `:96-108` | **P1.** A tenant/brand palette is the ordinary case; today the consumer hand-rolls a swatch row of `Button`s beside it. |
141
- | `size` / `status` / `variant` | `MISSING` | prop type `:893-908` has none of the three; every other control in the group carries all three | **P1 (consistency).** A `ColorPicker` cannot line up with the `Input` next to it in a form row, and cannot paint a validation error. |
142
- | `allowClear` + `onClear` | `MISSING` | `AllowClearProp` not imported into `ColorPickerProp` `:893` | P2. The value can legitimately be `""` `:46` but nothing clears it back. |
143
- | `readOnly` | `MISSING` | `disabled` only `:902` | P2. `Select`/`Cascader`/`TagInput`/`Transfer` all state a `readOnly` contract; this one does not. |
144
- | `format` / `defaultFormat` / `onFormatChange` (rgb/hex/hsb) | `MISSING` | `HEX_PATTERN` `:14` is the only accepted shape | P2. |
145
- | `disabledAlpha` / alpha channel | `WONT-PORT` | `<input type="color">` has no alpha | Would require replacing the native panel. Not worth it unless `presets` forces a custom panel anyway — decide the two together. |
146
- | `mode: "gradient"` | `WONT-PORT` | — | A gradient editor is a different control. |
147
- | `showText` | `MISSING` | `showHexInput` `:38` shows an _editable_ hex box, not a read-only label | P2 — `showHexInput` is the house spelling and covers the intent; record as `RENAMED` if the read-only variant is not wanted. |
148
- | `panelRender` / `trigger` / `arrow` / `placement` / `destroyOnHidden` | `WONT-PORT` | native panel; ground rule #4 | |
149
-
150
- ### 2.6 `DatePicker` (one control: `picker` × `range`/`multiple`) — `data-entry.prop.ts` `DatePickerBaseProp` / `DatePickerProp` (+ `PickerChromeProp`)
151
-
152
- As of 22.0.0 this is ONE component. antd ships one `DatePicker` with `picker` plus a
153
- `DatePicker.RangePicker`; this library had drifted to four (`DatePicker`, `DateRangePicker`,
154
- `MonthPicker`, `MonthRangePicker`), three of them hand copies of the first. `picker` is the
155
- granularity axis and `range` the cardinality axis, so the eight combinations are one implementation.
156
-
157
- Present and correct: `format` (string | `Intl.DateTimeFormatOptions` incl. Japanese era | fn),
158
- `parseFormat`, `minDate`/`maxDate`, `showWeek`, `needConfirm`, `picker`, `range`, `order`,
159
- `showTime`, `presets`, `disabledDate`, `cellRender`, `allowClear`, `allowEmpty`,
160
- `showNow`/`showToday`, `inputReadOnly`, `preserveInvalidOnBlur`, `renderExtraFooter`, `placement`
161
- (logical `bottom-start`…), `open`/`defaultOpen`/`onOpenChange`, `multiple`, ISO native submission
162
- at the granularity `picker` selects.
163
-
164
- | Ant Design prop / behaviour | Status | Evidence | Verdict |
165
- | --------------------------------------------------------------------------------------------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
166
- | `mode` + `onPanelChange` — controlled panel level (date→month→year) | `MISSING` | `grep -rn "onPanelChange" src/` → nothing; `picker` selects the _value granularity_, not the panel level | P2. Distinct from `picker`; needed only for a picker that drives an external month/year state. |
167
- | `defaultPickerValue` / `pickerValue` / `onPickerValueChange` — which month the panel opens on | `MISSING` | grep → nothing | **P1.** "Open on the fiscal-year start", "open on the month of the row being edited" has no expression today; the panel always opens on the value or today. |
168
- | `onOk` — the confirm click | `MISSING` | grep `onOk` in `src/components/data-entry/` → nothing, although `needConfirm` renders the button | P2. `onValueChange` already fires on confirm; `onOk` is a convenience. |
169
- | `separator` (RangePicker) | `MISSING` | hardcoded `<ArrowRight … />` in the range shell of `date-picker.tsx` | P2. RTL is handled (logical icon flip), so this is cosmetic — a token would do. |
170
- | `disabled: [boolean, boolean]` — lock one end of a range | `MISSING` | `disabled?: DisabledProp` (scalar) on `DatePickerBaseProp` | **P1.** "The start date is fixed by the contract, only the end is editable" is a real screen and has no expression. |
171
- | `onCalendarChange` — fires on each end of the range | `MISSING` | grep → nothing | P2. Needed to compute a live duration while the range is half-picked. |
172
- | `panelRender` / `prevIcon` / `nextIcon` / `superPrevIcon` / `superNextIcon` / `suffixIcon` / `components` | `WONT-PORT` | grep → nothing; ground rule #4 | Tokens, not props. |
173
- | `getPopupContainer` / `styles` / `classNames` / `popupClassName` | `WONT-PORT` | ground rule #4 | |
174
- | `maxTagCount` for `multiple` | `MISSING` | the `multiple` arm has no collapse knob, unlike `Select`/`Cascader`/`TreeSelect` which all take `MaxTagCountProp` | P2 — reuse `MaxTagCountProp` (`shared.prop.ts:113`), do not invent a spelling. |
175
- | `dateRender` | `RENAMED` | `cellRender` (antd renamed it too) | No work. |
176
-
177
- ### 2.7 `TimePicker` — `TimePickerProp` `:822-877`
178
-
179
- Present: `hourStep`/`minuteStep`/`secondStep`, `showSeconds`, `use12Hours`, `format`, `disabledTime`,
180
- `hideDisabledOptions`, `showNow`, `needConfirm`, `changeOnScroll`, `inputReadOnly`, `allowClear`,
181
- `renderExtraFooter`, canonical 24-h storage.
182
-
183
- | Ant Design prop / behaviour | Status | Evidence | Verdict |
184
- | ----------------------------------------------------- | ------------------------------------- | --------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
185
- | `cellRender` | `MISSING` | `grep -n cellRender src/components/data-entry/time-picker.tsx` → nothing | P2. Marking "already booked" times is the same need `Calendar cellRender` already serves. |
186
- | `onSelect` — fires per column pick, before commit | `MISSING` | grep → nothing | P2. |
187
- | `needConfirm` default | `PRESENT` — **deliberate divergence** | `:864-871` states it: antd defaults `true`, this library `false`, with the reason | No work; already documented. Keep. |
188
- | `suffixIcon` / `popupClassName` / `getPopupContainer` | `WONT-PORT` | ground rule #4 | |
189
-
190
- ### 2.8 `Calendar` — `CalendarProp` `:585-619`
191
-
192
- | Ant Design prop / behaviour | Status | Evidence | Verdict |
193
- | --------------------------------------------------------------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
194
- | `mode: "month" \| "year"` + `onPanelChange` — the 12-month year board | `MISSING` | `grep -rn "onPanelChange\|fullCellRender" src/` → nothing; `CalendarProp` is `DayPickerProps` + footer + `width`/`bordered`/`cellRender` | P2. `<DatePicker picker="month">` covers _picking_ a month; it does not cover a year board a consumer can decorate. |
195
- | `headerRender` | `COVERED-ELSEWHERE` | `CalendarProp extends DayPickerProps` `:585` → react-day-picker `captionLayout="dropdown" \| "dropdown-months" \| "dropdown-years"` + `startMonth`/`endMonth` (used at `calendar.tsx:60-61`) | Add a `related`/usage note; no code. |
196
- | `validRange` | `COVERED-ELSEWHERE` | DayPicker `startMonth`/`endMonth` + `disabled`, `calendar.tsx:60-61` | |
197
- | `fullscreen` | `RENAMED` | `width="full"` + `bordered` `:604,616`, with the measured rationale for the split | No work. |
198
- | `fullCellRender` — replace the whole cell | `WONT-PORT` | `CalendarCellRenderProp` `:571-583` states the refusal: `cellRender` **wraps** `originNode` so selection state, `aria-selected`, disabled handling and the roving tabindex survive | Correct call. Record it in the catalog so nobody re-adds it. |
199
- | `showWeek` | `COVERED-ELSEWHERE` | DayPicker `showWeekNumber` | |
200
-
201
- ### 2.9 `Upload` — `UploadProp` `:1152-1234`
202
-
203
- Present and unusually complete: `action`/`method`/`headers`/`data`/`withCredentials`,
204
- `beforeUpload` (incl. `UPLOAD_LIST_IGNORE`), `directory`, `pastable`, `openFileDialogOnClick`,
205
- `maxCount`/`maxSizeBytes`, `itemRender`, `previewFile`, `onPreview`/`onDownload`/`onRemove`/`onDrop`,
206
- per-item progress + cancel (`upload.tsx:234-289`, `upload-request.ts:16-54`).
207
-
208
- | Ant Design prop / behaviour | Status | Evidence | Verdict |
209
- | ----------------------------------------------------------------------------------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
210
- | `customRequest` | `RENAMED` | `onUpload(file, item, context)` `:1206-1210` with an abort signal + `onProgress` `upload-types.ts:87,106` — strictly richer than antd's | No work; record both names. |
211
- | `listType` | `RENAMED` | `variant` `:1148-1149` (`dropzone`/`button`/`picture-card`/`picture`/`avatar`/`avatar-crop`) | No work. |
212
- | `fileList` / `defaultFileList` / `onChange` | `RENAMED` | the controlled triad `:1154-1156` | No work. |
213
- | `showUploadList` **object form** — `{showPreviewIcon, showRemoveIcon, showDownloadIcon, extra}` | `MISSING` | `showUploadList?: boolean` `:1196`, consumed as a boolean at `upload.tsx:461,644` | **P1.** "Files can be previewed but not removed" is a permissions case; today the only escape is `itemRender`, which hands the consumer the whole row and its a11y with it. Widen to `boolean \| { … }`. |
214
- | `iconRender` — per-status file icon | `MISSING` | `grep -n iconRender src/components/data-entry/upload.tsx` → nothing (only `PasswordInput` has one) | P2 — or `WONT-PORT` in favour of tokens; decide with the row above. |
215
- | `isImageUrl` — decide whether a thumbnail is an `<img>` | `MISSING` | grep → nothing; `createUploadItem` infers from `file.type` `upload-types.ts:43` | P2. Bites a `value` restored from the server with a `url` but no `mimeType`. |
216
- | `progress` — antd's Progress config | `WONT-PORT` | renders this library's own `Progress` `upload.tsx:866,979` | Token, rule #44. |
217
- | `capture` — mobile camera | `MISSING` | grep `capture` → nothing on the `<input type="file">` | P2. |
218
- | `styles` / `classNames` | `WONT-PORT` | ground rule #4 | |
219
-
220
- ### 2.10 `Transfer` — `TransferProp` `:1413-1459`
221
-
222
- Present: `dataSource`, `targetKeys`/`defaultTargetKeys` + the `value`/`defaultValue` triad, `titles`,
223
- `showSearch`, `render`, `filterOption`, `showSelectAll`, `oneWay`, `pagination`, `selectedKeys` +
224
- `onSelectChange`, `readOnly`, `name`.
225
-
226
- | Ant Design prop / behaviour | Status | Evidence | Verdict |
227
- | ------------------------------------------------ | ------------------- | ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
228
- | `status` | `MISSING` | no `status` in `:1413-1459`; every other data-entry control takes `ControlStatusProp` (`interaction.prop.ts:117`) | **P1.** A required Transfer inside a `FormField` cannot paint its own validation error. |
229
- | `rowKey` | `MISSING` | `TransferItemProp` requires a literal `key` `:1405-1410` | P2. The house spelling is `getRowId` (`GetRowIdProp`, `PROPS-VOCABULARY.md` · Data collections) — reuse it, do not add `rowKey`. |
230
- | `footer` | `MISSING` | grep → nothing | P2. |
231
- | `operations` / `actions` — relabel the ⇄ buttons | `MISSING` | grep → nothing | P2. The buttons are localized via `t()`; a per-instance override ("承認する" / "取り消す") has no expression. |
232
- | `selectAllLabels` | `MISSING` | grep → nothing | P2. |
233
- | `onSearch` | `MISSING` | `showSearch` `:1434` is a boolean; no query callback | P2 — spell it `onSearchChange` (`OnSearchChangeProp`), as Select and Cascader already do. |
234
- | `onScroll` | `MISSING` | grep → nothing | P2. `pagination` `:1420` covers the large-list case instead. |
235
- | `locale` object | `COVERED-ELSEWHERE` | `t()` + the `i18n/messages/*` bundles | |
236
- | `listStyle` / `styles` / `classNames` | `WONT-PORT` | ground rule #4 | |
237
-
238
- ### 2.11 `SearchInput` — `SearchInputProp` `:418-437` · `src/components/data-entry/search-input.tsx`
239
-
240
- This maps to antd `Input.Search`.
241
-
242
- | Ant Design prop / behaviour | Status | Evidence | Verdict |
243
- | ------------------------------------------------------------------------------------------ | --------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
244
- | **`onSearch` on Enter** — commit the query immediately instead of waiting out the debounce | `MISSING` — UX | no `onKeyDown` anywhere in the file (read in full, 125 lines); `onSearch` fires only from the debounced effect `search-input.tsx:59-63` | **P1.** Pressing Enter in a search box is the universal "search now" gesture; here it does nothing and the user waits `debounce` ms. The IME guard `:43-46` is correct and must be preserved — Enter that _confirms a conversion_ must not submit. |
245
- | `enterButton` — a visible 検索 button | `MISSING` | grep → nothing | P2. Common on JP admin screens; today the consumer puts a `Button` beside it and re-wires the query. |
246
- | `loading` | `MISSING` | grep → nothing; `PendingProp` exists in the vocabulary | P2. Reuse `loading?: PendingProp` as `Select` `:998` does. |
247
- | `size` | `MISSING` | `SearchInputProp` `:418-437` has `status` and `variant` but no `size`, while the `Input` it wraps does (`:110`) | P2 (consistency) — a `SearchInput` cannot match an `sm` toolbar row. |
248
- | `allowClear` | `PRESENT` (always on) | hardcoded clear button `search-input.tsx:110-121` | Fine; note it is not switchable. |
249
- | `searchIcon` | `WONT-PORT` | ground rule #4 | Token. |
250
-
251
- ### 2.12 `CheckboxGroup` / `RadioGroup` — `:457-470`, `:472-494`
252
-
253
- | Ant Design prop / behaviour | Status | Evidence | Verdict |
254
- | ------------------------------------------------------------- | ------------------- | ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
255
- | `options` as bare `string \| number` | `MISSING` | `ChoiceOptionProp` requires `{label, value}` `:449-455` | P2. Identical to the `Segmented` row already logged in `antd-parity.md` §3.2 — fix all three together, one shared widening. |
256
- | `Radio.Group block` — stretch to the parent width (antd 5.21) | `MISSING` | `grep -n "block" src/props/components/data-entry.prop.ts` → no `block` on `RadioGroupProp` `:472-494` | P2. `Segmented` already has `block`; a `optionType="button"` group `:440` wants the same. Reuse the spelling. |
257
- | `optionType` / `buttonStyle` | `PRESENT` | `:440`, `:442` | |
258
- | option `title` (hover hint) | `COVERED-ELSEWHERE` | wrap in `Tooltip` — same ruling as `Segmented` in §3.2 | |
259
- | `size` on `Radio.Group` | `MISSING` | no `size` on `RadioGroupProp` `:472-494` | P2 — only meaningful with `optionType="button"`. Reuse `SizeProp`. |
260
-
261
- ### 2.13 `Rating` (antd `Rate`) — `src/components/ui/rating.tsx:7-42`
262
-
263
- Present: `count` (+ the legacy `max`), `allowHalf`, `allowClear`, `character` (node or fn),
264
- `tooltips` folded into the accessible name `:32-36`, `readOnly`, `disabled`, `name`. a11y is correct:
265
- `role="radiogroup"` + `role="radio"` + roving tabindex `:131-155`.
266
-
267
- | Ant Design prop / behaviour | Status | Evidence | Verdict |
268
- | ---------------------------------------------------------- | -------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
269
- | `onHoverChange` | `MISSING` | `hover` state is internal, `rating.tsx:70` | P2. |
270
- | `keyboard: false` | `WONT-PORT` | — | Disabling arrow keys on a `radiogroup` fails WCAG 2.1.1. |
271
- | `RatingProps` is not registered in `src/props/components/` | `MISSING` (house standard, not parity) | `grep -rn "RatingProp" src/props/` → no hit; the type lives in `src/components/ui/rating.tsx:7` | Same for `TagInputProps`, `ToggleProp`, `ToggleGroupItemProp`, `PasswordInputProps`, `UploadCropDialog`. Out of Ant-parity scope, but `STANDARDS-vocabulary-tokens.md` rules 1–2 want them in the registry. Flagged, not scheduled. |
272
-
273
- ### 2.14 `PasswordStrength` — `src/components/data-entry/password-strength.tsx` (no antd counterpart)
274
-
275
- | Behaviour | Status | Evidence | Verdict |
276
- | ----------------------------------------- | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
277
- | Every visible string is hardcoded English | `MISSING` — **i18n** | `DEFAULT_LABELS = { weak: "Weak", fair: "Fair", strong: "Strong" }` `:4-8`; `labelForRule` returns `"8+ characters"`, `"Contains uppercase letter"`, … `:119-133`; ``aria-label={`Password strength ${score}/4`}`` `:75`; `"Passed: "` / `"Failed: "` `:106`; the live region `{scoreLabel(…)} password strength` `:113`. The file never imports `useTranslation` (`grep -L useTranslation` over `src/components/data-entry/*.tsx` — this is the only non-shim file with real copy that misses it). | **P0.** Route every string through `t()` + the `en`/`ja`/`vi` bundles. `labels` `:21` overrides only 3 of the ~10 strings, so a consumer cannot even work around it. |
278
- | `role="img"` on the meter | `MISSING` — a11y | `:74-76` | P1. It is a value indicator, not an image: `role="meter"` (or `progressbar`) with `aria-valuenow`/`aria-valuemin`/`aria-valuemax`/`aria-valuetext`. Screen-reader users get a static label today and never hear the value change except via the separate live region `:112-114`. |
279
- | Rule set is closed | `MISSING` | `PasswordRule` is a fixed 5-member union `:3,10`; thresholds hardcoded `:35-39` | P2. A tenant policy of "12+ characters" has no expression. |
280
-
281
- ---
282
-
283
- ## 3. Priority list — every `MISSING` row, most severe first
284
-
285
- ### P0 — breaks a real screen
286
-
287
- | # | Component | Gap | Cite |
288
- | --- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- |
289
- | 1 | `NumberInput` | Locale round-trip corrupts the value: formatted with `Intl` for the active locale, parsed with a hardcoded `,`-is-a-thousands-separator rule. `vi` (shipped) turns `1.5` into `15` on blur. | `number-input.tsx:41,100,220` |
290
- | 2 | `PasswordStrength` | Entirely hardcoded English — labels, checklist, `aria-label`, live region. No `t()` in the file. | `password-strength.tsx:4-8,75,106,113,119-133` |
291
-
292
- ### P1 — a workaround exists, but it is hand-rolled and a11y-risky
293
-
294
- | # | Component | Gap | Cite |
295
- | --- | --------------------- | --------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
296
- | 4 | `Select` / `Cascader` | No list virtualization anywhere in `src/` (antd `virtual` is on by default). | `grep -rl "virtual\|useVirtualizer\|react-window\|@tanstack/react-virtual" src/` → ∅ |
297
- | 5 | `ColorPicker` | No `presets`, and the only control in the group with no `size`/`status`/`variant`. | `data-entry.prop.ts:893-908` |
298
- | 6 | `PasswordStrength` | `role="img"` on a value meter instead of `role="meter"` + `aria-valuenow`. | `password-strength.tsx:74-76` |
299
- | 7 | `SearchInput` | Enter does not commit the query — `onSearch` fires only after the debounce; no `onKeyDown` in the file. | `search-input.tsx:59-63` (whole file read) |
300
- | 8 | `Upload` | `showUploadList` is boolean-only; "preview but do not remove" forces `itemRender`, which hands the consumer the row's a11y. | `data-entry.prop.ts:1196`, `upload.tsx:461,644` |
301
- | 9 | `DatePicker range` | `disabled` is scalar; one end of a range cannot be locked (antd `disabled: [boolean, boolean]`). | `DatePickerBaseProp.disabled` |
302
- | 10 | `DatePicker` | No `defaultPickerValue`/`pickerValue` — the panel cannot be opened on a chosen month. | grep → ∅ |
303
- | 11 | `Transfer` | No `status`; cannot paint a validation error inside a `FormField`. | `data-entry.prop.ts:1413-1459` |
304
- | 12 | `Cascader` | Search is uncapped and uncustomizable (no `filterOption`/`filterSort`/result limit; antd's `limit` default is 50). | `cascader.tsx:389-393`, `data-entry.prop.ts:1263` |
305
- | 13 | `Select` | `fieldNames` absent although `Cascader` and `TreeSelect` both have it — a foreign row shape must be pre-mapped. | `data-entry.prop.ts:1281,1362` vs `:941-1080` |
306
- | 14 | `NumberInput` | No `stringMode`; money and >2^53 ids lose precision. | grep → ∅ |
307
- | 15 | `Select` (catalog) | `onSelect` / `onDeselect` / `maxTagPlaceholder` ship but are absent from the MCP entry — consumers cannot discover them. | props `:1093,1112-1114,1124`; catalog `mcp/src/data/components.ts:5572-5987` |
308
-
309
- ### P2 — nice to have
310
-
311
- `Select`: `defaultActiveFirstOption`, `onInputKeyDown`. ·
312
- `Cascader`: `Cascader.Panel`. ·
313
- `NumberInput`: `onStep`. ·
314
- `Slider`: `Intl`-formatted default tooltip (`draggableTrack` has landed). ·
315
- `ColorPicker`: `allowClear`+`onClear`, `readOnly`, `format`/`defaultFormat`/`onFormatChange`. ·
316
- `DatePicker`: `mode`+`onPanelChange`, `onOk`, `maxTagCount` for `multiple`, `format` as an
317
- array of accepted inputs, and — with `range` — `separator` (token) and `onCalendarChange`. ·
318
- `TimePicker`: `cellRender`, `onSelect`. ·
319
- `Calendar`: `mode`/`onPanelChange` (year board). ·
320
- `Upload`: `iconRender`, `isImageUrl`, `capture`. ·
321
- `Transfer`: `getRowId` (not `rowKey`), `footer`, `operations`, `selectAllLabels`, `onSearchChange`, `onScroll`. ·
322
- `SearchInput`: `enterButton`, `loading`, `size`. ·
323
- `CheckboxGroup`/`RadioGroup`/`Segmented`: bare-string options (one shared widening). ·
324
- `RadioGroup`: `block`, `size`. ·
325
- `Rating`: `onHoverChange`. ·
326
- `PasswordStrength`: configurable rules/thresholds.
327
-
328
- ---
329
-
330
- ## 4. GATE-0 — proposed new components
331
-
332
- **None.** Every gap above closes by widening a prop, fixing a parse, or adding an ARIA attribute on a
333
- component that already exists. Three candidates were considered and rejected before reaching a C1–C7
334
- ledger:
335
-
336
- | Candidate | Why it is not a new component |
337
- | -------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
338
- | `ColorSwatchPicker` (for `presets`) | Fails **C3** — it is a `presets` prop on the existing `ColorPicker`, or a row of `Toggle`s in the app. Adding a second colour control would be the duplication ground rule #3 forbids. |
339
- | `CascaderPanel` (for antd `Cascader.Panel`) | Fails **C3/C4** — it is `Cascader` rendered without its trigger, i.e. one prop (or a `<Cascader.Panel>` sub-part on the same component), not a second component with a second API. |
340
- | `SearchButton` / `Input.Search` twin (for `enterButton`) | Fails **C1/C3** — `SearchInput` exists; `enterButton` is a prop on it. |
341
-
342
- The one place where a _new_ thing is arguably justified is the **virtualized list engine** behind
343
- `Select virtual` / `Cascader virtual`. That is not a data-entry component: it is the same engine
344
- `list-masonry.md` needs for `List`. It should be specced once, there, and consumed here — not
345
- invented twice.
346
-
347
- ---
348
-
349
- ## 5. Cross-cutting observations (no ledger row)
350
-
351
- - **Deliberate, documented refusals already recorded in source** — keep them and make sure each has a
352
- catalog `usage` line so nobody re-adds them: `variant="underlined"`
353
- (`interaction.prop.ts:126-130`), `maxTagCount: "responsive"` (`shared.prop.ts:109-113`),
354
- `count.exceedFormatter` (`data-entry.prop.ts:88-91` — it truncates a live IME conversion),
355
- `TimePicker needConfirm` defaulting `false` against antd (`:864-871`),
356
- `Calendar fullCellRender` (`:571-583`), `Select tagRender` in multiple mode (`:1096-1104`),
357
- `Cascader showCheckedStrategy` excluding `SHOW_ALL` (`:1302`). This library's refusals are better
358
- documented than most libraries' features.
359
- - **`BranchScopePicker`** (`:1486-1517`) is a domain noun — 支店 scope — living in `src/components/`.
360
- It fails **C1** of the Framework-Component Test (`COMPOSITION-VS-COMPONENT.md` §2): it is
361
- `RadioGroup` + `SearchInput` + `CheckboxGroup` over consumer-supplied rows. Out of scope for an
362
- Ant-parity audit; raised here because the gate says the call should never be a matter of taste.
363
- - **Prop-type registration.** `Rating`, `TagInput`, `Toggle`, `ToggleGroup`, `PasswordInput`,
364
- `PasswordStrength`, `Command`, `CommandPalette` and `UploadCropDialog` declare their prop types
365
- inside `src/components/**` rather than `src/props/components/data-entry.prop.ts`
366
- (`grep -rn "RatingProp\|TagInputProp\|ToggleProp\|CommandPaletteProp\|PasswordInputProp" src/props/`
367
- → no hits). That is a `STANDARDS-vocabulary-tokens.md` rules 1–2 question, not an Ant-parity one,
368
- but it is why those components were the hardest to audit.