@godxjp/ui 19.0.0 → 19.2.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 (445) hide show
  1. package/README.md +25 -128
  2. package/dist/app/app-provider.d.ts +1 -1
  3. package/dist/app/app-provider.js +3 -0
  4. package/dist/app/theme-axes.d.ts +4 -15
  5. package/dist/app/timezones.d.ts +1 -4
  6. package/dist/components/charts/area-chart.d.ts +2 -3
  7. package/dist/components/charts/bar-chart.d.ts +2 -3
  8. package/dist/components/charts/chart-frame.d.ts +7 -16
  9. package/dist/components/charts/chart-summary.d.ts +2 -2
  10. package/dist/components/charts/compact-bar-trend.d.ts +9 -24
  11. package/dist/components/charts/index.d.ts +1 -6
  12. package/dist/components/data-display/badge.d.ts +2 -12
  13. package/dist/components/data-display/card.d.ts +21 -41
  14. package/dist/components/data-display/carousel.d.ts +1 -2
  15. package/dist/components/data-display/code-block.d.ts +4 -0
  16. package/dist/components/data-display/code-block.js +24 -0
  17. package/dist/components/data-display/data-table.d.ts +15 -37
  18. package/dist/components/data-display/data-table.js +1 -3
  19. package/dist/components/data-display/descriptions.d.ts +2 -6
  20. package/dist/components/data-display/descriptions.js +0 -2
  21. package/dist/components/data-display/index.d.ts +4 -0
  22. package/dist/components/data-display/index.js +4 -0
  23. package/dist/components/data-display/list-row.d.ts +3 -22
  24. package/dist/components/data-display/permission-matrix.d.ts +7 -20
  25. package/dist/components/data-display/progress.d.ts +1 -1
  26. package/dist/components/data-display/prose.d.ts +4 -0
  27. package/dist/components/data-display/prose.js +20 -0
  28. package/dist/components/data-display/service-launcher-card.d.ts +3 -10
  29. package/dist/components/data-display/table.d.ts +20 -80
  30. package/dist/components/data-display/table.js +0 -3
  31. package/dist/components/data-display/timeline.d.ts +3 -5
  32. package/dist/components/data-entry/branch-scope-picker.d.ts +2 -19
  33. package/dist/components/data-entry/branch-scope-picker.js +0 -1
  34. package/dist/components/data-entry/calendar.d.ts +3 -2
  35. package/dist/components/data-entry/calendar.js +58 -3
  36. package/dist/components/data-entry/cascader.js +3 -1
  37. package/dist/components/data-entry/checkbox-group.js +12 -5
  38. package/dist/components/data-entry/checkbox.js +30 -21
  39. package/dist/components/data-entry/command-palette.d.ts +8 -22
  40. package/dist/components/data-entry/date-picker.d.ts +4 -5
  41. package/dist/components/data-entry/date-picker.js +12 -3
  42. package/dist/components/data-entry/date-range-picker.d.ts +1 -1
  43. package/dist/components/data-entry/date-range-picker.js +17 -6
  44. package/dist/components/data-entry/form-errors.d.ts +7 -18
  45. package/dist/components/data-entry/form-field.d.ts +1 -1
  46. package/dist/components/data-entry/form-field.js +15 -6
  47. package/dist/components/data-entry/form.d.ts +1 -9
  48. package/dist/components/data-entry/input.d.ts +16 -14
  49. package/dist/components/data-entry/input.js +13 -3
  50. package/dist/components/data-entry/month-picker.js +6 -4
  51. package/dist/components/data-entry/month-range-picker.d.ts +4 -6
  52. package/dist/components/data-entry/month-range-picker.js +11 -5
  53. package/dist/components/data-entry/number-input.d.ts +1 -5
  54. package/dist/components/data-entry/number-input.js +1 -0
  55. package/dist/components/data-entry/radio.js +19 -6
  56. package/dist/components/data-entry/search-select.d.ts +3 -5
  57. package/dist/components/data-entry/search-select.js +8 -2
  58. package/dist/components/data-entry/select.d.ts +15 -2
  59. package/dist/components/data-entry/select.js +57 -10
  60. package/dist/components/data-entry/switch.js +9 -2
  61. package/dist/components/data-entry/textarea.d.ts +10 -16
  62. package/dist/components/data-entry/textarea.js +8 -1
  63. package/dist/components/data-entry/time-picker.d.ts +3 -5
  64. package/dist/components/data-entry/tree-select.js +3 -1
  65. package/dist/components/data-entry/upload-types.d.ts +1 -5
  66. package/dist/components/data-entry/use-upload-draft.d.ts +0 -4
  67. package/dist/components/feedback/dialog.d.ts +6 -15
  68. package/dist/components/feedback/overlay-header-tone.d.ts +1 -1
  69. package/dist/components/feedback/sheet.d.ts +3 -10
  70. package/dist/components/feedback/sheet.js +1 -1
  71. package/dist/components/feedback/sonner.js +2 -3
  72. package/dist/components/general/activity.d.ts +4 -30
  73. package/dist/components/general/button.js +1 -10
  74. package/dist/components/general/logo.d.ts +6 -28
  75. package/dist/components/general/reveal.d.ts +3 -9
  76. package/dist/components/general/typography.d.ts +1 -3
  77. package/dist/components/layout/account-chip.d.ts +8 -0
  78. package/dist/components/layout/account-chip.js +45 -0
  79. package/dist/components/layout/auth-divider.d.ts +2 -9
  80. package/dist/components/layout/auth-shell.d.ts +1 -14
  81. package/dist/components/layout/breadcrumb.d.ts +1 -5
  82. package/dist/components/layout/centered-shell.d.ts +4 -18
  83. package/dist/components/layout/error-surface.d.ts +11 -28
  84. package/dist/components/layout/error-surface.js +4 -1
  85. package/dist/components/layout/index.d.ts +2 -0
  86. package/dist/components/layout/index.js +2 -0
  87. package/dist/components/layout/legal-document-shell.d.ts +5 -28
  88. package/dist/components/layout/master-detail.d.ts +2 -18
  89. package/dist/components/layout/page-container.js +0 -1
  90. package/dist/components/layout/responsive-grid.d.ts +6 -1
  91. package/dist/components/layout/responsive-grid.js +9 -2
  92. package/dist/components/layout/service-role-panel.d.ts +7 -19
  93. package/dist/components/layout/sidebar.d.ts +5 -27
  94. package/dist/components/layout/sidebar.js +0 -1
  95. package/dist/components/layout/split-pane.d.ts +0 -7
  96. package/dist/components/layout/topbar.d.ts +1 -14
  97. package/dist/components/navigation/app-setting-picker.js +1 -3
  98. package/dist/components/navigation/filter-bar.d.ts +1 -6
  99. package/dist/components/navigation/pagination-utils.d.ts +2 -12
  100. package/dist/components/navigation/tabs-scroll.d.ts +2 -36
  101. package/dist/components/navigation/tabs.js +4 -8
  102. package/dist/components/query/data-state.d.ts +2 -2
  103. package/dist/components/ui/credential-reveal.d.ts +1 -4
  104. package/dist/components/ui/hover-card.d.ts +1 -2
  105. package/dist/components/ui/separator.d.ts +2 -15
  106. package/dist/components/ui/toggle-group.d.ts +1 -5
  107. package/dist/components/ui/toggle.d.ts +6 -31
  108. package/dist/email/brand-mark.d.ts +6 -34
  109. package/dist/email/color.d.ts +7 -17
  110. package/dist/email/geometry.d.ts +4 -8
  111. package/dist/email/index.d.ts +4 -48
  112. package/dist/email/inline-style.d.ts +3 -9
  113. package/dist/email/urgency.d.ts +2 -7
  114. package/dist/form/form-context.d.ts +2 -5
  115. package/dist/form/form-root.d.ts +1 -2
  116. package/dist/i18n/messages/en.json +4 -0
  117. package/dist/i18n/messages/ja.json +4 -0
  118. package/dist/i18n/messages/vi.json +4 -0
  119. package/dist/inertia/index.d.ts +2 -10
  120. package/dist/lib/control-styles.d.ts +10 -21
  121. package/dist/lib/control-styles.js +4 -6
  122. package/dist/lib/datetime/format-date.d.ts +1 -4
  123. package/dist/lib/field-a11y.d.ts +31 -36
  124. package/dist/lib/field-a11y.js +16 -2
  125. package/dist/lib/format.d.ts +4 -8
  126. package/dist/lib/hooks.d.ts +6 -12
  127. package/dist/lib/permission-grid.d.ts +3 -18
  128. package/dist/lib/query-error.d.ts +3 -3
  129. package/dist/props/components/app.prop.d.ts +19 -27
  130. package/dist/props/components/charts.prop.d.ts +2 -3
  131. package/dist/props/components/data-display.prop.d.ts +48 -72
  132. package/dist/props/components/data-entry.prop.d.ts +41 -30
  133. package/dist/props/components/form.prop.d.ts +2 -6
  134. package/dist/props/components/general.prop.d.ts +11 -27
  135. package/dist/props/components/layout.prop.d.ts +89 -260
  136. package/dist/props/components/navigation.prop.d.ts +27 -42
  137. package/dist/props/registry.d.ts +31 -0
  138. package/dist/props/registry.js +33 -0
  139. package/dist/props/vocabulary/data.prop.d.ts +18 -49
  140. package/dist/props/vocabulary/index.d.ts +1 -1
  141. package/dist/props/vocabulary/interaction.prop.d.ts +10 -12
  142. package/dist/props/vocabulary/layout.prop.d.ts +8 -30
  143. package/dist/props/vocabulary/shared.prop.d.ts +3 -2
  144. package/dist/styles/alert-layout.css +1 -32
  145. package/dist/styles/badge-layout.css +4 -18
  146. package/dist/styles/base.css +14 -113
  147. package/dist/styles/card-layout.css +6 -128
  148. package/dist/styles/chart-layout.css +2 -17
  149. package/dist/styles/control.css +380 -458
  150. package/dist/styles/core.css +21 -0
  151. package/dist/styles/data-display-layout.css +175 -94
  152. package/dist/styles/data-entry-layout.css +0 -45
  153. package/dist/styles/density.css +1 -30
  154. package/dist/styles/dialog-layout.css +5 -69
  155. package/dist/styles/focus-ring.css +13 -87
  156. package/dist/styles/fonts.css +1 -31
  157. package/dist/styles/form-layout.css +7 -91
  158. package/dist/styles/index.css +2 -20
  159. package/dist/styles/layout.css +38 -456
  160. package/dist/styles/logo-layout.css +1 -35
  161. package/dist/styles/motion.css +3 -42
  162. package/dist/styles/navigation-layout.css +3 -50
  163. package/dist/styles/shell-layout.css +37 -403
  164. package/dist/styles/table-layout.css +16 -274
  165. package/dist/styles/text-layout.css +7 -21
  166. package/dist/styles/toggle.css +1 -23
  167. package/dist/theme/dxs.canonical.css +1 -55
  168. package/dist/theme/example.service.css +1 -26
  169. package/dist/theme/famgia.service.css +5 -15
  170. package/dist/tokens/axes.css +3 -40
  171. package/dist/tokens/base.css +1 -4
  172. package/dist/tokens/components/activity.css +6 -42
  173. package/dist/tokens/components/badge.css +4 -13
  174. package/dist/tokens/components/banner.css +4 -9
  175. package/dist/tokens/components/card.css +32 -88
  176. package/dist/tokens/components/chart.css +9 -26
  177. package/dist/tokens/components/control.css +37 -222
  178. package/dist/tokens/components/data-display.css +28 -79
  179. package/dist/tokens/components/data-entry.css +5 -19
  180. package/dist/tokens/components/descriptions.css +7 -27
  181. package/dist/tokens/components/email.css +38 -84
  182. package/dist/tokens/components/error-surface.css +2 -18
  183. package/dist/tokens/components/feedback.css +27 -124
  184. package/dist/tokens/components/form.css +13 -45
  185. package/dist/tokens/components/legal-document.css +16 -41
  186. package/dist/tokens/components/list-row.css +11 -36
  187. package/dist/tokens/components/logo.css +2 -57
  188. package/dist/tokens/components/navigation.css +16 -94
  189. package/dist/tokens/components/scroll-area.css +2 -18
  190. package/dist/tokens/components/separator.css +8 -30
  191. package/dist/tokens/components/sheet.css +3 -14
  192. package/dist/tokens/components/shell.css +53 -307
  193. package/dist/tokens/components/sidebar.css +5 -22
  194. package/dist/tokens/components/table.css +19 -140
  195. package/dist/tokens/components/toggle.css +3 -65
  196. package/dist/tokens/components/upload.css +7 -43
  197. package/dist/tokens/foundation.css +108 -383
  198. package/dist/tokens/semantic/layout.css +33 -207
  199. package/docs/CANONICAL-CONTRACTS.md +206 -0
  200. package/docs/COMPONENTS.md +157 -0
  201. package/docs/COMPOSITION-VS-COMPONENT.md +105 -0
  202. package/docs/CONSUMER-RULES.md +14 -0
  203. package/docs/CUSTOMER-THEMING.md +162 -0
  204. package/docs/DATETIME.md +69 -0
  205. package/docs/DEVELOPMENT.md +173 -0
  206. package/docs/FORMS.md +143 -0
  207. package/docs/FRAME-A11Y-CI.md +267 -0
  208. package/docs/FRAME-COVERAGE-LEDGER.md +123 -0
  209. package/docs/FRAME-COVERAGE-REPORT.md +140 -0
  210. package/docs/FRAME-COVERAGE-STANDARD.md +65 -0
  211. package/docs/FRAME-COVERAGE.md +29 -0
  212. package/docs/PROPS-REGISTRY.md +61 -0
  213. package/docs/PROPS-VOCABULARY.md +100 -0
  214. package/docs/README.md +60 -0
  215. package/docs/REGISTRY.md +70 -0
  216. package/docs/SPACING.md +56 -0
  217. package/docs/STANDARDS-vocabulary-tokens.md +48 -0
  218. package/docs/TESTING.md +98 -0
  219. package/docs/TOKENS.md +347 -0
  220. package/docs/asset-modules.d.ts +46 -0
  221. package/docs/assets/cover-terrain.svg +6 -0
  222. package/docs/assets/portrait-amber.svg +5 -0
  223. package/docs/assets/portrait-clay.svg +5 -0
  224. package/docs/assets/portrait-indigo.svg +5 -0
  225. package/docs/assets/portrait-iris.svg +5 -0
  226. package/docs/assets/portrait-moss.svg +5 -0
  227. package/docs/assets/portrait-plum.svg +5 -0
  228. package/docs/assets/portrait-slate.svg +5 -0
  229. package/docs/charts/compact-bar-trend.tsx +328 -0
  230. package/docs/charts/size-tiers.tsx +192 -0
  231. package/docs/data-display/accordion.tsx +99 -0
  232. package/docs/data-display/avatar.tsx +355 -0
  233. package/docs/data-display/badge.tsx +247 -0
  234. package/docs/data-display/card/examples/detail-panel.tsx +106 -0
  235. package/docs/data-display/card/index.md +3 -0
  236. package/docs/data-display/card/index.tsx +285 -0
  237. package/docs/data-display/carousel.tsx +156 -0
  238. package/docs/data-display/charts.tsx +198 -0
  239. package/docs/data-display/code-block.tsx +90 -0
  240. package/docs/data-display/collapsible.tsx +162 -0
  241. package/docs/data-display/credential-reveal.tsx +145 -0
  242. package/docs/data-display/data-table/examples/approval-queue.tsx +212 -0
  243. package/docs/data-display/data-table/examples/grid-features.tsx +158 -0
  244. package/docs/data-display/data-table/examples/list-page.tsx +175 -0
  245. package/docs/data-display/data-table/index.md +5 -0
  246. package/docs/data-display/data-table/index.tsx +295 -0
  247. package/docs/data-display/descriptions.tsx +143 -0
  248. package/docs/data-display/empty-state.tsx +164 -0
  249. package/docs/data-display/hover-card.tsx +181 -0
  250. package/docs/data-display/list-row.tsx +420 -0
  251. package/docs/data-display/permission-matrix.tsx +184 -0
  252. package/docs/data-display/popover-touch.tsx +27 -0
  253. package/docs/data-display/popover.tsx +245 -0
  254. package/docs/data-display/progress.tsx +84 -0
  255. package/docs/data-display/prose.tsx +105 -0
  256. package/docs/data-display/qr-code.tsx +68 -0
  257. package/docs/data-display/scroll-area.tsx +271 -0
  258. package/docs/data-display/service-launcher-card.tsx +145 -0
  259. package/docs/data-display/stat-card.tsx +99 -0
  260. package/docs/data-display/table.tsx +251 -0
  261. package/docs/data-display/timeline.tsx +112 -0
  262. package/docs/data-display/touch-actions.tsx +36 -0
  263. package/docs/data-display/tree-list.tsx +107 -0
  264. package/docs/data-entry/branch-scope-picker.tsx +123 -0
  265. package/docs/data-entry/calendar.tsx +180 -0
  266. package/docs/data-entry/cascader.tsx +378 -0
  267. package/docs/data-entry/checkbox.tsx +256 -0
  268. package/docs/data-entry/color-picker.tsx +117 -0
  269. package/docs/data-entry/command-palette.tsx +179 -0
  270. package/docs/data-entry/command.tsx +262 -0
  271. package/docs/data-entry/country-picker-recipe.tsx +170 -0
  272. package/docs/data-entry/date-picker.tsx +191 -0
  273. package/docs/data-entry/date-range-picker.tsx +149 -0
  274. package/docs/data-entry/form/examples/employee-settings.tsx +267 -0
  275. package/docs/data-entry/form/examples/invoice-form.tsx +387 -0
  276. package/docs/data-entry/form-field/examples/a11y-contract.tsx +240 -0
  277. package/docs/data-entry/form-field/examples/create-form.tsx +105 -0
  278. package/docs/data-entry/form-field/index.md +8 -0
  279. package/docs/data-entry/form-field/index.tsx +326 -0
  280. package/docs/data-entry/form-inertia.tsx +80 -0
  281. package/docs/data-entry/form-root.tsx +102 -0
  282. package/docs/data-entry/form.tsx +724 -0
  283. package/docs/data-entry/input-otp.tsx +231 -0
  284. package/docs/data-entry/input.tsx +114 -0
  285. package/docs/data-entry/label.tsx +100 -0
  286. package/docs/data-entry/month-picker.tsx +101 -0
  287. package/docs/data-entry/month-range-picker.tsx +115 -0
  288. package/docs/data-entry/number-input.tsx +240 -0
  289. package/docs/data-entry/password-input.tsx +106 -0
  290. package/docs/data-entry/password-strength.tsx +97 -0
  291. package/docs/data-entry/radio-group.tsx +95 -0
  292. package/docs/data-entry/rating.tsx +87 -0
  293. package/docs/data-entry/search-input.tsx +120 -0
  294. package/docs/data-entry/select-async-contracts.tsx +108 -0
  295. package/docs/data-entry/select-matrix.tsx +204 -0
  296. package/docs/data-entry/select.tsx +369 -0
  297. package/docs/data-entry/slider.tsx +130 -0
  298. package/docs/data-entry/switch.tsx +67 -0
  299. package/docs/data-entry/tag-input.tsx +108 -0
  300. package/docs/data-entry/textarea.tsx +209 -0
  301. package/docs/data-entry/time-picker.tsx +99 -0
  302. package/docs/data-entry/toggle-count.tsx +293 -0
  303. package/docs/data-entry/toggle-group.tsx +225 -0
  304. package/docs/data-entry/toggle.tsx +127 -0
  305. package/docs/data-entry/transfer.tsx +97 -0
  306. package/docs/data-entry/tree-select.tsx +204 -0
  307. package/docs/data-entry/upload.tsx +184 -0
  308. package/docs/feedback/alert-dialog.tsx +270 -0
  309. package/docs/feedback/alert.tsx +248 -0
  310. package/docs/feedback/banner.tsx +183 -0
  311. package/docs/feedback/danger-confirm.tsx +88 -0
  312. package/docs/feedback/dialog-touch.tsx +24 -0
  313. package/docs/feedback/dialog.tsx +193 -0
  314. package/docs/feedback/sheet.tsx +410 -0
  315. package/docs/feedback/skeleton.tsx +111 -0
  316. package/docs/feedback/toast.tsx +135 -0
  317. package/docs/feedback/tooltip.tsx +171 -0
  318. package/docs/feedback/two-factor-setup.tsx +68 -0
  319. package/docs/foundation/_email-specimen.ts +274 -0
  320. package/docs/foundation/colors.tsx +202 -0
  321. package/docs/foundation/density.tsx +232 -0
  322. package/docs/foundation/email-tokens.tsx +306 -0
  323. package/docs/foundation/radius-shadow.tsx +152 -0
  324. package/docs/foundation/spacing.tsx +211 -0
  325. package/docs/foundation/typography.tsx +147 -0
  326. package/docs/general/activity.tsx +224 -0
  327. package/docs/general/button/examples/destructive-confirm.tsx +90 -0
  328. package/docs/general/button/examples/form-actions.tsx +85 -0
  329. package/docs/general/button/examples/toolbar.tsx +160 -0
  330. package/docs/general/button/index.md +12 -0
  331. package/docs/general/button/index.tsx +211 -0
  332. package/docs/general/logo.tsx +131 -0
  333. package/docs/general/reveal.tsx +41 -0
  334. package/docs/general/typography.tsx +152 -0
  335. package/docs/layout/account-chip.tsx +72 -0
  336. package/docs/layout/admin-collection.tsx +122 -0
  337. package/docs/layout/app-shell.tsx +374 -0
  338. package/docs/layout/aspect-ratio.tsx +119 -0
  339. package/docs/layout/auth-account-summary.tsx +103 -0
  340. package/docs/layout/auth-divider.tsx +28 -0
  341. package/docs/layout/auth-footer.tsx +37 -0
  342. package/docs/layout/auth-identity.tsx +36 -0
  343. package/docs/layout/auth-recovery/examples/mfa-challenge.md +41 -0
  344. package/docs/layout/auth-recovery/examples/mfa-challenge.tsx +254 -0
  345. package/docs/layout/auth-recovery/examples/mobile-390.md +25 -0
  346. package/docs/layout/auth-recovery/examples/mobile-390.tsx +82 -0
  347. package/docs/layout/auth-recovery/examples/password-recovery.md +24 -0
  348. package/docs/layout/auth-recovery/examples/password-recovery.tsx +197 -0
  349. package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.md +27 -0
  350. package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.tsx +156 -0
  351. package/docs/layout/auth-recovery/index.md +140 -0
  352. package/docs/layout/auth-recovery/index.tsx +96 -0
  353. package/docs/layout/auth-shell-context.tsx +103 -0
  354. package/docs/layout/auth-shell-device.tsx +112 -0
  355. package/docs/layout/auth-shell-registration.tsx +335 -0
  356. package/docs/layout/auth-shell-variants.tsx +139 -0
  357. package/docs/layout/auth-shell.tsx +59 -0
  358. package/docs/layout/auth-stack.tsx +40 -0
  359. package/docs/layout/centered-shell.tsx +102 -0
  360. package/docs/layout/error-surface/examples/application-403.tsx +84 -0
  361. package/docs/layout/error-surface/examples/application-404.tsx +77 -0
  362. package/docs/layout/error-surface/examples/system-500.tsx +47 -0
  363. package/docs/layout/error-surface/examples/system-503.tsx +48 -0
  364. package/docs/layout/error-surface/index.md +153 -0
  365. package/docs/layout/error-surface/index.tsx +239 -0
  366. package/docs/layout/flex.tsx +262 -0
  367. package/docs/layout/legal-document-shell/_data.ts +110 -0
  368. package/docs/layout/legal-document-shell/examples/desktop-1440.md +12 -0
  369. package/docs/layout/legal-document-shell/examples/desktop-1440.tsx +83 -0
  370. package/docs/layout/legal-document-shell/examples/mobile-390.md +22 -0
  371. package/docs/layout/legal-document-shell/examples/mobile-390.tsx +70 -0
  372. package/docs/layout/legal-document-shell/examples/tablet-1024.md +3 -0
  373. package/docs/layout/legal-document-shell/examples/tablet-1024.tsx +84 -0
  374. package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.md +18 -0
  375. package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.tsx +61 -0
  376. package/docs/layout/legal-document-shell/index.md +51 -0
  377. package/docs/layout/legal-document-shell/index.tsx +101 -0
  378. package/docs/layout/master-detail.tsx +387 -0
  379. package/docs/layout/org-switcher.tsx +131 -0
  380. package/docs/layout/page-container.tsx +946 -0
  381. package/docs/layout/resizable-panel.tsx +419 -0
  382. package/docs/layout/responsive-grid.tsx +235 -0
  383. package/docs/layout/separator.tsx +327 -0
  384. package/docs/layout/service-role-panel.tsx +144 -0
  385. package/docs/layout/sidebar.tsx +586 -0
  386. package/docs/layout/split-pane.tsx +451 -0
  387. package/docs/layout/topbar.tsx +347 -0
  388. package/docs/navigation/app-setting-picker.tsx +141 -0
  389. package/docs/navigation/breadcrumb.tsx +128 -0
  390. package/docs/navigation/context-menu.tsx +117 -0
  391. package/docs/navigation/dropdown-menu.tsx +213 -0
  392. package/docs/navigation/filter-bar.tsx +227 -0
  393. package/docs/navigation/menubar.tsx +141 -0
  394. package/docs/navigation/navigation-menu.tsx +165 -0
  395. package/docs/navigation/pagination.tsx +241 -0
  396. package/docs/navigation/steps.tsx +263 -0
  397. package/docs/navigation/tabs-rtl.tsx +28 -0
  398. package/docs/navigation/tabs.tsx +308 -0
  399. package/docs/navigation/toolbar.tsx +339 -0
  400. package/docs/providers/app-provider.tsx +191 -0
  401. package/docs/providers/format-date.tsx +230 -0
  402. package/docs/query/button-refetch.tsx +160 -0
  403. package/docs/query/data-state.tsx +192 -0
  404. package/docs/query/infinite-query-state.tsx +93 -0
  405. package/docs/query/mutation-feedback.tsx +70 -0
  406. package/docs/query/prefetch-link.tsx +262 -0
  407. package/docs/query/touch-actions.tsx +68 -0
  408. package/docs/showcase/acme-portal.tsx +441 -0
  409. package/docs/showcase/acme-website.tsx +455 -0
  410. package/docs/showcase/case1-warehouse-dashboard.tsx +343 -0
  411. package/docs/showcase/case2-employee-me.tsx +441 -0
  412. package/docs/showcase/case3-approval-workflow.tsx +527 -0
  413. package/docs/showcase/case4-login.tsx +307 -0
  414. package/docs/showcase/case5-shift-calendar.tsx +795 -0
  415. package/docs/showcase/case6-agency-handy.tsx +1072 -0
  416. package/docs/showcase/futurelastic-web.tsx +390 -0
  417. package/docs/showcase/org-switcher.tsx +313 -0
  418. package/docs/showcase/permission-matrix.tsx +343 -0
  419. package/docs/showcase/public-landing.tsx +210 -0
  420. package/docs/showcase/settings-account-sections.tsx +559 -0
  421. package/docs/showcase/settings-security-mfa.tsx +145 -0
  422. package/docs/showcase/table-approval-queue.tsx +199 -0
  423. package/docs/showcase/table-bulk-actions.tsx +460 -0
  424. package/docs/showcase/table-compact-kintone.tsx +438 -0
  425. package/docs/showcase/table-conditional-format.tsx +367 -0
  426. package/docs/showcase/table-crud-list.tsx +544 -0
  427. package/docs/showcase/table-density.tsx +340 -0
  428. package/docs/showcase/table-expandable-rows.tsx +471 -0
  429. package/docs/showcase/table-filter-chips.tsx +461 -0
  430. package/docs/showcase/table-footer-totals.tsx +311 -0
  431. package/docs/showcase/table-grouped-subtotals.tsx +388 -0
  432. package/docs/showcase/table-master-detail.tsx +479 -0
  433. package/docs/showcase/table-pagination.tsx +320 -0
  434. package/docs/showcase/table-states.tsx +363 -0
  435. package/docs/showcase/table-sticky-columns.tsx +373 -0
  436. package/docs/showcase/table-tree-rows.tsx +444 -0
  437. package/docs/showcase/table-view-tabs.tsx +488 -0
  438. package/package.json +10 -11
  439. package/scripts/_agent-setup.mjs +16 -2
  440. package/scripts/audit-hook.mjs +3 -13
  441. package/scripts/init-agent-kit.mjs +1 -14
  442. package/scripts/postinstall.mjs +12 -12
  443. package/scripts/ui-audit.mjs +93 -31
  444. package/scripts/visual-audit-rules.mjs +51 -7
  445. package/scripts/visual-audit.mjs +118 -47
package/README.md CHANGED
@@ -1,7 +1,6 @@
1
1
  # @godxjp/ui
2
2
 
3
- The shared React UI framework for every godx surface (admin, agency portal,
4
- handheld). Built on shadcn + Radix UI + Tailwind CSS v4. **~98 components**, fully catalogued.
3
+ The shared React UI framework for every godx surface (admin, agency portal, handheld).
5
4
 
6
5
  - 📦 **npm:** `@godxjp/ui` (published) · MCP server `@godxjp/ui-mcp`
7
6
  - 🌐 **Live preview / catalog:** **https://godx-jp.github.io/godxjp-ui/** (components · tokens · props)
@@ -15,23 +14,9 @@ npm i @godxjp/ui
15
14
 
16
15
  ## Role & boundary — read this first
17
16
 
18
- This package is **the single source of UI truth**. It is shared, versioned
19
- infrastructure, which means two things are non-negotiable:
20
-
21
- - **Editing it requires explicit session permission** (the hard gate — see
22
- [DEVELOPMENT.md](./docs/DEVELOPMENT.md#0-what-this-package-is--and-the-boundary-it-must-keep)).
23
- By default the package is off-limits; consumers _compose_ its primitives, they
24
- don't fork them.
25
- - **It is generic and presentational only.** No app i18n (`useTranslation`), no
26
- Inertia (`router`/`<Form>`), no Wayfinder routes, no business entities or domain
27
- logic, no product copy, no raw colors. Those are **consumer-layer** concerns — they
28
- must never leak into this package. The framework ships **its own theme**, so a
29
- consumer imports the styles and needs **zero** extra theme configuration.
30
- - **The root export is runtime-neutral.** Importing `@godxjp/ui` (or its primitive
31
- subpaths) forces **no** foreign runtime — React Router, TanStack Query, react-hook-form
32
- and the i18n singleton live ONLY on their adapter subpaths (`./form`, `./query`, `./app`).
33
- A CI guard (`pnpm check:core-isolation`) traces the root dist graph and fails the build if
34
- an adapter ever leaks into the root barrel.
17
+ This package is **the single source of UI truth**. It is shared, versioned infrastructure, which means two things are non-negotiable:
18
+
19
+ - **Editing it requires explicit session permission** (the hard gate — see [DEVELOPMENT.md](./docs/DEVELOPMENT.md#0-what-this-package-is--and-the-boundary-it-must-keep)). By default the package is off-limits; consumers _compose_ its primitives, they don't fork them. - **It is generic and presentational only.** No app i18n (`useTranslation`), no Inertia (`router`/`<Form>`), no Wayfinder routes, no business entities or domain logic, no product copy, no raw colors. Those are **consumer-layer** concerns — they must never leak into this package.
35
20
 
36
21
  > Deciding whether a component belongs here vs. app-level? Use the
37
22
  > **`godx-ui-component-placement`** skill.
@@ -56,10 +41,7 @@ examples/ *.preview.tsx — Storybook-style stories (rendered by the prev
56
41
  preview/ The preview app (vite, :6008) → also deployed to GitHub Pages
57
42
  ```
58
43
 
59
- A value is defined **once** as a CSS var (`--primary`), mapped to a utility in the
60
- `@theme` block (`--color-primary: hsl(var(--primary))`), and consumed as `bg-primary`.
61
- Components emit `data-slot` / `data-*`; the look lives in `styles/*-layout.css`. See
62
- [DEVELOPMENT.md §1](./docs/DEVELOPMENT.md#1-architecture--the-layers-bottom-up).
44
+ A value is defined **once** as a CSS var (`--primary`), mapped to a utility in the `@theme` block (`--color-primary: hsl(var(--primary))`), and consumed as `bg-primary`. Components emit `data-slot` / `data-*`; the look lives in `styles/*-layout.css`. See [DEVELOPMENT.md §1](./docs/DEVELOPMENT.md#1-architecture--the-layers-bottom-up).
63
45
 
64
46
  ---
65
47
 
@@ -81,21 +63,16 @@ Components emit `data-slot` / `data-*`; the look lives in `styles/*-layout.css`.
81
63
  | **shadcn paths** | `@godxjp/ui/ui` | Thin re-exports for shadcn-style imports (tree-shakeable) |
82
64
  | **Admin (legacy)** | `@godxjp/ui/admin` | Compound admin exports |
83
65
 
84
- > **Renamed / removed** — use the new names; the old aliases were **removed in v11** (they are no
85
- > longer exported at runtime). See the [migration table](#migrating-6--11) below.
86
-
87
66
  ---
88
67
 
89
68
  ## Migrating 6 → 11
90
69
 
91
- The v11 line dropped the deprecated compatibility aliases entirely — they are no longer exported
92
- at runtime, and their leftover `*Prop` types and README references have now been removed too (issue
93
- #99). Replace these at the call site:
70
+ Replace these at the call site:
94
71
 
95
72
  | Removed / renamed (≤ v8) | Replacement (v11) |
96
73
  | ----------------------------------------- | --------------------------------------------------- |
97
- | `Stack` | `Flex direction="col"` (the default direction) |
98
- | `Inline` | `Flex direction="row"` |
74
+ | `Stack` | `Flex direction="col"` |
75
+ | `Inline` | `Flex` (default `direction="row"`) |
99
76
  | `Autocomplete` | `Select` with `showSearch` + `options` |
100
77
  | `CountrySelect` | `AppSettingPicker kind="country"` |
101
78
  | `LocalePicker` | `AppSettingPicker kind="language"` |
@@ -110,103 +87,38 @@ at runtime, and their leftover `*Prop` types and README references have now been
110
87
  | `StatusBadge` | `Badge` (`status` / `tone`) |
111
88
  | `DialogConfirm` / `Dialog mode="confirm"` | `AlertDialog` |
112
89
 
113
- The full data-grid feature set (sort / search / column visibility / paging) is now
114
- built into the one `DataTable` (`@godxjp/ui/data-display`) — TanStack-powered, with
115
- the lean `data` + `columns` API for the common case and the compound parts
116
- (`DataTable.Search` / `.ViewOptions` / `.Pagination` …) for the rich chrome. The
117
- separate `@godxjp/ui/data-grid` (`DataGrid`) subpath has been merged in and removed.
90
+ The full data-grid feature set (sort / search / column visibility / paging) is now built into the one `DataTable` (`@godxjp/ui/data-display`) — TanStack-powered, with the lean `data` + `columns` API for the common case and the compound parts (`DataTable.Search` / `.ViewOptions` / `.Pagination` …) for the rich chrome. The separate `@godxjp/ui/data-grid` (`DataGrid`) subpath has been merged in and removed.
118
91
 
119
92
  ---
120
93
 
121
94
  ## Consumer setup — theme is self-contained
122
95
 
123
- The framework ships colors, the type scale, the wa-iro palette, and (opt-in)
124
- bundled fonts (M PLUS 2 + Noto Sans JP fallback via `@fontsource`). A consumer's entire
125
- styling surface is **one import + content sources** — no `:root` overrides, no
126
- font `<link>`:
96
+ The framework ships colors, the type scale, the wa-iro palette, and (opt-in) bundled fonts (M PLUS 2 + Noto Sans JP fallback via `@fontsource`). A consumer's entire styling surface is **one import + content sources** — no `:root` overrides, no font `<link>`:
127
97
 
128
98
  ```css
129
99
  /* resources/css/app.css */
130
100
  @import "@godxjp/ui/styles";
131
- @source '../js/**/*.{ts,tsx}';
132
- @source '../views';
101
+ @source "../js/**/*.{ts,tsx}";
102
+ @source "../views";
133
103
  ```
134
104
 
135
105
  ### Slim build — ship only the CSS you use
136
106
 
137
- `@godxjp/ui/styles` is the zero-config all-in-one (every component's CSS +
138
- bundled fonts). To ship only what you render, import the foundation plus the
139
- per-layer files you need (mirrors the JS subpaths — the CSS tree-shakes too):
140
-
141
- ```css
142
- @import "@godxjp/ui/styles/base"; /* required: tokens + tailwind + base layer */
143
- @import "@godxjp/ui/styles/control"; /* Button, Input, Select, Textarea, toggles */
144
- @import "@godxjp/ui/styles/form-layout"; /* FormField */
145
- @import "@godxjp/ui/styles/dialog-layout"; /* Dialog */
146
- /* …only the layers you use. Layer files need `base` first (they use @layer/@apply). */
147
- @import "@godxjp/ui/styles/fonts"; /* optional bundled faces — MUST come after `base` */
148
- ```
149
-
150
- Skip `@godxjp/ui/styles/fonts` when you manage fonts yourself (next/font, etc.)
151
- and set the font tokens instead (see below). A marketing site using ~10
152
- components typically drops component CSS from ~142K → ~26K gzip.
153
-
154
- > **Import order rule — `fonts` after `base`.** `styles/base` pulls in the token
155
- > layers, whose font-agnostic `:root { --font-sans-base: <system stack> }` sits at
156
- > the same specificity (0,1,0) as the bundle's fill, so the later import wins.
157
- > Import `styles/fonts` first and the bundled faces silently never apply while the
158
- > ~800 KB of `@font-face` still ships. The all-in-one `@godxjp/ui/styles` entry
159
- > already orders this correctly.
160
-
161
- ### Fonts — token-driven, per-language, no library hardcoding
162
-
163
- The base ships NO hardcoded brand face. Supply your own faces and set tokens —
164
- one face everywhere, or per-language (no `[lang]` selectors to write):
107
+ `@godxjp/ui/styles` is the zero-config all-in-one (every component's CSS + bundled fonts). Managing fonts yourself (next/font, a system stack, an extension that must not ship font files)? Load the same layers without the faces:
165
108
 
166
109
  ```css
167
- :root {
168
- --font-sans-base: var(--my-latin), system-ui, sans-serif; /* default face */
169
- --font-sans-ja: "Noto Sans JP", var(--font-sans-base); /* lang="ja" */
170
- --font-sans-vi: "Montserrat", var(--font-sans-base); /* lang="vi" */
171
- /* also: --font-sans-ko, --font-sans-zh-hans, --font-sans-zh-hant */
172
- }
110
+ @import "@godxjp/ui/styles/core"; /* every component layer, no @font-face */
173
111
  ```
174
112
 
175
- `styles/base.css` wires each `[lang]` to its slot (falling back to
176
- `--font-sans-base`); the opt-in `styles/fonts` overwrites `--font-sans-base` (and
177
- `--font-sans-vi`) with the bundled DXS stack **M PLUS 2** primary with **Noto
178
- Sans JP** as the CJK fallback.
179
-
180
- > **The bundled faces changed in v18.** v16 bundled Noto Sans JP + Montserrat;
181
- > v18 bundles M PLUS 2 (primary, incl. Vietnamese coverage) + Noto Sans JP (CJK
182
- > fallback). If your design spec named the v16 faces, set the tokens yourself
183
- > instead of relying on the bundle.
184
-
185
- ```tsx
186
- import { AppProvider } from "@godxjp/ui/app"; // locale, tz, date/time format
187
- import { PageContainer } from "@godxjp/ui/layout"; // every page wraps in this
188
- ```
189
-
190
- ### Mandatory consumer rules
191
-
192
- 1. **Every page** uses `<PageContainer title subtitle extra footer>`.
193
- 2. **Mobile-first** — verify at 320–390px in preview / browser.
194
- 3. **Spacing via `Flex` `gap` + `ResponsiveGrid`** — no Tailwind `p-*` /
195
- `gap-*` / `space-x|y-*` for app layout (see `docs/SPACING.md`).
196
- 4. **Semantic tokens only** — no raw colors / hex / `dark:` overrides.
197
- 5. **Dates** display via `formatDate` from `@godxjp/ui/datetime`.
198
- 6. **`AppProvider`** wraps the app for locale / timezone / date-time format.
199
- 7. **Audit** — `npm run ui:audit` must report 0 errors for touched files.
200
-
201
- Full app-developer rules: [ui-standardization.md](../../.claude/skills/frontend-design/rules/ui-standardization.md).
202
-
203
- ---
113
+ > **Do not cherry-pick `*-layout.css` files.** Layers depend on each other (a
114
+ > Select's rows, a menu's surface, a form's rhythm live in shared rules) and a
115
+ > missing layer fails silently: menus render with no background, rows with no
116
+ > height. `styles` and `styles/core` are the two supported entries; the runtime
117
+ > `visual-audit` flags a page whose layers are incomplete (`css-layers-missing`).
204
118
 
205
119
  ## Golden ratio (φ ≈ 1.618)
206
120
 
207
- One token `--phi-unit` drives page/section/card spacing; micro control gaps use the
208
- 4px grid. Density (`compact` | `default` | `comfortable`) retunes `--phi-unit` with
209
- control + table heights together.
121
+ One token `--phi-unit` drives page/section/card spacing; micro control gaps use the 4px grid. Density (`compact` | `default` | `comfortable`) retunes `--phi-unit` with control + table heights together.
210
122
 
211
123
  | App API | φ level |
212
124
  | --------------------------------- | ------------------- |
@@ -238,10 +150,7 @@ pnpm release --ui <patch|minor|major> --mcp <…|skip> # publish lib + MCP in
238
150
 
239
151
  ### Runtime visual audit (Playwright + axe-core)
240
152
 
241
- `scripts/visual-audit.mjs` drives a **real browser** over a running app and runs axe-core plus
242
- computed-style heuristics (target size, OKLCH accent chroma, rendered emoji, mis-laid-out alerts) —
243
- catching what the static `pnpm audit` (source regexes) can't see. Playwright + `@axe-core/playwright`
244
- are **optional peers**, installed only by apps that run the audit.
153
+ `scripts/visual-audit.mjs` drives a **real browser** over a running app and runs axe-core plus computed-style heuristics (target size, OKLCH accent chroma, rendered emoji, mis-laid-out alerts) — catching what the static `pnpm audit` (source regexes) can't see. Playwright + `@axe-core/playwright` are **optional peers**, installed only by apps that run the audit.
245
154
 
246
155
  ```bash
247
156
  # from a consumer, against its running dev/preview server:
@@ -250,30 +159,18 @@ node node_modules/@godxjp/ui/scripts/visual-audit.mjs http://localhost:5173 --fo
250
159
  node node_modules/@godxjp/ui/scripts/visual-audit.mjs --strict http://localhost:5173 # CI gate
251
160
  ```
252
161
 
253
- **Tested peer range** (pin one of these): `playwright >=1.55 <2` (tested 1.61.1) ·
254
- `@axe-core/playwright >=4.10 <5` (tested 4.12.1) · `axe-core >=4.10 <5` (tested 4.12.1). Playwright
255
- 1.55+ is required for the `browser.newContext()` → `context.newPage()` flow axe expects; older
256
- `browser.newPage()` throws _"Please use browser.newContext()"_.
162
+ **Tested peer range** (pin one of these): `playwright >=1.55 <2` (tested 1.61.1) · `@axe-core/playwright >=4.10 <5` (tested 4.12.1) · `axe-core >=4.10 <5` (tested 4.12.1). Playwright 1.55+ is required for the `browser.newContext()` → `context.newPage()` flow axe expects; older `browser.newPage()` throws _"Please use browser.newContext()"_.
257
163
 
258
- `--format json` **always** emits valid JSON — even on bootstrap failure — with a `status`
259
- (`ok` · `partial` · `error`) that separates **infrastructure errors** (missing peers, page won't
260
- load, axe won't inject → `errors[]`, `summary: null`/flagged) from **product findings** (`findings[]`).
261
- A tool failure can therefore never be misread as "zero violations". `pnpm check:visual-audit` is the
262
- CI smoke test: it serves a fixture page tripping all five rule families and asserts each one fires.
164
+ `--format json` **always** emits valid JSON — even on bootstrap failure — with a `status` (`ok` · `partial` · `error`) that separates **infrastructure errors** (missing peers, page won't load, axe won't inject → `errors[]`, `summary: null`/flagged) from **product findings** (`findings[]`). A tool failure can therefore never be misread as "zero violations". `pnpm check:visual-audit` is the CI smoke test: it serves a fixture page tripping all five rule families and asserts each one fires.
263
165
 
264
- This repo ships two packages — `@godxjp/ui` (this dir) and `@godxjp/ui-mcp` (`mcp/`). They keep
265
- separate version lines but release together via `pnpm release`; see DEVELOPMENT.md §6.
266
- The **preview app auto-deploys to [GitHub Pages](https://godx-jp.github.io/godxjp-ui/)** on every push to `main`
267
- (`.github/workflows/preview-pages.yml`) — which doubles as the CI gate for `preview:build`.
166
+ This repo ships two packages — `@godxjp/ui` (this dir) and `@godxjp/ui-mcp` (`mcp/`). They keep separate version lines but release together via `pnpm release`; see DEVELOPMENT.md §6. The **preview app auto-deploys to [GitHub Pages](https://godx-jp.github.io/godxjp-ui/)** on every push to `main` (`.github/workflows/preview-pages.yml`) — which doubles as the CI gate for `preview:build`.
268
167
 
269
- → **[docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)** is the contributor guideline (the
270
- boundary, the layers, how to add/extend a component, verification).
168
+ → **[docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)** is the contributor guideline (the boundary, the layers, how to add/extend a component, verification).
271
169
 
272
170
  ## Docs index
273
171
 
274
172
  - [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md) — contributor guideline (start here to edit the package)
275
173
  - [docs/STANDARDS-vocabulary-tokens.md](./docs/STANDARDS-vocabulary-tokens.md) — the 22 vocabulary + token rules (CI-enforced)
276
- - [docs/roadmap/post-7.0.0.md](./docs/roadmap/post-7.0.0.md) — shipped log (7.0→9.2) + key decisions
277
174
  - [docs/COMPONENTS.md](./docs/COMPONENTS.md) · [docs/TOKENS.md](./docs/TOKENS.md) · [docs/SPACING.md](./docs/SPACING.md)
278
175
  - [docs/PROPS-VOCABULARY.md](./docs/PROPS-VOCABULARY.md) · [docs/PROPS-REGISTRY.md](./docs/PROPS-REGISTRY.md)
279
176
  - [docs/DATETIME.md](./docs/DATETIME.md) · [docs/FORMS.md](./docs/FORMS.md) · [docs/TESTING.md](./docs/TESTING.md)
@@ -2,7 +2,7 @@ import * as React from "react";
2
2
  import { type AppDateFormat, type AppLocale, type AppTimeFormat, type AppTimezone } from "./types.js";
3
3
  import type { AppContextValue, AppProviderProp } from "../props/components/app.prop.js";
4
4
  export type { AppProviderProp, AppContextValue } from "../props/components/app.prop.js";
5
- export declare function AppProvider({ children, defaultLocale, fallbackLocale, defaultTimezone, systemTimezone, defaultTimeFormat, defaultDateFormat, timezoneOptions, storageKey, persist, theme: initialTheme, brand: initialBrand, density: initialDensity, fontSize: initialFontSize, scaling: initialScaling, onLocaleChange, onTimezoneChange, onTimeFormatChange, onDateFormatChange, onThemeChange, onBrandChange, onDensityChange, onFontSizeChange, onScalingChange, }: AppProviderProp): React.JSX.Element;
5
+ export declare function AppProvider({ children, defaultLocale, fallbackLocale, defaultTimezone, systemTimezone, defaultTimeFormat, defaultDateFormat, timezoneOptions, storageKey, persist, theme: initialTheme, brand: initialBrand, density: initialDensity, fontSize: initialFontSize, scaling: initialScaling, emitFieldNames, onLocaleChange, onTimezoneChange, onTimeFormatChange, onDateFormatChange, onThemeChange, onBrandChange, onDensityChange, onFontSizeChange, onScalingChange, }: AppProviderProp): React.JSX.Element;
6
6
  export declare function useAppContext(): AppContextValue;
7
7
  /** Returns null outside AppProvider — used by pickers for optional context. */
8
8
  export declare function useOptionalAppContext(): AppContextValue | null;
@@ -65,6 +65,7 @@ function AppProvider({
65
65
  density: initialDensity = "default",
66
66
  fontSize: initialFontSize = "default",
67
67
  scaling: initialScaling = null,
68
+ emitFieldNames = false,
68
69
  onLocaleChange,
69
70
  onTimezoneChange,
70
71
  onTimeFormatChange,
@@ -299,6 +300,7 @@ function AppProvider({
299
300
  density,
300
301
  fontSize,
301
302
  scaling,
303
+ emitFieldNames,
302
304
  setLocale,
303
305
  setTimezone,
304
306
  setTimeFormat,
@@ -323,6 +325,7 @@ function AppProvider({
323
325
  density,
324
326
  fontSize,
325
327
  scaling,
328
+ emitFieldNames,
326
329
  setLocale,
327
330
  setTimezone,
328
331
  setTimeFormat,
@@ -1,15 +1,7 @@
1
1
  import type { PageDensityProp } from "../props/vocabulary/layout.prop.js";
2
2
  /** Light / dark spine — `data-theme` (alias of the legacy `.dark` class). */
3
3
  export type AppTheme = "light" | "dark";
4
- /**
5
- * Primary-palette preset — `data-brand`. `null` = keep the app's own `--primary`.
6
- *
7
- * `"dxs"` is the CANONICAL DXS preset: unlike the per-vertical tints it also binds the canonical
8
- * hosted-identity surface contract (auth measure/density/insets + the brand-green identity mark),
9
- * so every surface matches the canonical artboards with no consumer page CSS (gh#214). See
10
- * `src/tokens/axes.css` for the bindings and `@godxjp/ui/theme/dxs.canonical.css` for the
11
- * copy-free stylesheet entry point.
12
- */
4
+ /** Primary-palette preset — `data-brand`. `null` = keep the app's own `--primary`. */
13
5
  export type AppBrand = "brand" | "crm" | "logistics" | "partner" | "slate" | "dxs";
14
6
  /** Control / table / spacing density — `data-density` (same vocab as PageContainer). */
15
7
  export type AppDensity = PageDensityProp;
@@ -19,9 +11,7 @@ export declare const APP_THEMES: readonly ["light", "dark"];
19
11
  export declare const APP_BRANDS: readonly ["brand", "crm", "logistics", "partner", "slate", "dxs"];
20
12
  export declare const APP_DENSITIES: readonly ["compact", "default", "comfortable"];
21
13
  export declare const APP_FONT_SIZES: readonly ["sm", "default", "lg"];
22
- /** The axes as held by AppProvider. `brand: null` opts out (app token wins).
23
- * `scaling: null` defers to the density preset; a number is the continuous global
24
- * size multiplier (the `--scaling` factor / Radix model) and overrides the preset. */
14
+ /** The axes as held by AppProvider. `brand: null` opts out (app token wins). */
25
15
  export type AppThemeAxes = {
26
16
  theme: AppTheme;
27
17
  brand: AppBrand | null;
@@ -34,8 +24,7 @@ export declare const isAppBrand: (v: unknown) => v is AppBrand;
34
24
  export declare const isAppDensity: (v: unknown) => v is AppDensity;
35
25
  export declare const isAppFontSize: (v: unknown) => v is AppFontSize;
36
26
  /**
37
- * Write the axis attributes onto a root element (default `<html>`). Pass `brand: null`
38
- * to remove `data-brand` so the app's own `--primary` token applies. SSR-safe: callers
39
- * guard `typeof document`. Exported for non-React / imperative consumers too.
27
+ * Write the axis attributes onto a root element (default `<html>`). Pass `brand: null` to remove
28
+ * `data-brand` so the app's own `--primary` token applies.
40
29
  */
41
30
  export declare function applyThemeAxes(el: HTMLElement, axes: Partial<AppThemeAxes>): void;
@@ -2,10 +2,7 @@ import type { AppLocale } from "./types.js";
2
2
  /** Curated preset — pass to `<AppProvider timezoneOptions={APP_TIMEZONE_PRESET} />`. */
3
3
  export declare const APP_TIMEZONE_PRESET: readonly ["UTC", "Asia/Ho_Chi_Minh", "Asia/Bangkok", "Asia/Singapore", "Asia/Jakarta", "Asia/Manila", "Asia/Kuala_Lumpur", "Asia/Yangon", "Asia/Phnom_Penh", "Asia/Vientiane", "Asia/Brunei", "Asia/Tokyo", "Asia/Seoul", "Asia/Shanghai", "Asia/Hong_Kong", "Asia/Taipei", "Asia/Ulaanbaatar", "Asia/Kolkata", "Asia/Karachi", "Asia/Dhaka", "Asia/Colombo", "Asia/Dubai", "Asia/Riyadh", "Asia/Qatar", "Asia/Tehran", "Asia/Jerusalem", "Europe/London", "Europe/Paris", "Europe/Berlin", "Europe/Amsterdam", "Europe/Rome", "Europe/Madrid", "Europe/Moscow", "Europe/Istanbul", "America/New_York", "America/Chicago", "America/Denver", "America/Los_Angeles", "America/Toronto", "America/Vancouver", "America/Mexico_City", "America/Sao_Paulo", "America/Buenos_Aires", "Australia/Sydney", "Australia/Melbourne", "Australia/Perth", "Pacific/Auckland"];
4
4
  export type AppTimezonePreset = (typeof APP_TIMEZONE_PRESET)[number];
5
- /**
6
- * Preferred IANA ids not returned by all runtimes (e.g. Node lists `Asia/Saigon` only).
7
- * Keys are app-facing ids; values are Intl-canonical ids for offset lookup.
8
- */
5
+ /** Preferred IANA ids not returned by all runtimes (e.g. Node lists `Asia/Saigon` only). */
9
6
  export declare const TIMEZONE_ALIASES: Record<string, string>;
10
7
  /** Map app id → Intl id for `DateTimeFormat` / validation. */
11
8
  export declare function resolveTimezoneForIntl(timezone: string): string;
@@ -1,8 +1,7 @@
1
1
  import type { AreaChartProp } from "../../props/components/charts.prop.js";
2
2
  export type { AreaChartProp, AreaChartProp as AreaChartProps, } from "../../props/components/charts.prop.js";
3
3
  /**
4
- * Area chart — magnitude over an ordered category axis. `stacked` accumulates
5
- * series; `curved` smooths the line. Import from the tree-shaken
6
- * `@godxjp/ui/charts` entry; requires the `recharts` optional peer.
4
+ * Area chart — magnitude over an ordered category axis. `stacked` accumulates series; `curved`
5
+ * smooths the line.
7
6
  */
8
7
  export declare function AreaChart(props: AreaChartProp): import("react").JSX.Element;
@@ -1,8 +1,7 @@
1
1
  import type { BarChartProp } from "../../props/components/charts.prop.js";
2
2
  export type { BarChartProp, BarChartProp as BarChartProps, } from "../../props/components/charts.prop.js";
3
3
  /**
4
- * Bar chart — compare a value across categories. `stacked` stacks series into one
5
- * bar; `horizontal` puts the category axis on the left. Import from the
6
- * tree-shaken `@godxjp/ui/charts` entry; requires the `recharts` optional peer.
4
+ * Bar chart — compare a value across categories. `stacked` stacks series into one bar;
5
+ * `horizontal` puts the category axis on the left.
7
6
  */
8
7
  export declare function BarChart(props: BarChartProp): import("react").JSX.Element;
@@ -1,15 +1,11 @@
1
1
  import * as React from "react";
2
2
  /**
3
- * Shared chart chrome — owns the cross-cutting concerns every chart needs so the
4
- * individual chart wrappers stay tiny:
5
- * - a11y: a `<figure>` with a visible `<figcaption>` title and a screen-reader
6
- * text alternative (WCAG 1.1.1) describing the plotted data, with the SVG
7
- * itself marked `role="img"` so AT announces one labelled graphic.
8
- * - i18n: a locale-aware `Intl.NumberFormat` shared by axis ticks + tooltips.
9
- * - tokens: the `--chart-1..6` palette + size→height tiers.
10
- *
11
- * Internal — NOT a public catalog primitive (re-exported only through the chart
12
- * wrappers). See check-mcp-orphans ALLOWLIST.
3
+ * Shared chart chrome — owns the cross-cutting concerns every chart needs so the individual chart
4
+ * wrappers stay tiny: - a11y: a `<figure>` with a visible `<figcaption>` title and a screen-reader
5
+ * text alternative (WCAG 1.1.1) describing the plotted data, with the SVG itself marked
6
+ * `role="img"` so AT announces one labelled graphic. - i18n: a locale-aware `Intl.NumberFormat`
7
+ * shared by axis ticks + tooltips. - tokens: the `--chart-1..6` palette + size→height tiers.
8
+ * Internal — NOT a public catalog primitive (re-exported only through the chart wrappers).
13
9
  */
14
10
  /** Canonical decorative chart palette (foundation tokens). */
15
11
  export declare const CHART_COLORS: readonly ["var(--chart-1)", "var(--chart-2)", "var(--chart-3)", "var(--chart-4)", "var(--chart-5)", "var(--chart-6)"];
@@ -30,12 +26,7 @@ type ChartFrameProps = {
30
26
  imgSummary: string;
31
27
  /** True when there is data to plot (otherwise children render an empty state). */
32
28
  hasData: boolean;
33
- /**
34
- * Canvas height in px. OPTIONAL: recharts needs a measured pixel box, but a
35
- * CSS-drawn chart leaves it undefined and sizes its plot from a token tier
36
- * instead (`size` → `data-size` → `--*-plot-height`), so no geometry is baked
37
- * into an inline style.
38
- */
29
+ /** Canvas height in px. */
39
30
  height?: number;
40
31
  /** Mirrored onto the figure as `data-size` so CSS can pick a token height tier. */
41
32
  size?: "xs" | "sm" | "md" | "lg";
@@ -35,8 +35,8 @@ export declare function buildTrendSummary(data: ChartDatum[], categoryKey: strin
35
35
  */
36
36
  export declare function trendRatios(data: ChartDatum[], valueKey: string): number[];
37
37
  /**
38
- * Resolve `emphasizedIndex` against a row count. Negative counts from the end
39
- * (`-1` = the latest datum). Out-of-range → no emphasis.
38
+ * Resolve `emphasizedIndex` against a row count. Negative counts from the end (`-1` = the latest
39
+ * datum).
40
40
  */
41
41
  export declare function resolveEmphasizedIndex(index: number | undefined, length: number): number;
42
42
  export {};
@@ -2,29 +2,14 @@ import * as React from "react";
2
2
  import type { CompactBarTrendProp } from "../../props/components/charts.prop.js";
3
3
  export type { CompactBarTrendProp, CompactBarTrendProp as CompactBarTrendProps, } from "../../props/components/charts.prop.js";
4
4
  /**
5
- * CompactBarTrend — a **dependency-free** compact vertical bar trend for dashboard
6
- * summary cards (a seven-day "new organizations" strip, a weekly activity pulse…).
7
- *
8
- * Unlike `BarChart` it does NOT need the `recharts` optional peer: the marks are
9
- * token-sized CSS blocks, so a consumer that may not add dependencies still gets a
10
- * real framework chart instead of a page-local grid with inline heights.
11
- *
12
- * - **Geometry is entirely token-owned** `--chart-trend-plot-height-{xs,sm,md,lg}`,
13
- * `--chart-trend-bar-{gap,radius,max-width,min-height}`. The only inline value is
14
- * the datum itself (`--chart-trend-bar-value`, a 0..1 ratio of the largest bar).
15
- * - **Colour is token-owned** — muted marks read `--chart-trend-bar-background`
16
- * (default `hsl(var(--muted-foreground) / .75)`), the emphasized mark reads
17
- * `--chart-trend-bar-emphasis-background` (default `hsl(var(--primary))`).
18
- * - **a11y** — reuses `ChartFrame`: a `<figure>` with a visible `<figcaption>`, a
19
- * `role="img"` plot named by a localized one-line summary, and a visually-hidden
20
- * per-category value list referenced through `aria-describedby` (WCAG 1.1.1). The
21
- * emphasized bar is ALSO named in that list, so the highlight is never
22
- * colour-only (WCAG 1.4.1). The graphic holds no focusable elements — anything
23
- * interactive belongs in `footer`, which renders outside the graphic.
24
- * - **i18n** — values are formatted with the active locale's `Intl.NumberFormat`;
25
- * every generated string comes from `t()`.
26
- *
27
- * Import from `@godxjp/ui/charts/compact-bar-trend`. The isolated public entry keeps
28
- * consumers without the optional `recharts` peer away from the peer-backed charts barrel.
5
+ * CompactBarTrend — a **dependency-free** compact vertical bar trend for dashboard summary cards
6
+ * (a seven-day "new organizations" strip, a weekly activity pulse…). The only inline value is the
7
+ * datum itself (`--chart-trend-bar-value`, a 0..1 ratio of the largest bar). - **Colour is
8
+ * token-owned** muted marks read `--chart-trend-bar-background` (default
9
+ * `hsl(var(--muted-foreground) / .75)`), the emphasized mark reads
10
+ * `--chart-trend-bar-emphasis-background` (default `hsl(var(--primary))`). - **a11y** reuses
11
+ * `ChartFrame`: a `<figure>` with a visible `<figcaption>`, a `role="img"` plot named by a
12
+ * localized one-line summary, and a visually-hidden per-category value list referenced through
13
+ * `aria-describedby` (WCAG 1.1.1).
29
14
  */
30
15
  export declare function CompactBarTrend({ data, categoryKey, valueKey, label, description, size, emphasizedIndex, showCategoryLabels, numberFormat, footer, emptyMessage, className, id, ref, }: CompactBarTrendProp): React.JSX.Element;
@@ -1,9 +1,4 @@
1
- /**
2
- * Charts entry — `@godxjp/ui/charts`. Isolated from the main barrel so the
3
- * `recharts` dependency is only pulled in when a consumer imports a chart
4
- * (tree-shaking: `sideEffects: false` + a dedicated tsup entry + recharts as an
5
- * optional peer dependency).
6
- */
1
+ /** Charts entry — `@godxjp/ui/charts`. */
7
2
  export { LineChart } from "./line-chart.js";
8
3
  export type { LineChartProp, LineChartProps } from "./line-chart.js";
9
4
  export { BarChart } from "./bar-chart.js";
@@ -8,13 +8,6 @@ export type BadgeVariant = "default" | "secondary" | "outline" | "dashed";
8
8
  * for a SOLID brand fill use `variant="default"`.
9
9
  */
10
10
  export type BadgeTone = ToneProp | "primary";
11
- /**
12
- * NO `text-xs` here (gh#260): a font-size utility lands in `@layer utilities`, which always beats
13
- * the `@layer components` rule in badge-layout.css — making the documented `--badge-font-size`
14
- * knob structurally inert. Font-size (and the line-height `text-xs` used to carry) are owned by
15
- * badge-layout.css via `--badge-font-size` / `--badge-line-height`, whose defaults reproduce the
16
- * old `text-xs` rendering exactly.
17
- */
18
11
  declare const badgeVariants: (props?: ({
19
12
  variant?: "dashed" | "default" | "outline" | "secondary" | null | undefined;
20
13
  shape?: "default" | "pill" | "sharp" | null | undefined;
@@ -32,11 +25,8 @@ export interface BadgeProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "
32
25
  }
33
26
  export declare function Badge({ className, variant, shape, tone, icon, status, children, ...props }: BadgeProps): React.JSX.Element;
34
27
  /**
35
- * Status-aware badge with the shared domain-status-to-tone mapping.
36
- *
37
- * `Badge` remains the general-purpose primitive. Prefer `StatusBadge` when the
38
- * `status` prop drives presentation so status colours remain consistent across
39
- * products.
28
+ * Status-aware badge with the shared domain-status-to-tone mapping. `Badge` remains the
29
+ * general-purpose primitive.
40
30
  */
41
31
  export declare const StatusBadge: typeof Badge;
42
32
  export {};
@@ -5,15 +5,11 @@ import type { HeadingLevelProp } from "../../props/vocabulary/index.js";
5
5
  * stripe (default) or the full perimeter. */
6
6
  type CardAccent = "primary" | "success" | "warning" | "info" | "attention" | "destructive";
7
7
  /**
8
- * Where the semantic `accent` tone is drawn.
9
- *
10
- * - `"edge"` (default) the leading-edge stripe on `border-inline-start` only, at the
11
- * `--card-accent-rail-width` measure (6px). The classic "this row needs a look" rail.
12
- * - `"perimeter"` — a full attention border around the WHOLE card in the same semantic
13
- * tone, measured by `--card-accent-perimeter-width` + `--card-accent-perimeter-ring-width`.
14
- * This is what `variant="featured"` does, except the tone is yours instead of `--primary`,
15
- * so a card can shout "action required" (`accent="attention"`) or "this failed"
16
- * (`accent="destructive"`) without borrowing the brand colour.
8
+ * Where the semantic `accent` tone is drawn. - `"edge"` (default) — the leading-edge stripe on
9
+ * `border-inline-start` only, at the `--card-accent-rail-width` measure (6px). This is what
10
+ * `variant="featured"` does, except the tone is yours instead of `--primary`, so a card can shout
11
+ * "action required" (`accent="attention"`) or "this failed" (`accent="destructive"`) without
12
+ * borrowing the brand colour.
17
13
  */
18
14
  type CardAccentPlacement = "edge" | "perimeter";
19
15
  /** Surface fill — plain card, muted band, borderless outline, or emphasized featured ring. */
@@ -52,38 +48,22 @@ export declare const CardHeader: React.ForwardRefExoticComponent<React.HTMLAttri
52
48
  banded?: boolean;
53
49
  } & React.RefAttributes<HTMLDivElement>>;
54
50
  export type CardTitleProps = React.HTMLAttributes<HTMLHeadingElement> & {
55
- /**
56
- * Semantic heading level (`h1`–`h4`). Default `3`. Choose it to keep the
57
- * document outline valid (`h1 → h2 → h3`, no skipped levels) for the page the
58
- * card sits on — NOT for visual size: the title's size is fixed by the
59
- * `--card-title-*` tokens and does not change with `level`. A section card
60
- * directly under a page `h1` uses `level={2}`; a card nested inside an
61
- * already-`h2` section uses `level={3}` (the default).
62
- */
51
+ /** Semantic heading level (`h1`–`h4`). Default `3`. */
63
52
  level?: HeadingLevelProp;
64
53
  /**
65
- * Render a different element than the `level` heading. Use `"p"` / `"div"`
66
- * when the card title is a styled label rather than a section heading in the
67
- * outline (so it is not announced as a heading and cannot skip a level).
68
- * Overrides `level`.
54
+ * Render a different element than the `level` heading. Use `"p"` / `"div"` when the card title
55
+ * is a styled label rather than a section heading in the outline (so it is not announced as a
56
+ * heading and cannot skip a level).
69
57
  */
70
58
  as?: "h1" | "h2" | "h3" | "h4" | "p" | "div";
71
59
  };
72
60
  export declare const CardTitle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLHeadingElement> & {
73
- /**
74
- * Semantic heading level (`h1`–`h4`). Default `3`. Choose it to keep the
75
- * document outline valid (`h1 → h2 → h3`, no skipped levels) for the page the
76
- * card sits on — NOT for visual size: the title's size is fixed by the
77
- * `--card-title-*` tokens and does not change with `level`. A section card
78
- * directly under a page `h1` uses `level={2}`; a card nested inside an
79
- * already-`h2` section uses `level={3}` (the default).
80
- */
61
+ /** Semantic heading level (`h1`–`h4`). Default `3`. */
81
62
  level?: HeadingLevelProp;
82
63
  /**
83
- * Render a different element than the `level` heading. Use `"p"` / `"div"`
84
- * when the card title is a styled label rather than a section heading in the
85
- * outline (so it is not announced as a heading and cannot skip a level).
86
- * Overrides `level`.
64
+ * Render a different element than the `level` heading. Use `"p"` / `"div"` when the card title
65
+ * is a styled label rather than a section heading in the outline (so it is not announced as a
66
+ * heading and cannot skip a level).
87
67
  */
88
68
  as?: "h1" | "h2" | "h3" | "h4" | "p" | "div";
89
69
  } & React.RefAttributes<HTMLHeadingElement>>;
@@ -121,12 +101,10 @@ export type CardBarProps = React.HTMLAttributes<HTMLDivElement> & {
121
101
  extra?: React.ReactNode;
122
102
  };
123
103
  /**
124
- * CardBar — a horizontal bar (view tabs, toolbar, filter chips) that can sit at
125
- * ANY position inside a Card. It draws its own separators FROM its position: a
126
- * top bar gets a bottom border, a bottom bar gets a top border, a middle bar
127
- * gets both, and a sole child gets none (the card border is enough). The main
128
- * area scrolls horizontally; the `extra` slot is pinned to the inline-end edge
129
- * for actions (column settings, save view, …).
104
+ * CardBar — a horizontal bar (view tabs, toolbar, filter chips) that can sit at ANY position
105
+ * inside a Card. It draws its own separators FROM its position: a top bar gets a bottom border, a
106
+ * bottom bar gets a top border, a middle bar gets both, and a sole child gets none (the card
107
+ * border is enough).
130
108
  */
131
109
  export declare const CardBar: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & {
132
110
  /** Right-aligned actions slot (settings/save), Ant `tabBarExtraContent`-style. */
@@ -136,8 +114,10 @@ export type StatCardProps = React.HTMLAttributes<HTMLDivElement> & {
136
114
  label: React.ReactNode;
137
115
  value: React.ReactNode;
138
116
  hint?: React.ReactNode;
139
- /** Optional leading icon, rendered as a tinted medallion above the metric. Decorative
140
- * (aria-hidden) the label carries the meaning. Tint via --stat-card-icon-* tokens. */
117
+ /**
118
+ * Optional leading icon, rendered as a tinted medallion above the metric. Decorative
119
+ * (aria-hidden) — the label carries the meaning.
120
+ */
141
121
  icon?: LucideIcon;
142
122
  /** Optional compact trend text beside the value. Avoid badge-like deltas. */
143
123
  delta?: React.ReactNode;
@@ -27,8 +27,7 @@ export declare const CarouselNext: React.ForwardRefExoticComponent<Omit<React.De
27
27
  /**
28
28
  * Dot indicators — one round dot per scroll snap, the active one widened + filled. Reads the Embla
29
29
  * api from context (no `setApi` plumbing needed); each dot is a real `<button>` with an i18n
30
- * accessible name and `aria-current` on the active slide, calling `scrollTo(i)`. Drop it inside
31
- * `<Carousel>` after the track: `<CarouselContent/> … <CarouselDots/>`.
30
+ * accessible name and `aria-current` on the active slide, calling `scrollTo(i)`.
32
31
  */
33
32
  export declare const CarouselDots: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
34
33
  export {};
@@ -0,0 +1,4 @@
1
+ import * as React from "react";
2
+ import type { CodeBlockProp } from "../../props/components/data-display.prop.js";
3
+ export type { CodeBlockProp, CodeBlockProp as CodeBlockProps };
4
+ export declare const CodeBlock: React.ForwardRefExoticComponent<CodeBlockProp & Omit<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLPreElement>, HTMLPreElement>, "ref">, keyof CodeBlockProp> & React.RefAttributes<HTMLPreElement>>;
@@ -0,0 +1,24 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cn } from "../../lib/utils.js";
4
+ const CodeBlock = React.forwardRef(function CodeBlock2({ children, wrap = true, maxHeight = "none", size = "sm", language, className, ...rest }, ref) {
5
+ const scrolls = maxHeight !== "none" || !wrap;
6
+ return /* @__PURE__ */ jsx(
7
+ "pre",
8
+ {
9
+ ref,
10
+ "data-slot": "code-block",
11
+ "data-wrap": wrap ? void 0 : "false",
12
+ "data-max-height": maxHeight === "none" ? void 0 : maxHeight,
13
+ "data-size": size === "sm" ? void 0 : size,
14
+ "data-language": language,
15
+ tabIndex: scrolls ? 0 : void 0,
16
+ className: cn("ui-code-block", className),
17
+ ...rest,
18
+ children: /* @__PURE__ */ jsx("code", { children })
19
+ }
20
+ );
21
+ });
22
+ export {
23
+ CodeBlock
24
+ };