@godxjp/ui 19.0.0 → 19.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (445) hide show
  1. package/README.md +25 -128
  2. package/dist/app/app-provider.d.ts +1 -1
  3. package/dist/app/app-provider.js +3 -0
  4. package/dist/app/theme-axes.d.ts +4 -15
  5. package/dist/app/timezones.d.ts +1 -4
  6. package/dist/components/charts/area-chart.d.ts +2 -3
  7. package/dist/components/charts/bar-chart.d.ts +2 -3
  8. package/dist/components/charts/chart-frame.d.ts +7 -16
  9. package/dist/components/charts/chart-summary.d.ts +2 -2
  10. package/dist/components/charts/compact-bar-trend.d.ts +9 -24
  11. package/dist/components/charts/index.d.ts +1 -6
  12. package/dist/components/data-display/badge.d.ts +2 -12
  13. package/dist/components/data-display/card.d.ts +21 -41
  14. package/dist/components/data-display/carousel.d.ts +1 -2
  15. package/dist/components/data-display/code-block.d.ts +4 -0
  16. package/dist/components/data-display/code-block.js +24 -0
  17. package/dist/components/data-display/data-table.d.ts +15 -37
  18. package/dist/components/data-display/data-table.js +1 -3
  19. package/dist/components/data-display/descriptions.d.ts +2 -6
  20. package/dist/components/data-display/descriptions.js +0 -2
  21. package/dist/components/data-display/index.d.ts +4 -0
  22. package/dist/components/data-display/index.js +4 -0
  23. package/dist/components/data-display/list-row.d.ts +3 -22
  24. package/dist/components/data-display/permission-matrix.d.ts +7 -20
  25. package/dist/components/data-display/progress.d.ts +1 -1
  26. package/dist/components/data-display/prose.d.ts +4 -0
  27. package/dist/components/data-display/prose.js +20 -0
  28. package/dist/components/data-display/service-launcher-card.d.ts +3 -10
  29. package/dist/components/data-display/table.d.ts +20 -80
  30. package/dist/components/data-display/table.js +0 -3
  31. package/dist/components/data-display/timeline.d.ts +3 -5
  32. package/dist/components/data-entry/branch-scope-picker.d.ts +2 -19
  33. package/dist/components/data-entry/branch-scope-picker.js +0 -1
  34. package/dist/components/data-entry/calendar.d.ts +3 -2
  35. package/dist/components/data-entry/calendar.js +58 -3
  36. package/dist/components/data-entry/cascader.js +3 -1
  37. package/dist/components/data-entry/checkbox-group.js +12 -5
  38. package/dist/components/data-entry/checkbox.js +30 -21
  39. package/dist/components/data-entry/command-palette.d.ts +8 -22
  40. package/dist/components/data-entry/date-picker.d.ts +4 -5
  41. package/dist/components/data-entry/date-picker.js +12 -3
  42. package/dist/components/data-entry/date-range-picker.d.ts +1 -1
  43. package/dist/components/data-entry/date-range-picker.js +17 -6
  44. package/dist/components/data-entry/form-errors.d.ts +7 -18
  45. package/dist/components/data-entry/form-field.d.ts +1 -1
  46. package/dist/components/data-entry/form-field.js +15 -6
  47. package/dist/components/data-entry/form.d.ts +1 -9
  48. package/dist/components/data-entry/input.d.ts +16 -14
  49. package/dist/components/data-entry/input.js +13 -3
  50. package/dist/components/data-entry/month-picker.js +6 -4
  51. package/dist/components/data-entry/month-range-picker.d.ts +4 -6
  52. package/dist/components/data-entry/month-range-picker.js +11 -5
  53. package/dist/components/data-entry/number-input.d.ts +1 -5
  54. package/dist/components/data-entry/number-input.js +1 -0
  55. package/dist/components/data-entry/radio.js +19 -6
  56. package/dist/components/data-entry/search-select.d.ts +3 -5
  57. package/dist/components/data-entry/search-select.js +8 -2
  58. package/dist/components/data-entry/select.d.ts +15 -2
  59. package/dist/components/data-entry/select.js +57 -10
  60. package/dist/components/data-entry/switch.js +9 -2
  61. package/dist/components/data-entry/textarea.d.ts +10 -16
  62. package/dist/components/data-entry/textarea.js +8 -1
  63. package/dist/components/data-entry/time-picker.d.ts +3 -5
  64. package/dist/components/data-entry/tree-select.js +3 -1
  65. package/dist/components/data-entry/upload-types.d.ts +1 -5
  66. package/dist/components/data-entry/use-upload-draft.d.ts +0 -4
  67. package/dist/components/feedback/dialog.d.ts +6 -15
  68. package/dist/components/feedback/overlay-header-tone.d.ts +1 -1
  69. package/dist/components/feedback/sheet.d.ts +3 -10
  70. package/dist/components/feedback/sheet.js +1 -1
  71. package/dist/components/feedback/sonner.js +2 -3
  72. package/dist/components/general/activity.d.ts +4 -30
  73. package/dist/components/general/button.js +1 -10
  74. package/dist/components/general/logo.d.ts +6 -28
  75. package/dist/components/general/reveal.d.ts +3 -9
  76. package/dist/components/general/typography.d.ts +1 -3
  77. package/dist/components/layout/account-chip.d.ts +8 -0
  78. package/dist/components/layout/account-chip.js +45 -0
  79. package/dist/components/layout/auth-divider.d.ts +2 -9
  80. package/dist/components/layout/auth-shell.d.ts +1 -14
  81. package/dist/components/layout/breadcrumb.d.ts +1 -5
  82. package/dist/components/layout/centered-shell.d.ts +4 -18
  83. package/dist/components/layout/error-surface.d.ts +11 -28
  84. package/dist/components/layout/error-surface.js +4 -1
  85. package/dist/components/layout/index.d.ts +2 -0
  86. package/dist/components/layout/index.js +2 -0
  87. package/dist/components/layout/legal-document-shell.d.ts +5 -28
  88. package/dist/components/layout/master-detail.d.ts +2 -18
  89. package/dist/components/layout/page-container.js +0 -1
  90. package/dist/components/layout/responsive-grid.d.ts +6 -1
  91. package/dist/components/layout/responsive-grid.js +9 -2
  92. package/dist/components/layout/service-role-panel.d.ts +7 -19
  93. package/dist/components/layout/sidebar.d.ts +5 -27
  94. package/dist/components/layout/sidebar.js +0 -1
  95. package/dist/components/layout/split-pane.d.ts +0 -7
  96. package/dist/components/layout/topbar.d.ts +1 -14
  97. package/dist/components/navigation/app-setting-picker.js +1 -3
  98. package/dist/components/navigation/filter-bar.d.ts +1 -6
  99. package/dist/components/navigation/pagination-utils.d.ts +2 -12
  100. package/dist/components/navigation/tabs-scroll.d.ts +2 -36
  101. package/dist/components/navigation/tabs.js +4 -8
  102. package/dist/components/query/data-state.d.ts +2 -2
  103. package/dist/components/ui/credential-reveal.d.ts +1 -4
  104. package/dist/components/ui/hover-card.d.ts +1 -2
  105. package/dist/components/ui/separator.d.ts +2 -15
  106. package/dist/components/ui/toggle-group.d.ts +1 -5
  107. package/dist/components/ui/toggle.d.ts +6 -31
  108. package/dist/email/brand-mark.d.ts +6 -34
  109. package/dist/email/color.d.ts +7 -17
  110. package/dist/email/geometry.d.ts +4 -8
  111. package/dist/email/index.d.ts +4 -48
  112. package/dist/email/inline-style.d.ts +3 -9
  113. package/dist/email/urgency.d.ts +2 -7
  114. package/dist/form/form-context.d.ts +2 -5
  115. package/dist/form/form-root.d.ts +1 -2
  116. package/dist/i18n/messages/en.json +4 -0
  117. package/dist/i18n/messages/ja.json +4 -0
  118. package/dist/i18n/messages/vi.json +4 -0
  119. package/dist/inertia/index.d.ts +2 -10
  120. package/dist/lib/control-styles.d.ts +10 -21
  121. package/dist/lib/control-styles.js +4 -6
  122. package/dist/lib/datetime/format-date.d.ts +1 -4
  123. package/dist/lib/field-a11y.d.ts +31 -36
  124. package/dist/lib/field-a11y.js +16 -2
  125. package/dist/lib/format.d.ts +4 -8
  126. package/dist/lib/hooks.d.ts +6 -12
  127. package/dist/lib/permission-grid.d.ts +3 -18
  128. package/dist/lib/query-error.d.ts +3 -3
  129. package/dist/props/components/app.prop.d.ts +19 -27
  130. package/dist/props/components/charts.prop.d.ts +2 -3
  131. package/dist/props/components/data-display.prop.d.ts +48 -72
  132. package/dist/props/components/data-entry.prop.d.ts +41 -30
  133. package/dist/props/components/form.prop.d.ts +2 -6
  134. package/dist/props/components/general.prop.d.ts +11 -27
  135. package/dist/props/components/layout.prop.d.ts +89 -260
  136. package/dist/props/components/navigation.prop.d.ts +27 -42
  137. package/dist/props/registry.d.ts +31 -0
  138. package/dist/props/registry.js +33 -0
  139. package/dist/props/vocabulary/data.prop.d.ts +18 -49
  140. package/dist/props/vocabulary/index.d.ts +1 -1
  141. package/dist/props/vocabulary/interaction.prop.d.ts +10 -12
  142. package/dist/props/vocabulary/layout.prop.d.ts +8 -30
  143. package/dist/props/vocabulary/shared.prop.d.ts +3 -2
  144. package/dist/styles/alert-layout.css +1 -32
  145. package/dist/styles/badge-layout.css +4 -18
  146. package/dist/styles/base.css +14 -113
  147. package/dist/styles/card-layout.css +6 -128
  148. package/dist/styles/chart-layout.css +2 -17
  149. package/dist/styles/control.css +380 -458
  150. package/dist/styles/core.css +21 -0
  151. package/dist/styles/data-display-layout.css +175 -94
  152. package/dist/styles/data-entry-layout.css +0 -45
  153. package/dist/styles/density.css +1 -30
  154. package/dist/styles/dialog-layout.css +5 -69
  155. package/dist/styles/focus-ring.css +13 -87
  156. package/dist/styles/fonts.css +1 -31
  157. package/dist/styles/form-layout.css +7 -91
  158. package/dist/styles/index.css +2 -20
  159. package/dist/styles/layout.css +38 -456
  160. package/dist/styles/logo-layout.css +1 -35
  161. package/dist/styles/motion.css +3 -42
  162. package/dist/styles/navigation-layout.css +3 -50
  163. package/dist/styles/shell-layout.css +37 -403
  164. package/dist/styles/table-layout.css +16 -274
  165. package/dist/styles/text-layout.css +7 -21
  166. package/dist/styles/toggle.css +1 -23
  167. package/dist/theme/dxs.canonical.css +1 -55
  168. package/dist/theme/example.service.css +1 -26
  169. package/dist/theme/famgia.service.css +5 -15
  170. package/dist/tokens/axes.css +3 -40
  171. package/dist/tokens/base.css +1 -4
  172. package/dist/tokens/components/activity.css +6 -42
  173. package/dist/tokens/components/badge.css +4 -13
  174. package/dist/tokens/components/banner.css +4 -9
  175. package/dist/tokens/components/card.css +32 -88
  176. package/dist/tokens/components/chart.css +9 -26
  177. package/dist/tokens/components/control.css +37 -222
  178. package/dist/tokens/components/data-display.css +28 -79
  179. package/dist/tokens/components/data-entry.css +5 -19
  180. package/dist/tokens/components/descriptions.css +7 -27
  181. package/dist/tokens/components/email.css +38 -84
  182. package/dist/tokens/components/error-surface.css +2 -18
  183. package/dist/tokens/components/feedback.css +27 -124
  184. package/dist/tokens/components/form.css +13 -45
  185. package/dist/tokens/components/legal-document.css +16 -41
  186. package/dist/tokens/components/list-row.css +11 -36
  187. package/dist/tokens/components/logo.css +2 -57
  188. package/dist/tokens/components/navigation.css +16 -94
  189. package/dist/tokens/components/scroll-area.css +2 -18
  190. package/dist/tokens/components/separator.css +8 -30
  191. package/dist/tokens/components/sheet.css +3 -14
  192. package/dist/tokens/components/shell.css +53 -307
  193. package/dist/tokens/components/sidebar.css +5 -22
  194. package/dist/tokens/components/table.css +19 -140
  195. package/dist/tokens/components/toggle.css +3 -65
  196. package/dist/tokens/components/upload.css +7 -43
  197. package/dist/tokens/foundation.css +108 -383
  198. package/dist/tokens/semantic/layout.css +33 -207
  199. package/docs/CANONICAL-CONTRACTS.md +206 -0
  200. package/docs/COMPONENTS.md +157 -0
  201. package/docs/COMPOSITION-VS-COMPONENT.md +105 -0
  202. package/docs/CONSUMER-RULES.md +14 -0
  203. package/docs/CUSTOMER-THEMING.md +162 -0
  204. package/docs/DATETIME.md +69 -0
  205. package/docs/DEVELOPMENT.md +173 -0
  206. package/docs/FORMS.md +143 -0
  207. package/docs/FRAME-A11Y-CI.md +267 -0
  208. package/docs/FRAME-COVERAGE-LEDGER.md +123 -0
  209. package/docs/FRAME-COVERAGE-REPORT.md +140 -0
  210. package/docs/FRAME-COVERAGE-STANDARD.md +65 -0
  211. package/docs/FRAME-COVERAGE.md +29 -0
  212. package/docs/PROPS-REGISTRY.md +61 -0
  213. package/docs/PROPS-VOCABULARY.md +100 -0
  214. package/docs/README.md +60 -0
  215. package/docs/REGISTRY.md +70 -0
  216. package/docs/SPACING.md +56 -0
  217. package/docs/STANDARDS-vocabulary-tokens.md +48 -0
  218. package/docs/TESTING.md +98 -0
  219. package/docs/TOKENS.md +347 -0
  220. package/docs/asset-modules.d.ts +46 -0
  221. package/docs/assets/cover-terrain.svg +6 -0
  222. package/docs/assets/portrait-amber.svg +5 -0
  223. package/docs/assets/portrait-clay.svg +5 -0
  224. package/docs/assets/portrait-indigo.svg +5 -0
  225. package/docs/assets/portrait-iris.svg +5 -0
  226. package/docs/assets/portrait-moss.svg +5 -0
  227. package/docs/assets/portrait-plum.svg +5 -0
  228. package/docs/assets/portrait-slate.svg +5 -0
  229. package/docs/charts/compact-bar-trend.tsx +328 -0
  230. package/docs/charts/size-tiers.tsx +192 -0
  231. package/docs/data-display/accordion.tsx +99 -0
  232. package/docs/data-display/avatar.tsx +355 -0
  233. package/docs/data-display/badge.tsx +247 -0
  234. package/docs/data-display/card/examples/detail-panel.tsx +106 -0
  235. package/docs/data-display/card/index.md +3 -0
  236. package/docs/data-display/card/index.tsx +285 -0
  237. package/docs/data-display/carousel.tsx +156 -0
  238. package/docs/data-display/charts.tsx +198 -0
  239. package/docs/data-display/code-block.tsx +90 -0
  240. package/docs/data-display/collapsible.tsx +162 -0
  241. package/docs/data-display/credential-reveal.tsx +145 -0
  242. package/docs/data-display/data-table/examples/approval-queue.tsx +212 -0
  243. package/docs/data-display/data-table/examples/grid-features.tsx +158 -0
  244. package/docs/data-display/data-table/examples/list-page.tsx +175 -0
  245. package/docs/data-display/data-table/index.md +5 -0
  246. package/docs/data-display/data-table/index.tsx +295 -0
  247. package/docs/data-display/descriptions.tsx +143 -0
  248. package/docs/data-display/empty-state.tsx +164 -0
  249. package/docs/data-display/hover-card.tsx +181 -0
  250. package/docs/data-display/list-row.tsx +420 -0
  251. package/docs/data-display/permission-matrix.tsx +184 -0
  252. package/docs/data-display/popover-touch.tsx +27 -0
  253. package/docs/data-display/popover.tsx +245 -0
  254. package/docs/data-display/progress.tsx +84 -0
  255. package/docs/data-display/prose.tsx +105 -0
  256. package/docs/data-display/qr-code.tsx +68 -0
  257. package/docs/data-display/scroll-area.tsx +271 -0
  258. package/docs/data-display/service-launcher-card.tsx +145 -0
  259. package/docs/data-display/stat-card.tsx +99 -0
  260. package/docs/data-display/table.tsx +251 -0
  261. package/docs/data-display/timeline.tsx +112 -0
  262. package/docs/data-display/touch-actions.tsx +36 -0
  263. package/docs/data-display/tree-list.tsx +107 -0
  264. package/docs/data-entry/branch-scope-picker.tsx +123 -0
  265. package/docs/data-entry/calendar.tsx +180 -0
  266. package/docs/data-entry/cascader.tsx +378 -0
  267. package/docs/data-entry/checkbox.tsx +256 -0
  268. package/docs/data-entry/color-picker.tsx +117 -0
  269. package/docs/data-entry/command-palette.tsx +179 -0
  270. package/docs/data-entry/command.tsx +262 -0
  271. package/docs/data-entry/country-picker-recipe.tsx +170 -0
  272. package/docs/data-entry/date-picker.tsx +191 -0
  273. package/docs/data-entry/date-range-picker.tsx +149 -0
  274. package/docs/data-entry/form/examples/employee-settings.tsx +267 -0
  275. package/docs/data-entry/form/examples/invoice-form.tsx +387 -0
  276. package/docs/data-entry/form-field/examples/a11y-contract.tsx +240 -0
  277. package/docs/data-entry/form-field/examples/create-form.tsx +105 -0
  278. package/docs/data-entry/form-field/index.md +8 -0
  279. package/docs/data-entry/form-field/index.tsx +326 -0
  280. package/docs/data-entry/form-inertia.tsx +80 -0
  281. package/docs/data-entry/form-root.tsx +102 -0
  282. package/docs/data-entry/form.tsx +724 -0
  283. package/docs/data-entry/input-otp.tsx +231 -0
  284. package/docs/data-entry/input.tsx +114 -0
  285. package/docs/data-entry/label.tsx +100 -0
  286. package/docs/data-entry/month-picker.tsx +101 -0
  287. package/docs/data-entry/month-range-picker.tsx +115 -0
  288. package/docs/data-entry/number-input.tsx +240 -0
  289. package/docs/data-entry/password-input.tsx +106 -0
  290. package/docs/data-entry/password-strength.tsx +97 -0
  291. package/docs/data-entry/radio-group.tsx +95 -0
  292. package/docs/data-entry/rating.tsx +87 -0
  293. package/docs/data-entry/search-input.tsx +120 -0
  294. package/docs/data-entry/select-async-contracts.tsx +108 -0
  295. package/docs/data-entry/select-matrix.tsx +204 -0
  296. package/docs/data-entry/select.tsx +369 -0
  297. package/docs/data-entry/slider.tsx +130 -0
  298. package/docs/data-entry/switch.tsx +67 -0
  299. package/docs/data-entry/tag-input.tsx +108 -0
  300. package/docs/data-entry/textarea.tsx +209 -0
  301. package/docs/data-entry/time-picker.tsx +99 -0
  302. package/docs/data-entry/toggle-count.tsx +293 -0
  303. package/docs/data-entry/toggle-group.tsx +225 -0
  304. package/docs/data-entry/toggle.tsx +127 -0
  305. package/docs/data-entry/transfer.tsx +97 -0
  306. package/docs/data-entry/tree-select.tsx +204 -0
  307. package/docs/data-entry/upload.tsx +184 -0
  308. package/docs/feedback/alert-dialog.tsx +270 -0
  309. package/docs/feedback/alert.tsx +248 -0
  310. package/docs/feedback/banner.tsx +183 -0
  311. package/docs/feedback/danger-confirm.tsx +88 -0
  312. package/docs/feedback/dialog-touch.tsx +24 -0
  313. package/docs/feedback/dialog.tsx +193 -0
  314. package/docs/feedback/sheet.tsx +410 -0
  315. package/docs/feedback/skeleton.tsx +111 -0
  316. package/docs/feedback/toast.tsx +135 -0
  317. package/docs/feedback/tooltip.tsx +171 -0
  318. package/docs/feedback/two-factor-setup.tsx +68 -0
  319. package/docs/foundation/_email-specimen.ts +274 -0
  320. package/docs/foundation/colors.tsx +202 -0
  321. package/docs/foundation/density.tsx +232 -0
  322. package/docs/foundation/email-tokens.tsx +306 -0
  323. package/docs/foundation/radius-shadow.tsx +152 -0
  324. package/docs/foundation/spacing.tsx +211 -0
  325. package/docs/foundation/typography.tsx +147 -0
  326. package/docs/general/activity.tsx +224 -0
  327. package/docs/general/button/examples/destructive-confirm.tsx +90 -0
  328. package/docs/general/button/examples/form-actions.tsx +85 -0
  329. package/docs/general/button/examples/toolbar.tsx +160 -0
  330. package/docs/general/button/index.md +12 -0
  331. package/docs/general/button/index.tsx +211 -0
  332. package/docs/general/logo.tsx +131 -0
  333. package/docs/general/reveal.tsx +41 -0
  334. package/docs/general/typography.tsx +152 -0
  335. package/docs/layout/account-chip.tsx +72 -0
  336. package/docs/layout/admin-collection.tsx +122 -0
  337. package/docs/layout/app-shell.tsx +374 -0
  338. package/docs/layout/aspect-ratio.tsx +119 -0
  339. package/docs/layout/auth-account-summary.tsx +103 -0
  340. package/docs/layout/auth-divider.tsx +28 -0
  341. package/docs/layout/auth-footer.tsx +37 -0
  342. package/docs/layout/auth-identity.tsx +36 -0
  343. package/docs/layout/auth-recovery/examples/mfa-challenge.md +41 -0
  344. package/docs/layout/auth-recovery/examples/mfa-challenge.tsx +254 -0
  345. package/docs/layout/auth-recovery/examples/mobile-390.md +25 -0
  346. package/docs/layout/auth-recovery/examples/mobile-390.tsx +82 -0
  347. package/docs/layout/auth-recovery/examples/password-recovery.md +24 -0
  348. package/docs/layout/auth-recovery/examples/password-recovery.tsx +197 -0
  349. package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.md +27 -0
  350. package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.tsx +156 -0
  351. package/docs/layout/auth-recovery/index.md +140 -0
  352. package/docs/layout/auth-recovery/index.tsx +96 -0
  353. package/docs/layout/auth-shell-context.tsx +103 -0
  354. package/docs/layout/auth-shell-device.tsx +112 -0
  355. package/docs/layout/auth-shell-registration.tsx +335 -0
  356. package/docs/layout/auth-shell-variants.tsx +139 -0
  357. package/docs/layout/auth-shell.tsx +59 -0
  358. package/docs/layout/auth-stack.tsx +40 -0
  359. package/docs/layout/centered-shell.tsx +102 -0
  360. package/docs/layout/error-surface/examples/application-403.tsx +84 -0
  361. package/docs/layout/error-surface/examples/application-404.tsx +77 -0
  362. package/docs/layout/error-surface/examples/system-500.tsx +47 -0
  363. package/docs/layout/error-surface/examples/system-503.tsx +48 -0
  364. package/docs/layout/error-surface/index.md +153 -0
  365. package/docs/layout/error-surface/index.tsx +239 -0
  366. package/docs/layout/flex.tsx +262 -0
  367. package/docs/layout/legal-document-shell/_data.ts +110 -0
  368. package/docs/layout/legal-document-shell/examples/desktop-1440.md +12 -0
  369. package/docs/layout/legal-document-shell/examples/desktop-1440.tsx +83 -0
  370. package/docs/layout/legal-document-shell/examples/mobile-390.md +22 -0
  371. package/docs/layout/legal-document-shell/examples/mobile-390.tsx +70 -0
  372. package/docs/layout/legal-document-shell/examples/tablet-1024.md +3 -0
  373. package/docs/layout/legal-document-shell/examples/tablet-1024.tsx +84 -0
  374. package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.md +18 -0
  375. package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.tsx +61 -0
  376. package/docs/layout/legal-document-shell/index.md +51 -0
  377. package/docs/layout/legal-document-shell/index.tsx +101 -0
  378. package/docs/layout/master-detail.tsx +387 -0
  379. package/docs/layout/org-switcher.tsx +131 -0
  380. package/docs/layout/page-container.tsx +946 -0
  381. package/docs/layout/resizable-panel.tsx +419 -0
  382. package/docs/layout/responsive-grid.tsx +235 -0
  383. package/docs/layout/separator.tsx +327 -0
  384. package/docs/layout/service-role-panel.tsx +144 -0
  385. package/docs/layout/sidebar.tsx +586 -0
  386. package/docs/layout/split-pane.tsx +451 -0
  387. package/docs/layout/topbar.tsx +347 -0
  388. package/docs/navigation/app-setting-picker.tsx +141 -0
  389. package/docs/navigation/breadcrumb.tsx +128 -0
  390. package/docs/navigation/context-menu.tsx +117 -0
  391. package/docs/navigation/dropdown-menu.tsx +213 -0
  392. package/docs/navigation/filter-bar.tsx +227 -0
  393. package/docs/navigation/menubar.tsx +141 -0
  394. package/docs/navigation/navigation-menu.tsx +165 -0
  395. package/docs/navigation/pagination.tsx +241 -0
  396. package/docs/navigation/steps.tsx +263 -0
  397. package/docs/navigation/tabs-rtl.tsx +28 -0
  398. package/docs/navigation/tabs.tsx +308 -0
  399. package/docs/navigation/toolbar.tsx +339 -0
  400. package/docs/providers/app-provider.tsx +191 -0
  401. package/docs/providers/format-date.tsx +230 -0
  402. package/docs/query/button-refetch.tsx +160 -0
  403. package/docs/query/data-state.tsx +192 -0
  404. package/docs/query/infinite-query-state.tsx +93 -0
  405. package/docs/query/mutation-feedback.tsx +70 -0
  406. package/docs/query/prefetch-link.tsx +262 -0
  407. package/docs/query/touch-actions.tsx +68 -0
  408. package/docs/showcase/acme-portal.tsx +441 -0
  409. package/docs/showcase/acme-website.tsx +455 -0
  410. package/docs/showcase/case1-warehouse-dashboard.tsx +343 -0
  411. package/docs/showcase/case2-employee-me.tsx +441 -0
  412. package/docs/showcase/case3-approval-workflow.tsx +527 -0
  413. package/docs/showcase/case4-login.tsx +307 -0
  414. package/docs/showcase/case5-shift-calendar.tsx +795 -0
  415. package/docs/showcase/case6-agency-handy.tsx +1072 -0
  416. package/docs/showcase/futurelastic-web.tsx +390 -0
  417. package/docs/showcase/org-switcher.tsx +313 -0
  418. package/docs/showcase/permission-matrix.tsx +343 -0
  419. package/docs/showcase/public-landing.tsx +210 -0
  420. package/docs/showcase/settings-account-sections.tsx +559 -0
  421. package/docs/showcase/settings-security-mfa.tsx +145 -0
  422. package/docs/showcase/table-approval-queue.tsx +199 -0
  423. package/docs/showcase/table-bulk-actions.tsx +460 -0
  424. package/docs/showcase/table-compact-kintone.tsx +438 -0
  425. package/docs/showcase/table-conditional-format.tsx +367 -0
  426. package/docs/showcase/table-crud-list.tsx +544 -0
  427. package/docs/showcase/table-density.tsx +340 -0
  428. package/docs/showcase/table-expandable-rows.tsx +471 -0
  429. package/docs/showcase/table-filter-chips.tsx +461 -0
  430. package/docs/showcase/table-footer-totals.tsx +311 -0
  431. package/docs/showcase/table-grouped-subtotals.tsx +388 -0
  432. package/docs/showcase/table-master-detail.tsx +479 -0
  433. package/docs/showcase/table-pagination.tsx +320 -0
  434. package/docs/showcase/table-states.tsx +363 -0
  435. package/docs/showcase/table-sticky-columns.tsx +373 -0
  436. package/docs/showcase/table-tree-rows.tsx +444 -0
  437. package/docs/showcase/table-view-tabs.tsx +488 -0
  438. package/package.json +10 -11
  439. package/scripts/_agent-setup.mjs +16 -2
  440. package/scripts/audit-hook.mjs +3 -13
  441. package/scripts/init-agent-kit.mjs +1 -14
  442. package/scripts/postinstall.mjs +12 -12
  443. package/scripts/ui-audit.mjs +93 -31
  444. package/scripts/visual-audit-rules.mjs +51 -7
  445. package/scripts/visual-audit.mjs +118 -47
@@ -0,0 +1,256 @@
1
+ import { useState } from "react";
2
+
3
+ import {
4
+ Badge,
5
+ Card,
6
+ CardContent,
7
+ CardDescription,
8
+ CardHeader,
9
+ CardTitle,
10
+ } from "@godxjp/ui/data-display";
11
+ import { Checkbox, CheckboxGroup, Field, FormField } from "@godxjp/ui/data-entry";
12
+ import { Flex, PageContainer } from "@godxjp/ui/layout";
13
+
14
+ const ALL_SCOPES = ["read", "write", "delete"];
15
+
16
+ /**
17
+ * Checkbox — a single boolean (wrap in Field for a labelled row) or a
18
+ * CheckboxGroup from an options array. Composed only from real @godxjp/ui
19
+ * components.
20
+ */
21
+ export default function Demo() {
22
+ // Controlled CheckboxGroup — selection is surfaced at rest below the group.
23
+ const [channels, setChannels] = useState<string[]>(["email", "sms"]);
24
+
25
+ // Indeterminate "select all" — parent reflects the children's mixed state.
26
+ const [scopes, setScopes] = useState<string[]>(["read"]);
27
+ const allChecked = scopes.length === ALL_SCOPES.length;
28
+ const someChecked = scopes.length > 0 && !allChecked;
29
+ const toggleScope = (scope: string) =>
30
+ setScopes((prev) =>
31
+ prev.includes(scope) ? prev.filter((s) => s !== scope) : [...prev, scope],
32
+ );
33
+
34
+ return (
35
+ <PageContainer
36
+ title="Checkbox"
37
+ subtitle="Single checkbox (in Field) or a CheckboxGroup from options"
38
+ >
39
+ <Flex direction="col" gap="lg">
40
+ <Card>
41
+ <CardHeader>
42
+ <CardTitle level={2}>Single · labelled with Field</CardTitle>
43
+ <CardDescription>
44
+ Field pairs the control with a label + optional description. The last row is disabled.
45
+ </CardDescription>
46
+ </CardHeader>
47
+ <CardContent>
48
+ <Flex direction="col" gap="md">
49
+ <Field id="agree" label="利用規約に同意する" description="続行するには同意が必要です">
50
+ <Checkbox id="agree" defaultChecked />
51
+ </Field>
52
+ <Field id="news" label="お知らせを受け取る">
53
+ <Checkbox id="news" />
54
+ </Field>
55
+ <Field id="locked" label="管理者ロック" description="権限がないため変更できません">
56
+ <Checkbox id="locked" defaultChecked disabled />
57
+ </Field>
58
+ </Flex>
59
+ </CardContent>
60
+ </Card>
61
+
62
+ <Card>
63
+ <CardHeader>
64
+ <CardTitle level={2}>Required and explicit indeterminate defaults</CardTitle>
65
+ <CardDescription>
66
+ Required form semantics and both controlled/default indeterminate values are visible.
67
+ </CardDescription>
68
+ </CardHeader>
69
+ <CardContent>
70
+ <Flex direction="col" gap="md">
71
+ <Field id="required-checkbox" label="必須確認">
72
+ <Checkbox id="required-checkbox" required defaultChecked={false} />
73
+ </Field>
74
+ <Field id="default-indeterminate" label="初期混在">
75
+ <Checkbox id="default-indeterminate" defaultChecked="indeterminate" />
76
+ </Field>
77
+ </Flex>
78
+ </CardContent>
79
+ </Card>
80
+
81
+ <Card>
82
+ <CardHeader>
83
+ <CardTitle level={2}>CheckboxGroup custom children</CardTitle>
84
+ <CardDescription>
85
+ Children composition and className are explicit public contracts.
86
+ </CardDescription>
87
+ </CardHeader>
88
+ <CardContent>
89
+ <CheckboxGroup className="contract-checkbox-children">
90
+ <Field id="custom-child-checkbox" label="カスタム子要素">
91
+ <Checkbox id="custom-child-checkbox" value="custom" />
92
+ </Field>
93
+ </CheckboxGroup>
94
+ </CardContent>
95
+ </Card>
96
+
97
+ <Card>
98
+ <CardHeader>
99
+ <CardTitle level={2}>Indeterminate · select all</CardTitle>
100
+ <CardDescription>
101
+ The parent uses checked=&quot;indeterminate&quot; when only some children are selected
102
+ (children composed from explicit Field + Checkbox).
103
+ </CardDescription>
104
+ </CardHeader>
105
+ <CardContent>
106
+ <Flex direction="col" gap="md">
107
+ <Field id="scope-all" label="すべての権限">
108
+ <Checkbox
109
+ id="scope-all"
110
+ checked={allChecked ? true : someChecked ? "indeterminate" : false}
111
+ onCheckedChange={(next) => setScopes(next === true ? ALL_SCOPES : [])}
112
+ />
113
+ </Field>
114
+ <Flex direction="col" gap="sm" className="ps-6">
115
+ <Field id="scope-read" label="閲覧">
116
+ <Checkbox
117
+ id="scope-read"
118
+ value="read"
119
+ checked={scopes.includes("read")}
120
+ onCheckedChange={() => toggleScope("read")}
121
+ />
122
+ </Field>
123
+ <Field id="scope-write" label="編集">
124
+ <Checkbox
125
+ id="scope-write"
126
+ value="write"
127
+ checked={scopes.includes("write")}
128
+ onCheckedChange={() => toggleScope("write")}
129
+ />
130
+ </Field>
131
+ <Field id="scope-delete" label="削除">
132
+ <Checkbox
133
+ id="scope-delete"
134
+ value="delete"
135
+ checked={scopes.includes("delete")}
136
+ onCheckedChange={() => toggleScope("delete")}
137
+ />
138
+ </Field>
139
+ </Flex>
140
+ </Flex>
141
+ </CardContent>
142
+ </Card>
143
+
144
+ <Card>
145
+ <CardHeader>
146
+ <CardTitle level={2}>Error · invalid in a FormField</CardTitle>
147
+ <CardDescription>
148
+ FormField wires aria-invalid + the error message onto the control (role=alert).
149
+ </CardDescription>
150
+ </CardHeader>
151
+ <CardContent>
152
+ <FormField id="terms" label="利用規約に同意する" error="同意が必要です">
153
+ <Checkbox id="terms" />
154
+ </FormField>
155
+ </CardContent>
156
+ </Card>
157
+
158
+ <Card>
159
+ <CardHeader>
160
+ <CardTitle level={2}>CheckboxGroup (options)</CardTitle>
161
+ <CardDescription>
162
+ Multi-select from a data-driven options array, with per-option description and
163
+ disabled.
164
+ </CardDescription>
165
+ </CardHeader>
166
+ <CardContent>
167
+ <CheckboxGroup
168
+ name="export"
169
+ defaultValue={["pdf"]}
170
+ options={[
171
+ { value: "pdf", label: "PDF 出力", description: "印刷向けのレイアウト" },
172
+ { value: "csv", label: "CSV 出力", description: "表計算ソフトで開けます" },
173
+ {
174
+ value: "mail",
175
+ label: "メール送信",
176
+ disabled: true,
177
+ description: "送信先が未設定です",
178
+ },
179
+ ]}
180
+ />
181
+ </CardContent>
182
+ </Card>
183
+
184
+ <Card>
185
+ <CardHeader>
186
+ <CardTitle level={2}>Horizontal orientation</CardTitle>
187
+ <CardDescription>
188
+ orientation=&quot;horizontal&quot; lays the options out in a wrapping row.
189
+ </CardDescription>
190
+ </CardHeader>
191
+ <CardContent>
192
+ <CheckboxGroup
193
+ defaultValue={["mon", "wed", "fri"]}
194
+ orientation="horizontal"
195
+ options={[
196
+ { value: "mon", label: "月" },
197
+ { value: "tue", label: "火" },
198
+ { value: "wed", label: "水" },
199
+ { value: "thu", label: "木" },
200
+ { value: "fri", label: "金" },
201
+ { value: "sat", label: "土" },
202
+ { value: "sun", label: "日" },
203
+ ]}
204
+ />
205
+ </CardContent>
206
+ </Card>
207
+
208
+ <Card>
209
+ <CardHeader>
210
+ <CardTitle level={2}>Controlled value</CardTitle>
211
+ <CardDescription>
212
+ value + onValueChange own the selection; it is surfaced below the group.
213
+ </CardDescription>
214
+ </CardHeader>
215
+ <CardContent>
216
+ <Flex direction="col" gap="md">
217
+ <CheckboxGroup
218
+ value={channels}
219
+ onValueChange={setChannels}
220
+ options={[
221
+ { value: "email", label: "メール" },
222
+ { value: "sms", label: "SMS" },
223
+ { value: "push", label: "プッシュ通知" },
224
+ ]}
225
+ />
226
+ <Flex gap="sm" wrap>
227
+ {channels.length === 0 ? (
228
+ <Badge variant="secondary">未選択</Badge>
229
+ ) : (
230
+ channels.map((c) => <Badge key={c}>{c}</Badge>)
231
+ )}
232
+ </Flex>
233
+ </Flex>
234
+ </CardContent>
235
+ </Card>
236
+
237
+ <Card>
238
+ <CardHeader>
239
+ <CardTitle level={2}>Disabled group</CardTitle>
240
+ <CardDescription>disabled on the group disables every option at once.</CardDescription>
241
+ </CardHeader>
242
+ <CardContent>
243
+ <CheckboxGroup
244
+ disabled
245
+ defaultValue={["auto"]}
246
+ options={[
247
+ { value: "auto", label: "自動承認" },
248
+ { value: "manual", label: "手動承認" },
249
+ ]}
250
+ />
251
+ </CardContent>
252
+ </Card>
253
+ </Flex>
254
+ </PageContainer>
255
+ );
256
+ }
@@ -0,0 +1,117 @@
1
+ import { useState } from "react";
2
+
3
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@godxjp/ui/data-display";
4
+ import { ColorPicker, FormField } from "@godxjp/ui/data-entry";
5
+ import { Text } from "@godxjp/ui/general";
6
+ import { Flex, PageContainer } from "@godxjp/ui/layout";
7
+
8
+ /**
9
+ * ColorPicker — hex color swatch + optional editable hex input.
10
+ * Always initialize state to a valid 3- or 6-digit hex string.
11
+ * Use controlled mode (value + onValueChange); no uncontrolled path.
12
+ * Composed only from real @godxjp/ui components.
13
+ */
14
+ export default function Demo() {
15
+ const [brandColor, setBrandColor] = useState("#2563eb");
16
+ const [accentColor, setAccentColor] = useState("#16a34a");
17
+ const [categoryColor, setCategoryColor] = useState("#dc2626");
18
+ const [validatedColor, setValidatedColor] = useState("#9333ea");
19
+
20
+ return (
21
+ <PageContainer title="ColorPicker" subtitle="カラーピッカー · スウォッチ+Hex入力">
22
+ <Flex direction="col" gap="lg">
23
+ <Card>
24
+ <CardHeader>
25
+ <CardTitle level={2}>ブランドカラー設定</CardTitle>
26
+ <CardDescription>
27
+ FormField と組み合わせてラベル・バリデーションを付与。
28
+ </CardDescription>
29
+ </CardHeader>
30
+ <CardContent>
31
+ <FormField id="brand-color" label="ブランドカラー">
32
+ <ColorPicker id="brand-color" value={brandColor} onValueChange={setBrandColor} />
33
+ </FormField>
34
+ </CardContent>
35
+ </Card>
36
+
37
+ <Card>
38
+ <CardHeader>
39
+ <CardTitle level={2}>アクセントカラー(Hex入力付き)</CardTitle>
40
+ <CardDescription>
41
+ showHexInput={"{true}"} — デフォルト。Hex 文字列を直接編集可能。
42
+ </CardDescription>
43
+ </CardHeader>
44
+ <CardContent>
45
+ <FormField id="accent-color" label="アクセントカラー" helper="請求書のテーマカラー">
46
+ <ColorPicker
47
+ id="accent-color"
48
+ value={accentColor}
49
+ onValueChange={setAccentColor}
50
+ showHexInput
51
+ />
52
+ </FormField>
53
+ </CardContent>
54
+ </Card>
55
+
56
+ <Card>
57
+ <CardHeader>
58
+ <CardTitle level={2}>勘定科目カテゴリカラー(スウォッチのみ)</CardTitle>
59
+ <CardDescription>
60
+ showHexInput={"{false}"} — テーブルセルやサイドバーのコンパクト表示向け。
61
+ </CardDescription>
62
+ </CardHeader>
63
+ <CardContent>
64
+ <FormField id="category-color" label="カテゴリカラー">
65
+ <Flex direction="row" gap="md" className="items-center">
66
+ <ColorPicker
67
+ id="category-color"
68
+ value={categoryColor}
69
+ onValueChange={setCategoryColor}
70
+ showHexInput={false}
71
+ />
72
+ <Text tone="muted">選択中: {categoryColor}</Text>
73
+ </Flex>
74
+ </FormField>
75
+ </CardContent>
76
+ </Card>
77
+
78
+ <Card>
79
+ <CardHeader>
80
+ <CardTitle level={2}>Hex バリデーションと確定動作</CardTitle>
81
+ <CardDescription>
82
+ Hex 入力は blur または Enter で確定。確定時に #RGB / #RRGGBB
83
+ 形式でなければ、直前の有効な値へ自動的に巻き戻る。
84
+ </CardDescription>
85
+ </CardHeader>
86
+ <CardContent>
87
+ <FormField
88
+ id="validated-color"
89
+ label="ラベルカラー"
90
+ helper="例えば「zzz」と入力して Enter を押すと、入力は破棄され #9333EA に戻る。"
91
+ >
92
+ <ColorPicker
93
+ id="validated-color"
94
+ value={validatedColor}
95
+ onValueChange={setValidatedColor}
96
+ />
97
+ </FormField>
98
+ </CardContent>
99
+ </Card>
100
+
101
+ <Card>
102
+ <CardHeader>
103
+ <CardTitle level={2}>無効状態</CardTitle>
104
+ <CardDescription>
105
+ disabled · スウォッチと Hex 入力の両方が無効化される。
106
+ </CardDescription>
107
+ </CardHeader>
108
+ <CardContent>
109
+ <FormField id="disabled-color" label="テーマカラー">
110
+ <ColorPicker id="disabled-color" value="#6b7280" disabled />
111
+ </FormField>
112
+ </CardContent>
113
+ </Card>
114
+ </Flex>
115
+ </PageContainer>
116
+ );
117
+ }
@@ -0,0 +1,179 @@
1
+ import { useEffect, useRef, useState } from "react";
2
+
3
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@godxjp/ui/data-display";
4
+ import {
5
+ CommandPalette,
6
+ type CommandPaletteItem,
7
+ type CommandPaletteLabels,
8
+ } from "@godxjp/ui/data-entry";
9
+ import { Button, Text } from "@godxjp/ui/general";
10
+ import { Flex, PageContainer } from "@godxjp/ui/layout";
11
+
12
+ const labels: CommandPaletteLabels = {
13
+ open: "画面を検索",
14
+ title: "コマンドパレット",
15
+ description: "移動先または実行する操作を検索します。",
16
+ placeholder: "画面や操作を検索…",
17
+ empty: "一致する項目はありません。",
18
+ loading: "候補を読み込み中…",
19
+ move: "移動",
20
+ select: "開く",
21
+ close: "閉じる",
22
+ };
23
+
24
+ const groups = [
25
+ {
26
+ id: "screens",
27
+ label: "画面",
28
+ items: [
29
+ { id: "dashboard", label: "ダッシュボード", meta: "/dashboard" },
30
+ { id: "members", label: "メンバー管理", meta: "/organization/members" },
31
+ {
32
+ id: "billing",
33
+ label: "請求とサブスクリプション",
34
+ meta: "権限が必要",
35
+ disabled: true,
36
+ },
37
+ ],
38
+ },
39
+ {
40
+ id: "actions",
41
+ label: "操作",
42
+ items: [{ id: "invite", label: "メンバーを招待", meta: "⌘ I" }],
43
+ },
44
+ ];
45
+
46
+ const directory = [
47
+ { id: "tanaka", label: "田中 太郎", meta: "経理部" },
48
+ { id: "suzuki", label: "鈴木 花子", meta: "情報システム部" },
49
+ { id: "sato", label: "佐藤 健", meta: "営業部" },
50
+ { id: "takahashi", label: "高橋 美咲", meta: "人事部" },
51
+ ];
52
+
53
+ const serverLabels: CommandPaletteLabels = {
54
+ ...labels,
55
+ open: "メンバーを検索",
56
+ title: "メンバー検索",
57
+ description: "サーバー検索で該当するメンバーを表示します。",
58
+ placeholder: "氏名または部署で検索…",
59
+ empty: "該当するメンバーはいません。",
60
+ loading: "検索中…",
61
+ };
62
+
63
+ /**
64
+ * Server-backed search-as-you-type. The consumer owns the query (`onSearchChange`) and the result
65
+ * set, so `shouldFilter={false}` stops the palette from scoring the same rows a second time — and
66
+ * with it off the palette derives the empty node from `groups`, never from cmdk's scheduled count.
67
+ * `loading` is held for the whole in-flight window: a request that has not answered is not an
68
+ * empty result, so "該当なし" can only appear on a query the server actually answered.
69
+ */
70
+ function ServerSearchDemo() {
71
+ const [query, setQuery] = useState("");
72
+ const [results, setResults] = useState(directory);
73
+ const [loading, setLoading] = useState(false);
74
+ const requestRef = useRef(0);
75
+
76
+ useEffect(() => {
77
+ const request = (requestRef.current += 1);
78
+ setLoading(true);
79
+ const timer = setTimeout(() => {
80
+ if (request !== requestRef.current) return;
81
+ const trimmed = query.trim();
82
+ setResults(
83
+ trimmed === ""
84
+ ? directory
85
+ : directory.filter((entry) => `${entry.label}${entry.meta}`.includes(trimmed)),
86
+ );
87
+ setLoading(false);
88
+ }, 300);
89
+ return () => clearTimeout(timer);
90
+ }, [query]);
91
+
92
+ return (
93
+ <Flex direction="col" gap="md">
94
+ <CommandPalette
95
+ shouldFilter={false}
96
+ search={query}
97
+ onSearchChange={setQuery}
98
+ loading={loading}
99
+ groups={[{ id: "members", label: "メンバー", items: results }]}
100
+ labels={serverLabels}
101
+ onSelect={(item) => setQuery(String(item.label))}
102
+ />
103
+ <Text size="sm" tone="muted" aria-live="polite">
104
+ {`クエリ: ${query === "" ? "(未入力)" : query} · 結果 ${results.length} 件`}
105
+ </Text>
106
+ </Flex>
107
+ );
108
+ }
109
+
110
+ /**
111
+ * CommandPalette — searchable keyboard navigation with controlled async/error states and a durable
112
+ * selected-item readout. Press Command/Ctrl+K or use the trigger.
113
+ */
114
+ export default function Demo() {
115
+ const [selected, setSelected] = useState<CommandPaletteItem | null>(null);
116
+ const [loading, setLoading] = useState(false);
117
+ const [error, setError] = useState<string>();
118
+
119
+ return (
120
+ <PageContainer title="CommandPalette" subtitle="キーボード検索 · 選択 · loading/error recovery">
121
+ <Card>
122
+ <CardHeader>
123
+ <CardTitle level={2}>組織コンソールの移動先</CardTitle>
124
+ <CardDescription>
125
+ Command/Ctrl+K で開き、矢印キーで移動し、Enter で選択します。
126
+ </CardDescription>
127
+ </CardHeader>
128
+ <CardContent>
129
+ <Flex direction="col" gap="md">
130
+ <CommandPalette
131
+ groups={groups}
132
+ labels={labels}
133
+ loading={loading}
134
+ error={error}
135
+ onSelect={(item) => setSelected(item)}
136
+ />
137
+ <Text size="sm" tone="muted" aria-live="polite">
138
+ {selected ? `選択: ${String(selected.label)}` : "まだ項目を選択していません。"}
139
+ </Text>
140
+ <Flex gap="sm" wrap>
141
+ <Button
142
+ variant="outline"
143
+ size="sm"
144
+ onClick={() => {
145
+ setError(undefined);
146
+ setLoading((current) => !current);
147
+ }}
148
+ >
149
+ 読み込み状態を切替
150
+ </Button>
151
+ <Button
152
+ variant="outline"
153
+ size="sm"
154
+ onClick={() => {
155
+ setLoading(false);
156
+ setError((current) => (current ? undefined : "候補を取得できませんでした。"));
157
+ }}
158
+ >
159
+ エラー状態を切替
160
+ </Button>
161
+ </Flex>
162
+ </Flex>
163
+ </CardContent>
164
+ </Card>
165
+ <Card>
166
+ <CardHeader>
167
+ <CardTitle level={2}>サーバー検索(search-as-you-type)</CardTitle>
168
+ <CardDescription>
169
+ `onSearchChange` でクエリを受け取り、結果を `groups` として返します。`shouldFilter=
170
+ false` でクライアント側の再フィルタを止め、空状態は `groups` から決まります。
171
+ </CardDescription>
172
+ </CardHeader>
173
+ <CardContent>
174
+ <ServerSearchDemo />
175
+ </CardContent>
176
+ </Card>
177
+ </PageContainer>
178
+ );
179
+ }