@strapi/content-type-builder 5.25.0 → 5.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/AIChat/Chat.js +435 -0
- package/dist/admin/components/AIChat/Chat.js.map +1 -0
- package/dist/admin/components/AIChat/Chat.mjs +433 -0
- package/dist/admin/components/AIChat/Chat.mjs.map +1 -0
- package/dist/admin/components/AIChat/FeedbackModal.js +237 -0
- package/dist/admin/components/AIChat/FeedbackModal.js.map +1 -0
- package/dist/admin/components/AIChat/FeedbackModal.mjs +233 -0
- package/dist/admin/components/AIChat/FeedbackModal.mjs.map +1 -0
- package/dist/admin/components/AIChat/UploadCodeModal.js +427 -0
- package/dist/admin/components/AIChat/UploadCodeModal.js.map +1 -0
- package/dist/admin/components/AIChat/UploadCodeModal.mjs +423 -0
- package/dist/admin/components/AIChat/UploadCodeModal.mjs.map +1 -0
- package/dist/admin/components/AIChat/UploadFigmaModal.js +377 -0
- package/dist/admin/components/AIChat/UploadFigmaModal.js.map +1 -0
- package/dist/admin/components/AIChat/UploadFigmaModal.mjs +373 -0
- package/dist/admin/components/AIChat/UploadFigmaModal.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/Alert.js +46 -0
- package/dist/admin/components/AIChat/components/Alert.js.map +1 -0
- package/dist/admin/components/AIChat/components/Alert.mjs +44 -0
- package/dist/admin/components/AIChat/components/Alert.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/AnimatedBox.js +34 -0
- package/dist/admin/components/AIChat/components/AnimatedBox.js.map +1 -0
- package/dist/admin/components/AIChat/components/AnimatedBox.mjs +32 -0
- package/dist/admin/components/AIChat/components/AnimatedBox.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/Attachments/AttachmentPreview.js +92 -0
- package/dist/admin/components/AIChat/components/Attachments/AttachmentPreview.js.map +1 -0
- package/dist/admin/components/AIChat/components/Attachments/AttachmentPreview.mjs +90 -0
- package/dist/admin/components/AIChat/components/Attachments/AttachmentPreview.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/Attachments/components/Attachment.js +100 -0
- package/dist/admin/components/AIChat/components/Attachments/components/Attachment.js.map +1 -0
- package/dist/admin/components/AIChat/components/Attachments/components/Attachment.mjs +97 -0
- package/dist/admin/components/AIChat/components/Attachments/components/Attachment.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/Base64Image.js +127 -0
- package/dist/admin/components/AIChat/components/Base64Image.js.map +1 -0
- package/dist/admin/components/AIChat/components/Base64Image.mjs +125 -0
- package/dist/admin/components/AIChat/components/Base64Image.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/Collapsible.js +71 -0
- package/dist/admin/components/AIChat/components/Collapsible.js.map +1 -0
- package/dist/admin/components/AIChat/components/Collapsible.mjs +66 -0
- package/dist/admin/components/AIChat/components/Collapsible.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/Dropzone.js +172 -0
- package/dist/admin/components/AIChat/components/Dropzone.js.map +1 -0
- package/dist/admin/components/AIChat/components/Dropzone.mjs +167 -0
- package/dist/admin/components/AIChat/components/Dropzone.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/FloatingPanel.js +166 -0
- package/dist/admin/components/AIChat/components/FloatingPanel.js.map +1 -0
- package/dist/admin/components/AIChat/components/FloatingPanel.mjs +163 -0
- package/dist/admin/components/AIChat/components/FloatingPanel.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/FullScreenImage.js +190 -0
- package/dist/admin/components/AIChat/components/FullScreenImage.js.map +1 -0
- package/dist/admin/components/AIChat/components/FullScreenImage.mjs +187 -0
- package/dist/admin/components/AIChat/components/FullScreenImage.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/ImagePreview.js +87 -0
- package/dist/admin/components/AIChat/components/ImagePreview.js.map +1 -0
- package/dist/admin/components/AIChat/components/ImagePreview.mjs +85 -0
- package/dist/admin/components/AIChat/components/ImagePreview.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/Input.js +126 -0
- package/dist/admin/components/AIChat/components/Input.js.map +1 -0
- package/dist/admin/components/AIChat/components/Input.mjs +121 -0
- package/dist/admin/components/AIChat/components/Input.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/Messages/Marker.js +138 -0
- package/dist/admin/components/AIChat/components/Messages/Marker.js.map +1 -0
- package/dist/admin/components/AIChat/components/Messages/Marker.mjs +136 -0
- package/dist/admin/components/AIChat/components/Messages/Marker.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/Messages/Message.js +214 -0
- package/dist/admin/components/AIChat/components/Messages/Message.js.map +1 -0
- package/dist/admin/components/AIChat/components/Messages/Message.mjs +212 -0
- package/dist/admin/components/AIChat/components/Messages/Message.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/ResizableTextArea.js +78 -0
- package/dist/admin/components/AIChat/components/ResizableTextArea.js.map +1 -0
- package/dist/admin/components/AIChat/components/ResizableTextArea.mjs +76 -0
- package/dist/admin/components/AIChat/components/ResizableTextArea.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/SimpleMenu.js +60 -0
- package/dist/admin/components/AIChat/components/SimpleMenu.js.map +1 -0
- package/dist/admin/components/AIChat/components/SimpleMenu.mjs +35 -0
- package/dist/admin/components/AIChat/components/SimpleMenu.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/StepModal.js +175 -0
- package/dist/admin/components/AIChat/components/StepModal.js.map +1 -0
- package/dist/admin/components/AIChat/components/StepModal.mjs +171 -0
- package/dist/admin/components/AIChat/components/StepModal.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/animations.js +67 -0
- package/dist/admin/components/AIChat/components/animations.js.map +1 -0
- package/dist/admin/components/AIChat/components/animations.mjs +65 -0
- package/dist/admin/components/AIChat/components/animations.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/icons/FigmaIcon.js +50 -0
- package/dist/admin/components/AIChat/components/icons/FigmaIcon.js.map +1 -0
- package/dist/admin/components/AIChat/components/icons/FigmaIcon.mjs +48 -0
- package/dist/admin/components/AIChat/components/icons/FigmaIcon.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/icons/StopIcon.js +25 -0
- package/dist/admin/components/AIChat/components/icons/StopIcon.js.map +1 -0
- package/dist/admin/components/AIChat/components/icons/StopIcon.mjs +23 -0
- package/dist/admin/components/AIChat/components/icons/StopIcon.mjs.map +1 -0
- package/dist/admin/components/AIChat/hooks/useAIFetch.js +107 -0
- package/dist/admin/components/AIChat/hooks/useAIFetch.js.map +1 -0
- package/dist/admin/components/AIChat/hooks/useAIFetch.mjs +96 -0
- package/dist/admin/components/AIChat/hooks/useAIFetch.mjs.map +1 -0
- package/dist/admin/components/AIChat/hooks/useAttachments.js +152 -0
- package/dist/admin/components/AIChat/hooks/useAttachments.js.map +1 -0
- package/dist/admin/components/AIChat/hooks/useAttachments.mjs +150 -0
- package/dist/admin/components/AIChat/hooks/useAttachments.mjs.map +1 -0
- package/dist/admin/components/AIChat/hooks/useChatTitle.js +47 -0
- package/dist/admin/components/AIChat/hooks/useChatTitle.js.map +1 -0
- package/dist/admin/components/AIChat/hooks/useChatTitle.mjs +45 -0
- package/dist/admin/components/AIChat/hooks/useChatTitle.mjs.map +1 -0
- package/dist/admin/components/AIChat/hooks/useCodeUpload.js +212 -0
- package/dist/admin/components/AIChat/hooks/useCodeUpload.js.map +1 -0
- package/dist/admin/components/AIChat/hooks/useCodeUpload.mjs +207 -0
- package/dist/admin/components/AIChat/hooks/useCodeUpload.mjs.map +1 -0
- package/dist/admin/components/AIChat/hooks/useFeedback.js +76 -0
- package/dist/admin/components/AIChat/hooks/useFeedback.js.map +1 -0
- package/dist/admin/components/AIChat/hooks/useFeedback.mjs +74 -0
- package/dist/admin/components/AIChat/hooks/useFeedback.mjs.map +1 -0
- package/dist/admin/components/AIChat/hooks/useFigmaUpload.js +206 -0
- package/dist/admin/components/AIChat/hooks/useFigmaUpload.js.map +1 -0
- package/dist/admin/components/AIChat/hooks/useFigmaUpload.mjs +200 -0
- package/dist/admin/components/AIChat/hooks/useFigmaUpload.mjs.map +1 -0
- package/dist/admin/components/AIChat/hooks/useLastSeenSchemas.js +115 -0
- package/dist/admin/components/AIChat/hooks/useLastSeenSchemas.js.map +1 -0
- package/dist/admin/components/AIChat/hooks/useLastSeenSchemas.mjs +113 -0
- package/dist/admin/components/AIChat/hooks/useLastSeenSchemas.mjs.map +1 -0
- package/dist/admin/components/AIChat/hooks/useTranslations.js +19 -0
- package/dist/admin/components/AIChat/hooks/useTranslations.js.map +1 -0
- package/dist/admin/components/AIChat/hooks/useTranslations.mjs +17 -0
- package/dist/admin/components/AIChat/hooks/useTranslations.mjs.map +1 -0
- package/dist/admin/components/AIChat/lib/aiClient.js +168 -0
- package/dist/admin/components/AIChat/lib/aiClient.js.map +1 -0
- package/dist/admin/components/AIChat/lib/aiClient.mjs +161 -0
- package/dist/admin/components/AIChat/lib/aiClient.mjs.map +1 -0
- package/dist/admin/components/AIChat/lib/constants.js +16 -0
- package/dist/admin/components/AIChat/lib/constants.js.map +1 -0
- package/dist/admin/components/AIChat/lib/constants.mjs +10 -0
- package/dist/admin/components/AIChat/lib/constants.mjs.map +1 -0
- package/dist/admin/components/AIChat/lib/misc.js +8 -0
- package/dist/admin/components/AIChat/lib/misc.js.map +1 -0
- package/dist/admin/components/AIChat/lib/misc.mjs +6 -0
- package/dist/admin/components/AIChat/lib/misc.mjs.map +1 -0
- package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.js +46 -0
- package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.js.map +1 -0
- package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.mjs +44 -0
- package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.mjs.map +1 -0
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.js +151 -0
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.js.map +1 -0
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs +148 -0
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs.map +1 -0
- package/dist/admin/components/AIChat/providers/ChatProvider.js +191 -0
- package/dist/admin/components/AIChat/providers/ChatProvider.js.map +1 -0
- package/dist/admin/components/AIChat/providers/ChatProvider.mjs +187 -0
- package/dist/admin/components/AIChat/providers/ChatProvider.mjs.map +1 -0
- package/dist/admin/components/AIChat/providers/SchemaProvider.js +90 -0
- package/dist/admin/components/AIChat/providers/SchemaProvider.js.map +1 -0
- package/dist/admin/components/AIChat/providers/SchemaProvider.mjs +88 -0
- package/dist/admin/components/AIChat/providers/SchemaProvider.mjs.map +1 -0
- package/dist/admin/components/ComponentList.js +1 -0
- package/dist/admin/components/ComponentList.js.map +1 -1
- package/dist/admin/components/ComponentList.mjs +1 -0
- package/dist/admin/components/ComponentList.mjs.map +1 -1
- package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.js +165 -161
- package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.js.map +1 -1
- package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.mjs +165 -161
- package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.mjs.map +1 -1
- package/dist/admin/components/DataManager/DataManagerContext.js.map +1 -1
- package/dist/admin/components/DataManager/DataManagerContext.mjs.map +1 -1
- package/dist/admin/components/DataManager/reducer.js +48 -6
- package/dist/admin/components/DataManager/reducer.js.map +1 -1
- package/dist/admin/components/DataManager/reducer.mjs +48 -6
- package/dist/admin/components/DataManager/reducer.mjs.map +1 -1
- package/dist/admin/components/FormModal/utils/canEditContentType.js.map +1 -1
- package/dist/admin/components/FormModal/utils/canEditContentType.mjs.map +1 -1
- package/dist/admin/pages/App/index.js +60 -29
- package/dist/admin/pages/App/index.js.map +1 -1
- package/dist/admin/pages/App/index.mjs +62 -31
- package/dist/admin/pages/App/index.mjs.map +1 -1
- package/dist/admin/pages/ListView/EmptyState.js +75 -9
- package/dist/admin/pages/ListView/EmptyState.js.map +1 -1
- package/dist/admin/pages/ListView/EmptyState.mjs +77 -11
- package/dist/admin/pages/ListView/EmptyState.mjs.map +1 -1
- package/dist/admin/src/components/AIChat/Chat.d.ts +2 -0
- package/dist/admin/src/components/AIChat/FeedbackModal.d.ts +13 -0
- package/dist/admin/src/components/AIChat/UploadCodeModal.d.ts +12 -0
- package/dist/admin/src/components/AIChat/UploadFigmaModal.d.ts +12 -0
- package/dist/admin/src/components/AIChat/components/Alert.d.ts +6 -0
- package/dist/admin/src/components/AIChat/components/AnimatedBox.d.ts +13 -0
- package/dist/admin/src/components/AIChat/components/Attachments/AttachmentPreview.d.ts +9 -0
- package/dist/admin/src/components/AIChat/components/Attachments/components/Attachment.d.ts +27 -0
- package/dist/admin/src/components/AIChat/components/Base64Image.d.ts +9 -0
- package/dist/admin/src/components/AIChat/components/Collapsible.d.ts +18 -0
- package/dist/admin/src/components/AIChat/components/Dropzone.d.ts +35 -0
- package/dist/admin/src/components/AIChat/components/FloatingPanel.d.ts +34 -0
- package/dist/admin/src/components/AIChat/components/FullScreenImage.d.ts +20 -0
- package/dist/admin/src/components/AIChat/components/ImagePreview.d.ts +8 -0
- package/dist/admin/src/components/AIChat/components/ImagePreviewGroup.d.ts +7 -0
- package/dist/admin/src/components/AIChat/components/Input.d.ts +43 -0
- package/dist/admin/src/components/AIChat/components/Messages/Marker.d.ts +2 -0
- package/dist/admin/src/components/AIChat/components/Messages/Message.d.ts +5 -0
- package/dist/admin/src/components/AIChat/components/ResizableTextArea.d.ts +9 -0
- package/dist/admin/src/components/AIChat/components/SimpleMenu.d.ts +32 -0
- package/dist/admin/src/components/AIChat/components/StepModal.d.ts +37 -0
- package/dist/admin/src/components/AIChat/components/animations.d.ts +8 -0
- package/dist/admin/src/components/AIChat/components/icons/FigmaIcon.d.ts +5 -0
- package/dist/admin/src/components/AIChat/components/icons/StopIcon.d.ts +5 -0
- package/dist/admin/src/components/AIChat/hooks/useAIFetch.d.ts +147 -0
- package/dist/admin/src/components/AIChat/hooks/useAttachments.d.ts +8 -0
- package/dist/admin/src/components/AIChat/hooks/useChatTitle.d.ts +13 -0
- package/dist/admin/src/components/AIChat/hooks/useCodeUpload.d.ts +31 -0
- package/dist/admin/src/components/AIChat/hooks/useFeedback.d.ts +7 -0
- package/dist/admin/src/components/AIChat/hooks/useFigmaUpload.d.ts +61 -0
- package/dist/admin/src/components/AIChat/hooks/useLastSeenSchemas.d.ts +10 -0
- package/dist/admin/src/components/AIChat/hooks/useTranslations.d.ts +3 -0
- package/dist/admin/src/components/AIChat/lib/aiClient.d.ts +32 -0
- package/dist/admin/src/components/AIChat/lib/constants.d.ts +12 -0
- package/dist/admin/src/components/AIChat/lib/fileToAttachment.d.ts +2 -0
- package/dist/admin/src/components/AIChat/lib/misc.d.ts +1 -0
- package/dist/admin/src/components/AIChat/lib/transforms/schemas/fromCTB.d.ts +3 -0
- package/dist/admin/src/components/AIChat/lib/transforms/schemas/toCTB.d.ts +16 -0
- package/dist/admin/src/components/AIChat/lib/types/annotations.d.ts +19 -0
- package/dist/admin/src/components/AIChat/lib/types/attachments.d.ts +15 -0
- package/dist/admin/src/components/AIChat/lib/types/feedback.d.ts +1 -0
- package/dist/admin/src/components/AIChat/lib/types/messages.d.ts +26 -0
- package/dist/admin/src/components/AIChat/lib/types/schema.d.ts +20 -0
- package/dist/admin/src/components/AIChat/providers/ChatProvider.d.ts +30 -0
- package/dist/admin/src/components/AIChat/providers/SchemaProvider.d.ts +10 -0
- package/dist/admin/src/components/ComponentList.d.ts +1 -1
- package/dist/admin/src/components/DataManager/DataManagerContext.d.ts +1 -1
- package/dist/admin/translations/ar.json.js +187 -2
- package/dist/admin/translations/ar.json.js.map +1 -1
- package/dist/admin/translations/ar.json.mjs +187 -3
- package/dist/admin/translations/ar.json.mjs.map +1 -1
- package/dist/admin/translations/de.json.js +42 -7
- package/dist/admin/translations/de.json.js.map +1 -1
- package/dist/admin/translations/de.json.mjs +42 -7
- package/dist/admin/translations/de.json.mjs.map +1 -1
- package/dist/admin/translations/en.json.js +53 -2
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +53 -2
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/es.json.js +37 -15
- package/dist/admin/translations/es.json.js.map +1 -1
- package/dist/admin/translations/es.json.mjs +37 -15
- package/dist/admin/translations/es.json.mjs.map +1 -1
- package/dist/admin/translations/fr.json.js +165 -3
- package/dist/admin/translations/fr.json.js.map +1 -1
- package/dist/admin/translations/fr.json.mjs +165 -4
- package/dist/admin/translations/fr.json.mjs.map +1 -1
- package/dist/admin/translations/id.json.js +93 -23
- package/dist/admin/translations/id.json.js.map +1 -1
- package/dist/admin/translations/id.json.mjs +93 -23
- package/dist/admin/translations/id.json.mjs.map +1 -1
- package/dist/admin/translations/it.json.js +75 -6
- package/dist/admin/translations/it.json.js.map +1 -1
- package/dist/admin/translations/it.json.mjs +75 -6
- package/dist/admin/translations/it.json.mjs.map +1 -1
- package/dist/admin/translations/ja.json.js +191 -5
- package/dist/admin/translations/ja.json.js.map +1 -1
- package/dist/admin/translations/ja.json.mjs +191 -6
- package/dist/admin/translations/ja.json.mjs.map +1 -1
- package/dist/admin/translations/ko.json.js +70 -16
- package/dist/admin/translations/ko.json.js.map +1 -1
- package/dist/admin/translations/ko.json.mjs +70 -16
- package/dist/admin/translations/ko.json.mjs.map +1 -1
- package/dist/admin/translations/ms.json.js +104 -31
- package/dist/admin/translations/ms.json.js.map +1 -1
- package/dist/admin/translations/ms.json.mjs +104 -31
- package/dist/admin/translations/ms.json.mjs.map +1 -1
- package/dist/admin/translations/nl.json.js +95 -15
- package/dist/admin/translations/nl.json.js.map +1 -1
- package/dist/admin/translations/nl.json.mjs +95 -15
- package/dist/admin/translations/nl.json.mjs.map +1 -1
- package/dist/admin/translations/pl.json.js +55 -11
- package/dist/admin/translations/pl.json.js.map +1 -1
- package/dist/admin/translations/pl.json.mjs +55 -11
- package/dist/admin/translations/pl.json.mjs.map +1 -1
- package/dist/admin/translations/pt-BR.json.js +54 -10
- package/dist/admin/translations/pt-BR.json.js.map +1 -1
- package/dist/admin/translations/pt-BR.json.mjs +54 -10
- package/dist/admin/translations/pt-BR.json.mjs.map +1 -1
- package/dist/admin/translations/pt.json.js +187 -2
- package/dist/admin/translations/pt.json.js.map +1 -1
- package/dist/admin/translations/pt.json.mjs +187 -3
- package/dist/admin/translations/pt.json.mjs.map +1 -1
- package/dist/admin/translations/ru.json.js +26 -1
- package/dist/admin/translations/ru.json.js.map +1 -1
- package/dist/admin/translations/ru.json.mjs +26 -1
- package/dist/admin/translations/ru.json.mjs.map +1 -1
- package/dist/admin/translations/sk.json.js +21 -1
- package/dist/admin/translations/sk.json.js.map +1 -1
- package/dist/admin/translations/sk.json.mjs +21 -1
- package/dist/admin/translations/sk.json.mjs.map +1 -1
- package/dist/admin/translations/sv.json.js +21 -1
- package/dist/admin/translations/sv.json.js.map +1 -1
- package/dist/admin/translations/sv.json.mjs +21 -1
- package/dist/admin/translations/sv.json.mjs.map +1 -1
- package/dist/admin/translations/th.json.js +21 -1
- package/dist/admin/translations/th.json.js.map +1 -1
- package/dist/admin/translations/th.json.mjs +21 -1
- package/dist/admin/translations/th.json.mjs.map +1 -1
- package/dist/admin/translations/tr.json.js +21 -1
- package/dist/admin/translations/tr.json.js.map +1 -1
- package/dist/admin/translations/tr.json.mjs +21 -1
- package/dist/admin/translations/tr.json.mjs.map +1 -1
- package/dist/admin/translations/uk.json.js +21 -2
- package/dist/admin/translations/uk.json.js.map +1 -1
- package/dist/admin/translations/uk.json.mjs +21 -2
- package/dist/admin/translations/uk.json.mjs.map +1 -1
- package/dist/admin/translations/zh-Hans.json.js +222 -133
- package/dist/admin/translations/zh-Hans.json.js.map +1 -1
- package/dist/admin/translations/zh-Hans.json.mjs +222 -133
- package/dist/admin/translations/zh-Hans.json.mjs.map +1 -1
- package/dist/admin/translations/zh.json.js +21 -1
- package/dist/admin/translations/zh.json.js.map +1 -1
- package/dist/admin/translations/zh.json.mjs +21 -1
- package/dist/admin/translations/zh.json.mjs.map +1 -1
- package/dist/server/index.js +2 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +2 -0
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/register.js +98 -0
- package/dist/server/register.js.map +1 -0
- package/dist/server/register.mjs +96 -0
- package/dist/server/register.mjs.map +1 -0
- package/dist/server/src/controllers/ai/auth.d.ts +1 -0
- package/dist/server/src/controllers/ai/auth.d.ts.map +1 -0
- package/dist/server/src/controllers/ai/index.d.ts +1 -0
- package/dist/server/src/controllers/ai/index.d.ts.map +1 -0
- package/dist/server/src/index.d.ts +1 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/register.d.ts +11 -0
- package/dist/server/src/register.d.ts.map +1 -0
- package/package.json +12 -5
- package/dist/admin/components/DataManager/utils/formatSchemas.js +0 -21
- package/dist/admin/components/DataManager/utils/formatSchemas.js.map +0 -1
- package/dist/admin/components/DataManager/utils/formatSchemas.mjs +0 -18
- package/dist/admin/components/DataManager/utils/formatSchemas.mjs.map +0 -1
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
6
|
+
var designSystem = require('@strapi/design-system');
|
|
7
|
+
var styledComponents = require('styled-components');
|
|
8
|
+
var useFeedback = require('./hooks/useFeedback.js');
|
|
9
|
+
var useTranslations = require('./hooks/useTranslations.js');
|
|
10
|
+
|
|
11
|
+
const FeedbackModalContext = /*#__PURE__*/ React.createContext({
|
|
12
|
+
isFeedbackModalOpen: false,
|
|
13
|
+
currentMessageId: null,
|
|
14
|
+
openFeedbackModal: ()=>{},
|
|
15
|
+
closeFeedbackModal: ()=>{}
|
|
16
|
+
});
|
|
17
|
+
const useFeedbackModal = ()=>React.useContext(FeedbackModalContext);
|
|
18
|
+
const FeedbackProvider = ({ children })=>{
|
|
19
|
+
const [isFeedbackModalOpen, setIsFeedbackModalOpen] = React.useState(false);
|
|
20
|
+
const [currentMessageId, setCurrentMessageId] = React.useState(null);
|
|
21
|
+
const openFeedbackModal = (messageId)=>{
|
|
22
|
+
setCurrentMessageId(messageId);
|
|
23
|
+
setIsFeedbackModalOpen(true);
|
|
24
|
+
};
|
|
25
|
+
const closeFeedbackModal = ()=>{
|
|
26
|
+
setIsFeedbackModalOpen(false);
|
|
27
|
+
setCurrentMessageId(null);
|
|
28
|
+
};
|
|
29
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(FeedbackModalContext.Provider, {
|
|
30
|
+
value: {
|
|
31
|
+
isFeedbackModalOpen,
|
|
32
|
+
currentMessageId,
|
|
33
|
+
openFeedbackModal,
|
|
34
|
+
closeFeedbackModal
|
|
35
|
+
},
|
|
36
|
+
children: [
|
|
37
|
+
isFeedbackModalOpen && currentMessageId && /*#__PURE__*/ jsxRuntime.jsx(FeedbackModal, {}),
|
|
38
|
+
children
|
|
39
|
+
]
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
const FeedbackOptionWrapper = styledComponents.styled(designSystem.Flex)`
|
|
43
|
+
&:hover {
|
|
44
|
+
background-color: ${({ theme })=>theme.colors.neutral100};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
&.selected {
|
|
48
|
+
background-color: ${({ theme })=>theme.colors.primary100};
|
|
49
|
+
border-color: ${({ theme })=>theme.colors.primary200};
|
|
50
|
+
}
|
|
51
|
+
`;
|
|
52
|
+
const FeedbackOption = ({ id, label, selected, onClick })=>{
|
|
53
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(FeedbackOptionWrapper, {
|
|
54
|
+
className: selected ? 'selected' : '',
|
|
55
|
+
justifyContent: "space-between",
|
|
56
|
+
hasRadius: true,
|
|
57
|
+
width: "100%",
|
|
58
|
+
cursor: "pointer",
|
|
59
|
+
borderColor: "neutral200",
|
|
60
|
+
padding: 3,
|
|
61
|
+
gap: 3,
|
|
62
|
+
onClick: ()=>onClick(id),
|
|
63
|
+
children: [
|
|
64
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
65
|
+
variant: "omega",
|
|
66
|
+
fontWeight: "bold",
|
|
67
|
+
children: label
|
|
68
|
+
}),
|
|
69
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Checkbox, {
|
|
70
|
+
name: `feedback-${id}`,
|
|
71
|
+
value: id,
|
|
72
|
+
checked: selected,
|
|
73
|
+
onChange: ()=>onClick(id)
|
|
74
|
+
})
|
|
75
|
+
]
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
/* -------------------------------------------------------------------------------------------------
|
|
79
|
+
* Modal
|
|
80
|
+
* -----------------------------------------------------------------------------------------------*/ const FeedbackModal = ()=>{
|
|
81
|
+
const [feedbackText, setFeedbackText] = React.useState('');
|
|
82
|
+
const [selectedReasons, setSelectedReasons] = React.useState([]);
|
|
83
|
+
const { t } = useTranslations.useTranslations();
|
|
84
|
+
const { toggleNotification } = strapiAdmin.useNotification();
|
|
85
|
+
const { closeFeedbackModal, currentMessageId } = useFeedbackModal();
|
|
86
|
+
const { downvoteMessage, isPending } = useFeedback.useFeedback();
|
|
87
|
+
const feedbackReasons = [
|
|
88
|
+
{
|
|
89
|
+
id: 'invalid_schema',
|
|
90
|
+
label: t('chat.feedback.reason.invalid_schema', 'Invalid schema')
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
id: 'bad_recommendation',
|
|
94
|
+
label: t('chat.feedback.reason.bad_recommendation', 'Bad recommendation')
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
id: 'slow',
|
|
98
|
+
label: t('chat.feedback.reason.slow', 'Slow')
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
id: 'instructions_ignored',
|
|
102
|
+
label: t('chat.feedback.reason.instructions_ignored', 'Instructions ignored')
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
id: 'being_lazy',
|
|
106
|
+
label: t('chat.feedback.reason.being_lazy', 'Being lazy')
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
id: 'other',
|
|
110
|
+
label: t('chat.feedback.reason.other', 'Other')
|
|
111
|
+
}
|
|
112
|
+
];
|
|
113
|
+
const handleReasonSelect = (id)=>{
|
|
114
|
+
setSelectedReasons((prevSelected)=>{
|
|
115
|
+
// If already selected, remove it
|
|
116
|
+
if (prevSelected.includes(id)) {
|
|
117
|
+
return prevSelected.filter((reasonId)=>reasonId !== id);
|
|
118
|
+
}
|
|
119
|
+
// Otherwise add it
|
|
120
|
+
return [
|
|
121
|
+
...prevSelected,
|
|
122
|
+
id
|
|
123
|
+
];
|
|
124
|
+
});
|
|
125
|
+
};
|
|
126
|
+
const handleSubmitFeedback = async ()=>{
|
|
127
|
+
if (selectedReasons.length === 0) return;
|
|
128
|
+
try {
|
|
129
|
+
await downvoteMessage(currentMessageId, feedbackText, selectedReasons);
|
|
130
|
+
setFeedbackText('');
|
|
131
|
+
setSelectedReasons([]);
|
|
132
|
+
closeFeedbackModal();
|
|
133
|
+
} catch (error) {
|
|
134
|
+
toggleNotification({
|
|
135
|
+
type: 'danger',
|
|
136
|
+
message: t('chat.feedback.error', 'An error occurred while submitting your feedback')
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Root, {
|
|
141
|
+
open: true,
|
|
142
|
+
onOpenChange: closeFeedbackModal,
|
|
143
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Modal.Content, {
|
|
144
|
+
children: [
|
|
145
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Header, {
|
|
146
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
147
|
+
variant: "omega",
|
|
148
|
+
fontWeight: "bold",
|
|
149
|
+
children: t('chat.feedback.title', 'Give feedback')
|
|
150
|
+
})
|
|
151
|
+
}),
|
|
152
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Body, {
|
|
153
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
154
|
+
direction: "column",
|
|
155
|
+
alignItems: "start",
|
|
156
|
+
gap: 6,
|
|
157
|
+
width: "100%",
|
|
158
|
+
children: [
|
|
159
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
160
|
+
direction: "column",
|
|
161
|
+
alignItems: "start",
|
|
162
|
+
gap: 2,
|
|
163
|
+
children: [
|
|
164
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
165
|
+
variant: "beta",
|
|
166
|
+
fontWeight: "bold",
|
|
167
|
+
children: t('chat.feedback.title', 'Give feedback')
|
|
168
|
+
}),
|
|
169
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
170
|
+
variant: "omega",
|
|
171
|
+
children: t('chat.feedback.subtitle', 'Provide additional feedback on this message. Select all that apply.')
|
|
172
|
+
})
|
|
173
|
+
]
|
|
174
|
+
}),
|
|
175
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Root, {
|
|
176
|
+
width: "100%",
|
|
177
|
+
gap: 2,
|
|
178
|
+
children: feedbackReasons.map((reason)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
|
|
179
|
+
col: 6,
|
|
180
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(FeedbackOption, {
|
|
181
|
+
id: reason.id,
|
|
182
|
+
label: reason.label,
|
|
183
|
+
selected: selectedReasons.includes(reason.id),
|
|
184
|
+
onClick: handleReasonSelect
|
|
185
|
+
}, reason.id)
|
|
186
|
+
}, reason.id))
|
|
187
|
+
}),
|
|
188
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
189
|
+
direction: "column",
|
|
190
|
+
gap: 2,
|
|
191
|
+
width: "100%",
|
|
192
|
+
alignItems: "start",
|
|
193
|
+
children: [
|
|
194
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
195
|
+
variant: "omega",
|
|
196
|
+
children: t('chat.feedback.comment.label', 'How can we improve? (optional)')
|
|
197
|
+
}),
|
|
198
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
199
|
+
width: "100%",
|
|
200
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Textarea, {
|
|
201
|
+
name: "feedback",
|
|
202
|
+
placeholder: t('chat.feedback.placeholder', 'Your feedback...'),
|
|
203
|
+
onChange: (e)=>setFeedbackText(e.target.value),
|
|
204
|
+
value: feedbackText
|
|
205
|
+
})
|
|
206
|
+
})
|
|
207
|
+
]
|
|
208
|
+
})
|
|
209
|
+
]
|
|
210
|
+
})
|
|
211
|
+
}),
|
|
212
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Modal.Footer, {
|
|
213
|
+
children: [
|
|
214
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Close, {
|
|
215
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
|
|
216
|
+
variant: "tertiary",
|
|
217
|
+
onClick: closeFeedbackModal,
|
|
218
|
+
children: t('form.button.cancel', 'Cancel')
|
|
219
|
+
})
|
|
220
|
+
}),
|
|
221
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
|
|
222
|
+
onClick: handleSubmitFeedback,
|
|
223
|
+
loading: isPending,
|
|
224
|
+
disabled: selectedReasons.length === 0,
|
|
225
|
+
children: t('form.button.submit', 'Submit')
|
|
226
|
+
})
|
|
227
|
+
]
|
|
228
|
+
})
|
|
229
|
+
]
|
|
230
|
+
})
|
|
231
|
+
});
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
exports.FeedbackModal = FeedbackModal;
|
|
235
|
+
exports.FeedbackProvider = FeedbackProvider;
|
|
236
|
+
exports.useFeedbackModal = useFeedbackModal;
|
|
237
|
+
//# sourceMappingURL=FeedbackModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeedbackModal.js","sources":["../../../../admin/src/components/AIChat/FeedbackModal.tsx"],"sourcesContent":["import * as React from 'react';\nimport { createContext, useContext, useState } from 'react';\n\nimport { useNotification } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n Typography,\n Textarea,\n Button,\n Grid,\n Checkbox,\n Modal,\n} from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { useFeedback } from './hooks/useFeedback';\nimport { useTranslations } from './hooks/useTranslations';\n\nimport type { FeedbackReasonIds } from './lib/types/feedback';\n\n/* -------------------------------------------------------------------------------------------------\n * Provider\n * -----------------------------------------------------------------------------------------------*/\ninterface FeedbackModalContextType {\n isFeedbackModalOpen: boolean;\n currentMessageId: string | null;\n openFeedbackModal: (messageId: string) => void;\n closeFeedbackModal: () => void;\n}\n\nconst FeedbackModalContext = createContext<FeedbackModalContextType>({\n isFeedbackModalOpen: false,\n currentMessageId: null,\n openFeedbackModal: () => {},\n closeFeedbackModal: () => {},\n});\n\nexport const useFeedbackModal = () => useContext(FeedbackModalContext);\n\nexport const FeedbackProvider = ({ children }: { children: React.ReactNode }) => {\n const [isFeedbackModalOpen, setIsFeedbackModalOpen] = useState(false);\n const [currentMessageId, setCurrentMessageId] = useState<string | null>(null);\n\n const openFeedbackModal = (messageId: string) => {\n setCurrentMessageId(messageId);\n setIsFeedbackModalOpen(true);\n };\n\n const closeFeedbackModal = () => {\n setIsFeedbackModalOpen(false);\n setCurrentMessageId(null);\n };\n\n return (\n <FeedbackModalContext.Provider\n value={{ isFeedbackModalOpen, currentMessageId, openFeedbackModal, closeFeedbackModal }}\n >\n {isFeedbackModalOpen && currentMessageId && <FeedbackModal />}\n {children}\n </FeedbackModalContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Feedback Option\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FeedbackOptionProps {\n id: FeedbackReasonIds;\n label: string;\n selected: boolean;\n onClick: (id: FeedbackReasonIds) => void;\n}\n\nconst FeedbackOptionWrapper = styled(Flex)`\n &:hover {\n background-color: ${({ theme }) => theme.colors.neutral100};\n }\n\n &.selected {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n }\n`;\n\nconst FeedbackOption: React.FC<FeedbackOptionProps> = ({ id, label, selected, onClick }) => {\n return (\n <FeedbackOptionWrapper\n className={selected ? 'selected' : ''}\n justifyContent=\"space-between\"\n hasRadius\n width=\"100%\"\n cursor=\"pointer\"\n borderColor=\"neutral200\"\n padding={3}\n gap={3}\n onClick={() => onClick(id)}\n >\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {label}\n </Typography>\n <Checkbox\n name={`feedback-${id}`}\n value={id}\n checked={selected}\n onChange={() => onClick(id)}\n />\n </FeedbackOptionWrapper>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Modal\n * -----------------------------------------------------------------------------------------------*/\n\nexport const FeedbackModal: React.FC = () => {\n const [feedbackText, setFeedbackText] = useState('');\n const [selectedReasons, setSelectedReasons] = useState<FeedbackReasonIds[]>([]);\n\n const { t } = useTranslations();\n const { toggleNotification } = useNotification();\n const { closeFeedbackModal, currentMessageId } = useFeedbackModal();\n const { downvoteMessage, isPending } = useFeedback();\n\n const feedbackReasons = [\n {\n id: 'invalid_schema',\n label: t('chat.feedback.reason.invalid_schema', 'Invalid schema'),\n },\n {\n id: 'bad_recommendation',\n label: t('chat.feedback.reason.bad_recommendation', 'Bad recommendation'),\n },\n {\n id: 'slow',\n label: t('chat.feedback.reason.slow', 'Slow'),\n },\n {\n id: 'instructions_ignored',\n label: t('chat.feedback.reason.instructions_ignored', 'Instructions ignored'),\n },\n {\n id: 'being_lazy',\n label: t('chat.feedback.reason.being_lazy', 'Being lazy'),\n },\n {\n id: 'other',\n label: t('chat.feedback.reason.other', 'Other'),\n },\n ] satisfies { id: FeedbackReasonIds; label: string }[];\n\n const handleReasonSelect = (id: FeedbackReasonIds) => {\n setSelectedReasons((prevSelected) => {\n // If already selected, remove it\n if (prevSelected.includes(id)) {\n return prevSelected.filter((reasonId) => reasonId !== id);\n }\n // Otherwise add it\n return [...prevSelected, id];\n });\n };\n\n const handleSubmitFeedback = async () => {\n if (selectedReasons.length === 0) return;\n\n try {\n await downvoteMessage(currentMessageId as string, feedbackText, selectedReasons);\n\n setFeedbackText('');\n setSelectedReasons([]);\n closeFeedbackModal();\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: t('chat.feedback.error', 'An error occurred while submitting your feedback'),\n });\n }\n };\n\n return (\n <Modal.Root open onOpenChange={closeFeedbackModal}>\n <Modal.Content>\n <Modal.Header>\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {t('chat.feedback.title', 'Give feedback')}\n </Typography>\n </Modal.Header>\n <Modal.Body>\n <Flex direction=\"column\" alignItems=\"start\" gap={6} width=\"100%\">\n <Flex direction=\"column\" alignItems=\"start\" gap={2}>\n <Typography variant=\"beta\" fontWeight=\"bold\">\n {t('chat.feedback.title', 'Give feedback')}\n </Typography>\n <Typography variant=\"omega\">\n {t(\n 'chat.feedback.subtitle',\n 'Provide additional feedback on this message. Select all that apply.'\n )}\n </Typography>\n </Flex>\n <Grid.Root width=\"100%\" gap={2}>\n {feedbackReasons.map((reason) => (\n <Grid.Item key={reason.id} col={6}>\n <FeedbackOption\n key={reason.id}\n id={reason.id}\n label={reason.label}\n selected={selectedReasons.includes(reason.id)}\n onClick={handleReasonSelect}\n />\n </Grid.Item>\n ))}\n </Grid.Root>\n <Flex direction=\"column\" gap={2} width=\"100%\" alignItems=\"start\">\n <Typography variant=\"omega\">\n {t('chat.feedback.comment.label', 'How can we improve? (optional)')}\n </Typography>\n <Box width=\"100%\">\n <Textarea\n name=\"feedback\"\n placeholder={t('chat.feedback.placeholder', 'Your feedback...')}\n onChange={(e) => setFeedbackText(e.target.value)}\n value={feedbackText}\n />\n </Box>\n </Flex>\n </Flex>\n </Modal.Body>\n <Modal.Footer>\n <Modal.Close>\n <Button variant=\"tertiary\" onClick={closeFeedbackModal}>\n {t('form.button.cancel', 'Cancel')}\n </Button>\n </Modal.Close>\n <Button\n onClick={handleSubmitFeedback}\n loading={isPending}\n disabled={selectedReasons.length === 0}\n >\n {t('form.button.submit', 'Submit')}\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["FeedbackModalContext","createContext","isFeedbackModalOpen","currentMessageId","openFeedbackModal","closeFeedbackModal","useFeedbackModal","useContext","FeedbackProvider","children","setIsFeedbackModalOpen","useState","setCurrentMessageId","messageId","_jsxs","Provider","value","_jsx","FeedbackModal","FeedbackOptionWrapper","styled","Flex","theme","colors","neutral100","primary100","primary200","FeedbackOption","id","label","selected","onClick","className","justifyContent","hasRadius","width","cursor","borderColor","padding","gap","Typography","variant","fontWeight","Checkbox","name","checked","onChange","feedbackText","setFeedbackText","selectedReasons","setSelectedReasons","t","useTranslations","toggleNotification","useNotification","downvoteMessage","isPending","useFeedback","feedbackReasons","handleReasonSelect","prevSelected","includes","filter","reasonId","handleSubmitFeedback","length","error","type","message","Modal","Root","open","onOpenChange","Content","Header","Body","direction","alignItems","Grid","map","reason","Item","col","Box","Textarea","placeholder","e","target","Footer","Close","Button","loading","disabled"],"mappings":"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"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, createContext, useContext } from 'react';
|
|
3
|
+
import { useNotification } from '@strapi/admin/strapi-admin';
|
|
4
|
+
import { Flex, Modal, Typography, Grid, Box, Textarea, Button, Checkbox } from '@strapi/design-system';
|
|
5
|
+
import { styled } from 'styled-components';
|
|
6
|
+
import { useFeedback } from './hooks/useFeedback.mjs';
|
|
7
|
+
import { useTranslations } from './hooks/useTranslations.mjs';
|
|
8
|
+
|
|
9
|
+
const FeedbackModalContext = /*#__PURE__*/ createContext({
|
|
10
|
+
isFeedbackModalOpen: false,
|
|
11
|
+
currentMessageId: null,
|
|
12
|
+
openFeedbackModal: ()=>{},
|
|
13
|
+
closeFeedbackModal: ()=>{}
|
|
14
|
+
});
|
|
15
|
+
const useFeedbackModal = ()=>useContext(FeedbackModalContext);
|
|
16
|
+
const FeedbackProvider = ({ children })=>{
|
|
17
|
+
const [isFeedbackModalOpen, setIsFeedbackModalOpen] = useState(false);
|
|
18
|
+
const [currentMessageId, setCurrentMessageId] = useState(null);
|
|
19
|
+
const openFeedbackModal = (messageId)=>{
|
|
20
|
+
setCurrentMessageId(messageId);
|
|
21
|
+
setIsFeedbackModalOpen(true);
|
|
22
|
+
};
|
|
23
|
+
const closeFeedbackModal = ()=>{
|
|
24
|
+
setIsFeedbackModalOpen(false);
|
|
25
|
+
setCurrentMessageId(null);
|
|
26
|
+
};
|
|
27
|
+
return /*#__PURE__*/ jsxs(FeedbackModalContext.Provider, {
|
|
28
|
+
value: {
|
|
29
|
+
isFeedbackModalOpen,
|
|
30
|
+
currentMessageId,
|
|
31
|
+
openFeedbackModal,
|
|
32
|
+
closeFeedbackModal
|
|
33
|
+
},
|
|
34
|
+
children: [
|
|
35
|
+
isFeedbackModalOpen && currentMessageId && /*#__PURE__*/ jsx(FeedbackModal, {}),
|
|
36
|
+
children
|
|
37
|
+
]
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
const FeedbackOptionWrapper = styled(Flex)`
|
|
41
|
+
&:hover {
|
|
42
|
+
background-color: ${({ theme })=>theme.colors.neutral100};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
&.selected {
|
|
46
|
+
background-color: ${({ theme })=>theme.colors.primary100};
|
|
47
|
+
border-color: ${({ theme })=>theme.colors.primary200};
|
|
48
|
+
}
|
|
49
|
+
`;
|
|
50
|
+
const FeedbackOption = ({ id, label, selected, onClick })=>{
|
|
51
|
+
return /*#__PURE__*/ jsxs(FeedbackOptionWrapper, {
|
|
52
|
+
className: selected ? 'selected' : '',
|
|
53
|
+
justifyContent: "space-between",
|
|
54
|
+
hasRadius: true,
|
|
55
|
+
width: "100%",
|
|
56
|
+
cursor: "pointer",
|
|
57
|
+
borderColor: "neutral200",
|
|
58
|
+
padding: 3,
|
|
59
|
+
gap: 3,
|
|
60
|
+
onClick: ()=>onClick(id),
|
|
61
|
+
children: [
|
|
62
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
63
|
+
variant: "omega",
|
|
64
|
+
fontWeight: "bold",
|
|
65
|
+
children: label
|
|
66
|
+
}),
|
|
67
|
+
/*#__PURE__*/ jsx(Checkbox, {
|
|
68
|
+
name: `feedback-${id}`,
|
|
69
|
+
value: id,
|
|
70
|
+
checked: selected,
|
|
71
|
+
onChange: ()=>onClick(id)
|
|
72
|
+
})
|
|
73
|
+
]
|
|
74
|
+
});
|
|
75
|
+
};
|
|
76
|
+
/* -------------------------------------------------------------------------------------------------
|
|
77
|
+
* Modal
|
|
78
|
+
* -----------------------------------------------------------------------------------------------*/ const FeedbackModal = ()=>{
|
|
79
|
+
const [feedbackText, setFeedbackText] = useState('');
|
|
80
|
+
const [selectedReasons, setSelectedReasons] = useState([]);
|
|
81
|
+
const { t } = useTranslations();
|
|
82
|
+
const { toggleNotification } = useNotification();
|
|
83
|
+
const { closeFeedbackModal, currentMessageId } = useFeedbackModal();
|
|
84
|
+
const { downvoteMessage, isPending } = useFeedback();
|
|
85
|
+
const feedbackReasons = [
|
|
86
|
+
{
|
|
87
|
+
id: 'invalid_schema',
|
|
88
|
+
label: t('chat.feedback.reason.invalid_schema', 'Invalid schema')
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
id: 'bad_recommendation',
|
|
92
|
+
label: t('chat.feedback.reason.bad_recommendation', 'Bad recommendation')
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
id: 'slow',
|
|
96
|
+
label: t('chat.feedback.reason.slow', 'Slow')
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
id: 'instructions_ignored',
|
|
100
|
+
label: t('chat.feedback.reason.instructions_ignored', 'Instructions ignored')
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
id: 'being_lazy',
|
|
104
|
+
label: t('chat.feedback.reason.being_lazy', 'Being lazy')
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
id: 'other',
|
|
108
|
+
label: t('chat.feedback.reason.other', 'Other')
|
|
109
|
+
}
|
|
110
|
+
];
|
|
111
|
+
const handleReasonSelect = (id)=>{
|
|
112
|
+
setSelectedReasons((prevSelected)=>{
|
|
113
|
+
// If already selected, remove it
|
|
114
|
+
if (prevSelected.includes(id)) {
|
|
115
|
+
return prevSelected.filter((reasonId)=>reasonId !== id);
|
|
116
|
+
}
|
|
117
|
+
// Otherwise add it
|
|
118
|
+
return [
|
|
119
|
+
...prevSelected,
|
|
120
|
+
id
|
|
121
|
+
];
|
|
122
|
+
});
|
|
123
|
+
};
|
|
124
|
+
const handleSubmitFeedback = async ()=>{
|
|
125
|
+
if (selectedReasons.length === 0) return;
|
|
126
|
+
try {
|
|
127
|
+
await downvoteMessage(currentMessageId, feedbackText, selectedReasons);
|
|
128
|
+
setFeedbackText('');
|
|
129
|
+
setSelectedReasons([]);
|
|
130
|
+
closeFeedbackModal();
|
|
131
|
+
} catch (error) {
|
|
132
|
+
toggleNotification({
|
|
133
|
+
type: 'danger',
|
|
134
|
+
message: t('chat.feedback.error', 'An error occurred while submitting your feedback')
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
return /*#__PURE__*/ jsx(Modal.Root, {
|
|
139
|
+
open: true,
|
|
140
|
+
onOpenChange: closeFeedbackModal,
|
|
141
|
+
children: /*#__PURE__*/ jsxs(Modal.Content, {
|
|
142
|
+
children: [
|
|
143
|
+
/*#__PURE__*/ jsx(Modal.Header, {
|
|
144
|
+
children: /*#__PURE__*/ jsx(Typography, {
|
|
145
|
+
variant: "omega",
|
|
146
|
+
fontWeight: "bold",
|
|
147
|
+
children: t('chat.feedback.title', 'Give feedback')
|
|
148
|
+
})
|
|
149
|
+
}),
|
|
150
|
+
/*#__PURE__*/ jsx(Modal.Body, {
|
|
151
|
+
children: /*#__PURE__*/ jsxs(Flex, {
|
|
152
|
+
direction: "column",
|
|
153
|
+
alignItems: "start",
|
|
154
|
+
gap: 6,
|
|
155
|
+
width: "100%",
|
|
156
|
+
children: [
|
|
157
|
+
/*#__PURE__*/ jsxs(Flex, {
|
|
158
|
+
direction: "column",
|
|
159
|
+
alignItems: "start",
|
|
160
|
+
gap: 2,
|
|
161
|
+
children: [
|
|
162
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
163
|
+
variant: "beta",
|
|
164
|
+
fontWeight: "bold",
|
|
165
|
+
children: t('chat.feedback.title', 'Give feedback')
|
|
166
|
+
}),
|
|
167
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
168
|
+
variant: "omega",
|
|
169
|
+
children: t('chat.feedback.subtitle', 'Provide additional feedback on this message. Select all that apply.')
|
|
170
|
+
})
|
|
171
|
+
]
|
|
172
|
+
}),
|
|
173
|
+
/*#__PURE__*/ jsx(Grid.Root, {
|
|
174
|
+
width: "100%",
|
|
175
|
+
gap: 2,
|
|
176
|
+
children: feedbackReasons.map((reason)=>/*#__PURE__*/ jsx(Grid.Item, {
|
|
177
|
+
col: 6,
|
|
178
|
+
children: /*#__PURE__*/ jsx(FeedbackOption, {
|
|
179
|
+
id: reason.id,
|
|
180
|
+
label: reason.label,
|
|
181
|
+
selected: selectedReasons.includes(reason.id),
|
|
182
|
+
onClick: handleReasonSelect
|
|
183
|
+
}, reason.id)
|
|
184
|
+
}, reason.id))
|
|
185
|
+
}),
|
|
186
|
+
/*#__PURE__*/ jsxs(Flex, {
|
|
187
|
+
direction: "column",
|
|
188
|
+
gap: 2,
|
|
189
|
+
width: "100%",
|
|
190
|
+
alignItems: "start",
|
|
191
|
+
children: [
|
|
192
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
193
|
+
variant: "omega",
|
|
194
|
+
children: t('chat.feedback.comment.label', 'How can we improve? (optional)')
|
|
195
|
+
}),
|
|
196
|
+
/*#__PURE__*/ jsx(Box, {
|
|
197
|
+
width: "100%",
|
|
198
|
+
children: /*#__PURE__*/ jsx(Textarea, {
|
|
199
|
+
name: "feedback",
|
|
200
|
+
placeholder: t('chat.feedback.placeholder', 'Your feedback...'),
|
|
201
|
+
onChange: (e)=>setFeedbackText(e.target.value),
|
|
202
|
+
value: feedbackText
|
|
203
|
+
})
|
|
204
|
+
})
|
|
205
|
+
]
|
|
206
|
+
})
|
|
207
|
+
]
|
|
208
|
+
})
|
|
209
|
+
}),
|
|
210
|
+
/*#__PURE__*/ jsxs(Modal.Footer, {
|
|
211
|
+
children: [
|
|
212
|
+
/*#__PURE__*/ jsx(Modal.Close, {
|
|
213
|
+
children: /*#__PURE__*/ jsx(Button, {
|
|
214
|
+
variant: "tertiary",
|
|
215
|
+
onClick: closeFeedbackModal,
|
|
216
|
+
children: t('form.button.cancel', 'Cancel')
|
|
217
|
+
})
|
|
218
|
+
}),
|
|
219
|
+
/*#__PURE__*/ jsx(Button, {
|
|
220
|
+
onClick: handleSubmitFeedback,
|
|
221
|
+
loading: isPending,
|
|
222
|
+
disabled: selectedReasons.length === 0,
|
|
223
|
+
children: t('form.button.submit', 'Submit')
|
|
224
|
+
})
|
|
225
|
+
]
|
|
226
|
+
})
|
|
227
|
+
]
|
|
228
|
+
})
|
|
229
|
+
});
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
export { FeedbackModal, FeedbackProvider, useFeedbackModal };
|
|
233
|
+
//# sourceMappingURL=FeedbackModal.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeedbackModal.mjs","sources":["../../../../admin/src/components/AIChat/FeedbackModal.tsx"],"sourcesContent":["import * as React from 'react';\nimport { createContext, useContext, useState } from 'react';\n\nimport { useNotification } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n Typography,\n Textarea,\n Button,\n Grid,\n Checkbox,\n Modal,\n} from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { useFeedback } from './hooks/useFeedback';\nimport { useTranslations } from './hooks/useTranslations';\n\nimport type { FeedbackReasonIds } from './lib/types/feedback';\n\n/* -------------------------------------------------------------------------------------------------\n * Provider\n * -----------------------------------------------------------------------------------------------*/\ninterface FeedbackModalContextType {\n isFeedbackModalOpen: boolean;\n currentMessageId: string | null;\n openFeedbackModal: (messageId: string) => void;\n closeFeedbackModal: () => void;\n}\n\nconst FeedbackModalContext = createContext<FeedbackModalContextType>({\n isFeedbackModalOpen: false,\n currentMessageId: null,\n openFeedbackModal: () => {},\n closeFeedbackModal: () => {},\n});\n\nexport const useFeedbackModal = () => useContext(FeedbackModalContext);\n\nexport const FeedbackProvider = ({ children }: { children: React.ReactNode }) => {\n const [isFeedbackModalOpen, setIsFeedbackModalOpen] = useState(false);\n const [currentMessageId, setCurrentMessageId] = useState<string | null>(null);\n\n const openFeedbackModal = (messageId: string) => {\n setCurrentMessageId(messageId);\n setIsFeedbackModalOpen(true);\n };\n\n const closeFeedbackModal = () => {\n setIsFeedbackModalOpen(false);\n setCurrentMessageId(null);\n };\n\n return (\n <FeedbackModalContext.Provider\n value={{ isFeedbackModalOpen, currentMessageId, openFeedbackModal, closeFeedbackModal }}\n >\n {isFeedbackModalOpen && currentMessageId && <FeedbackModal />}\n {children}\n </FeedbackModalContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Feedback Option\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FeedbackOptionProps {\n id: FeedbackReasonIds;\n label: string;\n selected: boolean;\n onClick: (id: FeedbackReasonIds) => void;\n}\n\nconst FeedbackOptionWrapper = styled(Flex)`\n &:hover {\n background-color: ${({ theme }) => theme.colors.neutral100};\n }\n\n &.selected {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n }\n`;\n\nconst FeedbackOption: React.FC<FeedbackOptionProps> = ({ id, label, selected, onClick }) => {\n return (\n <FeedbackOptionWrapper\n className={selected ? 'selected' : ''}\n justifyContent=\"space-between\"\n hasRadius\n width=\"100%\"\n cursor=\"pointer\"\n borderColor=\"neutral200\"\n padding={3}\n gap={3}\n onClick={() => onClick(id)}\n >\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {label}\n </Typography>\n <Checkbox\n name={`feedback-${id}`}\n value={id}\n checked={selected}\n onChange={() => onClick(id)}\n />\n </FeedbackOptionWrapper>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Modal\n * -----------------------------------------------------------------------------------------------*/\n\nexport const FeedbackModal: React.FC = () => {\n const [feedbackText, setFeedbackText] = useState('');\n const [selectedReasons, setSelectedReasons] = useState<FeedbackReasonIds[]>([]);\n\n const { t } = useTranslations();\n const { toggleNotification } = useNotification();\n const { closeFeedbackModal, currentMessageId } = useFeedbackModal();\n const { downvoteMessage, isPending } = useFeedback();\n\n const feedbackReasons = [\n {\n id: 'invalid_schema',\n label: t('chat.feedback.reason.invalid_schema', 'Invalid schema'),\n },\n {\n id: 'bad_recommendation',\n label: t('chat.feedback.reason.bad_recommendation', 'Bad recommendation'),\n },\n {\n id: 'slow',\n label: t('chat.feedback.reason.slow', 'Slow'),\n },\n {\n id: 'instructions_ignored',\n label: t('chat.feedback.reason.instructions_ignored', 'Instructions ignored'),\n },\n {\n id: 'being_lazy',\n label: t('chat.feedback.reason.being_lazy', 'Being lazy'),\n },\n {\n id: 'other',\n label: t('chat.feedback.reason.other', 'Other'),\n },\n ] satisfies { id: FeedbackReasonIds; label: string }[];\n\n const handleReasonSelect = (id: FeedbackReasonIds) => {\n setSelectedReasons((prevSelected) => {\n // If already selected, remove it\n if (prevSelected.includes(id)) {\n return prevSelected.filter((reasonId) => reasonId !== id);\n }\n // Otherwise add it\n return [...prevSelected, id];\n });\n };\n\n const handleSubmitFeedback = async () => {\n if (selectedReasons.length === 0) return;\n\n try {\n await downvoteMessage(currentMessageId as string, feedbackText, selectedReasons);\n\n setFeedbackText('');\n setSelectedReasons([]);\n closeFeedbackModal();\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: t('chat.feedback.error', 'An error occurred while submitting your feedback'),\n });\n }\n };\n\n return (\n <Modal.Root open onOpenChange={closeFeedbackModal}>\n <Modal.Content>\n <Modal.Header>\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {t('chat.feedback.title', 'Give feedback')}\n </Typography>\n </Modal.Header>\n <Modal.Body>\n <Flex direction=\"column\" alignItems=\"start\" gap={6} width=\"100%\">\n <Flex direction=\"column\" alignItems=\"start\" gap={2}>\n <Typography variant=\"beta\" fontWeight=\"bold\">\n {t('chat.feedback.title', 'Give feedback')}\n </Typography>\n <Typography variant=\"omega\">\n {t(\n 'chat.feedback.subtitle',\n 'Provide additional feedback on this message. Select all that apply.'\n )}\n </Typography>\n </Flex>\n <Grid.Root width=\"100%\" gap={2}>\n {feedbackReasons.map((reason) => (\n <Grid.Item key={reason.id} col={6}>\n <FeedbackOption\n key={reason.id}\n id={reason.id}\n label={reason.label}\n selected={selectedReasons.includes(reason.id)}\n onClick={handleReasonSelect}\n />\n </Grid.Item>\n ))}\n </Grid.Root>\n <Flex direction=\"column\" gap={2} width=\"100%\" alignItems=\"start\">\n <Typography variant=\"omega\">\n {t('chat.feedback.comment.label', 'How can we improve? (optional)')}\n </Typography>\n <Box width=\"100%\">\n <Textarea\n name=\"feedback\"\n placeholder={t('chat.feedback.placeholder', 'Your feedback...')}\n onChange={(e) => setFeedbackText(e.target.value)}\n value={feedbackText}\n />\n </Box>\n </Flex>\n </Flex>\n </Modal.Body>\n <Modal.Footer>\n <Modal.Close>\n <Button variant=\"tertiary\" onClick={closeFeedbackModal}>\n {t('form.button.cancel', 'Cancel')}\n </Button>\n </Modal.Close>\n <Button\n onClick={handleSubmitFeedback}\n loading={isPending}\n disabled={selectedReasons.length === 0}\n >\n {t('form.button.submit', 'Submit')}\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["FeedbackModalContext","createContext","isFeedbackModalOpen","currentMessageId","openFeedbackModal","closeFeedbackModal","useFeedbackModal","useContext","FeedbackProvider","children","setIsFeedbackModalOpen","useState","setCurrentMessageId","messageId","_jsxs","Provider","value","_jsx","FeedbackModal","FeedbackOptionWrapper","styled","Flex","theme","colors","neutral100","primary100","primary200","FeedbackOption","id","label","selected","onClick","className","justifyContent","hasRadius","width","cursor","borderColor","padding","gap","Typography","variant","fontWeight","Checkbox","name","checked","onChange","feedbackText","setFeedbackText","selectedReasons","setSelectedReasons","t","useTranslations","toggleNotification","useNotification","downvoteMessage","isPending","useFeedback","feedbackReasons","handleReasonSelect","prevSelected","includes","filter","reasonId","handleSubmitFeedback","length","error","type","message","Modal","Root","open","onOpenChange","Content","Header","Body","direction","alignItems","Grid","map","reason","Item","col","Box","Textarea","placeholder","e","target","Footer","Close","Button","loading","disabled"],"mappings":"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"}
|