@webiny/ai-powerups 0.0.0-unstable.7be00a75a9

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 (311) hide show
  1. package/AiPowerups.d.ts +2 -0
  2. package/AiPowerups.js +11 -0
  3. package/AiPowerups.js.map +1 -0
  4. package/LICENSE +36 -0
  5. package/README.md +11 -0
  6. package/admin/Extension.d.ts +2 -0
  7. package/admin/Extension.js +33 -0
  8. package/admin/Extension.js.map +1 -0
  9. package/admin/domain/errors.d.ts +12 -0
  10. package/admin/domain/errors.js +21 -0
  11. package/admin/domain/errors.js.map +1 -0
  12. package/admin/features/feature.d.ts +1 -0
  13. package/admin/features/feature.js +22 -0
  14. package/admin/features/feature.js.map +1 -0
  15. package/admin/features/generatePageContent/GeneratePageContentGateway.d.ts +12 -0
  16. package/admin/features/generatePageContent/GeneratePageContentGateway.js +45 -0
  17. package/admin/features/generatePageContent/GeneratePageContentGateway.js.map +1 -0
  18. package/admin/features/generatePageContent/GeneratePageContentUseCase.d.ts +11 -0
  19. package/admin/features/generatePageContent/GeneratePageContentUseCase.js +18 -0
  20. package/admin/features/generatePageContent/GeneratePageContentUseCase.js.map +1 -0
  21. package/admin/features/generatePageContent/abstractions.d.ts +24 -0
  22. package/admin/features/generatePageContent/abstractions.js +6 -0
  23. package/admin/features/generatePageContent/abstractions.js.map +1 -0
  24. package/admin/features/generatePageContent/feature.d.ts +1 -0
  25. package/admin/features/generatePageContent/feature.js +13 -0
  26. package/admin/features/generatePageContent/feature.js.map +1 -0
  27. package/admin/features/generatePageContent/index.d.ts +3 -0
  28. package/admin/features/generatePageContent/index.js +2 -0
  29. package/admin/features/listModels/ListModelsGateway.d.ts +12 -0
  30. package/admin/features/listModels/ListModelsGateway.js +34 -0
  31. package/admin/features/listModels/ListModelsGateway.js.map +1 -0
  32. package/admin/features/listModels/ListModelsRepository.d.ts +13 -0
  33. package/admin/features/listModels/ListModelsRepository.js +27 -0
  34. package/admin/features/listModels/ListModelsRepository.js.map +1 -0
  35. package/admin/features/listModels/ListModelsUseCase.d.ts +10 -0
  36. package/admin/features/listModels/ListModelsUseCase.js +18 -0
  37. package/admin/features/listModels/ListModelsUseCase.js.map +1 -0
  38. package/admin/features/listModels/abstractions.d.ts +28 -0
  39. package/admin/features/listModels/abstractions.js +7 -0
  40. package/admin/features/listModels/abstractions.js.map +1 -0
  41. package/admin/features/listModels/feature.d.ts +3 -0
  42. package/admin/features/listModels/feature.js +21 -0
  43. package/admin/features/listModels/feature.js.map +1 -0
  44. package/admin/features/listModels/index.d.ts +2 -0
  45. package/admin/features/listModels/index.js +2 -0
  46. package/admin/features/settings/getSettings/GetSettingsGateway.d.ts +12 -0
  47. package/admin/features/settings/getSettings/GetSettingsGateway.js +29 -0
  48. package/admin/features/settings/getSettings/GetSettingsGateway.js.map +1 -0
  49. package/admin/features/settings/getSettings/GetSettingsRepository.d.ts +14 -0
  50. package/admin/features/settings/getSettings/GetSettingsRepository.js +31 -0
  51. package/admin/features/settings/getSettings/GetSettingsRepository.js.map +1 -0
  52. package/admin/features/settings/getSettings/GetSettingsUseCase.d.ts +11 -0
  53. package/admin/features/settings/getSettings/GetSettingsUseCase.js +18 -0
  54. package/admin/features/settings/getSettings/GetSettingsUseCase.js.map +1 -0
  55. package/admin/features/settings/getSettings/abstractions.d.ts +22 -0
  56. package/admin/features/settings/getSettings/abstractions.js +7 -0
  57. package/admin/features/settings/getSettings/abstractions.js.map +1 -0
  58. package/admin/features/settings/getSettings/feature.d.ts +3 -0
  59. package/admin/features/settings/getSettings/feature.js +21 -0
  60. package/admin/features/settings/getSettings/feature.js.map +1 -0
  61. package/admin/features/settings/getSettings/index.d.ts +2 -0
  62. package/admin/features/settings/getSettings/index.js +2 -0
  63. package/admin/features/settings/shared/SettingsCache.d.ts +10 -0
  64. package/admin/features/settings/shared/SettingsCache.js +19 -0
  65. package/admin/features/settings/shared/SettingsCache.js.map +1 -0
  66. package/admin/features/settings/shared/abstractions.d.ts +50 -0
  67. package/admin/features/settings/shared/abstractions.js +5 -0
  68. package/admin/features/settings/shared/abstractions.js.map +1 -0
  69. package/admin/features/settings/shared/feature.d.ts +3 -0
  70. package/admin/features/settings/shared/feature.js +17 -0
  71. package/admin/features/settings/shared/feature.js.map +1 -0
  72. package/admin/features/settings/shared/index.d.ts +2 -0
  73. package/admin/features/settings/shared/index.js +2 -0
  74. package/admin/features/settings/updateSettings/UpdateSettingsGateway.d.ts +12 -0
  75. package/admin/features/settings/updateSettings/UpdateSettingsGateway.js +45 -0
  76. package/admin/features/settings/updateSettings/UpdateSettingsGateway.js.map +1 -0
  77. package/admin/features/settings/updateSettings/UpdateSettingsRepository.d.ts +13 -0
  78. package/admin/features/settings/updateSettings/UpdateSettingsRepository.js +23 -0
  79. package/admin/features/settings/updateSettings/UpdateSettingsRepository.js.map +1 -0
  80. package/admin/features/settings/updateSettings/UpdateSettingsUseCase.d.ts +11 -0
  81. package/admin/features/settings/updateSettings/UpdateSettingsUseCase.js +18 -0
  82. package/admin/features/settings/updateSettings/UpdateSettingsUseCase.js.map +1 -0
  83. package/admin/features/settings/updateSettings/abstractions.d.ts +22 -0
  84. package/admin/features/settings/updateSettings/abstractions.js +7 -0
  85. package/admin/features/settings/updateSettings/abstractions.js.map +1 -0
  86. package/admin/features/settings/updateSettings/feature.d.ts +3 -0
  87. package/admin/features/settings/updateSettings/feature.js +21 -0
  88. package/admin/features/settings/updateSettings/feature.js.map +1 -0
  89. package/admin/features/settings/updateSettings/index.d.ts +2 -0
  90. package/admin/features/settings/updateSettings/index.js +2 -0
  91. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPage.d.ts +4 -0
  92. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPage.js +50 -0
  93. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPage.js.map +1 -0
  94. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPresenter.d.ts +26 -0
  95. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPresenter.js +148 -0
  96. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPresenter.js.map +1 -0
  97. package/admin/presentation/AiPowerUpsSettings/abstractions.d.ts +18 -0
  98. package/admin/presentation/AiPowerUpsSettings/abstractions.js +5 -0
  99. package/admin/presentation/AiPowerUpsSettings/abstractions.js.map +1 -0
  100. package/admin/presentation/AiPowerUpsSettings/feature.d.ts +3 -0
  101. package/admin/presentation/AiPowerUpsSettings/feature.js +25 -0
  102. package/admin/presentation/AiPowerUpsSettings/feature.js.map +1 -0
  103. package/admin/presentation/AiPowerUpsSettings/index.d.ts +3 -0
  104. package/admin/presentation/AiPowerUpsSettings/index.js +3 -0
  105. package/admin/presentation/AiPowerUpsSettings/settingsGroup.d.ts +17 -0
  106. package/admin/presentation/AiPowerUpsSettings/settingsGroup.js +5 -0
  107. package/admin/presentation/AiPowerUpsSettings/settingsGroup.js.map +1 -0
  108. package/admin/presentation/AiPowerUpsSettings/useAiPowerUpsSettings.d.ts +4 -0
  109. package/admin/presentation/AiPowerUpsSettings/useAiPowerUpsSettings.js +27 -0
  110. package/admin/presentation/AiPowerUpsSettings/useAiPowerUpsSettings.js.map +1 -0
  111. package/admin/presentation/ProjectsSettings.d.ts +11 -0
  112. package/admin/presentation/ProjectsSettings.js +56 -0
  113. package/admin/presentation/ProjectsSettings.js.map +1 -0
  114. package/admin/presentation/ProvidersSettings.d.ts +16 -0
  115. package/admin/presentation/ProvidersSettings.js +46 -0
  116. package/admin/presentation/ProvidersSettings.js.map +1 -0
  117. package/admin/presentation/ReaderPersonasSettings.d.ts +11 -0
  118. package/admin/presentation/ReaderPersonasSettings.js +37 -0
  119. package/admin/presentation/ReaderPersonasSettings.js.map +1 -0
  120. package/admin/presentation/WbContentGeneration/Extension.d.ts +2 -0
  121. package/admin/presentation/WbContentGeneration/Extension.js +22 -0
  122. package/admin/presentation/WbContentGeneration/Extension.js.map +1 -0
  123. package/admin/presentation/WbContentGeneration/GenerateContentButton.d.ts +2 -0
  124. package/admin/presentation/WbContentGeneration/GenerateContentButton.js +19 -0
  125. package/admin/presentation/WbContentGeneration/GenerateContentButton.js.map +1 -0
  126. package/admin/presentation/WbContentGeneration/GenerateContentDialog.d.ts +21 -0
  127. package/admin/presentation/WbContentGeneration/GenerateContentDialog.js +105 -0
  128. package/admin/presentation/WbContentGeneration/GenerateContentDialog.js.map +1 -0
  129. package/admin/presentation/WbContentGeneration/GenerateContentPresenter.d.ts +38 -0
  130. package/admin/presentation/WbContentGeneration/GenerateContentPresenter.js +228 -0
  131. package/admin/presentation/WbContentGeneration/GenerateContentPresenter.js.map +1 -0
  132. package/admin/presentation/WbContentGeneration/PROCESS_IDEA.md +190 -0
  133. package/admin/presentation/WbContentGeneration/abstractions.d.ts +30 -0
  134. package/admin/presentation/WbContentGeneration/abstractions.js +5 -0
  135. package/admin/presentation/WbContentGeneration/abstractions.js.map +1 -0
  136. package/admin/presentation/WbContentGeneration/decompressGzipBase64.d.ts +1 -0
  137. package/admin/presentation/WbContentGeneration/decompressGzipBase64.js +13 -0
  138. package/admin/presentation/WbContentGeneration/decompressGzipBase64.js.map +1 -0
  139. package/admin/presentation/WbContentGeneration/feature.d.ts +3 -0
  140. package/admin/presentation/WbContentGeneration/feature.js +17 -0
  141. package/admin/presentation/WbContentGeneration/feature.js.map +1 -0
  142. package/admin/presentation/WriterPersonasSettings.d.ts +11 -0
  143. package/admin/presentation/WriterPersonasSettings.js +37 -0
  144. package/admin/presentation/WriterPersonasSettings.js.map +1 -0
  145. package/admin/routes.d.ts +4 -0
  146. package/admin/routes.js +10 -0
  147. package/admin/routes.js.map +1 -0
  148. package/api/Extension.d.ts +4 -0
  149. package/api/Extension.js +37 -0
  150. package/api/Extension.js.map +1 -0
  151. package/api/constants.d.ts +1 -0
  152. package/api/constants.js +4 -0
  153. package/api/constants.js.map +1 -0
  154. package/api/features/AiImageEnrichment/AiImageEnrichmentAfterCreateHandler.d.ts +11 -0
  155. package/api/features/AiImageEnrichment/AiImageEnrichmentAfterCreateHandler.js +27 -0
  156. package/api/features/AiImageEnrichment/AiImageEnrichmentAfterCreateHandler.js.map +1 -0
  157. package/api/features/AiImageEnrichment/AiImageEnrichmentTask.d.ts +34 -0
  158. package/api/features/AiImageEnrichment/AiImageEnrichmentTask.js +140 -0
  159. package/api/features/AiImageEnrichment/AiImageEnrichmentTask.js.map +1 -0
  160. package/api/features/AiImageEnrichment/feature.d.ts +4 -0
  161. package/api/features/AiImageEnrichment/feature.js +13 -0
  162. package/api/features/AiImageEnrichment/feature.js.map +1 -0
  163. package/api/features/AiPromptContext/AiPromptContextBuilder.d.ts +12 -0
  164. package/api/features/AiPromptContext/AiPromptContextBuilder.js +103 -0
  165. package/api/features/AiPromptContext/AiPromptContextBuilder.js.map +1 -0
  166. package/api/features/AiPromptContext/ProjectFileAssembler.d.ts +22 -0
  167. package/api/features/AiPromptContext/ProjectFileAssembler.js +76 -0
  168. package/api/features/AiPromptContext/ProjectFileAssembler.js.map +1 -0
  169. package/api/features/AiPromptContext/ProjectFileCache.d.ts +16 -0
  170. package/api/features/AiPromptContext/ProjectFileCache.js +61 -0
  171. package/api/features/AiPromptContext/ProjectFileCache.js.map +1 -0
  172. package/api/features/AiPromptContext/ProjectSection.d.ts +4 -0
  173. package/api/features/AiPromptContext/ProjectSection.js +35 -0
  174. package/api/features/AiPromptContext/ProjectSection.js.map +1 -0
  175. package/api/features/AiPromptContext/ReadProjectFileTool.d.ts +3 -0
  176. package/api/features/AiPromptContext/ReadProjectFileTool.js +36 -0
  177. package/api/features/AiPromptContext/ReadProjectFileTool.js.map +1 -0
  178. package/api/features/AiPromptContext/ReaderPersonaSection.d.ts +4 -0
  179. package/api/features/AiPromptContext/ReaderPersonaSection.js +10 -0
  180. package/api/features/AiPromptContext/ReaderPersonaSection.js.map +1 -0
  181. package/api/features/AiPromptContext/WriterPersonaSection.d.ts +4 -0
  182. package/api/features/AiPromptContext/WriterPersonaSection.js +10 -0
  183. package/api/features/AiPromptContext/WriterPersonaSection.js.map +1 -0
  184. package/api/features/AiPromptContext/abstractions.d.ts +68 -0
  185. package/api/features/AiPromptContext/abstractions.js +7 -0
  186. package/api/features/AiPromptContext/abstractions.js.map +1 -0
  187. package/api/features/AiPromptContext/feature.d.ts +4 -0
  188. package/api/features/AiPromptContext/feature.js +15 -0
  189. package/api/features/AiPromptContext/feature.js.map +1 -0
  190. package/api/features/AiPromptContext/index.d.ts +1 -0
  191. package/api/features/AiPromptContext/index.js +1 -0
  192. package/api/features/ExtractFrontmatter/ExtractFrontmatterBeforeCreateHandler.d.ts +11 -0
  193. package/api/features/ExtractFrontmatter/ExtractFrontmatterBeforeCreateHandler.js +34 -0
  194. package/api/features/ExtractFrontmatter/ExtractFrontmatterBeforeCreateHandler.js.map +1 -0
  195. package/api/features/ExtractFrontmatter/feature.d.ts +4 -0
  196. package/api/features/ExtractFrontmatter/feature.js +11 -0
  197. package/api/features/ExtractFrontmatter/feature.js.map +1 -0
  198. package/api/features/GetSettings/GetSettingsRepository.d.ts +16 -0
  199. package/api/features/GetSettings/GetSettingsRepository.js +40 -0
  200. package/api/features/GetSettings/GetSettingsRepository.js.map +1 -0
  201. package/api/features/GetSettings/GetSettingsUseCase.d.ts +10 -0
  202. package/api/features/GetSettings/GetSettingsUseCase.js +18 -0
  203. package/api/features/GetSettings/GetSettingsUseCase.js.map +1 -0
  204. package/api/features/GetSettings/abstractions.d.ts +16 -0
  205. package/api/features/GetSettings/abstractions.js +6 -0
  206. package/api/features/GetSettings/abstractions.js.map +1 -0
  207. package/api/features/GetSettings/feature.d.ts +4 -0
  208. package/api/features/GetSettings/feature.js +13 -0
  209. package/api/features/GetSettings/feature.js.map +1 -0
  210. package/api/features/GetSettings/index.d.ts +1 -0
  211. package/api/features/GetSettings/index.js +1 -0
  212. package/api/features/Projects/ProjectsHandler.d.ts +31 -0
  213. package/api/features/Projects/ProjectsHandler.js +103 -0
  214. package/api/features/Projects/ProjectsHandler.js.map +1 -0
  215. package/api/features/Projects/feature.d.ts +4 -0
  216. package/api/features/Projects/feature.js +11 -0
  217. package/api/features/Projects/feature.js.map +1 -0
  218. package/api/features/Projects/types.d.ts +50 -0
  219. package/api/features/Projects/types.js +0 -0
  220. package/api/features/Providers/ProvidersGraphQLMapper.d.ts +21 -0
  221. package/api/features/Providers/ProvidersGraphQLMapper.js +39 -0
  222. package/api/features/Providers/ProvidersGraphQLMapper.js.map +1 -0
  223. package/api/features/Providers/ProvidersHandler.d.ts +26 -0
  224. package/api/features/Providers/ProvidersHandler.js +79 -0
  225. package/api/features/Providers/ProvidersHandler.js.map +1 -0
  226. package/api/features/Providers/feature.d.ts +4 -0
  227. package/api/features/Providers/feature.js +13 -0
  228. package/api/features/Providers/feature.js.map +1 -0
  229. package/api/features/Providers/index.d.ts +1 -0
  230. package/api/features/Providers/index.js +0 -0
  231. package/api/features/Providers/types.d.ts +29 -0
  232. package/api/features/Providers/types.js +0 -0
  233. package/api/features/ReaderPersonas/ReaderPersonasHandler.d.ts +20 -0
  234. package/api/features/ReaderPersonas/ReaderPersonasHandler.js +43 -0
  235. package/api/features/ReaderPersonas/ReaderPersonasHandler.js.map +1 -0
  236. package/api/features/ReaderPersonas/feature.d.ts +4 -0
  237. package/api/features/ReaderPersonas/feature.js +11 -0
  238. package/api/features/ReaderPersonas/feature.js.map +1 -0
  239. package/api/features/ReaderPersonas/index.d.ts +2 -0
  240. package/api/features/ReaderPersonas/index.js +1 -0
  241. package/api/features/ReaderPersonas/types.d.ts +24 -0
  242. package/api/features/ReaderPersonas/types.js +0 -0
  243. package/api/features/UpdateSettings/UpdateSettingsRepository.d.ts +16 -0
  244. package/api/features/UpdateSettings/UpdateSettingsRepository.js +71 -0
  245. package/api/features/UpdateSettings/UpdateSettingsRepository.js.map +1 -0
  246. package/api/features/UpdateSettings/UpdateSettingsUseCase.d.ts +13 -0
  247. package/api/features/UpdateSettings/UpdateSettingsUseCase.js +30 -0
  248. package/api/features/UpdateSettings/UpdateSettingsUseCase.js.map +1 -0
  249. package/api/features/UpdateSettings/abstractions.d.ts +36 -0
  250. package/api/features/UpdateSettings/abstractions.js +8 -0
  251. package/api/features/UpdateSettings/abstractions.js.map +1 -0
  252. package/api/features/UpdateSettings/errors.d.ts +10 -0
  253. package/api/features/UpdateSettings/errors.js +14 -0
  254. package/api/features/UpdateSettings/errors.js.map +1 -0
  255. package/api/features/UpdateSettings/events.d.ts +10 -0
  256. package/api/features/UpdateSettings/events.js +21 -0
  257. package/api/features/UpdateSettings/events.js.map +1 -0
  258. package/api/features/UpdateSettings/feature.d.ts +4 -0
  259. package/api/features/UpdateSettings/feature.js +13 -0
  260. package/api/features/UpdateSettings/feature.js.map +1 -0
  261. package/api/features/UpdateSettings/index.d.ts +1 -0
  262. package/api/features/UpdateSettings/index.js +1 -0
  263. package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.d.ts +33 -0
  264. package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.js +75 -0
  265. package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.js.map +1 -0
  266. package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.d.ts +21 -0
  267. package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.js +106 -0
  268. package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.js.map +1 -0
  269. package/api/features/WbGeneratePageContent/abstractions.d.ts +28 -0
  270. package/api/features/WbGeneratePageContent/abstractions.js +5 -0
  271. package/api/features/WbGeneratePageContent/abstractions.js.map +1 -0
  272. package/api/features/WbGeneratePageContent/buildPrompt.d.ts +1 -0
  273. package/api/features/WbGeneratePageContent/buildPrompt.js +143 -0
  274. package/api/features/WbGeneratePageContent/buildPrompt.js.map +1 -0
  275. package/api/features/WbGeneratePageContent/feature.d.ts +4 -0
  276. package/api/features/WbGeneratePageContent/feature.js +13 -0
  277. package/api/features/WbGeneratePageContent/feature.js.map +1 -0
  278. package/api/features/WbGeneratePageContent/index.d.ts +1 -0
  279. package/api/features/WbGeneratePageContent/index.js +1 -0
  280. package/api/features/WriterPersonas/WriterPersonasHandler.d.ts +20 -0
  281. package/api/features/WriterPersonas/WriterPersonasHandler.js +43 -0
  282. package/api/features/WriterPersonas/WriterPersonasHandler.js.map +1 -0
  283. package/api/features/WriterPersonas/feature.d.ts +4 -0
  284. package/api/features/WriterPersonas/feature.js +11 -0
  285. package/api/features/WriterPersonas/feature.js.map +1 -0
  286. package/api/features/WriterPersonas/index.d.ts +2 -0
  287. package/api/features/WriterPersonas/index.js +1 -0
  288. package/api/features/WriterPersonas/types.d.ts +24 -0
  289. package/api/features/WriterPersonas/types.js +0 -0
  290. package/api/features/shared/SettingsCache.d.ts +12 -0
  291. package/api/features/shared/SettingsCache.js +22 -0
  292. package/api/features/shared/SettingsCache.js.map +1 -0
  293. package/api/features/shared/abstractions.d.ts +33 -0
  294. package/api/features/shared/abstractions.js +7 -0
  295. package/api/features/shared/abstractions.js.map +1 -0
  296. package/api/features/shared/index.d.ts +3 -0
  297. package/api/features/shared/index.js +1 -0
  298. package/api/graphql/AiPowerUpsSettingsGraphQLMapper.d.ts +13 -0
  299. package/api/graphql/AiPowerUpsSettingsGraphQLMapper.js +44 -0
  300. package/api/graphql/AiPowerUpsSettingsGraphQLMapper.js.map +1 -0
  301. package/api/graphql/BaseGraphQLSchema.d.ts +8 -0
  302. package/api/graphql/BaseGraphQLSchema.js +133 -0
  303. package/api/graphql/BaseGraphQLSchema.js.map +1 -0
  304. package/api/graphql/abstractions.d.ts +9 -0
  305. package/api/graphql/abstractions.js +5 -0
  306. package/api/graphql/abstractions.js.map +1 -0
  307. package/api/types.d.ts +5 -0
  308. package/api/types.js +3 -0
  309. package/index.d.ts +1 -0
  310. package/index.js +1 -0
  311. package/package.json +60 -0
@@ -0,0 +1,50 @@
1
+ import react, { useEffect } from "react";
2
+ import { observer } from "mobx-react-lite";
3
+ import { FormErrors, FormView, PresenterErrors, SimpleForm, SimpleFormContent, SimpleFormFooter, SimpleFormHeader } from "@webiny/app-admin";
4
+ import { Button, OverlayLoader, useToast } from "@webiny/admin-ui";
5
+ import { useFeature } from "@webiny/app";
6
+ import { AiPowerUpsSettingsFeature } from "./feature.js";
7
+ const AiPowerUpsSettingsPage = observer(()=>{
8
+ const toast = useToast();
9
+ const { presenter } = useFeature(AiPowerUpsSettingsFeature);
10
+ const vm = presenter.vm;
11
+ useEffect(()=>{
12
+ presenter.init();
13
+ }, []);
14
+ const handleSave = async ()=>{
15
+ const success = await presenter.save();
16
+ if (success) toast.showSuccessToast({
17
+ title: "AI power-ups settings saved successfully!"
18
+ });
19
+ };
20
+ return /*#__PURE__*/ react.createElement("div", null, /*#__PURE__*/ react.createElement(SimpleForm, {
21
+ size: "xl"
22
+ }, vm.errors.length > 0 ? /*#__PURE__*/ react.createElement("div", {
23
+ className: "mb-lg"
24
+ }, /*#__PURE__*/ react.createElement(PresenterErrors, {
25
+ errors: vm.errors
26
+ })) : null, vm.form && vm.form.errors.length > 0 ? /*#__PURE__*/ react.createElement("div", {
27
+ className: "mb-lg"
28
+ }, /*#__PURE__*/ react.createElement(FormErrors, {
29
+ form: vm.form
30
+ })) : null, vm.loading || vm.saving ? /*#__PURE__*/ react.createElement(OverlayLoader, {
31
+ text: vm.saving ? "Saving..." : "Loading..."
32
+ }) : null, /*#__PURE__*/ react.createElement(SimpleFormHeader, {
33
+ title: "AI Power-Ups"
34
+ }), /*#__PURE__*/ react.createElement(SimpleFormContent, {
35
+ className: "p-0"
36
+ }, /*#__PURE__*/ react.createElement("div", {
37
+ className: "flex flex-col gap-4"
38
+ }, vm.form ? /*#__PURE__*/ react.createElement(FormView, {
39
+ name: "AI Power-Ups",
40
+ form: vm.form
41
+ }) : null)), /*#__PURE__*/ react.createElement(SimpleFormFooter, {
42
+ className: "border-t-sm border-t-neutral-dimmed pt-lg"
43
+ }, /*#__PURE__*/ react.createElement(Button, {
44
+ text: "Save Settings",
45
+ onClick: handleSave
46
+ }))));
47
+ });
48
+ export { AiPowerUpsSettingsPage };
49
+
50
+ //# sourceMappingURL=AiPowerUpsSettingsPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPage.js","sources":["../../../../src/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPage.tsx"],"sourcesContent":["import React, { useEffect } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport {\n FormView,\n FormErrors,\n PresenterErrors,\n SimpleForm,\n SimpleFormContent,\n SimpleFormFooter,\n SimpleFormHeader\n} from \"@webiny/app-admin\";\nimport { Button, OverlayLoader, useToast } from \"@webiny/admin-ui\";\nimport { useFeature } from \"@webiny/app\";\nimport { AiPowerUpsSettingsFeature } from \"./feature.js\";\n\nexport const AiPowerUpsSettingsPage = observer(() => {\n const toast = useToast();\n const { presenter } = useFeature(AiPowerUpsSettingsFeature);\n const vm = presenter.vm;\n\n useEffect(() => {\n presenter.init();\n }, []);\n\n const handleSave = async () => {\n const success = await presenter.save();\n if (success) {\n toast.showSuccessToast({\n title: \"AI power-ups settings saved successfully!\"\n });\n }\n };\n\n return (\n <div>\n <SimpleForm size={\"xl\"}>\n {vm.errors.length > 0 ? (\n <div className={\"mb-lg\"}>\n <PresenterErrors errors={vm.errors} />\n </div>\n ) : null}\n {vm.form && vm.form.errors.length > 0 ? (\n <div className={\"mb-lg\"}>\n <FormErrors form={vm.form} />\n </div>\n ) : null}\n {vm.loading || vm.saving ? (\n <OverlayLoader text={vm.saving ? \"Saving...\" : \"Loading...\"} />\n ) : null}\n <SimpleFormHeader title=\"AI Power-Ups\" />\n <SimpleFormContent className={\"p-0\"}>\n <div className=\"flex flex-col gap-4\">\n {vm.form ? <FormView name=\"AI Power-Ups\" form={vm.form} /> : null}\n </div>\n </SimpleFormContent>\n <SimpleFormFooter className={\"border-t-sm border-t-neutral-dimmed pt-lg\"}>\n <Button text=\"Save Settings\" onClick={handleSave} />\n </SimpleFormFooter>\n </SimpleForm>\n </div>\n );\n});\n"],"names":["AiPowerUpsSettingsPage","observer","toast","useToast","presenter","useFeature","AiPowerUpsSettingsFeature","vm","useEffect","handleSave","success","SimpleForm","PresenterErrors","FormErrors","OverlayLoader","SimpleFormHeader","SimpleFormContent","FormView","SimpleFormFooter","Button"],"mappings":";;;;;;AAeO,MAAMA,yBAAyBC,SAAS;IAC3C,MAAMC,QAAQC;IACd,MAAM,EAAEC,SAAS,EAAE,GAAGC,WAAWC;IACjC,MAAMC,KAAKH,UAAU,EAAE;IAEvBI,UAAU;QACNJ,UAAU,IAAI;IAClB,GAAG,EAAE;IAEL,MAAMK,aAAa;QACf,MAAMC,UAAU,MAAMN,UAAU,IAAI;QACpC,IAAIM,SACAR,MAAM,gBAAgB,CAAC;YACnB,OAAO;QACX;IAER;IAEA,OAAO,WAAP,GACI,oBAAC,2BACG,oBAACS,YAAUA;QAAC,MAAM;OACbJ,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,WAAJ,GAChB,oBAAC;QAAI,WAAW;qBACZ,oBAACK,iBAAeA;QAAC,QAAQL,GAAG,MAAM;UAEtC,MACHA,GAAG,IAAI,IAAIA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,WAAJ,GAChC,oBAAC;QAAI,WAAW;qBACZ,oBAACM,YAAUA;QAAC,MAAMN,GAAG,IAAI;UAE7B,MACHA,GAAG,OAAO,IAAIA,GAAG,MAAM,GAAG,WAAH,GACpB,oBAACO,eAAaA;QAAC,MAAMP,GAAG,MAAM,GAAG,cAAc;SAC/C,oBACJ,oBAACQ,kBAAgBA;QAAC,OAAM;sBACxB,oBAACC,mBAAiBA;QAAC,WAAW;qBAC1B,oBAAC;QAAI,WAAU;OACVT,GAAG,IAAI,GAAG,WAAH,GAAG,oBAACU,UAAQA;QAAC,MAAK;QAAe,MAAMV,GAAG,IAAI;SAAO,sBAGrE,oBAACW,kBAAgBA;QAAC,WAAW;qBACzB,oBAACC,QAAMA;QAAC,MAAK;QAAgB,SAASV;;AAK1D"}
@@ -0,0 +1,26 @@
1
+ import { FormModelFactory } from "@webiny/app-admin";
2
+ import { GetSettingsUseCase } from "../../features/settings/getSettings/abstractions.js";
3
+ import { UpdateSettingsUseCase } from "../../features/settings/updateSettings/abstractions.js";
4
+ import { AiPowerUpsSettingsPresenter as PresenterAbstraction } from "./abstractions.js";
5
+ import { AiPowerUpsSettingsGroup } from "./settingsGroup.js";
6
+ declare class AiPowerUpsSettingsPresenterImpl implements PresenterAbstraction.Interface {
7
+ private factory;
8
+ private groups;
9
+ private getSettings;
10
+ private updateSettings;
11
+ private loading;
12
+ private saving;
13
+ private form;
14
+ private errors;
15
+ constructor(factory: FormModelFactory.Interface, groups: AiPowerUpsSettingsGroup.Interface[], getSettings: GetSettingsUseCase.Interface, updateSettings: UpdateSettingsUseCase.Interface);
16
+ get vm(): PresenterAbstraction.ViewModel;
17
+ init(): Promise<void>;
18
+ save(): Promise<boolean>;
19
+ importData(data: Record<string, unknown>): void;
20
+ private collectGroups;
21
+ private buildForm;
22
+ }
23
+ export declare const AiPowerUpsSettingsPresenter: typeof AiPowerUpsSettingsPresenterImpl & {
24
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IAiPowerUpsSettingsPresenter>;
25
+ };
26
+ export {};
@@ -0,0 +1,148 @@
1
+ import { computed, makeAutoObservable, runInAction } from "mobx";
2
+ import { FormModelFactory } from "@webiny/app-admin";
3
+ import { GetSettingsUseCase } from "../../features/settings/getSettings/abstractions.js";
4
+ import { UpdateSettingsUseCase } from "../../features/settings/updateSettings/abstractions.js";
5
+ import { AiPowerUpsSettingsPresenter } from "./abstractions.js";
6
+ import { AiPowerUpsSettingsGroup } from "./settingsGroup.js";
7
+ import { SettingsValidationError } from "../../domain/errors.js";
8
+ class AiPowerUpsSettingsPresenterImpl {
9
+ constructor(factory, groups, getSettings, updateSettings){
10
+ this.factory = factory;
11
+ this.groups = groups;
12
+ this.getSettings = getSettings;
13
+ this.updateSettings = updateSettings;
14
+ this.loading = false;
15
+ this.saving = false;
16
+ this.form = null;
17
+ this.errors = [];
18
+ makeAutoObservable(this, {
19
+ vm: computed
20
+ }, {
21
+ autoBind: true
22
+ });
23
+ }
24
+ get vm() {
25
+ return {
26
+ loading: this.loading,
27
+ saving: this.saving,
28
+ form: this.form ? this.form.vm : null,
29
+ errors: this.errors
30
+ };
31
+ }
32
+ async init() {
33
+ this.loading = true;
34
+ this.errors = [];
35
+ try {
36
+ const data = await this.getSettings.execute();
37
+ runInAction(()=>{
38
+ this.form = this.buildForm();
39
+ this.form.setData(data);
40
+ });
41
+ } catch (err) {
42
+ runInAction(()=>{
43
+ this.errors = [
44
+ err instanceof Error ? err.message : "Failed to load settings."
45
+ ];
46
+ });
47
+ } finally{
48
+ runInAction(()=>{
49
+ this.loading = false;
50
+ });
51
+ }
52
+ }
53
+ async save() {
54
+ if (!this.form) return false;
55
+ const data = await this.form.submit();
56
+ if (!data) return false;
57
+ runInAction(()=>{
58
+ this.saving = true;
59
+ this.errors = [];
60
+ });
61
+ try {
62
+ await this.updateSettings.execute(data);
63
+ return true;
64
+ } catch (err) {
65
+ runInAction(()=>{
66
+ if (err instanceof SettingsValidationError) this.errors = Object.values(err.data.invalidFields).map((e)=>e.message);
67
+ else this.errors = [
68
+ err instanceof Error ? err.message : "Failed to save settings."
69
+ ];
70
+ });
71
+ return false;
72
+ } finally{
73
+ runInAction(()=>{
74
+ this.saving = false;
75
+ });
76
+ }
77
+ }
78
+ importData(data) {
79
+ if (!this.form) return;
80
+ const current = this.form.getData();
81
+ this.form.setData({
82
+ ...current,
83
+ ...data
84
+ });
85
+ }
86
+ collectGroups() {
87
+ return this.groups.map((group)=>{
88
+ const collected = {
89
+ group,
90
+ fieldsFn: null,
91
+ layoutFn: null
92
+ };
93
+ const builder = {
94
+ fields (fn) {
95
+ collected.fieldsFn = fn;
96
+ },
97
+ layout (fn) {
98
+ collected.layoutFn = fn;
99
+ }
100
+ };
101
+ group.buildForm(builder);
102
+ return collected;
103
+ });
104
+ }
105
+ buildForm() {
106
+ const collected = this.collectGroups();
107
+ const form = this.factory.create({
108
+ fields: (fields)=>{
109
+ const result = {};
110
+ for (const { group, fieldsFn } of collected)if (fieldsFn) result[group.name] = fields.object().label(group.label).renderer("passthrough").fields(fieldsFn);
111
+ return result;
112
+ },
113
+ layout: (layout)=>{
114
+ if (0 === collected.length) return [];
115
+ const tabsBuilder = layout.tabs("settings-tabs").renderer("tabsVertical");
116
+ for (const { group } of collected)tabsBuilder.tab(group.name, (tab)=>{
117
+ tab.label(group.label);
118
+ if (group.description) tab.description(group.description);
119
+ if (group.icon) tab.icon(group.icon);
120
+ tab.layout((l)=>[
121
+ l.row(group.name)
122
+ ]);
123
+ });
124
+ return [
125
+ tabsBuilder
126
+ ];
127
+ }
128
+ });
129
+ return form;
130
+ }
131
+ }
132
+ const AiPowerUpsSettingsPresenter_AiPowerUpsSettingsPresenter = AiPowerUpsSettingsPresenter.createImplementation({
133
+ implementation: AiPowerUpsSettingsPresenterImpl,
134
+ dependencies: [
135
+ FormModelFactory,
136
+ [
137
+ AiPowerUpsSettingsGroup,
138
+ {
139
+ multiple: true
140
+ }
141
+ ],
142
+ GetSettingsUseCase,
143
+ UpdateSettingsUseCase
144
+ ]
145
+ });
146
+ export { AiPowerUpsSettingsPresenter_AiPowerUpsSettingsPresenter as AiPowerUpsSettingsPresenter };
147
+
148
+ //# sourceMappingURL=AiPowerUpsSettingsPresenter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPresenter.js","sources":["../../../../src/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPresenter.ts"],"sourcesContent":["import { makeAutoObservable, computed, runInAction } from \"mobx\";\nimport { FormModelFactory, FormModel } from \"@webiny/app-admin\";\nimport type { ILayoutNodeBuilder } from \"@webiny/app-admin/features/formModel/abstractions.js\";\nimport { GetSettingsUseCase } from \"../../features/settings/getSettings/abstractions.js\";\nimport { UpdateSettingsUseCase } from \"../../features/settings/updateSettings/abstractions.js\";\nimport { AiPowerUpsSettingsPresenter as PresenterAbstraction } from \"./abstractions.js\";\nimport { AiPowerUpsSettingsGroup } from \"./settingsGroup.js\";\nimport { SettingsValidationError } from \"~/admin/domain/errors.js\";\nimport type { IAiPowerUpsSettings } from \"~/admin/features/settings/shared/abstractions.js\";\n\ntype FieldsFactory = (\n fields: FormModelFactory.FieldBuilderRegistry\n) => Record<string, FormModelFactory.FieldBuilder>;\n\ntype LayoutFactory = (layout: FormModelFactory.LayoutBuilder) => ILayoutNodeBuilder[];\n\ninterface CollectedGroup {\n group: AiPowerUpsSettingsGroup.Interface;\n fieldsFn: FieldsFactory | null;\n layoutFn: LayoutFactory | null;\n}\n\nclass AiPowerUpsSettingsPresenterImpl implements PresenterAbstraction.Interface {\n private loading = false;\n private saving = false;\n private form: FormModel.Interface<IAiPowerUpsSettings> | null = null;\n private errors: string[] = [];\n\n constructor(\n private factory: FormModelFactory.Interface,\n private groups: AiPowerUpsSettingsGroup.Interface[],\n private getSettings: GetSettingsUseCase.Interface,\n private updateSettings: UpdateSettingsUseCase.Interface\n ) {\n makeAutoObservable(this, { vm: computed }, { autoBind: true });\n }\n\n get vm(): PresenterAbstraction.ViewModel {\n return {\n loading: this.loading,\n saving: this.saving,\n form: this.form ? this.form.vm : null,\n errors: this.errors\n };\n }\n\n async init(): Promise<void> {\n this.loading = true;\n this.errors = [];\n\n try {\n const data = await this.getSettings.execute();\n runInAction(() => {\n this.form = this.buildForm();\n this.form.setData(data);\n });\n } catch (err) {\n runInAction(() => {\n this.errors = [err instanceof Error ? err.message : \"Failed to load settings.\"];\n });\n } finally {\n runInAction(() => {\n this.loading = false;\n });\n }\n }\n\n async save(): Promise<boolean> {\n if (!this.form) {\n return false;\n }\n\n const data = await this.form.submit<IAiPowerUpsSettings>();\n if (!data) {\n return false;\n }\n\n runInAction(() => {\n this.saving = true;\n this.errors = [];\n });\n\n try {\n await this.updateSettings.execute(data);\n return true;\n } catch (err) {\n runInAction(() => {\n if (err instanceof SettingsValidationError) {\n this.errors = Object.values(err.data.invalidFields).map(e => e.message);\n } else {\n this.errors = [err instanceof Error ? err.message : \"Failed to save settings.\"];\n }\n });\n return false;\n } finally {\n runInAction(() => {\n this.saving = false;\n });\n }\n }\n\n importData(data: Record<string, unknown>): void {\n if (!this.form) {\n return;\n }\n const current = this.form.getData();\n this.form.setData({ ...current, ...data } as IAiPowerUpsSettings);\n }\n\n private collectGroups(): CollectedGroup[] {\n return this.groups.map(group => {\n const collected: CollectedGroup = {\n group,\n fieldsFn: null,\n layoutFn: null\n };\n\n const builder: AiPowerUpsSettingsGroup.FormBuilder = {\n fields(fn: FieldsFactory) {\n collected.fieldsFn = fn;\n },\n layout(fn: LayoutFactory) {\n collected.layoutFn = fn;\n }\n };\n\n group.buildForm(builder);\n\n return collected;\n });\n }\n\n private buildForm() {\n const collected = this.collectGroups();\n\n const form = this.factory.create<IAiPowerUpsSettings>({\n fields: fields => {\n const result: Record<string, FormModelFactory.FieldBuilder> = {};\n for (const { group, fieldsFn } of collected) {\n if (!fieldsFn) {\n continue;\n }\n result[group.name] = fields\n .object()\n .label(group.label)\n .renderer(\"passthrough\")\n .fields(fieldsFn);\n }\n return result;\n },\n layout: layout => {\n if (collected.length === 0) {\n return [];\n }\n\n const tabsBuilder = layout.tabs(\"settings-tabs\").renderer(\"tabsVertical\");\n\n for (const { group } of collected) {\n tabsBuilder.tab(group.name, tab => {\n tab.label(group.label);\n if (group.description) {\n tab.description(group.description);\n }\n if (group.icon) {\n tab.icon(group.icon);\n }\n tab.layout(l => [l.row(group.name)]);\n });\n }\n\n return [tabsBuilder];\n }\n });\n\n return form;\n }\n}\n\nexport const AiPowerUpsSettingsPresenter = PresenterAbstraction.createImplementation({\n implementation: AiPowerUpsSettingsPresenterImpl,\n dependencies: [\n FormModelFactory,\n [AiPowerUpsSettingsGroup, { multiple: true }],\n GetSettingsUseCase,\n UpdateSettingsUseCase\n ]\n});\n"],"names":["AiPowerUpsSettingsPresenterImpl","factory","groups","getSettings","updateSettings","makeAutoObservable","computed","data","runInAction","err","Error","SettingsValidationError","Object","e","current","group","collected","builder","fn","form","fields","result","fieldsFn","layout","tabsBuilder","tab","l","AiPowerUpsSettingsPresenter","PresenterAbstraction","FormModelFactory","AiPowerUpsSettingsGroup","GetSettingsUseCase","UpdateSettingsUseCase"],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { FormModel } from "@webiny/app-admin";
2
+ export interface IAiPowerUpsSettingsVm {
3
+ loading: boolean;
4
+ saving: boolean;
5
+ form: FormModel.FormVM | null;
6
+ errors: string[];
7
+ }
8
+ export interface IAiPowerUpsSettingsPresenter {
9
+ readonly vm: IAiPowerUpsSettingsVm;
10
+ init(): Promise<void>;
11
+ save(): Promise<boolean>;
12
+ importData(data: Record<string, unknown>): void;
13
+ }
14
+ export declare const AiPowerUpsSettingsPresenter: import("@webiny/di").Abstraction<IAiPowerUpsSettingsPresenter>;
15
+ export declare namespace AiPowerUpsSettingsPresenter {
16
+ type Interface = IAiPowerUpsSettingsPresenter;
17
+ type ViewModel = IAiPowerUpsSettingsVm;
18
+ }
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/admin";
2
+ const AiPowerUpsSettingsPresenter = createAbstraction("AiPowerUps/SettingsPresenter");
3
+ export { AiPowerUpsSettingsPresenter };
4
+
5
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/presentation/AiPowerUpsSettings/abstractions.js","sources":["../../../../src/admin/presentation/AiPowerUpsSettings/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\nimport { FormModel } from \"@webiny/app-admin\";\n\nexport interface IAiPowerUpsSettingsVm {\n loading: boolean;\n saving: boolean;\n form: FormModel.FormVM | null;\n errors: string[];\n}\n\nexport interface IAiPowerUpsSettingsPresenter {\n readonly vm: IAiPowerUpsSettingsVm;\n init(): Promise<void>;\n save(): Promise<boolean>;\n importData(data: Record<string, unknown>): void;\n}\n\nexport const AiPowerUpsSettingsPresenter = createAbstraction<IAiPowerUpsSettingsPresenter>(\n \"AiPowerUps/SettingsPresenter\"\n);\n\nexport namespace AiPowerUpsSettingsPresenter {\n export type Interface = IAiPowerUpsSettingsPresenter;\n export type ViewModel = IAiPowerUpsSettingsVm;\n}\n"],"names":["AiPowerUpsSettingsPresenter","createAbstraction"],"mappings":";AAiBO,MAAMA,8BAA8BC,kBACvC"}
@@ -0,0 +1,3 @@
1
+ export declare const AiPowerUpsSettingsFeature: import("@webiny/feature/admin").FeatureDefinition<{
2
+ presenter: import("./abstractions.js").IAiPowerUpsSettingsPresenter;
3
+ }, []>;
@@ -0,0 +1,25 @@
1
+ import { createFeature } from "@webiny/feature/admin";
2
+ import { AiPowerUpsSettingsPresenter } from "./abstractions.js";
3
+ import { AiPowerUpsSettingsPresenter as external_AiPowerUpsSettingsPresenter_js_AiPowerUpsSettingsPresenter } from "./AiPowerUpsSettingsPresenter.js";
4
+ import { ProviderSettings } from "../ProvidersSettings.js";
5
+ import { ReaderPersonasSettings } from "../ReaderPersonasSettings.js";
6
+ import { WriterPersonasSettings } from "../WriterPersonasSettings.js";
7
+ import { ProjectsSettings } from "../ProjectsSettings.js";
8
+ const AiPowerUpsSettingsFeature = createFeature({
9
+ name: "AiPowerUps/Settings/Presenter",
10
+ register (container) {
11
+ container.register(ProviderSettings);
12
+ container.register(ReaderPersonasSettings);
13
+ container.register(WriterPersonasSettings);
14
+ container.register(ProjectsSettings);
15
+ container.register(external_AiPowerUpsSettingsPresenter_js_AiPowerUpsSettingsPresenter);
16
+ },
17
+ resolve (container) {
18
+ return {
19
+ presenter: container.resolve(AiPowerUpsSettingsPresenter)
20
+ };
21
+ }
22
+ });
23
+ export { AiPowerUpsSettingsFeature };
24
+
25
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/presentation/AiPowerUpsSettings/feature.js","sources":["../../../../src/admin/presentation/AiPowerUpsSettings/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { AiPowerUpsSettingsPresenter as PresenterAbstraction } from \"./abstractions.js\";\nimport { AiPowerUpsSettingsPresenter } from \"./AiPowerUpsSettingsPresenter.js\";\nimport { ProviderSettings } from \"../ProvidersSettings.js\";\nimport { ReaderPersonasSettings } from \"../ReaderPersonasSettings.js\";\nimport { WriterPersonasSettings } from \"../WriterPersonasSettings.js\";\nimport { ProjectsSettings } from \"../ProjectsSettings.js\";\n\nexport const AiPowerUpsSettingsFeature = createFeature({\n name: \"AiPowerUps/Settings/Presenter\",\n register(container) {\n container.register(ProviderSettings);\n container.register(ReaderPersonasSettings);\n container.register(WriterPersonasSettings);\n container.register(ProjectsSettings);\n container.register(AiPowerUpsSettingsPresenter);\n },\n resolve(container) {\n return {\n presenter: container.resolve(PresenterAbstraction)\n };\n }\n});\n"],"names":["AiPowerUpsSettingsFeature","createFeature","container","ProviderSettings","ReaderPersonasSettings","WriterPersonasSettings","ProjectsSettings","AiPowerUpsSettingsPresenter","PresenterAbstraction"],"mappings":";;;;;;;AAQO,MAAMA,4BAA4BC,cAAc;IACnD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE;QACnBF,UAAU,QAAQ,CAACG;QACnBH,UAAU,QAAQ,CAACI;QACnBJ,UAAU,QAAQ,CAACK;IACvB;IACA,SAAQL,SAAS;QACb,OAAO;YACH,WAAWA,UAAU,OAAO,CAACM;QACjC;IACJ;AACJ"}
@@ -0,0 +1,3 @@
1
+ export { AiPowerUpsSettingsFeature } from "./feature.js";
2
+ export { useAiPowerUpsSettings } from "./useAiPowerUpsSettings.js";
3
+ export { AiPowerUpsSettingsGroup } from "./settingsGroup.js";
@@ -0,0 +1,3 @@
1
+ export { AiPowerUpsSettingsFeature } from "./feature.js";
2
+ export { useAiPowerUpsSettings } from "./useAiPowerUpsSettings.js";
3
+ export { AiPowerUpsSettingsGroup } from "./settingsGroup.js";
@@ -0,0 +1,17 @@
1
+ import { FormModelFactory, FormModel, Icon } from "@webiny/app-admin";
2
+ export interface IAiPowerUpsSettingsGroupFormBuilder {
3
+ fields(fn: (fields: FormModelFactory.FieldBuilderRegistry) => Record<string, FormModelFactory.FieldBuilder>): void;
4
+ layout(fn: (layout: FormModelFactory.LayoutBuilder) => FormModel.LayoutNodeBuilder[]): void;
5
+ }
6
+ export interface IAiPowerUpsSettingsGroup {
7
+ name: string;
8
+ label: string;
9
+ description?: string;
10
+ icon?: Icon;
11
+ buildForm(formBuilder: IAiPowerUpsSettingsGroupFormBuilder): void;
12
+ }
13
+ export declare const AiPowerUpsSettingsGroup: import("@webiny/di").Abstraction<IAiPowerUpsSettingsGroup>;
14
+ export declare namespace AiPowerUpsSettingsGroup {
15
+ type Interface = IAiPowerUpsSettingsGroup;
16
+ type FormBuilder = IAiPowerUpsSettingsGroupFormBuilder;
17
+ }
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/admin";
2
+ const AiPowerUpsSettingsGroup = createAbstraction("AiPowerUps/SettingsGroup");
3
+ export { AiPowerUpsSettingsGroup };
4
+
5
+ //# sourceMappingURL=settingsGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/presentation/AiPowerUpsSettings/settingsGroup.js","sources":["../../../../src/admin/presentation/AiPowerUpsSettings/settingsGroup.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\nimport { FormModelFactory, FormModel, Icon } from \"@webiny/app-admin\";\n\nexport interface IAiPowerUpsSettingsGroupFormBuilder {\n fields(\n fn: (\n fields: FormModelFactory.FieldBuilderRegistry\n ) => Record<string, FormModelFactory.FieldBuilder>\n ): void;\n layout(fn: (layout: FormModelFactory.LayoutBuilder) => FormModel.LayoutNodeBuilder[]): void;\n}\n\nexport interface IAiPowerUpsSettingsGroup {\n name: string;\n label: string;\n description?: string;\n icon?: Icon;\n buildForm(formBuilder: IAiPowerUpsSettingsGroupFormBuilder): void;\n}\n\nexport const AiPowerUpsSettingsGroup = createAbstraction<IAiPowerUpsSettingsGroup>(\n \"AiPowerUps/SettingsGroup\"\n);\n\nexport namespace AiPowerUpsSettingsGroup {\n export type Interface = IAiPowerUpsSettingsGroup;\n export type FormBuilder = IAiPowerUpsSettingsGroupFormBuilder;\n}\n"],"names":["AiPowerUpsSettingsGroup","createAbstraction"],"mappings":";AAoBO,MAAMA,0BAA0BC,kBACnC"}
@@ -0,0 +1,4 @@
1
+ import type { IAiPowerUpsSettings } from "../../../admin/features/settings/shared/abstractions.js";
2
+ export declare function useAiPowerUpsSettings(): {
3
+ settings: IAiPowerUpsSettings | null;
4
+ };
@@ -0,0 +1,27 @@
1
+ import { useEffect, useState } from "react";
2
+ import { autorun } from "mobx";
3
+ import { useFeature } from "@webiny/app";
4
+ import { GetSettingsFeature } from "../../features/settings/getSettings/feature.js";
5
+ import { SharedSettingsFeature } from "../../features/settings/shared/feature.js";
6
+ function useAiPowerUpsSettings() {
7
+ const { useCase } = useFeature(GetSettingsFeature);
8
+ const { settingsCache } = useFeature(SharedSettingsFeature);
9
+ const [settings, setSettings] = useState(()=>settingsCache.get());
10
+ useEffect(()=>{
11
+ useCase.execute();
12
+ }, [
13
+ useCase
14
+ ]);
15
+ useEffect(()=>autorun(()=>{
16
+ const data = settingsCache.get();
17
+ setSettings(data);
18
+ }), [
19
+ settingsCache
20
+ ]);
21
+ return {
22
+ settings
23
+ };
24
+ }
25
+ export { useAiPowerUpsSettings };
26
+
27
+ //# sourceMappingURL=useAiPowerUpsSettings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/presentation/AiPowerUpsSettings/useAiPowerUpsSettings.js","sources":["../../../../src/admin/presentation/AiPowerUpsSettings/useAiPowerUpsSettings.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { autorun } from \"mobx\";\nimport { useFeature } from \"@webiny/app\";\nimport { GetSettingsFeature } from \"~/admin/features/settings/getSettings/feature.js\";\nimport { SharedSettingsFeature } from \"~/admin/features/settings/shared/feature.js\";\nimport type { IAiPowerUpsSettings } from \"~/admin/features/settings/shared/abstractions.js\";\n\nexport function useAiPowerUpsSettings() {\n const { useCase } = useFeature(GetSettingsFeature);\n const { settingsCache } = useFeature(SharedSettingsFeature);\n\n const [settings, setSettings] = useState<IAiPowerUpsSettings | null>(() => settingsCache.get());\n\n useEffect(() => {\n void useCase.execute();\n }, [useCase]);\n\n useEffect(() => {\n return autorun(() => {\n const data = settingsCache.get();\n setSettings(data);\n });\n }, [settingsCache]);\n\n return { settings };\n}\n"],"names":["useAiPowerUpsSettings","useCase","useFeature","GetSettingsFeature","settingsCache","SharedSettingsFeature","settings","setSettings","useState","useEffect","autorun","data"],"mappings":";;;;;AAOO,SAASA;IACZ,MAAM,EAAEC,OAAO,EAAE,GAAGC,WAAWC;IAC/B,MAAM,EAAEC,aAAa,EAAE,GAAGF,WAAWG;IAErC,MAAM,CAACC,UAAUC,YAAY,GAAGC,SAAqC,IAAMJ,cAAc,GAAG;IAE5FK,UAAU;QACDR,QAAQ,OAAO;IACxB,GAAG;QAACA;KAAQ;IAEZQ,UAAU,IACCC,QAAQ;YACX,MAAMC,OAAOP,cAAc,GAAG;YAC9BG,YAAYI;QAChB,IACD;QAACP;KAAc;IAElB,OAAO;QAAEE;IAAS;AACtB"}
@@ -0,0 +1,11 @@
1
+ import { AiPowerUpsSettingsGroup } from "./AiPowerUpsSettings/settingsGroup.js";
2
+ declare class ProjectsSettingsImpl implements AiPowerUpsSettingsGroup.Interface {
3
+ name: string;
4
+ label: string;
5
+ description: string;
6
+ buildForm(form: AiPowerUpsSettingsGroup.FormBuilder): void;
7
+ }
8
+ export declare const ProjectsSettings: typeof ProjectsSettingsImpl & {
9
+ __abstraction: import("@webiny/di").Abstraction<import("./AiPowerUpsSettings/settingsGroup.js").IAiPowerUpsSettingsGroup>;
10
+ };
11
+ export {};
@@ -0,0 +1,56 @@
1
+ import { generateAlphaNumericId } from "@webiny/utils";
2
+ import { AiPowerUpsSettingsGroup } from "./AiPowerUpsSettings/settingsGroup.js";
3
+ class ProjectsSettingsImpl {
4
+ buildForm(form) {
5
+ form.fields((fields)=>({
6
+ presets: fields.object().label("Presets").renderer("objectAccordionMultiple", {
7
+ container: false,
8
+ addItemLabel: "Add project",
9
+ itemTitle: (data, index)=>String(data.name || `Project #${index + 1}`)
10
+ }).fields((f)=>({
11
+ id: f.text().hidden().defaultValue(()=>generateAlphaNumericId(10)),
12
+ name: f.text().label("Name").required("Name is required").description("This name will be used to identify the project in the UI."),
13
+ description: f.text().label("Description").description("Human-facing description shown in the project picker. Not sent to the LLM.").renderer("textarea", {
14
+ rows: 3
15
+ }),
16
+ instructions: f.text().label("Instructions").description("System-prompt-style guidance that will be sent to the LLM when this project is selected.").renderer("textarea", {
17
+ rows: 6
18
+ }),
19
+ defaultReaderPersonaId: f.text().label("Default Reader Persona").description("Auto-populates the reader persona when this project is selected.").options((formModel)=>{
20
+ const data = formModel.getData();
21
+ const presets = data?.readerPersonas?.presets;
22
+ if (!presets || 0 === presets.length) return [];
23
+ return presets.map((preset)=>({
24
+ label: preset.name,
25
+ value: preset.id
26
+ }));
27
+ }),
28
+ defaultWriterPersonaId: f.text().label("Default Writer Persona").description("Auto-populates the writer persona when this project is selected.").options((formModel)=>{
29
+ const data = formModel.getData();
30
+ const presets = data?.writerPersonas?.presets;
31
+ if (!presets || 0 === presets.length) return [];
32
+ return presets.map((preset)=>({
33
+ label: preset.name,
34
+ value: preset.id
35
+ }));
36
+ }),
37
+ files: f.file().label("Files").list().description("Add files from the library to include as context for the LLM.").note("Only files containing text will be sent to the LLM (.mdx, .md, .html, .json, .csv, .txt, etc.)")
38
+ })).list()
39
+ }));
40
+ form.layout((layout)=>[
41
+ layout.row("presets")
42
+ ]);
43
+ }
44
+ constructor(){
45
+ this.name = "projects";
46
+ this.label = "Projects";
47
+ this.description = "Predefined prompting contexts.";
48
+ }
49
+ }
50
+ const ProjectsSettings = AiPowerUpsSettingsGroup.createImplementation({
51
+ implementation: ProjectsSettingsImpl,
52
+ dependencies: []
53
+ });
54
+ export { ProjectsSettings };
55
+
56
+ //# sourceMappingURL=ProjectsSettings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/presentation/ProjectsSettings.js","sources":["../../../src/admin/presentation/ProjectsSettings.ts"],"sourcesContent":["import { generateAlphaNumericId } from \"@webiny/utils\";\nimport type { IFormModel } from \"@webiny/app-admin\";\nimport { AiPowerUpsSettingsGroup } from \"./AiPowerUpsSettings/settingsGroup.js\";\n\nclass ProjectsSettingsImpl implements AiPowerUpsSettingsGroup.Interface {\n name = \"projects\";\n label = \"Projects\";\n description = \"Predefined prompting contexts.\";\n\n buildForm(form: AiPowerUpsSettingsGroup.FormBuilder): void {\n form.fields(fields => ({\n presets: fields\n .object()\n .label(\"Presets\")\n .renderer(\"objectAccordionMultiple\", {\n container: false,\n addItemLabel: \"Add project\",\n itemTitle: (data, index) => String(data.name || `Project #${index + 1}`)\n })\n .fields(f => ({\n id: f\n .text()\n .hidden()\n .defaultValue(() => generateAlphaNumericId(10)),\n name: f\n .text()\n .label(\"Name\")\n .required(\"Name is required\")\n .description(\"This name will be used to identify the project in the UI.\"),\n description: f\n .text()\n .label(\"Description\")\n .description(\n \"Human-facing description shown in the project picker. Not sent to the LLM.\"\n )\n .renderer(\"textarea\", { rows: 3 }),\n instructions: f\n .text()\n .label(\"Instructions\")\n .description(\n \"System-prompt-style guidance that will be sent to the LLM when this project is selected.\"\n )\n .renderer(\"textarea\", { rows: 6 }),\n defaultReaderPersonaId: f\n .text()\n .label(\"Default Reader Persona\")\n .description(\n \"Auto-populates the reader persona when this project is selected.\"\n )\n .options((formModel: IFormModel) => {\n const data = formModel.getData();\n const presets = data?.readerPersonas?.presets;\n if (!presets || presets.length === 0) {\n return [];\n }\n return presets.map((preset: { id: string; name: string }) => ({\n label: preset.name,\n value: preset.id\n }));\n }),\n defaultWriterPersonaId: f\n .text()\n .label(\"Default Writer Persona\")\n .description(\n \"Auto-populates the writer persona when this project is selected.\"\n )\n .options((formModel: IFormModel) => {\n const data = formModel.getData();\n const presets = data?.writerPersonas?.presets;\n if (!presets || presets.length === 0) {\n return [];\n }\n return presets.map((preset: { id: string; name: string }) => ({\n label: preset.name,\n value: preset.id\n }));\n }),\n files: f\n .file()\n .label(\"Files\")\n .list()\n .description(\n \"Add files from the library to include as context for the LLM.\"\n )\n .note(\n \"Only files containing text will be sent to the LLM (.mdx, .md, .html, .json, .csv, .txt, etc.)\"\n )\n }))\n .list()\n }));\n\n form.layout(layout => [layout.row(\"presets\")]);\n }\n}\n\nexport const ProjectsSettings = AiPowerUpsSettingsGroup.createImplementation({\n implementation: ProjectsSettingsImpl,\n dependencies: []\n});\n"],"names":["ProjectsSettingsImpl","form","fields","data","index","String","f","generateAlphaNumericId","formModel","presets","preset","layout","ProjectsSettings","AiPowerUpsSettingsGroup"],"mappings":";;AAIA,MAAMA;IAKF,UAAUC,IAAyC,EAAQ;QACvDA,KAAK,MAAM,CAACC,CAAAA,SAAW;gBACnB,SAASA,OACJ,MAAM,GACN,KAAK,CAAC,WACN,QAAQ,CAAC,2BAA2B;oBACjC,WAAW;oBACX,cAAc;oBACd,WAAW,CAACC,MAAMC,QAAUC,OAAOF,KAAK,IAAI,IAAI,CAAC,SAAS,EAAEC,QAAQ,GAAG;gBAC3E,GACC,MAAM,CAACE,CAAAA,IAAM;wBACV,IAAIA,EACC,IAAI,GACJ,MAAM,GACN,YAAY,CAAC,IAAMC,uBAAuB;wBAC/C,MAAMD,EACD,IAAI,GACJ,KAAK,CAAC,QACN,QAAQ,CAAC,oBACT,WAAW,CAAC;wBACjB,aAAaA,EACR,IAAI,GACJ,KAAK,CAAC,eACN,WAAW,CACR,8EAEH,QAAQ,CAAC,YAAY;4BAAE,MAAM;wBAAE;wBACpC,cAAcA,EACT,IAAI,GACJ,KAAK,CAAC,gBACN,WAAW,CACR,4FAEH,QAAQ,CAAC,YAAY;4BAAE,MAAM;wBAAE;wBACpC,wBAAwBA,EACnB,IAAI,GACJ,KAAK,CAAC,0BACN,WAAW,CACR,oEAEH,OAAO,CAAC,CAACE;4BACN,MAAML,OAAOK,UAAU,OAAO;4BAC9B,MAAMC,UAAUN,MAAM,gBAAgB;4BACtC,IAAI,CAACM,WAAWA,AAAmB,MAAnBA,QAAQ,MAAM,EAC1B,OAAO,EAAE;4BAEb,OAAOA,QAAQ,GAAG,CAAC,CAACC,SAA0C;oCAC1D,OAAOA,OAAO,IAAI;oCAClB,OAAOA,OAAO,EAAE;gCACpB;wBACJ;wBACJ,wBAAwBJ,EACnB,IAAI,GACJ,KAAK,CAAC,0BACN,WAAW,CACR,oEAEH,OAAO,CAAC,CAACE;4BACN,MAAML,OAAOK,UAAU,OAAO;4BAC9B,MAAMC,UAAUN,MAAM,gBAAgB;4BACtC,IAAI,CAACM,WAAWA,AAAmB,MAAnBA,QAAQ,MAAM,EAC1B,OAAO,EAAE;4BAEb,OAAOA,QAAQ,GAAG,CAAC,CAACC,SAA0C;oCAC1D,OAAOA,OAAO,IAAI;oCAClB,OAAOA,OAAO,EAAE;gCACpB;wBACJ;wBACJ,OAAOJ,EACF,IAAI,GACJ,KAAK,CAAC,SACN,IAAI,GACJ,WAAW,CACR,iEAEH,IAAI,CACD;oBAEZ,IACC,IAAI;YACb;QAEAL,KAAK,MAAM,CAACU,CAAAA,SAAU;gBAACA,OAAO,GAAG,CAAC;aAAW;IACjD;;aAvFA,IAAI,GAAG;aACP,KAAK,GAAG;aACR,WAAW,GAAG;;AAsFlB;AAEO,MAAMC,mBAAmBC,wBAAwB,oBAAoB,CAAC;IACzE,gBAAgBb;IAChB,cAAc,EAAE;AACpB"}
@@ -0,0 +1,16 @@
1
+ import { AiPowerUpsSettingsGroup } from "./AiPowerUpsSettings/settingsGroup.js";
2
+ import { ListModelsUseCase, ListModelsRepository } from "../../admin/features/listModels/abstractions.js";
3
+ declare class ProviderSettingsImpl implements AiPowerUpsSettingsGroup.Interface {
4
+ private useCase;
5
+ private repository;
6
+ name: string;
7
+ label: string;
8
+ description: string;
9
+ constructor(useCase: ListModelsUseCase.Interface, repository: ListModelsRepository.Interface);
10
+ buildForm(form: AiPowerUpsSettingsGroup.FormBuilder): void;
11
+ private getModelOptions;
12
+ }
13
+ export declare const ProviderSettings: typeof ProviderSettingsImpl & {
14
+ __abstraction: import("@webiny/di").Abstraction<import("./AiPowerUpsSettings/settingsGroup.js").IAiPowerUpsSettingsGroup>;
15
+ };
16
+ export {};
@@ -0,0 +1,46 @@
1
+ import { generateAlphaNumericId } from "@webiny/utils";
2
+ import { AiPowerUpsSettingsGroup } from "./AiPowerUpsSettings/settingsGroup.js";
3
+ import { ListModelsRepository, ListModelsUseCase } from "../features/listModels/abstractions.js";
4
+ class ProviderSettingsImpl {
5
+ constructor(useCase, repository){
6
+ this.useCase = useCase;
7
+ this.repository = repository;
8
+ this.name = "providers";
9
+ this.label = "Providers";
10
+ this.description = "Configure AI model providers.";
11
+ }
12
+ buildForm(form) {
13
+ this.useCase.execute();
14
+ form.fields((fields)=>({
15
+ presets: fields.object().label("Presets").renderer("objectAccordionMultiple", {
16
+ container: false,
17
+ addItemLabel: "Add provider",
18
+ itemTitle: (data, index)=>String(data.name || `Provider #${index + 1}`)
19
+ }).fields((f)=>({
20
+ id: f.text().hidden().defaultValue(()=>generateAlphaNumericId(10)),
21
+ name: f.text().label("Name").required("Name is required"),
22
+ model: f.text().label("Model").required("Model is required").options(()=>this.getModelOptions()),
23
+ apiKey: f.text().label("API Key").required("API Key is required")
24
+ })).list()
25
+ }));
26
+ form.layout((layout)=>[
27
+ layout.row("presets")
28
+ ]);
29
+ }
30
+ getModelOptions() {
31
+ return this.repository.getModels().map((model)=>({
32
+ label: `${model.modelName} (${model.modelId})`,
33
+ value: `${model.providerId}/${model.modelId}`
34
+ }));
35
+ }
36
+ }
37
+ const ProviderSettings = AiPowerUpsSettingsGroup.createImplementation({
38
+ implementation: ProviderSettingsImpl,
39
+ dependencies: [
40
+ ListModelsUseCase,
41
+ ListModelsRepository
42
+ ]
43
+ });
44
+ export { ProviderSettings };
45
+
46
+ //# sourceMappingURL=ProvidersSettings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/presentation/ProvidersSettings.js","sources":["../../../src/admin/presentation/ProvidersSettings.ts"],"sourcesContent":["import { generateAlphaNumericId } from \"@webiny/utils\";\nimport { AiPowerUpsSettingsGroup } from \"./AiPowerUpsSettings/settingsGroup.js\";\nimport {\n ListModelsUseCase,\n ListModelsRepository\n} from \"~/admin/features/listModels/abstractions.js\";\n\nclass ProviderSettingsImpl implements AiPowerUpsSettingsGroup.Interface {\n name = \"providers\";\n label = \"Providers\";\n description = \"Configure AI model providers.\";\n\n constructor(\n private useCase: ListModelsUseCase.Interface,\n private repository: ListModelsRepository.Interface\n ) {}\n\n buildForm(form: AiPowerUpsSettingsGroup.FormBuilder): void {\n void this.useCase.execute();\n\n form.fields(fields => ({\n presets: fields\n .object()\n .label(\"Presets\")\n .renderer(\"objectAccordionMultiple\", {\n container: false,\n addItemLabel: \"Add provider\",\n itemTitle: (data, index) => String(data.name || `Provider #${index + 1}`)\n })\n .fields(f => ({\n id: f\n .text()\n .hidden()\n .defaultValue(() => generateAlphaNumericId(10)),\n name: f.text().label(\"Name\").required(\"Name is required\"),\n model: f\n .text()\n .label(\"Model\")\n .required(\"Model is required\")\n .options(() => this.getModelOptions()),\n apiKey: f.text().label(\"API Key\").required(\"API Key is required\")\n }))\n .list()\n }));\n\n form.layout(layout => [layout.row(\"presets\")]);\n }\n\n private getModelOptions() {\n return this.repository.getModels().map(model => ({\n label: `${model.modelName} (${model.modelId})`,\n value: `${model.providerId}/${model.modelId}`\n }));\n }\n}\n\nexport const ProviderSettings = AiPowerUpsSettingsGroup.createImplementation({\n implementation: ProviderSettingsImpl,\n dependencies: [ListModelsUseCase, ListModelsRepository]\n});\n"],"names":["ProviderSettingsImpl","useCase","repository","form","fields","data","index","String","f","generateAlphaNumericId","layout","model","ProviderSettings","AiPowerUpsSettingsGroup","ListModelsUseCase","ListModelsRepository"],"mappings":";;;AAOA,MAAMA;IAKF,YACYC,OAAoC,EACpCC,UAA0C,CACpD;aAFUD,OAAO,GAAPA;aACAC,UAAU,GAAVA;aANZ,IAAI,GAAG;aACP,KAAK,GAAG;aACR,WAAW,GAAG;IAKX;IAEH,UAAUC,IAAyC,EAAQ;QAClD,IAAI,CAAC,OAAO,CAAC,OAAO;QAEzBA,KAAK,MAAM,CAACC,CAAAA,SAAW;gBACnB,SAASA,OACJ,MAAM,GACN,KAAK,CAAC,WACN,QAAQ,CAAC,2BAA2B;oBACjC,WAAW;oBACX,cAAc;oBACd,WAAW,CAACC,MAAMC,QAAUC,OAAOF,KAAK,IAAI,IAAI,CAAC,UAAU,EAAEC,QAAQ,GAAG;gBAC5E,GACC,MAAM,CAACE,CAAAA,IAAM;wBACV,IAAIA,EACC,IAAI,GACJ,MAAM,GACN,YAAY,CAAC,IAAMC,uBAAuB;wBAC/C,MAAMD,EAAE,IAAI,GAAG,KAAK,CAAC,QAAQ,QAAQ,CAAC;wBACtC,OAAOA,EACF,IAAI,GACJ,KAAK,CAAC,SACN,QAAQ,CAAC,qBACT,OAAO,CAAC,IAAM,IAAI,CAAC,eAAe;wBACvC,QAAQA,EAAE,IAAI,GAAG,KAAK,CAAC,WAAW,QAAQ,CAAC;oBAC/C,IACC,IAAI;YACb;QAEAL,KAAK,MAAM,CAACO,CAAAA,SAAU;gBAACA,OAAO,GAAG,CAAC;aAAW;IACjD;IAEQ,kBAAkB;QACtB,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,GAAG,CAACC,CAAAA,QAAU;gBAC7C,OAAO,GAAGA,MAAM,SAAS,CAAC,EAAE,EAAEA,MAAM,OAAO,CAAC,CAAC,CAAC;gBAC9C,OAAO,GAAGA,MAAM,UAAU,CAAC,CAAC,EAAEA,MAAM,OAAO,EAAE;YACjD;IACJ;AACJ;AAEO,MAAMC,mBAAmBC,wBAAwB,oBAAoB,CAAC;IACzE,gBAAgBb;IAChB,cAAc;QAACc;QAAmBC;KAAqB;AAC3D"}
@@ -0,0 +1,11 @@
1
+ import { AiPowerUpsSettingsGroup } from "./AiPowerUpsSettings/settingsGroup.js";
2
+ declare class ReaderPersonasSettingsImpl implements AiPowerUpsSettingsGroup.Interface {
3
+ name: string;
4
+ label: string;
5
+ description: string;
6
+ buildForm(form: AiPowerUpsSettingsGroup.FormBuilder): void;
7
+ }
8
+ export declare const ReaderPersonasSettings: typeof ReaderPersonasSettingsImpl & {
9
+ __abstraction: import("@webiny/di").Abstraction<import("./AiPowerUpsSettings/settingsGroup.js").IAiPowerUpsSettingsGroup>;
10
+ };
11
+ export {};
@@ -0,0 +1,37 @@
1
+ import { generateAlphaNumericId } from "@webiny/utils";
2
+ import { AiPowerUpsSettingsGroup } from "./AiPowerUpsSettings/settingsGroup.js";
3
+ class ReaderPersonasSettingsImpl {
4
+ buildForm(form) {
5
+ form.fields((fields)=>({
6
+ presets: fields.object().label("Presets").renderer("objectAccordionMultiple", {
7
+ container: false,
8
+ addItemLabel: "Add reader persona",
9
+ itemTitle: (data, index)=>String(data.name || `Reader Persona #${index + 1}`)
10
+ }).fields((f)=>({
11
+ id: f.text().hidden().defaultValue(()=>generateAlphaNumericId(10)),
12
+ name: f.text().label("Name").required("Name is required").description("This name will be used to identify the reader persona in the UI."),
13
+ description: f.text().label("Description").required("Description is required").description("Describe who this reader is and what they care about. This will be used when prompting AI.").renderer("textarea", {
14
+ rows: 8
15
+ }),
16
+ style: f.text().label("Style").description("Optional hints about the expected tone or style when writing for this reader.").renderer("textarea", {
17
+ rows: 3
18
+ })
19
+ })).list()
20
+ }));
21
+ form.layout((layout)=>[
22
+ layout.row("presets")
23
+ ]);
24
+ }
25
+ constructor(){
26
+ this.name = "readerPersonas";
27
+ this.label = "Reader Personas";
28
+ this.description = "Define who the content is written for.";
29
+ }
30
+ }
31
+ const ReaderPersonasSettings = AiPowerUpsSettingsGroup.createImplementation({
32
+ implementation: ReaderPersonasSettingsImpl,
33
+ dependencies: []
34
+ });
35
+ export { ReaderPersonasSettings };
36
+
37
+ //# sourceMappingURL=ReaderPersonasSettings.js.map