@godxjp/ui 5.0.2 → 6.0.1

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 (242) hide show
  1. package/README.md +101 -142
  2. package/dist/app/index.d.ts +140 -0
  3. package/dist/app/index.js +38 -0
  4. package/dist/app.prop-IobwLwaM.d.ts +90 -0
  5. package/dist/checkbox-NkFkqsQ8.d.ts +13 -0
  6. package/dist/chunk-2XW7J3EI.js +226 -0
  7. package/dist/chunk-3F2AKYRD.js +416 -0
  8. package/dist/chunk-3KPEZ5CF.js +37 -0
  9. package/dist/chunk-3UGU5TYP.js +89 -0
  10. package/dist/chunk-6RA3KSVK.js +588 -0
  11. package/dist/chunk-7NZFVD24.js +122 -0
  12. package/dist/chunk-7PWBC4BY.js +25 -0
  13. package/dist/chunk-7S7MYFXE.js +61 -0
  14. package/dist/chunk-7WRZG2IG.js +71 -0
  15. package/dist/chunk-B775Y6BE.js +1 -0
  16. package/dist/chunk-BHV2FUOA.js +111 -0
  17. package/dist/chunk-BI3HERR7.js +70 -0
  18. package/dist/chunk-BPSKQUL2.js +68 -0
  19. package/dist/chunk-CDWPQ5RP.js +187 -0
  20. package/dist/chunk-CP2LET6N.js +244 -0
  21. package/dist/chunk-CQBADMFG.js +20 -0
  22. package/dist/chunk-CRERCLIZ.js +33 -0
  23. package/dist/chunk-DU6ZYZRP.js +238 -0
  24. package/dist/chunk-DY5C44UP.js +55 -0
  25. package/dist/chunk-E4HJNQ62.js +117 -0
  26. package/dist/chunk-E76QIYSY.js +93 -0
  27. package/dist/chunk-F7PG4OEV.js +37 -0
  28. package/dist/chunk-GDSVW62T.js +171 -0
  29. package/dist/chunk-H2FHJOLU.js +178 -0
  30. package/dist/chunk-HJEBRCXL.js +55 -0
  31. package/dist/chunk-ICM6XBST.js +16 -0
  32. package/dist/chunk-IK7I3ABN.js +88 -0
  33. package/dist/chunk-L6J44O74.js +144 -0
  34. package/dist/chunk-LDSLS6HE.js +1 -0
  35. package/dist/chunk-LVNUHUEZ.js +191 -0
  36. package/dist/chunk-M64MVRLS.js +92 -0
  37. package/dist/chunk-NGQW3KEM.js +402 -0
  38. package/dist/chunk-NZ4FOC5N.js +559 -0
  39. package/dist/chunk-PIIRNAXA.js +26 -0
  40. package/dist/chunk-S66TJXJU.js +33 -0
  41. package/dist/chunk-SMLKNECP.js +133 -0
  42. package/dist/chunk-TAHBM3F2.js +66 -0
  43. package/dist/chunk-TO33OY4L.js +150 -0
  44. package/dist/chunk-TO7URV7U.js +51 -0
  45. package/dist/chunk-TOO5AEKL.js +81 -0
  46. package/dist/chunk-U3GHAOIJ.js +299 -0
  47. package/dist/chunk-U7N2A7A3.js +9 -0
  48. package/dist/chunk-UX634MYF.js +123 -0
  49. package/dist/chunk-V6UWJKZF.js +28 -0
  50. package/dist/chunk-VOHTRR5X.js +28 -0
  51. package/dist/chunk-WRFKVUPW.js +332 -0
  52. package/dist/chunk-WXW43RK5.js +24 -0
  53. package/dist/chunk-XG7XDYIM.js +60 -0
  54. package/dist/chunk-YFCQKO3B.js +842 -0
  55. package/dist/chunk-ZDWXGWLY.js +73 -0
  56. package/dist/chunk-ZLK5SPT6.js +11 -0
  57. package/dist/chunk-ZS6DTAM2.js +31 -0
  58. package/dist/chunk-ZT5UEUBO.js +1 -0
  59. package/dist/components/admin/index.d.ts +80 -0
  60. package/dist/components/admin/index.js +38 -0
  61. package/dist/components/data-display/badge.d.ts +12 -0
  62. package/dist/components/data-display/badge.js +3 -0
  63. package/dist/components/data-display/card.d.ts +87 -0
  64. package/dist/components/data-display/card.js +2 -0
  65. package/dist/components/data-display/index.d.ts +72 -0
  66. package/dist/components/data-display/index.js +89 -0
  67. package/dist/components/data-display/popover.d.ts +13 -0
  68. package/dist/components/data-display/popover.js +2 -0
  69. package/dist/components/data-display/scroll-area.d.ts +7 -0
  70. package/dist/components/data-display/scroll-area.js +2 -0
  71. package/dist/components/data-display/table.d.ts +10 -0
  72. package/dist/components/data-display/table.js +3 -0
  73. package/dist/components/data-entry/autocomplete.d.ts +16 -0
  74. package/dist/components/data-entry/autocomplete.js +8 -0
  75. package/dist/components/data-entry/calendar.d.ts +16 -0
  76. package/dist/components/data-entry/calendar.js +4 -0
  77. package/dist/components/data-entry/cascader.d.ts +32 -0
  78. package/dist/components/data-entry/cascader.js +13 -0
  79. package/dist/components/data-entry/checkbox.d.ts +13 -0
  80. package/dist/components/data-entry/checkbox.js +4 -0
  81. package/dist/components/data-entry/color-picker.d.ts +16 -0
  82. package/dist/components/data-entry/color-picker.js +6 -0
  83. package/dist/components/data-entry/command.d.ts +69 -0
  84. package/dist/components/data-entry/command.js +3 -0
  85. package/dist/components/data-entry/date-picker.d.ts +16 -0
  86. package/dist/components/data-entry/date-picker.js +8 -0
  87. package/dist/components/data-entry/date-range-picker.d.ts +16 -0
  88. package/dist/components/data-entry/date-range-picker.js +8 -0
  89. package/dist/components/data-entry/index.d.ts +53 -0
  90. package/dist/components/data-entry/index.js +152 -0
  91. package/dist/components/data-entry/input.d.ts +6 -0
  92. package/dist/components/data-entry/input.js +2 -0
  93. package/dist/components/data-entry/label.d.ts +8 -0
  94. package/dist/components/data-entry/label.js +2 -0
  95. package/dist/components/data-entry/radio.d.ts +24 -0
  96. package/dist/components/data-entry/radio.js +4 -0
  97. package/dist/components/data-entry/select.d.ts +18 -0
  98. package/dist/components/data-entry/select.js +3 -0
  99. package/dist/components/data-entry/slider.d.ts +16 -0
  100. package/dist/components/data-entry/slider.js +2 -0
  101. package/dist/components/data-entry/switch.d.ts +17 -0
  102. package/dist/components/data-entry/switch.js +2 -0
  103. package/dist/components/data-entry/textarea.d.ts +6 -0
  104. package/dist/components/data-entry/textarea.js +3 -0
  105. package/dist/components/data-entry/time-picker.d.ts +16 -0
  106. package/dist/components/data-entry/time-picker.js +7 -0
  107. package/dist/components/data-entry/transfer.d.ts +17 -0
  108. package/dist/components/data-entry/transfer.js +11 -0
  109. package/dist/components/data-entry/tree-select.d.ts +26 -0
  110. package/dist/components/data-entry/tree-select.js +13 -0
  111. package/dist/components/data-entry/upload.d.ts +42 -0
  112. package/dist/components/data-entry/upload.js +11 -0
  113. package/dist/components/feedback/alert.d.ts +60 -0
  114. package/dist/components/feedback/alert.js +7 -0
  115. package/dist/components/feedback/dialog.d.ts +64 -0
  116. package/dist/components/feedback/dialog.js +7 -0
  117. package/dist/components/feedback/index.d.ts +16 -0
  118. package/dist/components/feedback/index.js +14 -0
  119. package/dist/components/feedback/sheet.d.ts +24 -0
  120. package/dist/components/feedback/sheet.js +2 -0
  121. package/dist/components/feedback/sonner.d.ts +6 -0
  122. package/dist/components/feedback/sonner.js +1 -0
  123. package/dist/components/general/button.d.ts +20 -0
  124. package/dist/components/general/button.js +2 -0
  125. package/dist/components/general/index.d.ts +6 -0
  126. package/dist/components/general/index.js +2 -0
  127. package/dist/components/layout/index.d.ts +71 -0
  128. package/dist/components/layout/index.js +5 -0
  129. package/dist/components/navigation/dropdown-menu.d.ts +28 -0
  130. package/dist/components/navigation/dropdown-menu.js +2 -0
  131. package/dist/components/navigation/index.d.ts +32 -0
  132. package/dist/components/navigation/index.js +12 -0
  133. package/dist/components/navigation/pagination.d.ts +11 -0
  134. package/dist/components/navigation/pagination.js +7 -0
  135. package/dist/components/navigation/steps.d.ts +12 -0
  136. package/dist/components/navigation/steps.js +3 -0
  137. package/dist/components/navigation/tabs-items.d.ts +12 -0
  138. package/dist/components/navigation/tabs-items.js +3 -0
  139. package/dist/components/navigation/tabs.d.ts +12 -0
  140. package/dist/components/navigation/tabs.js +2 -0
  141. package/dist/components/query/index.d.ts +43 -0
  142. package/dist/components/query/index.js +8 -0
  143. package/dist/components/ui/index.d.ts +57 -0
  144. package/dist/components/ui/index.js +37 -0
  145. package/dist/content.prop-D1Dd3TAc.d.ts +31 -0
  146. package/dist/data-display.prop-DNTAzmDy.d.ts +58 -0
  147. package/dist/data-entry.prop-BEGA1lTq.d.ts +323 -0
  148. package/dist/data-table-D1u_rKLK.d.ts +83 -0
  149. package/dist/data.prop-BVvfKC_g.d.ts +41 -0
  150. package/dist/feedback.prop-BmxUlpAW.d.ts +64 -0
  151. package/dist/filter-bar-B7OGFO9S.d.ts +10 -0
  152. package/dist/form/index.d.ts +21 -0
  153. package/dist/form/index.js +4 -0
  154. package/dist/form.prop-BHgpuFFm.d.ts +41 -0
  155. package/dist/format-date-ByyZoqI5.d.ts +51 -0
  156. package/dist/general.prop-D7brMPNL.d.ts +16 -0
  157. package/dist/i18n/index.d.ts +217 -0
  158. package/dist/i18n/index.js +2 -0
  159. package/dist/index.d.ts +46 -26
  160. package/dist/index.js +39 -13062
  161. package/dist/inline-C5u6ptJV.d.ts +10 -0
  162. package/dist/interaction.prop-Cdn7wOtq.d.ts +25 -0
  163. package/dist/layout.prop-4TCNvyQZ.d.ts +20 -0
  164. package/dist/layout.prop-C795F0qg.d.ts +112 -0
  165. package/dist/lib/datetime/index.d.ts +31 -0
  166. package/dist/lib/datetime/index.js +1 -0
  167. package/dist/lib/utils.d.ts +5 -0
  168. package/dist/lib/utils.js +1 -0
  169. package/dist/navigation.prop-DpZqcXey.d.ts +78 -0
  170. package/dist/navigation.prop-DxBiClEH.d.ts +20 -0
  171. package/dist/props/components/index.d.ts +27 -0
  172. package/dist/props/components/index.js +1 -0
  173. package/dist/props/index.d.ts +28 -0
  174. package/dist/props/index.js +3 -0
  175. package/dist/props/registry.d.ts +649 -0
  176. package/dist/props/registry.js +1 -0
  177. package/dist/props/vocabulary/index.d.ts +7 -0
  178. package/dist/props/vocabulary/index.js +1 -0
  179. package/dist/query.prop-hIPrk2zI.d.ts +71 -0
  180. package/dist/search-input-uP01rY1L.d.ts +22 -0
  181. package/dist/shared.prop-BNRJc9K0.d.ts +45 -0
  182. package/dist/styles/alert-layout.css +191 -0
  183. package/dist/styles/badge-layout.css +22 -0
  184. package/dist/styles/card-layout.css +373 -0
  185. package/dist/styles/control.css +504 -0
  186. package/dist/styles/data-display-layout.css +246 -0
  187. package/dist/styles/density.css +43 -0
  188. package/dist/styles/dialog-layout.css +84 -0
  189. package/dist/styles/index.css +105 -0
  190. package/dist/styles/layout.css +479 -0
  191. package/dist/styles/shell-layout.css +604 -0
  192. package/dist/styles/table-layout.css +109 -0
  193. package/dist/theme/example.service.css +37 -0
  194. package/dist/tokens/base.css +13 -0
  195. package/dist/tokens/foundation.css +151 -0
  196. package/dist/tokens/primitives/badge.css +13 -0
  197. package/dist/tokens/primitives/card.css +29 -0
  198. package/dist/tokens/primitives/control.css +55 -0
  199. package/dist/tokens/primitives/feedback.css +17 -0
  200. package/dist/tokens/primitives/layout.css +20 -0
  201. package/dist/tokens/primitives/navigation.css +13 -0
  202. package/dist/tokens/primitives/table.css +10 -0
  203. package/dist/types-mvzYGrma.d.ts +37 -0
  204. package/dist/use-toast-Dol5bdY3.d.ts +34 -0
  205. package/package.json +279 -117
  206. package/scripts/ui-audit.mjs +179 -0
  207. package/BRAND.md +0 -296
  208. package/CHANGELOG.md +0 -668
  209. package/config/eslint.js +0 -54
  210. package/config/prettier.cjs +0 -20
  211. package/config/tsconfig.base.json +0 -22
  212. package/config/vitest.base.ts +0 -26
  213. package/dist/MiniMonth-YAmPGEpC.d.ts +0 -143
  214. package/dist/Table.types-BbsxoIYE.d.ts +0 -352
  215. package/dist/color-DO0qqUAb.d.ts +0 -38
  216. package/dist/components/composites.d.ts +0 -963
  217. package/dist/components/composites.js +0 -7343
  218. package/dist/components/composites.js.map +0 -1
  219. package/dist/components/primitives.d.ts +0 -2744
  220. package/dist/components/primitives.js +0 -7356
  221. package/dist/components/primitives.js.map +0 -1
  222. package/dist/components/shell.d.ts +0 -182
  223. package/dist/components/shell.js +0 -774
  224. package/dist/components/shell.js.map +0 -1
  225. package/dist/hooks.d.ts +0 -100
  226. package/dist/hooks.js +0 -558
  227. package/dist/hooks.js.map +0 -1
  228. package/dist/i18n.d.ts +0 -61
  229. package/dist/i18n.js +0 -860
  230. package/dist/i18n.js.map +0 -1
  231. package/dist/index.js.map +0 -1
  232. package/dist/padding-DY0JV5Ja.d.ts +0 -16
  233. package/dist/preferences.d.ts +0 -132
  234. package/dist/preferences.js +0 -262
  235. package/dist/preferences.js.map +0 -1
  236. package/dist/props.d.ts +0 -86
  237. package/dist/props.js +0 -16
  238. package/dist/props.js.map +0 -1
  239. package/dist/size-CQwNvOWd.d.ts +0 -19
  240. package/dist/types-LTj-2bl-.d.ts +0 -30
  241. package/dist/useTableViews-D5NIAJ7h.d.ts +0 -154
  242. package/src/tokens/tailwind.css +0 -158
package/package.json CHANGED
@@ -1,162 +1,324 @@
1
1
  {
2
2
  "name": "@godxjp/ui",
3
- "version": "5.0.2",
4
- "description": "GoDX professional UI framework — design tokens, primitives, shell, i18n, hooks, and toolchain config shared across every service frontend. Source of truth for the GoDX visual language.",
3
+ "version": "6.0.1",
5
4
  "type": "module",
6
- "main": "./dist/index.js",
7
- "module": "./dist/index.js",
8
- "types": "./dist/index.d.ts",
9
- "sideEffects": [
10
- "**/*.css"
11
- ],
12
- "publishConfig": {
13
- "registry": "https://registry.npmjs.org/",
14
- "access": "public"
15
- },
16
- "repository": {
17
- "type": "git",
18
- "url": "git+https://github.com/godx-jp/godxjp-ui.git"
19
- },
20
- "homepage": "https://github.com/godx-jp/godxjp-ui#readme",
21
- "license": "Apache-2.0",
5
+ "description": "@godxjp/ui — shared React UI framework (shadcn + Radix + Tailwind v4).",
22
6
  "files": [
23
7
  "dist",
24
- "src/tokens",
25
- "config",
26
- "BRAND.md",
27
- "CHANGELOG.md"
8
+ "scripts/ui-audit.mjs",
9
+ "README.md"
28
10
  ],
29
- "scripts": {
30
- "build": "tsup",
31
- "dev": "tsup --watch",
32
- "storybook": "storybook dev -p 6006",
33
- "build-storybook": "storybook build -o storybook-static",
34
- "type-check": "tsc --noEmit",
35
- "test": "vitest run",
36
- "test:watch": "vitest",
37
- "test:stories": "vitest run --project storybook",
38
- "test:unit": "vitest run --project unit",
39
- "lint:tokens": "node scripts/lint-tokens.mjs",
40
- "check:stories-parity": "node scripts/check-stories-parity.mjs",
41
- "check:docs-parity": "node scripts/check-docs-parity.mjs",
42
- "sync:skills": "bash scripts/sync-skills.sh",
43
- "sync:skills:apply": "bash scripts/sync-skills.sh --apply",
44
- "prepublishOnly": "npm run build",
45
- "prepare": "husky"
46
- },
11
+ "main": "./dist/index.js",
12
+ "types": "./dist/index.d.ts",
47
13
  "exports": {
48
14
  ".": {
49
15
  "types": "./dist/index.d.ts",
50
16
  "import": "./dist/index.js"
51
17
  },
52
- "./tailwind": "./src/tokens/tailwind.css",
53
- "./tailwind.css": "./src/tokens/tailwind.css",
54
- "./styles": "./src/styles/index.css",
55
- "./styles/index.css": "./src/styles/index.css",
56
- "./styles/theme.css": "./src/styles/theme.css",
57
- "./styles/base.css": "./src/styles/base.css",
58
- "./styles/shell.css": "./src/styles/shell.css",
59
- "./styles/sonner.css": "./src/styles/sonner.css",
60
- "./tokens": "./src/styles/theme.css",
61
- "./tokens.css": "./src/styles/theme.css",
62
- "./tokens-ext.css": "./src/styles/shell.css",
63
- "./sonner.css": "./src/styles/sonner.css",
64
- "./i18n": {
65
- "types": "./dist/i18n.d.ts",
66
- "import": "./dist/i18n.js"
18
+ "./styles": "./dist/styles/index.css",
19
+ "./tokens": "./dist/tokens/base.css",
20
+ "./admin": {
21
+ "types": "./dist/components/admin/index.d.ts",
22
+ "import": "./dist/components/admin/index.js"
23
+ },
24
+ "./layout": {
25
+ "types": "./dist/components/layout/index.d.ts",
26
+ "import": "./dist/components/layout/index.js"
27
+ },
28
+ "./general": {
29
+ "types": "./dist/components/general/index.d.ts",
30
+ "import": "./dist/components/general/index.js"
31
+ },
32
+ "./data-entry": {
33
+ "types": "./dist/components/data-entry/index.d.ts",
34
+ "import": "./dist/components/data-entry/index.js"
35
+ },
36
+ "./data-display": {
37
+ "types": "./dist/components/data-display/index.d.ts",
38
+ "import": "./dist/components/data-display/index.js"
39
+ },
40
+ "./feedback": {
41
+ "types": "./dist/components/feedback/index.d.ts",
42
+ "import": "./dist/components/feedback/index.js"
43
+ },
44
+ "./query": {
45
+ "types": "./dist/components/query/index.d.ts",
46
+ "import": "./dist/components/query/index.js"
47
+ },
48
+ "./ui": {
49
+ "types": "./dist/components/ui/index.d.ts",
50
+ "import": "./dist/components/ui/index.js"
67
51
  },
68
- "./hooks": {
69
- "types": "./dist/hooks.d.ts",
70
- "import": "./dist/hooks.js"
52
+ "./navigation": {
53
+ "types": "./dist/components/navigation/index.d.ts",
54
+ "import": "./dist/components/navigation/index.js"
71
55
  },
72
56
  "./props": {
73
- "types": "./dist/props.d.ts",
74
- "import": "./dist/props.js"
57
+ "types": "./dist/props/index.d.ts",
58
+ "import": "./dist/props/index.js"
59
+ },
60
+ "./props/vocabulary": {
61
+ "types": "./dist/props/vocabulary/index.d.ts",
62
+ "import": "./dist/props/vocabulary/index.js"
63
+ },
64
+ "./props/components": {
65
+ "types": "./dist/props/components/index.d.ts",
66
+ "import": "./dist/props/components/index.js"
67
+ },
68
+ "./props/registry": {
69
+ "types": "./dist/props/registry.d.ts",
70
+ "import": "./dist/props/registry.js"
71
+ },
72
+ "./form": {
73
+ "types": "./dist/form/index.d.ts",
74
+ "import": "./dist/form/index.js"
75
+ },
76
+ "./app": {
77
+ "types": "./dist/app/index.d.ts",
78
+ "import": "./dist/app/index.js"
79
+ },
80
+ "./datetime": {
81
+ "types": "./dist/lib/datetime/index.d.ts",
82
+ "import": "./dist/lib/datetime/index.js"
83
+ },
84
+ "./i18n": {
85
+ "types": "./dist/i18n/index.d.ts",
86
+ "import": "./dist/i18n/index.js"
87
+ },
88
+ "./lib/utils": {
89
+ "types": "./dist/lib/utils.d.ts",
90
+ "import": "./dist/lib/utils.js"
91
+ },
92
+ "./ui/button": {
93
+ "types": "./dist/components/general/button.d.ts",
94
+ "import": "./dist/components/general/button.js"
95
+ },
96
+ "./ui/badge": {
97
+ "types": "./dist/components/data-display/badge.d.ts",
98
+ "import": "./dist/components/data-display/badge.js"
99
+ },
100
+ "./ui/card": {
101
+ "types": "./dist/components/data-display/card.d.ts",
102
+ "import": "./dist/components/data-display/card.js"
103
+ },
104
+ "./ui/table": {
105
+ "types": "./dist/components/data-display/table.d.ts",
106
+ "import": "./dist/components/data-display/table.js"
107
+ },
108
+ "./ui/input": {
109
+ "types": "./dist/components/data-entry/input.d.ts",
110
+ "import": "./dist/components/data-entry/input.js"
111
+ },
112
+ "./ui/label": {
113
+ "types": "./dist/components/data-entry/label.d.ts",
114
+ "import": "./dist/components/data-entry/label.js"
115
+ },
116
+ "./ui/select": {
117
+ "types": "./dist/components/data-entry/select.d.ts",
118
+ "import": "./dist/components/data-entry/select.js"
119
+ },
120
+ "./ui/checkbox": {
121
+ "types": "./dist/components/data-entry/checkbox.d.ts",
122
+ "import": "./dist/components/data-entry/checkbox.js"
123
+ },
124
+ "./ui/radio": {
125
+ "types": "./dist/components/data-entry/radio.d.ts",
126
+ "import": "./dist/components/data-entry/radio.js"
75
127
  },
76
- "./primitives": {
77
- "types": "./dist/components/primitives.d.ts",
78
- "import": "./dist/components/primitives.js"
128
+ "./ui/switch": {
129
+ "types": "./dist/components/data-entry/switch.d.ts",
130
+ "import": "./dist/components/data-entry/switch.js"
79
131
  },
80
- "./components/primitives": {
81
- "types": "./dist/components/primitives.d.ts",
82
- "import": "./dist/components/primitives.js"
132
+ "./ui/slider": {
133
+ "types": "./dist/components/data-entry/slider.d.ts",
134
+ "import": "./dist/components/data-entry/slider.js"
83
135
  },
84
- "./components/shell": {
85
- "types": "./dist/components/shell.d.ts",
86
- "import": "./dist/components/shell.js"
136
+ "./ui/calendar": {
137
+ "types": "./dist/components/data-entry/calendar.d.ts",
138
+ "import": "./dist/components/data-entry/calendar.js"
87
139
  },
88
- "./components/composites": {
89
- "types": "./dist/components/composites.d.ts",
90
- "import": "./dist/components/composites.js"
140
+ "./ui/date-picker": {
141
+ "types": "./dist/components/data-entry/date-picker.d.ts",
142
+ "import": "./dist/components/data-entry/date-picker.js"
91
143
  },
92
- "./preferences": {
93
- "types": "./dist/preferences.d.ts",
94
- "import": "./dist/preferences.js"
144
+ "./ui/date-range-picker": {
145
+ "types": "./dist/components/data-entry/date-range-picker.d.ts",
146
+ "import": "./dist/components/data-entry/date-range-picker.js"
95
147
  },
96
- "./eslint-config": "./config/eslint.js",
97
- "./prettier-config": "./config/prettier.cjs",
98
- "./tsconfig": "./config/tsconfig.base.json",
99
- "./vitest-config": "./config/vitest.base.ts"
148
+ "./ui/time-picker": {
149
+ "types": "./dist/components/data-entry/time-picker.d.ts",
150
+ "import": "./dist/components/data-entry/time-picker.js"
151
+ },
152
+ "./ui/color-picker": {
153
+ "types": "./dist/components/data-entry/color-picker.d.ts",
154
+ "import": "./dist/components/data-entry/color-picker.js"
155
+ },
156
+ "./ui/autocomplete": {
157
+ "types": "./dist/components/data-entry/autocomplete.d.ts",
158
+ "import": "./dist/components/data-entry/autocomplete.js"
159
+ },
160
+ "./ui/upload": {
161
+ "types": "./dist/components/data-entry/upload.d.ts",
162
+ "import": "./dist/components/data-entry/upload.js"
163
+ },
164
+ "./ui/cascader": {
165
+ "types": "./dist/components/data-entry/cascader.d.ts",
166
+ "import": "./dist/components/data-entry/cascader.js"
167
+ },
168
+ "./ui/tree-select": {
169
+ "types": "./dist/components/data-entry/tree-select.d.ts",
170
+ "import": "./dist/components/data-entry/tree-select.js"
171
+ },
172
+ "./ui/transfer": {
173
+ "types": "./dist/components/data-entry/transfer.d.ts",
174
+ "import": "./dist/components/data-entry/transfer.js"
175
+ },
176
+ "./ui/command": {
177
+ "types": "./dist/components/data-entry/command.d.ts",
178
+ "import": "./dist/components/data-entry/command.js"
179
+ },
180
+ "./ui/scroll-area": {
181
+ "types": "./dist/components/data-display/scroll-area.d.ts",
182
+ "import": "./dist/components/data-display/scroll-area.js"
183
+ },
184
+ "./ui/popover": {
185
+ "types": "./dist/components/data-display/popover.d.ts",
186
+ "import": "./dist/components/data-display/popover.js"
187
+ },
188
+ "./ui/textarea": {
189
+ "types": "./dist/components/data-entry/textarea.d.ts",
190
+ "import": "./dist/components/data-entry/textarea.js"
191
+ },
192
+ "./ui/dialog": {
193
+ "types": "./dist/components/feedback/dialog.d.ts",
194
+ "import": "./dist/components/feedback/dialog.js"
195
+ },
196
+ "./ui/alert-dialog": {
197
+ "types": "./dist/components/feedback/dialog.d.ts",
198
+ "import": "./dist/components/feedback/dialog.js"
199
+ },
200
+ "./ui/alert": {
201
+ "types": "./dist/components/feedback/alert.d.ts",
202
+ "import": "./dist/components/feedback/alert.js"
203
+ },
204
+ "./ui/sonner": {
205
+ "types": "./dist/components/feedback/sonner.d.ts",
206
+ "import": "./dist/components/feedback/sonner.js"
207
+ },
208
+ "./ui/tabs": {
209
+ "types": "./dist/components/navigation/tabs.d.ts",
210
+ "import": "./dist/components/navigation/tabs.js"
211
+ },
212
+ "./ui/tabs-items": {
213
+ "types": "./dist/components/navigation/tabs-items.d.ts",
214
+ "import": "./dist/components/navigation/tabs-items.js"
215
+ },
216
+ "./ui/pagination": {
217
+ "types": "./dist/components/navigation/pagination.d.ts",
218
+ "import": "./dist/components/navigation/pagination.js"
219
+ },
220
+ "./ui/steps": {
221
+ "types": "./dist/components/navigation/steps.d.ts",
222
+ "import": "./dist/components/navigation/steps.js"
223
+ },
224
+ "./ui/sheet": {
225
+ "types": "./dist/components/feedback/sheet.d.ts",
226
+ "import": "./dist/components/feedback/sheet.js"
227
+ },
228
+ "./ui/dropdown-menu": {
229
+ "types": "./dist/components/navigation/dropdown-menu.d.ts",
230
+ "import": "./dist/components/navigation/dropdown-menu.js"
231
+ }
232
+ },
233
+ "scripts": {
234
+ "typecheck": "tsc --noEmit -p tsconfig.json",
235
+ "lint": "eslint .",
236
+ "lint:fix": "eslint . --fix",
237
+ "format": "prettier --check .",
238
+ "format:fix": "prettier --write .",
239
+ "test": "vitest run",
240
+ "test:watch": "vitest",
241
+ "test:coverage": "vitest run --coverage",
242
+ "verify": "pnpm typecheck && pnpm lint && pnpm format && pnpm test",
243
+ "verify:release": "pnpm typecheck && pnpm lint && pnpm build && pnpm test",
244
+ "preview": "node preview/scripts/kill-port.mjs && vite --config preview/vite.config.ts --port 6008 --strictPort",
245
+ "preview:build": "vite build --config preview/vite.config.ts",
246
+ "docs:sync-primitives": "node preview/scripts/sync-primitive-docs.mjs && prettier --write \"docs/primitives/**/*.tsx\"",
247
+ "audit": "node scripts/ui-audit.mjs",
248
+ "build": "tsup && node scripts/copy-styles.mjs",
249
+ "prepublishOnly": "pnpm run build"
250
+ },
251
+ "peerDependencies": {
252
+ "@hookform/resolvers": "^5.2.0",
253
+ "@tanstack/react-query": ">=5.0.0",
254
+ "react": ">=19.0.0",
255
+ "react-dom": ">=19.0.0",
256
+ "react-hook-form": "^7.76.0",
257
+ "react-router-dom": ">=7.0.0",
258
+ "tailwindcss": ">=4.0.0",
259
+ "zod": "^4.4.0"
100
260
  },
101
261
  "dependencies": {
102
- "@hookform/resolvers": "^5.2.2",
103
- "@internationalized/date": "^3.10.0",
262
+ "@date-fns/tz": "^1.5.0",
263
+ "@fontsource/m-plus-2": "^5.2.9",
104
264
  "@radix-ui/react-alert-dialog": "^1.1.15",
105
265
  "@radix-ui/react-checkbox": "^1.3.3",
266
+ "@radix-ui/react-collapsible": "^1.1.12",
267
+ "@radix-ui/react-context": "^1.1.2",
106
268
  "@radix-ui/react-dialog": "^1.1.15",
107
269
  "@radix-ui/react-dropdown-menu": "^2.1.16",
108
270
  "@radix-ui/react-label": "^2.1.8",
109
271
  "@radix-ui/react-popover": "^1.1.15",
110
272
  "@radix-ui/react-radio-group": "^1.3.8",
273
+ "@radix-ui/react-scroll-area": "^1.2.10",
111
274
  "@radix-ui/react-select": "^2.2.6",
112
- "@radix-ui/react-separator": "^1.1.8",
113
275
  "@radix-ui/react-slider": "^1.3.6",
114
276
  "@radix-ui/react-slot": "^1.2.4",
115
277
  "@radix-ui/react-switch": "^1.2.6",
116
278
  "@radix-ui/react-tabs": "^1.1.13",
117
- "@radix-ui/react-tooltip": "^1.2.8",
118
- "@radix-ui/react-visually-hidden": "^1.2.4",
119
- "@tanstack/react-table": "^8.21.3",
120
279
  "class-variance-authority": "^0.7.1",
121
280
  "clsx": "^2.1.1",
122
281
  "cmdk": "^1.1.1",
123
- "i18next": "^26.2.0",
124
- "i18next-browser-languagedetector": "^8.2.1",
125
- "lucide-react": "^1.16.0",
126
- "qrcode": "^1.5.4",
127
- "react-aria-components": "^1.13.0",
128
- "react-easy-crop": "^5.5.7",
129
- "react-hook-form": "^7.76.0",
130
- "react-i18next": "^17.0.8",
282
+ "date-fns": "^4.1.0",
283
+ "lucide-react": "^1.14.0",
284
+ "react-day-picker": "^10.0.1",
131
285
  "sonner": "^2.0.7",
132
- "tailwind-merge": "^3.6.0",
133
- "zod": "^4.4.3"
134
- },
135
- "peerDependencies": {
136
- "react": "^18 || ^19",
137
- "react-dom": "^18 || ^19",
138
- "tailwindcss": "^4"
286
+ "tailwind-merge": "^3.5.0",
287
+ "tailwindcss-animate": "^1.0.7"
139
288
  },
140
289
  "devDependencies": {
141
- "@storybook/addon-docs": "^10.4.0",
142
- "@storybook/addon-vitest": "^10.4.0",
143
- "@storybook/react": "^10.4.0",
144
- "@storybook/react-vite": "^10.4.0",
145
- "@tailwindcss/vite": "^4.3.0",
146
- "@types/qrcode": "^1.5.6",
290
+ "@eslint/js": "^9.39.4",
291
+ "@hookform/resolvers": "^5.2.2",
292
+ "@tailwindcss/vite": "^4.2.4",
293
+ "@tanstack/react-query": "^5.100.9",
294
+ "@testing-library/jest-dom": "^6.9.1",
295
+ "@testing-library/react": "^16.3.2",
296
+ "@testing-library/user-event": "^14.6.1",
147
297
  "@types/react": "^19.2.14",
148
298
  "@types/react-dom": "^19.2.3",
149
- "@vitejs/plugin-react": "^6.0.2",
150
- "@vitest/browser": "^4.1.6",
151
- "@vitest/browser-playwright": "^4.1.6",
152
- "axios": "^1.16.1",
153
- "husky": "^9.1.7",
154
- "playwright": "^1.60.0",
155
- "prettier": "^3.8.3",
156
- "storybook": "^10.4.0",
299
+ "@vitejs/plugin-react": "^6.0.1",
300
+ "@vitest/coverage-v8": "^4.1.5",
301
+ "eslint": "^9.39.2",
302
+ "eslint-plugin-react": "^7.37.5",
303
+ "eslint-plugin-react-hooks": "^7.1.1",
304
+ "globals": "^15.15.0",
305
+ "jsdom": "^29.1.1",
306
+ "prettier": "^3.6.2",
307
+ "prettier-plugin-tailwindcss": "^0.6.14",
308
+ "react": "^19.2.6",
309
+ "react-dom": "^19.2.6",
310
+ "react-hook-form": "^7.76.0",
311
+ "react-router-dom": "^7.15.0",
312
+ "tailwindcss": "^4.2.4",
157
313
  "tsup": "^8.5.1",
158
314
  "typescript": "^6.0.3",
159
- "vite": "^8.0.13",
160
- "vitest": "^4.1.6"
161
- }
315
+ "typescript-eslint": "^8.60.0",
316
+ "vite": "^8.0.10",
317
+ "vitest": "^4.1.5",
318
+ "zod": "^4.4.3"
319
+ },
320
+ "bin": {
321
+ "godxjp-ui-audit": "scripts/ui-audit.mjs"
322
+ },
323
+ "module": "./dist/index.js"
162
324
  }
@@ -0,0 +1,179 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * godxjp-ui audit — the design system's own linter for consumer UI code.
4
+ *
5
+ * Enforces the UI-standardization rules that ship with @godxjp/ui
6
+ * (see the app's .claude/skills/frontend-design/rules/ui-standardization.md):
7
+ * use the design system, never hand-roll. Inspired by `@google/design.md lint`
8
+ * — structured, agent-readable findings.
9
+ *
10
+ * Runs from the CONSUMER's repo root and scans its hand-written UI
11
+ * (components / pages / layouts) — never the framework or generated code.
12
+ *
13
+ * Usage (from the consuming app):
14
+ * node packages/godx-ui/scripts/ui-audit.mjs # human report; exit 1 on error
15
+ * node packages/godx-ui/scripts/ui-audit.mjs --format json
16
+ * node packages/godx-ui/scripts/ui-audit.mjs --quiet # errors only
17
+ * node packages/godx-ui/scripts/ui-audit.mjs src/ui lib/ # custom scan dirs
18
+ */
19
+ import { readdirSync, readFileSync, statSync } from "node:fs";
20
+ import { join, relative } from "node:path";
21
+
22
+ const CWD = process.cwd();
23
+ const args = process.argv.slice(2);
24
+ const asJson = args.includes("--format") && args[args.indexOf("--format") + 1] === "json";
25
+ const quiet = args.includes("--quiet");
26
+ const dirArgs = args.filter((a) => !a.startsWith("--") && a !== "json");
27
+ const SCAN_DIRS = dirArgs.length
28
+ ? dirArgs
29
+ : ["resources/js/components", "resources/js/pages", "resources/js/layouts"];
30
+
31
+ const PALETTE =
32
+ "red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose|gray|grey|slate|zinc|neutral|stone";
33
+
34
+ /** @type {{id:string, severity:'error'|'warn', test:RegExp, message:string}[]} */
35
+ const RULES = [
36
+ {
37
+ id: "no-space-xy",
38
+ severity: "error",
39
+ test: /\bspace-[xy]-\d/,
40
+ message: "Use <Stack>/<Inline> with gap, not space-x/y-* (rules §5).",
41
+ },
42
+ {
43
+ id: "no-raw-palette-color",
44
+ severity: "error",
45
+ test: new RegExp(
46
+ `\\b(bg|text|border|ring|fill|stroke|from|to|via|divide|outline)-(${PALETTE})-\\d`,
47
+ ),
48
+ message:
49
+ "Use semantic tokens (bg-primary, text-muted-foreground…), not raw palette colors (rules §4).",
50
+ },
51
+ {
52
+ id: "no-arbitrary-hex",
53
+ severity: "error",
54
+ test: /(bg|text|border|ring|fill|stroke|from|to|via)-\[#[0-9a-fA-F]{3,8}\]/,
55
+ message: "No hardcoded hex colors in className; use design-system tokens (rules §4).",
56
+ },
57
+ {
58
+ id: "no-raw-select",
59
+ severity: "error",
60
+ test: /<select[\s>]/,
61
+ message: "Use <Select> from @godxjp/ui, not a raw <select> (rules §3).",
62
+ },
63
+ {
64
+ id: "no-raw-table",
65
+ severity: "error",
66
+ test: /<table[\s>]/,
67
+ message: "Use the <Table> family from @godxjp/ui, not a raw <table> (rules §3).",
68
+ },
69
+ {
70
+ id: "no-raw-textarea",
71
+ severity: "warn",
72
+ test: /<textarea[\s>]/,
73
+ message: "Use <Textarea> from @godxjp/ui, not a raw <textarea> (rules §3).",
74
+ },
75
+ {
76
+ id: "no-dark-color-override",
77
+ severity: "warn",
78
+ test: /\bdark:(bg|text|border|ring|fill|stroke)-/,
79
+ message: "Don't add dark: color overrides — semantic tokens already adapt (rules §4).",
80
+ },
81
+ {
82
+ id: "manual-field-error",
83
+ severity: "warn",
84
+ test: /<p[^>]*className="[^"]*text-(xs|sm)[^"]*text-destructive/,
85
+ message:
86
+ "Field errors should use <FormField error=…>, not a hand-rolled <p> (rules §1). OK only for checkbox/radio groups.",
87
+ },
88
+ {
89
+ id: "manual-field-helper",
90
+ severity: "warn",
91
+ test: /<p[^>]*className="text-xs text-muted-foreground"/,
92
+ message:
93
+ "Field helper text should use <FormField helper=…>, not a hand-rolled <p> (rules §1). OK only for checkbox/radio groups.",
94
+ },
95
+ {
96
+ id: "raw-white-black",
97
+ severity: "warn",
98
+ test: /\b(bg|text|border)-(white|black)\b/,
99
+ message:
100
+ "Prefer semantic tokens (text-primary-foreground, bg-background…) over raw white/black (rules §4).",
101
+ },
102
+ ];
103
+
104
+ function walk(dir, acc = []) {
105
+ let entries;
106
+ try {
107
+ entries = readdirSync(dir);
108
+ } catch {
109
+ return acc;
110
+ }
111
+ for (const name of entries) {
112
+ const full = join(dir, name);
113
+ const st = statSync(full);
114
+ if (st.isDirectory()) {
115
+ walk(full, acc);
116
+ } else if (name.endsWith(".tsx") || name.endsWith(".ts")) {
117
+ acc.push(full);
118
+ }
119
+ }
120
+ return acc;
121
+ }
122
+
123
+ const findings = [];
124
+ for (const dir of SCAN_DIRS) {
125
+ for (const file of walk(join(CWD, dir))) {
126
+ const rel = relative(CWD, file);
127
+ const lines = readFileSync(file, "utf8").split("\n");
128
+ lines.forEach((line, i) => {
129
+ for (const rule of RULES) {
130
+ if (rule.test.test(line)) {
131
+ findings.push({
132
+ file: rel,
133
+ line: i + 1,
134
+ rule: rule.id,
135
+ severity: rule.severity,
136
+ message: rule.message,
137
+ snippet: line.trim().slice(0, 120),
138
+ });
139
+ }
140
+ }
141
+ });
142
+ }
143
+ }
144
+
145
+ const errors = findings.filter((f) => f.severity === "error");
146
+ const warnings = findings.filter((f) => f.severity === "warn");
147
+
148
+ if (asJson) {
149
+ process.stdout.write(
150
+ JSON.stringify(
151
+ { summary: { errors: errors.length, warnings: warnings.length }, findings },
152
+ null,
153
+ 2,
154
+ ) + "\n",
155
+ );
156
+ } else {
157
+ const C = {
158
+ red: "\x1b[31m",
159
+ yellow: "\x1b[33m",
160
+ dim: "\x1b[2m",
161
+ bold: "\x1b[1m",
162
+ reset: "\x1b[0m",
163
+ };
164
+ const shown = quiet ? errors : findings;
165
+ for (const f of shown) {
166
+ const tag = f.severity === "error" ? `${C.red}error${C.reset}` : `${C.yellow}warn ${C.reset}`;
167
+ console.log(`${tag} ${C.bold}${f.file}:${f.line}${C.reset} ${C.dim}[${f.rule}]${C.reset}`);
168
+ console.log(` ${f.message}`);
169
+ console.log(` ${C.dim}${f.snippet}${C.reset}`);
170
+ }
171
+ console.log(
172
+ `\ngodxjp-ui audit: ${C.red}${errors.length} error(s)${C.reset}, ${C.yellow}${warnings.length} warning(s)${C.reset} across ${SCAN_DIRS.join(", ")}.`,
173
+ );
174
+ if (errors.length === 0 && warnings.length === 0) {
175
+ console.log("✓ No UI-standardization violations found.");
176
+ }
177
+ }
178
+
179
+ process.exit(errors.length > 0 ? 1 : 0);