@godxjp/ui 19.1.0 → 19.3.1

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 (437) hide show
  1. package/README.md +25 -128
  2. package/dist/app/theme-axes.d.ts +4 -15
  3. package/dist/app/timezones.d.ts +1 -4
  4. package/dist/components/charts/area-chart.d.ts +2 -3
  5. package/dist/components/charts/bar-chart.d.ts +2 -3
  6. package/dist/components/charts/chart-frame.d.ts +7 -16
  7. package/dist/components/charts/chart-summary.d.ts +2 -2
  8. package/dist/components/charts/compact-bar-trend.d.ts +9 -24
  9. package/dist/components/charts/index.d.ts +1 -6
  10. package/dist/components/data-display/badge.d.ts +20 -14
  11. package/dist/components/data-display/badge.js +18 -4
  12. package/dist/components/data-display/card.d.ts +21 -41
  13. package/dist/components/data-display/carousel.d.ts +1 -2
  14. package/dist/components/data-display/code-block.d.ts +4 -0
  15. package/dist/components/data-display/code-block.js +24 -0
  16. package/dist/components/data-display/data-table.d.ts +15 -37
  17. package/dist/components/data-display/data-table.js +1 -3
  18. package/dist/components/data-display/descriptions.d.ts +2 -6
  19. package/dist/components/data-display/descriptions.js +0 -2
  20. package/dist/components/data-display/index.d.ts +4 -0
  21. package/dist/components/data-display/index.js +4 -0
  22. package/dist/components/data-display/list-row.d.ts +3 -22
  23. package/dist/components/data-display/permission-matrix.d.ts +7 -20
  24. package/dist/components/data-display/progress.d.ts +1 -1
  25. package/dist/components/data-display/prose.d.ts +4 -0
  26. package/dist/components/data-display/prose.js +20 -0
  27. package/dist/components/data-display/service-launcher-card.d.ts +3 -10
  28. package/dist/components/data-display/table.d.ts +20 -80
  29. package/dist/components/data-display/table.js +0 -3
  30. package/dist/components/data-display/timeline.d.ts +3 -5
  31. package/dist/components/data-entry/branch-scope-picker.d.ts +2 -19
  32. package/dist/components/data-entry/branch-scope-picker.js +0 -1
  33. package/dist/components/data-entry/calendar.d.ts +3 -2
  34. package/dist/components/data-entry/calendar.js +58 -3
  35. package/dist/components/data-entry/command-palette.d.ts +8 -22
  36. package/dist/components/data-entry/date-picker.d.ts +4 -5
  37. package/dist/components/data-entry/date-picker.js +6 -1
  38. package/dist/components/data-entry/date-range-picker.d.ts +1 -1
  39. package/dist/components/data-entry/date-range-picker.js +8 -3
  40. package/dist/components/data-entry/form-errors.d.ts +7 -18
  41. package/dist/components/data-entry/form-field.js +1 -5
  42. package/dist/components/data-entry/form.d.ts +1 -9
  43. package/dist/components/data-entry/input.d.ts +16 -14
  44. package/dist/components/data-entry/input.js +3 -0
  45. package/dist/components/data-entry/month-picker.js +2 -2
  46. package/dist/components/data-entry/month-range-picker.d.ts +4 -6
  47. package/dist/components/data-entry/month-range-picker.js +2 -2
  48. package/dist/components/data-entry/number-input.d.ts +1 -5
  49. package/dist/components/data-entry/number-input.js +1 -0
  50. package/dist/components/data-entry/radio.js +0 -1
  51. package/dist/components/data-entry/search-select.d.ts +2 -4
  52. package/dist/components/data-entry/select.d.ts +11 -6
  53. package/dist/components/data-entry/select.js +4 -2
  54. package/dist/components/data-entry/switch.js +0 -1
  55. package/dist/components/data-entry/textarea.d.ts +10 -16
  56. package/dist/components/data-entry/time-picker.d.ts +3 -5
  57. package/dist/components/data-entry/upload-types.d.ts +1 -5
  58. package/dist/components/data-entry/use-upload-draft.d.ts +0 -4
  59. package/dist/components/feedback/dialog.d.ts +6 -15
  60. package/dist/components/feedback/overlay-header-tone.d.ts +1 -1
  61. package/dist/components/feedback/sheet.d.ts +3 -10
  62. package/dist/components/feedback/sheet.js +1 -1
  63. package/dist/components/feedback/sonner.js +2 -3
  64. package/dist/components/general/activity.d.ts +4 -30
  65. package/dist/components/general/button.js +1 -10
  66. package/dist/components/general/logo.d.ts +6 -28
  67. package/dist/components/general/reveal.d.ts +3 -9
  68. package/dist/components/general/typography.d.ts +1 -3
  69. package/dist/components/layout/account-chip.d.ts +8 -0
  70. package/dist/components/layout/account-chip.js +45 -0
  71. package/dist/components/layout/auth-divider.d.ts +2 -9
  72. package/dist/components/layout/auth-shell.d.ts +1 -14
  73. package/dist/components/layout/breadcrumb.d.ts +1 -5
  74. package/dist/components/layout/centered-shell.d.ts +4 -18
  75. package/dist/components/layout/error-surface.d.ts +11 -28
  76. package/dist/components/layout/error-surface.js +4 -1
  77. package/dist/components/layout/index.d.ts +2 -0
  78. package/dist/components/layout/index.js +2 -0
  79. package/dist/components/layout/legal-document-shell.d.ts +5 -28
  80. package/dist/components/layout/master-detail.d.ts +2 -18
  81. package/dist/components/layout/page-container.js +0 -1
  82. package/dist/components/layout/responsive-grid.d.ts +6 -1
  83. package/dist/components/layout/responsive-grid.js +9 -2
  84. package/dist/components/layout/service-role-panel.d.ts +7 -19
  85. package/dist/components/layout/sidebar.d.ts +5 -27
  86. package/dist/components/layout/sidebar.js +0 -1
  87. package/dist/components/layout/split-pane.d.ts +0 -7
  88. package/dist/components/layout/topbar.d.ts +1 -14
  89. package/dist/components/navigation/app-setting-picker.js +1 -3
  90. package/dist/components/navigation/filter-bar.d.ts +1 -6
  91. package/dist/components/navigation/pagination-utils.d.ts +2 -12
  92. package/dist/components/navigation/tabs-scroll.d.ts +2 -36
  93. package/dist/components/navigation/tabs.js +4 -8
  94. package/dist/components/query/data-state.d.ts +2 -2
  95. package/dist/components/ui/credential-reveal.d.ts +1 -4
  96. package/dist/components/ui/hover-card.d.ts +1 -2
  97. package/dist/components/ui/separator.d.ts +2 -15
  98. package/dist/components/ui/toggle-group.d.ts +1 -5
  99. package/dist/components/ui/toggle.d.ts +6 -31
  100. package/dist/email/brand-mark.d.ts +6 -34
  101. package/dist/email/color.d.ts +7 -17
  102. package/dist/email/geometry.d.ts +4 -8
  103. package/dist/email/index.d.ts +4 -48
  104. package/dist/email/inline-style.d.ts +3 -9
  105. package/dist/email/urgency.d.ts +2 -7
  106. package/dist/form/form-context.d.ts +2 -5
  107. package/dist/form/form-root.d.ts +1 -2
  108. package/dist/i18n/messages/en.json +4 -0
  109. package/dist/i18n/messages/ja.json +4 -0
  110. package/dist/i18n/messages/vi.json +4 -0
  111. package/dist/inertia/index.d.ts +2 -10
  112. package/dist/lib/control-styles.d.ts +10 -21
  113. package/dist/lib/control-styles.js +4 -6
  114. package/dist/lib/datetime/format-date.d.ts +1 -4
  115. package/dist/lib/field-a11y.d.ts +11 -68
  116. package/dist/lib/field-a11y.js +0 -1
  117. package/dist/lib/format.d.ts +4 -8
  118. package/dist/lib/hooks.d.ts +6 -12
  119. package/dist/lib/permission-grid.d.ts +3 -18
  120. package/dist/lib/query-error.d.ts +3 -3
  121. package/dist/props/components/app.prop.d.ts +15 -38
  122. package/dist/props/components/charts.prop.d.ts +2 -3
  123. package/dist/props/components/data-display.prop.d.ts +55 -72
  124. package/dist/props/components/data-entry.prop.d.ts +35 -40
  125. package/dist/props/components/form.prop.d.ts +2 -6
  126. package/dist/props/components/general.prop.d.ts +11 -27
  127. package/dist/props/components/layout.prop.d.ts +89 -260
  128. package/dist/props/components/navigation.prop.d.ts +27 -42
  129. package/dist/props/registry.d.ts +36 -1
  130. package/dist/props/registry.js +45 -1
  131. package/dist/props/vocabulary/data.prop.d.ts +18 -49
  132. package/dist/props/vocabulary/index.d.ts +1 -1
  133. package/dist/props/vocabulary/interaction.prop.d.ts +10 -12
  134. package/dist/props/vocabulary/layout.prop.d.ts +8 -30
  135. package/dist/props/vocabulary/shared.prop.d.ts +3 -2
  136. package/dist/styles/alert-layout.css +1 -32
  137. package/dist/styles/badge-layout.css +19 -18
  138. package/dist/styles/base.css +14 -113
  139. package/dist/styles/card-layout.css +6 -128
  140. package/dist/styles/chart-layout.css +2 -17
  141. package/dist/styles/control.css +380 -458
  142. package/dist/styles/core.css +21 -0
  143. package/dist/styles/data-display-layout.css +175 -94
  144. package/dist/styles/data-entry-layout.css +0 -45
  145. package/dist/styles/density.css +1 -30
  146. package/dist/styles/dialog-layout.css +5 -69
  147. package/dist/styles/focus-ring.css +13 -87
  148. package/dist/styles/fonts.css +1 -31
  149. package/dist/styles/form-layout.css +7 -91
  150. package/dist/styles/index.css +2 -20
  151. package/dist/styles/layout.css +38 -456
  152. package/dist/styles/logo-layout.css +1 -35
  153. package/dist/styles/motion.css +3 -42
  154. package/dist/styles/navigation-layout.css +3 -50
  155. package/dist/styles/shell-layout.css +37 -403
  156. package/dist/styles/table-layout.css +16 -274
  157. package/dist/styles/text-layout.css +7 -21
  158. package/dist/styles/toggle.css +1 -23
  159. package/dist/theme/dxs.canonical.css +1 -55
  160. package/dist/theme/example.service.css +1 -26
  161. package/dist/theme/famgia.service.css +5 -15
  162. package/dist/tokens/axes.css +3 -40
  163. package/dist/tokens/base.css +1 -4
  164. package/dist/tokens/components/activity.css +6 -42
  165. package/dist/tokens/components/badge.css +12 -13
  166. package/dist/tokens/components/banner.css +4 -9
  167. package/dist/tokens/components/card.css +32 -88
  168. package/dist/tokens/components/chart.css +9 -26
  169. package/dist/tokens/components/control.css +37 -222
  170. package/dist/tokens/components/data-display.css +28 -79
  171. package/dist/tokens/components/data-entry.css +5 -19
  172. package/dist/tokens/components/descriptions.css +7 -27
  173. package/dist/tokens/components/email.css +38 -84
  174. package/dist/tokens/components/error-surface.css +2 -18
  175. package/dist/tokens/components/feedback.css +27 -124
  176. package/dist/tokens/components/form.css +13 -45
  177. package/dist/tokens/components/legal-document.css +16 -41
  178. package/dist/tokens/components/list-row.css +11 -36
  179. package/dist/tokens/components/logo.css +2 -57
  180. package/dist/tokens/components/navigation.css +16 -94
  181. package/dist/tokens/components/scroll-area.css +2 -18
  182. package/dist/tokens/components/separator.css +8 -30
  183. package/dist/tokens/components/sheet.css +3 -14
  184. package/dist/tokens/components/shell.css +53 -307
  185. package/dist/tokens/components/sidebar.css +5 -22
  186. package/dist/tokens/components/table.css +19 -140
  187. package/dist/tokens/components/toggle.css +3 -65
  188. package/dist/tokens/components/upload.css +7 -43
  189. package/dist/tokens/foundation.css +108 -383
  190. package/dist/tokens/semantic/layout.css +33 -207
  191. package/docs/CANONICAL-CONTRACTS.md +206 -0
  192. package/docs/COMPONENTS.md +157 -0
  193. package/docs/COMPOSITION-VS-COMPONENT.md +105 -0
  194. package/docs/CONSUMER-RULES.md +14 -0
  195. package/docs/CUSTOMER-THEMING.md +162 -0
  196. package/docs/DATETIME.md +69 -0
  197. package/docs/DEVELOPMENT.md +173 -0
  198. package/docs/FORMS.md +143 -0
  199. package/docs/FRAME-A11Y-CI.md +267 -0
  200. package/docs/FRAME-COVERAGE-LEDGER.md +123 -0
  201. package/docs/FRAME-COVERAGE-REPORT.md +140 -0
  202. package/docs/FRAME-COVERAGE-STANDARD.md +65 -0
  203. package/docs/FRAME-COVERAGE.md +29 -0
  204. package/docs/PROPS-REGISTRY.md +61 -0
  205. package/docs/PROPS-VOCABULARY.md +100 -0
  206. package/docs/README.md +60 -0
  207. package/docs/REGISTRY.md +70 -0
  208. package/docs/SPACING.md +56 -0
  209. package/docs/STANDARDS-vocabulary-tokens.md +48 -0
  210. package/docs/TESTING.md +98 -0
  211. package/docs/TOKENS.md +347 -0
  212. package/docs/asset-modules.d.ts +46 -0
  213. package/docs/assets/cover-terrain.svg +6 -0
  214. package/docs/assets/portrait-amber.svg +5 -0
  215. package/docs/assets/portrait-clay.svg +5 -0
  216. package/docs/assets/portrait-indigo.svg +5 -0
  217. package/docs/assets/portrait-iris.svg +5 -0
  218. package/docs/assets/portrait-moss.svg +5 -0
  219. package/docs/assets/portrait-plum.svg +5 -0
  220. package/docs/assets/portrait-slate.svg +5 -0
  221. package/docs/charts/compact-bar-trend.tsx +328 -0
  222. package/docs/charts/size-tiers.tsx +192 -0
  223. package/docs/data-display/accordion.tsx +99 -0
  224. package/docs/data-display/avatar.tsx +355 -0
  225. package/docs/data-display/badge.tsx +283 -0
  226. package/docs/data-display/card/examples/detail-panel.tsx +106 -0
  227. package/docs/data-display/card/index.md +3 -0
  228. package/docs/data-display/card/index.tsx +285 -0
  229. package/docs/data-display/carousel.tsx +160 -0
  230. package/docs/data-display/charts.tsx +198 -0
  231. package/docs/data-display/code-block.tsx +90 -0
  232. package/docs/data-display/collapsible.tsx +162 -0
  233. package/docs/data-display/credential-reveal.tsx +145 -0
  234. package/docs/data-display/data-table/examples/approval-queue.tsx +212 -0
  235. package/docs/data-display/data-table/examples/grid-features.tsx +158 -0
  236. package/docs/data-display/data-table/examples/list-page.tsx +175 -0
  237. package/docs/data-display/data-table/index.md +5 -0
  238. package/docs/data-display/data-table/index.tsx +295 -0
  239. package/docs/data-display/descriptions.tsx +143 -0
  240. package/docs/data-display/empty-state.tsx +164 -0
  241. package/docs/data-display/hover-card.tsx +181 -0
  242. package/docs/data-display/list-row.tsx +420 -0
  243. package/docs/data-display/permission-matrix.tsx +188 -0
  244. package/docs/data-display/popover-touch.tsx +27 -0
  245. package/docs/data-display/popover.tsx +246 -0
  246. package/docs/data-display/progress.tsx +84 -0
  247. package/docs/data-display/prose.tsx +105 -0
  248. package/docs/data-display/qr-code.tsx +68 -0
  249. package/docs/data-display/scroll-area.tsx +303 -0
  250. package/docs/data-display/service-launcher-card.tsx +145 -0
  251. package/docs/data-display/stat-card.tsx +99 -0
  252. package/docs/data-display/table.tsx +251 -0
  253. package/docs/data-display/timeline.tsx +112 -0
  254. package/docs/data-display/touch-actions.tsx +36 -0
  255. package/docs/data-display/tree-list.tsx +107 -0
  256. package/docs/data-entry/branch-scope-picker.tsx +123 -0
  257. package/docs/data-entry/calendar.tsx +180 -0
  258. package/docs/data-entry/cascader.tsx +378 -0
  259. package/docs/data-entry/checkbox.tsx +256 -0
  260. package/docs/data-entry/color-picker.tsx +117 -0
  261. package/docs/data-entry/command-palette.tsx +179 -0
  262. package/docs/data-entry/command.tsx +262 -0
  263. package/docs/data-entry/country-picker-recipe.tsx +175 -0
  264. package/docs/data-entry/date-picker.tsx +191 -0
  265. package/docs/data-entry/date-range-picker.tsx +149 -0
  266. package/docs/data-entry/form/examples/employee-settings.tsx +267 -0
  267. package/docs/data-entry/form/examples/invoice-form.tsx +387 -0
  268. package/docs/data-entry/form-field/examples/a11y-contract.tsx +240 -0
  269. package/docs/data-entry/form-field/examples/create-form.tsx +105 -0
  270. package/docs/data-entry/form-field/index.md +8 -0
  271. package/docs/data-entry/form-field/index.tsx +330 -0
  272. package/docs/data-entry/form-inertia.tsx +80 -0
  273. package/docs/data-entry/form-root.tsx +102 -0
  274. package/docs/data-entry/form.tsx +724 -0
  275. package/docs/data-entry/input-otp.tsx +231 -0
  276. package/docs/data-entry/input.tsx +114 -0
  277. package/docs/data-entry/label.tsx +100 -0
  278. package/docs/data-entry/month-picker.tsx +101 -0
  279. package/docs/data-entry/month-range-picker.tsx +115 -0
  280. package/docs/data-entry/number-input.tsx +240 -0
  281. package/docs/data-entry/password-input.tsx +102 -0
  282. package/docs/data-entry/password-strength.tsx +97 -0
  283. package/docs/data-entry/radio-group.tsx +95 -0
  284. package/docs/data-entry/rating.tsx +87 -0
  285. package/docs/data-entry/search-input.tsx +120 -0
  286. package/docs/data-entry/select-async-contracts.tsx +108 -0
  287. package/docs/data-entry/select-matrix.tsx +204 -0
  288. package/docs/data-entry/select.tsx +369 -0
  289. package/docs/data-entry/slider.tsx +130 -0
  290. package/docs/data-entry/switch.tsx +67 -0
  291. package/docs/data-entry/tag-input.tsx +108 -0
  292. package/docs/data-entry/textarea.tsx +209 -0
  293. package/docs/data-entry/time-picker.tsx +99 -0
  294. package/docs/data-entry/toggle-count.tsx +293 -0
  295. package/docs/data-entry/toggle-group.tsx +225 -0
  296. package/docs/data-entry/toggle.tsx +127 -0
  297. package/docs/data-entry/transfer.tsx +97 -0
  298. package/docs/data-entry/tree-select.tsx +204 -0
  299. package/docs/data-entry/upload.tsx +184 -0
  300. package/docs/feedback/alert-dialog.tsx +270 -0
  301. package/docs/feedback/alert.tsx +248 -0
  302. package/docs/feedback/banner.tsx +183 -0
  303. package/docs/feedback/danger-confirm.tsx +88 -0
  304. package/docs/feedback/dialog-touch.tsx +24 -0
  305. package/docs/feedback/dialog.tsx +193 -0
  306. package/docs/feedback/sheet.tsx +420 -0
  307. package/docs/feedback/skeleton.tsx +111 -0
  308. package/docs/feedback/toast.tsx +135 -0
  309. package/docs/feedback/tooltip.tsx +171 -0
  310. package/docs/feedback/two-factor-setup.tsx +68 -0
  311. package/docs/foundation/_email-specimen.ts +274 -0
  312. package/docs/foundation/colors.tsx +204 -0
  313. package/docs/foundation/density.tsx +232 -0
  314. package/docs/foundation/email-tokens.tsx +323 -0
  315. package/docs/foundation/radius-shadow.tsx +154 -0
  316. package/docs/foundation/spacing.tsx +211 -0
  317. package/docs/foundation/typography.tsx +147 -0
  318. package/docs/general/activity.tsx +224 -0
  319. package/docs/general/button/examples/destructive-confirm.tsx +90 -0
  320. package/docs/general/button/examples/form-actions.tsx +85 -0
  321. package/docs/general/button/examples/toolbar.tsx +160 -0
  322. package/docs/general/button/index.md +12 -0
  323. package/docs/general/button/index.tsx +211 -0
  324. package/docs/general/logo.tsx +131 -0
  325. package/docs/general/reveal.tsx +41 -0
  326. package/docs/general/typography.tsx +152 -0
  327. package/docs/layout/account-chip.tsx +72 -0
  328. package/docs/layout/admin-collection.tsx +122 -0
  329. package/docs/layout/app-shell.tsx +374 -0
  330. package/docs/layout/aspect-ratio.tsx +135 -0
  331. package/docs/layout/auth-account-summary.tsx +103 -0
  332. package/docs/layout/auth-divider.tsx +28 -0
  333. package/docs/layout/auth-footer.tsx +37 -0
  334. package/docs/layout/auth-identity.tsx +36 -0
  335. package/docs/layout/auth-recovery/examples/mfa-challenge.md +41 -0
  336. package/docs/layout/auth-recovery/examples/mfa-challenge.tsx +254 -0
  337. package/docs/layout/auth-recovery/examples/mobile-390.md +25 -0
  338. package/docs/layout/auth-recovery/examples/mobile-390.tsx +82 -0
  339. package/docs/layout/auth-recovery/examples/password-recovery.md +24 -0
  340. package/docs/layout/auth-recovery/examples/password-recovery.tsx +197 -0
  341. package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.md +27 -0
  342. package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.tsx +156 -0
  343. package/docs/layout/auth-recovery/index.md +140 -0
  344. package/docs/layout/auth-recovery/index.tsx +96 -0
  345. package/docs/layout/auth-shell-context.tsx +103 -0
  346. package/docs/layout/auth-shell-device.tsx +112 -0
  347. package/docs/layout/auth-shell-registration.tsx +335 -0
  348. package/docs/layout/auth-shell-variants.tsx +139 -0
  349. package/docs/layout/auth-shell.tsx +59 -0
  350. package/docs/layout/auth-stack.tsx +40 -0
  351. package/docs/layout/centered-shell.tsx +102 -0
  352. package/docs/layout/error-surface/examples/application-403.tsx +84 -0
  353. package/docs/layout/error-surface/examples/application-404.tsx +77 -0
  354. package/docs/layout/error-surface/examples/system-500.tsx +47 -0
  355. package/docs/layout/error-surface/examples/system-503.tsx +48 -0
  356. package/docs/layout/error-surface/index.md +153 -0
  357. package/docs/layout/error-surface/index.tsx +239 -0
  358. package/docs/layout/flex.tsx +266 -0
  359. package/docs/layout/legal-document-shell/_data.ts +110 -0
  360. package/docs/layout/legal-document-shell/examples/desktop-1440.md +12 -0
  361. package/docs/layout/legal-document-shell/examples/desktop-1440.tsx +83 -0
  362. package/docs/layout/legal-document-shell/examples/mobile-390.md +22 -0
  363. package/docs/layout/legal-document-shell/examples/mobile-390.tsx +70 -0
  364. package/docs/layout/legal-document-shell/examples/tablet-1024.md +3 -0
  365. package/docs/layout/legal-document-shell/examples/tablet-1024.tsx +84 -0
  366. package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.md +18 -0
  367. package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.tsx +61 -0
  368. package/docs/layout/legal-document-shell/index.md +51 -0
  369. package/docs/layout/legal-document-shell/index.tsx +101 -0
  370. package/docs/layout/master-detail.tsx +387 -0
  371. package/docs/layout/org-switcher.tsx +131 -0
  372. package/docs/layout/page-container.tsx +954 -0
  373. package/docs/layout/resizable-panel.tsx +419 -0
  374. package/docs/layout/responsive-grid.tsx +243 -0
  375. package/docs/layout/separator.tsx +327 -0
  376. package/docs/layout/service-role-panel.tsx +144 -0
  377. package/docs/layout/sidebar.tsx +609 -0
  378. package/docs/layout/split-pane.tsx +468 -0
  379. package/docs/layout/topbar.tsx +349 -0
  380. package/docs/navigation/app-setting-picker.tsx +142 -0
  381. package/docs/navigation/breadcrumb.tsx +135 -0
  382. package/docs/navigation/context-menu.tsx +123 -0
  383. package/docs/navigation/dropdown-menu.tsx +213 -0
  384. package/docs/navigation/filter-bar.tsx +227 -0
  385. package/docs/navigation/menubar.tsx +141 -0
  386. package/docs/navigation/navigation-menu.tsx +158 -0
  387. package/docs/navigation/pagination.tsx +241 -0
  388. package/docs/navigation/steps.tsx +265 -0
  389. package/docs/navigation/tabs-rtl.tsx +28 -0
  390. package/docs/navigation/tabs.tsx +314 -0
  391. package/docs/navigation/toolbar.tsx +339 -0
  392. package/docs/providers/app-provider.tsx +191 -0
  393. package/docs/providers/format-date.tsx +230 -0
  394. package/docs/query/button-refetch.tsx +160 -0
  395. package/docs/query/data-state.tsx +192 -0
  396. package/docs/query/infinite-query-state.tsx +93 -0
  397. package/docs/query/mutation-feedback.tsx +70 -0
  398. package/docs/query/prefetch-link.tsx +262 -0
  399. package/docs/query/touch-actions.tsx +68 -0
  400. package/docs/showcase/acme-portal.tsx +455 -0
  401. package/docs/showcase/acme-website.tsx +461 -0
  402. package/docs/showcase/case1-warehouse-dashboard.tsx +359 -0
  403. package/docs/showcase/case2-employee-me.tsx +444 -0
  404. package/docs/showcase/case3-approval-workflow.tsx +529 -0
  405. package/docs/showcase/case4-login.tsx +313 -0
  406. package/docs/showcase/case5-shift-calendar.tsx +795 -0
  407. package/docs/showcase/case6-agency-handy.tsx +1113 -0
  408. package/docs/showcase/futurelastic-web.tsx +392 -0
  409. package/docs/showcase/org-switcher.tsx +313 -0
  410. package/docs/showcase/permission-matrix.tsx +346 -0
  411. package/docs/showcase/public-landing.tsx +210 -0
  412. package/docs/showcase/settings-account-sections.tsx +559 -0
  413. package/docs/showcase/settings-security-mfa.tsx +145 -0
  414. package/docs/showcase/table-approval-queue.tsx +199 -0
  415. package/docs/showcase/table-bulk-actions.tsx +460 -0
  416. package/docs/showcase/table-compact-kintone.tsx +438 -0
  417. package/docs/showcase/table-conditional-format.tsx +367 -0
  418. package/docs/showcase/table-crud-list.tsx +544 -0
  419. package/docs/showcase/table-density.tsx +347 -0
  420. package/docs/showcase/table-expandable-rows.tsx +480 -0
  421. package/docs/showcase/table-filter-chips.tsx +456 -0
  422. package/docs/showcase/table-footer-totals.tsx +314 -0
  423. package/docs/showcase/table-grouped-subtotals.tsx +391 -0
  424. package/docs/showcase/table-master-detail.tsx +484 -0
  425. package/docs/showcase/table-pagination.tsx +327 -0
  426. package/docs/showcase/table-states.tsx +366 -0
  427. package/docs/showcase/table-sticky-columns.tsx +376 -0
  428. package/docs/showcase/table-tree-rows.tsx +444 -0
  429. package/docs/showcase/table-view-tabs.tsx +488 -0
  430. package/package.json +9 -12
  431. package/scripts/_agent-setup.mjs +16 -2
  432. package/scripts/audit-hook.mjs +3 -13
  433. package/scripts/init-agent-kit.mjs +1 -14
  434. package/scripts/postinstall.mjs +12 -12
  435. package/scripts/ui-audit.mjs +93 -31
  436. package/scripts/visual-audit-rules.mjs +51 -7
  437. package/scripts/visual-audit.mjs +118 -47
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Static-asset imports for the docs pages.
3
+ *
4
+ * `tsconfig.json` pins `"types": ["node"]`, so `vite/client` — which normally declares these — is
5
+ * never loaded, and `tsconfig.docs.json` inherits that. Without this file `import cover from
6
+ * "../assets/cover-terrain.svg"` is a TS2307 even though Vite resolves it perfectly at build time,
7
+ * which is exactly how it passed locally and failed `typecheck:docs` in CI.
8
+ *
9
+ * Narrowed to the formats actually committed under `docs/assets`, and kept in step with
10
+ * ASSET_EXTENSIONS in `scripts/check-example-imports.mjs`, which decides the same question for the
11
+ * import guard.
12
+ */
13
+ declare module "*.svg" {
14
+ const src: string;
15
+ export default src;
16
+ }
17
+
18
+ declare module "*.png" {
19
+ const src: string;
20
+ export default src;
21
+ }
22
+
23
+ declare module "*.jpg" {
24
+ const src: string;
25
+ export default src;
26
+ }
27
+
28
+ declare module "*.jpeg" {
29
+ const src: string;
30
+ export default src;
31
+ }
32
+
33
+ declare module "*.webp" {
34
+ const src: string;
35
+ export default src;
36
+ }
37
+
38
+ declare module "*.avif" {
39
+ const src: string;
40
+ export default src;
41
+ }
42
+
43
+ declare module "*.gif" {
44
+ const src: string;
45
+ export default src;
46
+ }
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="480" height="270" viewBox="0 0 480 270" role="img">
2
+ <rect width="480" height="270" fill="hsl(208 38% 66%)"/>
3
+ <circle cx="355" cy="81" r="38" fill="hsl(208 38% 84%)"/>
4
+ <path d="M0 270 L163 113 L288 270 Z" fill="hsl(208 38% 50%)"/>
5
+ <path d="M192 270 L346 151 L480 270 Z" fill="hsl(208 38% 58%)"/>
6
+ </svg>
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="0 0 96 96" role="img">
2
+ <rect width="96" height="96" fill="hsl(41 42% 62%)"/>
3
+ <circle cx="48" cy="40.32" r="19.200000000000003" fill="hsl(41 42% 82%)"/>
4
+ <path d="M21.12 96 a26.880000000000003 32.64 0 0 1 53.760000000000005 0 z" fill="hsl(41 42% 82%)"/>
5
+ </svg>
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="0 0 96 96" role="img">
2
+ <rect width="96" height="96" fill="hsl(12 42% 62%)"/>
3
+ <circle cx="48" cy="40.32" r="19.200000000000003" fill="hsl(12 42% 82%)"/>
4
+ <path d="M21.12 96 a26.880000000000003 32.64 0 0 1 53.760000000000005 0 z" fill="hsl(12 42% 82%)"/>
5
+ </svg>
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="0 0 96 96" role="img">
2
+ <rect width="96" height="96" fill="hsl(224 42% 62%)"/>
3
+ <circle cx="48" cy="40.32" r="19.200000000000003" fill="hsl(224 42% 82%)"/>
4
+ <path d="M21.12 96 a26.880000000000003 32.64 0 0 1 53.760000000000005 0 z" fill="hsl(224 42% 82%)"/>
5
+ </svg>
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="0 0 96 96" role="img">
2
+ <rect width="96" height="96" fill="hsl(264 42% 62%)"/>
3
+ <circle cx="48" cy="40.32" r="19.200000000000003" fill="hsl(264 42% 82%)"/>
4
+ <path d="M21.12 96 a26.880000000000003 32.64 0 0 1 53.760000000000005 0 z" fill="hsl(264 42% 82%)"/>
5
+ </svg>
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="0 0 96 96" role="img">
2
+ <rect width="96" height="96" fill="hsl(152 42% 62%)"/>
3
+ <circle cx="48" cy="40.32" r="19.200000000000003" fill="hsl(152 42% 82%)"/>
4
+ <path d="M21.12 96 a26.880000000000003 32.64 0 0 1 53.760000000000005 0 z" fill="hsl(152 42% 82%)"/>
5
+ </svg>
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="0 0 96 96" role="img">
2
+ <rect width="96" height="96" fill="hsl(340 42% 62%)"/>
3
+ <circle cx="48" cy="40.32" r="19.200000000000003" fill="hsl(340 42% 82%)"/>
4
+ <path d="M21.12 96 a26.880000000000003 32.64 0 0 1 53.760000000000005 0 z" fill="hsl(340 42% 82%)"/>
5
+ </svg>
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="0 0 96 96" role="img">
2
+ <rect width="96" height="96" fill="hsl(212 42% 62%)"/>
3
+ <circle cx="48" cy="40.32" r="19.200000000000003" fill="hsl(212 42% 82%)"/>
4
+ <path d="M21.12 96 a26.880000000000003 32.64 0 0 1 53.760000000000005 0 z" fill="hsl(212 42% 82%)"/>
5
+ </svg>
@@ -0,0 +1,328 @@
1
+ import type * as React from "react";
2
+ import { Building2, UserPlus } from "lucide-react";
3
+ import { CompactBarTrend } from "@godxjp/ui/charts/compact-bar-trend";
4
+ import {
5
+ Card,
6
+ CardContent,
7
+ CardDescription,
8
+ CardHeader,
9
+ CardTitle,
10
+ StatCard,
11
+ } from "@godxjp/ui/data-display";
12
+ import { Text } from "@godxjp/ui/general";
13
+ import { Flex, PageContainer, ResponsiveGrid } from "@godxjp/ui/layout";
14
+
15
+ /**
16
+ * CompactBarTrend — the DEPENDENCY-FREE compact bar trend (gh#218).
17
+ *
18
+ * `BarChart` needs the `recharts` optional peer; a platform whose policy forbids screen
19
+ * implementers from adding dependencies cannot use it, and used to fall back to a page-local
20
+ * grid with inline heights. `CompactBarTrend` closes that gap: the marks are token-sized CSS
21
+ * blocks, so the canonical SCR-201 admin dashboard gets a real framework chart with zero
22
+ * consumer CSS, zero inline height math and zero hardcoded colour.
23
+ *
24
+ * Everything below is composed from real @godxjp/ui primitives only.
25
+ */
26
+
27
+ /** Seven days of new organizations — the canonical SCR-201 dataset. */
28
+ const newOrganizations = [
29
+ { date: "7/24", count: 4 },
30
+ { date: "7/25", count: 7 },
31
+ { date: "7/26", count: 2 },
32
+ { date: "7/27", count: 9 },
33
+ { date: "7/28", count: 5 },
34
+ { date: "7/29", count: 12 },
35
+ { date: "7/30", count: 8 },
36
+ ];
37
+
38
+ /** N is not fixed at seven — a fortnight reads at the same density. */
39
+ const fortnight = [
40
+ { date: "7/17", users: 120 },
41
+ { date: "7/18", users: 168 },
42
+ { date: "7/19", users: 96 },
43
+ { date: "7/20", users: 74 },
44
+ { date: "7/21", users: 210 },
45
+ { date: "7/22", users: 188 },
46
+ { date: "7/23", users: 152 },
47
+ { date: "7/24", users: 240 },
48
+ { date: "7/25", users: 196 },
49
+ { date: "7/26", users: 88 },
50
+ { date: "7/27", users: 132 },
51
+ { date: "7/28", users: 174 },
52
+ { date: "7/29", users: 262 },
53
+ { date: "7/30", users: 208 },
54
+ ];
55
+
56
+ /** Three points, zeros and a negative — the edge-data frame. */
57
+ const edgeData = [
58
+ { period: "第1四半期", revenue: 0 },
59
+ { period: "非常に長い期間ラベルの例", revenue: 4200000 },
60
+ { period: "第3四半期", revenue: -180000 },
61
+ ];
62
+
63
+ const jpy = { style: "currency", currency: "JPY", notation: "compact" } as const;
64
+
65
+ export default function Demo() {
66
+ return (
67
+ <PageContainer
68
+ title="CompactBarTrend"
69
+ subtitle="recharts 不要の軽量トレンド棒グラフ · 高さ・間隔・配色はすべて --chart-trend-* トークン"
70
+ >
71
+ <Flex direction="col" gap="lg">
72
+ {/* ── 1. The canonical SCR-201 dashboard summary row ─────────────────────── */}
73
+ <ResponsiveGrid columns={3}>
74
+ <Card>
75
+ <CardHeader>
76
+ <CardTitle level={2}>新規組織(7日間)</CardTitle>
77
+ <CardDescription>日別に作成された組織数。当日を強調表示。</CardDescription>
78
+ </CardHeader>
79
+ <CardContent>
80
+ <Flex direction="col" gap="md">
81
+ <StatCard label="今週の合計" value="47" delta="+18%" icon={Building2} />
82
+ <CompactBarTrend
83
+ label="新規組織(7日間)"
84
+ description="日別に作成された組織数"
85
+ data={newOrganizations}
86
+ categoryKey="date"
87
+ valueKey="count"
88
+ emphasizedIndex={5}
89
+ size="xs"
90
+ />
91
+ </Flex>
92
+ </CardContent>
93
+ </Card>
94
+
95
+ <Card>
96
+ <CardHeader>
97
+ <CardTitle level={2}>アクティビティフッター</CardTitle>
98
+ <CardDescription>
99
+ footer スロットはプロットの外側(role=img の外)に描画されるため、リンクも操作可能。
100
+ </CardDescription>
101
+ </CardHeader>
102
+ <CardContent>
103
+ <Flex direction="col" gap="md">
104
+ <StatCard label="新規ユーザー" value="1,284" delta="+6%" icon={UserPlus} />
105
+ <CompactBarTrend
106
+ label="新規ユーザー(7日間)"
107
+ data={newOrganizations}
108
+ categoryKey="date"
109
+ valueKey="count"
110
+ emphasizedIndex={-1}
111
+ footer={
112
+ <Text size="xs" tone="muted">
113
+ 最終更新 2026-07-30 09:00 JST
114
+ </Text>
115
+ }
116
+ />
117
+ </Flex>
118
+ </CardContent>
119
+ </Card>
120
+
121
+ <Card>
122
+ <CardHeader>
123
+ <CardTitle level={2}>空状態</CardTitle>
124
+ <CardDescription>data が空のとき EmptyState を描画します。</CardDescription>
125
+ </CardHeader>
126
+ <CardContent>
127
+ <Flex direction="col" gap="md">
128
+ <CompactBarTrend
129
+ label="新規組織(データなし)"
130
+ data={[]}
131
+ categoryKey="date"
132
+ valueKey="count"
133
+ emptyMessage="この期間のデータはありません"
134
+ />
135
+ <CompactBarTrend
136
+ label="既定の空メッセージ"
137
+ data={[]}
138
+ categoryKey="date"
139
+ valueKey="count"
140
+ />
141
+ </Flex>
142
+ </CardContent>
143
+ </Card>
144
+ </ResponsiveGrid>
145
+
146
+ {/* ── 2. size — the xs|sm|md|lg plot-height tiers ────────────────────────── */}
147
+ <Card>
148
+ <CardHeader>
149
+ <CardTitle level={2}>size · 高さティア</CardTitle>
150
+ <CardDescription>
151
+ xs(ダッシュボード要約カードの既定)· sm · md · lg。高さは --chart-trend-plot-height-*
152
+ が所有し、px を書くことはありません。
153
+ </CardDescription>
154
+ </CardHeader>
155
+ <CardContent>
156
+ <ResponsiveGrid columns={4}>
157
+ {(["xs", "sm", "md", "lg"] as const).map((size) => (
158
+ <CompactBarTrend
159
+ key={size}
160
+ label={`size="${size}"`}
161
+ data={newOrganizations}
162
+ categoryKey="date"
163
+ valueKey="count"
164
+ emphasizedIndex={-1}
165
+ size={size}
166
+ />
167
+ ))}
168
+ </ResponsiveGrid>
169
+ </CardContent>
170
+ </Card>
171
+
172
+ {/* ── 3. emphasizedIndex + showCategoryLabels + numberFormat ─────────────── */}
173
+ <ResponsiveGrid columns={2}>
174
+ <Card>
175
+ <CardHeader>
176
+ <CardTitle level={2}>emphasizedIndex</CardTitle>
177
+ <CardDescription>
178
+ 未指定=強調なし · 正の index · 負の index(-1 は最新)。強調は色だけに頼らず、
179
+ 代替テキストの該当行にも注記されます(WCAG 1.4.1)。
180
+ </CardDescription>
181
+ </CardHeader>
182
+ <CardContent>
183
+ <Flex direction="col" gap="md">
184
+ <CompactBarTrend
185
+ label="強調なし"
186
+ data={newOrganizations}
187
+ categoryKey="date"
188
+ valueKey="count"
189
+ size="sm"
190
+ />
191
+ <CompactBarTrend
192
+ label="emphasizedIndex={0}(最初の日)"
193
+ data={newOrganizations}
194
+ categoryKey="date"
195
+ valueKey="count"
196
+ emphasizedIndex={0}
197
+ size="sm"
198
+ />
199
+ <CompactBarTrend
200
+ label="emphasizedIndex={-1}(最新の日)"
201
+ data={newOrganizations}
202
+ categoryKey="date"
203
+ valueKey="count"
204
+ emphasizedIndex={-1}
205
+ size="sm"
206
+ />
207
+ </Flex>
208
+ </CardContent>
209
+ </Card>
210
+
211
+ <Card>
212
+ <CardHeader>
213
+ <CardTitle level={2}>showCategoryLabels · numberFormat</CardTitle>
214
+ <CardDescription>
215
+ ラベルを消してもデータは代替テキストに残ります。値の書式は Intl.NumberFormat
216
+ (ロケール自動)。
217
+ </CardDescription>
218
+ </CardHeader>
219
+ <CardContent>
220
+ <Flex direction="col" gap="md">
221
+ <CompactBarTrend
222
+ label="14日間のアクティブユーザー(目盛りなし)"
223
+ description="7 点固定ではありません。N 件の category/value に対応します。"
224
+ data={fortnight}
225
+ categoryKey="date"
226
+ valueKey="users"
227
+ emphasizedIndex={-1}
228
+ showCategoryLabels={false}
229
+ size="sm"
230
+ numberFormat={{ notation: "compact" }}
231
+ />
232
+ <CompactBarTrend
233
+ label="四半期売上(通貨・端数データ)"
234
+ description="0・負数・長いカテゴリ名を含む edge-data フレーム。"
235
+ data={edgeData}
236
+ categoryKey="period"
237
+ valueKey="revenue"
238
+ emphasizedIndex={1}
239
+ size="sm"
240
+ numberFormat={jpy}
241
+ />
242
+ </Flex>
243
+ </CardContent>
244
+ </Card>
245
+ </ResponsiveGrid>
246
+
247
+ {/* ── 4. Responsive — 1440 / 1024 / 390 container widths ─────────────────── */}
248
+ <Card>
249
+ <CardHeader>
250
+ <CardTitle level={2}>レスポンシブ · 1440 / 1024 / 390</CardTitle>
251
+ <CardDescription>
252
+ 棒は flex 1 1 0 で幅を分け合うため、同じマークアップがどのコンテナ幅にも収まります。
253
+ 長い目盛りラベルはカードを広げずに省略されます。
254
+ </CardDescription>
255
+ </CardHeader>
256
+ <CardContent>
257
+ <Flex direction="col" gap="lg">
258
+ {[1440, 1024, 390].map((width) => (
259
+ <Flex key={width} direction="col" gap="sm" style={{ maxInlineSize: `${width}px` }}>
260
+ <Text size="xs" tone="muted">{`コンテナ幅 ${width}px`}</Text>
261
+ <CompactBarTrend
262
+ label="新規組織(7日間)"
263
+ description="日別に作成された組織数"
264
+ data={newOrganizations}
265
+ categoryKey="date"
266
+ valueKey="count"
267
+ emphasizedIndex={5}
268
+ footer={
269
+ <Text size="xs" tone="muted">
270
+ 直近のアクティビティを見る
271
+ </Text>
272
+ }
273
+ />
274
+ </Flex>
275
+ ))}
276
+ </Flex>
277
+ </CardContent>
278
+ </Card>
279
+
280
+ {/* ── 5. Token theming (cardinal rules #44/#45) ──────────────────────────── */}
281
+ <Card>
282
+ <CardHeader>
283
+ <CardTitle level={2}>トークンでのテーマ適用</CardTitle>
284
+ <CardDescription>
285
+ サービス側の theme.css が --chart-trend-*
286
+ を一度上書きするだけで密度も配色も変わります。 ページ固有の CSS
287
+ は不要です。ベースラインは既定で「静か」(#44)、opt-in で表示します。
288
+ </CardDescription>
289
+ </CardHeader>
290
+ <CardContent>
291
+ <ResponsiveGrid columns={2}>
292
+ <CompactBarTrend
293
+ label="既定"
294
+ data={newOrganizations}
295
+ categoryKey="date"
296
+ valueKey="count"
297
+ emphasizedIndex={-1}
298
+ size="sm"
299
+ />
300
+ <Flex
301
+ direction="col"
302
+ style={
303
+ {
304
+ "--chart-trend-bar-gap": "var(--space-1)",
305
+ "--chart-trend-bar-radius": "var(--radius-pill)",
306
+ "--chart-trend-bar-max-width": "var(--space-3)",
307
+ "--chart-trend-bar-background": "hsl(var(--chart-2) / 0.35)",
308
+ "--chart-trend-bar-emphasis-background": "hsl(var(--chart-2))",
309
+ "--chart-trend-baseline-border": "1px solid hsl(var(--border))",
310
+ } as React.CSSProperties
311
+ }
312
+ >
313
+ <CompactBarTrend
314
+ label="テーマ適用(間隔・角丸・配色・ベースライン)"
315
+ data={newOrganizations}
316
+ categoryKey="date"
317
+ valueKey="count"
318
+ emphasizedIndex={-1}
319
+ size="sm"
320
+ />
321
+ </Flex>
322
+ </ResponsiveGrid>
323
+ </CardContent>
324
+ </Card>
325
+ </Flex>
326
+ </PageContainer>
327
+ );
328
+ }
@@ -0,0 +1,192 @@
1
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@godxjp/ui/data-display";
2
+ import { Text } from "@godxjp/ui/general";
3
+ import { Flex, PageContainer, ResponsiveGrid } from "@godxjp/ui/layout";
4
+ import { AreaChart, BarChart, LineChart, PieChart } from "@godxjp/ui/charts";
5
+
6
+ /**
7
+ * Chart size tiers — the `size` prop of every recharts-backed chart
8
+ * (`LineChart` / `BarChart` / `AreaChart` / `PieChart`).
9
+ *
10
+ * `size` is the CANVAS HEIGHT tier: xs は密度の高いサマリーカード、sm はカード内の補助グラフ、
11
+ * md(既定)は本文の標準グラフ、lg は分析画面の主役グラフ向けです。高さはコンポーネントが所有し、
12
+ * 画面側が px を書くことはありません(`height` を渡した場合のみ size より優先されます)。
13
+ *
14
+ * 系列の配色は --chart-1..6 パレット、目盛りと凡例の数値は Intl.NumberFormat(ロケール自動)、
15
+ * 代替テキストは各グラフが内蔵しています。すべて real @godxjp/ui primitives のみで構成しています。
16
+ */
17
+
18
+ const tiers = ["xs", "sm", "md", "lg"] as const;
19
+
20
+ /** LineChart — 2 系列(計画と実績)。系列が複数あるため凡例は既定のまま表示します。 */
21
+ const revenue = [
22
+ { month: "1月", plan: 1200000, actual: 980000 },
23
+ { month: "2月", plan: 1500000, actual: 1610000 },
24
+ { month: "3月", plan: 1800000, actual: 1750000 },
25
+ { month: "4月", plan: 1600000, actual: 1720000 },
26
+ { month: "5月", plan: 2000000, actual: 1980000 },
27
+ { month: "6月", plan: 2200000, actual: 2410000 },
28
+ ];
29
+
30
+ /** BarChart — 単一系列。凡例は不要(見出しが系列名を兼ねます)。 */
31
+ const organizations = [
32
+ { month: "1月", created: 24 },
33
+ { month: "2月", created: 31 },
34
+ { month: "3月", created: 18 },
35
+ { month: "4月", created: 42 },
36
+ { month: "5月", created: 37 },
37
+ { month: "6月", created: 51 },
38
+ ];
39
+
40
+ /** AreaChart — 単一系列の推移。 */
41
+ const sessions = [
42
+ { week: "第1週", sessions: 12400 },
43
+ { week: "第2週", sessions: 15800 },
44
+ { week: "第3週", sessions: 14200 },
45
+ { week: "第4週", sessions: 19600 },
46
+ { week: "第5週", sessions: 18100 },
47
+ ];
48
+
49
+ /** PieChart — 少数スライスの構成比。 */
50
+ const expenses = [
51
+ { category: "給与", amount: 4200000 },
52
+ { category: "家賃", amount: 1800000 },
53
+ { category: "システム", amount: 950000 },
54
+ { category: "光熱費", amount: 600000 },
55
+ ];
56
+
57
+ const jpy = { style: "currency", currency: "JPY", notation: "compact" } as const;
58
+
59
+ export default function Demo() {
60
+ return (
61
+ <PageContainer
62
+ title="Chart size tiers"
63
+ subtitle="LineChart · BarChart · AreaChart · PieChart の size = xs / sm / md / lg"
64
+ >
65
+ <Flex direction="col" gap="lg">
66
+ <Card>
67
+ <CardHeader>
68
+ <CardTitle level={2}>LineChart · size</CardTitle>
69
+ <CardDescription>
70
+ 複数系列の推移。size はキャンバス高さのティアだけを変え、配色・凡例・数値書式・
71
+ 代替テキストはどのティアでも同じ契約のままです。
72
+ </CardDescription>
73
+ </CardHeader>
74
+ <CardContent>
75
+ <ResponsiveGrid columns={2}>
76
+ {tiers.map((size) => (
77
+ <Flex key={size} direction="col" gap="xs">
78
+ <Text size="2xs" mono tone="muted">
79
+ {`size="${size}"`}
80
+ </Text>
81
+ <LineChart
82
+ label={`月次売上(計画 vs 実績)size="${size}"`}
83
+ data={revenue}
84
+ categoryKey="month"
85
+ series={[
86
+ { dataKey: "plan", label: "計画" },
87
+ { dataKey: "actual", label: "実績" },
88
+ ]}
89
+ numberFormat={jpy}
90
+ size={size}
91
+ curved
92
+ />
93
+ </Flex>
94
+ ))}
95
+ </ResponsiveGrid>
96
+ </CardContent>
97
+ </Card>
98
+
99
+ <Card>
100
+ <CardHeader>
101
+ <CardTitle level={2}>BarChart · size</CardTitle>
102
+ <CardDescription>
103
+ 単一系列のため凡例は表示しません。xs はダッシュボードのサマリーカードに収まる密度、 lg
104
+ は分析画面の主役グラフです。
105
+ </CardDescription>
106
+ </CardHeader>
107
+ <CardContent>
108
+ <ResponsiveGrid columns={2}>
109
+ {tiers.map((size) => (
110
+ <Flex key={size} direction="col" gap="xs">
111
+ <Text size="2xs" mono tone="muted">
112
+ {`size="${size}"`}
113
+ </Text>
114
+ <BarChart
115
+ label={`新規組織数(月別)size="${size}"`}
116
+ data={organizations}
117
+ categoryKey="month"
118
+ series={[{ dataKey: "created", label: "新規組織" }]}
119
+ numberFormat={{ notation: "compact" }}
120
+ showLegend={false}
121
+ size={size}
122
+ />
123
+ </Flex>
124
+ ))}
125
+ </ResponsiveGrid>
126
+ </CardContent>
127
+ </Card>
128
+
129
+ <Card>
130
+ <CardHeader>
131
+ <CardTitle level={2}>AreaChart · size</CardTitle>
132
+ <CardDescription>
133
+ 面グラフでも高さティアの扱いは同じです。低いティアでは縦軸の目盛りが自動的に
134
+ 間引かれるため、密度の高いカードでも軸ラベルが衝突しません。
135
+ </CardDescription>
136
+ </CardHeader>
137
+ <CardContent>
138
+ <ResponsiveGrid columns={2}>
139
+ {tiers.map((size) => (
140
+ <Flex key={size} direction="col" gap="xs">
141
+ <Text size="2xs" mono tone="muted">
142
+ {`size="${size}"`}
143
+ </Text>
144
+ <AreaChart
145
+ label={`週次セッション数 size="${size}"`}
146
+ data={sessions}
147
+ categoryKey="week"
148
+ series={[{ dataKey: "sessions", label: "セッション" }]}
149
+ numberFormat={{ notation: "compact" }}
150
+ showLegend={false}
151
+ size={size}
152
+ curved
153
+ />
154
+ </Flex>
155
+ ))}
156
+ </ResponsiveGrid>
157
+ </CardContent>
158
+ </Card>
159
+
160
+ <Card>
161
+ <CardHeader>
162
+ <CardTitle level={2}>PieChart · size</CardTitle>
163
+ <CardDescription>
164
+ 円グラフは凡例で識別するため、どのティアでも凡例を残します。低いティアでは
165
+ 凡例の分だけ描画領域が狭くなるので、スライスは 5 件以下に保つのが読みやすい設計です。
166
+ </CardDescription>
167
+ </CardHeader>
168
+ <CardContent>
169
+ <ResponsiveGrid columns={2}>
170
+ {tiers.map((size) => (
171
+ <Flex key={size} direction="col" gap="xs">
172
+ <Text size="2xs" mono tone="muted">
173
+ {`size="${size}"`}
174
+ </Text>
175
+ <PieChart
176
+ label={`経費内訳 size="${size}"`}
177
+ data={expenses}
178
+ dataKey="amount"
179
+ nameKey="category"
180
+ numberFormat={jpy}
181
+ size={size}
182
+ donut
183
+ />
184
+ </Flex>
185
+ ))}
186
+ </ResponsiveGrid>
187
+ </CardContent>
188
+ </Card>
189
+ </Flex>
190
+ </PageContainer>
191
+ );
192
+ }