@godxjp/ui 31.31.7 → 32.0.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 (728) hide show
  1. package/README.md +102 -121
  2. package/agent/START-HERE.md +10 -10
  3. package/agent/components/Accordion.json +2 -2
  4. package/agent/components/AccountChip.json +1 -1
  5. package/agent/components/Actions.json +1 -1
  6. package/agent/components/Activity.json +2 -2
  7. package/agent/components/Affix.json +1 -1
  8. package/agent/components/Alert.json +22 -6
  9. package/agent/components/AlertDialog.json +8 -1
  10. package/agent/components/Anchor.json +4 -3
  11. package/agent/components/AppLauncher.json +2 -2
  12. package/agent/components/AppProvider.json +19 -11
  13. package/agent/components/AppSettingPicker.json +18 -2
  14. package/agent/components/AppShell.json +4 -5
  15. package/agent/components/AreaChart.json +0 -1
  16. package/agent/components/AspectRatio.json +2 -2
  17. package/agent/components/Attachments.json +3 -3
  18. package/agent/components/AuthAccountSummary.json +1 -1
  19. package/agent/components/AuthDivider.json +1 -1
  20. package/agent/components/AuthExpiryProvider.json +0 -1
  21. package/agent/components/AuthFooter.json +2 -2
  22. package/agent/components/AuthIdentity.json +3 -3
  23. package/agent/components/AuthStack.json +1 -1
  24. package/agent/components/Avatar.json +2 -12
  25. package/agent/components/Badge.json +1 -1
  26. package/agent/components/BarChart.json +0 -1
  27. package/agent/components/BranchScopePicker.json +1 -1
  28. package/agent/components/Breadcrumb.json +1 -1
  29. package/agent/components/Button.json +3 -3
  30. package/agent/components/Calendar.json +1 -1
  31. package/agent/components/Card.json +2 -2
  32. package/agent/components/CardBar.json +0 -1
  33. package/agent/components/CardContent.json +0 -1
  34. package/agent/components/Carousel.json +4 -3
  35. package/agent/components/Cascader.json +1 -1
  36. package/agent/components/CenteredShell.json +78 -17
  37. package/agent/components/ChatBubble.json +3 -3
  38. package/agent/components/ChatBubbleList.json +3 -3
  39. package/agent/components/ChatComposer.json +3 -3
  40. package/agent/components/ChatSuggestion.json +3 -3
  41. package/agent/components/Checkbox.json +1 -1
  42. package/agent/components/CheckboxGroup.json +0 -1
  43. package/agent/components/CodeBlock.json +1 -1
  44. package/agent/components/Collapsible.json +4 -4
  45. package/agent/components/ColorPicker.json +1 -1
  46. package/agent/components/Command.json +5 -5
  47. package/agent/components/CommandPalette.json +1 -1
  48. package/agent/components/CompactBarTrend.json +1 -1
  49. package/agent/components/Conversations.json +3 -3
  50. package/agent/components/CredentialReveal.json +1 -1
  51. package/agent/components/DataState.json +2 -2
  52. package/agent/components/DataTable.json +1 -1
  53. package/agent/components/DatePicker.json +1 -1
  54. package/agent/components/Descriptions.json +1 -1
  55. package/agent/components/Dialog.json +2 -2
  56. package/agent/components/DraggablePanel.json +5 -4
  57. package/agent/components/DropdownMenu.json +1 -1
  58. package/agent/components/EmojiPicker.json +3 -2
  59. package/agent/components/EmptyState.json +1 -1
  60. package/agent/components/ErrorSurface.json +3 -3
  61. package/agent/components/FeatureList.json +1 -1
  62. package/agent/components/Field.json +0 -1
  63. package/agent/components/Flex.json +34 -4
  64. package/agent/components/FloatButton.json +6 -5
  65. package/agent/components/Form.json +1 -1
  66. package/agent/components/FormErrors.json +0 -1
  67. package/agent/components/FormField.json +6 -6
  68. package/agent/components/FormFieldArray.json +0 -1
  69. package/agent/components/FormFieldControl.json +0 -1
  70. package/agent/components/FormRoot.json +1 -1
  71. package/agent/components/Heading.json +3 -0
  72. package/agent/components/Icon.json +1 -1
  73. package/agent/components/Image.json +7 -4
  74. package/agent/components/InfiniteQueryState.json +1 -1
  75. package/agent/components/Input.json +1 -1
  76. package/agent/components/InputOTP.json +2 -2
  77. package/agent/components/Label.json +3 -3
  78. package/agent/components/LegalDocumentShell.json +5 -4
  79. package/agent/components/Legend.json +1 -1
  80. package/agent/components/LineChart.json +0 -1
  81. package/agent/components/Link.json +0 -1
  82. package/agent/components/ListRow.json +1 -1
  83. package/agent/components/Logo.json +5 -4
  84. package/agent/components/Marquee.json +4 -3
  85. package/agent/components/Masonry.json +4 -3
  86. package/agent/components/MasterDetail.json +1 -1
  87. package/agent/components/MegaMenu.json +4 -3
  88. package/agent/components/MobileShell.json +4 -4
  89. package/agent/components/NavList.json +1 -1
  90. package/agent/components/NumberInput.json +1 -1
  91. package/agent/components/OrgChart.json +4 -3
  92. package/agent/components/OrgSwitcher.json +1 -1
  93. package/agent/components/OverlayPortalProvider.json +0 -1
  94. package/agent/components/PageContainer.json +3 -3
  95. package/agent/components/PageCover.json +3 -2
  96. package/agent/components/Pagination.json +1 -1
  97. package/agent/components/PasswordInput.json +1 -1
  98. package/agent/components/PasswordStrength.json +1 -1
  99. package/agent/components/PermissionMatrix.json +1 -1
  100. package/agent/components/PieChart.json +0 -1
  101. package/agent/components/Popover.json +31 -6
  102. package/agent/components/PrefetchLink.json +1 -1
  103. package/agent/components/Progress.json +1 -1
  104. package/agent/components/Prose.json +1 -1
  105. package/agent/components/QrCode.json +1 -1
  106. package/agent/components/Radio.json +0 -1
  107. package/agent/components/RadioGroup.json +2 -2
  108. package/agent/components/RangeTimeline.json +2 -1
  109. package/agent/components/Rating.json +1 -1
  110. package/agent/components/RecordPicker.json +1 -1
  111. package/agent/components/ResizablePanel.json +1 -1
  112. package/agent/components/ResponsiveGrid.json +2 -2
  113. package/agent/components/Reveal.json +3 -3
  114. package/agent/components/ScrollArea.json +2 -2
  115. package/agent/components/SearchInput.json +1 -1
  116. package/agent/components/Segmented.json +1 -1
  117. package/agent/components/Select.json +7 -5
  118. package/agent/components/Separator.json +1 -1
  119. package/agent/components/ServiceCatalogCta.json +0 -1
  120. package/agent/components/ServiceLauncherCard.json +1 -1
  121. package/agent/components/ServiceRolePanel.json +1 -1
  122. package/agent/components/Sheet.json +5 -5
  123. package/agent/components/Sidebar.json +1 -1
  124. package/agent/components/Skeleton.json +26 -12
  125. package/agent/components/Slider.json +2 -2
  126. package/agent/components/SortableList.json +3 -2
  127. package/agent/components/SplitPane.json +1 -1
  128. package/agent/components/StatCard.json +1 -1
  129. package/agent/components/Steps.json +1 -1
  130. package/agent/components/Swatch.json +1 -1
  131. package/agent/components/Switch.json +1 -1
  132. package/agent/components/Table.json +1 -1
  133. package/agent/components/Tabs.json +3 -3
  134. package/agent/components/Text.json +5 -1
  135. package/agent/components/TextDiff.json +5 -4
  136. package/agent/components/Textarea.json +1 -1
  137. package/agent/components/ThemeScope.json +1 -1
  138. package/agent/components/ThoughtChain.json +3 -3
  139. package/agent/components/TimePicker.json +1 -1
  140. package/agent/components/Timeline.json +1 -1
  141. package/agent/components/TimelineGrid.json +5 -4
  142. package/agent/components/Toaster.json +0 -1
  143. package/agent/components/Toggle.json +3 -3
  144. package/agent/components/ToggleGroup.json +1 -1
  145. package/agent/components/Toolbar.json +10 -3
  146. package/agent/components/Tooltip.json +9 -9
  147. package/agent/components/Topbar.json +1 -1
  148. package/agent/components/TopbarItem.json +1 -1
  149. package/agent/components/Transfer.json +2 -2
  150. package/agent/components/Tree.json +1 -1
  151. package/agent/components/TreeSelect.json +1 -1
  152. package/agent/components/TwoFactorSetup.json +1 -1
  153. package/agent/components/Upload.json +1 -1
  154. package/agent/components/UploadCropDialog.json +1 -1
  155. package/agent/components/Welcome.json +3 -3
  156. package/agent/components/formatDate.json +2 -2
  157. package/agent/components/inertiaUpload.json +0 -1
  158. package/agent/components/useZodForm.json +0 -1
  159. package/agent/components-index.json +80 -154
  160. package/agent/components.json +541 -1737
  161. package/agent/index.json +10 -10
  162. package/agent/llms.txt +9 -9
  163. package/agent/patterns/account-recovery-settings.json +1 -1
  164. package/agent/patterns/auth-recovery-panels.json +2 -2
  165. package/agent/patterns/error-pages.json +1 -1
  166. package/agent/patterns/pricing-plans.json +17 -0
  167. package/agent/patterns-index.json +17 -1
  168. package/agent/patterns.json +21 -4
  169. package/agent/rules.json +30 -65
  170. package/agent/tokens.json +27 -57
  171. package/agent/vocabulary.json +3 -3
  172. package/dist/app/app-provider.d.ts +5 -3
  173. package/dist/app/app-provider.js +47 -12
  174. package/dist/app/date-format-labels.d.ts +3 -1
  175. package/dist/app/date-format-labels.js +2 -4
  176. package/dist/app/date-formats.d.ts +21 -2
  177. package/dist/app/date-formats.js +51 -2
  178. package/dist/app/index.d.ts +3 -1
  179. package/dist/app/index.js +5 -0
  180. package/dist/app/locales.d.ts +58 -3
  181. package/dist/app/locales.js +134 -8
  182. package/dist/app/preset.d.ts +25 -0
  183. package/dist/app/preset.js +10 -0
  184. package/dist/app/request-headers.d.ts +3 -3
  185. package/dist/app/request-headers.js +19 -10
  186. package/dist/app/settings-scope.d.ts +54 -0
  187. package/dist/app/settings-scope.js +46 -0
  188. package/dist/app/tenant-theme.js +8 -3
  189. package/dist/app/time-format-labels.d.ts +4 -1
  190. package/dist/app/time-format-labels.js +7 -1
  191. package/dist/app/types.d.ts +10 -2
  192. package/dist/app/use-formatting.d.ts +1 -1
  193. package/dist/components/admin/index.d.ts +1 -1
  194. package/dist/components/admin/index.js +1 -1
  195. package/dist/components/data-display/accordion.d.ts +51 -1
  196. package/dist/components/data-display/accordion.js +247 -1
  197. package/dist/components/data-display/avatar.d.ts +16 -1
  198. package/dist/components/data-display/avatar.js +109 -1
  199. package/dist/components/data-display/credential-reveal.d.ts +9 -2
  200. package/dist/components/data-display/credential-reveal.js +156 -1
  201. package/dist/components/data-display/image.js +5 -3
  202. package/dist/components/data-display/index.d.ts +0 -21
  203. package/dist/components/data-display/index.js +1 -43
  204. package/dist/components/data-display/popover.d.ts +15 -3
  205. package/dist/components/data-display/popover.js +168 -2
  206. package/dist/components/data-entry/branch-scope-picker.d.ts +1 -1
  207. package/dist/components/data-entry/index.d.ts +5 -12
  208. package/dist/components/data-entry/index.js +11 -12
  209. package/dist/components/data-entry/input-otp.d.ts +48 -2
  210. package/dist/components/data-entry/input-otp.js +94 -1
  211. package/dist/components/data-entry/number-input.d.ts +1 -1
  212. package/dist/components/data-entry/password-input.d.ts +38 -2
  213. package/dist/components/data-entry/password-input.js +56 -1
  214. package/dist/components/data-entry/rating.d.ts +38 -2
  215. package/dist/components/data-entry/rating.js +127 -1
  216. package/dist/components/data-entry/segmented.d.ts +94 -2
  217. package/dist/components/data-entry/segmented.js +104 -1
  218. package/dist/components/{ui/tag-input.d.ts → data-entry/select-tags-inline.d.ts} +7 -4
  219. package/dist/components/{ui/tag-input.js → data-entry/select-tags-inline.js} +4 -4
  220. package/dist/components/data-entry/select.js +4 -0
  221. package/dist/components/data-entry/toggle-group.d.ts +108 -2
  222. package/dist/components/data-entry/toggle-group.js +189 -1
  223. package/dist/components/data-entry/toggle.d.ts +86 -2
  224. package/dist/components/data-entry/toggle.js +153 -2
  225. package/dist/components/feedback/alert.d.ts +5 -3
  226. package/dist/components/feedback/alert.js +14 -2
  227. package/dist/components/feedback/index.d.ts +2 -6
  228. package/dist/components/feedback/index.js +1 -13
  229. package/dist/components/feedback/skeleton.d.ts +4 -17
  230. package/dist/components/feedback/skeleton.js +3 -40
  231. package/dist/components/general/index.d.ts +2 -4
  232. package/dist/components/general/index.js +1 -6
  233. package/dist/components/general/typography.d.ts +4 -58
  234. package/dist/components/general/typography.js +7 -141
  235. package/dist/components/layout/aspect-ratio.d.ts +24 -1
  236. package/dist/components/layout/aspect-ratio.js +18 -1
  237. package/dist/components/layout/auth-divider.js +1 -1
  238. package/dist/components/layout/auth-identity.js +6 -2
  239. package/dist/components/layout/centered-shell.d.ts +13 -8
  240. package/dist/components/layout/centered-shell.js +43 -1
  241. package/dist/components/layout/flex.d.ts +1 -1
  242. package/dist/components/layout/flex.js +73 -1
  243. package/dist/components/layout/index.d.ts +1 -13
  244. package/dist/components/layout/index.js +0 -12
  245. package/dist/components/layout/separator.d.ts +25 -2
  246. package/dist/components/layout/separator.js +71 -1
  247. package/dist/components/navigation/{app-setting-toggle.d.ts → app-setting-cycle.d.ts} +3 -4
  248. package/dist/components/navigation/{app-setting-toggle.js → app-setting-cycle.js} +3 -3
  249. package/dist/components/navigation/app-setting-picker.d.ts +6 -2
  250. package/dist/components/navigation/app-setting-picker.js +20 -2
  251. package/dist/components/navigation/index.d.ts +3 -11
  252. package/dist/components/navigation/index.js +1 -9
  253. package/dist/components/navigation/tabs.js +1 -1
  254. package/dist/components/ui/carousel.d.ts +1 -1
  255. package/dist/components/ui/carousel.js +1 -1
  256. package/dist/components/ui/index.d.ts +11 -5
  257. package/dist/components/ui/index.js +5 -5
  258. package/dist/contracts/measurement.json +2 -2
  259. package/dist/email/brand-mark.d.ts +3 -2
  260. package/dist/email/brand-mark.js +1 -1
  261. package/dist/email/tokens.generated.d.ts +6 -6
  262. package/dist/email/tokens.generated.js +6 -6
  263. package/dist/i18n/locale-tags.d.ts +25 -0
  264. package/dist/i18n/locale-tags.js +59 -0
  265. package/dist/i18n/translate.d.ts +20 -3
  266. package/dist/i18n/translate.js +25 -14
  267. package/dist/i18n/use-translation.d.ts +3 -3
  268. package/dist/i18n/use-translation.js +4 -2
  269. package/dist/{components/navigation → lab}/anchor.d.ts +2 -2
  270. package/dist/{components/navigation → lab}/anchor.js +5 -5
  271. package/dist/{components/data-display → lab}/carousel.js +2 -2
  272. package/dist/{components/layout → lab}/draggable-panel.d.ts +8 -8
  273. package/dist/{components/layout → lab}/draggable-panel.js +2 -2
  274. package/dist/{components/data-entry → lab}/emoji-picker.d.ts +2 -2
  275. package/dist/{components/data-entry → lab}/emoji-picker.js +6 -6
  276. package/dist/{components/general → lab}/float-button.d.ts +8 -8
  277. package/dist/{components/general → lab}/float-button.js +7 -7
  278. package/dist/lab/index.d.ts +39 -0
  279. package/dist/lab/index.js +48 -0
  280. package/dist/{components/layout → lab}/legal-document-shell.d.ts +2 -2
  281. package/dist/{components/layout → lab}/legal-document-shell.js +4 -4
  282. package/dist/{components/data-display → lab}/marquee.d.ts +5 -5
  283. package/dist/{components/data-display → lab}/marquee.js +5 -5
  284. package/dist/{components/layout → lab}/masonry.d.ts +2 -2
  285. package/dist/{components/layout → lab}/masonry.js +3 -3
  286. package/dist/{components/navigation → lab}/mega-menu.d.ts +4 -4
  287. package/dist/{components/navigation → lab}/mega-menu.js +2 -2
  288. package/dist/{components/data-display → lab}/org-chart.d.ts +2 -2
  289. package/dist/{components/data-display → lab}/org-chart.js +4 -4
  290. package/dist/{components/layout → lab}/page-cover.d.ts +2 -2
  291. package/dist/{components/layout → lab}/page-cover.js +2 -2
  292. package/dist/{components/data-display → lab}/range-timeline.d.ts +1 -1
  293. package/dist/{components/data-display → lab}/range-timeline.js +6 -6
  294. package/dist/{components/data-entry → lab}/sortable-list.d.ts +2 -2
  295. package/dist/{components/data-entry → lab}/sortable-list.js +3 -3
  296. package/dist/{components/data-display → lab}/text-diff.d.ts +3 -3
  297. package/dist/{components/data-display → lab}/text-diff.js +4 -4
  298. package/dist/{components/data-display → lab}/timeline-grid.d.ts +2 -2
  299. package/dist/{components/data-display → lab}/timeline-grid.js +1 -1
  300. package/dist/lib/control-styles.js +1 -1
  301. package/dist/lib/datetime/format.js +20 -6
  302. package/dist/lib/datetime/sync.d.ts +6 -2
  303. package/dist/lib/datetime/sync.js +14 -18
  304. package/dist/lib/platform.d.ts +1 -1
  305. package/dist/props/components/app.prop.d.ts +28 -13
  306. package/dist/props/components/data-display.prop.d.ts +19 -29
  307. package/dist/props/components/feedback.prop.d.ts +15 -44
  308. package/dist/props/components/general.prop.d.ts +2 -64
  309. package/dist/props/components/index.d.ts +9 -1
  310. package/dist/props/components/layout.prop.d.ts +41 -57
  311. package/dist/props/registry.d.ts +48 -101
  312. package/dist/props/registry.js +45 -129
  313. package/dist/props/vocabulary/index.d.ts +1 -1
  314. package/dist/props/vocabulary/interaction.prop.d.ts +3 -12
  315. package/dist/styles/alert-layout.css +0 -29
  316. package/dist/styles/data-display-layout.css +14 -22
  317. package/dist/styles/dialog-layout.css +4 -0
  318. package/dist/styles/fonts/OFL.txt +93 -0
  319. package/dist/styles/form-layout.css +4 -0
  320. package/dist/styles/index.css +0 -2
  321. package/dist/styles/layers.json +44 -179
  322. package/dist/styles/text-layout.css +0 -15
  323. package/dist/styles.css +2 -0
  324. package/dist/themes/godx.css +43 -0
  325. package/dist/themes/godx.d.ts +13 -0
  326. package/dist/themes/godx.js +12 -0
  327. package/dist/tokens/components/feedback.css +0 -6
  328. package/dist/tokens/derived.css +23 -22
  329. package/dist/tokens/foundation.css +4 -6
  330. package/docs/COMPOSITION-VS-COMPONENT.md +58 -33
  331. package/docs/CONSUMER-RULES.md +1 -1
  332. package/docs/CUSTOMER-THEMING.md +17 -53
  333. package/docs/migrations/v32.md +98 -0
  334. package/package.json +58 -19
  335. package/scripts/_agent-setup.mjs +54 -3
  336. package/scripts/brand-accent.generated.mjs +15 -2
  337. package/scripts/cli.mjs +36 -11
  338. package/scripts/codemod.mjs +522 -0
  339. package/scripts/consumer-rule.md +21 -43
  340. package/scripts/postinstall.mjs +10 -47
  341. package/scripts/prune-css.mjs +1 -1
  342. package/scripts/ui-audit.mjs +5 -2
  343. package/dist/components/data-display/chat-bubble.d.ts +0 -30
  344. package/dist/components/data-display/chat-bubble.js +0 -229
  345. package/dist/components/data-display/hover-card.d.ts +0 -1
  346. package/dist/components/data-display/hover-card.js +0 -7
  347. package/dist/components/data-display/thought-chain.d.ts +0 -42
  348. package/dist/components/data-display/thought-chain.js +0 -177
  349. package/dist/components/data-display/thumbnail.d.ts +0 -37
  350. package/dist/components/data-display/thumbnail.js +0 -20
  351. package/dist/components/data-display/welcome.d.ts +0 -26
  352. package/dist/components/data-display/welcome.js +0 -37
  353. package/dist/components/data-entry/attachments.d.ts +0 -19
  354. package/dist/components/data-entry/attachments.js +0 -366
  355. package/dist/components/data-entry/chat-composer.d.ts +0 -51
  356. package/dist/components/data-entry/chat-composer.js +0 -200
  357. package/dist/components/data-entry/chat-suggestion.d.ts +0 -28
  358. package/dist/components/data-entry/chat-suggestion.js +0 -309
  359. package/dist/components/data-entry/tag-input.d.ts +0 -2
  360. package/dist/components/data-entry/tag-input.js +0 -5
  361. package/dist/components/feedback/banner.d.ts +0 -21
  362. package/dist/components/feedback/banner.js +0 -19
  363. package/dist/components/feedback/callout.d.ts +0 -23
  364. package/dist/components/feedback/callout.js +0 -42
  365. package/dist/components/layout/auth-shell.d.ts +0 -10
  366. package/dist/components/layout/auth-shell.js +0 -42
  367. package/dist/components/layout/space-compact.d.ts +0 -65
  368. package/dist/components/layout/space-compact.js +0 -52
  369. package/dist/components/navigation/conversations.d.ts +0 -39
  370. package/dist/components/navigation/conversations.js +0 -371
  371. package/dist/components/ui/accordion.d.ts +0 -51
  372. package/dist/components/ui/accordion.js +0 -254
  373. package/dist/components/ui/aspect-ratio.d.ts +0 -24
  374. package/dist/components/ui/aspect-ratio.js +0 -21
  375. package/dist/components/ui/avatar.d.ts +0 -16
  376. package/dist/components/ui/avatar.js +0 -115
  377. package/dist/components/ui/credential-reveal.d.ts +0 -9
  378. package/dist/components/ui/credential-reveal.js +0 -160
  379. package/dist/components/ui/hover-card.d.ts +0 -47
  380. package/dist/components/ui/hover-card.js +0 -205
  381. package/dist/components/ui/input-otp.d.ts +0 -48
  382. package/dist/components/ui/input-otp.js +0 -101
  383. package/dist/components/ui/password-input.d.ts +0 -38
  384. package/dist/components/ui/password-input.js +0 -60
  385. package/dist/components/ui/rating.d.ts +0 -38
  386. package/dist/components/ui/rating.js +0 -131
  387. package/dist/components/ui/segmented.d.ts +0 -94
  388. package/dist/components/ui/segmented.js +0 -108
  389. package/dist/components/ui/separator.d.ts +0 -25
  390. package/dist/components/ui/separator.js +0 -74
  391. package/dist/components/ui/toggle-group.d.ts +0 -108
  392. package/dist/components/ui/toggle-group.js +0 -194
  393. package/dist/components/ui/toggle.d.ts +0 -86
  394. package/dist/components/ui/toggle.js +0 -156
  395. package/docs/CANONICAL-CONTRACTS.md +0 -206
  396. package/docs/COMPONENTS.md +0 -163
  397. package/docs/DATETIME.md +0 -78
  398. package/docs/DEVELOPMENT.md +0 -269
  399. package/docs/FRAME-A11Y-CI.md +0 -287
  400. package/docs/FRAME-COVERAGE-LEDGER.md +0 -123
  401. package/docs/FRAME-COVERAGE-REPORT.md +0 -228
  402. package/docs/FRAME-COVERAGE-STANDARD.md +0 -65
  403. package/docs/FRAME-COVERAGE.md +0 -29
  404. package/docs/MEASUREMENT-CONTRACT.md +0 -109
  405. package/docs/PROPS-REGISTRY.md +0 -61
  406. package/docs/PROPS-VOCABULARY.md +0 -100
  407. package/docs/REGISTRY.md +0 -70
  408. package/docs/TESTING.md +0 -107
  409. package/docs/THEME-API-COVERAGE.md +0 -538
  410. package/docs/WHAT-BELONGS-HERE.md +0 -179
  411. package/docs/asset-modules.d.ts +0 -53
  412. package/docs/assets/cover-terrain.svg +0 -6
  413. package/docs/assets/portrait-amber.svg +0 -5
  414. package/docs/assets/portrait-clay.svg +0 -5
  415. package/docs/assets/portrait-indigo.svg +0 -5
  416. package/docs/assets/portrait-iris.svg +0 -5
  417. package/docs/assets/portrait-moss.svg +0 -5
  418. package/docs/assets/portrait-plum.svg +0 -5
  419. package/docs/assets/portrait-slate.svg +0 -5
  420. package/docs/assets/service-mark-rose.svg +0 -6
  421. package/docs/assets/service-mark-teal.svg +0 -5
  422. package/docs/assets/shot-landscape.svg +0 -12
  423. package/docs/assets/shot-portrait.svg +0 -10
  424. package/docs/assets/tcgm/card-1.svg +0 -1
  425. package/docs/assets/tcgm/card-2.svg +0 -1
  426. package/docs/assets/tcgm/card-3.svg +0 -1
  427. package/docs/assets/tcgm/card-4.svg +0 -1
  428. package/docs/assets/tcgm/card-5.svg +0 -1
  429. package/docs/assets/tcgm/card-6.svg +0 -1
  430. package/docs/assets/tcgm/hero-prism.svg +0 -1
  431. package/docs/assets/tcgm/scene-1.svg +0 -1
  432. package/docs/assets/tcgm/scene-2.svg +0 -1
  433. package/docs/assets/tcgm/scene-3.svg +0 -1
  434. package/docs/assets/tcgm/scene-4.svg +0 -1
  435. package/docs/assets/tcgm/scene-5.svg +0 -1
  436. package/docs/assets/tcgm/tcgm-lockup-color.svg +0 -1
  437. package/docs/assets/tcgm/tcgm-symbol-color.svg +0 -1
  438. package/docs/charts/cjk-category-axis.tsx +0 -81
  439. package/docs/charts/compact-bar-trend.tsx +0 -327
  440. package/docs/charts/size-tiers.tsx +0 -192
  441. package/docs/data-display/accordion.tsx +0 -99
  442. package/docs/data-display/avatar.tsx +0 -502
  443. package/docs/data-display/badge.tsx +0 -335
  444. package/docs/data-display/card/examples/detail-panel.tsx +0 -106
  445. package/docs/data-display/card/examples/tab-list.tsx +0 -97
  446. package/docs/data-display/card/index.md +0 -3
  447. package/docs/data-display/card/index.tsx +0 -390
  448. package/docs/data-display/carousel.tsx +0 -160
  449. package/docs/data-display/charts.tsx +0 -278
  450. package/docs/data-display/chat-bubble.tsx +0 -397
  451. package/docs/data-display/code-block.tsx +0 -188
  452. package/docs/data-display/collapsible.tsx +0 -162
  453. package/docs/data-display/credential-reveal.tsx +0 -148
  454. package/docs/data-display/data-table/examples/antd-parity.tsx +0 -257
  455. package/docs/data-display/data-table/examples/approval-queue.tsx +0 -212
  456. package/docs/data-display/data-table/examples/grid-features.tsx +0 -158
  457. package/docs/data-display/data-table/examples/list-page.tsx +0 -175
  458. package/docs/data-display/data-table/examples/selectable-inbox.tsx +0 -113
  459. package/docs/data-display/data-table/examples/server-paged.tsx +0 -179
  460. package/docs/data-display/data-table/examples/striped-list.tsx +0 -173
  461. package/docs/data-display/data-table/index.md +0 -9
  462. package/docs/data-display/data-table/index.tsx +0 -407
  463. package/docs/data-display/descriptions.tsx +0 -263
  464. package/docs/data-display/empty-state.tsx +0 -164
  465. package/docs/data-display/feature-list.tsx +0 -159
  466. package/docs/data-display/hover-card.tsx +0 -181
  467. package/docs/data-display/image.tsx +0 -170
  468. package/docs/data-display/legend.tsx +0 -158
  469. package/docs/data-display/list-row.tsx +0 -441
  470. package/docs/data-display/markdown.tsx +0 -86
  471. package/docs/data-display/marquee.tsx +0 -254
  472. package/docs/data-display/org-chart.tsx +0 -165
  473. package/docs/data-display/permission-matrix.tsx +0 -188
  474. package/docs/data-display/popover-touch.tsx +0 -27
  475. package/docs/data-display/popover.tsx +0 -331
  476. package/docs/data-display/progress.tsx +0 -162
  477. package/docs/data-display/prose.tsx +0 -169
  478. package/docs/data-display/qr-code.tsx +0 -68
  479. package/docs/data-display/scroll-area.tsx +0 -420
  480. package/docs/data-display/service-launcher-card.tsx +0 -445
  481. package/docs/data-display/stat-card.tsx +0 -354
  482. package/docs/data-display/swatch.tsx +0 -107
  483. package/docs/data-display/table.tsx +0 -362
  484. package/docs/data-display/text-diff.tsx +0 -89
  485. package/docs/data-display/thought-chain.tsx +0 -176
  486. package/docs/data-display/thumbnail.tsx +0 -128
  487. package/docs/data-display/timeline-grid.tsx +0 -119
  488. package/docs/data-display/timeline.tsx +0 -671
  489. package/docs/data-display/touch-actions.tsx +0 -36
  490. package/docs/data-display/tree.tsx +0 -724
  491. package/docs/data-display/welcome.tsx +0 -115
  492. package/docs/data-entry/attachments.tsx +0 -160
  493. package/docs/data-entry/block-editor.tsx +0 -105
  494. package/docs/data-entry/branch-scope-picker.tsx +0 -128
  495. package/docs/data-entry/calendar.tsx +0 -226
  496. package/docs/data-entry/cascader.tsx +0 -380
  497. package/docs/data-entry/chat-composer.tsx +0 -619
  498. package/docs/data-entry/chat-suggestion.tsx +0 -301
  499. package/docs/data-entry/checkbox.tsx +0 -256
  500. package/docs/data-entry/color-picker.tsx +0 -189
  501. package/docs/data-entry/command-palette.tsx +0 -179
  502. package/docs/data-entry/command.tsx +0 -341
  503. package/docs/data-entry/country-picker-recipe.tsx +0 -175
  504. package/docs/data-entry/date-picker.tsx +0 -452
  505. package/docs/data-entry/emoji-picker.tsx +0 -35
  506. package/docs/data-entry/form/examples/employee-settings.tsx +0 -267
  507. package/docs/data-entry/form/examples/invoice-form.tsx +0 -387
  508. package/docs/data-entry/form-dynamic-fields.tsx +0 -199
  509. package/docs/data-entry/form-field/examples/a11y-contract.tsx +0 -242
  510. package/docs/data-entry/form-field/examples/create-form.tsx +0 -107
  511. package/docs/data-entry/form-field/index.md +0 -8
  512. package/docs/data-entry/form-field/index.tsx +0 -337
  513. package/docs/data-entry/form-inertia.tsx +0 -80
  514. package/docs/data-entry/form-root.tsx +0 -112
  515. package/docs/data-entry/form.tsx +0 -1498
  516. package/docs/data-entry/input-otp.tsx +0 -258
  517. package/docs/data-entry/input.tsx +0 -796
  518. package/docs/data-entry/label.tsx +0 -102
  519. package/docs/data-entry/markdown-editor.tsx +0 -69
  520. package/docs/data-entry/number-input.tsx +0 -279
  521. package/docs/data-entry/password-input.tsx +0 -102
  522. package/docs/data-entry/password-strength.tsx +0 -99
  523. package/docs/data-entry/radio-group.tsx +0 -316
  524. package/docs/data-entry/rating.tsx +0 -91
  525. package/docs/data-entry/record-picker.tsx +0 -209
  526. package/docs/data-entry/search-input.tsx +0 -121
  527. package/docs/data-entry/segmented-in-filter-row.tsx +0 -60
  528. package/docs/data-entry/segmented.tsx +0 -300
  529. package/docs/data-entry/select-async-contracts.tsx +0 -108
  530. package/docs/data-entry/select-matrix.tsx +0 -209
  531. package/docs/data-entry/select.tsx +0 -547
  532. package/docs/data-entry/slider.tsx +0 -212
  533. package/docs/data-entry/sortable-list.tsx +0 -76
  534. package/docs/data-entry/switch.tsx +0 -314
  535. package/docs/data-entry/tag-input.tsx +0 -145
  536. package/docs/data-entry/textarea.tsx +0 -249
  537. package/docs/data-entry/time-picker.tsx +0 -187
  538. package/docs/data-entry/time-range-picker.tsx +0 -55
  539. package/docs/data-entry/toggle-count.tsx +0 -348
  540. package/docs/data-entry/toggle-group.tsx +0 -438
  541. package/docs/data-entry/toggle.tsx +0 -217
  542. package/docs/data-entry/transfer.tsx +0 -115
  543. package/docs/data-entry/tree-select.tsx +0 -204
  544. package/docs/data-entry/upload-crop-dialog.tsx +0 -109
  545. package/docs/data-entry/upload.tsx +0 -310
  546. package/docs/feedback/alert-dialog.tsx +0 -270
  547. package/docs/feedback/alert.tsx +0 -248
  548. package/docs/feedback/auth-expiry.tsx +0 -104
  549. package/docs/feedback/banner.tsx +0 -183
  550. package/docs/feedback/callout.tsx +0 -220
  551. package/docs/feedback/danger-confirm.tsx +0 -91
  552. package/docs/feedback/dialog-touch.tsx +0 -24
  553. package/docs/feedback/dialog.tsx +0 -373
  554. package/docs/feedback/sheet.tsx +0 -510
  555. package/docs/feedback/skeleton.tsx +0 -168
  556. package/docs/feedback/toast.tsx +0 -135
  557. package/docs/feedback/tooltip.tsx +0 -171
  558. package/docs/feedback/two-factor-setup.tsx +0 -68
  559. package/docs/foundation/_email-specimen.ts +0 -274
  560. package/docs/foundation/_theme-editor-scope.ts +0 -222
  561. package/docs/foundation/colors.tsx +0 -207
  562. package/docs/foundation/density.tsx +0 -242
  563. package/docs/foundation/email-tokens.tsx +0 -323
  564. package/docs/foundation/radius-shadow.tsx +0 -154
  565. package/docs/foundation/spacing.tsx +0 -216
  566. package/docs/foundation/theme-editor.tsx +0 -654
  567. package/docs/foundation/typography.tsx +0 -147
  568. package/docs/general/actions.tsx +0 -175
  569. package/docs/general/activity.tsx +0 -289
  570. package/docs/general/button/examples/destructive-confirm.tsx +0 -90
  571. package/docs/general/button/examples/form-actions.tsx +0 -87
  572. package/docs/general/button/examples/toolbar.tsx +0 -160
  573. package/docs/general/button/index.md +0 -16
  574. package/docs/general/button/index.tsx +0 -236
  575. package/docs/general/float-button.tsx +0 -133
  576. package/docs/general/icon.tsx +0 -217
  577. package/docs/general/logo.tsx +0 -194
  578. package/docs/general/reveal.tsx +0 -309
  579. package/docs/general/typography.tsx +0 -542
  580. package/docs/i18n/messages/en.json +0 -1715
  581. package/docs/i18n/messages/ja.json +0 -1708
  582. package/docs/i18n/messages/vi.json +0 -1708
  583. package/docs/layout/account-chip.tsx +0 -72
  584. package/docs/layout/admin-collection.tsx +0 -122
  585. package/docs/layout/affix.tsx +0 -209
  586. package/docs/layout/app-launcher.tsx +0 -211
  587. package/docs/layout/app-shell-arrangements.tsx +0 -225
  588. package/docs/layout/app-shell-narrow-bar.tsx +0 -205
  589. package/docs/layout/app-shell-states.tsx +0 -171
  590. package/docs/layout/app-shell.tsx +0 -395
  591. package/docs/layout/aspect-ratio.tsx +0 -135
  592. package/docs/layout/auth-account-summary.tsx +0 -103
  593. package/docs/layout/auth-divider.tsx +0 -28
  594. package/docs/layout/auth-footer.tsx +0 -37
  595. package/docs/layout/auth-identity.tsx +0 -70
  596. package/docs/layout/auth-recovery/examples/mfa-challenge.md +0 -41
  597. package/docs/layout/auth-recovery/examples/mfa-challenge.tsx +0 -254
  598. package/docs/layout/auth-recovery/examples/mobile-390.md +0 -25
  599. package/docs/layout/auth-recovery/examples/mobile-390.tsx +0 -82
  600. package/docs/layout/auth-recovery/examples/password-recovery.md +0 -24
  601. package/docs/layout/auth-recovery/examples/password-recovery.tsx +0 -197
  602. package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.md +0 -27
  603. package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.tsx +0 -156
  604. package/docs/layout/auth-recovery/index.md +0 -140
  605. package/docs/layout/auth-recovery/index.tsx +0 -96
  606. package/docs/layout/auth-shell-context.tsx +0 -103
  607. package/docs/layout/auth-shell-device.tsx +0 -112
  608. package/docs/layout/auth-shell-registration.tsx +0 -338
  609. package/docs/layout/auth-shell-variants.tsx +0 -143
  610. package/docs/layout/auth-shell.tsx +0 -59
  611. package/docs/layout/auth-stack.tsx +0 -40
  612. package/docs/layout/centered-shell.tsx +0 -102
  613. package/docs/layout/draggable-panel.tsx +0 -127
  614. package/docs/layout/error-surface/examples/application-403.tsx +0 -84
  615. package/docs/layout/error-surface/examples/application-404.tsx +0 -77
  616. package/docs/layout/error-surface/examples/system-500.tsx +0 -47
  617. package/docs/layout/error-surface/examples/system-503.tsx +0 -48
  618. package/docs/layout/error-surface/index.md +0 -153
  619. package/docs/layout/error-surface/index.tsx +0 -239
  620. package/docs/layout/flex.tsx +0 -444
  621. package/docs/layout/legal-document-shell/_data.ts +0 -110
  622. package/docs/layout/legal-document-shell/examples/desktop-1440.md +0 -12
  623. package/docs/layout/legal-document-shell/examples/desktop-1440.tsx +0 -83
  624. package/docs/layout/legal-document-shell/examples/mobile-390.md +0 -22
  625. package/docs/layout/legal-document-shell/examples/mobile-390.tsx +0 -70
  626. package/docs/layout/legal-document-shell/examples/tablet-1024.md +0 -3
  627. package/docs/layout/legal-document-shell/examples/tablet-1024.tsx +0 -84
  628. package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.md +0 -18
  629. package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.tsx +0 -61
  630. package/docs/layout/legal-document-shell/index.md +0 -51
  631. package/docs/layout/legal-document-shell/index.tsx +0 -101
  632. package/docs/layout/masonry.tsx +0 -291
  633. package/docs/layout/master-detail.tsx +0 -390
  634. package/docs/layout/mobile-shell.tsx +0 -106
  635. package/docs/layout/nav-list.tsx +0 -584
  636. package/docs/layout/org-switcher.tsx +0 -131
  637. package/docs/layout/page-container.tsx +0 -1020
  638. package/docs/layout/page-cover.tsx +0 -56
  639. package/docs/layout/resizable-panel.tsx +0 -419
  640. package/docs/layout/responsive-grid.tsx +0 -403
  641. package/docs/layout/separator.tsx +0 -327
  642. package/docs/layout/service-role-panel.tsx +0 -144
  643. package/docs/layout/sidebar.tsx +0 -689
  644. package/docs/layout/space-compact.tsx +0 -202
  645. package/docs/layout/split-pane.tsx +0 -532
  646. package/docs/layout/topbar-item.tsx +0 -233
  647. package/docs/layout/topbar.tsx +0 -360
  648. package/docs/navigation/anchor.tsx +0 -295
  649. package/docs/navigation/app-setting-picker.tsx +0 -178
  650. package/docs/navigation/app-setting-toggle.tsx +0 -111
  651. package/docs/navigation/breadcrumb.tsx +0 -207
  652. package/docs/navigation/card-tabs.tsx +0 -344
  653. package/docs/navigation/conversations.tsx +0 -176
  654. package/docs/navigation/dropdown-menu.tsx +0 -345
  655. package/docs/navigation/filter-bar.tsx +0 -247
  656. package/docs/navigation/mega-menu-panel.tsx +0 -86
  657. package/docs/navigation/mega-menu.tsx +0 -254
  658. package/docs/navigation/pagination.tsx +0 -293
  659. package/docs/navigation/steps.tsx +0 -315
  660. package/docs/navigation/tabs-rtl.tsx +0 -28
  661. package/docs/navigation/tabs.tsx +0 -755
  662. package/docs/navigation/toolbar.tsx +0 -347
  663. package/docs/providers/app-provider.tsx +0 -191
  664. package/docs/providers/format-date.tsx +0 -230
  665. package/docs/providers/theme-scope.tsx +0 -186
  666. package/docs/query/button-refetch.tsx +0 -161
  667. package/docs/query/data-state.tsx +0 -262
  668. package/docs/query/infinite-query-state.tsx +0 -97
  669. package/docs/query/mutation-feedback.tsx +0 -128
  670. package/docs/query/touch-actions.tsx +0 -68
  671. package/docs/react-router/prefetch-link.tsx +0 -262
  672. package/docs/roadmap/ai-chat-components.md +0 -206
  673. package/docs/roadmap/antd-parity.md +0 -155
  674. package/docs/roadmap/badge-tag-chip-count.md +0 -172
  675. package/docs/roadmap/list-masonry.md +0 -159
  676. package/docs/roadmap/parity-audit-data-display-feedback.md +0 -567
  677. package/docs/roadmap/parity-audit-data-entry.md +0 -368
  678. package/docs/roadmap/parity-audit-layout-navigation-general.md +0 -459
  679. package/docs/roadmap/parity-backlog.md +0 -77
  680. package/docs/roadmap/tree-components.md +0 -151
  681. package/docs/roadmap/website-components.md +0 -813
  682. package/docs/showcase/acme-portal.tsx +0 -461
  683. package/docs/showcase/acme-website.tsx +0 -499
  684. package/docs/showcase/caimono-price-comparison.tsx +0 -919
  685. package/docs/showcase/case1-warehouse-dashboard.tsx +0 -358
  686. package/docs/showcase/case2-employee-me.tsx +0 -438
  687. package/docs/showcase/case3-approval-workflow.tsx +0 -531
  688. package/docs/showcase/case4-login.tsx +0 -312
  689. package/docs/showcase/case5-shift-calendar.tsx +0 -702
  690. package/docs/showcase/case6-agency-handy.tsx +0 -1120
  691. package/docs/showcase/futurelastic-web.tsx +0 -441
  692. package/docs/showcase/marketing-page.tsx +0 -895
  693. package/docs/showcase/org-switcher.tsx +0 -320
  694. package/docs/showcase/permission-matrix.tsx +0 -354
  695. package/docs/showcase/public-landing.tsx +0 -210
  696. package/docs/showcase/settings-account-sections.tsx +0 -559
  697. package/docs/showcase/settings-security-mfa.tsx +0 -145
  698. package/docs/showcase/table-approval-queue.tsx +0 -199
  699. package/docs/showcase/table-bulk-actions.tsx +0 -468
  700. package/docs/showcase/table-compact-kintone.tsx +0 -438
  701. package/docs/showcase/table-conditional-format.tsx +0 -367
  702. package/docs/showcase/table-crud-list.tsx +0 -544
  703. package/docs/showcase/table-density.tsx +0 -349
  704. package/docs/showcase/table-expandable-rows.tsx +0 -496
  705. package/docs/showcase/table-filter-chips.tsx +0 -468
  706. package/docs/showcase/table-footer-totals.tsx +0 -328
  707. package/docs/showcase/table-grouped-subtotals.tsx +0 -398
  708. package/docs/showcase/table-master-detail.tsx +0 -482
  709. package/docs/showcase/table-pagination.tsx +0 -409
  710. package/docs/showcase/table-states.tsx +0 -371
  711. package/docs/showcase/table-sticky-columns.tsx +0 -377
  712. package/docs/showcase/table-tree-rows.tsx +0 -451
  713. package/docs/showcase/table-view-tabs.tsx +0 -488
  714. package/docs/showcase/tcgm-website.tsx +0 -1047
  715. package/docs/showcase/tenant-brand-color.tsx +0 -338
  716. package/docs/showcase/theme-customization.tsx +0 -1292
  717. package/docs/showcase/theme-lab.tsx +0 -2125
  718. package/docs/themes/flat.css +0 -466
  719. package/docs/themes/glassmorphism.css +0 -960
  720. package/docs/themes/index.ts +0 -219
  721. package/docs/themes/neubrutalism.css +0 -481
  722. /package/dist/components/navigation/{filter-bar.d.ts → toolbar.d.ts} +0 -0
  723. /package/dist/components/navigation/{filter-bar.js → toolbar.js} +0 -0
  724. /package/dist/{components/data-display → lab}/carousel.d.ts +0 -0
  725. /package/dist/{components/data-entry → lab}/emoji-data.d.ts +0 -0
  726. /package/dist/{components/data-entry → lab}/emoji-data.js +0 -0
  727. /package/dist/{components/data-display → lab}/marquee-reveal.d.ts +0 -0
  728. /package/dist/{components/data-display → lab}/marquee-reveal.js +0 -0
@@ -1,1020 +0,0 @@
1
- import { forwardRef, useState } from "react";
2
- import type { AnchorHTMLAttributes, CSSProperties } from "react";
3
- import { Flex, PageContainer } from "@godxjp/ui/layout";
4
- import {
5
- Card,
6
- CardContent,
7
- CardDescription,
8
- CardHeader,
9
- CardTitle,
10
- StatCard,
11
- Badge,
12
- DataTable,
13
- Descriptions,
14
- ListRow,
15
- } from "@godxjp/ui/data-display";
16
- import type { ColumnDef } from "@godxjp/ui/data-display";
17
- import { Button, Text } from "@godxjp/ui/general";
18
- import { SearchInput } from "@godxjp/ui/data-entry";
19
- import { ResponsiveGrid } from "@godxjp/ui/layout";
20
- import { Pagination, Toolbar, ToolbarGroup } from "@godxjp/ui/navigation";
21
- import { Plus, Download, Filter, Search } from "lucide-react";
22
-
23
- /**
24
- * Router Link stub passed to `linkComponent` · proves breadcrumb segments can render
25
- * through a router primitive (react-router / next/link) instead of a plain <a>.
26
- * PageContainer forwards both `href` and `to`; a real Link reads `to`.
27
- */
28
- /**
29
- * `--page-toolbar-background` · the toolbar band's GROUND, quiet (`transparent`) by default so the
30
- * band looks exactly as it did before the knob existed. A service normally declares these once in
31
- * its theme.css (`:root`, or a scoped `[data-tenant]`); they are scoped to one demo frame here so
32
- * the default band can sit beside the painted one. NEVER put `className="bg-card"` on the strip at
33
- * the call site: that is hand-laid page chrome, and it cannot be re-themed per tenant.
34
- *
35
- * The inset comes with it, and it is the band's ONLY breathing room: the band sits FLUSH against
36
- * the header above and the body below, because chrome is attached · a painted, ruled band adrift
37
- * between two 16px voids divides nothing. `--page-toolbar-pad-block` still stays `0` by default on
38
- * purpose · a transparent band is not a surface and has no inside to breathe, and under `fill`
39
- * every pixel of it is taken from the transcript. A band that is PAINTED does have an inside, so
40
- * the theme that paints it also sets its inset here rather than reaching for a `py-*` utility on
41
- * the strip.
42
- */
43
- const TOOLBAR_CHROME_TOKENS = {
44
- "--page-toolbar-background": "hsl(var(--card))",
45
- "--page-toolbar-pad-block": "var(--space-2)",
46
- "--page-toolbar-divider": "1px solid hsl(var(--border))",
47
- } as CSSProperties;
48
-
49
- /**
50
- * `--page-header-min-block-size-chrome` · クロム帯の「高さ」。文書のヘッダーは中身なりの
51
- * 高さで正しい · 見出しは見出しの高さだからです。クロムは逆で、家具には「ものが中央に収まる帯」が
52
- * 要ります。既定は `auto`(=rule #44 の最も静かな状態)なので、このトークンを置くまで DOM も
53
- * 見え方も従来どおり · 文書ページはそもそもこの規則に一致しません。
54
- *
55
- * 帯の高さ軸の持ち主は `--app-shell-bar-height` です(`--centered-shell-bar-height` も既にそれを
56
- * 読んでいます)。だからサービス側の一行はこれ ·
57
- * `--page-header-min-block-size-chrome: var(--app-shell-bar-height)` · で、ページのクロム帯と
58
- * AppShell のトップバーが同じ帯に乗ります。min であって height ではないのは、`lg` のボタンや
59
- * 折り返した日本語のチャンネル名がはみ出さずに収まる必要があるためです。
60
- */
61
- const CHROME_BAND_TOKENS = {
62
- "--page-header-min-block-size-chrome": "var(--app-shell-bar-height)",
63
- } as CSSProperties;
64
-
65
- const RouterLink = forwardRef<
66
- HTMLAnchorElement,
67
- AnchorHTMLAttributes<HTMLAnchorElement> & { to?: string }
68
- >(function RouterLink({ to, href, children, ...props }, ref) {
69
- return (
70
- <a ref={ref} href={to ?? href} data-router-link="" {...props}>
71
- {children}
72
- </a>
73
- );
74
- });
75
-
76
- type JournalEntry = {
77
- id: string;
78
- date: string;
79
- desc: string;
80
- amount: string;
81
- status: "承認済" | "保留中";
82
- };
83
-
84
- const journalEntries: JournalEntry[] = [
85
- { id: "JE-0041", date: "2026-05-31", desc: "売上計上", amount: "¥840,000", status: "承認済" },
86
- { id: "JE-0040", date: "2026-05-30", desc: "仕入計上", amount: "¥320,000", status: "承認済" },
87
- { id: "JE-0039", date: "2026-05-29", desc: "給与仕訳", amount: "¥1,200,000", status: "保留中" },
88
- ];
89
-
90
- const journalColumns: ColumnDef<JournalEntry>[] = [
91
- { key: "id", header: "伝票番号", width: "w-28", render: (r) => <Text mono>{r.id}</Text> },
92
- { key: "date", header: "日付", width: "w-32" },
93
- { key: "desc", header: "摘要" },
94
- {
95
- key: "amount",
96
- header: "金額",
97
- align: "right",
98
- render: (r) => <Text weight="medium">{r.amount}</Text>,
99
- },
100
- {
101
- key: "status",
102
- header: "ステータス",
103
- align: "right",
104
- render: (r) => <Badge tone={r.status === "承認済" ? "success" : "warning"}>{r.status}</Badge>,
105
- },
106
- ];
107
-
108
- /**
109
- * PageContainer · mandatory page shell.
110
- * Covers: title/subtitle/status/extra/footer/breadcrumb/linkComponent + variant
111
- * default/narrow/flush/ghost + density compact/default/comfortable + PageContainer.Inset.
112
- * The embedded header is the CANONICAL DXS PageHeader — status/meta band included.
113
- * Each example is standalone (no AppShell) so the variant behaviour is visible in
114
- * isolation. Composed only from real @godxjp/ui components.
115
- */
116
- export default function Demo() {
117
- const [activeVariant, setActiveVariant] = useState<"default" | "narrow" | "flush" | "ghost">(
118
- "default",
119
- );
120
- const [activeDensity, setActiveDensity] = useState<"compact" | "default" | "comfortable">(
121
- "default",
122
- );
123
- const [memberQuery, setMemberQuery] = useState("");
124
-
125
- const variants = [
126
- { key: "default", label: "default" },
127
- { key: "narrow", label: "narrow" },
128
- { key: "flush", label: "flush" },
129
- { key: "ghost", label: "ghost" },
130
- ] as const;
131
-
132
- /** The record pager that must sit AFTER the header's action cluster (`extra.end`). */
133
- const [recordPage, setRecordPage] = useState(12);
134
-
135
- const densities = [
136
- { key: "compact", label: "compact" },
137
- { key: "default", label: "default" },
138
- { key: "comfortable", label: "comfortable" },
139
- ] as const;
140
-
141
- return (
142
- <Flex direction="col" gap="xl">
143
- {/* ── 1. Default variant · dashboard-style + linkComponent (router Link) ── */}
144
- <PageContainer
145
- title="売上ダッシュボード"
146
- subtitle="直近30日間の集計データ"
147
- linkComponent={RouterLink}
148
- breadcrumb={[{ label: "ホーム", to: "/" }, { label: "ダッシュボード" }]}
149
- breadcrumbLabel="売上ダッシュボードのパンくず"
150
- extra={
151
- <Flex gap="sm">
152
- <Button variant="outline" size="sm">
153
- <Download />
154
- エクスポート
155
- </Button>
156
- <Button size="sm">
157
- <Plus />
158
- 新規登録
159
- </Button>
160
- </Flex>
161
- }
162
- >
163
- <ResponsiveGrid columns={{ sm: 2, md: 4 }}>
164
- <StatCard label="月次売上" value="¥8,200,000" delta="+12%" hint="先月比" />
165
- <StatCard label="請求件数" value="312" delta="+4%" />
166
- <StatCard label="売掛金残高" value="¥1,284,500" hint="未回収 18件" />
167
- <StatCard label="回収率" value="96.8%" delta="+1.2%" />
168
- </ResponsiveGrid>
169
- </PageContainer>
170
-
171
- {/* ── 1a. `extra` as { start, end } · 本人確認 → 操作 → ページャが最後 ── */}
172
- {/* `extra` はノード 1 つでも、start / end の 2 スロットでも受ける(Tabs.extra と同じ形)。
173
- レコード画面の並びは「誰の何か → 操作の束 → ページャ」で、ページャは操作の“あと”に
174
- 来る。1 スロットしかなかったころは、この最後の一つを本文の中に第二のヘッダ帯として
175
- 置くしかなく、アプリがヘッダを 2 種類抱えることになっていた。両方とも同じ
176
- .ui-page-header-extra の直下に並ぶので、DOM 順がそのまま読み上げ順になる。 */}
177
- <PageContainer
178
- title="不具合 #1042 · 請求書の消費税区分が誤っている"
179
- subtitle="Issue detail · 担当 佐藤 · 更新 2026-09-14"
180
- breadcrumb={[
181
- { label: "ホーム", to: "/" },
182
- { label: "不具合", to: "/issues" },
183
- { label: "#1042" },
184
- ]}
185
- breadcrumbLabel="不具合詳細のパンくず"
186
- extra={{
187
- start: (
188
- <Flex gap="sm">
189
- <Button variant="outline" size="sm">
190
- <Download />
191
- エクスポート
192
- </Button>
193
- <Button size="sm">
194
- <Plus />
195
- コメント
196
- </Button>
197
- </Flex>
198
- ),
199
- end: (
200
- <Pagination
201
- size="sm"
202
- value={recordPage}
203
- onValueChange={setRecordPage}
204
- total={48}
205
- pageSize={1}
206
- simple
207
- ariaLabel="不具合の前後移動"
208
- />
209
- ),
210
- }}
211
- >
212
- <Card>
213
- <CardHeader>
214
- <CardTitle level={2}>ページャはヘッダの最後に置く</CardTitle>
215
- <CardDescription>
216
- extra にノードを 1 つ渡したときは start に入るので、既存のページは 1
217
- 文字も変わらない。end を足したときだけ、その後ろにもう 1
218
- スロットが増える。名前は論理方向(start / end)なので dir=&quot;rtl&quot;
219
- でそのまま入れ替わる。本文の中にもう一段ヘッダ帯を作る必要はない。
220
- </CardDescription>
221
- </CardHeader>
222
- <CardContent>
223
- <Descriptions
224
- items={[
225
- { label: "状態", value: "未対応" },
226
- { label: "優先度", value: "高" },
227
- { label: "報告者", value: "鈴木" },
228
- ]}
229
- />
230
- </CardContent>
231
- </Card>
232
- </PageContainer>
233
-
234
- {/* ── 1b. Canonical page-header contract · status/meta band ── */}
235
- {/* PageContainer's embedded header IS the DXS PageHeader: breadcrumbs + title +
236
- subtitle + status/meta + actions + responsive overflow on ONE renderer. The
237
- `status` band shares the title line at --page-header-status-gap and wraps
238
- UNDER the long JA title at 390px — nothing clips, no consumer CSS. */}
239
- <PageContainer
240
- title="株式会社ファムジア(本社・東京オフィス)の組織プロファイル"
241
- subtitle="Organization profile · Hồ sơ tổ chức · trạng thái hợp đồng và môi trường"
242
- status={
243
- <>
244
- <Badge tone="success">有効</Badge>
245
- <Badge tone="info">本番環境</Badge>
246
- </>
247
- }
248
- breadcrumb={[
249
- { label: "ホーム", to: "/" },
250
- { label: "組織", to: "/organizations" },
251
- { label: "株式会社ファムジア" },
252
- ]}
253
- breadcrumbLabel="組織プロファイルのパンくず"
254
- extra={
255
- <Button size="sm" variant="outline">
256
- 編集
257
- </Button>
258
- }
259
- >
260
- <Card>
261
- <CardHeader>
262
- <CardTitle level={2}>ステータスバンドの契約</CardTitle>
263
- <CardDescription>
264
- status はタイトル行に載り、コンパクト幅ではタイトルの下に折り返します。バッジを h1
265
- の隣に手置きしないでください。余白は --page-header-status-gap が所有します。
266
- </CardDescription>
267
- </CardHeader>
268
- <CardContent>
269
- <Text tone="muted">
270
- 読み込み中は title/subtitle にスケルトンを、拒否 (403) / 不明 (404) / 障害 (5xx)
271
- はページごと ErrorSurface に置き換えます。
272
- </Text>
273
- </CardContent>
274
- </Card>
275
- </PageContainer>
276
-
277
- {/* ── 2. Narrow variant · settings form ── */}
278
- <PageContainer
279
- variant="narrow"
280
- title="エンティティ設定"
281
- subtitle="法人基本情報を編集します"
282
- breadcrumb={[
283
- { label: "ホーム", to: "/" },
284
- { label: "管理", to: "/admin" },
285
- { label: "エンティティ設定" },
286
- ]}
287
- breadcrumbLabel="エンティティ設定のパンくず"
288
- footer={
289
- <Flex gap="sm">
290
- <Button>保存</Button>
291
- <Button variant="outline">キャンセル</Button>
292
- </Flex>
293
- }
294
- stickyFooter
295
- footerReveal="onScroll"
296
- >
297
- <Card>
298
- <CardHeader>
299
- <CardTitle level={2}>法人情報</CardTitle>
300
- <CardDescription>登録されている法人の基本情報です。</CardDescription>
301
- </CardHeader>
302
- <CardContent>
303
- <Descriptions columns={1}>
304
- <Descriptions.Item label="法人名">株式会社サンプル</Descriptions.Item>
305
- <Descriptions.Item label="法人番号" mono>
306
- 1234567890123
307
- </Descriptions.Item>
308
- <Descriptions.Item label="決算月">3月</Descriptions.Item>
309
- </Descriptions>
310
- </CardContent>
311
- </Card>
312
- </PageContainer>
313
-
314
- {/* ── 3. Flush variant · full-bleed list ── */}
315
- <PageContainer
316
- variant="flush"
317
- title="仕訳一覧"
318
- subtitle="承認済み仕訳エントリ"
319
- breadcrumb={[{ label: "会計", to: "/" }, { label: "仕訳一覧" }]}
320
- breadcrumbLabel="仕訳一覧のパンくず"
321
- extra={
322
- <Flex gap="sm">
323
- <Button variant="outline" size="sm">
324
- <Filter />
325
- フィルター
326
- </Button>
327
- <Button size="sm">
328
- <Plus />
329
- 仕訳作成
330
- </Button>
331
- </Flex>
332
- }
333
- >
334
- {/* flush strips body padding so the DataTable runs full-bleed, edge to edge. */}
335
- <DataTable data={journalEntries} columns={journalColumns} getRowId={(r) => r.id} />
336
- {/* PageContainer.Inset · escape hatch that re-applies the page inset inside a
337
- full-bleed body, so a footnote keeps the header's left/right alignment. */}
338
- <PageContainer.Inset>
339
- <Text as="p" size="xs" tone="muted">
340
- 承認済みの仕訳のみ表示しています。保留中の仕訳は別途承認が必要です。
341
- </Text>
342
- </PageContainer.Inset>
343
- </PageContainer>
344
-
345
- {/* ── 4. Ghost variant + breadcrumb depth ──
346
- ghost は「クロムをどこまで静かにするか」を答える variant です。下余白は落とします
347
- (padding-bottom: 0 · これが本当の静かさ)が、罫線は打ち消しません · サービスが
348
- --page-header-divider を明示的に立てたなら ghost でも引かれます。帯(toolbar)の
349
- --page-toolbar-divider と同じ規則で、ページのクロム 3 本が一つの契約に揃います。 */}
350
- <PageContainer
351
- variant="ghost"
352
- title="取引先詳細"
353
- subtitle="株式会社グローバル商事"
354
- breadcrumb={[
355
- { label: "ホーム", to: "/" },
356
- { label: "取引先", to: "/partners" },
357
- { label: "株式会社グローバル商事" },
358
- ]}
359
- breadcrumbLabel="取引先詳細のパンくず"
360
- extra={<Badge tone="success">取引中</Badge>}
361
- >
362
- <Flex direction="col" gap="md">
363
- <Card>
364
- <CardHeader>
365
- <CardTitle level={2}>基本情報</CardTitle>
366
- </CardHeader>
367
- <CardContent>
368
- <Descriptions columns={3}>
369
- <Descriptions.Item label="代表者">山田 太郎</Descriptions.Item>
370
- <Descriptions.Item label="所在地">東京都千代田区</Descriptions.Item>
371
- <Descriptions.Item label="与信枠">¥5,000,000</Descriptions.Item>
372
- </Descriptions>
373
- </CardContent>
374
- </Card>
375
- </Flex>
376
- </PageContainer>
377
-
378
- {/* ── 4b. density axis · 3 段すべてを静止状態で並べる ──
379
- density は variant と直交する間隔スケール(ui-density-*)で、既定値は "default"。
380
- 既定も明示値として扱えるため、3 つを同じ本文で並べると段差がそのまま読めます。 */}
381
- <ResponsiveGrid columns={{ sm: 1, md: 3 }}>
382
- <PageContainer
383
- density="compact"
384
- variant="ghost"
385
- title="コンパクト密度"
386
- subtitle='density="compact" · 行間・余白を詰めた一覧向け'
387
- >
388
- <Card>
389
- <CardContent>
390
- <Descriptions columns={1}>
391
- <Descriptions.Item label="表示密度">コンパクト</Descriptions.Item>
392
- <Descriptions.Item label="用途">大量データの一覧</Descriptions.Item>
393
- </Descriptions>
394
- </CardContent>
395
- </Card>
396
- </PageContainer>
397
- <PageContainer
398
- density="default"
399
- variant="ghost"
400
- title="デフォルト密度"
401
- subtitle='density="default"(既定)· 業務画面の標準リズム'
402
- >
403
- <Card>
404
- <CardContent>
405
- <Descriptions columns={1}>
406
- <Descriptions.Item label="表示密度">デフォルト</Descriptions.Item>
407
- <Descriptions.Item label="用途">一般的な業務画面</Descriptions.Item>
408
- </Descriptions>
409
- </CardContent>
410
- </Card>
411
- </PageContainer>
412
- <PageContainer
413
- density="comfortable"
414
- variant="ghost"
415
- title="コンフォータブル密度"
416
- subtitle='density="comfortable" · 余白を広げた閲覧向け'
417
- >
418
- <Card>
419
- <CardContent>
420
- <Descriptions columns={1}>
421
- <Descriptions.Item label="表示密度">コンフォータブル</Descriptions.Item>
422
- <Descriptions.Item label="用途">詳細・設定画面</Descriptions.Item>
423
- </Descriptions>
424
- </CardContent>
425
- </Card>
426
- </PageContainer>
427
- </ResponsiveGrid>
428
-
429
- {/* ── 5. Variant + density switcher · interactive (both axes are orthogonal) ── */}
430
- <PageContainer
431
- variant={activeVariant}
432
- density={activeDensity}
433
- title="バリアント比較"
434
- subtitle={`現在: variant="${activeVariant}" / density="${activeDensity}"`}
435
- extra={
436
- <Flex direction="col" gap="sm">
437
- <Flex gap="sm" wrap>
438
- {variants.map((v) => (
439
- <Button
440
- key={v.key}
441
- size="sm"
442
- variant={activeVariant === v.key ? "default" : "outline"}
443
- onClick={() => setActiveVariant(v.key)}
444
- >
445
- {v.label}
446
- </Button>
447
- ))}
448
- </Flex>
449
- <Flex gap="sm" wrap>
450
- {densities.map((d) => (
451
- <Button
452
- key={d.key}
453
- size="sm"
454
- variant={activeDensity === d.key ? "default" : "outline"}
455
- onClick={() => setActiveDensity(d.key)}
456
- >
457
- {d.label}
458
- </Button>
459
- ))}
460
- </Flex>
461
- </Flex>
462
- }
463
- >
464
- <Card>
465
- <CardContent>
466
- <Text as="p" tone="muted">
467
- ページ本文コンテンツ。variant はヘッダー余白・幅制御を、density
468
- は行間・間隔スケール(ui-density-*)を切り替えます。
469
- </Text>
470
- </CardContent>
471
- </Card>
472
- </PageContainer>
473
-
474
- {/* ── 6. fill · body height behaviour on a tall shell ──
475
- Each PageContainer sits in a fixed-height framed box that stands in for the
476
- viewport-tall app shell, so the two behaviours are visible side by side. */}
477
- <ResponsiveGrid columns={{ sm: 1, md: 2 }}>
478
- {/* Default: top-packed. Short content does NOT stretch · the space below is
479
- just neutral page background, never a jarring void. */}
480
- {/* ui-audit-disable-next-line no-hand-rolled-surface — a bounded viewport so the page-level scroll behaviour is visible in a docs page — a frame around the demo, not product chrome */}
481
- <div className="h-80 overflow-auto rounded-md border">
482
- <PageContainer title="既定(top-pack)" subtitle="fill なし · 余白は中立な背景">
483
- <Card>
484
- <CardContent>
485
- <Text as="p" tone="muted">
486
- 短いコンテンツでも下に空白の「穴」は出ません。
487
- </Text>
488
- </CardContent>
489
- </Card>
490
- </PageContainer>
491
- </div>
492
-
493
- {/* fill: body grows to fill the shell; the composer footer pins to the bottom. */}
494
- {/* ui-audit-disable-next-line no-hand-rolled-surface — a bounded viewport so the page-level scroll behaviour is visible in a docs page — a frame around the demo, not product chrome */}
495
- <div className="h-80 overflow-auto rounded-md border">
496
- <PageContainer
497
- fill
498
- title="fill · 全高ボディ"
499
- subtitle="メッセージ一覧が伸び、コンポーザーは下部固定"
500
- footer={
501
- <Flex gap="sm" align="center">
502
- <Button size="sm" variant="outline">
503
- 添付
504
- </Button>
505
- <Button size="sm">送信</Button>
506
- </Flex>
507
- }
508
- stickyFooter
509
- >
510
- <Card>
511
- <CardContent>
512
- <Text as="p" tone="muted">
513
- ボディがシェルの残り高さを占有し、フッター(コンポーザー)が下部に固定されます。
514
- </Text>
515
- </CardContent>
516
- </Card>
517
- </PageContainer>
518
- </div>
519
- </ResponsiveGrid>
520
-
521
- {/* ── 7. headerLayout · 390px でヘッダー extra をタイトル行に残す ──
522
- stack (既定) は 640px 未満で extra を subtitle の下の全幅行に落とす。
523
- responsive-inline は --page-header-extra-measure (11rem) の測度で
524
- title 帯の横に残す。640px 以上では両者は同一。
525
- 幅は完全にトークン所有 — このページに px 指定もメディアクエリもありません。 */}
526
- <ResponsiveGrid columns={{ sm: 1, md: 2 }}>
527
- <PageContainer
528
- variant="ghost"
529
- title="メンバー"
530
- subtitle='headerLayout="stack"(既定)· 640px 未満では検索が subtitle の下に回り込む'
531
- extra={
532
- <SearchInput
533
- id="page-header-layout-stack-search"
534
- ariaLabel="メンバーを検索(stack)"
535
- placeholder="メンバーを検索"
536
- onValueChange={setMemberQuery}
537
- />
538
- }
539
- >
540
- <Card>
541
- <CardContent>
542
- <Text as="p" tone="muted">
543
- 入力中の絞り込み語: {memberQuery === "" ? "(なし)" : memberQuery}
544
- </Text>
545
- </CardContent>
546
- </Card>
547
- </PageContainer>
548
-
549
- <PageContainer
550
- variant="ghost"
551
- headerLayout="responsive-inline"
552
- title="メンバー"
553
- subtitle='headerLayout="responsive-inline" · 390px でも検索がタイトル行に残る'
554
- extra={
555
- <SearchInput
556
- id="page-header-layout-inline-search"
557
- ariaLabel="メンバーを検索(responsive-inline)"
558
- placeholder="メンバーを検索"
559
- onValueChange={setMemberQuery}
560
- />
561
- }
562
- >
563
- <Card>
564
- <CardContent>
565
- <Text as="p" tone="muted">
566
- extra の測度はトークン --page-header-extra-measure。タイトルと subtitle
567
- は残りの幅で折り返します。
568
- </Text>
569
- </CardContent>
570
- </Card>
571
- </PageContainer>
572
- </ResponsiveGrid>
573
-
574
- {/* ── 8. measure · ヘッダーとボディを 1 つの測度で束ねる ──
575
- measure は variant(クローム)と直交する第 3 の軸。variant="narrow" は
576
- .ui-page-body しか絞らないため、ヘッダーのアクションはページ端に取り残される。
577
- measure はヘッダーとボディの両方を同じトークン測度で絞るので、extra の終端が
578
- ボディ面の終端と一致する。既定 measure="default" は一切のルールに一致しない。
579
- 幅はすべて --page-measure-* が所有 — このページに px 指定はありません。 */}
580
- <PageContainer
581
- title="通知"
582
- subtitle='measure="default"(既定)· 面はページ幅いっぱいに広がります'
583
- extra={
584
- <Button variant="outline" size="sm">
585
- すべて既読にする
586
- </Button>
587
- }
588
- >
589
- <Card>
590
- <CardContent flush>
591
- <ListRow
592
- unread
593
- title="請求書 INV-2041 が承認されました"
594
- description="2026-08-05 10:24 · 経理部"
595
- trailing={<Badge tone="success">承認</Badge>}
596
- />
597
- <ListRow
598
- title="月次締め処理のリマインド"
599
- description="2026-08-04 18:00 · システム"
600
- trailing={<Badge tone="warning">要対応</Badge>}
601
- />
602
- </CardContent>
603
- </Card>
604
- </PageContainer>
605
-
606
- {/* 通知フィードの正準構成: ghost(静かなヘッダー律動)× medium(720px の共有測度)×
607
- responsive-inline(390px でもアクションをタイトル行に残す)。3 つは独立した prop。 */}
608
- <PageContainer
609
- variant="ghost"
610
- measure="medium"
611
- headerLayout="responsive-inline"
612
- title="通知"
613
- subtitle='variant="ghost" × measure="medium" × headerLayout="responsive-inline" · ヘッダーのアクションが 720px のフィード面と同じ端で終わります'
614
- extra={
615
- <Button variant="outline" size="sm">
616
- すべて既読にする
617
- </Button>
618
- }
619
- >
620
- <Card>
621
- <CardContent flush>
622
- <ListRow
623
- unread
624
- title="請求書 INV-2041 が承認されました"
625
- description="2026-08-05 10:24 · 経理部"
626
- trailing={<Badge tone="success">承認</Badge>}
627
- />
628
- <ListRow
629
- unread
630
- title="組織「株式会社ファムジア」への招待が届いています"
631
- description="2026-08-05 09:12 · 管理者"
632
- trailing={<Badge tone="info">招待</Badge>}
633
- />
634
- <ListRow
635
- title="月次締め処理のリマインド"
636
- description="2026-08-04 18:00 · システム"
637
- trailing={<Badge tone="warning">要対応</Badge>}
638
- />
639
- </CardContent>
640
- </Card>
641
- </PageContainer>
642
-
643
- {/* measure="narrow" — variant="narrow" と同じ 624px の面だが、ヘッダーも一緒に絞られる。 */}
644
- <PageContainer
645
- measure="narrow"
646
- title="招待"
647
- subtitle='measure="narrow" · 624px。variant="narrow" と違いヘッダーも同じ測度で絞られます'
648
- extra={
649
- <Button variant="outline" size="sm">
650
- 招待を送る
651
- </Button>
652
- }
653
- >
654
- <Card>
655
- <CardContent>
656
- <Text as="p" tone="muted">
657
- 測度はトークン --page-measure-narrow(42rem 外寸)。ページ余白は測度の内側にあるため、
658
- 可視面は 624px になります。390px ではどのトークンも効かず、面は流動的なままです。
659
- </Text>
660
- </CardContent>
661
- </Card>
662
- </PageContainer>
663
-
664
- {/* ── 9. toolbar · ヘッダーと本文の間に固定されるクロム帯 ──
665
- fill のとき本文(.ui-page-body)がスクロール領域になるので、帯はその SIBLING として
666
- スクロール領域の外に置かれる(flex: none)。呼び出し側で position: sticky を手置き
667
- しないための唯一の正規スロット。ページ余白と measure はヘッダー/本文と共有され、
668
- 帯の内側余白と下罫線はトークン所有(--page-toolbar-pad-block / --page-toolbar-divider)。
669
- 帯は上下の帯に密着します(.ui-page-container の段間はこの帯だけ打ち消される)· クロムは
670
- くっつくものであり、空白に浮く「3 つ目のセクション」ではないからです。呼吸する場所は
671
- 帯の内側(--page-toolbar-pad-block)だけ。 */}
672
- <ResponsiveGrid columns={{ sm: 1, md: 2 }}>
673
- {/* fill · 帯は固定、トランスクリプトだけがその下でスクロールする(帯の下に潜り込まない)。 */}
674
- {/* ui-audit-disable-next-line no-hand-rolled-surface — a bounded viewport so the page-level scroll behaviour is visible in a docs page — a frame around the demo, not product chrome */}
675
- <div className="h-80 overflow-auto rounded-md border">
676
- <PageContainer
677
- fill
678
- title="#経理チャンネル"
679
- subtitle="toolbar 帯はスクロールせず · 上下の帯に密着します"
680
- toolbar={
681
- <Toolbar>
682
- <ToolbarGroup label="表示">
683
- <Button size="sm" variant="outline">
684
- すべて
685
- </Button>
686
- <Button size="sm" variant="outline">
687
- 未読
688
- </Button>
689
- </ToolbarGroup>
690
- <Badge tone="info">接続中</Badge>
691
- </Toolbar>
692
- }
693
- footer={
694
- <Flex gap="sm" align="center">
695
- <Button size="sm" variant="outline">
696
- 添付
697
- </Button>
698
- <Button size="sm">送信</Button>
699
- </Flex>
700
- }
701
- stickyFooter
702
- >
703
- <Flex direction="col" gap="md">
704
- {[
705
- "月次締めの締切は 8/31 です。",
706
- "経費精算の申請が 3 件あります。",
707
- "監査資料を共有しました。",
708
- "請求書 INV-2041 を承認しました。",
709
- "来週の定例は水曜 10:00 です。",
710
- ].map((message) => (
711
- <Card key={message}>
712
- <CardContent>
713
- <Text as="p" tone="muted">
714
- {message}
715
- </Text>
716
- </CardContent>
717
- </Card>
718
- ))}
719
- </Flex>
720
- </PageContainer>
721
- </div>
722
-
723
- {/* variant="flush" · 帯も本文と同じく全幅になるため、中身は PageContainer.Inset で
724
- ヘッダーと同じ左右余白に戻す。DataTable は全幅のまま。 */}
725
- <PageContainer
726
- variant="flush"
727
- title="仕訳一覧"
728
- subtitle='variant="flush" では帯も全幅 · 中身は PageContainer.Inset で整列'
729
- toolbar={
730
- <PageContainer.Inset>
731
- <Toolbar>
732
- <ToolbarGroup label="状態">
733
- <Button size="sm" variant="outline">
734
- 承認済
735
- </Button>
736
- <Button size="sm" variant="outline">
737
- 保留中
738
- </Button>
739
- </ToolbarGroup>
740
- </Toolbar>
741
- </PageContainer.Inset>
742
- }
743
- >
744
- <DataTable data={journalEntries} columns={journalColumns} getRowId={(r) => r.id} />
745
- </PageContainer>
746
- </ResponsiveGrid>
747
-
748
- {/* ── 10. headerScale · 先頭行は「文書の見出し」か、それとも「クロム」か ──
749
- headerScale="document"(既定)は従来どおり h1 = --page-title-font-size(20px)+ 720px
750
- 未満での縮小ステップ。headerScale="chrome" は先頭行が画面そのものの家具(チャットの
751
- チャンネル名、メールの件名、IDE のタブ)である場合で、h1 は本文と同じ型段
752
- (--page-title-font-size-chrome = --heading-h3 / 14px)になり、720px 未満でも戻りません。
753
- 要素は h1 のまま — 見出しレベルは下げないので、スクリーンリーダーの見出し階層は不変。
754
- 同じ属性でページ上端の余白も落ちます · 既定の --space-page-active-y(24px · 720px 未満は
755
- 16px)は「文書の見出しの上の余白」であって、チャンネル名やタブは枠そのものだからです。
756
- 上端だけ --page-pad-block-start-chrome(既定 0)に切り替わり、下端は従来どおり
757
- stickyFooter の担当。設計がクロムに余白を求めるならテーマでこのトークンを一度だけ
758
- 調整します(呼び出し側の padding や負マージンは不可)。
759
- 同じ事実の帰結はあと 2 つ。subtitle は --page-subtitle-font-size-chrome
760
- (--font-size-2xs / 約 11px)に落ちます · クロムの下の一行はチャンネルの目的や
761
- メールの抜粋であって文書のリードではなく、既定の --font-size-base のままだと
762
- chrome のタイトルと同じ型段になって階層が立たないからです。行送りは
763
- --line-height-body のままなので、折り返す日本語の一行も従来の律動を保ちます。
764
- そして extra は行が「行」である 640px 以上で帯の中央に揃います(align-self: center)·
765
- 先頭寄せは背の高い h1 の一行目にアクションを並べる文書の作法であって、
766
- 揃える見出しを持たない帯には合いません。実測で 8.65px のずれでした。
767
- variant="ghost"(罫線と下余白を落とす)と組み合わせると静かなクロムヘッダーになります。 */}
768
- <ResponsiveGrid columns={{ sm: 1, md: 2 }}>
769
- <PageContainer
770
- title="請求書 INV-2041"
771
- subtitle='headerScale="document"(既定)· 先頭行はこのページの見出し'
772
- extra={
773
- <Button size="sm" variant="outline">
774
- PDF
775
- </Button>
776
- }
777
- >
778
- <Card>
779
- <CardContent>
780
- <Descriptions columns={1}>
781
- <Descriptions.Item label="タイトルの型段">
782
- --page-title-font-size(h1 · 20px)
783
- </Descriptions.Item>
784
- <Descriptions.Item label="720px 未満">
785
- --page-title-font-size-compact(h2 · 18px)
786
- </Descriptions.Item>
787
- <Descriptions.Item label="ページ上端の余白">
788
- --space-page-active-y(24px)· chrome では --page-pad-block-start-chrome(0)
789
- </Descriptions.Item>
790
- <Descriptions.Item label="subtitle の型段">
791
- --page-subtitle-font-size(14px)· chrome では
792
- --page-subtitle-font-size-chrome(約 11px)
793
- </Descriptions.Item>
794
- <Descriptions.Item label="extra の縦位置">
795
- 行の先頭寄せ(flex-start)· chrome では帯の中央(align-self: center)
796
- </Descriptions.Item>
797
- <Descriptions.Item label="帯の高さ">
798
- 中身なり · chrome では --page-header-min-block-size-chrome(既定 auto · テーマで
799
- --app-shell-bar-height を読ませると 48px 固定)
800
- </Descriptions.Item>
801
- </Descriptions>
802
- </CardContent>
803
- </Card>
804
- </PageContainer>
805
-
806
- {/* チャット面の正準構成: chrome(型段)× ghost(クロムの重さ)× fill × toolbar ×
807
- stickyFooter。チャンネル名は「今いる場所の名前」であって記事の見出しではない。
808
- footer の上罫線も --page-footer-divider で消せます · 入力欄が自前で枠を持つ Card の
809
- 場合、全幅の罫線がその真上に重なって 2 本目の線になるためです。既定は「引く」のまま
810
- (フォームの保存/取消バーはこの線で本文と分かれる)。 */}
811
- {/* ui-audit-disable-next-line no-hand-rolled-surface — a bounded viewport so the page-level scroll behaviour is visible in a docs page — a frame around the demo, not product chrome */}
812
- <div className="h-80 overflow-auto rounded-md border">
813
- <PageContainer
814
- fill
815
- headerScale="chrome"
816
- variant="ghost"
817
- title="# 経理チャンネル"
818
- subtitle="請求書と入金の相談 · 締めは毎月 25 日"
819
- status={<Badge tone="info">接続中</Badge>}
820
- extra={
821
- <Button size="sm" variant="ghost" aria-label="チャンネル内を検索">
822
- <Search aria-hidden="true" />
823
- </Button>
824
- }
825
- toolbar={
826
- <Toolbar>
827
- <ToolbarGroup label="表示">
828
- <Button size="sm" variant="outline">
829
- すべて
830
- </Button>
831
- <Button size="sm" variant="outline">
832
- 未読
833
- </Button>
834
- </ToolbarGroup>
835
- </Toolbar>
836
- }
837
- footer={
838
- <Flex gap="sm" align="center">
839
- <Button size="sm" variant="outline">
840
- 添付
841
- </Button>
842
- <Button size="sm">送信</Button>
843
- </Flex>
844
- }
845
- stickyFooter
846
- >
847
- <Flex direction="col" gap="md">
848
- {[
849
- "チャンネル名は本文と同じ 14px · 見出しではなく面のラベルとして読ませます。",
850
- "その下の一行はさらに 2 段小さい約 11px · 名前と説明の階層が立ちます。",
851
- "検索アイコンは帯の中央 · 文書の先頭寄せではありません。",
852
- "h1 のままなので、見出し階層は document と同じ。",
853
- "帯の高さが下がったぶんは、そのまま会話の高さになります。",
854
- "縮めたいだけの理由で通常の文書ページに使わないこと。",
855
- ].map((message) => (
856
- <Card key={message}>
857
- <CardContent>
858
- <Text as="p" tone="muted">
859
- {message}
860
- </Text>
861
- </CardContent>
862
- </Card>
863
- ))}
864
- </Flex>
865
- </PageContainer>
866
- </div>
867
- </ResponsiveGrid>
868
-
869
- {/* ── 11. --page-toolbar-background · 帯の地の色もトークン ──
870
- 既定は transparent(=トークン導入前と完全に同じ見え方)。設計が「帯だけカード面に
871
- 乗せる」と言うときは、呼び出し側に className="bg-card" を書くのではなく、テーマで
872
- --page-toolbar-background を一度だけ宣言します。手置きのページクロムは禁止であり、
873
- テナントごとの再テーマも効かなくなるためです。帯を塗るなら内側の余白も一緒に
874
- (--page-toolbar-pad-block)· 既定の 0 は「透明な帯には内側がない」ことに由来します。 */}
875
- <ResponsiveGrid columns={{ sm: 1, md: 2 }}>
876
- {/* ui-audit-disable-next-line no-hand-rolled-surface — a bounded viewport so the page-level scroll behaviour is visible in a docs page — a frame around the demo, not product chrome */}
877
- <div className="h-80 overflow-auto rounded-md border">
878
- <PageContainer
879
- fill
880
- headerScale="chrome"
881
- variant="ghost"
882
- title="# 経理チャンネル"
883
- subtitle="既定 · --page-toolbar-background は transparent"
884
- toolbar={
885
- <Toolbar>
886
- <ToolbarGroup label="表示">
887
- <Button size="sm" variant="outline">
888
- 未読
889
- </Button>
890
- </ToolbarGroup>
891
- </Toolbar>
892
- }
893
- >
894
- <Flex direction="col" gap="md">
895
- {[
896
- "帯はページの地の色のまま · header と body の間に浮いて見えます。",
897
- "トークンを足すまで DOM もスタイルも従来どおりです。",
898
- ].map((message) => (
899
- <Card key={message}>
900
- <CardContent>
901
- <Text as="p" tone="muted">
902
- {message}
903
- </Text>
904
- </CardContent>
905
- </Card>
906
- ))}
907
- </Flex>
908
- </PageContainer>
909
- </div>
910
-
911
- {/* ui-audit-disable-next-line no-hand-rolled-surface — a bounded viewport so the page-level scroll behaviour is visible in a docs page — a frame around the demo, not product chrome */}
912
- <div className="h-80 overflow-auto rounded-md border" style={TOOLBAR_CHROME_TOKENS}>
913
- <PageContainer
914
- fill
915
- headerScale="chrome"
916
- variant="ghost"
917
- title="# 経理チャンネル"
918
- subtitle="テーマで --page-toolbar-background: hsl(var(--card))"
919
- toolbar={
920
- <Toolbar>
921
- <ToolbarGroup label="表示">
922
- <Button size="sm" variant="outline">
923
- 未読
924
- </Button>
925
- </ToolbarGroup>
926
- <Badge tone="info">接続中</Badge>
927
- </Toolbar>
928
- }
929
- >
930
- <Flex direction="col" gap="md">
931
- {[
932
- "帯がカード面に乗り、本文から分離して読めます。",
933
- "塗った帯には内側の余白が要るので pad-block も同じテーマで指定します。",
934
- "呼び出し側で背景色や上下の余白を足す必要はありません · どちらもトークンの仕事です。",
935
- ].map((message) => (
936
- <Card key={message}>
937
- <CardContent>
938
- <Text as="p" tone="muted">
939
- {message}
940
- </Text>
941
- </CardContent>
942
- </Card>
943
- ))}
944
- </Flex>
945
- </PageContainer>
946
- </div>
947
- </ResponsiveGrid>
948
-
949
- {/* ── 12. --page-header-min-block-size-chrome · クロム帯に「高さ」を与える ──
950
- 既定(左)は auto · 帯は中身なりの高さになるので、副題や extra の有無で帯の縦中心が
951
- 動きます(Chromium 実測 · extra ありで 42.02px、なしで 40.38px)。動く中心には何も
952
- 揃えられません。テーマで一行(右)· --page-header-min-block-size-chrome を
953
- --app-shell-bar-height にすると帯は 48px に固定され、タイトル列も extra も帯の中心
954
- (y=24)に載ります。min なので、より背の高い extra は今までどおり収まります。 */}
955
- <ResponsiveGrid columns={{ sm: 1, md: 2 }}>
956
- {/* ui-audit-disable-next-line no-hand-rolled-surface — a bounded viewport so the page-level scroll behaviour is visible in a docs page — a frame around the demo, not product chrome */}
957
- <div className="h-80 overflow-auto rounded-md border">
958
- <PageContainer
959
- fill
960
- headerScale="chrome"
961
- variant="ghost"
962
- title="# 経理チャンネル"
963
- subtitle="既定 · --page-header-min-block-size-chrome は auto"
964
- extra={
965
- <Button size="sm" variant="ghost" aria-label="チャンネル内を検索">
966
- <Search aria-hidden="true" />
967
- </Button>
968
- }
969
- >
970
- <Flex direction="col" gap="md">
971
- {[
972
- "帯の高さは中身なり · 副題を短くすると縦中心がそのぶん動きます。",
973
- "48px のトップバーと中心を合わせる方法がありません。",
974
- ].map((message) => (
975
- <Card key={message}>
976
- <CardContent>
977
- <Text as="p" tone="muted">
978
- {message}
979
- </Text>
980
- </CardContent>
981
- </Card>
982
- ))}
983
- </Flex>
984
- </PageContainer>
985
- </div>
986
-
987
- {/* ui-audit-disable-next-line no-hand-rolled-surface — a bounded viewport so the page-level scroll behaviour is visible in a docs page — a frame around the demo, not product chrome */}
988
- <div className="h-80 overflow-auto rounded-md border" style={CHROME_BAND_TOKENS}>
989
- <PageContainer
990
- fill
991
- headerScale="chrome"
992
- variant="ghost"
993
- title="# 経理チャンネル"
994
- subtitle="テーマで --app-shell-bar-height を読ませた 48px の帯"
995
- extra={
996
- <Button size="sm" variant="ghost" aria-label="チャンネル内を検索">
997
- <Search aria-hidden="true" />
998
- </Button>
999
- }
1000
- >
1001
- <Flex direction="col" gap="md">
1002
- {[
1003
- "帯は 48px 固定 · AppShell のトップバーと同じ帯に乗ります。",
1004
- "タイトル列も検索アイコンも帯の中央 · 中身が変わっても動きません。",
1005
- ].map((message) => (
1006
- <Card key={message}>
1007
- <CardContent>
1008
- <Text as="p" tone="muted">
1009
- {message}
1010
- </Text>
1011
- </CardContent>
1012
- </Card>
1013
- ))}
1014
- </Flex>
1015
- </PageContainer>
1016
- </div>
1017
- </ResponsiveGrid>
1018
- </Flex>
1019
- );
1020
- }