@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,240 @@
1
+ import { useState } from "react";
2
+
3
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@godxjp/ui/data-display";
4
+ import { FormField, NumberInput } from "@godxjp/ui/data-entry";
5
+ import { Flex, PageContainer } from "@godxjp/ui/layout";
6
+ import { Heading, Text } from "@godxjp/ui/general";
7
+
8
+ /**
9
+ * NumberInput — WAI-ARIA spinbutton for localized numeric entry. Composes the real `Input`
10
+ * primitive (role="spinbutton", inputMode="decimal") with stacked increment/decrement `Button`s.
11
+ * Type freely, ArrowUp/ArrowDown (Shift = ×10) step, value commits clamped to min/max + rounded to
12
+ * precision on blur/Enter. Steppers disable at the bounds. Composed only from real @godxjp/ui.
13
+ */
14
+ export default function Demo() {
15
+ const [quantity, setQuantity] = useState<number | null>(1);
16
+ const [rating, setRating] = useState<number | null>(3);
17
+ const [price, setPrice] = useState<number | null>(1980);
18
+ const [discount, setDiscount] = useState<number | null>(10);
19
+
20
+ return (
21
+ <PageContainer title="NumberInput" subtitle="数値入力 · スピンボタン (Input + ステッパー)">
22
+ <Flex direction="col" gap="lg">
23
+ <Card>
24
+ <CardHeader>
25
+ <CardTitle level={2}>基本 (controlled)</CardTitle>
26
+ <CardDescription>
27
+ value + onValueChange で number | null を制御。空欄は null。ArrowUp/Down
28
+ またはステッパーで step ずつ増減。
29
+ </CardDescription>
30
+ </CardHeader>
31
+ <CardContent>
32
+ <FormField id="ni-quantity" label="数量">
33
+ <NumberInput
34
+ id="ni-quantity"
35
+ name="quantity"
36
+ value={quantity}
37
+ onValueChange={setQuantity}
38
+ aria-label="数量"
39
+ />
40
+ </FormField>
41
+ <Text size="sm" tone="muted">
42
+ 現在値: {quantity ?? "(空)"}
43
+ </Text>
44
+ </CardContent>
45
+ </Card>
46
+
47
+ <Card>
48
+ <CardHeader>
49
+ <CardTitle level={2}>min / max · 範囲クランプ</CardTitle>
50
+ <CardDescription>
51
+ min=1, max=5。境界でステッパーが無効化され、コミット時に範囲内へクランプされる。
52
+ </CardDescription>
53
+ </CardHeader>
54
+ <CardContent>
55
+ <FormField id="ni-rating" label="評価 (1–5)">
56
+ <NumberInput
57
+ id="ni-rating"
58
+ name="rating"
59
+ value={rating}
60
+ onValueChange={setRating}
61
+ min={1}
62
+ max={5}
63
+ aria-label="評価"
64
+ />
65
+ </FormField>
66
+ </CardContent>
67
+ </Card>
68
+
69
+ <Card>
70
+ <CardHeader>
71
+ <CardTitle level={2}>step · 刻み幅</CardTitle>
72
+ <CardDescription>
73
+ step=100 で 100 単位の増減。Shift + Arrow で ×10 (1000 刻み)。
74
+ </CardDescription>
75
+ </CardHeader>
76
+ <CardContent>
77
+ <FormField id="ni-step" label="目標金額 (100 刻み)">
78
+ <NumberInput
79
+ id="ni-step"
80
+ name="target"
81
+ defaultValue={5000}
82
+ step={100}
83
+ min={0}
84
+ aria-label="目標金額"
85
+ />
86
+ </FormField>
87
+ </CardContent>
88
+ </Card>
89
+
90
+ <Card>
91
+ <CardHeader>
92
+ <CardTitle level={2}>precision · 小数桁</CardTitle>
93
+ <CardDescription>
94
+ precision=2, step=0.25。コミット時に小数 2 桁へ丸め、Intl.NumberFormat で整形。
95
+ </CardDescription>
96
+ </CardHeader>
97
+ <CardContent>
98
+ <FormField id="ni-precision" label="重量 (kg)">
99
+ <NumberInput
100
+ id="ni-precision"
101
+ name="weight"
102
+ defaultValue={2.5}
103
+ step={0.25}
104
+ precision={2}
105
+ min={0}
106
+ aria-label="重量"
107
+ />
108
+ </FormField>
109
+ </CardContent>
110
+ </Card>
111
+
112
+ <Card>
113
+ <CardHeader>
114
+ <CardTitle level={2}>prefix / suffix — ¥ と %</CardTitle>
115
+ <CardDescription>
116
+ 通貨記号や単位を装飾的な affix として表示 (aria-hidden)。値は生の数値のまま。
117
+ </CardDescription>
118
+ </CardHeader>
119
+ <CardContent>
120
+ <Flex direction="row" gap="md" wrap>
121
+ <FormField id="ni-price" label="価格">
122
+ <NumberInput
123
+ id="ni-price"
124
+ name="price"
125
+ value={price}
126
+ onValueChange={setPrice}
127
+ prefix="¥"
128
+ step={10}
129
+ min={0}
130
+ aria-label="価格"
131
+ />
132
+ </FormField>
133
+ <FormField id="ni-discount" label="割引率">
134
+ <NumberInput
135
+ id="ni-discount"
136
+ name="discount"
137
+ value={discount}
138
+ onValueChange={setDiscount}
139
+ suffix="%"
140
+ min={0}
141
+ max={100}
142
+ aria-label="割引率"
143
+ />
144
+ </FormField>
145
+ </Flex>
146
+ </CardContent>
147
+ </Card>
148
+
149
+ <Card>
150
+ <CardHeader>
151
+ <CardTitle level={2}>uncontrolled (defaultValue)</CardTitle>
152
+ <CardDescription>
153
+ React 管理不要なネイティブフォーム。送信時に name 経由で値が渡される。
154
+ </CardDescription>
155
+ </CardHeader>
156
+ <CardContent>
157
+ <FormField id="ni-uncontrolled" label="在庫数 (非制御)">
158
+ <NumberInput
159
+ id="ni-uncontrolled"
160
+ name="stock"
161
+ defaultValue={42}
162
+ min={0}
163
+ placeholder="0"
164
+ aria-label="在庫数"
165
+ />
166
+ </FormField>
167
+ </CardContent>
168
+ </Card>
169
+
170
+ <Card>
171
+ <CardHeader>
172
+ <CardTitle level={2}>disabled / readOnly</CardTitle>
173
+ <CardDescription>
174
+ disabled は操作不可、readOnly は値を表示・選択できるが編集・ステップ不可。
175
+ </CardDescription>
176
+ </CardHeader>
177
+ <CardContent>
178
+ <Flex direction="row" gap="md" wrap>
179
+ <FormField id="ni-disabled" label="確定数量 (disabled)">
180
+ <NumberInput
181
+ id="ni-disabled"
182
+ name="locked_qty"
183
+ value={3}
184
+ disabled
185
+ aria-label="確定数量"
186
+ />
187
+ </FormField>
188
+ <FormField id="ni-readonly" label="参照値 (readOnly)">
189
+ <NumberInput
190
+ id="ni-readonly"
191
+ name="ref_value"
192
+ value={128}
193
+ readOnly
194
+ aria-label="参照値"
195
+ />
196
+ </FormField>
197
+ </Flex>
198
+ </CardContent>
199
+ </Card>
200
+
201
+ <Card>
202
+ <CardHeader>
203
+ <CardTitle level={2}>size · xs / sm / md / lg</CardTitle>
204
+ <CardDescription>
205
+ 制御高さティア (--control-height) に連動。行内の他コントロールと整列。
206
+ </CardDescription>
207
+ </CardHeader>
208
+ <CardContent>
209
+ <Flex direction="col" gap="md">
210
+ <FormField id="ni-xs" label="xs">
211
+ <NumberInput id="ni-xs" size="xs" defaultValue={1} aria-label="xs サイズ" />
212
+ </FormField>
213
+ <FormField id="ni-sm" label="sm">
214
+ <NumberInput id="ni-sm" size="sm" defaultValue={2} aria-label="sm サイズ" />
215
+ </FormField>
216
+ <FormField id="ni-md" label="md (既定)">
217
+ <NumberInput id="ni-md" size="md" defaultValue={3} aria-label="md サイズ" />
218
+ </FormField>
219
+ <FormField id="ni-lg" label="lg">
220
+ <NumberInput id="ni-lg" size="lg" defaultValue={4} aria-label="lg サイズ" />
221
+ </FormField>
222
+ </Flex>
223
+ </CardContent>
224
+ </Card>
225
+
226
+ <Card>
227
+ <CardHeader>
228
+ <Heading level={2}>キーボード操作</Heading>
229
+ </CardHeader>
230
+ <CardContent>
231
+ <Text size="sm" tone="muted">
232
+ ↑ / ↓ で step 増減・Shift + ↑ / ↓ で ×10・Enter で確定 (クランプ + 丸め)・Tab
233
+ でフォーカス移動。ステッパーは tabIndex=-1 でキーボードのタブ順を汚さない。
234
+ </Text>
235
+ </CardContent>
236
+ </Card>
237
+ </Flex>
238
+ </PageContainer>
239
+ );
240
+ }
@@ -0,0 +1,102 @@
1
+ import { useState } from "react";
2
+
3
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@godxjp/ui/data-display";
4
+ import { FormField, PasswordInput } from "@godxjp/ui/data-entry";
5
+ import { Flex, PageContainer } from "@godxjp/ui/layout";
6
+
7
+ /**
8
+ * PasswordInput — password field with a built-in show/hide eye toggle.
9
+ * Always use this instead of <Input type="password">; never add your own
10
+ * eye button. Composed only from real @godxjp/ui components.
11
+ */
12
+ export default function Demo() {
13
+ const [current, setCurrent] = useState("");
14
+ const [next, setNext] = useState("");
15
+
16
+ return (
17
+ <PageContainer title="PasswordInput" subtitle="パスワード入力 · 表示/非表示トグル付き">
18
+ <Flex direction="col" gap="lg">
19
+ <Card>
20
+ <CardHeader>
21
+ <CardTitle level={2}>States</CardTitle>
22
+ <CardDescription>Placeholder, filled, and disabled.</CardDescription>
23
+ </CardHeader>
24
+ <CardContent>
25
+ <Flex direction="col" gap="md">
26
+ <PasswordInput aria-label="プレースホルダー状態" placeholder="パスワードを入力" />
27
+ <PasswordInput aria-label="入力済み状態" defaultValue="S3cr3t!pass" />
28
+ <PasswordInput aria-label="無効状態" disabled defaultValue="無効 (disabled)" />
29
+ </Flex>
30
+ </CardContent>
31
+ </Card>
32
+
33
+ <Card>
34
+ <CardHeader>
35
+ <CardTitle level={2}>Inherited Input affordances</CardTitle>
36
+ <CardDescription>
37
+ PasswordInput retains leading/trailing nodes and the explicit clear callback while
38
+ preserving its visibility control.
39
+ </CardDescription>
40
+ </CardHeader>
41
+ <CardContent>
42
+ <Flex direction="col" gap="md">
43
+ <PasswordInput
44
+ aria-label="クリア可能なパスワード"
45
+ defaultValue="secret"
46
+ allowClear
47
+ onClear={() => {}}
48
+ leadingIcon={<span aria-hidden="true">L</span>}
49
+ />
50
+ <PasswordInput
51
+ aria-label="末尾情報付きパスワード"
52
+ allowClear={false}
53
+ trailingIcon={<span aria-hidden="true">T</span>}
54
+ />
55
+ </Flex>
56
+ </CardContent>
57
+ </Card>
58
+
59
+ <Card>
60
+ <CardHeader>
61
+ <CardTitle level={2}>ログインフォーム</CardTitle>
62
+ <CardDescription>
63
+ current-password autoComplete でパスワードマネージャーと連携。
64
+ </CardDescription>
65
+ </CardHeader>
66
+ <CardContent>
67
+ <FormField id="current-password" label="現在のパスワード" required>
68
+ <PasswordInput
69
+ id="current-password"
70
+ name="current_password"
71
+ autoComplete="current-password"
72
+ value={current}
73
+ onChange={(e) => setCurrent(e.target.value)}
74
+ placeholder="現在のパスワード"
75
+ />
76
+ </FormField>
77
+ </CardContent>
78
+ </Card>
79
+
80
+ <Card>
81
+ <CardHeader>
82
+ <CardTitle level={2}>パスワード変更フォーム</CardTitle>
83
+ <CardDescription>new-password autoComplete で新しいパスワードを設定。</CardDescription>
84
+ </CardHeader>
85
+ <CardContent>
86
+ <FormField id="new-password" label="新しいパスワード" required>
87
+ <PasswordInput
88
+ id="new-password"
89
+ name="new_password"
90
+ autoComplete="new-password"
91
+ value={next}
92
+ onChange={(e) => setNext(e.target.value)}
93
+ placeholder="新しいパスワード"
94
+ />
95
+ </FormField>
96
+ </CardContent>
97
+ </Card>
98
+ <PasswordInput size="sm" placeholder="Compact tier (sm)" aria-label="Password (sm)" />
99
+ </Flex>
100
+ </PageContainer>
101
+ );
102
+ }
@@ -0,0 +1,97 @@
1
+ import { useState } from "react";
2
+
3
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@godxjp/ui/data-display";
4
+ import { FormField, PasswordInput, PasswordStrength } from "@godxjp/ui/data-entry";
5
+ import { Flex, PageContainer } from "@godxjp/ui/layout";
6
+
7
+ /**
8
+ * PasswordStrength — 0-4 score bar + rule checklist paired with PasswordInput.
9
+ * Always render immediately below the PasswordInput it evaluates.
10
+ * Composed only from real @godxjp/ui components.
11
+ */
12
+ export default function Demo() {
13
+ const [signupPassword, setSignupPassword] = useState("");
14
+ const [resetPassword, setResetPassword] = useState("");
15
+
16
+ return (
17
+ <PageContainer
18
+ title="PasswordStrength"
19
+ subtitle="パスワード強度メーター · スコアバー+ルールチェックリスト"
20
+ >
21
+ <Flex direction="col" gap="lg">
22
+ <Card>
23
+ <CardHeader>
24
+ <CardTitle level={2}>新規登録フォーム</CardTitle>
25
+ <CardDescription>
26
+ PasswordInput の直下に配置し、入力と同時にスコアを表示する。
27
+ </CardDescription>
28
+ </CardHeader>
29
+ <CardContent>
30
+ <Flex direction="col" gap="md">
31
+ <FormField id="signup-password" label="パスワード" required>
32
+ <PasswordInput
33
+ id="signup-password"
34
+ name="password"
35
+ autoComplete="new-password"
36
+ value={signupPassword}
37
+ onChange={(e) => setSignupPassword(e.target.value)}
38
+ placeholder="8文字以上のパスワード"
39
+ />
40
+ </FormField>
41
+ <PasswordStrength value={signupPassword} showChecklist />
42
+ </Flex>
43
+ </CardContent>
44
+ </Card>
45
+
46
+ <Card>
47
+ <CardHeader>
48
+ <CardTitle level={2}>カスタムルール + ラベル</CardTitle>
49
+ <CardDescription>
50
+ rules で評価項目を絞り込み、labels でスコア表示を日本語化。
51
+ </CardDescription>
52
+ </CardHeader>
53
+ <CardContent>
54
+ <Flex direction="col" gap="md">
55
+ <FormField id="reset-password" label="新しいパスワード" required>
56
+ <PasswordInput
57
+ id="reset-password"
58
+ name="new_password"
59
+ autoComplete="new-password"
60
+ value={resetPassword}
61
+ onChange={(e) => setResetPassword(e.target.value)}
62
+ placeholder="新しいパスワード"
63
+ />
64
+ </FormField>
65
+ <PasswordStrength
66
+ value={resetPassword}
67
+ rules={["length", "upper", "lower", "number"]}
68
+ labels={{ weak: "弱い", fair: "普通", strong: "強い" }}
69
+ showChecklist
70
+ />
71
+ </Flex>
72
+ </CardContent>
73
+ </Card>
74
+
75
+ <Card>
76
+ <CardHeader>
77
+ <CardTitle level={2}>チェックリスト非表示</CardTitle>
78
+ <CardDescription>
79
+ showChecklist={"{false}"} でスコアバーのみ表示するコンパクト版。
80
+ </CardDescription>
81
+ </CardHeader>
82
+ <CardContent>
83
+ <Flex direction="col" gap="md">
84
+ <PasswordInput
85
+ aria-label="パスワード(無効状態)"
86
+ autoComplete="new-password"
87
+ defaultValue="MyP@ss1"
88
+ disabled
89
+ />
90
+ <PasswordStrength value="MyP@ss1" showChecklist={false} />
91
+ </Flex>
92
+ </CardContent>
93
+ </Card>
94
+ </Flex>
95
+ </PageContainer>
96
+ );
97
+ }
@@ -0,0 +1,95 @@
1
+ import { useState } from "react";
2
+
3
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@godxjp/ui/data-display";
4
+ import { Field, RadioGroup, RadioItem } from "@godxjp/ui/data-entry";
5
+ import { Flex, PageContainer } from "@godxjp/ui/layout";
6
+
7
+ /**
8
+ * RadioGroup — 2–4 mutually-exclusive choices, all visible at once (use Select
9
+ * when the list is long or must collapse). Data-driven via an options array.
10
+ * Composed only from real @godxjp/ui components.
11
+ */
12
+ export default function Demo() {
13
+ const [controlled, setControlled] = useState("email");
14
+ return (
15
+ <PageContainer
16
+ title="RadioGroup"
17
+ subtitle="Mutually-exclusive choices, all visible · options array"
18
+ >
19
+ <Flex direction="col" gap="lg">
20
+ <Card>
21
+ <CardHeader>
22
+ <CardTitle level={2}>Vertical</CardTitle>
23
+ <CardDescription>The default stacked layout.</CardDescription>
24
+ </CardHeader>
25
+ <CardContent>
26
+ <RadioGroup
27
+ defaultValue="taxed"
28
+ options={[
29
+ { value: "taxed", label: "税抜" },
30
+ { value: "included", label: "税込" },
31
+ { value: "exempt", label: "非課税" },
32
+ ]}
33
+ />
34
+ </CardContent>
35
+ </Card>
36
+
37
+ <Card>
38
+ <CardHeader>
39
+ <CardTitle level={2}>Controlled · named · disabled</CardTitle>
40
+ <CardDescription>
41
+ Controlled callback and native form name with disabled options.
42
+ </CardDescription>
43
+ </CardHeader>
44
+ <CardContent>
45
+ <RadioGroup
46
+ className="contract-radio-group"
47
+ name="notification_channel"
48
+ value={controlled}
49
+ onValueChange={setControlled}
50
+ options={[
51
+ { value: "email", label: "メール" },
52
+ { value: "sms", label: "SMS" },
53
+ { value: "push", label: "プッシュ", disabled: true },
54
+ ]}
55
+ />
56
+ </CardContent>
57
+ </Card>
58
+
59
+ <Card>
60
+ <CardHeader>
61
+ <CardTitle level={2}>Disabled group · custom children</CardTitle>
62
+ <CardDescription>
63
+ The children composition remains labelled and non-interactive.
64
+ </CardDescription>
65
+ </CardHeader>
66
+ <CardContent>
67
+ <RadioGroup disabled defaultValue="locked">
68
+ <Field id="radio-locked" label="確定済み">
69
+ <RadioItem id="radio-locked" value="locked" />
70
+ </Field>
71
+ </RadioGroup>
72
+ </CardContent>
73
+ </Card>
74
+
75
+ <Card>
76
+ <CardHeader>
77
+ <CardTitle level={2}>Horizontal</CardTitle>
78
+ <CardDescription>orientation=“horizontal” for compact rows.</CardDescription>
79
+ </CardHeader>
80
+ <CardContent>
81
+ <RadioGroup
82
+ defaultValue="round"
83
+ orientation="horizontal"
84
+ options={[
85
+ { value: "round", label: "四捨五入" },
86
+ { value: "floor", label: "切り捨て" },
87
+ { value: "ceil", label: "切り上げ" },
88
+ ]}
89
+ />
90
+ </CardContent>
91
+ </Card>
92
+ </Flex>
93
+ </PageContainer>
94
+ );
95
+ }
@@ -0,0 +1,87 @@
1
+ import { useState } from "react";
2
+
3
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@godxjp/ui/data-display";
4
+ import { FormField, Rating } from "@godxjp/ui/data-entry";
5
+ import { Flex, PageContainer } from "@godxjp/ui/layout";
6
+
7
+ /**
8
+ * Rating — star-rating input (radiogroup internally). Controlled via
9
+ * value/onValueChange. Use readOnly for displaying an average score.
10
+ * Pass name for native form submission. Composed only from real @godxjp/ui
11
+ * components.
12
+ */
13
+ export default function Demo() {
14
+ const [vendorScore, setVendorScore] = useState(0);
15
+ const [qualityScore, setQualityScore] = useState(4);
16
+
17
+ return (
18
+ <PageContainer
19
+ title="Rating"
20
+ subtitle="Star-rating input (radiogroup) — collecting reviews or displaying averages"
21
+ >
22
+ <Flex direction="col" gap="lg">
23
+ <Card>
24
+ <CardHeader>
25
+ <CardTitle level={2}>Controlled input</CardTitle>
26
+ <CardDescription>
27
+ Controlled via value/onValueChange. Keyboard accessible (radiogroup). Pass name= for
28
+ native form submission.
29
+ </CardDescription>
30
+ </CardHeader>
31
+ <CardContent>
32
+ <Flex direction="col" gap="md">
33
+ <FormField id="vendor-rating" label="取引先評価">
34
+ <Rating name="vendor_rating" value={vendorScore} onValueChange={setVendorScore} />
35
+ </FormField>
36
+ <FormField id="quality-rating" label="品質スコア">
37
+ <Rating
38
+ name="quality_score"
39
+ value={qualityScore}
40
+ onValueChange={setQualityScore}
41
+ max={5}
42
+ />
43
+ </FormField>
44
+ </Flex>
45
+ </CardContent>
46
+ </Card>
47
+
48
+ <Card>
49
+ <CardHeader>
50
+ <CardTitle level={2}>Read-only display</CardTitle>
51
+ <CardDescription>
52
+ readOnly=true turns it into a display widget with no interaction. Use for showing
53
+ average scores.
54
+ </CardDescription>
55
+ </CardHeader>
56
+ <CardContent>
57
+ <Flex direction="col" gap="md">
58
+ <FormField id="avg-payment" label="支払い信頼性 (平均)">
59
+ <Rating value={4} readOnly />
60
+ </FormField>
61
+ <FormField id="avg-response" label="対応速度 (平均)">
62
+ <Rating value={3} readOnly />
63
+ </FormField>
64
+ <FormField id="avg-accuracy" label="請求正確性 (平均)">
65
+ <Rating value={5} readOnly />
66
+ </FormField>
67
+ </Flex>
68
+ </CardContent>
69
+ </Card>
70
+
71
+ <Card>
72
+ <CardHeader>
73
+ <CardTitle level={2}>Custom max stars</CardTitle>
74
+ <CardDescription>
75
+ max= controls the number of stars rendered. Default is 5.
76
+ </CardDescription>
77
+ </CardHeader>
78
+ <CardContent>
79
+ <FormField id="priority-rating" label="優先度 (10段階)">
80
+ <Rating name="priority" defaultValue={7} max={10} />
81
+ </FormField>
82
+ </CardContent>
83
+ </Card>
84
+ </Flex>
85
+ </PageContainer>
86
+ );
87
+ }