@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,224 @@
1
+ import { Activity, Heading, Text } from "@godxjp/ui/general";
2
+ import {
3
+ Avatar,
4
+ AvatarFallback,
5
+ Card,
6
+ CardContent,
7
+ CardHeader,
8
+ CardTitle,
9
+ } from "@godxjp/ui/data-display";
10
+ import { Textarea } from "@godxjp/ui/data-entry";
11
+ import { Flex, PageContainer, Separator } from "@godxjp/ui/layout";
12
+
13
+ /**
14
+ * Activity · the official AMBIENT-motion primitive: a continuous, unbounded "something is happening
15
+ * right now, elsewhere". The LOOP counterpart to `Reveal`'s one-shot entrance (gh#313).
16
+ *
17
+ * Reads the DS motion tokens (`--activity-interval`, `--activity-stagger-step`,
18
+ * `--activity-mark-offset`, `--activity-color`, `--ease-standard`) so a consumer never hand-rolls a
19
+ * looping `@keyframes` + its own `prefers-reduced-motion` guard. Under reduced motion the loop is
20
+ * dropped and each mark falls back to a DESIGNED resting state · three solid dots, a solid pulse
21
+ * mark, a bar segment parked at the reading-start · never to nothing.
22
+ *
23
+ * Composed only from real @godxjp/ui components. All copy is consumer-owned and localized.
24
+ */
25
+
26
+ const MESSAGES = [
27
+ { id: "m1", who: "田中", initials: "田", body: "在庫の締めは今日の18時でお願いします。" },
28
+ { id: "m2", who: "佐藤", initials: "佐", body: "了解しました。倉庫Bの棚卸しを先に片付けます。" },
29
+ { id: "m3", who: "田中", initials: "田", body: "助かります。差異があれば共有してください。" },
30
+ ];
31
+
32
+ const TONES = [
33
+ { tone: "muted", label: "muted · 既定(環境音)" },
34
+ { tone: "default", label: "default · 前景色" },
35
+ { tone: "primary", label: "primary · 主要導線" },
36
+ { tone: "success", label: "success · 接続中" },
37
+ { tone: "warning", label: "warning · 再接続中" },
38
+ { tone: "destructive", label: "destructive · 録画中" },
39
+ { tone: "info", label: "info · 同期中" },
40
+ ] as const;
41
+
42
+ const SIZES = [
43
+ { size: "xs", label: "xs" },
44
+ { size: "sm", label: "sm(既定)" },
45
+ { size: "md", label: "md" },
46
+ { size: "lg", label: "lg" },
47
+ ] as const;
48
+
49
+ export default function Demo() {
50
+ return (
51
+ <PageContainer
52
+ title="Activity"
53
+ subtitle="環境モーション(無限ループ)· モーショントークン準拠 · prefers-reduced-motion で静止フレームに退避"
54
+ >
55
+ <Flex direction="col" gap="lg">
56
+ {/* ── The real screen: a channel with a live typing affordance under the composer ── */}
57
+ <Card>
58
+ <CardHeader>
59
+ <CardTitle level={2}>#倉庫-運用</CardTitle>
60
+ </CardHeader>
61
+ <CardContent>
62
+ <Flex direction="col" gap="md">
63
+ {/* Ambient sync state at the top of the channel · the same primitive, `bar` mark. */}
64
+ <Activity variant="bar" tone="info" label="同期中…" />
65
+
66
+ {MESSAGES.map((message) => (
67
+ <Flex key={message.id} direction="row" gap="sm" align="start">
68
+ <Avatar>
69
+ <AvatarFallback>{message.initials}</AvatarFallback>
70
+ </Avatar>
71
+ <Flex direction="col" gap="xs">
72
+ <Text weight="medium">{message.who}</Text>
73
+ <Text tone="muted">{message.body}</Text>
74
+ </Flex>
75
+ </Flex>
76
+ ))}
77
+
78
+ <Separator />
79
+
80
+ {/*
81
+ * The typing affordance. `announce` is left at its default `false`: typing flickers
82
+ * on and off with every socket event, and a live region there re-announces
83
+ * continuously. The row sits ABOVE the composer and keeps its own height, so the
84
+ * composer does not jump when the indicator appears or disappears.
85
+ */}
86
+ <Activity label="佐藤さんが入力しています…" />
87
+
88
+ <Textarea aria-label="メッセージを入力" placeholder="メッセージを入力…" rows={2} />
89
+ </Flex>
90
+ </CardContent>
91
+ </Card>
92
+
93
+ {/* ── variant × every union value ── */}
94
+ <Card>
95
+ <CardHeader>
96
+ <CardTitle level={2}>variant · 3 つのマーク</CardTitle>
97
+ </CardHeader>
98
+ <CardContent>
99
+ <Flex direction="col" gap="md">
100
+ <Flex direction="col" gap="xs">
101
+ <Text size="xs" tone="muted">
102
+ dots(既定)— 3 点が順に浮く。&ldquo;入力中&rdquo; の省略記号の慣習。
103
+ </Text>
104
+ <Activity variant="dots" label="佐藤さんが入力しています…" />
105
+ </Flex>
106
+ <Flex direction="col" gap="xs">
107
+ <Text size="xs" tone="muted">
108
+ pulse · 単一の呼吸するマーク。ライブ / 録画中。
109
+ </Text>
110
+ <Activity variant="pulse" tone="destructive" label="録画中" />
111
+ </Flex>
112
+ <Flex direction="col" gap="xs">
113
+ <Text size="xs" tone="muted">
114
+ bar · 不確定スイープ。同期中 / ストリーミング中。
115
+ </Text>
116
+ <Activity variant="bar" tone="info" label="仕訳を同期しています…" />
117
+ </Flex>
118
+ </Flex>
119
+ </CardContent>
120
+ </Card>
121
+
122
+ {/* ── size × every union value ── */}
123
+ <Card>
124
+ <CardHeader>
125
+ <CardTitle level={2}>size · マークとラベルが同時にスケール</CardTitle>
126
+ </CardHeader>
127
+ <CardContent>
128
+ <Flex direction="col" gap="sm">
129
+ {SIZES.map((step) => (
130
+ <Activity key={step.size} size={step.size} label={`入力中… (${step.label})`} />
131
+ ))}
132
+ </Flex>
133
+ </CardContent>
134
+ </Card>
135
+
136
+ {/* ── tone × every union value ── */}
137
+ <Card>
138
+ <CardHeader>
139
+ <CardTitle level={2}>tone · 意味づけされた配色(既定は muted)</CardTitle>
140
+ </CardHeader>
141
+ <CardContent>
142
+ <Flex direction="col" gap="sm">
143
+ {TONES.map((entry) => (
144
+ <Activity key={entry.tone} tone={entry.tone} label={entry.label} />
145
+ ))}
146
+ </Flex>
147
+ </CardContent>
148
+ </Card>
149
+
150
+ {/* ── children / label / announce ── */}
151
+ <Card>
152
+ <CardHeader>
153
+ <CardTitle level={2}>ラベルと読み上げ</CardTitle>
154
+ </CardHeader>
155
+ <CardContent>
156
+ <Flex direction="col" gap="md">
157
+ <Flex direction="col" gap="xs">
158
+ <Text size="xs" tone="muted">
159
+ label のみ —
160
+ マークの隣に可視テキストとして描画される。アニメーションだけで意味を運ばせない。
161
+ </Text>
162
+ <Activity label="佐藤さんが入力しています…" />
163
+ </Flex>
164
+
165
+ <Flex direction="col" gap="xs">
166
+ <Text size="xs" tone="muted">
167
+ children + label · children が可視スロットを持ち、label は sr-only の説明になる。
168
+ </Text>
169
+ <Activity label="佐藤さんが入力しています…">
170
+ <Text size="xs" tone="muted">
171
+ <Text as="strong" size="xs" weight="medium">
172
+ 佐藤
173
+ </Text>
174
+ ほか 2 名
175
+ </Text>
176
+ </Activity>
177
+ </Flex>
178
+
179
+ <Flex direction="col" gap="xs">
180
+ <Text size="xs" tone="muted">
181
+ announce=&quot;polite&quot; · ライブリージョンは label だけを包む。既定は
182
+ false(リージョンを一切出さない)。ソケットのたびに読み上げが走る面では使わないこと。
183
+ </Text>
184
+ <Activity announce="polite" tone="warning" label="接続を再試行しています…" />
185
+ </Flex>
186
+
187
+ <Flex direction="col" gap="xs">
188
+ <Text size="xs" tone="muted">
189
+ label なし · 装飾のみ。支援技術には何も伝わらないので、意味を持つ場面では必ず
190
+ label を渡す。
191
+ </Text>
192
+ <Activity variant="pulse" />
193
+ </Flex>
194
+ </Flex>
195
+ </CardContent>
196
+ </Card>
197
+
198
+ <Card>
199
+ <CardHeader>
200
+ <CardTitle level={2}>prefers-reduced-motion</CardTitle>
201
+ </CardHeader>
202
+ <CardContent>
203
+ <Flex direction="col" gap="sm">
204
+ <Heading level={3}>静止フレームは「設計されたもの」であって「無」ではない</Heading>
205
+ <Text tone="muted">
206
+ OS
207
+ のモーション低減設定では、ループを止めるだけでマークは可視の休止状態に落ちる。dots
208
+ は 3 点が実体のまま並ぶ静的な省略記号、pulse は塗りつぶしのマーク、bar
209
+ は読み始め側に停めたセグメント(満杯にすると「完了」に読めてしまう)。ラベルはどちらの場合も可視テキストなので、意味は必ず伝わる。レイアウトシフトも起きない(WCAG
210
+ 2.2 SC 2.3.3 / SC 2.2.2)。
211
+ </Text>
212
+ <Text tone="muted">
213
+ テーマ側のつまみ: --activity-interval · --activity-stagger-step ·
214
+ --activity-mark-size · --activity-mark-offset · --activity-mark-rest-alpha ·
215
+ --activity-pulse-mark-size · --activity-gap · --activity-font-size · --activity-bar
216
+ · --activity-color(--duration-loop がループ全体の基準間隔)。
217
+ </Text>
218
+ </Flex>
219
+ </CardContent>
220
+ </Card>
221
+ </Flex>
222
+ </PageContainer>
223
+ );
224
+ }
@@ -0,0 +1,90 @@
1
+ import { useState } from "react";
2
+
3
+ import { Descriptions, Avatar, AvatarFallback } from "@godxjp/ui/data-display";
4
+ import { AlertDialog } from "@godxjp/ui/feedback";
5
+ import { Button } from "@godxjp/ui/general";
6
+ import {
7
+ AppShell,
8
+ PageContainer,
9
+ Sidebar,
10
+ type SidebarSectionProp,
11
+ Topbar,
12
+ } from "@godxjp/ui/layout";
13
+ import { BookOpen, FileText, LayoutDashboard, ReceiptText, Trash2, Users } from "lucide-react";
14
+
15
+ /**
16
+ * Destructive confirmation — the irreversible "削除" action opens an AlertDialog
17
+ * (the canonical confirm primitive, role="alertdialog", variant="destructive"),
18
+ * never a hand-rolled Card + buttons. Cancel dismisses; confirm runs onConfirm.
19
+ */
20
+ const sections: SidebarSectionProp[] = [
21
+ {
22
+ label: "会計",
23
+ items: [
24
+ { id: "dashboard", label: "ダッシュボード", icon: LayoutDashboard },
25
+ { id: "journal", label: "仕訳", icon: FileText },
26
+ { id: "invoices", label: "請求書", icon: ReceiptText },
27
+ { id: "partners", label: "取引先", icon: BookOpen },
28
+ ],
29
+ },
30
+ { label: "管理", items: [{ id: "users", label: "ユーザー", icon: Users }] },
31
+ ];
32
+
33
+ export default function Demo() {
34
+ const [open, setOpen] = useState(true);
35
+
36
+ return (
37
+ <AppShell
38
+ sidebar={
39
+ <Sidebar
40
+ activeId="journal"
41
+ sections={sections}
42
+ onSelect={() => {}}
43
+ product={{ name: "CoreBooks", role: "管理コンソール", color: "hsl(var(--primary))" }}
44
+ />
45
+ }
46
+ topbar={
47
+ <Topbar
48
+ start={
49
+ <Avatar className="rounded-md">
50
+ <AvatarFallback className="bg-primary text-primary-foreground font-bold">
51
+ C
52
+ </AvatarFallback>
53
+ </Avatar>
54
+ }
55
+ />
56
+ }
57
+ >
58
+ <PageContainer
59
+ title="仕訳 #2024-0312"
60
+ subtitle="2024-04-12 · 承認済"
61
+ breadcrumb={[{ label: "仕訳", to: "#" }, { label: "#2024-0312" }]}
62
+ extra={
63
+ <Button variant="destructive" onClick={() => setOpen(true)}>
64
+ <Trash2 />
65
+ 削除
66
+ </Button>
67
+ }
68
+ >
69
+ <Descriptions>
70
+ <Descriptions.Item label="日付">2024-04-12</Descriptions.Item>
71
+ <Descriptions.Item label="借方">売掛金 ¥482,000</Descriptions.Item>
72
+ <Descriptions.Item label="貸方">売上高 ¥438,182 / 仮受消費税 ¥43,818</Descriptions.Item>
73
+ <Descriptions.Item label="取引先">株式会社ベトヤ</Descriptions.Item>
74
+ <Descriptions.Item label="摘要">4月分 受注 INV-2024-0312</Descriptions.Item>
75
+ </Descriptions>
76
+
77
+ <AlertDialog
78
+ open={open}
79
+ onOpenChange={setOpen}
80
+ title="仕訳を削除しますか?"
81
+ description="この操作は取り消せません。仕訳 #2024-0312 を完全に削除します。"
82
+ confirmLabel="削除する"
83
+ cancelLabel="キャンセル"
84
+ variant="destructive"
85
+ onConfirm={() => setOpen(false)}
86
+ />
87
+ </PageContainer>
88
+ </AppShell>
89
+ );
90
+ }
@@ -0,0 +1,85 @@
1
+ import { FormField, Input } from "@godxjp/ui/data-entry";
2
+ import { Button } from "@godxjp/ui/general";
3
+ import { Avatar, AvatarFallback } from "@godxjp/ui/data-display";
4
+ import {
5
+ AppShell,
6
+ Flex,
7
+ PageContainer,
8
+ Sidebar,
9
+ type SidebarSectionProp,
10
+ Topbar,
11
+ } from "@godxjp/ui/layout";
12
+ import { BookOpen, FileText, LayoutDashboard, ReceiptText, Users } from "lucide-react";
13
+
14
+ /**
15
+ * Form page — the primary submit + outline cancel live in PageContainer's
16
+ * `footer` slot (stickyFooter pins it as the form scrolls). No hand-rolled
17
+ * footer bar; the page shell owns it.
18
+ */
19
+ const sections: SidebarSectionProp[] = [
20
+ {
21
+ label: "会計",
22
+ items: [
23
+ { id: "dashboard", label: "ダッシュボード", icon: LayoutDashboard },
24
+ { id: "journal", label: "仕訳", icon: FileText },
25
+ { id: "invoices", label: "請求書", icon: ReceiptText },
26
+ { id: "partners", label: "取引先", icon: BookOpen },
27
+ ],
28
+ },
29
+ { label: "管理", items: [{ id: "users", label: "ユーザー", icon: Users }] },
30
+ ];
31
+
32
+ export default function Demo() {
33
+ return (
34
+ <AppShell
35
+ sidebar={
36
+ <Sidebar
37
+ activeId="partners"
38
+ sections={sections}
39
+ onSelect={() => {}}
40
+ product={{ name: "CoreBooks", role: "管理コンソール", color: "hsl(var(--primary))" }}
41
+ />
42
+ }
43
+ topbar={
44
+ <Topbar
45
+ start={
46
+ <Avatar className="rounded-md">
47
+ <AvatarFallback className="bg-primary text-primary-foreground font-bold">
48
+ C
49
+ </AvatarFallback>
50
+ </Avatar>
51
+ }
52
+ />
53
+ }
54
+ >
55
+ <PageContainer
56
+ title="取引先の編集"
57
+ subtitle="株式会社ベトヤ · BTY-0012"
58
+ breadcrumb={[{ label: "取引先", to: "#" }, { label: "編集" }]}
59
+ footer={
60
+ <Flex direction="row" wrap gap="sm" justify="end">
61
+ <Button variant="outline" type="button">
62
+ キャンセル
63
+ </Button>
64
+ <Button type="submit">保存</Button>
65
+ </Flex>
66
+ }
67
+ >
68
+ <Flex direction="col" gap="md">
69
+ <FormField id="name" label="取引先名">
70
+ <Input id="name" defaultValue="株式会社ベトヤ" />
71
+ </FormField>
72
+ <FormField id="code" label="取引先コード">
73
+ <Input id="code" defaultValue="BTY-0012" />
74
+ </FormField>
75
+ <FormField id="contact" label="担当者">
76
+ <Input id="contact" defaultValue="グエン・ヴァン・A" />
77
+ </FormField>
78
+ <FormField id="email" label="メール">
79
+ <Input id="email" type="email" defaultValue="ke-toan@betoya.test" />
80
+ </FormField>
81
+ </Flex>
82
+ </PageContainer>
83
+ </AppShell>
84
+ );
85
+ }
@@ -0,0 +1,160 @@
1
+ import {
2
+ Badge,
3
+ Card,
4
+ CardContent,
5
+ DataTable,
6
+ type ColumnDef,
7
+ Avatar,
8
+ AvatarFallback,
9
+ } from "@godxjp/ui/data-display";
10
+ import { Button } from "@godxjp/ui/general";
11
+ import {
12
+ AppShell,
13
+ Flex,
14
+ PageContainer,
15
+ Sidebar,
16
+ type SidebarSectionProp,
17
+ Topbar,
18
+ } from "@godxjp/ui/layout";
19
+ import {
20
+ BookOpen,
21
+ Download,
22
+ FileText,
23
+ LayoutDashboard,
24
+ Pencil,
25
+ Plus,
26
+ ReceiptText,
27
+ Trash2,
28
+ Users,
29
+ } from "lucide-react";
30
+
31
+ /**
32
+ * List page — the toolbar is NOT hand-rolled: the page title + primary/secondary
33
+ * actions live in PageContainer's `title` + `extra`, and per-row ghost icon
34
+ * Buttons sit in a DataTable action column. The table is wrapped in a Card
35
+ * (CardContent flush) inside a padded PageContainer so it stays on the same
36
+ * gutters as the header.
37
+ */
38
+ const sections: SidebarSectionProp[] = [
39
+ {
40
+ label: "会計",
41
+ items: [
42
+ { id: "dashboard", label: "ダッシュボード", icon: LayoutDashboard },
43
+ { id: "journal", label: "仕訳", icon: FileText },
44
+ { id: "invoices", label: "請求書", icon: ReceiptText },
45
+ { id: "partners", label: "取引先", icon: BookOpen },
46
+ ],
47
+ },
48
+ { label: "管理", items: [{ id: "users", label: "ユーザー", icon: Users }] },
49
+ ];
50
+
51
+ type Invoice = {
52
+ id: string;
53
+ partner: string;
54
+ amount: number;
55
+ status: "active" | "pending" | "draft";
56
+ date: string;
57
+ };
58
+
59
+ const invoices: Invoice[] = [
60
+ {
61
+ id: "INV-2024-0312",
62
+ partner: "株式会社ベトヤ",
63
+ amount: 482000,
64
+ status: "active",
65
+ date: "2024-04-12",
66
+ },
67
+ {
68
+ id: "INV-2024-0311",
69
+ partner: "ハノイ物流",
70
+ amount: 128400,
71
+ status: "pending",
72
+ date: "2024-04-11",
73
+ },
74
+ { id: "INV-2024-0310", partner: "GMO決済", amount: 64800, status: "draft", date: "2024-04-10" },
75
+ ];
76
+
77
+ const yen = new Intl.NumberFormat("ja-JP", {
78
+ style: "currency",
79
+ currency: "JPY",
80
+ maximumFractionDigits: 0,
81
+ });
82
+
83
+ const columns: ColumnDef<Invoice>[] = [
84
+ { key: "id", header: "請求書番号" },
85
+ { key: "partner", header: "取引先", sortable: true },
86
+ {
87
+ key: "amount",
88
+ header: "金額",
89
+ align: "right",
90
+ render: (row) => <span className="tabular-nums">{yen.format(row.amount)}</span>,
91
+ },
92
+ { key: "status", header: "状態", render: (row) => <Badge status={row.status} /> },
93
+ { key: "date", header: "発行日", align: "right" },
94
+ {
95
+ key: "_actions",
96
+ header: "",
97
+ ariaLabel: "操作",
98
+ align: "right",
99
+ render: () => (
100
+ <Flex direction="row" wrap align="center" gap="xs" justify="end">
101
+ <Button variant="ghost" size="icon-sm" aria-label="編集">
102
+ <Pencil />
103
+ </Button>
104
+ <Button variant="ghost" size="icon-sm" aria-label="削除">
105
+ <Trash2 />
106
+ </Button>
107
+ </Flex>
108
+ ),
109
+ },
110
+ ];
111
+
112
+ export default function Demo() {
113
+ return (
114
+ <AppShell
115
+ sidebar={
116
+ <Sidebar
117
+ activeId="invoices"
118
+ sections={sections}
119
+ onSelect={() => {}}
120
+ product={{ name: "CoreBooks", role: "管理コンソール", color: "hsl(var(--primary))" }}
121
+ />
122
+ }
123
+ topbar={
124
+ <Topbar
125
+ start={
126
+ <Avatar className="rounded-md">
127
+ <AvatarFallback className="bg-primary text-primary-foreground font-bold">
128
+ C
129
+ </AvatarFallback>
130
+ </Avatar>
131
+ }
132
+ />
133
+ }
134
+ >
135
+ <PageContainer
136
+ title="請求書 一覧"
137
+ subtitle="直近30日間の受注データ"
138
+ breadcrumb={[{ label: "請求書" }]}
139
+ extra={
140
+ <Flex direction="row" wrap align="center" gap="sm">
141
+ <Button variant="outline" size="sm">
142
+ <Download />
143
+ エクスポート
144
+ </Button>
145
+ <Button size="sm">
146
+ <Plus />
147
+ 新規請求書
148
+ </Button>
149
+ </Flex>
150
+ }
151
+ >
152
+ <Card>
153
+ <CardContent flush>
154
+ <DataTable data={invoices} columns={columns} getRowId={(row) => row.id} />
155
+ </CardContent>
156
+ </Card>
157
+ </PageContainer>
158
+ </AppShell>
159
+ );
160
+ }
@@ -0,0 +1,12 @@
1
+ ---
2
+ title: Overview
3
+ ---
4
+
5
+ The core action control — every clickable action is a `Button` (never a raw `<button>`).
6
+ Pick the variant by intent (one primary per view), the size from the preset, and use
7
+ `asChild` to render links with button styling. See Examples for real usage in context.
8
+
9
+ For filter tabs / segmented toggles that show a per-option total, pass the `count` prop
10
+ (`<Button variant="outline" count={18}>Chờ bay</Button>`) instead of nesting a `Badge` —
11
+ it renders a borderless counter pill, formatted in the active locale and toned to the
12
+ button variant, so an outline button never ends up with a doubled border.