@strapi/content-type-builder 5.37.1 → 5.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/AIChat/Chat.js.map +1 -1
- package/dist/admin/components/AIChat/Chat.mjs +2 -2
- package/dist/admin/components/AIChat/Chat.mjs.map +1 -1
- package/dist/admin/components/AIChat/FeedbackModal.js.map +1 -1
- package/dist/admin/components/AIChat/FeedbackModal.mjs +1 -1
- package/dist/admin/components/AIChat/FeedbackModal.mjs.map +1 -1
- package/dist/admin/components/AIChat/UploadCodeModal.js.map +1 -1
- package/dist/admin/components/AIChat/UploadCodeModal.mjs +1 -1
- package/dist/admin/components/AIChat/UploadCodeModal.mjs.map +1 -1
- package/dist/admin/components/AIChat/UploadFigmaModal.js.map +1 -1
- package/dist/admin/components/AIChat/UploadFigmaModal.mjs +1 -1
- package/dist/admin/components/AIChat/UploadFigmaModal.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Alert.js.map +1 -1
- package/dist/admin/components/AIChat/components/Alert.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/AnimatedBox.js.map +1 -1
- package/dist/admin/components/AIChat/components/AnimatedBox.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Attachments/AttachmentPreview.js.map +1 -1
- package/dist/admin/components/AIChat/components/Attachments/AttachmentPreview.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Attachments/components/Attachment.js.map +1 -1
- package/dist/admin/components/AIChat/components/Attachments/components/Attachment.mjs +1 -1
- package/dist/admin/components/AIChat/components/Attachments/components/Attachment.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Base64Image.js.map +1 -1
- package/dist/admin/components/AIChat/components/Base64Image.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Collapsible.js.map +1 -1
- package/dist/admin/components/AIChat/components/Collapsible.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Dropzone.js +2 -6
- package/dist/admin/components/AIChat/components/Dropzone.js.map +1 -1
- package/dist/admin/components/AIChat/components/Dropzone.mjs +3 -7
- package/dist/admin/components/AIChat/components/Dropzone.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/FloatingPanel.js.map +1 -1
- package/dist/admin/components/AIChat/components/FloatingPanel.mjs +1 -1
- package/dist/admin/components/AIChat/components/FloatingPanel.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/FullScreenImage.js.map +1 -1
- package/dist/admin/components/AIChat/components/FullScreenImage.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/ImagePreview.js.map +1 -1
- package/dist/admin/components/AIChat/components/ImagePreview.mjs +1 -1
- package/dist/admin/components/AIChat/components/ImagePreview.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Input.js +1 -5
- package/dist/admin/components/AIChat/components/Input.js.map +1 -1
- package/dist/admin/components/AIChat/components/Input.mjs +4 -7
- package/dist/admin/components/AIChat/components/Input.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Messages/Marker.js.map +1 -1
- package/dist/admin/components/AIChat/components/Messages/Marker.mjs +2 -2
- package/dist/admin/components/AIChat/components/Messages/Marker.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Messages/Message.js.map +1 -1
- package/dist/admin/components/AIChat/components/Messages/Message.mjs +1 -1
- package/dist/admin/components/AIChat/components/Messages/Message.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/ResizableTextArea.js.map +1 -1
- package/dist/admin/components/AIChat/components/ResizableTextArea.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/SimpleMenu.js.map +1 -1
- package/dist/admin/components/AIChat/components/SimpleMenu.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/StepModal.js.map +1 -1
- package/dist/admin/components/AIChat/components/StepModal.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/animations.js.map +1 -1
- package/dist/admin/components/AIChat/components/animations.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/icons/FigmaIcon.js.map +1 -1
- package/dist/admin/components/AIChat/components/icons/FigmaIcon.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/icons/StopIcon.js.map +1 -1
- package/dist/admin/components/AIChat/components/icons/StopIcon.mjs.map +1 -1
- package/dist/admin/components/AIChat/hooks/useAIFetch.js.map +1 -1
- package/dist/admin/components/AIChat/hooks/useAIFetch.mjs.map +1 -1
- package/dist/admin/components/AIChat/hooks/useAttachments.js.map +1 -1
- package/dist/admin/components/AIChat/hooks/useAttachments.mjs.map +1 -1
- package/dist/admin/components/AIChat/hooks/useChatTitle.js.map +1 -1
- package/dist/admin/components/AIChat/hooks/useChatTitle.mjs.map +1 -1
- package/dist/admin/components/AIChat/hooks/useCodeUpload.js.map +1 -1
- package/dist/admin/components/AIChat/hooks/useCodeUpload.mjs.map +1 -1
- package/dist/admin/components/AIChat/hooks/useFeedback.js.map +1 -1
- package/dist/admin/components/AIChat/hooks/useFeedback.mjs.map +1 -1
- package/dist/admin/components/AIChat/hooks/useFigmaUpload.js.map +1 -1
- package/dist/admin/components/AIChat/hooks/useFigmaUpload.mjs.map +1 -1
- package/dist/admin/components/AIChat/hooks/useLastSeenSchemas.js.map +1 -1
- package/dist/admin/components/AIChat/hooks/useLastSeenSchemas.mjs.map +1 -1
- package/dist/admin/components/AIChat/hooks/useTranslations.js.map +1 -1
- package/dist/admin/components/AIChat/hooks/useTranslations.mjs.map +1 -1
- package/dist/admin/components/AIChat/lib/aiClient.js.map +1 -1
- package/dist/admin/components/AIChat/lib/aiClient.mjs.map +1 -1
- package/dist/admin/components/AIChat/lib/constants.js.map +1 -1
- package/dist/admin/components/AIChat/lib/constants.mjs.map +1 -1
- package/dist/admin/components/AIChat/lib/misc.js.map +1 -1
- package/dist/admin/components/AIChat/lib/misc.mjs.map +1 -1
- package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.js.map +1 -1
- package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.mjs.map +1 -1
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.js.map +1 -1
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs.map +1 -1
- package/dist/admin/components/AIChat/providers/ChatProvider.js.map +1 -1
- package/dist/admin/components/AIChat/providers/ChatProvider.mjs.map +1 -1
- package/dist/admin/components/AIChat/providers/SchemaProvider.js.map +1 -1
- package/dist/admin/components/AIChat/providers/SchemaProvider.mjs.map +1 -1
- package/dist/admin/components/AllowedTypesSelect.js.map +1 -1
- package/dist/admin/components/AllowedTypesSelect.mjs.map +1 -1
- package/dist/admin/components/ApplyConditionButton.js.map +1 -1
- package/dist/admin/components/ApplyConditionButton.mjs.map +1 -1
- package/dist/admin/components/AttributeIcon.js.map +1 -1
- package/dist/admin/components/AttributeIcon.mjs +1 -1
- package/dist/admin/components/AttributeIcon.mjs.map +1 -1
- package/dist/admin/components/AttributeOptions/AttributeList.js.map +1 -1
- package/dist/admin/components/AttributeOptions/AttributeList.mjs.map +1 -1
- package/dist/admin/components/AttributeOptions/AttributeOption.js.map +1 -1
- package/dist/admin/components/AttributeOptions/AttributeOption.mjs.map +1 -1
- package/dist/admin/components/AttributeOptions/AttributeOptions.js.map +1 -1
- package/dist/admin/components/AttributeOptions/AttributeOptions.mjs.map +1 -1
- package/dist/admin/components/AttributeOptions/CustomFieldOption.js.map +1 -1
- package/dist/admin/components/AttributeOptions/CustomFieldOption.mjs.map +1 -1
- package/dist/admin/components/AttributeOptions/CustomFieldsList.js.map +1 -1
- package/dist/admin/components/AttributeOptions/CustomFieldsList.mjs.map +1 -1
- package/dist/admin/components/AttributeOptions/EmptyAttributes.js.map +1 -1
- package/dist/admin/components/AttributeOptions/EmptyAttributes.mjs.map +1 -1
- package/dist/admin/components/AttributeOptions/OptionBoxWrapper.js.map +1 -1
- package/dist/admin/components/AttributeOptions/OptionBoxWrapper.mjs.map +1 -1
- package/dist/admin/components/AttributeRow.js.map +1 -1
- package/dist/admin/components/AttributeRow.mjs +1 -1
- package/dist/admin/components/AttributeRow.mjs.map +1 -1
- package/dist/admin/components/AutoReloadOverlayBlocker.js.map +1 -1
- package/dist/admin/components/AutoReloadOverlayBlocker.mjs.map +1 -1
- package/dist/admin/components/BooleanDefaultValueSelect.js.map +1 -1
- package/dist/admin/components/BooleanDefaultValueSelect.mjs.map +1 -1
- package/dist/admin/components/BooleanRadioGroup.js.map +1 -1
- package/dist/admin/components/BooleanRadioGroup.mjs.map +1 -1
- package/dist/admin/components/CTBSession/CTBSessionProvider.js.map +1 -1
- package/dist/admin/components/CTBSession/CTBSessionProvider.mjs.map +1 -1
- package/dist/admin/components/CTBSession/sessionContext.js.map +1 -1
- package/dist/admin/components/CTBSession/sessionContext.mjs.map +1 -1
- package/dist/admin/components/CTBSession/useCTBSession.js.map +1 -1
- package/dist/admin/components/CTBSession/useCTBSession.mjs.map +1 -1
- package/dist/admin/components/CTBSession/useCTBTracking.js.map +1 -1
- package/dist/admin/components/CTBSession/useCTBTracking.mjs.map +1 -1
- package/dist/admin/components/CheckboxWithNumberField.js.map +1 -1
- package/dist/admin/components/CheckboxWithNumberField.mjs.map +1 -1
- package/dist/admin/components/ComponentCard/ComponentCard.js.map +1 -1
- package/dist/admin/components/ComponentCard/ComponentCard.mjs +1 -1
- package/dist/admin/components/ComponentCard/ComponentCard.mjs.map +1 -1
- package/dist/admin/components/ComponentCard/ComponentIcon/ComponentIcon.js.map +1 -1
- package/dist/admin/components/ComponentCard/ComponentIcon/ComponentIcon.mjs.map +1 -1
- package/dist/admin/components/ComponentList.js.map +1 -1
- package/dist/admin/components/ComponentList.mjs.map +1 -1
- package/dist/admin/components/ComponentRow.js.map +1 -1
- package/dist/admin/components/ComponentRow.mjs.map +1 -1
- package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.js.map +1 -1
- package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.mjs +2 -2
- package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.mjs.map +1 -1
- package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js.map +1 -1
- package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.mjs.map +1 -1
- package/dist/admin/components/ContentTypeRadioGroup.js.map +1 -1
- package/dist/admin/components/ContentTypeRadioGroup.mjs.map +1 -1
- package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.js.map +1 -1
- package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.mjs.map +1 -1
- package/dist/admin/components/CustomRadioGroup/Styles.js.map +1 -1
- package/dist/admin/components/CustomRadioGroup/Styles.mjs +1 -1
- package/dist/admin/components/CustomRadioGroup/Styles.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/DataManagerProvider.js.map +1 -1
- package/dist/admin/components/DataManager/DataManagerProvider.mjs +1 -1
- package/dist/admin/components/DataManager/DataManagerProvider.mjs.map +1 -1
- package/dist/admin/components/DataManager/reducer.js.map +1 -1
- package/dist/admin/components/DataManager/reducer.mjs.map +1 -1
- package/dist/admin/components/DataManager/undoRedo.js.map +1 -1
- package/dist/admin/components/DataManager/undoRedo.mjs.map +1 -1
- package/dist/admin/components/DataManager/useDataManager.js.map +1 -1
- package/dist/admin/components/DataManager/useDataManager.mjs.map +1 -1
- package/dist/admin/components/DataManager/useServerRestartWatcher.js.map +1 -1
- package/dist/admin/components/DataManager/useServerRestartWatcher.mjs.map +1 -1
- package/dist/admin/components/DataManager/utils/cleanData.js.map +1 -1
- package/dist/admin/components/DataManager/utils/cleanData.mjs.map +1 -1
- package/dist/admin/components/DataManager/utils/retrieveComponentsThatHaveComponents.js.map +1 -1
- package/dist/admin/components/DataManager/utils/retrieveComponentsThatHaveComponents.mjs.map +1 -1
- package/dist/admin/components/DataManager/utils/retrieveNestedComponents.js.map +1 -1
- package/dist/admin/components/DataManager/utils/retrieveNestedComponents.mjs.map +1 -1
- package/dist/admin/components/DataManager/utils/retrieveSpecificInfoFromComponents.js.map +1 -1
- package/dist/admin/components/DataManager/utils/retrieveSpecificInfoFromComponents.mjs.map +1 -1
- package/dist/admin/components/DisplayedType.js.map +1 -1
- package/dist/admin/components/DisplayedType.mjs.map +1 -1
- package/dist/admin/components/DraftAndPublishToggle.js.map +1 -1
- package/dist/admin/components/DraftAndPublishToggle.mjs.map +1 -1
- package/dist/admin/components/DynamicZoneList.js.map +1 -1
- package/dist/admin/components/DynamicZoneList.mjs +1 -1
- package/dist/admin/components/DynamicZoneList.mjs.map +1 -1
- package/dist/admin/components/ExitPrompt.js.map +1 -1
- package/dist/admin/components/ExitPrompt.mjs.map +1 -1
- package/dist/admin/components/Footers.js.map +1 -1
- package/dist/admin/components/Footers.mjs +2 -2
- package/dist/admin/components/Footers.mjs.map +1 -1
- package/dist/admin/components/FormModal/FormModal.js.map +1 -1
- package/dist/admin/components/FormModal/FormModal.mjs +1 -1
- package/dist/admin/components/FormModal/FormModal.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/ConditionForm.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/ConditionForm.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/advancedForm.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/advancedForm.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/attributeOptions.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/attributeOptions.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/baseForm.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/baseForm.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/commonBaseForm.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/commonBaseForm.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/form.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/form.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/nameField.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/nameField.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/types.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/types.mjs +1 -1
- package/dist/admin/components/FormModal/attributes/types.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/validation/common.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/validation/common.mjs.map +1 -1
- package/dist/admin/components/FormModal/component/componentField.js.map +1 -1
- package/dist/admin/components/FormModal/component/componentField.mjs.map +1 -1
- package/dist/admin/components/FormModal/component/componentForm.js.map +1 -1
- package/dist/admin/components/FormModal/component/componentForm.mjs.map +1 -1
- package/dist/admin/components/FormModal/component/createComponentSchema.js.map +1 -1
- package/dist/admin/components/FormModal/component/createComponentSchema.mjs.map +1 -1
- package/dist/admin/components/FormModal/contentType/contentTypeForm.js.map +1 -1
- package/dist/admin/components/FormModal/contentType/contentTypeForm.mjs.map +1 -1
- package/dist/admin/components/FormModal/contentType/createContentTypeSchema.js.map +1 -1
- package/dist/admin/components/FormModal/contentType/createContentTypeSchema.mjs.map +1 -1
- package/dist/admin/components/FormModal/dynamiczoneForm.js.map +1 -1
- package/dist/admin/components/FormModal/dynamiczoneForm.mjs.map +1 -1
- package/dist/admin/components/FormModal/forms/forms.js.map +1 -1
- package/dist/admin/components/FormModal/forms/forms.mjs.map +1 -1
- package/dist/admin/components/FormModal/forms/utils/addItemsToFormSection.js.map +1 -1
- package/dist/admin/components/FormModal/forms/utils/addItemsToFormSection.mjs.map +1 -1
- package/dist/admin/components/FormModal/forms/utils/createCollectionName.js.map +1 -1
- package/dist/admin/components/FormModal/forms/utils/createCollectionName.mjs.map +1 -1
- package/dist/admin/components/FormModal/forms/utils/getUsedAttributeNames.js.map +1 -1
- package/dist/admin/components/FormModal/forms/utils/getUsedAttributeNames.mjs.map +1 -1
- package/dist/admin/components/FormModal/reducer.js.map +1 -1
- package/dist/admin/components/FormModal/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/components/FormModal/utils/createUid.js.map +1 -1
- package/dist/admin/components/FormModal/utils/createUid.mjs.map +1 -1
- package/dist/admin/components/FormModal/utils/customFieldDefaultOptionsReducer.js.map +1 -1
- package/dist/admin/components/FormModal/utils/customFieldDefaultOptionsReducer.mjs.map +1 -1
- package/dist/admin/components/FormModal/utils/getAttributesToDisplay.js.map +1 -1
- package/dist/admin/components/FormModal/utils/getAttributesToDisplay.mjs.map +1 -1
- package/dist/admin/components/FormModal/utils/getFormInputNames.js.map +1 -1
- package/dist/admin/components/FormModal/utils/getFormInputNames.mjs.map +1 -1
- package/dist/admin/components/FormModal/utils/relations.js.map +1 -1
- package/dist/admin/components/FormModal/utils/relations.mjs.map +1 -1
- package/dist/admin/components/FormModalEndActions.js.map +1 -1
- package/dist/admin/components/FormModalEndActions.mjs.map +1 -1
- package/dist/admin/components/FormModalHeader.js.map +1 -1
- package/dist/admin/components/FormModalHeader.mjs.map +1 -1
- package/dist/admin/components/FormModalNavigation/FormModalNavigationContext.js.map +1 -1
- package/dist/admin/components/FormModalNavigation/FormModalNavigationContext.mjs.map +1 -1
- package/dist/admin/components/FormModalNavigation/FormModalNavigationProvider.js.map +1 -1
- package/dist/admin/components/FormModalNavigation/FormModalNavigationProvider.mjs.map +1 -1
- package/dist/admin/components/FormModalNavigation/useFormModalNavigation.js.map +1 -1
- package/dist/admin/components/FormModalNavigation/useFormModalNavigation.mjs.map +1 -1
- package/dist/admin/components/FormModalSubHeader.js.map +1 -1
- package/dist/admin/components/FormModalSubHeader.mjs.map +1 -1
- package/dist/admin/components/GenericInputs.js +1 -5
- package/dist/admin/components/GenericInputs.js.map +1 -1
- package/dist/admin/components/GenericInputs.mjs +1 -5
- package/dist/admin/components/GenericInputs.mjs.map +1 -1
- package/dist/admin/components/IconPicker/IconPicker.js.map +1 -1
- package/dist/admin/components/IconPicker/IconPicker.mjs +1 -1
- package/dist/admin/components/IconPicker/IconPicker.mjs.map +1 -1
- package/dist/admin/components/IconPicker/constants.js.map +1 -1
- package/dist/admin/components/IconPicker/constants.mjs.map +1 -1
- package/dist/admin/components/List.js.map +1 -1
- package/dist/admin/components/List.mjs +1 -1
- package/dist/admin/components/List.mjs.map +1 -1
- package/dist/admin/components/PluralName.js.map +1 -1
- package/dist/admin/components/PluralName.mjs.map +1 -1
- package/dist/admin/components/Relation/Relation.js.map +1 -1
- package/dist/admin/components/Relation/Relation.mjs.map +1 -1
- package/dist/admin/components/Relation/RelationField/RelationField.js.map +1 -1
- package/dist/admin/components/Relation/RelationField/RelationField.mjs.map +1 -1
- package/dist/admin/components/Relation/RelationField/RelationTargetPicker/RelationTargetPicker.js.map +1 -1
- package/dist/admin/components/Relation/RelationField/RelationTargetPicker/RelationTargetPicker.mjs.map +1 -1
- package/dist/admin/components/Relation/RelationNaturePicker/Components.js.map +1 -1
- package/dist/admin/components/Relation/RelationNaturePicker/Components.mjs.map +1 -1
- package/dist/admin/components/Relation/RelationNaturePicker/RelationNaturePicker.js.map +1 -1
- package/dist/admin/components/Relation/RelationNaturePicker/RelationNaturePicker.mjs +1 -1
- package/dist/admin/components/Relation/RelationNaturePicker/RelationNaturePicker.mjs.map +1 -1
- package/dist/admin/components/SelectCategory.js.map +1 -1
- package/dist/admin/components/SelectCategory.mjs.map +1 -1
- package/dist/admin/components/SelectComponent.js.map +1 -1
- package/dist/admin/components/SelectComponent.mjs.map +1 -1
- package/dist/admin/components/SelectComponents.js.map +1 -1
- package/dist/admin/components/SelectComponents.mjs.map +1 -1
- package/dist/admin/components/SelectDateType.js.map +1 -1
- package/dist/admin/components/SelectDateType.mjs.map +1 -1
- package/dist/admin/components/SelectNumber.js.map +1 -1
- package/dist/admin/components/SelectNumber.mjs.map +1 -1
- package/dist/admin/components/SingularName.js.map +1 -1
- package/dist/admin/components/SingularName.mjs.map +1 -1
- package/dist/admin/components/Status.js.map +1 -1
- package/dist/admin/components/Status.mjs.map +1 -1
- package/dist/admin/components/TabForm.js.map +1 -1
- package/dist/admin/components/TabForm.mjs.map +1 -1
- package/dist/admin/components/TextareaEnum.js.map +1 -1
- package/dist/admin/components/TextareaEnum.mjs.map +1 -1
- package/dist/admin/constants.js.map +1 -1
- package/dist/admin/constants.mjs.map +1 -1
- package/dist/admin/icons/Curve.js.map +1 -1
- package/dist/admin/icons/Curve.mjs.map +1 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/pages/App/index.js.map +1 -1
- package/dist/admin/pages/App/index.mjs.map +1 -1
- package/dist/admin/pages/ListView/EmptyState.js.map +1 -1
- package/dist/admin/pages/ListView/EmptyState.mjs +1 -1
- package/dist/admin/pages/ListView/EmptyState.mjs.map +1 -1
- package/dist/admin/pages/ListView/LinkToCMSettingsView.js.map +1 -1
- package/dist/admin/pages/ListView/LinkToCMSettingsView.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListView.js.map +1 -1
- package/dist/admin/pages/ListView/ListView.mjs +1 -1
- package/dist/admin/pages/ListView/ListView.mjs.map +1 -1
- package/dist/admin/reducers.js +4 -4
- package/dist/admin/reducers.js.map +1 -1
- package/dist/admin/reducers.mjs +4 -4
- package/dist/admin/reducers.mjs.map +1 -1
- package/dist/admin/utils/conditions.js.map +1 -1
- package/dist/admin/utils/conditions.mjs.map +1 -1
- package/dist/admin/utils/findAttribute.js.map +1 -1
- package/dist/admin/utils/findAttribute.mjs.map +1 -1
- package/dist/admin/utils/formAPI.js.map +1 -1
- package/dist/admin/utils/formAPI.mjs.map +1 -1
- package/dist/admin/utils/getAttributeDisplayedType.js.map +1 -1
- package/dist/admin/utils/getAttributeDisplayedType.mjs.map +1 -1
- package/dist/admin/utils/getMaxDepth.js.map +1 -1
- package/dist/admin/utils/getMaxDepth.mjs.map +1 -1
- package/dist/admin/utils/getRelationType.js.map +1 -1
- package/dist/admin/utils/getRelationType.mjs.map +1 -1
- package/dist/admin/utils/getTrad.js.map +1 -1
- package/dist/admin/utils/getTrad.mjs.map +1 -1
- package/dist/admin/utils/getYupInnerErrors.js.map +1 -1
- package/dist/admin/utils/getYupInnerErrors.mjs.map +1 -1
- package/dist/admin/utils/isAllowedContentTypesForRelations.js.map +1 -1
- package/dist/admin/utils/isAllowedContentTypesForRelations.mjs.map +1 -1
- package/dist/admin/utils/makeUnique.js.map +1 -1
- package/dist/admin/utils/makeUnique.mjs.map +1 -1
- package/dist/admin/utils/nameToSlug.js.map +1 -1
- package/dist/admin/utils/nameToSlug.mjs.map +1 -1
- package/dist/admin/utils/parseDateValue.js.map +1 -1
- package/dist/admin/utils/parseDateValue.mjs.map +1 -1
- package/dist/admin/utils/prefixPluginTranslations.js.map +1 -1
- package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -1
- package/dist/admin/utils/timeFormat.js.map +1 -1
- package/dist/admin/utils/timeFormat.mjs.map +1 -1
- package/dist/admin/utils/toRegressedEnumValue.js.map +1 -1
- package/dist/admin/utils/toRegressedEnumValue.mjs.map +1 -1
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/bootstrap.mjs.map +1 -1
- package/dist/server/config.js.map +1 -1
- package/dist/server/config.mjs.map +1 -1
- package/dist/server/controllers/builder.js.map +1 -1
- package/dist/server/controllers/builder.mjs.map +1 -1
- package/dist/server/controllers/component-categories.js.map +1 -1
- package/dist/server/controllers/component-categories.mjs.map +1 -1
- package/dist/server/controllers/components.js.map +1 -1
- package/dist/server/controllers/components.mjs +1 -1
- package/dist/server/controllers/components.mjs.map +1 -1
- package/dist/server/controllers/content-types.js.map +1 -1
- package/dist/server/controllers/content-types.mjs +1 -1
- package/dist/server/controllers/content-types.mjs.map +1 -1
- package/dist/server/controllers/index.js.map +1 -1
- package/dist/server/controllers/index.mjs.map +1 -1
- package/dist/server/controllers/schema.js.map +1 -1
- package/dist/server/controllers/schema.mjs.map +1 -1
- package/dist/server/controllers/validation/common.js.map +1 -1
- package/dist/server/controllers/validation/common.mjs.map +1 -1
- package/dist/server/controllers/validation/component-category.js.map +1 -1
- package/dist/server/controllers/validation/component-category.mjs.map +1 -1
- package/dist/server/controllers/validation/component.js.map +1 -1
- package/dist/server/controllers/validation/component.mjs +1 -1
- package/dist/server/controllers/validation/component.mjs.map +1 -1
- package/dist/server/controllers/validation/content-type.js.map +1 -1
- package/dist/server/controllers/validation/content-type.mjs.map +1 -1
- package/dist/server/controllers/validation/data-transform.js.map +1 -1
- package/dist/server/controllers/validation/data-transform.mjs.map +1 -1
- package/dist/server/controllers/validation/model-schema.js.map +1 -1
- package/dist/server/controllers/validation/model-schema.mjs.map +1 -1
- package/dist/server/controllers/validation/relations.js.map +1 -1
- package/dist/server/controllers/validation/relations.mjs.map +1 -1
- package/dist/server/controllers/validation/schema.js.map +1 -1
- package/dist/server/controllers/validation/schema.mjs +1 -1
- package/dist/server/controllers/validation/schema.mjs.map +1 -1
- package/dist/server/controllers/validation/types.js +0 -1
- package/dist/server/controllers/validation/types.js.map +1 -1
- package/dist/server/controllers/validation/types.mjs +1 -2
- package/dist/server/controllers/validation/types.mjs.map +1 -1
- package/dist/server/index.js +8 -8
- package/dist/server/middlewares/is-development-mode.js.map +1 -1
- package/dist/server/middlewares/is-development-mode.mjs.map +1 -1
- package/dist/server/register.js.map +1 -1
- package/dist/server/register.mjs.map +1 -1
- package/dist/server/routes/admin.js.map +1 -1
- package/dist/server/routes/admin.mjs.map +1 -1
- package/dist/server/routes/content-api.js.map +1 -1
- package/dist/server/routes/content-api.mjs.map +1 -1
- package/dist/server/routes/index.js.map +1 -1
- package/dist/server/routes/index.mjs.map +1 -1
- package/dist/server/services/api-handler.js.map +1 -1
- package/dist/server/services/api-handler.mjs.map +1 -1
- package/dist/server/services/builder.js.map +1 -1
- package/dist/server/services/builder.mjs.map +1 -1
- package/dist/server/services/component-categories.js.map +1 -1
- package/dist/server/services/component-categories.mjs +1 -1
- package/dist/server/services/component-categories.mjs.map +1 -1
- package/dist/server/services/components.js.map +1 -1
- package/dist/server/services/components.mjs +1 -1
- package/dist/server/services/components.mjs.map +1 -1
- package/dist/server/services/constants.js.map +1 -1
- package/dist/server/services/constants.mjs.map +1 -1
- package/dist/server/services/content-types.js.map +1 -1
- package/dist/server/services/content-types.mjs +1 -1
- package/dist/server/services/content-types.mjs.map +1 -1
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/index.mjs.map +1 -1
- package/dist/server/services/schema-builder/component-builder.js.map +1 -1
- package/dist/server/services/schema-builder/component-builder.mjs +1 -1
- package/dist/server/services/schema-builder/component-builder.mjs.map +1 -1
- package/dist/server/services/schema-builder/content-type-builder.js.map +1 -1
- package/dist/server/services/schema-builder/content-type-builder.mjs +2 -2
- package/dist/server/services/schema-builder/content-type-builder.mjs.map +1 -1
- package/dist/server/services/schema-builder/index.js.map +1 -1
- package/dist/server/services/schema-builder/index.mjs +3 -3
- package/dist/server/services/schema-builder/index.mjs.map +1 -1
- package/dist/server/services/schema-builder/schema-handler.js.map +1 -1
- package/dist/server/services/schema-builder/schema-handler.mjs.map +1 -1
- package/dist/server/services/schema.js.map +1 -1
- package/dist/server/services/schema.mjs +1 -1
- package/dist/server/services/schema.mjs.map +1 -1
- package/dist/server/utils/attributes.js.map +1 -1
- package/dist/server/utils/attributes.mjs.map +1 -1
- package/dist/server/utils/index.js.map +1 -1
- package/dist/server/utils/index.mjs.map +1 -1
- package/dist/server/utils/typeguards.js.map +1 -1
- package/dist/server/utils/typeguards.mjs.map +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UploadCodeModal.js","sources":["../../../../admin/src/components/AIChat/UploadCodeModal.tsx"],"sourcesContent":["import { createContext, useContext, useRef, useState } from 'react';\n\nimport { Flex, Typography, Box } from '@strapi/design-system';\nimport { Folder, FileZip } from '@strapi/icons';\n\nimport { AttachmentPreview } from './components/Attachments/AttachmentPreview';\nimport { StepModal, useStepModal } from './components/StepModal';\nimport { useAttachments } from './hooks/useAttachments';\nimport { useCodeUpload } from './hooks/useCodeUpload';\nimport { useTranslations } from './hooks/useTranslations';\nimport { STRAPI_CODE_MIME_TYPE } from './lib/constants';\nimport { generateId } from './lib/misc';\nimport { Attachment } from './lib/types/attachments';\nimport { useStrapiChat } from './providers/ChatProvider';\n\n/* -------------------------------------------------------------------------------------------------\n * Provider\n * -----------------------------------------------------------------------------------------------*/\ninterface UploadProjectContextType {\n isCodeUploadOpen: boolean;\n submitOnFinish: boolean;\n openCodeUpload: (submitOnFinish?: boolean) => void;\n closeCodeUpload: () => void;\n}\n\nconst UploadProjectContext = createContext<UploadProjectContextType>({\n isCodeUploadOpen: false,\n submitOnFinish: false,\n openCodeUpload: () => {},\n closeCodeUpload: () => {},\n});\n\nexport const useUploadProjectToChat = () => useContext(UploadProjectContext);\n\nexport const UploadProjectToChatProvider = ({ children }: { children: React.ReactNode }) => {\n const [isCodeUploadOpen, setIsCodeUploadOpen] = useState(false);\n const [submitOnFinish, setSubmitOnFinish] = useState(false);\n\n const openCodeUpload = (submitOnFinish?: boolean) => {\n setIsCodeUploadOpen(true);\n setSubmitOnFinish(submitOnFinish ?? false);\n };\n\n const closeCodeUpload = () => setIsCodeUploadOpen(false);\n\n return (\n <UploadProjectContext.Provider\n value={{ isCodeUploadOpen, submitOnFinish, openCodeUpload, closeCodeUpload }}\n >\n {isCodeUploadOpen && <UploadCodeModal />}\n {children}\n </UploadProjectContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Drop Zone\n * -----------------------------------------------------------------------------------------------*/\ninterface DropZoneProps {\n importType: 'folder' | 'zip';\n onAddFiles: (files: File[]) => void;\n error?: string | null;\n}\n\nconst DropZone = ({ importType, onAddFiles, error }: DropZoneProps) => {\n const [dragOver, setDragOver] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const { t } = useTranslations();\n\n const handleDragOver = (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n };\n\n const handleDragEnter = (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n setDragOver(true);\n };\n\n const handleDragLeave = () => setDragOver(false);\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n inputRef.current?.click();\n };\n\n const handleChange = () => {\n const files = inputRef.current?.files;\n if (files) {\n onAddFiles(Array.from(files));\n }\n };\n\n /**\n * Recursively reads a directory and its contents\n */\n const readDirectory = async (entry: FileSystemDirectoryEntry): Promise<File[]> => {\n const reader = entry.createReader();\n const getEntries = (): Promise<FileSystemEntry[]> => {\n return new Promise((resolve, reject) => {\n reader.readEntries(resolve, reject);\n });\n };\n\n const files: File[] = [];\n let entries: FileSystemEntry[] = [];\n\n // Read entries in batches until no more entries are left\n do {\n entries = await getEntries();\n for (const entry of entries) {\n if (entry.isFile) {\n const fileEntry = entry as FileSystemFileEntry;\n const file = await new Promise<File>((resolve, reject) => {\n fileEntry.file(resolve, reject);\n });\n\n // Store the full path including the directory structure\n Object.defineProperty(file, 'webkitRelativePath', {\n writable: true,\n value: entry.fullPath.substring(1), // Remove leading slash\n });\n\n files.push(file);\n } else if (entry.isDirectory) {\n // Recursively process subdirectories\n const dirEntry = entry as FileSystemDirectoryEntry;\n const subFiles = await readDirectory(dirEntry);\n files.push(...subFiles);\n }\n }\n } while (entries.length > 0);\n\n return files;\n };\n\n const handleDrop = async (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n setDragOver(false);\n\n if (!e.dataTransfer?.items) {\n return;\n }\n\n // For folder upload, process directories recursively\n if (importType === 'folder') {\n const items = e.dataTransfer.items;\n const allFiles: File[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n // Use webkitGetAsEntry to access the file system entry\n const entry = item.webkitGetAsEntry?.();\n\n if (entry) {\n if (entry.isDirectory) {\n const files = await readDirectory(entry as FileSystemDirectoryEntry);\n allFiles.push(...files);\n } else if (entry.isFile) {\n const file = await new Promise<File>((resolve, reject) => {\n (entry as FileSystemFileEntry).file(resolve, reject);\n });\n allFiles.push(file);\n }\n }\n }\n\n if (allFiles.length > 0) {\n onAddFiles(allFiles);\n }\n } else {\n // For zip files, just import them regularly\n if (e.dataTransfer.files) {\n onAddFiles(Array.from(e.dataTransfer.files));\n }\n }\n };\n\n return (\n <Flex\n position=\"relative\"\n cursor=\"pointer\"\n width=\"100%\"\n height=\"100%\"\n minHeight=\"140px\"\n borderStyle=\"dashed\"\n borderColor={dragOver ? 'primary500' : error ? 'danger600' : 'neutral200'}\n background={dragOver ? 'primary100' : error ? 'danger100' : 'neutral100'}\n hasRadius\n padding={7}\n justifyContent=\"center\"\n direction=\"column\"\n alignItems=\"center\"\n gap={2}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n {importType === 'zip' ? (\n <FileZip width={'24px'} height={'24px'} />\n ) : (\n <Folder width={'24px'} height={'24px'} />\n )}\n <Flex direction=\"column\" alignItems=\"center\" gap={2}>\n <Typography variant=\"omega\" textColor=\"neutral600\" textAlign=\"center\">\n {importType === 'zip'\n ? t('chat.code-upload.drop-zone', 'Drop here a .zip file here or')\n : t('chat.code-upload.drop-zone-folder', 'Drop here a folder here or')}{' '}\n <Typography variant=\"omega\" textColor=\"primary600\" onClick={handleClick}>\n {t('chat.code-upload.drop-zone-browse', 'browse files')}\n </Typography>\n </Typography>\n {error && (\n <Typography variant=\"pi\" textColor=\"danger600\">\n {error}\n </Typography>\n )}\n </Flex>\n <Box\n tag=\"input\"\n position=\"absolute\"\n left={0}\n right={0}\n bottom={0}\n top={0}\n width=\"100%\"\n name=\"code\"\n aria-label=\"Upload project\"\n tabIndex={-1}\n zIndex={1}\n ref={inputRef}\n onChange={handleChange}\n style={{ opacity: 0, cursor: 'pointer' }}\n type=\"file\"\n {...(importType === 'zip'\n ? { accept: '.zip', multiple: false }\n : { multiple: true, webkitdirectory: '', directory: '' })}\n />\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Step 1 - Upload Code\n * -----------------------------------------------------------------------------------------------*/\ninterface CodeUploadStepProps {\n setFileName: (name: string | null) => void;\n error: string | null;\n processZipFile: (file: File) => void;\n processFolder: (files: File[]) => Promise<Attachment>;\n}\n\nconst CodeUploadStep = ({\n setFileName,\n error,\n processZipFile,\n processFolder,\n}: CodeUploadStepProps) => {\n const { t } = useTranslations();\n const { nextStep } = useStepModal();\n\n return (\n <Flex direction=\"column\" gap={6} alignItems=\"start\" width=\"100%\">\n <Flex direction=\"column\" gap={2} alignItems=\"start\">\n <Typography variant=\"beta\">{t('chat.code-upload.title', 'Import code')}</Typography>\n <Typography variant=\"omega\" textColor=\"neutral600\">\n {t(\n 'chat.code-upload.description',\n 'Your app will be analyzed by AI. Make sure to remove all sensitive data before importation.'\n )}\n </Typography>\n </Flex>\n\n <Flex gap={3} width=\"100%\" wrap=\"wrap\">\n <Box flex={1} minWidth=\"200px\">\n <DropZone\n importType=\"zip\"\n onAddFiles={(files: FileList | File[]) => {\n if (files.length > 0) {\n const file = files[0];\n setFileName(file.name.replace('.zip', ''));\n nextStep();\n processZipFile(file);\n }\n }}\n error={error}\n />\n </Box>\n <Box flex={1} minWidth=\"200px\">\n <DropZone\n importType=\"folder\"\n onAddFiles={async (files: File[]) => {\n if (files.length > 0) {\n try {\n // Get the folder name from the first file's path\n const firstFile = files[0];\n const folderPath = firstFile.webkitRelativePath || '';\n const folderName = folderPath.split('/')[0] || 'Project';\n\n setFileName(folderName);\n nextStep();\n\n // Process the folder files\n await processFolder(files);\n } catch (err) {\n console.error('Error processing folder:', err);\n }\n }\n }}\n error={error}\n />\n </Box>\n </Flex>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Step 2 - Confirmation\n * -----------------------------------------------------------------------------------------------*/\ninterface CodeConfirmationStepProps {\n projectName: string | null;\n isLoading: boolean;\n error: string | null;\n}\n\nconst CodeConfirmationStep = ({ projectName, isLoading, error }: CodeConfirmationStepProps) => {\n const { t } = useTranslations();\n\n return (\n <Flex direction=\"column\" gap={6} alignItems=\"start\" width=\"100%\">\n <Flex direction=\"column\" gap={2} alignItems=\"start\">\n <Typography variant=\"beta\">\n {t('chat.code-upload.confirmation-title', 'Confirm Code Import')}\n </Typography>\n <Typography variant=\"omega\" textColor=\"neutral600\">\n {t(\n 'chat.code-upload.confirmation-description',\n 'Your code is ready to be imported. Click finish to add it to your chat.'\n )}\n </Typography>\n </Flex>\n\n <Box width=\"100%\">\n <AttachmentPreview\n attachment={{\n id: generateId(),\n status: isLoading ? 'loading' : 'ready',\n filename: projectName || '',\n url: '',\n type: 'file',\n mediaType: STRAPI_CODE_MIME_TYPE,\n }}\n error={error}\n minWidth=\"256px\"\n />\n </Box>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Modal\n * -----------------------------------------------------------------------------------------------*/\nexport const UploadCodeModal = () => {\n const [projectName, setProjectName] = useState<string | null>(null);\n const [projectAttachment, setProjectAttachment] = useState<Attachment | null>(null);\n const { t } = useTranslations();\n\n // Attach files to the chat\n const { addAttachments } = useAttachments();\n\n const { processZipFile, processFolder, isLoading, error } = useCodeUpload({\n onSuccess: (file) => setProjectAttachment(file),\n });\n\n const { isCodeUploadOpen, closeCodeUpload, submitOnFinish } = useUploadProjectToChat();\n const { sendMessage, openChat, input, setInput } = useStrapiChat();\n\n const handleCancel = () => {\n setProjectName(null);\n setProjectAttachment(null);\n closeCodeUpload();\n };\n\n const handleComplete = async () => {\n // Ensure chat is opened\n openChat();\n\n if (projectAttachment && submitOnFinish) {\n sendMessage({\n role: 'user',\n parts: [\n {\n type: 'text',\n text: 'Create schemas from my uploaded project',\n },\n projectAttachment,\n ],\n });\n } else if (projectAttachment) {\n // If input is empty, set a predefined message\n if (!input) {\n setInput('Create schemas from my uploaded project');\n }\n // Attach files to the chat input\n addAttachments([projectAttachment]);\n }\n\n closeCodeUpload();\n };\n\n const validateUploadStep = () => {\n return !!projectAttachment;\n };\n\n return (\n <StepModal\n open={isCodeUploadOpen}\n onOpenChange={(isOpen) => {\n if (!isOpen) handleCancel();\n }}\n title={t('chat.code-upload.header', 'Import code')}\n onCancel={handleCancel}\n onComplete={handleComplete}\n >\n <StepModal.Step\n title={t('chat.code-upload.step1-title', 'Import code')}\n nextLabel={t('chat.code-upload.continue-button', 'Continue')}\n cancelLabel={t('common.cancel', 'Cancel')}\n disableNext={!projectAttachment || isLoading}\n onNext={validateUploadStep}\n >\n <CodeUploadStep\n setFileName={setProjectName}\n error={error}\n processZipFile={processZipFile}\n processFolder={processFolder}\n />\n </StepModal.Step>\n\n <StepModal.Step\n title={t('chat.code-upload.step2-title', 'Confirm')}\n nextLabel={t('common.finish', 'Finish')}\n backLabel={t('form.button.back', 'Back')}\n disableNext={!projectAttachment || isLoading}\n >\n <CodeConfirmationStep projectName={projectName} isLoading={isLoading} error={error} />\n </StepModal.Step>\n </StepModal>\n );\n};\n"],"names":["UploadProjectContext","createContext","isCodeUploadOpen","submitOnFinish","openCodeUpload","closeCodeUpload","useUploadProjectToChat","useContext","UploadProjectToChatProvider","children","setIsCodeUploadOpen","useState","setSubmitOnFinish","_jsxs","Provider","value","_jsx","UploadCodeModal","DropZone","importType","onAddFiles","error","dragOver","setDragOver","inputRef","useRef","t","useTranslations","handleDragOver","event","preventDefault","handleDragEnter","handleDragLeave","handleClick","e","current","click","handleChange","files","Array","from","readDirectory","entry","reader","createReader","getEntries","Promise","resolve","reject","readEntries","entries","isFile","fileEntry","file","Object","defineProperty","writable","fullPath","substring","push","isDirectory","dirEntry","subFiles","length","handleDrop","dataTransfer","items","allFiles","i","item","webkitGetAsEntry","Flex","position","cursor","width","height","minHeight","borderStyle","borderColor","background","hasRadius","padding","justifyContent","direction","alignItems","gap","onDragEnter","onDragLeave","onDragOver","onDrop","FileZip","Folder","Typography","variant","textColor","textAlign","onClick","Box","tag","left","right","bottom","top","name","aria-label","tabIndex","zIndex","ref","onChange","style","opacity","type","accept","multiple","webkitdirectory","directory","CodeUploadStep","setFileName","processZipFile","processFolder","nextStep","useStepModal","wrap","flex","minWidth","replace","firstFile","folderPath","webkitRelativePath","folderName","split","err","console","CodeConfirmationStep","projectName","isLoading","AttachmentPreview","attachment","id","generateId","status","filename","url","mediaType","STRAPI_CODE_MIME_TYPE","setProjectName","projectAttachment","setProjectAttachment","addAttachments","useAttachments","useCodeUpload","onSuccess","sendMessage","openChat","input","setInput","useStrapiChat","handleCancel","handleComplete","role","parts","text","validateUploadStep","StepModal","open","onOpenChange","isOpen","title","onCancel","onComplete","Step","nextLabel","cancelLabel","disableNext","onNext","backLabel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UploadCodeModal.js","sources":["../../../../admin/src/components/AIChat/UploadCodeModal.tsx"],"sourcesContent":["import { createContext, useContext, useRef, useState } from 'react';\n\nimport { Flex, Typography, Box } from '@strapi/design-system';\nimport { Folder, FileZip } from '@strapi/icons';\n\nimport { AttachmentPreview } from './components/Attachments/AttachmentPreview';\nimport { StepModal, useStepModal } from './components/StepModal';\nimport { useAttachments } from './hooks/useAttachments';\nimport { useCodeUpload } from './hooks/useCodeUpload';\nimport { useTranslations } from './hooks/useTranslations';\nimport { STRAPI_CODE_MIME_TYPE } from './lib/constants';\nimport { generateId } from './lib/misc';\nimport { Attachment } from './lib/types/attachments';\nimport { useStrapiChat } from './providers/ChatProvider';\n\n/* -------------------------------------------------------------------------------------------------\n * Provider\n * -----------------------------------------------------------------------------------------------*/\ninterface UploadProjectContextType {\n isCodeUploadOpen: boolean;\n submitOnFinish: boolean;\n openCodeUpload: (submitOnFinish?: boolean) => void;\n closeCodeUpload: () => void;\n}\n\nconst UploadProjectContext = createContext<UploadProjectContextType>({\n isCodeUploadOpen: false,\n submitOnFinish: false,\n openCodeUpload: () => {},\n closeCodeUpload: () => {},\n});\n\nexport const useUploadProjectToChat = () => useContext(UploadProjectContext);\n\nexport const UploadProjectToChatProvider = ({ children }: { children: React.ReactNode }) => {\n const [isCodeUploadOpen, setIsCodeUploadOpen] = useState(false);\n const [submitOnFinish, setSubmitOnFinish] = useState(false);\n\n const openCodeUpload = (submitOnFinish?: boolean) => {\n setIsCodeUploadOpen(true);\n setSubmitOnFinish(submitOnFinish ?? false);\n };\n\n const closeCodeUpload = () => setIsCodeUploadOpen(false);\n\n return (\n <UploadProjectContext.Provider\n value={{ isCodeUploadOpen, submitOnFinish, openCodeUpload, closeCodeUpload }}\n >\n {isCodeUploadOpen && <UploadCodeModal />}\n {children}\n </UploadProjectContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Drop Zone\n * -----------------------------------------------------------------------------------------------*/\ninterface DropZoneProps {\n importType: 'folder' | 'zip';\n onAddFiles: (files: File[]) => void;\n error?: string | null;\n}\n\nconst DropZone = ({ importType, onAddFiles, error }: DropZoneProps) => {\n const [dragOver, setDragOver] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const { t } = useTranslations();\n\n const handleDragOver = (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n };\n\n const handleDragEnter = (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n setDragOver(true);\n };\n\n const handleDragLeave = () => setDragOver(false);\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n inputRef.current?.click();\n };\n\n const handleChange = () => {\n const files = inputRef.current?.files;\n if (files) {\n onAddFiles(Array.from(files));\n }\n };\n\n /**\n * Recursively reads a directory and its contents\n */\n const readDirectory = async (entry: FileSystemDirectoryEntry): Promise<File[]> => {\n const reader = entry.createReader();\n const getEntries = (): Promise<FileSystemEntry[]> => {\n return new Promise((resolve, reject) => {\n reader.readEntries(resolve, reject);\n });\n };\n\n const files: File[] = [];\n let entries: FileSystemEntry[] = [];\n\n // Read entries in batches until no more entries are left\n do {\n entries = await getEntries();\n for (const entry of entries) {\n if (entry.isFile) {\n const fileEntry = entry as FileSystemFileEntry;\n const file = await new Promise<File>((resolve, reject) => {\n fileEntry.file(resolve, reject);\n });\n\n // Store the full path including the directory structure\n Object.defineProperty(file, 'webkitRelativePath', {\n writable: true,\n value: entry.fullPath.substring(1), // Remove leading slash\n });\n\n files.push(file);\n } else if (entry.isDirectory) {\n // Recursively process subdirectories\n const dirEntry = entry as FileSystemDirectoryEntry;\n const subFiles = await readDirectory(dirEntry);\n files.push(...subFiles);\n }\n }\n } while (entries.length > 0);\n\n return files;\n };\n\n const handleDrop = async (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n setDragOver(false);\n\n if (!e.dataTransfer?.items) {\n return;\n }\n\n // For folder upload, process directories recursively\n if (importType === 'folder') {\n const items = e.dataTransfer.items;\n const allFiles: File[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n // Use webkitGetAsEntry to access the file system entry\n const entry = item.webkitGetAsEntry?.();\n\n if (entry) {\n if (entry.isDirectory) {\n const files = await readDirectory(entry as FileSystemDirectoryEntry);\n allFiles.push(...files);\n } else if (entry.isFile) {\n const file = await new Promise<File>((resolve, reject) => {\n (entry as FileSystemFileEntry).file(resolve, reject);\n });\n allFiles.push(file);\n }\n }\n }\n\n if (allFiles.length > 0) {\n onAddFiles(allFiles);\n }\n } else {\n // For zip files, just import them regularly\n if (e.dataTransfer.files) {\n onAddFiles(Array.from(e.dataTransfer.files));\n }\n }\n };\n\n return (\n <Flex\n position=\"relative\"\n cursor=\"pointer\"\n width=\"100%\"\n height=\"100%\"\n minHeight=\"140px\"\n borderStyle=\"dashed\"\n borderColor={dragOver ? 'primary500' : error ? 'danger600' : 'neutral200'}\n background={dragOver ? 'primary100' : error ? 'danger100' : 'neutral100'}\n hasRadius\n padding={7}\n justifyContent=\"center\"\n direction=\"column\"\n alignItems=\"center\"\n gap={2}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n {importType === 'zip' ? (\n <FileZip width={'24px'} height={'24px'} />\n ) : (\n <Folder width={'24px'} height={'24px'} />\n )}\n <Flex direction=\"column\" alignItems=\"center\" gap={2}>\n <Typography variant=\"omega\" textColor=\"neutral600\" textAlign=\"center\">\n {importType === 'zip'\n ? t('chat.code-upload.drop-zone', 'Drop here a .zip file here or')\n : t('chat.code-upload.drop-zone-folder', 'Drop here a folder here or')}{' '}\n <Typography variant=\"omega\" textColor=\"primary600\" onClick={handleClick}>\n {t('chat.code-upload.drop-zone-browse', 'browse files')}\n </Typography>\n </Typography>\n {error && (\n <Typography variant=\"pi\" textColor=\"danger600\">\n {error}\n </Typography>\n )}\n </Flex>\n <Box\n tag=\"input\"\n position=\"absolute\"\n left={0}\n right={0}\n bottom={0}\n top={0}\n width=\"100%\"\n name=\"code\"\n aria-label=\"Upload project\"\n tabIndex={-1}\n zIndex={1}\n ref={inputRef}\n onChange={handleChange}\n style={{ opacity: 0, cursor: 'pointer' }}\n type=\"file\"\n {...(importType === 'zip'\n ? { accept: '.zip', multiple: false }\n : { multiple: true, webkitdirectory: '', directory: '' })}\n />\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Step 1 - Upload Code\n * -----------------------------------------------------------------------------------------------*/\ninterface CodeUploadStepProps {\n setFileName: (name: string | null) => void;\n error: string | null;\n processZipFile: (file: File) => void;\n processFolder: (files: File[]) => Promise<Attachment>;\n}\n\nconst CodeUploadStep = ({\n setFileName,\n error,\n processZipFile,\n processFolder,\n}: CodeUploadStepProps) => {\n const { t } = useTranslations();\n const { nextStep } = useStepModal();\n\n return (\n <Flex direction=\"column\" gap={6} alignItems=\"start\" width=\"100%\">\n <Flex direction=\"column\" gap={2} alignItems=\"start\">\n <Typography variant=\"beta\">{t('chat.code-upload.title', 'Import code')}</Typography>\n <Typography variant=\"omega\" textColor=\"neutral600\">\n {t(\n 'chat.code-upload.description',\n 'Your app will be analyzed by AI. Make sure to remove all sensitive data before importation.'\n )}\n </Typography>\n </Flex>\n\n <Flex gap={3} width=\"100%\" wrap=\"wrap\">\n <Box flex={1} minWidth=\"200px\">\n <DropZone\n importType=\"zip\"\n onAddFiles={(files: FileList | File[]) => {\n if (files.length > 0) {\n const file = files[0];\n setFileName(file.name.replace('.zip', ''));\n nextStep();\n processZipFile(file);\n }\n }}\n error={error}\n />\n </Box>\n <Box flex={1} minWidth=\"200px\">\n <DropZone\n importType=\"folder\"\n onAddFiles={async (files: File[]) => {\n if (files.length > 0) {\n try {\n // Get the folder name from the first file's path\n const firstFile = files[0];\n const folderPath = firstFile.webkitRelativePath || '';\n const folderName = folderPath.split('/')[0] || 'Project';\n\n setFileName(folderName);\n nextStep();\n\n // Process the folder files\n await processFolder(files);\n } catch (err) {\n console.error('Error processing folder:', err);\n }\n }\n }}\n error={error}\n />\n </Box>\n </Flex>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Step 2 - Confirmation\n * -----------------------------------------------------------------------------------------------*/\ninterface CodeConfirmationStepProps {\n projectName: string | null;\n isLoading: boolean;\n error: string | null;\n}\n\nconst CodeConfirmationStep = ({ projectName, isLoading, error }: CodeConfirmationStepProps) => {\n const { t } = useTranslations();\n\n return (\n <Flex direction=\"column\" gap={6} alignItems=\"start\" width=\"100%\">\n <Flex direction=\"column\" gap={2} alignItems=\"start\">\n <Typography variant=\"beta\">\n {t('chat.code-upload.confirmation-title', 'Confirm Code Import')}\n </Typography>\n <Typography variant=\"omega\" textColor=\"neutral600\">\n {t(\n 'chat.code-upload.confirmation-description',\n 'Your code is ready to be imported. Click finish to add it to your chat.'\n )}\n </Typography>\n </Flex>\n\n <Box width=\"100%\">\n <AttachmentPreview\n attachment={{\n id: generateId(),\n status: isLoading ? 'loading' : 'ready',\n filename: projectName || '',\n url: '',\n type: 'file',\n mediaType: STRAPI_CODE_MIME_TYPE,\n }}\n error={error}\n minWidth=\"256px\"\n />\n </Box>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Modal\n * -----------------------------------------------------------------------------------------------*/\nexport const UploadCodeModal = () => {\n const [projectName, setProjectName] = useState<string | null>(null);\n const [projectAttachment, setProjectAttachment] = useState<Attachment | null>(null);\n const { t } = useTranslations();\n\n // Attach files to the chat\n const { addAttachments } = useAttachments();\n\n const { processZipFile, processFolder, isLoading, error } = useCodeUpload({\n onSuccess: (file) => setProjectAttachment(file),\n });\n\n const { isCodeUploadOpen, closeCodeUpload, submitOnFinish } = useUploadProjectToChat();\n const { sendMessage, openChat, input, setInput } = useStrapiChat();\n\n const handleCancel = () => {\n setProjectName(null);\n setProjectAttachment(null);\n closeCodeUpload();\n };\n\n const handleComplete = async () => {\n // Ensure chat is opened\n openChat();\n\n if (projectAttachment && submitOnFinish) {\n sendMessage({\n role: 'user',\n parts: [\n {\n type: 'text',\n text: 'Create schemas from my uploaded project',\n },\n projectAttachment,\n ],\n });\n } else if (projectAttachment) {\n // If input is empty, set a predefined message\n if (!input) {\n setInput('Create schemas from my uploaded project');\n }\n // Attach files to the chat input\n addAttachments([projectAttachment]);\n }\n\n closeCodeUpload();\n };\n\n const validateUploadStep = () => {\n return !!projectAttachment;\n };\n\n return (\n <StepModal\n open={isCodeUploadOpen}\n onOpenChange={(isOpen) => {\n if (!isOpen) handleCancel();\n }}\n title={t('chat.code-upload.header', 'Import code')}\n onCancel={handleCancel}\n onComplete={handleComplete}\n >\n <StepModal.Step\n title={t('chat.code-upload.step1-title', 'Import code')}\n nextLabel={t('chat.code-upload.continue-button', 'Continue')}\n cancelLabel={t('common.cancel', 'Cancel')}\n disableNext={!projectAttachment || isLoading}\n onNext={validateUploadStep}\n >\n <CodeUploadStep\n setFileName={setProjectName}\n error={error}\n processZipFile={processZipFile}\n processFolder={processFolder}\n />\n </StepModal.Step>\n\n <StepModal.Step\n title={t('chat.code-upload.step2-title', 'Confirm')}\n nextLabel={t('common.finish', 'Finish')}\n backLabel={t('form.button.back', 'Back')}\n disableNext={!projectAttachment || isLoading}\n >\n <CodeConfirmationStep projectName={projectName} isLoading={isLoading} error={error} />\n </StepModal.Step>\n </StepModal>\n );\n};\n"],"names":["UploadProjectContext","createContext","isCodeUploadOpen","submitOnFinish","openCodeUpload","closeCodeUpload","useUploadProjectToChat","useContext","UploadProjectToChatProvider","children","setIsCodeUploadOpen","useState","setSubmitOnFinish","_jsxs","Provider","value","_jsx","UploadCodeModal","DropZone","importType","onAddFiles","error","dragOver","setDragOver","inputRef","useRef","t","useTranslations","handleDragOver","event","preventDefault","handleDragEnter","handleDragLeave","handleClick","e","current","click","handleChange","files","Array","from","readDirectory","entry","reader","createReader","getEntries","Promise","resolve","reject","readEntries","entries","isFile","fileEntry","file","Object","defineProperty","writable","fullPath","substring","push","isDirectory","dirEntry","subFiles","length","handleDrop","dataTransfer","items","allFiles","i","item","webkitGetAsEntry","Flex","position","cursor","width","height","minHeight","borderStyle","borderColor","background","hasRadius","padding","justifyContent","direction","alignItems","gap","onDragEnter","onDragLeave","onDragOver","onDrop","FileZip","Folder","Typography","variant","textColor","textAlign","onClick","Box","tag","left","right","bottom","top","name","aria-label","tabIndex","zIndex","ref","onChange","style","opacity","type","accept","multiple","webkitdirectory","directory","CodeUploadStep","setFileName","processZipFile","processFolder","nextStep","useStepModal","wrap","flex","minWidth","replace","firstFile","folderPath","webkitRelativePath","folderName","split","err","console","CodeConfirmationStep","projectName","isLoading","AttachmentPreview","attachment","id","generateId","status","filename","url","mediaType","STRAPI_CODE_MIME_TYPE","setProjectName","projectAttachment","setProjectAttachment","addAttachments","useAttachments","useCodeUpload","onSuccess","sendMessage","openChat","input","setInput","useStrapiChat","handleCancel","handleComplete","role","parts","text","validateUploadStep","StepModal","open","onOpenChange","isOpen","title","onCancel","onComplete","Step","nextLabel","cancelLabel","disableNext","onNext","backLabel"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import {
|
|
2
|
+
import { useState, useContext, createContext, useRef } from 'react';
|
|
3
3
|
import { Flex, Typography, Box } from '@strapi/design-system';
|
|
4
4
|
import { FileZip, Folder } from '@strapi/icons';
|
|
5
5
|
import { AttachmentPreview } from './components/Attachments/AttachmentPreview.mjs';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UploadCodeModal.mjs","sources":["../../../../admin/src/components/AIChat/UploadCodeModal.tsx"],"sourcesContent":["import { createContext, useContext, useRef, useState } from 'react';\n\nimport { Flex, Typography, Box } from '@strapi/design-system';\nimport { Folder, FileZip } from '@strapi/icons';\n\nimport { AttachmentPreview } from './components/Attachments/AttachmentPreview';\nimport { StepModal, useStepModal } from './components/StepModal';\nimport { useAttachments } from './hooks/useAttachments';\nimport { useCodeUpload } from './hooks/useCodeUpload';\nimport { useTranslations } from './hooks/useTranslations';\nimport { STRAPI_CODE_MIME_TYPE } from './lib/constants';\nimport { generateId } from './lib/misc';\nimport { Attachment } from './lib/types/attachments';\nimport { useStrapiChat } from './providers/ChatProvider';\n\n/* -------------------------------------------------------------------------------------------------\n * Provider\n * -----------------------------------------------------------------------------------------------*/\ninterface UploadProjectContextType {\n isCodeUploadOpen: boolean;\n submitOnFinish: boolean;\n openCodeUpload: (submitOnFinish?: boolean) => void;\n closeCodeUpload: () => void;\n}\n\nconst UploadProjectContext = createContext<UploadProjectContextType>({\n isCodeUploadOpen: false,\n submitOnFinish: false,\n openCodeUpload: () => {},\n closeCodeUpload: () => {},\n});\n\nexport const useUploadProjectToChat = () => useContext(UploadProjectContext);\n\nexport const UploadProjectToChatProvider = ({ children }: { children: React.ReactNode }) => {\n const [isCodeUploadOpen, setIsCodeUploadOpen] = useState(false);\n const [submitOnFinish, setSubmitOnFinish] = useState(false);\n\n const openCodeUpload = (submitOnFinish?: boolean) => {\n setIsCodeUploadOpen(true);\n setSubmitOnFinish(submitOnFinish ?? false);\n };\n\n const closeCodeUpload = () => setIsCodeUploadOpen(false);\n\n return (\n <UploadProjectContext.Provider\n value={{ isCodeUploadOpen, submitOnFinish, openCodeUpload, closeCodeUpload }}\n >\n {isCodeUploadOpen && <UploadCodeModal />}\n {children}\n </UploadProjectContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Drop Zone\n * -----------------------------------------------------------------------------------------------*/\ninterface DropZoneProps {\n importType: 'folder' | 'zip';\n onAddFiles: (files: File[]) => void;\n error?: string | null;\n}\n\nconst DropZone = ({ importType, onAddFiles, error }: DropZoneProps) => {\n const [dragOver, setDragOver] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const { t } = useTranslations();\n\n const handleDragOver = (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n };\n\n const handleDragEnter = (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n setDragOver(true);\n };\n\n const handleDragLeave = () => setDragOver(false);\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n inputRef.current?.click();\n };\n\n const handleChange = () => {\n const files = inputRef.current?.files;\n if (files) {\n onAddFiles(Array.from(files));\n }\n };\n\n /**\n * Recursively reads a directory and its contents\n */\n const readDirectory = async (entry: FileSystemDirectoryEntry): Promise<File[]> => {\n const reader = entry.createReader();\n const getEntries = (): Promise<FileSystemEntry[]> => {\n return new Promise((resolve, reject) => {\n reader.readEntries(resolve, reject);\n });\n };\n\n const files: File[] = [];\n let entries: FileSystemEntry[] = [];\n\n // Read entries in batches until no more entries are left\n do {\n entries = await getEntries();\n for (const entry of entries) {\n if (entry.isFile) {\n const fileEntry = entry as FileSystemFileEntry;\n const file = await new Promise<File>((resolve, reject) => {\n fileEntry.file(resolve, reject);\n });\n\n // Store the full path including the directory structure\n Object.defineProperty(file, 'webkitRelativePath', {\n writable: true,\n value: entry.fullPath.substring(1), // Remove leading slash\n });\n\n files.push(file);\n } else if (entry.isDirectory) {\n // Recursively process subdirectories\n const dirEntry = entry as FileSystemDirectoryEntry;\n const subFiles = await readDirectory(dirEntry);\n files.push(...subFiles);\n }\n }\n } while (entries.length > 0);\n\n return files;\n };\n\n const handleDrop = async (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n setDragOver(false);\n\n if (!e.dataTransfer?.items) {\n return;\n }\n\n // For folder upload, process directories recursively\n if (importType === 'folder') {\n const items = e.dataTransfer.items;\n const allFiles: File[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n // Use webkitGetAsEntry to access the file system entry\n const entry = item.webkitGetAsEntry?.();\n\n if (entry) {\n if (entry.isDirectory) {\n const files = await readDirectory(entry as FileSystemDirectoryEntry);\n allFiles.push(...files);\n } else if (entry.isFile) {\n const file = await new Promise<File>((resolve, reject) => {\n (entry as FileSystemFileEntry).file(resolve, reject);\n });\n allFiles.push(file);\n }\n }\n }\n\n if (allFiles.length > 0) {\n onAddFiles(allFiles);\n }\n } else {\n // For zip files, just import them regularly\n if (e.dataTransfer.files) {\n onAddFiles(Array.from(e.dataTransfer.files));\n }\n }\n };\n\n return (\n <Flex\n position=\"relative\"\n cursor=\"pointer\"\n width=\"100%\"\n height=\"100%\"\n minHeight=\"140px\"\n borderStyle=\"dashed\"\n borderColor={dragOver ? 'primary500' : error ? 'danger600' : 'neutral200'}\n background={dragOver ? 'primary100' : error ? 'danger100' : 'neutral100'}\n hasRadius\n padding={7}\n justifyContent=\"center\"\n direction=\"column\"\n alignItems=\"center\"\n gap={2}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n {importType === 'zip' ? (\n <FileZip width={'24px'} height={'24px'} />\n ) : (\n <Folder width={'24px'} height={'24px'} />\n )}\n <Flex direction=\"column\" alignItems=\"center\" gap={2}>\n <Typography variant=\"omega\" textColor=\"neutral600\" textAlign=\"center\">\n {importType === 'zip'\n ? t('chat.code-upload.drop-zone', 'Drop here a .zip file here or')\n : t('chat.code-upload.drop-zone-folder', 'Drop here a folder here or')}{' '}\n <Typography variant=\"omega\" textColor=\"primary600\" onClick={handleClick}>\n {t('chat.code-upload.drop-zone-browse', 'browse files')}\n </Typography>\n </Typography>\n {error && (\n <Typography variant=\"pi\" textColor=\"danger600\">\n {error}\n </Typography>\n )}\n </Flex>\n <Box\n tag=\"input\"\n position=\"absolute\"\n left={0}\n right={0}\n bottom={0}\n top={0}\n width=\"100%\"\n name=\"code\"\n aria-label=\"Upload project\"\n tabIndex={-1}\n zIndex={1}\n ref={inputRef}\n onChange={handleChange}\n style={{ opacity: 0, cursor: 'pointer' }}\n type=\"file\"\n {...(importType === 'zip'\n ? { accept: '.zip', multiple: false }\n : { multiple: true, webkitdirectory: '', directory: '' })}\n />\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Step 1 - Upload Code\n * -----------------------------------------------------------------------------------------------*/\ninterface CodeUploadStepProps {\n setFileName: (name: string | null) => void;\n error: string | null;\n processZipFile: (file: File) => void;\n processFolder: (files: File[]) => Promise<Attachment>;\n}\n\nconst CodeUploadStep = ({\n setFileName,\n error,\n processZipFile,\n processFolder,\n}: CodeUploadStepProps) => {\n const { t } = useTranslations();\n const { nextStep } = useStepModal();\n\n return (\n <Flex direction=\"column\" gap={6} alignItems=\"start\" width=\"100%\">\n <Flex direction=\"column\" gap={2} alignItems=\"start\">\n <Typography variant=\"beta\">{t('chat.code-upload.title', 'Import code')}</Typography>\n <Typography variant=\"omega\" textColor=\"neutral600\">\n {t(\n 'chat.code-upload.description',\n 'Your app will be analyzed by AI. Make sure to remove all sensitive data before importation.'\n )}\n </Typography>\n </Flex>\n\n <Flex gap={3} width=\"100%\" wrap=\"wrap\">\n <Box flex={1} minWidth=\"200px\">\n <DropZone\n importType=\"zip\"\n onAddFiles={(files: FileList | File[]) => {\n if (files.length > 0) {\n const file = files[0];\n setFileName(file.name.replace('.zip', ''));\n nextStep();\n processZipFile(file);\n }\n }}\n error={error}\n />\n </Box>\n <Box flex={1} minWidth=\"200px\">\n <DropZone\n importType=\"folder\"\n onAddFiles={async (files: File[]) => {\n if (files.length > 0) {\n try {\n // Get the folder name from the first file's path\n const firstFile = files[0];\n const folderPath = firstFile.webkitRelativePath || '';\n const folderName = folderPath.split('/')[0] || 'Project';\n\n setFileName(folderName);\n nextStep();\n\n // Process the folder files\n await processFolder(files);\n } catch (err) {\n console.error('Error processing folder:', err);\n }\n }\n }}\n error={error}\n />\n </Box>\n </Flex>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Step 2 - Confirmation\n * -----------------------------------------------------------------------------------------------*/\ninterface CodeConfirmationStepProps {\n projectName: string | null;\n isLoading: boolean;\n error: string | null;\n}\n\nconst CodeConfirmationStep = ({ projectName, isLoading, error }: CodeConfirmationStepProps) => {\n const { t } = useTranslations();\n\n return (\n <Flex direction=\"column\" gap={6} alignItems=\"start\" width=\"100%\">\n <Flex direction=\"column\" gap={2} alignItems=\"start\">\n <Typography variant=\"beta\">\n {t('chat.code-upload.confirmation-title', 'Confirm Code Import')}\n </Typography>\n <Typography variant=\"omega\" textColor=\"neutral600\">\n {t(\n 'chat.code-upload.confirmation-description',\n 'Your code is ready to be imported. Click finish to add it to your chat.'\n )}\n </Typography>\n </Flex>\n\n <Box width=\"100%\">\n <AttachmentPreview\n attachment={{\n id: generateId(),\n status: isLoading ? 'loading' : 'ready',\n filename: projectName || '',\n url: '',\n type: 'file',\n mediaType: STRAPI_CODE_MIME_TYPE,\n }}\n error={error}\n minWidth=\"256px\"\n />\n </Box>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Modal\n * -----------------------------------------------------------------------------------------------*/\nexport const UploadCodeModal = () => {\n const [projectName, setProjectName] = useState<string | null>(null);\n const [projectAttachment, setProjectAttachment] = useState<Attachment | null>(null);\n const { t } = useTranslations();\n\n // Attach files to the chat\n const { addAttachments } = useAttachments();\n\n const { processZipFile, processFolder, isLoading, error } = useCodeUpload({\n onSuccess: (file) => setProjectAttachment(file),\n });\n\n const { isCodeUploadOpen, closeCodeUpload, submitOnFinish } = useUploadProjectToChat();\n const { sendMessage, openChat, input, setInput } = useStrapiChat();\n\n const handleCancel = () => {\n setProjectName(null);\n setProjectAttachment(null);\n closeCodeUpload();\n };\n\n const handleComplete = async () => {\n // Ensure chat is opened\n openChat();\n\n if (projectAttachment && submitOnFinish) {\n sendMessage({\n role: 'user',\n parts: [\n {\n type: 'text',\n text: 'Create schemas from my uploaded project',\n },\n projectAttachment,\n ],\n });\n } else if (projectAttachment) {\n // If input is empty, set a predefined message\n if (!input) {\n setInput('Create schemas from my uploaded project');\n }\n // Attach files to the chat input\n addAttachments([projectAttachment]);\n }\n\n closeCodeUpload();\n };\n\n const validateUploadStep = () => {\n return !!projectAttachment;\n };\n\n return (\n <StepModal\n open={isCodeUploadOpen}\n onOpenChange={(isOpen) => {\n if (!isOpen) handleCancel();\n }}\n title={t('chat.code-upload.header', 'Import code')}\n onCancel={handleCancel}\n onComplete={handleComplete}\n >\n <StepModal.Step\n title={t('chat.code-upload.step1-title', 'Import code')}\n nextLabel={t('chat.code-upload.continue-button', 'Continue')}\n cancelLabel={t('common.cancel', 'Cancel')}\n disableNext={!projectAttachment || isLoading}\n onNext={validateUploadStep}\n >\n <CodeUploadStep\n setFileName={setProjectName}\n error={error}\n processZipFile={processZipFile}\n processFolder={processFolder}\n />\n </StepModal.Step>\n\n <StepModal.Step\n title={t('chat.code-upload.step2-title', 'Confirm')}\n nextLabel={t('common.finish', 'Finish')}\n backLabel={t('form.button.back', 'Back')}\n disableNext={!projectAttachment || isLoading}\n >\n <CodeConfirmationStep projectName={projectName} isLoading={isLoading} error={error} />\n </StepModal.Step>\n </StepModal>\n );\n};\n"],"names":["UploadProjectContext","createContext","isCodeUploadOpen","submitOnFinish","openCodeUpload","closeCodeUpload","useUploadProjectToChat","useContext","UploadProjectToChatProvider","children","setIsCodeUploadOpen","useState","setSubmitOnFinish","_jsxs","Provider","value","_jsx","UploadCodeModal","DropZone","importType","onAddFiles","error","dragOver","setDragOver","inputRef","useRef","t","useTranslations","handleDragOver","event","preventDefault","handleDragEnter","handleDragLeave","handleClick","e","current","click","handleChange","files","Array","from","readDirectory","entry","reader","createReader","getEntries","Promise","resolve","reject","readEntries","entries","isFile","fileEntry","file","Object","defineProperty","writable","fullPath","substring","push","isDirectory","dirEntry","subFiles","length","handleDrop","dataTransfer","items","allFiles","i","item","webkitGetAsEntry","Flex","position","cursor","width","height","minHeight","borderStyle","borderColor","background","hasRadius","padding","justifyContent","direction","alignItems","gap","onDragEnter","onDragLeave","onDragOver","onDrop","FileZip","Folder","Typography","variant","textColor","textAlign","onClick","Box","tag","left","right","bottom","top","name","aria-label","tabIndex","zIndex","ref","onChange","style","opacity","type","accept","multiple","webkitdirectory","directory","CodeUploadStep","setFileName","processZipFile","processFolder","nextStep","useStepModal","wrap","flex","minWidth","replace","firstFile","folderPath","webkitRelativePath","folderName","split","err","console","CodeConfirmationStep","projectName","isLoading","AttachmentPreview","attachment","id","generateId","status","filename","url","mediaType","STRAPI_CODE_MIME_TYPE","setProjectName","projectAttachment","setProjectAttachment","addAttachments","useAttachments","useCodeUpload","onSuccess","sendMessage","openChat","input","setInput","useStrapiChat","handleCancel","handleComplete","role","parts","text","validateUploadStep","StepModal","open","onOpenChange","isOpen","title","onCancel","onComplete","Step","nextLabel","cancelLabel","disableNext","onNext","backLabel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UploadCodeModal.mjs","sources":["../../../../admin/src/components/AIChat/UploadCodeModal.tsx"],"sourcesContent":["import { createContext, useContext, useRef, useState } from 'react';\n\nimport { Flex, Typography, Box } from '@strapi/design-system';\nimport { Folder, FileZip } from '@strapi/icons';\n\nimport { AttachmentPreview } from './components/Attachments/AttachmentPreview';\nimport { StepModal, useStepModal } from './components/StepModal';\nimport { useAttachments } from './hooks/useAttachments';\nimport { useCodeUpload } from './hooks/useCodeUpload';\nimport { useTranslations } from './hooks/useTranslations';\nimport { STRAPI_CODE_MIME_TYPE } from './lib/constants';\nimport { generateId } from './lib/misc';\nimport { Attachment } from './lib/types/attachments';\nimport { useStrapiChat } from './providers/ChatProvider';\n\n/* -------------------------------------------------------------------------------------------------\n * Provider\n * -----------------------------------------------------------------------------------------------*/\ninterface UploadProjectContextType {\n isCodeUploadOpen: boolean;\n submitOnFinish: boolean;\n openCodeUpload: (submitOnFinish?: boolean) => void;\n closeCodeUpload: () => void;\n}\n\nconst UploadProjectContext = createContext<UploadProjectContextType>({\n isCodeUploadOpen: false,\n submitOnFinish: false,\n openCodeUpload: () => {},\n closeCodeUpload: () => {},\n});\n\nexport const useUploadProjectToChat = () => useContext(UploadProjectContext);\n\nexport const UploadProjectToChatProvider = ({ children }: { children: React.ReactNode }) => {\n const [isCodeUploadOpen, setIsCodeUploadOpen] = useState(false);\n const [submitOnFinish, setSubmitOnFinish] = useState(false);\n\n const openCodeUpload = (submitOnFinish?: boolean) => {\n setIsCodeUploadOpen(true);\n setSubmitOnFinish(submitOnFinish ?? false);\n };\n\n const closeCodeUpload = () => setIsCodeUploadOpen(false);\n\n return (\n <UploadProjectContext.Provider\n value={{ isCodeUploadOpen, submitOnFinish, openCodeUpload, closeCodeUpload }}\n >\n {isCodeUploadOpen && <UploadCodeModal />}\n {children}\n </UploadProjectContext.Provider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Drop Zone\n * -----------------------------------------------------------------------------------------------*/\ninterface DropZoneProps {\n importType: 'folder' | 'zip';\n onAddFiles: (files: File[]) => void;\n error?: string | null;\n}\n\nconst DropZone = ({ importType, onAddFiles, error }: DropZoneProps) => {\n const [dragOver, setDragOver] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const { t } = useTranslations();\n\n const handleDragOver = (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n };\n\n const handleDragEnter = (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n setDragOver(true);\n };\n\n const handleDragLeave = () => setDragOver(false);\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n inputRef.current?.click();\n };\n\n const handleChange = () => {\n const files = inputRef.current?.files;\n if (files) {\n onAddFiles(Array.from(files));\n }\n };\n\n /**\n * Recursively reads a directory and its contents\n */\n const readDirectory = async (entry: FileSystemDirectoryEntry): Promise<File[]> => {\n const reader = entry.createReader();\n const getEntries = (): Promise<FileSystemEntry[]> => {\n return new Promise((resolve, reject) => {\n reader.readEntries(resolve, reject);\n });\n };\n\n const files: File[] = [];\n let entries: FileSystemEntry[] = [];\n\n // Read entries in batches until no more entries are left\n do {\n entries = await getEntries();\n for (const entry of entries) {\n if (entry.isFile) {\n const fileEntry = entry as FileSystemFileEntry;\n const file = await new Promise<File>((resolve, reject) => {\n fileEntry.file(resolve, reject);\n });\n\n // Store the full path including the directory structure\n Object.defineProperty(file, 'webkitRelativePath', {\n writable: true,\n value: entry.fullPath.substring(1), // Remove leading slash\n });\n\n files.push(file);\n } else if (entry.isDirectory) {\n // Recursively process subdirectories\n const dirEntry = entry as FileSystemDirectoryEntry;\n const subFiles = await readDirectory(dirEntry);\n files.push(...subFiles);\n }\n }\n } while (entries.length > 0);\n\n return files;\n };\n\n const handleDrop = async (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n setDragOver(false);\n\n if (!e.dataTransfer?.items) {\n return;\n }\n\n // For folder upload, process directories recursively\n if (importType === 'folder') {\n const items = e.dataTransfer.items;\n const allFiles: File[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n // Use webkitGetAsEntry to access the file system entry\n const entry = item.webkitGetAsEntry?.();\n\n if (entry) {\n if (entry.isDirectory) {\n const files = await readDirectory(entry as FileSystemDirectoryEntry);\n allFiles.push(...files);\n } else if (entry.isFile) {\n const file = await new Promise<File>((resolve, reject) => {\n (entry as FileSystemFileEntry).file(resolve, reject);\n });\n allFiles.push(file);\n }\n }\n }\n\n if (allFiles.length > 0) {\n onAddFiles(allFiles);\n }\n } else {\n // For zip files, just import them regularly\n if (e.dataTransfer.files) {\n onAddFiles(Array.from(e.dataTransfer.files));\n }\n }\n };\n\n return (\n <Flex\n position=\"relative\"\n cursor=\"pointer\"\n width=\"100%\"\n height=\"100%\"\n minHeight=\"140px\"\n borderStyle=\"dashed\"\n borderColor={dragOver ? 'primary500' : error ? 'danger600' : 'neutral200'}\n background={dragOver ? 'primary100' : error ? 'danger100' : 'neutral100'}\n hasRadius\n padding={7}\n justifyContent=\"center\"\n direction=\"column\"\n alignItems=\"center\"\n gap={2}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n {importType === 'zip' ? (\n <FileZip width={'24px'} height={'24px'} />\n ) : (\n <Folder width={'24px'} height={'24px'} />\n )}\n <Flex direction=\"column\" alignItems=\"center\" gap={2}>\n <Typography variant=\"omega\" textColor=\"neutral600\" textAlign=\"center\">\n {importType === 'zip'\n ? t('chat.code-upload.drop-zone', 'Drop here a .zip file here or')\n : t('chat.code-upload.drop-zone-folder', 'Drop here a folder here or')}{' '}\n <Typography variant=\"omega\" textColor=\"primary600\" onClick={handleClick}>\n {t('chat.code-upload.drop-zone-browse', 'browse files')}\n </Typography>\n </Typography>\n {error && (\n <Typography variant=\"pi\" textColor=\"danger600\">\n {error}\n </Typography>\n )}\n </Flex>\n <Box\n tag=\"input\"\n position=\"absolute\"\n left={0}\n right={0}\n bottom={0}\n top={0}\n width=\"100%\"\n name=\"code\"\n aria-label=\"Upload project\"\n tabIndex={-1}\n zIndex={1}\n ref={inputRef}\n onChange={handleChange}\n style={{ opacity: 0, cursor: 'pointer' }}\n type=\"file\"\n {...(importType === 'zip'\n ? { accept: '.zip', multiple: false }\n : { multiple: true, webkitdirectory: '', directory: '' })}\n />\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Step 1 - Upload Code\n * -----------------------------------------------------------------------------------------------*/\ninterface CodeUploadStepProps {\n setFileName: (name: string | null) => void;\n error: string | null;\n processZipFile: (file: File) => void;\n processFolder: (files: File[]) => Promise<Attachment>;\n}\n\nconst CodeUploadStep = ({\n setFileName,\n error,\n processZipFile,\n processFolder,\n}: CodeUploadStepProps) => {\n const { t } = useTranslations();\n const { nextStep } = useStepModal();\n\n return (\n <Flex direction=\"column\" gap={6} alignItems=\"start\" width=\"100%\">\n <Flex direction=\"column\" gap={2} alignItems=\"start\">\n <Typography variant=\"beta\">{t('chat.code-upload.title', 'Import code')}</Typography>\n <Typography variant=\"omega\" textColor=\"neutral600\">\n {t(\n 'chat.code-upload.description',\n 'Your app will be analyzed by AI. Make sure to remove all sensitive data before importation.'\n )}\n </Typography>\n </Flex>\n\n <Flex gap={3} width=\"100%\" wrap=\"wrap\">\n <Box flex={1} minWidth=\"200px\">\n <DropZone\n importType=\"zip\"\n onAddFiles={(files: FileList | File[]) => {\n if (files.length > 0) {\n const file = files[0];\n setFileName(file.name.replace('.zip', ''));\n nextStep();\n processZipFile(file);\n }\n }}\n error={error}\n />\n </Box>\n <Box flex={1} minWidth=\"200px\">\n <DropZone\n importType=\"folder\"\n onAddFiles={async (files: File[]) => {\n if (files.length > 0) {\n try {\n // Get the folder name from the first file's path\n const firstFile = files[0];\n const folderPath = firstFile.webkitRelativePath || '';\n const folderName = folderPath.split('/')[0] || 'Project';\n\n setFileName(folderName);\n nextStep();\n\n // Process the folder files\n await processFolder(files);\n } catch (err) {\n console.error('Error processing folder:', err);\n }\n }\n }}\n error={error}\n />\n </Box>\n </Flex>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Step 2 - Confirmation\n * -----------------------------------------------------------------------------------------------*/\ninterface CodeConfirmationStepProps {\n projectName: string | null;\n isLoading: boolean;\n error: string | null;\n}\n\nconst CodeConfirmationStep = ({ projectName, isLoading, error }: CodeConfirmationStepProps) => {\n const { t } = useTranslations();\n\n return (\n <Flex direction=\"column\" gap={6} alignItems=\"start\" width=\"100%\">\n <Flex direction=\"column\" gap={2} alignItems=\"start\">\n <Typography variant=\"beta\">\n {t('chat.code-upload.confirmation-title', 'Confirm Code Import')}\n </Typography>\n <Typography variant=\"omega\" textColor=\"neutral600\">\n {t(\n 'chat.code-upload.confirmation-description',\n 'Your code is ready to be imported. Click finish to add it to your chat.'\n )}\n </Typography>\n </Flex>\n\n <Box width=\"100%\">\n <AttachmentPreview\n attachment={{\n id: generateId(),\n status: isLoading ? 'loading' : 'ready',\n filename: projectName || '',\n url: '',\n type: 'file',\n mediaType: STRAPI_CODE_MIME_TYPE,\n }}\n error={error}\n minWidth=\"256px\"\n />\n </Box>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Modal\n * -----------------------------------------------------------------------------------------------*/\nexport const UploadCodeModal = () => {\n const [projectName, setProjectName] = useState<string | null>(null);\n const [projectAttachment, setProjectAttachment] = useState<Attachment | null>(null);\n const { t } = useTranslations();\n\n // Attach files to the chat\n const { addAttachments } = useAttachments();\n\n const { processZipFile, processFolder, isLoading, error } = useCodeUpload({\n onSuccess: (file) => setProjectAttachment(file),\n });\n\n const { isCodeUploadOpen, closeCodeUpload, submitOnFinish } = useUploadProjectToChat();\n const { sendMessage, openChat, input, setInput } = useStrapiChat();\n\n const handleCancel = () => {\n setProjectName(null);\n setProjectAttachment(null);\n closeCodeUpload();\n };\n\n const handleComplete = async () => {\n // Ensure chat is opened\n openChat();\n\n if (projectAttachment && submitOnFinish) {\n sendMessage({\n role: 'user',\n parts: [\n {\n type: 'text',\n text: 'Create schemas from my uploaded project',\n },\n projectAttachment,\n ],\n });\n } else if (projectAttachment) {\n // If input is empty, set a predefined message\n if (!input) {\n setInput('Create schemas from my uploaded project');\n }\n // Attach files to the chat input\n addAttachments([projectAttachment]);\n }\n\n closeCodeUpload();\n };\n\n const validateUploadStep = () => {\n return !!projectAttachment;\n };\n\n return (\n <StepModal\n open={isCodeUploadOpen}\n onOpenChange={(isOpen) => {\n if (!isOpen) handleCancel();\n }}\n title={t('chat.code-upload.header', 'Import code')}\n onCancel={handleCancel}\n onComplete={handleComplete}\n >\n <StepModal.Step\n title={t('chat.code-upload.step1-title', 'Import code')}\n nextLabel={t('chat.code-upload.continue-button', 'Continue')}\n cancelLabel={t('common.cancel', 'Cancel')}\n disableNext={!projectAttachment || isLoading}\n onNext={validateUploadStep}\n >\n <CodeUploadStep\n setFileName={setProjectName}\n error={error}\n processZipFile={processZipFile}\n processFolder={processFolder}\n />\n </StepModal.Step>\n\n <StepModal.Step\n title={t('chat.code-upload.step2-title', 'Confirm')}\n nextLabel={t('common.finish', 'Finish')}\n backLabel={t('form.button.back', 'Back')}\n disableNext={!projectAttachment || isLoading}\n >\n <CodeConfirmationStep projectName={projectName} isLoading={isLoading} error={error} />\n </StepModal.Step>\n </StepModal>\n );\n};\n"],"names":["UploadProjectContext","createContext","isCodeUploadOpen","submitOnFinish","openCodeUpload","closeCodeUpload","useUploadProjectToChat","useContext","UploadProjectToChatProvider","children","setIsCodeUploadOpen","useState","setSubmitOnFinish","_jsxs","Provider","value","_jsx","UploadCodeModal","DropZone","importType","onAddFiles","error","dragOver","setDragOver","inputRef","useRef","t","useTranslations","handleDragOver","event","preventDefault","handleDragEnter","handleDragLeave","handleClick","e","current","click","handleChange","files","Array","from","readDirectory","entry","reader","createReader","getEntries","Promise","resolve","reject","readEntries","entries","isFile","fileEntry","file","Object","defineProperty","writable","fullPath","substring","push","isDirectory","dirEntry","subFiles","length","handleDrop","dataTransfer","items","allFiles","i","item","webkitGetAsEntry","Flex","position","cursor","width","height","minHeight","borderStyle","borderColor","background","hasRadius","padding","justifyContent","direction","alignItems","gap","onDragEnter","onDragLeave","onDragOver","onDrop","FileZip","Folder","Typography","variant","textColor","textAlign","onClick","Box","tag","left","right","bottom","top","name","aria-label","tabIndex","zIndex","ref","onChange","style","opacity","type","accept","multiple","webkitdirectory","directory","CodeUploadStep","setFileName","processZipFile","processFolder","nextStep","useStepModal","wrap","flex","minWidth","replace","firstFile","folderPath","webkitRelativePath","folderName","split","err","console","CodeConfirmationStep","projectName","isLoading","AttachmentPreview","attachment","id","generateId","status","filename","url","mediaType","STRAPI_CODE_MIME_TYPE","setProjectName","projectAttachment","setProjectAttachment","addAttachments","useAttachments","useCodeUpload","onSuccess","sendMessage","openChat","input","setInput","useStrapiChat","handleCancel","handleComplete","role","parts","text","validateUploadStep","StepModal","open","onOpenChange","isOpen","title","onCancel","onComplete","Step","nextLabel","cancelLabel","disableNext","onNext","backLabel"],"mappings":";;;;;;;;;;;;;AAyBA,MAAMA,qCAAuBC,aAAAA,CAAwC;IACnEC,gBAAAA,EAAkB,KAAA;IAClBC,cAAAA,EAAgB,KAAA;AAChBC,IAAAA,cAAAA,EAAgB,IAAA,CAAO,CAAA;AACvBC,IAAAA,eAAAA,EAAiB,IAAA,CAAO;AAC1B,CAAA,CAAA;AAEO,MAAMC,sBAAAA,GAAyB,IAAMC,UAAAA,CAAWP,oBAAAA;AAEhD,MAAMQ,2BAAAA,GAA8B,CAAC,EAAEC,QAAQ,EAAiC,GAAA;AACrF,IAAA,MAAM,CAACP,gBAAAA,EAAkBQ,mBAAAA,CAAoB,GAAGC,QAAAA,CAAS,KAAA,CAAA;AACzD,IAAA,MAAM,CAACR,cAAAA,EAAgBS,iBAAAA,CAAkB,GAAGD,QAAAA,CAAS,KAAA,CAAA;AAErD,IAAA,MAAMP,iBAAiB,CAACD,cAAAA,GAAAA;QACtBO,mBAAAA,CAAoB,IAAA,CAAA;AACpBE,QAAAA,iBAAAA,CAAkBT,cAAAA,IAAkB,KAAA,CAAA;AACtC,IAAA,CAAA;IAEA,MAAME,eAAAA,GAAkB,IAAMK,mBAAAA,CAAoB,KAAA,CAAA;IAElD,qBACEG,IAAA,CAACb,qBAAqBc,QAAQ,EAAA;QAC5BC,KAAAA,EAAO;AAAEb,YAAAA,gBAAAA;AAAkBC,YAAAA,cAAAA;AAAgBC,YAAAA,cAAAA;AAAgBC,YAAAA;AAAgB,SAAA;;AAE1EH,YAAAA,gBAAAA,kBAAoBc,GAAA,CAACC,eAAAA,EAAAA,EAAAA,CAAAA;AACrBR,YAAAA;;;AAGP;AAWA,MAAMS,QAAAA,GAAW,CAAC,EAAEC,UAAU,EAAEC,UAAU,EAAEC,KAAK,EAAiB,GAAA;AAChE,IAAA,MAAM,CAACC,QAAAA,EAAUC,WAAAA,CAAY,GAAGZ,QAAAA,CAAS,KAAA,CAAA;AACzC,IAAA,MAAMa,WAAWC,MAAAA,CAAyB,IAAA,CAAA;IAC1C,MAAM,EAAEC,CAAC,EAAE,GAAGC,eAAAA,EAAAA;AAEd,IAAA,MAAMC,iBAAiB,CAACC,KAAAA,GAAAA;AACtBA,QAAAA,KAAAA,CAAMC,cAAc,EAAA;AACtB,IAAA,CAAA;AAEA,IAAA,MAAMC,kBAAkB,CAACF,KAAAA,GAAAA;AACvBA,QAAAA,KAAAA,CAAMC,cAAc,EAAA;QACpBP,WAAAA,CAAY,IAAA,CAAA;AACd,IAAA,CAAA;IAEA,MAAMS,eAAAA,GAAkB,IAAMT,WAAAA,CAAY,KAAA,CAAA;AAE1C,IAAA,MAAMU,cAAc,CAACC,CAAAA,GAAAA;AACnBA,QAAAA,CAAAA,CAAEJ,cAAc,EAAA;AAChBN,QAAAA,QAAAA,CAASW,OAAO,EAAEC,KAAAA,EAAAA;AACpB,IAAA,CAAA;AAEA,IAAA,MAAMC,YAAAA,GAAe,IAAA;QACnB,MAAMC,KAAAA,GAAQd,QAAAA,CAASW,OAAO,EAAEG,KAAAA;AAChC,QAAA,IAAIA,KAAAA,EAAO;YACTlB,UAAAA,CAAWmB,KAAAA,CAAMC,IAAI,CAACF,KAAAA,CAAAA,CAAAA;AACxB,QAAA;AACF,IAAA,CAAA;AAEA;;MAGA,MAAMG,gBAAgB,OAAOC,KAAAA,GAAAA;QAC3B,MAAMC,MAAAA,GAASD,MAAME,YAAY,EAAA;AACjC,QAAA,MAAMC,UAAAA,GAAa,IAAA;YACjB,OAAO,IAAIC,OAAAA,CAAQ,CAACC,OAAAA,EAASC,MAAAA,GAAAA;gBAC3BL,MAAAA,CAAOM,WAAW,CAACF,OAAAA,EAASC,MAAAA,CAAAA;AAC9B,YAAA,CAAA,CAAA;AACF,QAAA,CAAA;AAEA,QAAA,MAAMV,QAAgB,EAAE;AACxB,QAAA,IAAIY,UAA6B,EAAE;;QAGnC,GAAG;AACDA,YAAAA,OAAAA,GAAU,MAAML,UAAAA,EAAAA;YAChB,KAAK,MAAMH,SAASQ,OAAAA,CAAS;gBAC3B,IAAIR,KAAAA,CAAMS,MAAM,EAAE;AAChB,oBAAA,MAAMC,SAAAA,GAAYV,KAAAA;AAClB,oBAAA,MAAMW,IAAAA,GAAO,MAAM,IAAIP,OAAAA,CAAc,CAACC,OAAAA,EAASC,MAAAA,GAAAA;wBAC7CI,SAAAA,CAAUC,IAAI,CAACN,OAAAA,EAASC,MAAAA,CAAAA;AAC1B,oBAAA,CAAA,CAAA;;oBAGAM,MAAAA,CAAOC,cAAc,CAACF,IAAAA,EAAM,oBAAA,EAAsB;wBAChDG,QAAAA,EAAU,IAAA;AACVzC,wBAAAA,KAAAA,EAAO2B,KAAAA,CAAMe,QAAQ,CAACC,SAAS,CAAC,CAAA;AAClC,qBAAA,CAAA;AAEApB,oBAAAA,KAAAA,CAAMqB,IAAI,CAACN,IAAAA,CAAAA;gBACb,CAAA,MAAO,IAAIX,KAAAA,CAAMkB,WAAW,EAAE;;AAE5B,oBAAA,MAAMC,QAAAA,GAAWnB,KAAAA;oBACjB,MAAMoB,QAAAA,GAAW,MAAMrB,aAAAA,CAAcoB,QAAAA,CAAAA;AACrCvB,oBAAAA,KAAAA,CAAMqB,IAAI,CAAA,GAAIG,QAAAA,CAAAA;AAChB,gBAAA;AACF,YAAA;QACF,CAAA,OAASZ,OAAAA,CAAQa,MAAM,GAAG,CAAA;QAE1B,OAAOzB,KAAAA;AACT,IAAA,CAAA;AAEA,IAAA,MAAM0B,aAAa,OAAO9B,CAAAA,GAAAA;AACxBA,QAAAA,CAAAA,CAAEJ,cAAc,EAAA;QAChBP,WAAAA,CAAY,KAAA,CAAA;AAEZ,QAAA,IAAI,CAACW,CAAAA,CAAE+B,YAAY,EAAEC,KAAAA,EAAO;AAC1B,YAAA;AACF,QAAA;;AAGA,QAAA,IAAI/C,eAAe,QAAA,EAAU;AAC3B,YAAA,MAAM+C,KAAAA,GAAQhC,CAAAA,CAAE+B,YAAY,CAACC,KAAK;AAClC,YAAA,MAAMC,WAAmB,EAAE;AAE3B,YAAA,IAAK,IAAIC,CAAAA,GAAI,CAAA,EAAGA,IAAIF,KAAAA,CAAMH,MAAM,EAAEK,CAAAA,EAAAA,CAAK;gBACrC,MAAMC,IAAAA,GAAOH,KAAK,CAACE,CAAAA,CAAE;;gBAErB,MAAM1B,KAAAA,GAAQ2B,KAAKC,gBAAgB,IAAA;AAEnC,gBAAA,IAAI5B,KAAAA,EAAO;oBACT,IAAIA,KAAAA,CAAMkB,WAAW,EAAE;wBACrB,MAAMtB,KAAAA,GAAQ,MAAMG,aAAAA,CAAcC,KAAAA,CAAAA;AAClCyB,wBAAAA,QAAAA,CAASR,IAAI,CAAA,GAAIrB,KAAAA,CAAAA;oBACnB,CAAA,MAAO,IAAII,KAAAA,CAAMS,MAAM,EAAE;AACvB,wBAAA,MAAME,IAAAA,GAAO,MAAM,IAAIP,OAAAA,CAAc,CAACC,OAAAA,EAASC,MAAAA,GAAAA;4BAC5CN,KAAAA,CAA8BW,IAAI,CAACN,OAAAA,EAASC,MAAAA,CAAAA;AAC/C,wBAAA,CAAA,CAAA;AACAmB,wBAAAA,QAAAA,CAASR,IAAI,CAACN,IAAAA,CAAAA;AAChB,oBAAA;AACF,gBAAA;AACF,YAAA;YAEA,IAAIc,QAAAA,CAASJ,MAAM,GAAG,CAAA,EAAG;gBACvB3C,UAAAA,CAAW+C,QAAAA,CAAAA;AACb,YAAA;QACF,CAAA,MAAO;;AAEL,YAAA,IAAIjC,CAAAA,CAAE+B,YAAY,CAAC3B,KAAK,EAAE;AACxBlB,gBAAAA,UAAAA,CAAWmB,MAAMC,IAAI,CAACN,CAAAA,CAAE+B,YAAY,CAAC3B,KAAK,CAAA,CAAA;AAC5C,YAAA;AACF,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,qBACEzB,IAAA,CAAC0D,IAAAA,EAAAA;QACCC,QAAAA,EAAS,UAAA;QACTC,MAAAA,EAAO,SAAA;QACPC,KAAAA,EAAM,MAAA;QACNC,MAAAA,EAAO,MAAA;QACPC,SAAAA,EAAU,OAAA;QACVC,WAAAA,EAAY,QAAA;QACZC,WAAAA,EAAaxD,QAAAA,GAAW,YAAA,GAAeD,KAAAA,GAAQ,WAAA,GAAc,YAAA;QAC7D0D,UAAAA,EAAYzD,QAAAA,GAAW,YAAA,GAAeD,KAAAA,GAAQ,WAAA,GAAc,YAAA;QAC5D2D,SAAS,EAAA,IAAA;QACTC,OAAAA,EAAS,CAAA;QACTC,cAAAA,EAAe,QAAA;QACfC,SAAAA,EAAU,QAAA;QACVC,UAAAA,EAAW,QAAA;QACXC,GAAAA,EAAK,CAAA;QACLC,WAAAA,EAAavD,eAAAA;QACbwD,WAAAA,EAAavD,eAAAA;QACbwD,UAAAA,EAAY5D,cAAAA;QACZ6D,MAAAA,EAAQzB,UAAAA;;AAEP7C,YAAAA,UAAAA,KAAe,sBACdH,GAAA,CAAC0E,OAAAA,EAAAA;gBAAQhB,KAAAA,EAAO,MAAA;gBAAQC,MAAAA,EAAQ;+BAEhC3D,GAAA,CAAC2E,MAAAA,EAAAA;gBAAOjB,KAAAA,EAAO,MAAA;gBAAQC,MAAAA,EAAQ;;0BAEjC9D,IAAA,CAAC0D,IAAAA,EAAAA;gBAAKY,SAAAA,EAAU,QAAA;gBAASC,UAAAA,EAAW,QAAA;gBAASC,GAAAA,EAAK,CAAA;;kCAChDxE,IAAA,CAAC+E,UAAAA,EAAAA;wBAAWC,OAAAA,EAAQ,OAAA;wBAAQC,SAAAA,EAAU,YAAA;wBAAaC,SAAAA,EAAU,QAAA;;AAC1D5E,4BAAAA,UAAAA,KAAe,KAAA,GACZO,CAAAA,CAAE,4BAAA,EAA8B,+BAAA,CAAA,GAChCA,EAAE,mCAAA,EAAqC,4BAAA,CAAA;AAA+B,4BAAA,GAAA;0CAC1EV,GAAA,CAAC4E,UAAAA,EAAAA;gCAAWC,OAAAA,EAAQ,OAAA;gCAAQC,SAAAA,EAAU,YAAA;gCAAaE,OAAAA,EAAS/D,WAAAA;AACzDP,gCAAAA,QAAAA,EAAAA,CAAAA,CAAE,mCAAA,EAAqC,cAAA;;;;AAG3CL,oBAAAA,KAAAA,kBACCL,GAAA,CAAC4E,UAAAA,EAAAA;wBAAWC,OAAAA,EAAQ,IAAA;wBAAKC,SAAAA,EAAU,WAAA;AAChCzE,wBAAAA,QAAAA,EAAAA;;;;0BAIPL,GAAA,CAACiF,GAAAA,EAAAA;gBACCC,GAAAA,EAAI,OAAA;gBACJ1B,QAAAA,EAAS,UAAA;gBACT2B,IAAAA,EAAM,CAAA;gBACNC,KAAAA,EAAO,CAAA;gBACPC,MAAAA,EAAQ,CAAA;gBACRC,GAAAA,EAAK,CAAA;gBACL5B,KAAAA,EAAM,MAAA;gBACN6B,IAAAA,EAAK,MAAA;gBACLC,YAAAA,EAAW,gBAAA;AACXC,gBAAAA,QAAAA,EAAU,EAAC;gBACXC,MAAAA,EAAQ,CAAA;gBACRC,GAAAA,EAAKnF,QAAAA;gBACLoF,QAAAA,EAAUvE,YAAAA;gBACVwE,KAAAA,EAAO;oBAAEC,OAAAA,EAAS,CAAA;oBAAGrC,MAAAA,EAAQ;AAAU,iBAAA;gBACvCsC,IAAAA,EAAK,MAAA;AACJ,gBAAA,GAAI5F,eAAe,KAAA,GAChB;oBAAE6F,MAAAA,EAAQ,MAAA;oBAAQC,QAAAA,EAAU;iBAAM,GAClC;oBAAEA,QAAAA,EAAU,IAAA;oBAAMC,eAAAA,EAAiB,EAAA;oBAAIC,SAAAA,EAAW;;;;;AAI9D,CAAA;AAYA,MAAMC,cAAAA,GAAiB,CAAC,EACtBC,WAAW,EACXhG,KAAK,EACLiG,cAAc,EACdC,aAAa,EACO,GAAA;IACpB,MAAM,EAAE7F,CAAC,EAAE,GAAGC,eAAAA,EAAAA;IACd,MAAM,EAAE6F,QAAQ,EAAE,GAAGC,YAAAA,EAAAA;AAErB,IAAA,qBACE5G,IAAA,CAAC0D,IAAAA,EAAAA;QAAKY,SAAAA,EAAU,QAAA;QAASE,GAAAA,EAAK,CAAA;QAAGD,UAAAA,EAAW,OAAA;QAAQV,KAAAA,EAAM,MAAA;;0BACxD7D,IAAA,CAAC0D,IAAAA,EAAAA;gBAAKY,SAAAA,EAAU,QAAA;gBAASE,GAAAA,EAAK,CAAA;gBAAGD,UAAAA,EAAW,OAAA;;kCAC1CpE,GAAA,CAAC4E,UAAAA,EAAAA;wBAAWC,OAAAA,EAAQ,MAAA;AAAQnE,wBAAAA,QAAAA,EAAAA,CAAAA,CAAE,wBAAA,EAA0B,aAAA;;kCACxDV,GAAA,CAAC4E,UAAAA,EAAAA;wBAAWC,OAAAA,EAAQ,OAAA;wBAAQC,SAAAA,EAAU,YAAA;AACnCpE,wBAAAA,QAAAA,EAAAA,CAAAA,CACC,8BAAA,EACA,6FAAA;;;;0BAKNb,IAAA,CAAC0D,IAAAA,EAAAA;gBAAKc,GAAAA,EAAK,CAAA;gBAAGX,KAAAA,EAAM,MAAA;gBAAOgD,IAAAA,EAAK,MAAA;;kCAC9B1G,GAAA,CAACiF,GAAAA,EAAAA;wBAAI0B,IAAAA,EAAM,CAAA;wBAAGC,QAAAA,EAAS,OAAA;AACrB,wBAAA,QAAA,gBAAA5G,GAAA,CAACE,QAAAA,EAAAA;4BACCC,UAAAA,EAAW,KAAA;AACXC,4BAAAA,UAAAA,EAAY,CAACkB,KAAAA,GAAAA;gCACX,IAAIA,KAAAA,CAAMyB,MAAM,GAAG,CAAA,EAAG;oCACpB,MAAMV,IAAAA,GAAOf,KAAK,CAAC,CAAA,CAAE;AACrB+E,oCAAAA,WAAAA,CAAYhE,IAAAA,CAAKkD,IAAI,CAACsB,OAAO,CAAC,MAAA,EAAQ,EAAA,CAAA,CAAA;AACtCL,oCAAAA,QAAAA,EAAAA;oCACAF,cAAAA,CAAejE,IAAAA,CAAAA;AACjB,gCAAA;AACF,4BAAA,CAAA;4BACAhC,KAAAA,EAAOA;;;kCAGXL,GAAA,CAACiF,GAAAA,EAAAA;wBAAI0B,IAAAA,EAAM,CAAA;wBAAGC,QAAAA,EAAS,OAAA;AACrB,wBAAA,QAAA,gBAAA5G,GAAA,CAACE,QAAAA,EAAAA;4BACCC,UAAAA,EAAW,QAAA;AACXC,4BAAAA,UAAAA,EAAY,OAAOkB,KAAAA,GAAAA;gCACjB,IAAIA,KAAAA,CAAMyB,MAAM,GAAG,CAAA,EAAG;oCACpB,IAAI;;wCAEF,MAAM+D,SAAAA,GAAYxF,KAAK,CAAC,CAAA,CAAE;wCAC1B,MAAMyF,UAAAA,GAAaD,SAAAA,CAAUE,kBAAkB,IAAI,EAAA;AACnD,wCAAA,MAAMC,aAAaF,UAAAA,CAAWG,KAAK,CAAC,GAAA,CAAI,CAAC,EAAE,IAAI,SAAA;wCAE/Cb,WAAAA,CAAYY,UAAAA,CAAAA;AACZT,wCAAAA,QAAAA,EAAAA;;AAGA,wCAAA,MAAMD,aAAAA,CAAcjF,KAAAA,CAAAA;AACtB,oCAAA,CAAA,CAAE,OAAO6F,GAAAA,EAAK;wCACZC,OAAAA,CAAQ/G,KAAK,CAAC,0BAAA,EAA4B8G,GAAAA,CAAAA;AAC5C,oCAAA;AACF,gCAAA;AACF,4BAAA,CAAA;4BACA9G,KAAAA,EAAOA;;;;;;;AAMnB,CAAA;AAWA,MAAMgH,oBAAAA,GAAuB,CAAC,EAAEC,WAAW,EAAEC,SAAS,EAAElH,KAAK,EAA6B,GAAA;IACxF,MAAM,EAAEK,CAAC,EAAE,GAAGC,eAAAA,EAAAA;AAEd,IAAA,qBACEd,IAAA,CAAC0D,IAAAA,EAAAA;QAAKY,SAAAA,EAAU,QAAA;QAASE,GAAAA,EAAK,CAAA;QAAGD,UAAAA,EAAW,OAAA;QAAQV,KAAAA,EAAM,MAAA;;0BACxD7D,IAAA,CAAC0D,IAAAA,EAAAA;gBAAKY,SAAAA,EAAU,QAAA;gBAASE,GAAAA,EAAK,CAAA;gBAAGD,UAAAA,EAAW,OAAA;;kCAC1CpE,GAAA,CAAC4E,UAAAA,EAAAA;wBAAWC,OAAAA,EAAQ,MAAA;AACjBnE,wBAAAA,QAAAA,EAAAA,CAAAA,CAAE,qCAAA,EAAuC,qBAAA;;kCAE5CV,GAAA,CAAC4E,UAAAA,EAAAA;wBAAWC,OAAAA,EAAQ,OAAA;wBAAQC,SAAAA,EAAU,YAAA;AACnCpE,wBAAAA,QAAAA,EAAAA,CAAAA,CACC,2CAAA,EACA,yEAAA;;;;0BAKNV,GAAA,CAACiF,GAAAA,EAAAA;gBAAIvB,KAAAA,EAAM,MAAA;AACT,gBAAA,QAAA,gBAAA1D,GAAA,CAACwH,iBAAAA,EAAAA;oBACCC,UAAAA,EAAY;wBACVC,EAAAA,EAAIC,UAAAA,EAAAA;AACJC,wBAAAA,MAAAA,EAAQL,YAAY,SAAA,GAAY,OAAA;AAChCM,wBAAAA,QAAAA,EAAUP,WAAAA,IAAe,EAAA;wBACzBQ,GAAAA,EAAK,EAAA;wBACL/B,IAAAA,EAAM,MAAA;wBACNgC,SAAAA,EAAWC;AACb,qBAAA;oBACA3H,KAAAA,EAAOA,KAAAA;oBACPuG,QAAAA,EAAS;;;;;AAKnB,CAAA;AAEA;;2GAGa3G,eAAAA,GAAkB,IAAA;AAC7B,IAAA,MAAM,CAACqH,WAAAA,EAAaW,cAAAA,CAAe,GAAGtI,QAAAA,CAAwB,IAAA,CAAA;AAC9D,IAAA,MAAM,CAACuI,iBAAAA,EAAmBC,oBAAAA,CAAqB,GAAGxI,QAAAA,CAA4B,IAAA,CAAA;IAC9E,MAAM,EAAEe,CAAC,EAAE,GAAGC,eAAAA,EAAAA;;IAGd,MAAM,EAAEyH,cAAc,EAAE,GAAGC,cAAAA,EAAAA;IAE3B,MAAM,EAAE/B,cAAc,EAAEC,aAAa,EAAEgB,SAAS,EAAElH,KAAK,EAAE,GAAGiI,aAAAA,CAAc;QACxEC,SAAAA,EAAW,CAAClG,OAAS8F,oBAAAA,CAAqB9F,IAAAA;AAC5C,KAAA,CAAA;AAEA,IAAA,MAAM,EAAEnD,gBAAgB,EAAEG,eAAe,EAAEF,cAAc,EAAE,GAAGG,sBAAAA,EAAAA;IAC9D,MAAM,EAAEkJ,WAAW,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAGC,aAAAA,EAAAA;AAEnD,IAAA,MAAMC,YAAAA,GAAe,IAAA;QACnBZ,cAAAA,CAAe,IAAA,CAAA;QACfE,oBAAAA,CAAqB,IAAA,CAAA;AACrB9I,QAAAA,eAAAA,EAAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMyJ,cAAAA,GAAiB,UAAA;;AAErBL,QAAAA,QAAAA,EAAAA;AAEA,QAAA,IAAIP,qBAAqB/I,cAAAA,EAAgB;YACvCqJ,WAAAA,CAAY;gBACVO,IAAAA,EAAM,MAAA;gBACNC,KAAAA,EAAO;AACL,oBAAA;wBACEjD,IAAAA,EAAM,MAAA;wBACNkD,IAAAA,EAAM;AACR,qBAAA;AACAf,oBAAAA;AACD;AACH,aAAA,CAAA;AACF,QAAA,CAAA,MAAO,IAAIA,iBAAAA,EAAmB;;AAE5B,YAAA,IAAI,CAACQ,KAAAA,EAAO;gBACVC,QAAAA,CAAS,yCAAA,CAAA;AACX,YAAA;;YAEAP,cAAAA,CAAe;AAACF,gBAAAA;AAAkB,aAAA,CAAA;AACpC,QAAA;AAEA7I,QAAAA,eAAAA,EAAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAM6J,kBAAAA,GAAqB,IAAA;AACzB,QAAA,OAAO,CAAC,CAAChB,iBAAAA;AACX,IAAA,CAAA;AAEA,IAAA,qBACErI,IAAA,CAACsJ,SAAAA,EAAAA;QACCC,IAAAA,EAAMlK,gBAAAA;AACNmK,QAAAA,YAAAA,EAAc,CAACC,MAAAA,GAAAA;AACb,YAAA,IAAI,CAACA,MAAAA,EAAQT,YAAAA,EAAAA;AACf,QAAA,CAAA;AACAU,QAAAA,KAAAA,EAAO7I,EAAE,yBAAA,EAA2B,aAAA,CAAA;QACpC8I,QAAAA,EAAUX,YAAAA;QACVY,UAAAA,EAAYX,cAAAA;;AAEZ,0BAAA9I,GAAA,CAACmJ,UAAUO,IAAI,EAAA;AACbH,gBAAAA,KAAAA,EAAO7I,EAAE,8BAAA,EAAgC,aAAA,CAAA;AACzCiJ,gBAAAA,SAAAA,EAAWjJ,EAAE,kCAAA,EAAoC,UAAA,CAAA;AACjDkJ,gBAAAA,WAAAA,EAAalJ,EAAE,eAAA,EAAiB,QAAA,CAAA;AAChCmJ,gBAAAA,WAAAA,EAAa,CAAC3B,iBAAAA,IAAqBX,SAAAA;gBACnCuC,MAAAA,EAAQZ,kBAAAA;AAER,gBAAA,QAAA,gBAAAlJ,GAAA,CAACoG,cAAAA,EAAAA;oBACCC,WAAAA,EAAa4B,cAAAA;oBACb5H,KAAAA,EAAOA,KAAAA;oBACPiG,cAAAA,EAAgBA,cAAAA;oBAChBC,aAAAA,EAAeA;;;AAInB,0BAAAvG,GAAA,CAACmJ,UAAUO,IAAI,EAAA;AACbH,gBAAAA,KAAAA,EAAO7I,EAAE,8BAAA,EAAgC,SAAA,CAAA;AACzCiJ,gBAAAA,SAAAA,EAAWjJ,EAAE,eAAA,EAAiB,QAAA,CAAA;AAC9BqJ,gBAAAA,SAAAA,EAAWrJ,EAAE,kBAAA,EAAoB,MAAA,CAAA;AACjCmJ,gBAAAA,WAAAA,EAAa,CAAC3B,iBAAAA,IAAqBX,SAAAA;AAEnC,gBAAA,QAAA,gBAAAvH,GAAA,CAACqH,oBAAAA,EAAAA;oBAAqBC,WAAAA,EAAaA,WAAAA;oBAAaC,SAAAA,EAAWA,SAAAA;oBAAWlH,KAAAA,EAAOA;;;;;AAIrF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UploadFigmaModal.js","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 type=\"url\"\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} xs={12} 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","xs","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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"}
|
|
1
|
+
{"version":3,"file":"UploadFigmaModal.js","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 type=\"url\"\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} xs={12} 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","xs","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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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import {
|
|
2
|
+
import { useState, useContext, createContext } from 'react';
|
|
3
3
|
import { Flex, Typography, Link, Box, TextInput, Button, Grid } from '@strapi/design-system';
|
|
4
4
|
import { ImagePreview } from './components/ImagePreview.mjs';
|
|
5
5
|
import { StepModal, useStepModal } from './components/StepModal.mjs';
|
|
@@ -1 +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 type=\"url\"\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} xs={12} 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","xs","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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"}
|
|
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 type=\"url\"\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} xs={12} 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","xs","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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"}
|