@strapi/content-type-builder 5.37.0 → 5.38.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 (433) hide show
  1. package/dist/admin/components/AIChat/Chat.js.map +1 -1
  2. package/dist/admin/components/AIChat/Chat.mjs +2 -2
  3. package/dist/admin/components/AIChat/Chat.mjs.map +1 -1
  4. package/dist/admin/components/AIChat/FeedbackModal.js.map +1 -1
  5. package/dist/admin/components/AIChat/FeedbackModal.mjs +1 -1
  6. package/dist/admin/components/AIChat/FeedbackModal.mjs.map +1 -1
  7. package/dist/admin/components/AIChat/UploadCodeModal.js.map +1 -1
  8. package/dist/admin/components/AIChat/UploadCodeModal.mjs +1 -1
  9. package/dist/admin/components/AIChat/UploadCodeModal.mjs.map +1 -1
  10. package/dist/admin/components/AIChat/UploadFigmaModal.js.map +1 -1
  11. package/dist/admin/components/AIChat/UploadFigmaModal.mjs +1 -1
  12. package/dist/admin/components/AIChat/UploadFigmaModal.mjs.map +1 -1
  13. package/dist/admin/components/AIChat/components/Alert.js.map +1 -1
  14. package/dist/admin/components/AIChat/components/Alert.mjs.map +1 -1
  15. package/dist/admin/components/AIChat/components/AnimatedBox.js.map +1 -1
  16. package/dist/admin/components/AIChat/components/AnimatedBox.mjs.map +1 -1
  17. package/dist/admin/components/AIChat/components/Attachments/AttachmentPreview.js.map +1 -1
  18. package/dist/admin/components/AIChat/components/Attachments/AttachmentPreview.mjs.map +1 -1
  19. package/dist/admin/components/AIChat/components/Attachments/components/Attachment.js.map +1 -1
  20. package/dist/admin/components/AIChat/components/Attachments/components/Attachment.mjs +1 -1
  21. package/dist/admin/components/AIChat/components/Attachments/components/Attachment.mjs.map +1 -1
  22. package/dist/admin/components/AIChat/components/Base64Image.js.map +1 -1
  23. package/dist/admin/components/AIChat/components/Base64Image.mjs.map +1 -1
  24. package/dist/admin/components/AIChat/components/Collapsible.js.map +1 -1
  25. package/dist/admin/components/AIChat/components/Collapsible.mjs.map +1 -1
  26. package/dist/admin/components/AIChat/components/Dropzone.js +2 -6
  27. package/dist/admin/components/AIChat/components/Dropzone.js.map +1 -1
  28. package/dist/admin/components/AIChat/components/Dropzone.mjs +3 -7
  29. package/dist/admin/components/AIChat/components/Dropzone.mjs.map +1 -1
  30. package/dist/admin/components/AIChat/components/FloatingPanel.js.map +1 -1
  31. package/dist/admin/components/AIChat/components/FloatingPanel.mjs +1 -1
  32. package/dist/admin/components/AIChat/components/FloatingPanel.mjs.map +1 -1
  33. package/dist/admin/components/AIChat/components/FullScreenImage.js.map +1 -1
  34. package/dist/admin/components/AIChat/components/FullScreenImage.mjs.map +1 -1
  35. package/dist/admin/components/AIChat/components/ImagePreview.js.map +1 -1
  36. package/dist/admin/components/AIChat/components/ImagePreview.mjs +1 -1
  37. package/dist/admin/components/AIChat/components/ImagePreview.mjs.map +1 -1
  38. package/dist/admin/components/AIChat/components/Input.js +1 -5
  39. package/dist/admin/components/AIChat/components/Input.js.map +1 -1
  40. package/dist/admin/components/AIChat/components/Input.mjs +4 -7
  41. package/dist/admin/components/AIChat/components/Input.mjs.map +1 -1
  42. package/dist/admin/components/AIChat/components/Messages/Marker.js.map +1 -1
  43. package/dist/admin/components/AIChat/components/Messages/Marker.mjs +2 -2
  44. package/dist/admin/components/AIChat/components/Messages/Marker.mjs.map +1 -1
  45. package/dist/admin/components/AIChat/components/Messages/Message.js.map +1 -1
  46. package/dist/admin/components/AIChat/components/Messages/Message.mjs +1 -1
  47. package/dist/admin/components/AIChat/components/Messages/Message.mjs.map +1 -1
  48. package/dist/admin/components/AIChat/components/ResizableTextArea.js.map +1 -1
  49. package/dist/admin/components/AIChat/components/ResizableTextArea.mjs.map +1 -1
  50. package/dist/admin/components/AIChat/components/SimpleMenu.js.map +1 -1
  51. package/dist/admin/components/AIChat/components/SimpleMenu.mjs.map +1 -1
  52. package/dist/admin/components/AIChat/components/StepModal.js.map +1 -1
  53. package/dist/admin/components/AIChat/components/StepModal.mjs.map +1 -1
  54. package/dist/admin/components/AIChat/components/animations.js.map +1 -1
  55. package/dist/admin/components/AIChat/components/animations.mjs.map +1 -1
  56. package/dist/admin/components/AIChat/components/icons/FigmaIcon.js.map +1 -1
  57. package/dist/admin/components/AIChat/components/icons/FigmaIcon.mjs.map +1 -1
  58. package/dist/admin/components/AIChat/components/icons/StopIcon.js.map +1 -1
  59. package/dist/admin/components/AIChat/components/icons/StopIcon.mjs.map +1 -1
  60. package/dist/admin/components/AIChat/hooks/useAIFetch.js.map +1 -1
  61. package/dist/admin/components/AIChat/hooks/useAIFetch.mjs.map +1 -1
  62. package/dist/admin/components/AIChat/hooks/useAttachments.js.map +1 -1
  63. package/dist/admin/components/AIChat/hooks/useAttachments.mjs.map +1 -1
  64. package/dist/admin/components/AIChat/hooks/useChatTitle.js.map +1 -1
  65. package/dist/admin/components/AIChat/hooks/useChatTitle.mjs.map +1 -1
  66. package/dist/admin/components/AIChat/hooks/useCodeUpload.js.map +1 -1
  67. package/dist/admin/components/AIChat/hooks/useCodeUpload.mjs.map +1 -1
  68. package/dist/admin/components/AIChat/hooks/useFeedback.js.map +1 -1
  69. package/dist/admin/components/AIChat/hooks/useFeedback.mjs.map +1 -1
  70. package/dist/admin/components/AIChat/hooks/useFigmaUpload.js.map +1 -1
  71. package/dist/admin/components/AIChat/hooks/useFigmaUpload.mjs.map +1 -1
  72. package/dist/admin/components/AIChat/hooks/useLastSeenSchemas.js.map +1 -1
  73. package/dist/admin/components/AIChat/hooks/useLastSeenSchemas.mjs.map +1 -1
  74. package/dist/admin/components/AIChat/hooks/useTranslations.js.map +1 -1
  75. package/dist/admin/components/AIChat/hooks/useTranslations.mjs.map +1 -1
  76. package/dist/admin/components/AIChat/lib/aiClient.js.map +1 -1
  77. package/dist/admin/components/AIChat/lib/aiClient.mjs.map +1 -1
  78. package/dist/admin/components/AIChat/lib/constants.js.map +1 -1
  79. package/dist/admin/components/AIChat/lib/constants.mjs.map +1 -1
  80. package/dist/admin/components/AIChat/lib/misc.js.map +1 -1
  81. package/dist/admin/components/AIChat/lib/misc.mjs.map +1 -1
  82. package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.js.map +1 -1
  83. package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.mjs.map +1 -1
  84. package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.js.map +1 -1
  85. package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs.map +1 -1
  86. package/dist/admin/components/AIChat/providers/ChatProvider.js.map +1 -1
  87. package/dist/admin/components/AIChat/providers/ChatProvider.mjs.map +1 -1
  88. package/dist/admin/components/AIChat/providers/SchemaProvider.js.map +1 -1
  89. package/dist/admin/components/AIChat/providers/SchemaProvider.mjs.map +1 -1
  90. package/dist/admin/components/AllowedTypesSelect.js.map +1 -1
  91. package/dist/admin/components/AllowedTypesSelect.mjs.map +1 -1
  92. package/dist/admin/components/ApplyConditionButton.js.map +1 -1
  93. package/dist/admin/components/ApplyConditionButton.mjs.map +1 -1
  94. package/dist/admin/components/AttributeIcon.js.map +1 -1
  95. package/dist/admin/components/AttributeIcon.mjs +1 -1
  96. package/dist/admin/components/AttributeIcon.mjs.map +1 -1
  97. package/dist/admin/components/AttributeOptions/AttributeList.js.map +1 -1
  98. package/dist/admin/components/AttributeOptions/AttributeList.mjs.map +1 -1
  99. package/dist/admin/components/AttributeOptions/AttributeOption.js.map +1 -1
  100. package/dist/admin/components/AttributeOptions/AttributeOption.mjs.map +1 -1
  101. package/dist/admin/components/AttributeOptions/AttributeOptions.js.map +1 -1
  102. package/dist/admin/components/AttributeOptions/AttributeOptions.mjs.map +1 -1
  103. package/dist/admin/components/AttributeOptions/CustomFieldOption.js.map +1 -1
  104. package/dist/admin/components/AttributeOptions/CustomFieldOption.mjs.map +1 -1
  105. package/dist/admin/components/AttributeOptions/CustomFieldsList.js.map +1 -1
  106. package/dist/admin/components/AttributeOptions/CustomFieldsList.mjs.map +1 -1
  107. package/dist/admin/components/AttributeOptions/EmptyAttributes.js.map +1 -1
  108. package/dist/admin/components/AttributeOptions/EmptyAttributes.mjs.map +1 -1
  109. package/dist/admin/components/AttributeOptions/OptionBoxWrapper.js.map +1 -1
  110. package/dist/admin/components/AttributeOptions/OptionBoxWrapper.mjs.map +1 -1
  111. package/dist/admin/components/AttributeRow.js.map +1 -1
  112. package/dist/admin/components/AttributeRow.mjs +1 -1
  113. package/dist/admin/components/AttributeRow.mjs.map +1 -1
  114. package/dist/admin/components/AutoReloadOverlayBlocker.js.map +1 -1
  115. package/dist/admin/components/AutoReloadOverlayBlocker.mjs.map +1 -1
  116. package/dist/admin/components/BooleanDefaultValueSelect.js.map +1 -1
  117. package/dist/admin/components/BooleanDefaultValueSelect.mjs.map +1 -1
  118. package/dist/admin/components/BooleanRadioGroup.js.map +1 -1
  119. package/dist/admin/components/BooleanRadioGroup.mjs.map +1 -1
  120. package/dist/admin/components/CTBSession/CTBSessionProvider.js.map +1 -1
  121. package/dist/admin/components/CTBSession/CTBSessionProvider.mjs.map +1 -1
  122. package/dist/admin/components/CTBSession/sessionContext.js.map +1 -1
  123. package/dist/admin/components/CTBSession/sessionContext.mjs.map +1 -1
  124. package/dist/admin/components/CTBSession/useCTBSession.js.map +1 -1
  125. package/dist/admin/components/CTBSession/useCTBSession.mjs.map +1 -1
  126. package/dist/admin/components/CTBSession/useCTBTracking.js.map +1 -1
  127. package/dist/admin/components/CTBSession/useCTBTracking.mjs.map +1 -1
  128. package/dist/admin/components/CheckboxWithNumberField.js.map +1 -1
  129. package/dist/admin/components/CheckboxWithNumberField.mjs.map +1 -1
  130. package/dist/admin/components/ComponentCard/ComponentCard.js.map +1 -1
  131. package/dist/admin/components/ComponentCard/ComponentCard.mjs +1 -1
  132. package/dist/admin/components/ComponentCard/ComponentCard.mjs.map +1 -1
  133. package/dist/admin/components/ComponentCard/ComponentIcon/ComponentIcon.js.map +1 -1
  134. package/dist/admin/components/ComponentCard/ComponentIcon/ComponentIcon.mjs.map +1 -1
  135. package/dist/admin/components/ComponentList.js.map +1 -1
  136. package/dist/admin/components/ComponentList.mjs.map +1 -1
  137. package/dist/admin/components/ComponentRow.js.map +1 -1
  138. package/dist/admin/components/ComponentRow.mjs.map +1 -1
  139. package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.js.map +1 -1
  140. package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.mjs +2 -2
  141. package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.mjs.map +1 -1
  142. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js.map +1 -1
  143. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.mjs.map +1 -1
  144. package/dist/admin/components/ContentTypeRadioGroup.js.map +1 -1
  145. package/dist/admin/components/ContentTypeRadioGroup.mjs.map +1 -1
  146. package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.js.map +1 -1
  147. package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.mjs.map +1 -1
  148. package/dist/admin/components/CustomRadioGroup/Styles.js.map +1 -1
  149. package/dist/admin/components/CustomRadioGroup/Styles.mjs +1 -1
  150. package/dist/admin/components/CustomRadioGroup/Styles.mjs.map +1 -1
  151. package/dist/admin/components/DataManager/DataManagerContext.js.map +1 -1
  152. package/dist/admin/components/DataManager/DataManagerContext.mjs.map +1 -1
  153. package/dist/admin/components/DataManager/DataManagerProvider.js.map +1 -1
  154. package/dist/admin/components/DataManager/DataManagerProvider.mjs +1 -1
  155. package/dist/admin/components/DataManager/DataManagerProvider.mjs.map +1 -1
  156. package/dist/admin/components/DataManager/reducer.js.map +1 -1
  157. package/dist/admin/components/DataManager/reducer.mjs.map +1 -1
  158. package/dist/admin/components/DataManager/undoRedo.js.map +1 -1
  159. package/dist/admin/components/DataManager/undoRedo.mjs.map +1 -1
  160. package/dist/admin/components/DataManager/useDataManager.js.map +1 -1
  161. package/dist/admin/components/DataManager/useDataManager.mjs.map +1 -1
  162. package/dist/admin/components/DataManager/useServerRestartWatcher.js.map +1 -1
  163. package/dist/admin/components/DataManager/useServerRestartWatcher.mjs.map +1 -1
  164. package/dist/admin/components/DataManager/utils/cleanData.js.map +1 -1
  165. package/dist/admin/components/DataManager/utils/cleanData.mjs.map +1 -1
  166. package/dist/admin/components/DataManager/utils/retrieveComponentsThatHaveComponents.js.map +1 -1
  167. package/dist/admin/components/DataManager/utils/retrieveComponentsThatHaveComponents.mjs.map +1 -1
  168. package/dist/admin/components/DataManager/utils/retrieveNestedComponents.js.map +1 -1
  169. package/dist/admin/components/DataManager/utils/retrieveNestedComponents.mjs.map +1 -1
  170. package/dist/admin/components/DataManager/utils/retrieveSpecificInfoFromComponents.js.map +1 -1
  171. package/dist/admin/components/DataManager/utils/retrieveSpecificInfoFromComponents.mjs.map +1 -1
  172. package/dist/admin/components/DisplayedType.js.map +1 -1
  173. package/dist/admin/components/DisplayedType.mjs.map +1 -1
  174. package/dist/admin/components/DraftAndPublishToggle.js.map +1 -1
  175. package/dist/admin/components/DraftAndPublishToggle.mjs.map +1 -1
  176. package/dist/admin/components/DynamicZoneList.js.map +1 -1
  177. package/dist/admin/components/DynamicZoneList.mjs +1 -1
  178. package/dist/admin/components/DynamicZoneList.mjs.map +1 -1
  179. package/dist/admin/components/ExitPrompt.js.map +1 -1
  180. package/dist/admin/components/ExitPrompt.mjs.map +1 -1
  181. package/dist/admin/components/Footers.js.map +1 -1
  182. package/dist/admin/components/Footers.mjs +2 -2
  183. package/dist/admin/components/Footers.mjs.map +1 -1
  184. package/dist/admin/components/FormModal/FormModal.js.map +1 -1
  185. package/dist/admin/components/FormModal/FormModal.mjs +1 -1
  186. package/dist/admin/components/FormModal/FormModal.mjs.map +1 -1
  187. package/dist/admin/components/FormModal/attributes/ConditionForm.js.map +1 -1
  188. package/dist/admin/components/FormModal/attributes/ConditionForm.mjs.map +1 -1
  189. package/dist/admin/components/FormModal/attributes/advancedForm.js.map +1 -1
  190. package/dist/admin/components/FormModal/attributes/advancedForm.mjs.map +1 -1
  191. package/dist/admin/components/FormModal/attributes/attributeOptions.js.map +1 -1
  192. package/dist/admin/components/FormModal/attributes/attributeOptions.mjs.map +1 -1
  193. package/dist/admin/components/FormModal/attributes/baseForm.js.map +1 -1
  194. package/dist/admin/components/FormModal/attributes/baseForm.mjs.map +1 -1
  195. package/dist/admin/components/FormModal/attributes/commonBaseForm.js.map +1 -1
  196. package/dist/admin/components/FormModal/attributes/commonBaseForm.mjs.map +1 -1
  197. package/dist/admin/components/FormModal/attributes/form.js.map +1 -1
  198. package/dist/admin/components/FormModal/attributes/form.mjs.map +1 -1
  199. package/dist/admin/components/FormModal/attributes/nameField.js.map +1 -1
  200. package/dist/admin/components/FormModal/attributes/nameField.mjs.map +1 -1
  201. package/dist/admin/components/FormModal/attributes/types.js.map +1 -1
  202. package/dist/admin/components/FormModal/attributes/types.mjs +1 -1
  203. package/dist/admin/components/FormModal/attributes/types.mjs.map +1 -1
  204. package/dist/admin/components/FormModal/attributes/validation/common.js.map +1 -1
  205. package/dist/admin/components/FormModal/attributes/validation/common.mjs.map +1 -1
  206. package/dist/admin/components/FormModal/component/componentField.js.map +1 -1
  207. package/dist/admin/components/FormModal/component/componentField.mjs.map +1 -1
  208. package/dist/admin/components/FormModal/component/componentForm.js.map +1 -1
  209. package/dist/admin/components/FormModal/component/componentForm.mjs.map +1 -1
  210. package/dist/admin/components/FormModal/component/createComponentSchema.js.map +1 -1
  211. package/dist/admin/components/FormModal/component/createComponentSchema.mjs.map +1 -1
  212. package/dist/admin/components/FormModal/contentType/contentTypeForm.js.map +1 -1
  213. package/dist/admin/components/FormModal/contentType/contentTypeForm.mjs.map +1 -1
  214. package/dist/admin/components/FormModal/contentType/createContentTypeSchema.js.map +1 -1
  215. package/dist/admin/components/FormModal/contentType/createContentTypeSchema.mjs.map +1 -1
  216. package/dist/admin/components/FormModal/dynamiczoneForm.js.map +1 -1
  217. package/dist/admin/components/FormModal/dynamiczoneForm.mjs.map +1 -1
  218. package/dist/admin/components/FormModal/forms/forms.js.map +1 -1
  219. package/dist/admin/components/FormModal/forms/forms.mjs.map +1 -1
  220. package/dist/admin/components/FormModal/forms/utils/addItemsToFormSection.js.map +1 -1
  221. package/dist/admin/components/FormModal/forms/utils/addItemsToFormSection.mjs.map +1 -1
  222. package/dist/admin/components/FormModal/forms/utils/createCollectionName.js.map +1 -1
  223. package/dist/admin/components/FormModal/forms/utils/createCollectionName.mjs.map +1 -1
  224. package/dist/admin/components/FormModal/forms/utils/getUsedAttributeNames.js.map +1 -1
  225. package/dist/admin/components/FormModal/forms/utils/getUsedAttributeNames.mjs.map +1 -1
  226. package/dist/admin/components/FormModal/reducer.js.map +1 -1
  227. package/dist/admin/components/FormModal/reducer.mjs.map +1 -1
  228. package/dist/admin/components/FormModal/utils/canEditContentType.js.map +1 -1
  229. package/dist/admin/components/FormModal/utils/canEditContentType.mjs.map +1 -1
  230. package/dist/admin/components/FormModal/utils/createUid.js.map +1 -1
  231. package/dist/admin/components/FormModal/utils/createUid.mjs.map +1 -1
  232. package/dist/admin/components/FormModal/utils/customFieldDefaultOptionsReducer.js.map +1 -1
  233. package/dist/admin/components/FormModal/utils/customFieldDefaultOptionsReducer.mjs.map +1 -1
  234. package/dist/admin/components/FormModal/utils/getAttributesToDisplay.js.map +1 -1
  235. package/dist/admin/components/FormModal/utils/getAttributesToDisplay.mjs.map +1 -1
  236. package/dist/admin/components/FormModal/utils/getFormInputNames.js.map +1 -1
  237. package/dist/admin/components/FormModal/utils/getFormInputNames.mjs.map +1 -1
  238. package/dist/admin/components/FormModal/utils/relations.js.map +1 -1
  239. package/dist/admin/components/FormModal/utils/relations.mjs.map +1 -1
  240. package/dist/admin/components/FormModalEndActions.js.map +1 -1
  241. package/dist/admin/components/FormModalEndActions.mjs.map +1 -1
  242. package/dist/admin/components/FormModalHeader.js.map +1 -1
  243. package/dist/admin/components/FormModalHeader.mjs.map +1 -1
  244. package/dist/admin/components/FormModalNavigation/FormModalNavigationContext.js.map +1 -1
  245. package/dist/admin/components/FormModalNavigation/FormModalNavigationContext.mjs.map +1 -1
  246. package/dist/admin/components/FormModalNavigation/FormModalNavigationProvider.js.map +1 -1
  247. package/dist/admin/components/FormModalNavigation/FormModalNavigationProvider.mjs.map +1 -1
  248. package/dist/admin/components/FormModalNavigation/useFormModalNavigation.js.map +1 -1
  249. package/dist/admin/components/FormModalNavigation/useFormModalNavigation.mjs.map +1 -1
  250. package/dist/admin/components/FormModalSubHeader.js.map +1 -1
  251. package/dist/admin/components/FormModalSubHeader.mjs.map +1 -1
  252. package/dist/admin/components/GenericInputs.js +1 -5
  253. package/dist/admin/components/GenericInputs.js.map +1 -1
  254. package/dist/admin/components/GenericInputs.mjs +1 -5
  255. package/dist/admin/components/GenericInputs.mjs.map +1 -1
  256. package/dist/admin/components/IconPicker/IconPicker.js.map +1 -1
  257. package/dist/admin/components/IconPicker/IconPicker.mjs +1 -1
  258. package/dist/admin/components/IconPicker/IconPicker.mjs.map +1 -1
  259. package/dist/admin/components/IconPicker/constants.js.map +1 -1
  260. package/dist/admin/components/IconPicker/constants.mjs.map +1 -1
  261. package/dist/admin/components/List.js.map +1 -1
  262. package/dist/admin/components/List.mjs +1 -1
  263. package/dist/admin/components/List.mjs.map +1 -1
  264. package/dist/admin/components/PluralName.js.map +1 -1
  265. package/dist/admin/components/PluralName.mjs.map +1 -1
  266. package/dist/admin/components/Relation/Relation.js.map +1 -1
  267. package/dist/admin/components/Relation/Relation.mjs.map +1 -1
  268. package/dist/admin/components/Relation/RelationField/RelationField.js.map +1 -1
  269. package/dist/admin/components/Relation/RelationField/RelationField.mjs.map +1 -1
  270. package/dist/admin/components/Relation/RelationField/RelationTargetPicker/RelationTargetPicker.js.map +1 -1
  271. package/dist/admin/components/Relation/RelationField/RelationTargetPicker/RelationTargetPicker.mjs.map +1 -1
  272. package/dist/admin/components/Relation/RelationNaturePicker/Components.js.map +1 -1
  273. package/dist/admin/components/Relation/RelationNaturePicker/Components.mjs.map +1 -1
  274. package/dist/admin/components/Relation/RelationNaturePicker/RelationNaturePicker.js.map +1 -1
  275. package/dist/admin/components/Relation/RelationNaturePicker/RelationNaturePicker.mjs +1 -1
  276. package/dist/admin/components/Relation/RelationNaturePicker/RelationNaturePicker.mjs.map +1 -1
  277. package/dist/admin/components/SelectCategory.js.map +1 -1
  278. package/dist/admin/components/SelectCategory.mjs.map +1 -1
  279. package/dist/admin/components/SelectComponent.js.map +1 -1
  280. package/dist/admin/components/SelectComponent.mjs.map +1 -1
  281. package/dist/admin/components/SelectComponents.js.map +1 -1
  282. package/dist/admin/components/SelectComponents.mjs.map +1 -1
  283. package/dist/admin/components/SelectDateType.js.map +1 -1
  284. package/dist/admin/components/SelectDateType.mjs.map +1 -1
  285. package/dist/admin/components/SelectNumber.js.map +1 -1
  286. package/dist/admin/components/SelectNumber.mjs.map +1 -1
  287. package/dist/admin/components/SingularName.js.map +1 -1
  288. package/dist/admin/components/SingularName.mjs.map +1 -1
  289. package/dist/admin/components/Status.js.map +1 -1
  290. package/dist/admin/components/Status.mjs.map +1 -1
  291. package/dist/admin/components/TabForm.js.map +1 -1
  292. package/dist/admin/components/TabForm.mjs.map +1 -1
  293. package/dist/admin/components/TextareaEnum.js.map +1 -1
  294. package/dist/admin/components/TextareaEnum.mjs.map +1 -1
  295. package/dist/admin/constants.js.map +1 -1
  296. package/dist/admin/constants.mjs.map +1 -1
  297. package/dist/admin/icons/Curve.js.map +1 -1
  298. package/dist/admin/icons/Curve.mjs.map +1 -1
  299. package/dist/admin/index.js.map +1 -1
  300. package/dist/admin/index.mjs.map +1 -1
  301. package/dist/admin/pages/App/index.js.map +1 -1
  302. package/dist/admin/pages/App/index.mjs.map +1 -1
  303. package/dist/admin/pages/ListView/EmptyState.js.map +1 -1
  304. package/dist/admin/pages/ListView/EmptyState.mjs +1 -1
  305. package/dist/admin/pages/ListView/EmptyState.mjs.map +1 -1
  306. package/dist/admin/pages/ListView/LinkToCMSettingsView.js.map +1 -1
  307. package/dist/admin/pages/ListView/LinkToCMSettingsView.mjs.map +1 -1
  308. package/dist/admin/pages/ListView/ListView.js.map +1 -1
  309. package/dist/admin/pages/ListView/ListView.mjs +1 -1
  310. package/dist/admin/pages/ListView/ListView.mjs.map +1 -1
  311. package/dist/admin/reducers.js +4 -4
  312. package/dist/admin/reducers.js.map +1 -1
  313. package/dist/admin/reducers.mjs +4 -4
  314. package/dist/admin/reducers.mjs.map +1 -1
  315. package/dist/admin/utils/conditions.js.map +1 -1
  316. package/dist/admin/utils/conditions.mjs.map +1 -1
  317. package/dist/admin/utils/findAttribute.js.map +1 -1
  318. package/dist/admin/utils/findAttribute.mjs.map +1 -1
  319. package/dist/admin/utils/formAPI.js.map +1 -1
  320. package/dist/admin/utils/formAPI.mjs.map +1 -1
  321. package/dist/admin/utils/getAttributeDisplayedType.js.map +1 -1
  322. package/dist/admin/utils/getAttributeDisplayedType.mjs.map +1 -1
  323. package/dist/admin/utils/getMaxDepth.js.map +1 -1
  324. package/dist/admin/utils/getMaxDepth.mjs.map +1 -1
  325. package/dist/admin/utils/getRelationType.js.map +1 -1
  326. package/dist/admin/utils/getRelationType.mjs.map +1 -1
  327. package/dist/admin/utils/getTrad.js.map +1 -1
  328. package/dist/admin/utils/getTrad.mjs.map +1 -1
  329. package/dist/admin/utils/getYupInnerErrors.js.map +1 -1
  330. package/dist/admin/utils/getYupInnerErrors.mjs.map +1 -1
  331. package/dist/admin/utils/isAllowedContentTypesForRelations.js.map +1 -1
  332. package/dist/admin/utils/isAllowedContentTypesForRelations.mjs.map +1 -1
  333. package/dist/admin/utils/makeUnique.js.map +1 -1
  334. package/dist/admin/utils/makeUnique.mjs.map +1 -1
  335. package/dist/admin/utils/nameToSlug.js.map +1 -1
  336. package/dist/admin/utils/nameToSlug.mjs.map +1 -1
  337. package/dist/admin/utils/parseDateValue.js.map +1 -1
  338. package/dist/admin/utils/parseDateValue.mjs.map +1 -1
  339. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -1
  340. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -1
  341. package/dist/admin/utils/timeFormat.js.map +1 -1
  342. package/dist/admin/utils/timeFormat.mjs.map +1 -1
  343. package/dist/admin/utils/toRegressedEnumValue.js.map +1 -1
  344. package/dist/admin/utils/toRegressedEnumValue.mjs.map +1 -1
  345. package/dist/server/bootstrap.js.map +1 -1
  346. package/dist/server/bootstrap.mjs.map +1 -1
  347. package/dist/server/config.js.map +1 -1
  348. package/dist/server/config.mjs.map +1 -1
  349. package/dist/server/controllers/builder.js.map +1 -1
  350. package/dist/server/controllers/builder.mjs.map +1 -1
  351. package/dist/server/controllers/component-categories.js.map +1 -1
  352. package/dist/server/controllers/component-categories.mjs.map +1 -1
  353. package/dist/server/controllers/components.js.map +1 -1
  354. package/dist/server/controllers/components.mjs +1 -1
  355. package/dist/server/controllers/components.mjs.map +1 -1
  356. package/dist/server/controllers/content-types.js.map +1 -1
  357. package/dist/server/controllers/content-types.mjs +1 -1
  358. package/dist/server/controllers/content-types.mjs.map +1 -1
  359. package/dist/server/controllers/index.js.map +1 -1
  360. package/dist/server/controllers/index.mjs.map +1 -1
  361. package/dist/server/controllers/schema.js.map +1 -1
  362. package/dist/server/controllers/schema.mjs.map +1 -1
  363. package/dist/server/controllers/validation/common.js.map +1 -1
  364. package/dist/server/controllers/validation/common.mjs.map +1 -1
  365. package/dist/server/controllers/validation/component-category.js.map +1 -1
  366. package/dist/server/controllers/validation/component-category.mjs.map +1 -1
  367. package/dist/server/controllers/validation/component.js.map +1 -1
  368. package/dist/server/controllers/validation/component.mjs +1 -1
  369. package/dist/server/controllers/validation/component.mjs.map +1 -1
  370. package/dist/server/controllers/validation/content-type.js.map +1 -1
  371. package/dist/server/controllers/validation/content-type.mjs.map +1 -1
  372. package/dist/server/controllers/validation/data-transform.js.map +1 -1
  373. package/dist/server/controllers/validation/data-transform.mjs.map +1 -1
  374. package/dist/server/controllers/validation/model-schema.js.map +1 -1
  375. package/dist/server/controllers/validation/model-schema.mjs.map +1 -1
  376. package/dist/server/controllers/validation/relations.js.map +1 -1
  377. package/dist/server/controllers/validation/relations.mjs.map +1 -1
  378. package/dist/server/controllers/validation/schema.js.map +1 -1
  379. package/dist/server/controllers/validation/schema.mjs +1 -1
  380. package/dist/server/controllers/validation/schema.mjs.map +1 -1
  381. package/dist/server/controllers/validation/types.js +0 -1
  382. package/dist/server/controllers/validation/types.js.map +1 -1
  383. package/dist/server/controllers/validation/types.mjs +1 -2
  384. package/dist/server/controllers/validation/types.mjs.map +1 -1
  385. package/dist/server/index.js +8 -8
  386. package/dist/server/middlewares/is-development-mode.js.map +1 -1
  387. package/dist/server/middlewares/is-development-mode.mjs.map +1 -1
  388. package/dist/server/register.js.map +1 -1
  389. package/dist/server/register.mjs.map +1 -1
  390. package/dist/server/routes/admin.js.map +1 -1
  391. package/dist/server/routes/admin.mjs.map +1 -1
  392. package/dist/server/routes/content-api.js.map +1 -1
  393. package/dist/server/routes/content-api.mjs.map +1 -1
  394. package/dist/server/routes/index.js.map +1 -1
  395. package/dist/server/routes/index.mjs.map +1 -1
  396. package/dist/server/services/api-handler.js.map +1 -1
  397. package/dist/server/services/api-handler.mjs.map +1 -1
  398. package/dist/server/services/builder.js.map +1 -1
  399. package/dist/server/services/builder.mjs.map +1 -1
  400. package/dist/server/services/component-categories.js.map +1 -1
  401. package/dist/server/services/component-categories.mjs +1 -1
  402. package/dist/server/services/component-categories.mjs.map +1 -1
  403. package/dist/server/services/components.js.map +1 -1
  404. package/dist/server/services/components.mjs +1 -1
  405. package/dist/server/services/components.mjs.map +1 -1
  406. package/dist/server/services/constants.js.map +1 -1
  407. package/dist/server/services/constants.mjs.map +1 -1
  408. package/dist/server/services/content-types.js.map +1 -1
  409. package/dist/server/services/content-types.mjs +1 -1
  410. package/dist/server/services/content-types.mjs.map +1 -1
  411. package/dist/server/services/index.js.map +1 -1
  412. package/dist/server/services/index.mjs.map +1 -1
  413. package/dist/server/services/schema-builder/component-builder.js.map +1 -1
  414. package/dist/server/services/schema-builder/component-builder.mjs +1 -1
  415. package/dist/server/services/schema-builder/component-builder.mjs.map +1 -1
  416. package/dist/server/services/schema-builder/content-type-builder.js.map +1 -1
  417. package/dist/server/services/schema-builder/content-type-builder.mjs +2 -2
  418. package/dist/server/services/schema-builder/content-type-builder.mjs.map +1 -1
  419. package/dist/server/services/schema-builder/index.js.map +1 -1
  420. package/dist/server/services/schema-builder/index.mjs +3 -3
  421. package/dist/server/services/schema-builder/index.mjs.map +1 -1
  422. package/dist/server/services/schema-builder/schema-handler.js.map +1 -1
  423. package/dist/server/services/schema-builder/schema-handler.mjs.map +1 -1
  424. package/dist/server/services/schema.js.map +1 -1
  425. package/dist/server/services/schema.mjs +1 -1
  426. package/dist/server/services/schema.mjs.map +1 -1
  427. package/dist/server/utils/attributes.js.map +1 -1
  428. package/dist/server/utils/attributes.mjs.map +1 -1
  429. package/dist/server/utils/index.js.map +1 -1
  430. package/dist/server/utils/index.mjs.map +1 -1
  431. package/dist/server/utils/typeguards.js.map +1 -1
  432. package/dist/server/utils/typeguards.mjs.map +1 -1
  433. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"Chat.js","sources":["../../../../admin/src/components/AIChat/Chat.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport { tours, useGuidedTour, useAppInfo } from '@strapi/admin/strapi-admin';\nimport { Flex, IconButton, Button, Typography, Box } from '@strapi/design-system';\nimport { Sparkle, ArrowUp, Plus, Paperclip, Upload, Code } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\nimport { useCTBTracking } from '../CTBSession/ctbSession';\n\nimport { Alert } from './components/Alert';\nimport { AnimatedBox } from './components/AnimatedBox';\nimport { AttachmentPreview } from './components/Attachments/AttachmentPreview';\nimport { Dropzone } from './components/Dropzone';\nimport { Panel } from './components/FloatingPanel';\nimport { FigmaIcon } from './components/icons/FigmaIcon';\nimport { StopIcon } from './components/icons/StopIcon';\nimport { Input } from './components/Input';\nimport { ChatMessage } from './components/Messages/Message';\nimport { ResizableTextArea } from './components/ResizableTextArea';\nimport { MenuItem, SimpleMenu } from './components/SimpleMenu';\nimport {\n CHAT_TOO_LONG_ERROR,\n LICENSE_LIMIT_REACHED_ERROR,\n TOO_MANY_REQUESTS_ERROR,\n LICENSE_LIMIT_EXCEEDED_ERROR,\n} from './hooks/useAIFetch';\nimport { useAttachments } from './hooks/useAttachments';\nimport { useTranslations } from './hooks/useTranslations';\nimport { AIMessage } from './lib/types/messages';\nimport { useStrapiChat } from './providers/ChatProvider';\nimport { useUploadProjectToChat } from './UploadCodeModal';\nimport { useUploadFigmaToChat } from './UploadFigmaModal';\n\n/* -------------------------------------------------------------------------------------------------\n * Chat Message Suggestions\n * -----------------------------------------------------------------------------------------------*/\nconst ResponsiveFlex = styled(Flex)`\n @media (max-height: 500px) {\n display: none;\n }\n`;\n\nconst ChatSuggestions = () => {\n const { sendMessage } = useStrapiChat();\n const { t } = useTranslations();\n const { trackUsage } = useCTBTracking();\n\n const SUGGESTIONS = [\n t('chat.input.defaults.generate', 'Generate a product schema'),\n t('chat.input.defaults.ctb', 'Tell me about the Content-Type Builder'),\n t('chat.input.defaults.strapi', 'Tell me about Strapi'),\n ] as const;\n\n const SUGGESTION_TO_PROMPT_TYPE = {\n [t('chat.input.defaults.generate', 'Generate a product schema')]: 'generate-product-schema',\n [t('chat.input.defaults.ctb', 'Tell me about the Content-Type Builder')]:\n 'tell-me-about-the-content-type-builder',\n [t('chat.input.defaults.strapi', 'Tell me about Strapi')]: 'tell-me-about-strapi',\n } as const;\n\n const suggestionsTitle = t('chat.input.defaults.title', 'How can I help you?');\n\n return (\n <AnimatedBox>\n <ResponsiveFlex direction=\"column\" alignItems={'flex-start'} gap={3}>\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {suggestionsTitle}\n </Typography>\n <Flex direction=\"column\" alignItems={'flex-start'} gap={2}>\n {SUGGESTIONS.map((suggestion) => (\n <Button\n key={suggestion}\n startIcon={<Sparkle fill=\"neutral500\" />}\n size=\"M\"\n variant=\"tertiary\"\n onClick={() => {\n trackUsage('didUsePresetPrompt', {\n promptType: SUGGESTION_TO_PROMPT_TYPE[suggestion],\n });\n\n sendMessage({ text: suggestion });\n }}\n >\n <Typography fontWeight=\"regular\">{suggestion}</Typography>\n </Button>\n ))}\n </Flex>\n </ResponsiveFlex>\n </AnimatedBox>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Chat Errors\n * -----------------------------------------------------------------------------------------------*/\nconst getErrorMessage = (err: Error) => {\n try {\n const error = JSON.parse(err.message);\n return error.error;\n } catch (e) {\n return err;\n }\n};\n\nconst ChatError = () => {\n const { error } = useStrapiChat();\n const { t } = useTranslations();\n\n const defaultErrorMessage = t('chat.messages.error', 'Something went wrong.');\n const tooManyRequestsMessage = t(\n 'chat.messages.too-many-requests',\n 'Too many requests, please try again later.'\n );\n const licenseLimitReachedMessage = t(\n 'chat.messages.license-limit-reached',\n 'License limit reached, please try again tomorrow.'\n );\n const licenseLimitExceededMessage = t(\n 'chat.messages.license-limit-exceeded',\n 'AI credit limit exceeded.'\n );\n const chatTooLongError = t(\n 'chat.messages.too-long-error',\n 'This conversation reached its maximum length. Start a new conversation'\n );\n\n if (!error) return null;\n\n const errorMessage = getErrorMessage(error);\n if (!errorMessage || typeof errorMessage !== 'string') {\n return null;\n }\n\n if (errorMessage === TOO_MANY_REQUESTS_ERROR) {\n return <Alert title={tooManyRequestsMessage} variant=\"warning\" />;\n }\n\n if (errorMessage === LICENSE_LIMIT_REACHED_ERROR) {\n return <Alert title={licenseLimitReachedMessage} variant=\"warning\" />;\n }\n\n if (errorMessage.split('.')[0] === LICENSE_LIMIT_EXCEEDED_ERROR) {\n return <Alert title={licenseLimitExceededMessage} variant=\"danger\" />;\n }\n\n if (errorMessage === CHAT_TOO_LONG_ERROR) {\n return <Alert title={chatTooLongError} variant=\"danger\" />;\n }\n\n return <Alert title={defaultErrorMessage} variant=\"danger\" />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Chat Messages\n * -----------------------------------------------------------------------------------------------*/\nconst ChatContent: React.FC<{\n messages: AIMessage[];\n}> = ({ messages }) => {\n const messageEndRef = useRef<HTMLDivElement>(null);\n const { status } = useStrapiChat();\n\n // Scroll to the bottom of the chat when new messages arrive\n useEffect(() => {\n // Add a small delay to ensure all message content is fully rendered\n // including conditionally rendered elements like feedback buttons\n const scrollTimeout = setTimeout(() => {\n messageEndRef.current?.scrollIntoView({ behavior: 'smooth' });\n }, 20);\n\n return () => clearTimeout(scrollTimeout);\n }, [messages, status]);\n\n return (\n <>\n <Flex direction=\"column\" gap={5}>\n {messages.map((message, idx) => (\n <ChatMessage\n key={message.id}\n message={message}\n // Chat loading and message is the last one\n isLoading={\n (status === 'streaming' || status === 'submitted') && idx === messages.length - 1\n }\n />\n ))}\n {status === 'error' && <ChatError />}\n </Flex>\n <div ref={messageEndRef} />\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Attachments\n * -----------------------------------------------------------------------------------------------*/\nconst ChatAttachmentList = () => {\n const { attachments, removeAttachmentByIndex } = useAttachments();\n\n if (!attachments.length) return null;\n\n return (\n <Input.Attachments>\n {attachments.map((attachment, index) => (\n <Box key={attachment.filename} maxWidth={'250px'}>\n <AttachmentPreview\n attachment={attachment}\n onRemove={() => removeAttachmentByIndex(index)}\n />\n </Box>\n ))}\n </Input.Attachments>\n );\n};\n\nconst ChatAttachmentMenu = () => {\n const { attachFiles } = useAttachments();\n const { openCodeUpload } = useUploadProjectToChat();\n const { openFigmaUpload } = useUploadFigmaToChat();\n const { t } = useTranslations();\n\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const uploadLabel = t('chat.tooltips.upload-attachments', 'Upload attachments');\n const importCodeText = t('chat.attachments.menu.import-code', 'Import code');\n const attachImageText = t('chat.attachments.menu.attach-image', 'Attach image');\n const importFigmaText = t('chat.attachments.menu.import-figma', 'Import from Figma');\n\n return (\n <SimpleMenu\n label={uploadLabel}\n icon={<Paperclip />}\n tag={IconButton}\n popoverPlacement=\"top-end\"\n >\n <MenuItem startIcon={<Code />} onSelect={() => openCodeUpload()}>\n {importCodeText}\n </MenuItem>\n\n <MenuItem startIcon={<FigmaIcon />} onSelect={() => openFigmaUpload()}>\n {importFigmaText}\n </MenuItem>\n\n <input type=\"file\" accept=\"image/*\" multiple hidden ref={fileInputRef} />\n <MenuItem\n startIcon={<Upload />}\n onSelect={() => {\n const fileInput = fileInputRef.current;\n if (!fileInput) return;\n fileInput.onchange = (e) => {\n const target = e.target as HTMLInputElement;\n if (target.files && target.files.length > 0) {\n attachFiles(Array.from(target.files));\n }\n };\n\n fileInput.click();\n }}\n >\n {attachImageText}\n </MenuItem>\n </SimpleMenu>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Input\n * -----------------------------------------------------------------------------------------------*/\n\nconst LoadingDots = ({ children }: { children: string }) => {\n const [dots, setDots] = useState('');\n\n useEffect(() => {\n const dotStates = ['', '.', '..', '...'];\n let currentIndex = 0;\n\n const interval = setInterval(() => {\n currentIndex = (currentIndex + 1) % dotStates.length;\n setDots(dotStates[currentIndex]);\n }, 400); // Change every 400ms\n\n return () => clearInterval(interval);\n }, []);\n\n return (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {children}\n {dots}\n </Typography>\n );\n};\n\nconst ChatInput = (props: React.FormHTMLAttributes<HTMLFormElement>) => {\n const { input, handleSubmit, handleInputChange, messages, status, stop, attachments } =\n useStrapiChat();\n const { t } = useTranslations();\n\n const isLoading = status === 'streaming' || status === 'submitted';\n\n return (\n <>\n <form onSubmit={handleSubmit} {...props}>\n <Input.Root isLoading={isLoading} gap={4}>\n <Input.Header minHeight={0}>\n {messages.length === 0 && (\n <Input.HeaderItem>\n <ChatSuggestions />\n </Input.HeaderItem>\n )}\n {isLoading && (\n <Input.HeaderItem>\n <LoadingDots>{t('chat.input.thinking', 'Strapi AI is thinking')}</LoadingDots>\n </Input.HeaderItem>\n )}\n </Input.Header>\n <Input.Content>\n <Dropzone.Area />\n <ChatAttachmentList />\n <Box paddingBottom={3}>\n <ResizableTextArea\n value={input}\n onChange={handleInputChange}\n onSubmit={handleSubmit}\n placeholder={t('chat.input.placeholder', 'Ask Strapi AI...')}\n />\n </Box>\n <Input.Actions>\n <ChatAttachmentMenu />\n\n {isLoading ? (\n <IconButton\n label={t('chat.tooltips.stop-generation', 'Stop')}\n type=\"button\"\n variant=\"default\"\n onClick={(e) => {\n e.preventDefault();\n stop();\n }}\n >\n <StopIcon />\n </IconButton>\n ) : (\n <IconButton\n label={t('chat.tooltips.send-message', 'Send')}\n variant=\"default\"\n type=\"submit\"\n // allow sending an empty message if there are attachments\n disabled={input.trim().length === 0 && attachments.length === 0}\n >\n <ArrowUp />\n </IconButton>\n )}\n </Input.Actions>\n </Input.Content>\n </Input.Root>\n </form>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Chat\n * -----------------------------------------------------------------------------------------------*/\n\nconst Chat = () => {\n const { title, messages, isChatOpen, isChatEnabled, openChat, closeChat, reset } =\n useStrapiChat();\n const { attachFiles } = useAttachments();\n const { t } = useTranslations();\n const state = useGuidedTour('Chat', (s) => s.state);\n const currentEnvironment = useAppInfo('Chat', (state) => state.currentEnvironment);\n\n // Disable AI Chat in production mode\n const isProduction = currentEnvironment === 'production';\n\n // Auto-open chat when AIChat guided tour step is active\n useEffect(() => {\n const isAIChatStepActive =\n state.enabled &&\n state.tours.contentTypeBuilder?.currentStep === 1 && // AIChat is step 1 in contentTypeBuilderStepsAI\n !state.tours.contentTypeBuilder?.isCompleted;\n\n if (isAIChatStepActive && !isChatOpen && openChat) {\n openChat();\n }\n }, [\n state.tours.contentTypeBuilder?.currentStep,\n state.tours.contentTypeBuilder?.isCompleted,\n state.enabled,\n isChatOpen,\n openChat,\n ]);\n\n // Labels\n const openChatLabel = t('chat.tooltips.open-chat', 'Open chat');\n const closeChatLabel = t('chat.tooltips.close-chat', 'Close chat');\n const createChatLabel = t('chat.tooltips.create-chat', 'New conversation');\n const defaultTitle = t('chat.header.default-title', 'New conversation');\n const mistakesDisclaimer = t(\n 'chat.input.strapi-ai-can-make-errors',\n 'Strapi AI can make mistakes.'\n );\n\n // Don't render the chat at all in production mode or if chat is not enabled\n if (!isChatEnabled || isProduction) {\n return null;\n }\n\n return (\n <Dropzone.Root\n onAddFiles={(files) => {\n attachFiles(files);\n }}\n >\n <Panel.Root\n size=\"md\"\n position=\"bottom-right\"\n isOpen={isChatOpen}\n onToggle={isChatOpen ? closeChat : openChat}\n toggleIcon={\n <IconButton\n onClick={isChatOpen ? closeChat : openChat}\n label={isChatOpen ? closeChatLabel : openChatLabel}\n variant=\"default\"\n size=\"L\"\n >\n <Sparkle />\n </IconButton>\n }\n >\n <Panel.Header>\n <Typography tag=\"h3\" variant=\"omega\" fontWeight=\"bold\">\n {title || defaultTitle}\n </Typography>\n <Flex gap={0}>\n <IconButton label={createChatLabel} variant=\"ghost\" onClick={reset}>\n <Plus />\n </IconButton>\n <Panel.Close label={closeChatLabel} />\n </Flex>\n </Panel.Header>\n\n <Panel.Body>\n <tours.contentTypeBuilder.AIChat>\n {!messages.length ? (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {mistakesDisclaimer}\n </Typography>\n ) : null}\n <ChatContent messages={messages} />\n </tours.contentTypeBuilder.AIChat>\n </Panel.Body>\n\n <Panel.Footer>\n <ChatInput />\n </Panel.Footer>\n </Panel.Root>\n </Dropzone.Root>\n );\n};\n\nexport { Chat };\n"],"names":["ResponsiveFlex","styled","Flex","ChatSuggestions","sendMessage","useStrapiChat","t","useTranslations","trackUsage","useCTBTracking","SUGGESTIONS","SUGGESTION_TO_PROMPT_TYPE","suggestionsTitle","_jsx","AnimatedBox","_jsxs","direction","alignItems","gap","Typography","variant","fontWeight","map","suggestion","Button","startIcon","Sparkle","fill","size","onClick","promptType","text","getErrorMessage","err","error","JSON","parse","message","e","ChatError","defaultErrorMessage","tooManyRequestsMessage","licenseLimitReachedMessage","licenseLimitExceededMessage","chatTooLongError","errorMessage","TOO_MANY_REQUESTS_ERROR","Alert","title","LICENSE_LIMIT_REACHED_ERROR","split","LICENSE_LIMIT_EXCEEDED_ERROR","CHAT_TOO_LONG_ERROR","ChatContent","messages","messageEndRef","useRef","status","useEffect","scrollTimeout","setTimeout","current","scrollIntoView","behavior","clearTimeout","_Fragment","idx","ChatMessage","isLoading","length","id","div","ref","ChatAttachmentList","attachments","removeAttachmentByIndex","useAttachments","Input","Attachments","attachment","index","Box","maxWidth","AttachmentPreview","onRemove","filename","ChatAttachmentMenu","attachFiles","openCodeUpload","useUploadProjectToChat","openFigmaUpload","useUploadFigmaToChat","fileInputRef","uploadLabel","importCodeText","attachImageText","importFigmaText","SimpleMenu","label","icon","Paperclip","tag","IconButton","popoverPlacement","MenuItem","Code","onSelect","FigmaIcon","input","type","accept","multiple","hidden","Upload","fileInput","onchange","target","files","Array","from","click","LoadingDots","children","dots","setDots","useState","dotStates","currentIndex","interval","setInterval","clearInterval","textColor","ChatInput","props","handleSubmit","handleInputChange","stop","form","onSubmit","Root","Header","minHeight","HeaderItem","Content","Dropzone","Area","paddingBottom","ResizableTextArea","value","onChange","placeholder","Actions","preventDefault","StopIcon","disabled","trim","ArrowUp","Chat","isChatOpen","isChatEnabled","openChat","closeChat","reset","state","useGuidedTour","s","currentEnvironment","useAppInfo","isProduction","isAIChatStepActive","enabled","tours","contentTypeBuilder","currentStep","isCompleted","openChatLabel","closeChatLabel","createChatLabel","defaultTitle","mistakesDisclaimer","onAddFiles","Panel","position","isOpen","onToggle","toggleIcon","Plus","Close","Body","AIChat","Footer"],"mappings":"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"}
1
+ {"version":3,"file":"Chat.js","sources":["../../../../admin/src/components/AIChat/Chat.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport { tours, useGuidedTour, useAppInfo } from '@strapi/admin/strapi-admin';\nimport { Flex, IconButton, Button, Typography, Box } from '@strapi/design-system';\nimport { Sparkle, ArrowUp, Plus, Paperclip, Upload, Code } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\nimport { useCTBTracking } from '../CTBSession/ctbSession';\n\nimport { Alert } from './components/Alert';\nimport { AnimatedBox } from './components/AnimatedBox';\nimport { AttachmentPreview } from './components/Attachments/AttachmentPreview';\nimport { Dropzone } from './components/Dropzone';\nimport { Panel } from './components/FloatingPanel';\nimport { FigmaIcon } from './components/icons/FigmaIcon';\nimport { StopIcon } from './components/icons/StopIcon';\nimport { Input } from './components/Input';\nimport { ChatMessage } from './components/Messages/Message';\nimport { ResizableTextArea } from './components/ResizableTextArea';\nimport { MenuItem, SimpleMenu } from './components/SimpleMenu';\nimport {\n CHAT_TOO_LONG_ERROR,\n LICENSE_LIMIT_REACHED_ERROR,\n TOO_MANY_REQUESTS_ERROR,\n LICENSE_LIMIT_EXCEEDED_ERROR,\n} from './hooks/useAIFetch';\nimport { useAttachments } from './hooks/useAttachments';\nimport { useTranslations } from './hooks/useTranslations';\nimport { AIMessage } from './lib/types/messages';\nimport { useStrapiChat } from './providers/ChatProvider';\nimport { useUploadProjectToChat } from './UploadCodeModal';\nimport { useUploadFigmaToChat } from './UploadFigmaModal';\n\n/* -------------------------------------------------------------------------------------------------\n * Chat Message Suggestions\n * -----------------------------------------------------------------------------------------------*/\nconst ResponsiveFlex = styled(Flex)`\n @media (max-height: 500px) {\n display: none;\n }\n`;\n\nconst ChatSuggestions = () => {\n const { sendMessage } = useStrapiChat();\n const { t } = useTranslations();\n const { trackUsage } = useCTBTracking();\n\n const SUGGESTIONS = [\n t('chat.input.defaults.generate', 'Generate a product schema'),\n t('chat.input.defaults.ctb', 'Tell me about the Content-Type Builder'),\n t('chat.input.defaults.strapi', 'Tell me about Strapi'),\n ] as const;\n\n const SUGGESTION_TO_PROMPT_TYPE = {\n [t('chat.input.defaults.generate', 'Generate a product schema')]: 'generate-product-schema',\n [t('chat.input.defaults.ctb', 'Tell me about the Content-Type Builder')]:\n 'tell-me-about-the-content-type-builder',\n [t('chat.input.defaults.strapi', 'Tell me about Strapi')]: 'tell-me-about-strapi',\n } as const;\n\n const suggestionsTitle = t('chat.input.defaults.title', 'How can I help you?');\n\n return (\n <AnimatedBox>\n <ResponsiveFlex direction=\"column\" alignItems={'flex-start'} gap={3}>\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {suggestionsTitle}\n </Typography>\n <Flex direction=\"column\" alignItems={'flex-start'} gap={2}>\n {SUGGESTIONS.map((suggestion) => (\n <Button\n key={suggestion}\n startIcon={<Sparkle fill=\"neutral500\" />}\n size=\"M\"\n variant=\"tertiary\"\n onClick={() => {\n trackUsage('didUsePresetPrompt', {\n promptType: SUGGESTION_TO_PROMPT_TYPE[suggestion],\n });\n\n sendMessage({ text: suggestion });\n }}\n >\n <Typography fontWeight=\"regular\">{suggestion}</Typography>\n </Button>\n ))}\n </Flex>\n </ResponsiveFlex>\n </AnimatedBox>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Chat Errors\n * -----------------------------------------------------------------------------------------------*/\nconst getErrorMessage = (err: Error) => {\n try {\n const error = JSON.parse(err.message);\n return error.error;\n } catch (e) {\n return err;\n }\n};\n\nconst ChatError = () => {\n const { error } = useStrapiChat();\n const { t } = useTranslations();\n\n const defaultErrorMessage = t('chat.messages.error', 'Something went wrong.');\n const tooManyRequestsMessage = t(\n 'chat.messages.too-many-requests',\n 'Too many requests, please try again later.'\n );\n const licenseLimitReachedMessage = t(\n 'chat.messages.license-limit-reached',\n 'License limit reached, please try again tomorrow.'\n );\n const licenseLimitExceededMessage = t(\n 'chat.messages.license-limit-exceeded',\n 'AI credit limit exceeded.'\n );\n const chatTooLongError = t(\n 'chat.messages.too-long-error',\n 'This conversation reached its maximum length. Start a new conversation'\n );\n\n if (!error) return null;\n\n const errorMessage = getErrorMessage(error);\n if (!errorMessage || typeof errorMessage !== 'string') {\n return null;\n }\n\n if (errorMessage === TOO_MANY_REQUESTS_ERROR) {\n return <Alert title={tooManyRequestsMessage} variant=\"warning\" />;\n }\n\n if (errorMessage === LICENSE_LIMIT_REACHED_ERROR) {\n return <Alert title={licenseLimitReachedMessage} variant=\"warning\" />;\n }\n\n if (errorMessage.split('.')[0] === LICENSE_LIMIT_EXCEEDED_ERROR) {\n return <Alert title={licenseLimitExceededMessage} variant=\"danger\" />;\n }\n\n if (errorMessage === CHAT_TOO_LONG_ERROR) {\n return <Alert title={chatTooLongError} variant=\"danger\" />;\n }\n\n return <Alert title={defaultErrorMessage} variant=\"danger\" />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Chat Messages\n * -----------------------------------------------------------------------------------------------*/\nconst ChatContent: React.FC<{\n messages: AIMessage[];\n}> = ({ messages }) => {\n const messageEndRef = useRef<HTMLDivElement>(null);\n const { status } = useStrapiChat();\n\n // Scroll to the bottom of the chat when new messages arrive\n useEffect(() => {\n // Add a small delay to ensure all message content is fully rendered\n // including conditionally rendered elements like feedback buttons\n const scrollTimeout = setTimeout(() => {\n messageEndRef.current?.scrollIntoView({ behavior: 'smooth' });\n }, 20);\n\n return () => clearTimeout(scrollTimeout);\n }, [messages, status]);\n\n return (\n <>\n <Flex direction=\"column\" gap={5}>\n {messages.map((message, idx) => (\n <ChatMessage\n key={message.id}\n message={message}\n // Chat loading and message is the last one\n isLoading={\n (status === 'streaming' || status === 'submitted') && idx === messages.length - 1\n }\n />\n ))}\n {status === 'error' && <ChatError />}\n </Flex>\n <div ref={messageEndRef} />\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Attachments\n * -----------------------------------------------------------------------------------------------*/\nconst ChatAttachmentList = () => {\n const { attachments, removeAttachmentByIndex } = useAttachments();\n\n if (!attachments.length) return null;\n\n return (\n <Input.Attachments>\n {attachments.map((attachment, index) => (\n <Box key={attachment.filename} maxWidth={'250px'}>\n <AttachmentPreview\n attachment={attachment}\n onRemove={() => removeAttachmentByIndex(index)}\n />\n </Box>\n ))}\n </Input.Attachments>\n );\n};\n\nconst ChatAttachmentMenu = () => {\n const { attachFiles } = useAttachments();\n const { openCodeUpload } = useUploadProjectToChat();\n const { openFigmaUpload } = useUploadFigmaToChat();\n const { t } = useTranslations();\n\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const uploadLabel = t('chat.tooltips.upload-attachments', 'Upload attachments');\n const importCodeText = t('chat.attachments.menu.import-code', 'Import code');\n const attachImageText = t('chat.attachments.menu.attach-image', 'Attach image');\n const importFigmaText = t('chat.attachments.menu.import-figma', 'Import from Figma');\n\n return (\n <SimpleMenu\n label={uploadLabel}\n icon={<Paperclip />}\n tag={IconButton}\n popoverPlacement=\"top-end\"\n >\n <MenuItem startIcon={<Code />} onSelect={() => openCodeUpload()}>\n {importCodeText}\n </MenuItem>\n\n <MenuItem startIcon={<FigmaIcon />} onSelect={() => openFigmaUpload()}>\n {importFigmaText}\n </MenuItem>\n\n <input type=\"file\" accept=\"image/*\" multiple hidden ref={fileInputRef} />\n <MenuItem\n startIcon={<Upload />}\n onSelect={() => {\n const fileInput = fileInputRef.current;\n if (!fileInput) return;\n fileInput.onchange = (e) => {\n const target = e.target as HTMLInputElement;\n if (target.files && target.files.length > 0) {\n attachFiles(Array.from(target.files));\n }\n };\n\n fileInput.click();\n }}\n >\n {attachImageText}\n </MenuItem>\n </SimpleMenu>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Input\n * -----------------------------------------------------------------------------------------------*/\n\nconst LoadingDots = ({ children }: { children: string }) => {\n const [dots, setDots] = useState('');\n\n useEffect(() => {\n const dotStates = ['', '.', '..', '...'];\n let currentIndex = 0;\n\n const interval = setInterval(() => {\n currentIndex = (currentIndex + 1) % dotStates.length;\n setDots(dotStates[currentIndex]);\n }, 400); // Change every 400ms\n\n return () => clearInterval(interval);\n }, []);\n\n return (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {children}\n {dots}\n </Typography>\n );\n};\n\nconst ChatInput = (props: React.FormHTMLAttributes<HTMLFormElement>) => {\n const { input, handleSubmit, handleInputChange, messages, status, stop, attachments } =\n useStrapiChat();\n const { t } = useTranslations();\n\n const isLoading = status === 'streaming' || status === 'submitted';\n\n return (\n <>\n <form onSubmit={handleSubmit} {...props}>\n <Input.Root isLoading={isLoading} gap={4}>\n <Input.Header minHeight={0}>\n {messages.length === 0 && (\n <Input.HeaderItem>\n <ChatSuggestions />\n </Input.HeaderItem>\n )}\n {isLoading && (\n <Input.HeaderItem>\n <LoadingDots>{t('chat.input.thinking', 'Strapi AI is thinking')}</LoadingDots>\n </Input.HeaderItem>\n )}\n </Input.Header>\n <Input.Content>\n <Dropzone.Area />\n <ChatAttachmentList />\n <Box paddingBottom={3}>\n <ResizableTextArea\n value={input}\n onChange={handleInputChange}\n onSubmit={handleSubmit}\n placeholder={t('chat.input.placeholder', 'Ask Strapi AI...')}\n />\n </Box>\n <Input.Actions>\n <ChatAttachmentMenu />\n\n {isLoading ? (\n <IconButton\n label={t('chat.tooltips.stop-generation', 'Stop')}\n type=\"button\"\n variant=\"default\"\n onClick={(e) => {\n e.preventDefault();\n stop();\n }}\n >\n <StopIcon />\n </IconButton>\n ) : (\n <IconButton\n label={t('chat.tooltips.send-message', 'Send')}\n variant=\"default\"\n type=\"submit\"\n // allow sending an empty message if there are attachments\n disabled={input.trim().length === 0 && attachments.length === 0}\n >\n <ArrowUp />\n </IconButton>\n )}\n </Input.Actions>\n </Input.Content>\n </Input.Root>\n </form>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Chat\n * -----------------------------------------------------------------------------------------------*/\n\nconst Chat = () => {\n const { title, messages, isChatOpen, isChatEnabled, openChat, closeChat, reset } =\n useStrapiChat();\n const { attachFiles } = useAttachments();\n const { t } = useTranslations();\n const state = useGuidedTour('Chat', (s) => s.state);\n const currentEnvironment = useAppInfo('Chat', (state) => state.currentEnvironment);\n\n // Disable AI Chat in production mode\n const isProduction = currentEnvironment === 'production';\n\n // Auto-open chat when AIChat guided tour step is active\n useEffect(() => {\n const isAIChatStepActive =\n state.enabled &&\n state.tours.contentTypeBuilder?.currentStep === 1 && // AIChat is step 1 in contentTypeBuilderStepsAI\n !state.tours.contentTypeBuilder?.isCompleted;\n\n if (isAIChatStepActive && !isChatOpen && openChat) {\n openChat();\n }\n }, [\n state.tours.contentTypeBuilder?.currentStep,\n state.tours.contentTypeBuilder?.isCompleted,\n state.enabled,\n isChatOpen,\n openChat,\n ]);\n\n // Labels\n const openChatLabel = t('chat.tooltips.open-chat', 'Open chat');\n const closeChatLabel = t('chat.tooltips.close-chat', 'Close chat');\n const createChatLabel = t('chat.tooltips.create-chat', 'New conversation');\n const defaultTitle = t('chat.header.default-title', 'New conversation');\n const mistakesDisclaimer = t(\n 'chat.input.strapi-ai-can-make-errors',\n 'Strapi AI can make mistakes.'\n );\n\n // Don't render the chat at all in production mode or if chat is not enabled\n if (!isChatEnabled || isProduction) {\n return null;\n }\n\n return (\n <Dropzone.Root\n onAddFiles={(files) => {\n attachFiles(files);\n }}\n >\n <Panel.Root\n size=\"md\"\n position=\"bottom-right\"\n isOpen={isChatOpen}\n onToggle={isChatOpen ? closeChat : openChat}\n toggleIcon={\n <IconButton\n onClick={isChatOpen ? closeChat : openChat}\n label={isChatOpen ? closeChatLabel : openChatLabel}\n variant=\"default\"\n size=\"L\"\n >\n <Sparkle />\n </IconButton>\n }\n >\n <Panel.Header>\n <Typography tag=\"h3\" variant=\"omega\" fontWeight=\"bold\">\n {title || defaultTitle}\n </Typography>\n <Flex gap={0}>\n <IconButton label={createChatLabel} variant=\"ghost\" onClick={reset}>\n <Plus />\n </IconButton>\n <Panel.Close label={closeChatLabel} />\n </Flex>\n </Panel.Header>\n\n <Panel.Body>\n <tours.contentTypeBuilder.AIChat>\n {!messages.length ? (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {mistakesDisclaimer}\n </Typography>\n ) : null}\n <ChatContent messages={messages} />\n </tours.contentTypeBuilder.AIChat>\n </Panel.Body>\n\n <Panel.Footer>\n <ChatInput />\n </Panel.Footer>\n </Panel.Root>\n </Dropzone.Root>\n );\n};\n\nexport { Chat };\n"],"names":["ResponsiveFlex","styled","Flex","ChatSuggestions","sendMessage","useStrapiChat","t","useTranslations","trackUsage","useCTBTracking","SUGGESTIONS","SUGGESTION_TO_PROMPT_TYPE","suggestionsTitle","_jsx","AnimatedBox","_jsxs","direction","alignItems","gap","Typography","variant","fontWeight","map","suggestion","Button","startIcon","Sparkle","fill","size","onClick","promptType","text","getErrorMessage","err","error","JSON","parse","message","e","ChatError","defaultErrorMessage","tooManyRequestsMessage","licenseLimitReachedMessage","licenseLimitExceededMessage","chatTooLongError","errorMessage","TOO_MANY_REQUESTS_ERROR","Alert","title","LICENSE_LIMIT_REACHED_ERROR","split","LICENSE_LIMIT_EXCEEDED_ERROR","CHAT_TOO_LONG_ERROR","ChatContent","messages","messageEndRef","useRef","status","useEffect","scrollTimeout","setTimeout","current","scrollIntoView","behavior","clearTimeout","_Fragment","idx","ChatMessage","isLoading","length","id","div","ref","ChatAttachmentList","attachments","removeAttachmentByIndex","useAttachments","Input","Attachments","attachment","index","Box","maxWidth","AttachmentPreview","onRemove","filename","ChatAttachmentMenu","attachFiles","openCodeUpload","useUploadProjectToChat","openFigmaUpload","useUploadFigmaToChat","fileInputRef","uploadLabel","importCodeText","attachImageText","importFigmaText","SimpleMenu","label","icon","Paperclip","tag","IconButton","popoverPlacement","MenuItem","Code","onSelect","FigmaIcon","input","type","accept","multiple","hidden","Upload","fileInput","onchange","target","files","Array","from","click","LoadingDots","children","dots","setDots","useState","dotStates","currentIndex","interval","setInterval","clearInterval","textColor","ChatInput","props","handleSubmit","handleInputChange","stop","form","onSubmit","Root","Header","minHeight","HeaderItem","Content","Dropzone","Area","paddingBottom","ResizableTextArea","value","onChange","placeholder","Actions","preventDefault","StopIcon","disabled","trim","ArrowUp","Chat","isChatOpen","isChatEnabled","openChat","closeChat","reset","state","useGuidedTour","s","currentEnvironment","useAppInfo","isProduction","isAIChatStepActive","enabled","tours","contentTypeBuilder","currentStep","isCompleted","openChatLabel","closeChatLabel","createChatLabel","defaultTitle","mistakesDisclaimer","onAddFiles","Panel","position","isOpen","onToggle","toggleIcon","Plus","Close","Body","AIChat","Footer"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { useEffect, useRef, useState } from 'react';
3
3
  import { useGuidedTour, useAppInfo, tours } from '@strapi/admin/strapi-admin';
4
- import { Flex, IconButton, Typography, Box, Button } from '@strapi/design-system';
5
- import { Sparkle, Plus, ArrowUp, Paperclip, Code, Upload } from '@strapi/icons';
4
+ import { Typography, Flex, IconButton, Box, Button } from '@strapi/design-system';
5
+ import { Plus, Sparkle, ArrowUp, Code, Upload, Paperclip } from '@strapi/icons';
6
6
  import { styled } from 'styled-components';
7
7
  import '../CTBSession/sessionContext.mjs';
8
8
  import { useCTBTracking } from '../CTBSession/useCTBTracking.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"Chat.mjs","sources":["../../../../admin/src/components/AIChat/Chat.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport { tours, useGuidedTour, useAppInfo } from '@strapi/admin/strapi-admin';\nimport { Flex, IconButton, Button, Typography, Box } from '@strapi/design-system';\nimport { Sparkle, ArrowUp, Plus, Paperclip, Upload, Code } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\nimport { useCTBTracking } from '../CTBSession/ctbSession';\n\nimport { Alert } from './components/Alert';\nimport { AnimatedBox } from './components/AnimatedBox';\nimport { AttachmentPreview } from './components/Attachments/AttachmentPreview';\nimport { Dropzone } from './components/Dropzone';\nimport { Panel } from './components/FloatingPanel';\nimport { FigmaIcon } from './components/icons/FigmaIcon';\nimport { StopIcon } from './components/icons/StopIcon';\nimport { Input } from './components/Input';\nimport { ChatMessage } from './components/Messages/Message';\nimport { ResizableTextArea } from './components/ResizableTextArea';\nimport { MenuItem, SimpleMenu } from './components/SimpleMenu';\nimport {\n CHAT_TOO_LONG_ERROR,\n LICENSE_LIMIT_REACHED_ERROR,\n TOO_MANY_REQUESTS_ERROR,\n LICENSE_LIMIT_EXCEEDED_ERROR,\n} from './hooks/useAIFetch';\nimport { useAttachments } from './hooks/useAttachments';\nimport { useTranslations } from './hooks/useTranslations';\nimport { AIMessage } from './lib/types/messages';\nimport { useStrapiChat } from './providers/ChatProvider';\nimport { useUploadProjectToChat } from './UploadCodeModal';\nimport { useUploadFigmaToChat } from './UploadFigmaModal';\n\n/* -------------------------------------------------------------------------------------------------\n * Chat Message Suggestions\n * -----------------------------------------------------------------------------------------------*/\nconst ResponsiveFlex = styled(Flex)`\n @media (max-height: 500px) {\n display: none;\n }\n`;\n\nconst ChatSuggestions = () => {\n const { sendMessage } = useStrapiChat();\n const { t } = useTranslations();\n const { trackUsage } = useCTBTracking();\n\n const SUGGESTIONS = [\n t('chat.input.defaults.generate', 'Generate a product schema'),\n t('chat.input.defaults.ctb', 'Tell me about the Content-Type Builder'),\n t('chat.input.defaults.strapi', 'Tell me about Strapi'),\n ] as const;\n\n const SUGGESTION_TO_PROMPT_TYPE = {\n [t('chat.input.defaults.generate', 'Generate a product schema')]: 'generate-product-schema',\n [t('chat.input.defaults.ctb', 'Tell me about the Content-Type Builder')]:\n 'tell-me-about-the-content-type-builder',\n [t('chat.input.defaults.strapi', 'Tell me about Strapi')]: 'tell-me-about-strapi',\n } as const;\n\n const suggestionsTitle = t('chat.input.defaults.title', 'How can I help you?');\n\n return (\n <AnimatedBox>\n <ResponsiveFlex direction=\"column\" alignItems={'flex-start'} gap={3}>\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {suggestionsTitle}\n </Typography>\n <Flex direction=\"column\" alignItems={'flex-start'} gap={2}>\n {SUGGESTIONS.map((suggestion) => (\n <Button\n key={suggestion}\n startIcon={<Sparkle fill=\"neutral500\" />}\n size=\"M\"\n variant=\"tertiary\"\n onClick={() => {\n trackUsage('didUsePresetPrompt', {\n promptType: SUGGESTION_TO_PROMPT_TYPE[suggestion],\n });\n\n sendMessage({ text: suggestion });\n }}\n >\n <Typography fontWeight=\"regular\">{suggestion}</Typography>\n </Button>\n ))}\n </Flex>\n </ResponsiveFlex>\n </AnimatedBox>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Chat Errors\n * -----------------------------------------------------------------------------------------------*/\nconst getErrorMessage = (err: Error) => {\n try {\n const error = JSON.parse(err.message);\n return error.error;\n } catch (e) {\n return err;\n }\n};\n\nconst ChatError = () => {\n const { error } = useStrapiChat();\n const { t } = useTranslations();\n\n const defaultErrorMessage = t('chat.messages.error', 'Something went wrong.');\n const tooManyRequestsMessage = t(\n 'chat.messages.too-many-requests',\n 'Too many requests, please try again later.'\n );\n const licenseLimitReachedMessage = t(\n 'chat.messages.license-limit-reached',\n 'License limit reached, please try again tomorrow.'\n );\n const licenseLimitExceededMessage = t(\n 'chat.messages.license-limit-exceeded',\n 'AI credit limit exceeded.'\n );\n const chatTooLongError = t(\n 'chat.messages.too-long-error',\n 'This conversation reached its maximum length. Start a new conversation'\n );\n\n if (!error) return null;\n\n const errorMessage = getErrorMessage(error);\n if (!errorMessage || typeof errorMessage !== 'string') {\n return null;\n }\n\n if (errorMessage === TOO_MANY_REQUESTS_ERROR) {\n return <Alert title={tooManyRequestsMessage} variant=\"warning\" />;\n }\n\n if (errorMessage === LICENSE_LIMIT_REACHED_ERROR) {\n return <Alert title={licenseLimitReachedMessage} variant=\"warning\" />;\n }\n\n if (errorMessage.split('.')[0] === LICENSE_LIMIT_EXCEEDED_ERROR) {\n return <Alert title={licenseLimitExceededMessage} variant=\"danger\" />;\n }\n\n if (errorMessage === CHAT_TOO_LONG_ERROR) {\n return <Alert title={chatTooLongError} variant=\"danger\" />;\n }\n\n return <Alert title={defaultErrorMessage} variant=\"danger\" />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Chat Messages\n * -----------------------------------------------------------------------------------------------*/\nconst ChatContent: React.FC<{\n messages: AIMessage[];\n}> = ({ messages }) => {\n const messageEndRef = useRef<HTMLDivElement>(null);\n const { status } = useStrapiChat();\n\n // Scroll to the bottom of the chat when new messages arrive\n useEffect(() => {\n // Add a small delay to ensure all message content is fully rendered\n // including conditionally rendered elements like feedback buttons\n const scrollTimeout = setTimeout(() => {\n messageEndRef.current?.scrollIntoView({ behavior: 'smooth' });\n }, 20);\n\n return () => clearTimeout(scrollTimeout);\n }, [messages, status]);\n\n return (\n <>\n <Flex direction=\"column\" gap={5}>\n {messages.map((message, idx) => (\n <ChatMessage\n key={message.id}\n message={message}\n // Chat loading and message is the last one\n isLoading={\n (status === 'streaming' || status === 'submitted') && idx === messages.length - 1\n }\n />\n ))}\n {status === 'error' && <ChatError />}\n </Flex>\n <div ref={messageEndRef} />\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Attachments\n * -----------------------------------------------------------------------------------------------*/\nconst ChatAttachmentList = () => {\n const { attachments, removeAttachmentByIndex } = useAttachments();\n\n if (!attachments.length) return null;\n\n return (\n <Input.Attachments>\n {attachments.map((attachment, index) => (\n <Box key={attachment.filename} maxWidth={'250px'}>\n <AttachmentPreview\n attachment={attachment}\n onRemove={() => removeAttachmentByIndex(index)}\n />\n </Box>\n ))}\n </Input.Attachments>\n );\n};\n\nconst ChatAttachmentMenu = () => {\n const { attachFiles } = useAttachments();\n const { openCodeUpload } = useUploadProjectToChat();\n const { openFigmaUpload } = useUploadFigmaToChat();\n const { t } = useTranslations();\n\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const uploadLabel = t('chat.tooltips.upload-attachments', 'Upload attachments');\n const importCodeText = t('chat.attachments.menu.import-code', 'Import code');\n const attachImageText = t('chat.attachments.menu.attach-image', 'Attach image');\n const importFigmaText = t('chat.attachments.menu.import-figma', 'Import from Figma');\n\n return (\n <SimpleMenu\n label={uploadLabel}\n icon={<Paperclip />}\n tag={IconButton}\n popoverPlacement=\"top-end\"\n >\n <MenuItem startIcon={<Code />} onSelect={() => openCodeUpload()}>\n {importCodeText}\n </MenuItem>\n\n <MenuItem startIcon={<FigmaIcon />} onSelect={() => openFigmaUpload()}>\n {importFigmaText}\n </MenuItem>\n\n <input type=\"file\" accept=\"image/*\" multiple hidden ref={fileInputRef} />\n <MenuItem\n startIcon={<Upload />}\n onSelect={() => {\n const fileInput = fileInputRef.current;\n if (!fileInput) return;\n fileInput.onchange = (e) => {\n const target = e.target as HTMLInputElement;\n if (target.files && target.files.length > 0) {\n attachFiles(Array.from(target.files));\n }\n };\n\n fileInput.click();\n }}\n >\n {attachImageText}\n </MenuItem>\n </SimpleMenu>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Input\n * -----------------------------------------------------------------------------------------------*/\n\nconst LoadingDots = ({ children }: { children: string }) => {\n const [dots, setDots] = useState('');\n\n useEffect(() => {\n const dotStates = ['', '.', '..', '...'];\n let currentIndex = 0;\n\n const interval = setInterval(() => {\n currentIndex = (currentIndex + 1) % dotStates.length;\n setDots(dotStates[currentIndex]);\n }, 400); // Change every 400ms\n\n return () => clearInterval(interval);\n }, []);\n\n return (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {children}\n {dots}\n </Typography>\n );\n};\n\nconst ChatInput = (props: React.FormHTMLAttributes<HTMLFormElement>) => {\n const { input, handleSubmit, handleInputChange, messages, status, stop, attachments } =\n useStrapiChat();\n const { t } = useTranslations();\n\n const isLoading = status === 'streaming' || status === 'submitted';\n\n return (\n <>\n <form onSubmit={handleSubmit} {...props}>\n <Input.Root isLoading={isLoading} gap={4}>\n <Input.Header minHeight={0}>\n {messages.length === 0 && (\n <Input.HeaderItem>\n <ChatSuggestions />\n </Input.HeaderItem>\n )}\n {isLoading && (\n <Input.HeaderItem>\n <LoadingDots>{t('chat.input.thinking', 'Strapi AI is thinking')}</LoadingDots>\n </Input.HeaderItem>\n )}\n </Input.Header>\n <Input.Content>\n <Dropzone.Area />\n <ChatAttachmentList />\n <Box paddingBottom={3}>\n <ResizableTextArea\n value={input}\n onChange={handleInputChange}\n onSubmit={handleSubmit}\n placeholder={t('chat.input.placeholder', 'Ask Strapi AI...')}\n />\n </Box>\n <Input.Actions>\n <ChatAttachmentMenu />\n\n {isLoading ? (\n <IconButton\n label={t('chat.tooltips.stop-generation', 'Stop')}\n type=\"button\"\n variant=\"default\"\n onClick={(e) => {\n e.preventDefault();\n stop();\n }}\n >\n <StopIcon />\n </IconButton>\n ) : (\n <IconButton\n label={t('chat.tooltips.send-message', 'Send')}\n variant=\"default\"\n type=\"submit\"\n // allow sending an empty message if there are attachments\n disabled={input.trim().length === 0 && attachments.length === 0}\n >\n <ArrowUp />\n </IconButton>\n )}\n </Input.Actions>\n </Input.Content>\n </Input.Root>\n </form>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Chat\n * -----------------------------------------------------------------------------------------------*/\n\nconst Chat = () => {\n const { title, messages, isChatOpen, isChatEnabled, openChat, closeChat, reset } =\n useStrapiChat();\n const { attachFiles } = useAttachments();\n const { t } = useTranslations();\n const state = useGuidedTour('Chat', (s) => s.state);\n const currentEnvironment = useAppInfo('Chat', (state) => state.currentEnvironment);\n\n // Disable AI Chat in production mode\n const isProduction = currentEnvironment === 'production';\n\n // Auto-open chat when AIChat guided tour step is active\n useEffect(() => {\n const isAIChatStepActive =\n state.enabled &&\n state.tours.contentTypeBuilder?.currentStep === 1 && // AIChat is step 1 in contentTypeBuilderStepsAI\n !state.tours.contentTypeBuilder?.isCompleted;\n\n if (isAIChatStepActive && !isChatOpen && openChat) {\n openChat();\n }\n }, [\n state.tours.contentTypeBuilder?.currentStep,\n state.tours.contentTypeBuilder?.isCompleted,\n state.enabled,\n isChatOpen,\n openChat,\n ]);\n\n // Labels\n const openChatLabel = t('chat.tooltips.open-chat', 'Open chat');\n const closeChatLabel = t('chat.tooltips.close-chat', 'Close chat');\n const createChatLabel = t('chat.tooltips.create-chat', 'New conversation');\n const defaultTitle = t('chat.header.default-title', 'New conversation');\n const mistakesDisclaimer = t(\n 'chat.input.strapi-ai-can-make-errors',\n 'Strapi AI can make mistakes.'\n );\n\n // Don't render the chat at all in production mode or if chat is not enabled\n if (!isChatEnabled || isProduction) {\n return null;\n }\n\n return (\n <Dropzone.Root\n onAddFiles={(files) => {\n attachFiles(files);\n }}\n >\n <Panel.Root\n size=\"md\"\n position=\"bottom-right\"\n isOpen={isChatOpen}\n onToggle={isChatOpen ? closeChat : openChat}\n toggleIcon={\n <IconButton\n onClick={isChatOpen ? closeChat : openChat}\n label={isChatOpen ? closeChatLabel : openChatLabel}\n variant=\"default\"\n size=\"L\"\n >\n <Sparkle />\n </IconButton>\n }\n >\n <Panel.Header>\n <Typography tag=\"h3\" variant=\"omega\" fontWeight=\"bold\">\n {title || defaultTitle}\n </Typography>\n <Flex gap={0}>\n <IconButton label={createChatLabel} variant=\"ghost\" onClick={reset}>\n <Plus />\n </IconButton>\n <Panel.Close label={closeChatLabel} />\n </Flex>\n </Panel.Header>\n\n <Panel.Body>\n <tours.contentTypeBuilder.AIChat>\n {!messages.length ? (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {mistakesDisclaimer}\n </Typography>\n ) : null}\n <ChatContent messages={messages} />\n </tours.contentTypeBuilder.AIChat>\n </Panel.Body>\n\n <Panel.Footer>\n <ChatInput />\n </Panel.Footer>\n </Panel.Root>\n </Dropzone.Root>\n );\n};\n\nexport { Chat };\n"],"names":["ResponsiveFlex","styled","Flex","ChatSuggestions","sendMessage","useStrapiChat","t","useTranslations","trackUsage","useCTBTracking","SUGGESTIONS","SUGGESTION_TO_PROMPT_TYPE","suggestionsTitle","_jsx","AnimatedBox","_jsxs","direction","alignItems","gap","Typography","variant","fontWeight","map","suggestion","Button","startIcon","Sparkle","fill","size","onClick","promptType","text","getErrorMessage","err","error","JSON","parse","message","e","ChatError","defaultErrorMessage","tooManyRequestsMessage","licenseLimitReachedMessage","licenseLimitExceededMessage","chatTooLongError","errorMessage","TOO_MANY_REQUESTS_ERROR","Alert","title","LICENSE_LIMIT_REACHED_ERROR","split","LICENSE_LIMIT_EXCEEDED_ERROR","CHAT_TOO_LONG_ERROR","ChatContent","messages","messageEndRef","useRef","status","useEffect","scrollTimeout","setTimeout","current","scrollIntoView","behavior","clearTimeout","_Fragment","idx","ChatMessage","isLoading","length","id","div","ref","ChatAttachmentList","attachments","removeAttachmentByIndex","useAttachments","Input","Attachments","attachment","index","Box","maxWidth","AttachmentPreview","onRemove","filename","ChatAttachmentMenu","attachFiles","openCodeUpload","useUploadProjectToChat","openFigmaUpload","useUploadFigmaToChat","fileInputRef","uploadLabel","importCodeText","attachImageText","importFigmaText","SimpleMenu","label","icon","Paperclip","tag","IconButton","popoverPlacement","MenuItem","Code","onSelect","FigmaIcon","input","type","accept","multiple","hidden","Upload","fileInput","onchange","target","files","Array","from","click","LoadingDots","children","dots","setDots","useState","dotStates","currentIndex","interval","setInterval","clearInterval","textColor","ChatInput","props","handleSubmit","handleInputChange","stop","form","onSubmit","Root","Header","minHeight","HeaderItem","Content","Dropzone","Area","paddingBottom","ResizableTextArea","value","onChange","placeholder","Actions","preventDefault","StopIcon","disabled","trim","ArrowUp","Chat","isChatOpen","isChatEnabled","openChat","closeChat","reset","state","useGuidedTour","s","currentEnvironment","useAppInfo","isProduction","isAIChatStepActive","enabled","tours","contentTypeBuilder","currentStep","isCompleted","openChatLabel","closeChatLabel","createChatLabel","defaultTitle","mistakesDisclaimer","onAddFiles","Panel","position","isOpen","onToggle","toggleIcon","Plus","Close","Body","AIChat","Footer"],"mappings":"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"}
1
+ {"version":3,"file":"Chat.mjs","sources":["../../../../admin/src/components/AIChat/Chat.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport { tours, useGuidedTour, useAppInfo } from '@strapi/admin/strapi-admin';\nimport { Flex, IconButton, Button, Typography, Box } from '@strapi/design-system';\nimport { Sparkle, ArrowUp, Plus, Paperclip, Upload, Code } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\nimport { useCTBTracking } from '../CTBSession/ctbSession';\n\nimport { Alert } from './components/Alert';\nimport { AnimatedBox } from './components/AnimatedBox';\nimport { AttachmentPreview } from './components/Attachments/AttachmentPreview';\nimport { Dropzone } from './components/Dropzone';\nimport { Panel } from './components/FloatingPanel';\nimport { FigmaIcon } from './components/icons/FigmaIcon';\nimport { StopIcon } from './components/icons/StopIcon';\nimport { Input } from './components/Input';\nimport { ChatMessage } from './components/Messages/Message';\nimport { ResizableTextArea } from './components/ResizableTextArea';\nimport { MenuItem, SimpleMenu } from './components/SimpleMenu';\nimport {\n CHAT_TOO_LONG_ERROR,\n LICENSE_LIMIT_REACHED_ERROR,\n TOO_MANY_REQUESTS_ERROR,\n LICENSE_LIMIT_EXCEEDED_ERROR,\n} from './hooks/useAIFetch';\nimport { useAttachments } from './hooks/useAttachments';\nimport { useTranslations } from './hooks/useTranslations';\nimport { AIMessage } from './lib/types/messages';\nimport { useStrapiChat } from './providers/ChatProvider';\nimport { useUploadProjectToChat } from './UploadCodeModal';\nimport { useUploadFigmaToChat } from './UploadFigmaModal';\n\n/* -------------------------------------------------------------------------------------------------\n * Chat Message Suggestions\n * -----------------------------------------------------------------------------------------------*/\nconst ResponsiveFlex = styled(Flex)`\n @media (max-height: 500px) {\n display: none;\n }\n`;\n\nconst ChatSuggestions = () => {\n const { sendMessage } = useStrapiChat();\n const { t } = useTranslations();\n const { trackUsage } = useCTBTracking();\n\n const SUGGESTIONS = [\n t('chat.input.defaults.generate', 'Generate a product schema'),\n t('chat.input.defaults.ctb', 'Tell me about the Content-Type Builder'),\n t('chat.input.defaults.strapi', 'Tell me about Strapi'),\n ] as const;\n\n const SUGGESTION_TO_PROMPT_TYPE = {\n [t('chat.input.defaults.generate', 'Generate a product schema')]: 'generate-product-schema',\n [t('chat.input.defaults.ctb', 'Tell me about the Content-Type Builder')]:\n 'tell-me-about-the-content-type-builder',\n [t('chat.input.defaults.strapi', 'Tell me about Strapi')]: 'tell-me-about-strapi',\n } as const;\n\n const suggestionsTitle = t('chat.input.defaults.title', 'How can I help you?');\n\n return (\n <AnimatedBox>\n <ResponsiveFlex direction=\"column\" alignItems={'flex-start'} gap={3}>\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {suggestionsTitle}\n </Typography>\n <Flex direction=\"column\" alignItems={'flex-start'} gap={2}>\n {SUGGESTIONS.map((suggestion) => (\n <Button\n key={suggestion}\n startIcon={<Sparkle fill=\"neutral500\" />}\n size=\"M\"\n variant=\"tertiary\"\n onClick={() => {\n trackUsage('didUsePresetPrompt', {\n promptType: SUGGESTION_TO_PROMPT_TYPE[suggestion],\n });\n\n sendMessage({ text: suggestion });\n }}\n >\n <Typography fontWeight=\"regular\">{suggestion}</Typography>\n </Button>\n ))}\n </Flex>\n </ResponsiveFlex>\n </AnimatedBox>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Chat Errors\n * -----------------------------------------------------------------------------------------------*/\nconst getErrorMessage = (err: Error) => {\n try {\n const error = JSON.parse(err.message);\n return error.error;\n } catch (e) {\n return err;\n }\n};\n\nconst ChatError = () => {\n const { error } = useStrapiChat();\n const { t } = useTranslations();\n\n const defaultErrorMessage = t('chat.messages.error', 'Something went wrong.');\n const tooManyRequestsMessage = t(\n 'chat.messages.too-many-requests',\n 'Too many requests, please try again later.'\n );\n const licenseLimitReachedMessage = t(\n 'chat.messages.license-limit-reached',\n 'License limit reached, please try again tomorrow.'\n );\n const licenseLimitExceededMessage = t(\n 'chat.messages.license-limit-exceeded',\n 'AI credit limit exceeded.'\n );\n const chatTooLongError = t(\n 'chat.messages.too-long-error',\n 'This conversation reached its maximum length. Start a new conversation'\n );\n\n if (!error) return null;\n\n const errorMessage = getErrorMessage(error);\n if (!errorMessage || typeof errorMessage !== 'string') {\n return null;\n }\n\n if (errorMessage === TOO_MANY_REQUESTS_ERROR) {\n return <Alert title={tooManyRequestsMessage} variant=\"warning\" />;\n }\n\n if (errorMessage === LICENSE_LIMIT_REACHED_ERROR) {\n return <Alert title={licenseLimitReachedMessage} variant=\"warning\" />;\n }\n\n if (errorMessage.split('.')[0] === LICENSE_LIMIT_EXCEEDED_ERROR) {\n return <Alert title={licenseLimitExceededMessage} variant=\"danger\" />;\n }\n\n if (errorMessage === CHAT_TOO_LONG_ERROR) {\n return <Alert title={chatTooLongError} variant=\"danger\" />;\n }\n\n return <Alert title={defaultErrorMessage} variant=\"danger\" />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Chat Messages\n * -----------------------------------------------------------------------------------------------*/\nconst ChatContent: React.FC<{\n messages: AIMessage[];\n}> = ({ messages }) => {\n const messageEndRef = useRef<HTMLDivElement>(null);\n const { status } = useStrapiChat();\n\n // Scroll to the bottom of the chat when new messages arrive\n useEffect(() => {\n // Add a small delay to ensure all message content is fully rendered\n // including conditionally rendered elements like feedback buttons\n const scrollTimeout = setTimeout(() => {\n messageEndRef.current?.scrollIntoView({ behavior: 'smooth' });\n }, 20);\n\n return () => clearTimeout(scrollTimeout);\n }, [messages, status]);\n\n return (\n <>\n <Flex direction=\"column\" gap={5}>\n {messages.map((message, idx) => (\n <ChatMessage\n key={message.id}\n message={message}\n // Chat loading and message is the last one\n isLoading={\n (status === 'streaming' || status === 'submitted') && idx === messages.length - 1\n }\n />\n ))}\n {status === 'error' && <ChatError />}\n </Flex>\n <div ref={messageEndRef} />\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Attachments\n * -----------------------------------------------------------------------------------------------*/\nconst ChatAttachmentList = () => {\n const { attachments, removeAttachmentByIndex } = useAttachments();\n\n if (!attachments.length) return null;\n\n return (\n <Input.Attachments>\n {attachments.map((attachment, index) => (\n <Box key={attachment.filename} maxWidth={'250px'}>\n <AttachmentPreview\n attachment={attachment}\n onRemove={() => removeAttachmentByIndex(index)}\n />\n </Box>\n ))}\n </Input.Attachments>\n );\n};\n\nconst ChatAttachmentMenu = () => {\n const { attachFiles } = useAttachments();\n const { openCodeUpload } = useUploadProjectToChat();\n const { openFigmaUpload } = useUploadFigmaToChat();\n const { t } = useTranslations();\n\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const uploadLabel = t('chat.tooltips.upload-attachments', 'Upload attachments');\n const importCodeText = t('chat.attachments.menu.import-code', 'Import code');\n const attachImageText = t('chat.attachments.menu.attach-image', 'Attach image');\n const importFigmaText = t('chat.attachments.menu.import-figma', 'Import from Figma');\n\n return (\n <SimpleMenu\n label={uploadLabel}\n icon={<Paperclip />}\n tag={IconButton}\n popoverPlacement=\"top-end\"\n >\n <MenuItem startIcon={<Code />} onSelect={() => openCodeUpload()}>\n {importCodeText}\n </MenuItem>\n\n <MenuItem startIcon={<FigmaIcon />} onSelect={() => openFigmaUpload()}>\n {importFigmaText}\n </MenuItem>\n\n <input type=\"file\" accept=\"image/*\" multiple hidden ref={fileInputRef} />\n <MenuItem\n startIcon={<Upload />}\n onSelect={() => {\n const fileInput = fileInputRef.current;\n if (!fileInput) return;\n fileInput.onchange = (e) => {\n const target = e.target as HTMLInputElement;\n if (target.files && target.files.length > 0) {\n attachFiles(Array.from(target.files));\n }\n };\n\n fileInput.click();\n }}\n >\n {attachImageText}\n </MenuItem>\n </SimpleMenu>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Input\n * -----------------------------------------------------------------------------------------------*/\n\nconst LoadingDots = ({ children }: { children: string }) => {\n const [dots, setDots] = useState('');\n\n useEffect(() => {\n const dotStates = ['', '.', '..', '...'];\n let currentIndex = 0;\n\n const interval = setInterval(() => {\n currentIndex = (currentIndex + 1) % dotStates.length;\n setDots(dotStates[currentIndex]);\n }, 400); // Change every 400ms\n\n return () => clearInterval(interval);\n }, []);\n\n return (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {children}\n {dots}\n </Typography>\n );\n};\n\nconst ChatInput = (props: React.FormHTMLAttributes<HTMLFormElement>) => {\n const { input, handleSubmit, handleInputChange, messages, status, stop, attachments } =\n useStrapiChat();\n const { t } = useTranslations();\n\n const isLoading = status === 'streaming' || status === 'submitted';\n\n return (\n <>\n <form onSubmit={handleSubmit} {...props}>\n <Input.Root isLoading={isLoading} gap={4}>\n <Input.Header minHeight={0}>\n {messages.length === 0 && (\n <Input.HeaderItem>\n <ChatSuggestions />\n </Input.HeaderItem>\n )}\n {isLoading && (\n <Input.HeaderItem>\n <LoadingDots>{t('chat.input.thinking', 'Strapi AI is thinking')}</LoadingDots>\n </Input.HeaderItem>\n )}\n </Input.Header>\n <Input.Content>\n <Dropzone.Area />\n <ChatAttachmentList />\n <Box paddingBottom={3}>\n <ResizableTextArea\n value={input}\n onChange={handleInputChange}\n onSubmit={handleSubmit}\n placeholder={t('chat.input.placeholder', 'Ask Strapi AI...')}\n />\n </Box>\n <Input.Actions>\n <ChatAttachmentMenu />\n\n {isLoading ? (\n <IconButton\n label={t('chat.tooltips.stop-generation', 'Stop')}\n type=\"button\"\n variant=\"default\"\n onClick={(e) => {\n e.preventDefault();\n stop();\n }}\n >\n <StopIcon />\n </IconButton>\n ) : (\n <IconButton\n label={t('chat.tooltips.send-message', 'Send')}\n variant=\"default\"\n type=\"submit\"\n // allow sending an empty message if there are attachments\n disabled={input.trim().length === 0 && attachments.length === 0}\n >\n <ArrowUp />\n </IconButton>\n )}\n </Input.Actions>\n </Input.Content>\n </Input.Root>\n </form>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Chat\n * -----------------------------------------------------------------------------------------------*/\n\nconst Chat = () => {\n const { title, messages, isChatOpen, isChatEnabled, openChat, closeChat, reset } =\n useStrapiChat();\n const { attachFiles } = useAttachments();\n const { t } = useTranslations();\n const state = useGuidedTour('Chat', (s) => s.state);\n const currentEnvironment = useAppInfo('Chat', (state) => state.currentEnvironment);\n\n // Disable AI Chat in production mode\n const isProduction = currentEnvironment === 'production';\n\n // Auto-open chat when AIChat guided tour step is active\n useEffect(() => {\n const isAIChatStepActive =\n state.enabled &&\n state.tours.contentTypeBuilder?.currentStep === 1 && // AIChat is step 1 in contentTypeBuilderStepsAI\n !state.tours.contentTypeBuilder?.isCompleted;\n\n if (isAIChatStepActive && !isChatOpen && openChat) {\n openChat();\n }\n }, [\n state.tours.contentTypeBuilder?.currentStep,\n state.tours.contentTypeBuilder?.isCompleted,\n state.enabled,\n isChatOpen,\n openChat,\n ]);\n\n // Labels\n const openChatLabel = t('chat.tooltips.open-chat', 'Open chat');\n const closeChatLabel = t('chat.tooltips.close-chat', 'Close chat');\n const createChatLabel = t('chat.tooltips.create-chat', 'New conversation');\n const defaultTitle = t('chat.header.default-title', 'New conversation');\n const mistakesDisclaimer = t(\n 'chat.input.strapi-ai-can-make-errors',\n 'Strapi AI can make mistakes.'\n );\n\n // Don't render the chat at all in production mode or if chat is not enabled\n if (!isChatEnabled || isProduction) {\n return null;\n }\n\n return (\n <Dropzone.Root\n onAddFiles={(files) => {\n attachFiles(files);\n }}\n >\n <Panel.Root\n size=\"md\"\n position=\"bottom-right\"\n isOpen={isChatOpen}\n onToggle={isChatOpen ? closeChat : openChat}\n toggleIcon={\n <IconButton\n onClick={isChatOpen ? closeChat : openChat}\n label={isChatOpen ? closeChatLabel : openChatLabel}\n variant=\"default\"\n size=\"L\"\n >\n <Sparkle />\n </IconButton>\n }\n >\n <Panel.Header>\n <Typography tag=\"h3\" variant=\"omega\" fontWeight=\"bold\">\n {title || defaultTitle}\n </Typography>\n <Flex gap={0}>\n <IconButton label={createChatLabel} variant=\"ghost\" onClick={reset}>\n <Plus />\n </IconButton>\n <Panel.Close label={closeChatLabel} />\n </Flex>\n </Panel.Header>\n\n <Panel.Body>\n <tours.contentTypeBuilder.AIChat>\n {!messages.length ? (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {mistakesDisclaimer}\n </Typography>\n ) : null}\n <ChatContent messages={messages} />\n </tours.contentTypeBuilder.AIChat>\n </Panel.Body>\n\n <Panel.Footer>\n <ChatInput />\n </Panel.Footer>\n </Panel.Root>\n </Dropzone.Root>\n );\n};\n\nexport { Chat };\n"],"names":["ResponsiveFlex","styled","Flex","ChatSuggestions","sendMessage","useStrapiChat","t","useTranslations","trackUsage","useCTBTracking","SUGGESTIONS","SUGGESTION_TO_PROMPT_TYPE","suggestionsTitle","_jsx","AnimatedBox","_jsxs","direction","alignItems","gap","Typography","variant","fontWeight","map","suggestion","Button","startIcon","Sparkle","fill","size","onClick","promptType","text","getErrorMessage","err","error","JSON","parse","message","e","ChatError","defaultErrorMessage","tooManyRequestsMessage","licenseLimitReachedMessage","licenseLimitExceededMessage","chatTooLongError","errorMessage","TOO_MANY_REQUESTS_ERROR","Alert","title","LICENSE_LIMIT_REACHED_ERROR","split","LICENSE_LIMIT_EXCEEDED_ERROR","CHAT_TOO_LONG_ERROR","ChatContent","messages","messageEndRef","useRef","status","useEffect","scrollTimeout","setTimeout","current","scrollIntoView","behavior","clearTimeout","_Fragment","idx","ChatMessage","isLoading","length","id","div","ref","ChatAttachmentList","attachments","removeAttachmentByIndex","useAttachments","Input","Attachments","attachment","index","Box","maxWidth","AttachmentPreview","onRemove","filename","ChatAttachmentMenu","attachFiles","openCodeUpload","useUploadProjectToChat","openFigmaUpload","useUploadFigmaToChat","fileInputRef","uploadLabel","importCodeText","attachImageText","importFigmaText","SimpleMenu","label","icon","Paperclip","tag","IconButton","popoverPlacement","MenuItem","Code","onSelect","FigmaIcon","input","type","accept","multiple","hidden","Upload","fileInput","onchange","target","files","Array","from","click","LoadingDots","children","dots","setDots","useState","dotStates","currentIndex","interval","setInterval","clearInterval","textColor","ChatInput","props","handleSubmit","handleInputChange","stop","form","onSubmit","Root","Header","minHeight","HeaderItem","Content","Dropzone","Area","paddingBottom","ResizableTextArea","value","onChange","placeholder","Actions","preventDefault","StopIcon","disabled","trim","ArrowUp","Chat","isChatOpen","isChatEnabled","openChat","closeChat","reset","state","useGuidedTour","s","currentEnvironment","useAppInfo","isProduction","isAIChatStepActive","enabled","tours","contentTypeBuilder","currentStep","isCompleted","openChatLabel","closeChatLabel","createChatLabel","defaultTitle","mistakesDisclaimer","onAddFiles","Panel","position","isOpen","onToggle","toggleIcon","Plus","Close","Body","AIChat","Footer"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FeedbackModal.js","sources":["../../../../admin/src/components/AIChat/FeedbackModal.tsx"],"sourcesContent":["import * as React from 'react';\nimport { createContext, useContext, useState } from 'react';\n\nimport { useNotification } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n Typography,\n Textarea,\n Button,\n Grid,\n Checkbox,\n Modal,\n} from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { useFeedback } from './hooks/useFeedback';\nimport { useTranslations } from './hooks/useTranslations';\n\nimport type { FeedbackReasonIds } from './lib/types/feedback';\n\n/* -------------------------------------------------------------------------------------------------\n * Provider\n * -----------------------------------------------------------------------------------------------*/\ninterface FeedbackModalContextType {\n isFeedbackModalOpen: boolean;\n currentMessageId: string | null;\n openFeedbackModal: (messageId: string) => void;\n closeFeedbackModal: () => void;\n}\n\nconst FeedbackModalContext = createContext<FeedbackModalContextType>({\n isFeedbackModalOpen: false,\n currentMessageId: null,\n openFeedbackModal: () => {},\n closeFeedbackModal: () => {},\n});\n\nexport const useFeedbackModal = () => useContext(FeedbackModalContext);\n\nexport const FeedbackProvider = ({ children }: { children: React.ReactNode }) => {\n const [isFeedbackModalOpen, setIsFeedbackModalOpen] = useState(false);\n const [currentMessageId, setCurrentMessageId] = useState<string | null>(null);\n\n const openFeedbackModal = (messageId: string) => {\n setCurrentMessageId(messageId);\n setIsFeedbackModalOpen(true);\n };\n\n const closeFeedbackModal = () => {\n setIsFeedbackModalOpen(false);\n setCurrentMessageId(null);\n };\n\n return (\n <FeedbackModalContext.Provider\n value={{ isFeedbackModalOpen, currentMessageId, openFeedbackModal, closeFeedbackModal }}\n >\n {isFeedbackModalOpen && currentMessageId && <FeedbackModal />}\n {children}\n </FeedbackModalContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Feedback Option\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FeedbackOptionProps {\n id: FeedbackReasonIds;\n label: string;\n selected: boolean;\n onClick: (id: FeedbackReasonIds) => void;\n}\n\nconst FeedbackOptionWrapper = styled(Flex)`\n &:hover {\n background-color: ${({ theme }) => theme.colors.neutral100};\n }\n\n &.selected {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n }\n`;\n\nconst FeedbackOption: React.FC<FeedbackOptionProps> = ({ id, label, selected, onClick }) => {\n return (\n <FeedbackOptionWrapper\n className={selected ? 'selected' : ''}\n justifyContent=\"space-between\"\n hasRadius\n width=\"100%\"\n cursor=\"pointer\"\n borderColor=\"neutral200\"\n padding={3}\n gap={3}\n onClick={() => onClick(id)}\n >\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {label}\n </Typography>\n <Checkbox\n name={`feedback-${id}`}\n value={id}\n checked={selected}\n onChange={() => onClick(id)}\n />\n </FeedbackOptionWrapper>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Modal\n * -----------------------------------------------------------------------------------------------*/\n\nexport const FeedbackModal: React.FC = () => {\n const [feedbackText, setFeedbackText] = useState('');\n const [selectedReasons, setSelectedReasons] = useState<FeedbackReasonIds[]>([]);\n\n const { t } = useTranslations();\n const { toggleNotification } = useNotification();\n const { closeFeedbackModal, currentMessageId } = useFeedbackModal();\n const { downvoteMessage, isPending } = useFeedback();\n\n const feedbackReasons = [\n {\n id: 'invalid_schema',\n label: t('chat.feedback.reason.invalid_schema', 'Invalid schema'),\n },\n {\n id: 'bad_recommendation',\n label: t('chat.feedback.reason.bad_recommendation', 'Bad recommendation'),\n },\n {\n id: 'slow',\n label: t('chat.feedback.reason.slow', 'Slow'),\n },\n {\n id: 'instructions_ignored',\n label: t('chat.feedback.reason.instructions_ignored', 'Instructions ignored'),\n },\n {\n id: 'being_lazy',\n label: t('chat.feedback.reason.being_lazy', 'Being lazy'),\n },\n {\n id: 'other',\n label: t('chat.feedback.reason.other', 'Other'),\n },\n ] satisfies { id: FeedbackReasonIds; label: string }[];\n\n const handleReasonSelect = (id: FeedbackReasonIds) => {\n setSelectedReasons((prevSelected) => {\n // If already selected, remove it\n if (prevSelected.includes(id)) {\n return prevSelected.filter((reasonId) => reasonId !== id);\n }\n // Otherwise add it\n return [...prevSelected, id];\n });\n };\n\n const handleSubmitFeedback = async () => {\n if (selectedReasons.length === 0) return;\n\n try {\n await downvoteMessage(currentMessageId as string, feedbackText, selectedReasons);\n\n setFeedbackText('');\n setSelectedReasons([]);\n closeFeedbackModal();\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: t('chat.feedback.error', 'An error occurred while submitting your feedback'),\n });\n }\n };\n\n return (\n <Modal.Root open onOpenChange={closeFeedbackModal}>\n <Modal.Content>\n <Modal.Header>\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {t('chat.feedback.title', 'Give feedback')}\n </Typography>\n </Modal.Header>\n <Modal.Body>\n <Flex direction=\"column\" alignItems=\"start\" gap={6} width=\"100%\">\n <Flex direction=\"column\" alignItems=\"start\" gap={2}>\n <Typography variant=\"beta\" fontWeight=\"bold\">\n {t('chat.feedback.title', 'Give feedback')}\n </Typography>\n <Typography variant=\"omega\">\n {t(\n 'chat.feedback.subtitle',\n 'Provide additional feedback on this message. Select all that apply.'\n )}\n </Typography>\n </Flex>\n <Grid.Root width=\"100%\" gap={2}>\n {feedbackReasons.map((reason) => (\n <Grid.Item key={reason.id} col={6} xs={12}>\n <FeedbackOption\n key={reason.id}\n id={reason.id}\n label={reason.label}\n selected={selectedReasons.includes(reason.id)}\n onClick={handleReasonSelect}\n />\n </Grid.Item>\n ))}\n </Grid.Root>\n <Flex direction=\"column\" gap={2} width=\"100%\" alignItems=\"start\">\n <Typography variant=\"omega\">\n {t('chat.feedback.comment.label', 'How can we improve? (optional)')}\n </Typography>\n <Box width=\"100%\">\n <Textarea\n name=\"feedback\"\n placeholder={t('chat.feedback.placeholder', 'Your feedback...')}\n onChange={(e) => setFeedbackText(e.target.value)}\n value={feedbackText}\n />\n </Box>\n </Flex>\n </Flex>\n </Modal.Body>\n <Modal.Footer>\n <Modal.Close>\n <Button variant=\"tertiary\" onClick={closeFeedbackModal}>\n {t('form.button.cancel', 'Cancel')}\n </Button>\n </Modal.Close>\n <Button\n onClick={handleSubmitFeedback}\n loading={isPending}\n disabled={selectedReasons.length === 0}\n >\n {t('form.button.submit', 'Submit')}\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["FeedbackModalContext","createContext","isFeedbackModalOpen","currentMessageId","openFeedbackModal","closeFeedbackModal","useFeedbackModal","useContext","FeedbackProvider","children","setIsFeedbackModalOpen","useState","setCurrentMessageId","messageId","_jsxs","Provider","value","_jsx","FeedbackModal","FeedbackOptionWrapper","styled","Flex","theme","colors","neutral100","primary100","primary200","FeedbackOption","id","label","selected","onClick","className","justifyContent","hasRadius","width","cursor","borderColor","padding","gap","Typography","variant","fontWeight","Checkbox","name","checked","onChange","feedbackText","setFeedbackText","selectedReasons","setSelectedReasons","t","useTranslations","toggleNotification","useNotification","downvoteMessage","isPending","useFeedback","feedbackReasons","handleReasonSelect","prevSelected","includes","filter","reasonId","handleSubmitFeedback","length","error","type","message","Modal","Root","open","onOpenChange","Content","Header","Body","direction","alignItems","Grid","map","reason","Item","col","xs","Box","Textarea","placeholder","e","target","Footer","Close","Button","loading","disabled"],"mappings":"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"}
1
+ {"version":3,"file":"FeedbackModal.js","sources":["../../../../admin/src/components/AIChat/FeedbackModal.tsx"],"sourcesContent":["import * as React from 'react';\nimport { createContext, useContext, useState } from 'react';\n\nimport { useNotification } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n Typography,\n Textarea,\n Button,\n Grid,\n Checkbox,\n Modal,\n} from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { useFeedback } from './hooks/useFeedback';\nimport { useTranslations } from './hooks/useTranslations';\n\nimport type { FeedbackReasonIds } from './lib/types/feedback';\n\n/* -------------------------------------------------------------------------------------------------\n * Provider\n * -----------------------------------------------------------------------------------------------*/\ninterface FeedbackModalContextType {\n isFeedbackModalOpen: boolean;\n currentMessageId: string | null;\n openFeedbackModal: (messageId: string) => void;\n closeFeedbackModal: () => void;\n}\n\nconst FeedbackModalContext = createContext<FeedbackModalContextType>({\n isFeedbackModalOpen: false,\n currentMessageId: null,\n openFeedbackModal: () => {},\n closeFeedbackModal: () => {},\n});\n\nexport const useFeedbackModal = () => useContext(FeedbackModalContext);\n\nexport const FeedbackProvider = ({ children }: { children: React.ReactNode }) => {\n const [isFeedbackModalOpen, setIsFeedbackModalOpen] = useState(false);\n const [currentMessageId, setCurrentMessageId] = useState<string | null>(null);\n\n const openFeedbackModal = (messageId: string) => {\n setCurrentMessageId(messageId);\n setIsFeedbackModalOpen(true);\n };\n\n const closeFeedbackModal = () => {\n setIsFeedbackModalOpen(false);\n setCurrentMessageId(null);\n };\n\n return (\n <FeedbackModalContext.Provider\n value={{ isFeedbackModalOpen, currentMessageId, openFeedbackModal, closeFeedbackModal }}\n >\n {isFeedbackModalOpen && currentMessageId && <FeedbackModal />}\n {children}\n </FeedbackModalContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Feedback Option\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FeedbackOptionProps {\n id: FeedbackReasonIds;\n label: string;\n selected: boolean;\n onClick: (id: FeedbackReasonIds) => void;\n}\n\nconst FeedbackOptionWrapper = styled(Flex)`\n &:hover {\n background-color: ${({ theme }) => theme.colors.neutral100};\n }\n\n &.selected {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n }\n`;\n\nconst FeedbackOption: React.FC<FeedbackOptionProps> = ({ id, label, selected, onClick }) => {\n return (\n <FeedbackOptionWrapper\n className={selected ? 'selected' : ''}\n justifyContent=\"space-between\"\n hasRadius\n width=\"100%\"\n cursor=\"pointer\"\n borderColor=\"neutral200\"\n padding={3}\n gap={3}\n onClick={() => onClick(id)}\n >\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {label}\n </Typography>\n <Checkbox\n name={`feedback-${id}`}\n value={id}\n checked={selected}\n onChange={() => onClick(id)}\n />\n </FeedbackOptionWrapper>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Modal\n * -----------------------------------------------------------------------------------------------*/\n\nexport const FeedbackModal: React.FC = () => {\n const [feedbackText, setFeedbackText] = useState('');\n const [selectedReasons, setSelectedReasons] = useState<FeedbackReasonIds[]>([]);\n\n const { t } = useTranslations();\n const { toggleNotification } = useNotification();\n const { closeFeedbackModal, currentMessageId } = useFeedbackModal();\n const { downvoteMessage, isPending } = useFeedback();\n\n const feedbackReasons = [\n {\n id: 'invalid_schema',\n label: t('chat.feedback.reason.invalid_schema', 'Invalid schema'),\n },\n {\n id: 'bad_recommendation',\n label: t('chat.feedback.reason.bad_recommendation', 'Bad recommendation'),\n },\n {\n id: 'slow',\n label: t('chat.feedback.reason.slow', 'Slow'),\n },\n {\n id: 'instructions_ignored',\n label: t('chat.feedback.reason.instructions_ignored', 'Instructions ignored'),\n },\n {\n id: 'being_lazy',\n label: t('chat.feedback.reason.being_lazy', 'Being lazy'),\n },\n {\n id: 'other',\n label: t('chat.feedback.reason.other', 'Other'),\n },\n ] satisfies { id: FeedbackReasonIds; label: string }[];\n\n const handleReasonSelect = (id: FeedbackReasonIds) => {\n setSelectedReasons((prevSelected) => {\n // If already selected, remove it\n if (prevSelected.includes(id)) {\n return prevSelected.filter((reasonId) => reasonId !== id);\n }\n // Otherwise add it\n return [...prevSelected, id];\n });\n };\n\n const handleSubmitFeedback = async () => {\n if (selectedReasons.length === 0) return;\n\n try {\n await downvoteMessage(currentMessageId as string, feedbackText, selectedReasons);\n\n setFeedbackText('');\n setSelectedReasons([]);\n closeFeedbackModal();\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: t('chat.feedback.error', 'An error occurred while submitting your feedback'),\n });\n }\n };\n\n return (\n <Modal.Root open onOpenChange={closeFeedbackModal}>\n <Modal.Content>\n <Modal.Header>\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {t('chat.feedback.title', 'Give feedback')}\n </Typography>\n </Modal.Header>\n <Modal.Body>\n <Flex direction=\"column\" alignItems=\"start\" gap={6} width=\"100%\">\n <Flex direction=\"column\" alignItems=\"start\" gap={2}>\n <Typography variant=\"beta\" fontWeight=\"bold\">\n {t('chat.feedback.title', 'Give feedback')}\n </Typography>\n <Typography variant=\"omega\">\n {t(\n 'chat.feedback.subtitle',\n 'Provide additional feedback on this message. Select all that apply.'\n )}\n </Typography>\n </Flex>\n <Grid.Root width=\"100%\" gap={2}>\n {feedbackReasons.map((reason) => (\n <Grid.Item key={reason.id} col={6} xs={12}>\n <FeedbackOption\n key={reason.id}\n id={reason.id}\n label={reason.label}\n selected={selectedReasons.includes(reason.id)}\n onClick={handleReasonSelect}\n />\n </Grid.Item>\n ))}\n </Grid.Root>\n <Flex direction=\"column\" gap={2} width=\"100%\" alignItems=\"start\">\n <Typography variant=\"omega\">\n {t('chat.feedback.comment.label', 'How can we improve? (optional)')}\n </Typography>\n <Box width=\"100%\">\n <Textarea\n name=\"feedback\"\n placeholder={t('chat.feedback.placeholder', 'Your feedback...')}\n onChange={(e) => setFeedbackText(e.target.value)}\n value={feedbackText}\n />\n </Box>\n </Flex>\n </Flex>\n </Modal.Body>\n <Modal.Footer>\n <Modal.Close>\n <Button variant=\"tertiary\" onClick={closeFeedbackModal}>\n {t('form.button.cancel', 'Cancel')}\n </Button>\n </Modal.Close>\n <Button\n onClick={handleSubmitFeedback}\n loading={isPending}\n disabled={selectedReasons.length === 0}\n >\n {t('form.button.submit', 'Submit')}\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["FeedbackModalContext","createContext","isFeedbackModalOpen","currentMessageId","openFeedbackModal","closeFeedbackModal","useFeedbackModal","useContext","FeedbackProvider","children","setIsFeedbackModalOpen","useState","setCurrentMessageId","messageId","_jsxs","Provider","value","_jsx","FeedbackModal","FeedbackOptionWrapper","styled","Flex","theme","colors","neutral100","primary100","primary200","FeedbackOption","id","label","selected","onClick","className","justifyContent","hasRadius","width","cursor","borderColor","padding","gap","Typography","variant","fontWeight","Checkbox","name","checked","onChange","feedbackText","setFeedbackText","selectedReasons","setSelectedReasons","t","useTranslations","toggleNotification","useNotification","downvoteMessage","isPending","useFeedback","feedbackReasons","handleReasonSelect","prevSelected","includes","filter","reasonId","handleSubmitFeedback","length","error","type","message","Modal","Root","open","onOpenChange","Content","Header","Body","direction","alignItems","Grid","map","reason","Item","col","xs","Box","Textarea","placeholder","e","target","Footer","Close","Button","loading","disabled"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { useState, createContext, useContext } from 'react';
3
3
  import { useNotification } from '@strapi/admin/strapi-admin';
4
- import { Flex, Modal, Typography, Grid, Box, Textarea, Button, Checkbox } from '@strapi/design-system';
4
+ import { Modal, Typography, Flex, Grid, Box, Textarea, Button, Checkbox } from '@strapi/design-system';
5
5
  import { styled } from 'styled-components';
6
6
  import { useFeedback } from './hooks/useFeedback.mjs';
7
7
  import { useTranslations } from './hooks/useTranslations.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"FeedbackModal.mjs","sources":["../../../../admin/src/components/AIChat/FeedbackModal.tsx"],"sourcesContent":["import * as React from 'react';\nimport { createContext, useContext, useState } from 'react';\n\nimport { useNotification } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n Typography,\n Textarea,\n Button,\n Grid,\n Checkbox,\n Modal,\n} from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { useFeedback } from './hooks/useFeedback';\nimport { useTranslations } from './hooks/useTranslations';\n\nimport type { FeedbackReasonIds } from './lib/types/feedback';\n\n/* -------------------------------------------------------------------------------------------------\n * Provider\n * -----------------------------------------------------------------------------------------------*/\ninterface FeedbackModalContextType {\n isFeedbackModalOpen: boolean;\n currentMessageId: string | null;\n openFeedbackModal: (messageId: string) => void;\n closeFeedbackModal: () => void;\n}\n\nconst FeedbackModalContext = createContext<FeedbackModalContextType>({\n isFeedbackModalOpen: false,\n currentMessageId: null,\n openFeedbackModal: () => {},\n closeFeedbackModal: () => {},\n});\n\nexport const useFeedbackModal = () => useContext(FeedbackModalContext);\n\nexport const FeedbackProvider = ({ children }: { children: React.ReactNode }) => {\n const [isFeedbackModalOpen, setIsFeedbackModalOpen] = useState(false);\n const [currentMessageId, setCurrentMessageId] = useState<string | null>(null);\n\n const openFeedbackModal = (messageId: string) => {\n setCurrentMessageId(messageId);\n setIsFeedbackModalOpen(true);\n };\n\n const closeFeedbackModal = () => {\n setIsFeedbackModalOpen(false);\n setCurrentMessageId(null);\n };\n\n return (\n <FeedbackModalContext.Provider\n value={{ isFeedbackModalOpen, currentMessageId, openFeedbackModal, closeFeedbackModal }}\n >\n {isFeedbackModalOpen && currentMessageId && <FeedbackModal />}\n {children}\n </FeedbackModalContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Feedback Option\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FeedbackOptionProps {\n id: FeedbackReasonIds;\n label: string;\n selected: boolean;\n onClick: (id: FeedbackReasonIds) => void;\n}\n\nconst FeedbackOptionWrapper = styled(Flex)`\n &:hover {\n background-color: ${({ theme }) => theme.colors.neutral100};\n }\n\n &.selected {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n }\n`;\n\nconst FeedbackOption: React.FC<FeedbackOptionProps> = ({ id, label, selected, onClick }) => {\n return (\n <FeedbackOptionWrapper\n className={selected ? 'selected' : ''}\n justifyContent=\"space-between\"\n hasRadius\n width=\"100%\"\n cursor=\"pointer\"\n borderColor=\"neutral200\"\n padding={3}\n gap={3}\n onClick={() => onClick(id)}\n >\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {label}\n </Typography>\n <Checkbox\n name={`feedback-${id}`}\n value={id}\n checked={selected}\n onChange={() => onClick(id)}\n />\n </FeedbackOptionWrapper>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Modal\n * -----------------------------------------------------------------------------------------------*/\n\nexport const FeedbackModal: React.FC = () => {\n const [feedbackText, setFeedbackText] = useState('');\n const [selectedReasons, setSelectedReasons] = useState<FeedbackReasonIds[]>([]);\n\n const { t } = useTranslations();\n const { toggleNotification } = useNotification();\n const { closeFeedbackModal, currentMessageId } = useFeedbackModal();\n const { downvoteMessage, isPending } = useFeedback();\n\n const feedbackReasons = [\n {\n id: 'invalid_schema',\n label: t('chat.feedback.reason.invalid_schema', 'Invalid schema'),\n },\n {\n id: 'bad_recommendation',\n label: t('chat.feedback.reason.bad_recommendation', 'Bad recommendation'),\n },\n {\n id: 'slow',\n label: t('chat.feedback.reason.slow', 'Slow'),\n },\n {\n id: 'instructions_ignored',\n label: t('chat.feedback.reason.instructions_ignored', 'Instructions ignored'),\n },\n {\n id: 'being_lazy',\n label: t('chat.feedback.reason.being_lazy', 'Being lazy'),\n },\n {\n id: 'other',\n label: t('chat.feedback.reason.other', 'Other'),\n },\n ] satisfies { id: FeedbackReasonIds; label: string }[];\n\n const handleReasonSelect = (id: FeedbackReasonIds) => {\n setSelectedReasons((prevSelected) => {\n // If already selected, remove it\n if (prevSelected.includes(id)) {\n return prevSelected.filter((reasonId) => reasonId !== id);\n }\n // Otherwise add it\n return [...prevSelected, id];\n });\n };\n\n const handleSubmitFeedback = async () => {\n if (selectedReasons.length === 0) return;\n\n try {\n await downvoteMessage(currentMessageId as string, feedbackText, selectedReasons);\n\n setFeedbackText('');\n setSelectedReasons([]);\n closeFeedbackModal();\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: t('chat.feedback.error', 'An error occurred while submitting your feedback'),\n });\n }\n };\n\n return (\n <Modal.Root open onOpenChange={closeFeedbackModal}>\n <Modal.Content>\n <Modal.Header>\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {t('chat.feedback.title', 'Give feedback')}\n </Typography>\n </Modal.Header>\n <Modal.Body>\n <Flex direction=\"column\" alignItems=\"start\" gap={6} width=\"100%\">\n <Flex direction=\"column\" alignItems=\"start\" gap={2}>\n <Typography variant=\"beta\" fontWeight=\"bold\">\n {t('chat.feedback.title', 'Give feedback')}\n </Typography>\n <Typography variant=\"omega\">\n {t(\n 'chat.feedback.subtitle',\n 'Provide additional feedback on this message. Select all that apply.'\n )}\n </Typography>\n </Flex>\n <Grid.Root width=\"100%\" gap={2}>\n {feedbackReasons.map((reason) => (\n <Grid.Item key={reason.id} col={6} xs={12}>\n <FeedbackOption\n key={reason.id}\n id={reason.id}\n label={reason.label}\n selected={selectedReasons.includes(reason.id)}\n onClick={handleReasonSelect}\n />\n </Grid.Item>\n ))}\n </Grid.Root>\n <Flex direction=\"column\" gap={2} width=\"100%\" alignItems=\"start\">\n <Typography variant=\"omega\">\n {t('chat.feedback.comment.label', 'How can we improve? (optional)')}\n </Typography>\n <Box width=\"100%\">\n <Textarea\n name=\"feedback\"\n placeholder={t('chat.feedback.placeholder', 'Your feedback...')}\n onChange={(e) => setFeedbackText(e.target.value)}\n value={feedbackText}\n />\n </Box>\n </Flex>\n </Flex>\n </Modal.Body>\n <Modal.Footer>\n <Modal.Close>\n <Button variant=\"tertiary\" onClick={closeFeedbackModal}>\n {t('form.button.cancel', 'Cancel')}\n </Button>\n </Modal.Close>\n <Button\n onClick={handleSubmitFeedback}\n loading={isPending}\n disabled={selectedReasons.length === 0}\n >\n {t('form.button.submit', 'Submit')}\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["FeedbackModalContext","createContext","isFeedbackModalOpen","currentMessageId","openFeedbackModal","closeFeedbackModal","useFeedbackModal","useContext","FeedbackProvider","children","setIsFeedbackModalOpen","useState","setCurrentMessageId","messageId","_jsxs","Provider","value","_jsx","FeedbackModal","FeedbackOptionWrapper","styled","Flex","theme","colors","neutral100","primary100","primary200","FeedbackOption","id","label","selected","onClick","className","justifyContent","hasRadius","width","cursor","borderColor","padding","gap","Typography","variant","fontWeight","Checkbox","name","checked","onChange","feedbackText","setFeedbackText","selectedReasons","setSelectedReasons","t","useTranslations","toggleNotification","useNotification","downvoteMessage","isPending","useFeedback","feedbackReasons","handleReasonSelect","prevSelected","includes","filter","reasonId","handleSubmitFeedback","length","error","type","message","Modal","Root","open","onOpenChange","Content","Header","Body","direction","alignItems","Grid","map","reason","Item","col","xs","Box","Textarea","placeholder","e","target","Footer","Close","Button","loading","disabled"],"mappings":"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"}
1
+ {"version":3,"file":"FeedbackModal.mjs","sources":["../../../../admin/src/components/AIChat/FeedbackModal.tsx"],"sourcesContent":["import * as React from 'react';\nimport { createContext, useContext, useState } from 'react';\n\nimport { useNotification } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n Typography,\n Textarea,\n Button,\n Grid,\n Checkbox,\n Modal,\n} from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { useFeedback } from './hooks/useFeedback';\nimport { useTranslations } from './hooks/useTranslations';\n\nimport type { FeedbackReasonIds } from './lib/types/feedback';\n\n/* -------------------------------------------------------------------------------------------------\n * Provider\n * -----------------------------------------------------------------------------------------------*/\ninterface FeedbackModalContextType {\n isFeedbackModalOpen: boolean;\n currentMessageId: string | null;\n openFeedbackModal: (messageId: string) => void;\n closeFeedbackModal: () => void;\n}\n\nconst FeedbackModalContext = createContext<FeedbackModalContextType>({\n isFeedbackModalOpen: false,\n currentMessageId: null,\n openFeedbackModal: () => {},\n closeFeedbackModal: () => {},\n});\n\nexport const useFeedbackModal = () => useContext(FeedbackModalContext);\n\nexport const FeedbackProvider = ({ children }: { children: React.ReactNode }) => {\n const [isFeedbackModalOpen, setIsFeedbackModalOpen] = useState(false);\n const [currentMessageId, setCurrentMessageId] = useState<string | null>(null);\n\n const openFeedbackModal = (messageId: string) => {\n setCurrentMessageId(messageId);\n setIsFeedbackModalOpen(true);\n };\n\n const closeFeedbackModal = () => {\n setIsFeedbackModalOpen(false);\n setCurrentMessageId(null);\n };\n\n return (\n <FeedbackModalContext.Provider\n value={{ isFeedbackModalOpen, currentMessageId, openFeedbackModal, closeFeedbackModal }}\n >\n {isFeedbackModalOpen && currentMessageId && <FeedbackModal />}\n {children}\n </FeedbackModalContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Feedback Option\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FeedbackOptionProps {\n id: FeedbackReasonIds;\n label: string;\n selected: boolean;\n onClick: (id: FeedbackReasonIds) => void;\n}\n\nconst FeedbackOptionWrapper = styled(Flex)`\n &:hover {\n background-color: ${({ theme }) => theme.colors.neutral100};\n }\n\n &.selected {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n }\n`;\n\nconst FeedbackOption: React.FC<FeedbackOptionProps> = ({ id, label, selected, onClick }) => {\n return (\n <FeedbackOptionWrapper\n className={selected ? 'selected' : ''}\n justifyContent=\"space-between\"\n hasRadius\n width=\"100%\"\n cursor=\"pointer\"\n borderColor=\"neutral200\"\n padding={3}\n gap={3}\n onClick={() => onClick(id)}\n >\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {label}\n </Typography>\n <Checkbox\n name={`feedback-${id}`}\n value={id}\n checked={selected}\n onChange={() => onClick(id)}\n />\n </FeedbackOptionWrapper>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Modal\n * -----------------------------------------------------------------------------------------------*/\n\nexport const FeedbackModal: React.FC = () => {\n const [feedbackText, setFeedbackText] = useState('');\n const [selectedReasons, setSelectedReasons] = useState<FeedbackReasonIds[]>([]);\n\n const { t } = useTranslations();\n const { toggleNotification } = useNotification();\n const { closeFeedbackModal, currentMessageId } = useFeedbackModal();\n const { downvoteMessage, isPending } = useFeedback();\n\n const feedbackReasons = [\n {\n id: 'invalid_schema',\n label: t('chat.feedback.reason.invalid_schema', 'Invalid schema'),\n },\n {\n id: 'bad_recommendation',\n label: t('chat.feedback.reason.bad_recommendation', 'Bad recommendation'),\n },\n {\n id: 'slow',\n label: t('chat.feedback.reason.slow', 'Slow'),\n },\n {\n id: 'instructions_ignored',\n label: t('chat.feedback.reason.instructions_ignored', 'Instructions ignored'),\n },\n {\n id: 'being_lazy',\n label: t('chat.feedback.reason.being_lazy', 'Being lazy'),\n },\n {\n id: 'other',\n label: t('chat.feedback.reason.other', 'Other'),\n },\n ] satisfies { id: FeedbackReasonIds; label: string }[];\n\n const handleReasonSelect = (id: FeedbackReasonIds) => {\n setSelectedReasons((prevSelected) => {\n // If already selected, remove it\n if (prevSelected.includes(id)) {\n return prevSelected.filter((reasonId) => reasonId !== id);\n }\n // Otherwise add it\n return [...prevSelected, id];\n });\n };\n\n const handleSubmitFeedback = async () => {\n if (selectedReasons.length === 0) return;\n\n try {\n await downvoteMessage(currentMessageId as string, feedbackText, selectedReasons);\n\n setFeedbackText('');\n setSelectedReasons([]);\n closeFeedbackModal();\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: t('chat.feedback.error', 'An error occurred while submitting your feedback'),\n });\n }\n };\n\n return (\n <Modal.Root open onOpenChange={closeFeedbackModal}>\n <Modal.Content>\n <Modal.Header>\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {t('chat.feedback.title', 'Give feedback')}\n </Typography>\n </Modal.Header>\n <Modal.Body>\n <Flex direction=\"column\" alignItems=\"start\" gap={6} width=\"100%\">\n <Flex direction=\"column\" alignItems=\"start\" gap={2}>\n <Typography variant=\"beta\" fontWeight=\"bold\">\n {t('chat.feedback.title', 'Give feedback')}\n </Typography>\n <Typography variant=\"omega\">\n {t(\n 'chat.feedback.subtitle',\n 'Provide additional feedback on this message. Select all that apply.'\n )}\n </Typography>\n </Flex>\n <Grid.Root width=\"100%\" gap={2}>\n {feedbackReasons.map((reason) => (\n <Grid.Item key={reason.id} col={6} xs={12}>\n <FeedbackOption\n key={reason.id}\n id={reason.id}\n label={reason.label}\n selected={selectedReasons.includes(reason.id)}\n onClick={handleReasonSelect}\n />\n </Grid.Item>\n ))}\n </Grid.Root>\n <Flex direction=\"column\" gap={2} width=\"100%\" alignItems=\"start\">\n <Typography variant=\"omega\">\n {t('chat.feedback.comment.label', 'How can we improve? (optional)')}\n </Typography>\n <Box width=\"100%\">\n <Textarea\n name=\"feedback\"\n placeholder={t('chat.feedback.placeholder', 'Your feedback...')}\n onChange={(e) => setFeedbackText(e.target.value)}\n value={feedbackText}\n />\n </Box>\n </Flex>\n </Flex>\n </Modal.Body>\n <Modal.Footer>\n <Modal.Close>\n <Button variant=\"tertiary\" onClick={closeFeedbackModal}>\n {t('form.button.cancel', 'Cancel')}\n </Button>\n </Modal.Close>\n <Button\n onClick={handleSubmitFeedback}\n loading={isPending}\n disabled={selectedReasons.length === 0}\n >\n {t('form.button.submit', 'Submit')}\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["FeedbackModalContext","createContext","isFeedbackModalOpen","currentMessageId","openFeedbackModal","closeFeedbackModal","useFeedbackModal","useContext","FeedbackProvider","children","setIsFeedbackModalOpen","useState","setCurrentMessageId","messageId","_jsxs","Provider","value","_jsx","FeedbackModal","FeedbackOptionWrapper","styled","Flex","theme","colors","neutral100","primary100","primary200","FeedbackOption","id","label","selected","onClick","className","justifyContent","hasRadius","width","cursor","borderColor","padding","gap","Typography","variant","fontWeight","Checkbox","name","checked","onChange","feedbackText","setFeedbackText","selectedReasons","setSelectedReasons","t","useTranslations","toggleNotification","useNotification","downvoteMessage","isPending","useFeedback","feedbackReasons","handleReasonSelect","prevSelected","includes","filter","reasonId","handleSubmitFeedback","length","error","type","message","Modal","Root","open","onOpenChange","Content","Header","Body","direction","alignItems","Grid","map","reason","Item","col","xs","Box","Textarea","placeholder","e","target","Footer","Close","Button","loading","disabled"],"mappings":"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"}