@godxjp/ui 31.31.8 → 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 (727) 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/fonts/OFL.txt +93 -0
  318. package/dist/styles/form-layout.css +4 -0
  319. package/dist/styles/index.css +0 -2
  320. package/dist/styles/layers.json +44 -179
  321. package/dist/styles/text-layout.css +0 -15
  322. package/dist/styles.css +2 -0
  323. package/dist/themes/godx.css +43 -0
  324. package/dist/themes/godx.d.ts +13 -0
  325. package/dist/themes/godx.js +12 -0
  326. package/dist/tokens/components/feedback.css +0 -6
  327. package/dist/tokens/derived.css +23 -22
  328. package/dist/tokens/foundation.css +4 -6
  329. package/docs/COMPOSITION-VS-COMPONENT.md +58 -33
  330. package/docs/CONSUMER-RULES.md +1 -1
  331. package/docs/CUSTOMER-THEMING.md +17 -53
  332. package/docs/migrations/v32.md +98 -0
  333. package/package.json +58 -19
  334. package/scripts/_agent-setup.mjs +54 -3
  335. package/scripts/brand-accent.generated.mjs +15 -2
  336. package/scripts/cli.mjs +36 -11
  337. package/scripts/codemod.mjs +522 -0
  338. package/scripts/consumer-rule.md +21 -43
  339. package/scripts/postinstall.mjs +10 -47
  340. package/scripts/prune-css.mjs +1 -1
  341. package/scripts/ui-audit.mjs +5 -2
  342. package/dist/components/data-display/chat-bubble.d.ts +0 -30
  343. package/dist/components/data-display/chat-bubble.js +0 -229
  344. package/dist/components/data-display/hover-card.d.ts +0 -1
  345. package/dist/components/data-display/hover-card.js +0 -7
  346. package/dist/components/data-display/thought-chain.d.ts +0 -42
  347. package/dist/components/data-display/thought-chain.js +0 -177
  348. package/dist/components/data-display/thumbnail.d.ts +0 -37
  349. package/dist/components/data-display/thumbnail.js +0 -20
  350. package/dist/components/data-display/welcome.d.ts +0 -26
  351. package/dist/components/data-display/welcome.js +0 -37
  352. package/dist/components/data-entry/attachments.d.ts +0 -19
  353. package/dist/components/data-entry/attachments.js +0 -366
  354. package/dist/components/data-entry/chat-composer.d.ts +0 -51
  355. package/dist/components/data-entry/chat-composer.js +0 -200
  356. package/dist/components/data-entry/chat-suggestion.d.ts +0 -28
  357. package/dist/components/data-entry/chat-suggestion.js +0 -309
  358. package/dist/components/data-entry/tag-input.d.ts +0 -2
  359. package/dist/components/data-entry/tag-input.js +0 -5
  360. package/dist/components/feedback/banner.d.ts +0 -21
  361. package/dist/components/feedback/banner.js +0 -19
  362. package/dist/components/feedback/callout.d.ts +0 -23
  363. package/dist/components/feedback/callout.js +0 -42
  364. package/dist/components/layout/auth-shell.d.ts +0 -10
  365. package/dist/components/layout/auth-shell.js +0 -42
  366. package/dist/components/layout/space-compact.d.ts +0 -65
  367. package/dist/components/layout/space-compact.js +0 -52
  368. package/dist/components/navigation/conversations.d.ts +0 -39
  369. package/dist/components/navigation/conversations.js +0 -371
  370. package/dist/components/ui/accordion.d.ts +0 -51
  371. package/dist/components/ui/accordion.js +0 -254
  372. package/dist/components/ui/aspect-ratio.d.ts +0 -24
  373. package/dist/components/ui/aspect-ratio.js +0 -21
  374. package/dist/components/ui/avatar.d.ts +0 -16
  375. package/dist/components/ui/avatar.js +0 -115
  376. package/dist/components/ui/credential-reveal.d.ts +0 -9
  377. package/dist/components/ui/credential-reveal.js +0 -160
  378. package/dist/components/ui/hover-card.d.ts +0 -47
  379. package/dist/components/ui/hover-card.js +0 -205
  380. package/dist/components/ui/input-otp.d.ts +0 -48
  381. package/dist/components/ui/input-otp.js +0 -101
  382. package/dist/components/ui/password-input.d.ts +0 -38
  383. package/dist/components/ui/password-input.js +0 -60
  384. package/dist/components/ui/rating.d.ts +0 -38
  385. package/dist/components/ui/rating.js +0 -131
  386. package/dist/components/ui/segmented.d.ts +0 -94
  387. package/dist/components/ui/segmented.js +0 -108
  388. package/dist/components/ui/separator.d.ts +0 -25
  389. package/dist/components/ui/separator.js +0 -74
  390. package/dist/components/ui/toggle-group.d.ts +0 -108
  391. package/dist/components/ui/toggle-group.js +0 -194
  392. package/dist/components/ui/toggle.d.ts +0 -86
  393. package/dist/components/ui/toggle.js +0 -156
  394. package/docs/CANONICAL-CONTRACTS.md +0 -206
  395. package/docs/COMPONENTS.md +0 -163
  396. package/docs/DATETIME.md +0 -78
  397. package/docs/DEVELOPMENT.md +0 -269
  398. package/docs/FRAME-A11Y-CI.md +0 -287
  399. package/docs/FRAME-COVERAGE-LEDGER.md +0 -123
  400. package/docs/FRAME-COVERAGE-REPORT.md +0 -228
  401. package/docs/FRAME-COVERAGE-STANDARD.md +0 -65
  402. package/docs/FRAME-COVERAGE.md +0 -29
  403. package/docs/MEASUREMENT-CONTRACT.md +0 -109
  404. package/docs/PROPS-REGISTRY.md +0 -61
  405. package/docs/PROPS-VOCABULARY.md +0 -100
  406. package/docs/REGISTRY.md +0 -70
  407. package/docs/TESTING.md +0 -107
  408. package/docs/THEME-API-COVERAGE.md +0 -538
  409. package/docs/WHAT-BELONGS-HERE.md +0 -179
  410. package/docs/asset-modules.d.ts +0 -53
  411. package/docs/assets/cover-terrain.svg +0 -6
  412. package/docs/assets/portrait-amber.svg +0 -5
  413. package/docs/assets/portrait-clay.svg +0 -5
  414. package/docs/assets/portrait-indigo.svg +0 -5
  415. package/docs/assets/portrait-iris.svg +0 -5
  416. package/docs/assets/portrait-moss.svg +0 -5
  417. package/docs/assets/portrait-plum.svg +0 -5
  418. package/docs/assets/portrait-slate.svg +0 -5
  419. package/docs/assets/service-mark-rose.svg +0 -6
  420. package/docs/assets/service-mark-teal.svg +0 -5
  421. package/docs/assets/shot-landscape.svg +0 -12
  422. package/docs/assets/shot-portrait.svg +0 -10
  423. package/docs/assets/tcgm/card-1.svg +0 -1
  424. package/docs/assets/tcgm/card-2.svg +0 -1
  425. package/docs/assets/tcgm/card-3.svg +0 -1
  426. package/docs/assets/tcgm/card-4.svg +0 -1
  427. package/docs/assets/tcgm/card-5.svg +0 -1
  428. package/docs/assets/tcgm/card-6.svg +0 -1
  429. package/docs/assets/tcgm/hero-prism.svg +0 -1
  430. package/docs/assets/tcgm/scene-1.svg +0 -1
  431. package/docs/assets/tcgm/scene-2.svg +0 -1
  432. package/docs/assets/tcgm/scene-3.svg +0 -1
  433. package/docs/assets/tcgm/scene-4.svg +0 -1
  434. package/docs/assets/tcgm/scene-5.svg +0 -1
  435. package/docs/assets/tcgm/tcgm-lockup-color.svg +0 -1
  436. package/docs/assets/tcgm/tcgm-symbol-color.svg +0 -1
  437. package/docs/charts/cjk-category-axis.tsx +0 -81
  438. package/docs/charts/compact-bar-trend.tsx +0 -327
  439. package/docs/charts/size-tiers.tsx +0 -192
  440. package/docs/data-display/accordion.tsx +0 -99
  441. package/docs/data-display/avatar.tsx +0 -502
  442. package/docs/data-display/badge.tsx +0 -335
  443. package/docs/data-display/card/examples/detail-panel.tsx +0 -106
  444. package/docs/data-display/card/examples/tab-list.tsx +0 -97
  445. package/docs/data-display/card/index.md +0 -3
  446. package/docs/data-display/card/index.tsx +0 -390
  447. package/docs/data-display/carousel.tsx +0 -160
  448. package/docs/data-display/charts.tsx +0 -278
  449. package/docs/data-display/chat-bubble.tsx +0 -397
  450. package/docs/data-display/code-block.tsx +0 -188
  451. package/docs/data-display/collapsible.tsx +0 -162
  452. package/docs/data-display/credential-reveal.tsx +0 -148
  453. package/docs/data-display/data-table/examples/antd-parity.tsx +0 -257
  454. package/docs/data-display/data-table/examples/approval-queue.tsx +0 -212
  455. package/docs/data-display/data-table/examples/grid-features.tsx +0 -158
  456. package/docs/data-display/data-table/examples/list-page.tsx +0 -175
  457. package/docs/data-display/data-table/examples/selectable-inbox.tsx +0 -113
  458. package/docs/data-display/data-table/examples/server-paged.tsx +0 -179
  459. package/docs/data-display/data-table/examples/striped-list.tsx +0 -173
  460. package/docs/data-display/data-table/index.md +0 -9
  461. package/docs/data-display/data-table/index.tsx +0 -407
  462. package/docs/data-display/descriptions.tsx +0 -263
  463. package/docs/data-display/empty-state.tsx +0 -164
  464. package/docs/data-display/feature-list.tsx +0 -159
  465. package/docs/data-display/hover-card.tsx +0 -181
  466. package/docs/data-display/image.tsx +0 -170
  467. package/docs/data-display/legend.tsx +0 -158
  468. package/docs/data-display/list-row.tsx +0 -441
  469. package/docs/data-display/markdown.tsx +0 -86
  470. package/docs/data-display/marquee.tsx +0 -254
  471. package/docs/data-display/org-chart.tsx +0 -165
  472. package/docs/data-display/permission-matrix.tsx +0 -188
  473. package/docs/data-display/popover-touch.tsx +0 -27
  474. package/docs/data-display/popover.tsx +0 -331
  475. package/docs/data-display/progress.tsx +0 -162
  476. package/docs/data-display/prose.tsx +0 -169
  477. package/docs/data-display/qr-code.tsx +0 -68
  478. package/docs/data-display/scroll-area.tsx +0 -420
  479. package/docs/data-display/service-launcher-card.tsx +0 -445
  480. package/docs/data-display/stat-card.tsx +0 -354
  481. package/docs/data-display/swatch.tsx +0 -107
  482. package/docs/data-display/table.tsx +0 -362
  483. package/docs/data-display/text-diff.tsx +0 -89
  484. package/docs/data-display/thought-chain.tsx +0 -176
  485. package/docs/data-display/thumbnail.tsx +0 -128
  486. package/docs/data-display/timeline-grid.tsx +0 -119
  487. package/docs/data-display/timeline.tsx +0 -671
  488. package/docs/data-display/touch-actions.tsx +0 -36
  489. package/docs/data-display/tree.tsx +0 -724
  490. package/docs/data-display/welcome.tsx +0 -115
  491. package/docs/data-entry/attachments.tsx +0 -160
  492. package/docs/data-entry/block-editor.tsx +0 -105
  493. package/docs/data-entry/branch-scope-picker.tsx +0 -128
  494. package/docs/data-entry/calendar.tsx +0 -226
  495. package/docs/data-entry/cascader.tsx +0 -380
  496. package/docs/data-entry/chat-composer.tsx +0 -619
  497. package/docs/data-entry/chat-suggestion.tsx +0 -301
  498. package/docs/data-entry/checkbox.tsx +0 -256
  499. package/docs/data-entry/color-picker.tsx +0 -189
  500. package/docs/data-entry/command-palette.tsx +0 -179
  501. package/docs/data-entry/command.tsx +0 -341
  502. package/docs/data-entry/country-picker-recipe.tsx +0 -175
  503. package/docs/data-entry/date-picker.tsx +0 -452
  504. package/docs/data-entry/emoji-picker.tsx +0 -35
  505. package/docs/data-entry/form/examples/employee-settings.tsx +0 -267
  506. package/docs/data-entry/form/examples/invoice-form.tsx +0 -387
  507. package/docs/data-entry/form-dynamic-fields.tsx +0 -199
  508. package/docs/data-entry/form-field/examples/a11y-contract.tsx +0 -242
  509. package/docs/data-entry/form-field/examples/create-form.tsx +0 -107
  510. package/docs/data-entry/form-field/index.md +0 -8
  511. package/docs/data-entry/form-field/index.tsx +0 -337
  512. package/docs/data-entry/form-inertia.tsx +0 -80
  513. package/docs/data-entry/form-root.tsx +0 -112
  514. package/docs/data-entry/form.tsx +0 -1498
  515. package/docs/data-entry/input-otp.tsx +0 -258
  516. package/docs/data-entry/input.tsx +0 -796
  517. package/docs/data-entry/label.tsx +0 -102
  518. package/docs/data-entry/markdown-editor.tsx +0 -69
  519. package/docs/data-entry/number-input.tsx +0 -279
  520. package/docs/data-entry/password-input.tsx +0 -102
  521. package/docs/data-entry/password-strength.tsx +0 -99
  522. package/docs/data-entry/radio-group.tsx +0 -316
  523. package/docs/data-entry/rating.tsx +0 -91
  524. package/docs/data-entry/record-picker.tsx +0 -209
  525. package/docs/data-entry/search-input.tsx +0 -121
  526. package/docs/data-entry/segmented-in-filter-row.tsx +0 -60
  527. package/docs/data-entry/segmented.tsx +0 -300
  528. package/docs/data-entry/select-async-contracts.tsx +0 -108
  529. package/docs/data-entry/select-matrix.tsx +0 -209
  530. package/docs/data-entry/select.tsx +0 -547
  531. package/docs/data-entry/slider.tsx +0 -212
  532. package/docs/data-entry/sortable-list.tsx +0 -76
  533. package/docs/data-entry/switch.tsx +0 -314
  534. package/docs/data-entry/tag-input.tsx +0 -145
  535. package/docs/data-entry/textarea.tsx +0 -249
  536. package/docs/data-entry/time-picker.tsx +0 -187
  537. package/docs/data-entry/time-range-picker.tsx +0 -55
  538. package/docs/data-entry/toggle-count.tsx +0 -348
  539. package/docs/data-entry/toggle-group.tsx +0 -438
  540. package/docs/data-entry/toggle.tsx +0 -217
  541. package/docs/data-entry/transfer.tsx +0 -115
  542. package/docs/data-entry/tree-select.tsx +0 -204
  543. package/docs/data-entry/upload-crop-dialog.tsx +0 -109
  544. package/docs/data-entry/upload.tsx +0 -310
  545. package/docs/feedback/alert-dialog.tsx +0 -270
  546. package/docs/feedback/alert.tsx +0 -248
  547. package/docs/feedback/auth-expiry.tsx +0 -104
  548. package/docs/feedback/banner.tsx +0 -183
  549. package/docs/feedback/callout.tsx +0 -220
  550. package/docs/feedback/danger-confirm.tsx +0 -91
  551. package/docs/feedback/dialog-touch.tsx +0 -24
  552. package/docs/feedback/dialog.tsx +0 -373
  553. package/docs/feedback/sheet.tsx +0 -510
  554. package/docs/feedback/skeleton.tsx +0 -168
  555. package/docs/feedback/toast.tsx +0 -135
  556. package/docs/feedback/tooltip.tsx +0 -171
  557. package/docs/feedback/two-factor-setup.tsx +0 -68
  558. package/docs/foundation/_email-specimen.ts +0 -274
  559. package/docs/foundation/_theme-editor-scope.ts +0 -222
  560. package/docs/foundation/colors.tsx +0 -207
  561. package/docs/foundation/density.tsx +0 -242
  562. package/docs/foundation/email-tokens.tsx +0 -323
  563. package/docs/foundation/radius-shadow.tsx +0 -154
  564. package/docs/foundation/spacing.tsx +0 -216
  565. package/docs/foundation/theme-editor.tsx +0 -654
  566. package/docs/foundation/typography.tsx +0 -147
  567. package/docs/general/actions.tsx +0 -175
  568. package/docs/general/activity.tsx +0 -289
  569. package/docs/general/button/examples/destructive-confirm.tsx +0 -90
  570. package/docs/general/button/examples/form-actions.tsx +0 -87
  571. package/docs/general/button/examples/toolbar.tsx +0 -160
  572. package/docs/general/button/index.md +0 -16
  573. package/docs/general/button/index.tsx +0 -236
  574. package/docs/general/float-button.tsx +0 -133
  575. package/docs/general/icon.tsx +0 -217
  576. package/docs/general/logo.tsx +0 -194
  577. package/docs/general/reveal.tsx +0 -309
  578. package/docs/general/typography.tsx +0 -542
  579. package/docs/i18n/messages/en.json +0 -1715
  580. package/docs/i18n/messages/ja.json +0 -1708
  581. package/docs/i18n/messages/vi.json +0 -1708
  582. package/docs/layout/account-chip.tsx +0 -72
  583. package/docs/layout/admin-collection.tsx +0 -122
  584. package/docs/layout/affix.tsx +0 -209
  585. package/docs/layout/app-launcher.tsx +0 -211
  586. package/docs/layout/app-shell-arrangements.tsx +0 -225
  587. package/docs/layout/app-shell-narrow-bar.tsx +0 -205
  588. package/docs/layout/app-shell-states.tsx +0 -171
  589. package/docs/layout/app-shell.tsx +0 -395
  590. package/docs/layout/aspect-ratio.tsx +0 -135
  591. package/docs/layout/auth-account-summary.tsx +0 -103
  592. package/docs/layout/auth-divider.tsx +0 -28
  593. package/docs/layout/auth-footer.tsx +0 -37
  594. package/docs/layout/auth-identity.tsx +0 -70
  595. package/docs/layout/auth-recovery/examples/mfa-challenge.md +0 -41
  596. package/docs/layout/auth-recovery/examples/mfa-challenge.tsx +0 -254
  597. package/docs/layout/auth-recovery/examples/mobile-390.md +0 -25
  598. package/docs/layout/auth-recovery/examples/mobile-390.tsx +0 -82
  599. package/docs/layout/auth-recovery/examples/password-recovery.md +0 -24
  600. package/docs/layout/auth-recovery/examples/password-recovery.tsx +0 -197
  601. package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.md +0 -27
  602. package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.tsx +0 -156
  603. package/docs/layout/auth-recovery/index.md +0 -140
  604. package/docs/layout/auth-recovery/index.tsx +0 -96
  605. package/docs/layout/auth-shell-context.tsx +0 -103
  606. package/docs/layout/auth-shell-device.tsx +0 -112
  607. package/docs/layout/auth-shell-registration.tsx +0 -338
  608. package/docs/layout/auth-shell-variants.tsx +0 -143
  609. package/docs/layout/auth-shell.tsx +0 -59
  610. package/docs/layout/auth-stack.tsx +0 -40
  611. package/docs/layout/centered-shell.tsx +0 -102
  612. package/docs/layout/draggable-panel.tsx +0 -127
  613. package/docs/layout/error-surface/examples/application-403.tsx +0 -84
  614. package/docs/layout/error-surface/examples/application-404.tsx +0 -77
  615. package/docs/layout/error-surface/examples/system-500.tsx +0 -47
  616. package/docs/layout/error-surface/examples/system-503.tsx +0 -48
  617. package/docs/layout/error-surface/index.md +0 -153
  618. package/docs/layout/error-surface/index.tsx +0 -239
  619. package/docs/layout/flex.tsx +0 -444
  620. package/docs/layout/legal-document-shell/_data.ts +0 -110
  621. package/docs/layout/legal-document-shell/examples/desktop-1440.md +0 -12
  622. package/docs/layout/legal-document-shell/examples/desktop-1440.tsx +0 -83
  623. package/docs/layout/legal-document-shell/examples/mobile-390.md +0 -22
  624. package/docs/layout/legal-document-shell/examples/mobile-390.tsx +0 -70
  625. package/docs/layout/legal-document-shell/examples/tablet-1024.md +0 -3
  626. package/docs/layout/legal-document-shell/examples/tablet-1024.tsx +0 -84
  627. package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.md +0 -18
  628. package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.tsx +0 -61
  629. package/docs/layout/legal-document-shell/index.md +0 -51
  630. package/docs/layout/legal-document-shell/index.tsx +0 -101
  631. package/docs/layout/masonry.tsx +0 -291
  632. package/docs/layout/master-detail.tsx +0 -390
  633. package/docs/layout/mobile-shell.tsx +0 -106
  634. package/docs/layout/nav-list.tsx +0 -584
  635. package/docs/layout/org-switcher.tsx +0 -131
  636. package/docs/layout/page-container.tsx +0 -1020
  637. package/docs/layout/page-cover.tsx +0 -56
  638. package/docs/layout/resizable-panel.tsx +0 -419
  639. package/docs/layout/responsive-grid.tsx +0 -403
  640. package/docs/layout/separator.tsx +0 -327
  641. package/docs/layout/service-role-panel.tsx +0 -144
  642. package/docs/layout/sidebar.tsx +0 -689
  643. package/docs/layout/space-compact.tsx +0 -202
  644. package/docs/layout/split-pane.tsx +0 -532
  645. package/docs/layout/topbar-item.tsx +0 -233
  646. package/docs/layout/topbar.tsx +0 -360
  647. package/docs/navigation/anchor.tsx +0 -295
  648. package/docs/navigation/app-setting-picker.tsx +0 -178
  649. package/docs/navigation/app-setting-toggle.tsx +0 -111
  650. package/docs/navigation/breadcrumb.tsx +0 -207
  651. package/docs/navigation/card-tabs.tsx +0 -344
  652. package/docs/navigation/conversations.tsx +0 -176
  653. package/docs/navigation/dropdown-menu.tsx +0 -345
  654. package/docs/navigation/filter-bar.tsx +0 -247
  655. package/docs/navigation/mega-menu-panel.tsx +0 -86
  656. package/docs/navigation/mega-menu.tsx +0 -254
  657. package/docs/navigation/pagination.tsx +0 -293
  658. package/docs/navigation/steps.tsx +0 -315
  659. package/docs/navigation/tabs-rtl.tsx +0 -28
  660. package/docs/navigation/tabs.tsx +0 -755
  661. package/docs/navigation/toolbar.tsx +0 -347
  662. package/docs/providers/app-provider.tsx +0 -191
  663. package/docs/providers/format-date.tsx +0 -230
  664. package/docs/providers/theme-scope.tsx +0 -186
  665. package/docs/query/button-refetch.tsx +0 -161
  666. package/docs/query/data-state.tsx +0 -262
  667. package/docs/query/infinite-query-state.tsx +0 -97
  668. package/docs/query/mutation-feedback.tsx +0 -128
  669. package/docs/query/touch-actions.tsx +0 -68
  670. package/docs/react-router/prefetch-link.tsx +0 -262
  671. package/docs/roadmap/ai-chat-components.md +0 -206
  672. package/docs/roadmap/antd-parity.md +0 -155
  673. package/docs/roadmap/badge-tag-chip-count.md +0 -172
  674. package/docs/roadmap/list-masonry.md +0 -159
  675. package/docs/roadmap/parity-audit-data-display-feedback.md +0 -567
  676. package/docs/roadmap/parity-audit-data-entry.md +0 -368
  677. package/docs/roadmap/parity-audit-layout-navigation-general.md +0 -459
  678. package/docs/roadmap/parity-backlog.md +0 -77
  679. package/docs/roadmap/tree-components.md +0 -151
  680. package/docs/roadmap/website-components.md +0 -813
  681. package/docs/showcase/acme-portal.tsx +0 -461
  682. package/docs/showcase/acme-website.tsx +0 -499
  683. package/docs/showcase/caimono-price-comparison.tsx +0 -919
  684. package/docs/showcase/case1-warehouse-dashboard.tsx +0 -358
  685. package/docs/showcase/case2-employee-me.tsx +0 -438
  686. package/docs/showcase/case3-approval-workflow.tsx +0 -531
  687. package/docs/showcase/case4-login.tsx +0 -312
  688. package/docs/showcase/case5-shift-calendar.tsx +0 -702
  689. package/docs/showcase/case6-agency-handy.tsx +0 -1120
  690. package/docs/showcase/futurelastic-web.tsx +0 -441
  691. package/docs/showcase/marketing-page.tsx +0 -895
  692. package/docs/showcase/org-switcher.tsx +0 -320
  693. package/docs/showcase/permission-matrix.tsx +0 -354
  694. package/docs/showcase/public-landing.tsx +0 -210
  695. package/docs/showcase/settings-account-sections.tsx +0 -559
  696. package/docs/showcase/settings-security-mfa.tsx +0 -145
  697. package/docs/showcase/table-approval-queue.tsx +0 -199
  698. package/docs/showcase/table-bulk-actions.tsx +0 -468
  699. package/docs/showcase/table-compact-kintone.tsx +0 -438
  700. package/docs/showcase/table-conditional-format.tsx +0 -367
  701. package/docs/showcase/table-crud-list.tsx +0 -544
  702. package/docs/showcase/table-density.tsx +0 -349
  703. package/docs/showcase/table-expandable-rows.tsx +0 -496
  704. package/docs/showcase/table-filter-chips.tsx +0 -468
  705. package/docs/showcase/table-footer-totals.tsx +0 -328
  706. package/docs/showcase/table-grouped-subtotals.tsx +0 -398
  707. package/docs/showcase/table-master-detail.tsx +0 -482
  708. package/docs/showcase/table-pagination.tsx +0 -409
  709. package/docs/showcase/table-states.tsx +0 -371
  710. package/docs/showcase/table-sticky-columns.tsx +0 -377
  711. package/docs/showcase/table-tree-rows.tsx +0 -451
  712. package/docs/showcase/table-view-tabs.tsx +0 -488
  713. package/docs/showcase/tcgm-website.tsx +0 -1047
  714. package/docs/showcase/tenant-brand-color.tsx +0 -338
  715. package/docs/showcase/theme-customization.tsx +0 -1292
  716. package/docs/showcase/theme-lab.tsx +0 -2125
  717. package/docs/themes/flat.css +0 -466
  718. package/docs/themes/glassmorphism.css +0 -960
  719. package/docs/themes/index.ts +0 -219
  720. package/docs/themes/neubrutalism.css +0 -481
  721. /package/dist/components/navigation/{filter-bar.d.ts → toolbar.d.ts} +0 -0
  722. /package/dist/components/navigation/{filter-bar.js → toolbar.js} +0 -0
  723. /package/dist/{components/data-display → lab}/carousel.d.ts +0 -0
  724. /package/dist/{components/data-entry → lab}/emoji-data.d.ts +0 -0
  725. /package/dist/{components/data-entry → lab}/emoji-data.js +0 -0
  726. /package/dist/{components/data-display → lab}/marquee-reveal.d.ts +0 -0
  727. /package/dist/{components/data-display → lab}/marquee-reveal.js +0 -0
@@ -0,0 +1,43 @@
1
+
2
+ @import "../styles/fonts.css";
3
+
4
+ :root {
5
+
6
+ --primary: 268.7 100% 50%;
7
+ --primary-foreground: 60 33% 99%;
8
+
9
+ --brand: 268.7 100% 50%;
10
+ --brand-foreground: 60 33% 99%;
11
+ }
12
+
13
+ .dark,
14
+ :root[data-theme="dark"] {
15
+
16
+ --primary: 268.7 100% 86.9%;
17
+ --primary-foreground: 48 9% 9%;
18
+ --brand: 268.7 100% 86.9%;
19
+ --brand-foreground: 48 9% 9%;
20
+ }
21
+
22
+ @supports not (color: hsl(from red h s l)) {
23
+ :root {
24
+ --primary-hover: 268.7 100% 41.6%;
25
+ --primary-active: 268.7 100% 34.5%;
26
+ --primary-border: 268.7 68% 66%;
27
+ --control-outline: 268.7 100% 44.7%;
28
+ --text-link: 268.7 100% 41.6%;
29
+ --text-brand: 268.7 100% 41.6%;
30
+ --text-primary: 268.7 100% 34.5%;
31
+ }
32
+
33
+ .dark,
34
+ :root[data-theme="dark"] {
35
+ --primary-hover: 268.7 100% 92.7%;
36
+ --primary-active: 268.7 100% 81.1%;
37
+ --primary-border: 268.7 46.7% 23.5%;
38
+ --control-outline: 268.7 99% 61.8%;
39
+ --text-link: 268.7 100% 86.9%;
40
+ --text-brand: 268.7 100% 86.9%;
41
+ --text-primary: 268.7 100% 92.7%;
42
+ }
43
+ }
@@ -0,0 +1,13 @@
1
+ import type { AppPreset } from "../app/preset.js";
2
+ /**
3
+ * The GoDX PRESET (v32, gh#1220): the product defaults GoDX surfaces shipped with in 31.x, now
4
+ * opt-in so the package's own defaults stay neutral. Pair it with the stylesheet that restores the
5
+ * violet identity:
6
+ *
7
+ * import "@godxjp/ui/themes/godx.css";
8
+ * import { godxPreset } from "@godxjp/ui/themes/godx";
9
+ * <AppProvider preset={godxPreset}>…</AppProvider>
10
+ *
11
+ * Core never imports this module, which is what keeps the GoDX artwork out of a neutral bundle.
12
+ */
13
+ export declare const godxPreset: AppPreset;
@@ -0,0 +1,12 @@
1
+ import { createElement } from "react";
2
+ import { Logo } from "../components/general/logo.js";
3
+ const godxPreset = Object.freeze({
4
+ name: "godx",
5
+ defaultLocale: "vi",
6
+ timeZone: "Asia/Ho_Chi_Minh",
7
+ brandMark: createElement(Logo, { mark: "godx", tone: "success" }),
8
+ emailBrandLabel: "GoDX"
9
+ });
10
+ export {
11
+ godxPreset
12
+ };
@@ -119,14 +119,8 @@
119
119
  --skeleton-stat-caption-width: 5rem;
120
120
 
121
121
  --skeleton-element-radius: initial;
122
- --skeleton-button-width-ratio: 2;
123
122
  --skeleton-input-width-ratio: 5;
124
123
 
125
- --skeleton-node-size: calc(var(--control-height) * 3);
126
- --skeleton-image-glyph-size: var(--icon-size-4xl);
127
-
128
- --skeleton-image-glyph-color: initial;
129
-
130
124
  --skeleton-article-avatar-gap: var(--space-inline-lg);
131
125
  --skeleton-article-avatar-title-offset: var(--space-3);
132
126
  --skeleton-article-title-gap: var(--space-stack-lg);
@@ -7,10 +7,11 @@
7
7
  --primary-border: initial;
8
8
  --control-outline: initial;
9
9
 
10
- --primary-hover-darken-channels: h s calc(l - 8.4);
11
- --primary-active-darken-channels: h s calc(l - 15.5);
12
- --primary-hover-lighten-channels: h s calc(l + 5.8);
13
- --primary-active-lighten-channels: h s calc(l + 11.6 - 17.4 * clamp(0, (l - 83.4) * 1000, 1));
10
+ --primary-hover-darken-channels: h s calc(l - 8.4 + 18 * clamp(0, (12 - l) * 1000, 1));
11
+ --primary-active-darken-channels: h s calc(l - 15.5 + 20.3 * clamp(0, (12 - l) * 1000, 1));
12
+ --primary-hover-lighten-channels: h s calc(l + 5.8 - 11.6 * clamp(0, (l - 94) * 1000, 1));
13
+ --primary-active-lighten-channels: h s
14
+ calc(l + 11.6 - 17.4 * clamp(0, (l - 83.4) * 1000, 1) - 5.8 * clamp(0, (l - 94) * 1000, 1));
14
15
 
15
16
  --primary-hover-channels: var(--primary-hover-darken-channels);
16
17
  --primary-active-channels: var(--primary-active-darken-channels);
@@ -24,10 +25,10 @@
24
25
  --text-brand: initial;
25
26
  --text-primary: initial;
26
27
 
27
- --text-link-channels: var(--primary-hover-channels);
28
- --text-brand-channels: var(--primary-hover-channels);
28
+ --text-link-channels: h s calc(l - 8.4);
29
+ --text-brand-channels: h s calc(l - 8.4);
29
30
 
30
- --text-primary-channels: var(--primary-active-channels);
31
+ --text-primary-channels: h s calc(l - 15.5);
31
32
 
32
33
  --destructive-hover: 359 50.6% 53.1%;
33
34
  --destructive-active: 355 70.6% 33.3%;
@@ -51,7 +52,7 @@
51
52
  --text-link-channels: h s l;
52
53
  --text-brand-channels: h s l;
53
54
 
54
- --text-primary-channels: var(--primary-hover-channels);
55
+ --text-primary-channels: h s calc(l + 5.8);
55
56
 
56
57
  --destructive-hover: 358.8 42.3% 53.1%;
57
58
  --destructive-active: 357.3 50.6% 34.1%;
@@ -64,23 +65,23 @@
64
65
 
65
66
  @supports not (color: hsl(from red h s l)) {
66
67
  :root {
67
- --primary-hover: 268.7 100% 41.6%;
68
- --primary-active: 268.7 100% 34.5%;
69
- --primary-border: 268.7 68% 66%;
70
- --control-outline: 268.7 100% 44.7%;
71
- --text-link: 268.7 100% 41.6%;
72
- --text-brand: 268.7 100% 41.6%;
73
- --text-primary: 268.7 100% 34.5%;
68
+ --primary-hover: 240 6% 19.6%;
69
+ --primary-active: 240 6% 14.8%;
70
+ --primary-border: 240 4.08% 26%;
71
+ --control-outline: 240 6% 4.7%;
72
+ --text-link: 240 6% 1.6%;
73
+ --text-brand: 240 6% 1.6%;
74
+ --text-primary: 240 6% 0%;
74
75
  }
75
76
 
76
77
  .dark,
77
78
  :root[data-theme="dark"] {
78
- --primary-hover: 268.7 100% 92.7%;
79
- --primary-active: 268.7 100% 81.1%;
80
- --primary-border: 268.7 46.7% 23.5%;
81
- --control-outline: 268.7 99% 61.8%;
82
- --text-link: 268.7 100% 86.9%;
83
- --text-brand: 268.7 100% 86.9%;
84
- --text-primary: 268.7 100% 92.7%;
79
+ --primary-hover: 0 0% 92.2%;
80
+ --primary-active: 0 0% 86.4%;
81
+ --primary-border: 0 0% 26.5%;
82
+ --control-outline: 0 0% 72.9%;
83
+ --text-link: 0 0% 98%;
84
+ --text-brand: 0 0% 98%;
85
+ --text-primary: 0 0% 100%;
85
86
  }
86
87
  }
@@ -16,7 +16,7 @@
16
16
  --popover: 60 33% 99%;
17
17
  --popover-foreground: 48 8% 13%;
18
18
 
19
- --primary: 268.7 100% 50%;
19
+ --primary: 240 6% 10%;
20
20
  --primary-foreground: 60 33% 99%;
21
21
  --secondary: 45 15% 95%;
22
22
  --secondary-foreground: 48 8% 13%;
@@ -41,7 +41,7 @@
41
41
  --attention: 25 99% 46%;
42
42
  --attention-foreground: 48 8% 13%;
43
43
 
44
- --brand: 268.7 100% 50%;
44
+ --brand: 240 6% 10%;
45
45
  --brand-foreground: 60 33% 99%;
46
46
 
47
47
  --text-tertiary: 44 5% 55%;
@@ -188,8 +188,6 @@
188
188
  --heading-h3: initial;
189
189
  --heading-h4: initial;
190
190
 
191
- --heading-h5: initial;
192
-
193
191
  --font-weight-normal: 400;
194
192
  --font-weight-medium: 500;
195
193
 
@@ -344,7 +342,7 @@
344
342
  --card-foreground: 60 20% 96%;
345
343
  --popover: 48 8% 12%;
346
344
  --popover-foreground: 60 20% 96%;
347
- --primary: 268.7 100% 86.9%;
345
+ --primary: 0 0% 98%;
348
346
  --primary-foreground: 48 9% 9%;
349
347
  --secondary: 45 6% 18%;
350
348
  --secondary-foreground: 60 20% 96%;
@@ -369,7 +367,7 @@
369
367
  --attention: 25 95% 56%;
370
368
  --attention-foreground: 48 9% 9%;
371
369
 
372
- --brand: 268.7 100% 86.9%;
370
+ --brand: 0 0% 98%;
373
371
  --brand-foreground: 48 9% 9%;
374
372
 
375
373
  --text-tertiary: 44 6% 56%;
@@ -31,15 +31,15 @@ A **specific arrangement of existing primitives** for a specific screen, domain
31
31
 
32
32
  Before creating OR proposing a framework component, evaluate **every** criterion and record the verdict. **Allowed only if ALL are `PASS`.** Any `FAIL` ⇒ it is a composition pattern; use existing components instead.
33
33
 
34
- | # | Criterion | PASS means | FAIL means (→ compose) |
35
- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------- | ------------------------------------------------------------------------ |
36
- | **C1. Universal, not design-specific** | Needed by many apps across domains; not a recreation of one design's block. | A generic capability (a select, a table, a date picker). | "ACME Hero", "AcmePricingTable", "this dashboard's header". |
37
- | **C2. Encapsulates reusable BEHAVIOR** | Owns non-trivial state / keyboard / focus / ARIA that must not be re-implemented per app. | Listbox navigation, dialog focus-trap, table sort/select, async load. | Pure static layout/visual arrangement (a hero, a footer, a banner). |
38
- | **C3. Not expressible by composing existing primitives + tokens** | You genuinely cannot build it from `Card`/`Button`/`Text`/`Grid`/`Flex`/… + token overrides. | A new interaction primitive with no existing equivalent. | You _can_ build it today from primitives + tokens (then you must). |
39
- | **C4. Single responsibility + controlled-vocabulary API** | One job; maps to `value`/`defaultValue`/`onValueChange`, `size ∈ xs\|sm\|md\|lg`, `tone`, etc.; generalizes beyond one screen. | `Select`, `Switch`, `Pagination`. | A grab-bag "Section"/"Block"/"Layout" with a bespoke, screen-shaped API. |
40
- | **C5. Fully token-themeable, zero baked brand** | Appearance is 100% token-driven; works for every brand with no code change. | Reads `hsl(var(--…))` / semantic tokens only. | Needs baked colors / raw hex / per-brand styling to look right. |
41
- | **C6. Earns the international contract** | Broad reuse justifies the full i18n (`t()`/`Intl`) + WAI-ARIA APG + WCAG 2.2 AA + RTL + a11y-test + MCP-catalog cost. | A control everyone uses and that needs correct ARIA. | A one-off where that cost is pure overhead. |
42
- | **C7. Earns its bundle cost** | Broadly used ⇒ worth shipping to _every_ consumer. | Used across most apps. | Used by one app / one design ⇒ it belongs in that app. |
34
+ | # | Criterion | PASS means | FAIL means (→ compose) |
35
+ | ----------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
36
+ | **C1. Universal, not design-specific** | Needed by many apps across domains; not a recreation of one design's block. | A generic capability (a select, a table, a date picker). | "ACME Hero", "AcmePricingTable", "this dashboard's header". |
37
+ | **C2. Encapsulates reusable BEHAVIOR** | Owns non-trivial state / keyboard / focus / ARIA that must not be re-implemented per app. | Listbox navigation, dialog focus-trap, table sort/select, async load. | Pure static layout/visual arrangement (a hero, a footer, a banner). |
38
+ | **C3. Not expressible by composing existing primitives + tokens** | You genuinely cannot build it from `Card`/`Button`/`Text`/`Grid`/`Flex`/… + token overrides. | A new interaction primitive with no existing equivalent. | You _can_ build it today from primitives + tokens (then you must). |
39
+ | **C4. Single responsibility + controlled-vocabulary API** | One job; maps to `value`/`defaultValue`/`onValueChange`, `size ∈ xs\|sm\|md\|lg`, `tone`, etc.; generalizes beyond one screen. | `Select`, `Switch`, `Pagination`. | A grab-bag "Section"/"Block"/"Layout" with a bespoke, screen-shaped API. |
40
+ | **C5. Fully token-themeable, zero baked brand** | Appearance is 100% token-driven; works for every brand with no code change. | Reads `hsl(var(--…))` / semantic tokens only. | Needs baked colors / raw hex / per-brand styling to look right. |
41
+ | **C6. Earns the international contract** | Broad reuse justifies the full i18n (`t()`/`Intl`) + WAI-ARIA APG + WCAG 2.2 AA + RTL + a11y-test + MCP-catalog cost. | A control everyone uses and that needs correct ARIA. | A one-off where that cost is pure overhead. |
42
+ | **C7. Named pattern + neutral defaults** | A pattern named in at least TWO of WAI-ARIA APG, antd, MUI, shadcn (or an ISO/CLDR need), whose defaults encode no one product's policy. | `Select` (APG combobox · antd · MUI · shadcn), `Calendar` (CLDR). | A screen-shaped invention no reference names ⇒ compose; one product's policy baked in ⇒ that product's preset. |
43
43
 
44
44
  > **Heuristic shortcuts** (a single one is usually enough to send it to composition):
45
45
  >
@@ -48,6 +48,33 @@ Before creating OR proposing a framework component, evaluate **every** criterion
48
48
  > DashboardHeader)?" → **yes ⇒ compose** (C1).
49
49
  > - "Does it own **any real behavior**, or is it just **layout + content + color**?" → layout only ⇒ **compose** (C2).
50
50
 
51
+ ### 2.1 The admission rule — usage decides the TIER, never the verdict (v32, #1205 decision B4)
52
+
53
+ C7 used to read "earns its bundle cost — used across most apps". That made usage the verdict, and
54
+ usage in our own repos measures **migration exposure, not worldwide need**: a date-range picker
55
+ nobody in GoDX happens to import yet is still a standard form primitive every adopter expects. The
56
+ rule that replaced it (R4, agreed by both reviewers; JEV 0.87–0.89):
57
+
58
+ A **core** component must
59
+
60
+ 1. **own reusable behaviour** — keyboard, focus, ARIA, timing, measurement — **measured in the
61
+ source**, not claimed in the tagline (C2);
62
+ 2. **match a pattern named in at least two of** WAI-ARIA APG, antd, MUI, shadcn, or an ISO/CLDR
63
+ need (C7);
64
+ 3. **not be composable** from primitives plus tokens — if it is, it is a recipe in `docs/` (C3);
65
+ 4. **have neutral defaults** — a component that encodes one product's policy (its roles, its
66
+ branches, its identity mark) belongs in that product's preset, e.g. `@godxjp/ui/themes/godx`
67
+ (C5 + C7).
68
+
69
+ Then **usage picks the tier**, it never removes a component on its own:
70
+
71
+ | Passes the rule, and … | Ships from | Notes |
72
+ | ---------------------------------------------- | -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
73
+ | imported by consumers | `@godxjp/ui` (core) | The default agent context; the full contract. |
74
+ | **no consumer imports it yet** | **`@godxjp/ui/lab`** | Same gates as core (tests, a11y, i18n, tokens) and semver'd; left out of the default MCP listings. **Promoted** to core once imported by **≥ 2 repos**; **demotion is never automatic**. |
75
+ | a cohesive family with its own audience (chat) | its own package (`@godxjp/chat`) | Composes the kit's public API only. |
76
+ | fails the rule | — | A recipe in `docs/`, or the product's preset. |
77
+
51
78
  ### Decision flow
52
79
 
53
80
  ```
@@ -57,7 +84,7 @@ new UI need
57
84
  │ (Select = searchable/async; AppShell/PageContainer = chrome; DataTable = grids)
58
85
  │
59
86
  ├─ Run the Framework-Component Test (C1–C7).
60
- │ ├─ ALL pass → it MAY be a framework component
87
+ │ ├─ ALL pass → it MAY be a framework component; §2.1 picks core vs `/lab` by usage
61
88
  │ │ → follow the full `godxjp-ui-component` contract (i18n/a11y/vocab/
62
89
  │ │ tokens/test/MCP/registry) before merging into src/components/.
63
90
  │ └─ ANY fail → it is a COMPOSITION PATTERN
@@ -72,20 +99,20 @@ new UI need
72
99
 
73
100
  ## 3. Worked examples
74
101
 
75
- | Thing | C1 | C2 | C3 | C4 | C5 | C6 | C7 | Verdict |
76
- | ------------------------------------------------------- | --- | --- | --- | --- | --- | --- | --- | ------------------------------------------------------------------------ |
77
- | `Select` (incl. search/async) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | **Framework component** |
78
- | `DataTable`, `Dialog`, `Calendar`, `Switch`, `Combobox` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | **Framework component** |
79
- | `StatCard` (+ `icon`) | ✅ | ➖ | ✅ | ✅ | ✅ | ✅ | ✅ | **Framework component** (a reusable KPI tile with a stable API + tokens) |
80
- | `ServiceLauncherCard` | ➖ | ❌ | ❌ | ✅ | ✅ | ➖ | ➖ | **Composition by the test — RETAINED as a recorded exception** (gh#814) |
81
- | `MegaMenu` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ➖ | **Framework component** — the instructive contrast with Hero, below |
82
- | Marketing **Hero** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **Composition** — section, static, composable, brand-specific |
83
- | **Navbar** / **Footer** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **Composition** — layout of `Text`/`Button`/`Flex` |
84
- | **PricingTable** / feature grid | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **Composition** — `ResponsiveGrid` + `Card` |
85
- | Dashboard **page layout** | ❌ | ❌ | ❌ | ❌ | ➖ | ❌ | ❌ | **Composition** — `AppShell` + `PageContainer` + `ResponsiveGrid` |
86
- | "Icon medallion" | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | **Composition** — `Avatar` (square) + a Lucide glyph |
87
- | **Section** / **Band** (full-bleed + measured column) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | **Composition** — `<section>` + `Flex measure` + `pad`; see §3.1 |
88
- | `TenantTheme` (customer hex at runtime) | ✅ | ➖ | ❌ | ❌ | ✅ | ❌ | ➖ | **Composition + a published FUNCTION** — `tenantTheme()`; see §3.2 |
102
+ | Thing | C1 | C2 | C3 | C4 | C5 | C6 | C7 | Verdict |
103
+ | ------------------------------------------------------- | --- | --- | --- | --- | --- | --- | --- | ------------------------------------------------------------------------------------------------------------------ |
104
+ | `Select` (incl. search/async) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | **Framework component** |
105
+ | `DataTable`, `Dialog`, `Calendar`, `Switch`, `Combobox` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | **Framework component** |
106
+ | `StatCard` (+ `icon`) | ✅ | ➖ | ✅ | ✅ | ✅ | ✅ | ✅ | **Framework component** (a reusable KPI tile with a stable API + tokens) |
107
+ | `ServiceLauncherCard` | ➖ | ❌ | ❌ | ✅ | ✅ | ➖ | ➖ | **Composition by the test — RETAINED as a recorded exception** (gh#814) |
108
+ | `MegaMenu` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | **Framework component, `@godxjp/ui/lab` tier** (no consumer yet, §2.1) — the instructive contrast with Hero, below |
109
+ | Marketing **Hero** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **Composition** — section, static, composable, brand-specific |
110
+ | **Navbar** / **Footer** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **Composition** — layout of `Text`/`Button`/`Flex` |
111
+ | **PricingTable** / feature grid | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **Composition** — `ResponsiveGrid` + `Card` |
112
+ | Dashboard **page layout** | ❌ | ❌ | ❌ | ❌ | ➖ | ❌ | ❌ | **Composition** — `AppShell` + `PageContainer` + `ResponsiveGrid` |
113
+ | "Icon medallion" | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | **Composition** — `Avatar` (square) + a Lucide glyph |
114
+ | **Section** / **Band** (full-bleed + measured column) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | **Composition** — `<section>` + `Flex measure` + `pad`; see §3.1 |
115
+ | `TenantTheme` (customer hex at runtime) | ✅ | ➖ | ❌ | ❌ | ✅ | ❌ | ➖ | **Composition + a published FUNCTION** — `tenantTheme()`; see §3.2 |
89
116
 
90
117
  `✅ pass · ❌ fail · ➖ borderline`. **StatCard** is the instructive borderline: C2 is weak (it owns little behavior), but it is a universal KPI tile with a controlled API, fully tokenized, broadly reused — so it earns its place. A **Hero** fails six of seven; it is unambiguously a composition.
91
118
 
@@ -99,12 +126,10 @@ get wrong: `DropdownMenu` looks like the answer and is the WRONG primitive, not
99
126
  is react-aria-components `Menu`, i.e. `role="menu"` / `role="menuitem"`, which announces a set of
100
127
  site links as a desktop application menu and takes Tab out of the widget. The APG says so itself in
101
128
  its Disclosure Navigation example. A recipe over `DropdownMenu` would therefore ship the classic
102
- megamenu accessibility defect, which is exactly the case C3 is asking about. **C7 is the weak
103
- one** — marked ➖ deliberately: this is a JP business-software library, and a marketing megamenu is
104
- not in every consumer's build. It is kept because the same disclosure bar is what an admin console
105
- with several product areas needs, and because the cost is one file with no new dependency (no
106
- `@radix-ui/react-navigation-menu`, no animation runtime). Compare `StatCard`, whose borderline is
107
- C2 rather than C7.
129
+ megamenu accessibility defect, which is exactly the case C3 is asking about. **C7 passes** under
130
+ the v32 rule — APG names the Disclosure Navigation pattern and antd ships `Menu mode="horizontal"`
131
+ with popup panels. What the old C7 ("used across most apps") marked ➖ is now a TIER question, not a
132
+ verdict: no GoDX repo imports it yet, so it ships from `@godxjp/ui/lab` (§2.1) until two do.
108
133
 
109
134
  **ServiceLauncherCard is the ONE recorded exception, and it is recorded so that it stays one.** It shipped before the test was run against it, and when the test was run it came back with two hard FAILs: **C2** — no state, no keyboard handling, no focus management, its only ARIA three static attributes — and **C3** — its own imports are `Card` + `CardContent` + `Badge` + a Lucide glyph, so "could I build this right now from primitives?" is yes. By §2 that makes it a composition pattern. It is kept anyway because `src/components/layout/app-launcher.tsx` consumes it: it is an internal building block of a component that **does** pass, so the question was never "should it exist" but "should it be PUBLIC", and removing a public export is breaking. Keeping it public was the cheaper call and the ledger lives on gh#814 and at the top of `src/components/data-display/service-launcher-card.tsx`. **Consumers should compose `Card` + `Badge` for a service tile** — reach for `ServiceLauncherCard` only to match `AppLauncher`'s own tiles — and this row is not precedent for adding another static tile to `src/components/`.
110
135
 
@@ -116,8 +141,8 @@ turned out to be neither "add a component" nor "do nothing".
116
141
  **A `Section` component is refused, and it is refused for Hero's reasons.** It owns no state, no
117
142
  keyboard, no focus and no ARIA a `<section aria-labelledby>` does not already have (**C2**); it is
118
143
  `<section>` + `Flex` + padding + a max-width, i.e. buildable today (**C3**); its API would be the
119
- grab-bag `band` / `measure` / `glow` / `surface` / `bleed` that **C4** names by name; and a JP
120
- business-software library would be shipping a marketing band to every consumer (**C7**). One
144
+ grab-bag `band` / `measure` / `glow` / `surface` / `bleed` that **C4** names by name; and no
145
+ reference library names a "band" component — it is a page section, not a pattern (**C7**). One
121
146
  criterion of seven passes. Nothing about that is close.
122
147
 
123
148
  **But "do nothing" was also refused, and that is the part worth remembering.** The doctrine's own
@@ -163,7 +188,7 @@ copying it would have been the third private version of the same thing.
163
188
  | **C4** single responsibility + controlled vocabulary | **FAIL** | The requested API is `primary` / `secondary` / `primaryForeground` / `tenant`. There is no `value`/`defaultValue`/`onValueChange`, no `size`, no `tone` — it is a configuration carrier with a screen-shaped API, which is the shape C4 names by name. |
164
189
  | **C5** token-themeable, zero baked brand | **PASS** (vacuously) | It IS the theming mechanism; it bakes nothing. |
165
190
  | **C6** earns the international contract | **FAIL** | It renders no text, has no role, no keyboard and no ARIA, so there is nothing for `t()` or the APG to say. The accessibility content of this feature is CONTRAST, and that lives in the computation and its tests — not in a component contract. |
166
- | **C7** earns its bundle cost | ➖ | The arithmetic is ~60 lines and every consumer that stores a customer colour needs it. A React wrapper around a `<div>` is not what earns that. |
191
+ | **C7** named pattern + neutral defaults | ➖ | The need is universal and the defaults are neutral, but no reference names a theming WRAPPER component — antd's ConfigProvider and MUI's ThemeProvider configure tokens, which is what the published function does. A React wrapper around a `<div>` is not the pattern. |
167
192
 
168
193
  **Three hard FAILs. Verdict: composition pattern — plus a published function.** `tenantTheme(hex)`
169
194
  in `@godxjp/ui/app` returns the declarations (`--primary`, `--primary-foreground`, `--ring`, and
@@ -2,7 +2,7 @@
2
2
 
3
3
  Read this once; the audit enforces it. Everything else in `docs/` is for contributors.
4
4
 
5
- 1. Load styles with `@import "@godxjp/ui/styles"` (fonts bundled, 729 sliced woff2 faces, ~11.7 MB), `@import "@godxjp/ui/styles/core"` (no `@font-face` at all), `@import "@godxjp/ui/styles/core-with-fallbacks"` (`core` + six `local()`-only metric-matched faces, still zero network bytes — for when you supply Noto Sans JP yourself) or `@import "@godxjp/ui/styles/core-with-jis-level1"` (`core-with-fallbacks` + Noto Sans JP merged to JIS X 0208 level 1: **3 requests, ~1.53 MB, once** instead of ~8 font requests on every navigation — for a Japanese app that wants the bundled face). Never cherry-pick `*-layout.css`.
5
+ 1. Load styles with `import "@godxjp/ui/styles.css"` (precompiled, no Tailwind needed) or `@import "@godxjp/ui/styles"` (Tailwind v4). Neither ships font files: fonts are opt-in since v32 (`pnpm add @fontsource/noto-sans-jp @fontsource/m-plus-2`, then `@import "@godxjp/ui/styles/fonts.css"` after the styles import; the GoDX preset does this for you). Never cherry-pick `*-layout.css`.
6
6
  2. **Mount `<AppProvider defaultLocale="…">` once, at the root.** Without it the kit's OWN strings (dialog close/cancel/delete, counters, picker labels) fall to the resting locale `vi` and pickers to UTC — measured in a Japanese app as Vietnamese buttons, silently (gh#1005). A development build now warns once when a kit component renders outside it; `syncI18nLocale(locale, fallback)` is the escape for an app that truly cannot mount the provider. Every page is `<PageContainer title subtitle extra footer>`; its sections are spaced by the page. Group items inside a section with `<Flex direction="col" gap>` or `<ResponsiveGrid>`.
7
7
  3. No Tailwind layout on your own elements: no `flex`, `grid`, `gap-*`, `p-*`, `m-*`, `space-*`. Rows are `<Flex>` (default row), stacks are `<Flex direction="col">`, grids are `<ResponsiveGrid>`.
8
8
  4. No hand-rolled surfaces: no `rounded-* border bg-*` divs. A box is `Card`, a pill is `Badge`, a person is `Avatar`, a row is `ListRow`, a label/value pair is `Descriptions`, an empty area is `EmptyState`, a read-only sample of a colour the USER chose is `Swatch`. A LIST of those rows is `<Flex as="ul" marker="none" direction="col" gap="none">` with `<ListRow as="li">` children — `marker="none"` keeps the `<ul>`, the `<li>` semantics and the gap token while dropping the bullet and the indent. Never a raw `<ul>`/`<ol>` (it carries no gap token), never `<div role="list">` + `<div role="listitem">`, and never a wrapper around each row: the divider is `:not(:last-child)` among siblings, so a row alone in its own wrapper is always the last one and EVERY divider disappears silently. A bulleted prose list is the same `<Flex as="ul">` without `marker`.
@@ -99,79 +99,43 @@ hand in the generated file, and an explicit value always beats a derived default
99
99
  ## Internal apps — zero config
100
100
 
101
101
  ```ts
102
- import "@godxjp/ui/styles";
102
+ import "@godxjp/ui/styles.css"; // precompiled, no Tailwind needed
103
103
  ```
104
104
 
105
- That single import ships everything: colors, the bundled fonts (**Noto Sans JP** as the default face — including the Vietnamese coverage — with **M PLUS 2** as the fallback, self-bundled & subsetted), the golden-ratio type scale, spacing grid, radius scale, shadow ramp, and all component CSS. Nothing else to configure. Pick density per surface with `<PageContainer density="compact | default | comfortable">`.
106
-
107
- ---
108
-
109
- ## CSS entries — `styles`, `styles/core`, `styles/core-with-fallbacks`, `styles/core-with-jis-level1`, nothing smaller
110
-
111
- `@godxjp/ui/styles` bundles every component's CSS plus the fonts: **729 woff2 subsets, ~11.7 MB on disk** at the current @fontsource versions (issue #535 measured 737 files / 13 MB in a real consumer build). When you manage fonts yourself (next/font, a system stack, a browser extension that must not ship font files), load the same layers without the faces:
105
+ With Tailwind v4, import the source entry instead and keep your `@source` lines:
112
106
 
113
107
  ```css
114
- @import "@godxjp/ui/styles/core"; /* every component layer, no @font-face */
108
+ @import "@godxjp/ui/styles";
115
109
  ```
116
110
 
117
- `core` carries **zero** `@font-face` — `grep -c '@font-face' node_modules/@godxjp/ui/dist/styles/core.css` → `0` — and that number is the point of it. If you supply Noto Sans JP yourself and also want the cold-visit swap to stop reflowing the page (issue #475), take the third entry: `core` plus the six metric-matched fallback faces, every one `local()`-only, so the extra cost over `core` is **zero network bytes**.
111
+ Either import ships colors, the golden-ratio type scale, spacing grid, radius scale, shadow ramp, and all component CSS. **It ships no font files** (opt-in since v32, below). Nothing else to configure. Pick density per surface with `<PageContainer density="compact | default | comfortable">`.
118
112
 
119
- ```css
120
- @import "@godxjp/ui/styles/core-with-fallbacks"; /* core + 6 local()-only faces */
121
- ```
122
-
123
- It declares the faces and nothing else — name the family yourself, directly after your own face:
113
+ ---
124
114
 
125
- ```css
126
- :root {
127
- --font-sans-base: "Noto Sans JP", "Noto Sans JP Fallback", system-ui, sans-serif;
128
- }
129
- ```
115
+ ## CSS entries and fonts — `styles.css`, `styles`, `styles/fonts`, nothing smaller
130
116
 
131
- ### A Japanese app that wants the bundled face anyway
117
+ `@godxjp/ui/styles` carries every component's CSS and **no `@font-face`**. Fonts are a separate, opt-in sheet, so an app that manages its own faces (next/font, a system stack, a browser extension that must not ship font files) pays for none of them:
132
118
 
133
- The slicing is what costs the round-trips: a browser cannot know which of the 729 faces it needs
134
- until it has laid out and measured the text, so every new screen discovers a new handful. The
135
- fourth entry replaces them with **one merged file per weight**, JIS X 0208 level 1 — 2965 kanji
136
- plus kana, symbols, Cyrillic, Latin and Vietnamese, 3861 code points:
119
+ ```bash
120
+ pnpm add @fontsource/noto-sans-jp @fontsource/m-plus-2
121
+ ```
137
122
 
138
123
  ```css
139
- @import "@godxjp/ui/styles/core-with-jis-level1"; /* core + fallbacks + 3 merged faces */
124
+ @import "@godxjp/ui/styles";
125
+ @import "@godxjp/ui/styles/fonts.css"; /* after the styles import: Noto Sans JP + M PLUS 2 */
140
126
  ```
141
127
 
142
- Measured against the sliced entry, Noto Sans JP only, weights 400/500/700:
143
-
144
- | distinct Japanese characters on screen | `styles` | `core-with-jis-level1` |
145
- | --------------------------------------------- | -------------------------: | -----------------------: |
146
- | 448 — this package's own `ja` labels, no data | 99 requests · 1,051,268 B | 3 requests · 1,534,636 B |
147
- | 694 — labels plus names, addresses, prose | 150 requests · 1,772,728 B | 3 requests · 1,534,636 B |
148
- | 772 — a little more prose | 216 requests · 3,491,840 B | 3 requests · 1,534,636 B |
149
-
150
- The left column grows with your content and is paid again on every screen that renders a character
151
- no earlier screen did; the right column does not move. **Below roughly 620 distinct characters the
152
- slices are fewer bytes** (in ~100 requests), so an app that renders less Japanese than this
153
- package's own menu labels should stay on `styles`.
154
-
155
- What is deliberately not in it: **JIS level 2** (rows 48–84), which would roughly double the bytes
156
- to cover kanji that appear in rare surnames — those resolve from the platform Japanese face, so
157
- name one after ours. **M PLUS 2**, which sits behind Noto Sans JP in every stack this package ships
158
- and is therefore never downloaded today either; merging it would add 1,089,676 bytes for nothing.
159
- And **no `unicode-range`** on the merged faces, because per-range discovery is the mechanism the
160
- entry exists to remove — the cost of that is a Latin-only screen downloading its weight's ~500 KB
161
- rather than the ~25 KB of Latin inside it.
162
-
163
- Like `core-with-fallbacks`, it declares faces and does not set `--font-sans-base`; name a platform
164
- Japanese face after ours so level 2 kanji have somewhere to land:
128
+ The GoDX preset adds the fonts import for you. The font sheet declares the faces and sets `--font-sans-base` to the bundled stack; if you supply the face yourself, skip it and name the family directly:
165
129
 
166
130
  ```css
167
131
  :root {
168
- --font-sans-base:
169
- "Noto Sans JP", "Noto Sans JP Fallback", "Hiragino Sans", "Yu Gothic Medium", Meiryo, system-ui,
170
- sans-serif;
132
+ --font-sans-base: "Noto Sans JP", "Noto Sans JP Fallback", system-ui, sans-serif;
171
133
  }
172
134
  ```
173
135
 
174
- The per-layer files (`control`, `card-layout`, `navigation-layout`, …) are the package's internal structure, **not a public menu**. Layers share rules — a Select's rows and a menu's surface, a form's rhythm, a card's header type — so a page that loads a subset renders naked menus and unsized rows with no error. The runtime `visual-audit` reports it as `css-layers-missing`.
136
+ Keep `"Noto Sans JP Fallback"` directly after your own Noto Sans JP: it is the metric-matched local face that stops the cold-visit swap from reflowing the page (issue #475).
137
+
138
+ The per-layer files (`control`, `card-layout`, `navigation-layout`, …) are the package's internal structure, **not a public menu**. Layers share rules — a Select's rows and a menu's surface, a form's rhythm, a card's header type — so a page that loads a subset renders naked menus and unsized rows with no error. The runtime `visual-audit` reports it as `css-layers-missing`. The one supported way to ship less than the full entry is `npx godxjp-ui prune-css`, which slices along the dependency graph the package ships.
175
139
 
176
140
  ---
177
141
 
@@ -0,0 +1,98 @@
1
+ # Migrating to @godxjp/ui v32
2
+
3
+ v32 turns `@godxjp/ui` from a framework tuned for GoDX products into a framework any team can adopt:
4
+ neutral defaults, open localization, an inert install, styles that work without Tailwind, and a
5
+ smaller, more honest component surface. GoDX products keep their exact look through the GoDX preset.
6
+ All six packages (`@godxjp/ui`, `@godxjp/ui-mcp`, `@godxjp/markdown`, `@godxjp/editor`,
7
+ `@godxjp/block-editor` and the new `@godxjp/chat`) move to 32.0.0 together.
8
+
9
+ Most of the upgrade is mechanical. Run the codemod first, then read the list below for what it
10
+ reports but cannot decide.
11
+
12
+ ```sh
13
+ npx godxjp-ui codemod v32 src --dry-run # preview
14
+ npx godxjp-ui codemod v32 src --godx # a GoDX product: keep today's look
15
+ npx godxjp-ui codemod v32 src # any other app
16
+ ```
17
+
18
+ Off-cycle approved: owner, 2026-10-09 — the single v32 batch decided on godx-jp/godxjp-ui#1205
19
+ (recorded by Claude from the owner's instruction "do it all in one batch, one major, one CD run").
20
+
21
+ ## Breaking changes
22
+
23
+ ### Neutral identity; GoDX is a preset (#1220)
24
+
25
+ - The default `--primary` and `--brand` are a neutral ink (`240 6% 10%` light, `0 0% 98%` dark), not
26
+ the GoDX violet. Hover and pressed steps stay visible at both ends of the lightness ramp.
27
+ - `AuthIdentity` renders no mark when `brand` is omitted, unless a preset provides one. `null` always
28
+ renders none.
29
+ - The email brand mark has no default label.
30
+ - The GoDX look ships as `godxPreset` (`@godxjp/ui/themes/godx`) plus `@godxjp/ui/themes/godx.css`.
31
+
32
+ ### Locale defaults and open localization (#1219)
33
+
34
+ - `AppProvider`'s `defaultLocale` now defaults to `<html lang>` when it names a registered locale, then
35
+ the preset's locale, then `en`. It used to be `vi`.
36
+ - `AppLocale` is `string` (any BCP-47 tag). The three built-in packs are `BuiltInLocale`.
37
+ - Register another locale with `registerLocale({ code, messages, dateFns, dayPicker })`. Date order,
38
+ separators and the first day of the week come from `Intl`.
39
+ - `registerMessages` throws for an unregistered locale.
40
+ - Server rendering: pass `defaultLocale` explicitly and wrap each request in
41
+ `runWithAppSettings(settings, render)`, so concurrent requests cannot read each other's locale,
42
+ timezone or formats.
43
+
44
+ ### Fonts are opt-in; styles work without Tailwind (#1221)
45
+
46
+ - `@godxjp/ui/styles` no longer imports the Japanese fonts. Add
47
+ `@godxjp/ui/styles/fonts.css` after it (the codemod does), and install `@fontsource/noto-sans-jp`
48
+ and `@fontsource/m-plus-2`, which are now optional peers.
49
+ - New: `@godxjp/ui/styles.css`, a precompiled stylesheet for apps without Tailwind.
50
+
51
+ ### Install and package (#1215, #1216, #1222)
52
+
53
+ - Installing writes nothing into your project. Run `npx godxjp-ui sync-rules` (preview with
54
+ `--dry-run`) after installing and after each upgrade to refresh the agent files.
55
+ - `sideEffects` now lists CSS, so bundlers keep `@godxjp/ui/styles`.
56
+ - `react-aria-components`, `react-aria` and `react-stately` are pinned in lockstep (1.22.0 / 3.53.0 /
57
+ 3.51.0), so an install resolves one copy of each. `engines.node` is `>=22`.
58
+
59
+ ### Component surface (#1223)
60
+
61
+ The catalog goes from 185 entries to 161: 134 in core, 15 in `@godxjp/ui/lab`, 12 in sibling
62
+ packages. The codemod rewrites every import below; the "you finish" column is printed as a `note`.
63
+
64
+ | v31 | v32 | You finish |
65
+ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------- | ---------------------------------------------------------------------- |
66
+ | `Banner` | `Alert` | add `variant="banner"` |
67
+ | `Callout` | `Alert` | add `variant="callout"`; it keeps `role="note"` |
68
+ | `TagInput` | `Select` | add `mode="tags" open={false}`; `Select` takes no `ref` |
69
+ | `Thumbnail` | `Image` | add `fit="intrinsic" preview={false}` |
70
+ | `HoverCard` (+ Trigger, Content) | `Popover` (+ Trigger, Content) | add `openOn="hover"`; `openDelay` / `closeDelay` keep working |
71
+ | `AuthShell` | `CenteredShell` | add `variant="auth"`; `variant="canonical"` becomes `"auth-canonical"` |
72
+ | `SpaceCompact` | `Flex` | add `attached`; `orientation`/`vertical` become `direction="col"` |
73
+ | `AppSettingToggle` | `AppSettingPicker` | add `menu={false}` |
74
+ | `Title`, `Paragraph`, `Typography` | `Heading`, `Text as="p"`, `Prose` | the antd compatibility shims are removed |
75
+ | `SkeletonAvatar`, `SkeletonButton`, `SkeletonImage`, `SkeletonNode` | — | removed: use `SkeletonArticle avatar` or a sized `Skeleton` |
76
+ | `FloatButton`, `DraggablePanel`, `PageCover`, `Masonry`, `LegalDocumentShell`, `Marquee`, `TextDiff`, `OrgChart`, `Carousel`, `TimelineGrid`, `RangeTimeline`, `EmojiPicker`, `SortableList`, `MegaMenu`, `Anchor` | same names from `@godxjp/ui/lab` | nothing: same API, opt-in subpath |
77
+ | `ChatBubble`, `ChatBubbleList`, `ChatComposer`, `ChatSuggestion`, `Conversations`, `ThoughtChain`, `Welcome`, `Attachments` | same names from `@godxjp/chat` | install `@godxjp/chat` |
78
+
79
+ Unchanged: `SplitPane` stays (its merge into `MasterDetail` failed the parity test), `Actions` stays
80
+ in `@godxjp/ui/general`, and `FilterBar` stays an alias of `Toolbar`. The `./ui/*` subpaths are
81
+ deprecated re-exports and will be removed in a later major.
82
+
83
+ ## How to upgrade
84
+
85
+ 1. Upgrade all six packages to 32.0.0 together (`@godxjp/chat` only if you use the chat components).
86
+ 2. Run `npx godxjp-ui codemod v32 <src> --dry-run`, review, then run it without `--dry-run`. Use
87
+ `--godx` for GoDX products.
88
+ 3. Finish every `note` the codemod printed (a component move that changes props, an `AppProvider`
89
+ that relied on the old `vi` default).
90
+ 4. Install the font packages if you keep the Japanese fonts.
91
+ 5. Run `npx godxjp-ui sync-rules` and restart your coding agent.
92
+ 6. Build, then compare a few screens: with the GoDX preset they should be pixel-identical to 31.x.
93
+
94
+ ## Support
95
+
96
+ v31 receives no further releases. A security fix for v31 is an owner exception, decided case by case.
97
+ From v32 on, a new major ships at most once per quarter, and the publish job refuses a major whose
98
+ migration note is missing or incomplete.