@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,373 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useContext, useState, createContext } from 'react';
3
+ import { Flex, Typography, Link, Box, TextInput, Button, Grid } from '@strapi/design-system';
4
+ import { ImagePreview } from './components/ImagePreview.mjs';
5
+ import { StepModal, useStepModal } from './components/StepModal.mjs';
6
+ import { useAttachments } from './hooks/useAttachments.mjs';
7
+ import { useFigmaUpload, hasFigmaToken, getFigmaToken, saveFigmaToken } from './hooks/useFigmaUpload.mjs';
8
+ import { useTranslations } from './hooks/useTranslations.mjs';
9
+ import { useStrapiChat } from './providers/ChatProvider.mjs';
10
+
11
+ const UploadFigmaContext = /*#__PURE__*/ createContext({
12
+ isFigmaUploadOpen: false,
13
+ submitOnFinish: false,
14
+ openFigmaUpload: ()=>{},
15
+ closeFigmaUpload: ()=>{}
16
+ });
17
+ const useUploadFigmaToChat = ()=>{
18
+ const context = useContext(UploadFigmaContext);
19
+ if (!context) {
20
+ throw new Error('useUploadFigmaToChat must be used within an UploadFigmaToChatProvider');
21
+ }
22
+ return context;
23
+ };
24
+ const UploadFigmaToChatProvider = ({ children })=>{
25
+ const [isFigmaUploadOpen, setIsFigmaUploadOpen] = useState(false); // Default to false
26
+ const [submitOnFinish, setSubmitOnFinish] = useState(false);
27
+ const openFigmaUpload = (submitOnFinishParam)=>{
28
+ setIsFigmaUploadOpen(true);
29
+ setSubmitOnFinish(submitOnFinishParam ?? false);
30
+ };
31
+ const closeFigmaUpload = ()=>setIsFigmaUploadOpen(false);
32
+ return /*#__PURE__*/ jsxs(UploadFigmaContext.Provider, {
33
+ value: {
34
+ isFigmaUploadOpen,
35
+ submitOnFinish,
36
+ openFigmaUpload,
37
+ closeFigmaUpload
38
+ },
39
+ children: [
40
+ isFigmaUploadOpen && /*#__PURE__*/ jsx(UploadFigmaModal, {}),
41
+ children
42
+ ]
43
+ });
44
+ };
45
+ const FigmaUrlInputStep = ({ figmaUrl, setFigmaUrl })=>{
46
+ const { t } = useTranslations();
47
+ const { isLoading } = useStepModal();
48
+ const [showingTokenInput, setShowingTokenInput] = useState(!hasFigmaToken());
49
+ const [figmaToken, setFigmaToken] = useState(getFigmaToken);
50
+ // Handle saving token and returning to URL input
51
+ const handleSaveToken = ()=>{
52
+ if (figmaToken.trim()) {
53
+ saveFigmaToken(figmaToken);
54
+ setShowingTokenInput(false);
55
+ }
56
+ };
57
+ // If we need to show token step, render the token input
58
+ if (showingTokenInput) {
59
+ return /*#__PURE__*/ jsxs(Flex, {
60
+ direction: "column",
61
+ gap: 6,
62
+ alignItems: "start",
63
+ children: [
64
+ /*#__PURE__*/ jsxs(Flex, {
65
+ direction: "column",
66
+ gap: 2,
67
+ alignItems: "start",
68
+ children: [
69
+ /*#__PURE__*/ jsx(Typography, {
70
+ variant: "beta",
71
+ children: t('chat.figma-upload.token-title', 'Enter Figma API Token')
72
+ }),
73
+ /*#__PURE__*/ jsx(Typography, {
74
+ variant: "omega",
75
+ textColor: "neutral600",
76
+ 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.')
77
+ }),
78
+ /*#__PURE__*/ jsx(Link, {
79
+ href: "https://help.figma.com/hc/en-us/articles/8085703771159-Manage-personal-access-tokens",
80
+ isExternal: true,
81
+ children: t('chat.figma-upload.token-help', 'How to get a Figma API token')
82
+ })
83
+ ]
84
+ }),
85
+ /*#__PURE__*/ jsx(Box, {
86
+ width: "100%",
87
+ children: /*#__PURE__*/ jsx(TextInput, {
88
+ name: "figma-token",
89
+ placeholder: t('chat.figma-upload.token-placeholder', 'Enter Figma API token'),
90
+ "aria-label": t('chat.figma-upload.token-placeholder', 'Enter Figma API token'),
91
+ value: figmaToken,
92
+ onChange: (e)=>setFigmaToken(e.target.value),
93
+ width: "100%",
94
+ disabled: isLoading,
95
+ type: "password"
96
+ })
97
+ }),
98
+ /*#__PURE__*/ jsxs(Flex, {
99
+ gap: 2,
100
+ children: [
101
+ /*#__PURE__*/ jsx(Button, {
102
+ onClick: handleSaveToken,
103
+ disabled: !figmaToken.trim(),
104
+ variant: "secondary",
105
+ children: t('chat.figma-upload.save-token', 'Save token')
106
+ }),
107
+ /*#__PURE__*/ jsx(Button, {
108
+ onClick: ()=>setShowingTokenInput(false),
109
+ variant: "tertiary",
110
+ disabled: !hasFigmaToken(),
111
+ children: t('chat.figma-upload.cancel', 'Cancel')
112
+ })
113
+ ]
114
+ })
115
+ ]
116
+ });
117
+ }
118
+ // Otherwise render the URL input
119
+ return /*#__PURE__*/ jsxs(Flex, {
120
+ direction: "column",
121
+ gap: 6,
122
+ alignItems: "start",
123
+ children: [
124
+ /*#__PURE__*/ jsxs(Flex, {
125
+ direction: "column",
126
+ gap: 2,
127
+ alignItems: "start",
128
+ width: "100%",
129
+ children: [
130
+ /*#__PURE__*/ jsxs(Flex, {
131
+ justifyContent: "space-between",
132
+ alignItems: "center",
133
+ width: "100%",
134
+ children: [
135
+ /*#__PURE__*/ jsx(Typography, {
136
+ variant: "beta",
137
+ children: t('chat.figma-upload.title', 'Import Figma Design')
138
+ }),
139
+ /*#__PURE__*/ jsx(Button, {
140
+ onClick: ()=>setShowingTokenInput(true),
141
+ variant: "tertiary",
142
+ size: "S",
143
+ children: t('chat.figma-upload.edit-token', 'Edit API token')
144
+ })
145
+ ]
146
+ }),
147
+ /*#__PURE__*/ jsx(Typography, {
148
+ variant: "omega",
149
+ textColor: "neutral600",
150
+ 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)')
151
+ })
152
+ ]
153
+ }),
154
+ /*#__PURE__*/ jsx(Box, {
155
+ width: "100%",
156
+ children: /*#__PURE__*/ jsx(TextInput, {
157
+ name: "figma-url",
158
+ placeholder: t('chat.figma-upload.url-placeholder', 'Enter Figma URL'),
159
+ "aria-label": t('chat.figma-upload.url-placeholder', 'Enter Figma URL'),
160
+ value: figmaUrl,
161
+ onChange: (e)=>setFigmaUrl(e.target.value),
162
+ width: "100%",
163
+ disabled: isLoading
164
+ })
165
+ })
166
+ ]
167
+ });
168
+ };
169
+ const FigmaImageDisplayStep = ({ images, selectedImages, setSelectedImages })=>{
170
+ const { t } = useTranslations();
171
+ // Handle select/deselect all
172
+ const toggleSelectAll = ()=>{
173
+ if (selectedImages.length === images.length) {
174
+ // Deselect all if all or max allowed are selected
175
+ setSelectedImages([]);
176
+ } else {
177
+ // Select all images up to the max limit
178
+ const allImageIds = images.map((img)=>img.id);
179
+ setSelectedImages(allImageIds);
180
+ }
181
+ };
182
+ if (images.length === 0) {
183
+ return /*#__PURE__*/ jsx(Flex, {
184
+ direction: "column",
185
+ gap: 4,
186
+ alignItems: "center",
187
+ padding: 4,
188
+ children: /*#__PURE__*/ jsx(Typography, {
189
+ variant: "omega",
190
+ children: t('chat.figma-upload.no-images', 'No frames found in the Figma file.')
191
+ })
192
+ });
193
+ }
194
+ // Handle individual frame selection
195
+ const handleFrameSelection = (frameId)=>{
196
+ const newSelection = selectedImages.includes(frameId) ? selectedImages.filter((id)=>id !== frameId) : [
197
+ ...selectedImages,
198
+ frameId
199
+ ];
200
+ setSelectedImages(newSelection);
201
+ };
202
+ return /*#__PURE__*/ jsxs(Flex, {
203
+ direction: "column",
204
+ gap: 4,
205
+ alignItems: "start",
206
+ width: "100%",
207
+ height: "min(45vh, 400px)",
208
+ children: [
209
+ /*#__PURE__*/ jsxs(Flex, {
210
+ justifyContent: "space-between",
211
+ width: "100%",
212
+ alignItems: "center",
213
+ children: [
214
+ /*#__PURE__*/ jsx(Typography, {
215
+ variant: "beta",
216
+ children: t('chat.figma-upload.select-images', 'Select Frames to Import')
217
+ }),
218
+ /*#__PURE__*/ jsxs(Flex, {
219
+ gap: 3,
220
+ alignItems: "center",
221
+ children: [
222
+ /*#__PURE__*/ jsxs(Typography, {
223
+ children: [
224
+ selectedImages.length,
225
+ " of ",
226
+ images.length,
227
+ " selected"
228
+ ]
229
+ }),
230
+ /*#__PURE__*/ jsx(Button, {
231
+ onClick: toggleSelectAll,
232
+ type: "button",
233
+ variant: "secondary",
234
+ children: selectedImages.length === images.length ? t('chat.figma-upload.deselect-all', 'Deselect All') : t('chat.figma-upload.select-all', 'Select All')
235
+ })
236
+ ]
237
+ })
238
+ ]
239
+ }),
240
+ /*#__PURE__*/ jsx(Box, {
241
+ paddingRight: 4,
242
+ width: "100%",
243
+ style: {
244
+ overflowY: 'auto'
245
+ },
246
+ children: /*#__PURE__*/ jsx(Grid.Root, {
247
+ gap: 4,
248
+ children: images.map((frame, index)=>{
249
+ const isSelected = selectedImages.includes(frame.id);
250
+ return /*#__PURE__*/ jsx(Grid.Item, {
251
+ col: 6,
252
+ padding: '1px',
253
+ children: /*#__PURE__*/ jsx(ImagePreview, {
254
+ imageUrl: frame.url,
255
+ imageName: frame.filename || `Frame ${index + 1}`,
256
+ selected: isSelected,
257
+ onSelect: ()=>handleFrameSelection(frame.id)
258
+ })
259
+ }, frame.id);
260
+ })
261
+ })
262
+ })
263
+ ]
264
+ });
265
+ };
266
+ /* -------------------------------------------------------------------------------------------------
267
+ * Modal
268
+ * -----------------------------------------------------------------------------------------------*/ const UploadFigmaModal = ()=>{
269
+ const [figmaUrl, setFigmaUrl] = useState('');
270
+ const [figmaImages, setFigmaImages] = useState([]);
271
+ const [selectedImages, setSelectedImages] = useState([]);
272
+ const { t } = useTranslations();
273
+ const { addAttachments } = useAttachments();
274
+ const { isFigmaUploadOpen, closeFigmaUpload, submitOnFinish } = useUploadFigmaToChat();
275
+ const { input, setInput, setMessages, sendMessage, openChat } = useStrapiChat();
276
+ const { processFigmaUrl, isLoading, error } = useFigmaUpload({
277
+ onSuccess: (images)=>{
278
+ setFigmaImages(images);
279
+ // Initialize with first 15 images selected
280
+ const initialSelection = images.slice(0, 15).map((img)=>img.id);
281
+ setSelectedImages(initialSelection);
282
+ }
283
+ });
284
+ const handleImportStep = async ()=>{
285
+ await processFigmaUrl(figmaUrl);
286
+ return true;
287
+ };
288
+ // Validate if the URL is a valid Figma URL
289
+ const isValidFigmaUrl = (url)=>{
290
+ if (!url) return false;
291
+ try {
292
+ const urlObj = new URL(url);
293
+ return urlObj.hostname === 'www.figma.com' || urlObj.hostname === 'figma.com';
294
+ } catch (e) {
295
+ return false;
296
+ }
297
+ };
298
+ const handleCancel = ()=>{
299
+ // Reset all state on cancel
300
+ setFigmaUrl('');
301
+ setFigmaImages([]);
302
+ setSelectedImages([]);
303
+ closeFigmaUpload();
304
+ };
305
+ const handleComplete = ()=>{
306
+ // Only attach the selected images
307
+ const selectedFigmaImages = figmaImages.filter((img)=>selectedImages.includes(img.id));
308
+ if (selectedFigmaImages.length === 0) {
309
+ closeFigmaUpload();
310
+ return;
311
+ }
312
+ // Ensure chat is opened
313
+ openChat();
314
+ if (submitOnFinish) {
315
+ // Auto-submit a message to chat with attachments
316
+ sendMessage({
317
+ role: 'user',
318
+ parts: [
319
+ {
320
+ type: 'text',
321
+ text: 'Create schemas from the attached images'
322
+ },
323
+ ...selectedFigmaImages
324
+ ]
325
+ });
326
+ closeFigmaUpload();
327
+ } else {
328
+ // If input is empty, set a predefined message
329
+ if (!input) {
330
+ setInput('Create schemas from the attached images');
331
+ }
332
+ addAttachments(selectedFigmaImages);
333
+ closeFigmaUpload();
334
+ }
335
+ };
336
+ return /*#__PURE__*/ jsxs(StepModal, {
337
+ open: isFigmaUploadOpen,
338
+ onOpenChange: (isOpen)=>{
339
+ if (!isOpen) handleCancel();
340
+ },
341
+ title: t('chat.figma-upload.header', 'Import from Figma'),
342
+ onCancel: handleCancel,
343
+ onComplete: handleComplete,
344
+ children: [
345
+ /*#__PURE__*/ jsx(StepModal.Step, {
346
+ title: t('chat.figma-upload.step1-title', 'Enter Figma URL'),
347
+ nextLabel: t('chat.figma-upload.import-button', 'Import'),
348
+ cancelLabel: t('form.button.cancel', 'Cancel'),
349
+ disableNext: !figmaUrl || isLoading || !isValidFigmaUrl(figmaUrl),
350
+ onNext: handleImportStep,
351
+ children: /*#__PURE__*/ jsx(FigmaUrlInputStep, {
352
+ figmaUrl: figmaUrl,
353
+ setFigmaUrl: setFigmaUrl,
354
+ error: error
355
+ })
356
+ }),
357
+ /*#__PURE__*/ jsx(StepModal.Step, {
358
+ title: t('chat.figma-upload.step2-title', 'Preview Images'),
359
+ nextLabel: t('form.button.finish', 'Finish'),
360
+ backLabel: t('form.button.back', 'Back'),
361
+ disableNext: selectedImages.length === 0,
362
+ children: /*#__PURE__*/ jsx(FigmaImageDisplayStep, {
363
+ images: figmaImages,
364
+ selectedImages: selectedImages,
365
+ setSelectedImages: setSelectedImages
366
+ })
367
+ })
368
+ ]
369
+ });
370
+ };
371
+
372
+ export { UploadFigmaModal, UploadFigmaToChatProvider, useUploadFigmaToChat };
373
+ //# sourceMappingURL=UploadFigmaModal.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UploadFigmaModal.mjs","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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"}
@@ -0,0 +1,46 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var designSystem = require('@strapi/design-system');
5
+ var Icons = require('@strapi/icons');
6
+
7
+ const COLORS = {
8
+ danger: {
9
+ background: 'danger100',
10
+ borderColor: 'danger200',
11
+ textColor: 'danger700'
12
+ },
13
+ warning: {
14
+ background: 'warning100',
15
+ borderColor: 'warning200',
16
+ textColor: 'warning600'
17
+ }
18
+ };
19
+ const Alert = ({ title, variant = 'danger' })=>{
20
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
21
+ padding: 3,
22
+ background: COLORS[variant].background,
23
+ borderColor: COLORS[variant].borderColor,
24
+ hasRadius: true,
25
+ width: "100%",
26
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
27
+ gap: 2,
28
+ children: [
29
+ /*#__PURE__*/ jsxRuntime.jsx(Icons.WarningCircle, {
30
+ style: {
31
+ minWidth: '16px'
32
+ },
33
+ fill: COLORS[variant].textColor
34
+ }),
35
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
36
+ variant: "omega",
37
+ textColor: COLORS[variant].textColor,
38
+ children: title
39
+ })
40
+ ]
41
+ })
42
+ });
43
+ };
44
+
45
+ exports.Alert = Alert;
46
+ //# sourceMappingURL=Alert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Alert.js","sources":["../../../../../admin/src/components/AIChat/components/Alert.tsx"],"sourcesContent":["import { Box, Flex, Typography } from '@strapi/design-system';\nimport { WarningCircle } from '@strapi/icons';\n\ninterface AlertProps {\n title: string;\n variant?: 'danger' | 'warning';\n}\n\nconst COLORS = {\n danger: {\n background: 'danger100',\n borderColor: 'danger200',\n textColor: 'danger700',\n },\n warning: {\n background: 'warning100',\n borderColor: 'warning200',\n textColor: 'warning600',\n },\n};\n\nexport const Alert = ({ title, variant = 'danger' }: AlertProps) => {\n return (\n <Box\n padding={3}\n background={COLORS[variant].background}\n borderColor={COLORS[variant].borderColor}\n hasRadius\n width=\"100%\"\n >\n <Flex gap={2}>\n <WarningCircle style={{ minWidth: '16px' }} fill={COLORS[variant].textColor} />\n <Typography variant=\"omega\" textColor={COLORS[variant].textColor}>\n {title}\n </Typography>\n </Flex>\n </Box>\n );\n};\n"],"names":["COLORS","danger","background","borderColor","textColor","warning","Alert","title","variant","_jsx","Box","padding","hasRadius","width","_jsxs","Flex","gap","WarningCircle","style","minWidth","fill","Typography"],"mappings":";;;;;;AAQA,MAAMA,MAAS,GAAA;IACbC,MAAQ,EAAA;QACNC,UAAY,EAAA,WAAA;QACZC,WAAa,EAAA,WAAA;QACbC,SAAW,EAAA;AACb,KAAA;IACAC,OAAS,EAAA;QACPH,UAAY,EAAA,YAAA;QACZC,WAAa,EAAA,YAAA;QACbC,SAAW,EAAA;AACb;AACF,CAAA;AAEO,MAAME,QAAQ,CAAC,EAAEC,KAAK,EAAEC,OAAAA,GAAU,QAAQ,EAAc,GAAA;AAC7D,IAAA,qBACEC,cAACC,CAAAA,gBAAAA,EAAAA;QACCC,OAAS,EAAA,CAAA;AACTT,QAAAA,UAAAA,EAAYF,MAAM,CAACQ,OAAQ,CAAA,CAACN,UAAU;AACtCC,QAAAA,WAAAA,EAAaH,MAAM,CAACQ,OAAQ,CAAA,CAACL,WAAW;QACxCS,SAAS,EAAA,IAAA;QACTC,KAAM,EAAA,MAAA;AAEN,QAAA,QAAA,gBAAAC,eAACC,CAAAA,iBAAAA,EAAAA;YAAKC,GAAK,EAAA,CAAA;;8BACTP,cAACQ,CAAAA,mBAAAA,EAAAA;oBAAcC,KAAO,EAAA;wBAAEC,QAAU,EAAA;AAAO,qBAAA;AAAGC,oBAAAA,IAAAA,EAAMpB,MAAM,CAACQ,OAAQ,CAAA,CAACJ;;8BAClEK,cAACY,CAAAA,uBAAAA,EAAAA;oBAAWb,OAAQ,EAAA,OAAA;AAAQJ,oBAAAA,SAAAA,EAAWJ,MAAM,CAACQ,OAAQ,CAAA,CAACJ,SAAS;AAC7DG,oBAAAA,QAAAA,EAAAA;;;;;AAKX;;;;"}
@@ -0,0 +1,44 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { Box, Flex, Typography } from '@strapi/design-system';
3
+ import { WarningCircle } from '@strapi/icons';
4
+
5
+ const COLORS = {
6
+ danger: {
7
+ background: 'danger100',
8
+ borderColor: 'danger200',
9
+ textColor: 'danger700'
10
+ },
11
+ warning: {
12
+ background: 'warning100',
13
+ borderColor: 'warning200',
14
+ textColor: 'warning600'
15
+ }
16
+ };
17
+ const Alert = ({ title, variant = 'danger' })=>{
18
+ return /*#__PURE__*/ jsx(Box, {
19
+ padding: 3,
20
+ background: COLORS[variant].background,
21
+ borderColor: COLORS[variant].borderColor,
22
+ hasRadius: true,
23
+ width: "100%",
24
+ children: /*#__PURE__*/ jsxs(Flex, {
25
+ gap: 2,
26
+ children: [
27
+ /*#__PURE__*/ jsx(WarningCircle, {
28
+ style: {
29
+ minWidth: '16px'
30
+ },
31
+ fill: COLORS[variant].textColor
32
+ }),
33
+ /*#__PURE__*/ jsx(Typography, {
34
+ variant: "omega",
35
+ textColor: COLORS[variant].textColor,
36
+ children: title
37
+ })
38
+ ]
39
+ })
40
+ });
41
+ };
42
+
43
+ export { Alert };
44
+ //# sourceMappingURL=Alert.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Alert.mjs","sources":["../../../../../admin/src/components/AIChat/components/Alert.tsx"],"sourcesContent":["import { Box, Flex, Typography } from '@strapi/design-system';\nimport { WarningCircle } from '@strapi/icons';\n\ninterface AlertProps {\n title: string;\n variant?: 'danger' | 'warning';\n}\n\nconst COLORS = {\n danger: {\n background: 'danger100',\n borderColor: 'danger200',\n textColor: 'danger700',\n },\n warning: {\n background: 'warning100',\n borderColor: 'warning200',\n textColor: 'warning600',\n },\n};\n\nexport const Alert = ({ title, variant = 'danger' }: AlertProps) => {\n return (\n <Box\n padding={3}\n background={COLORS[variant].background}\n borderColor={COLORS[variant].borderColor}\n hasRadius\n width=\"100%\"\n >\n <Flex gap={2}>\n <WarningCircle style={{ minWidth: '16px' }} fill={COLORS[variant].textColor} />\n <Typography variant=\"omega\" textColor={COLORS[variant].textColor}>\n {title}\n </Typography>\n </Flex>\n </Box>\n );\n};\n"],"names":["COLORS","danger","background","borderColor","textColor","warning","Alert","title","variant","_jsx","Box","padding","hasRadius","width","_jsxs","Flex","gap","WarningCircle","style","minWidth","fill","Typography"],"mappings":";;;;AAQA,MAAMA,MAAS,GAAA;IACbC,MAAQ,EAAA;QACNC,UAAY,EAAA,WAAA;QACZC,WAAa,EAAA,WAAA;QACbC,SAAW,EAAA;AACb,KAAA;IACAC,OAAS,EAAA;QACPH,UAAY,EAAA,YAAA;QACZC,WAAa,EAAA,YAAA;QACbC,SAAW,EAAA;AACb;AACF,CAAA;AAEO,MAAME,QAAQ,CAAC,EAAEC,KAAK,EAAEC,OAAAA,GAAU,QAAQ,EAAc,GAAA;AAC7D,IAAA,qBACEC,GAACC,CAAAA,GAAAA,EAAAA;QACCC,OAAS,EAAA,CAAA;AACTT,QAAAA,UAAAA,EAAYF,MAAM,CAACQ,OAAQ,CAAA,CAACN,UAAU;AACtCC,QAAAA,WAAAA,EAAaH,MAAM,CAACQ,OAAQ,CAAA,CAACL,WAAW;QACxCS,SAAS,EAAA,IAAA;QACTC,KAAM,EAAA,MAAA;AAEN,QAAA,QAAA,gBAAAC,IAACC,CAAAA,IAAAA,EAAAA;YAAKC,GAAK,EAAA,CAAA;;8BACTP,GAACQ,CAAAA,aAAAA,EAAAA;oBAAcC,KAAO,EAAA;wBAAEC,QAAU,EAAA;AAAO,qBAAA;AAAGC,oBAAAA,IAAAA,EAAMpB,MAAM,CAACQ,OAAQ,CAAA,CAACJ;;8BAClEK,GAACY,CAAAA,UAAAA,EAAAA;oBAAWb,OAAQ,EAAA,OAAA;AAAQJ,oBAAAA,SAAAA,EAAWJ,MAAM,CAACQ,OAAQ,CAAA,CAACJ,SAAS;AAC7DG,oBAAAA,QAAAA,EAAAA;;;;;AAKX;;;;"}
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ var designSystem = require('@strapi/design-system');
4
+ var styledComponents = require('styled-components');
5
+
6
+ /**
7
+ * Translates and fades in from a specified direction.
8
+ */ const AnimatedBox = styledComponents.styled(designSystem.Box)`
9
+ opacity: 0;
10
+ transform: ${({ $direction = 'up' })=>$direction === 'up' ? 'translateY(10px)' : 'translateX(-10px)'};
11
+
12
+ @media (prefers-reduced-motion: no-preference) {
13
+ animation: ${({ $direction = 'up' })=>$direction === 'up' ? 'appearUp' : 'appearLeft'}
14
+ ${({ theme })=>theme.motion.timings['200']}
15
+ ${({ theme })=>theme.motion.easings.easeOutQuad} forwards;
16
+ }
17
+
18
+ @keyframes appearUp {
19
+ to {
20
+ opacity: 1;
21
+ transform: translateY(0);
22
+ }
23
+ }
24
+
25
+ @keyframes appearLeft {
26
+ to {
27
+ opacity: 1;
28
+ transform: translateX(0);
29
+ }
30
+ }
31
+ `;
32
+
33
+ exports.AnimatedBox = AnimatedBox;
34
+ //# sourceMappingURL=AnimatedBox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimatedBox.js","sources":["../../../../../admin/src/components/AIChat/components/AnimatedBox.tsx"],"sourcesContent":["import { Box } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\n/**\n * Translates and fades in from a specified direction.\n */\nexport const AnimatedBox = styled(Box)<{ $direction?: 'up' | 'left' }>`\n opacity: 0;\n transform: ${({ $direction = 'up' }) =>\n $direction === 'up' ? 'translateY(10px)' : 'translateX(-10px)'};\n\n @media (prefers-reduced-motion: no-preference) {\n animation: ${({ $direction = 'up' }) => ($direction === 'up' ? 'appearUp' : 'appearLeft')}\n ${({ theme }) => theme.motion.timings['200']}\n ${({ theme }) => theme.motion.easings.easeOutQuad} forwards;\n }\n\n @keyframes appearUp {\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n @keyframes appearLeft {\n to {\n opacity: 1;\n transform: translateX(0);\n }\n }\n`;\n"],"names":["AnimatedBox","styled","Box","$direction","theme","motion","timings","easings","easeOutQuad"],"mappings":";;;;;AAGA;;AAEC,IACM,MAAMA,WAAcC,GAAAA,uBAAAA,CAAOC,iBAAoC;;aAEzD,EAAE,CAAC,EAAEC,UAAa,GAAA,IAAI,EAAE,GACjCA,UAAAA,KAAe,IAAO,GAAA,kBAAA,GAAqB,mBAAoB,CAAA;;;eAGpD,EAAE,CAAC,EAAEA,UAAa,GAAA,IAAI,EAAE,GAAMA,UAAAA,KAAe,IAAO,GAAA,UAAA,GAAa,YAAc;MACxF,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAACC,OAAO,CAAC,KAAA,CAAM;MAC5C,EAAE,CAAC,EAAEF,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAACE,OAAO,CAACC,WAAW,CAAC;;;;;;;;;;;;;;;;AAgBxD;;;;"}
@@ -0,0 +1,32 @@
1
+ import { Box } from '@strapi/design-system';
2
+ import { styled } from 'styled-components';
3
+
4
+ /**
5
+ * Translates and fades in from a specified direction.
6
+ */ const AnimatedBox = styled(Box)`
7
+ opacity: 0;
8
+ transform: ${({ $direction = 'up' })=>$direction === 'up' ? 'translateY(10px)' : 'translateX(-10px)'};
9
+
10
+ @media (prefers-reduced-motion: no-preference) {
11
+ animation: ${({ $direction = 'up' })=>$direction === 'up' ? 'appearUp' : 'appearLeft'}
12
+ ${({ theme })=>theme.motion.timings['200']}
13
+ ${({ theme })=>theme.motion.easings.easeOutQuad} forwards;
14
+ }
15
+
16
+ @keyframes appearUp {
17
+ to {
18
+ opacity: 1;
19
+ transform: translateY(0);
20
+ }
21
+ }
22
+
23
+ @keyframes appearLeft {
24
+ to {
25
+ opacity: 1;
26
+ transform: translateX(0);
27
+ }
28
+ }
29
+ `;
30
+
31
+ export { AnimatedBox };
32
+ //# sourceMappingURL=AnimatedBox.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimatedBox.mjs","sources":["../../../../../admin/src/components/AIChat/components/AnimatedBox.tsx"],"sourcesContent":["import { Box } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\n/**\n * Translates and fades in from a specified direction.\n */\nexport const AnimatedBox = styled(Box)<{ $direction?: 'up' | 'left' }>`\n opacity: 0;\n transform: ${({ $direction = 'up' }) =>\n $direction === 'up' ? 'translateY(10px)' : 'translateX(-10px)'};\n\n @media (prefers-reduced-motion: no-preference) {\n animation: ${({ $direction = 'up' }) => ($direction === 'up' ? 'appearUp' : 'appearLeft')}\n ${({ theme }) => theme.motion.timings['200']}\n ${({ theme }) => theme.motion.easings.easeOutQuad} forwards;\n }\n\n @keyframes appearUp {\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n @keyframes appearLeft {\n to {\n opacity: 1;\n transform: translateX(0);\n }\n }\n`;\n"],"names":["AnimatedBox","styled","Box","$direction","theme","motion","timings","easings","easeOutQuad"],"mappings":";;;AAGA;;AAEC,IACM,MAAMA,WAAcC,GAAAA,MAAAA,CAAOC,IAAoC;;aAEzD,EAAE,CAAC,EAAEC,UAAa,GAAA,IAAI,EAAE,GACjCA,UAAAA,KAAe,IAAO,GAAA,kBAAA,GAAqB,mBAAoB,CAAA;;;eAGpD,EAAE,CAAC,EAAEA,UAAa,GAAA,IAAI,EAAE,GAAMA,UAAAA,KAAe,IAAO,GAAA,UAAA,GAAa,YAAc;MACxF,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAACC,OAAO,CAAC,KAAA,CAAM;MAC5C,EAAE,CAAC,EAAEF,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAACE,OAAO,CAACC,WAAW,CAAC;;;;;;;;;;;;;;;;AAgBxD;;;;"}