@strapi/content-type-builder 5.37.1 → 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":"Marker.mjs","sources":["../../../../../../admin/src/components/AIChat/components/Messages/Marker.tsx"],"sourcesContent":["import { Typography, Flex, Box, Link } from '@strapi/design-system';\nimport { Check, Loader, Cross, ChevronDown } from '@strapi/icons';\nimport { Link as RouterLink } from 'react-router-dom';\nimport { styled, keyframes } from 'styled-components';\n\nimport { MarkerContent } from '../../lib/types/messages';\nimport { Collapsible, CollapsibleTrigger, CollapsibleContent } from '../Collapsible';\n\nconst rotate = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`;\n\nconst SpinningLoader = styled(Loader)`\n animation: ${rotate} 1s linear infinite;\n`;\n\nconst RotatingIcon = styled(Box)<{ $open: boolean }>`\n transform: rotate(${({ $open }) => ($open ? '180deg' : '0deg')});\n transition: transform ${({ theme }) => theme.motion.timings['200']}\n ${({ theme }) => theme.motion.easings.easeOutQuad};\n`;\n\nconst Status = ({ status }: { status: string }) => {\n switch (status) {\n case 'update':\n return (\n <Typography fontWeight=\"semiBold\" textColor=\"warning500\">\n M\n </Typography>\n );\n case 'remove':\n return (\n <Typography fontWeight=\"semiBold\" textColor=\"danger500\">\n D\n </Typography>\n );\n case 'create':\n return (\n <Typography fontWeight=\"semiBold\" textColor=\"success500\">\n N\n </Typography>\n );\n default:\n return null;\n }\n};\n\nexport const Marker = ({ title, steps, state }: MarkerContent) => {\n const getStateIcon = () => {\n switch (state) {\n case 'success':\n return <Check fill=\"success500\" />;\n case 'loading':\n return <SpinningLoader />;\n case 'error':\n return <Cross fill=\"danger500\" />;\n default:\n return null;\n }\n };\n\n return (\n <Box\n borderWidth=\"1px\"\n borderColor=\"neutral200\"\n borderStyle=\"solid\"\n hasRadius\n marginBottom={3}\n width={'336px'}\n >\n <Collapsible defaultOpen={false}>\n <CollapsibleTrigger>\n {({ open }) => (\n <Box\n padding={3}\n borderColor=\"neutral200\"\n borderWidth={open ? '0 0 1px 0' : '0'}\n borderStyle=\"solid\"\n >\n <Flex gap={2} alignItems=\"center\">\n {getStateIcon()}\n <Typography>{title}</Typography>\n <Flex marginLeft=\"auto\">\n <RotatingIcon as={ChevronDown} $open={open} />\n </Flex>\n </Flex>\n </Box>\n )}\n </CollapsibleTrigger>\n <CollapsibleContent>\n <Flex gap={3} padding={3} direction=\"column\">\n {steps.map((step) => (\n <Flex\n key={step.id}\n gap={2}\n justifyContent=\"space-between\"\n width=\"100%\"\n padding={[0, 1]}\n >\n {/* <Typography>{step.description}</Typography> */}\n {step.link ? (\n <Link tag={RouterLink} to={step.link}>\n <Typography>{step.description}</Typography>\n </Link>\n ) : (\n <Typography>{step.description}</Typography>\n )}\n <Status status={step.status} />\n </Flex>\n ))}\n </Flex>\n </CollapsibleContent>\n </Collapsible>\n </Box>\n );\n};\n"],"names":["rotate","keyframes","SpinningLoader","styled","Loader","RotatingIcon","Box","$open","theme","motion","timings","easings","easeOutQuad","Status","status","_jsx","Typography","fontWeight","textColor","Marker","title","steps","state","getStateIcon","Check","fill","Cross","borderWidth","borderColor","borderStyle","hasRadius","marginBottom","width","_jsxs","Collapsible","defaultOpen","CollapsibleTrigger","open","padding","Flex","gap","alignItems","marginLeft","as","ChevronDown","CollapsibleContent","direction","map","step","justifyContent","link","Link","tag","RouterLink","to","description","id"],"mappings":";;;;;;;AAQA,MAAMA,MAAAA,GAASC,SAAS;;;;;;;AAOxB,CAAC;AAED,MAAMC,cAAAA,GAAiBC,MAAOC,CAAAA,MAAAA,CAAO;AACxB,aAAA,EAAEJ,MAAO,CAAA;AACtB,CAAC;AAED,MAAMK,YAAAA,GAAeF,MAAOG,CAAAA,GAAAA,CAAwB;AAChC,oBAAA,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAMA,KAAAA,GAAQ,WAAW,MAAQ,CAAA;wBACzC,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAACC,OAAO,CAAC,KAAA,CAAM;IAChE,EAAE,CAAC,EAAEF,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAACE,OAAO,CAACC,WAAW,CAAC;AACtD,CAAC;AAED,MAAMC,MAAS,GAAA,CAAC,EAAEC,MAAM,EAAsB,GAAA;IAC5C,OAAQA,MAAAA;QACN,KAAK,QAAA;AACH,YAAA,qBACEC,GAACC,CAAAA,UAAAA,EAAAA;gBAAWC,UAAW,EAAA,UAAA;gBAAWC,SAAU,EAAA,YAAA;AAAa,gBAAA,QAAA,EAAA;;QAI7D,KAAK,QAAA;AACH,YAAA,qBACEH,GAACC,CAAAA,UAAAA,EAAAA;gBAAWC,UAAW,EAAA,UAAA;gBAAWC,SAAU,EAAA,WAAA;AAAY,gBAAA,QAAA,EAAA;;QAI5D,KAAK,QAAA;AACH,YAAA,qBACEH,GAACC,CAAAA,UAAAA,EAAAA;gBAAWC,UAAW,EAAA,UAAA;gBAAWC,SAAU,EAAA,YAAA;AAAa,gBAAA,QAAA,EAAA;;AAI7D,QAAA;YACE,OAAO,IAAA;AACX;AACF,CAAA;AAEO,MAAMC,SAAS,CAAC,EAAEC,KAAK,EAAEC,KAAK,EAAEC,KAAK,EAAiB,GAAA;AAC3D,IAAA,MAAMC,YAAe,GAAA,IAAA;QACnB,OAAQD,KAAAA;YACN,KAAK,SAAA;AACH,gBAAA,qBAAOP,GAACS,CAAAA,KAAAA,EAAAA;oBAAMC,IAAK,EAAA;;YACrB,KAAK,SAAA;AACH,gBAAA,qBAAOV,GAACb,CAAAA,cAAAA,EAAAA,EAAAA,CAAAA;YACV,KAAK,OAAA;AACH,gBAAA,qBAAOa,GAACW,CAAAA,KAAAA,EAAAA;oBAAMD,IAAK,EAAA;;AACrB,YAAA;gBACE,OAAO,IAAA;AACX;AACF,KAAA;AAEA,IAAA,qBACEV,GAACT,CAAAA,GAAAA,EAAAA;QACCqB,WAAY,EAAA,KAAA;QACZC,WAAY,EAAA,YAAA;QACZC,WAAY,EAAA,OAAA;QACZC,SAAS,EAAA,IAAA;QACTC,YAAc,EAAA,CAAA;QACdC,KAAO,EAAA,OAAA;AAEP,QAAA,QAAA,gBAAAC,IAACC,CAAAA,WAAAA,EAAAA;YAAYC,WAAa,EAAA,KAAA;;8BACxBpB,GAACqB,CAAAA,kBAAAA,EAAAA;AACE,oBAAA,QAAA,EAAA,CAAC,EAAEC,IAAI,EAAE,iBACRtB,GAACT,CAAAA,GAAAA,EAAAA;4BACCgC,OAAS,EAAA,CAAA;4BACTV,WAAY,EAAA,YAAA;AACZD,4BAAAA,WAAAA,EAAaU,OAAO,WAAc,GAAA,GAAA;4BAClCR,WAAY,EAAA,OAAA;AAEZ,4BAAA,QAAA,gBAAAI,IAACM,CAAAA,IAAAA,EAAAA;gCAAKC,GAAK,EAAA,CAAA;gCAAGC,UAAW,EAAA,QAAA;;AACtBlB,oCAAAA,YAAAA,EAAAA;kDACDR,GAACC,CAAAA,UAAAA,EAAAA;AAAYI,wCAAAA,QAAAA,EAAAA;;kDACbL,GAACwB,CAAAA,IAAAA,EAAAA;wCAAKG,UAAW,EAAA,MAAA;AACf,wCAAA,QAAA,gBAAA3B,GAACV,CAAAA,YAAAA,EAAAA;4CAAasC,EAAIC,EAAAA,WAAAA;4CAAarC,KAAO8B,EAAAA;;;;;;;8BAMhDtB,GAAC8B,CAAAA,kBAAAA,EAAAA;AACC,oBAAA,QAAA,gBAAA9B,GAACwB,CAAAA,IAAAA,EAAAA;wBAAKC,GAAK,EAAA,CAAA;wBAAGF,OAAS,EAAA,CAAA;wBAAGQ,SAAU,EAAA,QAAA;AACjCzB,wBAAAA,QAAAA,EAAAA,KAAAA,CAAM0B,GAAG,CAAC,CAACC,IAAAA,iBACVf,IAACM,CAAAA,IAAAA,EAAAA;gCAECC,GAAK,EAAA,CAAA;gCACLS,cAAe,EAAA,eAAA;gCACfjB,KAAM,EAAA,MAAA;gCACNM,OAAS,EAAA;AAAC,oCAAA,CAAA;AAAG,oCAAA;AAAE,iCAAA;;oCAGdU,IAAKE,CAAAA,IAAI,iBACRnC,GAACoC,CAAAA,IAAAA,EAAAA;wCAAKC,GAAKC,EAAAA,MAAAA;AAAYC,wCAAAA,EAAAA,EAAIN,KAAKE,IAAI;AAClC,wCAAA,QAAA,gBAAAnC,GAACC,CAAAA,UAAAA,EAAAA;AAAYgC,4CAAAA,QAAAA,EAAAA,IAAAA,CAAKO;;uDAGpBxC,GAACC,CAAAA,UAAAA,EAAAA;AAAYgC,wCAAAA,QAAAA,EAAAA,IAAAA,CAAKO;;kDAEpBxC,GAACF,CAAAA,MAAAA,EAAAA;AAAOC,wCAAAA,MAAAA,EAAQkC,KAAKlC;;;AAdhBkC,6BAAAA,EAAAA,IAAAA,CAAKQ,EAAE,CAAA;;;;;;AAsB5B;;;;"}
1
+ {"version":3,"file":"Marker.mjs","sources":["../../../../../../admin/src/components/AIChat/components/Messages/Marker.tsx"],"sourcesContent":["import { Typography, Flex, Box, Link } from '@strapi/design-system';\nimport { Check, Loader, Cross, ChevronDown } from '@strapi/icons';\nimport { Link as RouterLink } from 'react-router-dom';\nimport { styled, keyframes } from 'styled-components';\n\nimport { MarkerContent } from '../../lib/types/messages';\nimport { Collapsible, CollapsibleTrigger, CollapsibleContent } from '../Collapsible';\n\nconst rotate = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`;\n\nconst SpinningLoader = styled(Loader)`\n animation: ${rotate} 1s linear infinite;\n`;\n\nconst RotatingIcon = styled(Box)<{ $open: boolean }>`\n transform: rotate(${({ $open }) => ($open ? '180deg' : '0deg')});\n transition: transform ${({ theme }) => theme.motion.timings['200']}\n ${({ theme }) => theme.motion.easings.easeOutQuad};\n`;\n\nconst Status = ({ status }: { status: string }) => {\n switch (status) {\n case 'update':\n return (\n <Typography fontWeight=\"semiBold\" textColor=\"warning500\">\n M\n </Typography>\n );\n case 'remove':\n return (\n <Typography fontWeight=\"semiBold\" textColor=\"danger500\">\n D\n </Typography>\n );\n case 'create':\n return (\n <Typography fontWeight=\"semiBold\" textColor=\"success500\">\n N\n </Typography>\n );\n default:\n return null;\n }\n};\n\nexport const Marker = ({ title, steps, state }: MarkerContent) => {\n const getStateIcon = () => {\n switch (state) {\n case 'success':\n return <Check fill=\"success500\" />;\n case 'loading':\n return <SpinningLoader />;\n case 'error':\n return <Cross fill=\"danger500\" />;\n default:\n return null;\n }\n };\n\n return (\n <Box\n borderWidth=\"1px\"\n borderColor=\"neutral200\"\n borderStyle=\"solid\"\n hasRadius\n marginBottom={3}\n width={'336px'}\n >\n <Collapsible defaultOpen={false}>\n <CollapsibleTrigger>\n {({ open }) => (\n <Box\n padding={3}\n borderColor=\"neutral200\"\n borderWidth={open ? '0 0 1px 0' : '0'}\n borderStyle=\"solid\"\n >\n <Flex gap={2} alignItems=\"center\">\n {getStateIcon()}\n <Typography>{title}</Typography>\n <Flex marginLeft=\"auto\">\n <RotatingIcon as={ChevronDown} $open={open} />\n </Flex>\n </Flex>\n </Box>\n )}\n </CollapsibleTrigger>\n <CollapsibleContent>\n <Flex gap={3} padding={3} direction=\"column\">\n {steps.map((step) => (\n <Flex\n key={step.id}\n gap={2}\n justifyContent=\"space-between\"\n width=\"100%\"\n padding={[0, 1]}\n >\n {/* <Typography>{step.description}</Typography> */}\n {step.link ? (\n <Link tag={RouterLink} to={step.link}>\n <Typography>{step.description}</Typography>\n </Link>\n ) : (\n <Typography>{step.description}</Typography>\n )}\n <Status status={step.status} />\n </Flex>\n ))}\n </Flex>\n </CollapsibleContent>\n </Collapsible>\n </Box>\n );\n};\n"],"names":["rotate","keyframes","SpinningLoader","styled","Loader","RotatingIcon","Box","$open","theme","motion","timings","easings","easeOutQuad","Status","status","_jsx","Typography","fontWeight","textColor","Marker","title","steps","state","getStateIcon","Check","fill","Cross","borderWidth","borderColor","borderStyle","hasRadius","marginBottom","width","_jsxs","Collapsible","defaultOpen","CollapsibleTrigger","open","padding","Flex","gap","alignItems","marginLeft","as","ChevronDown","CollapsibleContent","direction","map","step","justifyContent","link","Link","tag","RouterLink","to","description","id"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Message.js","sources":["../../../../../../admin/src/components/AIChat/components/Messages/Message.tsx"],"sourcesContent":["import { Typography, Box, IconButton, Flex } from '@strapi/design-system';\nimport { ThumbUp, ThumbDown } from '@strapi/icons';\nimport Markdown from 'react-markdown';\nimport { styled } from 'styled-components';\n\nimport { useFeedbackModal } from '../../FeedbackModal';\nimport { useFeedback } from '../../hooks/useFeedback';\nimport {\n AIMessage,\n type UserMessage as UserMessageType,\n AssistantMessage as AssistantMessageType,\n type MarkerContent as MarkerContentType,\n} from '../../lib/types/messages';\nimport { AnimatedBox } from '../AnimatedBox';\nimport { AttachmentPreview } from '../Attachments/AttachmentPreview';\n\nimport { Marker } from './Marker';\n\nconst MarkdownStyles = styled(Typography)`\n max-width: 65ch;\n margin: 0 auto;\n overflow-wrap: anywhere;\n word-break: break-word;\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin-top: 1.25em;\n margin-bottom: 0.5em;\n font-weight: bold;\n }\n\n p {\n margin-bottom: 1em;\n }\n\n ul,\n ol {\n padding-left: 1.5em; /* indentation for bullet points */\n margin-bottom: 1em;\n }\n\n li {\n margin-bottom: 0.5em;\n list-style-type: disc; /* or whatever style you prefer */\n }\n\n strong {\n font-weight: bold;\n }\n\n /* code blocks, blockquotes, etc. */\n code {\n background-color: ${({ theme }) => theme.colors.neutral100};\n padding: 0.2em 0.4em;\n border-radius: ${({ theme }) => theme.borderRadius};\n border-color: ${({ theme }) => theme.colors.neutral150};\n border-style: solid;\n font-family: 'SF Mono', SFMono-Regular, ui-monospace, 'DejaVu Sans Mono', Menlo, Consolas,\n monospace;\n }\n\n /* links */\n a {\n color: ${({ theme }) => theme.colors.primary500};\n background-color: ${({ theme }) => theme.colors.neutral100};\n padding: 0.2em 0.4em;\n border-radius: ${({ theme }) => theme.borderRadius};\n border-color: ${({ theme }) => theme.colors.neutral150};\n border-style: solid;\n text-decoration: none;\n\n &:hover {\n text-decoration: underline;\n }\n }\n`;\n\nconst UserMessageTypography = styled(Typography)`\n overflow-wrap: anywhere;\n word-break: break-word;\n`;\n\n// ---------------------------\n// Tool: schemaGenerationTool helpers\n// ---------------------------\n\ntype SchemaToolSchema = {\n action?: 'create' | 'update' | 'remove';\n uid?: string;\n name?: string;\n category?: string;\n kind?: 'collectionType' | 'singleType' | 'component';\n modelType?: 'component' | 'collectionType' | 'singleType';\n};\n\ntype SchemaToolPart = {\n type: 'tool-schemaGenerationTool';\n input?: { schemas?: SchemaToolSchema[] };\n output?: { schemas?: SchemaToolSchema[]; error?: unknown };\n toolCallId?: string;\n};\n\nconst isSchemaToolPart = (part: any): part is SchemaToolPart =>\n part && typeof part === 'object' && part.type === 'tool-schemaGenerationTool';\n\nconst capitalize = (s?: string) => (s ? s.charAt(0).toUpperCase() + s.slice(1) : '');\n\nconst getSchemaLink = (schema: SchemaToolSchema): string | undefined => {\n const isComponent = (schema.kind ?? schema.modelType) === 'component';\n if (!schema.uid) return undefined;\n return isComponent\n ? `/plugins/content-type-builder/component-categories/${schema.category ?? ''}/${schema.uid}`\n : `/plugins/content-type-builder/content-types/${schema.uid}`;\n};\n\nconst toMarkerFromSchemaTool = (part: SchemaToolPart): MarkerContentType => {\n const outSchemas = part.output?.schemas ?? [];\n const inSchemas = part.input?.schemas ?? [];\n\n const schemas = (outSchemas.length ? outSchemas : inSchemas) as SchemaToolSchema[];\n const numSchemas = schemas.length;\n\n const state: 'loading' | 'success' | 'error' = part.output\n ? part.output.error\n ? 'error'\n : 'success'\n : 'loading';\n\n const steps = schemas.map((schema, index) => ({\n id: `${part.toolCallId ?? 'schemaGenerationTool'}-${schema.uid ?? schema.name ?? index}`,\n description: capitalize(schema.name ?? schema.uid ?? 'Schema'),\n status:\n schema.action === 'create' || schema.action === 'update' || schema.action === 'remove'\n ? schema.action\n : ('update' as const),\n link: getSchemaLink(schema),\n }));\n\n const title =\n state === 'success'\n ? `Updated ${numSchemas} schema${numSchemas === 1 ? '' : 's'}`\n : state === 'error'\n ? `Failed to update schema${numSchemas === 1 ? '' : 's'}`\n : 'Updating schemas';\n\n return {\n type: 'marker',\n title,\n state,\n steps,\n };\n};\n\nconst MessageContent = ({\n part,\n}: {\n part: AIMessage['parts'][number];\n status?: 'loading' | 'success' | 'error';\n}) => {\n if (part.type === 'text') {\n return (\n <MarkdownStyles>\n <Markdown\n components={{\n a: ({ node, ...props }) => <a target=\"_blank\" rel=\"noopener noreferrer\" {...props} />,\n }}\n >\n {part.text}\n </Markdown>\n </MarkdownStyles>\n );\n }\n\n if (isSchemaToolPart(part)) {\n const marker = toMarkerFromSchemaTool(part);\n return <Marker {...marker} />;\n }\n\n return null;\n};\n\nconst UserMessage = ({ message }: { message: UserMessageType }) => {\n const hasText = message.parts.some(\n (content) => content.type === 'text' && content.text.trim() !== ''\n );\n const attachments = message.parts.filter((content) => content.type === 'file');\n\n return (\n <AnimatedBox\n as={Flex}\n direction=\"column\"\n alignItems=\"flex-end\"\n style={{ alignSelf: 'flex-end' }}\n gap={2}\n maxWidth=\"80%\"\n >\n {hasText ? (\n <Box background=\"neutral150\" borderStyle=\"none\" padding={['10px', '16px']} hasRadius>\n {message.parts.map((content, index) => {\n if (content.type !== 'text') return null;\n return <UserMessageTypography key={index}>{content.text}</UserMessageTypography>;\n })}\n </Box>\n ) : null}\n\n {/* Attachments */}\n {attachments.map((attachment, idx) => (\n <AttachmentPreview\n key={`${attachment.type === 'file' ? attachment.filename : attachment.type}-${idx}`}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n attachment={{ ...attachment, status: 'ready' } as any}\n />\n ))}\n </AnimatedBox>\n );\n};\n\nconst AssistantMessage = ({\n message,\n isLoading,\n}: {\n message: AssistantMessageType;\n isLoading?: boolean;\n}) => {\n const { upvoteMessage } = useFeedback();\n const { openFeedbackModal } = useFeedbackModal();\n\n return (\n <Box style={{ alignSelf: 'flex-start' }} maxWidth=\"90%\">\n {message.parts.map((content, index) => (\n <MessageContent key={index} part={content} />\n ))}\n {isLoading ? (\n <Flex gap={1}>\n <IconButton\n label=\"Upvote\"\n size=\"XS\"\n variant=\"ghost\"\n onClick={() => upvoteMessage(message.id)}\n >\n <ThumbUp />\n </IconButton>\n <IconButton\n label=\"Downvote\"\n size=\"XS\"\n variant=\"ghost\"\n // For downvoting, user must provide specific feedback\n onClick={() => openFeedbackModal(message.id)}\n >\n <ThumbDown />\n </IconButton>\n </Flex>\n ) : null}\n </Box>\n );\n};\n\nexport const ChatMessage = ({\n message,\n isLoading,\n}: {\n message: AIMessage;\n isLoading?: boolean;\n}) => {\n /**\n * IMPORTANT: Messages are rendered using react-markdown (heavy compute)\n * Component re-renders on each message update, but AI SDK v5 provides\n * throttling (experimental_throttle: 100ms) which batches updates and reduces\n * re-render frequency during streaming.\n */\n if (message.role === 'user') {\n return <UserMessage message={message as UserMessageType} />;\n }\n return <AssistantMessage message={message as AssistantMessageType} />;\n};\n"],"names":["MarkdownStyles","styled","Typography","theme","colors","neutral100","borderRadius","neutral150","primary500","UserMessageTypography","isSchemaToolPart","part","type","capitalize","s","charAt","toUpperCase","slice","getSchemaLink","schema","isComponent","kind","modelType","uid","undefined","category","toMarkerFromSchemaTool","outSchemas","output","schemas","inSchemas","input","length","numSchemas","state","error","steps","map","index","id","toolCallId","name","description","status","action","link","title","MessageContent","_jsx","Markdown","components","a","node","props","target","rel","text","marker","Marker","UserMessage","message","hasText","parts","some","content","trim","attachments","filter","_jsxs","AnimatedBox","as","Flex","direction","alignItems","style","alignSelf","gap","maxWidth","Box","background","borderStyle","padding","hasRadius","attachment","idx","AttachmentPreview","filename","AssistantMessage","isLoading","upvoteMessage","useFeedback","openFeedbackModal","useFeedbackModal","IconButton","label","size","variant","onClick","ThumbUp","ThumbDown","ChatMessage","role"],"mappings":";;;;;;;;;;;;;AAkBA,MAAMA,cAAAA,GAAiBC,uBAAOC,CAAAA,uBAAAA,CAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAsCnB,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAACC,UAAU,CAAC;;AAE5C,mBAAA,EAAE,CAAC,EAAEF,KAAK,EAAE,GAAKA,KAAAA,CAAMG,YAAY,CAAC;kBACrC,EAAE,CAAC,EAAEH,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAACG,UAAU,CAAC;;;;;;;;WAQhD,EAAE,CAAC,EAAEJ,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAACI,UAAU,CAAC;sBAC9B,EAAE,CAAC,EAAEL,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAACC,UAAU,CAAC;;AAE5C,mBAAA,EAAE,CAAC,EAAEF,KAAK,EAAE,GAAKA,KAAAA,CAAMG,YAAY,CAAC;kBACrC,EAAE,CAAC,EAAEH,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAACG,UAAU,CAAC;;;;;;;;AAQ3D,CAAC;AAED,MAAME,qBAAAA,GAAwBR,uBAAOC,CAAAA,uBAAAA,CAAW;;;AAGhD,CAAC;AAsBD,MAAMQ,gBAAAA,GAAmB,CAACC,IACxBA,GAAAA,IAAAA,IAAQ,OAAOA,IAAS,KAAA,QAAA,IAAYA,IAAKC,CAAAA,IAAI,KAAK,2BAAA;AAEpD,MAAMC,UAAa,GAAA,CAACC,CAAgBA,GAAAA,CAAAA,GAAIA,CAAEC,CAAAA,MAAM,CAAC,CAAA,CAAA,CAAGC,WAAW,EAAA,GAAKF,CAAEG,CAAAA,KAAK,CAAC,CAAK,CAAA,GAAA,EAAA;AAEjF,MAAMC,gBAAgB,CAACC,MAAAA,GAAAA;IACrB,MAAMC,WAAAA,GAAc,CAACD,MAAAA,CAAOE,IAAI,IAAIF,MAAAA,CAAOG,SAAQ,MAAO,WAAA;AAC1D,IAAA,IAAI,CAACH,MAAAA,CAAOI,GAAG,EAAE,OAAOC,SAAAA;AACxB,IAAA,OAAOJ,cACH,CAAC,mDAAmD,EAAED,MAAOM,CAAAA,QAAQ,IAAI,EAAG,CAAA,CAAC,EAAEN,MAAOI,CAAAA,GAAG,EAAE,GAC3F,CAAC,4CAA4C,EAAEJ,MAAAA,CAAOI,GAAG,CAAE,CAAA;AACjE,CAAA;AAEA,MAAMG,yBAAyB,CAACf,IAAAA,GAAAA;AAC9B,IAAA,MAAMgB,UAAahB,GAAAA,IAAAA,CAAKiB,MAAM,EAAEC,WAAW,EAAE;AAC7C,IAAA,MAAMC,SAAYnB,GAAAA,IAAAA,CAAKoB,KAAK,EAAEF,WAAW,EAAE;AAE3C,IAAA,MAAMA,OAAWF,GAAAA,UAAAA,CAAWK,MAAM,GAAGL,UAAaG,GAAAA,SAAAA;IAClD,MAAMG,UAAAA,GAAaJ,QAAQG,MAAM;IAEjC,MAAME,KAAAA,GAAyCvB,IAAKiB,CAAAA,MAAM,GACtDjB,IAAAA,CAAKiB,MAAM,CAACO,KAAK,GACf,OAAA,GACA,SACF,GAAA,SAAA;AAEJ,IAAA,MAAMC,QAAQP,OAAQQ,CAAAA,GAAG,CAAC,CAAClB,MAAAA,EAAQmB,SAAW;AAC5CC,YAAAA,EAAAA,EAAI,CAAG5B,EAAAA,IAAAA,CAAK6B,UAAU,IAAI,sBAAuB,CAAA,CAAC,EAAErB,MAAAA,CAAOI,GAAG,IAAIJ,MAAOsB,CAAAA,IAAI,IAAIH,KAAO,CAAA,CAAA;AACxFI,YAAAA,WAAAA,EAAa7B,WAAWM,MAAOsB,CAAAA,IAAI,IAAItB,MAAAA,CAAOI,GAAG,IAAI,QAAA,CAAA;AACrDoB,YAAAA,MAAAA,EACExB,MAAOyB,CAAAA,MAAM,KAAK,QAAA,IAAYzB,OAAOyB,MAAM,KAAK,QAAYzB,IAAAA,MAAAA,CAAOyB,MAAM,KAAK,QAC1EzB,GAAAA,MAAAA,CAAOyB,MAAM,GACZ,QAAA;AACPC,YAAAA,IAAAA,EAAM3B,aAAcC,CAAAA,MAAAA;SACtB,CAAA,CAAA;IAEA,MAAM2B,KAAAA,GACJZ,UAAU,SACN,GAAA,CAAC,QAAQ,EAAED,UAAAA,CAAW,OAAO,EAAEA,UAAe,KAAA,CAAA,GAAI,KAAK,GAAK,CAAA,CAAA,GAC5DC,KAAU,KAAA,OAAA,GACR,CAAC,uBAAuB,EAAED,UAAe,KAAA,CAAA,GAAI,EAAK,GAAA,GAAA,CAAA,CAAK,GACvD,kBAAA;IAER,OAAO;QACLrB,IAAM,EAAA,QAAA;AACNkC,QAAAA,KAAAA;AACAZ,QAAAA,KAAAA;AACAE,QAAAA;AACF,KAAA;AACF,CAAA;AAEA,MAAMW,cAAiB,GAAA,CAAC,EACtBpC,IAAI,EAIL,GAAA;IACC,IAAIA,IAAAA,CAAKC,IAAI,KAAK,MAAQ,EAAA;AACxB,QAAA,qBACEoC,cAAChD,CAAAA,cAAAA,EAAAA;AACC,YAAA,QAAA,gBAAAgD,cAACC,CAAAA,QAAAA,EAAAA;gBACCC,UAAY,EAAA;AACVC,oBAAAA,CAAAA,EAAG,CAAC,EAAEC,IAAI,EAAE,GAAGC,KAAAA,EAAO,iBAAKL,cAACG,CAAAA,GAAAA,EAAAA;4BAAEG,MAAO,EAAA,QAAA;4BAASC,GAAI,EAAA,qBAAA;AAAuB,4BAAA,GAAGF;;AAC9E,iBAAA;AAEC1C,gBAAAA,QAAAA,EAAAA,IAAAA,CAAK6C;;;AAId;AAEA,IAAA,IAAI9C,iBAAiBC,IAAO,CAAA,EAAA;AAC1B,QAAA,MAAM8C,SAAS/B,sBAAuBf,CAAAA,IAAAA,CAAAA;AACtC,QAAA,qBAAOqC,cAACU,CAAAA,aAAAA,EAAAA;AAAQ,YAAA,GAAGD;;AACrB;IAEA,OAAO,IAAA;AACT,CAAA;AAEA,MAAME,WAAc,GAAA,CAAC,EAAEC,OAAO,EAAgC,GAAA;AAC5D,IAAA,MAAMC,UAAUD,OAAQE,CAAAA,KAAK,CAACC,IAAI,CAChC,CAACC,OAAAA,GAAYA,OAAQpD,CAAAA,IAAI,KAAK,MAAUoD,IAAAA,OAAAA,CAAQR,IAAI,CAACS,IAAI,EAAO,KAAA,EAAA,CAAA;IAElE,MAAMC,WAAAA,GAAcN,OAAQE,CAAAA,KAAK,CAACK,MAAM,CAAC,CAACH,OAAAA,GAAYA,OAAQpD,CAAAA,IAAI,KAAK,MAAA,CAAA;AAEvE,IAAA,qBACEwD,eAACC,CAAAA,uBAAAA,EAAAA;QACCC,EAAIC,EAAAA,iBAAAA;QACJC,SAAU,EAAA,QAAA;QACVC,UAAW,EAAA,UAAA;QACXC,KAAO,EAAA;YAAEC,SAAW,EAAA;AAAW,SAAA;QAC/BC,GAAK,EAAA,CAAA;QACLC,QAAS,EAAA,KAAA;;AAERhB,YAAAA,OAAAA,iBACCb,cAAC8B,CAAAA,gBAAAA,EAAAA;gBAAIC,UAAW,EAAA,YAAA;gBAAaC,WAAY,EAAA,MAAA;gBAAOC,OAAS,EAAA;AAAC,oBAAA,MAAA;AAAQ,oBAAA;AAAO,iBAAA;gBAAEC,SAAS,EAAA,IAAA;AACjFtB,gBAAAA,QAAAA,EAAAA,OAAAA,CAAQE,KAAK,CAACzB,GAAG,CAAC,CAAC2B,OAAS1B,EAAAA,KAAAA,GAAAA;AAC3B,oBAAA,IAAI0B,OAAQpD,CAAAA,IAAI,KAAK,MAAA,EAAQ,OAAO,IAAA;AACpC,oBAAA,qBAAOoC,cAACvC,CAAAA,qBAAAA,EAAAA;AAAmCuD,wBAAAA,QAAAA,EAAAA,OAAAA,CAAQR;AAAhBlB,qBAAAA,EAAAA,KAAAA,CAAAA;AACrC,iBAAA;AAEA,aAAA,CAAA,GAAA,IAAA;AAGH4B,YAAAA,WAAAA,CAAY7B,GAAG,CAAC,CAAC8C,UAAAA,EAAYC,oBAC5BpC,cAACqC,CAAAA,mCAAAA,EAAAA;;oBAGCF,UAAY,EAAA;AAAE,wBAAA,GAAGA,UAAU;wBAAExC,MAAQ,EAAA;AAAQ;AAFxC,iBAAA,EAAA,CAAA,EAAGwC,UAAWvE,CAAAA,IAAI,KAAK,MAAA,GAASuE,UAAWG,CAAAA,QAAQ,GAAGH,UAAAA,CAAWvE,IAAI,CAAC,CAAC,EAAEwE,GAAK,CAAA,CAAA,CAAA;;;AAO7F,CAAA;AAEA,MAAMG,mBAAmB,CAAC,EACxB3B,OAAO,EACP4B,SAAS,EAIV,GAAA;IACC,MAAM,EAAEC,aAAa,EAAE,GAAGC,uBAAAA,EAAAA;IAC1B,MAAM,EAAEC,iBAAiB,EAAE,GAAGC,8BAAAA,EAAAA;AAE9B,IAAA,qBACExB,eAACU,CAAAA,gBAAAA,EAAAA;QAAIJ,KAAO,EAAA;YAAEC,SAAW,EAAA;AAAa,SAAA;QAAGE,QAAS,EAAA,KAAA;;AAC/CjB,YAAAA,OAAAA,CAAQE,KAAK,CAACzB,GAAG,CAAC,CAAC2B,OAAAA,EAAS1B,sBAC3BU,cAACD,CAAAA,cAAAA,EAAAA;oBAA2BpC,IAAMqD,EAAAA;AAAb1B,iBAAAA,EAAAA,KAAAA,CAAAA,CAAAA;AAEtBkD,YAAAA,SAAAA,iBACCpB,eAACG,CAAAA,iBAAAA,EAAAA;gBAAKK,GAAK,EAAA,CAAA;;kCACT5B,cAAC6C,CAAAA,uBAAAA,EAAAA;wBACCC,KAAM,EAAA,QAAA;wBACNC,IAAK,EAAA,IAAA;wBACLC,OAAQ,EAAA,OAAA;wBACRC,OAAS,EAAA,IAAMR,aAAc7B,CAAAA,OAAAA,CAAQrB,EAAE,CAAA;AAEvC,wBAAA,QAAA,gBAAAS,cAACkD,CAAAA,aAAAA,EAAAA,EAAAA;;kCAEHlD,cAAC6C,CAAAA,uBAAAA,EAAAA;wBACCC,KAAM,EAAA,UAAA;wBACNC,IAAK,EAAA,IAAA;wBACLC,OAAQ,EAAA,OAAA;;wBAERC,OAAS,EAAA,IAAMN,iBAAkB/B,CAAAA,OAAAA,CAAQrB,EAAE,CAAA;AAE3C,wBAAA,QAAA,gBAAAS,cAACmD,CAAAA,eAAAA,EAAAA,EAAAA;;;AAGH,aAAA,CAAA,GAAA;;;AAGV,CAAA;MAEaC,WAAc,GAAA,CAAC,EAC1BxC,OAAO,EACP4B,SAAS,EAIV,GAAA;AACC;;;;;AAKC,MACD,IAAI5B,OAAAA,CAAQyC,IAAI,KAAK,MAAQ,EAAA;AAC3B,QAAA,qBAAOrD,cAACW,CAAAA,WAAAA,EAAAA;YAAYC,OAASA,EAAAA;;AAC/B;AACA,IAAA,qBAAOZ,cAACuC,CAAAA,gBAAAA,EAAAA;QAAiB3B,OAASA,EAAAA;;AACpC;;;;"}
1
+ {"version":3,"file":"Message.js","sources":["../../../../../../admin/src/components/AIChat/components/Messages/Message.tsx"],"sourcesContent":["import { Typography, Box, IconButton, Flex } from '@strapi/design-system';\nimport { ThumbUp, ThumbDown } from '@strapi/icons';\nimport Markdown from 'react-markdown';\nimport { styled } from 'styled-components';\n\nimport { useFeedbackModal } from '../../FeedbackModal';\nimport { useFeedback } from '../../hooks/useFeedback';\nimport {\n AIMessage,\n type UserMessage as UserMessageType,\n AssistantMessage as AssistantMessageType,\n type MarkerContent as MarkerContentType,\n} from '../../lib/types/messages';\nimport { AnimatedBox } from '../AnimatedBox';\nimport { AttachmentPreview } from '../Attachments/AttachmentPreview';\n\nimport { Marker } from './Marker';\n\nconst MarkdownStyles = styled(Typography)`\n max-width: 65ch;\n margin: 0 auto;\n overflow-wrap: anywhere;\n word-break: break-word;\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin-top: 1.25em;\n margin-bottom: 0.5em;\n font-weight: bold;\n }\n\n p {\n margin-bottom: 1em;\n }\n\n ul,\n ol {\n padding-left: 1.5em; /* indentation for bullet points */\n margin-bottom: 1em;\n }\n\n li {\n margin-bottom: 0.5em;\n list-style-type: disc; /* or whatever style you prefer */\n }\n\n strong {\n font-weight: bold;\n }\n\n /* code blocks, blockquotes, etc. */\n code {\n background-color: ${({ theme }) => theme.colors.neutral100};\n padding: 0.2em 0.4em;\n border-radius: ${({ theme }) => theme.borderRadius};\n border-color: ${({ theme }) => theme.colors.neutral150};\n border-style: solid;\n font-family: 'SF Mono', SFMono-Regular, ui-monospace, 'DejaVu Sans Mono', Menlo, Consolas,\n monospace;\n }\n\n /* links */\n a {\n color: ${({ theme }) => theme.colors.primary500};\n background-color: ${({ theme }) => theme.colors.neutral100};\n padding: 0.2em 0.4em;\n border-radius: ${({ theme }) => theme.borderRadius};\n border-color: ${({ theme }) => theme.colors.neutral150};\n border-style: solid;\n text-decoration: none;\n\n &:hover {\n text-decoration: underline;\n }\n }\n`;\n\nconst UserMessageTypography = styled(Typography)`\n overflow-wrap: anywhere;\n word-break: break-word;\n`;\n\n// ---------------------------\n// Tool: schemaGenerationTool helpers\n// ---------------------------\n\ntype SchemaToolSchema = {\n action?: 'create' | 'update' | 'remove';\n uid?: string;\n name?: string;\n category?: string;\n kind?: 'collectionType' | 'singleType' | 'component';\n modelType?: 'component' | 'collectionType' | 'singleType';\n};\n\ntype SchemaToolPart = {\n type: 'tool-schemaGenerationTool';\n input?: { schemas?: SchemaToolSchema[] };\n output?: { schemas?: SchemaToolSchema[]; error?: unknown };\n toolCallId?: string;\n};\n\nconst isSchemaToolPart = (part: any): part is SchemaToolPart =>\n part && typeof part === 'object' && part.type === 'tool-schemaGenerationTool';\n\nconst capitalize = (s?: string) => (s ? s.charAt(0).toUpperCase() + s.slice(1) : '');\n\nconst getSchemaLink = (schema: SchemaToolSchema): string | undefined => {\n const isComponent = (schema.kind ?? schema.modelType) === 'component';\n if (!schema.uid) return undefined;\n return isComponent\n ? `/plugins/content-type-builder/component-categories/${schema.category ?? ''}/${schema.uid}`\n : `/plugins/content-type-builder/content-types/${schema.uid}`;\n};\n\nconst toMarkerFromSchemaTool = (part: SchemaToolPart): MarkerContentType => {\n const outSchemas = part.output?.schemas ?? [];\n const inSchemas = part.input?.schemas ?? [];\n\n const schemas = (outSchemas.length ? outSchemas : inSchemas) as SchemaToolSchema[];\n const numSchemas = schemas.length;\n\n const state: 'loading' | 'success' | 'error' = part.output\n ? part.output.error\n ? 'error'\n : 'success'\n : 'loading';\n\n const steps = schemas.map((schema, index) => ({\n id: `${part.toolCallId ?? 'schemaGenerationTool'}-${schema.uid ?? schema.name ?? index}`,\n description: capitalize(schema.name ?? schema.uid ?? 'Schema'),\n status:\n schema.action === 'create' || schema.action === 'update' || schema.action === 'remove'\n ? schema.action\n : ('update' as const),\n link: getSchemaLink(schema),\n }));\n\n const title =\n state === 'success'\n ? `Updated ${numSchemas} schema${numSchemas === 1 ? '' : 's'}`\n : state === 'error'\n ? `Failed to update schema${numSchemas === 1 ? '' : 's'}`\n : 'Updating schemas';\n\n return {\n type: 'marker',\n title,\n state,\n steps,\n };\n};\n\nconst MessageContent = ({\n part,\n}: {\n part: AIMessage['parts'][number];\n status?: 'loading' | 'success' | 'error';\n}) => {\n if (part.type === 'text') {\n return (\n <MarkdownStyles>\n <Markdown\n components={{\n a: ({ node, ...props }) => <a target=\"_blank\" rel=\"noopener noreferrer\" {...props} />,\n }}\n >\n {part.text}\n </Markdown>\n </MarkdownStyles>\n );\n }\n\n if (isSchemaToolPart(part)) {\n const marker = toMarkerFromSchemaTool(part);\n return <Marker {...marker} />;\n }\n\n return null;\n};\n\nconst UserMessage = ({ message }: { message: UserMessageType }) => {\n const hasText = message.parts.some(\n (content) => content.type === 'text' && content.text.trim() !== ''\n );\n const attachments = message.parts.filter((content) => content.type === 'file');\n\n return (\n <AnimatedBox\n as={Flex}\n direction=\"column\"\n alignItems=\"flex-end\"\n style={{ alignSelf: 'flex-end' }}\n gap={2}\n maxWidth=\"80%\"\n >\n {hasText ? (\n <Box background=\"neutral150\" borderStyle=\"none\" padding={['10px', '16px']} hasRadius>\n {message.parts.map((content, index) => {\n if (content.type !== 'text') return null;\n return <UserMessageTypography key={index}>{content.text}</UserMessageTypography>;\n })}\n </Box>\n ) : null}\n\n {/* Attachments */}\n {attachments.map((attachment, idx) => (\n <AttachmentPreview\n key={`${attachment.type === 'file' ? attachment.filename : attachment.type}-${idx}`}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n attachment={{ ...attachment, status: 'ready' } as any}\n />\n ))}\n </AnimatedBox>\n );\n};\n\nconst AssistantMessage = ({\n message,\n isLoading,\n}: {\n message: AssistantMessageType;\n isLoading?: boolean;\n}) => {\n const { upvoteMessage } = useFeedback();\n const { openFeedbackModal } = useFeedbackModal();\n\n return (\n <Box style={{ alignSelf: 'flex-start' }} maxWidth=\"90%\">\n {message.parts.map((content, index) => (\n <MessageContent key={index} part={content} />\n ))}\n {isLoading ? (\n <Flex gap={1}>\n <IconButton\n label=\"Upvote\"\n size=\"XS\"\n variant=\"ghost\"\n onClick={() => upvoteMessage(message.id)}\n >\n <ThumbUp />\n </IconButton>\n <IconButton\n label=\"Downvote\"\n size=\"XS\"\n variant=\"ghost\"\n // For downvoting, user must provide specific feedback\n onClick={() => openFeedbackModal(message.id)}\n >\n <ThumbDown />\n </IconButton>\n </Flex>\n ) : null}\n </Box>\n );\n};\n\nexport const ChatMessage = ({\n message,\n isLoading,\n}: {\n message: AIMessage;\n isLoading?: boolean;\n}) => {\n /**\n * IMPORTANT: Messages are rendered using react-markdown (heavy compute)\n * Component re-renders on each message update, but AI SDK v5 provides\n * throttling (experimental_throttle: 100ms) which batches updates and reduces\n * re-render frequency during streaming.\n */\n if (message.role === 'user') {\n return <UserMessage message={message as UserMessageType} />;\n }\n return <AssistantMessage message={message as AssistantMessageType} />;\n};\n"],"names":["MarkdownStyles","styled","Typography","theme","colors","neutral100","borderRadius","neutral150","primary500","UserMessageTypography","isSchemaToolPart","part","type","capitalize","s","charAt","toUpperCase","slice","getSchemaLink","schema","isComponent","kind","modelType","uid","undefined","category","toMarkerFromSchemaTool","outSchemas","output","schemas","inSchemas","input","length","numSchemas","state","error","steps","map","index","id","toolCallId","name","description","status","action","link","title","MessageContent","_jsx","Markdown","components","a","node","props","target","rel","text","marker","Marker","UserMessage","message","hasText","parts","some","content","trim","attachments","filter","_jsxs","AnimatedBox","as","Flex","direction","alignItems","style","alignSelf","gap","maxWidth","Box","background","borderStyle","padding","hasRadius","attachment","idx","AttachmentPreview","filename","AssistantMessage","isLoading","upvoteMessage","useFeedback","openFeedbackModal","useFeedbackModal","IconButton","label","size","variant","onClick","ThumbUp","ThumbDown","ChatMessage","role"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { Typography, Flex, Box, IconButton } from '@strapi/design-system';
2
+ import { Flex, Box, IconButton, Typography } from '@strapi/design-system';
3
3
  import { ThumbUp, ThumbDown } from '@strapi/icons';
4
4
  import Markdown from 'react-markdown';
5
5
  import { styled } from 'styled-components';
@@ -1 +1 @@
1
- {"version":3,"file":"Message.mjs","sources":["../../../../../../admin/src/components/AIChat/components/Messages/Message.tsx"],"sourcesContent":["import { Typography, Box, IconButton, Flex } from '@strapi/design-system';\nimport { ThumbUp, ThumbDown } from '@strapi/icons';\nimport Markdown from 'react-markdown';\nimport { styled } from 'styled-components';\n\nimport { useFeedbackModal } from '../../FeedbackModal';\nimport { useFeedback } from '../../hooks/useFeedback';\nimport {\n AIMessage,\n type UserMessage as UserMessageType,\n AssistantMessage as AssistantMessageType,\n type MarkerContent as MarkerContentType,\n} from '../../lib/types/messages';\nimport { AnimatedBox } from '../AnimatedBox';\nimport { AttachmentPreview } from '../Attachments/AttachmentPreview';\n\nimport { Marker } from './Marker';\n\nconst MarkdownStyles = styled(Typography)`\n max-width: 65ch;\n margin: 0 auto;\n overflow-wrap: anywhere;\n word-break: break-word;\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin-top: 1.25em;\n margin-bottom: 0.5em;\n font-weight: bold;\n }\n\n p {\n margin-bottom: 1em;\n }\n\n ul,\n ol {\n padding-left: 1.5em; /* indentation for bullet points */\n margin-bottom: 1em;\n }\n\n li {\n margin-bottom: 0.5em;\n list-style-type: disc; /* or whatever style you prefer */\n }\n\n strong {\n font-weight: bold;\n }\n\n /* code blocks, blockquotes, etc. */\n code {\n background-color: ${({ theme }) => theme.colors.neutral100};\n padding: 0.2em 0.4em;\n border-radius: ${({ theme }) => theme.borderRadius};\n border-color: ${({ theme }) => theme.colors.neutral150};\n border-style: solid;\n font-family: 'SF Mono', SFMono-Regular, ui-monospace, 'DejaVu Sans Mono', Menlo, Consolas,\n monospace;\n }\n\n /* links */\n a {\n color: ${({ theme }) => theme.colors.primary500};\n background-color: ${({ theme }) => theme.colors.neutral100};\n padding: 0.2em 0.4em;\n border-radius: ${({ theme }) => theme.borderRadius};\n border-color: ${({ theme }) => theme.colors.neutral150};\n border-style: solid;\n text-decoration: none;\n\n &:hover {\n text-decoration: underline;\n }\n }\n`;\n\nconst UserMessageTypography = styled(Typography)`\n overflow-wrap: anywhere;\n word-break: break-word;\n`;\n\n// ---------------------------\n// Tool: schemaGenerationTool helpers\n// ---------------------------\n\ntype SchemaToolSchema = {\n action?: 'create' | 'update' | 'remove';\n uid?: string;\n name?: string;\n category?: string;\n kind?: 'collectionType' | 'singleType' | 'component';\n modelType?: 'component' | 'collectionType' | 'singleType';\n};\n\ntype SchemaToolPart = {\n type: 'tool-schemaGenerationTool';\n input?: { schemas?: SchemaToolSchema[] };\n output?: { schemas?: SchemaToolSchema[]; error?: unknown };\n toolCallId?: string;\n};\n\nconst isSchemaToolPart = (part: any): part is SchemaToolPart =>\n part && typeof part === 'object' && part.type === 'tool-schemaGenerationTool';\n\nconst capitalize = (s?: string) => (s ? s.charAt(0).toUpperCase() + s.slice(1) : '');\n\nconst getSchemaLink = (schema: SchemaToolSchema): string | undefined => {\n const isComponent = (schema.kind ?? schema.modelType) === 'component';\n if (!schema.uid) return undefined;\n return isComponent\n ? `/plugins/content-type-builder/component-categories/${schema.category ?? ''}/${schema.uid}`\n : `/plugins/content-type-builder/content-types/${schema.uid}`;\n};\n\nconst toMarkerFromSchemaTool = (part: SchemaToolPart): MarkerContentType => {\n const outSchemas = part.output?.schemas ?? [];\n const inSchemas = part.input?.schemas ?? [];\n\n const schemas = (outSchemas.length ? outSchemas : inSchemas) as SchemaToolSchema[];\n const numSchemas = schemas.length;\n\n const state: 'loading' | 'success' | 'error' = part.output\n ? part.output.error\n ? 'error'\n : 'success'\n : 'loading';\n\n const steps = schemas.map((schema, index) => ({\n id: `${part.toolCallId ?? 'schemaGenerationTool'}-${schema.uid ?? schema.name ?? index}`,\n description: capitalize(schema.name ?? schema.uid ?? 'Schema'),\n status:\n schema.action === 'create' || schema.action === 'update' || schema.action === 'remove'\n ? schema.action\n : ('update' as const),\n link: getSchemaLink(schema),\n }));\n\n const title =\n state === 'success'\n ? `Updated ${numSchemas} schema${numSchemas === 1 ? '' : 's'}`\n : state === 'error'\n ? `Failed to update schema${numSchemas === 1 ? '' : 's'}`\n : 'Updating schemas';\n\n return {\n type: 'marker',\n title,\n state,\n steps,\n };\n};\n\nconst MessageContent = ({\n part,\n}: {\n part: AIMessage['parts'][number];\n status?: 'loading' | 'success' | 'error';\n}) => {\n if (part.type === 'text') {\n return (\n <MarkdownStyles>\n <Markdown\n components={{\n a: ({ node, ...props }) => <a target=\"_blank\" rel=\"noopener noreferrer\" {...props} />,\n }}\n >\n {part.text}\n </Markdown>\n </MarkdownStyles>\n );\n }\n\n if (isSchemaToolPart(part)) {\n const marker = toMarkerFromSchemaTool(part);\n return <Marker {...marker} />;\n }\n\n return null;\n};\n\nconst UserMessage = ({ message }: { message: UserMessageType }) => {\n const hasText = message.parts.some(\n (content) => content.type === 'text' && content.text.trim() !== ''\n );\n const attachments = message.parts.filter((content) => content.type === 'file');\n\n return (\n <AnimatedBox\n as={Flex}\n direction=\"column\"\n alignItems=\"flex-end\"\n style={{ alignSelf: 'flex-end' }}\n gap={2}\n maxWidth=\"80%\"\n >\n {hasText ? (\n <Box background=\"neutral150\" borderStyle=\"none\" padding={['10px', '16px']} hasRadius>\n {message.parts.map((content, index) => {\n if (content.type !== 'text') return null;\n return <UserMessageTypography key={index}>{content.text}</UserMessageTypography>;\n })}\n </Box>\n ) : null}\n\n {/* Attachments */}\n {attachments.map((attachment, idx) => (\n <AttachmentPreview\n key={`${attachment.type === 'file' ? attachment.filename : attachment.type}-${idx}`}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n attachment={{ ...attachment, status: 'ready' } as any}\n />\n ))}\n </AnimatedBox>\n );\n};\n\nconst AssistantMessage = ({\n message,\n isLoading,\n}: {\n message: AssistantMessageType;\n isLoading?: boolean;\n}) => {\n const { upvoteMessage } = useFeedback();\n const { openFeedbackModal } = useFeedbackModal();\n\n return (\n <Box style={{ alignSelf: 'flex-start' }} maxWidth=\"90%\">\n {message.parts.map((content, index) => (\n <MessageContent key={index} part={content} />\n ))}\n {isLoading ? (\n <Flex gap={1}>\n <IconButton\n label=\"Upvote\"\n size=\"XS\"\n variant=\"ghost\"\n onClick={() => upvoteMessage(message.id)}\n >\n <ThumbUp />\n </IconButton>\n <IconButton\n label=\"Downvote\"\n size=\"XS\"\n variant=\"ghost\"\n // For downvoting, user must provide specific feedback\n onClick={() => openFeedbackModal(message.id)}\n >\n <ThumbDown />\n </IconButton>\n </Flex>\n ) : null}\n </Box>\n );\n};\n\nexport const ChatMessage = ({\n message,\n isLoading,\n}: {\n message: AIMessage;\n isLoading?: boolean;\n}) => {\n /**\n * IMPORTANT: Messages are rendered using react-markdown (heavy compute)\n * Component re-renders on each message update, but AI SDK v5 provides\n * throttling (experimental_throttle: 100ms) which batches updates and reduces\n * re-render frequency during streaming.\n */\n if (message.role === 'user') {\n return <UserMessage message={message as UserMessageType} />;\n }\n return <AssistantMessage message={message as AssistantMessageType} />;\n};\n"],"names":["MarkdownStyles","styled","Typography","theme","colors","neutral100","borderRadius","neutral150","primary500","UserMessageTypography","isSchemaToolPart","part","type","capitalize","s","charAt","toUpperCase","slice","getSchemaLink","schema","isComponent","kind","modelType","uid","undefined","category","toMarkerFromSchemaTool","outSchemas","output","schemas","inSchemas","input","length","numSchemas","state","error","steps","map","index","id","toolCallId","name","description","status","action","link","title","MessageContent","_jsx","Markdown","components","a","node","props","target","rel","text","marker","Marker","UserMessage","message","hasText","parts","some","content","trim","attachments","filter","_jsxs","AnimatedBox","as","Flex","direction","alignItems","style","alignSelf","gap","maxWidth","Box","background","borderStyle","padding","hasRadius","attachment","idx","AttachmentPreview","filename","AssistantMessage","isLoading","upvoteMessage","useFeedback","openFeedbackModal","useFeedbackModal","IconButton","label","size","variant","onClick","ThumbUp","ThumbDown","ChatMessage","role"],"mappings":"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"}
1
+ {"version":3,"file":"Message.mjs","sources":["../../../../../../admin/src/components/AIChat/components/Messages/Message.tsx"],"sourcesContent":["import { Typography, Box, IconButton, Flex } from '@strapi/design-system';\nimport { ThumbUp, ThumbDown } from '@strapi/icons';\nimport Markdown from 'react-markdown';\nimport { styled } from 'styled-components';\n\nimport { useFeedbackModal } from '../../FeedbackModal';\nimport { useFeedback } from '../../hooks/useFeedback';\nimport {\n AIMessage,\n type UserMessage as UserMessageType,\n AssistantMessage as AssistantMessageType,\n type MarkerContent as MarkerContentType,\n} from '../../lib/types/messages';\nimport { AnimatedBox } from '../AnimatedBox';\nimport { AttachmentPreview } from '../Attachments/AttachmentPreview';\n\nimport { Marker } from './Marker';\n\nconst MarkdownStyles = styled(Typography)`\n max-width: 65ch;\n margin: 0 auto;\n overflow-wrap: anywhere;\n word-break: break-word;\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin-top: 1.25em;\n margin-bottom: 0.5em;\n font-weight: bold;\n }\n\n p {\n margin-bottom: 1em;\n }\n\n ul,\n ol {\n padding-left: 1.5em; /* indentation for bullet points */\n margin-bottom: 1em;\n }\n\n li {\n margin-bottom: 0.5em;\n list-style-type: disc; /* or whatever style you prefer */\n }\n\n strong {\n font-weight: bold;\n }\n\n /* code blocks, blockquotes, etc. */\n code {\n background-color: ${({ theme }) => theme.colors.neutral100};\n padding: 0.2em 0.4em;\n border-radius: ${({ theme }) => theme.borderRadius};\n border-color: ${({ theme }) => theme.colors.neutral150};\n border-style: solid;\n font-family: 'SF Mono', SFMono-Regular, ui-monospace, 'DejaVu Sans Mono', Menlo, Consolas,\n monospace;\n }\n\n /* links */\n a {\n color: ${({ theme }) => theme.colors.primary500};\n background-color: ${({ theme }) => theme.colors.neutral100};\n padding: 0.2em 0.4em;\n border-radius: ${({ theme }) => theme.borderRadius};\n border-color: ${({ theme }) => theme.colors.neutral150};\n border-style: solid;\n text-decoration: none;\n\n &:hover {\n text-decoration: underline;\n }\n }\n`;\n\nconst UserMessageTypography = styled(Typography)`\n overflow-wrap: anywhere;\n word-break: break-word;\n`;\n\n// ---------------------------\n// Tool: schemaGenerationTool helpers\n// ---------------------------\n\ntype SchemaToolSchema = {\n action?: 'create' | 'update' | 'remove';\n uid?: string;\n name?: string;\n category?: string;\n kind?: 'collectionType' | 'singleType' | 'component';\n modelType?: 'component' | 'collectionType' | 'singleType';\n};\n\ntype SchemaToolPart = {\n type: 'tool-schemaGenerationTool';\n input?: { schemas?: SchemaToolSchema[] };\n output?: { schemas?: SchemaToolSchema[]; error?: unknown };\n toolCallId?: string;\n};\n\nconst isSchemaToolPart = (part: any): part is SchemaToolPart =>\n part && typeof part === 'object' && part.type === 'tool-schemaGenerationTool';\n\nconst capitalize = (s?: string) => (s ? s.charAt(0).toUpperCase() + s.slice(1) : '');\n\nconst getSchemaLink = (schema: SchemaToolSchema): string | undefined => {\n const isComponent = (schema.kind ?? schema.modelType) === 'component';\n if (!schema.uid) return undefined;\n return isComponent\n ? `/plugins/content-type-builder/component-categories/${schema.category ?? ''}/${schema.uid}`\n : `/plugins/content-type-builder/content-types/${schema.uid}`;\n};\n\nconst toMarkerFromSchemaTool = (part: SchemaToolPart): MarkerContentType => {\n const outSchemas = part.output?.schemas ?? [];\n const inSchemas = part.input?.schemas ?? [];\n\n const schemas = (outSchemas.length ? outSchemas : inSchemas) as SchemaToolSchema[];\n const numSchemas = schemas.length;\n\n const state: 'loading' | 'success' | 'error' = part.output\n ? part.output.error\n ? 'error'\n : 'success'\n : 'loading';\n\n const steps = schemas.map((schema, index) => ({\n id: `${part.toolCallId ?? 'schemaGenerationTool'}-${schema.uid ?? schema.name ?? index}`,\n description: capitalize(schema.name ?? schema.uid ?? 'Schema'),\n status:\n schema.action === 'create' || schema.action === 'update' || schema.action === 'remove'\n ? schema.action\n : ('update' as const),\n link: getSchemaLink(schema),\n }));\n\n const title =\n state === 'success'\n ? `Updated ${numSchemas} schema${numSchemas === 1 ? '' : 's'}`\n : state === 'error'\n ? `Failed to update schema${numSchemas === 1 ? '' : 's'}`\n : 'Updating schemas';\n\n return {\n type: 'marker',\n title,\n state,\n steps,\n };\n};\n\nconst MessageContent = ({\n part,\n}: {\n part: AIMessage['parts'][number];\n status?: 'loading' | 'success' | 'error';\n}) => {\n if (part.type === 'text') {\n return (\n <MarkdownStyles>\n <Markdown\n components={{\n a: ({ node, ...props }) => <a target=\"_blank\" rel=\"noopener noreferrer\" {...props} />,\n }}\n >\n {part.text}\n </Markdown>\n </MarkdownStyles>\n );\n }\n\n if (isSchemaToolPart(part)) {\n const marker = toMarkerFromSchemaTool(part);\n return <Marker {...marker} />;\n }\n\n return null;\n};\n\nconst UserMessage = ({ message }: { message: UserMessageType }) => {\n const hasText = message.parts.some(\n (content) => content.type === 'text' && content.text.trim() !== ''\n );\n const attachments = message.parts.filter((content) => content.type === 'file');\n\n return (\n <AnimatedBox\n as={Flex}\n direction=\"column\"\n alignItems=\"flex-end\"\n style={{ alignSelf: 'flex-end' }}\n gap={2}\n maxWidth=\"80%\"\n >\n {hasText ? (\n <Box background=\"neutral150\" borderStyle=\"none\" padding={['10px', '16px']} hasRadius>\n {message.parts.map((content, index) => {\n if (content.type !== 'text') return null;\n return <UserMessageTypography key={index}>{content.text}</UserMessageTypography>;\n })}\n </Box>\n ) : null}\n\n {/* Attachments */}\n {attachments.map((attachment, idx) => (\n <AttachmentPreview\n key={`${attachment.type === 'file' ? attachment.filename : attachment.type}-${idx}`}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n attachment={{ ...attachment, status: 'ready' } as any}\n />\n ))}\n </AnimatedBox>\n );\n};\n\nconst AssistantMessage = ({\n message,\n isLoading,\n}: {\n message: AssistantMessageType;\n isLoading?: boolean;\n}) => {\n const { upvoteMessage } = useFeedback();\n const { openFeedbackModal } = useFeedbackModal();\n\n return (\n <Box style={{ alignSelf: 'flex-start' }} maxWidth=\"90%\">\n {message.parts.map((content, index) => (\n <MessageContent key={index} part={content} />\n ))}\n {isLoading ? (\n <Flex gap={1}>\n <IconButton\n label=\"Upvote\"\n size=\"XS\"\n variant=\"ghost\"\n onClick={() => upvoteMessage(message.id)}\n >\n <ThumbUp />\n </IconButton>\n <IconButton\n label=\"Downvote\"\n size=\"XS\"\n variant=\"ghost\"\n // For downvoting, user must provide specific feedback\n onClick={() => openFeedbackModal(message.id)}\n >\n <ThumbDown />\n </IconButton>\n </Flex>\n ) : null}\n </Box>\n );\n};\n\nexport const ChatMessage = ({\n message,\n isLoading,\n}: {\n message: AIMessage;\n isLoading?: boolean;\n}) => {\n /**\n * IMPORTANT: Messages are rendered using react-markdown (heavy compute)\n * Component re-renders on each message update, but AI SDK v5 provides\n * throttling (experimental_throttle: 100ms) which batches updates and reduces\n * re-render frequency during streaming.\n */\n if (message.role === 'user') {\n return <UserMessage message={message as UserMessageType} />;\n }\n return <AssistantMessage message={message as AssistantMessageType} />;\n};\n"],"names":["MarkdownStyles","styled","Typography","theme","colors","neutral100","borderRadius","neutral150","primary500","UserMessageTypography","isSchemaToolPart","part","type","capitalize","s","charAt","toUpperCase","slice","getSchemaLink","schema","isComponent","kind","modelType","uid","undefined","category","toMarkerFromSchemaTool","outSchemas","output","schemas","inSchemas","input","length","numSchemas","state","error","steps","map","index","id","toolCallId","name","description","status","action","link","title","MessageContent","_jsx","Markdown","components","a","node","props","target","rel","text","marker","Marker","UserMessage","message","hasText","parts","some","content","trim","attachments","filter","_jsxs","AnimatedBox","as","Flex","direction","alignItems","style","alignSelf","gap","maxWidth","Box","background","borderStyle","padding","hasRadius","attachment","idx","AttachmentPreview","filename","AssistantMessage","isLoading","upvoteMessage","useFeedback","openFeedbackModal","useFeedbackModal","IconButton","label","size","variant","onClick","ThumbUp","ThumbDown","ChatMessage","role"],"mappings":";;;;;;;;;;;AAkBA,MAAMA,cAAAA,GAAiBC,MAAAA,CAAOC,UAAAA,CAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAsCnB,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACC,UAAU,CAAC;;AAE5C,mBAAA,EAAE,CAAC,EAAEF,KAAK,EAAE,GAAKA,KAAAA,CAAMG,YAAY,CAAC;kBACrC,EAAE,CAAC,EAAEH,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACG,UAAU,CAAC;;;;;;;;WAQhD,EAAE,CAAC,EAAEJ,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACI,UAAU,CAAC;sBAC9B,EAAE,CAAC,EAAEL,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACC,UAAU,CAAC;;AAE5C,mBAAA,EAAE,CAAC,EAAEF,KAAK,EAAE,GAAKA,KAAAA,CAAMG,YAAY,CAAC;kBACrC,EAAE,CAAC,EAAEH,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACG,UAAU,CAAC;;;;;;;;AAQ3D,CAAC;AAED,MAAME,qBAAAA,GAAwBR,MAAAA,CAAOC,UAAAA,CAAW;;;AAGhD,CAAC;AAsBD,MAAMQ,gBAAAA,GAAmB,CAACC,IAAAA,GACxBA,IAAAA,IAAQ,OAAOA,IAAAA,KAAS,QAAA,IAAYA,IAAAA,CAAKC,IAAI,KAAK,2BAAA;AAEpD,MAAMC,UAAAA,GAAa,CAACC,CAAAA,GAAgBA,CAAAA,GAAIA,CAAAA,CAAEC,MAAM,CAAC,CAAA,CAAA,CAAGC,WAAW,EAAA,GAAKF,CAAAA,CAAEG,KAAK,CAAC,CAAA,CAAA,GAAK,EAAA;AAEjF,MAAMC,gBAAgB,CAACC,MAAAA,GAAAA;IACrB,MAAMC,WAAAA,GAAc,CAACD,MAAAA,CAAOE,IAAI,IAAIF,MAAAA,CAAOG,SAAQ,MAAO,WAAA;AAC1D,IAAA,IAAI,CAACH,MAAAA,CAAOI,GAAG,EAAE,OAAOC,SAAAA;AACxB,IAAA,OAAOJ,cACH,CAAC,mDAAmD,EAAED,MAAAA,CAAOM,QAAQ,IAAI,EAAA,CAAG,CAAC,EAAEN,MAAAA,CAAOI,GAAG,EAAE,GAC3F,CAAC,4CAA4C,EAAEJ,MAAAA,CAAOI,GAAG,CAAA,CAAE;AACjE,CAAA;AAEA,MAAMG,yBAAyB,CAACf,IAAAA,GAAAA;AAC9B,IAAA,MAAMgB,UAAAA,GAAahB,IAAAA,CAAKiB,MAAM,EAAEC,WAAW,EAAE;AAC7C,IAAA,MAAMC,SAAAA,GAAYnB,IAAAA,CAAKoB,KAAK,EAAEF,WAAW,EAAE;AAE3C,IAAA,MAAMA,OAAAA,GAAWF,UAAAA,CAAWK,MAAM,GAAGL,UAAAA,GAAaG,SAAAA;IAClD,MAAMG,UAAAA,GAAaJ,QAAQG,MAAM;IAEjC,MAAME,KAAAA,GAAyCvB,IAAAA,CAAKiB,MAAM,GACtDjB,IAAAA,CAAKiB,MAAM,CAACO,KAAK,GACf,OAAA,GACA,SAAA,GACF,SAAA;AAEJ,IAAA,MAAMC,QAAQP,OAAAA,CAAQQ,GAAG,CAAC,CAAClB,MAAAA,EAAQmB,SAAW;AAC5CC,YAAAA,EAAAA,EAAI,CAAA,EAAG5B,IAAAA,CAAK6B,UAAU,IAAI,sBAAA,CAAuB,CAAC,EAAErB,MAAAA,CAAOI,GAAG,IAAIJ,MAAAA,CAAOsB,IAAI,IAAIH,KAAAA,CAAAA,CAAO;AACxFI,YAAAA,WAAAA,EAAa7B,WAAWM,MAAAA,CAAOsB,IAAI,IAAItB,MAAAA,CAAOI,GAAG,IAAI,QAAA,CAAA;AACrDoB,YAAAA,MAAAA,EACExB,MAAAA,CAAOyB,MAAM,KAAK,QAAA,IAAYzB,OAAOyB,MAAM,KAAK,QAAA,IAAYzB,MAAAA,CAAOyB,MAAM,KAAK,QAAA,GAC1EzB,MAAAA,CAAOyB,MAAM,GACZ,QAAA;AACPC,YAAAA,IAAAA,EAAM3B,aAAAA,CAAcC,MAAAA;SACtB,CAAA,CAAA;IAEA,MAAM2B,KAAAA,GACJZ,UAAU,SAAA,GACN,CAAC,QAAQ,EAAED,UAAAA,CAAW,OAAO,EAAEA,UAAAA,KAAe,CAAA,GAAI,KAAK,GAAA,CAAA,CAAK,GAC5DC,KAAAA,KAAU,OAAA,GACR,CAAC,uBAAuB,EAAED,UAAAA,KAAe,CAAA,GAAI,EAAA,GAAK,GAAA,CAAA,CAAK,GACvD,kBAAA;IAER,OAAO;QACLrB,IAAAA,EAAM,QAAA;AACNkC,QAAAA,KAAAA;AACAZ,QAAAA,KAAAA;AACAE,QAAAA;AACF,KAAA;AACF,CAAA;AAEA,MAAMW,cAAAA,GAAiB,CAAC,EACtBpC,IAAI,EAIL,GAAA;IACC,IAAIA,IAAAA,CAAKC,IAAI,KAAK,MAAA,EAAQ;AACxB,QAAA,qBACEoC,GAAA,CAAChD,cAAAA,EAAAA;AACC,YAAA,QAAA,gBAAAgD,GAAA,CAACC,QAAAA,EAAAA;gBACCC,UAAAA,EAAY;AACVC,oBAAAA,CAAAA,EAAG,CAAC,EAAEC,IAAI,EAAE,GAAGC,KAAAA,EAAO,iBAAKL,GAAA,CAACG,GAAAA,EAAAA;4BAAEG,MAAAA,EAAO,QAAA;4BAASC,GAAAA,EAAI,qBAAA;AAAuB,4BAAA,GAAGF;;AAC9E,iBAAA;AAEC1C,gBAAAA,QAAAA,EAAAA,IAAAA,CAAK6C;;;AAId,IAAA;AAEA,IAAA,IAAI9C,iBAAiBC,IAAAA,CAAAA,EAAO;AAC1B,QAAA,MAAM8C,SAAS/B,sBAAAA,CAAuBf,IAAAA,CAAAA;AACtC,QAAA,qBAAOqC,GAAA,CAACU,MAAAA,EAAAA;AAAQ,YAAA,GAAGD;;AACrB,IAAA;IAEA,OAAO,IAAA;AACT,CAAA;AAEA,MAAME,WAAAA,GAAc,CAAC,EAAEC,OAAO,EAAgC,GAAA;AAC5D,IAAA,MAAMC,UAAUD,OAAAA,CAAQE,KAAK,CAACC,IAAI,CAChC,CAACC,OAAAA,GAAYA,OAAAA,CAAQpD,IAAI,KAAK,MAAA,IAAUoD,OAAAA,CAAQR,IAAI,CAACS,IAAI,EAAA,KAAO,EAAA,CAAA;IAElE,MAAMC,WAAAA,GAAcN,OAAAA,CAAQE,KAAK,CAACK,MAAM,CAAC,CAACH,OAAAA,GAAYA,OAAAA,CAAQpD,IAAI,KAAK,MAAA,CAAA;AAEvE,IAAA,qBACEwD,IAAA,CAACC,WAAAA,EAAAA;QACCC,EAAAA,EAAIC,IAAAA;QACJC,SAAAA,EAAU,QAAA;QACVC,UAAAA,EAAW,UAAA;QACXC,KAAAA,EAAO;YAAEC,SAAAA,EAAW;AAAW,SAAA;QAC/BC,GAAAA,EAAK,CAAA;QACLC,QAAAA,EAAS,KAAA;;AAERhB,YAAAA,OAAAA,iBACCb,GAAA,CAAC8B,GAAAA,EAAAA;gBAAIC,UAAAA,EAAW,YAAA;gBAAaC,WAAAA,EAAY,MAAA;gBAAOC,OAAAA,EAAS;AAAC,oBAAA,MAAA;AAAQ,oBAAA;AAAO,iBAAA;gBAAEC,SAAS,EAAA,IAAA;AACjFtB,gBAAAA,QAAAA,EAAAA,OAAAA,CAAQE,KAAK,CAACzB,GAAG,CAAC,CAAC2B,OAAAA,EAAS1B,KAAAA,GAAAA;AAC3B,oBAAA,IAAI0B,OAAAA,CAAQpD,IAAI,KAAK,MAAA,EAAQ,OAAO,IAAA;AACpC,oBAAA,qBAAOoC,GAAA,CAACvC,qBAAAA,EAAAA;AAAmCuD,wBAAAA,QAAAA,EAAAA,OAAAA,CAAQR;AAAhBlB,qBAAAA,EAAAA,KAAAA,CAAAA;AACrC,gBAAA,CAAA;AAEA,aAAA,CAAA,GAAA,IAAA;AAGH4B,YAAAA,WAAAA,CAAY7B,GAAG,CAAC,CAAC8C,UAAAA,EAAYC,oBAC5BpC,GAAA,CAACqC,iBAAAA,EAAAA;;oBAGCF,UAAAA,EAAY;AAAE,wBAAA,GAAGA,UAAU;wBAAExC,MAAAA,EAAQ;AAAQ;AAFxC,iBAAA,EAAA,CAAA,EAAGwC,UAAAA,CAAWvE,IAAI,KAAK,MAAA,GAASuE,UAAAA,CAAWG,QAAQ,GAAGH,UAAAA,CAAWvE,IAAI,CAAC,CAAC,EAAEwE,GAAAA,CAAAA,CAAK,CAAA;;;AAO7F,CAAA;AAEA,MAAMG,mBAAmB,CAAC,EACxB3B,OAAO,EACP4B,SAAS,EAIV,GAAA;IACC,MAAM,EAAEC,aAAa,EAAE,GAAGC,WAAAA,EAAAA;IAC1B,MAAM,EAAEC,iBAAiB,EAAE,GAAGC,gBAAAA,EAAAA;AAE9B,IAAA,qBACExB,IAAA,CAACU,GAAAA,EAAAA;QAAIJ,KAAAA,EAAO;YAAEC,SAAAA,EAAW;AAAa,SAAA;QAAGE,QAAAA,EAAS,KAAA;;AAC/CjB,YAAAA,OAAAA,CAAQE,KAAK,CAACzB,GAAG,CAAC,CAAC2B,OAAAA,EAAS1B,sBAC3BU,GAAA,CAACD,cAAAA,EAAAA;oBAA2BpC,IAAAA,EAAMqD;AAAb1B,iBAAAA,EAAAA,KAAAA,CAAAA,CAAAA;AAEtBkD,YAAAA,SAAAA,iBACCpB,IAAA,CAACG,IAAAA,EAAAA;gBAAKK,GAAAA,EAAK,CAAA;;kCACT5B,GAAA,CAAC6C,UAAAA,EAAAA;wBACCC,KAAAA,EAAM,QAAA;wBACNC,IAAAA,EAAK,IAAA;wBACLC,OAAAA,EAAQ,OAAA;wBACRC,OAAAA,EAAS,IAAMR,aAAAA,CAAc7B,OAAAA,CAAQrB,EAAE,CAAA;AAEvC,wBAAA,QAAA,gBAAAS,GAAA,CAACkD,OAAAA,EAAAA,EAAAA;;kCAEHlD,GAAA,CAAC6C,UAAAA,EAAAA;wBACCC,KAAAA,EAAM,UAAA;wBACNC,IAAAA,EAAK,IAAA;wBACLC,OAAAA,EAAQ,OAAA;;wBAERC,OAAAA,EAAS,IAAMN,iBAAAA,CAAkB/B,OAAAA,CAAQrB,EAAE,CAAA;AAE3C,wBAAA,QAAA,gBAAAS,GAAA,CAACmD,SAAAA,EAAAA,EAAAA;;;AAGH,aAAA,CAAA,GAAA;;;AAGV,CAAA;MAEaC,WAAAA,GAAc,CAAC,EAC1BxC,OAAO,EACP4B,SAAS,EAIV,GAAA;AACC;;;;;AAKC,MACD,IAAI5B,OAAAA,CAAQyC,IAAI,KAAK,MAAA,EAAQ;AAC3B,QAAA,qBAAOrD,GAAA,CAACW,WAAAA,EAAAA;YAAYC,OAAAA,EAASA;;AAC/B,IAAA;AACA,IAAA,qBAAOZ,GAAA,CAACuC,gBAAAA,EAAAA;QAAiB3B,OAAAA,EAASA;;AACpC;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ResizableTextArea.js","sources":["../../../../../admin/src/components/AIChat/components/ResizableTextArea.tsx"],"sourcesContent":["import { useRef, useEffect, useState } from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\ninterface TextAreaProps {\n value: string;\n onChange: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;\n onSubmit?: (e: React.FormEvent<HTMLFormElement>) => void;\n placeholder?: string;\n}\n\nconst TextAreaElement = styled(Box).attrs({ as: 'textarea' })`\n border: none;\n resize: none;\n background: transparent;\n outline: none !important;\n width: 100%;\n min-height: 44px;\n max-height: 160px;\n line-height: ${({ theme }) => theme.lineHeights[4]};\n font-size: ${({ theme }) => theme.fontSizes[2]};\n color: ${({ theme }) => theme.colors.neutral800};\n padding-bottom: ${({ theme }) => theme.spaces[1]};\n overflow-y: auto;\n\n /* Show partial lines when content exceeds visible area */\n height: ${({ rows, theme }) =>\n rows === 5\n ? `calc(${rows} * ${theme.lineHeights[4]} * 1em + 0.7em)`\n : `calc(${rows} * ${theme.lineHeights[4]} * 1em)`};\n\n &:disabled,\n &::placeholder {\n color: ${({ theme }) => theme.colors.neutral600};\n }\n`;\n\nexport const ResizableTextArea = ({ value, onChange, onSubmit, placeholder }: TextAreaProps) => {\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const [rows, setRows] = useState(1);\n\n const calculateRows = (text: string) => {\n if (!text) return 1;\n // Count newlines in the text\n const lineCount = (text.match(/\\n/g) || []).length + 1;\n // Limit to a maximum of 5 rows\n return Math.min(lineCount, 5);\n };\n\n // Update rows when value changes\n useEffect(() => {\n setRows(calculateRows(value));\n }, [value]);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (!textareaRef.current?.value.trim()) {\n return;\n }\n\n if (e.key === 'Enter' && !e.shiftKey && onSubmit) {\n e.preventDefault();\n onSubmit(e as unknown as React.FormEvent<HTMLFormElement>);\n // Ensure focus is maintained after submission using a small delay\n // This helps ensure the focus happens after any other effects from submission\n setTimeout(() => {\n textareaRef.current?.focus();\n }, 10);\n }\n };\n\n useEffect(() => {\n textareaRef.current?.focus();\n }, [textareaRef]);\n\n return (\n <TextAreaElement\n ref={textareaRef}\n value={value}\n onChange={onChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n rows={rows}\n />\n );\n};\n"],"names":["TextAreaElement","styled","Box","attrs","as","theme","lineHeights","fontSizes","colors","neutral800","spaces","rows","neutral600","ResizableTextArea","value","onChange","onSubmit","placeholder","textareaRef","useRef","setRows","useState","calculateRows","text","lineCount","match","length","Math","min","useEffect","handleKeyDown","e","current","trim","key","shiftKey","preventDefault","setTimeout","focus","_jsx","ref","onKeyDown"],"mappings":";;;;;;;AAYA,MAAMA,eAAkBC,GAAAA,uBAAAA,CAAOC,gBAAKC,CAAAA,CAAAA,KAAK,CAAC;IAAEC,EAAI,EAAA;AAAW,CAAA,CAAE;;;;;;;;eAQ9C,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,WAAW,CAAC,CAAA,CAAE,CAAC;aACxC,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAME,CAAAA,SAAS,CAAC,CAAA,CAAE,CAAC;SACxC,EAAE,CAAC,EAAEF,KAAK,EAAE,GAAKA,KAAMG,CAAAA,MAAM,CAACC,UAAU,CAAC;kBAChC,EAAE,CAAC,EAAEJ,KAAK,EAAE,GAAKA,KAAMK,CAAAA,MAAM,CAAC,CAAA,CAAE,CAAC;;;;AAIzC,UAAA,EAAE,CAAC,EAAEC,IAAI,EAAEN,KAAK,EAAE,GACxBM,IAAAA,KAAS,CACL,GAAA,CAAC,KAAK,EAAEA,IAAAA,CAAK,GAAG,EAAEN,MAAMC,WAAW,CAAC,CAAE,CAAA,CAAC,eAAe,CAAC,GACvD,CAAC,KAAK,EAAEK,IAAK,CAAA,GAAG,EAAEN,KAAAA,CAAMC,WAAW,CAAC,CAAA,CAAE,CAAC,OAAO,CAAC,CAAC;;;;WAI7C,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAMG,CAAAA,MAAM,CAACI,UAAU,CAAC;;AAEpD,CAAC;AAEM,MAAMC,iBAAoB,GAAA,CAAC,EAAEC,KAAK,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,WAAW,EAAiB,GAAA;AACzF,IAAA,MAAMC,cAAcC,YAA4B,CAAA,IAAA,CAAA;AAChD,IAAA,MAAM,CAACR,IAAAA,EAAMS,OAAQ,CAAA,GAAGC,cAAS,CAAA,CAAA,CAAA;AAEjC,IAAA,MAAMC,gBAAgB,CAACC,IAAAA,GAAAA;QACrB,IAAI,CAACA,MAAM,OAAO,CAAA;;QAElB,MAAMC,SAAAA,GAAY,CAACD,IAAKE,CAAAA,KAAK,CAAC,KAAA,CAAA,IAAU,EAAC,EAAGC,MAAM,GAAG,CAAA;;QAErD,OAAOC,IAAAA,CAAKC,GAAG,CAACJ,SAAW,EAAA,CAAA,CAAA;AAC7B,KAAA;;IAGAK,eAAU,CAAA,IAAA;AACRT,QAAAA,OAAAA,CAAQE,aAAcR,CAAAA,KAAAA,CAAAA,CAAAA;KACrB,EAAA;AAACA,QAAAA;AAAM,KAAA,CAAA;AAEV,IAAA,MAAMgB,gBAAgB,CAACC,CAAAA,GAAAA;AACrB,QAAA,IAAI,CAACb,WAAAA,CAAYc,OAAO,EAAElB,MAAMmB,IAAQ,EAAA,EAAA;AACtC,YAAA;AACF;QAEA,IAAIF,CAAAA,CAAEG,GAAG,KAAK,OAAA,IAAW,CAACH,CAAEI,CAAAA,QAAQ,IAAInB,QAAU,EAAA;AAChDe,YAAAA,CAAAA,CAAEK,cAAc,EAAA;YAChBpB,QAASe,CAAAA,CAAAA,CAAAA;;;YAGTM,UAAW,CAAA,IAAA;AACTnB,gBAAAA,WAAAA,CAAYc,OAAO,EAAEM,KAAAA,EAAAA;aACpB,EAAA,EAAA,CAAA;AACL;AACF,KAAA;IAEAT,eAAU,CAAA,IAAA;AACRX,QAAAA,WAAAA,CAAYc,OAAO,EAAEM,KAAAA,EAAAA;KACpB,EAAA;AAACpB,QAAAA;AAAY,KAAA,CAAA;AAEhB,IAAA,qBACEqB,cAACvC,CAAAA,eAAAA,EAAAA;QACCwC,GAAKtB,EAAAA,WAAAA;QACLJ,KAAOA,EAAAA,KAAAA;QACPC,QAAUA,EAAAA,QAAAA;QACV0B,SAAWX,EAAAA,aAAAA;QACXb,WAAaA,EAAAA,WAAAA;QACbN,IAAMA,EAAAA;;AAGZ;;;;"}
1
+ {"version":3,"file":"ResizableTextArea.js","sources":["../../../../../admin/src/components/AIChat/components/ResizableTextArea.tsx"],"sourcesContent":["import { useRef, useEffect, useState } from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\ninterface TextAreaProps {\n value: string;\n onChange: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;\n onSubmit?: (e: React.FormEvent<HTMLFormElement>) => void;\n placeholder?: string;\n}\n\nconst TextAreaElement = styled(Box).attrs({ as: 'textarea' })`\n border: none;\n resize: none;\n background: transparent;\n outline: none !important;\n width: 100%;\n min-height: 44px;\n max-height: 160px;\n line-height: ${({ theme }) => theme.lineHeights[4]};\n font-size: ${({ theme }) => theme.fontSizes[2]};\n color: ${({ theme }) => theme.colors.neutral800};\n padding-bottom: ${({ theme }) => theme.spaces[1]};\n overflow-y: auto;\n\n /* Show partial lines when content exceeds visible area */\n height: ${({ rows, theme }) =>\n rows === 5\n ? `calc(${rows} * ${theme.lineHeights[4]} * 1em + 0.7em)`\n : `calc(${rows} * ${theme.lineHeights[4]} * 1em)`};\n\n &:disabled,\n &::placeholder {\n color: ${({ theme }) => theme.colors.neutral600};\n }\n`;\n\nexport const ResizableTextArea = ({ value, onChange, onSubmit, placeholder }: TextAreaProps) => {\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const [rows, setRows] = useState(1);\n\n const calculateRows = (text: string) => {\n if (!text) return 1;\n // Count newlines in the text\n const lineCount = (text.match(/\\n/g) || []).length + 1;\n // Limit to a maximum of 5 rows\n return Math.min(lineCount, 5);\n };\n\n // Update rows when value changes\n useEffect(() => {\n setRows(calculateRows(value));\n }, [value]);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (!textareaRef.current?.value.trim()) {\n return;\n }\n\n if (e.key === 'Enter' && !e.shiftKey && onSubmit) {\n e.preventDefault();\n onSubmit(e as unknown as React.FormEvent<HTMLFormElement>);\n // Ensure focus is maintained after submission using a small delay\n // This helps ensure the focus happens after any other effects from submission\n setTimeout(() => {\n textareaRef.current?.focus();\n }, 10);\n }\n };\n\n useEffect(() => {\n textareaRef.current?.focus();\n }, [textareaRef]);\n\n return (\n <TextAreaElement\n ref={textareaRef}\n value={value}\n onChange={onChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n rows={rows}\n />\n );\n};\n"],"names":["TextAreaElement","styled","Box","attrs","as","theme","lineHeights","fontSizes","colors","neutral800","spaces","rows","neutral600","ResizableTextArea","value","onChange","onSubmit","placeholder","textareaRef","useRef","setRows","useState","calculateRows","text","lineCount","match","length","Math","min","useEffect","handleKeyDown","e","current","trim","key","shiftKey","preventDefault","setTimeout","focus","_jsx","ref","onKeyDown"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ResizableTextArea.mjs","sources":["../../../../../admin/src/components/AIChat/components/ResizableTextArea.tsx"],"sourcesContent":["import { useRef, useEffect, useState } from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\ninterface TextAreaProps {\n value: string;\n onChange: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;\n onSubmit?: (e: React.FormEvent<HTMLFormElement>) => void;\n placeholder?: string;\n}\n\nconst TextAreaElement = styled(Box).attrs({ as: 'textarea' })`\n border: none;\n resize: none;\n background: transparent;\n outline: none !important;\n width: 100%;\n min-height: 44px;\n max-height: 160px;\n line-height: ${({ theme }) => theme.lineHeights[4]};\n font-size: ${({ theme }) => theme.fontSizes[2]};\n color: ${({ theme }) => theme.colors.neutral800};\n padding-bottom: ${({ theme }) => theme.spaces[1]};\n overflow-y: auto;\n\n /* Show partial lines when content exceeds visible area */\n height: ${({ rows, theme }) =>\n rows === 5\n ? `calc(${rows} * ${theme.lineHeights[4]} * 1em + 0.7em)`\n : `calc(${rows} * ${theme.lineHeights[4]} * 1em)`};\n\n &:disabled,\n &::placeholder {\n color: ${({ theme }) => theme.colors.neutral600};\n }\n`;\n\nexport const ResizableTextArea = ({ value, onChange, onSubmit, placeholder }: TextAreaProps) => {\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const [rows, setRows] = useState(1);\n\n const calculateRows = (text: string) => {\n if (!text) return 1;\n // Count newlines in the text\n const lineCount = (text.match(/\\n/g) || []).length + 1;\n // Limit to a maximum of 5 rows\n return Math.min(lineCount, 5);\n };\n\n // Update rows when value changes\n useEffect(() => {\n setRows(calculateRows(value));\n }, [value]);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (!textareaRef.current?.value.trim()) {\n return;\n }\n\n if (e.key === 'Enter' && !e.shiftKey && onSubmit) {\n e.preventDefault();\n onSubmit(e as unknown as React.FormEvent<HTMLFormElement>);\n // Ensure focus is maintained after submission using a small delay\n // This helps ensure the focus happens after any other effects from submission\n setTimeout(() => {\n textareaRef.current?.focus();\n }, 10);\n }\n };\n\n useEffect(() => {\n textareaRef.current?.focus();\n }, [textareaRef]);\n\n return (\n <TextAreaElement\n ref={textareaRef}\n value={value}\n onChange={onChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n rows={rows}\n />\n );\n};\n"],"names":["TextAreaElement","styled","Box","attrs","as","theme","lineHeights","fontSizes","colors","neutral800","spaces","rows","neutral600","ResizableTextArea","value","onChange","onSubmit","placeholder","textareaRef","useRef","setRows","useState","calculateRows","text","lineCount","match","length","Math","min","useEffect","handleKeyDown","e","current","trim","key","shiftKey","preventDefault","setTimeout","focus","_jsx","ref","onKeyDown"],"mappings":";;;;;AAYA,MAAMA,eAAkBC,GAAAA,MAAAA,CAAOC,GAAKC,CAAAA,CAAAA,KAAK,CAAC;IAAEC,EAAI,EAAA;AAAW,CAAA,CAAE;;;;;;;;eAQ9C,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,WAAW,CAAC,CAAA,CAAE,CAAC;aACxC,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAME,CAAAA,SAAS,CAAC,CAAA,CAAE,CAAC;SACxC,EAAE,CAAC,EAAEF,KAAK,EAAE,GAAKA,KAAMG,CAAAA,MAAM,CAACC,UAAU,CAAC;kBAChC,EAAE,CAAC,EAAEJ,KAAK,EAAE,GAAKA,KAAMK,CAAAA,MAAM,CAAC,CAAA,CAAE,CAAC;;;;AAIzC,UAAA,EAAE,CAAC,EAAEC,IAAI,EAAEN,KAAK,EAAE,GACxBM,IAAAA,KAAS,CACL,GAAA,CAAC,KAAK,EAAEA,IAAAA,CAAK,GAAG,EAAEN,MAAMC,WAAW,CAAC,CAAE,CAAA,CAAC,eAAe,CAAC,GACvD,CAAC,KAAK,EAAEK,IAAK,CAAA,GAAG,EAAEN,KAAAA,CAAMC,WAAW,CAAC,CAAA,CAAE,CAAC,OAAO,CAAC,CAAC;;;;WAI7C,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAMG,CAAAA,MAAM,CAACI,UAAU,CAAC;;AAEpD,CAAC;AAEM,MAAMC,iBAAoB,GAAA,CAAC,EAAEC,KAAK,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,WAAW,EAAiB,GAAA;AACzF,IAAA,MAAMC,cAAcC,MAA4B,CAAA,IAAA,CAAA;AAChD,IAAA,MAAM,CAACR,IAAAA,EAAMS,OAAQ,CAAA,GAAGC,QAAS,CAAA,CAAA,CAAA;AAEjC,IAAA,MAAMC,gBAAgB,CAACC,IAAAA,GAAAA;QACrB,IAAI,CAACA,MAAM,OAAO,CAAA;;QAElB,MAAMC,SAAAA,GAAY,CAACD,IAAKE,CAAAA,KAAK,CAAC,KAAA,CAAA,IAAU,EAAC,EAAGC,MAAM,GAAG,CAAA;;QAErD,OAAOC,IAAAA,CAAKC,GAAG,CAACJ,SAAW,EAAA,CAAA,CAAA;AAC7B,KAAA;;IAGAK,SAAU,CAAA,IAAA;AACRT,QAAAA,OAAAA,CAAQE,aAAcR,CAAAA,KAAAA,CAAAA,CAAAA;KACrB,EAAA;AAACA,QAAAA;AAAM,KAAA,CAAA;AAEV,IAAA,MAAMgB,gBAAgB,CAACC,CAAAA,GAAAA;AACrB,QAAA,IAAI,CAACb,WAAAA,CAAYc,OAAO,EAAElB,MAAMmB,IAAQ,EAAA,EAAA;AACtC,YAAA;AACF;QAEA,IAAIF,CAAAA,CAAEG,GAAG,KAAK,OAAA,IAAW,CAACH,CAAEI,CAAAA,QAAQ,IAAInB,QAAU,EAAA;AAChDe,YAAAA,CAAAA,CAAEK,cAAc,EAAA;YAChBpB,QAASe,CAAAA,CAAAA,CAAAA;;;YAGTM,UAAW,CAAA,IAAA;AACTnB,gBAAAA,WAAAA,CAAYc,OAAO,EAAEM,KAAAA,EAAAA;aACpB,EAAA,EAAA,CAAA;AACL;AACF,KAAA;IAEAT,SAAU,CAAA,IAAA;AACRX,QAAAA,WAAAA,CAAYc,OAAO,EAAEM,KAAAA,EAAAA;KACpB,EAAA;AAACpB,QAAAA;AAAY,KAAA,CAAA;AAEhB,IAAA,qBACEqB,GAACvC,CAAAA,eAAAA,EAAAA;QACCwC,GAAKtB,EAAAA,WAAAA;QACLJ,KAAOA,EAAAA,KAAAA;QACPC,QAAUA,EAAAA,QAAAA;QACV0B,SAAWX,EAAAA,aAAAA;QACXb,WAAaA,EAAAA,WAAAA;QACbN,IAAMA,EAAAA;;AAGZ;;;;"}
1
+ {"version":3,"file":"ResizableTextArea.mjs","sources":["../../../../../admin/src/components/AIChat/components/ResizableTextArea.tsx"],"sourcesContent":["import { useRef, useEffect, useState } from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\ninterface TextAreaProps {\n value: string;\n onChange: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;\n onSubmit?: (e: React.FormEvent<HTMLFormElement>) => void;\n placeholder?: string;\n}\n\nconst TextAreaElement = styled(Box).attrs({ as: 'textarea' })`\n border: none;\n resize: none;\n background: transparent;\n outline: none !important;\n width: 100%;\n min-height: 44px;\n max-height: 160px;\n line-height: ${({ theme }) => theme.lineHeights[4]};\n font-size: ${({ theme }) => theme.fontSizes[2]};\n color: ${({ theme }) => theme.colors.neutral800};\n padding-bottom: ${({ theme }) => theme.spaces[1]};\n overflow-y: auto;\n\n /* Show partial lines when content exceeds visible area */\n height: ${({ rows, theme }) =>\n rows === 5\n ? `calc(${rows} * ${theme.lineHeights[4]} * 1em + 0.7em)`\n : `calc(${rows} * ${theme.lineHeights[4]} * 1em)`};\n\n &:disabled,\n &::placeholder {\n color: ${({ theme }) => theme.colors.neutral600};\n }\n`;\n\nexport const ResizableTextArea = ({ value, onChange, onSubmit, placeholder }: TextAreaProps) => {\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const [rows, setRows] = useState(1);\n\n const calculateRows = (text: string) => {\n if (!text) return 1;\n // Count newlines in the text\n const lineCount = (text.match(/\\n/g) || []).length + 1;\n // Limit to a maximum of 5 rows\n return Math.min(lineCount, 5);\n };\n\n // Update rows when value changes\n useEffect(() => {\n setRows(calculateRows(value));\n }, [value]);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (!textareaRef.current?.value.trim()) {\n return;\n }\n\n if (e.key === 'Enter' && !e.shiftKey && onSubmit) {\n e.preventDefault();\n onSubmit(e as unknown as React.FormEvent<HTMLFormElement>);\n // Ensure focus is maintained after submission using a small delay\n // This helps ensure the focus happens after any other effects from submission\n setTimeout(() => {\n textareaRef.current?.focus();\n }, 10);\n }\n };\n\n useEffect(() => {\n textareaRef.current?.focus();\n }, [textareaRef]);\n\n return (\n <TextAreaElement\n ref={textareaRef}\n value={value}\n onChange={onChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n rows={rows}\n />\n );\n};\n"],"names":["TextAreaElement","styled","Box","attrs","as","theme","lineHeights","fontSizes","colors","neutral800","spaces","rows","neutral600","ResizableTextArea","value","onChange","onSubmit","placeholder","textareaRef","useRef","setRows","useState","calculateRows","text","lineCount","match","length","Math","min","useEffect","handleKeyDown","e","current","trim","key","shiftKey","preventDefault","setTimeout","focus","_jsx","ref","onKeyDown"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SimpleMenu.js","sources":["../../../../../admin/src/components/AIChat/components/SimpleMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Menu, useComposedRefs } from '@strapi/design-system';\n\n/* -------------------------------------------------------------------------------------------------\n * SimpleMenu\n * -----------------------------------------------------------------------------------------------*/\n\ntype SimpleMenuProps = Menu.TriggerProps &\n Pick<Menu.ContentProps, 'popoverPlacement' | 'intersectionId'> & {\n children?: React.ReactNode;\n onOpen?: () => void;\n onClose?: () => void;\n };\n\nconst SimpleMenu = React.forwardRef<HTMLButtonElement, SimpleMenuProps>(\n ({ children, onOpen, onClose, popoverPlacement, ...props }, forwardedRef) => {\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const composedRef = useComposedRefs(forwardedRef, triggerRef);\n\n const handleOpenChange = (isOpen: boolean) => {\n if (isOpen && typeof onOpen === 'function') {\n onOpen();\n } else if (!isOpen && typeof onClose === 'function') {\n onClose();\n }\n };\n\n return (\n <Menu.Root onOpenChange={handleOpenChange}>\n <Menu.Trigger ref={composedRef} {...props}>\n {props.label}\n </Menu.Trigger>\n <Menu.Content zIndex={10000} popoverPlacement={popoverPlacement}>\n {children}\n </Menu.Content>\n </Menu.Root>\n );\n }\n);\n\nconst MenuItem = Menu.Item;\ntype MenuItemProps = Menu.ItemProps;\n\nexport { SimpleMenu, MenuItem, Menu };\nexport type { SimpleMenuProps, MenuItemProps };\n"],"names":["SimpleMenu","React","forwardRef","children","onOpen","onClose","popoverPlacement","props","forwardedRef","triggerRef","useRef","composedRef","useComposedRefs","handleOpenChange","isOpen","_jsxs","Menu","Root","onOpenChange","_jsx","Trigger","ref","label","Content","zIndex","MenuItem","Item"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAeA,MAAMA,2BAAaC,gBAAMC,CAAAA,UAAU,CACjC,CAAC,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,OAAO,EAAEC,gBAAgB,EAAE,GAAGC,OAAO,EAAEC,YAAAA,GAAAA;IAC1D,MAAMC,UAAAA,GAAaR,gBAAMS,CAAAA,MAAM,CAAoB,IAAA,CAAA;IACnD,MAAMC,WAAAA,GAAcC,6BAAgBJ,YAAcC,EAAAA,UAAAA,CAAAA;AAElD,IAAA,MAAMI,mBAAmB,CAACC,MAAAA,GAAAA;QACxB,IAAIA,MAAAA,IAAU,OAAOV,MAAAA,KAAW,UAAY,EAAA;AAC1CA,YAAAA,MAAAA,EAAAA;AACF,SAAA,MAAO,IAAI,CAACU,MAAU,IAAA,OAAOT,YAAY,UAAY,EAAA;AACnDA,YAAAA,OAAAA,EAAAA;AACF;AACF,KAAA;IAEA,qBACEU,eAAA,CAACC,kBAAKC,IAAI,EAAA;QAACC,YAAcL,EAAAA,gBAAAA;;AACvB,0BAAAM,cAAA,CAACH,kBAAKI,OAAO,EAAA;gBAACC,GAAKV,EAAAA,WAAAA;AAAc,gBAAA,GAAGJ,KAAK;AACtCA,gBAAAA,QAAAA,EAAAA,KAAAA,CAAMe;;AAET,0BAAAH,cAAA,CAACH,kBAAKO,OAAO,EAAA;gBAACC,MAAQ,EAAA,KAAA;gBAAOlB,gBAAkBA,EAAAA,gBAAAA;AAC5CH,gBAAAA,QAAAA,EAAAA;;;;AAIT,CAAA;AAGIsB,MAAAA,QAAAA,GAAWT,kBAAKU;;;;;;;;;"}
1
+ {"version":3,"file":"SimpleMenu.js","sources":["../../../../../admin/src/components/AIChat/components/SimpleMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Menu, useComposedRefs } from '@strapi/design-system';\n\n/* -------------------------------------------------------------------------------------------------\n * SimpleMenu\n * -----------------------------------------------------------------------------------------------*/\n\ntype SimpleMenuProps = Menu.TriggerProps &\n Pick<Menu.ContentProps, 'popoverPlacement' | 'intersectionId'> & {\n children?: React.ReactNode;\n onOpen?: () => void;\n onClose?: () => void;\n };\n\nconst SimpleMenu = React.forwardRef<HTMLButtonElement, SimpleMenuProps>(\n ({ children, onOpen, onClose, popoverPlacement, ...props }, forwardedRef) => {\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const composedRef = useComposedRefs(forwardedRef, triggerRef);\n\n const handleOpenChange = (isOpen: boolean) => {\n if (isOpen && typeof onOpen === 'function') {\n onOpen();\n } else if (!isOpen && typeof onClose === 'function') {\n onClose();\n }\n };\n\n return (\n <Menu.Root onOpenChange={handleOpenChange}>\n <Menu.Trigger ref={composedRef} {...props}>\n {props.label}\n </Menu.Trigger>\n <Menu.Content zIndex={10000} popoverPlacement={popoverPlacement}>\n {children}\n </Menu.Content>\n </Menu.Root>\n );\n }\n);\n\nconst MenuItem = Menu.Item;\ntype MenuItemProps = Menu.ItemProps;\n\nexport { SimpleMenu, MenuItem, Menu };\nexport type { SimpleMenuProps, MenuItemProps };\n"],"names":["SimpleMenu","React","forwardRef","children","onOpen","onClose","popoverPlacement","props","forwardedRef","triggerRef","useRef","composedRef","useComposedRefs","handleOpenChange","isOpen","_jsxs","Menu","Root","onOpenChange","_jsx","Trigger","ref","label","Content","zIndex","MenuItem","Item"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAeA,MAAMA,2BAAaC,gBAAAA,CAAMC,UAAU,CACjC,CAAC,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,OAAO,EAAEC,gBAAgB,EAAE,GAAGC,OAAO,EAAEC,YAAAA,GAAAA;IAC1D,MAAMC,UAAAA,GAAaR,gBAAAA,CAAMS,MAAM,CAAoB,IAAA,CAAA;IACnD,MAAMC,WAAAA,GAAcC,6BAAgBJ,YAAAA,EAAcC,UAAAA,CAAAA;AAElD,IAAA,MAAMI,mBAAmB,CAACC,MAAAA,GAAAA;QACxB,IAAIA,MAAAA,IAAU,OAAOV,MAAAA,KAAW,UAAA,EAAY;AAC1CA,YAAAA,MAAAA,EAAAA;AACF,QAAA,CAAA,MAAO,IAAI,CAACU,MAAAA,IAAU,OAAOT,YAAY,UAAA,EAAY;AACnDA,YAAAA,OAAAA,EAAAA;AACF,QAAA;AACF,IAAA,CAAA;IAEA,qBACEU,eAAA,CAACC,kBAAKC,IAAI,EAAA;QAACC,YAAAA,EAAcL,gBAAAA;;AACvB,0BAAAM,cAAA,CAACH,kBAAKI,OAAO,EAAA;gBAACC,GAAAA,EAAKV,WAAAA;AAAc,gBAAA,GAAGJ,KAAK;AACtCA,gBAAAA,QAAAA,EAAAA,KAAAA,CAAMe;;AAET,0BAAAH,cAAA,CAACH,kBAAKO,OAAO,EAAA;gBAACC,MAAAA,EAAQ,KAAA;gBAAOlB,gBAAAA,EAAkBA,gBAAAA;AAC5CH,gBAAAA,QAAAA,EAAAA;;;;AAIT,CAAA;AAGF,MAAMsB,QAAAA,GAAWT,kBAAKU;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SimpleMenu.mjs","sources":["../../../../../admin/src/components/AIChat/components/SimpleMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Menu, useComposedRefs } from '@strapi/design-system';\n\n/* -------------------------------------------------------------------------------------------------\n * SimpleMenu\n * -----------------------------------------------------------------------------------------------*/\n\ntype SimpleMenuProps = Menu.TriggerProps &\n Pick<Menu.ContentProps, 'popoverPlacement' | 'intersectionId'> & {\n children?: React.ReactNode;\n onOpen?: () => void;\n onClose?: () => void;\n };\n\nconst SimpleMenu = React.forwardRef<HTMLButtonElement, SimpleMenuProps>(\n ({ children, onOpen, onClose, popoverPlacement, ...props }, forwardedRef) => {\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const composedRef = useComposedRefs(forwardedRef, triggerRef);\n\n const handleOpenChange = (isOpen: boolean) => {\n if (isOpen && typeof onOpen === 'function') {\n onOpen();\n } else if (!isOpen && typeof onClose === 'function') {\n onClose();\n }\n };\n\n return (\n <Menu.Root onOpenChange={handleOpenChange}>\n <Menu.Trigger ref={composedRef} {...props}>\n {props.label}\n </Menu.Trigger>\n <Menu.Content zIndex={10000} popoverPlacement={popoverPlacement}>\n {children}\n </Menu.Content>\n </Menu.Root>\n );\n }\n);\n\nconst MenuItem = Menu.Item;\ntype MenuItemProps = Menu.ItemProps;\n\nexport { SimpleMenu, MenuItem, Menu };\nexport type { SimpleMenuProps, MenuItemProps };\n"],"names":["SimpleMenu","React","forwardRef","children","onOpen","onClose","popoverPlacement","props","forwardedRef","triggerRef","useRef","composedRef","useComposedRefs","handleOpenChange","isOpen","_jsxs","Menu","Root","onOpenChange","_jsx","Trigger","ref","label","Content","zIndex","MenuItem","Item"],"mappings":";;;;;AAeA,MAAMA,2BAAaC,KAAMC,CAAAA,UAAU,CACjC,CAAC,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,OAAO,EAAEC,gBAAgB,EAAE,GAAGC,OAAO,EAAEC,YAAAA,GAAAA;IAC1D,MAAMC,UAAAA,GAAaR,KAAMS,CAAAA,MAAM,CAAoB,IAAA,CAAA;IACnD,MAAMC,WAAAA,GAAcC,gBAAgBJ,YAAcC,EAAAA,UAAAA,CAAAA;AAElD,IAAA,MAAMI,mBAAmB,CAACC,MAAAA,GAAAA;QACxB,IAAIA,MAAAA,IAAU,OAAOV,MAAAA,KAAW,UAAY,EAAA;AAC1CA,YAAAA,MAAAA,EAAAA;AACF,SAAA,MAAO,IAAI,CAACU,MAAU,IAAA,OAAOT,YAAY,UAAY,EAAA;AACnDA,YAAAA,OAAAA,EAAAA;AACF;AACF,KAAA;IAEA,qBACEU,IAAA,CAACC,KAAKC,IAAI,EAAA;QAACC,YAAcL,EAAAA,gBAAAA;;AACvB,0BAAAM,GAAA,CAACH,KAAKI,OAAO,EAAA;gBAACC,GAAKV,EAAAA,WAAAA;AAAc,gBAAA,GAAGJ,KAAK;AACtCA,gBAAAA,QAAAA,EAAAA,KAAAA,CAAMe;;AAET,0BAAAH,GAAA,CAACH,KAAKO,OAAO,EAAA;gBAACC,MAAQ,EAAA,KAAA;gBAAOlB,gBAAkBA,EAAAA,gBAAAA;AAC5CH,gBAAAA,QAAAA,EAAAA;;;;AAIT,CAAA;AAGIsB,MAAAA,QAAAA,GAAWT,KAAKU;;;;"}
1
+ {"version":3,"file":"SimpleMenu.mjs","sources":["../../../../../admin/src/components/AIChat/components/SimpleMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Menu, useComposedRefs } from '@strapi/design-system';\n\n/* -------------------------------------------------------------------------------------------------\n * SimpleMenu\n * -----------------------------------------------------------------------------------------------*/\n\ntype SimpleMenuProps = Menu.TriggerProps &\n Pick<Menu.ContentProps, 'popoverPlacement' | 'intersectionId'> & {\n children?: React.ReactNode;\n onOpen?: () => void;\n onClose?: () => void;\n };\n\nconst SimpleMenu = React.forwardRef<HTMLButtonElement, SimpleMenuProps>(\n ({ children, onOpen, onClose, popoverPlacement, ...props }, forwardedRef) => {\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const composedRef = useComposedRefs(forwardedRef, triggerRef);\n\n const handleOpenChange = (isOpen: boolean) => {\n if (isOpen && typeof onOpen === 'function') {\n onOpen();\n } else if (!isOpen && typeof onClose === 'function') {\n onClose();\n }\n };\n\n return (\n <Menu.Root onOpenChange={handleOpenChange}>\n <Menu.Trigger ref={composedRef} {...props}>\n {props.label}\n </Menu.Trigger>\n <Menu.Content zIndex={10000} popoverPlacement={popoverPlacement}>\n {children}\n </Menu.Content>\n </Menu.Root>\n );\n }\n);\n\nconst MenuItem = Menu.Item;\ntype MenuItemProps = Menu.ItemProps;\n\nexport { SimpleMenu, MenuItem, Menu };\nexport type { SimpleMenuProps, MenuItemProps };\n"],"names":["SimpleMenu","React","forwardRef","children","onOpen","onClose","popoverPlacement","props","forwardedRef","triggerRef","useRef","composedRef","useComposedRefs","handleOpenChange","isOpen","_jsxs","Menu","Root","onOpenChange","_jsx","Trigger","ref","label","Content","zIndex","MenuItem","Item"],"mappings":";;;;;AAeA,MAAMA,2BAAaC,KAAAA,CAAMC,UAAU,CACjC,CAAC,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,OAAO,EAAEC,gBAAgB,EAAE,GAAGC,OAAO,EAAEC,YAAAA,GAAAA;IAC1D,MAAMC,UAAAA,GAAaR,KAAAA,CAAMS,MAAM,CAAoB,IAAA,CAAA;IACnD,MAAMC,WAAAA,GAAcC,gBAAgBJ,YAAAA,EAAcC,UAAAA,CAAAA;AAElD,IAAA,MAAMI,mBAAmB,CAACC,MAAAA,GAAAA;QACxB,IAAIA,MAAAA,IAAU,OAAOV,MAAAA,KAAW,UAAA,EAAY;AAC1CA,YAAAA,MAAAA,EAAAA;AACF,QAAA,CAAA,MAAO,IAAI,CAACU,MAAAA,IAAU,OAAOT,YAAY,UAAA,EAAY;AACnDA,YAAAA,OAAAA,EAAAA;AACF,QAAA;AACF,IAAA,CAAA;IAEA,qBACEU,IAAA,CAACC,KAAKC,IAAI,EAAA;QAACC,YAAAA,EAAcL,gBAAAA;;AACvB,0BAAAM,GAAA,CAACH,KAAKI,OAAO,EAAA;gBAACC,GAAAA,EAAKV,WAAAA;AAAc,gBAAA,GAAGJ,KAAK;AACtCA,gBAAAA,QAAAA,EAAAA,KAAAA,CAAMe;;AAET,0BAAAH,GAAA,CAACH,KAAKO,OAAO,EAAA;gBAACC,MAAAA,EAAQ,KAAA;gBAAOlB,gBAAAA,EAAkBA,gBAAAA;AAC5CH,gBAAAA,QAAAA,EAAAA;;;;AAIT,CAAA;AAGF,MAAMsB,QAAAA,GAAWT,KAAKU;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"StepModal.js","sources":["../../../../../admin/src/components/AIChat/components/StepModal.tsx"],"sourcesContent":["import {\n createContext,\n useContext,\n useState,\n ReactNode,\n Children,\n isValidElement,\n FormEvent,\n useEffect,\n} from 'react';\n\nimport { Modal, Box, Button, Typography } from '@strapi/design-system';\n\n/* -------------------------------------------------------------------------------------------------\n * Context\n * -----------------------------------------------------------------------------------------------*/\n\ninterface StepModalContextType {\n currentStep: number;\n goToStep: (step: number) => void;\n nextStep: () => Promise<boolean>;\n prevStep: () => void;\n isFirstStep: boolean;\n isLastStep: boolean;\n totalSteps: number;\n isLoading: boolean;\n error: Error | null;\n setError: (error: Error | null) => void;\n}\n\nconst StepModalContext = createContext<StepModalContextType | null>(null);\n\nexport const useStepModal = () => {\n const context = useContext(StepModalContext);\n if (!context) {\n throw new Error('useStepModal must be used within a StepModal');\n }\n return context;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * StepModal\n * -----------------------------------------------------------------------------------------------*/\n\ninterface StepModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title?: string;\n children: ReactNode;\n onComplete?: () => void;\n onCancel?: () => void;\n}\n\ninterface StepProps {\n title?: string;\n children: ReactNode;\n nextLabel?: string;\n cancelLabel?: string;\n backLabel?: string;\n disableNext?: boolean;\n onNext?: () => Promise<boolean> | boolean;\n}\n\nconst StepModal = ({\n open,\n onOpenChange,\n title,\n children,\n onComplete,\n onCancel,\n}: StepModalProps) => {\n const [currentStep, setCurrentStep] = useState(0);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const childrenArray = Children.toArray(children)\n .filter((child): child is React.ReactElement => isValidElement(child))\n .map((child) => child.props);\n\n const totalSteps = childrenArray.length;\n const isFirstStep = currentStep === 0;\n const isLastStep = currentStep === totalSteps - 1;\n\n // Reset states when modal opens/closes\n useEffect(() => {\n if (!open) {\n // Reset states when modal is closed\n setCurrentStep(0);\n setIsLoading(false);\n setError(null);\n }\n }, [open]);\n\n const resetStates = () => {\n setCurrentStep(0);\n setIsLoading(false);\n setError(null);\n };\n\n const handleCancel = () => {\n onCancel?.();\n resetStates();\n onOpenChange(false);\n };\n\n const handleBack = () => {\n setCurrentStep((prev) => Math.max(0, prev - 1));\n setError(null);\n };\n\n const nextStep = async () => {\n const currentStepProps = childrenArray[currentStep];\n\n if (currentStepProps.onNext) {\n setIsLoading(true);\n setError(null);\n\n try {\n if (isLastStep) {\n onComplete?.();\n resetStates();\n onOpenChange(false);\n } else {\n await currentStepProps.onNext();\n setCurrentStep((prev) => prev + 1);\n }\n return true;\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n return false;\n } finally {\n setIsLoading(false);\n }\n } else {\n // Default behavior: just move to next step\n if (isLastStep) {\n onComplete?.();\n resetStates();\n onOpenChange(false);\n } else {\n setCurrentStep((prev) => prev + 1);\n }\n return true;\n }\n };\n\n // Handle form submission (triggered by Enter key)\n const handleFormSubmit = (e: FormEvent) => {\n e.preventDefault();\n if (!isLoading && !childrenArray[currentStep]?.disableNext) {\n nextStep();\n }\n };\n\n const contextValue = {\n currentStep,\n goToStep: setCurrentStep,\n nextStep,\n prevStep: handleBack,\n isFirstStep,\n isLastStep,\n totalSteps,\n isLoading,\n error,\n setError,\n };\n\n const currentChild = childrenArray[currentStep];\n\n return (\n <StepModalContext.Provider value={contextValue}>\n {open && (\n <Modal.Root open onOpenChange={handleCancel}>\n <Modal.Content>\n <Modal.Header>\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {currentChild?.title || title}\n </Typography>\n </Modal.Header>\n\n <form onSubmit={handleFormSubmit}>\n <Modal.Body>\n {Children.toArray(children)[currentStep]}\n\n {error && (\n <Box\n marginTop={4}\n padding={3}\n background=\"danger100\"\n color=\"danger600\"\n borderRadius=\"4px\"\n >\n <Typography variant=\"pi\">{error.message}</Typography>\n </Box>\n )}\n </Modal.Body>\n\n <Modal.Footer>\n {isFirstStep ? (\n <Button variant=\"tertiary\" onClick={handleCancel} type=\"button\">\n {currentChild?.cancelLabel || 'Cancel'}\n </Button>\n ) : (\n <Button variant=\"tertiary\" onClick={handleBack} type=\"button\">\n {currentChild?.backLabel || 'Back'}\n </Button>\n )}\n\n <Button\n variant=\"default\"\n type=\"submit\"\n disabled={isLoading || currentChild?.disableNext}\n loading={isLoading}\n >\n {currentChild?.nextLabel || (isLastStep ? 'Complete' : 'Next')}\n </Button>\n </Modal.Footer>\n </form>\n </Modal.Content>\n </Modal.Root>\n )}\n </StepModalContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Step\n * -----------------------------------------------------------------------------------------------*/\n\nconst Step = ({ children }: StepProps) => {\n return <>{children}</>;\n};\n\nStepModal.Step = Step;\n\nexport { StepModal, Step };\n"],"names":["StepModalContext","createContext","useStepModal","context","useContext","Error","StepModal","open","onOpenChange","title","children","onComplete","onCancel","currentStep","setCurrentStep","useState","isLoading","setIsLoading","error","setError","childrenArray","Children","toArray","filter","child","isValidElement","map","props","totalSteps","length","isFirstStep","isLastStep","useEffect","resetStates","handleCancel","handleBack","prev","Math","max","nextStep","currentStepProps","onNext","err","String","handleFormSubmit","e","preventDefault","disableNext","contextValue","goToStep","prevStep","currentChild","_jsx","Provider","value","Modal","Root","_jsxs","Content","Header","Typography","variant","fontWeight","form","onSubmit","Body","Box","marginTop","padding","background","color","borderRadius","message","Footer","Button","onClick","type","cancelLabel","backLabel","disabled","loading","nextLabel","Step","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"StepModal.js","sources":["../../../../../admin/src/components/AIChat/components/StepModal.tsx"],"sourcesContent":["import {\n createContext,\n useContext,\n useState,\n ReactNode,\n Children,\n isValidElement,\n FormEvent,\n useEffect,\n} from 'react';\n\nimport { Modal, Box, Button, Typography } from '@strapi/design-system';\n\n/* -------------------------------------------------------------------------------------------------\n * Context\n * -----------------------------------------------------------------------------------------------*/\n\ninterface StepModalContextType {\n currentStep: number;\n goToStep: (step: number) => void;\n nextStep: () => Promise<boolean>;\n prevStep: () => void;\n isFirstStep: boolean;\n isLastStep: boolean;\n totalSteps: number;\n isLoading: boolean;\n error: Error | null;\n setError: (error: Error | null) => void;\n}\n\nconst StepModalContext = createContext<StepModalContextType | null>(null);\n\nexport const useStepModal = () => {\n const context = useContext(StepModalContext);\n if (!context) {\n throw new Error('useStepModal must be used within a StepModal');\n }\n return context;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * StepModal\n * -----------------------------------------------------------------------------------------------*/\n\ninterface StepModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title?: string;\n children: ReactNode;\n onComplete?: () => void;\n onCancel?: () => void;\n}\n\ninterface StepProps {\n title?: string;\n children: ReactNode;\n nextLabel?: string;\n cancelLabel?: string;\n backLabel?: string;\n disableNext?: boolean;\n onNext?: () => Promise<boolean> | boolean;\n}\n\nconst StepModal = ({\n open,\n onOpenChange,\n title,\n children,\n onComplete,\n onCancel,\n}: StepModalProps) => {\n const [currentStep, setCurrentStep] = useState(0);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const childrenArray = Children.toArray(children)\n .filter((child): child is React.ReactElement => isValidElement(child))\n .map((child) => child.props);\n\n const totalSteps = childrenArray.length;\n const isFirstStep = currentStep === 0;\n const isLastStep = currentStep === totalSteps - 1;\n\n // Reset states when modal opens/closes\n useEffect(() => {\n if (!open) {\n // Reset states when modal is closed\n setCurrentStep(0);\n setIsLoading(false);\n setError(null);\n }\n }, [open]);\n\n const resetStates = () => {\n setCurrentStep(0);\n setIsLoading(false);\n setError(null);\n };\n\n const handleCancel = () => {\n onCancel?.();\n resetStates();\n onOpenChange(false);\n };\n\n const handleBack = () => {\n setCurrentStep((prev) => Math.max(0, prev - 1));\n setError(null);\n };\n\n const nextStep = async () => {\n const currentStepProps = childrenArray[currentStep];\n\n if (currentStepProps.onNext) {\n setIsLoading(true);\n setError(null);\n\n try {\n if (isLastStep) {\n onComplete?.();\n resetStates();\n onOpenChange(false);\n } else {\n await currentStepProps.onNext();\n setCurrentStep((prev) => prev + 1);\n }\n return true;\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n return false;\n } finally {\n setIsLoading(false);\n }\n } else {\n // Default behavior: just move to next step\n if (isLastStep) {\n onComplete?.();\n resetStates();\n onOpenChange(false);\n } else {\n setCurrentStep((prev) => prev + 1);\n }\n return true;\n }\n };\n\n // Handle form submission (triggered by Enter key)\n const handleFormSubmit = (e: FormEvent) => {\n e.preventDefault();\n if (!isLoading && !childrenArray[currentStep]?.disableNext) {\n nextStep();\n }\n };\n\n const contextValue = {\n currentStep,\n goToStep: setCurrentStep,\n nextStep,\n prevStep: handleBack,\n isFirstStep,\n isLastStep,\n totalSteps,\n isLoading,\n error,\n setError,\n };\n\n const currentChild = childrenArray[currentStep];\n\n return (\n <StepModalContext.Provider value={contextValue}>\n {open && (\n <Modal.Root open onOpenChange={handleCancel}>\n <Modal.Content>\n <Modal.Header>\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {currentChild?.title || title}\n </Typography>\n </Modal.Header>\n\n <form onSubmit={handleFormSubmit}>\n <Modal.Body>\n {Children.toArray(children)[currentStep]}\n\n {error && (\n <Box\n marginTop={4}\n padding={3}\n background=\"danger100\"\n color=\"danger600\"\n borderRadius=\"4px\"\n >\n <Typography variant=\"pi\">{error.message}</Typography>\n </Box>\n )}\n </Modal.Body>\n\n <Modal.Footer>\n {isFirstStep ? (\n <Button variant=\"tertiary\" onClick={handleCancel} type=\"button\">\n {currentChild?.cancelLabel || 'Cancel'}\n </Button>\n ) : (\n <Button variant=\"tertiary\" onClick={handleBack} type=\"button\">\n {currentChild?.backLabel || 'Back'}\n </Button>\n )}\n\n <Button\n variant=\"default\"\n type=\"submit\"\n disabled={isLoading || currentChild?.disableNext}\n loading={isLoading}\n >\n {currentChild?.nextLabel || (isLastStep ? 'Complete' : 'Next')}\n </Button>\n </Modal.Footer>\n </form>\n </Modal.Content>\n </Modal.Root>\n )}\n </StepModalContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Step\n * -----------------------------------------------------------------------------------------------*/\n\nconst Step = ({ children }: StepProps) => {\n return <>{children}</>;\n};\n\nStepModal.Step = Step;\n\nexport { StepModal, Step };\n"],"names":["StepModalContext","createContext","useStepModal","context","useContext","Error","StepModal","open","onOpenChange","title","children","onComplete","onCancel","currentStep","setCurrentStep","useState","isLoading","setIsLoading","error","setError","childrenArray","Children","toArray","filter","child","isValidElement","map","props","totalSteps","length","isFirstStep","isLastStep","useEffect","resetStates","handleCancel","handleBack","prev","Math","max","nextStep","currentStepProps","onNext","err","String","handleFormSubmit","e","preventDefault","disableNext","contextValue","goToStep","prevStep","currentChild","_jsx","Provider","value","Modal","Root","_jsxs","Content","Header","Typography","variant","fontWeight","form","onSubmit","Body","Box","marginTop","padding","background","color","borderRadius","message","Footer","Button","onClick","type","cancelLabel","backLabel","disabled","loading","nextLabel","Step","_Fragment"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"StepModal.mjs","sources":["../../../../../admin/src/components/AIChat/components/StepModal.tsx"],"sourcesContent":["import {\n createContext,\n useContext,\n useState,\n ReactNode,\n Children,\n isValidElement,\n FormEvent,\n useEffect,\n} from 'react';\n\nimport { Modal, Box, Button, Typography } from '@strapi/design-system';\n\n/* -------------------------------------------------------------------------------------------------\n * Context\n * -----------------------------------------------------------------------------------------------*/\n\ninterface StepModalContextType {\n currentStep: number;\n goToStep: (step: number) => void;\n nextStep: () => Promise<boolean>;\n prevStep: () => void;\n isFirstStep: boolean;\n isLastStep: boolean;\n totalSteps: number;\n isLoading: boolean;\n error: Error | null;\n setError: (error: Error | null) => void;\n}\n\nconst StepModalContext = createContext<StepModalContextType | null>(null);\n\nexport const useStepModal = () => {\n const context = useContext(StepModalContext);\n if (!context) {\n throw new Error('useStepModal must be used within a StepModal');\n }\n return context;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * StepModal\n * -----------------------------------------------------------------------------------------------*/\n\ninterface StepModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title?: string;\n children: ReactNode;\n onComplete?: () => void;\n onCancel?: () => void;\n}\n\ninterface StepProps {\n title?: string;\n children: ReactNode;\n nextLabel?: string;\n cancelLabel?: string;\n backLabel?: string;\n disableNext?: boolean;\n onNext?: () => Promise<boolean> | boolean;\n}\n\nconst StepModal = ({\n open,\n onOpenChange,\n title,\n children,\n onComplete,\n onCancel,\n}: StepModalProps) => {\n const [currentStep, setCurrentStep] = useState(0);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const childrenArray = Children.toArray(children)\n .filter((child): child is React.ReactElement => isValidElement(child))\n .map((child) => child.props);\n\n const totalSteps = childrenArray.length;\n const isFirstStep = currentStep === 0;\n const isLastStep = currentStep === totalSteps - 1;\n\n // Reset states when modal opens/closes\n useEffect(() => {\n if (!open) {\n // Reset states when modal is closed\n setCurrentStep(0);\n setIsLoading(false);\n setError(null);\n }\n }, [open]);\n\n const resetStates = () => {\n setCurrentStep(0);\n setIsLoading(false);\n setError(null);\n };\n\n const handleCancel = () => {\n onCancel?.();\n resetStates();\n onOpenChange(false);\n };\n\n const handleBack = () => {\n setCurrentStep((prev) => Math.max(0, prev - 1));\n setError(null);\n };\n\n const nextStep = async () => {\n const currentStepProps = childrenArray[currentStep];\n\n if (currentStepProps.onNext) {\n setIsLoading(true);\n setError(null);\n\n try {\n if (isLastStep) {\n onComplete?.();\n resetStates();\n onOpenChange(false);\n } else {\n await currentStepProps.onNext();\n setCurrentStep((prev) => prev + 1);\n }\n return true;\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n return false;\n } finally {\n setIsLoading(false);\n }\n } else {\n // Default behavior: just move to next step\n if (isLastStep) {\n onComplete?.();\n resetStates();\n onOpenChange(false);\n } else {\n setCurrentStep((prev) => prev + 1);\n }\n return true;\n }\n };\n\n // Handle form submission (triggered by Enter key)\n const handleFormSubmit = (e: FormEvent) => {\n e.preventDefault();\n if (!isLoading && !childrenArray[currentStep]?.disableNext) {\n nextStep();\n }\n };\n\n const contextValue = {\n currentStep,\n goToStep: setCurrentStep,\n nextStep,\n prevStep: handleBack,\n isFirstStep,\n isLastStep,\n totalSteps,\n isLoading,\n error,\n setError,\n };\n\n const currentChild = childrenArray[currentStep];\n\n return (\n <StepModalContext.Provider value={contextValue}>\n {open && (\n <Modal.Root open onOpenChange={handleCancel}>\n <Modal.Content>\n <Modal.Header>\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {currentChild?.title || title}\n </Typography>\n </Modal.Header>\n\n <form onSubmit={handleFormSubmit}>\n <Modal.Body>\n {Children.toArray(children)[currentStep]}\n\n {error && (\n <Box\n marginTop={4}\n padding={3}\n background=\"danger100\"\n color=\"danger600\"\n borderRadius=\"4px\"\n >\n <Typography variant=\"pi\">{error.message}</Typography>\n </Box>\n )}\n </Modal.Body>\n\n <Modal.Footer>\n {isFirstStep ? (\n <Button variant=\"tertiary\" onClick={handleCancel} type=\"button\">\n {currentChild?.cancelLabel || 'Cancel'}\n </Button>\n ) : (\n <Button variant=\"tertiary\" onClick={handleBack} type=\"button\">\n {currentChild?.backLabel || 'Back'}\n </Button>\n )}\n\n <Button\n variant=\"default\"\n type=\"submit\"\n disabled={isLoading || currentChild?.disableNext}\n loading={isLoading}\n >\n {currentChild?.nextLabel || (isLastStep ? 'Complete' : 'Next')}\n </Button>\n </Modal.Footer>\n </form>\n </Modal.Content>\n </Modal.Root>\n )}\n </StepModalContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Step\n * -----------------------------------------------------------------------------------------------*/\n\nconst Step = ({ children }: StepProps) => {\n return <>{children}</>;\n};\n\nStepModal.Step = Step;\n\nexport { StepModal, Step };\n"],"names":["StepModalContext","createContext","useStepModal","context","useContext","Error","StepModal","open","onOpenChange","title","children","onComplete","onCancel","currentStep","setCurrentStep","useState","isLoading","setIsLoading","error","setError","childrenArray","Children","toArray","filter","child","isValidElement","map","props","totalSteps","length","isFirstStep","isLastStep","useEffect","resetStates","handleCancel","handleBack","prev","Math","max","nextStep","currentStepProps","onNext","err","String","handleFormSubmit","e","preventDefault","disableNext","contextValue","goToStep","prevStep","currentChild","_jsx","Provider","value","Modal","Root","_jsxs","Content","Header","Typography","variant","fontWeight","form","onSubmit","Body","Box","marginTop","padding","background","color","borderRadius","message","Footer","Button","onClick","type","cancelLabel","backLabel","disabled","loading","nextLabel","Step","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"StepModal.mjs","sources":["../../../../../admin/src/components/AIChat/components/StepModal.tsx"],"sourcesContent":["import {\n createContext,\n useContext,\n useState,\n ReactNode,\n Children,\n isValidElement,\n FormEvent,\n useEffect,\n} from 'react';\n\nimport { Modal, Box, Button, Typography } from '@strapi/design-system';\n\n/* -------------------------------------------------------------------------------------------------\n * Context\n * -----------------------------------------------------------------------------------------------*/\n\ninterface StepModalContextType {\n currentStep: number;\n goToStep: (step: number) => void;\n nextStep: () => Promise<boolean>;\n prevStep: () => void;\n isFirstStep: boolean;\n isLastStep: boolean;\n totalSteps: number;\n isLoading: boolean;\n error: Error | null;\n setError: (error: Error | null) => void;\n}\n\nconst StepModalContext = createContext<StepModalContextType | null>(null);\n\nexport const useStepModal = () => {\n const context = useContext(StepModalContext);\n if (!context) {\n throw new Error('useStepModal must be used within a StepModal');\n }\n return context;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * StepModal\n * -----------------------------------------------------------------------------------------------*/\n\ninterface StepModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title?: string;\n children: ReactNode;\n onComplete?: () => void;\n onCancel?: () => void;\n}\n\ninterface StepProps {\n title?: string;\n children: ReactNode;\n nextLabel?: string;\n cancelLabel?: string;\n backLabel?: string;\n disableNext?: boolean;\n onNext?: () => Promise<boolean> | boolean;\n}\n\nconst StepModal = ({\n open,\n onOpenChange,\n title,\n children,\n onComplete,\n onCancel,\n}: StepModalProps) => {\n const [currentStep, setCurrentStep] = useState(0);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const childrenArray = Children.toArray(children)\n .filter((child): child is React.ReactElement => isValidElement(child))\n .map((child) => child.props);\n\n const totalSteps = childrenArray.length;\n const isFirstStep = currentStep === 0;\n const isLastStep = currentStep === totalSteps - 1;\n\n // Reset states when modal opens/closes\n useEffect(() => {\n if (!open) {\n // Reset states when modal is closed\n setCurrentStep(0);\n setIsLoading(false);\n setError(null);\n }\n }, [open]);\n\n const resetStates = () => {\n setCurrentStep(0);\n setIsLoading(false);\n setError(null);\n };\n\n const handleCancel = () => {\n onCancel?.();\n resetStates();\n onOpenChange(false);\n };\n\n const handleBack = () => {\n setCurrentStep((prev) => Math.max(0, prev - 1));\n setError(null);\n };\n\n const nextStep = async () => {\n const currentStepProps = childrenArray[currentStep];\n\n if (currentStepProps.onNext) {\n setIsLoading(true);\n setError(null);\n\n try {\n if (isLastStep) {\n onComplete?.();\n resetStates();\n onOpenChange(false);\n } else {\n await currentStepProps.onNext();\n setCurrentStep((prev) => prev + 1);\n }\n return true;\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n return false;\n } finally {\n setIsLoading(false);\n }\n } else {\n // Default behavior: just move to next step\n if (isLastStep) {\n onComplete?.();\n resetStates();\n onOpenChange(false);\n } else {\n setCurrentStep((prev) => prev + 1);\n }\n return true;\n }\n };\n\n // Handle form submission (triggered by Enter key)\n const handleFormSubmit = (e: FormEvent) => {\n e.preventDefault();\n if (!isLoading && !childrenArray[currentStep]?.disableNext) {\n nextStep();\n }\n };\n\n const contextValue = {\n currentStep,\n goToStep: setCurrentStep,\n nextStep,\n prevStep: handleBack,\n isFirstStep,\n isLastStep,\n totalSteps,\n isLoading,\n error,\n setError,\n };\n\n const currentChild = childrenArray[currentStep];\n\n return (\n <StepModalContext.Provider value={contextValue}>\n {open && (\n <Modal.Root open onOpenChange={handleCancel}>\n <Modal.Content>\n <Modal.Header>\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {currentChild?.title || title}\n </Typography>\n </Modal.Header>\n\n <form onSubmit={handleFormSubmit}>\n <Modal.Body>\n {Children.toArray(children)[currentStep]}\n\n {error && (\n <Box\n marginTop={4}\n padding={3}\n background=\"danger100\"\n color=\"danger600\"\n borderRadius=\"4px\"\n >\n <Typography variant=\"pi\">{error.message}</Typography>\n </Box>\n )}\n </Modal.Body>\n\n <Modal.Footer>\n {isFirstStep ? (\n <Button variant=\"tertiary\" onClick={handleCancel} type=\"button\">\n {currentChild?.cancelLabel || 'Cancel'}\n </Button>\n ) : (\n <Button variant=\"tertiary\" onClick={handleBack} type=\"button\">\n {currentChild?.backLabel || 'Back'}\n </Button>\n )}\n\n <Button\n variant=\"default\"\n type=\"submit\"\n disabled={isLoading || currentChild?.disableNext}\n loading={isLoading}\n >\n {currentChild?.nextLabel || (isLastStep ? 'Complete' : 'Next')}\n </Button>\n </Modal.Footer>\n </form>\n </Modal.Content>\n </Modal.Root>\n )}\n </StepModalContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Step\n * -----------------------------------------------------------------------------------------------*/\n\nconst Step = ({ children }: StepProps) => {\n return <>{children}</>;\n};\n\nStepModal.Step = Step;\n\nexport { StepModal, Step };\n"],"names":["StepModalContext","createContext","useStepModal","context","useContext","Error","StepModal","open","onOpenChange","title","children","onComplete","onCancel","currentStep","setCurrentStep","useState","isLoading","setIsLoading","error","setError","childrenArray","Children","toArray","filter","child","isValidElement","map","props","totalSteps","length","isFirstStep","isLastStep","useEffect","resetStates","handleCancel","handleBack","prev","Math","max","nextStep","currentStepProps","onNext","err","String","handleFormSubmit","e","preventDefault","disableNext","contextValue","goToStep","prevStep","currentChild","_jsx","Provider","value","Modal","Root","_jsxs","Content","Header","Typography","variant","fontWeight","form","onSubmit","Body","Box","marginTop","padding","background","color","borderRadius","message","Footer","Button","onClick","type","cancelLabel","backLabel","disabled","loading","nextLabel","Step","_Fragment"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"animations.js","sources":["../../../../../admin/src/components/AIChat/components/animations.ts"],"sourcesContent":["import { keyframes } from 'styled-components';\n\nexport const ANIMATIONS = {\n fadeIn: keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n `,\n\n scaleIn: keyframes`\n from {\n opacity: 0;\n transform: scale(0.7);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n `,\n\n slideUpIn: keyframes`\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n `,\n\n slideUpOut: keyframes`\n from {\n opacity: 1;\n transform: translateY(0);\n }\n to {\n opacity: 0;\n transform: translateY(10px);\n }\n `,\n\n slideDownIn: keyframes`\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n `,\n\n slideDownOut: keyframes`\n from {\n opacity: 1;\n transform: translateY(0);\n }\n to {\n opacity: 0;\n transform: translateY(-10px);\n }\n `,\n};\n"],"names":["ANIMATIONS","fadeIn","keyframes","scaleIn","slideUpIn","slideUpOut","slideDownIn","slideDownOut"],"mappings":";;;;MAEaA,UAAa,GAAA;AACxBC,IAAAA,MAAAA,EAAQC,0BAAS;;;;;;;EAOjB,CAAC;AAEDC,IAAAA,OAAAA,EAASD,0BAAS;;;;;;;;;EASlB,CAAC;AAEDE,IAAAA,SAAAA,EAAWF,0BAAS;;;;;;;;;EASpB,CAAC;AAEDG,IAAAA,UAAAA,EAAYH,0BAAS;;;;;;;;;EASrB,CAAC;AAEDI,IAAAA,WAAAA,EAAaJ,0BAAS;;;;;;;;;EAStB,CAAC;AAEDK,IAAAA,YAAAA,EAAcL,0BAAS;;;;;;;;;EASvB;AACF;;;;"}
1
+ {"version":3,"file":"animations.js","sources":["../../../../../admin/src/components/AIChat/components/animations.ts"],"sourcesContent":["import { keyframes } from 'styled-components';\n\nexport const ANIMATIONS = {\n fadeIn: keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n `,\n\n scaleIn: keyframes`\n from {\n opacity: 0;\n transform: scale(0.7);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n `,\n\n slideUpIn: keyframes`\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n `,\n\n slideUpOut: keyframes`\n from {\n opacity: 1;\n transform: translateY(0);\n }\n to {\n opacity: 0;\n transform: translateY(10px);\n }\n `,\n\n slideDownIn: keyframes`\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n `,\n\n slideDownOut: keyframes`\n from {\n opacity: 1;\n transform: translateY(0);\n }\n to {\n opacity: 0;\n transform: translateY(-10px);\n }\n `,\n};\n"],"names":["ANIMATIONS","fadeIn","keyframes","scaleIn","slideUpIn","slideUpOut","slideDownIn","slideDownOut"],"mappings":";;;;MAEaA,UAAAA,GAAa;AACxBC,IAAAA,MAAAA,EAAQC,0BAAS;;;;;;;EAOjB,CAAC;AAEDC,IAAAA,OAAAA,EAASD,0BAAS;;;;;;;;;EASlB,CAAC;AAEDE,IAAAA,SAAAA,EAAWF,0BAAS;;;;;;;;;EASpB,CAAC;AAEDG,IAAAA,UAAAA,EAAYH,0BAAS;;;;;;;;;EASrB,CAAC;AAEDI,IAAAA,WAAAA,EAAaJ,0BAAS;;;;;;;;;EAStB,CAAC;AAEDK,IAAAA,YAAAA,EAAcL,0BAAS;;;;;;;;;EASvB;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"animations.mjs","sources":["../../../../../admin/src/components/AIChat/components/animations.ts"],"sourcesContent":["import { keyframes } from 'styled-components';\n\nexport const ANIMATIONS = {\n fadeIn: keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n `,\n\n scaleIn: keyframes`\n from {\n opacity: 0;\n transform: scale(0.7);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n `,\n\n slideUpIn: keyframes`\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n `,\n\n slideUpOut: keyframes`\n from {\n opacity: 1;\n transform: translateY(0);\n }\n to {\n opacity: 0;\n transform: translateY(10px);\n }\n `,\n\n slideDownIn: keyframes`\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n `,\n\n slideDownOut: keyframes`\n from {\n opacity: 1;\n transform: translateY(0);\n }\n to {\n opacity: 0;\n transform: translateY(-10px);\n }\n `,\n};\n"],"names":["ANIMATIONS","fadeIn","keyframes","scaleIn","slideUpIn","slideUpOut","slideDownIn","slideDownOut"],"mappings":";;MAEaA,UAAa,GAAA;AACxBC,IAAAA,MAAAA,EAAQC,SAAS;;;;;;;EAOjB,CAAC;AAEDC,IAAAA,OAAAA,EAASD,SAAS;;;;;;;;;EASlB,CAAC;AAEDE,IAAAA,SAAAA,EAAWF,SAAS;;;;;;;;;EASpB,CAAC;AAEDG,IAAAA,UAAAA,EAAYH,SAAS;;;;;;;;;EASrB,CAAC;AAEDI,IAAAA,WAAAA,EAAaJ,SAAS;;;;;;;;;EAStB,CAAC;AAEDK,IAAAA,YAAAA,EAAcL,SAAS;;;;;;;;;EASvB;AACF;;;;"}
1
+ {"version":3,"file":"animations.mjs","sources":["../../../../../admin/src/components/AIChat/components/animations.ts"],"sourcesContent":["import { keyframes } from 'styled-components';\n\nexport const ANIMATIONS = {\n fadeIn: keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n `,\n\n scaleIn: keyframes`\n from {\n opacity: 0;\n transform: scale(0.7);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n `,\n\n slideUpIn: keyframes`\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n `,\n\n slideUpOut: keyframes`\n from {\n opacity: 1;\n transform: translateY(0);\n }\n to {\n opacity: 0;\n transform: translateY(10px);\n }\n `,\n\n slideDownIn: keyframes`\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n `,\n\n slideDownOut: keyframes`\n from {\n opacity: 1;\n transform: translateY(0);\n }\n to {\n opacity: 0;\n transform: translateY(-10px);\n }\n `,\n};\n"],"names":["ANIMATIONS","fadeIn","keyframes","scaleIn","slideUpIn","slideUpOut","slideDownIn","slideDownOut"],"mappings":";;MAEaA,UAAAA,GAAa;AACxBC,IAAAA,MAAAA,EAAQC,SAAS;;;;;;;EAOjB,CAAC;AAEDC,IAAAA,OAAAA,EAASD,SAAS;;;;;;;;;EASlB,CAAC;AAEDE,IAAAA,SAAAA,EAAWF,SAAS;;;;;;;;;EASpB,CAAC;AAEDG,IAAAA,UAAAA,EAAYH,SAAS;;;;;;;;;EASrB,CAAC;AAEDI,IAAAA,WAAAA,EAAaJ,SAAS;;;;;;;;;EAStB,CAAC;AAEDK,IAAAA,YAAAA,EAAcL,SAAS;;;;;;;;;EASvB;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"FigmaIcon.js","sources":["../../../../../../admin/src/components/AIChat/components/icons/FigmaIcon.tsx"],"sourcesContent":["interface FigmaIconProps extends React.SVGProps<SVGSVGElement> {}\n\nexport const FigmaIcon = (props: FigmaIconProps) => {\n return (\n <svg\n width={props.width || 16}\n height={props.height || 16}\n viewBox=\"0 0 200 300\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-label=\"Figma logo\"\n style={{ display: 'block', margin: '0 auto', ...props.style }}\n {...props}\n >\n <title>Figma.logo</title>\n <desc>Created using Figma</desc>\n <path\n d=\"M50 300c27.6 0 50-22.4 50-50v-50H50c-27.6 0-50 22.4-50 50s22.4 50 50 50z\"\n fill=\"#0acf83\"\n />\n <path d=\"M50 200c-27.6 0-50-22.4-50-50s22.4-50 50-50h50v100H50z\" fill=\"#a259ff\" />\n <path d=\"M0 50C0 22.4 22.4 0 50 0h50v100H50C22.4 100 0 77.6 0 50z\" fill=\"#f24e1e\" />\n <path d=\"M100 0h50c27.6 0 50 22.4 50 50s-22.4 50-50 50h-50V0z\" fill=\"#ff7262\" />\n <path\n d=\"M200 150c0 27.6-22.4 50-50 50s-50-22.4-50-50 22.4-50 50-50 50 22.4 50 50z\"\n fill=\"#1abcfe\"\n />\n </svg>\n );\n};\n"],"names":["FigmaIcon","props","_jsxs","svg","width","height","viewBox","xmlns","aria-label","style","display","margin","_jsx","title","desc","path","d","fill"],"mappings":";;;;AAEO,MAAMA,YAAY,CAACC,KAAAA,GAAAA;AACxB,IAAA,qBACEC,eAACC,CAAAA,KAAAA,EAAAA;QACCC,KAAOH,EAAAA,KAAAA,CAAMG,KAAK,IAAI,EAAA;QACtBC,MAAQJ,EAAAA,KAAAA,CAAMI,MAAM,IAAI,EAAA;QACxBC,OAAQ,EAAA,aAAA;QACRC,KAAM,EAAA,4BAAA;QACNC,YAAW,EAAA,YAAA;QACXC,KAAO,EAAA;YAAEC,OAAS,EAAA,OAAA;YAASC,MAAQ,EAAA,QAAA;AAAU,YAAA,GAAGV,MAAMQ;AAAM,SAAA;AAC3D,QAAA,GAAGR,KAAK;;0BAETW,cAACC,CAAAA,OAAAA,EAAAA;AAAM,gBAAA,QAAA,EAAA;;0BACPD,cAACE,CAAAA,MAAAA,EAAAA;AAAK,gBAAA,QAAA,EAAA;;0BACNF,cAACG,CAAAA,MAAAA,EAAAA;gBACCC,CAAE,EAAA,0EAAA;gBACFC,IAAK,EAAA;;0BAEPL,cAACG,CAAAA,MAAAA,EAAAA;gBAAKC,CAAE,EAAA,wDAAA;gBAAyDC,IAAK,EAAA;;0BACtEL,cAACG,CAAAA,MAAAA,EAAAA;gBAAKC,CAAE,EAAA,0DAAA;gBAA2DC,IAAK,EAAA;;0BACxEL,cAACG,CAAAA,MAAAA,EAAAA;gBAAKC,CAAE,EAAA,sDAAA;gBAAuDC,IAAK,EAAA;;0BACpEL,cAACG,CAAAA,MAAAA,EAAAA;gBACCC,CAAE,EAAA,2EAAA;gBACFC,IAAK,EAAA;;;;AAIb;;;;"}
1
+ {"version":3,"file":"FigmaIcon.js","sources":["../../../../../../admin/src/components/AIChat/components/icons/FigmaIcon.tsx"],"sourcesContent":["interface FigmaIconProps extends React.SVGProps<SVGSVGElement> {}\n\nexport const FigmaIcon = (props: FigmaIconProps) => {\n return (\n <svg\n width={props.width || 16}\n height={props.height || 16}\n viewBox=\"0 0 200 300\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-label=\"Figma logo\"\n style={{ display: 'block', margin: '0 auto', ...props.style }}\n {...props}\n >\n <title>Figma.logo</title>\n <desc>Created using Figma</desc>\n <path\n d=\"M50 300c27.6 0 50-22.4 50-50v-50H50c-27.6 0-50 22.4-50 50s22.4 50 50 50z\"\n fill=\"#0acf83\"\n />\n <path d=\"M50 200c-27.6 0-50-22.4-50-50s22.4-50 50-50h50v100H50z\" fill=\"#a259ff\" />\n <path d=\"M0 50C0 22.4 22.4 0 50 0h50v100H50C22.4 100 0 77.6 0 50z\" fill=\"#f24e1e\" />\n <path d=\"M100 0h50c27.6 0 50 22.4 50 50s-22.4 50-50 50h-50V0z\" fill=\"#ff7262\" />\n <path\n d=\"M200 150c0 27.6-22.4 50-50 50s-50-22.4-50-50 22.4-50 50-50 50 22.4 50 50z\"\n fill=\"#1abcfe\"\n />\n </svg>\n );\n};\n"],"names":["FigmaIcon","props","_jsxs","svg","width","height","viewBox","xmlns","aria-label","style","display","margin","_jsx","title","desc","path","d","fill"],"mappings":";;;;AAEO,MAAMA,YAAY,CAACC,KAAAA,GAAAA;AACxB,IAAA,qBACEC,eAAA,CAACC,KAAAA,EAAAA;QACCC,KAAAA,EAAOH,KAAAA,CAAMG,KAAK,IAAI,EAAA;QACtBC,MAAAA,EAAQJ,KAAAA,CAAMI,MAAM,IAAI,EAAA;QACxBC,OAAAA,EAAQ,aAAA;QACRC,KAAAA,EAAM,4BAAA;QACNC,YAAAA,EAAW,YAAA;QACXC,KAAAA,EAAO;YAAEC,OAAAA,EAAS,OAAA;YAASC,MAAAA,EAAQ,QAAA;AAAU,YAAA,GAAGV,MAAMQ;AAAM,SAAA;AAC3D,QAAA,GAAGR,KAAK;;0BAETW,cAAA,CAACC,OAAAA,EAAAA;AAAM,gBAAA,QAAA,EAAA;;0BACPD,cAAA,CAACE,MAAAA,EAAAA;AAAK,gBAAA,QAAA,EAAA;;0BACNF,cAAA,CAACG,MAAAA,EAAAA;gBACCC,CAAAA,EAAE,0EAAA;gBACFC,IAAAA,EAAK;;0BAEPL,cAAA,CAACG,MAAAA,EAAAA;gBAAKC,CAAAA,EAAE,wDAAA;gBAAyDC,IAAAA,EAAK;;0BACtEL,cAAA,CAACG,MAAAA,EAAAA;gBAAKC,CAAAA,EAAE,0DAAA;gBAA2DC,IAAAA,EAAK;;0BACxEL,cAAA,CAACG,MAAAA,EAAAA;gBAAKC,CAAAA,EAAE,sDAAA;gBAAuDC,IAAAA,EAAK;;0BACpEL,cAAA,CAACG,MAAAA,EAAAA;gBACCC,CAAAA,EAAE,2EAAA;gBACFC,IAAAA,EAAK;;;;AAIb;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"FigmaIcon.mjs","sources":["../../../../../../admin/src/components/AIChat/components/icons/FigmaIcon.tsx"],"sourcesContent":["interface FigmaIconProps extends React.SVGProps<SVGSVGElement> {}\n\nexport const FigmaIcon = (props: FigmaIconProps) => {\n return (\n <svg\n width={props.width || 16}\n height={props.height || 16}\n viewBox=\"0 0 200 300\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-label=\"Figma logo\"\n style={{ display: 'block', margin: '0 auto', ...props.style }}\n {...props}\n >\n <title>Figma.logo</title>\n <desc>Created using Figma</desc>\n <path\n d=\"M50 300c27.6 0 50-22.4 50-50v-50H50c-27.6 0-50 22.4-50 50s22.4 50 50 50z\"\n fill=\"#0acf83\"\n />\n <path d=\"M50 200c-27.6 0-50-22.4-50-50s22.4-50 50-50h50v100H50z\" fill=\"#a259ff\" />\n <path d=\"M0 50C0 22.4 22.4 0 50 0h50v100H50C22.4 100 0 77.6 0 50z\" fill=\"#f24e1e\" />\n <path d=\"M100 0h50c27.6 0 50 22.4 50 50s-22.4 50-50 50h-50V0z\" fill=\"#ff7262\" />\n <path\n d=\"M200 150c0 27.6-22.4 50-50 50s-50-22.4-50-50 22.4-50 50-50 50 22.4 50 50z\"\n fill=\"#1abcfe\"\n />\n </svg>\n );\n};\n"],"names":["FigmaIcon","props","_jsxs","svg","width","height","viewBox","xmlns","aria-label","style","display","margin","_jsx","title","desc","path","d","fill"],"mappings":";;AAEO,MAAMA,YAAY,CAACC,KAAAA,GAAAA;AACxB,IAAA,qBACEC,IAACC,CAAAA,KAAAA,EAAAA;QACCC,KAAOH,EAAAA,KAAAA,CAAMG,KAAK,IAAI,EAAA;QACtBC,MAAQJ,EAAAA,KAAAA,CAAMI,MAAM,IAAI,EAAA;QACxBC,OAAQ,EAAA,aAAA;QACRC,KAAM,EAAA,4BAAA;QACNC,YAAW,EAAA,YAAA;QACXC,KAAO,EAAA;YAAEC,OAAS,EAAA,OAAA;YAASC,MAAQ,EAAA,QAAA;AAAU,YAAA,GAAGV,MAAMQ;AAAM,SAAA;AAC3D,QAAA,GAAGR,KAAK;;0BAETW,GAACC,CAAAA,OAAAA,EAAAA;AAAM,gBAAA,QAAA,EAAA;;0BACPD,GAACE,CAAAA,MAAAA,EAAAA;AAAK,gBAAA,QAAA,EAAA;;0BACNF,GAACG,CAAAA,MAAAA,EAAAA;gBACCC,CAAE,EAAA,0EAAA;gBACFC,IAAK,EAAA;;0BAEPL,GAACG,CAAAA,MAAAA,EAAAA;gBAAKC,CAAE,EAAA,wDAAA;gBAAyDC,IAAK,EAAA;;0BACtEL,GAACG,CAAAA,MAAAA,EAAAA;gBAAKC,CAAE,EAAA,0DAAA;gBAA2DC,IAAK,EAAA;;0BACxEL,GAACG,CAAAA,MAAAA,EAAAA;gBAAKC,CAAE,EAAA,sDAAA;gBAAuDC,IAAK,EAAA;;0BACpEL,GAACG,CAAAA,MAAAA,EAAAA;gBACCC,CAAE,EAAA,2EAAA;gBACFC,IAAK,EAAA;;;;AAIb;;;;"}
1
+ {"version":3,"file":"FigmaIcon.mjs","sources":["../../../../../../admin/src/components/AIChat/components/icons/FigmaIcon.tsx"],"sourcesContent":["interface FigmaIconProps extends React.SVGProps<SVGSVGElement> {}\n\nexport const FigmaIcon = (props: FigmaIconProps) => {\n return (\n <svg\n width={props.width || 16}\n height={props.height || 16}\n viewBox=\"0 0 200 300\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-label=\"Figma logo\"\n style={{ display: 'block', margin: '0 auto', ...props.style }}\n {...props}\n >\n <title>Figma.logo</title>\n <desc>Created using Figma</desc>\n <path\n d=\"M50 300c27.6 0 50-22.4 50-50v-50H50c-27.6 0-50 22.4-50 50s22.4 50 50 50z\"\n fill=\"#0acf83\"\n />\n <path d=\"M50 200c-27.6 0-50-22.4-50-50s22.4-50 50-50h50v100H50z\" fill=\"#a259ff\" />\n <path d=\"M0 50C0 22.4 22.4 0 50 0h50v100H50C22.4 100 0 77.6 0 50z\" fill=\"#f24e1e\" />\n <path d=\"M100 0h50c27.6 0 50 22.4 50 50s-22.4 50-50 50h-50V0z\" fill=\"#ff7262\" />\n <path\n d=\"M200 150c0 27.6-22.4 50-50 50s-50-22.4-50-50 22.4-50 50-50 50 22.4 50 50z\"\n fill=\"#1abcfe\"\n />\n </svg>\n );\n};\n"],"names":["FigmaIcon","props","_jsxs","svg","width","height","viewBox","xmlns","aria-label","style","display","margin","_jsx","title","desc","path","d","fill"],"mappings":";;AAEO,MAAMA,YAAY,CAACC,KAAAA,GAAAA;AACxB,IAAA,qBACEC,IAAA,CAACC,KAAAA,EAAAA;QACCC,KAAAA,EAAOH,KAAAA,CAAMG,KAAK,IAAI,EAAA;QACtBC,MAAAA,EAAQJ,KAAAA,CAAMI,MAAM,IAAI,EAAA;QACxBC,OAAAA,EAAQ,aAAA;QACRC,KAAAA,EAAM,4BAAA;QACNC,YAAAA,EAAW,YAAA;QACXC,KAAAA,EAAO;YAAEC,OAAAA,EAAS,OAAA;YAASC,MAAAA,EAAQ,QAAA;AAAU,YAAA,GAAGV,MAAMQ;AAAM,SAAA;AAC3D,QAAA,GAAGR,KAAK;;0BAETW,GAAA,CAACC,OAAAA,EAAAA;AAAM,gBAAA,QAAA,EAAA;;0BACPD,GAAA,CAACE,MAAAA,EAAAA;AAAK,gBAAA,QAAA,EAAA;;0BACNF,GAAA,CAACG,MAAAA,EAAAA;gBACCC,CAAAA,EAAE,0EAAA;gBACFC,IAAAA,EAAK;;0BAEPL,GAAA,CAACG,MAAAA,EAAAA;gBAAKC,CAAAA,EAAE,wDAAA;gBAAyDC,IAAAA,EAAK;;0BACtEL,GAAA,CAACG,MAAAA,EAAAA;gBAAKC,CAAAA,EAAE,0DAAA;gBAA2DC,IAAAA,EAAK;;0BACxEL,GAAA,CAACG,MAAAA,EAAAA;gBAAKC,CAAAA,EAAE,sDAAA;gBAAuDC,IAAAA,EAAK;;0BACpEL,GAAA,CAACG,MAAAA,EAAAA;gBACCC,CAAAA,EAAE,2EAAA;gBACFC,IAAAA,EAAK;;;;AAIb;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"StopIcon.js","sources":["../../../../../../admin/src/components/AIChat/components/icons/StopIcon.tsx"],"sourcesContent":["interface StopIconProps extends React.SVGProps<SVGSVGElement> {}\n\nexport const StopIcon = (props: StopIconProps) => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <rect x=\"2\" y=\"2\" width=\"11\" height=\"11\" rx=\"2\" fill=\"white\" />\n </svg>\n );\n};\n"],"names":["StopIcon","props","_jsx","svg","width","height","viewBox","fill","xmlns","rect","x","y","rx"],"mappings":";;;;AAEO,MAAMA,WAAW,CAACC,KAAAA,GAAAA;AACvB,IAAA,qBACEC,cAACC,CAAAA,KAAAA,EAAAA;QACCC,KAAM,EAAA,IAAA;QACNC,MAAO,EAAA,IAAA;QACPC,OAAQ,EAAA,WAAA;QACRC,IAAK,EAAA,MAAA;QACLC,KAAM,EAAA,4BAAA;AACL,QAAA,GAAGP,KAAK;AAET,QAAA,QAAA,gBAAAC,cAACO,CAAAA,MAAAA,EAAAA;YAAKC,CAAE,EAAA,GAAA;YAAIC,CAAE,EAAA,GAAA;YAAIP,KAAM,EAAA,IAAA;YAAKC,MAAO,EAAA,IAAA;YAAKO,EAAG,EAAA,GAAA;YAAIL,IAAK,EAAA;;;AAG3D;;;;"}
1
+ {"version":3,"file":"StopIcon.js","sources":["../../../../../../admin/src/components/AIChat/components/icons/StopIcon.tsx"],"sourcesContent":["interface StopIconProps extends React.SVGProps<SVGSVGElement> {}\n\nexport const StopIcon = (props: StopIconProps) => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <rect x=\"2\" y=\"2\" width=\"11\" height=\"11\" rx=\"2\" fill=\"white\" />\n </svg>\n );\n};\n"],"names":["StopIcon","props","_jsx","svg","width","height","viewBox","fill","xmlns","rect","x","y","rx"],"mappings":";;;;AAEO,MAAMA,WAAW,CAACC,KAAAA,GAAAA;AACvB,IAAA,qBACEC,cAAA,CAACC,KAAAA,EAAAA;QACCC,KAAAA,EAAM,IAAA;QACNC,MAAAA,EAAO,IAAA;QACPC,OAAAA,EAAQ,WAAA;QACRC,IAAAA,EAAK,MAAA;QACLC,KAAAA,EAAM,4BAAA;AACL,QAAA,GAAGP,KAAK;AAET,QAAA,QAAA,gBAAAC,cAAA,CAACO,MAAAA,EAAAA;YAAKC,CAAAA,EAAE,GAAA;YAAIC,CAAAA,EAAE,GAAA;YAAIP,KAAAA,EAAM,IAAA;YAAKC,MAAAA,EAAO,IAAA;YAAKO,EAAAA,EAAG,GAAA;YAAIL,IAAAA,EAAK;;;AAG3D;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"StopIcon.mjs","sources":["../../../../../../admin/src/components/AIChat/components/icons/StopIcon.tsx"],"sourcesContent":["interface StopIconProps extends React.SVGProps<SVGSVGElement> {}\n\nexport const StopIcon = (props: StopIconProps) => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <rect x=\"2\" y=\"2\" width=\"11\" height=\"11\" rx=\"2\" fill=\"white\" />\n </svg>\n );\n};\n"],"names":["StopIcon","props","_jsx","svg","width","height","viewBox","fill","xmlns","rect","x","y","rx"],"mappings":";;AAEO,MAAMA,WAAW,CAACC,KAAAA,GAAAA;AACvB,IAAA,qBACEC,GAACC,CAAAA,KAAAA,EAAAA;QACCC,KAAM,EAAA,IAAA;QACNC,MAAO,EAAA,IAAA;QACPC,OAAQ,EAAA,WAAA;QACRC,IAAK,EAAA,MAAA;QACLC,KAAM,EAAA,4BAAA;AACL,QAAA,GAAGP,KAAK;AAET,QAAA,QAAA,gBAAAC,GAACO,CAAAA,MAAAA,EAAAA;YAAKC,CAAE,EAAA,GAAA;YAAIC,CAAE,EAAA,GAAA;YAAIP,KAAM,EAAA,IAAA;YAAKC,MAAO,EAAA,IAAA;YAAKO,EAAG,EAAA,GAAA;YAAIL,IAAK,EAAA;;;AAG3D;;;;"}
1
+ {"version":3,"file":"StopIcon.mjs","sources":["../../../../../../admin/src/components/AIChat/components/icons/StopIcon.tsx"],"sourcesContent":["interface StopIconProps extends React.SVGProps<SVGSVGElement> {}\n\nexport const StopIcon = (props: StopIconProps) => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <rect x=\"2\" y=\"2\" width=\"11\" height=\"11\" rx=\"2\" fill=\"white\" />\n </svg>\n );\n};\n"],"names":["StopIcon","props","_jsx","svg","width","height","viewBox","fill","xmlns","rect","x","y","rx"],"mappings":";;AAEO,MAAMA,WAAW,CAACC,KAAAA,GAAAA;AACvB,IAAA,qBACEC,GAAA,CAACC,KAAAA,EAAAA;QACCC,KAAAA,EAAM,IAAA;QACNC,MAAAA,EAAO,IAAA;QACPC,OAAAA,EAAQ,WAAA;QACRC,IAAAA,EAAK,MAAA;QACLC,KAAAA,EAAM,4BAAA;AACL,QAAA,GAAGP,KAAK;AAET,QAAA,QAAA,gBAAAC,GAAA,CAACO,MAAAA,EAAAA;YAAKC,CAAAA,EAAE,GAAA;YAAIC,CAAAA,EAAE,GAAA;YAAIP,KAAAA,EAAM,IAAA;YAAKC,MAAAA,EAAO,IAAA;YAAKO,EAAAA,EAAG,GAAA;YAAIL,IAAAA,EAAK;;;AAG3D;;;;"}