@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
@@ -0,0 +1,184 @@
1
+ /**
2
+ * PermissionMatrix — 権限マトリクス (canonical RBAC role × permission grid, gh#257).
3
+ *
4
+ * A REAL export from `@godxjp/ui/data-display` (the gh#251 lesson: a consumer cannot import a
5
+ * docs page). Read-only ✓/— by default; `onGrantChange` switches to editable checkbox cells with
6
+ * locked roles kept read-only; compare + 差分のみ come from `lib/permission-grid`; lifecycle
7
+ * states follow the DataTable #216 vocabulary. Domain data below is demo-only — the library
8
+ * encodes no platform role or permission.
9
+ */
10
+ import * as React from "react";
11
+
12
+ import {
13
+ Card,
14
+ CardContent,
15
+ CardDescription,
16
+ CardHeader,
17
+ CardTitle,
18
+ PermissionMatrix,
19
+ } from "@godxjp/ui/data-display";
20
+ import { FormField, Label, Select, Switch } from "@godxjp/ui/data-entry";
21
+ import { Flex, PageContainer } from "@godxjp/ui/layout";
22
+ import { grantKey } from "@godxjp/ui/lib/permission-grid";
23
+
24
+ const ROLES = [
25
+ { id: "admin", name: "管理者", description: "全操作", locked: true },
26
+ { id: "editor", name: "編集者", description: "作成・編集" },
27
+ { id: "viewer", name: "閲覧者", description: "閲覧のみ" },
28
+ ];
29
+
30
+ const PERMISSIONS = [
31
+ { id: "user.manage", name: "ユーザー管理", description: "メンバーの追加・停止", group: "管理" },
32
+ { id: "member.invite", name: "メンバー招待", description: "招待リンクの発行", group: "管理" },
33
+ {
34
+ id: "billing.view",
35
+ name: "請求書の閲覧",
36
+ description: "請求・支払い履歴の参照",
37
+ group: "請求",
38
+ },
39
+ { id: "billing.edit", name: "請求書の編集", description: "請求先・明細の変更", group: "請求" },
40
+ {
41
+ id: "report.export",
42
+ name: "レポート出力",
43
+ description: "CSV / PDF のエクスポート",
44
+ group: "レポート",
45
+ },
46
+ ];
47
+
48
+ const INITIAL_GRANTS = new Set<string>([
49
+ ...PERMISSIONS.map((p) => grantKey("admin", p.id)),
50
+ grantKey("editor", "member.invite"),
51
+ grantKey("editor", "billing.view"),
52
+ grantKey("editor", "report.export"),
53
+ grantKey("viewer", "billing.view"),
54
+ ]);
55
+
56
+ const roleOptions = ROLES.map((r) => ({ value: r.id, label: r.name }));
57
+
58
+ export default function Demo() {
59
+ const [grants, setGrants] = React.useState<ReadonlySet<string>>(INITIAL_GRANTS);
60
+ const [compareA, setCompareA] = React.useState("editor");
61
+ const [compareB, setCompareB] = React.useState("viewer");
62
+ const [diffOnly, setDiffOnly] = React.useState(false);
63
+
64
+ return (
65
+ <PageContainer
66
+ title="PermissionMatrix"
67
+ subtitle="ロール × 権限の付与グリッド。既定は読み取り専用、onGrantChange で編集可能。"
68
+ density="compact"
69
+ >
70
+ <Flex direction="col" gap="lg">
71
+ <Card>
72
+ <CardHeader>
73
+ <CardTitle level={2}>読み取り専用(既定)</CardTitle>
74
+ <CardDescription>
75
+ onGrantChange を渡さない限りセルは ✓/—(形状 + sr-only、色のみに依存しない)。
76
+ </CardDescription>
77
+ </CardHeader>
78
+ <CardContent flush>
79
+ <PermissionMatrix roles={ROLES} permissions={PERMISSIONS} grants={grants} />
80
+ </CardContent>
81
+ </Card>
82
+
83
+ <Card>
84
+ <CardHeader>
85
+ <CardTitle level={2}>編集可能 + ロック済みロール</CardTitle>
86
+ <CardDescription>
87
+ onGrantChange があるとセルは実 Checkbox。locked の「管理者」列は読み取り専用のまま。
88
+ </CardDescription>
89
+ </CardHeader>
90
+ <CardContent flush>
91
+ <PermissionMatrix
92
+ roles={ROLES}
93
+ permissions={PERMISSIONS}
94
+ grants={grants}
95
+ onGrantChange={(roleId, permissionId, granted) => {
96
+ setGrants((prev) => {
97
+ const next = new Set(prev);
98
+ if (granted) next.add(grantKey(roleId, permissionId));
99
+ else next.delete(grantKey(roleId, permissionId));
100
+ return next;
101
+ });
102
+ }}
103
+ />
104
+ </CardContent>
105
+ </Card>
106
+
107
+ <Card>
108
+ <CardHeader>
109
+ <CardTitle level={2}>比較 + 差分のみ</CardTitle>
110
+ <CardDescription>
111
+ compare の 2 ロール列を強調し、diffOnly で一致行を隠す(lib/permission-grid
112
+ と同一ロジック)。
113
+ </CardDescription>
114
+ </CardHeader>
115
+ <CardContent>
116
+ <Flex direction="col" gap="md">
117
+ <Flex direction="row" wrap align="end" gap="md">
118
+ {/* Bare Select has NO accessible name (axe button-name) — the compare
119
+ pickers are labelled through FormField, exactly as the showcase does. */}
120
+ <FormField label="比較 A">
121
+ <Select
122
+ value={compareA}
123
+ onValueChange={setCompareA}
124
+ options={roleOptions}
125
+ clearable={false}
126
+ className="w-40"
127
+ />
128
+ </FormField>
129
+ <FormField label="比較 B">
130
+ <Select
131
+ value={compareB}
132
+ onValueChange={setCompareB}
133
+ options={roleOptions}
134
+ clearable={false}
135
+ className="w-40"
136
+ />
137
+ </FormField>
138
+ <Flex direction="row" align="center" gap="sm">
139
+ <Switch
140
+ id="pm-doc-diff-only"
141
+ size="sm"
142
+ checked={diffOnly}
143
+ onCheckedChange={setDiffOnly}
144
+ />
145
+ <Label htmlFor="pm-doc-diff-only">差分のみ</Label>
146
+ </Flex>
147
+ </Flex>
148
+ <div className="border-border overflow-hidden rounded-md border">
149
+ <PermissionMatrix
150
+ roles={ROLES}
151
+ permissions={PERMISSIONS}
152
+ grants={grants}
153
+ compare={[compareA, compareB]}
154
+ diffOnly={diffOnly}
155
+ />
156
+ </div>
157
+ </Flex>
158
+ </CardContent>
159
+ </Card>
160
+
161
+ <Card>
162
+ <CardHeader>
163
+ <CardTitle level={2}>ライフサイクル状態(#216 と同じ語彙)</CardTitle>
164
+ <CardDescription>loading → denied → error → empty の優先順位。</CardDescription>
165
+ </CardHeader>
166
+ <CardContent>
167
+ <Flex direction="col" gap="md">
168
+ <PermissionMatrix roles={ROLES} permissions={PERMISSIONS} grants={grants} loading />
169
+ <PermissionMatrix roles={ROLES} permissions={[]} grants={grants} denied />
170
+ <PermissionMatrix
171
+ roles={ROLES}
172
+ permissions={[]}
173
+ grants={grants}
174
+ error
175
+ onRetry={() => {}}
176
+ />
177
+ <PermissionMatrix roles={ROLES} permissions={[]} grants={grants} />
178
+ </Flex>
179
+ </CardContent>
180
+ </Card>
181
+ </Flex>
182
+ </PageContainer>
183
+ );
184
+ }
@@ -0,0 +1,27 @@
1
+ import { useState } from "react";
2
+ import {
3
+ Popover,
4
+ PopoverContent,
5
+ PopoverDescription,
6
+ PopoverTrigger,
7
+ } from "@godxjp/ui/data-display";
8
+ import { Button } from "@godxjp/ui/general";
9
+ import { PageContainer } from "@godxjp/ui/layout";
10
+
11
+ /** Dedicated closed-state coarse-pointer journey: trigger → action → close. */
12
+ export default function Demo() {
13
+ const [open, setOpen] = useState(false);
14
+ return (
15
+ <PageContainer title="Popover touch journey">
16
+ <Popover open={open} onOpenChange={setOpen}>
17
+ <PopoverTrigger asChild>
18
+ <Button>フィルターを開く</Button>
19
+ </PopoverTrigger>
20
+ <PopoverContent aria-label="フィルター操作">
21
+ <PopoverDescription>タッチ操作の確認用パネルです。</PopoverDescription>
22
+ <Button onClick={() => setOpen(false)}>適用して閉じる</Button>
23
+ </PopoverContent>
24
+ </Popover>
25
+ </PageContainer>
26
+ );
27
+ }
@@ -0,0 +1,245 @@
1
+ import { useState } from "react";
2
+ import {
3
+ Card,
4
+ CardContent,
5
+ CardDescription,
6
+ CardHeader,
7
+ CardTitle,
8
+ Popover,
9
+ PopoverAnchor,
10
+ PopoverContent,
11
+ PopoverDescription,
12
+ PopoverHeader,
13
+ PopoverTitle,
14
+ PopoverTrigger,
15
+ } from "@godxjp/ui/data-display";
16
+ import { Checkbox, FormField, Input, Label } from "@godxjp/ui/data-entry";
17
+ import { Button } from "@godxjp/ui/general";
18
+ import { Flex, PageContainer } from "@godxjp/ui/layout";
19
+ import { Info, SlidersHorizontal } from "lucide-react";
20
+
21
+ /**
22
+ * Popover — floating panel anchored to a trigger. Always compose
23
+ * PopoverTrigger + PopoverContent; never a raw div overlay. Composed only from
24
+ * real @godxjp/ui components.
25
+ */
26
+ export default function Demo() {
27
+ // Card 1 — controlled filter panel: open/onOpenChange drive the panel, and
28
+ // 適用 closes it. Staged defaultOpen via initial state so the open panel is
29
+ // visible at rest in a static screenshot.
30
+ const [filterOpen, setFilterOpen] = useState(true);
31
+
32
+ return (
33
+ <PageContainer title="Popover" subtitle="Floating panel anchored to a trigger · click to open">
34
+ <Flex direction="col" gap="lg">
35
+ <Card>
36
+ <CardHeader>
37
+ <CardTitle level={2}>PopoverAnchor · non-trigger positioning reference</CardTitle>
38
+ <CardDescription>Anchor positions content without becoming its toggle.</CardDescription>
39
+ </CardHeader>
40
+ <CardContent>
41
+ <Popover defaultOpen>
42
+ <PopoverAnchor asChild>
43
+ <span className="inline-flex rounded border px-3 py-2">請求額 ¥482,000</span>
44
+ </PopoverAnchor>
45
+ <PopoverContent side="right" aria-label="請求額の補足">
46
+ <PopoverDescription>税額と支払条件の補足情報です。</PopoverDescription>
47
+ </PopoverContent>
48
+ </Popover>
49
+ </CardContent>
50
+ </Card>
51
+
52
+ <Card>
53
+ <CardHeader>
54
+ <CardTitle level={2}>Controlled trigger + content</CardTitle>
55
+ <CardDescription>
56
+ Common for compact filter / settings panels off a button. Controlled via open /
57
+ onOpenChange so 適用 closes the panel. Shown open at rest.
58
+ </CardDescription>
59
+ </CardHeader>
60
+ <CardContent>
61
+ <Popover open={filterOpen} onOpenChange={setFilterOpen}>
62
+ <PopoverTrigger asChild>
63
+ <Button variant="outline">
64
+ <SlidersHorizontal />
65
+ 絞り込み
66
+ </Button>
67
+ </PopoverTrigger>
68
+ <PopoverContent aria-label="絞り込みパネル">
69
+ <Flex direction="col" gap="md">
70
+ <FormField id="min" label="最小金額">
71
+ <Input id="min" type="number" placeholder="0" />
72
+ </FormField>
73
+ <Flex direction="row" wrap align="center" gap="xs">
74
+ <Checkbox id="unpaid" />
75
+ <Label htmlFor="unpaid">未払いのみ</Label>
76
+ </Flex>
77
+ <Button size="sm" onClick={() => setFilterOpen(false)}>
78
+ 適用
79
+ </Button>
80
+ </Flex>
81
+ </PopoverContent>
82
+ </Popover>
83
+ </CardContent>
84
+ </Card>
85
+
86
+ <Card>
87
+ <CardHeader>
88
+ <CardTitle level={2}>Header / title / description slots</CardTitle>
89
+ <CardDescription>
90
+ The titled info-panel pattern: PopoverHeader › PopoverTitle + PopoverDescription, then
91
+ body. Shown open at rest via defaultOpen.
92
+ </CardDescription>
93
+ </CardHeader>
94
+ <CardContent>
95
+ <Popover defaultOpen>
96
+ <PopoverTrigger asChild>
97
+ <Button variant="outline">
98
+ <Info />
99
+ 保険料の内訳
100
+ </Button>
101
+ </PopoverTrigger>
102
+ <PopoverContent aria-label="保険料の内訳">
103
+ <Flex direction="col" gap="md">
104
+ <PopoverHeader>
105
+ <PopoverTitle>保険料の内訳</PopoverTitle>
106
+ <PopoverDescription>
107
+ 健康保険・厚生年金・雇用保険の控除額を表示します。
108
+ </PopoverDescription>
109
+ </PopoverHeader>
110
+ <Flex direction="col" gap="xs">
111
+ <Flex direction="row" justify="between">
112
+ <span>健康保険</span>
113
+ <span>¥12,400</span>
114
+ </Flex>
115
+ <Flex direction="row" justify="between">
116
+ <span>厚生年金</span>
117
+ <span>¥22,800</span>
118
+ </Flex>
119
+ </Flex>
120
+ </Flex>
121
+ </PopoverContent>
122
+ </Popover>
123
+ </CardContent>
124
+ </Card>
125
+
126
+ <Card>
127
+ <CardHeader>
128
+ <CardTitle level={2}>Placement · side</CardTitle>
129
+ <CardDescription>
130
+ PopoverContent accepts side: top / right / bottom (default) / left, with sideOffset.
131
+ </CardDescription>
132
+ </CardHeader>
133
+ <CardContent>
134
+ <Flex direction="row" wrap gap="sm">
135
+ <Popover>
136
+ <PopoverTrigger asChild>
137
+ <Button variant="outline">side=top</Button>
138
+ </PopoverTrigger>
139
+ <PopoverContent side="top" aria-label="上側の配置例">
140
+ <PopoverDescription>上に開きます。</PopoverDescription>
141
+ </PopoverContent>
142
+ </Popover>
143
+ <Popover>
144
+ <PopoverTrigger asChild>
145
+ <Button variant="outline">side=right</Button>
146
+ </PopoverTrigger>
147
+ <PopoverContent side="right" aria-label="右側の配置例">
148
+ <PopoverDescription>右に開きます。</PopoverDescription>
149
+ </PopoverContent>
150
+ </Popover>
151
+ <Popover>
152
+ <PopoverTrigger asChild>
153
+ <Button variant="outline">side=bottom</Button>
154
+ </PopoverTrigger>
155
+ <PopoverContent side="bottom" aria-label="下側の配置例">
156
+ <PopoverDescription>下に開きます(既定)。</PopoverDescription>
157
+ </PopoverContent>
158
+ </Popover>
159
+ <Popover>
160
+ <PopoverTrigger asChild>
161
+ <Button variant="outline">side=left</Button>
162
+ </PopoverTrigger>
163
+ <PopoverContent side="left" aria-label="左側の配置例">
164
+ <PopoverDescription>左に開きます。</PopoverDescription>
165
+ </PopoverContent>
166
+ </Popover>
167
+ </Flex>
168
+ </CardContent>
169
+ </Card>
170
+
171
+ <Card>
172
+ <CardHeader>
173
+ <CardTitle level={2}>Alignment · align</CardTitle>
174
+ <CardDescription>
175
+ align: start / center (default) / end positions the panel along the trigger edge.
176
+ </CardDescription>
177
+ </CardHeader>
178
+ <CardContent>
179
+ <Flex direction="row" wrap gap="sm">
180
+ <Popover>
181
+ <PopoverTrigger asChild>
182
+ <Button variant="outline">align=start</Button>
183
+ </PopoverTrigger>
184
+ <PopoverContent align="start" aria-label="開始端の配置例">
185
+ <PopoverDescription>開始端に揃えます。</PopoverDescription>
186
+ </PopoverContent>
187
+ </Popover>
188
+ <Popover>
189
+ <PopoverTrigger asChild>
190
+ <Button variant="outline">align=center</Button>
191
+ </PopoverTrigger>
192
+ <PopoverContent align="center" aria-label="中央の配置例">
193
+ <PopoverDescription>中央に揃えます(既定)。</PopoverDescription>
194
+ </PopoverContent>
195
+ </Popover>
196
+ <Popover>
197
+ <PopoverTrigger asChild>
198
+ <Button variant="outline">align=end</Button>
199
+ </PopoverTrigger>
200
+ <PopoverContent align="end" aria-label="終了端の配置例">
201
+ <PopoverDescription>終了端に揃えます。</PopoverDescription>
202
+ </PopoverContent>
203
+ </Popover>
204
+ </Flex>
205
+ </CardContent>
206
+ </Card>
207
+
208
+ <Card>
209
+ <CardHeader>
210
+ <CardTitle level={2}>Modal</CardTitle>
211
+ <CardDescription>
212
+ modal traps focus and blocks outside interaction while open, which also marks the rest
213
+ of the page aria-hidden. Shown CLOSED at rest: an open modal layer would take the
214
+ frame&apos;s own main landmark and heading out of the accessibility tree. Open it from
215
+ the trigger to inspect it.
216
+ </CardDescription>
217
+ </CardHeader>
218
+ <CardContent>
219
+ <Popover modal>
220
+ <PopoverTrigger asChild>
221
+ <Button variant="outline">確認が必要</Button>
222
+ </PopoverTrigger>
223
+ <PopoverContent aria-label="下書きを削除しますか?">
224
+ <Flex direction="col" gap="md">
225
+ <PopoverHeader>
226
+ <PopoverTitle>下書きを削除しますか?</PopoverTitle>
227
+ <PopoverDescription>この操作は取り消せません。</PopoverDescription>
228
+ </PopoverHeader>
229
+ <Flex direction="row" justify="end" gap="xs">
230
+ <Button variant="outline" size="sm">
231
+ キャンセル
232
+ </Button>
233
+ <Button variant="destructive" size="sm">
234
+ 削除
235
+ </Button>
236
+ </Flex>
237
+ </Flex>
238
+ </PopoverContent>
239
+ </Popover>
240
+ </CardContent>
241
+ </Card>
242
+ </Flex>
243
+ </PageContainer>
244
+ );
245
+ }
@@ -0,0 +1,84 @@
1
+ import {
2
+ Card,
3
+ CardContent,
4
+ CardDescription,
5
+ CardHeader,
6
+ CardTitle,
7
+ Progress,
8
+ } from "@godxjp/ui/data-display";
9
+ import { Flex, PageContainer } from "@godxjp/ui/layout";
10
+
11
+ /**
12
+ * Progress — horizontal 0–100 bar with an optional label and a semantic tone.
13
+ * Composed only from real @godxjp/ui components.
14
+ */
15
+ export default function Demo() {
16
+ return (
17
+ <PageContainer title="Progress" subtitle="0–100 bar · optional label + semantic tone">
18
+ <Flex direction="col" gap="lg">
19
+ <Card>
20
+ <CardHeader>
21
+ <CardTitle level={2}>Tones</CardTitle>
22
+ <CardDescription>
23
+ Tone carries meaning。success(既定)/ warning / destructive。
24
+ </CardDescription>
25
+ </CardHeader>
26
+ <CardContent>
27
+ <Flex direction="col" gap="md">
28
+ <Progress value={72} tone="success" label="処理スループット" />
29
+ <Progress value={28} tone="warning" label="SLA 超過リスク" />
30
+ <Progress value={84} tone="destructive" label="エラー率の上限接近" />
31
+ <Progress value={60} label="(tone 指定なし → success)" />
32
+ </Flex>
33
+ </CardContent>
34
+ </Card>
35
+
36
+ <Card>
37
+ <CardHeader>
38
+ <CardTitle level={2}>Over capacity</CardTitle>
39
+ <CardDescription>
40
+ over=true で 100% を超えた実値を aria-valuetext
41
+ に残し、破壊的なストライプで区別します。
42
+ </CardDescription>
43
+ </CardHeader>
44
+ <CardContent>
45
+ <Progress value={132} over label="予約容量 132%" />
46
+ </CardContent>
47
+ </Card>
48
+
49
+ <Card>
50
+ <CardHeader>
51
+ <CardTitle level={2}>Labelled / unlabelled</CardTitle>
52
+ <CardDescription>
53
+ label を渡すと bar 下にテキストを表示し aria-labelledby で関連付け。省略時は
54
+ aria-label=&quot;Progress&quot;。
55
+ </CardDescription>
56
+ </CardHeader>
57
+ <CardContent>
58
+ <Flex direction="col" gap="md">
59
+ <Progress value={45} label="アップロード進捗" />
60
+ <Progress value={45} />
61
+ </Flex>
62
+ </CardContent>
63
+ </Card>
64
+
65
+ <Card>
66
+ <CardHeader>
67
+ <CardTitle level={2}>Edge values &amp; clamping</CardTitle>
68
+ <CardDescription>
69
+ value は 0–100 にクランプ(Math.max(0, Math.min(100, value)))。範囲外でも安全に描画。
70
+ </CardDescription>
71
+ </CardHeader>
72
+ <CardContent>
73
+ <Flex direction="col" gap="md">
74
+ <Progress value={0} label="0%(空)" />
75
+ <Progress value={100} tone="success" label="100%(完了)" />
76
+ <Progress value={130} tone="warning" label="130 → 100 にクランプ" />
77
+ <Progress value={-5} label="-5 → 0 にクランプ" />
78
+ </Flex>
79
+ </CardContent>
80
+ </Card>
81
+ </Flex>
82
+ </PageContainer>
83
+ );
84
+ }
@@ -0,0 +1,105 @@
1
+ import {
2
+ Card,
3
+ CardContent,
4
+ CardDescription,
5
+ CardHeader,
6
+ CardTitle,
7
+ Prose,
8
+ } from "@godxjp/ui/data-display";
9
+ import { Flex, PageContainer } from "@godxjp/ui/layout";
10
+
11
+ /**
12
+ * Prose — typography for rendered content (Markdown, CMS bodies, issue descriptions). Styles the
13
+ * semantic HTML inside it from the tokens; the HTML can come from react-markdown, a sanitised
14
+ * string or JSX. Composed only from real @godxjp/ui components.
15
+ */
16
+ export default function Demo() {
17
+ return (
18
+ <PageContainer title="Prose" subtitle="レンダリングされた本文のタイポグラフィ">
19
+ <Flex direction="col" gap="lg">
20
+ <Card>
21
+ <CardHeader>
22
+ <CardTitle level={2}>Wiki page (size="md")</CardTitle>
23
+ <CardDescription>
24
+ 見出し・段落・リスト・引用・表・コードを一つの本文として。ソフト改行の扱いは Markdown
25
+ パイプライン側 (remark-breaks) の責務。
26
+ </CardDescription>
27
+ </CardHeader>
28
+ <CardContent>
29
+ <Prose size="md" imageSize="fit">
30
+ <h1>請求書の発行手順</h1>
31
+ <p>
32
+ 月次の請求書は <strong>締日の翌営業日</strong> に発行する。手順は{" "}
33
+ <a href="#flow">承認フロー</a> に従う。
34
+ </p>
35
+ <h2 id="flow">承認フロー</h2>
36
+ <ol>
37
+ <li>担当者が下書きを作成する</li>
38
+ <li>
39
+ 経理が金額を確認する
40
+ <ul>
41
+ <li>消費税区分</li>
42
+ <li>源泉徴収の有無</li>
43
+ </ul>
44
+ </li>
45
+ <li>責任者が承認し、送付する</li>
46
+ </ol>
47
+ <blockquote>
48
+ <p>締日を過ぎた修正は翌月の請求に繰り越す。</p>
49
+ </blockquote>
50
+ <h3>環境</h3>
51
+ {/* Inside Prose the table is rendered content, not page chrome. */}
52
+ {/* ui-audit-disable-next-line no-raw-table */}
53
+ <table>
54
+ <thead>
55
+ <tr>
56
+ <th>項目</th>
57
+ <th>値</th>
58
+ </tr>
59
+ </thead>
60
+ <tbody>
61
+ <tr>
62
+ <td>Browser</td>
63
+ <td>Chrome 140</td>
64
+ </tr>
65
+ <tr>
66
+ <td>Viewport</td>
67
+ <td>1440 x 900</td>
68
+ </tr>
69
+ </tbody>
70
+ </table>
71
+ <h4>再現コード</h4>
72
+ <p>
73
+ <code>estimate.total</code> を <code>hydrate()</code> より前に読むと落ちる。
74
+ </p>
75
+ <pre>{`const total = estimate.total; // undefined before hydrate()`}</pre>
76
+ <hr />
77
+ <p>最終更新: 2026-09-05</p>
78
+ </Prose>
79
+ </CardContent>
80
+ </Card>
81
+
82
+ <Card>
83
+ <CardHeader>
84
+ <CardTitle level={2}>Issue description (size="sm", imageSize="original")</CardTitle>
85
+ <CardDescription>
86
+ コンパクトな本文。貼り付けたスクリーンショットを原寸で見せる設定は横スクロールになる。
87
+ </CardDescription>
88
+ </CardHeader>
89
+ <CardContent>
90
+ <Prose size="sm" imageSize="original">
91
+ <h2>見積画面で合計が更新されない</h2>
92
+ <p>明細を追加しても合計欄が 0 のまま。リロードすると正しい値になる。</p>
93
+ <h3>手順</h3>
94
+ <ol>
95
+ <li>見積 EST-102 を開く</li>
96
+ <li>明細を 1 行追加する</li>
97
+ <li>合計欄を見る</li>
98
+ </ol>
99
+ </Prose>
100
+ </CardContent>
101
+ </Card>
102
+ </Flex>
103
+ </PageContainer>
104
+ );
105
+ }