@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,377 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var designSystem = require('@strapi/design-system');
6
+ var ImagePreview = require('./components/ImagePreview.js');
7
+ var StepModal = require('./components/StepModal.js');
8
+ var useAttachments = require('./hooks/useAttachments.js');
9
+ var useFigmaUpload = require('./hooks/useFigmaUpload.js');
10
+ var useTranslations = require('./hooks/useTranslations.js');
11
+ var ChatProvider = require('./providers/ChatProvider.js');
12
+
13
+ const UploadFigmaContext = /*#__PURE__*/ React.createContext({
14
+ isFigmaUploadOpen: false,
15
+ submitOnFinish: false,
16
+ openFigmaUpload: ()=>{},
17
+ closeFigmaUpload: ()=>{}
18
+ });
19
+ const useUploadFigmaToChat = ()=>{
20
+ const context = React.useContext(UploadFigmaContext);
21
+ if (!context) {
22
+ throw new Error('useUploadFigmaToChat must be used within an UploadFigmaToChatProvider');
23
+ }
24
+ return context;
25
+ };
26
+ const UploadFigmaToChatProvider = ({ children })=>{
27
+ const [isFigmaUploadOpen, setIsFigmaUploadOpen] = React.useState(false); // Default to false
28
+ const [submitOnFinish, setSubmitOnFinish] = React.useState(false);
29
+ const openFigmaUpload = (submitOnFinishParam)=>{
30
+ setIsFigmaUploadOpen(true);
31
+ setSubmitOnFinish(submitOnFinishParam ?? false);
32
+ };
33
+ const closeFigmaUpload = ()=>setIsFigmaUploadOpen(false);
34
+ return /*#__PURE__*/ jsxRuntime.jsxs(UploadFigmaContext.Provider, {
35
+ value: {
36
+ isFigmaUploadOpen,
37
+ submitOnFinish,
38
+ openFigmaUpload,
39
+ closeFigmaUpload
40
+ },
41
+ children: [
42
+ isFigmaUploadOpen && /*#__PURE__*/ jsxRuntime.jsx(UploadFigmaModal, {}),
43
+ children
44
+ ]
45
+ });
46
+ };
47
+ const FigmaUrlInputStep = ({ figmaUrl, setFigmaUrl })=>{
48
+ const { t } = useTranslations.useTranslations();
49
+ const { isLoading } = StepModal.useStepModal();
50
+ const [showingTokenInput, setShowingTokenInput] = React.useState(!useFigmaUpload.hasFigmaToken());
51
+ const [figmaToken, setFigmaToken] = React.useState(useFigmaUpload.getFigmaToken);
52
+ // Handle saving token and returning to URL input
53
+ const handleSaveToken = ()=>{
54
+ if (figmaToken.trim()) {
55
+ useFigmaUpload.saveFigmaToken(figmaToken);
56
+ setShowingTokenInput(false);
57
+ }
58
+ };
59
+ // If we need to show token step, render the token input
60
+ if (showingTokenInput) {
61
+ return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
62
+ direction: "column",
63
+ gap: 6,
64
+ alignItems: "start",
65
+ children: [
66
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
67
+ direction: "column",
68
+ gap: 2,
69
+ alignItems: "start",
70
+ children: [
71
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
72
+ variant: "beta",
73
+ children: t('chat.figma-upload.token-title', 'Enter Figma API Token')
74
+ }),
75
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
76
+ variant: "omega",
77
+ textColor: "neutral600",
78
+ children: t('chat.figma-upload.token-description', 'To access your Figma designs, you need to provide a personal access token. This will be stored securely in your browser.')
79
+ }),
80
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Link, {
81
+ href: "https://help.figma.com/hc/en-us/articles/8085703771159-Manage-personal-access-tokens",
82
+ isExternal: true,
83
+ children: t('chat.figma-upload.token-help', 'How to get a Figma API token')
84
+ })
85
+ ]
86
+ }),
87
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
88
+ width: "100%",
89
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.TextInput, {
90
+ name: "figma-token",
91
+ placeholder: t('chat.figma-upload.token-placeholder', 'Enter Figma API token'),
92
+ "aria-label": t('chat.figma-upload.token-placeholder', 'Enter Figma API token'),
93
+ value: figmaToken,
94
+ onChange: (e)=>setFigmaToken(e.target.value),
95
+ width: "100%",
96
+ disabled: isLoading,
97
+ type: "password"
98
+ })
99
+ }),
100
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
101
+ gap: 2,
102
+ children: [
103
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
104
+ onClick: handleSaveToken,
105
+ disabled: !figmaToken.trim(),
106
+ variant: "secondary",
107
+ children: t('chat.figma-upload.save-token', 'Save token')
108
+ }),
109
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
110
+ onClick: ()=>setShowingTokenInput(false),
111
+ variant: "tertiary",
112
+ disabled: !useFigmaUpload.hasFigmaToken(),
113
+ children: t('chat.figma-upload.cancel', 'Cancel')
114
+ })
115
+ ]
116
+ })
117
+ ]
118
+ });
119
+ }
120
+ // Otherwise render the URL input
121
+ return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
122
+ direction: "column",
123
+ gap: 6,
124
+ alignItems: "start",
125
+ children: [
126
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
127
+ direction: "column",
128
+ gap: 2,
129
+ alignItems: "start",
130
+ width: "100%",
131
+ children: [
132
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
133
+ justifyContent: "space-between",
134
+ alignItems: "center",
135
+ width: "100%",
136
+ children: [
137
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
138
+ variant: "beta",
139
+ children: t('chat.figma-upload.title', 'Import Figma Design')
140
+ }),
141
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
142
+ onClick: ()=>setShowingTokenInput(true),
143
+ variant: "tertiary",
144
+ size: "S",
145
+ children: t('chat.figma-upload.edit-token', 'Edit API token')
146
+ })
147
+ ]
148
+ }),
149
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
150
+ variant: "omega",
151
+ textColor: "neutral600",
152
+ children: t('chat.figma-upload.description', 'Ask to turn your designs into schemas by attaching a link to one or multiple frames in your Figma files. (Max 15 frames)')
153
+ })
154
+ ]
155
+ }),
156
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
157
+ width: "100%",
158
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.TextInput, {
159
+ name: "figma-url",
160
+ placeholder: t('chat.figma-upload.url-placeholder', 'Enter Figma URL'),
161
+ "aria-label": t('chat.figma-upload.url-placeholder', 'Enter Figma URL'),
162
+ value: figmaUrl,
163
+ onChange: (e)=>setFigmaUrl(e.target.value),
164
+ width: "100%",
165
+ disabled: isLoading
166
+ })
167
+ })
168
+ ]
169
+ });
170
+ };
171
+ const FigmaImageDisplayStep = ({ images, selectedImages, setSelectedImages })=>{
172
+ const { t } = useTranslations.useTranslations();
173
+ // Handle select/deselect all
174
+ const toggleSelectAll = ()=>{
175
+ if (selectedImages.length === images.length) {
176
+ // Deselect all if all or max allowed are selected
177
+ setSelectedImages([]);
178
+ } else {
179
+ // Select all images up to the max limit
180
+ const allImageIds = images.map((img)=>img.id);
181
+ setSelectedImages(allImageIds);
182
+ }
183
+ };
184
+ if (images.length === 0) {
185
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
186
+ direction: "column",
187
+ gap: 4,
188
+ alignItems: "center",
189
+ padding: 4,
190
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
191
+ variant: "omega",
192
+ children: t('chat.figma-upload.no-images', 'No frames found in the Figma file.')
193
+ })
194
+ });
195
+ }
196
+ // Handle individual frame selection
197
+ const handleFrameSelection = (frameId)=>{
198
+ const newSelection = selectedImages.includes(frameId) ? selectedImages.filter((id)=>id !== frameId) : [
199
+ ...selectedImages,
200
+ frameId
201
+ ];
202
+ setSelectedImages(newSelection);
203
+ };
204
+ return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
205
+ direction: "column",
206
+ gap: 4,
207
+ alignItems: "start",
208
+ width: "100%",
209
+ height: "min(45vh, 400px)",
210
+ children: [
211
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
212
+ justifyContent: "space-between",
213
+ width: "100%",
214
+ alignItems: "center",
215
+ children: [
216
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
217
+ variant: "beta",
218
+ children: t('chat.figma-upload.select-images', 'Select Frames to Import')
219
+ }),
220
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
221
+ gap: 3,
222
+ alignItems: "center",
223
+ children: [
224
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Typography, {
225
+ children: [
226
+ selectedImages.length,
227
+ " of ",
228
+ images.length,
229
+ " selected"
230
+ ]
231
+ }),
232
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
233
+ onClick: toggleSelectAll,
234
+ type: "button",
235
+ variant: "secondary",
236
+ children: selectedImages.length === images.length ? t('chat.figma-upload.deselect-all', 'Deselect All') : t('chat.figma-upload.select-all', 'Select All')
237
+ })
238
+ ]
239
+ })
240
+ ]
241
+ }),
242
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
243
+ paddingRight: 4,
244
+ width: "100%",
245
+ style: {
246
+ overflowY: 'auto'
247
+ },
248
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Root, {
249
+ gap: 4,
250
+ children: images.map((frame, index)=>{
251
+ const isSelected = selectedImages.includes(frame.id);
252
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
253
+ col: 6,
254
+ padding: '1px',
255
+ children: /*#__PURE__*/ jsxRuntime.jsx(ImagePreview.ImagePreview, {
256
+ imageUrl: frame.url,
257
+ imageName: frame.filename || `Frame ${index + 1}`,
258
+ selected: isSelected,
259
+ onSelect: ()=>handleFrameSelection(frame.id)
260
+ })
261
+ }, frame.id);
262
+ })
263
+ })
264
+ })
265
+ ]
266
+ });
267
+ };
268
+ /* -------------------------------------------------------------------------------------------------
269
+ * Modal
270
+ * -----------------------------------------------------------------------------------------------*/ const UploadFigmaModal = ()=>{
271
+ const [figmaUrl, setFigmaUrl] = React.useState('');
272
+ const [figmaImages, setFigmaImages] = React.useState([]);
273
+ const [selectedImages, setSelectedImages] = React.useState([]);
274
+ const { t } = useTranslations.useTranslations();
275
+ const { addAttachments } = useAttachments.useAttachments();
276
+ const { isFigmaUploadOpen, closeFigmaUpload, submitOnFinish } = useUploadFigmaToChat();
277
+ const { input, setInput, setMessages, sendMessage, openChat } = ChatProvider.useStrapiChat();
278
+ const { processFigmaUrl, isLoading, error } = useFigmaUpload.useFigmaUpload({
279
+ onSuccess: (images)=>{
280
+ setFigmaImages(images);
281
+ // Initialize with first 15 images selected
282
+ const initialSelection = images.slice(0, 15).map((img)=>img.id);
283
+ setSelectedImages(initialSelection);
284
+ }
285
+ });
286
+ const handleImportStep = async ()=>{
287
+ await processFigmaUrl(figmaUrl);
288
+ return true;
289
+ };
290
+ // Validate if the URL is a valid Figma URL
291
+ const isValidFigmaUrl = (url)=>{
292
+ if (!url) return false;
293
+ try {
294
+ const urlObj = new URL(url);
295
+ return urlObj.hostname === 'www.figma.com' || urlObj.hostname === 'figma.com';
296
+ } catch (e) {
297
+ return false;
298
+ }
299
+ };
300
+ const handleCancel = ()=>{
301
+ // Reset all state on cancel
302
+ setFigmaUrl('');
303
+ setFigmaImages([]);
304
+ setSelectedImages([]);
305
+ closeFigmaUpload();
306
+ };
307
+ const handleComplete = ()=>{
308
+ // Only attach the selected images
309
+ const selectedFigmaImages = figmaImages.filter((img)=>selectedImages.includes(img.id));
310
+ if (selectedFigmaImages.length === 0) {
311
+ closeFigmaUpload();
312
+ return;
313
+ }
314
+ // Ensure chat is opened
315
+ openChat();
316
+ if (submitOnFinish) {
317
+ // Auto-submit a message to chat with attachments
318
+ sendMessage({
319
+ role: 'user',
320
+ parts: [
321
+ {
322
+ type: 'text',
323
+ text: 'Create schemas from the attached images'
324
+ },
325
+ ...selectedFigmaImages
326
+ ]
327
+ });
328
+ closeFigmaUpload();
329
+ } else {
330
+ // If input is empty, set a predefined message
331
+ if (!input) {
332
+ setInput('Create schemas from the attached images');
333
+ }
334
+ addAttachments(selectedFigmaImages);
335
+ closeFigmaUpload();
336
+ }
337
+ };
338
+ return /*#__PURE__*/ jsxRuntime.jsxs(StepModal.StepModal, {
339
+ open: isFigmaUploadOpen,
340
+ onOpenChange: (isOpen)=>{
341
+ if (!isOpen) handleCancel();
342
+ },
343
+ title: t('chat.figma-upload.header', 'Import from Figma'),
344
+ onCancel: handleCancel,
345
+ onComplete: handleComplete,
346
+ children: [
347
+ /*#__PURE__*/ jsxRuntime.jsx(StepModal.StepModal.Step, {
348
+ title: t('chat.figma-upload.step1-title', 'Enter Figma URL'),
349
+ nextLabel: t('chat.figma-upload.import-button', 'Import'),
350
+ cancelLabel: t('form.button.cancel', 'Cancel'),
351
+ disableNext: !figmaUrl || isLoading || !isValidFigmaUrl(figmaUrl),
352
+ onNext: handleImportStep,
353
+ children: /*#__PURE__*/ jsxRuntime.jsx(FigmaUrlInputStep, {
354
+ figmaUrl: figmaUrl,
355
+ setFigmaUrl: setFigmaUrl,
356
+ error: error
357
+ })
358
+ }),
359
+ /*#__PURE__*/ jsxRuntime.jsx(StepModal.StepModal.Step, {
360
+ title: t('chat.figma-upload.step2-title', 'Preview Images'),
361
+ nextLabel: t('form.button.finish', 'Finish'),
362
+ backLabel: t('form.button.back', 'Back'),
363
+ disableNext: selectedImages.length === 0,
364
+ children: /*#__PURE__*/ jsxRuntime.jsx(FigmaImageDisplayStep, {
365
+ images: figmaImages,
366
+ selectedImages: selectedImages,
367
+ setSelectedImages: setSelectedImages
368
+ })
369
+ })
370
+ ]
371
+ });
372
+ };
373
+
374
+ exports.UploadFigmaModal = UploadFigmaModal;
375
+ exports.UploadFigmaToChatProvider = UploadFigmaToChatProvider;
376
+ exports.useUploadFigmaToChat = useUploadFigmaToChat;
377
+ //# sourceMappingURL=UploadFigmaModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UploadFigmaModal.js","sources":["../../../../admin/src/components/AIChat/UploadFigmaModal.tsx"],"sourcesContent":["import { createContext, useContext, useState } from 'react';\n\nimport { Flex, Typography, Box, TextInput, Grid, Button, Link } from '@strapi/design-system'; // Added Link\n\nimport { ImagePreview } from './components/ImagePreview';\nimport { StepModal, useStepModal } from './components/StepModal';\nimport { useAttachments } from './hooks/useAttachments';\nimport {\n FigmaImage,\n useFigmaUpload,\n getFigmaToken,\n saveFigmaToken,\n hasFigmaToken,\n} from './hooks/useFigmaUpload';\nimport { useTranslations } from './hooks/useTranslations';\nimport { useStrapiChat } from './providers/ChatProvider';\n\n/* -------------------------------------------------------------------------------------------------\n * Provider\n * -----------------------------------------------------------------------------------------------*/\ninterface UploadFigmaContextType {\n isFigmaUploadOpen: boolean;\n submitOnFinish: boolean;\n openFigmaUpload: (submitOnFinish?: boolean) => void;\n closeFigmaUpload: () => void;\n}\n\nconst UploadFigmaContext = createContext<UploadFigmaContextType>({\n isFigmaUploadOpen: false,\n submitOnFinish: false,\n openFigmaUpload: () => {},\n closeFigmaUpload: () => {},\n});\n\nexport const useUploadFigmaToChat = () => {\n const context = useContext(UploadFigmaContext);\n if (!context) {\n throw new Error('useUploadFigmaToChat must be used within an UploadFigmaToChatProvider');\n }\n return context;\n};\n\nexport const UploadFigmaToChatProvider = ({ children }: { children: React.ReactNode }) => {\n const [isFigmaUploadOpen, setIsFigmaUploadOpen] = useState(false); // Default to false\n const [submitOnFinish, setSubmitOnFinish] = useState(false);\n\n const openFigmaUpload = (submitOnFinishParam?: boolean) => {\n setIsFigmaUploadOpen(true);\n setSubmitOnFinish(submitOnFinishParam ?? false);\n };\n\n const closeFigmaUpload = () => setIsFigmaUploadOpen(false);\n\n return (\n <UploadFigmaContext.Provider\n value={{ isFigmaUploadOpen, submitOnFinish, openFigmaUpload, closeFigmaUpload }}\n >\n {isFigmaUploadOpen && <UploadFigmaModal />}\n {children}\n </UploadFigmaContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Step 1 - Input Figma URL\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FigmaUrlInputStepProps {\n figmaUrl: string;\n setFigmaUrl: (url: string) => void;\n error: string | null; // Error state from useFigmaUpload\n}\n\nconst FigmaUrlInputStep = ({ figmaUrl, setFigmaUrl }: FigmaUrlInputStepProps) => {\n const { t } = useTranslations();\n const { isLoading } = useStepModal();\n const [showingTokenInput, setShowingTokenInput] = useState(!hasFigmaToken());\n const [figmaToken, setFigmaToken] = useState<string>(getFigmaToken);\n\n // Handle saving token and returning to URL input\n const handleSaveToken = () => {\n if (figmaToken.trim()) {\n saveFigmaToken(figmaToken);\n setShowingTokenInput(false);\n }\n };\n\n // If we need to show token step, render the token input\n if (showingTokenInput) {\n return (\n <Flex direction=\"column\" gap={6} alignItems=\"start\">\n <Flex direction=\"column\" gap={2} alignItems=\"start\">\n <Typography variant=\"beta\">\n {t('chat.figma-upload.token-title', 'Enter Figma API Token')}\n </Typography>\n <Typography variant=\"omega\" textColor=\"neutral600\">\n {t(\n 'chat.figma-upload.token-description',\n 'To access your Figma designs, you need to provide a personal access token. This will be stored securely in your browser.'\n )}\n </Typography>\n <Link\n href=\"https://help.figma.com/hc/en-us/articles/8085703771159-Manage-personal-access-tokens\"\n isExternal\n >\n {t('chat.figma-upload.token-help', 'How to get a Figma API token')}\n </Link>\n </Flex>\n\n <Box width=\"100%\">\n <TextInput\n name=\"figma-token\"\n placeholder={t('chat.figma-upload.token-placeholder', 'Enter Figma API token')}\n aria-label={t('chat.figma-upload.token-placeholder', 'Enter Figma API token')}\n value={figmaToken}\n onChange={(e) => setFigmaToken(e.target.value)}\n width=\"100%\"\n disabled={isLoading}\n type=\"password\"\n />\n </Box>\n\n <Flex gap={2}>\n <Button onClick={handleSaveToken} disabled={!figmaToken.trim()} variant=\"secondary\">\n {t('chat.figma-upload.save-token', 'Save token')}\n </Button>\n <Button\n onClick={() => setShowingTokenInput(false)}\n variant=\"tertiary\"\n disabled={!hasFigmaToken()}\n >\n {t('chat.figma-upload.cancel', 'Cancel')}\n </Button>\n </Flex>\n </Flex>\n );\n }\n\n // Otherwise render the URL input\n return (\n <Flex direction=\"column\" gap={6} alignItems=\"start\">\n <Flex direction=\"column\" gap={2} alignItems=\"start\" width=\"100%\">\n <Flex justifyContent=\"space-between\" alignItems=\"center\" width=\"100%\">\n <Typography variant=\"beta\">\n {t('chat.figma-upload.title', 'Import Figma Design')}\n </Typography>\n <Button onClick={() => setShowingTokenInput(true)} variant=\"tertiary\" size=\"S\">\n {t('chat.figma-upload.edit-token', 'Edit API token')}\n </Button>\n </Flex>\n <Typography variant=\"omega\" textColor=\"neutral600\">\n {t(\n 'chat.figma-upload.description',\n 'Ask to turn your designs into schemas by attaching a link to one or multiple frames in your Figma files. (Max 15 frames)'\n )}\n </Typography>\n </Flex>\n\n <Box width=\"100%\">\n <TextInput\n name=\"figma-url\"\n placeholder={t('chat.figma-upload.url-placeholder', 'Enter Figma URL')}\n aria-label={t('chat.figma-upload.url-placeholder', 'Enter Figma URL')}\n value={figmaUrl}\n onChange={(e) => setFigmaUrl(e.target.value)}\n width=\"100%\"\n disabled={isLoading}\n />\n </Box>\n\n {/* {error && (\n <Box padding={3} background=\"danger100\" color=\"danger600\" borderRadius=\"4px\" width=\"100%\">\n <Typography variant=\"pi\">{error}</Typography>\n </Box>\n )} */}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Step 2 - Display Figma Images\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FigmaImageDisplayStepProps {\n images: FigmaImage[];\n selectedImages: string[];\n setSelectedImages: (images: string[]) => void;\n}\n\nconst FigmaImageDisplayStep = ({\n images,\n selectedImages,\n setSelectedImages,\n}: FigmaImageDisplayStepProps) => {\n const { t } = useTranslations();\n\n // Handle select/deselect all\n const toggleSelectAll = () => {\n if (selectedImages.length === images.length) {\n // Deselect all if all or max allowed are selected\n setSelectedImages([]);\n } else {\n // Select all images up to the max limit\n const allImageIds = images.map((img) => img.id);\n setSelectedImages(allImageIds);\n }\n };\n\n if (images.length === 0) {\n return (\n <Flex direction=\"column\" gap={4} alignItems=\"center\" padding={4}>\n <Typography variant=\"omega\">\n {t('chat.figma-upload.no-images', 'No frames found in the Figma file.')}\n </Typography>\n </Flex>\n );\n }\n\n // Handle individual frame selection\n const handleFrameSelection = (frameId: string) => {\n const newSelection = selectedImages.includes(frameId)\n ? selectedImages.filter((id) => id !== frameId)\n : [...selectedImages, frameId];\n\n setSelectedImages(newSelection);\n };\n\n return (\n <Flex direction=\"column\" gap={4} alignItems=\"start\" width=\"100%\" height=\"min(45vh, 400px)\">\n <Flex justifyContent=\"space-between\" width=\"100%\" alignItems=\"center\">\n <Typography variant=\"beta\">\n {t('chat.figma-upload.select-images', 'Select Frames to Import')}\n </Typography>\n <Flex gap={3} alignItems=\"center\">\n <Typography>\n {selectedImages.length} of {images.length} selected\n </Typography>\n <Button onClick={toggleSelectAll} type=\"button\" variant=\"secondary\">\n {/* Determine if select all button should show \"Select All\" or \"Deselect All\" */}\n {selectedImages.length === images.length\n ? t('chat.figma-upload.deselect-all', 'Deselect All')\n : t('chat.figma-upload.select-all', 'Select All')}\n </Button>\n </Flex>\n </Flex>\n\n <Box paddingRight={4} width=\"100%\" style={{ overflowY: 'auto' }}>\n <Grid.Root gap={4}>\n {images.map((frame, index) => {\n const isSelected = selectedImages.includes(frame.id);\n return (\n <Grid.Item key={frame.id} col={6} padding={'1px'}>\n <ImagePreview\n imageUrl={frame.url}\n imageName={frame.filename || `Frame ${index + 1}`}\n selected={isSelected}\n onSelect={() => handleFrameSelection(frame.id)}\n />\n </Grid.Item>\n );\n })}\n </Grid.Root>\n </Box>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Modal\n * -----------------------------------------------------------------------------------------------*/\nexport const UploadFigmaModal = () => {\n const [figmaUrl, setFigmaUrl] = useState<string>('');\n const [figmaImages, setFigmaImages] = useState<FigmaImage[]>([]);\n const [selectedImages, setSelectedImages] = useState<string[]>([]);\n const { t } = useTranslations();\n\n const { addAttachments } = useAttachments();\n const { isFigmaUploadOpen, closeFigmaUpload, submitOnFinish } = useUploadFigmaToChat();\n const { input, setInput, setMessages, sendMessage, openChat } = useStrapiChat();\n const { processFigmaUrl, isLoading, error } = useFigmaUpload({\n onSuccess: (images) => {\n setFigmaImages(images);\n // Initialize with first 15 images selected\n const initialSelection = images.slice(0, 15).map((img) => img.id);\n setSelectedImages(initialSelection);\n },\n });\n\n const handleImportStep = async () => {\n await processFigmaUrl(figmaUrl);\n return true;\n };\n\n // Validate if the URL is a valid Figma URL\n const isValidFigmaUrl = (url: string) => {\n if (!url) return false;\n try {\n const urlObj = new URL(url);\n return urlObj.hostname === 'www.figma.com' || urlObj.hostname === 'figma.com';\n } catch (e) {\n return false;\n }\n };\n\n const handleCancel = () => {\n // Reset all state on cancel\n setFigmaUrl('');\n setFigmaImages([]);\n setSelectedImages([]);\n closeFigmaUpload();\n };\n\n const handleComplete = () => {\n // Only attach the selected images\n const selectedFigmaImages = figmaImages.filter((img) => selectedImages.includes(img.id));\n if (selectedFigmaImages.length === 0) {\n closeFigmaUpload();\n return;\n }\n\n // Ensure chat is opened\n openChat();\n\n if (submitOnFinish) {\n // Auto-submit a message to chat with attachments\n sendMessage({\n role: 'user',\n parts: [\n { type: 'text', text: 'Create schemas from the attached images' },\n ...selectedFigmaImages,\n ],\n });\n\n closeFigmaUpload();\n } else {\n // If input is empty, set a predefined message\n if (!input) {\n setInput('Create schemas from the attached images');\n }\n addAttachments(selectedFigmaImages);\n closeFigmaUpload();\n }\n };\n\n return (\n <StepModal\n open={isFigmaUploadOpen}\n onOpenChange={(isOpen) => {\n if (!isOpen) handleCancel();\n }}\n title={t('chat.figma-upload.header', 'Import from Figma')}\n onCancel={handleCancel}\n onComplete={handleComplete}\n >\n <StepModal.Step\n title={t('chat.figma-upload.step1-title', 'Enter Figma URL')}\n nextLabel={t('chat.figma-upload.import-button', 'Import')}\n cancelLabel={t('form.button.cancel', 'Cancel')}\n disableNext={!figmaUrl || isLoading || !isValidFigmaUrl(figmaUrl)}\n onNext={handleImportStep}\n >\n <FigmaUrlInputStep figmaUrl={figmaUrl} setFigmaUrl={setFigmaUrl} error={error} />\n </StepModal.Step>\n\n <StepModal.Step\n title={t('chat.figma-upload.step2-title', 'Preview Images')}\n nextLabel={t('form.button.finish', 'Finish')}\n backLabel={t('form.button.back', 'Back')}\n disableNext={selectedImages.length === 0}\n >\n <FigmaImageDisplayStep\n images={figmaImages}\n selectedImages={selectedImages}\n setSelectedImages={setSelectedImages}\n />\n </StepModal.Step>\n </StepModal>\n );\n};\n"],"names":["UploadFigmaContext","createContext","isFigmaUploadOpen","submitOnFinish","openFigmaUpload","closeFigmaUpload","useUploadFigmaToChat","context","useContext","Error","UploadFigmaToChatProvider","children","setIsFigmaUploadOpen","useState","setSubmitOnFinish","submitOnFinishParam","_jsxs","Provider","value","_jsx","UploadFigmaModal","FigmaUrlInputStep","figmaUrl","setFigmaUrl","t","useTranslations","isLoading","useStepModal","showingTokenInput","setShowingTokenInput","hasFigmaToken","figmaToken","setFigmaToken","getFigmaToken","handleSaveToken","trim","saveFigmaToken","Flex","direction","gap","alignItems","Typography","variant","textColor","Link","href","isExternal","Box","width","TextInput","name","placeholder","aria-label","onChange","e","target","disabled","type","Button","onClick","justifyContent","size","FigmaImageDisplayStep","images","selectedImages","setSelectedImages","toggleSelectAll","length","allImageIds","map","img","id","padding","handleFrameSelection","frameId","newSelection","includes","filter","height","paddingRight","style","overflowY","Grid","Root","frame","index","isSelected","Item","col","ImagePreview","imageUrl","url","imageName","filename","selected","onSelect","figmaImages","setFigmaImages","addAttachments","useAttachments","input","setInput","setMessages","sendMessage","openChat","useStrapiChat","processFigmaUrl","error","useFigmaUpload","onSuccess","initialSelection","slice","handleImportStep","isValidFigmaUrl","urlObj","URL","hostname","handleCancel","handleComplete","selectedFigmaImages","role","parts","text","StepModal","open","onOpenChange","isOpen","title","onCancel","onComplete","Step","nextLabel","cancelLabel","disableNext","onNext","backLabel"],"mappings":"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"}