@strapi/content-type-builder 5.25.0 → 5.26.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 (328) hide show
  1. package/dist/admin/components/AIChat/Chat.js +431 -0
  2. package/dist/admin/components/AIChat/Chat.js.map +1 -0
  3. package/dist/admin/components/AIChat/Chat.mjs +429 -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/DataManager/DataManagerContext.js.map +1 -1
  158. package/dist/admin/components/DataManager/DataManagerContext.mjs.map +1 -1
  159. package/dist/admin/components/DataManager/reducer.js +48 -6
  160. package/dist/admin/components/DataManager/reducer.js.map +1 -1
  161. package/dist/admin/components/DataManager/reducer.mjs +48 -6
  162. package/dist/admin/components/DataManager/reducer.mjs.map +1 -1
  163. package/dist/admin/components/FormModal/utils/canEditContentType.js.map +1 -1
  164. package/dist/admin/components/FormModal/utils/canEditContentType.mjs.map +1 -1
  165. package/dist/admin/pages/App/index.js +60 -29
  166. package/dist/admin/pages/App/index.js.map +1 -1
  167. package/dist/admin/pages/App/index.mjs +62 -31
  168. package/dist/admin/pages/App/index.mjs.map +1 -1
  169. package/dist/admin/pages/ListView/EmptyState.js +75 -9
  170. package/dist/admin/pages/ListView/EmptyState.js.map +1 -1
  171. package/dist/admin/pages/ListView/EmptyState.mjs +77 -11
  172. package/dist/admin/pages/ListView/EmptyState.mjs.map +1 -1
  173. package/dist/admin/src/components/AIChat/Chat.d.ts +2 -0
  174. package/dist/admin/src/components/AIChat/FeedbackModal.d.ts +13 -0
  175. package/dist/admin/src/components/AIChat/UploadCodeModal.d.ts +12 -0
  176. package/dist/admin/src/components/AIChat/UploadFigmaModal.d.ts +12 -0
  177. package/dist/admin/src/components/AIChat/components/Alert.d.ts +6 -0
  178. package/dist/admin/src/components/AIChat/components/AnimatedBox.d.ts +13 -0
  179. package/dist/admin/src/components/AIChat/components/Attachments/AttachmentPreview.d.ts +9 -0
  180. package/dist/admin/src/components/AIChat/components/Attachments/components/Attachment.d.ts +27 -0
  181. package/dist/admin/src/components/AIChat/components/Base64Image.d.ts +9 -0
  182. package/dist/admin/src/components/AIChat/components/Collapsible.d.ts +18 -0
  183. package/dist/admin/src/components/AIChat/components/Dropzone.d.ts +35 -0
  184. package/dist/admin/src/components/AIChat/components/FloatingPanel.d.ts +34 -0
  185. package/dist/admin/src/components/AIChat/components/FullScreenImage.d.ts +20 -0
  186. package/dist/admin/src/components/AIChat/components/ImagePreview.d.ts +8 -0
  187. package/dist/admin/src/components/AIChat/components/ImagePreviewGroup.d.ts +7 -0
  188. package/dist/admin/src/components/AIChat/components/Input.d.ts +43 -0
  189. package/dist/admin/src/components/AIChat/components/Messages/Marker.d.ts +2 -0
  190. package/dist/admin/src/components/AIChat/components/Messages/Message.d.ts +5 -0
  191. package/dist/admin/src/components/AIChat/components/ResizableTextArea.d.ts +9 -0
  192. package/dist/admin/src/components/AIChat/components/SimpleMenu.d.ts +32 -0
  193. package/dist/admin/src/components/AIChat/components/StepModal.d.ts +37 -0
  194. package/dist/admin/src/components/AIChat/components/animations.d.ts +8 -0
  195. package/dist/admin/src/components/AIChat/components/icons/FigmaIcon.d.ts +5 -0
  196. package/dist/admin/src/components/AIChat/components/icons/StopIcon.d.ts +5 -0
  197. package/dist/admin/src/components/AIChat/hooks/useAIFetch.d.ts +147 -0
  198. package/dist/admin/src/components/AIChat/hooks/useAttachments.d.ts +8 -0
  199. package/dist/admin/src/components/AIChat/hooks/useChatTitle.d.ts +13 -0
  200. package/dist/admin/src/components/AIChat/hooks/useCodeUpload.d.ts +31 -0
  201. package/dist/admin/src/components/AIChat/hooks/useFeedback.d.ts +7 -0
  202. package/dist/admin/src/components/AIChat/hooks/useFigmaUpload.d.ts +61 -0
  203. package/dist/admin/src/components/AIChat/hooks/useLastSeenSchemas.d.ts +10 -0
  204. package/dist/admin/src/components/AIChat/hooks/useTranslations.d.ts +3 -0
  205. package/dist/admin/src/components/AIChat/lib/aiClient.d.ts +32 -0
  206. package/dist/admin/src/components/AIChat/lib/constants.d.ts +12 -0
  207. package/dist/admin/src/components/AIChat/lib/fileToAttachment.d.ts +2 -0
  208. package/dist/admin/src/components/AIChat/lib/misc.d.ts +1 -0
  209. package/dist/admin/src/components/AIChat/lib/transforms/schemas/fromCTB.d.ts +3 -0
  210. package/dist/admin/src/components/AIChat/lib/transforms/schemas/toCTB.d.ts +16 -0
  211. package/dist/admin/src/components/AIChat/lib/types/annotations.d.ts +19 -0
  212. package/dist/admin/src/components/AIChat/lib/types/attachments.d.ts +15 -0
  213. package/dist/admin/src/components/AIChat/lib/types/feedback.d.ts +1 -0
  214. package/dist/admin/src/components/AIChat/lib/types/messages.d.ts +26 -0
  215. package/dist/admin/src/components/AIChat/lib/types/schema.d.ts +20 -0
  216. package/dist/admin/src/components/AIChat/providers/ChatProvider.d.ts +30 -0
  217. package/dist/admin/src/components/AIChat/providers/SchemaProvider.d.ts +10 -0
  218. package/dist/admin/src/components/ComponentList.d.ts +1 -1
  219. package/dist/admin/src/components/DataManager/DataManagerContext.d.ts +1 -1
  220. package/dist/admin/translations/ar.json.js +187 -2
  221. package/dist/admin/translations/ar.json.js.map +1 -1
  222. package/dist/admin/translations/ar.json.mjs +187 -3
  223. package/dist/admin/translations/ar.json.mjs.map +1 -1
  224. package/dist/admin/translations/de.json.js +42 -7
  225. package/dist/admin/translations/de.json.js.map +1 -1
  226. package/dist/admin/translations/de.json.mjs +42 -7
  227. package/dist/admin/translations/de.json.mjs.map +1 -1
  228. package/dist/admin/translations/en.json.js +53 -2
  229. package/dist/admin/translations/en.json.js.map +1 -1
  230. package/dist/admin/translations/en.json.mjs +53 -2
  231. package/dist/admin/translations/en.json.mjs.map +1 -1
  232. package/dist/admin/translations/es.json.js +37 -15
  233. package/dist/admin/translations/es.json.js.map +1 -1
  234. package/dist/admin/translations/es.json.mjs +37 -15
  235. package/dist/admin/translations/es.json.mjs.map +1 -1
  236. package/dist/admin/translations/fr.json.js +165 -3
  237. package/dist/admin/translations/fr.json.js.map +1 -1
  238. package/dist/admin/translations/fr.json.mjs +165 -4
  239. package/dist/admin/translations/fr.json.mjs.map +1 -1
  240. package/dist/admin/translations/id.json.js +93 -23
  241. package/dist/admin/translations/id.json.js.map +1 -1
  242. package/dist/admin/translations/id.json.mjs +93 -23
  243. package/dist/admin/translations/id.json.mjs.map +1 -1
  244. package/dist/admin/translations/it.json.js +75 -6
  245. package/dist/admin/translations/it.json.js.map +1 -1
  246. package/dist/admin/translations/it.json.mjs +75 -6
  247. package/dist/admin/translations/it.json.mjs.map +1 -1
  248. package/dist/admin/translations/ja.json.js +191 -5
  249. package/dist/admin/translations/ja.json.js.map +1 -1
  250. package/dist/admin/translations/ja.json.mjs +191 -6
  251. package/dist/admin/translations/ja.json.mjs.map +1 -1
  252. package/dist/admin/translations/ko.json.js +70 -16
  253. package/dist/admin/translations/ko.json.js.map +1 -1
  254. package/dist/admin/translations/ko.json.mjs +70 -16
  255. package/dist/admin/translations/ko.json.mjs.map +1 -1
  256. package/dist/admin/translations/ms.json.js +104 -31
  257. package/dist/admin/translations/ms.json.js.map +1 -1
  258. package/dist/admin/translations/ms.json.mjs +104 -31
  259. package/dist/admin/translations/ms.json.mjs.map +1 -1
  260. package/dist/admin/translations/nl.json.js +95 -15
  261. package/dist/admin/translations/nl.json.js.map +1 -1
  262. package/dist/admin/translations/nl.json.mjs +95 -15
  263. package/dist/admin/translations/nl.json.mjs.map +1 -1
  264. package/dist/admin/translations/pl.json.js +55 -11
  265. package/dist/admin/translations/pl.json.js.map +1 -1
  266. package/dist/admin/translations/pl.json.mjs +55 -11
  267. package/dist/admin/translations/pl.json.mjs.map +1 -1
  268. package/dist/admin/translations/pt-BR.json.js +54 -10
  269. package/dist/admin/translations/pt-BR.json.js.map +1 -1
  270. package/dist/admin/translations/pt-BR.json.mjs +54 -10
  271. package/dist/admin/translations/pt-BR.json.mjs.map +1 -1
  272. package/dist/admin/translations/pt.json.js +187 -2
  273. package/dist/admin/translations/pt.json.js.map +1 -1
  274. package/dist/admin/translations/pt.json.mjs +187 -3
  275. package/dist/admin/translations/pt.json.mjs.map +1 -1
  276. package/dist/admin/translations/ru.json.js +26 -1
  277. package/dist/admin/translations/ru.json.js.map +1 -1
  278. package/dist/admin/translations/ru.json.mjs +26 -1
  279. package/dist/admin/translations/ru.json.mjs.map +1 -1
  280. package/dist/admin/translations/sk.json.js +21 -1
  281. package/dist/admin/translations/sk.json.js.map +1 -1
  282. package/dist/admin/translations/sk.json.mjs +21 -1
  283. package/dist/admin/translations/sk.json.mjs.map +1 -1
  284. package/dist/admin/translations/sv.json.js +21 -1
  285. package/dist/admin/translations/sv.json.js.map +1 -1
  286. package/dist/admin/translations/sv.json.mjs +21 -1
  287. package/dist/admin/translations/sv.json.mjs.map +1 -1
  288. package/dist/admin/translations/th.json.js +21 -1
  289. package/dist/admin/translations/th.json.js.map +1 -1
  290. package/dist/admin/translations/th.json.mjs +21 -1
  291. package/dist/admin/translations/th.json.mjs.map +1 -1
  292. package/dist/admin/translations/tr.json.js +21 -1
  293. package/dist/admin/translations/tr.json.js.map +1 -1
  294. package/dist/admin/translations/tr.json.mjs +21 -1
  295. package/dist/admin/translations/tr.json.mjs.map +1 -1
  296. package/dist/admin/translations/uk.json.js +21 -2
  297. package/dist/admin/translations/uk.json.js.map +1 -1
  298. package/dist/admin/translations/uk.json.mjs +21 -2
  299. package/dist/admin/translations/uk.json.mjs.map +1 -1
  300. package/dist/admin/translations/zh-Hans.json.js +222 -133
  301. package/dist/admin/translations/zh-Hans.json.js.map +1 -1
  302. package/dist/admin/translations/zh-Hans.json.mjs +222 -133
  303. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -1
  304. package/dist/admin/translations/zh.json.js +21 -1
  305. package/dist/admin/translations/zh.json.js.map +1 -1
  306. package/dist/admin/translations/zh.json.mjs +21 -1
  307. package/dist/admin/translations/zh.json.mjs.map +1 -1
  308. package/dist/server/index.js +2 -0
  309. package/dist/server/index.js.map +1 -1
  310. package/dist/server/index.mjs +2 -0
  311. package/dist/server/index.mjs.map +1 -1
  312. package/dist/server/register.js +98 -0
  313. package/dist/server/register.js.map +1 -0
  314. package/dist/server/register.mjs +96 -0
  315. package/dist/server/register.mjs.map +1 -0
  316. package/dist/server/src/controllers/ai/auth.d.ts +1 -0
  317. package/dist/server/src/controllers/ai/auth.d.ts.map +1 -0
  318. package/dist/server/src/controllers/ai/index.d.ts +1 -0
  319. package/dist/server/src/controllers/ai/index.d.ts.map +1 -0
  320. package/dist/server/src/index.d.ts +1 -0
  321. package/dist/server/src/index.d.ts.map +1 -1
  322. package/dist/server/src/register.d.ts +11 -0
  323. package/dist/server/src/register.d.ts.map +1 -0
  324. package/package.json +12 -5
  325. package/dist/admin/components/DataManager/utils/formatSchemas.js +0 -21
  326. package/dist/admin/components/DataManager/utils/formatSchemas.js.map +0 -1
  327. package/dist/admin/components/DataManager/utils/formatSchemas.mjs +0 -18
  328. package/dist/admin/components/DataManager/utils/formatSchemas.mjs.map +0 -1
@@ -0,0 +1,200 @@
1
+ import { useState } from 'react';
2
+
3
+ /**================================================================================
4
+ * Constants
5
+ *================================================================================*/ const FIGMA_TOKEN_STORAGE_KEY = 'strapi-ai-figma-token';
6
+ /**================================================================================
7
+ * Token Storage Utils
8
+ *================================================================================*/ /**
9
+ * Get Figma token from localStorage
10
+ */ const getFigmaToken = ()=>{
11
+ try {
12
+ return localStorage.getItem(FIGMA_TOKEN_STORAGE_KEY) || '';
13
+ } catch (error) {
14
+ console.error('Error accessing localStorage:', error);
15
+ return '';
16
+ }
17
+ };
18
+ /**
19
+ * Save Figma token to localStorage
20
+ */ const saveFigmaToken = (token)=>{
21
+ try {
22
+ localStorage.setItem(FIGMA_TOKEN_STORAGE_KEY, token);
23
+ } catch (error) {
24
+ console.error('Error saving to localStorage:', error);
25
+ }
26
+ };
27
+ /**
28
+ * Check if Figma token exists in localStorage
29
+ */ const hasFigmaToken = ()=>{
30
+ return !!getFigmaToken();
31
+ };
32
+ /**================================================================================
33
+ * Utils
34
+ *================================================================================*/ /**
35
+ * Extract file key and node ID from Figma URL
36
+ * @param figmaUrl - Figma URL (e.g., https://www.figma.com/file/KEY/Title)
37
+ */ const extractNodeFromFigmaUrl = (figmaUrl)=>{
38
+ const figmaUrlPattern = /figma\.com\/(?:file|design)\/([a-zA-Z0-9]+)\/.*[?&]node-id=([^&]+)/;
39
+ const match = figmaUrl.match(figmaUrlPattern);
40
+ if (!match) {
41
+ throw new Error('Invalid Figma URL');
42
+ }
43
+ const fileKey = match[1];
44
+ const nodeId = decodeURIComponent(match[2]).replace(/-/g, ':');
45
+ return {
46
+ fileKey,
47
+ nodeId
48
+ };
49
+ };
50
+ /**
51
+ * Get token and validate it's available
52
+ * @throws Error if token is not available
53
+ */ const getValidToken = ()=>{
54
+ const token = getFigmaToken();
55
+ if (!token) {
56
+ throw new Error('Figma API token is required');
57
+ }
58
+ return token;
59
+ };
60
+ /**
61
+ * Fetch Figma file data using the API
62
+ * @param fileKey - Figma file key
63
+ * @param nodeId - Figma node ID
64
+ */ const fetchFigmaNode = async (fileKey, nodeId)=>{
65
+ const token = getValidToken();
66
+ try {
67
+ const apiUrl = `https://api.figma.com/v1/files/${fileKey}/nodes?ids=${nodeId}`;
68
+ const response = await fetch(apiUrl, {
69
+ headers: {
70
+ 'X-Figma-Token': token
71
+ }
72
+ });
73
+ if (!response.ok) {
74
+ throw new Error(`Figma API error: ${response.status} ${response.statusText}`);
75
+ }
76
+ const nodes = await response.json();
77
+ return nodes.nodes[nodeId];
78
+ } catch (err) {
79
+ const errorMessage = err instanceof Error ? err.message : 'Failed to fetch Figma data';
80
+ throw new Error(errorMessage);
81
+ }
82
+ };
83
+ const findFramesInNode = (node)=>{
84
+ const frames = [];
85
+ if (node.type === 'FRAME') {
86
+ frames.push({
87
+ id: node.id,
88
+ name: node.name
89
+ });
90
+ return frames;
91
+ }
92
+ if (node.children && node.children.length > 0) {
93
+ for (const child of node.children){
94
+ // Continue searching in children if the current node is not a FRAME
95
+ frames.push(...findFramesInNode(child));
96
+ }
97
+ }
98
+ return frames;
99
+ };
100
+ /**
101
+ * Fetch images for specific nodes from the Figma API
102
+ * @param fileKey - Figma file key
103
+ * @param nodeIds - Array of node IDs to render
104
+ */ const fetchFigmaNodeImages = async (fileKey, nodeIds)=>{
105
+ const token = getValidToken();
106
+ if (nodeIds.length === 0) {
107
+ return {
108
+ images: {}
109
+ };
110
+ }
111
+ try {
112
+ // Max 50 node IDs per request according to Figma API docs
113
+ // We might need to chunk requests if nodeIds is very large
114
+ const idsQueryParam = nodeIds.slice(0, 50).join(',');
115
+ const apiUrl = `https://api.figma.com/v1/images/${fileKey}?ids=${idsQueryParam}&format=png&scale=0.4`;
116
+ const response = await fetch(apiUrl, {
117
+ headers: {
118
+ 'X-Figma-Token': token
119
+ }
120
+ });
121
+ if (!response.ok) {
122
+ const errorData = await response.text();
123
+ throw new Error(`Figma API image error: ${response.status} ${response.statusText} - ${errorData}`);
124
+ }
125
+ const result = await response.json();
126
+ if (result.err) {
127
+ throw new Error(`Figma API image error: ${result.err}`);
128
+ }
129
+ return result;
130
+ } catch (err) {
131
+ const errorMessage = err instanceof Error ? err.message : 'Failed to fetch Figma node images';
132
+ throw new Error(errorMessage);
133
+ }
134
+ };
135
+ /**================================================================================
136
+ * Hooks
137
+ *================================================================================*/ function useFigmaUpload({ onSuccess, onError } = {}) {
138
+ const [isLoading, setIsLoading] = useState(false);
139
+ const [error, setError] = useState(null);
140
+ /**
141
+ * Main method to process a Figma URL
142
+ * @param figmaUrl - Figma URL to process
143
+ */ const processFigmaUrl = async (figmaUrl)=>{
144
+ try {
145
+ // Check if token exists before proceeding
146
+ if (!hasFigmaToken()) {
147
+ const errorMessage = 'Figma API token is required';
148
+ setError(errorMessage);
149
+ onError?.(errorMessage);
150
+ throw new Error(errorMessage);
151
+ }
152
+ setIsLoading(true);
153
+ setError(null);
154
+ // 1. Extract file key from URL
155
+ const { fileKey, nodeId: selectedNode } = extractNodeFromFigmaUrl(figmaUrl);
156
+ // 2. Fetch base data from Figma API to get structure
157
+ const figmaData = await fetchFigmaNode(fileKey, selectedNode);
158
+ if (!figmaData.document) return;
159
+ // 3. Find frame nodes with their names
160
+ const frames = findFramesInNode(figmaData.document);
161
+ // Create a map of ID to name for later use
162
+ const frameNameMap = new Map(frames.map((frame)=>[
163
+ frame.id,
164
+ frame.name
165
+ ]));
166
+ // Get just the IDs for the API call
167
+ const frameIds = frames.map((frame)=>frame.id);
168
+ // 4. Fetch images for the identified nodes
169
+ const imageResponse = await fetchFigmaNodeImages(fileKey, frameIds);
170
+ const images = imageResponse.images;
171
+ // Use the name from our map instead of just the ID
172
+ const figmaImages = Object.entries(images).map(([id, url])=>({
173
+ id,
174
+ type: 'file',
175
+ filename: frameNameMap.get(id),
176
+ mediaType: 'image/png',
177
+ url,
178
+ status: 'ready'
179
+ }));
180
+ onSuccess?.(figmaImages);
181
+ return figmaImages;
182
+ } catch (err) {
183
+ const errorMessage = err instanceof Error ? err.message : 'Unknown error processing Figma URL';
184
+ setError(errorMessage);
185
+ onError?.(errorMessage);
186
+ console.error('Error processing Figma URL:', err);
187
+ throw err;
188
+ } finally{
189
+ setIsLoading(false);
190
+ }
191
+ };
192
+ return {
193
+ processFigmaUrl,
194
+ isLoading: isLoading,
195
+ error: error
196
+ };
197
+ }
198
+
199
+ export { FIGMA_TOKEN_STORAGE_KEY, getFigmaToken, hasFigmaToken, saveFigmaToken, useFigmaUpload };
200
+ //# sourceMappingURL=useFigmaUpload.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFigmaUpload.mjs","sources":["../../../../../admin/src/components/AIChat/hooks/useFigmaUpload.ts"],"sourcesContent":["import { useState } from 'react';\n\nimport type { Attachment } from '../lib/types/attachments';\n\n/**================================================================================\n * Constants\n *================================================================================*/\nexport const FIGMA_TOKEN_STORAGE_KEY = 'strapi-ai-figma-token';\n\n/**================================================================================\n * Types\n *================================================================================*/\nexport interface FigmaNodeData {\n id: string;\n name: string;\n type: string;\n children?: FigmaNodeData[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any; // For other properties that Figma nodes may have\n}\n\nexport interface FigmaFileData {\n document: FigmaNodeData;\n schemaVersion: number;\n name: string;\n lastModified: string;\n thumbnailUrl: string;\n version: string;\n role: string;\n}\n\nexport interface FigmaImage extends Attachment {}\n\ninterface UseFigmaUploadOptions {\n onSuccess?: (attachments: FigmaImage[]) => void;\n onError?: (error: string) => void;\n}\n\n/**================================================================================\n * Token Storage Utils\n *================================================================================*/\n\n/**\n * Get Figma token from localStorage\n */\nexport const getFigmaToken = (): string => {\n try {\n return localStorage.getItem(FIGMA_TOKEN_STORAGE_KEY) || '';\n } catch (error) {\n console.error('Error accessing localStorage:', error);\n return '';\n }\n};\n\n/**\n * Save Figma token to localStorage\n */\nexport const saveFigmaToken = (token: string): void => {\n try {\n localStorage.setItem(FIGMA_TOKEN_STORAGE_KEY, token);\n } catch (error) {\n console.error('Error saving to localStorage:', error);\n }\n};\n\n/**\n * Check if Figma token exists in localStorage\n */\nexport const hasFigmaToken = (): boolean => {\n return !!getFigmaToken();\n};\n\n/**================================================================================\n * Utils\n *================================================================================*/\n\n/**\n * Extract file key and node ID from Figma URL\n * @param figmaUrl - Figma URL (e.g., https://www.figma.com/file/KEY/Title)\n */\nconst extractNodeFromFigmaUrl = (figmaUrl: string) => {\n const figmaUrlPattern = /figma\\.com\\/(?:file|design)\\/([a-zA-Z0-9]+)\\/.*[?&]node-id=([^&]+)/;\n const match = figmaUrl.match(figmaUrlPattern);\n\n if (!match) {\n throw new Error('Invalid Figma URL');\n }\n\n const fileKey = match[1];\n const nodeId = decodeURIComponent(match[2]).replace(/-/g, ':');\n\n return { fileKey, nodeId };\n};\n\n/**\n * Get token and validate it's available\n * @throws Error if token is not available\n */\nconst getValidToken = (): string => {\n const token = getFigmaToken();\n if (!token) {\n throw new Error('Figma API token is required');\n }\n return token;\n};\n\n/**\n * Fetch Figma file data using the API\n * @param fileKey - Figma file key\n * @param nodeId - Figma node ID\n */\nconst fetchFigmaNode = async (fileKey: string, nodeId: string): Promise<FigmaFileData> => {\n const token = getValidToken();\n\n try {\n const apiUrl = `https://api.figma.com/v1/files/${fileKey}/nodes?ids=${nodeId}`;\n\n const response = await fetch(apiUrl, {\n headers: {\n 'X-Figma-Token': token,\n },\n });\n\n if (!response.ok) {\n throw new Error(`Figma API error: ${response.status} ${response.statusText}`);\n }\n\n const nodes = await response.json();\n\n return nodes.nodes[nodeId];\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Failed to fetch Figma data';\n throw new Error(errorMessage);\n }\n};\n\n/**\n * Recursively searches the node tree for FRAME nodes.\n * It stops searching within a branch once a FRAME is found.\n * @param node - The current FigmaNodeData to inspect.\n */\ninterface FrameInfo {\n id: string;\n name: string;\n}\n\nconst findFramesInNode = (node: FigmaNodeData): FrameInfo[] => {\n const frames: FrameInfo[] = [];\n if (node.type === 'FRAME') {\n frames.push({\n id: node.id,\n name: node.name,\n });\n return frames;\n }\n\n if (node.children && node.children.length > 0) {\n for (const child of node.children) {\n // Continue searching in children if the current node is not a FRAME\n frames.push(...findFramesInNode(child));\n }\n }\n\n return frames;\n};\n\n/**\n * Fetch images for specific nodes from the Figma API\n * @param fileKey - Figma file key\n * @param nodeIds - Array of node IDs to render\n */\nconst fetchFigmaNodeImages = async (\n fileKey: string,\n nodeIds: string[]\n): Promise<{ images: Record<string, string> }> => {\n const token = getValidToken();\n\n if (nodeIds.length === 0) {\n return { images: {} };\n }\n try {\n // Max 50 node IDs per request according to Figma API docs\n // We might need to chunk requests if nodeIds is very large\n const idsQueryParam = nodeIds.slice(0, 50).join(',');\n const apiUrl = `https://api.figma.com/v1/images/${fileKey}?ids=${idsQueryParam}&format=png&scale=0.4`;\n\n const response = await fetch(apiUrl, {\n headers: { 'X-Figma-Token': token },\n });\n\n if (!response.ok) {\n const errorData = await response.text();\n throw new Error(\n `Figma API image error: ${response.status} ${response.statusText} - ${errorData}`\n );\n }\n\n const result = await response.json();\n if (result.err) {\n throw new Error(`Figma API image error: ${result.err}`);\n }\n\n return result as { images: Record<string, string> };\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Failed to fetch Figma node images';\n throw new Error(errorMessage);\n }\n};\n\n/**================================================================================\n * Hooks\n *================================================================================*/\nexport function useFigmaUpload({ onSuccess, onError }: UseFigmaUploadOptions = {}) {\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n /**\n * Main method to process a Figma URL\n * @param figmaUrl - Figma URL to process\n */\n const processFigmaUrl = async (figmaUrl: string) => {\n try {\n // Check if token exists before proceeding\n if (!hasFigmaToken()) {\n const errorMessage = 'Figma API token is required';\n setError(errorMessage);\n onError?.(errorMessage);\n throw new Error(errorMessage);\n }\n\n setIsLoading(true);\n setError(null);\n\n // 1. Extract file key from URL\n const { fileKey, nodeId: selectedNode } = extractNodeFromFigmaUrl(figmaUrl);\n\n // 2. Fetch base data from Figma API to get structure\n const figmaData = await fetchFigmaNode(fileKey, selectedNode);\n if (!figmaData.document) return;\n\n // 3. Find frame nodes with their names\n const frames = findFramesInNode(figmaData.document);\n // Create a map of ID to name for later use\n const frameNameMap = new Map(frames.map((frame) => [frame.id, frame.name]));\n // Get just the IDs for the API call\n const frameIds = frames.map((frame) => frame.id);\n\n // 4. Fetch images for the identified nodes\n const imageResponse = await fetchFigmaNodeImages(fileKey, frameIds);\n const images = imageResponse.images;\n\n // Use the name from our map instead of just the ID\n const figmaImages = Object.entries(images).map(\n ([id, url]) =>\n ({\n id,\n type: 'file',\n filename: frameNameMap.get(id),\n mediaType: 'image/png',\n url,\n status: 'ready',\n }) satisfies FigmaImage\n );\n\n onSuccess?.(figmaImages);\n return figmaImages;\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : 'Unknown error processing Figma URL';\n setError(errorMessage);\n onError?.(errorMessage);\n console.error('Error processing Figma URL:', err);\n throw err;\n } finally {\n setIsLoading(false);\n }\n };\n\n return {\n processFigmaUrl,\n isLoading: isLoading,\n error: error,\n };\n}\n"],"names":["FIGMA_TOKEN_STORAGE_KEY","getFigmaToken","localStorage","getItem","error","console","saveFigmaToken","token","setItem","hasFigmaToken","extractNodeFromFigmaUrl","figmaUrl","figmaUrlPattern","match","Error","fileKey","nodeId","decodeURIComponent","replace","getValidToken","fetchFigmaNode","apiUrl","response","fetch","headers","ok","status","statusText","nodes","json","err","errorMessage","message","findFramesInNode","node","frames","type","push","id","name","children","length","child","fetchFigmaNodeImages","nodeIds","images","idsQueryParam","slice","join","errorData","text","result","useFigmaUpload","onSuccess","onError","isLoading","setIsLoading","useState","setError","processFigmaUrl","selectedNode","figmaData","document","frameNameMap","Map","map","frame","frameIds","imageResponse","figmaImages","Object","entries","url","filename","get","mediaType"],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var useDataManager = require('../../DataManager/useDataManager.js');
5
+
6
+ const MAX_HISTORY_SIZE = 1; // Configurable max history size
7
+ // Parse URL to extract content type or component information
8
+ const parseUrlForSchemaInfo = ()=>{
9
+ if (typeof window === 'undefined') {
10
+ return {
11
+ uid: null,
12
+ type: null
13
+ };
14
+ }
15
+ const pathname = window.location.pathname;
16
+ // Content type URL pattern: /content-type-builder/content-types/[uid]
17
+ if (pathname.includes('/content-types/')) {
18
+ const contentTypeUid = pathname.split('/content-types/')[1];
19
+ if (contentTypeUid) {
20
+ return {
21
+ uid: contentTypeUid,
22
+ type: 'contentType'
23
+ };
24
+ }
25
+ }
26
+ // Component URL pattern: /component-categories/[category]/[uid]
27
+ if (pathname.includes('/component-categories/')) {
28
+ const parts = pathname.split('/component-categories/')[1].split('/');
29
+ if (parts.length >= 2) {
30
+ const componentUid = parts[1];
31
+ return {
32
+ uid: componentUid,
33
+ type: 'component'
34
+ };
35
+ }
36
+ }
37
+ return {
38
+ uid: null,
39
+ type: null
40
+ };
41
+ };
42
+ const useLastSeenSchemas = ()=>{
43
+ // Raw tracked schemas (unfiltered)
44
+ const [rawSchemas, setRawSchemas] = React.useState([]);
45
+ const { components, contentTypes } = useDataManager.useDataManager();
46
+ // Update schema history when URL changes
47
+ React.useEffect(()=>{
48
+ const handleUrlChange = ()=>{
49
+ const { uid, type } = parseUrlForSchemaInfo();
50
+ if (!uid || !type) return;
51
+ const newSchema = {
52
+ uid,
53
+ type,
54
+ timestamp: Date.now()
55
+ };
56
+ setRawSchemas((prevSchemas)=>{
57
+ // Remove existing entry with the same UID if it exists
58
+ const filteredSchemas = prevSchemas.filter((schema)=>schema.uid !== newSchema.uid);
59
+ // Add new schema to the beginning and limit size
60
+ return [
61
+ newSchema,
62
+ ...filteredSchemas
63
+ ].slice(0, MAX_HISTORY_SIZE);
64
+ });
65
+ };
66
+ // Check on initial load
67
+ handleUrlChange();
68
+ // Set up listeners for navigation
69
+ window.addEventListener('popstate', handleUrlChange);
70
+ // Custom event to detect SPA navigation
71
+ const detectRouteChange = ()=>{
72
+ let lastPathname = window.location.pathname;
73
+ const interval = setInterval(()=>{
74
+ const currentPathname = window.location.pathname;
75
+ if (currentPathname !== lastPathname) {
76
+ lastPathname = currentPathname;
77
+ handleUrlChange();
78
+ }
79
+ }, 300);
80
+ return ()=>clearInterval(interval);
81
+ };
82
+ const cleanup = detectRouteChange();
83
+ return ()=>{
84
+ window.removeEventListener('popstate', handleUrlChange);
85
+ cleanup();
86
+ };
87
+ }, []);
88
+ // Filtered schemas - updated whenever components or contentTypes change
89
+ const lastSeenSchemas = React.useMemo(()=>{
90
+ return rawSchemas.filter((schema)=>{
91
+ if (schema.type === 'contentType') {
92
+ return Object.keys(contentTypes).some((uid)=>uid === schema.uid);
93
+ }
94
+ if (schema.type === 'component') {
95
+ return Object.keys(components).some((uid)=>uid === schema.uid);
96
+ }
97
+ return false;
98
+ });
99
+ }, [
100
+ rawSchemas,
101
+ components,
102
+ contentTypes
103
+ ]);
104
+ // Function to clear history
105
+ const clearHistory = ()=>{
106
+ setRawSchemas([]);
107
+ };
108
+ return {
109
+ lastSeenSchemas,
110
+ clearHistory
111
+ };
112
+ };
113
+
114
+ exports.useLastSeenSchemas = useLastSeenSchemas;
115
+ //# sourceMappingURL=useLastSeenSchemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLastSeenSchemas.js","sources":["../../../../../admin/src/components/AIChat/hooks/useLastSeenSchemas.ts"],"sourcesContent":["import { useState, useEffect, useMemo } from 'react';\n\nimport { useDataManager } from '../../DataManager/useDataManager';\n\ninterface LastSeenSchema {\n uid: string;\n type: 'contentType' | 'component';\n timestamp: number;\n}\n\nconst MAX_HISTORY_SIZE = 1; // Configurable max history size\n\n// Parse URL to extract content type or component information\nconst parseUrlForSchemaInfo = (): {\n uid: string | null;\n type: 'contentType' | 'component' | null;\n} => {\n if (typeof window === 'undefined') {\n return { uid: null, type: null };\n }\n\n const pathname = window.location.pathname;\n\n // Content type URL pattern: /content-type-builder/content-types/[uid]\n if (pathname.includes('/content-types/')) {\n const contentTypeUid = pathname.split('/content-types/')[1];\n if (contentTypeUid) {\n return { uid: contentTypeUid, type: 'contentType' };\n }\n }\n\n // Component URL pattern: /component-categories/[category]/[uid]\n if (pathname.includes('/component-categories/')) {\n const parts = pathname.split('/component-categories/')[1].split('/');\n if (parts.length >= 2) {\n const componentUid = parts[1];\n return { uid: componentUid, type: 'component' };\n }\n }\n\n return { uid: null, type: null };\n};\n\nexport const useLastSeenSchemas = () => {\n // Raw tracked schemas (unfiltered)\n const [rawSchemas, setRawSchemas] = useState<LastSeenSchema[]>([]);\n const { components, contentTypes } = useDataManager();\n\n // Update schema history when URL changes\n useEffect(() => {\n const handleUrlChange = () => {\n const { uid, type } = parseUrlForSchemaInfo();\n if (!uid || !type) return;\n\n const newSchema: LastSeenSchema = {\n uid,\n type,\n timestamp: Date.now(),\n };\n\n setRawSchemas((prevSchemas) => {\n // Remove existing entry with the same UID if it exists\n const filteredSchemas = prevSchemas.filter((schema) => schema.uid !== newSchema.uid);\n // Add new schema to the beginning and limit size\n return [newSchema, ...filteredSchemas].slice(0, MAX_HISTORY_SIZE);\n });\n };\n\n // Check on initial load\n handleUrlChange();\n\n // Set up listeners for navigation\n window.addEventListener('popstate', handleUrlChange);\n\n // Custom event to detect SPA navigation\n const detectRouteChange = () => {\n let lastPathname = window.location.pathname;\n\n const interval = setInterval(() => {\n const currentPathname = window.location.pathname;\n if (currentPathname !== lastPathname) {\n lastPathname = currentPathname;\n handleUrlChange();\n }\n }, 300);\n\n return () => clearInterval(interval);\n };\n\n const cleanup = detectRouteChange();\n\n return () => {\n window.removeEventListener('popstate', handleUrlChange);\n cleanup();\n };\n }, []);\n\n // Filtered schemas - updated whenever components or contentTypes change\n const lastSeenSchemas = useMemo(() => {\n return rawSchemas.filter((schema) => {\n if (schema.type === 'contentType') {\n return Object.keys(contentTypes).some((uid) => uid === schema.uid);\n }\n if (schema.type === 'component') {\n return Object.keys(components).some((uid) => uid === schema.uid);\n }\n return false;\n });\n }, [rawSchemas, components, contentTypes]);\n\n // Function to clear history\n const clearHistory = () => {\n setRawSchemas([]);\n };\n\n return {\n lastSeenSchemas,\n clearHistory,\n };\n};\n"],"names":["MAX_HISTORY_SIZE","parseUrlForSchemaInfo","window","uid","type","pathname","location","includes","contentTypeUid","split","parts","length","componentUid","useLastSeenSchemas","rawSchemas","setRawSchemas","useState","components","contentTypes","useDataManager","useEffect","handleUrlChange","newSchema","timestamp","Date","now","prevSchemas","filteredSchemas","filter","schema","slice","addEventListener","detectRouteChange","lastPathname","interval","setInterval","currentPathname","clearInterval","cleanup","removeEventListener","lastSeenSchemas","useMemo","Object","keys","some","clearHistory"],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ import { useState, useEffect, useMemo } from 'react';
2
+ import { useDataManager } from '../../DataManager/useDataManager.mjs';
3
+
4
+ const MAX_HISTORY_SIZE = 1; // Configurable max history size
5
+ // Parse URL to extract content type or component information
6
+ const parseUrlForSchemaInfo = ()=>{
7
+ if (typeof window === 'undefined') {
8
+ return {
9
+ uid: null,
10
+ type: null
11
+ };
12
+ }
13
+ const pathname = window.location.pathname;
14
+ // Content type URL pattern: /content-type-builder/content-types/[uid]
15
+ if (pathname.includes('/content-types/')) {
16
+ const contentTypeUid = pathname.split('/content-types/')[1];
17
+ if (contentTypeUid) {
18
+ return {
19
+ uid: contentTypeUid,
20
+ type: 'contentType'
21
+ };
22
+ }
23
+ }
24
+ // Component URL pattern: /component-categories/[category]/[uid]
25
+ if (pathname.includes('/component-categories/')) {
26
+ const parts = pathname.split('/component-categories/')[1].split('/');
27
+ if (parts.length >= 2) {
28
+ const componentUid = parts[1];
29
+ return {
30
+ uid: componentUid,
31
+ type: 'component'
32
+ };
33
+ }
34
+ }
35
+ return {
36
+ uid: null,
37
+ type: null
38
+ };
39
+ };
40
+ const useLastSeenSchemas = ()=>{
41
+ // Raw tracked schemas (unfiltered)
42
+ const [rawSchemas, setRawSchemas] = useState([]);
43
+ const { components, contentTypes } = useDataManager();
44
+ // Update schema history when URL changes
45
+ useEffect(()=>{
46
+ const handleUrlChange = ()=>{
47
+ const { uid, type } = parseUrlForSchemaInfo();
48
+ if (!uid || !type) return;
49
+ const newSchema = {
50
+ uid,
51
+ type,
52
+ timestamp: Date.now()
53
+ };
54
+ setRawSchemas((prevSchemas)=>{
55
+ // Remove existing entry with the same UID if it exists
56
+ const filteredSchemas = prevSchemas.filter((schema)=>schema.uid !== newSchema.uid);
57
+ // Add new schema to the beginning and limit size
58
+ return [
59
+ newSchema,
60
+ ...filteredSchemas
61
+ ].slice(0, MAX_HISTORY_SIZE);
62
+ });
63
+ };
64
+ // Check on initial load
65
+ handleUrlChange();
66
+ // Set up listeners for navigation
67
+ window.addEventListener('popstate', handleUrlChange);
68
+ // Custom event to detect SPA navigation
69
+ const detectRouteChange = ()=>{
70
+ let lastPathname = window.location.pathname;
71
+ const interval = setInterval(()=>{
72
+ const currentPathname = window.location.pathname;
73
+ if (currentPathname !== lastPathname) {
74
+ lastPathname = currentPathname;
75
+ handleUrlChange();
76
+ }
77
+ }, 300);
78
+ return ()=>clearInterval(interval);
79
+ };
80
+ const cleanup = detectRouteChange();
81
+ return ()=>{
82
+ window.removeEventListener('popstate', handleUrlChange);
83
+ cleanup();
84
+ };
85
+ }, []);
86
+ // Filtered schemas - updated whenever components or contentTypes change
87
+ const lastSeenSchemas = useMemo(()=>{
88
+ return rawSchemas.filter((schema)=>{
89
+ if (schema.type === 'contentType') {
90
+ return Object.keys(contentTypes).some((uid)=>uid === schema.uid);
91
+ }
92
+ if (schema.type === 'component') {
93
+ return Object.keys(components).some((uid)=>uid === schema.uid);
94
+ }
95
+ return false;
96
+ });
97
+ }, [
98
+ rawSchemas,
99
+ components,
100
+ contentTypes
101
+ ]);
102
+ // Function to clear history
103
+ const clearHistory = ()=>{
104
+ setRawSchemas([]);
105
+ };
106
+ return {
107
+ lastSeenSchemas,
108
+ clearHistory
109
+ };
110
+ };
111
+
112
+ export { useLastSeenSchemas };
113
+ //# sourceMappingURL=useLastSeenSchemas.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLastSeenSchemas.mjs","sources":["../../../../../admin/src/components/AIChat/hooks/useLastSeenSchemas.ts"],"sourcesContent":["import { useState, useEffect, useMemo } from 'react';\n\nimport { useDataManager } from '../../DataManager/useDataManager';\n\ninterface LastSeenSchema {\n uid: string;\n type: 'contentType' | 'component';\n timestamp: number;\n}\n\nconst MAX_HISTORY_SIZE = 1; // Configurable max history size\n\n// Parse URL to extract content type or component information\nconst parseUrlForSchemaInfo = (): {\n uid: string | null;\n type: 'contentType' | 'component' | null;\n} => {\n if (typeof window === 'undefined') {\n return { uid: null, type: null };\n }\n\n const pathname = window.location.pathname;\n\n // Content type URL pattern: /content-type-builder/content-types/[uid]\n if (pathname.includes('/content-types/')) {\n const contentTypeUid = pathname.split('/content-types/')[1];\n if (contentTypeUid) {\n return { uid: contentTypeUid, type: 'contentType' };\n }\n }\n\n // Component URL pattern: /component-categories/[category]/[uid]\n if (pathname.includes('/component-categories/')) {\n const parts = pathname.split('/component-categories/')[1].split('/');\n if (parts.length >= 2) {\n const componentUid = parts[1];\n return { uid: componentUid, type: 'component' };\n }\n }\n\n return { uid: null, type: null };\n};\n\nexport const useLastSeenSchemas = () => {\n // Raw tracked schemas (unfiltered)\n const [rawSchemas, setRawSchemas] = useState<LastSeenSchema[]>([]);\n const { components, contentTypes } = useDataManager();\n\n // Update schema history when URL changes\n useEffect(() => {\n const handleUrlChange = () => {\n const { uid, type } = parseUrlForSchemaInfo();\n if (!uid || !type) return;\n\n const newSchema: LastSeenSchema = {\n uid,\n type,\n timestamp: Date.now(),\n };\n\n setRawSchemas((prevSchemas) => {\n // Remove existing entry with the same UID if it exists\n const filteredSchemas = prevSchemas.filter((schema) => schema.uid !== newSchema.uid);\n // Add new schema to the beginning and limit size\n return [newSchema, ...filteredSchemas].slice(0, MAX_HISTORY_SIZE);\n });\n };\n\n // Check on initial load\n handleUrlChange();\n\n // Set up listeners for navigation\n window.addEventListener('popstate', handleUrlChange);\n\n // Custom event to detect SPA navigation\n const detectRouteChange = () => {\n let lastPathname = window.location.pathname;\n\n const interval = setInterval(() => {\n const currentPathname = window.location.pathname;\n if (currentPathname !== lastPathname) {\n lastPathname = currentPathname;\n handleUrlChange();\n }\n }, 300);\n\n return () => clearInterval(interval);\n };\n\n const cleanup = detectRouteChange();\n\n return () => {\n window.removeEventListener('popstate', handleUrlChange);\n cleanup();\n };\n }, []);\n\n // Filtered schemas - updated whenever components or contentTypes change\n const lastSeenSchemas = useMemo(() => {\n return rawSchemas.filter((schema) => {\n if (schema.type === 'contentType') {\n return Object.keys(contentTypes).some((uid) => uid === schema.uid);\n }\n if (schema.type === 'component') {\n return Object.keys(components).some((uid) => uid === schema.uid);\n }\n return false;\n });\n }, [rawSchemas, components, contentTypes]);\n\n // Function to clear history\n const clearHistory = () => {\n setRawSchemas([]);\n };\n\n return {\n lastSeenSchemas,\n clearHistory,\n };\n};\n"],"names":["MAX_HISTORY_SIZE","parseUrlForSchemaInfo","window","uid","type","pathname","location","includes","contentTypeUid","split","parts","length","componentUid","useLastSeenSchemas","rawSchemas","setRawSchemas","useState","components","contentTypes","useDataManager","useEffect","handleUrlChange","newSchema","timestamp","Date","now","prevSchemas","filteredSchemas","filter","schema","slice","addEventListener","detectRouteChange","lastPathname","interval","setInterval","currentPathname","clearInterval","cleanup","removeEventListener","lastSeenSchemas","useMemo","Object","keys","some","clearHistory"],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ var reactIntl = require('react-intl');
4
+
5
+ const useTranslations = ()=>{
6
+ const { formatMessage } = reactIntl.useIntl();
7
+ const t = (id, defaultMessage)=>{
8
+ return formatMessage({
9
+ id,
10
+ defaultMessage
11
+ });
12
+ };
13
+ return {
14
+ t
15
+ };
16
+ };
17
+
18
+ exports.useTranslations = useTranslations;
19
+ //# sourceMappingURL=useTranslations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTranslations.js","sources":["../../../../../admin/src/components/AIChat/hooks/useTranslations.ts"],"sourcesContent":["import { useIntl } from 'react-intl';\n\nexport const useTranslations = () => {\n const { formatMessage } = useIntl();\n\n const t = (id: string, defaultMessage?: string) => {\n return formatMessage({ id, defaultMessage });\n };\n\n return { t };\n};\n"],"names":["useTranslations","formatMessage","useIntl","t","id","defaultMessage"],"mappings":";;;;MAEaA,eAAkB,GAAA,IAAA;IAC7B,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAE1B,MAAMC,CAAAA,GAAI,CAACC,EAAYC,EAAAA,cAAAA,GAAAA;AACrB,QAAA,OAAOJ,aAAc,CAAA;AAAEG,YAAAA,EAAAA;AAAIC,YAAAA;AAAe,SAAA,CAAA;AAC5C,KAAA;IAEA,OAAO;AAAEF,QAAAA;AAAE,KAAA;AACb;;;;"}
@@ -0,0 +1,17 @@
1
+ import { useIntl } from 'react-intl';
2
+
3
+ const useTranslations = ()=>{
4
+ const { formatMessage } = useIntl();
5
+ const t = (id, defaultMessage)=>{
6
+ return formatMessage({
7
+ id,
8
+ defaultMessage
9
+ });
10
+ };
11
+ return {
12
+ t
13
+ };
14
+ };
15
+
16
+ export { useTranslations };
17
+ //# sourceMappingURL=useTranslations.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTranslations.mjs","sources":["../../../../../admin/src/components/AIChat/hooks/useTranslations.ts"],"sourcesContent":["import { useIntl } from 'react-intl';\n\nexport const useTranslations = () => {\n const { formatMessage } = useIntl();\n\n const t = (id: string, defaultMessage?: string) => {\n return formatMessage({ id, defaultMessage });\n };\n\n return { t };\n};\n"],"names":["useTranslations","formatMessage","useIntl","t","id","defaultMessage"],"mappings":";;MAEaA,eAAkB,GAAA,IAAA;IAC7B,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAE1B,MAAMC,CAAAA,GAAI,CAACC,EAAYC,EAAAA,cAAAA,GAAAA;AACrB,QAAA,OAAOJ,aAAc,CAAA;AAAEG,YAAAA,EAAAA;AAAIC,YAAAA;AAAe,SAAA,CAAA;AAC5C,KAAA;IAEA,OAAO;AAAEF,QAAAA;AAAE,KAAA;AACb;;;;"}