@godxjp/ui 31.31.8 → 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 (727) 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/fonts/OFL.txt +93 -0
  318. package/dist/styles/form-layout.css +4 -0
  319. package/dist/styles/index.css +0 -2
  320. package/dist/styles/layers.json +44 -179
  321. package/dist/styles/text-layout.css +0 -15
  322. package/dist/styles.css +2 -0
  323. package/dist/themes/godx.css +43 -0
  324. package/dist/themes/godx.d.ts +13 -0
  325. package/dist/themes/godx.js +12 -0
  326. package/dist/tokens/components/feedback.css +0 -6
  327. package/dist/tokens/derived.css +23 -22
  328. package/dist/tokens/foundation.css +4 -6
  329. package/docs/COMPOSITION-VS-COMPONENT.md +58 -33
  330. package/docs/CONSUMER-RULES.md +1 -1
  331. package/docs/CUSTOMER-THEMING.md +17 -53
  332. package/docs/migrations/v32.md +98 -0
  333. package/package.json +58 -19
  334. package/scripts/_agent-setup.mjs +54 -3
  335. package/scripts/brand-accent.generated.mjs +15 -2
  336. package/scripts/cli.mjs +36 -11
  337. package/scripts/codemod.mjs +522 -0
  338. package/scripts/consumer-rule.md +21 -43
  339. package/scripts/postinstall.mjs +10 -47
  340. package/scripts/prune-css.mjs +1 -1
  341. package/scripts/ui-audit.mjs +5 -2
  342. package/dist/components/data-display/chat-bubble.d.ts +0 -30
  343. package/dist/components/data-display/chat-bubble.js +0 -229
  344. package/dist/components/data-display/hover-card.d.ts +0 -1
  345. package/dist/components/data-display/hover-card.js +0 -7
  346. package/dist/components/data-display/thought-chain.d.ts +0 -42
  347. package/dist/components/data-display/thought-chain.js +0 -177
  348. package/dist/components/data-display/thumbnail.d.ts +0 -37
  349. package/dist/components/data-display/thumbnail.js +0 -20
  350. package/dist/components/data-display/welcome.d.ts +0 -26
  351. package/dist/components/data-display/welcome.js +0 -37
  352. package/dist/components/data-entry/attachments.d.ts +0 -19
  353. package/dist/components/data-entry/attachments.js +0 -366
  354. package/dist/components/data-entry/chat-composer.d.ts +0 -51
  355. package/dist/components/data-entry/chat-composer.js +0 -200
  356. package/dist/components/data-entry/chat-suggestion.d.ts +0 -28
  357. package/dist/components/data-entry/chat-suggestion.js +0 -309
  358. package/dist/components/data-entry/tag-input.d.ts +0 -2
  359. package/dist/components/data-entry/tag-input.js +0 -5
  360. package/dist/components/feedback/banner.d.ts +0 -21
  361. package/dist/components/feedback/banner.js +0 -19
  362. package/dist/components/feedback/callout.d.ts +0 -23
  363. package/dist/components/feedback/callout.js +0 -42
  364. package/dist/components/layout/auth-shell.d.ts +0 -10
  365. package/dist/components/layout/auth-shell.js +0 -42
  366. package/dist/components/layout/space-compact.d.ts +0 -65
  367. package/dist/components/layout/space-compact.js +0 -52
  368. package/dist/components/navigation/conversations.d.ts +0 -39
  369. package/dist/components/navigation/conversations.js +0 -371
  370. package/dist/components/ui/accordion.d.ts +0 -51
  371. package/dist/components/ui/accordion.js +0 -254
  372. package/dist/components/ui/aspect-ratio.d.ts +0 -24
  373. package/dist/components/ui/aspect-ratio.js +0 -21
  374. package/dist/components/ui/avatar.d.ts +0 -16
  375. package/dist/components/ui/avatar.js +0 -115
  376. package/dist/components/ui/credential-reveal.d.ts +0 -9
  377. package/dist/components/ui/credential-reveal.js +0 -160
  378. package/dist/components/ui/hover-card.d.ts +0 -47
  379. package/dist/components/ui/hover-card.js +0 -205
  380. package/dist/components/ui/input-otp.d.ts +0 -48
  381. package/dist/components/ui/input-otp.js +0 -101
  382. package/dist/components/ui/password-input.d.ts +0 -38
  383. package/dist/components/ui/password-input.js +0 -60
  384. package/dist/components/ui/rating.d.ts +0 -38
  385. package/dist/components/ui/rating.js +0 -131
  386. package/dist/components/ui/segmented.d.ts +0 -94
  387. package/dist/components/ui/segmented.js +0 -108
  388. package/dist/components/ui/separator.d.ts +0 -25
  389. package/dist/components/ui/separator.js +0 -74
  390. package/dist/components/ui/toggle-group.d.ts +0 -108
  391. package/dist/components/ui/toggle-group.js +0 -194
  392. package/dist/components/ui/toggle.d.ts +0 -86
  393. package/dist/components/ui/toggle.js +0 -156
  394. package/docs/CANONICAL-CONTRACTS.md +0 -206
  395. package/docs/COMPONENTS.md +0 -163
  396. package/docs/DATETIME.md +0 -78
  397. package/docs/DEVELOPMENT.md +0 -269
  398. package/docs/FRAME-A11Y-CI.md +0 -287
  399. package/docs/FRAME-COVERAGE-LEDGER.md +0 -123
  400. package/docs/FRAME-COVERAGE-REPORT.md +0 -228
  401. package/docs/FRAME-COVERAGE-STANDARD.md +0 -65
  402. package/docs/FRAME-COVERAGE.md +0 -29
  403. package/docs/MEASUREMENT-CONTRACT.md +0 -109
  404. package/docs/PROPS-REGISTRY.md +0 -61
  405. package/docs/PROPS-VOCABULARY.md +0 -100
  406. package/docs/REGISTRY.md +0 -70
  407. package/docs/TESTING.md +0 -107
  408. package/docs/THEME-API-COVERAGE.md +0 -538
  409. package/docs/WHAT-BELONGS-HERE.md +0 -179
  410. package/docs/asset-modules.d.ts +0 -53
  411. package/docs/assets/cover-terrain.svg +0 -6
  412. package/docs/assets/portrait-amber.svg +0 -5
  413. package/docs/assets/portrait-clay.svg +0 -5
  414. package/docs/assets/portrait-indigo.svg +0 -5
  415. package/docs/assets/portrait-iris.svg +0 -5
  416. package/docs/assets/portrait-moss.svg +0 -5
  417. package/docs/assets/portrait-plum.svg +0 -5
  418. package/docs/assets/portrait-slate.svg +0 -5
  419. package/docs/assets/service-mark-rose.svg +0 -6
  420. package/docs/assets/service-mark-teal.svg +0 -5
  421. package/docs/assets/shot-landscape.svg +0 -12
  422. package/docs/assets/shot-portrait.svg +0 -10
  423. package/docs/assets/tcgm/card-1.svg +0 -1
  424. package/docs/assets/tcgm/card-2.svg +0 -1
  425. package/docs/assets/tcgm/card-3.svg +0 -1
  426. package/docs/assets/tcgm/card-4.svg +0 -1
  427. package/docs/assets/tcgm/card-5.svg +0 -1
  428. package/docs/assets/tcgm/card-6.svg +0 -1
  429. package/docs/assets/tcgm/hero-prism.svg +0 -1
  430. package/docs/assets/tcgm/scene-1.svg +0 -1
  431. package/docs/assets/tcgm/scene-2.svg +0 -1
  432. package/docs/assets/tcgm/scene-3.svg +0 -1
  433. package/docs/assets/tcgm/scene-4.svg +0 -1
  434. package/docs/assets/tcgm/scene-5.svg +0 -1
  435. package/docs/assets/tcgm/tcgm-lockup-color.svg +0 -1
  436. package/docs/assets/tcgm/tcgm-symbol-color.svg +0 -1
  437. package/docs/charts/cjk-category-axis.tsx +0 -81
  438. package/docs/charts/compact-bar-trend.tsx +0 -327
  439. package/docs/charts/size-tiers.tsx +0 -192
  440. package/docs/data-display/accordion.tsx +0 -99
  441. package/docs/data-display/avatar.tsx +0 -502
  442. package/docs/data-display/badge.tsx +0 -335
  443. package/docs/data-display/card/examples/detail-panel.tsx +0 -106
  444. package/docs/data-display/card/examples/tab-list.tsx +0 -97
  445. package/docs/data-display/card/index.md +0 -3
  446. package/docs/data-display/card/index.tsx +0 -390
  447. package/docs/data-display/carousel.tsx +0 -160
  448. package/docs/data-display/charts.tsx +0 -278
  449. package/docs/data-display/chat-bubble.tsx +0 -397
  450. package/docs/data-display/code-block.tsx +0 -188
  451. package/docs/data-display/collapsible.tsx +0 -162
  452. package/docs/data-display/credential-reveal.tsx +0 -148
  453. package/docs/data-display/data-table/examples/antd-parity.tsx +0 -257
  454. package/docs/data-display/data-table/examples/approval-queue.tsx +0 -212
  455. package/docs/data-display/data-table/examples/grid-features.tsx +0 -158
  456. package/docs/data-display/data-table/examples/list-page.tsx +0 -175
  457. package/docs/data-display/data-table/examples/selectable-inbox.tsx +0 -113
  458. package/docs/data-display/data-table/examples/server-paged.tsx +0 -179
  459. package/docs/data-display/data-table/examples/striped-list.tsx +0 -173
  460. package/docs/data-display/data-table/index.md +0 -9
  461. package/docs/data-display/data-table/index.tsx +0 -407
  462. package/docs/data-display/descriptions.tsx +0 -263
  463. package/docs/data-display/empty-state.tsx +0 -164
  464. package/docs/data-display/feature-list.tsx +0 -159
  465. package/docs/data-display/hover-card.tsx +0 -181
  466. package/docs/data-display/image.tsx +0 -170
  467. package/docs/data-display/legend.tsx +0 -158
  468. package/docs/data-display/list-row.tsx +0 -441
  469. package/docs/data-display/markdown.tsx +0 -86
  470. package/docs/data-display/marquee.tsx +0 -254
  471. package/docs/data-display/org-chart.tsx +0 -165
  472. package/docs/data-display/permission-matrix.tsx +0 -188
  473. package/docs/data-display/popover-touch.tsx +0 -27
  474. package/docs/data-display/popover.tsx +0 -331
  475. package/docs/data-display/progress.tsx +0 -162
  476. package/docs/data-display/prose.tsx +0 -169
  477. package/docs/data-display/qr-code.tsx +0 -68
  478. package/docs/data-display/scroll-area.tsx +0 -420
  479. package/docs/data-display/service-launcher-card.tsx +0 -445
  480. package/docs/data-display/stat-card.tsx +0 -354
  481. package/docs/data-display/swatch.tsx +0 -107
  482. package/docs/data-display/table.tsx +0 -362
  483. package/docs/data-display/text-diff.tsx +0 -89
  484. package/docs/data-display/thought-chain.tsx +0 -176
  485. package/docs/data-display/thumbnail.tsx +0 -128
  486. package/docs/data-display/timeline-grid.tsx +0 -119
  487. package/docs/data-display/timeline.tsx +0 -671
  488. package/docs/data-display/touch-actions.tsx +0 -36
  489. package/docs/data-display/tree.tsx +0 -724
  490. package/docs/data-display/welcome.tsx +0 -115
  491. package/docs/data-entry/attachments.tsx +0 -160
  492. package/docs/data-entry/block-editor.tsx +0 -105
  493. package/docs/data-entry/branch-scope-picker.tsx +0 -128
  494. package/docs/data-entry/calendar.tsx +0 -226
  495. package/docs/data-entry/cascader.tsx +0 -380
  496. package/docs/data-entry/chat-composer.tsx +0 -619
  497. package/docs/data-entry/chat-suggestion.tsx +0 -301
  498. package/docs/data-entry/checkbox.tsx +0 -256
  499. package/docs/data-entry/color-picker.tsx +0 -189
  500. package/docs/data-entry/command-palette.tsx +0 -179
  501. package/docs/data-entry/command.tsx +0 -341
  502. package/docs/data-entry/country-picker-recipe.tsx +0 -175
  503. package/docs/data-entry/date-picker.tsx +0 -452
  504. package/docs/data-entry/emoji-picker.tsx +0 -35
  505. package/docs/data-entry/form/examples/employee-settings.tsx +0 -267
  506. package/docs/data-entry/form/examples/invoice-form.tsx +0 -387
  507. package/docs/data-entry/form-dynamic-fields.tsx +0 -199
  508. package/docs/data-entry/form-field/examples/a11y-contract.tsx +0 -242
  509. package/docs/data-entry/form-field/examples/create-form.tsx +0 -107
  510. package/docs/data-entry/form-field/index.md +0 -8
  511. package/docs/data-entry/form-field/index.tsx +0 -337
  512. package/docs/data-entry/form-inertia.tsx +0 -80
  513. package/docs/data-entry/form-root.tsx +0 -112
  514. package/docs/data-entry/form.tsx +0 -1498
  515. package/docs/data-entry/input-otp.tsx +0 -258
  516. package/docs/data-entry/input.tsx +0 -796
  517. package/docs/data-entry/label.tsx +0 -102
  518. package/docs/data-entry/markdown-editor.tsx +0 -69
  519. package/docs/data-entry/number-input.tsx +0 -279
  520. package/docs/data-entry/password-input.tsx +0 -102
  521. package/docs/data-entry/password-strength.tsx +0 -99
  522. package/docs/data-entry/radio-group.tsx +0 -316
  523. package/docs/data-entry/rating.tsx +0 -91
  524. package/docs/data-entry/record-picker.tsx +0 -209
  525. package/docs/data-entry/search-input.tsx +0 -121
  526. package/docs/data-entry/segmented-in-filter-row.tsx +0 -60
  527. package/docs/data-entry/segmented.tsx +0 -300
  528. package/docs/data-entry/select-async-contracts.tsx +0 -108
  529. package/docs/data-entry/select-matrix.tsx +0 -209
  530. package/docs/data-entry/select.tsx +0 -547
  531. package/docs/data-entry/slider.tsx +0 -212
  532. package/docs/data-entry/sortable-list.tsx +0 -76
  533. package/docs/data-entry/switch.tsx +0 -314
  534. package/docs/data-entry/tag-input.tsx +0 -145
  535. package/docs/data-entry/textarea.tsx +0 -249
  536. package/docs/data-entry/time-picker.tsx +0 -187
  537. package/docs/data-entry/time-range-picker.tsx +0 -55
  538. package/docs/data-entry/toggle-count.tsx +0 -348
  539. package/docs/data-entry/toggle-group.tsx +0 -438
  540. package/docs/data-entry/toggle.tsx +0 -217
  541. package/docs/data-entry/transfer.tsx +0 -115
  542. package/docs/data-entry/tree-select.tsx +0 -204
  543. package/docs/data-entry/upload-crop-dialog.tsx +0 -109
  544. package/docs/data-entry/upload.tsx +0 -310
  545. package/docs/feedback/alert-dialog.tsx +0 -270
  546. package/docs/feedback/alert.tsx +0 -248
  547. package/docs/feedback/auth-expiry.tsx +0 -104
  548. package/docs/feedback/banner.tsx +0 -183
  549. package/docs/feedback/callout.tsx +0 -220
  550. package/docs/feedback/danger-confirm.tsx +0 -91
  551. package/docs/feedback/dialog-touch.tsx +0 -24
  552. package/docs/feedback/dialog.tsx +0 -373
  553. package/docs/feedback/sheet.tsx +0 -510
  554. package/docs/feedback/skeleton.tsx +0 -168
  555. package/docs/feedback/toast.tsx +0 -135
  556. package/docs/feedback/tooltip.tsx +0 -171
  557. package/docs/feedback/two-factor-setup.tsx +0 -68
  558. package/docs/foundation/_email-specimen.ts +0 -274
  559. package/docs/foundation/_theme-editor-scope.ts +0 -222
  560. package/docs/foundation/colors.tsx +0 -207
  561. package/docs/foundation/density.tsx +0 -242
  562. package/docs/foundation/email-tokens.tsx +0 -323
  563. package/docs/foundation/radius-shadow.tsx +0 -154
  564. package/docs/foundation/spacing.tsx +0 -216
  565. package/docs/foundation/theme-editor.tsx +0 -654
  566. package/docs/foundation/typography.tsx +0 -147
  567. package/docs/general/actions.tsx +0 -175
  568. package/docs/general/activity.tsx +0 -289
  569. package/docs/general/button/examples/destructive-confirm.tsx +0 -90
  570. package/docs/general/button/examples/form-actions.tsx +0 -87
  571. package/docs/general/button/examples/toolbar.tsx +0 -160
  572. package/docs/general/button/index.md +0 -16
  573. package/docs/general/button/index.tsx +0 -236
  574. package/docs/general/float-button.tsx +0 -133
  575. package/docs/general/icon.tsx +0 -217
  576. package/docs/general/logo.tsx +0 -194
  577. package/docs/general/reveal.tsx +0 -309
  578. package/docs/general/typography.tsx +0 -542
  579. package/docs/i18n/messages/en.json +0 -1715
  580. package/docs/i18n/messages/ja.json +0 -1708
  581. package/docs/i18n/messages/vi.json +0 -1708
  582. package/docs/layout/account-chip.tsx +0 -72
  583. package/docs/layout/admin-collection.tsx +0 -122
  584. package/docs/layout/affix.tsx +0 -209
  585. package/docs/layout/app-launcher.tsx +0 -211
  586. package/docs/layout/app-shell-arrangements.tsx +0 -225
  587. package/docs/layout/app-shell-narrow-bar.tsx +0 -205
  588. package/docs/layout/app-shell-states.tsx +0 -171
  589. package/docs/layout/app-shell.tsx +0 -395
  590. package/docs/layout/aspect-ratio.tsx +0 -135
  591. package/docs/layout/auth-account-summary.tsx +0 -103
  592. package/docs/layout/auth-divider.tsx +0 -28
  593. package/docs/layout/auth-footer.tsx +0 -37
  594. package/docs/layout/auth-identity.tsx +0 -70
  595. package/docs/layout/auth-recovery/examples/mfa-challenge.md +0 -41
  596. package/docs/layout/auth-recovery/examples/mfa-challenge.tsx +0 -254
  597. package/docs/layout/auth-recovery/examples/mobile-390.md +0 -25
  598. package/docs/layout/auth-recovery/examples/mobile-390.tsx +0 -82
  599. package/docs/layout/auth-recovery/examples/password-recovery.md +0 -24
  600. package/docs/layout/auth-recovery/examples/password-recovery.tsx +0 -197
  601. package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.md +0 -27
  602. package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.tsx +0 -156
  603. package/docs/layout/auth-recovery/index.md +0 -140
  604. package/docs/layout/auth-recovery/index.tsx +0 -96
  605. package/docs/layout/auth-shell-context.tsx +0 -103
  606. package/docs/layout/auth-shell-device.tsx +0 -112
  607. package/docs/layout/auth-shell-registration.tsx +0 -338
  608. package/docs/layout/auth-shell-variants.tsx +0 -143
  609. package/docs/layout/auth-shell.tsx +0 -59
  610. package/docs/layout/auth-stack.tsx +0 -40
  611. package/docs/layout/centered-shell.tsx +0 -102
  612. package/docs/layout/draggable-panel.tsx +0 -127
  613. package/docs/layout/error-surface/examples/application-403.tsx +0 -84
  614. package/docs/layout/error-surface/examples/application-404.tsx +0 -77
  615. package/docs/layout/error-surface/examples/system-500.tsx +0 -47
  616. package/docs/layout/error-surface/examples/system-503.tsx +0 -48
  617. package/docs/layout/error-surface/index.md +0 -153
  618. package/docs/layout/error-surface/index.tsx +0 -239
  619. package/docs/layout/flex.tsx +0 -444
  620. package/docs/layout/legal-document-shell/_data.ts +0 -110
  621. package/docs/layout/legal-document-shell/examples/desktop-1440.md +0 -12
  622. package/docs/layout/legal-document-shell/examples/desktop-1440.tsx +0 -83
  623. package/docs/layout/legal-document-shell/examples/mobile-390.md +0 -22
  624. package/docs/layout/legal-document-shell/examples/mobile-390.tsx +0 -70
  625. package/docs/layout/legal-document-shell/examples/tablet-1024.md +0 -3
  626. package/docs/layout/legal-document-shell/examples/tablet-1024.tsx +0 -84
  627. package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.md +0 -18
  628. package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.tsx +0 -61
  629. package/docs/layout/legal-document-shell/index.md +0 -51
  630. package/docs/layout/legal-document-shell/index.tsx +0 -101
  631. package/docs/layout/masonry.tsx +0 -291
  632. package/docs/layout/master-detail.tsx +0 -390
  633. package/docs/layout/mobile-shell.tsx +0 -106
  634. package/docs/layout/nav-list.tsx +0 -584
  635. package/docs/layout/org-switcher.tsx +0 -131
  636. package/docs/layout/page-container.tsx +0 -1020
  637. package/docs/layout/page-cover.tsx +0 -56
  638. package/docs/layout/resizable-panel.tsx +0 -419
  639. package/docs/layout/responsive-grid.tsx +0 -403
  640. package/docs/layout/separator.tsx +0 -327
  641. package/docs/layout/service-role-panel.tsx +0 -144
  642. package/docs/layout/sidebar.tsx +0 -689
  643. package/docs/layout/space-compact.tsx +0 -202
  644. package/docs/layout/split-pane.tsx +0 -532
  645. package/docs/layout/topbar-item.tsx +0 -233
  646. package/docs/layout/topbar.tsx +0 -360
  647. package/docs/navigation/anchor.tsx +0 -295
  648. package/docs/navigation/app-setting-picker.tsx +0 -178
  649. package/docs/navigation/app-setting-toggle.tsx +0 -111
  650. package/docs/navigation/breadcrumb.tsx +0 -207
  651. package/docs/navigation/card-tabs.tsx +0 -344
  652. package/docs/navigation/conversations.tsx +0 -176
  653. package/docs/navigation/dropdown-menu.tsx +0 -345
  654. package/docs/navigation/filter-bar.tsx +0 -247
  655. package/docs/navigation/mega-menu-panel.tsx +0 -86
  656. package/docs/navigation/mega-menu.tsx +0 -254
  657. package/docs/navigation/pagination.tsx +0 -293
  658. package/docs/navigation/steps.tsx +0 -315
  659. package/docs/navigation/tabs-rtl.tsx +0 -28
  660. package/docs/navigation/tabs.tsx +0 -755
  661. package/docs/navigation/toolbar.tsx +0 -347
  662. package/docs/providers/app-provider.tsx +0 -191
  663. package/docs/providers/format-date.tsx +0 -230
  664. package/docs/providers/theme-scope.tsx +0 -186
  665. package/docs/query/button-refetch.tsx +0 -161
  666. package/docs/query/data-state.tsx +0 -262
  667. package/docs/query/infinite-query-state.tsx +0 -97
  668. package/docs/query/mutation-feedback.tsx +0 -128
  669. package/docs/query/touch-actions.tsx +0 -68
  670. package/docs/react-router/prefetch-link.tsx +0 -262
  671. package/docs/roadmap/ai-chat-components.md +0 -206
  672. package/docs/roadmap/antd-parity.md +0 -155
  673. package/docs/roadmap/badge-tag-chip-count.md +0 -172
  674. package/docs/roadmap/list-masonry.md +0 -159
  675. package/docs/roadmap/parity-audit-data-display-feedback.md +0 -567
  676. package/docs/roadmap/parity-audit-data-entry.md +0 -368
  677. package/docs/roadmap/parity-audit-layout-navigation-general.md +0 -459
  678. package/docs/roadmap/parity-backlog.md +0 -77
  679. package/docs/roadmap/tree-components.md +0 -151
  680. package/docs/roadmap/website-components.md +0 -813
  681. package/docs/showcase/acme-portal.tsx +0 -461
  682. package/docs/showcase/acme-website.tsx +0 -499
  683. package/docs/showcase/caimono-price-comparison.tsx +0 -919
  684. package/docs/showcase/case1-warehouse-dashboard.tsx +0 -358
  685. package/docs/showcase/case2-employee-me.tsx +0 -438
  686. package/docs/showcase/case3-approval-workflow.tsx +0 -531
  687. package/docs/showcase/case4-login.tsx +0 -312
  688. package/docs/showcase/case5-shift-calendar.tsx +0 -702
  689. package/docs/showcase/case6-agency-handy.tsx +0 -1120
  690. package/docs/showcase/futurelastic-web.tsx +0 -441
  691. package/docs/showcase/marketing-page.tsx +0 -895
  692. package/docs/showcase/org-switcher.tsx +0 -320
  693. package/docs/showcase/permission-matrix.tsx +0 -354
  694. package/docs/showcase/public-landing.tsx +0 -210
  695. package/docs/showcase/settings-account-sections.tsx +0 -559
  696. package/docs/showcase/settings-security-mfa.tsx +0 -145
  697. package/docs/showcase/table-approval-queue.tsx +0 -199
  698. package/docs/showcase/table-bulk-actions.tsx +0 -468
  699. package/docs/showcase/table-compact-kintone.tsx +0 -438
  700. package/docs/showcase/table-conditional-format.tsx +0 -367
  701. package/docs/showcase/table-crud-list.tsx +0 -544
  702. package/docs/showcase/table-density.tsx +0 -349
  703. package/docs/showcase/table-expandable-rows.tsx +0 -496
  704. package/docs/showcase/table-filter-chips.tsx +0 -468
  705. package/docs/showcase/table-footer-totals.tsx +0 -328
  706. package/docs/showcase/table-grouped-subtotals.tsx +0 -398
  707. package/docs/showcase/table-master-detail.tsx +0 -482
  708. package/docs/showcase/table-pagination.tsx +0 -409
  709. package/docs/showcase/table-states.tsx +0 -371
  710. package/docs/showcase/table-sticky-columns.tsx +0 -377
  711. package/docs/showcase/table-tree-rows.tsx +0 -451
  712. package/docs/showcase/table-view-tabs.tsx +0 -488
  713. package/docs/showcase/tcgm-website.tsx +0 -1047
  714. package/docs/showcase/tenant-brand-color.tsx +0 -338
  715. package/docs/showcase/theme-customization.tsx +0 -1292
  716. package/docs/showcase/theme-lab.tsx +0 -2125
  717. package/docs/themes/flat.css +0 -466
  718. package/docs/themes/glassmorphism.css +0 -960
  719. package/docs/themes/index.ts +0 -219
  720. package/docs/themes/neubrutalism.css +0 -481
  721. /package/dist/components/navigation/{filter-bar.d.ts → toolbar.d.ts} +0 -0
  722. /package/dist/components/navigation/{filter-bar.js → toolbar.js} +0 -0
  723. /package/dist/{components/data-display → lab}/carousel.d.ts +0 -0
  724. /package/dist/{components/data-entry → lab}/emoji-data.d.ts +0 -0
  725. /package/dist/{components/data-entry → lab}/emoji-data.js +0 -0
  726. /package/dist/{components/data-display → lab}/marquee-reveal.d.ts +0 -0
  727. /package/dist/{components/data-display → lab}/marquee-reveal.js +0 -0
@@ -1,222 +0,0 @@
1
- /**
2
- * What the Theme Editor page needs that is NOT React: the repo's own brand derivation, the two
3
- * stylesheet facts it takes as arguments, and the ONE style object that makes a previewed seed
4
- * actually reach the components under it.
5
- *
6
- * `deriveBrand` is `scripts/gen-brand.mjs`'s body (src/tokens/__tests__/brand-derivation.ts).
7
- * Importing it — rather than porting it — is why the page's export and `pnpm gen:brand` emit the
8
- * same bytes for the same hex. `wcag-contrast.ts`'s own opening line says why there is one copy of
9
- * the luminance formula; this is the same argument one level up.
10
- */
11
- import type { CSSProperties } from "react";
12
-
13
- import {
14
- asTriplet,
15
- deriveBrand,
16
- triplet,
17
- type BrandChannels,
18
- type BrandTheme,
19
- type Hsl,
20
- } from "../../src/tokens/__tests__/brand-derivation";
21
-
22
- export {
23
- AA_TEXT,
24
- NON_TEXT,
25
- asTriplet,
26
- contrast,
27
- deriveBrand,
28
- hslToRgb,
29
- parseHex,
30
- toHex,
31
- toHsl,
32
- round,
33
- } from "../../src/tokens/__tests__/brand-derivation";
34
- export type {
35
- Brand,
36
- BrandChannels,
37
- BrandTheme,
38
- ContrastRow,
39
- Hsl,
40
- } from "../../src/tokens/__tests__/brand-derivation";
41
-
42
- /* ── what the stylesheet says, asked of the browser rather than copied here ─────────────────── */
43
-
44
- /**
45
- * `gen:brand` reads `--background` and the three `-channels` expressions out of `foundation.css`
46
- * and `derived.css` with `node:fs`. A page has no filesystem, and a literal copied into this file
47
- * would be a third place the canvas colour lives — stale the first time someone retunes the spine.
48
- * So the page asks the DOCUMENT, which is the same declarations after the same cascade.
49
- *
50
- * The CANVASES come from the CSSOM rather than `getComputedStyle`, because the page needs BOTH at
51
- * once and an element can only be in one theme at a time: read live, a page rendered under
52
- * `data-theme="dark"` would report the dark canvas as the light one and the whole dark-seed search
53
- * would target the wrong number, silently. The CSSOM carries both declarations side by side no
54
- * matter which theme is on screen.
55
- *
56
- * The CHANNELS are the opposite case: `--primary-hover-darken-channels` and its three siblings are
57
- * declared once at `:root` and never re-scoped (`.dark` only repoints `--primary-hover-channels`
58
- * AT one of them), so a computed read is correct under any theme and is one line instead of a walk.
59
- */
60
- export type ThemeSpine = { lightCanvas: Hsl; darkCanvas: Hsl; channels: BrandChannels };
61
-
62
- /** Every style rule in the document, walking into `@layer` / `@media` / `@supports` and nesting. */
63
- function* styleRules(rules: CSSRuleList): Generator<CSSStyleRule> {
64
- for (const rule of Array.from(rules)) {
65
- if ("selectorText" in rule) yield rule as CSSStyleRule;
66
- const nested = (rule as CSSGroupingRule).cssRules;
67
- if (nested) yield* styleRules(nested);
68
- }
69
- }
70
-
71
- /** The LAST `--background` declared by a rule this selector test accepts — cascade order. */
72
- function canvasFrom(accepts: (selector: string) => boolean): Hsl | null {
73
- let found: Hsl | null = null;
74
- for (const sheet of Array.from(document.styleSheets)) {
75
- let rules: CSSRuleList;
76
- try {
77
- rules = sheet.cssRules;
78
- } catch {
79
- /* A cross-origin sheet refuses `cssRules`. Ours are same-origin; skip anything else. */
80
- continue;
81
- }
82
- for (const rule of styleRules(rules)) {
83
- if (!accepts(rule.selectorText)) continue;
84
- const value = rule.style.getPropertyValue("--background").trim();
85
- if (!value) continue;
86
- try {
87
- found = triplet(value);
88
- } catch {
89
- /* Not a plain `H S% L%` triple — not a canvas this derivation can use. */
90
- }
91
- }
92
- }
93
- return found;
94
- }
95
-
96
- /**
97
- * The probe fallback, for the one case the CSSOM cannot answer: a sheet the document can paint from
98
- * but not read. It costs a layout, so it only runs when the walk came back empty.
99
- */
100
- function canvasByProbe(dark: boolean): Hsl | null {
101
- const probe = document.createElement("div");
102
- if (dark) probe.className = "dark";
103
- document.body.append(probe);
104
- try {
105
- const value = getComputedStyle(probe).getPropertyValue("--background").trim();
106
- return value ? triplet(value) : null;
107
- } catch {
108
- return null;
109
- } finally {
110
- probe.remove();
111
- }
112
- }
113
-
114
- const channel = (name: string) =>
115
- getComputedStyle(document.documentElement).getPropertyValue(name).trim();
116
-
117
- /** The spine this document is actually painting, or `null` when it cannot be read at all. */
118
- export function readThemeSpine(): ThemeSpine | null {
119
- const lightCanvas = canvasFrom((s) => s.trim() === ":root") ?? canvasByProbe(false);
120
- const darkCanvas = canvasFrom((s) => /\[data-theme=["']?dark/.test(s)) ?? canvasByProbe(true);
121
- const channels: BrandChannels = {
122
- hoverDarken: channel("--primary-hover-darken-channels"),
123
- activeDarken: channel("--primary-active-darken-channels"),
124
- hoverLighten: channel("--primary-hover-lighten-channels"),
125
- };
126
- if (!lightCanvas || !darkCanvas) return null;
127
- if (!channels.hoverDarken || !channels.activeDarken || !channels.hoverLighten) return null;
128
- return { lightCanvas, darkCanvas, channels };
129
- }
130
-
131
- /* ── the scope a preview pane declares ──────────────────────────────────────────────────────── */
132
-
133
- /**
134
- * THE THREE TOKENS `gen:brand` EMITS ARE THE THREE A SCOPE MUST DECLARE, and that is not a
135
- * coincidence — it is the freeze rule (docs/TOKENS.md) read from the other end.
136
- *
137
- * `--primary` and `--primary-foreground` are ordinary roles: declare them on the pane and every
138
- * descendant paints from them, including `--primary-hover` and `--text-link`, which are `initial`
139
- * knobs whose defaults re-resolve at the element that paints (gh#678, gh#664). Writing THOSE here
140
- * is the drift `gen:brand` refuses to emit, so this does not write them either.
141
- *
142
- * `--ring` is the one that bites. `derived.css` declares `--ring: var(--primary)` — and a `var()`
143
- * substitutes where it is DECLARED, so at `:root` it computed against the package's own seed and
144
- * inherits that frozen answer into every subtree. The dark pane escapes by accident (it carries
145
- * `.dark`, and `derived.css` re-declares `--ring: var(--primary)` in that block too, which
146
- * re-substitutes on the pane); the LIGHT pane does not, and a focus ring in the old brand colour
147
- * on a re-themed button is exactly the defect. `derived.css` says so in as many words: "a
148
- * `--primary` scoped BELOW `<html>` does not reach `--ring` … a nested scope sets `--ring`
149
- * itself". So both panes set it, which is also what a consumer's `:root` gets from `gen:brand`.
150
- *
151
- * The `-channels` PAIR is written only when the seed's label runs against the theme's default,
152
- * because that is the one thing CSS cannot infer: the label decides which way a state steps, and
153
- * only the author knows the label. It is a role-mirror, so it is written as `var(--…-channels)`
154
- * and never as a resolved literal.
155
- */
156
- export function previewScope(theme: BrandTheme): CSSProperties {
157
- const scope: Record<string, string> = {
158
- "--primary": asTriplet(theme.seed),
159
- "--primary-foreground": asTriplet(theme.label),
160
- "--ring": asTriplet(theme.seed),
161
- };
162
- if (theme.repointsChannels) {
163
- scope["--primary-hover-channels"] = `var(--primary-hover-${theme.polarity}-channels)`;
164
- scope["--primary-active-channels"] = `var(--primary-active-${theme.polarity}-channels)`;
165
- }
166
- return scope as CSSProperties;
167
- }
168
-
169
- /* ── the seeds a demo must not avoid ────────────────────────────────────────────────────────── */
170
-
171
- /**
172
- * AN EDITOR THAT ONLY DEMOS A NICE BLUE PROVES NOTHING. Each of these is here because it produces
173
- * an answer the happy path hides; `hex` is the only input, everything else is measured.
174
- */
175
- export type SeedPreset = {
176
- id: "godx" | "blue" | "very-light" | "very-dark" | "sunflower";
177
- hex: string;
178
- };
179
-
180
- export const SEED_PRESETS: SeedPreset[] = [
181
- /* The package's own `--primary`: the export must reproduce foundation.css's light block. */
182
- { id: "godx", hex: "#7A00FF" },
183
- /* An ordinary, well-behaved brand — every row clears, so a passing readout is visible too. */
184
- { id: "blue", hex: "#2563EB" },
185
- /* Near-white: the label flips to black and the fill cannot clear 3:1 on a near-white canvas. */
186
- { id: "very-light", hex: "#FFF9C4" },
187
- /* Near-black: the dark-seed search runs all the way to pure white to hold parity. */
188
- { id: "very-dark", hex: "#0B0B14" },
189
- /* A dark label in light and a light label in dark — the seed that repoints the `-channels`
190
- * pair in BOTH theme blocks, which nothing else here exercises. */
191
- { id: "sunflower", hex: "#F5D60A" },
192
- ];
193
-
194
- /** One place that knows how a hex becomes a brand, so the page never calls `deriveBrand` twice. */
195
- export function brandFor(
196
- spine: ThemeSpine,
197
- hex: string,
198
- name: string,
199
- foreground: string | null,
200
- darkLightness: number | null,
201
- ) {
202
- return deriveBrand({ hex, name, foreground, darkLightness, ...spine });
203
- }
204
-
205
- /**
206
- * THE COMMAND THAT REPRODUCES THIS EXPORT, or `null` when nothing does.
207
- *
208
- * The seed and the forced label are both `gen:brand` flags, so those exports are byte-identical to
209
- * what the CLI writes and the page can say which command to run. An AUTHORED dark lightness is
210
- * not: the generator searches for parity and has no flag to override it, so the page has to stop
211
- * claiming agreement rather than print a command that emits something else.
212
- */
213
- export function genBrandCommand(
214
- hex: string,
215
- name: string,
216
- foreground: string | null,
217
- darkLightnessOverridden: boolean,
218
- ): string | null {
219
- if (darkLightnessOverridden) return null;
220
- const flags = foreground ? ` --foreground '${foreground}'` : "";
221
- return `pnpm gen:brand '${hex}' --name ${name}${flags}`;
222
- }
@@ -1,207 +0,0 @@
1
- import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@godxjp/ui/data-display";
2
- import { Text } from "@godxjp/ui/general";
3
- import { Flex, PageContainer, ResponsiveGrid } from "@godxjp/ui/layout";
4
-
5
- /**
6
- * Colors · design-token foundation. Every swatch is a real semantic Tailwind
7
- * utility wired to the reference-design token (@theme in src/styles/index.css); no raw
8
- * hex, no raw palette. Composed only from real @godxjp/ui components.
9
- */
10
- const surfaces = [
11
- { cls: "bg-background text-foreground", token: "--background", role: "page" },
12
- { cls: "bg-card text-card-foreground", token: "--card", role: "raised surface" },
13
- { cls: "bg-popover text-popover-foreground", token: "--popover", role: "overlay surface" },
14
- { cls: "bg-secondary text-secondary-foreground", token: "--secondary", role: "muted fill" },
15
- { cls: "bg-muted text-muted-foreground", token: "--muted", role: "muted" },
16
- { cls: "bg-accent text-accent-foreground", token: "--accent", role: "hover" },
17
- ];
18
-
19
- // Structural neutrals · hairlines, field borders, focus ring. Shown as fills so
20
- // the named token is visible (in practice they paint borders/outlines, not areas).
21
- const structural = [
22
- { cls: "bg-border", token: "--border", role: "hairline / divider" },
23
- { cls: "bg-input", token: "--input", role: "field border" },
24
- { cls: "bg-ring", token: "--ring", role: "focus ring" },
25
- ];
26
-
27
- const status = [
28
- { cls: "bg-primary text-primary-foreground", token: "--primary", role: "brand action" },
29
- { cls: "bg-success text-success-foreground", token: "--success", role: "若竹 success" },
30
- { cls: "bg-warning text-warning-foreground", token: "--warning", role: "山吹 warning" },
31
- { cls: "bg-info text-info-foreground", token: "--info", role: "群青 info" },
32
- { cls: "bg-attention text-attention-foreground", token: "--attention", role: "朱 attention" },
33
- { cls: "bg-destructive text-destructive-foreground", token: "--destructive", role: "茜 danger" },
34
- ];
35
-
36
- const waIro = [
37
- { cls: "bg-wa-ai", token: "--wa-ai", role: "藍 indigo" },
38
- { cls: "bg-wa-gunjo", token: "--wa-gunjo", role: "群青 ultramarine" },
39
- { cls: "bg-wa-ruri", token: "--wa-ruri", role: "瑠璃 lapis" },
40
- { cls: "bg-wa-kon", token: "--wa-kon", role: "紺 navy" },
41
- { cls: "bg-wa-wakatake", token: "--wa-wakatake", role: "若竹 young bamboo" },
42
- { cls: "bg-wa-moegi", token: "--wa-moegi", role: "萌葱 spring green" },
43
- { cls: "bg-wa-yamabuki", token: "--wa-yamabuki", role: "山吹 mountain yellow" },
44
- { cls: "bg-wa-shu", token: "--wa-shu", role: "朱 vermilion" },
45
- { cls: "bg-wa-akane", token: "--wa-akane", role: "茜 madder" },
46
- { cls: "bg-wa-enji", token: "--wa-enji", role: "臙脂 cochineal" },
47
- { cls: "bg-wa-sakura", token: "--wa-sakura", role: "桜 cherry (soft bg)" },
48
- { cls: "bg-wa-sumi", token: "--wa-sumi", role: "墨 ink" },
49
- { cls: "bg-wa-nezu", token: "--wa-nezu", role: "鼠 mouse grey" },
50
- ];
51
-
52
- // Chart accents · neutral decorative primitives for series colour, NOT business
53
- // semantics. Wired to --color-chart-1…6 (bg-chart-N utilities).
54
- const charts = [
55
- { cls: "bg-chart-1", token: "--chart-1", role: "series 1" },
56
- { cls: "bg-chart-2", token: "--chart-2", role: "series 2" },
57
- { cls: "bg-chart-3", token: "--chart-3", role: "series 3" },
58
- { cls: "bg-chart-4", token: "--chart-4", role: "series 4" },
59
- { cls: "bg-chart-5", token: "--chart-5", role: "series 5" },
60
- { cls: "bg-chart-6", token: "--chart-6", role: "series 6" },
61
- ];
62
-
63
- type Swatch = { cls: string; token: string; role: string };
64
-
65
- /** One swatch tile: a token-coloured box (with foreground text when paired) + its token name + role. */
66
- function SwatchTile({ swatch, text }: { swatch: Swatch; text?: boolean }) {
67
- return (
68
- <Flex direction="col" gap="xs">
69
- {/* ui-audit-disable-next-line no-hand-rolled-surface no-utility-layout no-utility-spacing — a swatch showing the token itself; the fill IS the subject */}
70
- <div className={`border-border flex h-14 items-end rounded-md border p-2 ${swatch.cls}`}>
71
- {text ? (
72
- /* `tone="inherit"` — the specimen's whole job is to show the token's PAIRED foreground,
73
- and every other tone is an absolute colour. Without it `Text` repainted itself in
74
- `--foreground` over `--primary` and measured 2.45:1 on this very page (gh#643). */
75
- <Text size="xs" mono tone="inherit" className="leading-none">
76
- Aa 亜
77
- </Text>
78
- ) : null}
79
- </div>
80
- <div>
81
- <Text as="div" size="xs" mono>
82
- {swatch.token}
83
- </Text>
84
- <Text as="div" size="xs" tone="muted">
85
- {swatch.role}
86
- </Text>
87
- </div>
88
- </Flex>
89
- );
90
- }
91
-
92
- /**
93
- * A token group rendered TWICE · light theme then a `.dark`-scoped copy · so a
94
- * single static screenshot proves both renditions defined in foundation.css.
95
- * Themed groups (`dark`) re-paint under the `.dark` wrapper; decorative groups
96
- * (wa-iro, chart) are theme-invariant and render once.
97
- */
98
- function SwatchGroup({ items, text, dark }: { items: Swatch[]; text?: boolean; dark?: boolean }) {
99
- const grid = (
100
- <ResponsiveGrid columns={{ sm: 2, md: 3, lg: 4 }}>
101
- {items.map((s) => (
102
- <SwatchTile key={s.token} swatch={s} text={text} />
103
- ))}
104
- </ResponsiveGrid>
105
- );
106
- if (!dark) return grid;
107
- return (
108
- <Flex direction="col" gap="md">
109
- <Flex direction="col" gap="sm">
110
- <Text as="div" size="xs" tone="muted" weight="medium">
111
- Light
112
- </Text>
113
- {grid}
114
- </Flex>
115
- {/* ui-audit-disable-next-line no-utility-spacing — a swatch showing the token itself; the fill IS the subject */}
116
- <Flex direction="col" gap="sm" className="bg-background text-foreground dark rounded-md p-3">
117
- <Text as="div" size="xs" tone="muted" weight="medium">
118
- Dark (.dark)
119
- </Text>
120
- <ResponsiveGrid columns={{ sm: 2, md: 3, lg: 4 }}>
121
- {items.map((s) => (
122
- <SwatchTile key={s.token} swatch={s} text={text} />
123
- ))}
124
- </ResponsiveGrid>
125
- </Flex>
126
- </Flex>
127
- );
128
- }
129
-
130
- export default function Demo() {
131
- return (
132
- <PageContainer
133
- title="Colors"
134
- subtitle="Semantic roles + 和色 (wa-iro) · OKLCH, 渋み (chroma ≤ 0.18)"
135
- >
136
- <Flex direction="col" gap="lg">
137
- <Card>
138
- <CardHeader>
139
- <CardTitle level={2}>Semantic surfaces</CardTitle>
140
- <CardDescription>
141
- Page / raised / overlay / muted neutrals. Use these; never invent a new grey. Each box
142
- shows its own foreground text token. Every role is redefined under .dark.
143
- </CardDescription>
144
- </CardHeader>
145
- <CardContent>
146
- <SwatchGroup items={surfaces} text dark />
147
- </CardContent>
148
- </Card>
149
-
150
- <Card>
151
- <CardHeader>
152
- <CardTitle level={2}>Structural neutrals</CardTitle>
153
- <CardDescription>
154
- Hairlines, field borders, focus ring. In practice these paint borders and outlines,
155
- not areas. They are shown as fills here so the named token is visible. Also themed
156
- under .dark.
157
- </CardDescription>
158
- </CardHeader>
159
- <CardContent>
160
- <SwatchGroup items={structural} dark />
161
- </CardContent>
162
- </Card>
163
-
164
- <Card>
165
- <CardHeader>
166
- <CardTitle level={2}>Brand & status</CardTitle>
167
- <CardDescription>
168
- Fixed semantic mapping: never substitute. primary = the single most important action;
169
- status is success / warning / info / attention / danger. Lifted for contrast under
170
- .dark.
171
- </CardDescription>
172
- </CardHeader>
173
- <CardContent>
174
- <SwatchGroup items={status} text dark />
175
- </CardContent>
176
- </Card>
177
-
178
- <Card>
179
- <CardHeader>
180
- <CardTitle level={2}>和色 wa-iro · decorative only</CardTitle>
181
- <CardDescription>
182
- Traditional Japanese accents for charts / tags / tenant theming. NEVER map a wa-iro
183
- hue to a semantic role beyond the five canonical ones above. Fixed hex ·
184
- theme-invariant.
185
- </CardDescription>
186
- </CardHeader>
187
- <CardContent>
188
- <SwatchGroup items={waIro} />
189
- </CardContent>
190
- </Card>
191
-
192
- <Card>
193
- <CardHeader>
194
- <CardTitle level={2}>Chart accents</CardTitle>
195
- <CardDescription>
196
- Series colours for data visualisation: neutral decorative primitives, NOT business
197
- semantics. Use bg-chart-1…6 in order; theme-invariant like wa-iro.
198
- </CardDescription>
199
- </CardHeader>
200
- <CardContent>
201
- <SwatchGroup items={charts} />
202
- </CardContent>
203
- </Card>
204
- </Flex>
205
- </PageContainer>
206
- );
207
- }
@@ -1,242 +0,0 @@
1
- import {
2
- Badge,
3
- Card,
4
- CardContent,
5
- CardDescription,
6
- CardHeader,
7
- CardTitle,
8
- DataTable,
9
- type ColumnDef,
10
- } from "@godxjp/ui/data-display";
11
- import {
12
- Checkbox,
13
- Field,
14
- Input,
15
- Select,
16
- SelectContent,
17
- SelectItem,
18
- SelectTrigger,
19
- SelectValue,
20
- Switch,
21
- } from "@godxjp/ui/data-entry";
22
- import { Button, Text } from "@godxjp/ui/general";
23
- import { Flex, PageContainer } from "@godxjp/ui/layout";
24
-
25
- /**
26
- * Density · design-token foundation. One knob (`<PageContainer density>`) swaps a
27
- * single CSS class (`.ui-density-compact|default|comfortable`) that retunes
28
- * --control-height, --control-padding-x, --checkbox-size, --switch-* and the φ
29
- * unit. The first card renders the SAME real controls inside each density-scoped
30
- * subtree so the retune is visible at rest. The DataTable owns a separate density
31
- * prop (--table-row-height / --table-cell-padding-y), shown in its own card.
32
- * Composed only from real @godxjp/ui components.
33
- */
34
-
35
- type Line = { id: string; item: string; qty: string };
36
-
37
- const lines: Line[] = [
38
- { id: "L-01", item: "ライセンス", qty: "12" },
39
- { id: "L-02", item: "保守費", qty: "1" },
40
- { id: "L-03", item: "初期構築", qty: "1" },
41
- ];
42
-
43
- const columns: ColumnDef<Line>[] = [
44
- { key: "id", header: "明細", width: "w-20" },
45
- { key: "item", header: "品目" },
46
- {
47
- key: "qty",
48
- header: "数量",
49
- align: "right",
50
- render: (row) => <Text tabular>{row.qty}</Text>,
51
- },
52
- ];
53
-
54
- /** The same real controls, rendered once per density column. */
55
- function DensitySample({ idPrefix }: { idPrefix: string }) {
56
- return (
57
- <Flex direction="col" gap="md">
58
- <Input defaultValue="株式会社ベトヤ" aria-label="取引先名" />
59
- <Select aria-label="状態" defaultValue="paid" name={`${idPrefix}-status`}>
60
- <SelectTrigger id={`${idPrefix}-status`}>
61
- <SelectValue placeholder="状態を選択" />
62
- </SelectTrigger>
63
- <SelectContent>
64
- <SelectItem value="draft">下書き</SelectItem>
65
- <SelectItem value="sent">送付済</SelectItem>
66
- <SelectItem value="paid">入金済</SelectItem>
67
- </SelectContent>
68
- </Select>
69
- <Flex direction="row" align="center" gap="md" wrap>
70
- <Field id={`${idPrefix}-tax`} label="税込表示">
71
- <Checkbox id={`${idPrefix}-tax`} defaultChecked />
72
- </Field>
73
- <Field id={`${idPrefix}-mail`} label="自動送信">
74
- <Switch id={`${idPrefix}-mail`} defaultChecked />
75
- </Field>
76
- </Flex>
77
- <Flex direction="row" align="center" gap="sm" wrap>
78
- <Button size="sm">保存</Button>
79
- <Button size="sm" variant="outline">
80
- 下書き
81
- </Button>
82
- <Button size="sm" variant="ghost" disabled>
83
- ロック中
84
- </Button>
85
- </Flex>
86
- </Flex>
87
- );
88
- }
89
-
90
- const density = [
91
- {
92
- cls: "ui-density-compact",
93
- label: "compact",
94
- role: "kintone 風の密なテーブル",
95
- },
96
- {
97
- cls: "ui-density-default",
98
- label: "default",
99
- role: "標準アプリ画面",
100
- },
101
- {
102
- cls: "ui-density-comfortable",
103
- label: "comfortable",
104
- role: "公開 / モバイル · WCAG タッチ floor",
105
- },
106
- ];
107
-
108
- export default function Demo() {
109
- return (
110
- <PageContainer
111
- title="Density"
112
- subtitle="One knob · <PageContainer density> · retunes controls, tables, checkbox/switch, φ unit"
113
- >
114
- <Flex direction="col" gap="lg">
115
- <Card>
116
- <CardHeader>
117
- <CardTitle level={2}>Same UI, three densities</CardTitle>
118
- <CardDescription>
119
- Set density once per page via {"<PageContainer density>"} · never the .ui-density-*
120
- classes directly. Flip the one prop and Input, Select, Checkbox, Switch and Button all
121
- re-tune their height, padding and the φ rhythm together. 44px (comfortable) is the
122
- WCAG / Digital Agency touch floor.
123
- </CardDescription>
124
- </CardHeader>
125
- <CardContent>
126
- {/* A STACK ON A PHONE, said with `direction` rather than left to `wrap`.
127
- `wrap` never fired here: each column carries `min-w-0 flex-1`, and an item that
128
- may shrink to nothing never reaches the wrap threshold — so at 375px this was
129
- three 92px columns, and the unbreakable `density="comfortable"` label painted
130
- 36px over its neighbour with no scrollport to reach it. */}
131
- <Flex direction={{ base: "col", md: "row" }} gap="lg" align="start" wrap>
132
- {density.map((d) => (
133
- <Flex key={d.cls} direction="col" gap="sm" className="min-w-0 flex-1 sm:min-w-72">
134
- <Flex direction="row" align="center" justify="between" gap="sm">
135
- <Text size="xs" mono>
136
- density=&quot;{d.label}&quot;
137
- </Text>
138
- {d.label === "default" && <Badge variant="secondary">default</Badge>}
139
- </Flex>
140
- <Text size="xs" tone="muted">
141
- {d.role}
142
- </Text>
143
- <div className={d.cls}>
144
- <DensitySample idPrefix={d.label} />
145
- </div>
146
- </Flex>
147
- ))}
148
- </Flex>
149
- </CardContent>
150
- </Card>
151
-
152
- <Card>
153
- <CardHeader>
154
- <CardTitle level={2}>Table row density (DataTable density)</CardTitle>
155
- <CardDescription>
156
- The DataTable owns its own density axis: density=&quot;compact&quot; vs
157
- density=&quot;comfortable&quot; swaps --table-row-height and --table-cell-padding-y.
158
- The density toggle in the table toolbar drives the same prop at runtime.
159
- </CardDescription>
160
- </CardHeader>
161
- <CardContent>
162
- {/* A STACK ON A PHONE, said with `direction` rather than left to `wrap`.
163
- `wrap` never fired here: each column carries `min-w-0 flex-1`, and an item that
164
- may shrink to nothing never reaches the wrap threshold — so at 375px this was
165
- three 92px columns, and the unbreakable `density="comfortable"` label painted
166
- 36px over its neighbour with no scrollport to reach it. */}
167
- <Flex direction={{ base: "col", md: "row" }} gap="lg" align="start" wrap>
168
- <Flex direction="col" gap="sm" className="min-w-0 flex-1 sm:min-w-72">
169
- <Text size="xs" mono>
170
- density=&quot;compact&quot;
171
- </Text>
172
- <Card>
173
- <CardContent flush>
174
- <DataTable
175
- data={lines}
176
- columns={columns}
177
- getRowId={(row) => row.id}
178
- density="compact"
179
- />
180
- </CardContent>
181
- </Card>
182
- </Flex>
183
- <Flex direction="col" gap="sm" className="min-w-0 flex-1 sm:min-w-72">
184
- <Text size="xs" mono>
185
- density=&quot;comfortable&quot;
186
- </Text>
187
- <Card>
188
- <CardContent flush>
189
- <DataTable
190
- data={lines}
191
- columns={columns}
192
- getRowId={(row) => row.id}
193
- density="comfortable"
194
- />
195
- </CardContent>
196
- </Card>
197
- </Flex>
198
- </Flex>
199
- </CardContent>
200
- </Card>
201
-
202
- <Card>
203
- <CardHeader>
204
- <CardTitle level={2}>Page-level knob (PageContainer density)</CardTitle>
205
- <CardDescription>
206
- In a real screen you pass density to the page shell once; this nested PageContainer is
207
- the comfortable knob applied to a whole form. Note the taller controls and looser φ
208
- rhythm versus the compact column above.
209
- </CardDescription>
210
- </CardHeader>
211
- <CardContent>
212
- <PageContainer
213
- density="comfortable"
214
- title="請求書を作成"
215
- subtitle="comfortable density · login / mobile surfaces"
216
- >
217
- <Flex direction="col" gap="md">
218
- <Input defaultValue="2024-04-12" aria-label="発行日" />
219
- <Select aria-label="通貨" defaultValue="JPY" name="page-currency">
220
- <SelectTrigger id="page-currency">
221
- <SelectValue placeholder="通貨を選択" />
222
- </SelectTrigger>
223
- <SelectContent>
224
- <SelectItem value="JPY">JPY 日本円</SelectItem>
225
- <SelectItem value="USD">USD 米ドル</SelectItem>
226
- </SelectContent>
227
- </Select>
228
- <Field id="page-terms" label="利用規約に同意する">
229
- <Checkbox id="page-terms" defaultChecked />
230
- </Field>
231
- <Flex direction="row" gap="sm" wrap>
232
- <Button>発行する</Button>
233
- <Button variant="outline">下書き保存</Button>
234
- </Flex>
235
- </Flex>
236
- </PageContainer>
237
- </CardContent>
238
- </Card>
239
- </Flex>
240
- </PageContainer>
241
- );
242
- }