@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,190 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var reactDom = require('react-dom');
|
|
6
|
+
var styledComponents = require('styled-components');
|
|
7
|
+
var animations = require('./animations.js');
|
|
8
|
+
var Base64Image = require('./Base64Image.js');
|
|
9
|
+
|
|
10
|
+
const FullScreenImageContext = /*#__PURE__*/ React.createContext(undefined);
|
|
11
|
+
/* -------------------------------------------------------------------------------------------------
|
|
12
|
+
* Styles
|
|
13
|
+
* -----------------------------------------------------------------------------------------------*/ const setOpacity = (hex, alpha)=>`${hex}${Math.floor(alpha * 255).toString(16).padStart(2, '0')}`;
|
|
14
|
+
const Overlay = styledComponents.styled.div`
|
|
15
|
+
position: fixed;
|
|
16
|
+
top: 0;
|
|
17
|
+
left: 0;
|
|
18
|
+
right: 0;
|
|
19
|
+
bottom: 0;
|
|
20
|
+
width: 100vw;
|
|
21
|
+
height: 100vh;
|
|
22
|
+
display: flex;
|
|
23
|
+
align-items: center;
|
|
24
|
+
justify-content: center;
|
|
25
|
+
z-index: 500;
|
|
26
|
+
pointer-events: auto; /* Explicitly enable pointer events */
|
|
27
|
+
background: ${(props)=>setOpacity(props.theme.colors.neutral800, 0.2)};
|
|
28
|
+
`;
|
|
29
|
+
const ImageWrapper = styledComponents.styled.div`
|
|
30
|
+
max-width: 80vw;
|
|
31
|
+
max-height: 90vh;
|
|
32
|
+
display: flex;
|
|
33
|
+
align-items: center;
|
|
34
|
+
justify-content: center;
|
|
35
|
+
pointer-events: auto; /* Explicitly enable pointer events */
|
|
36
|
+
position: relative;
|
|
37
|
+
animation: ${animations.ANIMATIONS.scaleIn} 0.3s ease;
|
|
38
|
+
`;
|
|
39
|
+
const StyledImg = styledComponents.styled(Base64Image.Base64Img)`
|
|
40
|
+
max-width: 100%;
|
|
41
|
+
max-height: 90vh;
|
|
42
|
+
object-fit: contain;
|
|
43
|
+
pointer-events: auto; /* Explicitly enable pointer events */
|
|
44
|
+
`;
|
|
45
|
+
/* -------------------------------------------------------------------------------------------------
|
|
46
|
+
* Modal
|
|
47
|
+
* -----------------------------------------------------------------------------------------------*/ // Use the existing FullScreenImage as our modal component
|
|
48
|
+
const ImageModal = ({ src, alt, onClose })=>{
|
|
49
|
+
const overlayRef = React.useRef(null);
|
|
50
|
+
const wrapperRef = React.useRef(null);
|
|
51
|
+
// Close on ESC key press
|
|
52
|
+
React.useEffect(()=>{
|
|
53
|
+
const handleKeyDown = (e)=>{
|
|
54
|
+
if (e.key === 'Escape') {
|
|
55
|
+
// Stop propagation to prevent closing parent modals
|
|
56
|
+
e.preventDefault();
|
|
57
|
+
e.stopPropagation();
|
|
58
|
+
onClose?.();
|
|
59
|
+
// The next 3 lines are critical: they completely stop the event
|
|
60
|
+
e.stopImmediatePropagation();
|
|
61
|
+
e.cancelBubble = true; // For older browsers
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
// Use capture phase to intercept event before it reaches other components
|
|
66
|
+
window.addEventListener('keydown', handleKeyDown, true);
|
|
67
|
+
return ()=>window.removeEventListener('keydown', handleKeyDown, true);
|
|
68
|
+
}, [
|
|
69
|
+
onClose
|
|
70
|
+
]);
|
|
71
|
+
// Setup click handlers
|
|
72
|
+
React.useEffect(()=>{
|
|
73
|
+
const handleOverlayClick = (e)=>{
|
|
74
|
+
// Only close if clicking directly on the overlay (not its children)
|
|
75
|
+
if (e.target === overlayRef.current) {
|
|
76
|
+
e.preventDefault();
|
|
77
|
+
e.stopPropagation();
|
|
78
|
+
onClose?.();
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
const handleWrapperClick = (e)=>{
|
|
82
|
+
// Stop propagation for clicks on the image wrapper
|
|
83
|
+
e.stopPropagation();
|
|
84
|
+
};
|
|
85
|
+
const overlay = overlayRef.current;
|
|
86
|
+
const wrapper = wrapperRef.current;
|
|
87
|
+
if (overlay) {
|
|
88
|
+
overlay.addEventListener('click', handleOverlayClick);
|
|
89
|
+
}
|
|
90
|
+
if (wrapper) {
|
|
91
|
+
wrapper.addEventListener('click', handleWrapperClick);
|
|
92
|
+
}
|
|
93
|
+
return ()=>{
|
|
94
|
+
if (overlay) {
|
|
95
|
+
overlay.removeEventListener('click', handleOverlayClick);
|
|
96
|
+
}
|
|
97
|
+
if (wrapper) {
|
|
98
|
+
wrapper.removeEventListener('click', handleWrapperClick);
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
}, [
|
|
102
|
+
onClose
|
|
103
|
+
]);
|
|
104
|
+
// Using createPortal to render directly at document body level
|
|
105
|
+
return /*#__PURE__*/ reactDom.createPortal(/*#__PURE__*/ jsxRuntime.jsx(Overlay, {
|
|
106
|
+
ref: overlayRef,
|
|
107
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(ImageWrapper, {
|
|
108
|
+
ref: wrapperRef,
|
|
109
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(StyledImg, {
|
|
110
|
+
src: src,
|
|
111
|
+
alt: alt
|
|
112
|
+
})
|
|
113
|
+
})
|
|
114
|
+
}), document.body);
|
|
115
|
+
};
|
|
116
|
+
/* -------------------------------------------------------------------------------------------------
|
|
117
|
+
* Root
|
|
118
|
+
* -----------------------------------------------------------------------------------------------*/ // Root component that provides context
|
|
119
|
+
const Root = ({ children, src, alt, onClose, defaultOpen = false })=>{
|
|
120
|
+
const [isOpen, setIsOpen] = React.useState(defaultOpen);
|
|
121
|
+
const open = ()=>setIsOpen(true);
|
|
122
|
+
const close = ()=>{
|
|
123
|
+
setIsOpen(false);
|
|
124
|
+
onClose?.();
|
|
125
|
+
};
|
|
126
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(FullScreenImageContext.Provider, {
|
|
127
|
+
value: {
|
|
128
|
+
isOpen,
|
|
129
|
+
open,
|
|
130
|
+
close,
|
|
131
|
+
src,
|
|
132
|
+
alt
|
|
133
|
+
},
|
|
134
|
+
children: [
|
|
135
|
+
children,
|
|
136
|
+
isOpen && /*#__PURE__*/ jsxRuntime.jsx(ImageModal, {
|
|
137
|
+
src: src,
|
|
138
|
+
alt: alt,
|
|
139
|
+
onClose: close
|
|
140
|
+
})
|
|
141
|
+
]
|
|
142
|
+
});
|
|
143
|
+
};
|
|
144
|
+
/* -------------------------------------------------------------------------------------------------
|
|
145
|
+
* Hooks
|
|
146
|
+
* -----------------------------------------------------------------------------------------------*/ // Hook to use the context
|
|
147
|
+
const useFullScreenImage = ()=>{
|
|
148
|
+
const context = React.useContext(FullScreenImageContext);
|
|
149
|
+
if (!context) {
|
|
150
|
+
throw new Error('useFullScreenImage must be used within a FullScreenImage.Root');
|
|
151
|
+
}
|
|
152
|
+
return context;
|
|
153
|
+
};
|
|
154
|
+
/* -------------------------------------------------------------------------------------------------
|
|
155
|
+
* Trigger
|
|
156
|
+
* -----------------------------------------------------------------------------------------------*/ // Trigger component that opens the full screen image
|
|
157
|
+
const Trigger = ({ children, asChild = false })=>{
|
|
158
|
+
const { open } = useFullScreenImage();
|
|
159
|
+
const handleClick = (e)=>{
|
|
160
|
+
e.stopPropagation();
|
|
161
|
+
open();
|
|
162
|
+
};
|
|
163
|
+
if (asChild) {
|
|
164
|
+
return /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
165
|
+
onClick: handleClick,
|
|
166
|
+
style: {
|
|
167
|
+
cursor: 'pointer',
|
|
168
|
+
display: 'contents'
|
|
169
|
+
},
|
|
170
|
+
children: children
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
return /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
174
|
+
onClick: handleClick,
|
|
175
|
+
style: {
|
|
176
|
+
cursor: 'pointer'
|
|
177
|
+
},
|
|
178
|
+
children: children
|
|
179
|
+
});
|
|
180
|
+
};
|
|
181
|
+
/* -------------------------------------------------------------------------------------------------
|
|
182
|
+
* Export
|
|
183
|
+
* -----------------------------------------------------------------------------------------------*/ const FullScreenImage = {
|
|
184
|
+
Root,
|
|
185
|
+
Trigger
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
exports.FullScreenImage = FullScreenImage;
|
|
189
|
+
exports.setOpacity = setOpacity;
|
|
190
|
+
//# sourceMappingURL=FullScreenImage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FullScreenImage.js","sources":["../../../../../admin/src/components/AIChat/components/FullScreenImage.tsx"],"sourcesContent":["import { useEffect, useRef, createContext, useContext, useState, ReactNode } from 'react';\n\nimport { createPortal } from 'react-dom';\nimport { styled } from 'styled-components';\n\nimport { ANIMATIONS } from './animations';\nimport { Base64Img } from './Base64Image';\n\n/* -------------------------------------------------------------------------------------------------\n * Context\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FullScreenImageContextType {\n isOpen: boolean;\n open: () => void;\n close: () => void;\n src: string;\n alt: string;\n}\n\nconst FullScreenImageContext = createContext<FullScreenImageContextType | undefined>(undefined);\n\n/* -------------------------------------------------------------------------------------------------\n * Types\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FullScreenImageProps {\n src: string;\n alt: string;\n onClose?: () => void;\n}\n\ninterface FullScreenImageRootProps extends FullScreenImageProps {\n children: ReactNode;\n defaultOpen?: boolean;\n}\n\ninterface FullScreenImageTriggerProps {\n children: ReactNode;\n asChild?: boolean;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Styles\n * -----------------------------------------------------------------------------------------------*/\nexport const setOpacity = (hex: string, alpha: number) =>\n `${hex}${Math.floor(alpha * 255)\n .toString(16)\n .padStart(2, '0')}`;\n\nconst Overlay = styled.div`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100vw;\n height: 100vh;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 500;\n pointer-events: auto; /* Explicitly enable pointer events */\n background: ${(props) => setOpacity(props.theme.colors.neutral800, 0.2)};\n`;\n\nconst ImageWrapper = styled.div`\n max-width: 80vw;\n max-height: 90vh;\n display: flex;\n align-items: center;\n justify-content: center;\n pointer-events: auto; /* Explicitly enable pointer events */\n position: relative;\n animation: ${ANIMATIONS.scaleIn} 0.3s ease;\n`;\n\nconst StyledImg = styled(Base64Img)`\n max-width: 100%;\n max-height: 90vh;\n object-fit: contain;\n pointer-events: auto; /* Explicitly enable pointer events */\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * Modal\n * -----------------------------------------------------------------------------------------------*/\n\n// Use the existing FullScreenImage as our modal component\nconst ImageModal = ({ src, alt, onClose }: FullScreenImageProps) => {\n const overlayRef = useRef<HTMLDivElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n // Close on ESC key press\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n // Stop propagation to prevent closing parent modals\n e.preventDefault();\n e.stopPropagation();\n onClose?.();\n\n // The next 3 lines are critical: they completely stop the event\n e.stopImmediatePropagation();\n e.cancelBubble = true; // For older browsers\n return false;\n }\n };\n\n // Use capture phase to intercept event before it reaches other components\n window.addEventListener('keydown', handleKeyDown, true);\n return () => window.removeEventListener('keydown', handleKeyDown, true);\n }, [onClose]);\n\n // Setup click handlers\n useEffect(() => {\n const handleOverlayClick = (e: MouseEvent) => {\n // Only close if clicking directly on the overlay (not its children)\n if (e.target === overlayRef.current) {\n e.preventDefault();\n e.stopPropagation();\n onClose?.();\n }\n };\n\n const handleWrapperClick = (e: MouseEvent) => {\n // Stop propagation for clicks on the image wrapper\n e.stopPropagation();\n };\n\n const overlay = overlayRef.current;\n const wrapper = wrapperRef.current;\n\n if (overlay) {\n overlay.addEventListener('click', handleOverlayClick);\n }\n\n if (wrapper) {\n wrapper.addEventListener('click', handleWrapperClick);\n }\n\n return () => {\n if (overlay) {\n overlay.removeEventListener('click', handleOverlayClick);\n }\n\n if (wrapper) {\n wrapper.removeEventListener('click', handleWrapperClick);\n }\n };\n }, [onClose]);\n\n // Using createPortal to render directly at document body level\n return createPortal(\n <Overlay ref={overlayRef}>\n <ImageWrapper ref={wrapperRef}>\n <StyledImg src={src} alt={alt} />\n </ImageWrapper>\n </Overlay>,\n document.body\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\n// Root component that provides context\nconst Root = ({ children, src, alt, onClose, defaultOpen = false }: FullScreenImageRootProps) => {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n\n const open = () => setIsOpen(true);\n const close = () => {\n setIsOpen(false);\n onClose?.();\n };\n\n return (\n <FullScreenImageContext.Provider value={{ isOpen, open, close, src, alt }}>\n {children}\n {isOpen && <ImageModal src={src} alt={alt} onClose={close} />}\n </FullScreenImageContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Hooks\n * -----------------------------------------------------------------------------------------------*/\n\n// Hook to use the context\nconst useFullScreenImage = () => {\n const context = useContext(FullScreenImageContext);\n if (!context) {\n throw new Error('useFullScreenImage must be used within a FullScreenImage.Root');\n }\n return context;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Trigger\n * -----------------------------------------------------------------------------------------------*/\n\n// Trigger component that opens the full screen image\nconst Trigger = ({ children, asChild = false }: FullScreenImageTriggerProps) => {\n const { open } = useFullScreenImage();\n\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n open();\n };\n\n if (asChild) {\n return (\n <div onClick={handleClick} style={{ cursor: 'pointer', display: 'contents' }}>\n {children}\n </div>\n );\n }\n\n return (\n <div onClick={handleClick} style={{ cursor: 'pointer' }}>\n {children}\n </div>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Export\n * -----------------------------------------------------------------------------------------------*/\n\nexport const FullScreenImage = {\n Root,\n Trigger,\n};\n"],"names":["FullScreenImageContext","createContext","undefined","setOpacity","hex","alpha","Math","floor","toString","padStart","Overlay","styled","div","props","theme","colors","neutral800","ImageWrapper","ANIMATIONS","scaleIn","StyledImg","Base64Img","ImageModal","src","alt","onClose","overlayRef","useRef","wrapperRef","useEffect","handleKeyDown","e","key","preventDefault","stopPropagation","stopImmediatePropagation","cancelBubble","window","addEventListener","removeEventListener","handleOverlayClick","target","current","handleWrapperClick","overlay","wrapper","createPortal","_jsx","ref","document","body","Root","children","defaultOpen","isOpen","setIsOpen","useState","open","close","_jsxs","Provider","value","useFullScreenImage","context","useContext","Error","Trigger","asChild","handleClick","onClick","style","cursor","display","FullScreenImage"],"mappings":";;;;;;;;;AAoBA,MAAMA,uCAAyBC,mBAAsDC,CAAAA,SAAAA,CAAAA;AAsBrF;;2GAGaC,UAAa,GAAA,CAACC,KAAaC,KACtC,GAAA,CAAC,EAAED,GAAAA,CAAI,EAAEE,IAAAA,CAAKC,KAAK,CAACF,KAAAA,GAAQ,GACzBG,CAAAA,CAAAA,QAAQ,CAAC,EAAA,CAAA,CACTC,QAAQ,CAAC,CAAA,EAAG,GAAK,CAAA,CAAA;AAEtB,MAAMC,OAAAA,GAAUC,uBAAOC,CAAAA,GAAG;;;;;;;;;;;;;cAaZ,EAAE,CAACC,KAAUV,GAAAA,UAAAA,CAAWU,KAAMC,CAAAA,KAAK,CAACC,MAAM,CAACC,UAAU,EAAE,GAAK,CAAA,CAAA;AAC1E,CAAC;AAED,MAAMC,YAAAA,GAAeN,uBAAOC,CAAAA,GAAG;;;;;;;;aAQlB,EAAEM,qBAAAA,CAAWC,OAAO,CAAC;AAClC,CAAC;AAED,MAAMC,SAAAA,GAAYT,uBAAOU,CAAAA,qBAAAA,CAAU;;;;;AAKnC,CAAC;AAED;;AAEkG;AAGlG,MAAMC,UAAAA,GAAa,CAAC,EAAEC,GAAG,EAAEC,GAAG,EAAEC,OAAO,EAAwB,GAAA;AAC7D,IAAA,MAAMC,aAAaC,YAAuB,CAAA,IAAA,CAAA;AAC1C,IAAA,MAAMC,aAAaD,YAAuB,CAAA,IAAA,CAAA;;IAG1CE,eAAU,CAAA,IAAA;AACR,QAAA,MAAMC,gBAAgB,CAACC,CAAAA,GAAAA;YACrB,IAAIA,CAAAA,CAAEC,GAAG,KAAK,QAAU,EAAA;;AAEtBD,gBAAAA,CAAAA,CAAEE,cAAc,EAAA;AAChBF,gBAAAA,CAAAA,CAAEG,eAAe,EAAA;AACjBT,gBAAAA,OAAAA,IAAAA;;AAGAM,gBAAAA,CAAAA,CAAEI,wBAAwB,EAAA;gBAC1BJ,CAAEK,CAAAA,YAAY,GAAG,IAAA,CAAA;gBACjB,OAAO,KAAA;AACT;AACF,SAAA;;QAGAC,MAAOC,CAAAA,gBAAgB,CAAC,SAAA,EAAWR,aAAe,EAAA,IAAA,CAAA;AAClD,QAAA,OAAO,IAAMO,MAAAA,CAAOE,mBAAmB,CAAC,WAAWT,aAAe,EAAA,IAAA,CAAA;KACjE,EAAA;AAACL,QAAAA;AAAQ,KAAA,CAAA;;IAGZI,eAAU,CAAA,IAAA;AACR,QAAA,MAAMW,qBAAqB,CAACT,CAAAA,GAAAA;;AAE1B,YAAA,IAAIA,CAAEU,CAAAA,MAAM,KAAKf,UAAAA,CAAWgB,OAAO,EAAE;AACnCX,gBAAAA,CAAAA,CAAEE,cAAc,EAAA;AAChBF,gBAAAA,CAAAA,CAAEG,eAAe,EAAA;AACjBT,gBAAAA,OAAAA,IAAAA;AACF;AACF,SAAA;AAEA,QAAA,MAAMkB,qBAAqB,CAACZ,CAAAA,GAAAA;;AAE1BA,YAAAA,CAAAA,CAAEG,eAAe,EAAA;AACnB,SAAA;QAEA,MAAMU,OAAAA,GAAUlB,WAAWgB,OAAO;QAClC,MAAMG,OAAAA,GAAUjB,WAAWc,OAAO;AAElC,QAAA,IAAIE,OAAS,EAAA;YACXA,OAAQN,CAAAA,gBAAgB,CAAC,OAASE,EAAAA,kBAAAA,CAAAA;AACpC;AAEA,QAAA,IAAIK,OAAS,EAAA;YACXA,OAAQP,CAAAA,gBAAgB,CAAC,OAASK,EAAAA,kBAAAA,CAAAA;AACpC;QAEA,OAAO,IAAA;AACL,YAAA,IAAIC,OAAS,EAAA;gBACXA,OAAQL,CAAAA,mBAAmB,CAAC,OAASC,EAAAA,kBAAAA,CAAAA;AACvC;AAEA,YAAA,IAAIK,OAAS,EAAA;gBACXA,OAAQN,CAAAA,mBAAmB,CAAC,OAASI,EAAAA,kBAAAA,CAAAA;AACvC;AACF,SAAA;KACC,EAAA;AAAClB,QAAAA;AAAQ,KAAA,CAAA;;AAGZ,IAAA,qBAAOqB,oCACLC,cAACrC,CAAAA,OAAAA,EAAAA;QAAQsC,GAAKtB,EAAAA,UAAAA;AACZ,QAAA,QAAA,gBAAAqB,cAAC9B,CAAAA,YAAAA,EAAAA;YAAa+B,GAAKpB,EAAAA,UAAAA;AACjB,YAAA,QAAA,gBAAAmB,cAAC3B,CAAAA,SAAAA,EAAAA;gBAAUG,GAAKA,EAAAA,GAAAA;gBAAKC,GAAKA,EAAAA;;;AAG9ByB,KAAAA,CAAAA,EAAAA,QAAAA,CAASC,IAAI,CAAA;AAEjB,CAAA;AAEA;;AAEkG;AAGlG,MAAMC,IAAO,GAAA,CAAC,EAAEC,QAAQ,EAAE7B,GAAG,EAAEC,GAAG,EAAEC,OAAO,EAAE4B,WAAAA,GAAc,KAAK,EAA4B,GAAA;AAC1F,IAAA,MAAM,CAACC,MAAAA,EAAQC,SAAU,CAAA,GAAGC,cAASH,CAAAA,WAAAA,CAAAA;IAErC,MAAMI,IAAAA,GAAO,IAAMF,SAAU,CAAA,IAAA,CAAA;AAC7B,IAAA,MAAMG,KAAQ,GAAA,IAAA;QACZH,SAAU,CAAA,KAAA,CAAA;AACV9B,QAAAA,OAAAA,IAAAA;AACF,KAAA;IAEA,qBACEkC,eAAA,CAAC3D,uBAAuB4D,QAAQ,EAAA;QAACC,KAAO,EAAA;AAAEP,YAAAA,MAAAA;AAAQG,YAAAA,IAAAA;AAAMC,YAAAA,KAAAA;AAAOnC,YAAAA,GAAAA;AAAKC,YAAAA;AAAI,SAAA;;AACrE4B,YAAAA,QAAAA;AACAE,YAAAA,MAAAA,kBAAUP,cAACzB,CAAAA,UAAAA,EAAAA;gBAAWC,GAAKA,EAAAA,GAAAA;gBAAKC,GAAKA,EAAAA,GAAAA;gBAAKC,OAASiC,EAAAA;;;;AAG1D,CAAA;AAEA;;AAEkG;AAGlG,MAAMI,kBAAqB,GAAA,IAAA;AACzB,IAAA,MAAMC,UAAUC,gBAAWhE,CAAAA,sBAAAA,CAAAA;AAC3B,IAAA,IAAI,CAAC+D,OAAS,EAAA;AACZ,QAAA,MAAM,IAAIE,KAAM,CAAA,+DAAA,CAAA;AAClB;IACA,OAAOF,OAAAA;AACT,CAAA;AAEA;;AAEkG;AAGlG,MAAMG,UAAU,CAAC,EAAEd,QAAQ,EAAEe,OAAAA,GAAU,KAAK,EAA+B,GAAA;IACzE,MAAM,EAAEV,IAAI,EAAE,GAAGK,kBAAAA,EAAAA;AAEjB,IAAA,MAAMM,cAAc,CAACrC,CAAAA,GAAAA;AACnBA,QAAAA,CAAAA,CAAEG,eAAe,EAAA;AACjBuB,QAAAA,IAAAA,EAAAA;AACF,KAAA;AAEA,IAAA,IAAIU,OAAS,EAAA;AACX,QAAA,qBACEpB,cAACnC,CAAAA,KAAAA,EAAAA;YAAIyD,OAASD,EAAAA,WAAAA;YAAaE,KAAO,EAAA;gBAAEC,MAAQ,EAAA,SAAA;gBAAWC,OAAS,EAAA;AAAW,aAAA;AACxEpB,YAAAA,QAAAA,EAAAA;;AAGP;AAEA,IAAA,qBACEL,cAACnC,CAAAA,KAAAA,EAAAA;QAAIyD,OAASD,EAAAA,WAAAA;QAAaE,KAAO,EAAA;YAAEC,MAAQ,EAAA;AAAU,SAAA;AACnDnB,QAAAA,QAAAA,EAAAA;;AAGP,CAAA;AAEA;;2GAIaqB,eAAkB,GAAA;AAC7BtB,IAAAA,IAAAA;AACAe,IAAAA;AACF;;;;;"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, createContext, useRef, useEffect, useContext } from 'react';
|
|
3
|
+
import { createPortal } from 'react-dom';
|
|
4
|
+
import { styled } from 'styled-components';
|
|
5
|
+
import { ANIMATIONS } from './animations.mjs';
|
|
6
|
+
import { Base64Img } from './Base64Image.mjs';
|
|
7
|
+
|
|
8
|
+
const FullScreenImageContext = /*#__PURE__*/ createContext(undefined);
|
|
9
|
+
/* -------------------------------------------------------------------------------------------------
|
|
10
|
+
* Styles
|
|
11
|
+
* -----------------------------------------------------------------------------------------------*/ const setOpacity = (hex, alpha)=>`${hex}${Math.floor(alpha * 255).toString(16).padStart(2, '0')}`;
|
|
12
|
+
const Overlay = styled.div`
|
|
13
|
+
position: fixed;
|
|
14
|
+
top: 0;
|
|
15
|
+
left: 0;
|
|
16
|
+
right: 0;
|
|
17
|
+
bottom: 0;
|
|
18
|
+
width: 100vw;
|
|
19
|
+
height: 100vh;
|
|
20
|
+
display: flex;
|
|
21
|
+
align-items: center;
|
|
22
|
+
justify-content: center;
|
|
23
|
+
z-index: 500;
|
|
24
|
+
pointer-events: auto; /* Explicitly enable pointer events */
|
|
25
|
+
background: ${(props)=>setOpacity(props.theme.colors.neutral800, 0.2)};
|
|
26
|
+
`;
|
|
27
|
+
const ImageWrapper = styled.div`
|
|
28
|
+
max-width: 80vw;
|
|
29
|
+
max-height: 90vh;
|
|
30
|
+
display: flex;
|
|
31
|
+
align-items: center;
|
|
32
|
+
justify-content: center;
|
|
33
|
+
pointer-events: auto; /* Explicitly enable pointer events */
|
|
34
|
+
position: relative;
|
|
35
|
+
animation: ${ANIMATIONS.scaleIn} 0.3s ease;
|
|
36
|
+
`;
|
|
37
|
+
const StyledImg = styled(Base64Img)`
|
|
38
|
+
max-width: 100%;
|
|
39
|
+
max-height: 90vh;
|
|
40
|
+
object-fit: contain;
|
|
41
|
+
pointer-events: auto; /* Explicitly enable pointer events */
|
|
42
|
+
`;
|
|
43
|
+
/* -------------------------------------------------------------------------------------------------
|
|
44
|
+
* Modal
|
|
45
|
+
* -----------------------------------------------------------------------------------------------*/ // Use the existing FullScreenImage as our modal component
|
|
46
|
+
const ImageModal = ({ src, alt, onClose })=>{
|
|
47
|
+
const overlayRef = useRef(null);
|
|
48
|
+
const wrapperRef = useRef(null);
|
|
49
|
+
// Close on ESC key press
|
|
50
|
+
useEffect(()=>{
|
|
51
|
+
const handleKeyDown = (e)=>{
|
|
52
|
+
if (e.key === 'Escape') {
|
|
53
|
+
// Stop propagation to prevent closing parent modals
|
|
54
|
+
e.preventDefault();
|
|
55
|
+
e.stopPropagation();
|
|
56
|
+
onClose?.();
|
|
57
|
+
// The next 3 lines are critical: they completely stop the event
|
|
58
|
+
e.stopImmediatePropagation();
|
|
59
|
+
e.cancelBubble = true; // For older browsers
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
// Use capture phase to intercept event before it reaches other components
|
|
64
|
+
window.addEventListener('keydown', handleKeyDown, true);
|
|
65
|
+
return ()=>window.removeEventListener('keydown', handleKeyDown, true);
|
|
66
|
+
}, [
|
|
67
|
+
onClose
|
|
68
|
+
]);
|
|
69
|
+
// Setup click handlers
|
|
70
|
+
useEffect(()=>{
|
|
71
|
+
const handleOverlayClick = (e)=>{
|
|
72
|
+
// Only close if clicking directly on the overlay (not its children)
|
|
73
|
+
if (e.target === overlayRef.current) {
|
|
74
|
+
e.preventDefault();
|
|
75
|
+
e.stopPropagation();
|
|
76
|
+
onClose?.();
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
const handleWrapperClick = (e)=>{
|
|
80
|
+
// Stop propagation for clicks on the image wrapper
|
|
81
|
+
e.stopPropagation();
|
|
82
|
+
};
|
|
83
|
+
const overlay = overlayRef.current;
|
|
84
|
+
const wrapper = wrapperRef.current;
|
|
85
|
+
if (overlay) {
|
|
86
|
+
overlay.addEventListener('click', handleOverlayClick);
|
|
87
|
+
}
|
|
88
|
+
if (wrapper) {
|
|
89
|
+
wrapper.addEventListener('click', handleWrapperClick);
|
|
90
|
+
}
|
|
91
|
+
return ()=>{
|
|
92
|
+
if (overlay) {
|
|
93
|
+
overlay.removeEventListener('click', handleOverlayClick);
|
|
94
|
+
}
|
|
95
|
+
if (wrapper) {
|
|
96
|
+
wrapper.removeEventListener('click', handleWrapperClick);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
}, [
|
|
100
|
+
onClose
|
|
101
|
+
]);
|
|
102
|
+
// Using createPortal to render directly at document body level
|
|
103
|
+
return /*#__PURE__*/ createPortal(/*#__PURE__*/ jsx(Overlay, {
|
|
104
|
+
ref: overlayRef,
|
|
105
|
+
children: /*#__PURE__*/ jsx(ImageWrapper, {
|
|
106
|
+
ref: wrapperRef,
|
|
107
|
+
children: /*#__PURE__*/ jsx(StyledImg, {
|
|
108
|
+
src: src,
|
|
109
|
+
alt: alt
|
|
110
|
+
})
|
|
111
|
+
})
|
|
112
|
+
}), document.body);
|
|
113
|
+
};
|
|
114
|
+
/* -------------------------------------------------------------------------------------------------
|
|
115
|
+
* Root
|
|
116
|
+
* -----------------------------------------------------------------------------------------------*/ // Root component that provides context
|
|
117
|
+
const Root = ({ children, src, alt, onClose, defaultOpen = false })=>{
|
|
118
|
+
const [isOpen, setIsOpen] = useState(defaultOpen);
|
|
119
|
+
const open = ()=>setIsOpen(true);
|
|
120
|
+
const close = ()=>{
|
|
121
|
+
setIsOpen(false);
|
|
122
|
+
onClose?.();
|
|
123
|
+
};
|
|
124
|
+
return /*#__PURE__*/ jsxs(FullScreenImageContext.Provider, {
|
|
125
|
+
value: {
|
|
126
|
+
isOpen,
|
|
127
|
+
open,
|
|
128
|
+
close,
|
|
129
|
+
src,
|
|
130
|
+
alt
|
|
131
|
+
},
|
|
132
|
+
children: [
|
|
133
|
+
children,
|
|
134
|
+
isOpen && /*#__PURE__*/ jsx(ImageModal, {
|
|
135
|
+
src: src,
|
|
136
|
+
alt: alt,
|
|
137
|
+
onClose: close
|
|
138
|
+
})
|
|
139
|
+
]
|
|
140
|
+
});
|
|
141
|
+
};
|
|
142
|
+
/* -------------------------------------------------------------------------------------------------
|
|
143
|
+
* Hooks
|
|
144
|
+
* -----------------------------------------------------------------------------------------------*/ // Hook to use the context
|
|
145
|
+
const useFullScreenImage = ()=>{
|
|
146
|
+
const context = useContext(FullScreenImageContext);
|
|
147
|
+
if (!context) {
|
|
148
|
+
throw new Error('useFullScreenImage must be used within a FullScreenImage.Root');
|
|
149
|
+
}
|
|
150
|
+
return context;
|
|
151
|
+
};
|
|
152
|
+
/* -------------------------------------------------------------------------------------------------
|
|
153
|
+
* Trigger
|
|
154
|
+
* -----------------------------------------------------------------------------------------------*/ // Trigger component that opens the full screen image
|
|
155
|
+
const Trigger = ({ children, asChild = false })=>{
|
|
156
|
+
const { open } = useFullScreenImage();
|
|
157
|
+
const handleClick = (e)=>{
|
|
158
|
+
e.stopPropagation();
|
|
159
|
+
open();
|
|
160
|
+
};
|
|
161
|
+
if (asChild) {
|
|
162
|
+
return /*#__PURE__*/ jsx("div", {
|
|
163
|
+
onClick: handleClick,
|
|
164
|
+
style: {
|
|
165
|
+
cursor: 'pointer',
|
|
166
|
+
display: 'contents'
|
|
167
|
+
},
|
|
168
|
+
children: children
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
return /*#__PURE__*/ jsx("div", {
|
|
172
|
+
onClick: handleClick,
|
|
173
|
+
style: {
|
|
174
|
+
cursor: 'pointer'
|
|
175
|
+
},
|
|
176
|
+
children: children
|
|
177
|
+
});
|
|
178
|
+
};
|
|
179
|
+
/* -------------------------------------------------------------------------------------------------
|
|
180
|
+
* Export
|
|
181
|
+
* -----------------------------------------------------------------------------------------------*/ const FullScreenImage = {
|
|
182
|
+
Root,
|
|
183
|
+
Trigger
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
export { FullScreenImage, setOpacity };
|
|
187
|
+
//# sourceMappingURL=FullScreenImage.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FullScreenImage.mjs","sources":["../../../../../admin/src/components/AIChat/components/FullScreenImage.tsx"],"sourcesContent":["import { useEffect, useRef, createContext, useContext, useState, ReactNode } from 'react';\n\nimport { createPortal } from 'react-dom';\nimport { styled } from 'styled-components';\n\nimport { ANIMATIONS } from './animations';\nimport { Base64Img } from './Base64Image';\n\n/* -------------------------------------------------------------------------------------------------\n * Context\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FullScreenImageContextType {\n isOpen: boolean;\n open: () => void;\n close: () => void;\n src: string;\n alt: string;\n}\n\nconst FullScreenImageContext = createContext<FullScreenImageContextType | undefined>(undefined);\n\n/* -------------------------------------------------------------------------------------------------\n * Types\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FullScreenImageProps {\n src: string;\n alt: string;\n onClose?: () => void;\n}\n\ninterface FullScreenImageRootProps extends FullScreenImageProps {\n children: ReactNode;\n defaultOpen?: boolean;\n}\n\ninterface FullScreenImageTriggerProps {\n children: ReactNode;\n asChild?: boolean;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Styles\n * -----------------------------------------------------------------------------------------------*/\nexport const setOpacity = (hex: string, alpha: number) =>\n `${hex}${Math.floor(alpha * 255)\n .toString(16)\n .padStart(2, '0')}`;\n\nconst Overlay = styled.div`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100vw;\n height: 100vh;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 500;\n pointer-events: auto; /* Explicitly enable pointer events */\n background: ${(props) => setOpacity(props.theme.colors.neutral800, 0.2)};\n`;\n\nconst ImageWrapper = styled.div`\n max-width: 80vw;\n max-height: 90vh;\n display: flex;\n align-items: center;\n justify-content: center;\n pointer-events: auto; /* Explicitly enable pointer events */\n position: relative;\n animation: ${ANIMATIONS.scaleIn} 0.3s ease;\n`;\n\nconst StyledImg = styled(Base64Img)`\n max-width: 100%;\n max-height: 90vh;\n object-fit: contain;\n pointer-events: auto; /* Explicitly enable pointer events */\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * Modal\n * -----------------------------------------------------------------------------------------------*/\n\n// Use the existing FullScreenImage as our modal component\nconst ImageModal = ({ src, alt, onClose }: FullScreenImageProps) => {\n const overlayRef = useRef<HTMLDivElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n // Close on ESC key press\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n // Stop propagation to prevent closing parent modals\n e.preventDefault();\n e.stopPropagation();\n onClose?.();\n\n // The next 3 lines are critical: they completely stop the event\n e.stopImmediatePropagation();\n e.cancelBubble = true; // For older browsers\n return false;\n }\n };\n\n // Use capture phase to intercept event before it reaches other components\n window.addEventListener('keydown', handleKeyDown, true);\n return () => window.removeEventListener('keydown', handleKeyDown, true);\n }, [onClose]);\n\n // Setup click handlers\n useEffect(() => {\n const handleOverlayClick = (e: MouseEvent) => {\n // Only close if clicking directly on the overlay (not its children)\n if (e.target === overlayRef.current) {\n e.preventDefault();\n e.stopPropagation();\n onClose?.();\n }\n };\n\n const handleWrapperClick = (e: MouseEvent) => {\n // Stop propagation for clicks on the image wrapper\n e.stopPropagation();\n };\n\n const overlay = overlayRef.current;\n const wrapper = wrapperRef.current;\n\n if (overlay) {\n overlay.addEventListener('click', handleOverlayClick);\n }\n\n if (wrapper) {\n wrapper.addEventListener('click', handleWrapperClick);\n }\n\n return () => {\n if (overlay) {\n overlay.removeEventListener('click', handleOverlayClick);\n }\n\n if (wrapper) {\n wrapper.removeEventListener('click', handleWrapperClick);\n }\n };\n }, [onClose]);\n\n // Using createPortal to render directly at document body level\n return createPortal(\n <Overlay ref={overlayRef}>\n <ImageWrapper ref={wrapperRef}>\n <StyledImg src={src} alt={alt} />\n </ImageWrapper>\n </Overlay>,\n document.body\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\n// Root component that provides context\nconst Root = ({ children, src, alt, onClose, defaultOpen = false }: FullScreenImageRootProps) => {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n\n const open = () => setIsOpen(true);\n const close = () => {\n setIsOpen(false);\n onClose?.();\n };\n\n return (\n <FullScreenImageContext.Provider value={{ isOpen, open, close, src, alt }}>\n {children}\n {isOpen && <ImageModal src={src} alt={alt} onClose={close} />}\n </FullScreenImageContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Hooks\n * -----------------------------------------------------------------------------------------------*/\n\n// Hook to use the context\nconst useFullScreenImage = () => {\n const context = useContext(FullScreenImageContext);\n if (!context) {\n throw new Error('useFullScreenImage must be used within a FullScreenImage.Root');\n }\n return context;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Trigger\n * -----------------------------------------------------------------------------------------------*/\n\n// Trigger component that opens the full screen image\nconst Trigger = ({ children, asChild = false }: FullScreenImageTriggerProps) => {\n const { open } = useFullScreenImage();\n\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n open();\n };\n\n if (asChild) {\n return (\n <div onClick={handleClick} style={{ cursor: 'pointer', display: 'contents' }}>\n {children}\n </div>\n );\n }\n\n return (\n <div onClick={handleClick} style={{ cursor: 'pointer' }}>\n {children}\n </div>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Export\n * -----------------------------------------------------------------------------------------------*/\n\nexport const FullScreenImage = {\n Root,\n Trigger,\n};\n"],"names":["FullScreenImageContext","createContext","undefined","setOpacity","hex","alpha","Math","floor","toString","padStart","Overlay","styled","div","props","theme","colors","neutral800","ImageWrapper","ANIMATIONS","scaleIn","StyledImg","Base64Img","ImageModal","src","alt","onClose","overlayRef","useRef","wrapperRef","useEffect","handleKeyDown","e","key","preventDefault","stopPropagation","stopImmediatePropagation","cancelBubble","window","addEventListener","removeEventListener","handleOverlayClick","target","current","handleWrapperClick","overlay","wrapper","createPortal","_jsx","ref","document","body","Root","children","defaultOpen","isOpen","setIsOpen","useState","open","close","_jsxs","Provider","value","useFullScreenImage","context","useContext","Error","Trigger","asChild","handleClick","onClick","style","cursor","display","FullScreenImage"],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
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
|
+
var styledComponents = require('styled-components');
|
|
7
|
+
var animations = require('./animations.js');
|
|
8
|
+
var Base64Image = require('./Base64Image.js');
|
|
9
|
+
var FullScreenImage = require('./FullScreenImage.js');
|
|
10
|
+
|
|
11
|
+
const ImageContainer = styledComponents.styled(designSystem.Box)`
|
|
12
|
+
display: flex;
|
|
13
|
+
align-items: center;
|
|
14
|
+
justify-content: center;
|
|
15
|
+
height: 160px;
|
|
16
|
+
width: 100%;
|
|
17
|
+
border-radius: 4px 4px 0 0;
|
|
18
|
+
overflow: hidden;
|
|
19
|
+
cursor: pointer;
|
|
20
|
+
`;
|
|
21
|
+
const StyledImg = styledComponents.styled(Base64Image.Base64Img)`
|
|
22
|
+
width: 100%;
|
|
23
|
+
height: 100%;
|
|
24
|
+
object-fit: cover;
|
|
25
|
+
display: block;
|
|
26
|
+
// make it appear gracefully when first rendering
|
|
27
|
+
animation: ${animations.ANIMATIONS.fadeIn} 0.3s ease;
|
|
28
|
+
`;
|
|
29
|
+
const CardContainer = styledComponents.styled(designSystem.Card)`
|
|
30
|
+
height: 100%;
|
|
31
|
+
width: 100%;
|
|
32
|
+
${({ $selected, theme })=>$selected ? `
|
|
33
|
+
border: 2px solid ${theme.colors.primary600};
|
|
34
|
+
outline: 0px solid transparent;
|
|
35
|
+
` : `
|
|
36
|
+
border: 2px solid transparent;
|
|
37
|
+
outline: 1px solid ${theme.colors.neutral200};
|
|
38
|
+
`}
|
|
39
|
+
transition: all 0.2s ease-in-out;
|
|
40
|
+
`;
|
|
41
|
+
const ImagePreview = ({ imageUrl, imageName, selected = false, onSelect })=>{
|
|
42
|
+
return /*#__PURE__*/ jsxRuntime.jsx(FullScreenImage.FullScreenImage.Root, {
|
|
43
|
+
src: imageUrl,
|
|
44
|
+
alt: imageName,
|
|
45
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(CardContainer, {
|
|
46
|
+
role: "button",
|
|
47
|
+
$selected: selected,
|
|
48
|
+
children: [
|
|
49
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.CardHeader, {
|
|
50
|
+
children: [
|
|
51
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.CardCheckbox, {
|
|
52
|
+
checked: selected,
|
|
53
|
+
onCheckedChange: onSelect
|
|
54
|
+
}),
|
|
55
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.CardAction, {
|
|
56
|
+
position: "end",
|
|
57
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(FullScreenImage.FullScreenImage.Trigger, {
|
|
58
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
|
|
59
|
+
label: "Preview",
|
|
60
|
+
type: "button",
|
|
61
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(Icons.Expand, {})
|
|
62
|
+
})
|
|
63
|
+
})
|
|
64
|
+
}),
|
|
65
|
+
/*#__PURE__*/ jsxRuntime.jsx(ImageContainer, {
|
|
66
|
+
onClick: onSelect,
|
|
67
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(StyledImg, {
|
|
68
|
+
src: imageUrl,
|
|
69
|
+
alt: imageName
|
|
70
|
+
})
|
|
71
|
+
})
|
|
72
|
+
]
|
|
73
|
+
}),
|
|
74
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.CardBody, {
|
|
75
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.CardContent, {
|
|
76
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.CardTitle, {
|
|
77
|
+
children: imageName
|
|
78
|
+
})
|
|
79
|
+
})
|
|
80
|
+
})
|
|
81
|
+
]
|
|
82
|
+
})
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
exports.ImagePreview = ImagePreview;
|
|
87
|
+
//# sourceMappingURL=ImagePreview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImagePreview.js","sources":["../../../../../admin/src/components/AIChat/components/ImagePreview.tsx"],"sourcesContent":["import {\n Box,\n Card,\n CardBody,\n CardCheckbox,\n CardContent,\n CardHeader,\n CardAction,\n CardTitle,\n IconButton,\n} from '@strapi/design-system';\nimport { Expand } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\nimport { ANIMATIONS } from './animations';\nimport { Base64Img } from './Base64Image';\nimport { FullScreenImage } from './FullScreenImage';\n\ninterface Base64ImageProps {\n imageUrl: string;\n imageName: string;\n selected?: boolean;\n onSelect?: (selected: boolean) => void;\n}\n\nconst ImageContainer = styled(Box)`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 160px;\n width: 100%;\n border-radius: 4px 4px 0 0;\n overflow: hidden;\n cursor: pointer;\n`;\n\nconst StyledImg = styled(Base64Img)`\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n // make it appear gracefully when first rendering\n animation: ${ANIMATIONS.fadeIn} 0.3s ease;\n`;\n\nconst CardContainer = styled(Card)<{ $selected?: boolean }>`\n height: 100%;\n width: 100%;\n ${({ $selected, theme }) =>\n $selected\n ? `\n border: 2px solid ${theme.colors.primary600};\n outline: 0px solid transparent;\n `\n : `\n border: 2px solid transparent;\n outline: 1px solid ${theme.colors.neutral200};\n `}\n transition: all 0.2s ease-in-out;\n`;\n\nexport const ImagePreview = ({\n imageUrl,\n imageName,\n selected = false,\n onSelect,\n}: Base64ImageProps) => {\n return (\n <FullScreenImage.Root src={imageUrl} alt={imageName}>\n <CardContainer role=\"button\" $selected={selected}>\n <CardHeader>\n <CardCheckbox checked={selected} onCheckedChange={onSelect} />\n <CardAction position=\"end\">\n <FullScreenImage.Trigger>\n <IconButton label=\"Preview\" type=\"button\">\n <Expand />\n </IconButton>\n </FullScreenImage.Trigger>\n </CardAction>\n <ImageContainer onClick={onSelect}>\n <StyledImg src={imageUrl} alt={imageName} />\n </ImageContainer>\n </CardHeader>\n\n <CardBody>\n <CardContent>\n <CardTitle>{imageName}</CardTitle>\n </CardContent>\n </CardBody>\n </CardContainer>\n </FullScreenImage.Root>\n );\n};\n"],"names":["ImageContainer","styled","Box","StyledImg","Base64Img","ANIMATIONS","fadeIn","CardContainer","Card","$selected","theme","colors","primary600","neutral200","ImagePreview","imageUrl","imageName","selected","onSelect","_jsx","FullScreenImage","Root","src","alt","_jsxs","role","CardHeader","CardCheckbox","checked","onCheckedChange","CardAction","position","Trigger","IconButton","label","type","Expand","onClick","CardBody","CardContent","CardTitle"],"mappings":";;;;;;;;;;AAyBA,MAAMA,cAAAA,GAAiBC,uBAAOC,CAAAA,gBAAAA,CAAI;;;;;;;;;AASlC,CAAC;AAED,MAAMC,SAAAA,GAAYF,uBAAOG,CAAAA,qBAAAA,CAAU;;;;;;aAMtB,EAAEC,qBAAAA,CAAWC,MAAM,CAAC;AACjC,CAAC;AAED,MAAMC,aAAAA,GAAgBN,uBAAOO,CAAAA,iBAAAA,CAA8B;;;EAGzD,EAAE,CAAC,EAAEC,SAAS,EAAEC,KAAK,EAAE,GACrBD,YACI;AACgB,wBAAA,EAAEC,KAAMC,CAAAA,MAAM,CAACC,UAAU,CAAC;;AAE9C,IAAA,CAAC,GACG;;AAEiB,yBAAA,EAAEF,KAAMC,CAAAA,MAAM,CAACE,UAAU,CAAC;AAC/C,IAAA,CAAC;;AAEL,CAAC;AAEYC,MAAAA,YAAAA,GAAe,CAAC,EAC3BC,QAAQ,EACRC,SAAS,EACTC,QAAW,GAAA,KAAK,EAChBC,QAAQ,EACS,GAAA;IACjB,qBACEC,cAAA,CAACC,gCAAgBC,IAAI,EAAA;QAACC,GAAKP,EAAAA,QAAAA;QAAUQ,GAAKP,EAAAA,SAAAA;AACxC,QAAA,QAAA,gBAAAQ,eAACjB,CAAAA,aAAAA,EAAAA;YAAckB,IAAK,EAAA,QAAA;YAAShB,SAAWQ,EAAAA,QAAAA;;8BACtCO,eAACE,CAAAA,uBAAAA,EAAAA;;sCACCP,cAACQ,CAAAA,yBAAAA,EAAAA;4BAAaC,OAASX,EAAAA,QAAAA;4BAAUY,eAAiBX,EAAAA;;sCAClDC,cAACW,CAAAA,uBAAAA,EAAAA;4BAAWC,QAAS,EAAA,KAAA;oDACnBZ,cAAA,CAACC,gCAAgBY,OAAO,EAAA;AACtB,gCAAA,QAAA,gBAAAb,cAACc,CAAAA,uBAAAA,EAAAA;oCAAWC,KAAM,EAAA,SAAA;oCAAUC,IAAK,EAAA,QAAA;AAC/B,oCAAA,QAAA,gBAAAhB,cAACiB,CAAAA,YAAAA,EAAAA,EAAAA;;;;sCAIPjB,cAACnB,CAAAA,cAAAA,EAAAA;4BAAeqC,OAASnB,EAAAA,QAAAA;AACvB,4BAAA,QAAA,gBAAAC,cAAChB,CAAAA,SAAAA,EAAAA;gCAAUmB,GAAKP,EAAAA,QAAAA;gCAAUQ,GAAKP,EAAAA;;;;;8BAInCG,cAACmB,CAAAA,qBAAAA,EAAAA;AACC,oBAAA,QAAA,gBAAAnB,cAACoB,CAAAA,wBAAAA,EAAAA;AACC,wBAAA,QAAA,gBAAApB,cAACqB,CAAAA,sBAAAA,EAAAA;AAAWxB,4BAAAA,QAAAA,EAAAA;;;;;;;AAMxB;;;;"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { Box, Card, CardHeader, CardCheckbox, CardAction, IconButton, CardBody, CardContent, CardTitle } from '@strapi/design-system';
|
|
3
|
+
import { Expand } from '@strapi/icons';
|
|
4
|
+
import { styled } from 'styled-components';
|
|
5
|
+
import { ANIMATIONS } from './animations.mjs';
|
|
6
|
+
import { Base64Img } from './Base64Image.mjs';
|
|
7
|
+
import { FullScreenImage } from './FullScreenImage.mjs';
|
|
8
|
+
|
|
9
|
+
const ImageContainer = styled(Box)`
|
|
10
|
+
display: flex;
|
|
11
|
+
align-items: center;
|
|
12
|
+
justify-content: center;
|
|
13
|
+
height: 160px;
|
|
14
|
+
width: 100%;
|
|
15
|
+
border-radius: 4px 4px 0 0;
|
|
16
|
+
overflow: hidden;
|
|
17
|
+
cursor: pointer;
|
|
18
|
+
`;
|
|
19
|
+
const StyledImg = styled(Base64Img)`
|
|
20
|
+
width: 100%;
|
|
21
|
+
height: 100%;
|
|
22
|
+
object-fit: cover;
|
|
23
|
+
display: block;
|
|
24
|
+
// make it appear gracefully when first rendering
|
|
25
|
+
animation: ${ANIMATIONS.fadeIn} 0.3s ease;
|
|
26
|
+
`;
|
|
27
|
+
const CardContainer = styled(Card)`
|
|
28
|
+
height: 100%;
|
|
29
|
+
width: 100%;
|
|
30
|
+
${({ $selected, theme })=>$selected ? `
|
|
31
|
+
border: 2px solid ${theme.colors.primary600};
|
|
32
|
+
outline: 0px solid transparent;
|
|
33
|
+
` : `
|
|
34
|
+
border: 2px solid transparent;
|
|
35
|
+
outline: 1px solid ${theme.colors.neutral200};
|
|
36
|
+
`}
|
|
37
|
+
transition: all 0.2s ease-in-out;
|
|
38
|
+
`;
|
|
39
|
+
const ImagePreview = ({ imageUrl, imageName, selected = false, onSelect })=>{
|
|
40
|
+
return /*#__PURE__*/ jsx(FullScreenImage.Root, {
|
|
41
|
+
src: imageUrl,
|
|
42
|
+
alt: imageName,
|
|
43
|
+
children: /*#__PURE__*/ jsxs(CardContainer, {
|
|
44
|
+
role: "button",
|
|
45
|
+
$selected: selected,
|
|
46
|
+
children: [
|
|
47
|
+
/*#__PURE__*/ jsxs(CardHeader, {
|
|
48
|
+
children: [
|
|
49
|
+
/*#__PURE__*/ jsx(CardCheckbox, {
|
|
50
|
+
checked: selected,
|
|
51
|
+
onCheckedChange: onSelect
|
|
52
|
+
}),
|
|
53
|
+
/*#__PURE__*/ jsx(CardAction, {
|
|
54
|
+
position: "end",
|
|
55
|
+
children: /*#__PURE__*/ jsx(FullScreenImage.Trigger, {
|
|
56
|
+
children: /*#__PURE__*/ jsx(IconButton, {
|
|
57
|
+
label: "Preview",
|
|
58
|
+
type: "button",
|
|
59
|
+
children: /*#__PURE__*/ jsx(Expand, {})
|
|
60
|
+
})
|
|
61
|
+
})
|
|
62
|
+
}),
|
|
63
|
+
/*#__PURE__*/ jsx(ImageContainer, {
|
|
64
|
+
onClick: onSelect,
|
|
65
|
+
children: /*#__PURE__*/ jsx(StyledImg, {
|
|
66
|
+
src: imageUrl,
|
|
67
|
+
alt: imageName
|
|
68
|
+
})
|
|
69
|
+
})
|
|
70
|
+
]
|
|
71
|
+
}),
|
|
72
|
+
/*#__PURE__*/ jsx(CardBody, {
|
|
73
|
+
children: /*#__PURE__*/ jsx(CardContent, {
|
|
74
|
+
children: /*#__PURE__*/ jsx(CardTitle, {
|
|
75
|
+
children: imageName
|
|
76
|
+
})
|
|
77
|
+
})
|
|
78
|
+
})
|
|
79
|
+
]
|
|
80
|
+
})
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export { ImagePreview };
|
|
85
|
+
//# sourceMappingURL=ImagePreview.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImagePreview.mjs","sources":["../../../../../admin/src/components/AIChat/components/ImagePreview.tsx"],"sourcesContent":["import {\n Box,\n Card,\n CardBody,\n CardCheckbox,\n CardContent,\n CardHeader,\n CardAction,\n CardTitle,\n IconButton,\n} from '@strapi/design-system';\nimport { Expand } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\nimport { ANIMATIONS } from './animations';\nimport { Base64Img } from './Base64Image';\nimport { FullScreenImage } from './FullScreenImage';\n\ninterface Base64ImageProps {\n imageUrl: string;\n imageName: string;\n selected?: boolean;\n onSelect?: (selected: boolean) => void;\n}\n\nconst ImageContainer = styled(Box)`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 160px;\n width: 100%;\n border-radius: 4px 4px 0 0;\n overflow: hidden;\n cursor: pointer;\n`;\n\nconst StyledImg = styled(Base64Img)`\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n // make it appear gracefully when first rendering\n animation: ${ANIMATIONS.fadeIn} 0.3s ease;\n`;\n\nconst CardContainer = styled(Card)<{ $selected?: boolean }>`\n height: 100%;\n width: 100%;\n ${({ $selected, theme }) =>\n $selected\n ? `\n border: 2px solid ${theme.colors.primary600};\n outline: 0px solid transparent;\n `\n : `\n border: 2px solid transparent;\n outline: 1px solid ${theme.colors.neutral200};\n `}\n transition: all 0.2s ease-in-out;\n`;\n\nexport const ImagePreview = ({\n imageUrl,\n imageName,\n selected = false,\n onSelect,\n}: Base64ImageProps) => {\n return (\n <FullScreenImage.Root src={imageUrl} alt={imageName}>\n <CardContainer role=\"button\" $selected={selected}>\n <CardHeader>\n <CardCheckbox checked={selected} onCheckedChange={onSelect} />\n <CardAction position=\"end\">\n <FullScreenImage.Trigger>\n <IconButton label=\"Preview\" type=\"button\">\n <Expand />\n </IconButton>\n </FullScreenImage.Trigger>\n </CardAction>\n <ImageContainer onClick={onSelect}>\n <StyledImg src={imageUrl} alt={imageName} />\n </ImageContainer>\n </CardHeader>\n\n <CardBody>\n <CardContent>\n <CardTitle>{imageName}</CardTitle>\n </CardContent>\n </CardBody>\n </CardContainer>\n </FullScreenImage.Root>\n );\n};\n"],"names":["ImageContainer","styled","Box","StyledImg","Base64Img","ANIMATIONS","fadeIn","CardContainer","Card","$selected","theme","colors","primary600","neutral200","ImagePreview","imageUrl","imageName","selected","onSelect","_jsx","FullScreenImage","Root","src","alt","_jsxs","role","CardHeader","CardCheckbox","checked","onCheckedChange","CardAction","position","Trigger","IconButton","label","type","Expand","onClick","CardBody","CardContent","CardTitle"],"mappings":";;;;;;;;AAyBA,MAAMA,cAAAA,GAAiBC,MAAOC,CAAAA,GAAAA,CAAI;;;;;;;;;AASlC,CAAC;AAED,MAAMC,SAAAA,GAAYF,MAAOG,CAAAA,SAAAA,CAAU;;;;;;aAMtB,EAAEC,UAAAA,CAAWC,MAAM,CAAC;AACjC,CAAC;AAED,MAAMC,aAAAA,GAAgBN,MAAOO,CAAAA,IAAAA,CAA8B;;;EAGzD,EAAE,CAAC,EAAEC,SAAS,EAAEC,KAAK,EAAE,GACrBD,YACI;AACgB,wBAAA,EAAEC,KAAMC,CAAAA,MAAM,CAACC,UAAU,CAAC;;AAE9C,IAAA,CAAC,GACG;;AAEiB,yBAAA,EAAEF,KAAMC,CAAAA,MAAM,CAACE,UAAU,CAAC;AAC/C,IAAA,CAAC;;AAEL,CAAC;AAEYC,MAAAA,YAAAA,GAAe,CAAC,EAC3BC,QAAQ,EACRC,SAAS,EACTC,QAAW,GAAA,KAAK,EAChBC,QAAQ,EACS,GAAA;IACjB,qBACEC,GAAA,CAACC,gBAAgBC,IAAI,EAAA;QAACC,GAAKP,EAAAA,QAAAA;QAAUQ,GAAKP,EAAAA,SAAAA;AACxC,QAAA,QAAA,gBAAAQ,IAACjB,CAAAA,aAAAA,EAAAA;YAAckB,IAAK,EAAA,QAAA;YAAShB,SAAWQ,EAAAA,QAAAA;;8BACtCO,IAACE,CAAAA,UAAAA,EAAAA;;sCACCP,GAACQ,CAAAA,YAAAA,EAAAA;4BAAaC,OAASX,EAAAA,QAAAA;4BAAUY,eAAiBX,EAAAA;;sCAClDC,GAACW,CAAAA,UAAAA,EAAAA;4BAAWC,QAAS,EAAA,KAAA;oDACnBZ,GAAA,CAACC,gBAAgBY,OAAO,EAAA;AACtB,gCAAA,QAAA,gBAAAb,GAACc,CAAAA,UAAAA,EAAAA;oCAAWC,KAAM,EAAA,SAAA;oCAAUC,IAAK,EAAA,QAAA;AAC/B,oCAAA,QAAA,gBAAAhB,GAACiB,CAAAA,MAAAA,EAAAA,EAAAA;;;;sCAIPjB,GAACnB,CAAAA,cAAAA,EAAAA;4BAAeqC,OAASnB,EAAAA,QAAAA;AACvB,4BAAA,QAAA,gBAAAC,GAAChB,CAAAA,SAAAA,EAAAA;gCAAUmB,GAAKP,EAAAA,QAAAA;gCAAUQ,GAAKP,EAAAA;;;;;8BAInCG,GAACmB,CAAAA,QAAAA,EAAAA;AACC,oBAAA,QAAA,gBAAAnB,GAACoB,CAAAA,WAAAA,EAAAA;AACC,wBAAA,QAAA,gBAAApB,GAACqB,CAAAA,SAAAA,EAAAA;AAAWxB,4BAAAA,QAAAA,EAAAA;;;;;;;AAMxB;;;;"}
|