@godxjp/ui 5.0.2 → 6.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 (298) hide show
  1. package/README.md +101 -142
  2. package/package.json +124 -128
  3. package/scripts/ui-audit.mjs +179 -0
  4. package/src/app/__tests__/app-provider.test.tsx +232 -0
  5. package/src/app/__tests__/date-format-labels.test.ts +36 -0
  6. package/src/app/__tests__/date-formats.test.ts +44 -0
  7. package/src/app/__tests__/timezones.test.ts +65 -0
  8. package/src/app/app-provider.tsx +227 -0
  9. package/src/app/date-format-labels.ts +21 -0
  10. package/src/app/date-formats.ts +30 -0
  11. package/src/app/index.ts +40 -0
  12. package/src/app/locales.ts +32 -0
  13. package/src/app/request-headers.ts +31 -0
  14. package/src/app/storage.ts +44 -0
  15. package/src/app/time-format-labels.ts +19 -0
  16. package/src/app/time-formats.ts +15 -0
  17. package/src/app/timezones.ts +208 -0
  18. package/src/app/types.ts +39 -0
  19. package/src/app/use-formatting.ts +47 -0
  20. package/src/components/__tests__/accessibility-primitives.test.tsx +65 -0
  21. package/src/components/__tests__/docs-parity.test.ts +41 -0
  22. package/src/components/__tests__/shadcn-release-guardrails.test.ts +71 -0
  23. package/src/components/__tests__/theme-axes-integration.test.tsx +242 -0
  24. package/src/components/admin/index.ts +76 -0
  25. package/src/components/data-display/__tests__/card-table.test.tsx +328 -0
  26. package/src/components/data-display/__tests__/data-display.test.tsx +73 -0
  27. package/src/components/data-display/__tests__/data-table.test.tsx +84 -0
  28. package/src/components/data-display/__tests__/popover.test.tsx +92 -0
  29. package/src/components/data-display/__tests__/scroll-area-collapsible.test.tsx +66 -0
  30. package/src/components/data-display/badge.tsx +27 -0
  31. package/src/components/data-display/card.tsx +194 -0
  32. package/src/components/data-display/code-badge.tsx +28 -0
  33. package/src/components/data-display/collapsible.tsx +5 -0
  34. package/src/components/data-display/data-table.tsx +476 -0
  35. package/src/components/data-display/empty-state.tsx +22 -0
  36. package/src/components/data-display/index.ts +41 -0
  37. package/src/components/data-display/key-value-grid.tsx +46 -0
  38. package/src/components/data-display/popover.tsx +62 -0
  39. package/src/components/data-display/progress-meter.tsx +20 -0
  40. package/src/components/data-display/scan-panel.tsx +16 -0
  41. package/src/components/data-display/scroll-area.tsx +42 -0
  42. package/src/components/data-display/status-badge.tsx +83 -0
  43. package/src/components/data-display/table.tsx +59 -0
  44. package/src/components/data-display/timeline.tsx +42 -0
  45. package/src/components/data-display/tree-list.tsx +42 -0
  46. package/src/components/data-entry/__fixtures__/tree-options.ts +80 -0
  47. package/src/components/data-entry/__tests__/cascader-tree-transfer.test.tsx +417 -0
  48. package/src/components/data-entry/__tests__/checkbox-group.test.tsx +40 -0
  49. package/src/components/data-entry/__tests__/checkbox.test.tsx +20 -0
  50. package/src/components/data-entry/__tests__/date-autocomplete.test.tsx +94 -0
  51. package/src/components/data-entry/__tests__/form-field.test.tsx +49 -0
  52. package/src/components/data-entry/__tests__/input-textarea.test.tsx +38 -0
  53. package/src/components/data-entry/__tests__/label-select.test.tsx +62 -0
  54. package/src/components/data-entry/__tests__/pickers.test.tsx +74 -0
  55. package/src/components/data-entry/__tests__/radio.test.tsx +46 -0
  56. package/src/components/data-entry/__tests__/search-input.test.tsx +32 -0
  57. package/src/components/data-entry/__tests__/switch-field.test.tsx +52 -0
  58. package/src/components/data-entry/__tests__/upload.test.tsx +125 -0
  59. package/src/components/data-entry/autocomplete.tsx +91 -0
  60. package/src/components/data-entry/calendar.tsx +90 -0
  61. package/src/components/data-entry/cascader.tsx +305 -0
  62. package/src/components/data-entry/checkbox-group.tsx +90 -0
  63. package/src/components/data-entry/checkbox.tsx +30 -0
  64. package/src/components/data-entry/choice-field.tsx +27 -0
  65. package/src/components/data-entry/choice-option.ts +20 -0
  66. package/src/components/data-entry/color-picker.tsx +75 -0
  67. package/src/components/data-entry/command.tsx +56 -0
  68. package/src/components/data-entry/country-select.tsx +88 -0
  69. package/src/components/data-entry/date-picker.tsx +69 -0
  70. package/src/components/data-entry/date-range-picker.tsx +75 -0
  71. package/src/components/data-entry/form-field.tsx +59 -0
  72. package/src/components/data-entry/index.ts +62 -0
  73. package/src/components/data-entry/input.tsx +26 -0
  74. package/src/components/data-entry/label.tsx +25 -0
  75. package/src/components/data-entry/radio.tsx +109 -0
  76. package/src/components/data-entry/search-input.tsx +103 -0
  77. package/src/components/data-entry/select.tsx +149 -0
  78. package/src/components/data-entry/slider.tsx +38 -0
  79. package/src/components/data-entry/switch-field.tsx +91 -0
  80. package/src/components/data-entry/switch.tsx +24 -0
  81. package/src/components/data-entry/textarea.tsx +12 -0
  82. package/src/components/data-entry/time-picker.tsx +214 -0
  83. package/src/components/data-entry/transfer.tsx +231 -0
  84. package/src/components/data-entry/tree-select-strategy.ts +6 -0
  85. package/src/components/data-entry/tree-select.tsx +279 -0
  86. package/src/components/data-entry/tree-utils.ts +221 -0
  87. package/src/components/data-entry/upload-crop-dialog.tsx +109 -0
  88. package/src/components/data-entry/upload-types.ts +86 -0
  89. package/src/components/data-entry/upload.tsx +498 -0
  90. package/src/components/data-entry/use-upload-draft.ts +93 -0
  91. package/src/components/feedback/__tests__/alert.test.tsx +127 -0
  92. package/src/components/feedback/__tests__/dialog.test.tsx +290 -0
  93. package/src/components/feedback/__tests__/sheet.test.tsx +94 -0
  94. package/src/components/feedback/__tests__/skeleton.test.tsx +25 -0
  95. package/src/components/feedback/__tests__/toast.test.tsx +52 -0
  96. package/src/components/feedback/alert.tsx +167 -0
  97. package/src/components/feedback/dialog.tsx +325 -0
  98. package/src/components/feedback/index.ts +53 -0
  99. package/src/components/feedback/sheet.tsx +130 -0
  100. package/src/components/feedback/skeleton.tsx +95 -0
  101. package/src/components/feedback/sonner.tsx +54 -0
  102. package/src/components/feedback/toaster.tsx +1 -0
  103. package/src/components/feedback/use-toast.ts +62 -0
  104. package/src/components/general/__tests__/button.test.tsx +71 -0
  105. package/src/components/general/button.tsx +61 -0
  106. package/src/components/general/index.ts +2 -0
  107. package/src/components/layout/__tests__/page-container.test.tsx +69 -0
  108. package/src/components/layout/__tests__/page-inset.test.tsx +14 -0
  109. package/src/components/layout/__tests__/stack-inline.test.tsx +39 -0
  110. package/src/components/layout/app-shell.tsx +42 -0
  111. package/src/components/layout/breadcrumb.tsx +35 -0
  112. package/src/components/layout/index.ts +31 -0
  113. package/src/components/layout/inline.tsx +13 -0
  114. package/src/components/layout/menu.tsx +34 -0
  115. package/src/components/layout/mobile-frame.tsx +57 -0
  116. package/src/components/layout/page-container.tsx +81 -0
  117. package/src/components/layout/page-inset.tsx +16 -0
  118. package/src/components/layout/responsive-grid.tsx +14 -0
  119. package/src/components/layout/shell-app.tsx +30 -0
  120. package/src/components/layout/sidebar.tsx +98 -0
  121. package/src/components/layout/split-pane.tsx +16 -0
  122. package/src/components/layout/stack.tsx +13 -0
  123. package/src/components/layout/topbar.tsx +108 -0
  124. package/src/components/navigation/__tests__/app-pickers.test.tsx +118 -0
  125. package/src/components/navigation/__tests__/dropdown-menu.test.tsx +104 -0
  126. package/src/components/navigation/__tests__/navigation.test.tsx +61 -0
  127. package/src/components/navigation/__tests__/pagination-steps-tabs.test.tsx +76 -0
  128. package/src/components/navigation/date-format-picker.tsx +55 -0
  129. package/src/components/navigation/dropdown-menu.tsx +190 -0
  130. package/src/components/navigation/filter-bar.tsx +38 -0
  131. package/src/components/navigation/index.ts +28 -0
  132. package/src/components/navigation/locale-picker.tsx +49 -0
  133. package/src/components/navigation/page-header.tsx +50 -0
  134. package/src/components/navigation/pagination-utils.ts +35 -0
  135. package/src/components/navigation/pagination.tsx +168 -0
  136. package/src/components/navigation/steps.tsx +163 -0
  137. package/src/components/navigation/tabs-items.tsx +69 -0
  138. package/src/components/navigation/tabs.tsx +67 -0
  139. package/src/components/navigation/time-format-picker.tsx +55 -0
  140. package/src/components/navigation/timezone-picker.tsx +63 -0
  141. package/src/components/query/__tests__/data-state.test.tsx +214 -0
  142. package/src/components/query/__tests__/infinite-prefetch.test.tsx +105 -0
  143. package/src/components/query/__tests__/query-helpers.test.tsx +61 -0
  144. package/src/components/query/data-state.tsx +58 -0
  145. package/src/components/query/index.ts +10 -0
  146. package/src/components/query/infinite-query-state.tsx +99 -0
  147. package/src/components/query/mutation-feedback.tsx +31 -0
  148. package/src/components/query/prefetch-link.tsx +45 -0
  149. package/src/components/query/query-refetch-button.tsx +41 -0
  150. package/src/components/ui/alert-dialog.tsx +1 -0
  151. package/src/components/ui/alert.tsx +1 -0
  152. package/src/components/ui/autocomplete.tsx +1 -0
  153. package/src/components/ui/badge.tsx +1 -0
  154. package/src/components/ui/button.tsx +1 -0
  155. package/src/components/ui/calendar.tsx +1 -0
  156. package/src/components/ui/card.tsx +1 -0
  157. package/src/components/ui/checkbox.tsx +1 -0
  158. package/src/components/ui/color-picker.tsx +1 -0
  159. package/src/components/ui/command.tsx +1 -0
  160. package/src/components/ui/date-picker.tsx +1 -0
  161. package/src/components/ui/date-range-picker.tsx +1 -0
  162. package/src/components/ui/dialog.tsx +1 -0
  163. package/src/components/ui/dropdown-menu.tsx +1 -0
  164. package/src/components/ui/index.tsx +31 -0
  165. package/src/components/ui/input.tsx +1 -0
  166. package/src/components/ui/label.tsx +1 -0
  167. package/src/components/ui/pagination.tsx +1 -0
  168. package/src/components/ui/popover.tsx +1 -0
  169. package/src/components/ui/radio.tsx +1 -0
  170. package/src/components/ui/scroll-area.tsx +1 -0
  171. package/src/components/ui/select.tsx +1 -0
  172. package/src/components/ui/sheet.tsx +1 -0
  173. package/src/components/ui/slider.tsx +1 -0
  174. package/src/components/ui/sonner.tsx +1 -0
  175. package/src/components/ui/switch.tsx +1 -0
  176. package/src/components/ui/table.tsx +1 -0
  177. package/src/components/ui/tabs-items.tsx +1 -0
  178. package/src/components/ui/tabs.tsx +1 -0
  179. package/src/components/ui/textarea.tsx +1 -0
  180. package/src/components/ui/time-picker.tsx +1 -0
  181. package/src/components/ui/upload.tsx +1 -0
  182. package/src/form/__tests__/use-zod-form.test.tsx +97 -0
  183. package/src/form/form-field-control.tsx +44 -0
  184. package/src/form/form-root.tsx +29 -0
  185. package/src/form/index.ts +7 -0
  186. package/src/form/use-zod-form.ts +29 -0
  187. package/src/i18n/__tests__/translate.test.ts +23 -0
  188. package/src/i18n/index.ts +9 -0
  189. package/src/i18n/messages/en.json +171 -0
  190. package/src/i18n/messages/ja.json +171 -0
  191. package/src/i18n/messages/vi.json +171 -0
  192. package/src/i18n/translate.ts +74 -0
  193. package/src/i18n/use-translation.ts +53 -0
  194. package/src/index.ts +3 -0
  195. package/src/lib/__tests__/control-styles.test.ts +78 -0
  196. package/src/lib/__tests__/datetime.test.ts +77 -0
  197. package/src/lib/__tests__/format-date.test.ts +97 -0
  198. package/src/lib/__tests__/format.test.ts +62 -0
  199. package/src/lib/__tests__/theme-tokens-audit.test.ts +176 -0
  200. package/src/lib/__tests__/theme-tokens-css.test.ts +118 -0
  201. package/src/lib/__tests__/token-governance.test.ts +191 -0
  202. package/src/lib/__tests__/variants.test.ts +18 -0
  203. package/src/lib/control-styles.ts +33 -0
  204. package/src/lib/datetime/detect.ts +25 -0
  205. package/src/lib/datetime/format-date.ts +100 -0
  206. package/src/lib/datetime/format.ts +140 -0
  207. package/src/lib/datetime/index.ts +25 -0
  208. package/src/lib/datetime/parse.ts +51 -0
  209. package/src/lib/datetime/sync.ts +48 -0
  210. package/src/lib/format.ts +114 -0
  211. package/src/lib/hooks.ts +54 -0
  212. package/src/lib/utils.ts +6 -0
  213. package/src/lib/variants.ts +40 -0
  214. package/src/props/components/app.prop.ts +99 -0
  215. package/src/props/components/data-display.prop.ts +73 -0
  216. package/src/props/components/data-entry.prop.ts +334 -0
  217. package/src/props/components/feedback.prop.ts +80 -0
  218. package/src/props/components/form.prop.ts +46 -0
  219. package/src/props/components/general.prop.ts +18 -0
  220. package/src/props/components/index.ts +99 -0
  221. package/src/props/components/layout.prop.ts +130 -0
  222. package/src/props/components/navigation.prop.ts +88 -0
  223. package/src/props/components/query.prop.ts +94 -0
  224. package/src/props/index.ts +17 -0
  225. package/src/props/registry.ts +603 -0
  226. package/src/props/vocabulary/content.prop.ts +35 -0
  227. package/src/props/vocabulary/data.prop.ts +46 -0
  228. package/src/props/vocabulary/index.ts +73 -0
  229. package/src/props/vocabulary/interaction.prop.ts +42 -0
  230. package/src/props/vocabulary/layout.prop.ts +25 -0
  231. package/src/props/vocabulary/navigation.prop.ts +19 -0
  232. package/src/props/vocabulary/shared.prop.ts +59 -0
  233. package/src/styles/alert-layout.css +191 -0
  234. package/src/styles/badge-layout.css +22 -0
  235. package/src/styles/card-layout.css +373 -0
  236. package/src/styles/control.css +504 -0
  237. package/src/styles/data-display-layout.css +246 -0
  238. package/src/styles/density.css +43 -0
  239. package/src/styles/dialog-layout.css +84 -0
  240. package/src/styles/index.css +105 -0
  241. package/src/styles/layout.css +479 -0
  242. package/src/styles/shell-layout.css +604 -0
  243. package/src/styles/table-layout.css +109 -0
  244. package/src/test/__tests__/render-loop-guard.test.tsx +38 -0
  245. package/src/test/jest-dom.d.ts +4 -0
  246. package/src/test/render-loop-guard.tsx +50 -0
  247. package/src/test/render.tsx +29 -0
  248. package/src/test/theme-globals.test.ts +77 -0
  249. package/src/test/theme-globals.ts +134 -0
  250. package/src/test/theme-test-utils.tsx +67 -0
  251. package/src/theme/example.service.css +37 -0
  252. package/src/tokens/base.css +13 -0
  253. package/src/tokens/foundation.css +151 -0
  254. package/src/tokens/primitives/badge.css +13 -0
  255. package/src/tokens/primitives/card.css +29 -0
  256. package/src/tokens/primitives/control.css +55 -0
  257. package/src/tokens/primitives/feedback.css +17 -0
  258. package/src/tokens/primitives/layout.css +20 -0
  259. package/src/tokens/primitives/navigation.css +13 -0
  260. package/src/tokens/primitives/table.css +10 -0
  261. package/BRAND.md +0 -296
  262. package/CHANGELOG.md +0 -668
  263. package/config/eslint.js +0 -54
  264. package/config/prettier.cjs +0 -20
  265. package/config/tsconfig.base.json +0 -22
  266. package/config/vitest.base.ts +0 -26
  267. package/dist/MiniMonth-YAmPGEpC.d.ts +0 -143
  268. package/dist/Table.types-BbsxoIYE.d.ts +0 -352
  269. package/dist/color-DO0qqUAb.d.ts +0 -38
  270. package/dist/components/composites.d.ts +0 -963
  271. package/dist/components/composites.js +0 -7343
  272. package/dist/components/composites.js.map +0 -1
  273. package/dist/components/primitives.d.ts +0 -2744
  274. package/dist/components/primitives.js +0 -7356
  275. package/dist/components/primitives.js.map +0 -1
  276. package/dist/components/shell.d.ts +0 -182
  277. package/dist/components/shell.js +0 -774
  278. package/dist/components/shell.js.map +0 -1
  279. package/dist/hooks.d.ts +0 -100
  280. package/dist/hooks.js +0 -558
  281. package/dist/hooks.js.map +0 -1
  282. package/dist/i18n.d.ts +0 -61
  283. package/dist/i18n.js +0 -860
  284. package/dist/i18n.js.map +0 -1
  285. package/dist/index.d.ts +0 -33
  286. package/dist/index.js +0 -13062
  287. package/dist/index.js.map +0 -1
  288. package/dist/padding-DY0JV5Ja.d.ts +0 -16
  289. package/dist/preferences.d.ts +0 -132
  290. package/dist/preferences.js +0 -262
  291. package/dist/preferences.js.map +0 -1
  292. package/dist/props.d.ts +0 -86
  293. package/dist/props.js +0 -16
  294. package/dist/props.js.map +0 -1
  295. package/dist/size-CQwNvOWd.d.ts +0 -19
  296. package/dist/types-LTj-2bl-.d.ts +0 -30
  297. package/dist/useTableViews-D5NIAJ7h.d.ts +0 -154
  298. package/src/tokens/tailwind.css +0 -158
@@ -0,0 +1,603 @@
1
+ /**
2
+ * Central registry — canonical list of all prop concepts.
3
+ * Check here BEFORE inventing a new prop name.
4
+ * @see docs/PROPS-REGISTRY.md
5
+ */
6
+
7
+ export const VOCABULARY_REGISTRY = {
8
+ // shared.prop.ts
9
+ ClassNameProp: {
10
+ file: "vocabulary/shared.prop.ts",
11
+ category: "shared",
12
+ description: "Root CSS class override",
13
+ },
14
+ ChildrenProp: {
15
+ file: "vocabulary/shared.prop.ts",
16
+ category: "shared",
17
+ description: "Child nodes slot",
18
+ },
19
+ IdProp: {
20
+ file: "vocabulary/shared.prop.ts",
21
+ category: "shared",
22
+ description: "DOM / form element id",
23
+ },
24
+ OpenProp: {
25
+ file: "vocabulary/shared.prop.ts",
26
+ category: "shared",
27
+ description: "Dialog/Sheet/Popover open state",
28
+ },
29
+ OnOpenChangeProp: {
30
+ file: "vocabulary/shared.prop.ts",
31
+ category: "shared",
32
+ description: "Panel open change handler",
33
+ },
34
+ HandlerProp: {
35
+ file: "vocabulary/shared.prop.ts",
36
+ category: "shared",
37
+ description: "Void async/sync callback",
38
+ },
39
+ PendingProp: {
40
+ file: "vocabulary/shared.prop.ts",
41
+ category: "shared",
42
+ description: "Loading / in-flight state",
43
+ },
44
+ RequiredProp: {
45
+ file: "vocabulary/shared.prop.ts",
46
+ category: "shared",
47
+ description: "Field is mandatory",
48
+ },
49
+ DisabledProp: {
50
+ file: "vocabulary/shared.prop.ts",
51
+ category: "shared",
52
+ description: "Control disabled",
53
+ },
54
+ LabelProp: {
55
+ file: "vocabulary/shared.prop.ts",
56
+ category: "shared",
57
+ description: "Generic label text",
58
+ },
59
+ HelperProp: {
60
+ file: "vocabulary/shared.prop.ts",
61
+ category: "shared",
62
+ description: "Input hint below field",
63
+ },
64
+ ErrorProp: {
65
+ file: "vocabulary/shared.prop.ts",
66
+ category: "shared",
67
+ description: "Validation error message",
68
+ },
69
+ PlaceholderProp: {
70
+ file: "vocabulary/shared.prop.ts",
71
+ category: "shared",
72
+ description: "Input placeholder",
73
+ },
74
+ NameProp: {
75
+ file: "vocabulary/shared.prop.ts",
76
+ category: "shared",
77
+ description: "Form field name",
78
+ },
79
+ ValueProp: { file: "vocabulary/shared.prop.ts", category: "shared", description: "String value" },
80
+ OnChangeProp: {
81
+ file: "vocabulary/shared.prop.ts",
82
+ category: "shared",
83
+ description: "Input change handler",
84
+ },
85
+ OnClickProp: {
86
+ file: "vocabulary/shared.prop.ts",
87
+ category: "shared",
88
+ description: "Button click handler",
89
+ },
90
+ AsChildProp: {
91
+ file: "vocabulary/shared.prop.ts",
92
+ category: "shared",
93
+ description: "Radix asChild polymorphism",
94
+ },
95
+
96
+ // content.prop.ts
97
+ TitleProp: {
98
+ file: "vocabulary/content.prop.ts",
99
+ category: "content",
100
+ description: "Primary heading",
101
+ },
102
+ SubtitleProp: {
103
+ file: "vocabulary/content.prop.ts",
104
+ category: "content",
105
+ description: "Secondary line under title",
106
+ },
107
+ DescriptionProp: {
108
+ file: "vocabulary/content.prop.ts",
109
+ category: "content",
110
+ description: "Body / explanatory copy",
111
+ },
112
+ ExtraProp: {
113
+ file: "vocabulary/content.prop.ts",
114
+ category: "content",
115
+ description: "Top-right actions (Ant extra)",
116
+ },
117
+ FooterProp: {
118
+ file: "vocabulary/content.prop.ts",
119
+ category: "content",
120
+ description: "Bottom action bar",
121
+ },
122
+ ActionProp: {
123
+ file: "vocabulary/content.prop.ts",
124
+ category: "content",
125
+ description: "Primary CTA slot",
126
+ },
127
+ IconProp: {
128
+ file: "vocabulary/content.prop.ts",
129
+ category: "content",
130
+ description: "Lucide icon component",
131
+ },
132
+ ConfirmLabelProp: {
133
+ file: "vocabulary/content.prop.ts",
134
+ category: "content",
135
+ description: "Dialog confirm label",
136
+ },
137
+ CancelLabelProp: {
138
+ file: "vocabulary/content.prop.ts",
139
+ category: "content",
140
+ description: "Dialog cancel label",
141
+ },
142
+ ActionsProp: {
143
+ file: "vocabulary/content.prop.ts",
144
+ category: "content",
145
+ description: "Toolbar actions slot",
146
+ },
147
+
148
+ // layout.prop.ts
149
+ PageDensityProp: {
150
+ file: "vocabulary/layout.prop.ts",
151
+ category: "layout",
152
+ description: "Page padding / control scale",
153
+ },
154
+ PageContainerVariantProp: {
155
+ file: "vocabulary/layout.prop.ts",
156
+ category: "layout",
157
+ description: "Page shell layout — default, narrow, flush, ghost",
158
+ },
159
+ StackGapProp: {
160
+ file: "vocabulary/layout.prop.ts",
161
+ category: "layout",
162
+ description: "Vertical Stack gap",
163
+ },
164
+ InlineGapProp: {
165
+ file: "vocabulary/layout.prop.ts",
166
+ category: "layout",
167
+ description: "Horizontal Inline gap",
168
+ },
169
+ TableDensityProp: {
170
+ file: "vocabulary/layout.prop.ts",
171
+ category: "layout",
172
+ description: "DataTable row height — NOT PageDensityProp",
173
+ },
174
+
175
+ // interaction.prop.ts
176
+ ButtonVariantProp: {
177
+ file: "vocabulary/interaction.prop.ts",
178
+ category: "interaction",
179
+ description: "Button visual variant",
180
+ },
181
+ ButtonSizeProp: {
182
+ file: "vocabulary/interaction.prop.ts",
183
+ category: "interaction",
184
+ description: "Button size preset",
185
+ },
186
+ ConfirmVariantProp: {
187
+ file: "vocabulary/interaction.prop.ts",
188
+ category: "interaction",
189
+ description: "Dialog confirm emphasis",
190
+ },
191
+ StatusToneProp: {
192
+ file: "vocabulary/interaction.prop.ts",
193
+ category: "interaction",
194
+ description: "StatusBadge color tone",
195
+ },
196
+ AlertVariantProp: {
197
+ file: "vocabulary/interaction.prop.ts",
198
+ category: "interaction",
199
+ description: "Inline Alert banner tone",
200
+ },
201
+ SortDirectionProp: {
202
+ file: "vocabulary/interaction.prop.ts",
203
+ category: "interaction",
204
+ description: "asc | desc",
205
+ },
206
+ ColumnAlignProp: {
207
+ file: "vocabulary/interaction.prop.ts",
208
+ category: "interaction",
209
+ description: "Table column alignment",
210
+ },
211
+ SortStateProp: {
212
+ file: "vocabulary/interaction.prop.ts",
213
+ category: "interaction",
214
+ description: "Active table sort",
215
+ },
216
+
217
+ // navigation.prop.ts
218
+ BreadcrumbItemProp: {
219
+ file: "vocabulary/navigation.prop.ts",
220
+ category: "navigation",
221
+ description: "Single breadcrumb segment",
222
+ },
223
+ BreadcrumbProp: {
224
+ file: "vocabulary/navigation.prop.ts",
225
+ category: "navigation",
226
+ description: "Breadcrumb trail array",
227
+ },
228
+ PageTitleProp: {
229
+ file: "vocabulary/navigation.prop.ts",
230
+ category: "navigation",
231
+ description: "Alias of TitleProp in page context",
232
+ },
233
+
234
+ // data.prop.ts
235
+ GetRowIdProp: {
236
+ file: "vocabulary/data.prop.ts",
237
+ category: "data",
238
+ description: "Row ID extractor generic",
239
+ },
240
+ OnRowClickProp: {
241
+ file: "vocabulary/data.prop.ts",
242
+ category: "data",
243
+ description: "Row click handler generic",
244
+ },
245
+ ColumnDefProp: {
246
+ file: "vocabulary/data.prop.ts",
247
+ category: "data",
248
+ description: "DataTable column definition",
249
+ },
250
+ SelectedIdsProp: {
251
+ file: "vocabulary/data.prop.ts",
252
+ category: "data",
253
+ description: "Selected row ID set",
254
+ },
255
+ OnSelectChangeProp: {
256
+ file: "vocabulary/data.prop.ts",
257
+ category: "data",
258
+ description: "Selection change handler",
259
+ },
260
+ OnTableDensityChangeProp: {
261
+ file: "vocabulary/data.prop.ts",
262
+ category: "data",
263
+ description: "Table density change",
264
+ },
265
+ OnSortChangeProp: {
266
+ file: "vocabulary/data.prop.ts",
267
+ category: "data",
268
+ description: "Table sort change",
269
+ },
270
+ OnSearchChangeProp: {
271
+ file: "vocabulary/data.prop.ts",
272
+ category: "data",
273
+ description: "Debounced search callback",
274
+ },
275
+ OnClearFiltersProp: {
276
+ file: "vocabulary/data.prop.ts",
277
+ category: "data",
278
+ description: "FilterBar clear all",
279
+ },
280
+ HasActiveFiltersProp: {
281
+ file: "vocabulary/data.prop.ts",
282
+ category: "data",
283
+ description: "Any filter active flag",
284
+ },
285
+ } as const;
286
+
287
+ export type VocabularyPropName = keyof typeof VOCABULARY_REGISTRY;
288
+
289
+ export const COMPONENT_PROP_REGISTRY = {
290
+ PageContainerProp: {
291
+ group: "layout",
292
+ file: "components/layout.prop.ts",
293
+ vocabulary: [
294
+ "PageTitleProp",
295
+ "SubtitleProp",
296
+ "ExtraProp",
297
+ "FooterProp",
298
+ "BreadcrumbProp",
299
+ "PageDensityProp",
300
+ "PageContainerVariantProp",
301
+ ],
302
+ },
303
+ StackProp: { group: "layout", file: "components/layout.prop.ts", vocabulary: ["StackGapProp"] },
304
+ InlineProp: { group: "layout", file: "components/layout.prop.ts", vocabulary: ["InlineGapProp"] },
305
+ PageInsetProp: {
306
+ group: "layout",
307
+ file: "components/layout.prop.ts",
308
+ vocabulary: ["ChildrenProp", "ClassNameProp"],
309
+ },
310
+ AppShellProp: {
311
+ group: "layout",
312
+ file: "components/layout.prop.ts",
313
+ vocabulary: ["ChildrenProp"],
314
+ },
315
+ SidebarProductProp: { group: "layout", file: "components/layout.prop.ts", vocabulary: [] },
316
+ SidebarItemProp: { group: "layout", file: "components/layout.prop.ts", vocabulary: [] },
317
+ SidebarSectionProp: { group: "layout", file: "components/layout.prop.ts", vocabulary: [] },
318
+ SidebarProp: { group: "layout", file: "components/layout.prop.ts", vocabulary: [] },
319
+ TopbarProductProp: { group: "layout", file: "components/layout.prop.ts", vocabulary: [] },
320
+ TopbarProjectProp: { group: "layout", file: "components/layout.prop.ts", vocabulary: [] },
321
+ TopbarProp: { group: "layout", file: "components/layout.prop.ts", vocabulary: [] },
322
+ PageHeaderProp: {
323
+ group: "layout",
324
+ file: "components/layout.prop.ts",
325
+ vocabulary: ["PageTitleProp", "SubtitleProp", "ExtraProp", "BreadcrumbProp"],
326
+ deprecated: true,
327
+ },
328
+ ButtonProp: {
329
+ group: "general",
330
+ file: "components/general.prop.ts",
331
+ vocabulary: [
332
+ "ButtonVariantProp",
333
+ "ButtonSizeProp",
334
+ "AsChildProp",
335
+ "DisabledProp",
336
+ "OnClickProp",
337
+ ],
338
+ },
339
+ InputProp: {
340
+ group: "data-entry",
341
+ file: "components/data-entry.prop.ts",
342
+ vocabulary: ["PlaceholderProp", "ValueProp", "DisabledProp"],
343
+ },
344
+ TextareaProp: {
345
+ group: "data-entry",
346
+ file: "components/data-entry.prop.ts",
347
+ vocabulary: ["PlaceholderProp", "DisabledProp"],
348
+ },
349
+ FormFieldProp: {
350
+ group: "data-entry",
351
+ file: "components/data-entry.prop.ts",
352
+ vocabulary: ["IdProp", "LabelProp", "RequiredProp", "HelperProp", "ErrorProp"],
353
+ },
354
+ SearchInputProp: {
355
+ group: "data-entry",
356
+ file: "components/data-entry.prop.ts",
357
+ vocabulary: ["LabelProp", "PlaceholderProp", "OnSearchChangeProp"],
358
+ },
359
+ CheckboxProp: {
360
+ group: "data-entry",
361
+ file: "components/data-entry.prop.ts",
362
+ vocabulary: ["DisabledProp"],
363
+ },
364
+ CheckboxGroupProp: {
365
+ group: "data-entry",
366
+ file: "components/data-entry.prop.ts",
367
+ vocabulary: ["DisabledProp"],
368
+ },
369
+ ChoiceOptionProp: { group: "data-entry", file: "components/data-entry.prop.ts", vocabulary: [] },
370
+ RadioProp: {
371
+ group: "data-entry",
372
+ file: "components/data-entry.prop.ts",
373
+ vocabulary: ["DisabledProp"],
374
+ },
375
+ RadioGroupProp: {
376
+ group: "data-entry",
377
+ file: "components/data-entry.prop.ts",
378
+ vocabulary: ["DisabledProp"],
379
+ },
380
+ SwitchProp: {
381
+ group: "data-entry",
382
+ file: "components/data-entry.prop.ts",
383
+ vocabulary: ["DisabledProp"],
384
+ },
385
+ SwitchFieldProp: {
386
+ group: "data-entry",
387
+ file: "components/data-entry.prop.ts",
388
+ vocabulary: [
389
+ "IdProp",
390
+ "LabelProp",
391
+ "RequiredProp",
392
+ "HelperProp",
393
+ "ErrorProp",
394
+ "DisabledProp",
395
+ "ClassNameProp",
396
+ ],
397
+ },
398
+ SliderProp: {
399
+ group: "data-entry",
400
+ file: "components/data-entry.prop.ts",
401
+ vocabulary: ["DisabledProp"],
402
+ },
403
+ CalendarProp: { group: "data-entry", file: "components/data-entry.prop.ts", vocabulary: [] },
404
+ DatePickerProp: {
405
+ group: "data-entry",
406
+ file: "components/data-entry.prop.ts",
407
+ vocabulary: ["PlaceholderProp", "DisabledProp", "IdProp"],
408
+ },
409
+ DateRangePickerProp: {
410
+ group: "data-entry",
411
+ file: "components/data-entry.prop.ts",
412
+ vocabulary: ["PlaceholderProp", "DisabledProp", "IdProp"],
413
+ },
414
+ TimePickerProp: {
415
+ group: "data-entry",
416
+ file: "components/data-entry.prop.ts",
417
+ vocabulary: ["DisabledProp"],
418
+ },
419
+ ColorPickerProp: {
420
+ group: "data-entry",
421
+ file: "components/data-entry.prop.ts",
422
+ vocabulary: ["DisabledProp", "IdProp"],
423
+ },
424
+ AutocompleteProp: {
425
+ group: "data-entry",
426
+ file: "components/data-entry.prop.ts",
427
+ vocabulary: ["PlaceholderProp", "ValueProp", "DisabledProp", "IdProp"],
428
+ },
429
+ UploadProp: {
430
+ group: "data-entry",
431
+ file: "components/data-entry.prop.ts",
432
+ vocabulary: ["DisabledProp", "ClassNameProp"],
433
+ },
434
+ UploadFileItemProp: {
435
+ group: "data-entry",
436
+ file: "components/data-entry.prop.ts",
437
+ vocabulary: [],
438
+ },
439
+ UploadVariantProp: { group: "data-entry", file: "components/data-entry.prop.ts", vocabulary: [] },
440
+ TreeOptionProp: { group: "data-entry", file: "components/data-entry.prop.ts", vocabulary: [] },
441
+ TreeFieldNamesProp: {
442
+ group: "data-entry",
443
+ file: "components/data-entry.prop.ts",
444
+ vocabulary: [],
445
+ },
446
+ CascaderProp: {
447
+ group: "data-entry",
448
+ file: "components/data-entry.prop.ts",
449
+ vocabulary: ["PlaceholderProp", "DisabledProp", "ClassNameProp", "IdProp"],
450
+ },
451
+ TreeSelectProp: {
452
+ group: "data-entry",
453
+ file: "components/data-entry.prop.ts",
454
+ vocabulary: ["PlaceholderProp", "DisabledProp", "ClassNameProp", "IdProp"],
455
+ },
456
+ ShowCheckedStrategyProp: {
457
+ group: "data-entry",
458
+ file: "components/data-entry.prop.ts",
459
+ vocabulary: [],
460
+ },
461
+ TransferProp: {
462
+ group: "data-entry",
463
+ file: "components/data-entry.prop.ts",
464
+ vocabulary: ["DisabledProp", "ClassNameProp"],
465
+ },
466
+ TransferItemProp: { group: "data-entry", file: "components/data-entry.prop.ts", vocabulary: [] },
467
+ EmptyStateProp: {
468
+ group: "data-display",
469
+ file: "components/data-display.prop.ts",
470
+ vocabulary: ["IconProp", "TitleProp", "DescriptionProp", "ActionProp"],
471
+ },
472
+ KeyValueGridProp: {
473
+ group: "data-display",
474
+ file: "components/data-display.prop.ts",
475
+ vocabulary: [],
476
+ },
477
+ StatusBadgeProp: {
478
+ group: "data-display",
479
+ file: "components/data-display.prop.ts",
480
+ vocabulary: ["StatusToneProp"],
481
+ },
482
+ DataTableProp: {
483
+ group: "data-display",
484
+ file: "components/data-display.prop.ts",
485
+ vocabulary: ["ColumnDefProp", "TableDensityProp", "SortStateProp", "SelectedIdsProp"],
486
+ },
487
+ BadgeProp: { group: "data-display", file: "components/data-display.prop.ts", vocabulary: [] },
488
+ DialogConfirmProp: {
489
+ group: "feedback",
490
+ file: "components/feedback.prop.ts",
491
+ vocabulary: [
492
+ "OpenProp",
493
+ "OnOpenChangeProp",
494
+ "TitleProp",
495
+ "DescriptionProp",
496
+ "ConfirmLabelProp",
497
+ "CancelLabelProp",
498
+ "ConfirmVariantProp",
499
+ "HandlerProp",
500
+ "PendingProp",
501
+ ],
502
+ },
503
+ DataStateProp: { group: "query", file: "components/query.prop.ts", vocabulary: ["HandlerProp"] },
504
+ MutationFeedbackProp: {
505
+ group: "query",
506
+ file: "components/query.prop.ts",
507
+ vocabulary: ["HandlerProp"],
508
+ },
509
+ QueryRefetchButtonProp: { group: "query", file: "components/query.prop.ts", vocabulary: [] },
510
+ InfiniteQueryStateProp: {
511
+ group: "query",
512
+ file: "components/query.prop.ts",
513
+ vocabulary: ["HandlerProp"],
514
+ },
515
+ PrefetchLinkProp: { group: "query", file: "components/query.prop.ts", vocabulary: [] },
516
+ AlertQueryErrorProp: {
517
+ group: "feedback",
518
+ file: "components/feedback.prop.ts",
519
+ vocabulary: ["HandlerProp"],
520
+ },
521
+ AlertProp: {
522
+ group: "feedback",
523
+ file: "components/feedback.prop.ts",
524
+ vocabulary: ["AlertVariantProp", "IconProp", "HandlerProp", "ClassNameProp", "ChildrenProp"],
525
+ },
526
+ AlertTitleProp: {
527
+ group: "feedback",
528
+ file: "components/feedback.prop.ts",
529
+ vocabulary: ["ClassNameProp", "ChildrenProp"],
530
+ },
531
+ AlertContentProp: {
532
+ group: "feedback",
533
+ file: "components/feedback.prop.ts",
534
+ vocabulary: ["ClassNameProp", "ChildrenProp"],
535
+ },
536
+ AlertDescriptionProp: {
537
+ group: "feedback",
538
+ file: "components/feedback.prop.ts",
539
+ vocabulary: ["ClassNameProp", "ChildrenProp"],
540
+ },
541
+ AlertActionsProp: {
542
+ group: "feedback",
543
+ file: "components/feedback.prop.ts",
544
+ vocabulary: ["ClassNameProp", "ChildrenProp"],
545
+ },
546
+ SkeletonRowsProp: { group: "feedback", file: "components/feedback.prop.ts", vocabulary: [] },
547
+ FilterBarProp: {
548
+ group: "navigation",
549
+ file: "components/navigation.prop.ts",
550
+ vocabulary: ["OnClearFiltersProp", "HasActiveFiltersProp", "ChildrenProp"],
551
+ },
552
+ FilterGroupProp: {
553
+ group: "navigation",
554
+ file: "components/navigation.prop.ts",
555
+ vocabulary: ["LabelProp", "ChildrenProp"],
556
+ },
557
+ PaginationProp: {
558
+ group: "navigation",
559
+ file: "components/navigation.prop.ts",
560
+ vocabulary: ["DisabledProp", "ClassNameProp"],
561
+ },
562
+ StepsProp: {
563
+ group: "navigation",
564
+ file: "components/navigation.prop.ts",
565
+ vocabulary: ["ClassNameProp"],
566
+ },
567
+ StepItemProp: { group: "navigation", file: "components/navigation.prop.ts", vocabulary: [] },
568
+ StepStatusProp: { group: "navigation", file: "components/navigation.prop.ts", vocabulary: [] },
569
+ TabsItemsProp: {
570
+ group: "navigation",
571
+ file: "components/navigation.prop.ts",
572
+ vocabulary: ["ClassNameProp"],
573
+ },
574
+ TabItemProp: { group: "navigation", file: "components/navigation.prop.ts", vocabulary: [] },
575
+ FormRootProp: {
576
+ group: "form",
577
+ file: "components/form.prop.ts",
578
+ vocabulary: ["UseZodFormReturnProp", "ZodSchemaProp"],
579
+ },
580
+ FormFieldControlProp: {
581
+ group: "form",
582
+ file: "components/form.prop.ts",
583
+ vocabulary: ["LabelProp", "RequiredProp", "HelperProp", "ErrorProp"],
584
+ },
585
+ UseZodFormOptionsProp: {
586
+ group: "form",
587
+ file: "components/form.prop.ts",
588
+ vocabulary: ["ZodSchemaProp"],
589
+ },
590
+ } as const;
591
+
592
+ export type ComponentPropName = keyof typeof COMPONENT_PROP_REGISTRY;
593
+
594
+ /** Forbidden duplicate concepts — use the canonical name on the left. */
595
+ export const PROP_ALIASES_FORBIDDEN = {
596
+ description: "Use SubtitleProp (pages) or DescriptionProp (dialogs/empty states)",
597
+ actions: "Use ExtraProp (page header) or ActionsProp (toolbars)",
598
+ density: "Disambiguate: PageDensityProp vs TableDensityProp",
599
+ gap: "Disambiguate: StackGapProp vs InlineGapProp",
600
+ onClear: "Use OnClearFiltersProp",
601
+ pending: "Use PendingProp",
602
+ loading: "Use PendingProp or DataStateProp (query group)",
603
+ } as const;
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Content-slot prop types — titles, descriptions, actions.
3
+ * @see docs/PROPS-VOCABULARY.md#content-slots
4
+ */
5
+ import type * as React from "react";
6
+
7
+ /** Primary heading text — page title, dialog title, empty state title. */
8
+ export type TitleProp = React.ReactNode;
9
+
10
+ /** Secondary text below a title — page subtitle, card description. */
11
+ export type SubtitleProp = React.ReactNode;
12
+
13
+ /** Longer explanatory copy — dialog body, empty state body. */
14
+ export type DescriptionProp = React.ReactNode;
15
+
16
+ /** Top-right action slot on pages (Ant Design `extra`). */
17
+ export type ExtraProp = React.ReactNode;
18
+
19
+ /** Bottom action bar on pages — save/cancel, pagination controls. */
20
+ export type FooterProp = React.ReactNode;
21
+
22
+ /** Primary CTA in empty states or inline prompts. */
23
+ export type ActionProp = React.ReactNode;
24
+
25
+ /** Optional icon in empty states and status views (Lucide or compatible). */
26
+ export type IconProp = React.ComponentType<{ className?: string }>;
27
+
28
+ /** Confirm / submit button label in dialogs. */
29
+ export type ConfirmLabelProp = React.ReactNode;
30
+
31
+ /** Cancel / dismiss button label in dialogs. */
32
+ export type CancelLabelProp = React.ReactNode;
33
+
34
+ /** Toolbar actions slot in tables and filter rows. */
35
+ export type ActionsProp = React.ReactNode;
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Data & collection prop types.
3
+ * @see docs/PROPS-VOCABULARY.md#data-collections
4
+ */
5
+ import type * as React from "react";
6
+ import type { ColumnAlignProp, SortDirectionProp } from "./interaction.prop";
7
+ import type { TableDensityProp } from "./layout.prop";
8
+
9
+ /** Generic row identifier extractor for tables with selection. */
10
+ export type GetRowIdProp<T> = (row: T) => string;
11
+
12
+ /** Row click navigation handler. */
13
+ export type OnRowClickProp<T> = (row: T) => void;
14
+
15
+ /** Column definition for DataTable. */
16
+ export type ColumnDefProp<T> = {
17
+ key: string;
18
+ header: React.ReactNode;
19
+ render?: (row: T) => React.ReactNode;
20
+ sortable?: boolean;
21
+ width?: string;
22
+ align?: ColumnAlignProp;
23
+ };
24
+
25
+ /** Set of selected row IDs. */
26
+ export type SelectedIdsProp = Set<string>;
27
+
28
+ /** Selection change callback. */
29
+ export type OnSelectChangeProp = (next: Set<string>) => void;
30
+
31
+ /** Table density change callback. */
32
+ export type OnTableDensityChangeProp = (density: TableDensityProp) => void;
33
+
34
+ /** Sort change callback — undefined clears sort. */
35
+ export type OnSortChangeProp = (
36
+ sort: { key: string; direction: SortDirectionProp } | undefined,
37
+ ) => void;
38
+
39
+ /** Search debounce callback. */
40
+ export type OnSearchChangeProp = (query: string) => void;
41
+
42
+ /** Filter bar reset handler. */
43
+ export type OnClearFiltersProp = () => void;
44
+
45
+ /** Whether any filter is active — shows "Clear all". */
46
+ export type HasActiveFiltersProp = boolean;