@godxjp/ui 19.1.0 → 19.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (436) hide show
  1. package/README.md +25 -128
  2. package/dist/app/theme-axes.d.ts +4 -15
  3. package/dist/app/timezones.d.ts +1 -4
  4. package/dist/components/charts/area-chart.d.ts +2 -3
  5. package/dist/components/charts/bar-chart.d.ts +2 -3
  6. package/dist/components/charts/chart-frame.d.ts +7 -16
  7. package/dist/components/charts/chart-summary.d.ts +2 -2
  8. package/dist/components/charts/compact-bar-trend.d.ts +9 -24
  9. package/dist/components/charts/index.d.ts +1 -6
  10. package/dist/components/data-display/badge.d.ts +2 -12
  11. package/dist/components/data-display/card.d.ts +21 -41
  12. package/dist/components/data-display/carousel.d.ts +1 -2
  13. package/dist/components/data-display/code-block.d.ts +4 -0
  14. package/dist/components/data-display/code-block.js +24 -0
  15. package/dist/components/data-display/data-table.d.ts +15 -37
  16. package/dist/components/data-display/data-table.js +1 -3
  17. package/dist/components/data-display/descriptions.d.ts +2 -6
  18. package/dist/components/data-display/descriptions.js +0 -2
  19. package/dist/components/data-display/index.d.ts +4 -0
  20. package/dist/components/data-display/index.js +4 -0
  21. package/dist/components/data-display/list-row.d.ts +3 -22
  22. package/dist/components/data-display/permission-matrix.d.ts +7 -20
  23. package/dist/components/data-display/progress.d.ts +1 -1
  24. package/dist/components/data-display/prose.d.ts +4 -0
  25. package/dist/components/data-display/prose.js +20 -0
  26. package/dist/components/data-display/service-launcher-card.d.ts +3 -10
  27. package/dist/components/data-display/table.d.ts +20 -80
  28. package/dist/components/data-display/table.js +0 -3
  29. package/dist/components/data-display/timeline.d.ts +3 -5
  30. package/dist/components/data-entry/branch-scope-picker.d.ts +2 -19
  31. package/dist/components/data-entry/branch-scope-picker.js +0 -1
  32. package/dist/components/data-entry/calendar.d.ts +3 -2
  33. package/dist/components/data-entry/calendar.js +58 -3
  34. package/dist/components/data-entry/command-palette.d.ts +8 -22
  35. package/dist/components/data-entry/date-picker.d.ts +4 -5
  36. package/dist/components/data-entry/date-picker.js +6 -1
  37. package/dist/components/data-entry/date-range-picker.d.ts +1 -1
  38. package/dist/components/data-entry/date-range-picker.js +8 -3
  39. package/dist/components/data-entry/form-errors.d.ts +7 -18
  40. package/dist/components/data-entry/form-field.js +1 -5
  41. package/dist/components/data-entry/form.d.ts +1 -9
  42. package/dist/components/data-entry/input.d.ts +16 -14
  43. package/dist/components/data-entry/input.js +3 -0
  44. package/dist/components/data-entry/month-picker.js +2 -2
  45. package/dist/components/data-entry/month-range-picker.d.ts +4 -6
  46. package/dist/components/data-entry/month-range-picker.js +2 -2
  47. package/dist/components/data-entry/number-input.d.ts +1 -5
  48. package/dist/components/data-entry/number-input.js +1 -0
  49. package/dist/components/data-entry/radio.js +0 -1
  50. package/dist/components/data-entry/search-select.d.ts +2 -4
  51. package/dist/components/data-entry/select.d.ts +11 -6
  52. package/dist/components/data-entry/select.js +4 -2
  53. package/dist/components/data-entry/switch.js +0 -1
  54. package/dist/components/data-entry/textarea.d.ts +10 -16
  55. package/dist/components/data-entry/time-picker.d.ts +3 -5
  56. package/dist/components/data-entry/upload-types.d.ts +1 -5
  57. package/dist/components/data-entry/use-upload-draft.d.ts +0 -4
  58. package/dist/components/feedback/dialog.d.ts +6 -15
  59. package/dist/components/feedback/overlay-header-tone.d.ts +1 -1
  60. package/dist/components/feedback/sheet.d.ts +3 -10
  61. package/dist/components/feedback/sheet.js +1 -1
  62. package/dist/components/feedback/sonner.js +2 -3
  63. package/dist/components/general/activity.d.ts +4 -30
  64. package/dist/components/general/button.js +1 -10
  65. package/dist/components/general/logo.d.ts +6 -28
  66. package/dist/components/general/reveal.d.ts +3 -9
  67. package/dist/components/general/typography.d.ts +1 -3
  68. package/dist/components/layout/account-chip.d.ts +8 -0
  69. package/dist/components/layout/account-chip.js +45 -0
  70. package/dist/components/layout/auth-divider.d.ts +2 -9
  71. package/dist/components/layout/auth-shell.d.ts +1 -14
  72. package/dist/components/layout/breadcrumb.d.ts +1 -5
  73. package/dist/components/layout/centered-shell.d.ts +4 -18
  74. package/dist/components/layout/error-surface.d.ts +11 -28
  75. package/dist/components/layout/error-surface.js +4 -1
  76. package/dist/components/layout/index.d.ts +2 -0
  77. package/dist/components/layout/index.js +2 -0
  78. package/dist/components/layout/legal-document-shell.d.ts +5 -28
  79. package/dist/components/layout/master-detail.d.ts +2 -18
  80. package/dist/components/layout/page-container.js +0 -1
  81. package/dist/components/layout/responsive-grid.d.ts +6 -1
  82. package/dist/components/layout/responsive-grid.js +9 -2
  83. package/dist/components/layout/service-role-panel.d.ts +7 -19
  84. package/dist/components/layout/sidebar.d.ts +5 -27
  85. package/dist/components/layout/sidebar.js +0 -1
  86. package/dist/components/layout/split-pane.d.ts +0 -7
  87. package/dist/components/layout/topbar.d.ts +1 -14
  88. package/dist/components/navigation/app-setting-picker.js +1 -3
  89. package/dist/components/navigation/filter-bar.d.ts +1 -6
  90. package/dist/components/navigation/pagination-utils.d.ts +2 -12
  91. package/dist/components/navigation/tabs-scroll.d.ts +2 -36
  92. package/dist/components/navigation/tabs.js +4 -8
  93. package/dist/components/query/data-state.d.ts +2 -2
  94. package/dist/components/ui/credential-reveal.d.ts +1 -4
  95. package/dist/components/ui/hover-card.d.ts +1 -2
  96. package/dist/components/ui/separator.d.ts +2 -15
  97. package/dist/components/ui/toggle-group.d.ts +1 -5
  98. package/dist/components/ui/toggle.d.ts +6 -31
  99. package/dist/email/brand-mark.d.ts +6 -34
  100. package/dist/email/color.d.ts +7 -17
  101. package/dist/email/geometry.d.ts +4 -8
  102. package/dist/email/index.d.ts +4 -48
  103. package/dist/email/inline-style.d.ts +3 -9
  104. package/dist/email/urgency.d.ts +2 -7
  105. package/dist/form/form-context.d.ts +2 -5
  106. package/dist/form/form-root.d.ts +1 -2
  107. package/dist/i18n/messages/en.json +4 -0
  108. package/dist/i18n/messages/ja.json +4 -0
  109. package/dist/i18n/messages/vi.json +4 -0
  110. package/dist/inertia/index.d.ts +2 -10
  111. package/dist/lib/control-styles.d.ts +10 -21
  112. package/dist/lib/control-styles.js +4 -6
  113. package/dist/lib/datetime/format-date.d.ts +1 -4
  114. package/dist/lib/field-a11y.d.ts +11 -68
  115. package/dist/lib/field-a11y.js +0 -1
  116. package/dist/lib/format.d.ts +4 -8
  117. package/dist/lib/hooks.d.ts +6 -12
  118. package/dist/lib/permission-grid.d.ts +3 -18
  119. package/dist/lib/query-error.d.ts +3 -3
  120. package/dist/props/components/app.prop.d.ts +15 -38
  121. package/dist/props/components/charts.prop.d.ts +2 -3
  122. package/dist/props/components/data-display.prop.d.ts +48 -72
  123. package/dist/props/components/data-entry.prop.d.ts +35 -40
  124. package/dist/props/components/form.prop.d.ts +2 -6
  125. package/dist/props/components/general.prop.d.ts +11 -27
  126. package/dist/props/components/layout.prop.d.ts +89 -260
  127. package/dist/props/components/navigation.prop.d.ts +27 -42
  128. package/dist/props/registry.d.ts +31 -0
  129. package/dist/props/registry.js +33 -0
  130. package/dist/props/vocabulary/data.prop.d.ts +18 -49
  131. package/dist/props/vocabulary/index.d.ts +1 -1
  132. package/dist/props/vocabulary/interaction.prop.d.ts +10 -12
  133. package/dist/props/vocabulary/layout.prop.d.ts +8 -30
  134. package/dist/props/vocabulary/shared.prop.d.ts +3 -2
  135. package/dist/styles/alert-layout.css +1 -32
  136. package/dist/styles/badge-layout.css +4 -18
  137. package/dist/styles/base.css +14 -113
  138. package/dist/styles/card-layout.css +6 -128
  139. package/dist/styles/chart-layout.css +2 -17
  140. package/dist/styles/control.css +380 -458
  141. package/dist/styles/core.css +21 -0
  142. package/dist/styles/data-display-layout.css +175 -94
  143. package/dist/styles/data-entry-layout.css +0 -45
  144. package/dist/styles/density.css +1 -30
  145. package/dist/styles/dialog-layout.css +5 -69
  146. package/dist/styles/focus-ring.css +13 -87
  147. package/dist/styles/fonts.css +1 -31
  148. package/dist/styles/form-layout.css +7 -91
  149. package/dist/styles/index.css +2 -20
  150. package/dist/styles/layout.css +38 -456
  151. package/dist/styles/logo-layout.css +1 -35
  152. package/dist/styles/motion.css +3 -42
  153. package/dist/styles/navigation-layout.css +3 -50
  154. package/dist/styles/shell-layout.css +37 -403
  155. package/dist/styles/table-layout.css +16 -274
  156. package/dist/styles/text-layout.css +7 -21
  157. package/dist/styles/toggle.css +1 -23
  158. package/dist/theme/dxs.canonical.css +1 -55
  159. package/dist/theme/example.service.css +1 -26
  160. package/dist/theme/famgia.service.css +5 -15
  161. package/dist/tokens/axes.css +3 -40
  162. package/dist/tokens/base.css +1 -4
  163. package/dist/tokens/components/activity.css +6 -42
  164. package/dist/tokens/components/badge.css +4 -13
  165. package/dist/tokens/components/banner.css +4 -9
  166. package/dist/tokens/components/card.css +32 -88
  167. package/dist/tokens/components/chart.css +9 -26
  168. package/dist/tokens/components/control.css +37 -222
  169. package/dist/tokens/components/data-display.css +28 -79
  170. package/dist/tokens/components/data-entry.css +5 -19
  171. package/dist/tokens/components/descriptions.css +7 -27
  172. package/dist/tokens/components/email.css +38 -84
  173. package/dist/tokens/components/error-surface.css +2 -18
  174. package/dist/tokens/components/feedback.css +27 -124
  175. package/dist/tokens/components/form.css +13 -45
  176. package/dist/tokens/components/legal-document.css +16 -41
  177. package/dist/tokens/components/list-row.css +11 -36
  178. package/dist/tokens/components/logo.css +2 -57
  179. package/dist/tokens/components/navigation.css +16 -94
  180. package/dist/tokens/components/scroll-area.css +2 -18
  181. package/dist/tokens/components/separator.css +8 -30
  182. package/dist/tokens/components/sheet.css +3 -14
  183. package/dist/tokens/components/shell.css +53 -307
  184. package/dist/tokens/components/sidebar.css +5 -22
  185. package/dist/tokens/components/table.css +19 -140
  186. package/dist/tokens/components/toggle.css +3 -65
  187. package/dist/tokens/components/upload.css +7 -43
  188. package/dist/tokens/foundation.css +108 -383
  189. package/dist/tokens/semantic/layout.css +33 -207
  190. package/docs/CANONICAL-CONTRACTS.md +206 -0
  191. package/docs/COMPONENTS.md +157 -0
  192. package/docs/COMPOSITION-VS-COMPONENT.md +105 -0
  193. package/docs/CONSUMER-RULES.md +14 -0
  194. package/docs/CUSTOMER-THEMING.md +162 -0
  195. package/docs/DATETIME.md +69 -0
  196. package/docs/DEVELOPMENT.md +173 -0
  197. package/docs/FORMS.md +143 -0
  198. package/docs/FRAME-A11Y-CI.md +267 -0
  199. package/docs/FRAME-COVERAGE-LEDGER.md +123 -0
  200. package/docs/FRAME-COVERAGE-REPORT.md +140 -0
  201. package/docs/FRAME-COVERAGE-STANDARD.md +65 -0
  202. package/docs/FRAME-COVERAGE.md +29 -0
  203. package/docs/PROPS-REGISTRY.md +61 -0
  204. package/docs/PROPS-VOCABULARY.md +100 -0
  205. package/docs/README.md +60 -0
  206. package/docs/REGISTRY.md +70 -0
  207. package/docs/SPACING.md +56 -0
  208. package/docs/STANDARDS-vocabulary-tokens.md +48 -0
  209. package/docs/TESTING.md +98 -0
  210. package/docs/TOKENS.md +347 -0
  211. package/docs/asset-modules.d.ts +46 -0
  212. package/docs/assets/cover-terrain.svg +6 -0
  213. package/docs/assets/portrait-amber.svg +5 -0
  214. package/docs/assets/portrait-clay.svg +5 -0
  215. package/docs/assets/portrait-indigo.svg +5 -0
  216. package/docs/assets/portrait-iris.svg +5 -0
  217. package/docs/assets/portrait-moss.svg +5 -0
  218. package/docs/assets/portrait-plum.svg +5 -0
  219. package/docs/assets/portrait-slate.svg +5 -0
  220. package/docs/charts/compact-bar-trend.tsx +328 -0
  221. package/docs/charts/size-tiers.tsx +192 -0
  222. package/docs/data-display/accordion.tsx +99 -0
  223. package/docs/data-display/avatar.tsx +355 -0
  224. package/docs/data-display/badge.tsx +247 -0
  225. package/docs/data-display/card/examples/detail-panel.tsx +106 -0
  226. package/docs/data-display/card/index.md +3 -0
  227. package/docs/data-display/card/index.tsx +285 -0
  228. package/docs/data-display/carousel.tsx +156 -0
  229. package/docs/data-display/charts.tsx +198 -0
  230. package/docs/data-display/code-block.tsx +90 -0
  231. package/docs/data-display/collapsible.tsx +162 -0
  232. package/docs/data-display/credential-reveal.tsx +145 -0
  233. package/docs/data-display/data-table/examples/approval-queue.tsx +212 -0
  234. package/docs/data-display/data-table/examples/grid-features.tsx +158 -0
  235. package/docs/data-display/data-table/examples/list-page.tsx +175 -0
  236. package/docs/data-display/data-table/index.md +5 -0
  237. package/docs/data-display/data-table/index.tsx +295 -0
  238. package/docs/data-display/descriptions.tsx +143 -0
  239. package/docs/data-display/empty-state.tsx +164 -0
  240. package/docs/data-display/hover-card.tsx +181 -0
  241. package/docs/data-display/list-row.tsx +420 -0
  242. package/docs/data-display/permission-matrix.tsx +184 -0
  243. package/docs/data-display/popover-touch.tsx +27 -0
  244. package/docs/data-display/popover.tsx +245 -0
  245. package/docs/data-display/progress.tsx +84 -0
  246. package/docs/data-display/prose.tsx +105 -0
  247. package/docs/data-display/qr-code.tsx +68 -0
  248. package/docs/data-display/scroll-area.tsx +271 -0
  249. package/docs/data-display/service-launcher-card.tsx +145 -0
  250. package/docs/data-display/stat-card.tsx +99 -0
  251. package/docs/data-display/table.tsx +251 -0
  252. package/docs/data-display/timeline.tsx +112 -0
  253. package/docs/data-display/touch-actions.tsx +36 -0
  254. package/docs/data-display/tree-list.tsx +107 -0
  255. package/docs/data-entry/branch-scope-picker.tsx +123 -0
  256. package/docs/data-entry/calendar.tsx +180 -0
  257. package/docs/data-entry/cascader.tsx +378 -0
  258. package/docs/data-entry/checkbox.tsx +256 -0
  259. package/docs/data-entry/color-picker.tsx +117 -0
  260. package/docs/data-entry/command-palette.tsx +179 -0
  261. package/docs/data-entry/command.tsx +262 -0
  262. package/docs/data-entry/country-picker-recipe.tsx +170 -0
  263. package/docs/data-entry/date-picker.tsx +191 -0
  264. package/docs/data-entry/date-range-picker.tsx +149 -0
  265. package/docs/data-entry/form/examples/employee-settings.tsx +267 -0
  266. package/docs/data-entry/form/examples/invoice-form.tsx +387 -0
  267. package/docs/data-entry/form-field/examples/a11y-contract.tsx +240 -0
  268. package/docs/data-entry/form-field/examples/create-form.tsx +105 -0
  269. package/docs/data-entry/form-field/index.md +8 -0
  270. package/docs/data-entry/form-field/index.tsx +326 -0
  271. package/docs/data-entry/form-inertia.tsx +80 -0
  272. package/docs/data-entry/form-root.tsx +102 -0
  273. package/docs/data-entry/form.tsx +724 -0
  274. package/docs/data-entry/input-otp.tsx +231 -0
  275. package/docs/data-entry/input.tsx +114 -0
  276. package/docs/data-entry/label.tsx +100 -0
  277. package/docs/data-entry/month-picker.tsx +101 -0
  278. package/docs/data-entry/month-range-picker.tsx +115 -0
  279. package/docs/data-entry/number-input.tsx +240 -0
  280. package/docs/data-entry/password-input.tsx +106 -0
  281. package/docs/data-entry/password-strength.tsx +97 -0
  282. package/docs/data-entry/radio-group.tsx +95 -0
  283. package/docs/data-entry/rating.tsx +87 -0
  284. package/docs/data-entry/search-input.tsx +120 -0
  285. package/docs/data-entry/select-async-contracts.tsx +108 -0
  286. package/docs/data-entry/select-matrix.tsx +204 -0
  287. package/docs/data-entry/select.tsx +369 -0
  288. package/docs/data-entry/slider.tsx +130 -0
  289. package/docs/data-entry/switch.tsx +67 -0
  290. package/docs/data-entry/tag-input.tsx +108 -0
  291. package/docs/data-entry/textarea.tsx +209 -0
  292. package/docs/data-entry/time-picker.tsx +99 -0
  293. package/docs/data-entry/toggle-count.tsx +293 -0
  294. package/docs/data-entry/toggle-group.tsx +225 -0
  295. package/docs/data-entry/toggle.tsx +127 -0
  296. package/docs/data-entry/transfer.tsx +97 -0
  297. package/docs/data-entry/tree-select.tsx +204 -0
  298. package/docs/data-entry/upload.tsx +184 -0
  299. package/docs/feedback/alert-dialog.tsx +270 -0
  300. package/docs/feedback/alert.tsx +248 -0
  301. package/docs/feedback/banner.tsx +183 -0
  302. package/docs/feedback/danger-confirm.tsx +88 -0
  303. package/docs/feedback/dialog-touch.tsx +24 -0
  304. package/docs/feedback/dialog.tsx +193 -0
  305. package/docs/feedback/sheet.tsx +410 -0
  306. package/docs/feedback/skeleton.tsx +111 -0
  307. package/docs/feedback/toast.tsx +135 -0
  308. package/docs/feedback/tooltip.tsx +171 -0
  309. package/docs/feedback/two-factor-setup.tsx +68 -0
  310. package/docs/foundation/_email-specimen.ts +274 -0
  311. package/docs/foundation/colors.tsx +202 -0
  312. package/docs/foundation/density.tsx +232 -0
  313. package/docs/foundation/email-tokens.tsx +306 -0
  314. package/docs/foundation/radius-shadow.tsx +152 -0
  315. package/docs/foundation/spacing.tsx +211 -0
  316. package/docs/foundation/typography.tsx +147 -0
  317. package/docs/general/activity.tsx +224 -0
  318. package/docs/general/button/examples/destructive-confirm.tsx +90 -0
  319. package/docs/general/button/examples/form-actions.tsx +85 -0
  320. package/docs/general/button/examples/toolbar.tsx +160 -0
  321. package/docs/general/button/index.md +12 -0
  322. package/docs/general/button/index.tsx +211 -0
  323. package/docs/general/logo.tsx +131 -0
  324. package/docs/general/reveal.tsx +41 -0
  325. package/docs/general/typography.tsx +152 -0
  326. package/docs/layout/account-chip.tsx +72 -0
  327. package/docs/layout/admin-collection.tsx +122 -0
  328. package/docs/layout/app-shell.tsx +374 -0
  329. package/docs/layout/aspect-ratio.tsx +119 -0
  330. package/docs/layout/auth-account-summary.tsx +103 -0
  331. package/docs/layout/auth-divider.tsx +28 -0
  332. package/docs/layout/auth-footer.tsx +37 -0
  333. package/docs/layout/auth-identity.tsx +36 -0
  334. package/docs/layout/auth-recovery/examples/mfa-challenge.md +41 -0
  335. package/docs/layout/auth-recovery/examples/mfa-challenge.tsx +254 -0
  336. package/docs/layout/auth-recovery/examples/mobile-390.md +25 -0
  337. package/docs/layout/auth-recovery/examples/mobile-390.tsx +82 -0
  338. package/docs/layout/auth-recovery/examples/password-recovery.md +24 -0
  339. package/docs/layout/auth-recovery/examples/password-recovery.tsx +197 -0
  340. package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.md +27 -0
  341. package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.tsx +156 -0
  342. package/docs/layout/auth-recovery/index.md +140 -0
  343. package/docs/layout/auth-recovery/index.tsx +96 -0
  344. package/docs/layout/auth-shell-context.tsx +103 -0
  345. package/docs/layout/auth-shell-device.tsx +112 -0
  346. package/docs/layout/auth-shell-registration.tsx +335 -0
  347. package/docs/layout/auth-shell-variants.tsx +139 -0
  348. package/docs/layout/auth-shell.tsx +59 -0
  349. package/docs/layout/auth-stack.tsx +40 -0
  350. package/docs/layout/centered-shell.tsx +102 -0
  351. package/docs/layout/error-surface/examples/application-403.tsx +84 -0
  352. package/docs/layout/error-surface/examples/application-404.tsx +77 -0
  353. package/docs/layout/error-surface/examples/system-500.tsx +47 -0
  354. package/docs/layout/error-surface/examples/system-503.tsx +48 -0
  355. package/docs/layout/error-surface/index.md +153 -0
  356. package/docs/layout/error-surface/index.tsx +239 -0
  357. package/docs/layout/flex.tsx +262 -0
  358. package/docs/layout/legal-document-shell/_data.ts +110 -0
  359. package/docs/layout/legal-document-shell/examples/desktop-1440.md +12 -0
  360. package/docs/layout/legal-document-shell/examples/desktop-1440.tsx +83 -0
  361. package/docs/layout/legal-document-shell/examples/mobile-390.md +22 -0
  362. package/docs/layout/legal-document-shell/examples/mobile-390.tsx +70 -0
  363. package/docs/layout/legal-document-shell/examples/tablet-1024.md +3 -0
  364. package/docs/layout/legal-document-shell/examples/tablet-1024.tsx +84 -0
  365. package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.md +18 -0
  366. package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.tsx +61 -0
  367. package/docs/layout/legal-document-shell/index.md +51 -0
  368. package/docs/layout/legal-document-shell/index.tsx +101 -0
  369. package/docs/layout/master-detail.tsx +387 -0
  370. package/docs/layout/org-switcher.tsx +131 -0
  371. package/docs/layout/page-container.tsx +946 -0
  372. package/docs/layout/resizable-panel.tsx +419 -0
  373. package/docs/layout/responsive-grid.tsx +235 -0
  374. package/docs/layout/separator.tsx +327 -0
  375. package/docs/layout/service-role-panel.tsx +144 -0
  376. package/docs/layout/sidebar.tsx +586 -0
  377. package/docs/layout/split-pane.tsx +451 -0
  378. package/docs/layout/topbar.tsx +347 -0
  379. package/docs/navigation/app-setting-picker.tsx +141 -0
  380. package/docs/navigation/breadcrumb.tsx +128 -0
  381. package/docs/navigation/context-menu.tsx +117 -0
  382. package/docs/navigation/dropdown-menu.tsx +213 -0
  383. package/docs/navigation/filter-bar.tsx +227 -0
  384. package/docs/navigation/menubar.tsx +141 -0
  385. package/docs/navigation/navigation-menu.tsx +165 -0
  386. package/docs/navigation/pagination.tsx +241 -0
  387. package/docs/navigation/steps.tsx +263 -0
  388. package/docs/navigation/tabs-rtl.tsx +28 -0
  389. package/docs/navigation/tabs.tsx +308 -0
  390. package/docs/navigation/toolbar.tsx +339 -0
  391. package/docs/providers/app-provider.tsx +191 -0
  392. package/docs/providers/format-date.tsx +230 -0
  393. package/docs/query/button-refetch.tsx +160 -0
  394. package/docs/query/data-state.tsx +192 -0
  395. package/docs/query/infinite-query-state.tsx +93 -0
  396. package/docs/query/mutation-feedback.tsx +70 -0
  397. package/docs/query/prefetch-link.tsx +262 -0
  398. package/docs/query/touch-actions.tsx +68 -0
  399. package/docs/showcase/acme-portal.tsx +441 -0
  400. package/docs/showcase/acme-website.tsx +455 -0
  401. package/docs/showcase/case1-warehouse-dashboard.tsx +343 -0
  402. package/docs/showcase/case2-employee-me.tsx +441 -0
  403. package/docs/showcase/case3-approval-workflow.tsx +527 -0
  404. package/docs/showcase/case4-login.tsx +307 -0
  405. package/docs/showcase/case5-shift-calendar.tsx +795 -0
  406. package/docs/showcase/case6-agency-handy.tsx +1072 -0
  407. package/docs/showcase/futurelastic-web.tsx +390 -0
  408. package/docs/showcase/org-switcher.tsx +313 -0
  409. package/docs/showcase/permission-matrix.tsx +343 -0
  410. package/docs/showcase/public-landing.tsx +210 -0
  411. package/docs/showcase/settings-account-sections.tsx +559 -0
  412. package/docs/showcase/settings-security-mfa.tsx +145 -0
  413. package/docs/showcase/table-approval-queue.tsx +199 -0
  414. package/docs/showcase/table-bulk-actions.tsx +460 -0
  415. package/docs/showcase/table-compact-kintone.tsx +438 -0
  416. package/docs/showcase/table-conditional-format.tsx +367 -0
  417. package/docs/showcase/table-crud-list.tsx +544 -0
  418. package/docs/showcase/table-density.tsx +340 -0
  419. package/docs/showcase/table-expandable-rows.tsx +471 -0
  420. package/docs/showcase/table-filter-chips.tsx +461 -0
  421. package/docs/showcase/table-footer-totals.tsx +311 -0
  422. package/docs/showcase/table-grouped-subtotals.tsx +388 -0
  423. package/docs/showcase/table-master-detail.tsx +479 -0
  424. package/docs/showcase/table-pagination.tsx +320 -0
  425. package/docs/showcase/table-states.tsx +363 -0
  426. package/docs/showcase/table-sticky-columns.tsx +373 -0
  427. package/docs/showcase/table-tree-rows.tsx +444 -0
  428. package/docs/showcase/table-view-tabs.tsx +488 -0
  429. package/package.json +9 -11
  430. package/scripts/_agent-setup.mjs +16 -2
  431. package/scripts/audit-hook.mjs +3 -13
  432. package/scripts/init-agent-kit.mjs +1 -14
  433. package/scripts/postinstall.mjs +12 -12
  434. package/scripts/ui-audit.mjs +93 -31
  435. package/scripts/visual-audit-rules.mjs +51 -7
  436. package/scripts/visual-audit.mjs +118 -47
@@ -1,10 +1,4 @@
1
- /*
2
- * LOGO — the product brand-mark box (a glyph on the primary fill). Replaces the hand-rolled
3
- * `<span aria-hidden className="grid size-7 place-items-center rounded-md bg-primary …">g</span>`
4
- * repeated across app shells and topbars (issue #116): size/radius/font-size are tokens (rule #45),
5
- * colours read the primary role directly, and the type comes from a semantic class (not utilities
6
- * on a bare span, rule #46).
7
- */
1
+
8
2
  @layer components {
9
3
  .ui-logo {
10
4
  display: inline-grid;
@@ -39,31 +33,11 @@
39
33
  font-size: var(--logo-font-size-lg);
40
34
  }
41
35
 
42
- /* Identity fills — the IDENTITY role --brand (canonical GoDX emerald), NOT the --success STATUS
43
- * green: `tone="success"` names the semantic slot, not the status role, and a badge/progress
44
- * green must never drag the product mark with it (gh#250). Role defaults live HERE (call site),
45
- * not on :root, so a scoped `.dark` / `[data-tenant]` override of --brand re-resolves
46
- * (docs/TOKENS.md · role-mirror knobs).
47
- *
48
- * The INK is --logo-identity-foreground, NOT --brand-foreground: this branch sets caller-supplied
49
- * TEXT on the fill, so WCAG 2.2 SC 1.4.3 applies at 4.5:1 (14px bold is not "large text"), while
50
- * --brand-foreground is the artwork KNOCKOUT colour that tracks --background and only owes 3:1 as
51
- * non-text (SC 1.4.11). Knockout white on the emerald measured 3.67:1 — an AA failure on every
52
- * boxed `tone="success"` glyph. See src/tokens/components/logo.css. */
53
36
  .ui-logo[data-tone="success"] {
54
37
  background: hsl(var(--logo-success-background, var(--brand)));
55
38
  color: hsl(var(--logo-success-foreground, var(--logo-identity-foreground)));
56
39
  }
57
40
 
58
- /* The identity mark honours `size` like every other Logo branch. The godx box has its OWN tier
59
- * scale (--logo-godx-size-*) because the artwork is a horizontal capsule in a square viewBox and
60
- * needs ~+0.25rem over the filled glyph box to read at the same weight — but a public `size` prop
61
- * that renders identically at xs and lg is a silent no-op, and the lockup already scaled its
62
- * wordmark per tier, so a frozen mark broke the mark↔wordmark proportion at `size="lg"`.
63
- * These are `[data-mark][data-size]` (0,3,0) so they beat BOTH `.ui-logo[data-size]` and the
64
- * `[data-mark="godx"]` base regardless of source order — the ordering bug that hid `size` here.
65
- * --logo-godx-size stays the documented PIN: unset by default, and set once by a service theme it
66
- * wins at every tier (call-site default, docs/TOKENS.md). */
67
41
  .ui-logo[data-mark="godx"] {
68
42
  width: var(--logo-godx-size, var(--logo-godx-size-md));
69
43
  height: var(--logo-godx-size, var(--logo-godx-size-md));
@@ -93,13 +67,6 @@
93
67
  height: 100%;
94
68
  }
95
69
 
96
- /*
97
- * LOCKUP — `<Logo wordmark="…" />`: the mark plus the readable product name as ONE element, so a
98
- * shell header / auth brand bar never hand-rolls `inline-flex items-center gap-2` around a Logo
99
- * and a `<Text>` (rule #46). Every knob is a token (rule #45); the wordmark colour defaults to
100
- * the IDENTITY role and never reads --primary, so re-theming the action colour cannot recolour
101
- * the brand — no consumer page CSS is required for the logo colour (gh#214).
102
- */
103
70
  .ui-logo-lockup {
104
71
  display: inline-flex;
105
72
  align-items: center;
@@ -128,7 +95,6 @@
128
95
  font-size: var(--logo-wordmark-font-size-lg);
129
96
  }
130
97
 
131
- /* Canonical GoDX wordmark — the --brand IDENTITY role, independent of --primary AND of --success. */
132
98
  .ui-logo-lockup[data-mark="godx"] .ui-logo-wordmark,
133
99
  .ui-logo-lockup[data-tone="success"] .ui-logo-wordmark {
134
100
  color: hsl(var(--logo-wordmark-color, var(--logo-godx-color, var(--brand))));
@@ -1,10 +1,4 @@
1
- /*
2
- * MOTION — entrance/reveal animation for the `Reveal` primitive.
3
- * Reads the DS motion tokens (--duration-slow / --ease-emphasized / --reveal-distance) instead of
4
- * a hand-rolled @keyframes, and staggers via the --reveal-stagger-step ladder. Under
5
- * prefers-reduced-motion the animation is dropped: content renders in its final, fully-visible
6
- * position with no transform and no layout shift.
7
- */
1
+
8
2
 
9
3
  @layer components {
10
4
  .ui-reveal {
@@ -42,7 +36,6 @@
42
36
  }
43
37
  }
44
38
 
45
- /* Accessibility: no motion → no animation, content stays visible (WCAG 2.3.3 / 2.2.2). */
46
39
  @media (prefers-reduced-motion: reduce) {
47
40
  .ui-reveal,
48
41
  .ui-reveal[data-reveal-delay] {
@@ -51,22 +44,6 @@
51
44
  }
52
45
  }
53
46
 
54
- /*
55
- * AMBIENT MOTION — the `Activity` primitive (gh#313): a continuous, unbounded "something is
56
- * happening right now, elsewhere" mark. The LOOP counterpart to `.ui-reveal`'s one-shot entrance,
57
- * living in the same file so the library keeps exactly one place where motion is written.
58
- *
59
- * NOT `.ui-skeleton-block` (content is loading — `aria-busy`), NOT the Button spinner (this action
60
- * is in flight). Every interval, offset, size and colour reads a token, so a service retunes the
61
- * whole ambient feel from its theme instead of forking a `@keyframes` (cardinal rule #45).
62
- *
63
- * REDUCED MOTION IS A DESIGNED FRAME, NOT AN ABSENCE. Under `prefers-reduced-motion: reduce` the
64
- * loops are dropped and every mark falls back to its BASE rule, which is authored to be a legible
65
- * resting state: three solid dots (a static ellipsis — the same "…" convention the animation
66
- * spells out), a solid pulse mark, and a bar segment parked at the reading-start of its track so
67
- * the bar can never read as "complete". Nothing is hidden, nothing collapses, no box changes size
68
- * — so there is no layout shift either way (WCAG 2.2 SC 2.3.3 / 2.2.2).
69
- */
70
47
  @layer components {
71
48
  .ui-activity {
72
49
  display: inline-flex;
@@ -84,8 +61,6 @@
84
61
  font-size: var(--activity-font-size-lg);
85
62
  }
86
63
 
87
- /* The mark row. `block-size` reserves the loop's full travel so a dot at the top of its arc is
88
- * never clipped and the row never grows mid-cycle. */
89
64
  .ui-activity-mark {
90
65
  display: inline-flex;
91
66
  align-items: flex-end;
@@ -94,8 +69,6 @@
94
69
  color: hsl(var(--activity-color, var(--muted-foreground)));
95
70
  }
96
71
 
97
- /* Tone → mark ink. Two-attribute selectors (0,2,0) outrank the muted base (0,1,0). `muted` has
98
- * no rule of its own: it IS the base, and therefore the one tone `--activity-color` retints. */
99
72
  .ui-activity[data-tone="default"] .ui-activity-mark {
100
73
  color: hsl(var(--foreground));
101
74
  }
@@ -115,7 +88,6 @@
115
88
  color: hsl(var(--info));
116
89
  }
117
90
 
118
- /* dots — the ellipsis convention. Resting state (= the reduced-motion frame): three solid dots. */
119
91
  .ui-activity-dot {
120
92
  inline-size: var(--activity-mark-size);
121
93
  block-size: var(--activity-mark-size);
@@ -124,8 +96,7 @@
124
96
  opacity: 1;
125
97
  animation: ui-activity-bounce var(--activity-interval) var(--ease-standard) infinite;
126
98
  }
127
- /* nth-child, not a physical offset: in RTL the flex row lays the dots end→start, so the cascade
128
- * follows the reading direction with no `[dir]` rule. */
99
+
129
100
  .ui-activity-dot:nth-child(2) {
130
101
  animation-delay: calc(var(--activity-stagger-step) * 1);
131
102
  }
@@ -133,8 +104,6 @@
133
104
  animation-delay: calc(var(--activity-stagger-step) * 2);
134
105
  }
135
106
 
136
- /* pulse — a single breathing mark (live / recording). Opacity only: the reference design keeps
137
- * motion LOW, and an opacity loop degrades to a solid mark instead of a resized box. */
138
107
  .ui-activity-pulse {
139
108
  inline-size: var(--activity-pulse-mark-size);
140
109
  block-size: var(--activity-pulse-mark-size);
@@ -144,7 +113,6 @@
144
113
  animation: ui-activity-breathe var(--activity-interval) var(--ease-standard) infinite;
145
114
  }
146
115
 
147
- /* bar — an indeterminate sweep (syncing). */
148
116
  .ui-activity-bar {
149
117
  position: relative;
150
118
  overflow: hidden;
@@ -158,8 +126,7 @@
158
126
  .ui-activity-bar-segment {
159
127
  position: absolute;
160
128
  inset-block: 0;
161
- /* Parked at the reading-start when the animation is dropped: a partial bar, never a full one
162
- * (a full track would read as "complete", which is the opposite of indeterminate). */
129
+
163
130
  inset-inline-start: 0;
164
131
  inline-size: var(--activity-bar-segment-width);
165
132
  border-radius: inherit;
@@ -167,7 +134,6 @@
167
134
  animation: ui-activity-sweep var(--activity-interval) var(--ease-standard) infinite;
168
135
  }
169
136
 
170
- /* The label is a real `Text`; it only needs to stop the mark's travel box stretching the row. */
171
137
  .ui-activity-label {
172
138
  min-inline-size: 0;
173
139
  }
@@ -204,10 +170,6 @@
204
170
  }
205
171
  }
206
172
 
207
- /* Accessibility: no motion → no loop. Every mark falls back to the legible resting state
208
- * authored above; the label is visible text either way, so the affordance still says what it
209
- * means (WCAG 2.2 SC 2.3.3 Animation from Interactions, SC 2.2.2 Pause/Stop/Hide — an
210
- * indefinite loop runs longer than five seconds and the user cannot pause it). */
211
173
  @media (prefers-reduced-motion: reduce) {
212
174
  .ui-activity-dot,
213
175
  .ui-activity-pulse,
@@ -216,7 +178,6 @@
216
178
  }
217
179
  }
218
180
 
219
- /* Forced colours: the OS palette replaces the token ink, so the mark must not depend on it. */
220
181
  @media (forced-colors: active) {
221
182
  .ui-activity-dot,
222
183
  .ui-activity-pulse,
@@ -30,24 +30,12 @@
30
30
  text-decoration: underline;
31
31
  }
32
32
 
33
- /*
34
- * AppSettingPicker `compact` (gh#217) — a small, content-hugging LABELLED trigger for auth /
35
- * legal footers: it keeps the icon, the readable value and the real control chrome (so it is
36
- * obviously a switcher), but re-tiers the box to --control-height-sm and drops the picker's owned
37
- * per-kind width. Every value is a token; the height comes from the official control tier, never
38
- * a literal or an ad-hoc calc.
39
- */
40
33
  .ui-app-setting-picker-compact {
41
34
  --control-height: var(--app-setting-picker-compact-control-height);
42
35
  --control-padding-x: var(--app-setting-picker-compact-padding-x);
43
36
  --control-font-size: var(--app-setting-picker-compact-font-size);
44
37
  }
45
- /* Tabs root — the flex box that stacks the strip above its panel (#319). The strip↔panel gap is
46
- * a token so a service can retune the tab rhythm to its own grid; `min-inline-size: 0` is NOT a
47
- * knob but the flexbox shrink idiom that used to ride along as `min-w-0`: without it the strip's
48
- * intrinsic width forces every ancestor wider instead of letting the strip scroll its own
49
- * overflow (gh#175). `display:flex` / the vertical column stay on the component — they are
50
- * structure, not a service-tunable constant. */
38
+
51
39
  [data-slot="tabs"] {
52
40
  min-inline-size: 0;
53
41
  gap: var(--tabs-root-gap);
@@ -60,11 +48,6 @@
60
48
  scrollbar-width: thin;
61
49
  }
62
50
 
63
- /* Tabs `line` — the ACTIVE decoration is a token-owned bar and nothing else (gh#248). It is
64
- * deliberately painted here (not as an `after:*` utility) so it stays independent of the
65
- * `:focus-visible` ring utilities: "selected" and "keyboard-focused" are two different states and
66
- * must remain visually distinct (WCAG 2.4.7). Logical insets keep the vertical rail on the
67
- * inline-END edge under dir="rtl" too. */
68
51
  [data-slot="tabs-list"][data-variant="line"] [data-slot="tabs-trigger"]::after {
69
52
  content: "";
70
53
  position: absolute;
@@ -99,11 +82,6 @@
99
82
  }
100
83
  }
101
84
 
102
- /* Pagination chevrons (#319). The `simple` form draws Prev/Next as size="sm" Buttons whose only
103
- * content is the glyph, so it must NOT inherit the small-button icon tier — the chevron is the
104
- * whole control. Pagination lives in styles/layout.css, but this override has to out-specify
105
- * `.ui-button--sm svg` (0,1,1) from styles/control.css, so it is authored here at (0,2,1); a
106
- * plain `.ui-pagination svg` rule would lose the cascade and silently shrink both chevrons. */
107
85
  .ui-pagination .ui-button svg {
108
86
  inline-size: var(--pagination-icon-size);
109
87
  block-size: var(--pagination-icon-size);
@@ -138,9 +116,7 @@
138
116
  .ui-dropdown-menu-sub-trigger,
139
117
  .ui-dropdown-menu-checkbox-item,
140
118
  .ui-dropdown-menu-radio-item,
141
- .ui-dropdown-menu-shortcut,
142
- .ui-select-item,
143
- .ui-select-label {
119
+ .ui-dropdown-menu-shortcut {
144
120
  border-radius: var(--menu-item-radius);
145
121
  padding-inline: var(--menu-item-space-inline);
146
122
  height: var(--menu-item-height);
@@ -150,7 +126,6 @@
150
126
  font-size: var(--menu-item-font-size);
151
127
  }
152
128
 
153
- /* A row marked inset reserves the indicator column so its label lines up with checked siblings. */
154
129
  .ui-dropdown-menu-item[data-inset="true"],
155
130
  .ui-dropdown-menu-label[data-inset="true"],
156
131
  .ui-dropdown-menu-sub-trigger[data-inset="true"] {
@@ -292,10 +267,6 @@
292
267
  box-shadow: var(--shadow-md), var(--shadow-glow);
293
268
  }
294
269
 
295
- /* Reads --menu-icon-size, the same knob DropdownMenu's sub-trigger chevron already reads
296
- * (`.ui-dropdown-menu-sub-trigger-icon`, below). The three menu surfaces share one row rhythm,
297
- * so the literal `1rem` here meant setting --menu-icon-size resized the dropdown chevron and
298
- * silently left these two behind. Same resolved value, one owner (gh#326). */
299
270
  .ui-context-menu-sub-trigger-icon,
300
271
  .ui-menubar-sub-trigger-icon {
301
272
  width: var(--menu-icon-size);
@@ -448,10 +419,6 @@
448
419
  outline: none;
449
420
  }
450
421
 
451
- /* The step NUMBER carries the emphasis. Both knobs exist because the canonical hosted-identity
452
- * row marks the step with an accent TINT at normal weight, while the original marked it with
453
- * bold at the inherited colour — a service picks its own emphasis instead of forking this rule
454
- * (rule #45). Defaults are the original bold + inherited colour, so nothing moves. */
455
422
  .ui-steps-inline-index {
456
423
  flex: none;
457
424
  font-variant-numeric: tabular-nums;
@@ -488,9 +455,6 @@
488
455
  color: var(--steps-inline-separator-color, hsl(var(--muted-foreground)));
489
456
  }
490
457
 
491
- /* DROPDOWN MENU — the third Radix menu surface. It was the only one still carrying its whole
492
- * box as Tailwind literals on the component (#319); it now joins ContextMenu and Menubar on the
493
- * shared row rhythm above, and scopes the one value that legitimately differs. */
494
458
  .ui-dropdown-menu-content,
495
459
  .ui-dropdown-menu-sub-content {
496
460
  --menu-content-min-width: var(--dropdown-content-min-width);
@@ -515,7 +479,6 @@
515
479
  overflow: hidden;
516
480
  }
517
481
 
518
- /* The checkbox indicator is absolutely placed in the reserved inset column. */
519
482
  .ui-dropdown-menu-indicator-slot {
520
483
  pointer-events: none;
521
484
  position: absolute;
@@ -537,7 +500,6 @@
537
500
  margin-inline-start: auto;
538
501
  }
539
502
 
540
- /* Checkbox and radio rows are inset by construction — they always reserve the marker column. */
541
503
  .ui-dropdown-menu-checkbox-item {
542
504
  position: relative;
543
505
  padding-inline-start: var(--menu-item-inset-space-inline-start);
@@ -575,7 +537,7 @@
575
537
  }
576
538
 
577
539
  @layer components {
578
- /* STEPS — full (non-inline) variant. The inline form keeps its own --steps-inline-* set. */
540
+
579
541
  .ui-steps-dot {
580
542
  display: block;
581
543
  inline-size: var(--steps-dot-size);
@@ -741,8 +703,6 @@
741
703
  text-align: center;
742
704
  }
743
705
 
744
- /* The connector spans between two markers, inset by the marker radius at each end so it never
745
- * runs underneath one. Both ends move together when --steps-connector-inset is retuned. */
746
706
  .ui-steps-item[data-direction="horizontal"][data-connector]::after {
747
707
  content: "";
748
708
  position: absolute;
@@ -753,11 +713,6 @@
753
713
  background: hsl(var(--border));
754
714
  }
755
715
 
756
- /* APP SETTING PICKER — icon-only box + per-kind labelled widths (#319). */
757
-
758
- /* Structurally icon-only: square to the density-aware --control-height tap target and drop the
759
- * form-input chrome so it sits among the topbar's ghost icon buttons. The open-state and
760
- * focus-visible rings from controlTriggerClass are untouched. */
761
716
  .ui-app-setting-picker-icon {
762
717
  inline-size: var(--control-height);
763
718
  justify-content: center;
@@ -774,8 +729,6 @@
774
729
  opacity: var(--app-setting-picker-icon-rest-alpha);
775
730
  }
776
731
 
777
- /* Each kind is sized to the longest value it can show — a timezone name is far wider than a
778
- * theme name. Below the breakpoint every kind hugs its content instead. */
779
732
  @media (min-width: 40rem) {
780
733
  .ui-app-setting-picker-trigger[data-kind="locale"] {
781
734
  inline-size: var(--app-setting-picker-locale-width);