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