@godxjp/ui 19.1.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 (436) 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 +2 -12
  11. package/dist/components/data-display/card.d.ts +21 -41
  12. package/dist/components/data-display/carousel.d.ts +1 -2
  13. package/dist/components/data-display/code-block.d.ts +4 -0
  14. package/dist/components/data-display/code-block.js +24 -0
  15. package/dist/components/data-display/data-table.d.ts +15 -37
  16. package/dist/components/data-display/data-table.js +1 -3
  17. package/dist/components/data-display/descriptions.d.ts +2 -6
  18. package/dist/components/data-display/descriptions.js +0 -2
  19. package/dist/components/data-display/index.d.ts +4 -0
  20. package/dist/components/data-display/index.js +4 -0
  21. package/dist/components/data-display/list-row.d.ts +3 -22
  22. package/dist/components/data-display/permission-matrix.d.ts +7 -20
  23. package/dist/components/data-display/progress.d.ts +1 -1
  24. package/dist/components/data-display/prose.d.ts +4 -0
  25. package/dist/components/data-display/prose.js +20 -0
  26. package/dist/components/data-display/service-launcher-card.d.ts +3 -10
  27. package/dist/components/data-display/table.d.ts +20 -80
  28. package/dist/components/data-display/table.js +0 -3
  29. package/dist/components/data-display/timeline.d.ts +3 -5
  30. package/dist/components/data-entry/branch-scope-picker.d.ts +2 -19
  31. package/dist/components/data-entry/branch-scope-picker.js +0 -1
  32. package/dist/components/data-entry/calendar.d.ts +3 -2
  33. package/dist/components/data-entry/calendar.js +58 -3
  34. package/dist/components/data-entry/command-palette.d.ts +8 -22
  35. package/dist/components/data-entry/date-picker.d.ts +4 -5
  36. package/dist/components/data-entry/date-picker.js +6 -1
  37. package/dist/components/data-entry/date-range-picker.d.ts +1 -1
  38. package/dist/components/data-entry/date-range-picker.js +8 -3
  39. package/dist/components/data-entry/form-errors.d.ts +7 -18
  40. package/dist/components/data-entry/form-field.js +1 -5
  41. package/dist/components/data-entry/form.d.ts +1 -9
  42. package/dist/components/data-entry/input.d.ts +16 -14
  43. package/dist/components/data-entry/input.js +3 -0
  44. package/dist/components/data-entry/month-picker.js +2 -2
  45. package/dist/components/data-entry/month-range-picker.d.ts +4 -6
  46. package/dist/components/data-entry/month-range-picker.js +2 -2
  47. package/dist/components/data-entry/number-input.d.ts +1 -5
  48. package/dist/components/data-entry/number-input.js +1 -0
  49. package/dist/components/data-entry/radio.js +0 -1
  50. package/dist/components/data-entry/search-select.d.ts +2 -4
  51. package/dist/components/data-entry/select.d.ts +11 -6
  52. package/dist/components/data-entry/select.js +4 -2
  53. package/dist/components/data-entry/switch.js +0 -1
  54. package/dist/components/data-entry/textarea.d.ts +10 -16
  55. package/dist/components/data-entry/time-picker.d.ts +3 -5
  56. package/dist/components/data-entry/upload-types.d.ts +1 -5
  57. package/dist/components/data-entry/use-upload-draft.d.ts +0 -4
  58. package/dist/components/feedback/dialog.d.ts +6 -15
  59. package/dist/components/feedback/overlay-header-tone.d.ts +1 -1
  60. package/dist/components/feedback/sheet.d.ts +3 -10
  61. package/dist/components/feedback/sheet.js +1 -1
  62. package/dist/components/feedback/sonner.js +2 -3
  63. package/dist/components/general/activity.d.ts +4 -30
  64. package/dist/components/general/button.js +1 -10
  65. package/dist/components/general/logo.d.ts +6 -28
  66. package/dist/components/general/reveal.d.ts +3 -9
  67. package/dist/components/general/typography.d.ts +1 -3
  68. package/dist/components/layout/account-chip.d.ts +8 -0
  69. package/dist/components/layout/account-chip.js +45 -0
  70. package/dist/components/layout/auth-divider.d.ts +2 -9
  71. package/dist/components/layout/auth-shell.d.ts +1 -14
  72. package/dist/components/layout/breadcrumb.d.ts +1 -5
  73. package/dist/components/layout/centered-shell.d.ts +4 -18
  74. package/dist/components/layout/error-surface.d.ts +11 -28
  75. package/dist/components/layout/error-surface.js +4 -1
  76. package/dist/components/layout/index.d.ts +2 -0
  77. package/dist/components/layout/index.js +2 -0
  78. package/dist/components/layout/legal-document-shell.d.ts +5 -28
  79. package/dist/components/layout/master-detail.d.ts +2 -18
  80. package/dist/components/layout/page-container.js +0 -1
  81. package/dist/components/layout/responsive-grid.d.ts +6 -1
  82. package/dist/components/layout/responsive-grid.js +9 -2
  83. package/dist/components/layout/service-role-panel.d.ts +7 -19
  84. package/dist/components/layout/sidebar.d.ts +5 -27
  85. package/dist/components/layout/sidebar.js +0 -1
  86. package/dist/components/layout/split-pane.d.ts +0 -7
  87. package/dist/components/layout/topbar.d.ts +1 -14
  88. package/dist/components/navigation/app-setting-picker.js +1 -3
  89. package/dist/components/navigation/filter-bar.d.ts +1 -6
  90. package/dist/components/navigation/pagination-utils.d.ts +2 -12
  91. package/dist/components/navigation/tabs-scroll.d.ts +2 -36
  92. package/dist/components/navigation/tabs.js +4 -8
  93. package/dist/components/query/data-state.d.ts +2 -2
  94. package/dist/components/ui/credential-reveal.d.ts +1 -4
  95. package/dist/components/ui/hover-card.d.ts +1 -2
  96. package/dist/components/ui/separator.d.ts +2 -15
  97. package/dist/components/ui/toggle-group.d.ts +1 -5
  98. package/dist/components/ui/toggle.d.ts +6 -31
  99. package/dist/email/brand-mark.d.ts +6 -34
  100. package/dist/email/color.d.ts +7 -17
  101. package/dist/email/geometry.d.ts +4 -8
  102. package/dist/email/index.d.ts +4 -48
  103. package/dist/email/inline-style.d.ts +3 -9
  104. package/dist/email/urgency.d.ts +2 -7
  105. package/dist/form/form-context.d.ts +2 -5
  106. package/dist/form/form-root.d.ts +1 -2
  107. package/dist/i18n/messages/en.json +4 -0
  108. package/dist/i18n/messages/ja.json +4 -0
  109. package/dist/i18n/messages/vi.json +4 -0
  110. package/dist/inertia/index.d.ts +2 -10
  111. package/dist/lib/control-styles.d.ts +10 -21
  112. package/dist/lib/control-styles.js +4 -6
  113. package/dist/lib/datetime/format-date.d.ts +1 -4
  114. package/dist/lib/field-a11y.d.ts +11 -68
  115. package/dist/lib/field-a11y.js +0 -1
  116. package/dist/lib/format.d.ts +4 -8
  117. package/dist/lib/hooks.d.ts +6 -12
  118. package/dist/lib/permission-grid.d.ts +3 -18
  119. package/dist/lib/query-error.d.ts +3 -3
  120. package/dist/props/components/app.prop.d.ts +15 -38
  121. package/dist/props/components/charts.prop.d.ts +2 -3
  122. package/dist/props/components/data-display.prop.d.ts +48 -72
  123. package/dist/props/components/data-entry.prop.d.ts +35 -40
  124. package/dist/props/components/form.prop.d.ts +2 -6
  125. package/dist/props/components/general.prop.d.ts +11 -27
  126. package/dist/props/components/layout.prop.d.ts +89 -260
  127. package/dist/props/components/navigation.prop.d.ts +27 -42
  128. package/dist/props/registry.d.ts +31 -0
  129. package/dist/props/registry.js +33 -0
  130. package/dist/props/vocabulary/data.prop.d.ts +18 -49
  131. package/dist/props/vocabulary/index.d.ts +1 -1
  132. package/dist/props/vocabulary/interaction.prop.d.ts +10 -12
  133. package/dist/props/vocabulary/layout.prop.d.ts +8 -30
  134. package/dist/props/vocabulary/shared.prop.d.ts +3 -2
  135. package/dist/styles/alert-layout.css +1 -32
  136. package/dist/styles/badge-layout.css +4 -18
  137. package/dist/styles/base.css +14 -113
  138. package/dist/styles/card-layout.css +6 -128
  139. package/dist/styles/chart-layout.css +2 -17
  140. package/dist/styles/control.css +380 -458
  141. package/dist/styles/core.css +21 -0
  142. package/dist/styles/data-display-layout.css +175 -94
  143. package/dist/styles/data-entry-layout.css +0 -45
  144. package/dist/styles/density.css +1 -30
  145. package/dist/styles/dialog-layout.css +5 -69
  146. package/dist/styles/focus-ring.css +13 -87
  147. package/dist/styles/fonts.css +1 -31
  148. package/dist/styles/form-layout.css +7 -91
  149. package/dist/styles/index.css +2 -20
  150. package/dist/styles/layout.css +38 -456
  151. package/dist/styles/logo-layout.css +1 -35
  152. package/dist/styles/motion.css +3 -42
  153. package/dist/styles/navigation-layout.css +3 -50
  154. package/dist/styles/shell-layout.css +37 -403
  155. package/dist/styles/table-layout.css +16 -274
  156. package/dist/styles/text-layout.css +7 -21
  157. package/dist/styles/toggle.css +1 -23
  158. package/dist/theme/dxs.canonical.css +1 -55
  159. package/dist/theme/example.service.css +1 -26
  160. package/dist/theme/famgia.service.css +5 -15
  161. package/dist/tokens/axes.css +3 -40
  162. package/dist/tokens/base.css +1 -4
  163. package/dist/tokens/components/activity.css +6 -42
  164. package/dist/tokens/components/badge.css +4 -13
  165. package/dist/tokens/components/banner.css +4 -9
  166. package/dist/tokens/components/card.css +32 -88
  167. package/dist/tokens/components/chart.css +9 -26
  168. package/dist/tokens/components/control.css +37 -222
  169. package/dist/tokens/components/data-display.css +28 -79
  170. package/dist/tokens/components/data-entry.css +5 -19
  171. package/dist/tokens/components/descriptions.css +7 -27
  172. package/dist/tokens/components/email.css +38 -84
  173. package/dist/tokens/components/error-surface.css +2 -18
  174. package/dist/tokens/components/feedback.css +27 -124
  175. package/dist/tokens/components/form.css +13 -45
  176. package/dist/tokens/components/legal-document.css +16 -41
  177. package/dist/tokens/components/list-row.css +11 -36
  178. package/dist/tokens/components/logo.css +2 -57
  179. package/dist/tokens/components/navigation.css +16 -94
  180. package/dist/tokens/components/scroll-area.css +2 -18
  181. package/dist/tokens/components/separator.css +8 -30
  182. package/dist/tokens/components/sheet.css +3 -14
  183. package/dist/tokens/components/shell.css +53 -307
  184. package/dist/tokens/components/sidebar.css +5 -22
  185. package/dist/tokens/components/table.css +19 -140
  186. package/dist/tokens/components/toggle.css +3 -65
  187. package/dist/tokens/components/upload.css +7 -43
  188. package/dist/tokens/foundation.css +108 -383
  189. package/dist/tokens/semantic/layout.css +33 -207
  190. package/docs/CANONICAL-CONTRACTS.md +206 -0
  191. package/docs/COMPONENTS.md +157 -0
  192. package/docs/COMPOSITION-VS-COMPONENT.md +105 -0
  193. package/docs/CONSUMER-RULES.md +14 -0
  194. package/docs/CUSTOMER-THEMING.md +162 -0
  195. package/docs/DATETIME.md +69 -0
  196. package/docs/DEVELOPMENT.md +173 -0
  197. package/docs/FORMS.md +143 -0
  198. package/docs/FRAME-A11Y-CI.md +267 -0
  199. package/docs/FRAME-COVERAGE-LEDGER.md +123 -0
  200. package/docs/FRAME-COVERAGE-REPORT.md +140 -0
  201. package/docs/FRAME-COVERAGE-STANDARD.md +65 -0
  202. package/docs/FRAME-COVERAGE.md +29 -0
  203. package/docs/PROPS-REGISTRY.md +61 -0
  204. package/docs/PROPS-VOCABULARY.md +100 -0
  205. package/docs/README.md +60 -0
  206. package/docs/REGISTRY.md +70 -0
  207. package/docs/SPACING.md +56 -0
  208. package/docs/STANDARDS-vocabulary-tokens.md +48 -0
  209. package/docs/TESTING.md +98 -0
  210. package/docs/TOKENS.md +347 -0
  211. package/docs/asset-modules.d.ts +46 -0
  212. package/docs/assets/cover-terrain.svg +6 -0
  213. package/docs/assets/portrait-amber.svg +5 -0
  214. package/docs/assets/portrait-clay.svg +5 -0
  215. package/docs/assets/portrait-indigo.svg +5 -0
  216. package/docs/assets/portrait-iris.svg +5 -0
  217. package/docs/assets/portrait-moss.svg +5 -0
  218. package/docs/assets/portrait-plum.svg +5 -0
  219. package/docs/assets/portrait-slate.svg +5 -0
  220. package/docs/charts/compact-bar-trend.tsx +328 -0
  221. package/docs/charts/size-tiers.tsx +192 -0
  222. package/docs/data-display/accordion.tsx +99 -0
  223. package/docs/data-display/avatar.tsx +355 -0
  224. package/docs/data-display/badge.tsx +247 -0
  225. package/docs/data-display/card/examples/detail-panel.tsx +106 -0
  226. package/docs/data-display/card/index.md +3 -0
  227. package/docs/data-display/card/index.tsx +285 -0
  228. package/docs/data-display/carousel.tsx +156 -0
  229. package/docs/data-display/charts.tsx +198 -0
  230. package/docs/data-display/code-block.tsx +90 -0
  231. package/docs/data-display/collapsible.tsx +162 -0
  232. package/docs/data-display/credential-reveal.tsx +145 -0
  233. package/docs/data-display/data-table/examples/approval-queue.tsx +212 -0
  234. package/docs/data-display/data-table/examples/grid-features.tsx +158 -0
  235. package/docs/data-display/data-table/examples/list-page.tsx +175 -0
  236. package/docs/data-display/data-table/index.md +5 -0
  237. package/docs/data-display/data-table/index.tsx +295 -0
  238. package/docs/data-display/descriptions.tsx +143 -0
  239. package/docs/data-display/empty-state.tsx +164 -0
  240. package/docs/data-display/hover-card.tsx +181 -0
  241. package/docs/data-display/list-row.tsx +420 -0
  242. package/docs/data-display/permission-matrix.tsx +184 -0
  243. package/docs/data-display/popover-touch.tsx +27 -0
  244. package/docs/data-display/popover.tsx +245 -0
  245. package/docs/data-display/progress.tsx +84 -0
  246. package/docs/data-display/prose.tsx +105 -0
  247. package/docs/data-display/qr-code.tsx +68 -0
  248. package/docs/data-display/scroll-area.tsx +271 -0
  249. package/docs/data-display/service-launcher-card.tsx +145 -0
  250. package/docs/data-display/stat-card.tsx +99 -0
  251. package/docs/data-display/table.tsx +251 -0
  252. package/docs/data-display/timeline.tsx +112 -0
  253. package/docs/data-display/touch-actions.tsx +36 -0
  254. package/docs/data-display/tree-list.tsx +107 -0
  255. package/docs/data-entry/branch-scope-picker.tsx +123 -0
  256. package/docs/data-entry/calendar.tsx +180 -0
  257. package/docs/data-entry/cascader.tsx +378 -0
  258. package/docs/data-entry/checkbox.tsx +256 -0
  259. package/docs/data-entry/color-picker.tsx +117 -0
  260. package/docs/data-entry/command-palette.tsx +179 -0
  261. package/docs/data-entry/command.tsx +262 -0
  262. package/docs/data-entry/country-picker-recipe.tsx +170 -0
  263. package/docs/data-entry/date-picker.tsx +191 -0
  264. package/docs/data-entry/date-range-picker.tsx +149 -0
  265. package/docs/data-entry/form/examples/employee-settings.tsx +267 -0
  266. package/docs/data-entry/form/examples/invoice-form.tsx +387 -0
  267. package/docs/data-entry/form-field/examples/a11y-contract.tsx +240 -0
  268. package/docs/data-entry/form-field/examples/create-form.tsx +105 -0
  269. package/docs/data-entry/form-field/index.md +8 -0
  270. package/docs/data-entry/form-field/index.tsx +326 -0
  271. package/docs/data-entry/form-inertia.tsx +80 -0
  272. package/docs/data-entry/form-root.tsx +102 -0
  273. package/docs/data-entry/form.tsx +724 -0
  274. package/docs/data-entry/input-otp.tsx +231 -0
  275. package/docs/data-entry/input.tsx +114 -0
  276. package/docs/data-entry/label.tsx +100 -0
  277. package/docs/data-entry/month-picker.tsx +101 -0
  278. package/docs/data-entry/month-range-picker.tsx +115 -0
  279. package/docs/data-entry/number-input.tsx +240 -0
  280. package/docs/data-entry/password-input.tsx +106 -0
  281. package/docs/data-entry/password-strength.tsx +97 -0
  282. package/docs/data-entry/radio-group.tsx +95 -0
  283. package/docs/data-entry/rating.tsx +87 -0
  284. package/docs/data-entry/search-input.tsx +120 -0
  285. package/docs/data-entry/select-async-contracts.tsx +108 -0
  286. package/docs/data-entry/select-matrix.tsx +204 -0
  287. package/docs/data-entry/select.tsx +369 -0
  288. package/docs/data-entry/slider.tsx +130 -0
  289. package/docs/data-entry/switch.tsx +67 -0
  290. package/docs/data-entry/tag-input.tsx +108 -0
  291. package/docs/data-entry/textarea.tsx +209 -0
  292. package/docs/data-entry/time-picker.tsx +99 -0
  293. package/docs/data-entry/toggle-count.tsx +293 -0
  294. package/docs/data-entry/toggle-group.tsx +225 -0
  295. package/docs/data-entry/toggle.tsx +127 -0
  296. package/docs/data-entry/transfer.tsx +97 -0
  297. package/docs/data-entry/tree-select.tsx +204 -0
  298. package/docs/data-entry/upload.tsx +184 -0
  299. package/docs/feedback/alert-dialog.tsx +270 -0
  300. package/docs/feedback/alert.tsx +248 -0
  301. package/docs/feedback/banner.tsx +183 -0
  302. package/docs/feedback/danger-confirm.tsx +88 -0
  303. package/docs/feedback/dialog-touch.tsx +24 -0
  304. package/docs/feedback/dialog.tsx +193 -0
  305. package/docs/feedback/sheet.tsx +410 -0
  306. package/docs/feedback/skeleton.tsx +111 -0
  307. package/docs/feedback/toast.tsx +135 -0
  308. package/docs/feedback/tooltip.tsx +171 -0
  309. package/docs/feedback/two-factor-setup.tsx +68 -0
  310. package/docs/foundation/_email-specimen.ts +274 -0
  311. package/docs/foundation/colors.tsx +202 -0
  312. package/docs/foundation/density.tsx +232 -0
  313. package/docs/foundation/email-tokens.tsx +306 -0
  314. package/docs/foundation/radius-shadow.tsx +152 -0
  315. package/docs/foundation/spacing.tsx +211 -0
  316. package/docs/foundation/typography.tsx +147 -0
  317. package/docs/general/activity.tsx +224 -0
  318. package/docs/general/button/examples/destructive-confirm.tsx +90 -0
  319. package/docs/general/button/examples/form-actions.tsx +85 -0
  320. package/docs/general/button/examples/toolbar.tsx +160 -0
  321. package/docs/general/button/index.md +12 -0
  322. package/docs/general/button/index.tsx +211 -0
  323. package/docs/general/logo.tsx +131 -0
  324. package/docs/general/reveal.tsx +41 -0
  325. package/docs/general/typography.tsx +152 -0
  326. package/docs/layout/account-chip.tsx +72 -0
  327. package/docs/layout/admin-collection.tsx +122 -0
  328. package/docs/layout/app-shell.tsx +374 -0
  329. package/docs/layout/aspect-ratio.tsx +119 -0
  330. package/docs/layout/auth-account-summary.tsx +103 -0
  331. package/docs/layout/auth-divider.tsx +28 -0
  332. package/docs/layout/auth-footer.tsx +37 -0
  333. package/docs/layout/auth-identity.tsx +36 -0
  334. package/docs/layout/auth-recovery/examples/mfa-challenge.md +41 -0
  335. package/docs/layout/auth-recovery/examples/mfa-challenge.tsx +254 -0
  336. package/docs/layout/auth-recovery/examples/mobile-390.md +25 -0
  337. package/docs/layout/auth-recovery/examples/mobile-390.tsx +82 -0
  338. package/docs/layout/auth-recovery/examples/password-recovery.md +24 -0
  339. package/docs/layout/auth-recovery/examples/password-recovery.tsx +197 -0
  340. package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.md +27 -0
  341. package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.tsx +156 -0
  342. package/docs/layout/auth-recovery/index.md +140 -0
  343. package/docs/layout/auth-recovery/index.tsx +96 -0
  344. package/docs/layout/auth-shell-context.tsx +103 -0
  345. package/docs/layout/auth-shell-device.tsx +112 -0
  346. package/docs/layout/auth-shell-registration.tsx +335 -0
  347. package/docs/layout/auth-shell-variants.tsx +139 -0
  348. package/docs/layout/auth-shell.tsx +59 -0
  349. package/docs/layout/auth-stack.tsx +40 -0
  350. package/docs/layout/centered-shell.tsx +102 -0
  351. package/docs/layout/error-surface/examples/application-403.tsx +84 -0
  352. package/docs/layout/error-surface/examples/application-404.tsx +77 -0
  353. package/docs/layout/error-surface/examples/system-500.tsx +47 -0
  354. package/docs/layout/error-surface/examples/system-503.tsx +48 -0
  355. package/docs/layout/error-surface/index.md +153 -0
  356. package/docs/layout/error-surface/index.tsx +239 -0
  357. package/docs/layout/flex.tsx +262 -0
  358. package/docs/layout/legal-document-shell/_data.ts +110 -0
  359. package/docs/layout/legal-document-shell/examples/desktop-1440.md +12 -0
  360. package/docs/layout/legal-document-shell/examples/desktop-1440.tsx +83 -0
  361. package/docs/layout/legal-document-shell/examples/mobile-390.md +22 -0
  362. package/docs/layout/legal-document-shell/examples/mobile-390.tsx +70 -0
  363. package/docs/layout/legal-document-shell/examples/tablet-1024.md +3 -0
  364. package/docs/layout/legal-document-shell/examples/tablet-1024.tsx +84 -0
  365. package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.md +18 -0
  366. package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.tsx +61 -0
  367. package/docs/layout/legal-document-shell/index.md +51 -0
  368. package/docs/layout/legal-document-shell/index.tsx +101 -0
  369. package/docs/layout/master-detail.tsx +387 -0
  370. package/docs/layout/org-switcher.tsx +131 -0
  371. package/docs/layout/page-container.tsx +946 -0
  372. package/docs/layout/resizable-panel.tsx +419 -0
  373. package/docs/layout/responsive-grid.tsx +235 -0
  374. package/docs/layout/separator.tsx +327 -0
  375. package/docs/layout/service-role-panel.tsx +144 -0
  376. package/docs/layout/sidebar.tsx +586 -0
  377. package/docs/layout/split-pane.tsx +451 -0
  378. package/docs/layout/topbar.tsx +347 -0
  379. package/docs/navigation/app-setting-picker.tsx +141 -0
  380. package/docs/navigation/breadcrumb.tsx +128 -0
  381. package/docs/navigation/context-menu.tsx +117 -0
  382. package/docs/navigation/dropdown-menu.tsx +213 -0
  383. package/docs/navigation/filter-bar.tsx +227 -0
  384. package/docs/navigation/menubar.tsx +141 -0
  385. package/docs/navigation/navigation-menu.tsx +165 -0
  386. package/docs/navigation/pagination.tsx +241 -0
  387. package/docs/navigation/steps.tsx +263 -0
  388. package/docs/navigation/tabs-rtl.tsx +28 -0
  389. package/docs/navigation/tabs.tsx +308 -0
  390. package/docs/navigation/toolbar.tsx +339 -0
  391. package/docs/providers/app-provider.tsx +191 -0
  392. package/docs/providers/format-date.tsx +230 -0
  393. package/docs/query/button-refetch.tsx +160 -0
  394. package/docs/query/data-state.tsx +192 -0
  395. package/docs/query/infinite-query-state.tsx +93 -0
  396. package/docs/query/mutation-feedback.tsx +70 -0
  397. package/docs/query/prefetch-link.tsx +262 -0
  398. package/docs/query/touch-actions.tsx +68 -0
  399. package/docs/showcase/acme-portal.tsx +441 -0
  400. package/docs/showcase/acme-website.tsx +455 -0
  401. package/docs/showcase/case1-warehouse-dashboard.tsx +343 -0
  402. package/docs/showcase/case2-employee-me.tsx +441 -0
  403. package/docs/showcase/case3-approval-workflow.tsx +527 -0
  404. package/docs/showcase/case4-login.tsx +307 -0
  405. package/docs/showcase/case5-shift-calendar.tsx +795 -0
  406. package/docs/showcase/case6-agency-handy.tsx +1072 -0
  407. package/docs/showcase/futurelastic-web.tsx +390 -0
  408. package/docs/showcase/org-switcher.tsx +313 -0
  409. package/docs/showcase/permission-matrix.tsx +343 -0
  410. package/docs/showcase/public-landing.tsx +210 -0
  411. package/docs/showcase/settings-account-sections.tsx +559 -0
  412. package/docs/showcase/settings-security-mfa.tsx +145 -0
  413. package/docs/showcase/table-approval-queue.tsx +199 -0
  414. package/docs/showcase/table-bulk-actions.tsx +460 -0
  415. package/docs/showcase/table-compact-kintone.tsx +438 -0
  416. package/docs/showcase/table-conditional-format.tsx +367 -0
  417. package/docs/showcase/table-crud-list.tsx +544 -0
  418. package/docs/showcase/table-density.tsx +340 -0
  419. package/docs/showcase/table-expandable-rows.tsx +471 -0
  420. package/docs/showcase/table-filter-chips.tsx +461 -0
  421. package/docs/showcase/table-footer-totals.tsx +311 -0
  422. package/docs/showcase/table-grouped-subtotals.tsx +388 -0
  423. package/docs/showcase/table-master-detail.tsx +479 -0
  424. package/docs/showcase/table-pagination.tsx +320 -0
  425. package/docs/showcase/table-states.tsx +363 -0
  426. package/docs/showcase/table-sticky-columns.tsx +373 -0
  427. package/docs/showcase/table-tree-rows.tsx +444 -0
  428. package/docs/showcase/table-view-tabs.tsx +488 -0
  429. package/package.json +9 -11
  430. package/scripts/_agent-setup.mjs +16 -2
  431. package/scripts/audit-hook.mjs +3 -13
  432. package/scripts/init-agent-kit.mjs +1 -14
  433. package/scripts/postinstall.mjs +12 -12
  434. package/scripts/ui-audit.mjs +93 -31
  435. package/scripts/visual-audit-rules.mjs +51 -7
  436. package/scripts/visual-audit.mjs +118 -47
@@ -0,0 +1,209 @@
1
+ import * as React from "react";
2
+
3
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@godxjp/ui/data-display";
4
+ import { FormField, Textarea } from "@godxjp/ui/data-entry";
5
+ import { Button } from "@godxjp/ui/general";
6
+ import { Flex, PageContainer } from "@godxjp/ui/layout";
7
+
8
+ /**
9
+ * Textarea — styled wrapper around the native textarea. Pair with FormField for
10
+ * a labelled field. Composed only from real @godxjp/ui components.
11
+ */
12
+
13
+ type Message = { id: number; author: string; body: string };
14
+
15
+ const SEED_MESSAGES: Message[] = [
16
+ { id: 1, author: "佐藤", body: "月次の締め、明日の10時までにお願いします。" },
17
+ { id: 2, author: "Trần", body: "承知しました。INV-2024-0312 の差異だけ確認中です。" },
18
+ ];
19
+
20
+ /**
21
+ * The godx-chatter composer (gh#310). One line at rest, grows line by line, scrolls itself past
22
+ * eight rows, and collapses back to one line the moment the post is sent — the send button just
23
+ * resets the controlled value, and `autoGrow` follows it without a single line of layout code.
24
+ */
25
+ function Composer() {
26
+ const [messages, setMessages] = React.useState(SEED_MESSAGES);
27
+ const [draft, setDraft] = React.useState("");
28
+
29
+ const send = () => {
30
+ const body = draft.trim();
31
+ if (!body) return;
32
+ setMessages((current) => [...current, { id: current.length + 1, author: "自分", body }]);
33
+ setDraft("");
34
+ };
35
+
36
+ return (
37
+ <Flex direction="col" gap="md">
38
+ <Flex direction="col" gap="sm">
39
+ {messages.map((message) => (
40
+ <Card key={message.id}>
41
+ <CardContent>
42
+ <CardTitle level={3}>{message.author}</CardTitle>
43
+ <CardDescription>{message.body}</CardDescription>
44
+ </CardContent>
45
+ </Card>
46
+ ))}
47
+ </Flex>
48
+
49
+ <Card className="focus-within:ring-ring/50 overflow-hidden focus-within:ring-2">
50
+ <CardContent flush>
51
+ <Textarea
52
+ variant="ghost"
53
+ autoGrow
54
+ minRows={1}
55
+ maxRows={8}
56
+ aria-label="メッセージ"
57
+ placeholder="メッセージを入力... (Shift+Enter で改行)"
58
+ value={draft}
59
+ onChange={(event) => setDraft(event.target.value)}
60
+ />
61
+ <Flex direction="row" justify="end" gap="sm" className="px-2 pb-2">
62
+ <Button size="sm" onClick={send}>
63
+ 送信
64
+ </Button>
65
+ </Flex>
66
+ </CardContent>
67
+ </Card>
68
+ </Flex>
69
+ );
70
+ }
71
+
72
+ export default function Demo() {
73
+ return (
74
+ <PageContainer
75
+ title="Textarea"
76
+ subtitle="Multi-line text · pair with FormField for label / helper"
77
+ >
78
+ <Flex direction="col" gap="lg">
79
+ <Card>
80
+ <CardHeader>
81
+ <CardTitle level={2}>States</CardTitle>
82
+ <CardDescription>Placeholder, filled, and disabled.</CardDescription>
83
+ </CardHeader>
84
+ <CardContent>
85
+ <Flex direction="col" gap="md">
86
+ <Textarea aria-label="プレースホルダー状態" placeholder="摘要を入力..." />
87
+ <Textarea aria-label="入力済み状態" defaultValue={"4月分 受注\nINV-2024-0312"} />
88
+ <Textarea aria-label="無効状態" disabled defaultValue="無効 (disabled)" />
89
+ </Flex>
90
+ </CardContent>
91
+ </Card>
92
+
93
+ <Card>
94
+ <CardHeader>
95
+ <CardTitle level={2}>Embedded in a surface · variant="ghost"</CardTitle>
96
+ <CardDescription>
97
+ The Card already draws the box, so the field must not draw a second one. Focus moves
98
+ to the surface via focus-within.
99
+ </CardDescription>
100
+ </CardHeader>
101
+ <CardContent>
102
+ <Flex direction="col" gap="md">
103
+ <Card className="focus-within:ring-ring/50 overflow-hidden focus-within:ring-2">
104
+ <CardContent flush>
105
+ <Textarea
106
+ variant="ghost"
107
+ className="resize-none"
108
+ rows={2}
109
+ aria-label="サーフェス内のテキストエリア"
110
+ placeholder="メッセージを入力..."
111
+ />
112
+ <Flex direction="row" justify="end" className="px-2 pb-2">
113
+ <Button size="sm">送信</Button>
114
+ </Flex>
115
+ </CardContent>
116
+ </Card>
117
+ <Textarea
118
+ variant="default"
119
+ rows={2}
120
+ aria-label="単独のテキストエリア"
121
+ defaultValue='variant="default" — 単独のフィールドは自分で枠を描く'
122
+ />
123
+ </Flex>
124
+ </CardContent>
125
+ </Card>
126
+
127
+ <Card>
128
+ <CardHeader>
129
+ <CardTitle level={2}>Chat composer · autoGrow</CardTitle>
130
+ <CardDescription>
131
+ 一行から始まり、入力と貼り付けに合わせて行単位で伸び、8行を超えると内部でスクロールし、送信すると一行に戻ります。高さを書くコードはありません。
132
+ </CardDescription>
133
+ </CardHeader>
134
+ <CardContent>
135
+ <Composer />
136
+ </CardContent>
137
+ </Card>
138
+
139
+ <Card>
140
+ <CardHeader>
141
+ <CardTitle level={2}>autoGrow の下限と上限 · minRows / maxRows</CardTitle>
142
+ <CardDescription>
143
+ 下限・上限は「行」で指定します。行数なら密度切替や --font-size-base
144
+ の再テーマでも見た目の行数がずれません。上限を超えた分は箱がスクロールします。
145
+ </CardDescription>
146
+ </CardHeader>
147
+ <CardContent>
148
+ <Flex direction="col" gap="md">
149
+ <FormField
150
+ id="autogrow-ceiling"
151
+ label="上限あり (minRows=1 / maxRows=3)"
152
+ helper="4行目からは箱が伸びずに内部スクロールへ切り替わります。"
153
+ >
154
+ <Textarea
155
+ id="autogrow-ceiling"
156
+ autoGrow
157
+ minRows={1}
158
+ maxRows={3}
159
+ defaultValue={"1行目\n2行目\n3行目\n4行目\n5行目\n6行目"}
160
+ />
161
+ </FormField>
162
+
163
+ <FormField
164
+ id="autogrow-floor"
165
+ label="下限あり (minRows=3)"
166
+ helper="空でも3行分の高さを保ちます。"
167
+ >
168
+ <Textarea
169
+ id="autogrow-floor"
170
+ autoGrow
171
+ minRows={3}
172
+ placeholder="社内メモ..."
173
+ allowClear
174
+ />
175
+ </FormField>
176
+
177
+ <FormField
178
+ id="autogrow-unbounded"
179
+ label="上限なし (maxRows=0)"
180
+ helper="ページ側にスクロールを持つ画面でのみ使ってください。"
181
+ >
182
+ <Textarea
183
+ id="autogrow-unbounded"
184
+ autoGrow
185
+ maxRows={0}
186
+ defaultValue={
187
+ "長文の下書きを最後まで見せたい画面向け。\n箱は内容に合わせて伸び続けます。"
188
+ }
189
+ />
190
+ </FormField>
191
+ </Flex>
192
+ </CardContent>
193
+ </Card>
194
+
195
+ <Card>
196
+ <CardHeader>
197
+ <CardTitle level={2}>In FormField</CardTitle>
198
+ <CardDescription>Labelled with a helper hint.</CardDescription>
199
+ </CardHeader>
200
+ <CardContent>
201
+ <FormField id="memo" label="摘要" helper="仕訳に表示される説明文です">
202
+ <Textarea id="memo" placeholder="例: 4月分 受注 INV-2024-0312" />
203
+ </FormField>
204
+ </CardContent>
205
+ </Card>
206
+ </Flex>
207
+ </PageContainer>
208
+ );
209
+ }
@@ -0,0 +1,99 @@
1
+ import { useState } from "react";
2
+
3
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@godxjp/ui/data-display";
4
+ import { FormField, TimePicker } from "@godxjp/ui/data-entry";
5
+ import { Flex, PageContainer } from "@godxjp/ui/layout";
6
+
7
+ /**
8
+ * TimePicker — 24h HH:mm combobox with a scrollable hour/minute popover.
9
+ * The visible input IS the form field — give it a `name` and it submits
10
+ * directly. Adjust minuteStep for domain needs (15 for scheduling, 1 for
11
+ * precise entry). Never a raw <input type="time">. Composed only from real
12
+ * @godxjp/ui components.
13
+ */
14
+ export default function Demo() {
15
+ const [cutoffTime, setCutoffTime] = useState("17:00");
16
+ const [shiftStart, setShiftStart] = useState("09:00");
17
+ const [shiftEnd, setShiftEnd] = useState("18:00");
18
+
19
+ return (
20
+ <PageContainer
21
+ title="TimePicker"
22
+ subtitle="時刻入力 · 24h HH:mm コンボボックス、スクロール選択付き"
23
+ >
24
+ <Flex direction="col" gap="lg">
25
+ <Card>
26
+ <CardHeader>
27
+ <CardTitle level={2}>基本 (controlled)</CardTitle>
28
+ <CardDescription>
29
+ value + onValueChange で制御。name= を指定すると HH:mm でフォーム送信される。
30
+ </CardDescription>
31
+ </CardHeader>
32
+ <CardContent>
33
+ <FormField id="cutoff-time" label="締め時刻" required>
34
+ <TimePicker
35
+ id="cutoff-time"
36
+ name="cutoff_time"
37
+ value={cutoffTime}
38
+ onValueChange={setCutoffTime}
39
+ minuteStep={5}
40
+ className="w-36"
41
+ />
42
+ </FormField>
43
+ </CardContent>
44
+ </Card>
45
+
46
+ <Card>
47
+ <CardHeader>
48
+ <CardTitle level={2}>minuteStep={15} — シフト入力</CardTitle>
49
+ <CardDescription>
50
+ 勤怠管理など 15 分刻みの列を表示。typed 入力は任意の HH:mm を受け付ける。
51
+ </CardDescription>
52
+ </CardHeader>
53
+ <CardContent>
54
+ <Flex direction="row" gap="md" wrap>
55
+ <FormField id="shift-start" label="出勤時刻">
56
+ <TimePicker
57
+ id="shift-start"
58
+ name="shift_start"
59
+ value={shiftStart}
60
+ onValueChange={setShiftStart}
61
+ minuteStep={15}
62
+ className="w-36"
63
+ />
64
+ </FormField>
65
+ <FormField id="shift-end" label="退勤時刻">
66
+ <TimePicker
67
+ id="shift-end"
68
+ name="shift_end"
69
+ value={shiftEnd}
70
+ onValueChange={setShiftEnd}
71
+ minuteStep={15}
72
+ className="w-36"
73
+ />
74
+ </FormField>
75
+ </Flex>
76
+ </CardContent>
77
+ </Card>
78
+
79
+ <Card>
80
+ <CardHeader>
81
+ <CardTitle level={2}>disabled 状態</CardTitle>
82
+ <CardDescription>確定済みシフトや読み取り専用フィールドに使用。</CardDescription>
83
+ </CardHeader>
84
+ <CardContent>
85
+ <FormField id="locked-time" label="確定時刻">
86
+ <TimePicker
87
+ id="locked-time"
88
+ name="locked_time"
89
+ value="09:00"
90
+ disabled
91
+ className="w-36"
92
+ />
93
+ </FormField>
94
+ </CardContent>
95
+ </Card>
96
+ </Flex>
97
+ </PageContainer>
98
+ );
99
+ }
@@ -0,0 +1,293 @@
1
+ import { useState } from "react";
2
+ import { Eye, PartyPopper, ThumbsUp } from "lucide-react";
3
+
4
+ import {
5
+ Card,
6
+ CardContent,
7
+ CardDescription,
8
+ CardHeader,
9
+ CardTitle,
10
+ DataTable,
11
+ } from "@godxjp/ui/data-display";
12
+ import { Toggle, ToggleGroup, ToggleGroupItem } from "@godxjp/ui/data-entry";
13
+ import { Button, Text } from "@godxjp/ui/general";
14
+ import { Flex, PageContainer } from "@godxjp/ui/layout";
15
+
16
+ /**
17
+ * Toggle `count` — the counted, PRESSED chip (gh#312).
18
+ *
19
+ * `Button` owns the counter-pill vocabulary (`count` / `overflowCount` / `showZero`) and `Toggle`
20
+ * owns the pressed state, so a faceted filter chip ("未対応 42", selected or not) and a reaction
21
+ * chip had no primitive: `<Button aria-pressed>` paints no state, a hand-written `<span>` inside a
22
+ * Toggle re-derives the Intl formatting and the cap page-side, and a nested `Badge` double-borders
23
+ * the chip. Toggle now carries the SAME vocabulary, so the chip is one control with one accessible
24
+ * name and one focus ring.
25
+ *
26
+ * Composed only from real @godxjp/ui components.
27
+ */
28
+
29
+ type Ticket = {
30
+ id: string;
31
+ subject: string;
32
+ status: "open" | "waiting" | "closed";
33
+ assignee: string;
34
+ updatedAt: string;
35
+ };
36
+
37
+ const TICKETS: Ticket[] = [
38
+ {
39
+ id: "TCK-1042",
40
+ subject: "請求書の消費税区分が誤っている",
41
+ status: "open",
42
+ assignee: "佐藤",
43
+ updatedAt: "2026-08-28",
44
+ },
45
+ {
46
+ id: "TCK-1041",
47
+ subject: "口座振替の初回引落日について",
48
+ status: "waiting",
49
+ assignee: "鈴木",
50
+ updatedAt: "2026-08-28",
51
+ },
52
+ {
53
+ id: "TCK-1039",
54
+ subject: "年末調整の書類提出期限を延長したい",
55
+ status: "open",
56
+ assignee: "高橋",
57
+ updatedAt: "2026-08-27",
58
+ },
59
+ {
60
+ id: "TCK-1035",
61
+ subject: "退職者の social insurance 資格喪失届",
62
+ status: "closed",
63
+ assignee: "田中",
64
+ updatedAt: "2026-08-26",
65
+ },
66
+ {
67
+ id: "TCK-1031",
68
+ subject: "支店追加に伴う権限設定の依頼",
69
+ status: "waiting",
70
+ assignee: "佐藤",
71
+ updatedAt: "2026-08-25",
72
+ },
73
+ ];
74
+
75
+ const STATUS_LABEL: Record<Ticket["status"], string> = {
76
+ open: "未対応",
77
+ waiting: "保留中",
78
+ closed: "対応済み",
79
+ };
80
+
81
+ const COLUMNS = [
82
+ { key: "id", header: "番号", width: "8rem", priority: "meta" as const },
83
+ { key: "subject", header: "件名", priority: "primary" as const },
84
+ {
85
+ key: "status",
86
+ header: "状態",
87
+ width: "8rem",
88
+ priority: "secondary" as const,
89
+ render: (row: Ticket) => STATUS_LABEL[row.status],
90
+ },
91
+ { key: "assignee", header: "担当", width: "8rem", priority: "secondary" as const },
92
+ { key: "updatedAt", header: "更新日", width: "10rem", priority: "meta" as const },
93
+ ];
94
+
95
+ export default function Demo() {
96
+ // Faceted filter chips — pressed = the facet is applied. Counts are the facet sizes.
97
+ const [facets, setFacets] = useState<string[]>(["open"]);
98
+ // A reaction row: the count is how many people reacted, the pressed state is whether YOU did.
99
+ const [reactions, setReactions] = useState<string[]>(["thumbsup"]);
100
+ const [pinned, setPinned] = useState(true);
101
+
102
+ const counts = {
103
+ open: TICKETS.filter((t) => t.status === "open").length,
104
+ waiting: TICKETS.filter((t) => t.status === "waiting").length,
105
+ closed: TICKETS.filter((t) => t.status === "closed").length,
106
+ };
107
+ const rows = facets.length === 0 ? TICKETS : TICKETS.filter((t) => facets.includes(t.status));
108
+
109
+ return (
110
+ <PageContainer
111
+ title="Toggle count"
112
+ subtitle="カウント付きの押下チップ · faceted filter · リアクション"
113
+ >
114
+ <Flex direction="col" gap="lg">
115
+ <Card>
116
+ <CardHeader>
117
+ <CardTitle level={2}>問い合わせ受信箱</CardTitle>
118
+ <CardDescription>
119
+ ToggleGroup type=&quot;multiple&quot; の各アイテムが count
120
+ を持つファセットチップ。variant/size はグループの context から届き、数字だけが item
121
+ ごとのデータ。押下状態は aria-pressed
122
+ が担い、色だけに依存しない(押下でチップが反転し、ピルも反転する)。
123
+ </CardDescription>
124
+ </CardHeader>
125
+ <CardContent>
126
+ <Flex direction="col" gap="md">
127
+ <ToggleGroup
128
+ type="multiple"
129
+ variant="outline"
130
+ size="sm"
131
+ value={facets}
132
+ onValueChange={setFacets}
133
+ aria-label="状態で絞り込み"
134
+ >
135
+ <ToggleGroupItem value="open" count={counts.open} countLabel="件">
136
+ 未対応
137
+ </ToggleGroupItem>
138
+ <ToggleGroupItem value="waiting" count={counts.waiting} countLabel="件">
139
+ 保留中
140
+ </ToggleGroupItem>
141
+ <ToggleGroupItem value="closed" count={counts.closed} countLabel="件">
142
+ 対応済み
143
+ </ToggleGroupItem>
144
+ <ToggleGroupItem value="escalated" count={0} showZero={false} countLabel="件">
145
+ エスカレーション
146
+ </ToggleGroupItem>
147
+ </ToggleGroup>
148
+ <Text tone="muted" size="sm">
149
+ 「エスカレーション」は count=0 かつ showZero=false
150
+ なのでピルが出ない。0件のファセットを常に見せたい場合は showZero を既定の true
151
+ のままにする。
152
+ </Text>
153
+ </Flex>
154
+ </CardContent>
155
+ </Card>
156
+
157
+ <Card>
158
+ <CardContent flush>
159
+ <DataTable data={rows} columns={COLUMNS} getRowId={(row: Ticket) => row.id} />
160
+ </CardContent>
161
+ </Card>
162
+
163
+ <Card>
164
+ <CardHeader>
165
+ <CardTitle level={2}>リアクション</CardTitle>
166
+ <CardDescription>
167
+ 絵文字ラベルには aria-label が要る。aria-label
168
+ があると内容はアクセシブル名から外れるので、count はラベル側に畳み込まれ 「いいね, 12
169
+ 件」と読み上げられる。数字の読み上げは 1 回だけで、count が変わっても live region
170
+ では通知しない(他人のリアクションはこのコントロールの状態ではない)。
171
+ </CardDescription>
172
+ </CardHeader>
173
+ <CardContent>
174
+ <Flex direction="row" gap="sm" wrap align="center">
175
+ <ToggleGroup
176
+ type="multiple"
177
+ size="sm"
178
+ value={reactions}
179
+ onValueChange={setReactions}
180
+ aria-label="この投稿へのリアクション"
181
+ >
182
+ <ToggleGroupItem
183
+ value="thumbsup"
184
+ aria-label="いいね"
185
+ count={reactions.includes("thumbsup") ? 12 : 11}
186
+ countLabel="件"
187
+ >
188
+ <ThumbsUp aria-hidden="true" />
189
+ </ToggleGroupItem>
190
+ <ToggleGroupItem
191
+ value="party"
192
+ aria-label="おめでとう"
193
+ count={reactions.includes("party") ? 4 : 3}
194
+ countLabel="件"
195
+ >
196
+ <PartyPopper aria-hidden="true" />
197
+ </ToggleGroupItem>
198
+ <ToggleGroupItem
199
+ value="eyes"
200
+ aria-label="確認中"
201
+ count={reactions.includes("eyes") ? 1240 : 1239}
202
+ overflowCount={999}
203
+ countLabel="件"
204
+ >
205
+ <Eye aria-hidden="true" />
206
+ </ToggleGroupItem>
207
+ </ToggleGroup>
208
+ </Flex>
209
+ </CardContent>
210
+ </Card>
211
+
212
+ <Card>
213
+ <CardHeader>
214
+ <CardTitle level={2}>Button の count と同じ語彙</CardTitle>
215
+ <CardDescription>
216
+ count / overflowCount / showZero は Button から一字一句そのまま。ピルの寸法
217
+ (min-width 16px・左右パディング 4px・12.47px・角 pill・tabular-nums)も Button と
218
+ 完全に一致し、トークン同値テストで固定してある。色だけは分けている: Toggle
219
+ のピルは押下で反転する面の上に乗るので、押下時 5.04:1(light)/ 7.05:1(dark)、
220
+ 非押下時 14.18:1 / 12.44:1 と別に実測している。
221
+ </CardDescription>
222
+ </CardHeader>
223
+ <CardContent>
224
+ <Flex direction="row" gap="md" align="center" wrap>
225
+ <Button variant="outline" count={1240} overflowCount={999}>
226
+ 受信箱
227
+ </Button>
228
+ <Toggle
229
+ variant="outline"
230
+ count={1240}
231
+ overflowCount={999}
232
+ countLabel="件"
233
+ pressed={pinned}
234
+ onPressedChange={setPinned}
235
+ >
236
+ 受信箱
237
+ </Toggle>
238
+ <Text tone="muted" size="sm">
239
+ どちらも Intl.NumberFormat でロケール整形され、overflowCount を超えると
240
+ 「999+」になる。
241
+ </Text>
242
+ </Flex>
243
+ </CardContent>
244
+ </Card>
245
+
246
+ <Card>
247
+ <CardHeader>
248
+ <CardTitle level={2}>サイズと variant</CardTitle>
249
+ <CardDescription>
250
+ sm / md / lg × default / outline。数字は tabular-nums で桁が動かず、min-width
251
+ があるので 1 桁でもピルが潰れない。粗いポインタでは --control-height が 44px
252
+ 以上に上がるので、チップの行がタップの地雷原にならない。
253
+ </CardDescription>
254
+ </CardHeader>
255
+ <CardContent>
256
+ <Flex direction="col" gap="md">
257
+ <Flex direction="row" gap="md" align="center" wrap>
258
+ <Toggle size="sm" count={3} countLabel="件" defaultPressed>
259
+
260
+ </Toggle>
261
+ <Toggle size="md" count={42} countLabel="件" defaultPressed>
262
+ 標準
263
+ </Toggle>
264
+ <Toggle size="lg" count={1000} countLabel="件" defaultPressed>
265
+
266
+ </Toggle>
267
+ </Flex>
268
+ <Flex direction="row" gap="md" align="center" wrap>
269
+ <Toggle variant="outline" size="sm" count={3} countLabel="件">
270
+
271
+ </Toggle>
272
+ <Toggle variant="outline" size="md" count={42} countLabel="件">
273
+ 標準
274
+ </Toggle>
275
+ <Toggle variant="outline" size="lg" count={1000} countLabel="件">
276
+
277
+ </Toggle>
278
+ </Flex>
279
+ <Flex direction="row" gap="md" align="center" wrap>
280
+ <Toggle count={7} countLabel="件" pressed disabled>
281
+ 締め済み(押下・無効)
282
+ </Toggle>
283
+ <Toggle count={7} countLabel="件" disabled>
284
+ 締め済み(無効)
285
+ </Toggle>
286
+ </Flex>
287
+ </Flex>
288
+ </CardContent>
289
+ </Card>
290
+ </Flex>
291
+ </PageContainer>
292
+ );
293
+ }