@next-vibe/checker 1.0.11 → 1.0.12

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 (394) hide show
  1. package/.dist/bin/vibe-runtime.js +10 -19
  2. package/.dist/bin/vibe-runtime.js.map +3 -3
  3. package/check.config.ts +4 -4
  4. package/package.json +2 -9
  5. package/src/app/api/[locale]/LICENSE +674 -0
  6. package/src/app/api/[locale]/i18n/de/index.ts +13 -0
  7. package/src/app/api/[locale]/i18n/en/index.ts +12 -0
  8. package/src/app/api/[locale]/i18n/pl/index.ts +11 -0
  9. package/src/app/api/[locale]/shared/i18n/de/index.ts +85 -0
  10. package/src/app/api/[locale]/shared/i18n/en/index.ts +83 -0
  11. package/src/app/api/[locale]/shared/i18n/pl/index.ts +85 -0
  12. package/src/app/api/[locale]/shared/stats-filtering.ts +202 -0
  13. package/src/app/api/[locale]/shared/types/common.schema.ts +55 -0
  14. package/src/app/api/[locale]/shared/types/response.schema.ts +372 -0
  15. package/src/app/api/[locale]/shared/types/stats-filtering.schema.ts +375 -0
  16. package/src/app/api/[locale]/shared/types/utils.ts +190 -0
  17. package/src/app/api/[locale]/shared/utils/base64.ts +49 -0
  18. package/src/app/api/[locale]/shared/utils/env-util.ts +40 -0
  19. package/src/app/api/[locale]/shared/utils/i18n/de/index.ts +21 -0
  20. package/src/app/api/[locale]/shared/utils/i18n/en/index.ts +19 -0
  21. package/src/app/api/[locale]/shared/utils/i18n/pl/index.ts +21 -0
  22. package/src/app/api/[locale]/shared/utils/index.ts +11 -0
  23. package/src/app/api/[locale]/shared/utils/object-path.ts +41 -0
  24. package/src/app/api/[locale]/shared/utils/object.test.ts +82 -0
  25. package/src/app/api/[locale]/shared/utils/object.ts +75 -0
  26. package/src/app/api/[locale]/shared/utils/parse-error.ts +134 -0
  27. package/src/app/api/[locale]/shared/utils/parse-json.ts +70 -0
  28. package/src/app/api/[locale]/shared/utils/time.ts +53 -0
  29. package/src/app/api/[locale]/shared/utils/validation.ts +127 -0
  30. package/src/app/api/[locale]/shared/utils/zod-required-fields.ts +116 -0
  31. package/src/app/api/[locale]/system/builder/definition.ts +1942 -0
  32. package/src/app/api/[locale]/system/builder/enum.ts +77 -0
  33. package/src/app/api/[locale]/system/builder/i18n/de/index.ts +677 -0
  34. package/src/app/api/[locale]/system/builder/i18n/en/index.ts +665 -0
  35. package/src/app/api/[locale]/system/builder/i18n/pl/index.ts +668 -0
  36. package/src/app/api/[locale]/system/builder/repository/build-executor.test.ts +182 -0
  37. package/src/app/api/[locale]/system/builder/repository/build-executor.ts +583 -0
  38. package/src/app/api/[locale]/system/builder/repository/bun-compiler.ts +261 -0
  39. package/src/app/api/[locale]/system/builder/repository/bundle-analyzer.ts +197 -0
  40. package/src/app/api/[locale]/system/builder/repository/config-loader.ts +159 -0
  41. package/src/app/api/[locale]/system/builder/repository/config-validator.ts +97 -0
  42. package/src/app/api/[locale]/system/builder/repository/constants.ts +125 -0
  43. package/src/app/api/[locale]/system/builder/repository/error-suggester.ts +75 -0
  44. package/src/app/api/[locale]/system/builder/repository/file-copier.ts +98 -0
  45. package/src/app/api/[locale]/system/builder/repository/folder-cleaner.ts +80 -0
  46. package/src/app/api/[locale]/system/builder/repository/index.ts +2 -0
  47. package/src/app/api/[locale]/system/builder/repository/npm-package-generator.ts +146 -0
  48. package/src/app/api/[locale]/system/builder/repository/output-formatter.ts +104 -0
  49. package/src/app/api/[locale]/system/builder/repository/profile-service.ts +79 -0
  50. package/src/app/api/[locale]/system/builder/repository/report-generator.ts +125 -0
  51. package/src/app/api/[locale]/system/builder/repository/vite-compiler.ts +291 -0
  52. package/src/app/api/[locale]/system/builder/route.ts +21 -0
  53. package/src/app/api/[locale]/system/builder/test-files/file1.ts +2 -0
  54. package/src/app/api/[locale]/system/builder/test-files/file2.tsx +10 -0
  55. package/src/app/api/[locale]/system/builder/test-files/file3.tsx +16 -0
  56. package/src/app/api/[locale]/system/builder/test-files/folderToCopy/fileInFolder.ts +2 -0
  57. package/src/app/api/[locale]/system/builder/test-files/test-config.ts +38 -0
  58. package/src/app/api/[locale]/system/builder/test-files/test-delete-config.ts +8 -0
  59. package/src/app/api/[locale]/system/builder/test-files/test-project/package.json +24 -0
  60. package/src/app/api/[locale]/system/builder/test-files/test-project/src/constants.ts +6 -0
  61. package/src/app/api/[locale]/system/builder/test-files/test-project/src/greet.ts +18 -0
  62. package/src/app/api/[locale]/system/builder/test-files/test-project/src/index.ts +7 -0
  63. package/src/app/api/[locale]/system/builder/test-files/test-project/src/utils/calculate.ts +27 -0
  64. package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.json +19 -0
  65. package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.tsbuildinfo +1 -0
  66. package/src/app/api/[locale]/system/builder/test-files/test3.css +1 -0
  67. package/src/app/api/[locale]/system/check/config/repository.ts +819 -0
  68. package/src/app/api/[locale]/system/check/config/shared.ts +396 -0
  69. package/src/app/api/[locale]/system/check/config/types.ts +616 -0
  70. package/src/app/api/[locale]/system/check/config/utils.ts +171 -0
  71. package/src/app/api/[locale]/system/check/i18n/de/index.ts +15 -0
  72. package/src/app/api/[locale]/system/check/i18n/en/index.ts +14 -0
  73. package/src/app/api/[locale]/system/check/i18n/pl/index.ts +15 -0
  74. package/src/app/api/[locale]/system/check/lint/definition.ts +414 -0
  75. package/src/app/api/[locale]/system/check/lint/enum.ts +37 -0
  76. package/src/app/api/[locale]/system/check/lint/i18n/de/index.ts +164 -0
  77. package/src/app/api/[locale]/system/check/lint/i18n/en/index.ts +162 -0
  78. package/src/app/api/[locale]/system/check/lint/i18n/pl/index.ts +164 -0
  79. package/src/app/api/[locale]/system/check/lint/repository.ts +753 -0
  80. package/src/app/api/[locale]/system/check/lint/route.ts +21 -0
  81. package/src/app/api/[locale]/system/check/oxlint/README.md +190 -0
  82. package/src/app/api/[locale]/system/check/oxlint/definition.ts +414 -0
  83. package/src/app/api/[locale]/system/check/oxlint/enum.ts +37 -0
  84. package/src/app/api/[locale]/system/check/oxlint/i18n/de/index.ts +171 -0
  85. package/src/app/api/[locale]/system/check/oxlint/i18n/en/index.ts +168 -0
  86. package/src/app/api/[locale]/system/check/oxlint/i18n/pl/index.ts +172 -0
  87. package/src/app/api/[locale]/system/check/oxlint/plugins/i18n/src/index.ts +372 -0
  88. package/src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/README.md +246 -0
  89. package/src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/src/index.ts +583 -0
  90. package/src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/src/index.ts +500 -0
  91. package/src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/test.tsx +74 -0
  92. package/src/app/api/[locale]/system/check/oxlint/plugins/shared/config-loader.ts +305 -0
  93. package/src/app/api/[locale]/system/check/oxlint/repository.ts +959 -0
  94. package/src/app/api/[locale]/system/check/oxlint/route.ts +21 -0
  95. package/src/app/api/[locale]/system/check/oxlint/types.ts +193 -0
  96. package/src/app/api/[locale]/system/check/test-project/bun.lock +449 -0
  97. package/src/app/api/[locale]/system/check/test-project/check.config.ts +989 -0
  98. package/src/app/api/[locale]/system/check/test-project/package.json +20 -0
  99. package/src/app/api/[locale]/system/check/test-project/src/constants.ts +6 -0
  100. package/src/app/api/[locale]/system/check/test-project/src/greet.ts +18 -0
  101. package/src/app/api/[locale]/system/check/test-project/src/test-issues/a11y-issues.tsx +107 -0
  102. package/src/app/api/[locale]/system/check/test-project/src/test-issues/eslint-issues.tsx +37 -0
  103. package/src/app/api/[locale]/system/check/test-project/src/test-issues/general-issues.ts +137 -0
  104. package/src/app/api/[locale]/system/check/test-project/src/test-issues/i18n-issues.tsx +129 -0
  105. package/src/app/api/[locale]/system/check/test-project/src/test-issues/jsx-capitalization-issues.tsx +131 -0
  106. package/src/app/api/[locale]/system/check/test-project/src/test-issues/nextjs-issues.tsx +95 -0
  107. package/src/app/api/[locale]/system/check/test-project/src/test-issues/promise-issues.ts +76 -0
  108. package/src/app/api/[locale]/system/check/test-project/src/test-issues/react-issues.tsx +95 -0
  109. package/src/app/api/[locale]/system/check/test-project/src/test-issues/restricted-syntax-issues.tsx +61 -0
  110. package/src/app/api/[locale]/system/check/test-project/src/test-issues/typescript-issues.ts +80 -0
  111. package/src/app/api/[locale]/system/check/test-project/src/utils/calculate.ts +27 -0
  112. package/src/app/api/[locale]/system/check/test-project/tsconfig.json +38 -0
  113. package/src/app/api/[locale]/system/check/test-project/tsconfig.tsbuildinfo +1 -0
  114. package/src/app/api/[locale]/system/check/typecheck/definition.ts +369 -0
  115. package/src/app/api/[locale]/system/check/typecheck/enum.ts +37 -0
  116. package/src/app/api/[locale]/system/check/typecheck/i18n/de/index.ts +159 -0
  117. package/src/app/api/[locale]/system/check/typecheck/i18n/en/index.ts +150 -0
  118. package/src/app/api/[locale]/system/check/typecheck/i18n/pl/index.ts +155 -0
  119. package/src/app/api/[locale]/system/check/typecheck/repository.ts +919 -0
  120. package/src/app/api/[locale]/system/check/typecheck/route.ts +22 -0
  121. package/src/app/api/[locale]/system/check/typecheck/utils.ts +168 -0
  122. package/src/app/api/[locale]/system/check/vibe-check/definition.ts +568 -0
  123. package/src/app/api/[locale]/system/check/vibe-check/enum.ts +69 -0
  124. package/src/app/api/[locale]/system/check/vibe-check/i18n/de/index.ts +192 -0
  125. package/src/app/api/[locale]/system/check/vibe-check/i18n/en/index.ts +189 -0
  126. package/src/app/api/[locale]/system/check/vibe-check/i18n/pl/index.ts +192 -0
  127. package/src/app/api/[locale]/system/check/vibe-check/repository.ts +545 -0
  128. package/src/app/api/[locale]/system/check/vibe-check/route.test.ts +1142 -0
  129. package/src/app/api/[locale]/system/check/vibe-check/route.ts +21 -0
  130. package/src/app/api/[locale]/system/generated/endpoint.ts +313 -0
  131. package/src/app/api/[locale]/system/generated/endpoints.ts +156 -0
  132. package/src/app/api/[locale]/system/generated/route-handlers.ts +224 -0
  133. package/src/app/api/[locale]/system/generators/endpoint/definition.ts +193 -0
  134. package/src/app/api/[locale]/system/generators/endpoint/i18n/de/index.ts +48 -0
  135. package/src/app/api/[locale]/system/generators/endpoint/i18n/en/index.ts +48 -0
  136. package/src/app/api/[locale]/system/generators/endpoint/i18n/pl/index.ts +50 -0
  137. package/src/app/api/[locale]/system/generators/endpoint/repository.ts +291 -0
  138. package/src/app/api/[locale]/system/generators/endpoint/route.ts +21 -0
  139. package/src/app/api/[locale]/system/generators/endpoints/definition.ts +246 -0
  140. package/src/app/api/[locale]/system/generators/endpoints/i18n/de/index.ts +54 -0
  141. package/src/app/api/[locale]/system/generators/endpoints/i18n/en/index.ts +52 -0
  142. package/src/app/api/[locale]/system/generators/endpoints/i18n/pl/index.ts +54 -0
  143. package/src/app/api/[locale]/system/generators/endpoints/options-repository.ts +463 -0
  144. package/src/app/api/[locale]/system/generators/endpoints/repository.ts +383 -0
  145. package/src/app/api/[locale]/system/generators/endpoints/route.ts +18 -0
  146. package/src/app/api/[locale]/system/generators/endpoints-index/definition.ts +194 -0
  147. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/de/index.ts +71 -0
  148. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/en/index.ts +69 -0
  149. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/pl/index.ts +71 -0
  150. package/src/app/api/[locale]/system/generators/endpoints-index/repository.ts +294 -0
  151. package/src/app/api/[locale]/system/generators/endpoints-index/route.ts +18 -0
  152. package/src/app/api/[locale]/system/generators/generate-all/definition.ts +355 -0
  153. package/src/app/api/[locale]/system/generators/generate-all/i18n/de/index.ts +96 -0
  154. package/src/app/api/[locale]/system/generators/generate-all/i18n/en/index.ts +94 -0
  155. package/src/app/api/[locale]/system/generators/generate-all/i18n/pl/index.ts +96 -0
  156. package/src/app/api/[locale]/system/generators/generate-all/repository.ts +257 -0
  157. package/src/app/api/[locale]/system/generators/generate-all/route.ts +20 -0
  158. package/src/app/api/[locale]/system/generators/i18n/de/index.ts +15 -0
  159. package/src/app/api/[locale]/system/generators/i18n/en/index.ts +14 -0
  160. package/src/app/api/[locale]/system/generators/i18n/pl/index.ts +15 -0
  161. package/src/app/api/[locale]/system/generators/route-handlers/definition.ts +198 -0
  162. package/src/app/api/[locale]/system/generators/route-handlers/i18n/de/index.ts +48 -0
  163. package/src/app/api/[locale]/system/generators/route-handlers/i18n/en/index.ts +48 -0
  164. package/src/app/api/[locale]/system/generators/route-handlers/i18n/pl/index.ts +50 -0
  165. package/src/app/api/[locale]/system/generators/route-handlers/repository.ts +277 -0
  166. package/src/app/api/[locale]/system/generators/route-handlers/route.ts +17 -0
  167. package/src/app/api/[locale]/system/generators/shared/utils.ts +233 -0
  168. package/src/app/api/[locale]/system/help/definition.ts +445 -0
  169. package/src/app/api/[locale]/system/help/i18n/de/index.ts +267 -0
  170. package/src/app/api/[locale]/system/help/i18n/en/index.ts +262 -0
  171. package/src/app/api/[locale]/system/help/i18n/pl/index.ts +265 -0
  172. package/src/app/api/[locale]/system/help/interactive/definition.ts +125 -0
  173. package/src/app/api/[locale]/system/help/interactive/i18n/de/index.ts +22 -0
  174. package/src/app/api/[locale]/system/help/interactive/i18n/en/index.ts +19 -0
  175. package/src/app/api/[locale]/system/help/interactive/i18n/pl/index.ts +22 -0
  176. package/src/app/api/[locale]/system/help/interactive/repository.ts +1025 -0
  177. package/src/app/api/[locale]/system/help/interactive/route.ts +53 -0
  178. package/src/app/api/[locale]/system/help/list/definition.ts +372 -0
  179. package/src/app/api/[locale]/system/help/list/repository.ts +110 -0
  180. package/src/app/api/[locale]/system/help/list/route.ts +21 -0
  181. package/src/app/api/[locale]/system/help/repository.ts +212 -0
  182. package/src/app/api/[locale]/system/help/route.ts +16 -0
  183. package/src/app/api/[locale]/system/i18n/de/index.ts +68 -0
  184. package/src/app/api/[locale]/system/i18n/en/index.ts +65 -0
  185. package/src/app/api/[locale]/system/i18n/pl/index.ts +66 -0
  186. package/src/app/api/[locale]/system/release-tool/definition.ts +3104 -0
  187. package/src/app/api/[locale]/system/release-tool/i18n/de/index.ts +813 -0
  188. package/src/app/api/[locale]/system/release-tool/i18n/en/index.ts +797 -0
  189. package/src/app/api/[locale]/system/release-tool/i18n/pl/index.ts +810 -0
  190. package/src/app/api/[locale]/system/release-tool/repository/asset-zipper.ts +128 -0
  191. package/src/app/api/[locale]/system/release-tool/repository/changelog-generator.ts +212 -0
  192. package/src/app/api/[locale]/system/release-tool/repository/ci-detector.ts +566 -0
  193. package/src/app/api/[locale]/system/release-tool/repository/config.ts +113 -0
  194. package/src/app/api/[locale]/system/release-tool/repository/constants.ts +407 -0
  195. package/src/app/api/[locale]/system/release-tool/repository/dependency-manager.ts +527 -0
  196. package/src/app/api/[locale]/system/release-tool/repository/git-service.ts +403 -0
  197. package/src/app/api/[locale]/system/release-tool/repository/hook-runner.ts +100 -0
  198. package/src/app/api/[locale]/system/release-tool/repository/index.ts +1 -0
  199. package/src/app/api/[locale]/system/release-tool/repository/notification-service.ts +638 -0
  200. package/src/app/api/[locale]/system/release-tool/repository/package-service.ts +169 -0
  201. package/src/app/api/[locale]/system/release-tool/repository/publisher.ts +253 -0
  202. package/src/app/api/[locale]/system/release-tool/repository/quality-runner.ts +428 -0
  203. package/src/app/api/[locale]/system/release-tool/repository/release-creator.ts +293 -0
  204. package/src/app/api/[locale]/system/release-tool/repository/release-executor.ts +1198 -0
  205. package/src/app/api/[locale]/system/release-tool/repository/snyk-service.ts +136 -0
  206. package/src/app/api/[locale]/system/release-tool/repository/utils.ts +642 -0
  207. package/src/app/api/[locale]/system/release-tool/repository/validation.ts +288 -0
  208. package/src/app/api/[locale]/system/release-tool/repository/version-service.ts +297 -0
  209. package/src/app/api/[locale]/system/release-tool/route.ts +21 -0
  210. package/src/app/api/[locale]/system/unified-interface/README.md +328 -0
  211. package/src/app/api/[locale]/system/unified-interface/cli/README.md +349 -0
  212. package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-handler.ts +95 -0
  213. package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-user.ts +146 -0
  214. package/src/app/api/[locale]/system/unified-interface/cli/auth/session-file.ts +266 -0
  215. package/src/app/api/[locale]/system/unified-interface/cli/env.ts +26 -0
  216. package/src/app/api/[locale]/system/unified-interface/cli/i18n/de/index.ts +157 -0
  217. package/src/app/api/[locale]/system/unified-interface/cli/i18n/en/index.ts +155 -0
  218. package/src/app/api/[locale]/system/unified-interface/cli/i18n/pl/index.ts +158 -0
  219. package/src/app/api/[locale]/system/unified-interface/cli/runtime/debug.ts +595 -0
  220. package/src/app/api/[locale]/system/unified-interface/cli/runtime/entry-point.ts +129 -0
  221. package/src/app/api/[locale]/system/unified-interface/cli/runtime/environment.ts +155 -0
  222. package/src/app/api/[locale]/system/unified-interface/cli/runtime/execution-errors.ts +452 -0
  223. package/src/app/api/[locale]/system/unified-interface/cli/runtime/parsing.ts +297 -0
  224. package/src/app/api/[locale]/system/unified-interface/cli/runtime/route-executor.ts +859 -0
  225. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/de/index.ts +12 -0
  226. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/en/index.ts +11 -0
  227. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/pl/index.ts +12 -0
  228. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/definition.ts +262 -0
  229. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/de/index.ts +54 -0
  230. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/en/index.ts +52 -0
  231. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/pl/index.ts +54 -0
  232. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/repository.ts +421 -0
  233. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/route.ts +25 -0
  234. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/definition.ts +181 -0
  235. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/de/index.ts +61 -0
  236. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/en/index.ts +59 -0
  237. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/pl/index.ts +61 -0
  238. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/repository.ts +195 -0
  239. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/route.ts +22 -0
  240. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/definition.ts +188 -0
  241. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/de/index.ts +54 -0
  242. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/en/index.ts +52 -0
  243. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/pl/index.ts +54 -0
  244. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/repository.ts +209 -0
  245. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/route.ts +24 -0
  246. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/definition.ts +200 -0
  247. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/de/index.ts +54 -0
  248. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/en/index.ts +52 -0
  249. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/pl/index.ts +54 -0
  250. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/repository.ts +113 -0
  251. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/route.ts +22 -0
  252. package/src/app/api/[locale]/system/unified-interface/cli/vibe-runtime.ts +304 -0
  253. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/base-renderer.ts +270 -0
  254. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/registry.ts +309 -0
  255. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/types.ts +126 -0
  256. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/de/index.ts +67 -0
  257. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/en/index.ts +65 -0
  258. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/pl/index.ts +67 -0
  259. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/accordion.ts +74 -0
  260. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/avatar.ts +39 -0
  261. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/badge.ts +54 -0
  262. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-output.ts +298 -0
  263. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-files.ts +89 -0
  264. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-list.ts +298 -0
  265. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-summary.ts +96 -0
  266. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/container.ts +186 -0
  267. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-card.ts +65 -0
  268. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-cards.ts +570 -0
  269. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-list.ts +80 -0
  270. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-table.ts +385 -0
  271. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/editable-text.ts +99 -0
  272. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/empty-state.ts +55 -0
  273. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/errors.ts +67 -0
  274. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/grouped-list.ts +729 -0
  275. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-card.ts +87 -0
  276. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-list.ts +112 -0
  277. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link.ts +59 -0
  278. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/loading.ts +50 -0
  279. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/markdown.ts +131 -0
  280. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/metric.ts +291 -0
  281. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/section.ts +120 -0
  282. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/stats-grid.ts +149 -0
  283. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/tabs.ts +61 -0
  284. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/text.ts +78 -0
  285. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/title.ts +42 -0
  286. package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/response-renderer.ts +418 -0
  287. package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/schema-handler.ts +534 -0
  288. package/src/app/api/[locale]/system/unified-interface/i18n/de/index.ts +42 -0
  289. package/src/app/api/[locale]/system/unified-interface/i18n/en/index.ts +40 -0
  290. package/src/app/api/[locale]/system/unified-interface/i18n/pl/index.ts +43 -0
  291. package/src/app/api/[locale]/system/unified-interface/mcp/README.md +114 -0
  292. package/src/app/api/[locale]/system/unified-interface/mcp/converter.ts +146 -0
  293. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/de/index.ts +182 -0
  294. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/en/index.ts +179 -0
  295. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/pl/index.ts +181 -0
  296. package/src/app/api/[locale]/system/unified-interface/mcp/registry.ts +343 -0
  297. package/src/app/api/[locale]/system/unified-interface/mcp/serve/definition.ts +147 -0
  298. package/src/app/api/[locale]/system/unified-interface/mcp/serve/repository.ts +38 -0
  299. package/src/app/api/[locale]/system/unified-interface/mcp/serve/route.ts +14 -0
  300. package/src/app/api/[locale]/system/unified-interface/mcp/server/protocol-handler.ts +309 -0
  301. package/src/app/api/[locale]/system/unified-interface/mcp/server/server.ts +154 -0
  302. package/src/app/api/[locale]/system/unified-interface/mcp/server/stdio-transport.ts +193 -0
  303. package/src/app/api/[locale]/system/unified-interface/mcp/types.ts +246 -0
  304. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create-form.ts +1510 -0
  305. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create.ts +581 -0
  306. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/endpoint-to-metadata.ts +52 -0
  307. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/loader.ts +152 -0
  308. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definitions/registry.ts +265 -0
  309. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/permissions/registry.ts +680 -0
  310. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/executor.ts +220 -0
  311. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/handler.ts +325 -0
  312. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/multi.ts +184 -0
  313. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/request-validator.ts +201 -0
  314. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/single.ts +58 -0
  315. package/src/app/api/[locale]/system/unified-interface/shared/env/define-env-client.ts +49 -0
  316. package/src/app/api/[locale]/system/unified-interface/shared/env/define-env.ts +47 -0
  317. package/src/app/api/[locale]/system/unified-interface/shared/env/validation-logger.ts +58 -0
  318. package/src/app/api/[locale]/system/unified-interface/shared/field/enum.ts +110 -0
  319. package/src/app/api/[locale]/system/unified-interface/shared/field/specialized.ts +339 -0
  320. package/src/app/api/[locale]/system/unified-interface/shared/field/utils.test.ts +408 -0
  321. package/src/app/api/[locale]/system/unified-interface/shared/field/utils.ts +1349 -0
  322. package/src/app/api/[locale]/system/unified-interface/shared/field-config/endpoint-field-types.ts +107 -0
  323. package/src/app/api/[locale]/system/unified-interface/shared/field-config/field-config-types.ts +268 -0
  324. package/src/app/api/[locale]/system/unified-interface/shared/logger/colors.ts +114 -0
  325. package/src/app/api/[locale]/system/unified-interface/shared/logger/endpoint.ts +169 -0
  326. package/src/app/api/[locale]/system/unified-interface/shared/logger/file-logger.ts +88 -0
  327. package/src/app/api/[locale]/system/unified-interface/shared/logger/formatters.ts +177 -0
  328. package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/base-auth-handler.ts +82 -0
  329. package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/factory.ts +33 -0
  330. package/src/app/api/[locale]/system/unified-interface/shared/server-only/server-only.ts +4 -0
  331. package/src/app/api/[locale]/system/unified-interface/shared/types/actions.ts +289 -0
  332. package/src/app/api/[locale]/system/unified-interface/shared/types/endpoint.ts +1167 -0
  333. package/src/app/api/[locale]/system/unified-interface/shared/types/enums.ts +382 -0
  334. package/src/app/api/[locale]/system/unified-interface/shared/types/platform.ts +34 -0
  335. package/src/app/api/[locale]/system/unified-interface/shared/types/types.ts +80 -0
  336. package/src/app/api/[locale]/system/unified-interface/shared/types/ui-config.ts +76 -0
  337. package/src/app/api/[locale]/system/unified-interface/shared/utils/error-types.ts +27 -0
  338. package/src/app/api/[locale]/system/unified-interface/shared/utils/path.ts +63 -0
  339. package/src/app/api/[locale]/system/unified-interface/shared/utils/scanner.ts +241 -0
  340. package/src/app/api/[locale]/system/unified-interface/shared/widgets/actions.ts +256 -0
  341. package/src/app/api/[locale]/system/unified-interface/shared/widgets/configs.ts +1158 -0
  342. package/src/app/api/[locale]/system/unified-interface/shared/widgets/helpers.ts +80 -0
  343. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/accordion.ts +82 -0
  344. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/avatar.ts +75 -0
  345. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/badge.ts +89 -0
  346. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-output.ts +302 -0
  347. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-quality-list.ts +202 -0
  348. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/container.ts +129 -0
  349. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-card.ts +81 -0
  350. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-cards.ts +258 -0
  351. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-list.ts +123 -0
  352. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-table.ts +387 -0
  353. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/editable-text.ts +89 -0
  354. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/empty-state.ts +78 -0
  355. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/errors.ts +93 -0
  356. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/grouped-list.ts +448 -0
  357. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/index.ts +38 -0
  358. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-card.ts +130 -0
  359. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-list.ts +127 -0
  360. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link.ts +68 -0
  361. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/loading.ts +81 -0
  362. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/markdown.ts +176 -0
  363. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/metric-card.ts +241 -0
  364. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/section.ts +90 -0
  365. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/stats-grid.ts +71 -0
  366. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/tabs.ts +80 -0
  367. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/text.ts +105 -0
  368. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/title.ts +72 -0
  369. package/src/app/api/[locale]/system/unified-interface/shared/widgets/types.ts +240 -0
  370. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/field-helpers.ts +137 -0
  371. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/formatting.ts +437 -0
  372. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/url.ts +40 -0
  373. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/widget-helpers.ts +465 -0
  374. package/src/app/api/[locale]/user/auth/enum.ts +16 -0
  375. package/src/app/api/[locale]/user/auth/i18n/de/index.ts +227 -0
  376. package/src/app/api/[locale]/user/auth/i18n/en/index.ts +205 -0
  377. package/src/app/api/[locale]/user/auth/i18n/pl/index.ts +219 -0
  378. package/src/app/api/[locale]/user/auth/types.ts +110 -0
  379. package/src/app/api/[locale]/user/enum.ts +64 -0
  380. package/src/app/api/[locale]/user/private/i18n/de/index.ts +3 -0
  381. package/src/app/api/[locale]/user/private/i18n/en/index.ts +1 -0
  382. package/src/app/api/[locale]/user/private/i18n/pl/index.ts +3 -0
  383. package/src/app/api/[locale]/user/types.ts +118 -0
  384. package/src/app/api/[locale]/user/user-roles/enum.ts +112 -0
  385. package/src/app/api/[locale]/user/user-roles/i18n/de/index.ts +85 -0
  386. package/src/app/api/[locale]/user/user-roles/i18n/en/index.ts +83 -0
  387. package/src/app/api/[locale]/user/user-roles/i18n/pl/index.ts +86 -0
  388. package/src/app/api/[locale]/user/user-roles/types.ts +34 -0
  389. package/src/app/api/i18n/de/index.ts +6 -0
  390. package/src/app/api/i18n/en/index.ts +5 -0
  391. package/src/app/api/i18n/pl/index.ts +5 -0
  392. package/src/app/i18n/de/index.ts +6 -0
  393. package/src/app/i18n/en/index.ts +5 -0
  394. package/src/app/i18n/pl/index.ts +5 -0
@@ -0,0 +1,1158 @@
1
+ /**
2
+ * Typed Widget Configurations
3
+ *
4
+ * Static, fully typed configurations for each widget type.
5
+ * This ensures type safety across CLI and React implementations.
6
+ */
7
+
8
+ import type { Route } from "next";
9
+ import type { z } from "zod";
10
+
11
+ import type {
12
+ FieldUsageConfig,
13
+ InferSchemaFromField,
14
+ ObjectField,
15
+ } from "../types/endpoint";
16
+ import type {
17
+ FieldDataType,
18
+ FieldUsage,
19
+ LayoutType,
20
+ SpacingSize,
21
+ WidgetType,
22
+ } from "../types/enums";
23
+
24
+ /**
25
+ * Layout configuration for containers and widgets
26
+ */
27
+ export interface LayoutConfig {
28
+ type: LayoutType;
29
+ columns?: number;
30
+ rows?: number;
31
+ gap?: SpacingSize;
32
+ padding?: SpacingSize;
33
+ margin?: SpacingSize;
34
+ responsive?: {
35
+ sm?: Partial<LayoutConfig>;
36
+ md?: Partial<LayoutConfig>;
37
+ lg?: Partial<LayoutConfig>;
38
+ xl?: Partial<LayoutConfig>;
39
+ };
40
+ }
41
+
42
+ /**
43
+ * Common widget properties
44
+ * TKey allows using either global TranslationKey or scoped translation keys
45
+ */
46
+ interface BaseWidgetConfig {
47
+ type: WidgetType;
48
+ className?: string;
49
+ order?: number;
50
+ }
51
+
52
+ /**
53
+ * Prefill display configuration for form fields
54
+ * When a field has a prefilled value from server/URL params, this controls how it's displayed
55
+ */
56
+ export interface PrefillDisplayConfig<TKey extends string> {
57
+ /** Display variant when field is prefilled */
58
+ variant: "badge" | "highlight" | "card";
59
+ /** Translation key for the label shown with prefilled value */
60
+ labelKey?: NoInfer<TKey>;
61
+ /** Icon to show with prefilled value */
62
+ icon?: string;
63
+ }
64
+
65
+ /**
66
+ * Common properties for form field widgets
67
+ * TKey allows using either global TranslationKey or scoped translation keys
68
+ * TKey is inferred from label/description values, then validated against expected type
69
+ */
70
+ interface BaseFormFieldWidgetConfig<
71
+ TKey extends string,
72
+ > extends BaseWidgetConfig {
73
+ type: WidgetType.FORM_FIELD;
74
+ label?: NoInfer<TKey>;
75
+ description?: NoInfer<TKey>;
76
+ placeholder?: NoInfer<TKey>;
77
+ helpText?: NoInfer<TKey>;
78
+ required?: boolean;
79
+ disabled?: boolean;
80
+ columns?: number;
81
+ /**
82
+ * Make field readonly - displays value but cannot be edited
83
+ * Use with prefillDisplay to show special styling for server-provided values
84
+ */
85
+ readonly?: boolean;
86
+ /**
87
+ * Configure how prefilled values are displayed when readonly
88
+ * Only applies when field has a prefilled value
89
+ */
90
+ prefillDisplay?: PrefillDisplayConfig<TKey>;
91
+ }
92
+
93
+ // ============================================================================
94
+ // FORM WIDGETS
95
+ // ============================================================================
96
+
97
+ // Text input
98
+ export interface TextFieldWidgetConfig<
99
+ TKey extends string,
100
+ > extends BaseFormFieldWidgetConfig<TKey> {
101
+ fieldType: FieldDataType.TEXT;
102
+ }
103
+
104
+ // Email input
105
+ export interface EmailFieldWidgetConfig<
106
+ TKey extends string,
107
+ > extends BaseFormFieldWidgetConfig<TKey> {
108
+ fieldType: FieldDataType.EMAIL;
109
+ }
110
+
111
+ // Password input
112
+ export interface PasswordFieldWidgetConfig<
113
+ TKey extends string,
114
+ > extends BaseFormFieldWidgetConfig<TKey> {
115
+ fieldType: FieldDataType.PASSWORD;
116
+ }
117
+
118
+ // Number input
119
+ export interface NumberFieldWidgetConfig<
120
+ TKey extends string,
121
+ > extends BaseFormFieldWidgetConfig<TKey> {
122
+ fieldType: FieldDataType.NUMBER;
123
+ }
124
+
125
+ // Boolean/Checkbox input
126
+ export interface BooleanFieldWidgetConfig<TKey extends string> extends Omit<
127
+ BaseFormFieldWidgetConfig<TKey>,
128
+ "placeholder"
129
+ > {
130
+ fieldType: FieldDataType.BOOLEAN;
131
+ }
132
+
133
+ // Select dropdown
134
+ export interface SelectFieldWidgetConfig<
135
+ TKey extends string,
136
+ > extends BaseFormFieldWidgetConfig<TKey> {
137
+ fieldType: FieldDataType.SELECT;
138
+ options: Array<{ label: NoInfer<TKey>; value: string | number }>;
139
+ }
140
+
141
+ // Multi-select
142
+ export interface MultiSelectFieldWidgetConfig<
143
+ TKey extends string,
144
+ > extends BaseFormFieldWidgetConfig<TKey> {
145
+ fieldType: FieldDataType.MULTISELECT;
146
+ options: Array<{ label: NoInfer<TKey>; value: string | number }>;
147
+ }
148
+
149
+ // Filter pills (like select but displayed as pills)
150
+ export interface FilterPillsFieldWidgetConfig<
151
+ TKey extends string,
152
+ > extends BaseFormFieldWidgetConfig<TKey> {
153
+ fieldType: FieldDataType.FILTER_PILLS;
154
+ options: Array<{
155
+ label: NoInfer<TKey>;
156
+ value: string | number;
157
+ icon?: string;
158
+ description?: NoInfer<TKey>;
159
+ }>;
160
+ }
161
+
162
+ // Textarea
163
+ export interface TextareaFieldWidgetConfig<
164
+ TKey extends string,
165
+ > extends BaseFormFieldWidgetConfig<TKey> {
166
+ fieldType: FieldDataType.TEXTAREA;
167
+ }
168
+
169
+ // Phone input
170
+ export interface PhoneFieldWidgetConfig<
171
+ TKey extends string,
172
+ > extends BaseFormFieldWidgetConfig<TKey> {
173
+ fieldType: FieldDataType.PHONE;
174
+ }
175
+
176
+ // URL input
177
+ export interface UrlFieldWidgetConfig<
178
+ TKey extends string,
179
+ > extends BaseFormFieldWidgetConfig<TKey> {
180
+ fieldType: FieldDataType.URL;
181
+ }
182
+
183
+ // Integer input
184
+ export interface IntFieldWidgetConfig<
185
+ TKey extends string,
186
+ > extends BaseFormFieldWidgetConfig<TKey> {
187
+ fieldType: FieldDataType.INT;
188
+ }
189
+
190
+ // Date input
191
+ export interface DateFieldWidgetConfig<
192
+ TKey extends string,
193
+ > extends BaseFormFieldWidgetConfig<TKey> {
194
+ fieldType: FieldDataType.DATE;
195
+ }
196
+
197
+ // DateTime input
198
+ export interface DateTimeFieldWidgetConfig<
199
+ TKey extends string,
200
+ > extends BaseFormFieldWidgetConfig<TKey> {
201
+ fieldType: FieldDataType.DATETIME;
202
+ }
203
+
204
+ // Time input
205
+ export interface TimeFieldWidgetConfig<
206
+ TKey extends string,
207
+ > extends BaseFormFieldWidgetConfig<TKey> {
208
+ fieldType: FieldDataType.TIME;
209
+ }
210
+
211
+ // File input
212
+ export interface FileFieldWidgetConfig<
213
+ TKey extends string,
214
+ > extends BaseFormFieldWidgetConfig<TKey> {
215
+ fieldType: FieldDataType.FILE;
216
+ }
217
+
218
+ // UUID input
219
+ export interface UuidFieldWidgetConfig<
220
+ TKey extends string,
221
+ > extends BaseFormFieldWidgetConfig<TKey> {
222
+ fieldType: FieldDataType.UUID;
223
+ }
224
+
225
+ // JSON input
226
+ export interface JsonFieldWidgetConfig<
227
+ TKey extends string,
228
+ > extends BaseFormFieldWidgetConfig<TKey> {
229
+ fieldType: FieldDataType.JSON;
230
+ }
231
+
232
+ // Date range input
233
+ export interface DateRangeFieldWidgetConfig<TKey extends string> extends Omit<
234
+ BaseFormFieldWidgetConfig<TKey>,
235
+ "placeholder"
236
+ > {
237
+ fieldType: FieldDataType.DATE_RANGE;
238
+ }
239
+
240
+ // Time range input
241
+ export interface TimeRangeFieldWidgetConfig<TKey extends string> extends Omit<
242
+ BaseFormFieldWidgetConfig<TKey>,
243
+ "placeholder"
244
+ > {
245
+ fieldType: FieldDataType.TIME_RANGE;
246
+ }
247
+
248
+ // Timezone select
249
+ export interface TimezoneFieldWidgetConfig<
250
+ TKey extends string,
251
+ > extends BaseFormFieldWidgetConfig<TKey> {
252
+ fieldType: FieldDataType.TIMEZONE;
253
+ }
254
+
255
+ // Currency select
256
+ export interface CurrencySelectFieldWidgetConfig<
257
+ TKey extends string,
258
+ > extends BaseFormFieldWidgetConfig<TKey> {
259
+ fieldType: FieldDataType.CURRENCY_SELECT;
260
+ }
261
+
262
+ // Language select
263
+ export interface LanguageSelectFieldWidgetConfig<
264
+ TKey extends string,
265
+ > extends BaseFormFieldWidgetConfig<TKey> {
266
+ fieldType: FieldDataType.LANGUAGE_SELECT;
267
+ }
268
+
269
+ // Country select
270
+ export interface CountrySelectFieldWidgetConfig<
271
+ TKey extends string,
272
+ > extends BaseFormFieldWidgetConfig<TKey> {
273
+ fieldType: FieldDataType.COUNTRY_SELECT;
274
+ }
275
+
276
+ // Color picker
277
+ export interface ColorFieldWidgetConfig<TKey extends string> extends Omit<
278
+ BaseFormFieldWidgetConfig<TKey>,
279
+ "placeholder"
280
+ > {
281
+ fieldType: FieldDataType.COLOR;
282
+ }
283
+
284
+ // Icon picker
285
+ export interface IconFieldWidgetConfig<
286
+ TKey extends string,
287
+ > extends BaseFormFieldWidgetConfig<TKey> {
288
+ fieldType: FieldDataType.ICON;
289
+ }
290
+
291
+ // Slider input
292
+ export interface SliderFieldWidgetConfig<TKey extends string> extends Omit<
293
+ BaseFormFieldWidgetConfig<TKey>,
294
+ "placeholder"
295
+ > {
296
+ fieldType: FieldDataType.SLIDER;
297
+ }
298
+
299
+ // Tags input
300
+ export interface TagsFieldWidgetConfig<
301
+ TKey extends string,
302
+ > extends BaseFormFieldWidgetConfig<TKey> {
303
+ fieldType: FieldDataType.TAGS;
304
+ }
305
+
306
+ // Text array input
307
+ export interface TextArrayFieldWidgetConfig<
308
+ TKey extends string,
309
+ > extends BaseFormFieldWidgetConfig<TKey> {
310
+ fieldType: FieldDataType.TEXT_ARRAY;
311
+ }
312
+
313
+ // Union type for all form field widgets
314
+ export type FormFieldWidgetConfig<TKey extends string> =
315
+ | TextFieldWidgetConfig<TKey>
316
+ | EmailFieldWidgetConfig<TKey>
317
+ | PasswordFieldWidgetConfig<TKey>
318
+ | NumberFieldWidgetConfig<TKey>
319
+ | BooleanFieldWidgetConfig<TKey>
320
+ | SelectFieldWidgetConfig<TKey>
321
+ | MultiSelectFieldWidgetConfig<TKey>
322
+ | FilterPillsFieldWidgetConfig<TKey>
323
+ | TextareaFieldWidgetConfig<TKey>
324
+ | PhoneFieldWidgetConfig<TKey>
325
+ | UrlFieldWidgetConfig<TKey>
326
+ | IntFieldWidgetConfig<TKey>
327
+ | DateFieldWidgetConfig<TKey>
328
+ | DateTimeFieldWidgetConfig<TKey>
329
+ | TimeFieldWidgetConfig<TKey>
330
+ | FileFieldWidgetConfig<TKey>
331
+ | UuidFieldWidgetConfig<TKey>
332
+ | JsonFieldWidgetConfig<TKey>
333
+ | DateRangeFieldWidgetConfig<TKey>
334
+ | TimeRangeFieldWidgetConfig<TKey>
335
+ | TimezoneFieldWidgetConfig<TKey>
336
+ | CurrencySelectFieldWidgetConfig<TKey>
337
+ | LanguageSelectFieldWidgetConfig<TKey>
338
+ | CountrySelectFieldWidgetConfig<TKey>
339
+ | ColorFieldWidgetConfig<TKey>
340
+ | IconFieldWidgetConfig<TKey>
341
+ | SliderFieldWidgetConfig<TKey>
342
+ | TagsFieldWidgetConfig<TKey>
343
+ | TextArrayFieldWidgetConfig<TKey>;
344
+
345
+ export interface FormGroupWidgetConfig<
346
+ TKey extends string,
347
+ > extends BaseWidgetConfig {
348
+ type: WidgetType.FORM_GROUP;
349
+ title?: NoInfer<TKey>;
350
+ description?: NoInfer<TKey>;
351
+ layoutType?: LayoutType;
352
+ }
353
+
354
+ export interface FormSectionWidgetConfig<
355
+ TKey extends string,
356
+ > extends BaseWidgetConfig {
357
+ type: WidgetType.FORM_SECTION;
358
+ title?: NoInfer<TKey>;
359
+ description?: NoInfer<TKey>;
360
+ }
361
+
362
+ // ============================================================================
363
+ // DATA DISPLAY WIDGETS
364
+ // ============================================================================
365
+
366
+ export interface DataTableWidgetConfig<
367
+ TKey extends string,
368
+ > extends BaseWidgetConfig {
369
+ type: WidgetType.DATA_TABLE;
370
+ title?: NoInfer<TKey>;
371
+ description?: NoInfer<TKey>;
372
+ columns?: Array<{
373
+ key: string; // Field name from the data object (e.g., "id", "name", "email")
374
+ label: NoInfer<TKey>;
375
+ sortable?: boolean;
376
+ width?: string | number;
377
+ align?: "left" | "center" | "right";
378
+ }>;
379
+ pagination?: {
380
+ enabled?: boolean;
381
+ pageSize?: number;
382
+ showSizeChanger?: boolean;
383
+ };
384
+ sorting?: {
385
+ enabled?: boolean;
386
+ defaultSort?: Array<{
387
+ key: string;
388
+ direction: "asc" | "desc";
389
+ }>;
390
+ };
391
+ filtering?: {
392
+ enabled?: boolean;
393
+ global?: boolean;
394
+ };
395
+ }
396
+
397
+ export interface DataCardsWidgetConfig<
398
+ TKey extends string,
399
+ > extends BaseWidgetConfig {
400
+ type: WidgetType.DATA_CARDS;
401
+ title?: NoInfer<TKey>;
402
+ description?: NoInfer<TKey>;
403
+ // Card field mapping - these are field names from child objects to display in card layout
404
+ cardTitle?: string; // Field name to use as card title (e.g., "name", "title")
405
+ cardSubtitle?: string; // Field name to use as card subtitle (e.g., "email", "description")
406
+ cardImage?: string; // Field name containing image URL (e.g., "avatarUrl", "imageUrl")
407
+ cardContent?: string[]; // Array of field names to display in card body (e.g., ["description", "status"])
408
+ cardMetadata?: string[]; // Array of field names to display as metadata (e.g., ["createdAt", "updatedAt"])
409
+ cardTemplate?: string; // Template name for card rendering
410
+ groupBy?: string; // Field to group cards by
411
+ showSummary?: boolean; // Show summary for groups
412
+ summaryTemplate?: string; // Template for summary rendering
413
+ layout?: LayoutConfig; // Layout configuration
414
+ itemConfig?: {
415
+ template: string;
416
+ size: string;
417
+ spacing: string;
418
+ };
419
+ }
420
+
421
+ export interface DataListWidgetConfig<
422
+ TKey extends string,
423
+ > extends BaseWidgetConfig {
424
+ type: WidgetType.DATA_LIST;
425
+ title?: NoInfer<TKey>;
426
+ description?: NoInfer<TKey>;
427
+ optional?: boolean;
428
+ renderMode?: string;
429
+ hierarchical?: boolean;
430
+ }
431
+
432
+ export interface DataGridWidgetConfig<
433
+ TKey extends string,
434
+ > extends BaseWidgetConfig {
435
+ type: WidgetType.DATA_GRID;
436
+ title?: NoInfer<TKey>;
437
+ description?: NoInfer<TKey>;
438
+ }
439
+
440
+ export interface GroupedListWidgetConfig<
441
+ TKey extends string,
442
+ > extends BaseWidgetConfig {
443
+ type: WidgetType.GROUPED_LIST;
444
+ title?: NoInfer<TKey>;
445
+ description?: NoInfer<TKey>;
446
+ groupBy?: string; // Field name from data object to group by (e.g., "file", "status", "category")
447
+ sortBy?: string; // Field name from data object to sort by (e.g., "severity", "createdAt", "name")
448
+ columns?: number;
449
+ hierarchical?: boolean;
450
+ renderMode?: string;
451
+ }
452
+
453
+ export interface CodeQualityListWidgetConfig<
454
+ TKey extends string,
455
+ > extends BaseWidgetConfig {
456
+ type: WidgetType.CODE_QUALITY_LIST;
457
+ title?: NoInfer<TKey>;
458
+ description?: NoInfer<TKey>;
459
+ groupBy?: string; // Field name from data object to group by (e.g., "file", "code")
460
+ sortBy?: string; // Field name from data object to sort by (e.g., "severity")
461
+ showSummary?: boolean;
462
+ columns?: number;
463
+ layoutType?: LayoutType;
464
+ }
465
+
466
+ export interface CodeQualityFilesWidgetConfig<
467
+ TKey extends string,
468
+ > extends BaseWidgetConfig {
469
+ type: WidgetType.CODE_QUALITY_FILES;
470
+ title?: NoInfer<TKey>;
471
+ description?: NoInfer<TKey>;
472
+ }
473
+
474
+ export interface CodeQualitySummaryWidgetConfig<
475
+ TKey extends string,
476
+ > extends BaseWidgetConfig {
477
+ type: WidgetType.CODE_QUALITY_SUMMARY;
478
+ title?: NoInfer<TKey>;
479
+ description?: NoInfer<TKey>;
480
+ }
481
+
482
+ export interface MetadataCardWidgetConfig<
483
+ TKey extends string,
484
+ > extends BaseWidgetConfig {
485
+ type: WidgetType.METADATA_CARD;
486
+ title?: NoInfer<TKey>;
487
+ description?: NoInfer<TKey>;
488
+ }
489
+
490
+ // ============================================================================
491
+ // LAYOUT WIDGETS
492
+ // ============================================================================
493
+
494
+ /**
495
+ * Helper to infer request/response schemas from children
496
+ * Creates a minimal ObjectField-like structure for type inference
497
+ */
498
+ interface InferSchemasFromChildren<
499
+ TChildren,
500
+ TUsage extends FieldUsageConfig,
501
+ TTranslationKey extends string = string,
502
+ > {
503
+ request: z.output<
504
+ InferSchemaFromField<
505
+ ObjectField<
506
+ TChildren,
507
+ TUsage,
508
+ TTranslationKey,
509
+ ContainerWidgetConfig<TTranslationKey>
510
+ >,
511
+ FieldUsage.RequestData
512
+ >
513
+ >;
514
+ response: z.output<
515
+ InferSchemaFromField<
516
+ ObjectField<
517
+ TChildren,
518
+ TUsage,
519
+ TTranslationKey,
520
+ ContainerWidgetConfig<TTranslationKey>
521
+ >,
522
+ FieldUsage.Response
523
+ >
524
+ >;
525
+ }
526
+
527
+ /**
528
+ * Base Container Widget Config - shared properties without getCount
529
+ * Used as the base for both typed and untyped container configs
530
+ */
531
+ interface ContainerWidgetConfigBase<
532
+ TKey extends string,
533
+ > extends BaseWidgetConfig {
534
+ type: WidgetType.CONTAINER;
535
+ title?: NoInfer<TKey>;
536
+ description?: NoInfer<TKey>;
537
+ layoutType?: LayoutType;
538
+ layout?: LayoutConfig;
539
+ columns?: number;
540
+ /** Tailwind spacing value for gap between children (0, 1, 2, 3, 4, 6, 8) */
541
+ gap?: "0" | "1" | "2" | "3" | "4" | "6" | "8";
542
+ /** Tailwind spacing value for top padding (0, 2, 3, 4, 6, 8) */
543
+ paddingTop?: "0" | "2" | "3" | "4" | "6" | "8";
544
+ optional?: boolean;
545
+ icon?: string;
546
+ border?: boolean;
547
+ spacing?: "compact" | "normal" | "relaxed";
548
+ /** Render without Card wrapper for inline layouts */
549
+ noCard?: boolean;
550
+ /**
551
+ * Submit/Refresh button configuration for the container
552
+ * Rendered in the header next to the title when position is "header"
553
+ *
554
+ * @example
555
+ * ```typescript
556
+ * submitButton: {
557
+ * text: "app.common.actions.refresh",
558
+ * loadingText: "app.common.actions.refreshing",
559
+ * position: "header",
560
+ * icon: "refresh-cw",
561
+ * variant: "ghost",
562
+ * size: "sm",
563
+ * }
564
+ * ```
565
+ */
566
+ submitButton?: {
567
+ /** Submit button text translation key */
568
+ text?: NoInfer<TKey>;
569
+ /** Submit button loading text translation key */
570
+ loadingText?: NoInfer<TKey>;
571
+ /** Submit button position - 'bottom' (default) or 'header' */
572
+ position?: "bottom" | "header";
573
+ /** Icon identifier (e.g., "refresh-cw", "save", "send") */
574
+ icon?: string;
575
+ /** Button variant */
576
+ variant?:
577
+ | "default"
578
+ | "primary"
579
+ | "secondary"
580
+ | "destructive"
581
+ | "ghost"
582
+ | "outline"
583
+ | "link";
584
+ /** Button size */
585
+ size?: "default" | "sm" | "lg" | "icon";
586
+ };
587
+ /**
588
+ * Show auto FormAlert at top of container when there are request fields
589
+ * Displays error/success messages from context.response
590
+ * Set to false to disable (e.g., for login/signup pages with custom alert position)
591
+ * @default true
592
+ */
593
+ showFormAlert?: boolean;
594
+ /**
595
+ * Show auto submit button at bottom of container when there are request fields
596
+ * Only shown when no explicit submitButton config is provided
597
+ * Set to false to disable (e.g., for login/signup pages with custom submit button)
598
+ * @default true
599
+ */
600
+ showSubmitButton?: boolean;
601
+ }
602
+
603
+ /**
604
+ * Container Widget Config - permissive version for use in WidgetConfig union
605
+ * getCount accepts any data structure to allow proper inference in objectField
606
+ */
607
+ export interface ContainerWidgetConfig<
608
+ TKey extends string,
609
+ > extends ContainerWidgetConfigBase<TKey> {
610
+ /**
611
+ * Function to extract count from data for title display (e.g., "Leads (42)")
612
+ * Type is permissive here - proper typing happens in objectField return type
613
+ *
614
+ * @example
615
+ * ```typescript
616
+ * getCount: (data) => data.response?.paginationInfo?.total
617
+ * ```
618
+ */
619
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
620
+ getCount?: (data: { request?: any; response?: any }) => number | undefined;
621
+ }
622
+
623
+ /**
624
+ * Typed Container Widget Config with inferred request/response types
625
+ * TChildren should be the record of child fields passed to objectField
626
+ * TUsage should be the usage config passed to objectField
627
+ * TKey allows using either global TranslationKey or scoped translation keys
628
+ */
629
+ export interface TypedContainerWidgetConfig<
630
+ TKey extends string,
631
+ TChildren = Record<string, never>,
632
+ TUsage extends FieldUsageConfig = FieldUsageConfig,
633
+ > extends ContainerWidgetConfigBase<TKey> {
634
+ /**
635
+ * Type-safe function to extract count from data for title display (e.g., "Leads (42)")
636
+ * Types are inferred from the field children and usage
637
+ *
638
+ * @param data - Object containing request and response data
639
+ * @param data.request - Request data (typed from requestSchema)
640
+ * @param data.response - Response data (typed from responseSchema)
641
+ * @returns The count to display in the title, or undefined to not show a count
642
+ *
643
+ * @example
644
+ * ```typescript
645
+ * getCount: (data) => data.response?.paginationInfo?.total
646
+ * ```
647
+ */
648
+ getCount?: (data: {
649
+ request?: InferSchemasFromChildren<TChildren, TUsage>["request"];
650
+ response?: InferSchemasFromChildren<TChildren, TUsage>["response"];
651
+ }) => number | undefined;
652
+ }
653
+
654
+ export interface SectionWidgetConfig<
655
+ TKey extends string,
656
+ > extends BaseWidgetConfig {
657
+ type: WidgetType.SECTION;
658
+ title?: NoInfer<TKey>;
659
+ description?: NoInfer<TKey>;
660
+ layoutType?: LayoutType;
661
+ }
662
+
663
+ export interface TabsWidgetConfig<
664
+ TKey extends string,
665
+ > extends BaseWidgetConfig {
666
+ type: WidgetType.TABS;
667
+ title?: NoInfer<TKey>;
668
+ tabs?: Array<{
669
+ id: string;
670
+ label: NoInfer<TKey>;
671
+ }>;
672
+ }
673
+
674
+ export interface AccordionWidgetConfig<
675
+ TKey extends string,
676
+ > extends BaseWidgetConfig {
677
+ type: WidgetType.ACCORDION;
678
+ title?: NoInfer<TKey>;
679
+ }
680
+
681
+ // ============================================================================
682
+ // CONTENT WIDGETS
683
+ // ============================================================================
684
+
685
+ export interface TitleWidgetConfig<
686
+ TKey extends string,
687
+ > extends BaseWidgetConfig {
688
+ type: WidgetType.TITLE;
689
+ content: NoInfer<TKey>;
690
+ level?: 1 | 2 | 3 | 4 | 5 | 6;
691
+ fieldType?: FieldDataType;
692
+ }
693
+
694
+ export interface TextWidgetConfig<
695
+ TKey extends string,
696
+ > extends BaseWidgetConfig {
697
+ type: WidgetType.TEXT;
698
+ content: NoInfer<TKey>;
699
+ fieldType?: FieldDataType;
700
+ label?: NoInfer<TKey>;
701
+ variant?: "default" | "error" | "info" | "success" | "warning";
702
+ multiline?: boolean;
703
+ emphasis?: "bold" | "italic" | "underline";
704
+ maxLength?: number;
705
+ format?: "link" | "plain";
706
+ href?: string;
707
+ textAlign?: "left" | "center" | "right";
708
+ }
709
+
710
+ export interface BadgeWidgetConfig<
711
+ TKey extends string,
712
+ > extends BaseWidgetConfig {
713
+ type: WidgetType.BADGE;
714
+ text?: NoInfer<TKey>; // Static text - use when displaying a fixed label
715
+ enumOptions?: Array<{ label: NoInfer<TKey>; value: string | number }>; // Dynamic enum mapping - use when displaying enum values
716
+ variant?: "default" | "success" | "warning" | "error" | "info";
717
+ }
718
+
719
+ export interface AvatarWidgetConfig<
720
+ TKey extends string,
721
+ > extends BaseWidgetConfig {
722
+ type: WidgetType.AVATAR;
723
+ src?: string; // Field name containing avatar URL (e.g., "avatarUrl", "imageUrl") or literal URL
724
+ alt?: NoInfer<TKey>;
725
+ fallback?: string; // Fallback text/initials to display if image fails (e.g., "JD", "?")
726
+ }
727
+
728
+ export interface MarkdownWidgetConfig<
729
+ TKey extends string,
730
+ > extends BaseWidgetConfig {
731
+ type: WidgetType.MARKDOWN;
732
+ content: NoInfer<TKey>;
733
+ }
734
+
735
+ export interface MarkdownEditorWidgetConfig<
736
+ TKey extends string,
737
+ > extends BaseWidgetConfig {
738
+ type: WidgetType.MARKDOWN_EDITOR;
739
+ label?: NoInfer<TKey>;
740
+ placeholder?: NoInfer<TKey>;
741
+ }
742
+
743
+ export interface LinkWidgetConfig<
744
+ TKey extends string,
745
+ > extends BaseWidgetConfig {
746
+ type: WidgetType.LINK;
747
+ href: Route | string; // URL path or route
748
+ text?: NoInfer<TKey>; // Link text to display
749
+ label?: NoInfer<TKey>; // Accessible label (aria-label) - use if text is not descriptive
750
+ external?: boolean; // Opens in new tab if true
751
+ }
752
+
753
+ export interface LinkCardWidgetConfig<
754
+ TKey extends string,
755
+ > extends BaseWidgetConfig {
756
+ type: WidgetType.LINK_CARD;
757
+ href: Route | string;
758
+ title: NoInfer<TKey>;
759
+ description?: NoInfer<TKey>;
760
+ external?: boolean;
761
+ }
762
+
763
+ export interface LinkListWidgetConfig<
764
+ TKey extends string,
765
+ > extends BaseWidgetConfig {
766
+ type: WidgetType.LINK_LIST;
767
+ title?: NoInfer<TKey>;
768
+ links?: Array<{
769
+ href: Route | string;
770
+ text: NoInfer<TKey>;
771
+ external?: boolean;
772
+ }>;
773
+ layoutType?: LayoutType;
774
+ columns?: number;
775
+ }
776
+
777
+ // Data-driven card - renders object data as a card with link capability
778
+ export interface DataCardWidgetConfig<
779
+ TKey extends string,
780
+ > extends BaseWidgetConfig {
781
+ type: WidgetType.DATA_CARD;
782
+ title?: NoInfer<TKey>;
783
+ description?: NoInfer<TKey>;
784
+ linkable?: boolean; // If true, looks for href/url field in children
785
+ layoutType?: LayoutType;
786
+ columns?: number;
787
+ optional?: boolean;
788
+ }
789
+
790
+ // ============================================================================
791
+ // SPECIALIZED CONTENT WIDGETS
792
+ // ============================================================================
793
+ // NOTE: These widgets are for code quality/linting output display.
794
+ // They use literal values from data rather than translation keys.
795
+ // These are NOT fully data-driven and are specialized for specific use cases.
796
+
797
+ export interface FilePathWidgetConfig extends BaseWidgetConfig {
798
+ type: WidgetType.FILE_PATH;
799
+ path: string; // Literal file path from data (e.g., "src/app/page.tsx")
800
+ }
801
+
802
+ export interface LineNumberWidgetConfig extends BaseWidgetConfig {
803
+ type: WidgetType.LINE_NUMBER;
804
+ line: number; // Literal line number from data
805
+ }
806
+
807
+ export interface ColumnNumberWidgetConfig extends BaseWidgetConfig {
808
+ type: WidgetType.COLUMN_NUMBER;
809
+ column: number; // Literal column number from data
810
+ }
811
+
812
+ export interface CodeRuleWidgetConfig extends BaseWidgetConfig {
813
+ type: WidgetType.CODE_RULE;
814
+ rule: string; // Literal rule ID/name from data (e.g., "no-unused-vars", "typescript/no-explicit-any")
815
+ }
816
+
817
+ export interface CodeOutputWidgetConfig extends BaseWidgetConfig {
818
+ type: WidgetType.CODE_OUTPUT;
819
+ code?: string; // Literal code snippet from data
820
+ language?: string; // Programming language for syntax highlighting
821
+ format?: "eslint" | "generic" | "json" | "table";
822
+ outputFormat?: "eslint" | "generic" | "json" | "table";
823
+ showSummary?: boolean;
824
+ colorScheme?: "auto" | "light" | "dark";
825
+ severityIcons?: Record<string, string>;
826
+ groupBy?: string;
827
+ summaryTemplate?: string;
828
+ }
829
+
830
+ export interface SeverityBadgeWidgetConfig extends BaseWidgetConfig {
831
+ type: WidgetType.SEVERITY_BADGE;
832
+ severity: "error" | "warning" | "info"; // Literal severity level from data
833
+ }
834
+
835
+ export interface MessageTextWidgetConfig<
836
+ TKey extends string,
837
+ > extends BaseWidgetConfig {
838
+ type: WidgetType.MESSAGE_TEXT;
839
+ message: NoInfer<TKey>; // Message to display
840
+ }
841
+
842
+ export interface IssueCardWidgetConfig<
843
+ TKey extends string,
844
+ > extends BaseWidgetConfig {
845
+ type: WidgetType.ISSUE_CARD;
846
+ title: NoInfer<TKey>;
847
+ description?: NoInfer<TKey>;
848
+ }
849
+
850
+ export interface CreditTransactionCardWidgetConfig extends BaseWidgetConfig {
851
+ type: WidgetType.CREDIT_TRANSACTION_CARD;
852
+ leftFields?: string[]; // Fields to show on left side
853
+ rightFields?: string[]; // Fields to show on right side
854
+ }
855
+
856
+ export interface CreditTransactionListWidgetConfig extends BaseWidgetConfig {
857
+ type: WidgetType.CREDIT_TRANSACTION_LIST;
858
+ }
859
+
860
+ export interface PaginationWidgetConfig extends BaseWidgetConfig {
861
+ type: WidgetType.PAGINATION;
862
+ }
863
+
864
+ // ============================================================================
865
+ // INTERACTIVE WIDGETS
866
+ // ============================================================================
867
+
868
+ export interface ButtonWidgetConfig<
869
+ TKey extends string,
870
+ > extends BaseWidgetConfig {
871
+ type: WidgetType.BUTTON;
872
+ text: NoInfer<TKey>;
873
+ icon?: string;
874
+ variant?:
875
+ | "default"
876
+ | "primary"
877
+ | "secondary"
878
+ | "destructive"
879
+ | "ghost"
880
+ | "link";
881
+ size?: "default" | "sm" | "lg" | "icon";
882
+ onClick?: string; // Action ID
883
+ }
884
+
885
+ export interface ButtonGroupWidgetConfig<
886
+ TKey extends string,
887
+ > extends BaseWidgetConfig {
888
+ type: WidgetType.BUTTON_GROUP;
889
+ buttons?: Array<{
890
+ text: NoInfer<TKey>;
891
+ onClick?: string;
892
+ }>;
893
+ }
894
+
895
+ export interface ActionBarWidgetConfig<
896
+ TKey extends string,
897
+ > extends BaseWidgetConfig {
898
+ type: WidgetType.ACTION_BAR;
899
+ actions?: Array<{
900
+ text: NoInfer<TKey>;
901
+ onClick?: string;
902
+ }>;
903
+ }
904
+
905
+ export interface PaginationInfoWidgetConfig extends BaseWidgetConfig {
906
+ type: WidgetType.PAGINATION_INFO;
907
+ total?: number;
908
+ page?: number;
909
+ pageSize?: number;
910
+ }
911
+
912
+ export interface ActionListWidgetConfig<
913
+ TKey extends string,
914
+ > extends BaseWidgetConfig {
915
+ type: WidgetType.ACTION_LIST;
916
+ actions?: Array<{
917
+ text: NoInfer<TKey>;
918
+ onClick?: string;
919
+ }>;
920
+ }
921
+
922
+ // ============================================================================
923
+ // STATS WIDGETS
924
+ // ============================================================================
925
+
926
+ export interface MetricCardWidgetConfig<
927
+ TKey extends string,
928
+ > extends BaseWidgetConfig {
929
+ type: WidgetType.METRIC_CARD;
930
+ title: NoInfer<TKey>;
931
+ value: string | number;
932
+ change?: number;
933
+ trend?: "up" | "down" | "neutral";
934
+ format?: "number" | "currency" | "percentage" | "bytes";
935
+ icon?: string;
936
+ unit?: string;
937
+ precision?: number;
938
+ threshold?: {
939
+ warning?: number;
940
+ error?: number;
941
+ };
942
+ }
943
+
944
+ /**
945
+ * Stat Widget Config - Simple stat display from field definition
946
+ * Takes a numeric value and displays with label from field.ui.label
947
+ */
948
+ export interface StatWidgetConfig<
949
+ TKey extends string,
950
+ > extends BaseWidgetConfig {
951
+ type: WidgetType.STAT;
952
+ label?: NoInfer<TKey>;
953
+ format?: "number" | "percentage" | "currency" | "compact";
954
+ icon?: string;
955
+ variant?: "default" | "success" | "warning" | "danger" | "info" | "muted";
956
+ trend?: "up" | "down" | "neutral";
957
+ trendValue?: number;
958
+ size?: "sm" | "md" | "lg";
959
+ }
960
+
961
+ export interface StatsGridWidgetConfig<
962
+ TKey extends string,
963
+ > extends BaseWidgetConfig {
964
+ type: WidgetType.STATS_GRID;
965
+ title?: NoInfer<TKey>;
966
+ stats?: Array<{
967
+ label: NoInfer<TKey>;
968
+ value: string | number;
969
+ }>;
970
+ }
971
+
972
+ export interface ChartWidgetConfig<
973
+ TKey extends string,
974
+ > extends BaseWidgetConfig {
975
+ type: WidgetType.CHART;
976
+ title?: NoInfer<TKey>;
977
+ label?: NoInfer<TKey>;
978
+ description?: NoInfer<TKey>;
979
+ chartType?: "line" | "bar" | "pie" | "area" | "donut";
980
+ xAxisLabel?: string;
981
+ yAxisLabel?: string;
982
+ height?: number;
983
+ showLegend?: boolean;
984
+ showGrid?: boolean;
985
+ animate?: boolean;
986
+ }
987
+
988
+ export interface ProgressWidgetConfig<
989
+ TKey extends string,
990
+ > extends BaseWidgetConfig {
991
+ type: WidgetType.PROGRESS;
992
+ value: number;
993
+ max?: number;
994
+ label?: NoInfer<TKey>;
995
+ }
996
+
997
+ // ============================================================================
998
+ // STATUS WIDGETS
999
+ // ============================================================================
1000
+
1001
+ export interface LoadingWidgetConfig<
1002
+ TKey extends string,
1003
+ > extends BaseWidgetConfig {
1004
+ type: WidgetType.LOADING;
1005
+ message?: NoInfer<TKey>;
1006
+ }
1007
+
1008
+ export interface ErrorWidgetConfig<
1009
+ TKey extends string,
1010
+ > extends BaseWidgetConfig {
1011
+ type: WidgetType.ERROR;
1012
+ title: NoInfer<TKey>;
1013
+ message?: NoInfer<TKey>;
1014
+ }
1015
+
1016
+ export interface EmptyStateWidgetConfig<
1017
+ TKey extends string,
1018
+ > extends BaseWidgetConfig {
1019
+ type: WidgetType.EMPTY_STATE;
1020
+ title: NoInfer<TKey>;
1021
+ message?: NoInfer<TKey>;
1022
+ action?: {
1023
+ text: NoInfer<TKey>;
1024
+ onClick?: string;
1025
+ };
1026
+ }
1027
+
1028
+ export interface StatusIndicatorWidgetConfig<
1029
+ TKey extends string,
1030
+ > extends BaseWidgetConfig {
1031
+ type: WidgetType.STATUS_INDICATOR;
1032
+ status: "success" | "warning" | "error" | "info" | "pending";
1033
+ label?: NoInfer<TKey>;
1034
+ }
1035
+
1036
+ export interface AlertWidgetConfig extends BaseWidgetConfig {
1037
+ type: WidgetType.ALERT;
1038
+ variant?: "default" | "destructive" | "success" | "warning";
1039
+ }
1040
+
1041
+ export interface FormAlertWidgetConfig extends BaseWidgetConfig {
1042
+ type: WidgetType.FORM_ALERT;
1043
+ }
1044
+
1045
+ export interface SubmitButtonWidgetConfig<
1046
+ TKey extends string,
1047
+ > extends BaseWidgetConfig {
1048
+ type: WidgetType.SUBMIT_BUTTON;
1049
+ text?: NoInfer<TKey>;
1050
+ loadingText?: NoInfer<TKey>;
1051
+ icon?: string;
1052
+ variant?:
1053
+ | "default"
1054
+ | "primary"
1055
+ | "secondary"
1056
+ | "destructive"
1057
+ | "ghost"
1058
+ | "outline"
1059
+ | "link";
1060
+ size?: "default" | "sm" | "lg" | "icon";
1061
+ }
1062
+
1063
+ // Password strength indicator
1064
+ export interface PasswordStrengthWidgetConfig extends BaseWidgetConfig {
1065
+ type: WidgetType.PASSWORD_STRENGTH;
1066
+ /** Field name to watch for password value (defaults to "password") */
1067
+ watchField?: string;
1068
+ }
1069
+
1070
+ // ============================================================================
1071
+ // CUSTOM WIDGETS
1072
+ // ============================================================================
1073
+
1074
+ export interface CustomWidgetConfig<
1075
+ TProps extends Record<string, string | number | boolean | null | undefined> =
1076
+ Record<string, never>,
1077
+ > extends BaseWidgetConfig {
1078
+ type: WidgetType.CUSTOM;
1079
+ componentId: string;
1080
+ props?: TProps;
1081
+ }
1082
+
1083
+ // ============================================================================
1084
+ // UNION TYPE FOR ALL WIDGET CONFIGS
1085
+ // ============================================================================
1086
+
1087
+ export type WidgetConfig<TKey extends string> =
1088
+ // Form widgets
1089
+ | FormFieldWidgetConfig<TKey>
1090
+ | FormGroupWidgetConfig<TKey>
1091
+ | FormSectionWidgetConfig<TKey>
1092
+ // Data display widgets
1093
+ | DataTableWidgetConfig<TKey>
1094
+ | DataCardWidgetConfig<TKey>
1095
+ | DataCardsWidgetConfig<TKey>
1096
+ | DataListWidgetConfig<TKey>
1097
+ | DataGridWidgetConfig<TKey>
1098
+ | GroupedListWidgetConfig<TKey>
1099
+ | CodeQualityListWidgetConfig<TKey>
1100
+ | CodeQualityFilesWidgetConfig<TKey>
1101
+ | CodeQualitySummaryWidgetConfig<TKey>
1102
+ | MetadataCardWidgetConfig<TKey>
1103
+ // Layout widgets
1104
+ | ContainerWidgetConfig<TKey>
1105
+ | SectionWidgetConfig<TKey>
1106
+ | TabsWidgetConfig<TKey>
1107
+ | AccordionWidgetConfig<TKey>
1108
+ // Content widgets
1109
+ | TitleWidgetConfig<TKey>
1110
+ | TextWidgetConfig<TKey>
1111
+ | BadgeWidgetConfig<TKey>
1112
+ | AvatarWidgetConfig<TKey>
1113
+ | MarkdownWidgetConfig<TKey>
1114
+ | MarkdownEditorWidgetConfig<TKey>
1115
+ | LinkWidgetConfig<TKey>
1116
+ | LinkCardWidgetConfig<TKey>
1117
+ | LinkListWidgetConfig<TKey>
1118
+ // Specialized content widgets
1119
+ | FilePathWidgetConfig
1120
+ | LineNumberWidgetConfig
1121
+ | ColumnNumberWidgetConfig
1122
+ | CodeRuleWidgetConfig
1123
+ | CodeOutputWidgetConfig
1124
+ | SeverityBadgeWidgetConfig
1125
+ | MessageTextWidgetConfig<TKey>
1126
+ | IssueCardWidgetConfig<TKey>
1127
+ | CreditTransactionCardWidgetConfig
1128
+ | CreditTransactionListWidgetConfig
1129
+ | PaginationWidgetConfig
1130
+ // Interactive widgets
1131
+ | ButtonWidgetConfig<TKey>
1132
+ | ButtonGroupWidgetConfig<TKey>
1133
+ | ActionBarWidgetConfig<TKey>
1134
+ | PaginationInfoWidgetConfig
1135
+ | ActionListWidgetConfig<TKey>
1136
+ // Stats widgets
1137
+ | StatWidgetConfig<TKey>
1138
+ | MetricCardWidgetConfig<TKey>
1139
+ | StatsGridWidgetConfig<TKey>
1140
+ | ChartWidgetConfig<TKey>
1141
+ | ProgressWidgetConfig<TKey>
1142
+ // Status widgets
1143
+ | LoadingWidgetConfig<TKey>
1144
+ | ErrorWidgetConfig<TKey>
1145
+ | EmptyStateWidgetConfig<TKey>
1146
+ | StatusIndicatorWidgetConfig<TKey>
1147
+ | AlertWidgetConfig
1148
+ | FormAlertWidgetConfig
1149
+ | SubmitButtonWidgetConfig<TKey>
1150
+ | PasswordStrengthWidgetConfig;
1151
+
1152
+ /**
1153
+ * Extract widget config type from WidgetType enum
1154
+ */
1155
+ export type ExtractWidgetConfig<
1156
+ T extends WidgetType,
1157
+ TKey extends string,
1158
+ > = Extract<WidgetConfig<TKey>, { type: T }>;