@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,724 +0,0 @@
1
- import * as React from "react";
2
- import {
3
- Badge,
4
- Card,
5
- CardContent,
6
- CardDescription,
7
- CardHeader,
8
- CardTitle,
9
- Descriptions,
10
- EmptyState,
11
- ScrollArea,
12
- Tree,
13
- type TreeDropInfoProp,
14
- type TreeNodeProp,
15
- } from "@godxjp/ui/data-display";
16
- import { SearchInput } from "@godxjp/ui/data-entry";
17
- import { Text } from "@godxjp/ui/general";
18
- import { useTranslation } from "@godxjp/ui/i18n";
19
- import { Flex, PageContainer, Separator } from "@godxjp/ui/layout";
20
- import { Building2, FolderTree, ShieldCheck } from "lucide-react";
21
-
22
- /**
23
- * Tree — the standalone WAI-ARIA "Tree View" on a page.
24
- *
25
- * The screen is a real one: an access-control settings page whose left column is the permission
26
- * tree the administrator ticks, and whose right column reads back exactly what that means. Every
27
- * card below is an independent pattern with its own data and its own state, and every prop the
28
- * component declares is exercised somewhere on the page, at rest, without clicking.
29
- */
30
-
31
- // ── card 1 · the permission tree ────────────────────────────────────────────────────────────
32
- const permissions: TreeNodeProp[] = [
33
- {
34
- value: "billing",
35
- label: "請求管理",
36
- children: [
37
- { value: "billing.invoice.read", label: "請求書を閲覧" },
38
- { value: "billing.invoice.write", label: "請求書を発行" },
39
- { value: "billing.refund", label: "返金を実行", disableCheckbox: true },
40
- ],
41
- },
42
- {
43
- value: "people",
44
- label: "人事",
45
- children: [
46
- { value: "people.read", label: "プロフィールを閲覧" },
47
- { value: "people.write", label: "プロフィールを編集" },
48
- {
49
- value: "people.payroll",
50
- label: "給与",
51
- children: [
52
- { value: "people.payroll.read", label: "給与明細を閲覧" },
53
- { value: "people.payroll.approve", label: "給与を承認", disabled: true },
54
- ],
55
- },
56
- ],
57
- },
58
- { value: "audit", label: "監査ログ", isLeaf: true },
59
- ];
60
-
61
- const permissionLabels = new Map<string, string>([
62
- ["billing", "請求管理"],
63
- ["billing.invoice.read", "請求書を閲覧"],
64
- ["billing.invoice.write", "請求書を発行"],
65
- ["billing.refund", "返金を実行"],
66
- ["people", "人事"],
67
- ["people.read", "プロフィールを閲覧"],
68
- ["people.write", "プロフィールを編集"],
69
- ["people.payroll", "給与"],
70
- ["people.payroll.read", "給与明細を閲覧"],
71
- ["people.payroll.approve", "給与を承認"],
72
- ["audit", "監査ログ"],
73
- ]);
74
-
75
- // ── card 2 · the directory browser ──────────────────────────────────────────────────────────
76
- const repository: TreeNodeProp[] = [
77
- {
78
- value: "src",
79
- label: "src",
80
- children: [
81
- {
82
- value: "src/components",
83
- label: "components",
84
- children: [
85
- { value: "src/components/tree.tsx", label: "tree.tsx", isLeaf: true },
86
- { value: "src/components/tree-list.tsx", label: "tree-list.tsx", isLeaf: true },
87
- ],
88
- },
89
- { value: "src/index.ts", label: "index.ts", isLeaf: true },
90
- ],
91
- },
92
- {
93
- value: "docs",
94
- label: "docs",
95
- children: [{ value: "docs/tree.mdx", label: "tree.mdx", isLeaf: true }],
96
- },
97
- ];
98
-
99
- const fileDetails: Record<string, { size: string; changed: string }> = {
100
- "src/components/tree.tsx": { size: "18.4 KB", changed: "2026-09-10" },
101
- "src/components/tree-list.tsx": { size: "1.2 KB", changed: "2025-11-02" },
102
- "src/index.ts": { size: "0.9 KB", changed: "2026-08-21" },
103
- "docs/tree.mdx": { size: "4.1 KB", changed: "2026-09-10" },
104
- };
105
-
106
- // ── the page index used as NAVIGATION inside a Card (`divided`, gh#732) ──────────────────────
107
- const wikiPages: TreeNodeProp[] = [
108
- {
109
- value: "handbook",
110
- label: "社内ハンドブック",
111
- children: [
112
- { value: "handbook/onboarding", label: "入社手続き", isLeaf: true },
113
- { value: "handbook/expenses", label: "経費精算", isLeaf: true },
114
- {
115
- value: "handbook/security",
116
- label: "情報セキュリティ",
117
- children: [
118
- { value: "handbook/security/passwords", label: "パスワード規程", isLeaf: true },
119
- { value: "handbook/security/incidents", label: "インシデント報告", isLeaf: true },
120
- ],
121
- },
122
- ],
123
- },
124
- {
125
- value: "product",
126
- label: "プロダクト仕様",
127
- children: [
128
- { value: "product/release", label: "リリース手順", isLeaf: true },
129
- { value: "product/support", label: "サポート窓口", isLeaf: true },
130
- ],
131
- },
132
- { value: "minutes", label: "議事録", isLeaf: true },
133
- ];
134
-
135
- const wikiPageDetails: Record<string, { updated: string; author: string }> = {
136
- handbook: { updated: "2026-09-01", author: "総務部" },
137
- "handbook/onboarding": { updated: "2026-08-18", author: "人事部" },
138
- "handbook/expenses": { updated: "2026-07-30", author: "経理部" },
139
- "handbook/security": { updated: "2026-09-11", author: "情報システム部" },
140
- "handbook/security/passwords": { updated: "2026-09-11", author: "情報システム部" },
141
- "handbook/security/incidents": { updated: "2026-06-02", author: "情報システム部" },
142
- product: { updated: "2026-09-14", author: "プロダクト部" },
143
- "product/release": { updated: "2026-09-14", author: "プロダクト部" },
144
- "product/support": { updated: "2026-05-20", author: "CS部" },
145
- minutes: { updated: "2026-09-16", author: "総務部" },
146
- };
147
-
148
- // ── card 3 · async branches (fieldNames + loadData + titleRender) ────────────────────────────
149
- type Department = { id: string; name: string; leaf?: boolean; units?: Department[] };
150
-
151
- const initialDepartments: Department[] = [
152
- { id: "jp", name: "日本法人" },
153
- { id: "vn", name: "ベトナム法人" },
154
- { id: "sg", name: "シンガポール支店", leaf: true },
155
- ];
156
-
157
- const departmentChildren: Record<string, Department[]> = {
158
- jp: [
159
- { id: "jp-sales", name: "営業部", leaf: true },
160
- { id: "jp-dev", name: "開発部", leaf: true },
161
- ],
162
- vn: [{ id: "vn-dev", name: "開発センター", leaf: true }],
163
- };
164
-
165
- function attachChildren(nodes: Department[], id: string, children: Department[]): Department[] {
166
- return nodes.map((node) =>
167
- node.id === id
168
- ? { ...node, units: children }
169
- : { ...node, units: node.units ? attachChildren(node.units, id, children) : undefined },
170
- );
171
- }
172
-
173
- // ── card 4 · a long lazy level (height + virtual · filterTreeNode · retry) ────────────────────
174
- // The godx-task shape (gh#1041-1043): 2 suites → 28 sections → up to 421 cases per section,
175
- // fetched when a section opens. antd's Tree has no "load more" node — `height` keeps a 421-row
176
- // level to a few dozen DOM rows — so the one paged section below composes its own: a leaf whose
177
- // selection asks for the next page. It is a real treeitem, so the keyboard reaches it.
178
- const CASE_PAGE = 100;
179
- // The data carries VALUES only; every visible label is derived from the value through `t()` at
180
- // render (`labelSuiteTree`), so the demo follows the active locale like the library's chrome does.
181
- const suites: TreeNodeProp[] = [1, 2].map((suiteNumber) => ({
182
- value: `suite-${suiteNumber}`,
183
- label: "",
184
- children: Array.from({ length: 14 }, (_, sectionIndex) => ({
185
- value: `suite-${suiteNumber}/section-${sectionIndex + 1}`,
186
- label: "",
187
- isLeaf: false,
188
- })),
189
- }));
190
-
191
- function caseNodes(section: string, from: number, to: number): TreeNodeProp[] {
192
- return Array.from({ length: to - from }, (_, index) => ({
193
- value: `${section}/case-${from + index + 1}`,
194
- label: "",
195
- isLeaf: true,
196
- }));
197
- }
198
-
199
- function withChildren(
200
- nodes: TreeNodeProp[],
201
- value: string,
202
- children: TreeNodeProp[],
203
- ): TreeNodeProp[] {
204
- return nodes.map((node) =>
205
- node.value === value
206
- ? { ...node, children }
207
- : node.children
208
- ? { ...node, children: withChildren(node.children, value, children) }
209
- : node,
210
- );
211
- }
212
-
213
- function labelSuiteTree(
214
- nodes: TreeNodeProp[],
215
- t: ReturnType<typeof useTranslation>["t"],
216
- ): TreeNodeProp[] {
217
- return nodes.map((node) => {
218
- const value = node.value;
219
- let label: string;
220
- if (value.endsWith("::more")) {
221
- label = t("treeDocs.longList.loadMore", { count: CASE_PAGE });
222
- } else if (/\/case-\d+$/.test(value)) {
223
- label = t("treeDocs.longList.case", {
224
- number: String(Number(value.split("case-").pop())).padStart(3, "0"),
225
- });
226
- } else if (/\/section-\d+$/.test(value)) {
227
- const number = Number(value.split("section-").pop());
228
- const key =
229
- value === "suite-1/section-2"
230
- ? "treeDocs.longList.sectionFailing"
231
- : value === "suite-1/section-3"
232
- ? "treeDocs.longList.sectionPaged"
233
- : "treeDocs.longList.section";
234
- label = t(key, { number, count: CASE_PAGE });
235
- } else {
236
- label = t(
237
- value === "suite-1"
238
- ? "treeDocs.longList.suiteIntegration"
239
- : "treeDocs.longList.suiteAcceptance",
240
- );
241
- }
242
- return {
243
- ...node,
244
- label,
245
- children: node.children ? labelSuiteTree(node.children, t) : undefined,
246
- };
247
- });
248
- }
249
-
250
- // ── card · draggable (gh#1093) ─────────────────────────────────────────────────────────────
251
- const movablePagesSeed: TreeNodeProp[] = [
252
- {
253
- value: "guide",
254
- label: "guide",
255
- children: [
256
- { value: "guide/start", label: "start" },
257
- { value: "guide/setup", label: "setup" },
258
- ],
259
- },
260
- { value: "faq", label: "faq" },
261
- { value: "notes", label: "notes" },
262
- ];
263
-
264
- /** The seed's labels are catalogue keys (`treeDocs.drag.pages.*`), read in the reader's locale. */
265
- function labelPages(
266
- data: TreeNodeProp[],
267
- t: (key: string) => string,
268
- ): TreeNodeProp[] {
269
- return data.map((node) => ({
270
- ...node,
271
- label: t(`treeDocs.drag.pages.${String(node.label)}`),
272
- children: node.children ? labelPages(node.children, t) : undefined,
273
- }));
274
- }
275
-
276
- /** What a consumer does in `onDrop`: take the node out, put it back where the drop says. */
277
- function moveNode(data: TreeNodeProp[], info: TreeDropInfoProp): TreeNodeProp[] {
278
- let moved: TreeNodeProp | undefined;
279
- const without = (list: TreeNodeProp[]): TreeNodeProp[] =>
280
- list
281
- .filter((node) => (node.value === info.dragNode.value ? ((moved = node), false) : true))
282
- .map((node) => (node.children ? { ...node, children: without(node.children) } : node));
283
- const place = (list: TreeNodeProp[]): TreeNodeProp[] =>
284
- list.flatMap((node) => {
285
- if (node.value !== info.node.value) {
286
- return node.children ? [{ ...node, children: place(node.children) }] : [node];
287
- }
288
- if (info.dropPosition === 0)
289
- return [{ ...node, children: [...(node.children ?? []), moved!] }];
290
- return info.dropPosition === -1 ? [moved!, node] : [node, moved!];
291
- });
292
- const rest = without(data);
293
- return moved ? place(rest) : data;
294
- }
295
-
296
- export default function Demo() {
297
- const { t } = useTranslation();
298
- // Card 1 — checks are controlled so the readout beside the tree can never disagree with it.
299
- const [granted, setGranted] = React.useState<string[]>(["billing.invoice.read"]);
300
- // Card 2 — selection is controlled and drives the detail pane.
301
- const [openFile, setOpenFile] = React.useState<string | undefined>("src/components/tree.tsx");
302
- // The page index — the tree IS the navigation, so selection is what the reading pane follows.
303
- const [movablePages, setMovablePages] = React.useState(movablePagesSeed);
304
- const [lastMove, setLastMove] = React.useState("");
305
- const [openPage, setOpenPage] = React.useState<string | undefined>("handbook/security/passwords");
306
- // Card 3 — async children land in state, exactly as a real fetch would.
307
- const [departments, setDepartments] = React.useState<Department[]>(initialDepartments);
308
- // Card 5 — independent (strict) checks, and a multi-select tree.
309
- const [strictChecks, setStrictChecks] = React.useState<string[]>(["people", "people.read"]);
310
- const [picked, setPicked] = React.useState<string[]>(["billing", "audit"]);
311
- // Card 4 — the long lazy level.
312
- const [suiteTree, setSuiteTree] = React.useState<TreeNodeProp[]>(suites);
313
- const [caseQuery, setCaseQuery] = React.useState("");
314
- // "" (not undefined) keeps the tree CONTROLLED while nothing is open.
315
- const [openCase, setOpenCase] = React.useState("");
316
- const failedOnce = React.useRef(false);
317
-
318
- const loadSection = async (node: TreeNodeProp) => {
319
- await new Promise((resolve) => setTimeout(resolve, 600));
320
- if (node.value === "suite-1/section-2" && !failedOnce.current) {
321
- failedOnce.current = true;
322
- // Rejected: the branch folds back shut, and opening it again asks again (gh#1041).
323
- throw new Error("network");
324
- }
325
- const paged = node.value === "suite-1/section-3";
326
- const children = caseNodes(node.value, 0, paged ? CASE_PAGE : 421);
327
- if (paged) {
328
- children.push({
329
- value: `${node.value}::more`,
330
- label: "",
331
- isLeaf: true,
332
- });
333
- }
334
- setSuiteTree((current) => withChildren(current, node.value, children));
335
- };
336
-
337
- const loadMoreCases = (moreValue: string) => {
338
- const section = moreValue.replace(/::more$/, "");
339
- setSuiteTree((current) => {
340
- const sectionNode = current
341
- .flatMap((suite) => suite.children ?? [])
342
- .find((node) => node.value === section);
343
- const loaded = (sectionNode?.children ?? []).filter((node) => !node.value.endsWith("::more"));
344
- const next = caseNodes(section, loaded.length, Math.min(421, loaded.length + CASE_PAGE));
345
- const more =
346
- loaded.length + next.length < 421 ? [{ value: moreValue, label: "", isLeaf: true }] : [];
347
- return withChildren(current, section, [...loaded, ...next, ...more]);
348
- });
349
- };
350
-
351
- const loadDepartment = async (node: TreeNodeProp) => {
352
- // A real delay, so the Skeleton row and aria-busy are OBSERVABLE rather than theoretical.
353
- await new Promise((resolve) => setTimeout(resolve, 1200));
354
- const children = departmentChildren[node.value] ?? [];
355
- setDepartments((current) => attachChildren(current, node.value, children));
356
- };
357
-
358
- return (
359
- <PageContainer
360
- title="Tree"
361
- subtitle="アクセス権限の設定 · 展開・折りたたみ・キーボード操作のある階層はすべて Tree"
362
- >
363
- <Flex direction="col" gap="lg">
364
- <Card>
365
- <CardHeader>
366
- <CardTitle level={2}>権限ツリー(checkable · 三状態)</CardTitle>
367
- <CardDescription>
368
- 親をチェックすると配下すべてが入り、一部だけのときは親がダッシュ(indeterminate)
369
- になります。「返金を実行」は disableCheckbox(チェックだけ不可)、「給与を承認」は
370
- disabled。どちらも親の分母に入らないため、残りを全部入れれば親はチェック済みになります。
371
- showLine で接続線、defaultExpandAll で最初から全展開。
372
- </CardDescription>
373
- </CardHeader>
374
- <CardContent>
375
- <Flex gap="lg" wrap>
376
- <Tree
377
- aria-label="権限ツリー"
378
- treeData={permissions}
379
- checkable
380
- showLine
381
- defaultExpandAll
382
- checkedValues={granted}
383
- onCheckedValuesChange={setGranted}
384
- />
385
- <Separator orientation="vertical" />
386
- <Flex direction="col" gap="sm">
387
- <Text size="sm" tone="muted">
388
- 付与された権限({granted.length} 件)
389
- </Text>
390
- {granted.length === 0 ? (
391
- <EmptyState
392
- icon={ShieldCheck}
393
- title="権限がありません"
394
- description="ツリーから付与する権限を選んでください。"
395
- />
396
- ) : (
397
- <Flex gap="xs" wrap>
398
- {granted.map((value) => (
399
- <Badge key={value} variant="secondary">
400
- {permissionLabels.get(value) ?? value}
401
- </Badge>
402
- ))}
403
- </Flex>
404
- )}
405
- </Flex>
406
- </Flex>
407
- </CardContent>
408
- </Card>
409
-
410
- <Card>
411
- <CardHeader>
412
- <CardTitle level={2}>ファイルブラウザ(variant=&quot;directory&quot;)</CardTitle>
413
- <CardDescription>
414
- DirectoryTree 相当。showIcon でフォルダ/ファイルのグリフが出て、選択行は行全体が帯に
415
- なります。選択は value / onValueChange
416
- の制御コンポーネントで、右の詳細と常に一致します。 長いツリーは ScrollArea
417
- で高さを止めます(v1 に仮想スクロールはありません)。
418
- </CardDescription>
419
- </CardHeader>
420
- <CardContent>
421
- <Flex gap="lg" wrap>
422
- <ScrollArea className="max-h-64 w-72">
423
- <Tree
424
- aria-label="リポジトリ"
425
- variant="directory"
426
- showIcon
427
- treeData={repository}
428
- defaultExpandedValues={["src", "src/components"]}
429
- value={openFile}
430
- onValueChange={(next) => setOpenFile(next as string | undefined)}
431
- />
432
- </ScrollArea>
433
- <Flex direction="col" gap="sm">
434
- {openFile && fileDetails[openFile] ? (
435
- <Descriptions
436
- items={[
437
- { label: "パス", children: openFile },
438
- { label: "サイズ", children: fileDetails[openFile].size },
439
- { label: "最終更新", children: fileDetails[openFile].changed },
440
- ]}
441
- />
442
- ) : (
443
- <EmptyState
444
- icon={FolderTree}
445
- title="ファイルが選択されていません"
446
- description="ツリーからファイルを選ぶと詳細が出ます。"
447
- />
448
- )}
449
- </Flex>
450
- </Flex>
451
- </CardContent>
452
- </Card>
453
-
454
- <Card>
455
- <CardHeader>
456
- <CardTitle level={2}>ページ一覧をナビゲーションに使う(divided)</CardTitle>
457
- <CardDescription>
458
- ドキュメント/wiki のページ一覧のように、ツリーそのものが画面のナビゲーションになる
459
- ときは divided で行間に罫を引きます。罫は各行の block-start に 1
460
- 本ずつ、外側の最初の行にだけ引かれません。 深さに関係なく行の幅いっぱいに走るので
461
- (インデントは行の padding であって margin ではありません)、 子行が「表の中の表」に
462
- 見えることはありません。色は --tree-divider-color(既定 hsl(var(--border)))。 divided
463
- は既定オフで、このページの他のカードがその既定の姿です。
464
- </CardDescription>
465
- </CardHeader>
466
- <CardContent>
467
- <Flex gap="lg" wrap>
468
- <Card className="w-72">
469
- <CardHeader>
470
- <CardTitle level={3}>ページ一覧</CardTitle>
471
- </CardHeader>
472
- <CardContent flush>
473
- <Tree
474
- aria-label="ページ一覧"
475
- divided
476
- treeData={wikiPages}
477
- defaultExpandAll
478
- value={openPage}
479
- onValueChange={(next) => setOpenPage(next as string | undefined)}
480
- />
481
- </CardContent>
482
- </Card>
483
- <Flex direction="col" gap="sm">
484
- {openPage && wikiPageDetails[openPage] ? (
485
- <Descriptions
486
- items={[
487
- { label: "パス", children: openPage },
488
- { label: "最終更新", children: wikiPageDetails[openPage].updated },
489
- { label: "更新者", children: wikiPageDetails[openPage].author },
490
- ]}
491
- />
492
- ) : (
493
- <EmptyState
494
- icon={FolderTree}
495
- title="ページが選択されていません"
496
- description="左の一覧からページを選んでください。"
497
- />
498
- )}
499
- </Flex>
500
- </Flex>
501
- </CardContent>
502
- </Card>
503
-
504
- <Card>
505
- <CardHeader>
506
- <CardTitle level={2}>{t("treeDocs.drag.title")}</CardTitle>
507
- <CardDescription>{t("treeDocs.drag.description")}</CardDescription>
508
- </CardHeader>
509
- <CardContent>
510
- <Flex direction="col" gap="sm">
511
- <Tree
512
- aria-label={t("treeDocs.drag.treeLabel")}
513
- treeData={labelPages(movablePages, t)}
514
- defaultExpandAll
515
- draggable
516
- allowDrop={({ dropNode, dropPosition }) =>
517
- !(dropNode.value === "notes" && dropPosition === 0)
518
- }
519
- onDrop={(info) => {
520
- setMovablePages((current) => moveNode(current, info));
521
- setLastMove(
522
- `${String(info.dragNode.label)} → ${String(info.node.label)}(dropPosition ${info.dropPosition}, dropToGap ${info.dropToGap})`,
523
- );
524
- }}
525
- />
526
- <Text size="sm" tone="muted">
527
- {t("treeDocs.drag.lastMove", { move: lastMove || t("treeDocs.drag.none") })}
528
- </Text>
529
- </Flex>
530
- </CardContent>
531
- </Card>
532
-
533
- <Card>
534
- <CardHeader>
535
- <CardTitle level={2}>組織ツリー(loadData · fieldNames · titleRender)</CardTitle>
536
- <CardDescription>
537
- API のキーが id / name / units でも fieldNames で読み替えるだけ。子を持たない枝は
538
- isLeaf: false 扱いで、初回展開時に loadData が一度だけ走り、その間は Skeleton 行と
539
- aria-busy が出ます(1.2 秒の実待ち)。titleRender で行の見た目を差し替えています。
540
- </CardDescription>
541
- </CardHeader>
542
- <CardContent>
543
- <Tree
544
- aria-label="組織ツリー"
545
- size="lg"
546
- showIcon
547
- treeData={
548
- departments.map((node) => ({
549
- ...node,
550
- isLeaf: node.leaf ?? false,
551
- icon: <Building2 />,
552
- })) as unknown as TreeNodeProp[]
553
- }
554
- fieldNames={{ label: "name", value: "id", children: "units" }}
555
- loadData={loadDepartment}
556
- titleRender={(node) => (
557
- <Text size="sm" weight="medium">
558
- {node.label}
559
- </Text>
560
- )}
561
- />
562
- </CardContent>
563
- </Card>
564
-
565
- <Card>
566
- <CardHeader>
567
- <CardTitle level={2}>{t("treeDocs.longList.title")}</CardTitle>
568
- <CardDescription>{t("treeDocs.longList.description")}</CardDescription>
569
- </CardHeader>
570
- <CardContent>
571
- <Flex direction="col" gap="sm">
572
- <SearchInput
573
- ariaLabel={t("treeDocs.longList.searchLabel")}
574
- placeholder={t("treeDocs.longList.searchPlaceholder")}
575
- value={caseQuery}
576
- onValueChange={setCaseQuery}
577
- onSearch={() => {}}
578
- />
579
- <Tree
580
- aria-label={t("treeDocs.longList.treeLabel")}
581
- treeData={labelSuiteTree(suiteTree, t)}
582
- height={360}
583
- defaultExpandedValues={["suite-1"]}
584
- loadData={loadSection}
585
- filterTreeNode={(node) =>
586
- caseQuery.trim() !== "" && String(node.label).includes(caseQuery.trim())
587
- }
588
- value={openCase}
589
- onValueChange={(next) => {
590
- // The "load more" leaf is an action, not a selection — it never stays selected,
591
- // so choosing it again always asks for the next page.
592
- if (typeof next === "string" && next.endsWith("::more")) loadMoreCases(next);
593
- else setOpenCase((next as string | undefined) ?? "");
594
- }}
595
- />
596
- </Flex>
597
- </CardContent>
598
- </Card>
599
-
600
- <Card>
601
- <CardHeader>
602
- <CardTitle level={2}>checkStrictly と multiple(チェックと選択は別の軸)</CardTitle>
603
- <CardDescription>
604
- 左は checkStrictly:親と子のチェックは独立で、カスケードも indeterminate
605
- もありません。 右は multiple の選択(チェックボックスなし)。ひとつの Tree で value と
606
- checkedValues が別々に動くことが分かるよう、読み出しを両方出しています。
607
- </CardDescription>
608
- </CardHeader>
609
- <CardContent>
610
- <Flex gap="lg" wrap>
611
- <Flex direction="col" gap="sm">
612
- <Text size="sm" tone="muted">
613
- checkStrictly · チェック: {strictChecks.length} 件
614
- </Text>
615
- <Tree
616
- aria-label="権限ツリー(独立チェック)"
617
- treeData={permissions}
618
- checkable
619
- checkStrictly
620
- defaultExpandedValues={["people"]}
621
- checkedValues={strictChecks}
622
- onCheckedValuesChange={setStrictChecks}
623
- />
624
- </Flex>
625
- <Separator orientation="vertical" />
626
- <Flex direction="col" gap="sm">
627
- <Text size="sm" tone="muted">
628
- multiple · 選択:{" "}
629
- {picked.map((value) => permissionLabels.get(value) ?? value).join(" / ")}
630
- </Text>
631
- <Tree
632
- aria-label="権限ツリー(複数選択)"
633
- treeData={permissions}
634
- multiple
635
- defaultExpandAll
636
- value={picked}
637
- onValueChange={(next) => setPicked((next ?? []) as string[])}
638
- />
639
- </Flex>
640
- </Flex>
641
- </CardContent>
642
- </Card>
643
-
644
- <Card>
645
- <CardHeader>
646
- <CardTitle level={2}>size の全段階 · disabled · 空</CardTitle>
647
- <CardDescription>
648
- 行の高さは --control-height の段(xs / sm / md / lg)から来るので、同じ行に並ぶ他の
649
- コントロールと常に揃います。disabled
650
- はツリー全体を固め(読めるまま、開閉も選択も不可)、 treeData が空なら
651
- role=&quot;status&quot; の空メッセージが出ます。
652
- </CardDescription>
653
- </CardHeader>
654
- <CardContent>
655
- <Flex gap="lg" wrap>
656
- {(["xs", "sm", "md", "lg"] as const).map((step) => (
657
- <Flex key={step} direction="col" gap="xs">
658
- <Text size="sm" tone="muted">
659
- size=&quot;{step}&quot;
660
- </Text>
661
- <Tree
662
- aria-label={`サイズ ${step}`}
663
- size={step}
664
- treeData={repository}
665
- defaultExpandedValues={["src"]}
666
- />
667
- </Flex>
668
- ))}
669
- <Flex direction="col" gap="xs">
670
- <Text size="sm" tone="muted">
671
- disabled
672
- </Text>
673
- <Tree
674
- aria-label="読み取り専用ツリー"
675
- disabled
676
- treeData={repository}
677
- defaultExpandAll
678
- defaultValue="src/index.ts"
679
- />
680
- </Flex>
681
- <Flex direction="col" gap="xs">
682
- <Text size="sm" tone="muted">
683
- 空
684
- </Text>
685
- <Tree aria-label="空のツリー" treeData={[]} />
686
- </Flex>
687
- </Flex>
688
- </CardContent>
689
- </Card>
690
-
691
- <Card>
692
- <CardHeader>
693
- <CardTitle level={2}>キーボード(WAI-ARIA APG)</CardTitle>
694
- <CardDescription>
695
- ツリーに Tab で入るとタブストップはひとつだけ(roving
696
- tabindex)。あとは矢印で歩けます。 dir=&quot;rtl&quot; では → と ←
697
- の意味が入れ替わり、インデントも反転します。
698
- </CardDescription>
699
- </CardHeader>
700
- <CardContent>
701
- <Descriptions
702
- items={[
703
- { label: "↓ / ↑", children: "表示されている次/前のノードへ" },
704
- { label: "→", children: "閉じた枝を開く。開いていれば最初の子へ" },
705
- { label: "←", children: "開いた枝を閉じる。閉じていれば親へ" },
706
- { label: "Home / End", children: "表示されている最初/最後のノードへ" },
707
- {
708
- label: "Enter / Space",
709
- children: "選択(checkable のときはチェックを切り替え)",
710
- },
711
- { label: "*", children: "同じ階層の兄弟をすべて展開" },
712
- { label: "文字キー", children: "先頭一致で次のノードへジャンプ(type-ahead)" },
713
- {
714
- label: "Alt + ↑ / ↓ / ← / →",
715
- children: t("treeDocs.drag.keys"),
716
- },
717
- ]}
718
- />
719
- </CardContent>
720
- </Card>
721
- </Flex>
722
- </PageContainer>
723
- );
724
- }