@strapi/content-type-builder 5.25.0 → 5.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/dist/admin/components/AIChat/Chat.js +435 -0
  2. package/dist/admin/components/AIChat/Chat.js.map +1 -0
  3. package/dist/admin/components/AIChat/Chat.mjs +433 -0
  4. package/dist/admin/components/AIChat/Chat.mjs.map +1 -0
  5. package/dist/admin/components/AIChat/FeedbackModal.js +237 -0
  6. package/dist/admin/components/AIChat/FeedbackModal.js.map +1 -0
  7. package/dist/admin/components/AIChat/FeedbackModal.mjs +233 -0
  8. package/dist/admin/components/AIChat/FeedbackModal.mjs.map +1 -0
  9. package/dist/admin/components/AIChat/UploadCodeModal.js +427 -0
  10. package/dist/admin/components/AIChat/UploadCodeModal.js.map +1 -0
  11. package/dist/admin/components/AIChat/UploadCodeModal.mjs +423 -0
  12. package/dist/admin/components/AIChat/UploadCodeModal.mjs.map +1 -0
  13. package/dist/admin/components/AIChat/UploadFigmaModal.js +377 -0
  14. package/dist/admin/components/AIChat/UploadFigmaModal.js.map +1 -0
  15. package/dist/admin/components/AIChat/UploadFigmaModal.mjs +373 -0
  16. package/dist/admin/components/AIChat/UploadFigmaModal.mjs.map +1 -0
  17. package/dist/admin/components/AIChat/components/Alert.js +46 -0
  18. package/dist/admin/components/AIChat/components/Alert.js.map +1 -0
  19. package/dist/admin/components/AIChat/components/Alert.mjs +44 -0
  20. package/dist/admin/components/AIChat/components/Alert.mjs.map +1 -0
  21. package/dist/admin/components/AIChat/components/AnimatedBox.js +34 -0
  22. package/dist/admin/components/AIChat/components/AnimatedBox.js.map +1 -0
  23. package/dist/admin/components/AIChat/components/AnimatedBox.mjs +32 -0
  24. package/dist/admin/components/AIChat/components/AnimatedBox.mjs.map +1 -0
  25. package/dist/admin/components/AIChat/components/Attachments/AttachmentPreview.js +92 -0
  26. package/dist/admin/components/AIChat/components/Attachments/AttachmentPreview.js.map +1 -0
  27. package/dist/admin/components/AIChat/components/Attachments/AttachmentPreview.mjs +90 -0
  28. package/dist/admin/components/AIChat/components/Attachments/AttachmentPreview.mjs.map +1 -0
  29. package/dist/admin/components/AIChat/components/Attachments/components/Attachment.js +100 -0
  30. package/dist/admin/components/AIChat/components/Attachments/components/Attachment.js.map +1 -0
  31. package/dist/admin/components/AIChat/components/Attachments/components/Attachment.mjs +97 -0
  32. package/dist/admin/components/AIChat/components/Attachments/components/Attachment.mjs.map +1 -0
  33. package/dist/admin/components/AIChat/components/Base64Image.js +127 -0
  34. package/dist/admin/components/AIChat/components/Base64Image.js.map +1 -0
  35. package/dist/admin/components/AIChat/components/Base64Image.mjs +125 -0
  36. package/dist/admin/components/AIChat/components/Base64Image.mjs.map +1 -0
  37. package/dist/admin/components/AIChat/components/Collapsible.js +71 -0
  38. package/dist/admin/components/AIChat/components/Collapsible.js.map +1 -0
  39. package/dist/admin/components/AIChat/components/Collapsible.mjs +66 -0
  40. package/dist/admin/components/AIChat/components/Collapsible.mjs.map +1 -0
  41. package/dist/admin/components/AIChat/components/Dropzone.js +172 -0
  42. package/dist/admin/components/AIChat/components/Dropzone.js.map +1 -0
  43. package/dist/admin/components/AIChat/components/Dropzone.mjs +167 -0
  44. package/dist/admin/components/AIChat/components/Dropzone.mjs.map +1 -0
  45. package/dist/admin/components/AIChat/components/FloatingPanel.js +166 -0
  46. package/dist/admin/components/AIChat/components/FloatingPanel.js.map +1 -0
  47. package/dist/admin/components/AIChat/components/FloatingPanel.mjs +163 -0
  48. package/dist/admin/components/AIChat/components/FloatingPanel.mjs.map +1 -0
  49. package/dist/admin/components/AIChat/components/FullScreenImage.js +190 -0
  50. package/dist/admin/components/AIChat/components/FullScreenImage.js.map +1 -0
  51. package/dist/admin/components/AIChat/components/FullScreenImage.mjs +187 -0
  52. package/dist/admin/components/AIChat/components/FullScreenImage.mjs.map +1 -0
  53. package/dist/admin/components/AIChat/components/ImagePreview.js +87 -0
  54. package/dist/admin/components/AIChat/components/ImagePreview.js.map +1 -0
  55. package/dist/admin/components/AIChat/components/ImagePreview.mjs +85 -0
  56. package/dist/admin/components/AIChat/components/ImagePreview.mjs.map +1 -0
  57. package/dist/admin/components/AIChat/components/Input.js +126 -0
  58. package/dist/admin/components/AIChat/components/Input.js.map +1 -0
  59. package/dist/admin/components/AIChat/components/Input.mjs +121 -0
  60. package/dist/admin/components/AIChat/components/Input.mjs.map +1 -0
  61. package/dist/admin/components/AIChat/components/Messages/Marker.js +138 -0
  62. package/dist/admin/components/AIChat/components/Messages/Marker.js.map +1 -0
  63. package/dist/admin/components/AIChat/components/Messages/Marker.mjs +136 -0
  64. package/dist/admin/components/AIChat/components/Messages/Marker.mjs.map +1 -0
  65. package/dist/admin/components/AIChat/components/Messages/Message.js +214 -0
  66. package/dist/admin/components/AIChat/components/Messages/Message.js.map +1 -0
  67. package/dist/admin/components/AIChat/components/Messages/Message.mjs +212 -0
  68. package/dist/admin/components/AIChat/components/Messages/Message.mjs.map +1 -0
  69. package/dist/admin/components/AIChat/components/ResizableTextArea.js +78 -0
  70. package/dist/admin/components/AIChat/components/ResizableTextArea.js.map +1 -0
  71. package/dist/admin/components/AIChat/components/ResizableTextArea.mjs +76 -0
  72. package/dist/admin/components/AIChat/components/ResizableTextArea.mjs.map +1 -0
  73. package/dist/admin/components/AIChat/components/SimpleMenu.js +60 -0
  74. package/dist/admin/components/AIChat/components/SimpleMenu.js.map +1 -0
  75. package/dist/admin/components/AIChat/components/SimpleMenu.mjs +35 -0
  76. package/dist/admin/components/AIChat/components/SimpleMenu.mjs.map +1 -0
  77. package/dist/admin/components/AIChat/components/StepModal.js +175 -0
  78. package/dist/admin/components/AIChat/components/StepModal.js.map +1 -0
  79. package/dist/admin/components/AIChat/components/StepModal.mjs +171 -0
  80. package/dist/admin/components/AIChat/components/StepModal.mjs.map +1 -0
  81. package/dist/admin/components/AIChat/components/animations.js +67 -0
  82. package/dist/admin/components/AIChat/components/animations.js.map +1 -0
  83. package/dist/admin/components/AIChat/components/animations.mjs +65 -0
  84. package/dist/admin/components/AIChat/components/animations.mjs.map +1 -0
  85. package/dist/admin/components/AIChat/components/icons/FigmaIcon.js +50 -0
  86. package/dist/admin/components/AIChat/components/icons/FigmaIcon.js.map +1 -0
  87. package/dist/admin/components/AIChat/components/icons/FigmaIcon.mjs +48 -0
  88. package/dist/admin/components/AIChat/components/icons/FigmaIcon.mjs.map +1 -0
  89. package/dist/admin/components/AIChat/components/icons/StopIcon.js +25 -0
  90. package/dist/admin/components/AIChat/components/icons/StopIcon.js.map +1 -0
  91. package/dist/admin/components/AIChat/components/icons/StopIcon.mjs +23 -0
  92. package/dist/admin/components/AIChat/components/icons/StopIcon.mjs.map +1 -0
  93. package/dist/admin/components/AIChat/hooks/useAIFetch.js +107 -0
  94. package/dist/admin/components/AIChat/hooks/useAIFetch.js.map +1 -0
  95. package/dist/admin/components/AIChat/hooks/useAIFetch.mjs +96 -0
  96. package/dist/admin/components/AIChat/hooks/useAIFetch.mjs.map +1 -0
  97. package/dist/admin/components/AIChat/hooks/useAttachments.js +152 -0
  98. package/dist/admin/components/AIChat/hooks/useAttachments.js.map +1 -0
  99. package/dist/admin/components/AIChat/hooks/useAttachments.mjs +150 -0
  100. package/dist/admin/components/AIChat/hooks/useAttachments.mjs.map +1 -0
  101. package/dist/admin/components/AIChat/hooks/useChatTitle.js +47 -0
  102. package/dist/admin/components/AIChat/hooks/useChatTitle.js.map +1 -0
  103. package/dist/admin/components/AIChat/hooks/useChatTitle.mjs +45 -0
  104. package/dist/admin/components/AIChat/hooks/useChatTitle.mjs.map +1 -0
  105. package/dist/admin/components/AIChat/hooks/useCodeUpload.js +212 -0
  106. package/dist/admin/components/AIChat/hooks/useCodeUpload.js.map +1 -0
  107. package/dist/admin/components/AIChat/hooks/useCodeUpload.mjs +207 -0
  108. package/dist/admin/components/AIChat/hooks/useCodeUpload.mjs.map +1 -0
  109. package/dist/admin/components/AIChat/hooks/useFeedback.js +76 -0
  110. package/dist/admin/components/AIChat/hooks/useFeedback.js.map +1 -0
  111. package/dist/admin/components/AIChat/hooks/useFeedback.mjs +74 -0
  112. package/dist/admin/components/AIChat/hooks/useFeedback.mjs.map +1 -0
  113. package/dist/admin/components/AIChat/hooks/useFigmaUpload.js +206 -0
  114. package/dist/admin/components/AIChat/hooks/useFigmaUpload.js.map +1 -0
  115. package/dist/admin/components/AIChat/hooks/useFigmaUpload.mjs +200 -0
  116. package/dist/admin/components/AIChat/hooks/useFigmaUpload.mjs.map +1 -0
  117. package/dist/admin/components/AIChat/hooks/useLastSeenSchemas.js +115 -0
  118. package/dist/admin/components/AIChat/hooks/useLastSeenSchemas.js.map +1 -0
  119. package/dist/admin/components/AIChat/hooks/useLastSeenSchemas.mjs +113 -0
  120. package/dist/admin/components/AIChat/hooks/useLastSeenSchemas.mjs.map +1 -0
  121. package/dist/admin/components/AIChat/hooks/useTranslations.js +19 -0
  122. package/dist/admin/components/AIChat/hooks/useTranslations.js.map +1 -0
  123. package/dist/admin/components/AIChat/hooks/useTranslations.mjs +17 -0
  124. package/dist/admin/components/AIChat/hooks/useTranslations.mjs.map +1 -0
  125. package/dist/admin/components/AIChat/lib/aiClient.js +168 -0
  126. package/dist/admin/components/AIChat/lib/aiClient.js.map +1 -0
  127. package/dist/admin/components/AIChat/lib/aiClient.mjs +161 -0
  128. package/dist/admin/components/AIChat/lib/aiClient.mjs.map +1 -0
  129. package/dist/admin/components/AIChat/lib/constants.js +16 -0
  130. package/dist/admin/components/AIChat/lib/constants.js.map +1 -0
  131. package/dist/admin/components/AIChat/lib/constants.mjs +10 -0
  132. package/dist/admin/components/AIChat/lib/constants.mjs.map +1 -0
  133. package/dist/admin/components/AIChat/lib/misc.js +8 -0
  134. package/dist/admin/components/AIChat/lib/misc.js.map +1 -0
  135. package/dist/admin/components/AIChat/lib/misc.mjs +6 -0
  136. package/dist/admin/components/AIChat/lib/misc.mjs.map +1 -0
  137. package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.js +46 -0
  138. package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.js.map +1 -0
  139. package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.mjs +44 -0
  140. package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.mjs.map +1 -0
  141. package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.js +151 -0
  142. package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.js.map +1 -0
  143. package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs +148 -0
  144. package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs.map +1 -0
  145. package/dist/admin/components/AIChat/providers/ChatProvider.js +191 -0
  146. package/dist/admin/components/AIChat/providers/ChatProvider.js.map +1 -0
  147. package/dist/admin/components/AIChat/providers/ChatProvider.mjs +187 -0
  148. package/dist/admin/components/AIChat/providers/ChatProvider.mjs.map +1 -0
  149. package/dist/admin/components/AIChat/providers/SchemaProvider.js +90 -0
  150. package/dist/admin/components/AIChat/providers/SchemaProvider.js.map +1 -0
  151. package/dist/admin/components/AIChat/providers/SchemaProvider.mjs +88 -0
  152. package/dist/admin/components/AIChat/providers/SchemaProvider.mjs.map +1 -0
  153. package/dist/admin/components/ComponentList.js +1 -0
  154. package/dist/admin/components/ComponentList.js.map +1 -1
  155. package/dist/admin/components/ComponentList.mjs +1 -0
  156. package/dist/admin/components/ComponentList.mjs.map +1 -1
  157. package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.js +165 -161
  158. package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.js.map +1 -1
  159. package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.mjs +165 -161
  160. package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.mjs.map +1 -1
  161. package/dist/admin/components/DataManager/DataManagerContext.js.map +1 -1
  162. package/dist/admin/components/DataManager/DataManagerContext.mjs.map +1 -1
  163. package/dist/admin/components/DataManager/reducer.js +48 -6
  164. package/dist/admin/components/DataManager/reducer.js.map +1 -1
  165. package/dist/admin/components/DataManager/reducer.mjs +48 -6
  166. package/dist/admin/components/DataManager/reducer.mjs.map +1 -1
  167. package/dist/admin/components/FormModal/utils/canEditContentType.js.map +1 -1
  168. package/dist/admin/components/FormModal/utils/canEditContentType.mjs.map +1 -1
  169. package/dist/admin/pages/App/index.js +60 -29
  170. package/dist/admin/pages/App/index.js.map +1 -1
  171. package/dist/admin/pages/App/index.mjs +62 -31
  172. package/dist/admin/pages/App/index.mjs.map +1 -1
  173. package/dist/admin/pages/ListView/EmptyState.js +75 -9
  174. package/dist/admin/pages/ListView/EmptyState.js.map +1 -1
  175. package/dist/admin/pages/ListView/EmptyState.mjs +77 -11
  176. package/dist/admin/pages/ListView/EmptyState.mjs.map +1 -1
  177. package/dist/admin/src/components/AIChat/Chat.d.ts +2 -0
  178. package/dist/admin/src/components/AIChat/FeedbackModal.d.ts +13 -0
  179. package/dist/admin/src/components/AIChat/UploadCodeModal.d.ts +12 -0
  180. package/dist/admin/src/components/AIChat/UploadFigmaModal.d.ts +12 -0
  181. package/dist/admin/src/components/AIChat/components/Alert.d.ts +6 -0
  182. package/dist/admin/src/components/AIChat/components/AnimatedBox.d.ts +13 -0
  183. package/dist/admin/src/components/AIChat/components/Attachments/AttachmentPreview.d.ts +9 -0
  184. package/dist/admin/src/components/AIChat/components/Attachments/components/Attachment.d.ts +27 -0
  185. package/dist/admin/src/components/AIChat/components/Base64Image.d.ts +9 -0
  186. package/dist/admin/src/components/AIChat/components/Collapsible.d.ts +18 -0
  187. package/dist/admin/src/components/AIChat/components/Dropzone.d.ts +35 -0
  188. package/dist/admin/src/components/AIChat/components/FloatingPanel.d.ts +34 -0
  189. package/dist/admin/src/components/AIChat/components/FullScreenImage.d.ts +20 -0
  190. package/dist/admin/src/components/AIChat/components/ImagePreview.d.ts +8 -0
  191. package/dist/admin/src/components/AIChat/components/ImagePreviewGroup.d.ts +7 -0
  192. package/dist/admin/src/components/AIChat/components/Input.d.ts +43 -0
  193. package/dist/admin/src/components/AIChat/components/Messages/Marker.d.ts +2 -0
  194. package/dist/admin/src/components/AIChat/components/Messages/Message.d.ts +5 -0
  195. package/dist/admin/src/components/AIChat/components/ResizableTextArea.d.ts +9 -0
  196. package/dist/admin/src/components/AIChat/components/SimpleMenu.d.ts +32 -0
  197. package/dist/admin/src/components/AIChat/components/StepModal.d.ts +37 -0
  198. package/dist/admin/src/components/AIChat/components/animations.d.ts +8 -0
  199. package/dist/admin/src/components/AIChat/components/icons/FigmaIcon.d.ts +5 -0
  200. package/dist/admin/src/components/AIChat/components/icons/StopIcon.d.ts +5 -0
  201. package/dist/admin/src/components/AIChat/hooks/useAIFetch.d.ts +147 -0
  202. package/dist/admin/src/components/AIChat/hooks/useAttachments.d.ts +8 -0
  203. package/dist/admin/src/components/AIChat/hooks/useChatTitle.d.ts +13 -0
  204. package/dist/admin/src/components/AIChat/hooks/useCodeUpload.d.ts +31 -0
  205. package/dist/admin/src/components/AIChat/hooks/useFeedback.d.ts +7 -0
  206. package/dist/admin/src/components/AIChat/hooks/useFigmaUpload.d.ts +61 -0
  207. package/dist/admin/src/components/AIChat/hooks/useLastSeenSchemas.d.ts +10 -0
  208. package/dist/admin/src/components/AIChat/hooks/useTranslations.d.ts +3 -0
  209. package/dist/admin/src/components/AIChat/lib/aiClient.d.ts +32 -0
  210. package/dist/admin/src/components/AIChat/lib/constants.d.ts +12 -0
  211. package/dist/admin/src/components/AIChat/lib/fileToAttachment.d.ts +2 -0
  212. package/dist/admin/src/components/AIChat/lib/misc.d.ts +1 -0
  213. package/dist/admin/src/components/AIChat/lib/transforms/schemas/fromCTB.d.ts +3 -0
  214. package/dist/admin/src/components/AIChat/lib/transforms/schemas/toCTB.d.ts +16 -0
  215. package/dist/admin/src/components/AIChat/lib/types/annotations.d.ts +19 -0
  216. package/dist/admin/src/components/AIChat/lib/types/attachments.d.ts +15 -0
  217. package/dist/admin/src/components/AIChat/lib/types/feedback.d.ts +1 -0
  218. package/dist/admin/src/components/AIChat/lib/types/messages.d.ts +26 -0
  219. package/dist/admin/src/components/AIChat/lib/types/schema.d.ts +20 -0
  220. package/dist/admin/src/components/AIChat/providers/ChatProvider.d.ts +30 -0
  221. package/dist/admin/src/components/AIChat/providers/SchemaProvider.d.ts +10 -0
  222. package/dist/admin/src/components/ComponentList.d.ts +1 -1
  223. package/dist/admin/src/components/DataManager/DataManagerContext.d.ts +1 -1
  224. package/dist/admin/translations/ar.json.js +187 -2
  225. package/dist/admin/translations/ar.json.js.map +1 -1
  226. package/dist/admin/translations/ar.json.mjs +187 -3
  227. package/dist/admin/translations/ar.json.mjs.map +1 -1
  228. package/dist/admin/translations/de.json.js +42 -7
  229. package/dist/admin/translations/de.json.js.map +1 -1
  230. package/dist/admin/translations/de.json.mjs +42 -7
  231. package/dist/admin/translations/de.json.mjs.map +1 -1
  232. package/dist/admin/translations/en.json.js +53 -2
  233. package/dist/admin/translations/en.json.js.map +1 -1
  234. package/dist/admin/translations/en.json.mjs +53 -2
  235. package/dist/admin/translations/en.json.mjs.map +1 -1
  236. package/dist/admin/translations/es.json.js +37 -15
  237. package/dist/admin/translations/es.json.js.map +1 -1
  238. package/dist/admin/translations/es.json.mjs +37 -15
  239. package/dist/admin/translations/es.json.mjs.map +1 -1
  240. package/dist/admin/translations/fr.json.js +165 -3
  241. package/dist/admin/translations/fr.json.js.map +1 -1
  242. package/dist/admin/translations/fr.json.mjs +165 -4
  243. package/dist/admin/translations/fr.json.mjs.map +1 -1
  244. package/dist/admin/translations/id.json.js +93 -23
  245. package/dist/admin/translations/id.json.js.map +1 -1
  246. package/dist/admin/translations/id.json.mjs +93 -23
  247. package/dist/admin/translations/id.json.mjs.map +1 -1
  248. package/dist/admin/translations/it.json.js +75 -6
  249. package/dist/admin/translations/it.json.js.map +1 -1
  250. package/dist/admin/translations/it.json.mjs +75 -6
  251. package/dist/admin/translations/it.json.mjs.map +1 -1
  252. package/dist/admin/translations/ja.json.js +191 -5
  253. package/dist/admin/translations/ja.json.js.map +1 -1
  254. package/dist/admin/translations/ja.json.mjs +191 -6
  255. package/dist/admin/translations/ja.json.mjs.map +1 -1
  256. package/dist/admin/translations/ko.json.js +70 -16
  257. package/dist/admin/translations/ko.json.js.map +1 -1
  258. package/dist/admin/translations/ko.json.mjs +70 -16
  259. package/dist/admin/translations/ko.json.mjs.map +1 -1
  260. package/dist/admin/translations/ms.json.js +104 -31
  261. package/dist/admin/translations/ms.json.js.map +1 -1
  262. package/dist/admin/translations/ms.json.mjs +104 -31
  263. package/dist/admin/translations/ms.json.mjs.map +1 -1
  264. package/dist/admin/translations/nl.json.js +95 -15
  265. package/dist/admin/translations/nl.json.js.map +1 -1
  266. package/dist/admin/translations/nl.json.mjs +95 -15
  267. package/dist/admin/translations/nl.json.mjs.map +1 -1
  268. package/dist/admin/translations/pl.json.js +55 -11
  269. package/dist/admin/translations/pl.json.js.map +1 -1
  270. package/dist/admin/translations/pl.json.mjs +55 -11
  271. package/dist/admin/translations/pl.json.mjs.map +1 -1
  272. package/dist/admin/translations/pt-BR.json.js +54 -10
  273. package/dist/admin/translations/pt-BR.json.js.map +1 -1
  274. package/dist/admin/translations/pt-BR.json.mjs +54 -10
  275. package/dist/admin/translations/pt-BR.json.mjs.map +1 -1
  276. package/dist/admin/translations/pt.json.js +187 -2
  277. package/dist/admin/translations/pt.json.js.map +1 -1
  278. package/dist/admin/translations/pt.json.mjs +187 -3
  279. package/dist/admin/translations/pt.json.mjs.map +1 -1
  280. package/dist/admin/translations/ru.json.js +26 -1
  281. package/dist/admin/translations/ru.json.js.map +1 -1
  282. package/dist/admin/translations/ru.json.mjs +26 -1
  283. package/dist/admin/translations/ru.json.mjs.map +1 -1
  284. package/dist/admin/translations/sk.json.js +21 -1
  285. package/dist/admin/translations/sk.json.js.map +1 -1
  286. package/dist/admin/translations/sk.json.mjs +21 -1
  287. package/dist/admin/translations/sk.json.mjs.map +1 -1
  288. package/dist/admin/translations/sv.json.js +21 -1
  289. package/dist/admin/translations/sv.json.js.map +1 -1
  290. package/dist/admin/translations/sv.json.mjs +21 -1
  291. package/dist/admin/translations/sv.json.mjs.map +1 -1
  292. package/dist/admin/translations/th.json.js +21 -1
  293. package/dist/admin/translations/th.json.js.map +1 -1
  294. package/dist/admin/translations/th.json.mjs +21 -1
  295. package/dist/admin/translations/th.json.mjs.map +1 -1
  296. package/dist/admin/translations/tr.json.js +21 -1
  297. package/dist/admin/translations/tr.json.js.map +1 -1
  298. package/dist/admin/translations/tr.json.mjs +21 -1
  299. package/dist/admin/translations/tr.json.mjs.map +1 -1
  300. package/dist/admin/translations/uk.json.js +21 -2
  301. package/dist/admin/translations/uk.json.js.map +1 -1
  302. package/dist/admin/translations/uk.json.mjs +21 -2
  303. package/dist/admin/translations/uk.json.mjs.map +1 -1
  304. package/dist/admin/translations/zh-Hans.json.js +222 -133
  305. package/dist/admin/translations/zh-Hans.json.js.map +1 -1
  306. package/dist/admin/translations/zh-Hans.json.mjs +222 -133
  307. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -1
  308. package/dist/admin/translations/zh.json.js +21 -1
  309. package/dist/admin/translations/zh.json.js.map +1 -1
  310. package/dist/admin/translations/zh.json.mjs +21 -1
  311. package/dist/admin/translations/zh.json.mjs.map +1 -1
  312. package/dist/server/index.js +2 -0
  313. package/dist/server/index.js.map +1 -1
  314. package/dist/server/index.mjs +2 -0
  315. package/dist/server/index.mjs.map +1 -1
  316. package/dist/server/register.js +98 -0
  317. package/dist/server/register.js.map +1 -0
  318. package/dist/server/register.mjs +96 -0
  319. package/dist/server/register.mjs.map +1 -0
  320. package/dist/server/src/controllers/ai/auth.d.ts +1 -0
  321. package/dist/server/src/controllers/ai/auth.d.ts.map +1 -0
  322. package/dist/server/src/controllers/ai/index.d.ts +1 -0
  323. package/dist/server/src/controllers/ai/index.d.ts.map +1 -0
  324. package/dist/server/src/index.d.ts +1 -0
  325. package/dist/server/src/index.d.ts.map +1 -1
  326. package/dist/server/src/register.d.ts +11 -0
  327. package/dist/server/src/register.d.ts.map +1 -0
  328. package/package.json +12 -5
  329. package/dist/admin/components/DataManager/utils/formatSchemas.js +0 -21
  330. package/dist/admin/components/DataManager/utils/formatSchemas.js.map +0 -1
  331. package/dist/admin/components/DataManager/utils/formatSchemas.mjs +0 -18
  332. package/dist/admin/components/DataManager/utils/formatSchemas.mjs.map +0 -1
@@ -0,0 +1,237 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var strapiAdmin = require('@strapi/admin/strapi-admin');
6
+ var designSystem = require('@strapi/design-system');
7
+ var styledComponents = require('styled-components');
8
+ var useFeedback = require('./hooks/useFeedback.js');
9
+ var useTranslations = require('./hooks/useTranslations.js');
10
+
11
+ const FeedbackModalContext = /*#__PURE__*/ React.createContext({
12
+ isFeedbackModalOpen: false,
13
+ currentMessageId: null,
14
+ openFeedbackModal: ()=>{},
15
+ closeFeedbackModal: ()=>{}
16
+ });
17
+ const useFeedbackModal = ()=>React.useContext(FeedbackModalContext);
18
+ const FeedbackProvider = ({ children })=>{
19
+ const [isFeedbackModalOpen, setIsFeedbackModalOpen] = React.useState(false);
20
+ const [currentMessageId, setCurrentMessageId] = React.useState(null);
21
+ const openFeedbackModal = (messageId)=>{
22
+ setCurrentMessageId(messageId);
23
+ setIsFeedbackModalOpen(true);
24
+ };
25
+ const closeFeedbackModal = ()=>{
26
+ setIsFeedbackModalOpen(false);
27
+ setCurrentMessageId(null);
28
+ };
29
+ return /*#__PURE__*/ jsxRuntime.jsxs(FeedbackModalContext.Provider, {
30
+ value: {
31
+ isFeedbackModalOpen,
32
+ currentMessageId,
33
+ openFeedbackModal,
34
+ closeFeedbackModal
35
+ },
36
+ children: [
37
+ isFeedbackModalOpen && currentMessageId && /*#__PURE__*/ jsxRuntime.jsx(FeedbackModal, {}),
38
+ children
39
+ ]
40
+ });
41
+ };
42
+ const FeedbackOptionWrapper = styledComponents.styled(designSystem.Flex)`
43
+ &:hover {
44
+ background-color: ${({ theme })=>theme.colors.neutral100};
45
+ }
46
+
47
+ &.selected {
48
+ background-color: ${({ theme })=>theme.colors.primary100};
49
+ border-color: ${({ theme })=>theme.colors.primary200};
50
+ }
51
+ `;
52
+ const FeedbackOption = ({ id, label, selected, onClick })=>{
53
+ return /*#__PURE__*/ jsxRuntime.jsxs(FeedbackOptionWrapper, {
54
+ className: selected ? 'selected' : '',
55
+ justifyContent: "space-between",
56
+ hasRadius: true,
57
+ width: "100%",
58
+ cursor: "pointer",
59
+ borderColor: "neutral200",
60
+ padding: 3,
61
+ gap: 3,
62
+ onClick: ()=>onClick(id),
63
+ children: [
64
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
65
+ variant: "omega",
66
+ fontWeight: "bold",
67
+ children: label
68
+ }),
69
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Checkbox, {
70
+ name: `feedback-${id}`,
71
+ value: id,
72
+ checked: selected,
73
+ onChange: ()=>onClick(id)
74
+ })
75
+ ]
76
+ });
77
+ };
78
+ /* -------------------------------------------------------------------------------------------------
79
+ * Modal
80
+ * -----------------------------------------------------------------------------------------------*/ const FeedbackModal = ()=>{
81
+ const [feedbackText, setFeedbackText] = React.useState('');
82
+ const [selectedReasons, setSelectedReasons] = React.useState([]);
83
+ const { t } = useTranslations.useTranslations();
84
+ const { toggleNotification } = strapiAdmin.useNotification();
85
+ const { closeFeedbackModal, currentMessageId } = useFeedbackModal();
86
+ const { downvoteMessage, isPending } = useFeedback.useFeedback();
87
+ const feedbackReasons = [
88
+ {
89
+ id: 'invalid_schema',
90
+ label: t('chat.feedback.reason.invalid_schema', 'Invalid schema')
91
+ },
92
+ {
93
+ id: 'bad_recommendation',
94
+ label: t('chat.feedback.reason.bad_recommendation', 'Bad recommendation')
95
+ },
96
+ {
97
+ id: 'slow',
98
+ label: t('chat.feedback.reason.slow', 'Slow')
99
+ },
100
+ {
101
+ id: 'instructions_ignored',
102
+ label: t('chat.feedback.reason.instructions_ignored', 'Instructions ignored')
103
+ },
104
+ {
105
+ id: 'being_lazy',
106
+ label: t('chat.feedback.reason.being_lazy', 'Being lazy')
107
+ },
108
+ {
109
+ id: 'other',
110
+ label: t('chat.feedback.reason.other', 'Other')
111
+ }
112
+ ];
113
+ const handleReasonSelect = (id)=>{
114
+ setSelectedReasons((prevSelected)=>{
115
+ // If already selected, remove it
116
+ if (prevSelected.includes(id)) {
117
+ return prevSelected.filter((reasonId)=>reasonId !== id);
118
+ }
119
+ // Otherwise add it
120
+ return [
121
+ ...prevSelected,
122
+ id
123
+ ];
124
+ });
125
+ };
126
+ const handleSubmitFeedback = async ()=>{
127
+ if (selectedReasons.length === 0) return;
128
+ try {
129
+ await downvoteMessage(currentMessageId, feedbackText, selectedReasons);
130
+ setFeedbackText('');
131
+ setSelectedReasons([]);
132
+ closeFeedbackModal();
133
+ } catch (error) {
134
+ toggleNotification({
135
+ type: 'danger',
136
+ message: t('chat.feedback.error', 'An error occurred while submitting your feedback')
137
+ });
138
+ }
139
+ };
140
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Root, {
141
+ open: true,
142
+ onOpenChange: closeFeedbackModal,
143
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Modal.Content, {
144
+ children: [
145
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Header, {
146
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
147
+ variant: "omega",
148
+ fontWeight: "bold",
149
+ children: t('chat.feedback.title', 'Give feedback')
150
+ })
151
+ }),
152
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Body, {
153
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
154
+ direction: "column",
155
+ alignItems: "start",
156
+ gap: 6,
157
+ width: "100%",
158
+ children: [
159
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
160
+ direction: "column",
161
+ alignItems: "start",
162
+ gap: 2,
163
+ children: [
164
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
165
+ variant: "beta",
166
+ fontWeight: "bold",
167
+ children: t('chat.feedback.title', 'Give feedback')
168
+ }),
169
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
170
+ variant: "omega",
171
+ children: t('chat.feedback.subtitle', 'Provide additional feedback on this message. Select all that apply.')
172
+ })
173
+ ]
174
+ }),
175
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Root, {
176
+ width: "100%",
177
+ gap: 2,
178
+ children: feedbackReasons.map((reason)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
179
+ col: 6,
180
+ children: /*#__PURE__*/ jsxRuntime.jsx(FeedbackOption, {
181
+ id: reason.id,
182
+ label: reason.label,
183
+ selected: selectedReasons.includes(reason.id),
184
+ onClick: handleReasonSelect
185
+ }, reason.id)
186
+ }, reason.id))
187
+ }),
188
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
189
+ direction: "column",
190
+ gap: 2,
191
+ width: "100%",
192
+ alignItems: "start",
193
+ children: [
194
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
195
+ variant: "omega",
196
+ children: t('chat.feedback.comment.label', 'How can we improve? (optional)')
197
+ }),
198
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
199
+ width: "100%",
200
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Textarea, {
201
+ name: "feedback",
202
+ placeholder: t('chat.feedback.placeholder', 'Your feedback...'),
203
+ onChange: (e)=>setFeedbackText(e.target.value),
204
+ value: feedbackText
205
+ })
206
+ })
207
+ ]
208
+ })
209
+ ]
210
+ })
211
+ }),
212
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Modal.Footer, {
213
+ children: [
214
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Close, {
215
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
216
+ variant: "tertiary",
217
+ onClick: closeFeedbackModal,
218
+ children: t('form.button.cancel', 'Cancel')
219
+ })
220
+ }),
221
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
222
+ onClick: handleSubmitFeedback,
223
+ loading: isPending,
224
+ disabled: selectedReasons.length === 0,
225
+ children: t('form.button.submit', 'Submit')
226
+ })
227
+ ]
228
+ })
229
+ ]
230
+ })
231
+ });
232
+ };
233
+
234
+ exports.FeedbackModal = FeedbackModal;
235
+ exports.FeedbackProvider = FeedbackProvider;
236
+ exports.useFeedbackModal = useFeedbackModal;
237
+ //# sourceMappingURL=FeedbackModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeedbackModal.js","sources":["../../../../admin/src/components/AIChat/FeedbackModal.tsx"],"sourcesContent":["import * as React from 'react';\nimport { createContext, useContext, useState } from 'react';\n\nimport { useNotification } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n Typography,\n Textarea,\n Button,\n Grid,\n Checkbox,\n Modal,\n} from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { useFeedback } from './hooks/useFeedback';\nimport { useTranslations } from './hooks/useTranslations';\n\nimport type { FeedbackReasonIds } from './lib/types/feedback';\n\n/* -------------------------------------------------------------------------------------------------\n * Provider\n * -----------------------------------------------------------------------------------------------*/\ninterface FeedbackModalContextType {\n isFeedbackModalOpen: boolean;\n currentMessageId: string | null;\n openFeedbackModal: (messageId: string) => void;\n closeFeedbackModal: () => void;\n}\n\nconst FeedbackModalContext = createContext<FeedbackModalContextType>({\n isFeedbackModalOpen: false,\n currentMessageId: null,\n openFeedbackModal: () => {},\n closeFeedbackModal: () => {},\n});\n\nexport const useFeedbackModal = () => useContext(FeedbackModalContext);\n\nexport const FeedbackProvider = ({ children }: { children: React.ReactNode }) => {\n const [isFeedbackModalOpen, setIsFeedbackModalOpen] = useState(false);\n const [currentMessageId, setCurrentMessageId] = useState<string | null>(null);\n\n const openFeedbackModal = (messageId: string) => {\n setCurrentMessageId(messageId);\n setIsFeedbackModalOpen(true);\n };\n\n const closeFeedbackModal = () => {\n setIsFeedbackModalOpen(false);\n setCurrentMessageId(null);\n };\n\n return (\n <FeedbackModalContext.Provider\n value={{ isFeedbackModalOpen, currentMessageId, openFeedbackModal, closeFeedbackModal }}\n >\n {isFeedbackModalOpen && currentMessageId && <FeedbackModal />}\n {children}\n </FeedbackModalContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Feedback Option\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FeedbackOptionProps {\n id: FeedbackReasonIds;\n label: string;\n selected: boolean;\n onClick: (id: FeedbackReasonIds) => void;\n}\n\nconst FeedbackOptionWrapper = styled(Flex)`\n &:hover {\n background-color: ${({ theme }) => theme.colors.neutral100};\n }\n\n &.selected {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n }\n`;\n\nconst FeedbackOption: React.FC<FeedbackOptionProps> = ({ id, label, selected, onClick }) => {\n return (\n <FeedbackOptionWrapper\n className={selected ? 'selected' : ''}\n justifyContent=\"space-between\"\n hasRadius\n width=\"100%\"\n cursor=\"pointer\"\n borderColor=\"neutral200\"\n padding={3}\n gap={3}\n onClick={() => onClick(id)}\n >\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {label}\n </Typography>\n <Checkbox\n name={`feedback-${id}`}\n value={id}\n checked={selected}\n onChange={() => onClick(id)}\n />\n </FeedbackOptionWrapper>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Modal\n * -----------------------------------------------------------------------------------------------*/\n\nexport const FeedbackModal: React.FC = () => {\n const [feedbackText, setFeedbackText] = useState('');\n const [selectedReasons, setSelectedReasons] = useState<FeedbackReasonIds[]>([]);\n\n const { t } = useTranslations();\n const { toggleNotification } = useNotification();\n const { closeFeedbackModal, currentMessageId } = useFeedbackModal();\n const { downvoteMessage, isPending } = useFeedback();\n\n const feedbackReasons = [\n {\n id: 'invalid_schema',\n label: t('chat.feedback.reason.invalid_schema', 'Invalid schema'),\n },\n {\n id: 'bad_recommendation',\n label: t('chat.feedback.reason.bad_recommendation', 'Bad recommendation'),\n },\n {\n id: 'slow',\n label: t('chat.feedback.reason.slow', 'Slow'),\n },\n {\n id: 'instructions_ignored',\n label: t('chat.feedback.reason.instructions_ignored', 'Instructions ignored'),\n },\n {\n id: 'being_lazy',\n label: t('chat.feedback.reason.being_lazy', 'Being lazy'),\n },\n {\n id: 'other',\n label: t('chat.feedback.reason.other', 'Other'),\n },\n ] satisfies { id: FeedbackReasonIds; label: string }[];\n\n const handleReasonSelect = (id: FeedbackReasonIds) => {\n setSelectedReasons((prevSelected) => {\n // If already selected, remove it\n if (prevSelected.includes(id)) {\n return prevSelected.filter((reasonId) => reasonId !== id);\n }\n // Otherwise add it\n return [...prevSelected, id];\n });\n };\n\n const handleSubmitFeedback = async () => {\n if (selectedReasons.length === 0) return;\n\n try {\n await downvoteMessage(currentMessageId as string, feedbackText, selectedReasons);\n\n setFeedbackText('');\n setSelectedReasons([]);\n closeFeedbackModal();\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: t('chat.feedback.error', 'An error occurred while submitting your feedback'),\n });\n }\n };\n\n return (\n <Modal.Root open onOpenChange={closeFeedbackModal}>\n <Modal.Content>\n <Modal.Header>\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {t('chat.feedback.title', 'Give feedback')}\n </Typography>\n </Modal.Header>\n <Modal.Body>\n <Flex direction=\"column\" alignItems=\"start\" gap={6} width=\"100%\">\n <Flex direction=\"column\" alignItems=\"start\" gap={2}>\n <Typography variant=\"beta\" fontWeight=\"bold\">\n {t('chat.feedback.title', 'Give feedback')}\n </Typography>\n <Typography variant=\"omega\">\n {t(\n 'chat.feedback.subtitle',\n 'Provide additional feedback on this message. Select all that apply.'\n )}\n </Typography>\n </Flex>\n <Grid.Root width=\"100%\" gap={2}>\n {feedbackReasons.map((reason) => (\n <Grid.Item key={reason.id} col={6}>\n <FeedbackOption\n key={reason.id}\n id={reason.id}\n label={reason.label}\n selected={selectedReasons.includes(reason.id)}\n onClick={handleReasonSelect}\n />\n </Grid.Item>\n ))}\n </Grid.Root>\n <Flex direction=\"column\" gap={2} width=\"100%\" alignItems=\"start\">\n <Typography variant=\"omega\">\n {t('chat.feedback.comment.label', 'How can we improve? (optional)')}\n </Typography>\n <Box width=\"100%\">\n <Textarea\n name=\"feedback\"\n placeholder={t('chat.feedback.placeholder', 'Your feedback...')}\n onChange={(e) => setFeedbackText(e.target.value)}\n value={feedbackText}\n />\n </Box>\n </Flex>\n </Flex>\n </Modal.Body>\n <Modal.Footer>\n <Modal.Close>\n <Button variant=\"tertiary\" onClick={closeFeedbackModal}>\n {t('form.button.cancel', 'Cancel')}\n </Button>\n </Modal.Close>\n <Button\n onClick={handleSubmitFeedback}\n loading={isPending}\n disabled={selectedReasons.length === 0}\n >\n {t('form.button.submit', 'Submit')}\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["FeedbackModalContext","createContext","isFeedbackModalOpen","currentMessageId","openFeedbackModal","closeFeedbackModal","useFeedbackModal","useContext","FeedbackProvider","children","setIsFeedbackModalOpen","useState","setCurrentMessageId","messageId","_jsxs","Provider","value","_jsx","FeedbackModal","FeedbackOptionWrapper","styled","Flex","theme","colors","neutral100","primary100","primary200","FeedbackOption","id","label","selected","onClick","className","justifyContent","hasRadius","width","cursor","borderColor","padding","gap","Typography","variant","fontWeight","Checkbox","name","checked","onChange","feedbackText","setFeedbackText","selectedReasons","setSelectedReasons","t","useTranslations","toggleNotification","useNotification","downvoteMessage","isPending","useFeedback","feedbackReasons","handleReasonSelect","prevSelected","includes","filter","reasonId","handleSubmitFeedback","length","error","type","message","Modal","Root","open","onOpenChange","Content","Header","Body","direction","alignItems","Grid","map","reason","Item","col","Box","Textarea","placeholder","e","target","Footer","Close","Button","loading","disabled"],"mappings":"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"}
@@ -0,0 +1,233 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useState, createContext, useContext } from 'react';
3
+ import { useNotification } from '@strapi/admin/strapi-admin';
4
+ import { Flex, Modal, Typography, Grid, Box, Textarea, Button, Checkbox } from '@strapi/design-system';
5
+ import { styled } from 'styled-components';
6
+ import { useFeedback } from './hooks/useFeedback.mjs';
7
+ import { useTranslations } from './hooks/useTranslations.mjs';
8
+
9
+ const FeedbackModalContext = /*#__PURE__*/ createContext({
10
+ isFeedbackModalOpen: false,
11
+ currentMessageId: null,
12
+ openFeedbackModal: ()=>{},
13
+ closeFeedbackModal: ()=>{}
14
+ });
15
+ const useFeedbackModal = ()=>useContext(FeedbackModalContext);
16
+ const FeedbackProvider = ({ children })=>{
17
+ const [isFeedbackModalOpen, setIsFeedbackModalOpen] = useState(false);
18
+ const [currentMessageId, setCurrentMessageId] = useState(null);
19
+ const openFeedbackModal = (messageId)=>{
20
+ setCurrentMessageId(messageId);
21
+ setIsFeedbackModalOpen(true);
22
+ };
23
+ const closeFeedbackModal = ()=>{
24
+ setIsFeedbackModalOpen(false);
25
+ setCurrentMessageId(null);
26
+ };
27
+ return /*#__PURE__*/ jsxs(FeedbackModalContext.Provider, {
28
+ value: {
29
+ isFeedbackModalOpen,
30
+ currentMessageId,
31
+ openFeedbackModal,
32
+ closeFeedbackModal
33
+ },
34
+ children: [
35
+ isFeedbackModalOpen && currentMessageId && /*#__PURE__*/ jsx(FeedbackModal, {}),
36
+ children
37
+ ]
38
+ });
39
+ };
40
+ const FeedbackOptionWrapper = styled(Flex)`
41
+ &:hover {
42
+ background-color: ${({ theme })=>theme.colors.neutral100};
43
+ }
44
+
45
+ &.selected {
46
+ background-color: ${({ theme })=>theme.colors.primary100};
47
+ border-color: ${({ theme })=>theme.colors.primary200};
48
+ }
49
+ `;
50
+ const FeedbackOption = ({ id, label, selected, onClick })=>{
51
+ return /*#__PURE__*/ jsxs(FeedbackOptionWrapper, {
52
+ className: selected ? 'selected' : '',
53
+ justifyContent: "space-between",
54
+ hasRadius: true,
55
+ width: "100%",
56
+ cursor: "pointer",
57
+ borderColor: "neutral200",
58
+ padding: 3,
59
+ gap: 3,
60
+ onClick: ()=>onClick(id),
61
+ children: [
62
+ /*#__PURE__*/ jsx(Typography, {
63
+ variant: "omega",
64
+ fontWeight: "bold",
65
+ children: label
66
+ }),
67
+ /*#__PURE__*/ jsx(Checkbox, {
68
+ name: `feedback-${id}`,
69
+ value: id,
70
+ checked: selected,
71
+ onChange: ()=>onClick(id)
72
+ })
73
+ ]
74
+ });
75
+ };
76
+ /* -------------------------------------------------------------------------------------------------
77
+ * Modal
78
+ * -----------------------------------------------------------------------------------------------*/ const FeedbackModal = ()=>{
79
+ const [feedbackText, setFeedbackText] = useState('');
80
+ const [selectedReasons, setSelectedReasons] = useState([]);
81
+ const { t } = useTranslations();
82
+ const { toggleNotification } = useNotification();
83
+ const { closeFeedbackModal, currentMessageId } = useFeedbackModal();
84
+ const { downvoteMessage, isPending } = useFeedback();
85
+ const feedbackReasons = [
86
+ {
87
+ id: 'invalid_schema',
88
+ label: t('chat.feedback.reason.invalid_schema', 'Invalid schema')
89
+ },
90
+ {
91
+ id: 'bad_recommendation',
92
+ label: t('chat.feedback.reason.bad_recommendation', 'Bad recommendation')
93
+ },
94
+ {
95
+ id: 'slow',
96
+ label: t('chat.feedback.reason.slow', 'Slow')
97
+ },
98
+ {
99
+ id: 'instructions_ignored',
100
+ label: t('chat.feedback.reason.instructions_ignored', 'Instructions ignored')
101
+ },
102
+ {
103
+ id: 'being_lazy',
104
+ label: t('chat.feedback.reason.being_lazy', 'Being lazy')
105
+ },
106
+ {
107
+ id: 'other',
108
+ label: t('chat.feedback.reason.other', 'Other')
109
+ }
110
+ ];
111
+ const handleReasonSelect = (id)=>{
112
+ setSelectedReasons((prevSelected)=>{
113
+ // If already selected, remove it
114
+ if (prevSelected.includes(id)) {
115
+ return prevSelected.filter((reasonId)=>reasonId !== id);
116
+ }
117
+ // Otherwise add it
118
+ return [
119
+ ...prevSelected,
120
+ id
121
+ ];
122
+ });
123
+ };
124
+ const handleSubmitFeedback = async ()=>{
125
+ if (selectedReasons.length === 0) return;
126
+ try {
127
+ await downvoteMessage(currentMessageId, feedbackText, selectedReasons);
128
+ setFeedbackText('');
129
+ setSelectedReasons([]);
130
+ closeFeedbackModal();
131
+ } catch (error) {
132
+ toggleNotification({
133
+ type: 'danger',
134
+ message: t('chat.feedback.error', 'An error occurred while submitting your feedback')
135
+ });
136
+ }
137
+ };
138
+ return /*#__PURE__*/ jsx(Modal.Root, {
139
+ open: true,
140
+ onOpenChange: closeFeedbackModal,
141
+ children: /*#__PURE__*/ jsxs(Modal.Content, {
142
+ children: [
143
+ /*#__PURE__*/ jsx(Modal.Header, {
144
+ children: /*#__PURE__*/ jsx(Typography, {
145
+ variant: "omega",
146
+ fontWeight: "bold",
147
+ children: t('chat.feedback.title', 'Give feedback')
148
+ })
149
+ }),
150
+ /*#__PURE__*/ jsx(Modal.Body, {
151
+ children: /*#__PURE__*/ jsxs(Flex, {
152
+ direction: "column",
153
+ alignItems: "start",
154
+ gap: 6,
155
+ width: "100%",
156
+ children: [
157
+ /*#__PURE__*/ jsxs(Flex, {
158
+ direction: "column",
159
+ alignItems: "start",
160
+ gap: 2,
161
+ children: [
162
+ /*#__PURE__*/ jsx(Typography, {
163
+ variant: "beta",
164
+ fontWeight: "bold",
165
+ children: t('chat.feedback.title', 'Give feedback')
166
+ }),
167
+ /*#__PURE__*/ jsx(Typography, {
168
+ variant: "omega",
169
+ children: t('chat.feedback.subtitle', 'Provide additional feedback on this message. Select all that apply.')
170
+ })
171
+ ]
172
+ }),
173
+ /*#__PURE__*/ jsx(Grid.Root, {
174
+ width: "100%",
175
+ gap: 2,
176
+ children: feedbackReasons.map((reason)=>/*#__PURE__*/ jsx(Grid.Item, {
177
+ col: 6,
178
+ children: /*#__PURE__*/ jsx(FeedbackOption, {
179
+ id: reason.id,
180
+ label: reason.label,
181
+ selected: selectedReasons.includes(reason.id),
182
+ onClick: handleReasonSelect
183
+ }, reason.id)
184
+ }, reason.id))
185
+ }),
186
+ /*#__PURE__*/ jsxs(Flex, {
187
+ direction: "column",
188
+ gap: 2,
189
+ width: "100%",
190
+ alignItems: "start",
191
+ children: [
192
+ /*#__PURE__*/ jsx(Typography, {
193
+ variant: "omega",
194
+ children: t('chat.feedback.comment.label', 'How can we improve? (optional)')
195
+ }),
196
+ /*#__PURE__*/ jsx(Box, {
197
+ width: "100%",
198
+ children: /*#__PURE__*/ jsx(Textarea, {
199
+ name: "feedback",
200
+ placeholder: t('chat.feedback.placeholder', 'Your feedback...'),
201
+ onChange: (e)=>setFeedbackText(e.target.value),
202
+ value: feedbackText
203
+ })
204
+ })
205
+ ]
206
+ })
207
+ ]
208
+ })
209
+ }),
210
+ /*#__PURE__*/ jsxs(Modal.Footer, {
211
+ children: [
212
+ /*#__PURE__*/ jsx(Modal.Close, {
213
+ children: /*#__PURE__*/ jsx(Button, {
214
+ variant: "tertiary",
215
+ onClick: closeFeedbackModal,
216
+ children: t('form.button.cancel', 'Cancel')
217
+ })
218
+ }),
219
+ /*#__PURE__*/ jsx(Button, {
220
+ onClick: handleSubmitFeedback,
221
+ loading: isPending,
222
+ disabled: selectedReasons.length === 0,
223
+ children: t('form.button.submit', 'Submit')
224
+ })
225
+ ]
226
+ })
227
+ ]
228
+ })
229
+ });
230
+ };
231
+
232
+ export { FeedbackModal, FeedbackProvider, useFeedbackModal };
233
+ //# sourceMappingURL=FeedbackModal.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeedbackModal.mjs","sources":["../../../../admin/src/components/AIChat/FeedbackModal.tsx"],"sourcesContent":["import * as React from 'react';\nimport { createContext, useContext, useState } from 'react';\n\nimport { useNotification } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n Typography,\n Textarea,\n Button,\n Grid,\n Checkbox,\n Modal,\n} from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { useFeedback } from './hooks/useFeedback';\nimport { useTranslations } from './hooks/useTranslations';\n\nimport type { FeedbackReasonIds } from './lib/types/feedback';\n\n/* -------------------------------------------------------------------------------------------------\n * Provider\n * -----------------------------------------------------------------------------------------------*/\ninterface FeedbackModalContextType {\n isFeedbackModalOpen: boolean;\n currentMessageId: string | null;\n openFeedbackModal: (messageId: string) => void;\n closeFeedbackModal: () => void;\n}\n\nconst FeedbackModalContext = createContext<FeedbackModalContextType>({\n isFeedbackModalOpen: false,\n currentMessageId: null,\n openFeedbackModal: () => {},\n closeFeedbackModal: () => {},\n});\n\nexport const useFeedbackModal = () => useContext(FeedbackModalContext);\n\nexport const FeedbackProvider = ({ children }: { children: React.ReactNode }) => {\n const [isFeedbackModalOpen, setIsFeedbackModalOpen] = useState(false);\n const [currentMessageId, setCurrentMessageId] = useState<string | null>(null);\n\n const openFeedbackModal = (messageId: string) => {\n setCurrentMessageId(messageId);\n setIsFeedbackModalOpen(true);\n };\n\n const closeFeedbackModal = () => {\n setIsFeedbackModalOpen(false);\n setCurrentMessageId(null);\n };\n\n return (\n <FeedbackModalContext.Provider\n value={{ isFeedbackModalOpen, currentMessageId, openFeedbackModal, closeFeedbackModal }}\n >\n {isFeedbackModalOpen && currentMessageId && <FeedbackModal />}\n {children}\n </FeedbackModalContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Feedback Option\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FeedbackOptionProps {\n id: FeedbackReasonIds;\n label: string;\n selected: boolean;\n onClick: (id: FeedbackReasonIds) => void;\n}\n\nconst FeedbackOptionWrapper = styled(Flex)`\n &:hover {\n background-color: ${({ theme }) => theme.colors.neutral100};\n }\n\n &.selected {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n }\n`;\n\nconst FeedbackOption: React.FC<FeedbackOptionProps> = ({ id, label, selected, onClick }) => {\n return (\n <FeedbackOptionWrapper\n className={selected ? 'selected' : ''}\n justifyContent=\"space-between\"\n hasRadius\n width=\"100%\"\n cursor=\"pointer\"\n borderColor=\"neutral200\"\n padding={3}\n gap={3}\n onClick={() => onClick(id)}\n >\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {label}\n </Typography>\n <Checkbox\n name={`feedback-${id}`}\n value={id}\n checked={selected}\n onChange={() => onClick(id)}\n />\n </FeedbackOptionWrapper>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Modal\n * -----------------------------------------------------------------------------------------------*/\n\nexport const FeedbackModal: React.FC = () => {\n const [feedbackText, setFeedbackText] = useState('');\n const [selectedReasons, setSelectedReasons] = useState<FeedbackReasonIds[]>([]);\n\n const { t } = useTranslations();\n const { toggleNotification } = useNotification();\n const { closeFeedbackModal, currentMessageId } = useFeedbackModal();\n const { downvoteMessage, isPending } = useFeedback();\n\n const feedbackReasons = [\n {\n id: 'invalid_schema',\n label: t('chat.feedback.reason.invalid_schema', 'Invalid schema'),\n },\n {\n id: 'bad_recommendation',\n label: t('chat.feedback.reason.bad_recommendation', 'Bad recommendation'),\n },\n {\n id: 'slow',\n label: t('chat.feedback.reason.slow', 'Slow'),\n },\n {\n id: 'instructions_ignored',\n label: t('chat.feedback.reason.instructions_ignored', 'Instructions ignored'),\n },\n {\n id: 'being_lazy',\n label: t('chat.feedback.reason.being_lazy', 'Being lazy'),\n },\n {\n id: 'other',\n label: t('chat.feedback.reason.other', 'Other'),\n },\n ] satisfies { id: FeedbackReasonIds; label: string }[];\n\n const handleReasonSelect = (id: FeedbackReasonIds) => {\n setSelectedReasons((prevSelected) => {\n // If already selected, remove it\n if (prevSelected.includes(id)) {\n return prevSelected.filter((reasonId) => reasonId !== id);\n }\n // Otherwise add it\n return [...prevSelected, id];\n });\n };\n\n const handleSubmitFeedback = async () => {\n if (selectedReasons.length === 0) return;\n\n try {\n await downvoteMessage(currentMessageId as string, feedbackText, selectedReasons);\n\n setFeedbackText('');\n setSelectedReasons([]);\n closeFeedbackModal();\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: t('chat.feedback.error', 'An error occurred while submitting your feedback'),\n });\n }\n };\n\n return (\n <Modal.Root open onOpenChange={closeFeedbackModal}>\n <Modal.Content>\n <Modal.Header>\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {t('chat.feedback.title', 'Give feedback')}\n </Typography>\n </Modal.Header>\n <Modal.Body>\n <Flex direction=\"column\" alignItems=\"start\" gap={6} width=\"100%\">\n <Flex direction=\"column\" alignItems=\"start\" gap={2}>\n <Typography variant=\"beta\" fontWeight=\"bold\">\n {t('chat.feedback.title', 'Give feedback')}\n </Typography>\n <Typography variant=\"omega\">\n {t(\n 'chat.feedback.subtitle',\n 'Provide additional feedback on this message. Select all that apply.'\n )}\n </Typography>\n </Flex>\n <Grid.Root width=\"100%\" gap={2}>\n {feedbackReasons.map((reason) => (\n <Grid.Item key={reason.id} col={6}>\n <FeedbackOption\n key={reason.id}\n id={reason.id}\n label={reason.label}\n selected={selectedReasons.includes(reason.id)}\n onClick={handleReasonSelect}\n />\n </Grid.Item>\n ))}\n </Grid.Root>\n <Flex direction=\"column\" gap={2} width=\"100%\" alignItems=\"start\">\n <Typography variant=\"omega\">\n {t('chat.feedback.comment.label', 'How can we improve? (optional)')}\n </Typography>\n <Box width=\"100%\">\n <Textarea\n name=\"feedback\"\n placeholder={t('chat.feedback.placeholder', 'Your feedback...')}\n onChange={(e) => setFeedbackText(e.target.value)}\n value={feedbackText}\n />\n </Box>\n </Flex>\n </Flex>\n </Modal.Body>\n <Modal.Footer>\n <Modal.Close>\n <Button variant=\"tertiary\" onClick={closeFeedbackModal}>\n {t('form.button.cancel', 'Cancel')}\n </Button>\n </Modal.Close>\n <Button\n onClick={handleSubmitFeedback}\n loading={isPending}\n disabled={selectedReasons.length === 0}\n >\n {t('form.button.submit', 'Submit')}\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["FeedbackModalContext","createContext","isFeedbackModalOpen","currentMessageId","openFeedbackModal","closeFeedbackModal","useFeedbackModal","useContext","FeedbackProvider","children","setIsFeedbackModalOpen","useState","setCurrentMessageId","messageId","_jsxs","Provider","value","_jsx","FeedbackModal","FeedbackOptionWrapper","styled","Flex","theme","colors","neutral100","primary100","primary200","FeedbackOption","id","label","selected","onClick","className","justifyContent","hasRadius","width","cursor","borderColor","padding","gap","Typography","variant","fontWeight","Checkbox","name","checked","onChange","feedbackText","setFeedbackText","selectedReasons","setSelectedReasons","t","useTranslations","toggleNotification","useNotification","downvoteMessage","isPending","useFeedback","feedbackReasons","handleReasonSelect","prevSelected","includes","filter","reasonId","handleSubmitFeedback","length","error","type","message","Modal","Root","open","onOpenChange","Content","Header","Body","direction","alignItems","Grid","map","reason","Item","col","Box","Textarea","placeholder","e","target","Footer","Close","Button","loading","disabled"],"mappings":"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"}