@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,435 @@
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 Icons = require('@strapi/icons');
8
+ var styledComponents = require('styled-components');
9
+ var Alert = require('./components/Alert.js');
10
+ var AnimatedBox = require('./components/AnimatedBox.js');
11
+ var AttachmentPreview = require('./components/Attachments/AttachmentPreview.js');
12
+ var Dropzone = require('./components/Dropzone.js');
13
+ var FloatingPanel = require('./components/FloatingPanel.js');
14
+ var FigmaIcon = require('./components/icons/FigmaIcon.js');
15
+ var StopIcon = require('./components/icons/StopIcon.js');
16
+ var Input = require('./components/Input.js');
17
+ var Message = require('./components/Messages/Message.js');
18
+ var ResizableTextArea = require('./components/ResizableTextArea.js');
19
+ var SimpleMenu = require('./components/SimpleMenu.js');
20
+ var useAIFetch = require('./hooks/useAIFetch.js');
21
+ var useAttachments = require('./hooks/useAttachments.js');
22
+ var useTranslations = require('./hooks/useTranslations.js');
23
+ var ChatProvider = require('./providers/ChatProvider.js');
24
+ var UploadCodeModal = require('./UploadCodeModal.js');
25
+ var UploadFigmaModal = require('./UploadFigmaModal.js');
26
+
27
+ /* -------------------------------------------------------------------------------------------------
28
+ * Chat Message Suggestions
29
+ * -----------------------------------------------------------------------------------------------*/ const ResponsiveFlex = styledComponents.styled(designSystem.Flex)`
30
+ @media (max-height: 500px) {
31
+ display: none;
32
+ }
33
+ `;
34
+ const ChatSuggestions = ()=>{
35
+ const { sendMessage } = ChatProvider.useStrapiChat();
36
+ const { t } = useTranslations.useTranslations();
37
+ const { trackUsage } = strapiAdmin.useTracking();
38
+ const SUGGESTIONS = [
39
+ t('chat.input.defaults.generate', 'Generate a product schema'),
40
+ t('chat.input.defaults.ctb', 'Tell me about the Content-Type Builder'),
41
+ t('chat.input.defaults.strapi', 'Tell me about Strapi')
42
+ ];
43
+ const SUGGESTION_TO_PROMPT_TYPE = {
44
+ [t('chat.input.defaults.generate', 'Generate a product schema')]: 'generate-product-schema',
45
+ [t('chat.input.defaults.ctb', 'Tell me about the Content-Type Builder')]: 'tell-me-about-the-content-type-builder',
46
+ [t('chat.input.defaults.strapi', 'Tell me about Strapi')]: 'tell-me-about-strapi'
47
+ };
48
+ const suggestionsTitle = t('chat.input.defaults.title', 'How can I help you?');
49
+ return /*#__PURE__*/ jsxRuntime.jsx(AnimatedBox.AnimatedBox, {
50
+ children: /*#__PURE__*/ jsxRuntime.jsxs(ResponsiveFlex, {
51
+ direction: "column",
52
+ alignItems: 'flex-start',
53
+ gap: 3,
54
+ children: [
55
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
56
+ variant: "omega",
57
+ fontWeight: "bold",
58
+ children: suggestionsTitle
59
+ }),
60
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
61
+ direction: "column",
62
+ alignItems: 'flex-start',
63
+ gap: 2,
64
+ children: SUGGESTIONS.map((suggestion)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
65
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(Icons.Sparkle, {
66
+ fill: "neutral500"
67
+ }),
68
+ size: "M",
69
+ variant: "tertiary",
70
+ onClick: ()=>{
71
+ trackUsage('didUsePresetPrompt', {
72
+ promptType: SUGGESTION_TO_PROMPT_TYPE[suggestion]
73
+ });
74
+ sendMessage({
75
+ text: suggestion
76
+ });
77
+ },
78
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
79
+ fontWeight: "regular",
80
+ children: suggestion
81
+ })
82
+ }, suggestion))
83
+ })
84
+ ]
85
+ })
86
+ });
87
+ };
88
+ /* -------------------------------------------------------------------------------------------------
89
+ * Chat Errors
90
+ * -----------------------------------------------------------------------------------------------*/ const getErrorMessage = (err)=>{
91
+ try {
92
+ const error = JSON.parse(err.message);
93
+ return error.error;
94
+ } catch (e) {
95
+ return err;
96
+ }
97
+ };
98
+ const ChatError = ()=>{
99
+ const { error } = ChatProvider.useStrapiChat();
100
+ const { t } = useTranslations.useTranslations();
101
+ const defaultErrorMessage = t('chat.messages.error', 'Something went wrong.');
102
+ const tooManyRequestsMessage = t('chat.messages.too-many-requests', 'Too many requests, please try again later.');
103
+ const licenseLimitReachedMessage = t('chat.messages.license-limit-reached', 'License limit reached, please try again tomorrow.');
104
+ const licenseLimitExceededMessage = t('chat.messages.license-limit-exceeded', 'AI credit limit exceeded.');
105
+ const chatTooLongError = t('chat.messages.too-long-error', 'This conversation reached its maximum length. Start a new conversation');
106
+ if (!error) return null;
107
+ const errorMessage = getErrorMessage(error);
108
+ if (!errorMessage || typeof errorMessage !== 'string') {
109
+ return null;
110
+ }
111
+ if (errorMessage === useAIFetch.TOO_MANY_REQUESTS_ERROR) {
112
+ return /*#__PURE__*/ jsxRuntime.jsx(Alert.Alert, {
113
+ title: tooManyRequestsMessage,
114
+ variant: "warning"
115
+ });
116
+ }
117
+ if (errorMessage === useAIFetch.LICENSE_LIMIT_REACHED_ERROR) {
118
+ return /*#__PURE__*/ jsxRuntime.jsx(Alert.Alert, {
119
+ title: licenseLimitReachedMessage,
120
+ variant: "warning"
121
+ });
122
+ }
123
+ if (errorMessage.split('.')[0] === useAIFetch.LICENSE_LIMIT_EXCEEDED_ERROR) {
124
+ return /*#__PURE__*/ jsxRuntime.jsx(Alert.Alert, {
125
+ title: licenseLimitExceededMessage,
126
+ variant: "danger"
127
+ });
128
+ }
129
+ if (errorMessage === useAIFetch.CHAT_TOO_LONG_ERROR) {
130
+ return /*#__PURE__*/ jsxRuntime.jsx(Alert.Alert, {
131
+ title: chatTooLongError,
132
+ variant: "danger"
133
+ });
134
+ }
135
+ return /*#__PURE__*/ jsxRuntime.jsx(Alert.Alert, {
136
+ title: defaultErrorMessage,
137
+ variant: "danger"
138
+ });
139
+ };
140
+ /* -------------------------------------------------------------------------------------------------
141
+ * Chat Messages
142
+ * -----------------------------------------------------------------------------------------------*/ const ChatContent = ({ messages })=>{
143
+ const messageEndRef = React.useRef(null);
144
+ const { status } = ChatProvider.useStrapiChat();
145
+ // Scroll to the bottom of the chat when new messages arrive
146
+ React.useEffect(()=>{
147
+ // Add a small delay to ensure all message content is fully rendered
148
+ // including conditionally rendered elements like feedback buttons
149
+ const scrollTimeout = setTimeout(()=>{
150
+ messageEndRef.current?.scrollIntoView({
151
+ behavior: 'smooth'
152
+ });
153
+ }, 20);
154
+ return ()=>clearTimeout(scrollTimeout);
155
+ }, [
156
+ messages,
157
+ status
158
+ ]);
159
+ return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
160
+ children: [
161
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
162
+ direction: "column",
163
+ gap: 5,
164
+ children: [
165
+ messages.map((message, idx)=>/*#__PURE__*/ jsxRuntime.jsx(Message.ChatMessage, {
166
+ message: message,
167
+ // Chat loading and message is the last one
168
+ isLoading: (status === 'streaming' || status === 'submitted') && idx === messages.length - 1
169
+ }, message.id)),
170
+ status === 'error' && /*#__PURE__*/ jsxRuntime.jsx(ChatError, {})
171
+ ]
172
+ }),
173
+ /*#__PURE__*/ jsxRuntime.jsx("div", {
174
+ ref: messageEndRef
175
+ })
176
+ ]
177
+ });
178
+ };
179
+ /* -------------------------------------------------------------------------------------------------
180
+ * Attachments
181
+ * -----------------------------------------------------------------------------------------------*/ const ChatAttachmentList = ()=>{
182
+ const { attachments, removeAttachmentByIndex } = useAttachments.useAttachments();
183
+ if (!attachments.length) return null;
184
+ return /*#__PURE__*/ jsxRuntime.jsx(Input.Input.Attachments, {
185
+ children: attachments.map((attachment, index)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
186
+ maxWidth: '250px',
187
+ children: /*#__PURE__*/ jsxRuntime.jsx(AttachmentPreview.AttachmentPreview, {
188
+ attachment: attachment,
189
+ onRemove: ()=>removeAttachmentByIndex(index)
190
+ })
191
+ }, attachment.filename))
192
+ });
193
+ };
194
+ const ChatAttachmentMenu = ()=>{
195
+ const { attachFiles } = useAttachments.useAttachments();
196
+ const { openCodeUpload } = UploadCodeModal.useUploadProjectToChat();
197
+ const { openFigmaUpload } = UploadFigmaModal.useUploadFigmaToChat();
198
+ const { t } = useTranslations.useTranslations();
199
+ const fileInputRef = React.useRef(null);
200
+ const uploadLabel = t('chat.tooltips.upload-attachments', 'Upload attachments');
201
+ const importCodeText = t('chat.attachments.menu.import-code', 'Import code');
202
+ const attachImageText = t('chat.attachments.menu.attach-image', 'Attach image');
203
+ const importFigmaText = t('chat.attachments.menu.import-figma', 'Import from Figma');
204
+ return /*#__PURE__*/ jsxRuntime.jsxs(SimpleMenu.SimpleMenu, {
205
+ label: uploadLabel,
206
+ icon: /*#__PURE__*/ jsxRuntime.jsx(Icons.Paperclip, {}),
207
+ tag: designSystem.IconButton,
208
+ popoverPlacement: "top-end",
209
+ children: [
210
+ /*#__PURE__*/ jsxRuntime.jsx(SimpleMenu.MenuItem, {
211
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(Icons.Code, {}),
212
+ onSelect: ()=>openCodeUpload(),
213
+ children: importCodeText
214
+ }),
215
+ /*#__PURE__*/ jsxRuntime.jsx(SimpleMenu.MenuItem, {
216
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(FigmaIcon.FigmaIcon, {}),
217
+ onSelect: ()=>openFigmaUpload(),
218
+ children: importFigmaText
219
+ }),
220
+ /*#__PURE__*/ jsxRuntime.jsx("input", {
221
+ type: "file",
222
+ accept: "image/*",
223
+ multiple: true,
224
+ hidden: true,
225
+ ref: fileInputRef
226
+ }),
227
+ /*#__PURE__*/ jsxRuntime.jsx(SimpleMenu.MenuItem, {
228
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(Icons.Upload, {}),
229
+ onSelect: ()=>{
230
+ const fileInput = fileInputRef.current;
231
+ if (!fileInput) return;
232
+ fileInput.onchange = (e)=>{
233
+ const target = e.target;
234
+ if (target.files && target.files.length > 0) {
235
+ attachFiles(Array.from(target.files));
236
+ }
237
+ };
238
+ fileInput.click();
239
+ },
240
+ children: attachImageText
241
+ })
242
+ ]
243
+ });
244
+ };
245
+ /* -------------------------------------------------------------------------------------------------
246
+ * Input
247
+ * -----------------------------------------------------------------------------------------------*/ const LoadingDots = ({ children })=>{
248
+ const [dots, setDots] = React.useState('');
249
+ React.useEffect(()=>{
250
+ const dotStates = [
251
+ '',
252
+ '.',
253
+ '..',
254
+ '...'
255
+ ];
256
+ let currentIndex = 0;
257
+ const interval = setInterval(()=>{
258
+ currentIndex = (currentIndex + 1) % dotStates.length;
259
+ setDots(dotStates[currentIndex]);
260
+ }, 400); // Change every 400ms
261
+ return ()=>clearInterval(interval);
262
+ }, []);
263
+ return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Typography, {
264
+ variant: "pi",
265
+ textColor: "neutral600",
266
+ children: [
267
+ children,
268
+ dots
269
+ ]
270
+ });
271
+ };
272
+ const ChatInput = (props)=>{
273
+ const { input, handleSubmit, handleInputChange, messages, status, stop, attachments } = ChatProvider.useStrapiChat();
274
+ const { t } = useTranslations.useTranslations();
275
+ const isLoading = status === 'streaming' || status === 'submitted';
276
+ return /*#__PURE__*/ jsxRuntime.jsx(jsxRuntime.Fragment, {
277
+ children: /*#__PURE__*/ jsxRuntime.jsx("form", {
278
+ onSubmit: handleSubmit,
279
+ ...props,
280
+ children: /*#__PURE__*/ jsxRuntime.jsxs(Input.Input.Root, {
281
+ isLoading: isLoading,
282
+ gap: 4,
283
+ children: [
284
+ /*#__PURE__*/ jsxRuntime.jsxs(Input.Input.Header, {
285
+ minHeight: 0,
286
+ children: [
287
+ messages.length === 0 && /*#__PURE__*/ jsxRuntime.jsx(Input.Input.HeaderItem, {
288
+ children: /*#__PURE__*/ jsxRuntime.jsx(ChatSuggestions, {})
289
+ }),
290
+ isLoading && /*#__PURE__*/ jsxRuntime.jsx(Input.Input.HeaderItem, {
291
+ children: /*#__PURE__*/ jsxRuntime.jsx(LoadingDots, {
292
+ children: t('chat.input.thinking', 'Strapi AI is thinking')
293
+ })
294
+ })
295
+ ]
296
+ }),
297
+ /*#__PURE__*/ jsxRuntime.jsxs(Input.Input.Content, {
298
+ children: [
299
+ /*#__PURE__*/ jsxRuntime.jsx(Dropzone.Dropzone.Area, {}),
300
+ /*#__PURE__*/ jsxRuntime.jsx(ChatAttachmentList, {}),
301
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
302
+ paddingBottom: 3,
303
+ children: /*#__PURE__*/ jsxRuntime.jsx(ResizableTextArea.ResizableTextArea, {
304
+ value: input,
305
+ onChange: handleInputChange,
306
+ onSubmit: handleSubmit,
307
+ placeholder: t('chat.input.placeholder', 'Ask Strapi AI...')
308
+ })
309
+ }),
310
+ /*#__PURE__*/ jsxRuntime.jsxs(Input.Input.Actions, {
311
+ children: [
312
+ /*#__PURE__*/ jsxRuntime.jsx(ChatAttachmentMenu, {}),
313
+ isLoading ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
314
+ label: t('chat.tooltips.stop-generation', 'Stop'),
315
+ type: "button",
316
+ variant: "default",
317
+ onClick: (e)=>{
318
+ e.preventDefault();
319
+ stop();
320
+ },
321
+ children: /*#__PURE__*/ jsxRuntime.jsx(StopIcon.StopIcon, {})
322
+ }) : /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
323
+ label: t('chat.tooltips.send-message', 'Send'),
324
+ variant: "default",
325
+ // allow sending an empty message if there are attachments
326
+ disabled: input.trim().length === 0 && attachments.length === 0,
327
+ children: /*#__PURE__*/ jsxRuntime.jsx(Icons.ArrowUp, {})
328
+ })
329
+ ]
330
+ })
331
+ ]
332
+ })
333
+ ]
334
+ })
335
+ })
336
+ });
337
+ };
338
+ /* -------------------------------------------------------------------------------------------------
339
+ * Chat
340
+ * -----------------------------------------------------------------------------------------------*/ const Chat = ()=>{
341
+ const { title, messages, isChatOpen, isChatEnabled, openChat, closeChat, reset } = ChatProvider.useStrapiChat();
342
+ const { attachFiles } = useAttachments.useAttachments();
343
+ const { t } = useTranslations.useTranslations();
344
+ const state = strapiAdmin.useGuidedTour('Chat', (s)=>s.state);
345
+ const currentEnvironment = strapiAdmin.useAppInfo('Chat', (state)=>state.currentEnvironment);
346
+ // Disable AI Chat in production mode
347
+ const isProduction = currentEnvironment === 'production';
348
+ // Auto-open chat when AIChat guided tour step is active
349
+ React.useEffect(()=>{
350
+ const isAIChatStepActive = state.enabled && state.tours.contentTypeBuilder?.currentStep === 1 && // AIChat is step 1 in contentTypeBuilderStepsAI
351
+ !state.tours.contentTypeBuilder?.isCompleted;
352
+ if (isAIChatStepActive && !isChatOpen && openChat) {
353
+ openChat();
354
+ }
355
+ }, [
356
+ state.tours.contentTypeBuilder?.currentStep,
357
+ state.tours.contentTypeBuilder?.isCompleted,
358
+ state.enabled,
359
+ isChatOpen,
360
+ openChat
361
+ ]);
362
+ // Labels
363
+ const openChatLabel = t('chat.tooltips.open-chat', 'Open chat');
364
+ const closeChatLabel = t('chat.tooltips.close-chat', 'Close chat');
365
+ const createChatLabel = t('chat.tooltips.create-chat', 'New conversation');
366
+ const defaultTitle = t('chat.header.default-title', 'New conversation');
367
+ const mistakesDisclaimer = t('chat.input.strapi-ai-can-make-errors', 'Strapi AI can make mistakes.');
368
+ // Don't render the chat at all in production mode or if chat is not enabled
369
+ if (!isChatEnabled || isProduction) {
370
+ return null;
371
+ }
372
+ return /*#__PURE__*/ jsxRuntime.jsx(Dropzone.Dropzone.Root, {
373
+ onAddFiles: (files)=>{
374
+ attachFiles(files);
375
+ },
376
+ children: /*#__PURE__*/ jsxRuntime.jsxs(FloatingPanel.Panel.Root, {
377
+ size: "md",
378
+ position: "bottom-right",
379
+ isOpen: isChatOpen,
380
+ onToggle: isChatOpen ? closeChat : openChat,
381
+ toggleIcon: /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
382
+ onClick: isChatOpen ? closeChat : openChat,
383
+ label: isChatOpen ? closeChatLabel : openChatLabel,
384
+ variant: "default",
385
+ children: /*#__PURE__*/ jsxRuntime.jsx(Icons.Sparkle, {})
386
+ }),
387
+ children: [
388
+ /*#__PURE__*/ jsxRuntime.jsxs(FloatingPanel.Panel.Header, {
389
+ children: [
390
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
391
+ tag: "h3",
392
+ variant: "omega",
393
+ fontWeight: "bold",
394
+ children: title || defaultTitle
395
+ }),
396
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
397
+ gap: 0,
398
+ children: [
399
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
400
+ label: createChatLabel,
401
+ variant: "ghost",
402
+ onClick: reset,
403
+ children: /*#__PURE__*/ jsxRuntime.jsx(Icons.Plus, {})
404
+ }),
405
+ /*#__PURE__*/ jsxRuntime.jsx(FloatingPanel.Panel.Close, {
406
+ label: closeChatLabel
407
+ })
408
+ ]
409
+ })
410
+ ]
411
+ }),
412
+ /*#__PURE__*/ jsxRuntime.jsx(FloatingPanel.Panel.Body, {
413
+ children: /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.tours.contentTypeBuilder.AIChat, {
414
+ children: [
415
+ !messages.length ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
416
+ variant: "pi",
417
+ textColor: "neutral600",
418
+ children: mistakesDisclaimer
419
+ }) : null,
420
+ /*#__PURE__*/ jsxRuntime.jsx(ChatContent, {
421
+ messages: messages
422
+ })
423
+ ]
424
+ })
425
+ }),
426
+ /*#__PURE__*/ jsxRuntime.jsx(FloatingPanel.Panel.Footer, {
427
+ children: /*#__PURE__*/ jsxRuntime.jsx(ChatInput, {})
428
+ })
429
+ ]
430
+ })
431
+ });
432
+ };
433
+
434
+ exports.Chat = Chat;
435
+ //# sourceMappingURL=Chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Chat.js","sources":["../../../../admin/src/components/AIChat/Chat.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport { tours, useTracking, useGuidedTour, useAppInfo } from '@strapi/admin/strapi-admin';\nimport { Flex, IconButton, Button, Typography, Box } from '@strapi/design-system';\nimport { Sparkle, ArrowUp, Plus, Paperclip, Upload, Code } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\nimport { Alert } from './components/Alert';\nimport { AnimatedBox } from './components/AnimatedBox';\nimport { AttachmentPreview } from './components/Attachments/AttachmentPreview';\nimport { Dropzone } from './components/Dropzone';\nimport { Panel } from './components/FloatingPanel';\nimport { FigmaIcon } from './components/icons/FigmaIcon';\nimport { StopIcon } from './components/icons/StopIcon';\nimport { Input } from './components/Input';\nimport { ChatMessage } from './components/Messages/Message';\nimport { ResizableTextArea } from './components/ResizableTextArea';\nimport { MenuItem, SimpleMenu } from './components/SimpleMenu';\nimport {\n CHAT_TOO_LONG_ERROR,\n LICENSE_LIMIT_REACHED_ERROR,\n TOO_MANY_REQUESTS_ERROR,\n LICENSE_LIMIT_EXCEEDED_ERROR,\n} from './hooks/useAIFetch';\nimport { useAttachments } from './hooks/useAttachments';\nimport { useTranslations } from './hooks/useTranslations';\nimport { AIMessage } from './lib/types/messages';\nimport { useStrapiChat } from './providers/ChatProvider';\nimport { useUploadProjectToChat } from './UploadCodeModal';\nimport { useUploadFigmaToChat } from './UploadFigmaModal';\n\n/* -------------------------------------------------------------------------------------------------\n * Chat Message Suggestions\n * -----------------------------------------------------------------------------------------------*/\nconst ResponsiveFlex = styled(Flex)`\n @media (max-height: 500px) {\n display: none;\n }\n`;\n\nconst ChatSuggestions = () => {\n const { sendMessage } = useStrapiChat();\n const { t } = useTranslations();\n const { trackUsage } = useTracking();\n\n const SUGGESTIONS = [\n t('chat.input.defaults.generate', 'Generate a product schema'),\n t('chat.input.defaults.ctb', 'Tell me about the Content-Type Builder'),\n t('chat.input.defaults.strapi', 'Tell me about Strapi'),\n ] as const;\n\n const SUGGESTION_TO_PROMPT_TYPE = {\n [t('chat.input.defaults.generate', 'Generate a product schema')]: 'generate-product-schema',\n [t('chat.input.defaults.ctb', 'Tell me about the Content-Type Builder')]:\n 'tell-me-about-the-content-type-builder',\n [t('chat.input.defaults.strapi', 'Tell me about Strapi')]: 'tell-me-about-strapi',\n } as const;\n\n const suggestionsTitle = t('chat.input.defaults.title', 'How can I help you?');\n\n return (\n <AnimatedBox>\n <ResponsiveFlex direction=\"column\" alignItems={'flex-start'} gap={3}>\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {suggestionsTitle}\n </Typography>\n <Flex direction=\"column\" alignItems={'flex-start'} gap={2}>\n {SUGGESTIONS.map((suggestion) => (\n <Button\n key={suggestion}\n startIcon={<Sparkle fill=\"neutral500\" />}\n size=\"M\"\n variant=\"tertiary\"\n onClick={() => {\n trackUsage('didUsePresetPrompt', {\n promptType: SUGGESTION_TO_PROMPT_TYPE[suggestion],\n });\n\n sendMessage({ text: suggestion });\n }}\n >\n <Typography fontWeight=\"regular\">{suggestion}</Typography>\n </Button>\n ))}\n </Flex>\n </ResponsiveFlex>\n </AnimatedBox>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Chat Errors\n * -----------------------------------------------------------------------------------------------*/\nconst getErrorMessage = (err: Error) => {\n try {\n const error = JSON.parse(err.message);\n return error.error;\n } catch (e) {\n return err;\n }\n};\n\nconst ChatError = () => {\n const { error } = useStrapiChat();\n const { t } = useTranslations();\n\n const defaultErrorMessage = t('chat.messages.error', 'Something went wrong.');\n const tooManyRequestsMessage = t(\n 'chat.messages.too-many-requests',\n 'Too many requests, please try again later.'\n );\n const licenseLimitReachedMessage = t(\n 'chat.messages.license-limit-reached',\n 'License limit reached, please try again tomorrow.'\n );\n const licenseLimitExceededMessage = t(\n 'chat.messages.license-limit-exceeded',\n 'AI credit limit exceeded.'\n );\n const chatTooLongError = t(\n 'chat.messages.too-long-error',\n 'This conversation reached its maximum length. Start a new conversation'\n );\n\n if (!error) return null;\n\n const errorMessage = getErrorMessage(error);\n if (!errorMessage || typeof errorMessage !== 'string') {\n return null;\n }\n\n if (errorMessage === TOO_MANY_REQUESTS_ERROR) {\n return <Alert title={tooManyRequestsMessage} variant=\"warning\" />;\n }\n\n if (errorMessage === LICENSE_LIMIT_REACHED_ERROR) {\n return <Alert title={licenseLimitReachedMessage} variant=\"warning\" />;\n }\n\n if (errorMessage.split('.')[0] === LICENSE_LIMIT_EXCEEDED_ERROR) {\n return <Alert title={licenseLimitExceededMessage} variant=\"danger\" />;\n }\n\n if (errorMessage === CHAT_TOO_LONG_ERROR) {\n return <Alert title={chatTooLongError} variant=\"danger\" />;\n }\n\n return <Alert title={defaultErrorMessage} variant=\"danger\" />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Chat Messages\n * -----------------------------------------------------------------------------------------------*/\nconst ChatContent: React.FC<{\n messages: AIMessage[];\n}> = ({ messages }) => {\n const messageEndRef = useRef<HTMLDivElement>(null);\n const { status } = useStrapiChat();\n\n // Scroll to the bottom of the chat when new messages arrive\n useEffect(() => {\n // Add a small delay to ensure all message content is fully rendered\n // including conditionally rendered elements like feedback buttons\n const scrollTimeout = setTimeout(() => {\n messageEndRef.current?.scrollIntoView({ behavior: 'smooth' });\n }, 20);\n\n return () => clearTimeout(scrollTimeout);\n }, [messages, status]);\n\n return (\n <>\n <Flex direction=\"column\" gap={5}>\n {messages.map((message, idx) => (\n <ChatMessage\n key={message.id}\n message={message}\n // Chat loading and message is the last one\n isLoading={\n (status === 'streaming' || status === 'submitted') && idx === messages.length - 1\n }\n />\n ))}\n {status === 'error' && <ChatError />}\n </Flex>\n <div ref={messageEndRef} />\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Attachments\n * -----------------------------------------------------------------------------------------------*/\nconst ChatAttachmentList = () => {\n const { attachments, removeAttachmentByIndex } = useAttachments();\n\n if (!attachments.length) return null;\n\n return (\n <Input.Attachments>\n {attachments.map((attachment, index) => (\n <Box key={attachment.filename} maxWidth={'250px'}>\n <AttachmentPreview\n attachment={attachment}\n onRemove={() => removeAttachmentByIndex(index)}\n />\n </Box>\n ))}\n </Input.Attachments>\n );\n};\n\nconst ChatAttachmentMenu = () => {\n const { attachFiles } = useAttachments();\n const { openCodeUpload } = useUploadProjectToChat();\n const { openFigmaUpload } = useUploadFigmaToChat();\n const { t } = useTranslations();\n\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const uploadLabel = t('chat.tooltips.upload-attachments', 'Upload attachments');\n const importCodeText = t('chat.attachments.menu.import-code', 'Import code');\n const attachImageText = t('chat.attachments.menu.attach-image', 'Attach image');\n const importFigmaText = t('chat.attachments.menu.import-figma', 'Import from Figma');\n\n return (\n <SimpleMenu\n label={uploadLabel}\n icon={<Paperclip />}\n tag={IconButton}\n popoverPlacement=\"top-end\"\n >\n <MenuItem startIcon={<Code />} onSelect={() => openCodeUpload()}>\n {importCodeText}\n </MenuItem>\n\n <MenuItem startIcon={<FigmaIcon />} onSelect={() => openFigmaUpload()}>\n {importFigmaText}\n </MenuItem>\n\n <input type=\"file\" accept=\"image/*\" multiple hidden ref={fileInputRef} />\n <MenuItem\n startIcon={<Upload />}\n onSelect={() => {\n const fileInput = fileInputRef.current;\n if (!fileInput) return;\n fileInput.onchange = (e) => {\n const target = e.target as HTMLInputElement;\n if (target.files && target.files.length > 0) {\n attachFiles(Array.from(target.files));\n }\n };\n\n fileInput.click();\n }}\n >\n {attachImageText}\n </MenuItem>\n </SimpleMenu>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Input\n * -----------------------------------------------------------------------------------------------*/\n\nconst LoadingDots = ({ children }: { children: string }) => {\n const [dots, setDots] = useState('');\n\n useEffect(() => {\n const dotStates = ['', '.', '..', '...'];\n let currentIndex = 0;\n\n const interval = setInterval(() => {\n currentIndex = (currentIndex + 1) % dotStates.length;\n setDots(dotStates[currentIndex]);\n }, 400); // Change every 400ms\n\n return () => clearInterval(interval);\n }, []);\n\n return (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {children}\n {dots}\n </Typography>\n );\n};\n\nconst ChatInput = (props: React.FormHTMLAttributes<HTMLFormElement>) => {\n const { input, handleSubmit, handleInputChange, messages, status, stop, attachments } =\n useStrapiChat();\n const { t } = useTranslations();\n\n const isLoading = status === 'streaming' || status === 'submitted';\n\n return (\n <>\n <form onSubmit={handleSubmit} {...props}>\n <Input.Root isLoading={isLoading} gap={4}>\n <Input.Header minHeight={0}>\n {messages.length === 0 && (\n <Input.HeaderItem>\n <ChatSuggestions />\n </Input.HeaderItem>\n )}\n {isLoading && (\n <Input.HeaderItem>\n <LoadingDots>{t('chat.input.thinking', 'Strapi AI is thinking')}</LoadingDots>\n </Input.HeaderItem>\n )}\n </Input.Header>\n <Input.Content>\n <Dropzone.Area />\n <ChatAttachmentList />\n <Box paddingBottom={3}>\n <ResizableTextArea\n value={input}\n onChange={handleInputChange}\n onSubmit={handleSubmit}\n placeholder={t('chat.input.placeholder', 'Ask Strapi AI...')}\n />\n </Box>\n <Input.Actions>\n <ChatAttachmentMenu />\n\n {isLoading ? (\n <IconButton\n label={t('chat.tooltips.stop-generation', 'Stop')}\n type=\"button\"\n variant=\"default\"\n onClick={(e) => {\n e.preventDefault();\n stop();\n }}\n >\n <StopIcon />\n </IconButton>\n ) : (\n <IconButton\n label={t('chat.tooltips.send-message', 'Send')}\n variant=\"default\"\n // allow sending an empty message if there are attachments\n disabled={input.trim().length === 0 && attachments.length === 0}\n >\n <ArrowUp />\n </IconButton>\n )}\n </Input.Actions>\n </Input.Content>\n </Input.Root>\n </form>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Chat\n * -----------------------------------------------------------------------------------------------*/\n\nconst Chat = () => {\n const { title, messages, isChatOpen, isChatEnabled, openChat, closeChat, reset } =\n useStrapiChat();\n const { attachFiles } = useAttachments();\n const { t } = useTranslations();\n const state = useGuidedTour('Chat', (s) => s.state);\n const currentEnvironment = useAppInfo('Chat', (state) => state.currentEnvironment);\n\n // Disable AI Chat in production mode\n const isProduction = currentEnvironment === 'production';\n\n // Auto-open chat when AIChat guided tour step is active\n useEffect(() => {\n const isAIChatStepActive =\n state.enabled &&\n state.tours.contentTypeBuilder?.currentStep === 1 && // AIChat is step 1 in contentTypeBuilderStepsAI\n !state.tours.contentTypeBuilder?.isCompleted;\n\n if (isAIChatStepActive && !isChatOpen && openChat) {\n openChat();\n }\n }, [\n state.tours.contentTypeBuilder?.currentStep,\n state.tours.contentTypeBuilder?.isCompleted,\n state.enabled,\n isChatOpen,\n openChat,\n ]);\n\n // Labels\n const openChatLabel = t('chat.tooltips.open-chat', 'Open chat');\n const closeChatLabel = t('chat.tooltips.close-chat', 'Close chat');\n const createChatLabel = t('chat.tooltips.create-chat', 'New conversation');\n const defaultTitle = t('chat.header.default-title', 'New conversation');\n const mistakesDisclaimer = t(\n 'chat.input.strapi-ai-can-make-errors',\n 'Strapi AI can make mistakes.'\n );\n\n // Don't render the chat at all in production mode or if chat is not enabled\n if (!isChatEnabled || isProduction) {\n return null;\n }\n\n return (\n <Dropzone.Root\n onAddFiles={(files) => {\n attachFiles(files);\n }}\n >\n <Panel.Root\n size=\"md\"\n position=\"bottom-right\"\n isOpen={isChatOpen}\n onToggle={isChatOpen ? closeChat : openChat}\n toggleIcon={\n <IconButton\n onClick={isChatOpen ? closeChat : openChat}\n label={isChatOpen ? closeChatLabel : openChatLabel}\n variant=\"default\"\n >\n <Sparkle />\n </IconButton>\n }\n >\n <Panel.Header>\n <Typography tag=\"h3\" variant=\"omega\" fontWeight=\"bold\">\n {title || defaultTitle}\n </Typography>\n <Flex gap={0}>\n <IconButton label={createChatLabel} variant=\"ghost\" onClick={reset}>\n <Plus />\n </IconButton>\n <Panel.Close label={closeChatLabel} />\n </Flex>\n </Panel.Header>\n\n <Panel.Body>\n <tours.contentTypeBuilder.AIChat>\n {!messages.length ? (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {mistakesDisclaimer}\n </Typography>\n ) : null}\n <ChatContent messages={messages} />\n </tours.contentTypeBuilder.AIChat>\n </Panel.Body>\n\n <Panel.Footer>\n <ChatInput />\n </Panel.Footer>\n </Panel.Root>\n </Dropzone.Root>\n );\n};\n\nexport { Chat };\n"],"names":["ResponsiveFlex","styled","Flex","ChatSuggestions","sendMessage","useStrapiChat","t","useTranslations","trackUsage","useTracking","SUGGESTIONS","SUGGESTION_TO_PROMPT_TYPE","suggestionsTitle","_jsx","AnimatedBox","_jsxs","direction","alignItems","gap","Typography","variant","fontWeight","map","suggestion","Button","startIcon","Sparkle","fill","size","onClick","promptType","text","getErrorMessage","err","error","JSON","parse","message","e","ChatError","defaultErrorMessage","tooManyRequestsMessage","licenseLimitReachedMessage","licenseLimitExceededMessage","chatTooLongError","errorMessage","TOO_MANY_REQUESTS_ERROR","Alert","title","LICENSE_LIMIT_REACHED_ERROR","split","LICENSE_LIMIT_EXCEEDED_ERROR","CHAT_TOO_LONG_ERROR","ChatContent","messages","messageEndRef","useRef","status","useEffect","scrollTimeout","setTimeout","current","scrollIntoView","behavior","clearTimeout","_Fragment","idx","ChatMessage","isLoading","length","id","div","ref","ChatAttachmentList","attachments","removeAttachmentByIndex","useAttachments","Input","Attachments","attachment","index","Box","maxWidth","AttachmentPreview","onRemove","filename","ChatAttachmentMenu","attachFiles","openCodeUpload","useUploadProjectToChat","openFigmaUpload","useUploadFigmaToChat","fileInputRef","uploadLabel","importCodeText","attachImageText","importFigmaText","SimpleMenu","label","icon","Paperclip","tag","IconButton","popoverPlacement","MenuItem","Code","onSelect","FigmaIcon","input","type","accept","multiple","hidden","Upload","fileInput","onchange","target","files","Array","from","click","LoadingDots","children","dots","setDots","useState","dotStates","currentIndex","interval","setInterval","clearInterval","textColor","ChatInput","props","handleSubmit","handleInputChange","stop","form","onSubmit","Root","Header","minHeight","HeaderItem","Content","Dropzone","Area","paddingBottom","ResizableTextArea","value","onChange","placeholder","Actions","preventDefault","StopIcon","disabled","trim","ArrowUp","Chat","isChatOpen","isChatEnabled","openChat","closeChat","reset","state","useGuidedTour","s","currentEnvironment","useAppInfo","isProduction","isAIChatStepActive","enabled","tours","contentTypeBuilder","currentStep","isCompleted","openChatLabel","closeChatLabel","createChatLabel","defaultTitle","mistakesDisclaimer","onAddFiles","Panel","position","isOpen","onToggle","toggleIcon","Plus","Close","Body","AIChat","Footer"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA;;AAEkG,qGAClG,MAAMA,cAAAA,GAAiBC,uBAAOC,CAAAA,iBAAAA,CAAK;;;;AAInC,CAAC;AAED,MAAMC,eAAkB,GAAA,IAAA;IACtB,MAAM,EAAEC,WAAW,EAAE,GAAGC,0BAAAA,EAAAA;IACxB,MAAM,EAAEC,CAAC,EAAE,GAAGC,+BAAAA,EAAAA;IACd,MAAM,EAAEC,UAAU,EAAE,GAAGC,uBAAAA,EAAAA;AAEvB,IAAA,MAAMC,WAAc,GAAA;AAClBJ,QAAAA,CAAAA,CAAE,8BAAgC,EAAA,2BAAA,CAAA;AAClCA,QAAAA,CAAAA,CAAE,yBAA2B,EAAA,wCAAA,CAAA;AAC7BA,QAAAA,CAAAA,CAAE,4BAA8B,EAAA,sBAAA;AACjC,KAAA;AAED,IAAA,MAAMK,yBAA4B,GAAA;QAChC,CAACL,CAAAA,CAAE,8BAAgC,EAAA,2BAAA,CAAA,GAA+B,yBAAA;QAClE,CAACA,CAAAA,CAAE,yBAA2B,EAAA,wCAAA,CAAA,GAC5B,wCAAA;QACF,CAACA,CAAAA,CAAE,4BAA8B,EAAA,sBAAA,CAAA,GAA0B;AAC7D,KAAA;IAEA,MAAMM,gBAAAA,GAAmBN,EAAE,2BAA6B,EAAA,qBAAA,CAAA;AAExD,IAAA,qBACEO,cAACC,CAAAA,uBAAAA,EAAAA;AACC,QAAA,QAAA,gBAAAC,eAACf,CAAAA,cAAAA,EAAAA;YAAegB,SAAU,EAAA,QAAA;YAASC,UAAY,EAAA,YAAA;YAAcC,GAAK,EAAA,CAAA;;8BAChEL,cAACM,CAAAA,uBAAAA,EAAAA;oBAAWC,OAAQ,EAAA,OAAA;oBAAQC,UAAW,EAAA,MAAA;AACpCT,oBAAAA,QAAAA,EAAAA;;8BAEHC,cAACX,CAAAA,iBAAAA,EAAAA;oBAAKc,SAAU,EAAA,QAAA;oBAASC,UAAY,EAAA,YAAA;oBAAcC,GAAK,EAAA,CAAA;AACrDR,oBAAAA,QAAAA,EAAAA,WAAAA,CAAYY,GAAG,CAAC,CAACC,UAAAA,iBAChBV,cAACW,CAAAA,mBAAAA,EAAAA;AAECC,4BAAAA,SAAAA,gBAAWZ,cAACa,CAAAA,aAAAA,EAAAA;gCAAQC,IAAK,EAAA;;4BACzBC,IAAK,EAAA,GAAA;4BACLR,OAAQ,EAAA,UAAA;4BACRS,OAAS,EAAA,IAAA;AACPrB,gCAAAA,UAAAA,CAAW,oBAAsB,EAAA;oCAC/BsB,UAAYnB,EAAAA,yBAAyB,CAACY,UAAW;AACnD,iCAAA,CAAA;gCAEAnB,WAAY,CAAA;oCAAE2B,IAAMR,EAAAA;AAAW,iCAAA,CAAA;AACjC,6BAAA;AAEA,4BAAA,QAAA,gBAAAV,cAACM,CAAAA,uBAAAA,EAAAA;gCAAWE,UAAW,EAAA,SAAA;AAAWE,gCAAAA,QAAAA,EAAAA;;AAZ7BA,yBAAAA,EAAAA,UAAAA,CAAAA;;;;;AAmBnB,CAAA;AAEA;;qGAGA,MAAMS,kBAAkB,CAACC,GAAAA,GAAAA;IACvB,IAAI;AACF,QAAA,MAAMC,KAAQC,GAAAA,IAAAA,CAAKC,KAAK,CAACH,IAAII,OAAO,CAAA;AACpC,QAAA,OAAOH,MAAMA,KAAK;AACpB,KAAA,CAAE,OAAOI,CAAG,EAAA;QACV,OAAOL,GAAAA;AACT;AACF,CAAA;AAEA,MAAMM,SAAY,GAAA,IAAA;IAChB,MAAM,EAAEL,KAAK,EAAE,GAAG7B,0BAAAA,EAAAA;IAClB,MAAM,EAAEC,CAAC,EAAE,GAAGC,+BAAAA,EAAAA;IAEd,MAAMiC,mBAAAA,GAAsBlC,EAAE,qBAAuB,EAAA,uBAAA,CAAA;IACrD,MAAMmC,sBAAAA,GAAyBnC,EAC7B,iCACA,EAAA,4CAAA,CAAA;IAEF,MAAMoC,0BAAAA,GAA6BpC,EACjC,qCACA,EAAA,mDAAA,CAAA;IAEF,MAAMqC,2BAAAA,GAA8BrC,EAClC,sCACA,EAAA,2BAAA,CAAA;IAEF,MAAMsC,gBAAAA,GAAmBtC,EACvB,8BACA,EAAA,wEAAA,CAAA;IAGF,IAAI,CAAC4B,OAAO,OAAO,IAAA;AAEnB,IAAA,MAAMW,eAAeb,eAAgBE,CAAAA,KAAAA,CAAAA;AACrC,IAAA,IAAI,CAACW,YAAAA,IAAgB,OAAOA,YAAAA,KAAiB,QAAU,EAAA;QACrD,OAAO,IAAA;AACT;AAEA,IAAA,IAAIA,iBAAiBC,kCAAyB,EAAA;AAC5C,QAAA,qBAAOjC,cAACkC,CAAAA,WAAAA,EAAAA;YAAMC,KAAOP,EAAAA,sBAAAA;YAAwBrB,OAAQ,EAAA;;AACvD;AAEA,IAAA,IAAIyB,iBAAiBI,sCAA6B,EAAA;AAChD,QAAA,qBAAOpC,cAACkC,CAAAA,WAAAA,EAAAA;YAAMC,KAAON,EAAAA,0BAAAA;YAA4BtB,OAAQ,EAAA;;AAC3D;AAEA,IAAA,IAAIyB,aAAaK,KAAK,CAAC,IAAI,CAAC,CAAA,CAAE,KAAKC,uCAA8B,EAAA;AAC/D,QAAA,qBAAOtC,cAACkC,CAAAA,WAAAA,EAAAA;YAAMC,KAAOL,EAAAA,2BAAAA;YAA6BvB,OAAQ,EAAA;;AAC5D;AAEA,IAAA,IAAIyB,iBAAiBO,8BAAqB,EAAA;AACxC,QAAA,qBAAOvC,cAACkC,CAAAA,WAAAA,EAAAA;YAAMC,KAAOJ,EAAAA,gBAAAA;YAAkBxB,OAAQ,EAAA;;AACjD;AAEA,IAAA,qBAAOP,cAACkC,CAAAA,WAAAA,EAAAA;QAAMC,KAAOR,EAAAA,mBAAAA;QAAqBpB,OAAQ,EAAA;;AACpD,CAAA;AAEA;;AAEkG,qGAClG,MAAMiC,WAAAA,GAED,CAAC,EAAEC,QAAQ,EAAE,GAAA;AAChB,IAAA,MAAMC,gBAAgBC,YAAuB,CAAA,IAAA,CAAA;IAC7C,MAAM,EAAEC,MAAM,EAAE,GAAGpD,0BAAAA,EAAAA;;IAGnBqD,eAAU,CAAA,IAAA;;;AAGR,QAAA,MAAMC,gBAAgBC,UAAW,CAAA,IAAA;YAC/BL,aAAcM,CAAAA,OAAO,EAAEC,cAAe,CAAA;gBAAEC,QAAU,EAAA;AAAS,aAAA,CAAA;SAC1D,EAAA,EAAA,CAAA;AAEH,QAAA,OAAO,IAAMC,YAAaL,CAAAA,aAAAA,CAAAA;KACzB,EAAA;AAACL,QAAAA,QAAAA;AAAUG,QAAAA;AAAO,KAAA,CAAA;IAErB,qBACE1C,eAAA,CAAAkD,mBAAA,EAAA;;0BACElD,eAACb,CAAAA,iBAAAA,EAAAA;gBAAKc,SAAU,EAAA,QAAA;gBAASE,GAAK,EAAA,CAAA;;AAC3BoC,oBAAAA,QAAAA,CAAShC,GAAG,CAAC,CAACe,OAAAA,EAAS6B,oBACtBrD,cAACsD,CAAAA,mBAAAA,EAAAA;4BAEC9B,OAASA,EAAAA,OAAAA;;4BAET+B,SACE,EAACX,CAAAA,MAAAA,KAAW,WAAeA,IAAAA,MAAAA,KAAW,WAAU,KAAMS,GAAAA,KAAQZ,QAASe,CAAAA,MAAM,GAAG;AAJ7EhC,yBAAAA,EAAAA,OAAAA,CAAQiC,EAAE,CAAA,CAAA;AAQlBb,oBAAAA,MAAAA,KAAW,yBAAW5C,cAAC0B,CAAAA,SAAAA,EAAAA,EAAAA;;;0BAE1B1B,cAAC0D,CAAAA,KAAAA,EAAAA;gBAAIC,GAAKjB,EAAAA;;;;AAGhB,CAAA;AAEA;;AAEkG,qGAClG,MAAMkB,kBAAqB,GAAA,IAAA;AACzB,IAAA,MAAM,EAAEC,WAAW,EAAEC,uBAAuB,EAAE,GAAGC,6BAAAA,EAAAA;AAEjD,IAAA,IAAI,CAACF,WAAAA,CAAYL,MAAM,EAAE,OAAO,IAAA;IAEhC,qBACExD,cAAA,CAACgE,YAAMC,WAAW,EAAA;AACfJ,QAAAA,QAAAA,EAAAA,WAAAA,CAAYpD,GAAG,CAAC,CAACyD,UAAAA,EAAYC,sBAC5BnE,cAACoE,CAAAA,gBAAAA,EAAAA;gBAA8BC,QAAU,EAAA,OAAA;AACvC,gBAAA,QAAA,gBAAArE,cAACsE,CAAAA,mCAAAA,EAAAA;oBACCJ,UAAYA,EAAAA,UAAAA;AACZK,oBAAAA,QAAAA,EAAU,IAAMT,uBAAwBK,CAAAA,KAAAA;;AAHlCD,aAAAA,EAAAA,UAAAA,CAAWM,QAAQ,CAAA;;AASrC,CAAA;AAEA,MAAMC,kBAAqB,GAAA,IAAA;IACzB,MAAM,EAAEC,WAAW,EAAE,GAAGX,6BAAAA,EAAAA;IACxB,MAAM,EAAEY,cAAc,EAAE,GAAGC,sCAAAA,EAAAA;IAC3B,MAAM,EAAEC,eAAe,EAAE,GAAGC,qCAAAA,EAAAA;IAC5B,MAAM,EAAErF,CAAC,EAAE,GAAGC,+BAAAA,EAAAA;AAEd,IAAA,MAAMqF,eAAepC,YAAyB,CAAA,IAAA,CAAA;IAE9C,MAAMqC,WAAAA,GAAcvF,EAAE,kCAAoC,EAAA,oBAAA,CAAA;IAC1D,MAAMwF,cAAAA,GAAiBxF,EAAE,mCAAqC,EAAA,aAAA,CAAA;IAC9D,MAAMyF,eAAAA,GAAkBzF,EAAE,oCAAsC,EAAA,cAAA,CAAA;IAChE,MAAM0F,eAAAA,GAAkB1F,EAAE,oCAAsC,EAAA,mBAAA,CAAA;AAEhE,IAAA,qBACES,eAACkF,CAAAA,qBAAAA,EAAAA;QACCC,KAAOL,EAAAA,WAAAA;AACPM,QAAAA,IAAAA,gBAAMtF,cAACuF,CAAAA,eAAAA,EAAAA,EAAAA,CAAAA;QACPC,GAAKC,EAAAA,uBAAAA;QACLC,gBAAiB,EAAA,SAAA;;0BAEjB1F,cAAC2F,CAAAA,mBAAAA,EAAAA;AAAS/E,gBAAAA,SAAAA,gBAAWZ,cAAC4F,CAAAA,UAAAA,EAAAA,EAAAA,CAAAA;AAASC,gBAAAA,QAAAA,EAAU,IAAMlB,cAAAA,EAAAA;AAC5CM,gBAAAA,QAAAA,EAAAA;;0BAGHjF,cAAC2F,CAAAA,mBAAAA,EAAAA;AAAS/E,gBAAAA,SAAAA,gBAAWZ,cAAC8F,CAAAA,mBAAAA,EAAAA,EAAAA,CAAAA;AAAcD,gBAAAA,QAAAA,EAAU,IAAMhB,eAAAA,EAAAA;AACjDM,gBAAAA,QAAAA,EAAAA;;0BAGHnF,cAAC+F,CAAAA,OAAAA,EAAAA;gBAAMC,IAAK,EAAA,MAAA;gBAAOC,MAAO,EAAA,SAAA;gBAAUC,QAAQ,EAAA,IAAA;gBAACC,MAAM,EAAA,IAAA;gBAACxC,GAAKoB,EAAAA;;0BACzD/E,cAAC2F,CAAAA,mBAAAA,EAAAA;AACC/E,gBAAAA,SAAAA,gBAAWZ,cAACoG,CAAAA,YAAAA,EAAAA,EAAAA,CAAAA;gBACZP,QAAU,EAAA,IAAA;oBACR,MAAMQ,SAAAA,GAAYtB,aAAa/B,OAAO;AACtC,oBAAA,IAAI,CAACqD,SAAW,EAAA;oBAChBA,SAAUC,CAAAA,QAAQ,GAAG,CAAC7E,CAAAA,GAAAA;wBACpB,MAAM8E,MAAAA,GAAS9E,EAAE8E,MAAM;wBACvB,IAAIA,MAAAA,CAAOC,KAAK,IAAID,MAAAA,CAAOC,KAAK,CAAChD,MAAM,GAAG,CAAG,EAAA;AAC3CkB,4BAAAA,WAAAA,CAAY+B,KAAMC,CAAAA,IAAI,CAACH,MAAAA,CAAOC,KAAK,CAAA,CAAA;AACrC;AACF,qBAAA;AAEAH,oBAAAA,SAAAA,CAAUM,KAAK,EAAA;AACjB,iBAAA;AAECzB,gBAAAA,QAAAA,EAAAA;;;;AAIT,CAAA;AAEA;;AAEkG,qGAElG,MAAM0B,WAAAA,GAAc,CAAC,EAAEC,QAAQ,EAAwB,GAAA;AACrD,IAAA,MAAM,CAACC,IAAAA,EAAMC,OAAQ,CAAA,GAAGC,cAAS,CAAA,EAAA,CAAA;IAEjCnE,eAAU,CAAA,IAAA;AACR,QAAA,MAAMoE,SAAY,GAAA;AAAC,YAAA,EAAA;AAAI,YAAA,GAAA;AAAK,YAAA,IAAA;AAAM,YAAA;AAAM,SAAA;AACxC,QAAA,IAAIC,YAAe,GAAA,CAAA;AAEnB,QAAA,MAAMC,WAAWC,WAAY,CAAA,IAAA;AAC3BF,YAAAA,YAAAA,GAAe,CAACA,YAAAA,GAAe,CAAA,IAAKD,UAAUzD,MAAM;YACpDuD,OAAQE,CAAAA,SAAS,CAACC,YAAa,CAAA,CAAA;AACjC,SAAA,EAAG;AAEH,QAAA,OAAO,IAAMG,aAAcF,CAAAA,QAAAA,CAAAA;AAC7B,KAAA,EAAG,EAAE,CAAA;AAEL,IAAA,qBACEjH,eAACI,CAAAA,uBAAAA,EAAAA;QAAWC,OAAQ,EAAA,IAAA;QAAK+G,SAAU,EAAA,YAAA;;AAChCT,YAAAA,QAAAA;AACAC,YAAAA;;;AAGP,CAAA;AAEA,MAAMS,YAAY,CAACC,KAAAA,GAAAA;AACjB,IAAA,MAAM,EAAEzB,KAAK,EAAE0B,YAAY,EAAEC,iBAAiB,EAAEjF,QAAQ,EAAEG,MAAM,EAAE+E,IAAI,EAAE9D,WAAW,EAAE,GACnFrE,0BAAAA,EAAAA;IACF,MAAM,EAAEC,CAAC,EAAE,GAAGC,+BAAAA,EAAAA;IAEd,MAAM6D,SAAAA,GAAYX,MAAW,KAAA,WAAA,IAAeA,MAAW,KAAA,WAAA;IAEvD,qBACE5C,cAAA,CAAAoD,mBAAA,EAAA;AACE,QAAA,QAAA,gBAAApD,cAAC4H,CAAAA,MAAAA,EAAAA;YAAKC,QAAUJ,EAAAA,YAAAA;AAAe,YAAA,GAAGD,KAAK;oCACrCtH,eAAA,CAAC8D,YAAM8D,IAAI,EAAA;gBAACvE,SAAWA,EAAAA,SAAAA;gBAAWlD,GAAK,EAAA,CAAA;;AACrC,kCAAAH,eAAA,CAAC8D,YAAM+D,MAAM,EAAA;wBAACC,SAAW,EAAA,CAAA;;AACtBvF,4BAAAA,QAAAA,CAASe,MAAM,KAAK,CACnB,kBAAAxD,cAAA,CAACgE,YAAMiE,UAAU,EAAA;AACf,gCAAA,QAAA,gBAAAjI,cAACV,CAAAA,eAAAA,EAAAA,EAAAA;;4BAGJiE,SACC,kBAAAvD,cAAA,CAACgE,YAAMiE,UAAU,EAAA;AACf,gCAAA,QAAA,gBAAAjI,cAAC4G,CAAAA,WAAAA,EAAAA;AAAanH,oCAAAA,QAAAA,EAAAA,CAAAA,CAAE,qBAAuB,EAAA,uBAAA;;;;;AAI7C,kCAAAS,eAAA,CAAC8D,YAAMkE,OAAO,EAAA;;AACZ,0CAAAlI,cAAA,CAACmI,kBAASC,IAAI,EAAA,EAAA,CAAA;0CACdpI,cAAC4D,CAAAA,kBAAAA,EAAAA,EAAAA,CAAAA;0CACD5D,cAACoE,CAAAA,gBAAAA,EAAAA;gCAAIiE,aAAe,EAAA,CAAA;AAClB,gCAAA,QAAA,gBAAArI,cAACsI,CAAAA,mCAAAA,EAAAA;oCACCC,KAAOxC,EAAAA,KAAAA;oCACPyC,QAAUd,EAAAA,iBAAAA;oCACVG,QAAUJ,EAAAA,YAAAA;AACVgB,oCAAAA,WAAAA,EAAahJ,EAAE,wBAA0B,EAAA,kBAAA;;;AAG7C,0CAAAS,eAAA,CAAC8D,YAAM0E,OAAO,EAAA;;kDACZ1I,cAACyE,CAAAA,kBAAAA,EAAAA,EAAAA,CAAAA;AAEAlB,oCAAAA,SAAAA,iBACCvD,cAACyF,CAAAA,uBAAAA,EAAAA;AACCJ,wCAAAA,KAAAA,EAAO5F,EAAE,+BAAiC,EAAA,MAAA,CAAA;wCAC1CuG,IAAK,EAAA,QAAA;wCACLzF,OAAQ,EAAA,SAAA;AACRS,wCAAAA,OAAAA,EAAS,CAACS,CAAAA,GAAAA;AACRA,4CAAAA,CAAAA,CAAEkH,cAAc,EAAA;AAChBhB,4CAAAA,IAAAA,EAAAA;AACF,yCAAA;AAEA,wCAAA,QAAA,gBAAA3H,cAAC4I,CAAAA,iBAAAA,EAAAA,EAAAA;uDAGH5I,cAACyF,CAAAA,uBAAAA,EAAAA;AACCJ,wCAAAA,KAAAA,EAAO5F,EAAE,4BAA8B,EAAA,MAAA,CAAA;wCACvCc,OAAQ,EAAA,SAAA;;wCAERsI,QAAU9C,EAAAA,KAAAA,CAAM+C,IAAI,EAAGtF,CAAAA,MAAM,KAAK,CAAKK,IAAAA,WAAAA,CAAYL,MAAM,KAAK,CAAA;AAE9D,wCAAA,QAAA,gBAAAxD,cAAC+I,CAAAA,aAAAA,EAAAA,EAAAA;;;;;;;;;;AASnB,CAAA;AAEA;;AAEkG,2GAE5FC,IAAO,GAAA,IAAA;AACX,IAAA,MAAM,EAAE7G,KAAK,EAAEM,QAAQ,EAAEwG,UAAU,EAAEC,aAAa,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,KAAK,EAAE,GAC9E7J,0BAAAA,EAAAA;IACF,MAAM,EAAEkF,WAAW,EAAE,GAAGX,6BAAAA,EAAAA;IACxB,MAAM,EAAEtE,CAAC,EAAE,GAAGC,+BAAAA,EAAAA;AACd,IAAA,MAAM4J,QAAQC,yBAAc,CAAA,MAAA,EAAQ,CAACC,CAAAA,GAAMA,EAAEF,KAAK,CAAA;AAClD,IAAA,MAAMG,qBAAqBC,sBAAW,CAAA,MAAA,EAAQ,CAACJ,KAAAA,GAAUA,MAAMG,kBAAkB,CAAA;;AAGjF,IAAA,MAAME,eAAeF,kBAAuB,KAAA,YAAA;;IAG5C5G,eAAU,CAAA,IAAA;QACR,MAAM+G,kBAAAA,GACJN,KAAMO,CAAAA,OAAO,IACbP,KAAAA,CAAMQ,KAAK,CAACC,kBAAkB,EAAEC,WAAgB,KAAA,CAAA;AAChD,QAAA,CAACV,KAAMQ,CAAAA,KAAK,CAACC,kBAAkB,EAAEE,WAAAA;QAEnC,IAAIL,kBAAAA,IAAsB,CAACX,UAAAA,IAAcE,QAAU,EAAA;AACjDA,YAAAA,QAAAA,EAAAA;AACF;KACC,EAAA;QACDG,KAAMQ,CAAAA,KAAK,CAACC,kBAAkB,EAAEC,WAAAA;QAChCV,KAAMQ,CAAAA,KAAK,CAACC,kBAAkB,EAAEE,WAAAA;AAChCX,QAAAA,KAAAA,CAAMO,OAAO;AACbZ,QAAAA,UAAAA;AACAE,QAAAA;AACD,KAAA,CAAA;;IAGD,MAAMe,aAAAA,GAAgBzK,EAAE,yBAA2B,EAAA,WAAA,CAAA;IACnD,MAAM0K,cAAAA,GAAiB1K,EAAE,0BAA4B,EAAA,YAAA,CAAA;IACrD,MAAM2K,eAAAA,GAAkB3K,EAAE,2BAA6B,EAAA,kBAAA,CAAA;IACvD,MAAM4K,YAAAA,GAAe5K,EAAE,2BAA6B,EAAA,kBAAA,CAAA;IACpD,MAAM6K,kBAAAA,GAAqB7K,EACzB,sCACA,EAAA,8BAAA,CAAA;;IAIF,IAAI,CAACyJ,iBAAiBS,YAAc,EAAA;QAClC,OAAO,IAAA;AACT;IAEA,qBACE3J,cAAA,CAACmI,kBAASL,IAAI,EAAA;AACZyC,QAAAA,UAAAA,EAAY,CAAC/D,KAAAA,GAAAA;YACX9B,WAAY8B,CAAAA,KAAAA,CAAAA;AACd,SAAA;gCAEAtG,eAAA,CAACsK,oBAAM1C,IAAI,EAAA;YACT/G,IAAK,EAAA,IAAA;YACL0J,QAAS,EAAA,cAAA;YACTC,MAAQzB,EAAAA,UAAAA;AACR0B,YAAAA,QAAAA,EAAU1B,aAAaG,SAAYD,GAAAA,QAAAA;AACnCyB,YAAAA,UAAAA,gBACE5K,cAACyF,CAAAA,uBAAAA,EAAAA;AACCzE,gBAAAA,OAAAA,EAASiI,aAAaG,SAAYD,GAAAA,QAAAA;AAClC9D,gBAAAA,KAAAA,EAAO4D,aAAakB,cAAiBD,GAAAA,aAAAA;gBACrC3J,OAAQ,EAAA,SAAA;AAER,gBAAA,QAAA,gBAAAP,cAACa,CAAAA,aAAAA,EAAAA,EAAAA;;;AAIL,8BAAAX,eAAA,CAACsK,oBAAMzC,MAAM,EAAA;;sCACX/H,cAACM,CAAAA,uBAAAA,EAAAA;4BAAWkF,GAAI,EAAA,IAAA;4BAAKjF,OAAQ,EAAA,OAAA;4BAAQC,UAAW,EAAA,MAAA;sCAC7C2B,KAASkI,IAAAA;;sCAEZnK,eAACb,CAAAA,iBAAAA,EAAAA;4BAAKgB,GAAK,EAAA,CAAA;;8CACTL,cAACyF,CAAAA,uBAAAA,EAAAA;oCAAWJ,KAAO+E,EAAAA,eAAAA;oCAAiB7J,OAAQ,EAAA,OAAA;oCAAQS,OAASqI,EAAAA,KAAAA;AAC3D,oCAAA,QAAA,gBAAArJ,cAAC6K,CAAAA,UAAAA,EAAAA,EAAAA;;AAEH,8CAAA7K,cAAA,CAACwK,oBAAMM,KAAK,EAAA;oCAACzF,KAAO8E,EAAAA;;;;;;AAIxB,8BAAAnK,cAAA,CAACwK,oBAAMO,IAAI,EAAA;AACT,oBAAA,QAAA,gBAAA7K,eAAC4J,CAAAA,iBAAAA,CAAMC,kBAAkB,CAACiB,MAAM,EAAA;;4BAC7B,CAACvI,QAAAA,CAASe,MAAM,iBACfxD,cAACM,CAAAA,uBAAAA,EAAAA;gCAAWC,OAAQ,EAAA,IAAA;gCAAK+G,SAAU,EAAA,YAAA;AAChCgD,gCAAAA,QAAAA,EAAAA;AAED,6BAAA,CAAA,GAAA,IAAA;0CACJtK,cAACwC,CAAAA,WAAAA,EAAAA;gCAAYC,QAAUA,EAAAA;;;;;AAI3B,8BAAAzC,cAAA,CAACwK,oBAAMS,MAAM,EAAA;AACX,oBAAA,QAAA,gBAAAjL,cAACuH,CAAAA,SAAAA,EAAAA,EAAAA;;;;;AAKX;;;;"}