@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":"ChatProvider.js","sources":["../../../../../admin/src/components/AIChat/providers/ChatProvider.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n createContext,\n useContext,\n useMemo,\n useState,\n useEffect,\n type ReactNode,\n type ChangeEvent,\n} from 'react';\n\nimport { UIMessage, useChat } from '@ai-sdk/react';\nimport { useAIAvailability } from '@strapi/admin/strapi-admin/ee';\n\nimport { useCTBTracking } from '../../CTBSession/ctbSession';\nimport { useDataManager } from '../../DataManager/useDataManager';\nimport { FeedbackProvider } from '../FeedbackModal';\nimport { useAIChat } from '../hooks/useAIFetch';\nimport { useChatTitle } from '../hooks/useChatTitle';\nimport { useLastSeenSchemas } from '../hooks/useLastSeenSchemas';\nimport { transformCTBToChat } from '../lib/transforms/schemas/fromCTB';\nimport { Attachment } from '../lib/types/attachments';\nimport { Schema } from '../lib/types/schema';\nimport { UploadProjectToChatProvider } from '../UploadCodeModal';\nimport { UploadFigmaToChatProvider } from '../UploadFigmaModal';\n\nimport { SchemaChatProvider } from './SchemaProvider';\n\ninterface ChatContextType extends Omit<ReturnType<typeof useChat>, 'messages'> {\n isChatEnabled: boolean;\n title?: string;\n messages: UIMessage[];\n handleSubmit: (event: any) => void;\n input: string;\n setInput: React.Dispatch<React.SetStateAction<string>>;\n handleInputChange: (e: ChangeEvent<HTMLInputElement> | ChangeEvent<HTMLTextAreaElement>) => void;\n reset: () => void;\n schemas: Schema[];\n // Chat window\n isChatOpen: boolean;\n openChat: () => void;\n closeChat: () => void;\n // Attachments\n attachments: Attachment[];\n setAttachments: React.Dispatch<React.SetStateAction<Attachment[]>>;\n}\n\nconst ChatContext = createContext<ChatContextType | undefined>(undefined);\n\nconst generateRandomId = () => {\n return Math.random().toString(36).substring(2, 15);\n};\n\nexport const BaseChatProvider = ({\n children,\n defaultOpen = false,\n}: {\n children: ReactNode;\n defaultOpen?: boolean;\n}) => {\n const [chatId, setChatId] = useState<string | undefined>(generateRandomId());\n const [isChatOpen, setIsChatOpen] = useState(defaultOpen);\n const [openCount, setOpenCount] = useState(0);\n const [input, setInput] = useState('');\n\n // Files\n const [attachments, setAttachments] = useState<Attachment[]>([]);\n\n const { trackUsage } = useCTBTracking();\n\n // DataManager\n const { components, contentTypes } = useDataManager();\n\n // Last user seen schemas\n const { lastSeenSchemas } = useLastSeenSchemas();\n\n // Schemas to be sent to the chat\n const schemas = useMemo(() => {\n return [\n ...Object.values(contentTypes)\n .filter((schema) => schema.status !== 'REMOVED')\n // Probably we should still keep this one, not sure\n .filter((schema) => schema.uid !== 'plugin::users-permissions.user')\n .filter((schema) => schema.visible)\n .map(transformCTBToChat as any),\n ...Object.values(components)\n .filter((schema) => schema.status !== 'REMOVED')\n .map(transformCTBToChat as any),\n ] as Schema[];\n }, [contentTypes, components]);\n\n const {\n id,\n messages,\n sendMessage: _sendMessage,\n status,\n stop,\n ...chat\n } = useAIChat({\n id: chatId?.toString(),\n experimental_throttle: 100,\n });\n\n /* -------------------------------------------------------------------------------------------------\n * AI SDK chat overrides\n * -----------------------------------------------------------------------------------------------*/\n\n // NOTE: body is using state variables, so they can not be passed as a prop in useChat\n const sendMessage: typeof _sendMessage = async (message, options) => {\n if (status === 'streaming' || status === 'submitted') {\n return;\n }\n\n return _sendMessage(message, {\n ...options,\n body: {\n ...options?.body,\n schemas,\n metadata: {\n lastSeenSchemas: lastSeenSchemas.map((schema) => schema.uid),\n },\n },\n });\n };\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n if (status === 'streaming' || status === 'submitted') {\n return;\n }\n\n const readyAttachments = attachments.filter((a) => a.status !== 'loading');\n if (input.trim().length === 0 && attachments.length === 0) {\n return;\n }\n\n const files = readyAttachments.map(\n (attachment) =>\n ({\n type: 'file',\n filename: attachment.filename,\n mediaType: attachment.mediaType,\n url: attachment.url,\n }) as const\n );\n sendMessage({ text: input, files });\n setInput('');\n setAttachments([]);\n };\n\n /* -------------------------------------------------------------------------------------------------\n * Chat title\n * -----------------------------------------------------------------------------------------------*/\n const { title, generateTitle, resetTitle } = useChatTitle({ chatId: id, messages });\n\n // Automatically generate title when we have at least 1 message (user query)\n useEffect(() => {\n if (messages.length >= 1 && !title) {\n generateTitle();\n }\n }, [messages.length, title, generateTitle]);\n\n useEffect(() => {\n if (status === 'error') {\n trackUsage('didAnswerMessage', {\n successful: false,\n });\n } else if (\n status === 'ready' &&\n messages.length > 0 &&\n messages[messages.length - 1]?.role === 'assistant'\n ) {\n trackUsage('didAnswerMessage', {\n successful: true,\n });\n }\n }, [status, messages, trackUsage]);\n\n const isChatAvailable = useAIAvailability();\n\n return (\n <ChatContext.Provider\n value={{\n isChatEnabled: isChatAvailable,\n id,\n status,\n stop,\n sendMessage,\n ...chat,\n messages,\n handleSubmit,\n input,\n setInput,\n handleInputChange: (e) => setInput(e.target.value),\n reset: () => {\n stop();\n setChatId(generateRandomId());\n trackUsage('didStartNewChat');\n resetTitle();\n },\n schemas,\n // Chat\n title,\n isChatOpen,\n openChat: () => {\n setIsChatOpen(true);\n // if this is the first open, it's a new chat\n if (openCount === 0) {\n trackUsage('didStartNewChat');\n }\n setOpenCount((prev) => prev + 1);\n },\n closeChat: () => setIsChatOpen(false),\n // Attachments\n attachments,\n setAttachments,\n }}\n >\n {children}\n </ChatContext.Provider>\n );\n};\n\nexport const ChatProvider = ({\n children,\n defaultOpen = false,\n}: {\n children: React.ReactNode;\n defaultOpen?: boolean;\n}) => {\n return (\n <BaseChatProvider defaultOpen={defaultOpen}>\n <SchemaChatProvider>\n <UploadProjectToChatProvider>\n <UploadFigmaToChatProvider>\n <FeedbackProvider>{children}</FeedbackProvider>\n </UploadFigmaToChatProvider>\n </UploadProjectToChatProvider>\n </SchemaChatProvider>\n </BaseChatProvider>\n );\n};\n\nexport function useStrapiChat() {\n const context = useContext(ChatContext);\n\n if (process.env.NODE_ENV === 'development') {\n // In development, provide a fallback to prevent crashes during hot reloading\n // This allows the app to continue working during HMR updates\n if (context === undefined) {\n console.warn(\n 'useStrapiChat was called outside of ChatProvider. This is only allowed in development mode.'\n );\n return {} as ChatContextType;\n }\n } else if (context === undefined) {\n throw new Error('useStrapiChat must be used within a ChatProvider');\n }\n return context;\n}\n"],"names":["ChatContext","createContext","undefined","generateRandomId","Math","random","toString","substring","BaseChatProvider","children","defaultOpen","chatId","setChatId","useState","isChatOpen","setIsChatOpen","openCount","setOpenCount","input","setInput","attachments","setAttachments","trackUsage","useCTBTracking","components","contentTypes","useDataManager","lastSeenSchemas","useLastSeenSchemas","schemas","useMemo","Object","values","filter","schema","status","uid","visible","map","transformCTBToChat","id","messages","sendMessage","_sendMessage","stop","chat","useAIChat","experimental_throttle","message","options","body","metadata","handleSubmit","e","preventDefault","readyAttachments","a","trim","length","files","attachment","type","filename","mediaType","url","text","title","generateTitle","resetTitle","useChatTitle","useEffect","successful","role","isChatAvailable","useAIAvailability","_jsx","Provider","value","isChatEnabled","handleInputChange","target","reset","openChat","prev","closeChat","ChatProvider","SchemaChatProvider","UploadProjectToChatProvider","UploadFigmaToChatProvider","FeedbackProvider","useStrapiChat","context","useContext","process","env","NODE_ENV","console","warn","Error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChatProvider.js","sources":["../../../../../admin/src/components/AIChat/providers/ChatProvider.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n createContext,\n useContext,\n useMemo,\n useState,\n useEffect,\n type ReactNode,\n type ChangeEvent,\n} from 'react';\n\nimport { UIMessage, useChat } from '@ai-sdk/react';\nimport { useAIAvailability } from '@strapi/admin/strapi-admin/ee';\n\nimport { useCTBTracking } from '../../CTBSession/ctbSession';\nimport { useDataManager } from '../../DataManager/useDataManager';\nimport { FeedbackProvider } from '../FeedbackModal';\nimport { useAIChat } from '../hooks/useAIFetch';\nimport { useChatTitle } from '../hooks/useChatTitle';\nimport { useLastSeenSchemas } from '../hooks/useLastSeenSchemas';\nimport { transformCTBToChat } from '../lib/transforms/schemas/fromCTB';\nimport { Attachment } from '../lib/types/attachments';\nimport { Schema } from '../lib/types/schema';\nimport { UploadProjectToChatProvider } from '../UploadCodeModal';\nimport { UploadFigmaToChatProvider } from '../UploadFigmaModal';\n\nimport { SchemaChatProvider } from './SchemaProvider';\n\ninterface ChatContextType extends Omit<ReturnType<typeof useChat>, 'messages'> {\n isChatEnabled: boolean;\n title?: string;\n messages: UIMessage[];\n handleSubmit: (event: any) => void;\n input: string;\n setInput: React.Dispatch<React.SetStateAction<string>>;\n handleInputChange: (e: ChangeEvent<HTMLInputElement> | ChangeEvent<HTMLTextAreaElement>) => void;\n reset: () => void;\n schemas: Schema[];\n // Chat window\n isChatOpen: boolean;\n openChat: () => void;\n closeChat: () => void;\n // Attachments\n attachments: Attachment[];\n setAttachments: React.Dispatch<React.SetStateAction<Attachment[]>>;\n}\n\nconst ChatContext = createContext<ChatContextType | undefined>(undefined);\n\nconst generateRandomId = () => {\n return Math.random().toString(36).substring(2, 15);\n};\n\nexport const BaseChatProvider = ({\n children,\n defaultOpen = false,\n}: {\n children: ReactNode;\n defaultOpen?: boolean;\n}) => {\n const [chatId, setChatId] = useState<string | undefined>(generateRandomId());\n const [isChatOpen, setIsChatOpen] = useState(defaultOpen);\n const [openCount, setOpenCount] = useState(0);\n const [input, setInput] = useState('');\n\n // Files\n const [attachments, setAttachments] = useState<Attachment[]>([]);\n\n const { trackUsage } = useCTBTracking();\n\n // DataManager\n const { components, contentTypes } = useDataManager();\n\n // Last user seen schemas\n const { lastSeenSchemas } = useLastSeenSchemas();\n\n // Schemas to be sent to the chat\n const schemas = useMemo(() => {\n return [\n ...Object.values(contentTypes)\n .filter((schema) => schema.status !== 'REMOVED')\n // Probably we should still keep this one, not sure\n .filter((schema) => schema.uid !== 'plugin::users-permissions.user')\n .filter((schema) => schema.visible)\n .map(transformCTBToChat as any),\n ...Object.values(components)\n .filter((schema) => schema.status !== 'REMOVED')\n .map(transformCTBToChat as any),\n ] as Schema[];\n }, [contentTypes, components]);\n\n const {\n id,\n messages,\n sendMessage: _sendMessage,\n status,\n stop,\n ...chat\n } = useAIChat({\n id: chatId?.toString(),\n experimental_throttle: 100,\n });\n\n /* -------------------------------------------------------------------------------------------------\n * AI SDK chat overrides\n * -----------------------------------------------------------------------------------------------*/\n\n // NOTE: body is using state variables, so they can not be passed as a prop in useChat\n const sendMessage: typeof _sendMessage = async (message, options) => {\n if (status === 'streaming' || status === 'submitted') {\n return;\n }\n\n return _sendMessage(message, {\n ...options,\n body: {\n ...options?.body,\n schemas,\n metadata: {\n lastSeenSchemas: lastSeenSchemas.map((schema) => schema.uid),\n },\n },\n });\n };\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n if (status === 'streaming' || status === 'submitted') {\n return;\n }\n\n const readyAttachments = attachments.filter((a) => a.status !== 'loading');\n if (input.trim().length === 0 && attachments.length === 0) {\n return;\n }\n\n const files = readyAttachments.map(\n (attachment) =>\n ({\n type: 'file',\n filename: attachment.filename,\n mediaType: attachment.mediaType,\n url: attachment.url,\n }) as const\n );\n sendMessage({ text: input, files });\n setInput('');\n setAttachments([]);\n };\n\n /* -------------------------------------------------------------------------------------------------\n * Chat title\n * -----------------------------------------------------------------------------------------------*/\n const { title, generateTitle, resetTitle } = useChatTitle({ chatId: id, messages });\n\n // Automatically generate title when we have at least 1 message (user query)\n useEffect(() => {\n if (messages.length >= 1 && !title) {\n generateTitle();\n }\n }, [messages.length, title, generateTitle]);\n\n useEffect(() => {\n if (status === 'error') {\n trackUsage('didAnswerMessage', {\n successful: false,\n });\n } else if (\n status === 'ready' &&\n messages.length > 0 &&\n messages[messages.length - 1]?.role === 'assistant'\n ) {\n trackUsage('didAnswerMessage', {\n successful: true,\n });\n }\n }, [status, messages, trackUsage]);\n\n const isChatAvailable = useAIAvailability();\n\n return (\n <ChatContext.Provider\n value={{\n isChatEnabled: isChatAvailable,\n id,\n status,\n stop,\n sendMessage,\n ...chat,\n messages,\n handleSubmit,\n input,\n setInput,\n handleInputChange: (e) => setInput(e.target.value),\n reset: () => {\n stop();\n setChatId(generateRandomId());\n trackUsage('didStartNewChat');\n resetTitle();\n },\n schemas,\n // Chat\n title,\n isChatOpen,\n openChat: () => {\n setIsChatOpen(true);\n // if this is the first open, it's a new chat\n if (openCount === 0) {\n trackUsage('didStartNewChat');\n }\n setOpenCount((prev) => prev + 1);\n },\n closeChat: () => setIsChatOpen(false),\n // Attachments\n attachments,\n setAttachments,\n }}\n >\n {children}\n </ChatContext.Provider>\n );\n};\n\nexport const ChatProvider = ({\n children,\n defaultOpen = false,\n}: {\n children: React.ReactNode;\n defaultOpen?: boolean;\n}) => {\n return (\n <BaseChatProvider defaultOpen={defaultOpen}>\n <SchemaChatProvider>\n <UploadProjectToChatProvider>\n <UploadFigmaToChatProvider>\n <FeedbackProvider>{children}</FeedbackProvider>\n </UploadFigmaToChatProvider>\n </UploadProjectToChatProvider>\n </SchemaChatProvider>\n </BaseChatProvider>\n );\n};\n\nexport function useStrapiChat() {\n const context = useContext(ChatContext);\n\n if (process.env.NODE_ENV === 'development') {\n // In development, provide a fallback to prevent crashes during hot reloading\n // This allows the app to continue working during HMR updates\n if (context === undefined) {\n console.warn(\n 'useStrapiChat was called outside of ChatProvider. This is only allowed in development mode.'\n );\n return {} as ChatContextType;\n }\n } else if (context === undefined) {\n throw new Error('useStrapiChat must be used within a ChatProvider');\n }\n return context;\n}\n"],"names":["ChatContext","createContext","undefined","generateRandomId","Math","random","toString","substring","BaseChatProvider","children","defaultOpen","chatId","setChatId","useState","isChatOpen","setIsChatOpen","openCount","setOpenCount","input","setInput","attachments","setAttachments","trackUsage","useCTBTracking","components","contentTypes","useDataManager","lastSeenSchemas","useLastSeenSchemas","schemas","useMemo","Object","values","filter","schema","status","uid","visible","map","transformCTBToChat","id","messages","sendMessage","_sendMessage","stop","chat","useAIChat","experimental_throttle","message","options","body","metadata","handleSubmit","e","preventDefault","readyAttachments","a","trim","length","files","attachment","type","filename","mediaType","url","text","title","generateTitle","resetTitle","useChatTitle","useEffect","successful","role","isChatAvailable","useAIAvailability","_jsx","Provider","value","isChatEnabled","handleInputChange","target","reset","openChat","prev","closeChat","ChatProvider","SchemaChatProvider","UploadProjectToChatProvider","UploadFigmaToChatProvider","FeedbackProvider","useStrapiChat","context","useContext","process","env","NODE_ENV","console","warn","Error"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatProvider.mjs","sources":["../../../../../admin/src/components/AIChat/providers/ChatProvider.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n createContext,\n useContext,\n useMemo,\n useState,\n useEffect,\n type ReactNode,\n type ChangeEvent,\n} from 'react';\n\nimport { UIMessage, useChat } from '@ai-sdk/react';\nimport { useAIAvailability } from '@strapi/admin/strapi-admin/ee';\n\nimport { useCTBTracking } from '../../CTBSession/ctbSession';\nimport { useDataManager } from '../../DataManager/useDataManager';\nimport { FeedbackProvider } from '../FeedbackModal';\nimport { useAIChat } from '../hooks/useAIFetch';\nimport { useChatTitle } from '../hooks/useChatTitle';\nimport { useLastSeenSchemas } from '../hooks/useLastSeenSchemas';\nimport { transformCTBToChat } from '../lib/transforms/schemas/fromCTB';\nimport { Attachment } from '../lib/types/attachments';\nimport { Schema } from '../lib/types/schema';\nimport { UploadProjectToChatProvider } from '../UploadCodeModal';\nimport { UploadFigmaToChatProvider } from '../UploadFigmaModal';\n\nimport { SchemaChatProvider } from './SchemaProvider';\n\ninterface ChatContextType extends Omit<ReturnType<typeof useChat>, 'messages'> {\n isChatEnabled: boolean;\n title?: string;\n messages: UIMessage[];\n handleSubmit: (event: any) => void;\n input: string;\n setInput: React.Dispatch<React.SetStateAction<string>>;\n handleInputChange: (e: ChangeEvent<HTMLInputElement> | ChangeEvent<HTMLTextAreaElement>) => void;\n reset: () => void;\n schemas: Schema[];\n // Chat window\n isChatOpen: boolean;\n openChat: () => void;\n closeChat: () => void;\n // Attachments\n attachments: Attachment[];\n setAttachments: React.Dispatch<React.SetStateAction<Attachment[]>>;\n}\n\nconst ChatContext = createContext<ChatContextType | undefined>(undefined);\n\nconst generateRandomId = () => {\n return Math.random().toString(36).substring(2, 15);\n};\n\nexport const BaseChatProvider = ({\n children,\n defaultOpen = false,\n}: {\n children: ReactNode;\n defaultOpen?: boolean;\n}) => {\n const [chatId, setChatId] = useState<string | undefined>(generateRandomId());\n const [isChatOpen, setIsChatOpen] = useState(defaultOpen);\n const [openCount, setOpenCount] = useState(0);\n const [input, setInput] = useState('');\n\n // Files\n const [attachments, setAttachments] = useState<Attachment[]>([]);\n\n const { trackUsage } = useCTBTracking();\n\n // DataManager\n const { components, contentTypes } = useDataManager();\n\n // Last user seen schemas\n const { lastSeenSchemas } = useLastSeenSchemas();\n\n // Schemas to be sent to the chat\n const schemas = useMemo(() => {\n return [\n ...Object.values(contentTypes)\n .filter((schema) => schema.status !== 'REMOVED')\n // Probably we should still keep this one, not sure\n .filter((schema) => schema.uid !== 'plugin::users-permissions.user')\n .filter((schema) => schema.visible)\n .map(transformCTBToChat as any),\n ...Object.values(components)\n .filter((schema) => schema.status !== 'REMOVED')\n .map(transformCTBToChat as any),\n ] as Schema[];\n }, [contentTypes, components]);\n\n const {\n id,\n messages,\n sendMessage: _sendMessage,\n status,\n stop,\n ...chat\n } = useAIChat({\n id: chatId?.toString(),\n experimental_throttle: 100,\n });\n\n /* -------------------------------------------------------------------------------------------------\n * AI SDK chat overrides\n * -----------------------------------------------------------------------------------------------*/\n\n // NOTE: body is using state variables, so they can not be passed as a prop in useChat\n const sendMessage: typeof _sendMessage = async (message, options) => {\n if (status === 'streaming' || status === 'submitted') {\n return;\n }\n\n return _sendMessage(message, {\n ...options,\n body: {\n ...options?.body,\n schemas,\n metadata: {\n lastSeenSchemas: lastSeenSchemas.map((schema) => schema.uid),\n },\n },\n });\n };\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n if (status === 'streaming' || status === 'submitted') {\n return;\n }\n\n const readyAttachments = attachments.filter((a) => a.status !== 'loading');\n if (input.trim().length === 0 && attachments.length === 0) {\n return;\n }\n\n const files = readyAttachments.map(\n (attachment) =>\n ({\n type: 'file',\n filename: attachment.filename,\n mediaType: attachment.mediaType,\n url: attachment.url,\n }) as const\n );\n sendMessage({ text: input, files });\n setInput('');\n setAttachments([]);\n };\n\n /* -------------------------------------------------------------------------------------------------\n * Chat title\n * -----------------------------------------------------------------------------------------------*/\n const { title, generateTitle, resetTitle } = useChatTitle({ chatId: id, messages });\n\n // Automatically generate title when we have at least 1 message (user query)\n useEffect(() => {\n if (messages.length >= 1 && !title) {\n generateTitle();\n }\n }, [messages.length, title, generateTitle]);\n\n useEffect(() => {\n if (status === 'error') {\n trackUsage('didAnswerMessage', {\n successful: false,\n });\n } else if (\n status === 'ready' &&\n messages.length > 0 &&\n messages[messages.length - 1]?.role === 'assistant'\n ) {\n trackUsage('didAnswerMessage', {\n successful: true,\n });\n }\n }, [status, messages, trackUsage]);\n\n const isChatAvailable = useAIAvailability();\n\n return (\n <ChatContext.Provider\n value={{\n isChatEnabled: isChatAvailable,\n id,\n status,\n stop,\n sendMessage,\n ...chat,\n messages,\n handleSubmit,\n input,\n setInput,\n handleInputChange: (e) => setInput(e.target.value),\n reset: () => {\n stop();\n setChatId(generateRandomId());\n trackUsage('didStartNewChat');\n resetTitle();\n },\n schemas,\n // Chat\n title,\n isChatOpen,\n openChat: () => {\n setIsChatOpen(true);\n // if this is the first open, it's a new chat\n if (openCount === 0) {\n trackUsage('didStartNewChat');\n }\n setOpenCount((prev) => prev + 1);\n },\n closeChat: () => setIsChatOpen(false),\n // Attachments\n attachments,\n setAttachments,\n }}\n >\n {children}\n </ChatContext.Provider>\n );\n};\n\nexport const ChatProvider = ({\n children,\n defaultOpen = false,\n}: {\n children: React.ReactNode;\n defaultOpen?: boolean;\n}) => {\n return (\n <BaseChatProvider defaultOpen={defaultOpen}>\n <SchemaChatProvider>\n <UploadProjectToChatProvider>\n <UploadFigmaToChatProvider>\n <FeedbackProvider>{children}</FeedbackProvider>\n </UploadFigmaToChatProvider>\n </UploadProjectToChatProvider>\n </SchemaChatProvider>\n </BaseChatProvider>\n );\n};\n\nexport function useStrapiChat() {\n const context = useContext(ChatContext);\n\n if (process.env.NODE_ENV === 'development') {\n // In development, provide a fallback to prevent crashes during hot reloading\n // This allows the app to continue working during HMR updates\n if (context === undefined) {\n console.warn(\n 'useStrapiChat was called outside of ChatProvider. This is only allowed in development mode.'\n );\n return {} as ChatContextType;\n }\n } else if (context === undefined) {\n throw new Error('useStrapiChat must be used within a ChatProvider');\n }\n return context;\n}\n"],"names":["ChatContext","createContext","undefined","generateRandomId","Math","random","toString","substring","BaseChatProvider","children","defaultOpen","chatId","setChatId","useState","isChatOpen","setIsChatOpen","openCount","setOpenCount","input","setInput","attachments","setAttachments","trackUsage","useCTBTracking","components","contentTypes","useDataManager","lastSeenSchemas","useLastSeenSchemas","schemas","useMemo","Object","values","filter","schema","status","uid","visible","map","transformCTBToChat","id","messages","sendMessage","_sendMessage","stop","chat","useAIChat","experimental_throttle","message","options","body","metadata","handleSubmit","e","preventDefault","readyAttachments","a","trim","length","files","attachment","type","filename","mediaType","url","text","title","generateTitle","resetTitle","useChatTitle","useEffect","successful","role","isChatAvailable","useAIAvailability","_jsx","Provider","value","isChatEnabled","handleInputChange","target","reset","openChat","prev","closeChat","ChatProvider","SchemaChatProvider","UploadProjectToChatProvider","UploadFigmaToChatProvider","FeedbackProvider","useStrapiChat","context","useContext","process","env","NODE_ENV","console","warn","Error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChatProvider.mjs","sources":["../../../../../admin/src/components/AIChat/providers/ChatProvider.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n createContext,\n useContext,\n useMemo,\n useState,\n useEffect,\n type ReactNode,\n type ChangeEvent,\n} from 'react';\n\nimport { UIMessage, useChat } from '@ai-sdk/react';\nimport { useAIAvailability } from '@strapi/admin/strapi-admin/ee';\n\nimport { useCTBTracking } from '../../CTBSession/ctbSession';\nimport { useDataManager } from '../../DataManager/useDataManager';\nimport { FeedbackProvider } from '../FeedbackModal';\nimport { useAIChat } from '../hooks/useAIFetch';\nimport { useChatTitle } from '../hooks/useChatTitle';\nimport { useLastSeenSchemas } from '../hooks/useLastSeenSchemas';\nimport { transformCTBToChat } from '../lib/transforms/schemas/fromCTB';\nimport { Attachment } from '../lib/types/attachments';\nimport { Schema } from '../lib/types/schema';\nimport { UploadProjectToChatProvider } from '../UploadCodeModal';\nimport { UploadFigmaToChatProvider } from '../UploadFigmaModal';\n\nimport { SchemaChatProvider } from './SchemaProvider';\n\ninterface ChatContextType extends Omit<ReturnType<typeof useChat>, 'messages'> {\n isChatEnabled: boolean;\n title?: string;\n messages: UIMessage[];\n handleSubmit: (event: any) => void;\n input: string;\n setInput: React.Dispatch<React.SetStateAction<string>>;\n handleInputChange: (e: ChangeEvent<HTMLInputElement> | ChangeEvent<HTMLTextAreaElement>) => void;\n reset: () => void;\n schemas: Schema[];\n // Chat window\n isChatOpen: boolean;\n openChat: () => void;\n closeChat: () => void;\n // Attachments\n attachments: Attachment[];\n setAttachments: React.Dispatch<React.SetStateAction<Attachment[]>>;\n}\n\nconst ChatContext = createContext<ChatContextType | undefined>(undefined);\n\nconst generateRandomId = () => {\n return Math.random().toString(36).substring(2, 15);\n};\n\nexport const BaseChatProvider = ({\n children,\n defaultOpen = false,\n}: {\n children: ReactNode;\n defaultOpen?: boolean;\n}) => {\n const [chatId, setChatId] = useState<string | undefined>(generateRandomId());\n const [isChatOpen, setIsChatOpen] = useState(defaultOpen);\n const [openCount, setOpenCount] = useState(0);\n const [input, setInput] = useState('');\n\n // Files\n const [attachments, setAttachments] = useState<Attachment[]>([]);\n\n const { trackUsage } = useCTBTracking();\n\n // DataManager\n const { components, contentTypes } = useDataManager();\n\n // Last user seen schemas\n const { lastSeenSchemas } = useLastSeenSchemas();\n\n // Schemas to be sent to the chat\n const schemas = useMemo(() => {\n return [\n ...Object.values(contentTypes)\n .filter((schema) => schema.status !== 'REMOVED')\n // Probably we should still keep this one, not sure\n .filter((schema) => schema.uid !== 'plugin::users-permissions.user')\n .filter((schema) => schema.visible)\n .map(transformCTBToChat as any),\n ...Object.values(components)\n .filter((schema) => schema.status !== 'REMOVED')\n .map(transformCTBToChat as any),\n ] as Schema[];\n }, [contentTypes, components]);\n\n const {\n id,\n messages,\n sendMessage: _sendMessage,\n status,\n stop,\n ...chat\n } = useAIChat({\n id: chatId?.toString(),\n experimental_throttle: 100,\n });\n\n /* -------------------------------------------------------------------------------------------------\n * AI SDK chat overrides\n * -----------------------------------------------------------------------------------------------*/\n\n // NOTE: body is using state variables, so they can not be passed as a prop in useChat\n const sendMessage: typeof _sendMessage = async (message, options) => {\n if (status === 'streaming' || status === 'submitted') {\n return;\n }\n\n return _sendMessage(message, {\n ...options,\n body: {\n ...options?.body,\n schemas,\n metadata: {\n lastSeenSchemas: lastSeenSchemas.map((schema) => schema.uid),\n },\n },\n });\n };\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n if (status === 'streaming' || status === 'submitted') {\n return;\n }\n\n const readyAttachments = attachments.filter((a) => a.status !== 'loading');\n if (input.trim().length === 0 && attachments.length === 0) {\n return;\n }\n\n const files = readyAttachments.map(\n (attachment) =>\n ({\n type: 'file',\n filename: attachment.filename,\n mediaType: attachment.mediaType,\n url: attachment.url,\n }) as const\n );\n sendMessage({ text: input, files });\n setInput('');\n setAttachments([]);\n };\n\n /* -------------------------------------------------------------------------------------------------\n * Chat title\n * -----------------------------------------------------------------------------------------------*/\n const { title, generateTitle, resetTitle } = useChatTitle({ chatId: id, messages });\n\n // Automatically generate title when we have at least 1 message (user query)\n useEffect(() => {\n if (messages.length >= 1 && !title) {\n generateTitle();\n }\n }, [messages.length, title, generateTitle]);\n\n useEffect(() => {\n if (status === 'error') {\n trackUsage('didAnswerMessage', {\n successful: false,\n });\n } else if (\n status === 'ready' &&\n messages.length > 0 &&\n messages[messages.length - 1]?.role === 'assistant'\n ) {\n trackUsage('didAnswerMessage', {\n successful: true,\n });\n }\n }, [status, messages, trackUsage]);\n\n const isChatAvailable = useAIAvailability();\n\n return (\n <ChatContext.Provider\n value={{\n isChatEnabled: isChatAvailable,\n id,\n status,\n stop,\n sendMessage,\n ...chat,\n messages,\n handleSubmit,\n input,\n setInput,\n handleInputChange: (e) => setInput(e.target.value),\n reset: () => {\n stop();\n setChatId(generateRandomId());\n trackUsage('didStartNewChat');\n resetTitle();\n },\n schemas,\n // Chat\n title,\n isChatOpen,\n openChat: () => {\n setIsChatOpen(true);\n // if this is the first open, it's a new chat\n if (openCount === 0) {\n trackUsage('didStartNewChat');\n }\n setOpenCount((prev) => prev + 1);\n },\n closeChat: () => setIsChatOpen(false),\n // Attachments\n attachments,\n setAttachments,\n }}\n >\n {children}\n </ChatContext.Provider>\n );\n};\n\nexport const ChatProvider = ({\n children,\n defaultOpen = false,\n}: {\n children: React.ReactNode;\n defaultOpen?: boolean;\n}) => {\n return (\n <BaseChatProvider defaultOpen={defaultOpen}>\n <SchemaChatProvider>\n <UploadProjectToChatProvider>\n <UploadFigmaToChatProvider>\n <FeedbackProvider>{children}</FeedbackProvider>\n </UploadFigmaToChatProvider>\n </UploadProjectToChatProvider>\n </SchemaChatProvider>\n </BaseChatProvider>\n );\n};\n\nexport function useStrapiChat() {\n const context = useContext(ChatContext);\n\n if (process.env.NODE_ENV === 'development') {\n // In development, provide a fallback to prevent crashes during hot reloading\n // This allows the app to continue working during HMR updates\n if (context === undefined) {\n console.warn(\n 'useStrapiChat was called outside of ChatProvider. This is only allowed in development mode.'\n );\n return {} as ChatContextType;\n }\n } else if (context === undefined) {\n throw new Error('useStrapiChat must be used within a ChatProvider');\n }\n return context;\n}\n"],"names":["ChatContext","createContext","undefined","generateRandomId","Math","random","toString","substring","BaseChatProvider","children","defaultOpen","chatId","setChatId","useState","isChatOpen","setIsChatOpen","openCount","setOpenCount","input","setInput","attachments","setAttachments","trackUsage","useCTBTracking","components","contentTypes","useDataManager","lastSeenSchemas","useLastSeenSchemas","schemas","useMemo","Object","values","filter","schema","status","uid","visible","map","transformCTBToChat","id","messages","sendMessage","_sendMessage","stop","chat","useAIChat","experimental_throttle","message","options","body","metadata","handleSubmit","e","preventDefault","readyAttachments","a","trim","length","files","attachment","type","filename","mediaType","url","text","title","generateTitle","resetTitle","useChatTitle","useEffect","successful","role","isChatAvailable","useAIAvailability","_jsx","Provider","value","isChatEnabled","handleInputChange","target","reset","openChat","prev","closeChat","ChatProvider","SchemaChatProvider","UploadProjectToChatProvider","UploadFigmaToChatProvider","FeedbackProvider","useStrapiChat","context","useContext","process","env","NODE_ENV","console","warn","Error"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaProvider.js","sources":["../../../../../admin/src/components/AIChat/providers/SchemaProvider.tsx"],"sourcesContent":["import { createContext, useContext, ReactNode, useEffect, useState } from 'react';\n\nimport { GUIDED_TOUR_REQUIRED_ACTIONS, useGuidedTour } from '@strapi/admin/strapi-admin';\n\nimport { useDataManager } from '../../DataManager/useDataManager';\nimport { transformChatToCTB } from '../lib/transforms/schemas/toCTB';\nimport { SchemaChange } from '../lib/types/annotations';\nimport { AIMessage } from '../lib/types/messages';\n\nimport { useStrapiChat } from './ChatProvider';\n\ninterface SchemaContextType {\n lastRevisedId: string | null;\n setLastRevisedId: (id: string | null) => void;\n}\n\nconst SchemaContext = createContext<SchemaContextType | undefined>(undefined);\n\nconst TYPE_TO_ACTION: Record<string, 'add' | 'update' | 'delete'> = {\n create: 'add',\n update: 'update',\n remove: 'delete',\n};\n\nfunction extractSchemaChangesFromMessage(message: AIMessage): SchemaChange[] {\n if (message.role !== 'assistant') return [];\n\n const changes: SchemaChange[] = [];\n\n message.parts?.forEach((part, partIndex) => {\n // We only care about the schema generation tool\n if (part && typeof part === 'object' && part.type === 'tool-schemaGenerationTool') {\n // Prefer validated schemas from output; ignore if there's an error or no output yet\n const output = part.output as { schemas?: any[]; error?: unknown } | undefined;\n if (!output || output.error || !Array.isArray(output.schemas)) return;\n\n const baseId = part.toolCallId ?? `${message.id}-${partIndex}`;\n\n output.schemas.forEach((schema, schemaIndex) => {\n const revisionId = `${baseId}-${schema.uid ?? schema.name ?? schemaIndex}`;\n const type = (schema.action as SchemaChange['type']) || 'update';\n changes.push({ type, schema, revisionId });\n });\n }\n });\n\n return changes;\n}\n\nexport const SchemaChatProvider = ({ children }: { children: ReactNode }) => {\n const [lastRevisedId, setLastRevisedId] = useState<string | null>(null);\n const { messages, status } = useStrapiChat();\n const { contentTypes, components, applyChange } = useDataManager();\n const dispatch = useGuidedTour('SchemaChatProvider', (s) => s.dispatch);\n const state = useGuidedTour('SchemaChatProvider', (s) => s.state);\n\n useEffect(() => {\n const latestMessage = messages[messages.length - 1];\n if (!latestMessage) return;\n if (latestMessage.role !== 'assistant') return;\n // Wait until message streaming has finished\n if (status !== 'ready') return;\n\n // const schemaChanges = latestMessage.schemaChanges;\n const schemaChanges = extractSchemaChangesFromMessage(latestMessage);\n\n // Check if addField action is already completed\n const isAddFieldCompleted = state.completedActions.includes(\n GUIDED_TOUR_REQUIRED_ACTIONS.contentTypeBuilder.addField\n );\n\n schemaChanges.forEach((change: SchemaChange) => {\n const oldSchema =\n contentTypes[change.schema.uid as any] || components[change.schema.uid as any];\n const newSchema = transformChatToCTB(change.schema, oldSchema);\n\n // Check if any attributes/fields are being added to any schema (existing or new)\n if (!isAddFieldCompleted && change.schema.attributes) {\n // If a field is being added or updated, dispatch guided tour action to show Save tooltip\n if (change.type !== 'remove' && Object.keys(change.schema.attributes).length > 0) {\n dispatch({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.contentTypeBuilder.addField],\n });\n }\n }\n\n applyChange({\n action: TYPE_TO_ACTION[change.type]!,\n schema: newSchema,\n });\n });\n setLastRevisedId(latestMessage.id);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [messages]);\n\n return (\n <SchemaContext.Provider value={{ lastRevisedId, setLastRevisedId }}>\n {children}\n </SchemaContext.Provider>\n );\n};\n\nexport const useChatSchema = () => {\n const context = useContext(SchemaContext);\n if (context === undefined) {\n throw new Error('useSchema must be used within a SchemaProvider');\n }\n return context;\n};\n"],"names":["SchemaContext","createContext","undefined","TYPE_TO_ACTION","create","update","remove","extractSchemaChangesFromMessage","message","role","changes","parts","forEach","part","partIndex","type","output","error","Array","isArray","schemas","baseId","toolCallId","id","schema","schemaIndex","revisionId","uid","name","action","push","SchemaChatProvider","children","lastRevisedId","setLastRevisedId","useState","messages","status","useStrapiChat","contentTypes","components","applyChange","useDataManager","dispatch","useGuidedTour","s","state","useEffect","latestMessage","length","schemaChanges","isAddFieldCompleted","completedActions","includes","GUIDED_TOUR_REQUIRED_ACTIONS","contentTypeBuilder","addField","change","oldSchema","newSchema","transformChatToCTB","attributes","Object","keys","payload","_jsx","Provider","value"],"mappings":";;;;;;;;;AAgBA,MAAMA,8BAAgBC,
|
|
1
|
+
{"version":3,"file":"SchemaProvider.js","sources":["../../../../../admin/src/components/AIChat/providers/SchemaProvider.tsx"],"sourcesContent":["import { createContext, useContext, ReactNode, useEffect, useState } from 'react';\n\nimport { GUIDED_TOUR_REQUIRED_ACTIONS, useGuidedTour } from '@strapi/admin/strapi-admin';\n\nimport { useDataManager } from '../../DataManager/useDataManager';\nimport { transformChatToCTB } from '../lib/transforms/schemas/toCTB';\nimport { SchemaChange } from '../lib/types/annotations';\nimport { AIMessage } from '../lib/types/messages';\n\nimport { useStrapiChat } from './ChatProvider';\n\ninterface SchemaContextType {\n lastRevisedId: string | null;\n setLastRevisedId: (id: string | null) => void;\n}\n\nconst SchemaContext = createContext<SchemaContextType | undefined>(undefined);\n\nconst TYPE_TO_ACTION: Record<string, 'add' | 'update' | 'delete'> = {\n create: 'add',\n update: 'update',\n remove: 'delete',\n};\n\nfunction extractSchemaChangesFromMessage(message: AIMessage): SchemaChange[] {\n if (message.role !== 'assistant') return [];\n\n const changes: SchemaChange[] = [];\n\n message.parts?.forEach((part, partIndex) => {\n // We only care about the schema generation tool\n if (part && typeof part === 'object' && part.type === 'tool-schemaGenerationTool') {\n // Prefer validated schemas from output; ignore if there's an error or no output yet\n const output = part.output as { schemas?: any[]; error?: unknown } | undefined;\n if (!output || output.error || !Array.isArray(output.schemas)) return;\n\n const baseId = part.toolCallId ?? `${message.id}-${partIndex}`;\n\n output.schemas.forEach((schema, schemaIndex) => {\n const revisionId = `${baseId}-${schema.uid ?? schema.name ?? schemaIndex}`;\n const type = (schema.action as SchemaChange['type']) || 'update';\n changes.push({ type, schema, revisionId });\n });\n }\n });\n\n return changes;\n}\n\nexport const SchemaChatProvider = ({ children }: { children: ReactNode }) => {\n const [lastRevisedId, setLastRevisedId] = useState<string | null>(null);\n const { messages, status } = useStrapiChat();\n const { contentTypes, components, applyChange } = useDataManager();\n const dispatch = useGuidedTour('SchemaChatProvider', (s) => s.dispatch);\n const state = useGuidedTour('SchemaChatProvider', (s) => s.state);\n\n useEffect(() => {\n const latestMessage = messages[messages.length - 1];\n if (!latestMessage) return;\n if (latestMessage.role !== 'assistant') return;\n // Wait until message streaming has finished\n if (status !== 'ready') return;\n\n // const schemaChanges = latestMessage.schemaChanges;\n const schemaChanges = extractSchemaChangesFromMessage(latestMessage);\n\n // Check if addField action is already completed\n const isAddFieldCompleted = state.completedActions.includes(\n GUIDED_TOUR_REQUIRED_ACTIONS.contentTypeBuilder.addField\n );\n\n schemaChanges.forEach((change: SchemaChange) => {\n const oldSchema =\n contentTypes[change.schema.uid as any] || components[change.schema.uid as any];\n const newSchema = transformChatToCTB(change.schema, oldSchema);\n\n // Check if any attributes/fields are being added to any schema (existing or new)\n if (!isAddFieldCompleted && change.schema.attributes) {\n // If a field is being added or updated, dispatch guided tour action to show Save tooltip\n if (change.type !== 'remove' && Object.keys(change.schema.attributes).length > 0) {\n dispatch({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.contentTypeBuilder.addField],\n });\n }\n }\n\n applyChange({\n action: TYPE_TO_ACTION[change.type]!,\n schema: newSchema,\n });\n });\n setLastRevisedId(latestMessage.id);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [messages]);\n\n return (\n <SchemaContext.Provider value={{ lastRevisedId, setLastRevisedId }}>\n {children}\n </SchemaContext.Provider>\n );\n};\n\nexport const useChatSchema = () => {\n const context = useContext(SchemaContext);\n if (context === undefined) {\n throw new Error('useSchema must be used within a SchemaProvider');\n }\n return context;\n};\n"],"names":["SchemaContext","createContext","undefined","TYPE_TO_ACTION","create","update","remove","extractSchemaChangesFromMessage","message","role","changes","parts","forEach","part","partIndex","type","output","error","Array","isArray","schemas","baseId","toolCallId","id","schema","schemaIndex","revisionId","uid","name","action","push","SchemaChatProvider","children","lastRevisedId","setLastRevisedId","useState","messages","status","useStrapiChat","contentTypes","components","applyChange","useDataManager","dispatch","useGuidedTour","s","state","useEffect","latestMessage","length","schemaChanges","isAddFieldCompleted","completedActions","includes","GUIDED_TOUR_REQUIRED_ACTIONS","contentTypeBuilder","addField","change","oldSchema","newSchema","transformChatToCTB","attributes","Object","keys","payload","_jsx","Provider","value"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaProvider.mjs","sources":["../../../../../admin/src/components/AIChat/providers/SchemaProvider.tsx"],"sourcesContent":["import { createContext, useContext, ReactNode, useEffect, useState } from 'react';\n\nimport { GUIDED_TOUR_REQUIRED_ACTIONS, useGuidedTour } from '@strapi/admin/strapi-admin';\n\nimport { useDataManager } from '../../DataManager/useDataManager';\nimport { transformChatToCTB } from '../lib/transforms/schemas/toCTB';\nimport { SchemaChange } from '../lib/types/annotations';\nimport { AIMessage } from '../lib/types/messages';\n\nimport { useStrapiChat } from './ChatProvider';\n\ninterface SchemaContextType {\n lastRevisedId: string | null;\n setLastRevisedId: (id: string | null) => void;\n}\n\nconst SchemaContext = createContext<SchemaContextType | undefined>(undefined);\n\nconst TYPE_TO_ACTION: Record<string, 'add' | 'update' | 'delete'> = {\n create: 'add',\n update: 'update',\n remove: 'delete',\n};\n\nfunction extractSchemaChangesFromMessage(message: AIMessage): SchemaChange[] {\n if (message.role !== 'assistant') return [];\n\n const changes: SchemaChange[] = [];\n\n message.parts?.forEach((part, partIndex) => {\n // We only care about the schema generation tool\n if (part && typeof part === 'object' && part.type === 'tool-schemaGenerationTool') {\n // Prefer validated schemas from output; ignore if there's an error or no output yet\n const output = part.output as { schemas?: any[]; error?: unknown } | undefined;\n if (!output || output.error || !Array.isArray(output.schemas)) return;\n\n const baseId = part.toolCallId ?? `${message.id}-${partIndex}`;\n\n output.schemas.forEach((schema, schemaIndex) => {\n const revisionId = `${baseId}-${schema.uid ?? schema.name ?? schemaIndex}`;\n const type = (schema.action as SchemaChange['type']) || 'update';\n changes.push({ type, schema, revisionId });\n });\n }\n });\n\n return changes;\n}\n\nexport const SchemaChatProvider = ({ children }: { children: ReactNode }) => {\n const [lastRevisedId, setLastRevisedId] = useState<string | null>(null);\n const { messages, status } = useStrapiChat();\n const { contentTypes, components, applyChange } = useDataManager();\n const dispatch = useGuidedTour('SchemaChatProvider', (s) => s.dispatch);\n const state = useGuidedTour('SchemaChatProvider', (s) => s.state);\n\n useEffect(() => {\n const latestMessage = messages[messages.length - 1];\n if (!latestMessage) return;\n if (latestMessage.role !== 'assistant') return;\n // Wait until message streaming has finished\n if (status !== 'ready') return;\n\n // const schemaChanges = latestMessage.schemaChanges;\n const schemaChanges = extractSchemaChangesFromMessage(latestMessage);\n\n // Check if addField action is already completed\n const isAddFieldCompleted = state.completedActions.includes(\n GUIDED_TOUR_REQUIRED_ACTIONS.contentTypeBuilder.addField\n );\n\n schemaChanges.forEach((change: SchemaChange) => {\n const oldSchema =\n contentTypes[change.schema.uid as any] || components[change.schema.uid as any];\n const newSchema = transformChatToCTB(change.schema, oldSchema);\n\n // Check if any attributes/fields are being added to any schema (existing or new)\n if (!isAddFieldCompleted && change.schema.attributes) {\n // If a field is being added or updated, dispatch guided tour action to show Save tooltip\n if (change.type !== 'remove' && Object.keys(change.schema.attributes).length > 0) {\n dispatch({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.contentTypeBuilder.addField],\n });\n }\n }\n\n applyChange({\n action: TYPE_TO_ACTION[change.type]!,\n schema: newSchema,\n });\n });\n setLastRevisedId(latestMessage.id);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [messages]);\n\n return (\n <SchemaContext.Provider value={{ lastRevisedId, setLastRevisedId }}>\n {children}\n </SchemaContext.Provider>\n );\n};\n\nexport const useChatSchema = () => {\n const context = useContext(SchemaContext);\n if (context === undefined) {\n throw new Error('useSchema must be used within a SchemaProvider');\n }\n return context;\n};\n"],"names":["SchemaContext","createContext","undefined","TYPE_TO_ACTION","create","update","remove","extractSchemaChangesFromMessage","message","role","changes","parts","forEach","part","partIndex","type","output","error","Array","isArray","schemas","baseId","toolCallId","id","schema","schemaIndex","revisionId","uid","name","action","push","SchemaChatProvider","children","lastRevisedId","setLastRevisedId","useState","messages","status","useStrapiChat","contentTypes","components","applyChange","useDataManager","dispatch","useGuidedTour","s","state","useEffect","latestMessage","length","schemaChanges","isAddFieldCompleted","completedActions","includes","GUIDED_TOUR_REQUIRED_ACTIONS","contentTypeBuilder","addField","change","oldSchema","newSchema","transformChatToCTB","attributes","Object","keys","payload","_jsx","Provider","value"],"mappings":";;;;;;;AAgBA,MAAMA,8BAAgBC,
|
|
1
|
+
{"version":3,"file":"SchemaProvider.mjs","sources":["../../../../../admin/src/components/AIChat/providers/SchemaProvider.tsx"],"sourcesContent":["import { createContext, useContext, ReactNode, useEffect, useState } from 'react';\n\nimport { GUIDED_TOUR_REQUIRED_ACTIONS, useGuidedTour } from '@strapi/admin/strapi-admin';\n\nimport { useDataManager } from '../../DataManager/useDataManager';\nimport { transformChatToCTB } from '../lib/transforms/schemas/toCTB';\nimport { SchemaChange } from '../lib/types/annotations';\nimport { AIMessage } from '../lib/types/messages';\n\nimport { useStrapiChat } from './ChatProvider';\n\ninterface SchemaContextType {\n lastRevisedId: string | null;\n setLastRevisedId: (id: string | null) => void;\n}\n\nconst SchemaContext = createContext<SchemaContextType | undefined>(undefined);\n\nconst TYPE_TO_ACTION: Record<string, 'add' | 'update' | 'delete'> = {\n create: 'add',\n update: 'update',\n remove: 'delete',\n};\n\nfunction extractSchemaChangesFromMessage(message: AIMessage): SchemaChange[] {\n if (message.role !== 'assistant') return [];\n\n const changes: SchemaChange[] = [];\n\n message.parts?.forEach((part, partIndex) => {\n // We only care about the schema generation tool\n if (part && typeof part === 'object' && part.type === 'tool-schemaGenerationTool') {\n // Prefer validated schemas from output; ignore if there's an error or no output yet\n const output = part.output as { schemas?: any[]; error?: unknown } | undefined;\n if (!output || output.error || !Array.isArray(output.schemas)) return;\n\n const baseId = part.toolCallId ?? `${message.id}-${partIndex}`;\n\n output.schemas.forEach((schema, schemaIndex) => {\n const revisionId = `${baseId}-${schema.uid ?? schema.name ?? schemaIndex}`;\n const type = (schema.action as SchemaChange['type']) || 'update';\n changes.push({ type, schema, revisionId });\n });\n }\n });\n\n return changes;\n}\n\nexport const SchemaChatProvider = ({ children }: { children: ReactNode }) => {\n const [lastRevisedId, setLastRevisedId] = useState<string | null>(null);\n const { messages, status } = useStrapiChat();\n const { contentTypes, components, applyChange } = useDataManager();\n const dispatch = useGuidedTour('SchemaChatProvider', (s) => s.dispatch);\n const state = useGuidedTour('SchemaChatProvider', (s) => s.state);\n\n useEffect(() => {\n const latestMessage = messages[messages.length - 1];\n if (!latestMessage) return;\n if (latestMessage.role !== 'assistant') return;\n // Wait until message streaming has finished\n if (status !== 'ready') return;\n\n // const schemaChanges = latestMessage.schemaChanges;\n const schemaChanges = extractSchemaChangesFromMessage(latestMessage);\n\n // Check if addField action is already completed\n const isAddFieldCompleted = state.completedActions.includes(\n GUIDED_TOUR_REQUIRED_ACTIONS.contentTypeBuilder.addField\n );\n\n schemaChanges.forEach((change: SchemaChange) => {\n const oldSchema =\n contentTypes[change.schema.uid as any] || components[change.schema.uid as any];\n const newSchema = transformChatToCTB(change.schema, oldSchema);\n\n // Check if any attributes/fields are being added to any schema (existing or new)\n if (!isAddFieldCompleted && change.schema.attributes) {\n // If a field is being added or updated, dispatch guided tour action to show Save tooltip\n if (change.type !== 'remove' && Object.keys(change.schema.attributes).length > 0) {\n dispatch({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.contentTypeBuilder.addField],\n });\n }\n }\n\n applyChange({\n action: TYPE_TO_ACTION[change.type]!,\n schema: newSchema,\n });\n });\n setLastRevisedId(latestMessage.id);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [messages]);\n\n return (\n <SchemaContext.Provider value={{ lastRevisedId, setLastRevisedId }}>\n {children}\n </SchemaContext.Provider>\n );\n};\n\nexport const useChatSchema = () => {\n const context = useContext(SchemaContext);\n if (context === undefined) {\n throw new Error('useSchema must be used within a SchemaProvider');\n }\n return context;\n};\n"],"names":["SchemaContext","createContext","undefined","TYPE_TO_ACTION","create","update","remove","extractSchemaChangesFromMessage","message","role","changes","parts","forEach","part","partIndex","type","output","error","Array","isArray","schemas","baseId","toolCallId","id","schema","schemaIndex","revisionId","uid","name","action","push","SchemaChatProvider","children","lastRevisedId","setLastRevisedId","useState","messages","status","useStrapiChat","contentTypes","components","applyChange","useDataManager","dispatch","useGuidedTour","s","state","useEffect","latestMessage","length","schemaChanges","isAddFieldCompleted","completedActions","includes","GUIDED_TOUR_REQUIRED_ACTIONS","contentTypeBuilder","addField","change","oldSchema","newSchema","transformChatToCTB","attributes","Object","keys","payload","_jsx","Provider","value"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AllowedTypesSelect.js","sources":["../../../admin/src/components/AllowedTypesSelect.tsx"],"sourcesContent":["import { Field, MultiSelectNested } from '@strapi/design-system';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\n\nimport { IntlLabel } from '../types';\n\ninterface AllowedTypesSelectProps {\n intlLabel: IntlLabel;\n name: string;\n onChange: (value: any) => void;\n value?: any;\n}\n\nconst options = [\n {\n label: 'All',\n children: [\n { label: 'images (JPEG, PNG, GIF, SVG, TIFF, ICO, DVU)', value: 'images' },\n { label: 'videos (MPEG, MP4, Quicktime, WMV, AVI, FLV)', value: 'videos' },\n { label: 'audios (MP3, WAV, OGG)', value: 'audios' },\n { label: 'files (CSV, ZIP, PDF, Excel, JSON, ...)', value: 'files' },\n ],\n },\n];\n\nexport const AllowedTypesSelect = ({\n intlLabel,\n name,\n onChange,\n value = null,\n}: AllowedTypesSelectProps) => {\n const { formatMessage } = useIntl();\n\n /* eslint-disable indent */\n const displayedValue =\n value === null || value?.length === 0\n ? formatMessage({ id: 'global.none', defaultMessage: 'None' })\n : [...value]\n .sort()\n .map((v) => upperFirst(v))\n .join(', ');\n\n /* eslint-enable indent */\n\n const label = intlLabel.id\n ? formatMessage({ id: intlLabel.id, defaultMessage: intlLabel.defaultMessage })\n : name;\n\n return (\n <Field.Root name={name}>\n <Field.Label>{label}</Field.Label>\n <MultiSelectNested\n customizeContent={() => displayedValue}\n onChange={(values: any[]) => {\n if (values.length > 0) {\n onChange({ target: { name, value: values, type: 'allowed-types-select' } });\n } else {\n onChange({ target: { name, value: null, type: 'allowed-types-select' } });\n }\n }}\n options={options}\n value={value || []}\n />\n </Field.Root>\n );\n};\n"],"names":["options","label","children","value","AllowedTypesSelect","intlLabel","name","onChange","formatMessage","useIntl","displayedValue","length","id","defaultMessage","sort","map","v","upperFirst","join","_jsxs","Field","Root","_jsx","Label","MultiSelectNested","customizeContent","values","target","type"],"mappings":";;;;;;;AAaA,MAAMA,
|
|
1
|
+
{"version":3,"file":"AllowedTypesSelect.js","sources":["../../../admin/src/components/AllowedTypesSelect.tsx"],"sourcesContent":["import { Field, MultiSelectNested } from '@strapi/design-system';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\n\nimport { IntlLabel } from '../types';\n\ninterface AllowedTypesSelectProps {\n intlLabel: IntlLabel;\n name: string;\n onChange: (value: any) => void;\n value?: any;\n}\n\nconst options = [\n {\n label: 'All',\n children: [\n { label: 'images (JPEG, PNG, GIF, SVG, TIFF, ICO, DVU)', value: 'images' },\n { label: 'videos (MPEG, MP4, Quicktime, WMV, AVI, FLV)', value: 'videos' },\n { label: 'audios (MP3, WAV, OGG)', value: 'audios' },\n { label: 'files (CSV, ZIP, PDF, Excel, JSON, ...)', value: 'files' },\n ],\n },\n];\n\nexport const AllowedTypesSelect = ({\n intlLabel,\n name,\n onChange,\n value = null,\n}: AllowedTypesSelectProps) => {\n const { formatMessage } = useIntl();\n\n /* eslint-disable indent */\n const displayedValue =\n value === null || value?.length === 0\n ? formatMessage({ id: 'global.none', defaultMessage: 'None' })\n : [...value]\n .sort()\n .map((v) => upperFirst(v))\n .join(', ');\n\n /* eslint-enable indent */\n\n const label = intlLabel.id\n ? formatMessage({ id: intlLabel.id, defaultMessage: intlLabel.defaultMessage })\n : name;\n\n return (\n <Field.Root name={name}>\n <Field.Label>{label}</Field.Label>\n <MultiSelectNested\n customizeContent={() => displayedValue}\n onChange={(values: any[]) => {\n if (values.length > 0) {\n onChange({ target: { name, value: values, type: 'allowed-types-select' } });\n } else {\n onChange({ target: { name, value: null, type: 'allowed-types-select' } });\n }\n }}\n options={options}\n value={value || []}\n />\n </Field.Root>\n );\n};\n"],"names":["options","label","children","value","AllowedTypesSelect","intlLabel","name","onChange","formatMessage","useIntl","displayedValue","length","id","defaultMessage","sort","map","v","upperFirst","join","_jsxs","Field","Root","_jsx","Label","MultiSelectNested","customizeContent","values","target","type"],"mappings":";;;;;;;AAaA,MAAMA,OAAAA,GAAU;AACd,IAAA;QACEC,KAAAA,EAAO,KAAA;QACPC,QAAAA,EAAU;AACR,YAAA;gBAAED,KAAAA,EAAO,8CAAA;gBAAgDE,KAAAA,EAAO;AAAS,aAAA;AACzE,YAAA;gBAAEF,KAAAA,EAAO,8CAAA;gBAAgDE,KAAAA,EAAO;AAAS,aAAA;AACzE,YAAA;gBAAEF,KAAAA,EAAO,wBAAA;gBAA0BE,KAAAA,EAAO;AAAS,aAAA;AACnD,YAAA;gBAAEF,KAAAA,EAAO,yCAAA;gBAA2CE,KAAAA,EAAO;AAAQ;AACpE;AACH;AACD,CAAA;AAEM,MAAMC,kBAAAA,GAAqB,CAAC,EACjCC,SAAS,EACTC,IAAI,EACJC,QAAQ,EACRJ,KAAAA,GAAQ,IAAI,EACY,GAAA;IACxB,MAAM,EAAEK,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;gCAG1B,MAAMC,cAAAA,GACJP,KAAAA,KAAU,QAAQA,KAAAA,EAAOQ,MAAAA,KAAW,IAChCH,aAAAA,CAAc;QAAEI,EAAAA,EAAI,aAAA;QAAeC,cAAAA,EAAgB;KAAO,CAAA,GAC1D;AAAIV,QAAAA,GAAAA;KAAM,CACPW,IAAI,GACJC,GAAG,CAAC,CAACC,CAAAA,GAAMC,UAAAA,CAAWD,CAAAA,CAAAA,CAAAA,CACtBE,IAAI,CAAC,IAAA,CAAA;AAEd,+BAEA,MAAMjB,KAAAA,GAAQI,SAAAA,CAAUO,EAAE,GACtBJ,aAAAA,CAAc;AAAEI,QAAAA,EAAAA,EAAIP,UAAUO,EAAE;AAAEC,QAAAA,cAAAA,EAAgBR,UAAUQ;KAAe,CAAA,GAC3EP,IAAAA;IAEJ,qBACEa,eAAA,CAACC,mBAAMC,IAAI,EAAA;QAACf,IAAAA,EAAMA,IAAAA;;AAChB,0BAAAgB,cAAA,CAACF,mBAAMG,KAAK,EAAA;AAAEtB,gBAAAA,QAAAA,EAAAA;;0BACdqB,cAAA,CAACE,8BAAAA,EAAAA;AACCC,gBAAAA,gBAAAA,EAAkB,IAAMf,cAAAA;AACxBH,gBAAAA,QAAAA,EAAU,CAACmB,MAAAA,GAAAA;oBACT,IAAIA,MAAAA,CAAOf,MAAM,GAAG,CAAA,EAAG;wBACrBJ,QAAAA,CAAS;4BAAEoB,MAAAA,EAAQ;AAAErB,gCAAAA,IAAAA;gCAAMH,KAAAA,EAAOuB,MAAAA;gCAAQE,IAAAA,EAAM;AAAuB;AAAE,yBAAA,CAAA;oBAC3E,CAAA,MAAO;wBACLrB,QAAAA,CAAS;4BAAEoB,MAAAA,EAAQ;AAAErB,gCAAAA,IAAAA;gCAAMH,KAAAA,EAAO,IAAA;gCAAMyB,IAAAA,EAAM;AAAuB;AAAE,yBAAA,CAAA;AACzE,oBAAA;AACF,gBAAA,CAAA;gBACA5B,OAAAA,EAASA,OAAAA;AACTG,gBAAAA,KAAAA,EAAOA,SAAS;;;;AAIxB;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AllowedTypesSelect.mjs","sources":["../../../admin/src/components/AllowedTypesSelect.tsx"],"sourcesContent":["import { Field, MultiSelectNested } from '@strapi/design-system';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\n\nimport { IntlLabel } from '../types';\n\ninterface AllowedTypesSelectProps {\n intlLabel: IntlLabel;\n name: string;\n onChange: (value: any) => void;\n value?: any;\n}\n\nconst options = [\n {\n label: 'All',\n children: [\n { label: 'images (JPEG, PNG, GIF, SVG, TIFF, ICO, DVU)', value: 'images' },\n { label: 'videos (MPEG, MP4, Quicktime, WMV, AVI, FLV)', value: 'videos' },\n { label: 'audios (MP3, WAV, OGG)', value: 'audios' },\n { label: 'files (CSV, ZIP, PDF, Excel, JSON, ...)', value: 'files' },\n ],\n },\n];\n\nexport const AllowedTypesSelect = ({\n intlLabel,\n name,\n onChange,\n value = null,\n}: AllowedTypesSelectProps) => {\n const { formatMessage } = useIntl();\n\n /* eslint-disable indent */\n const displayedValue =\n value === null || value?.length === 0\n ? formatMessage({ id: 'global.none', defaultMessage: 'None' })\n : [...value]\n .sort()\n .map((v) => upperFirst(v))\n .join(', ');\n\n /* eslint-enable indent */\n\n const label = intlLabel.id\n ? formatMessage({ id: intlLabel.id, defaultMessage: intlLabel.defaultMessage })\n : name;\n\n return (\n <Field.Root name={name}>\n <Field.Label>{label}</Field.Label>\n <MultiSelectNested\n customizeContent={() => displayedValue}\n onChange={(values: any[]) => {\n if (values.length > 0) {\n onChange({ target: { name, value: values, type: 'allowed-types-select' } });\n } else {\n onChange({ target: { name, value: null, type: 'allowed-types-select' } });\n }\n }}\n options={options}\n value={value || []}\n />\n </Field.Root>\n );\n};\n"],"names":["options","label","children","value","AllowedTypesSelect","intlLabel","name","onChange","formatMessage","useIntl","displayedValue","length","id","defaultMessage","sort","map","v","upperFirst","join","_jsxs","Field","Root","_jsx","Label","MultiSelectNested","customizeContent","values","target","type"],"mappings":";;;;;AAaA,MAAMA,
|
|
1
|
+
{"version":3,"file":"AllowedTypesSelect.mjs","sources":["../../../admin/src/components/AllowedTypesSelect.tsx"],"sourcesContent":["import { Field, MultiSelectNested } from '@strapi/design-system';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\n\nimport { IntlLabel } from '../types';\n\ninterface AllowedTypesSelectProps {\n intlLabel: IntlLabel;\n name: string;\n onChange: (value: any) => void;\n value?: any;\n}\n\nconst options = [\n {\n label: 'All',\n children: [\n { label: 'images (JPEG, PNG, GIF, SVG, TIFF, ICO, DVU)', value: 'images' },\n { label: 'videos (MPEG, MP4, Quicktime, WMV, AVI, FLV)', value: 'videos' },\n { label: 'audios (MP3, WAV, OGG)', value: 'audios' },\n { label: 'files (CSV, ZIP, PDF, Excel, JSON, ...)', value: 'files' },\n ],\n },\n];\n\nexport const AllowedTypesSelect = ({\n intlLabel,\n name,\n onChange,\n value = null,\n}: AllowedTypesSelectProps) => {\n const { formatMessage } = useIntl();\n\n /* eslint-disable indent */\n const displayedValue =\n value === null || value?.length === 0\n ? formatMessage({ id: 'global.none', defaultMessage: 'None' })\n : [...value]\n .sort()\n .map((v) => upperFirst(v))\n .join(', ');\n\n /* eslint-enable indent */\n\n const label = intlLabel.id\n ? formatMessage({ id: intlLabel.id, defaultMessage: intlLabel.defaultMessage })\n : name;\n\n return (\n <Field.Root name={name}>\n <Field.Label>{label}</Field.Label>\n <MultiSelectNested\n customizeContent={() => displayedValue}\n onChange={(values: any[]) => {\n if (values.length > 0) {\n onChange({ target: { name, value: values, type: 'allowed-types-select' } });\n } else {\n onChange({ target: { name, value: null, type: 'allowed-types-select' } });\n }\n }}\n options={options}\n value={value || []}\n />\n </Field.Root>\n );\n};\n"],"names":["options","label","children","value","AllowedTypesSelect","intlLabel","name","onChange","formatMessage","useIntl","displayedValue","length","id","defaultMessage","sort","map","v","upperFirst","join","_jsxs","Field","Root","_jsx","Label","MultiSelectNested","customizeContent","values","target","type"],"mappings":";;;;;AAaA,MAAMA,OAAAA,GAAU;AACd,IAAA;QACEC,KAAAA,EAAO,KAAA;QACPC,QAAAA,EAAU;AACR,YAAA;gBAAED,KAAAA,EAAO,8CAAA;gBAAgDE,KAAAA,EAAO;AAAS,aAAA;AACzE,YAAA;gBAAEF,KAAAA,EAAO,8CAAA;gBAAgDE,KAAAA,EAAO;AAAS,aAAA;AACzE,YAAA;gBAAEF,KAAAA,EAAO,wBAAA;gBAA0BE,KAAAA,EAAO;AAAS,aAAA;AACnD,YAAA;gBAAEF,KAAAA,EAAO,yCAAA;gBAA2CE,KAAAA,EAAO;AAAQ;AACpE;AACH;AACD,CAAA;AAEM,MAAMC,kBAAAA,GAAqB,CAAC,EACjCC,SAAS,EACTC,IAAI,EACJC,QAAQ,EACRJ,KAAAA,GAAQ,IAAI,EACY,GAAA;IACxB,MAAM,EAAEK,aAAa,EAAE,GAAGC,OAAAA,EAAAA;gCAG1B,MAAMC,cAAAA,GACJP,KAAAA,KAAU,QAAQA,KAAAA,EAAOQ,MAAAA,KAAW,IAChCH,aAAAA,CAAc;QAAEI,EAAAA,EAAI,aAAA;QAAeC,cAAAA,EAAgB;KAAO,CAAA,GAC1D;AAAIV,QAAAA,GAAAA;KAAM,CACPW,IAAI,GACJC,GAAG,CAAC,CAACC,CAAAA,GAAMC,UAAAA,CAAWD,CAAAA,CAAAA,CAAAA,CACtBE,IAAI,CAAC,IAAA,CAAA;AAEd,+BAEA,MAAMjB,KAAAA,GAAQI,SAAAA,CAAUO,EAAE,GACtBJ,aAAAA,CAAc;AAAEI,QAAAA,EAAAA,EAAIP,UAAUO,EAAE;AAAEC,QAAAA,cAAAA,EAAgBR,UAAUQ;KAAe,CAAA,GAC3EP,IAAAA;IAEJ,qBACEa,IAAA,CAACC,MAAMC,IAAI,EAAA;QAACf,IAAAA,EAAMA,IAAAA;;AAChB,0BAAAgB,GAAA,CAACF,MAAMG,KAAK,EAAA;AAAEtB,gBAAAA,QAAAA,EAAAA;;0BACdqB,GAAA,CAACE,iBAAAA,EAAAA;AACCC,gBAAAA,gBAAAA,EAAkB,IAAMf,cAAAA;AACxBH,gBAAAA,QAAAA,EAAU,CAACmB,MAAAA,GAAAA;oBACT,IAAIA,MAAAA,CAAOf,MAAM,GAAG,CAAA,EAAG;wBACrBJ,QAAAA,CAAS;4BAAEoB,MAAAA,EAAQ;AAAErB,gCAAAA,IAAAA;gCAAMH,KAAAA,EAAOuB,MAAAA;gCAAQE,IAAAA,EAAM;AAAuB;AAAE,yBAAA,CAAA;oBAC3E,CAAA,MAAO;wBACLrB,QAAAA,CAAS;4BAAEoB,MAAAA,EAAQ;AAAErB,gCAAAA,IAAAA;gCAAMH,KAAAA,EAAO,IAAA;gCAAMyB,IAAAA,EAAM;AAAuB;AAAE,yBAAA,CAAA;AACzE,oBAAA;AACF,gBAAA,CAAA;gBACA5B,OAAAA,EAASA,OAAAA;AACTG,gBAAAA,KAAAA,EAAOA,SAAS;;;;AAIxB;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApplyConditionButton.js","sources":["../../../admin/src/components/ApplyConditionButton.tsx"],"sourcesContent":["import { Button, Tooltip } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\ninterface ApplyConditionButtonProps {\n disabled?: boolean;\n tooltipMessage?: string;\n onClick?: () => void;\n marginTop?: number;\n}\n\nexport const ApplyConditionButton = ({\n disabled,\n tooltipMessage,\n onClick,\n marginTop = 4,\n}: ApplyConditionButtonProps) => {\n const { formatMessage } = useIntl();\n\n const button = (\n <Button\n marginTop={marginTop}\n fullWidth={true}\n variant=\"secondary\"\n disabled={disabled}\n onClick={onClick}\n startIcon={<span aria-hidden>+</span>}\n >\n {formatMessage({\n id: 'form.attribute.condition.apply',\n defaultMessage: 'Apply condition',\n })}\n </Button>\n );\n\n if (tooltipMessage) {\n return <Tooltip description={tooltipMessage}>{button}</Tooltip>;\n }\n\n return button;\n};\n"],"names":["ApplyConditionButton","disabled","tooltipMessage","onClick","marginTop","formatMessage","useIntl","button","_jsx","Button","fullWidth","variant","startIcon","span","aria-hidden","id","defaultMessage","Tooltip","description"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"ApplyConditionButton.js","sources":["../../../admin/src/components/ApplyConditionButton.tsx"],"sourcesContent":["import { Button, Tooltip } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\ninterface ApplyConditionButtonProps {\n disabled?: boolean;\n tooltipMessage?: string;\n onClick?: () => void;\n marginTop?: number;\n}\n\nexport const ApplyConditionButton = ({\n disabled,\n tooltipMessage,\n onClick,\n marginTop = 4,\n}: ApplyConditionButtonProps) => {\n const { formatMessage } = useIntl();\n\n const button = (\n <Button\n marginTop={marginTop}\n fullWidth={true}\n variant=\"secondary\"\n disabled={disabled}\n onClick={onClick}\n startIcon={<span aria-hidden>+</span>}\n >\n {formatMessage({\n id: 'form.attribute.condition.apply',\n defaultMessage: 'Apply condition',\n })}\n </Button>\n );\n\n if (tooltipMessage) {\n return <Tooltip description={tooltipMessage}>{button}</Tooltip>;\n }\n\n return button;\n};\n"],"names":["ApplyConditionButton","disabled","tooltipMessage","onClick","marginTop","formatMessage","useIntl","button","_jsx","Button","fullWidth","variant","startIcon","span","aria-hidden","id","defaultMessage","Tooltip","description"],"mappings":";;;;;;AAUO,MAAMA,oBAAAA,GAAuB,CAAC,EACnCC,QAAQ,EACRC,cAAc,EACdC,OAAO,EACPC,SAAAA,GAAY,CAAC,EACa,GAAA;IAC1B,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAE1B,IAAA,MAAMC,uBACJC,cAAA,CAACC,mBAAAA,EAAAA;QACCL,SAAAA,EAAWA,SAAAA;QACXM,SAAAA,EAAW,IAAA;QACXC,OAAAA,EAAQ,WAAA;QACRV,QAAAA,EAAUA,QAAAA;QACVE,OAAAA,EAASA,OAAAA;AACTS,QAAAA,SAAAA,gBAAWJ,cAAA,CAACK,MAAAA,EAAAA;YAAKC,aAAW,EAAA,IAAA;AAAC,YAAA,QAAA,EAAA;;kBAE5BT,aAAAA,CAAc;YACbU,EAAAA,EAAI,gCAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;;AAIJ,IAAA,IAAId,cAAAA,EAAgB;AAClB,QAAA,qBAAOM,cAAA,CAACS,oBAAAA,EAAAA;YAAQC,WAAAA,EAAahB,cAAAA;AAAiBK,YAAAA,QAAAA,EAAAA;;AAChD,IAAA;IAEA,OAAOA,MAAAA;AACT;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApplyConditionButton.mjs","sources":["../../../admin/src/components/ApplyConditionButton.tsx"],"sourcesContent":["import { Button, Tooltip } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\ninterface ApplyConditionButtonProps {\n disabled?: boolean;\n tooltipMessage?: string;\n onClick?: () => void;\n marginTop?: number;\n}\n\nexport const ApplyConditionButton = ({\n disabled,\n tooltipMessage,\n onClick,\n marginTop = 4,\n}: ApplyConditionButtonProps) => {\n const { formatMessage } = useIntl();\n\n const button = (\n <Button\n marginTop={marginTop}\n fullWidth={true}\n variant=\"secondary\"\n disabled={disabled}\n onClick={onClick}\n startIcon={<span aria-hidden>+</span>}\n >\n {formatMessage({\n id: 'form.attribute.condition.apply',\n defaultMessage: 'Apply condition',\n })}\n </Button>\n );\n\n if (tooltipMessage) {\n return <Tooltip description={tooltipMessage}>{button}</Tooltip>;\n }\n\n return button;\n};\n"],"names":["ApplyConditionButton","disabled","tooltipMessage","onClick","marginTop","formatMessage","useIntl","button","_jsx","Button","fullWidth","variant","startIcon","span","aria-hidden","id","defaultMessage","Tooltip","description"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"ApplyConditionButton.mjs","sources":["../../../admin/src/components/ApplyConditionButton.tsx"],"sourcesContent":["import { Button, Tooltip } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\ninterface ApplyConditionButtonProps {\n disabled?: boolean;\n tooltipMessage?: string;\n onClick?: () => void;\n marginTop?: number;\n}\n\nexport const ApplyConditionButton = ({\n disabled,\n tooltipMessage,\n onClick,\n marginTop = 4,\n}: ApplyConditionButtonProps) => {\n const { formatMessage } = useIntl();\n\n const button = (\n <Button\n marginTop={marginTop}\n fullWidth={true}\n variant=\"secondary\"\n disabled={disabled}\n onClick={onClick}\n startIcon={<span aria-hidden>+</span>}\n >\n {formatMessage({\n id: 'form.attribute.condition.apply',\n defaultMessage: 'Apply condition',\n })}\n </Button>\n );\n\n if (tooltipMessage) {\n return <Tooltip description={tooltipMessage}>{button}</Tooltip>;\n }\n\n return button;\n};\n"],"names":["ApplyConditionButton","disabled","tooltipMessage","onClick","marginTop","formatMessage","useIntl","button","_jsx","Button","fullWidth","variant","startIcon","span","aria-hidden","id","defaultMessage","Tooltip","description"],"mappings":";;;;AAUO,MAAMA,oBAAAA,GAAuB,CAAC,EACnCC,QAAQ,EACRC,cAAc,EACdC,OAAO,EACPC,SAAAA,GAAY,CAAC,EACa,GAAA;IAC1B,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAE1B,IAAA,MAAMC,uBACJC,GAAA,CAACC,MAAAA,EAAAA;QACCL,SAAAA,EAAWA,SAAAA;QACXM,SAAAA,EAAW,IAAA;QACXC,OAAAA,EAAQ,WAAA;QACRV,QAAAA,EAAUA,QAAAA;QACVE,OAAAA,EAASA,OAAAA;AACTS,QAAAA,SAAAA,gBAAWJ,GAAA,CAACK,MAAAA,EAAAA;YAAKC,aAAW,EAAA,IAAA;AAAC,YAAA,QAAA,EAAA;;kBAE5BT,aAAAA,CAAc;YACbU,EAAAA,EAAI,gCAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA;;AAIJ,IAAA,IAAId,cAAAA,EAAgB;AAClB,QAAA,qBAAOM,GAAA,CAACS,OAAAA,EAAAA;YAAQC,WAAAA,EAAahB,cAAAA;AAAiBK,YAAAA,QAAAA,EAAAA;;AAChD,IAAA;IAEA,OAAOA,MAAAA;AACT;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttributeIcon.js","sources":["../../../admin/src/components/AttributeIcon.tsx"],"sourcesContent":["import { ComponentType, SVGProps } from 'react';\n\nimport { useStrapiApp } from '@strapi/admin/strapi-admin';\nimport { Box } from '@strapi/design-system';\nimport {\n BooleanField,\n CollectionType,\n ComponentField,\n DateField,\n DynamicZoneField,\n EmailField,\n EnumerationField,\n JsonField,\n MediaField,\n NumberField,\n PasswordField,\n RelationField,\n MarkdownField,\n SingleType,\n TextField,\n UidField,\n BlocksField,\n} from '@strapi/icons/symbols';\nimport { styled } from 'styled-components';\n\nconst iconByTypes: Record<string, ComponentType<SVGProps<SVGSVGElement>>> = {\n biginteger: NumberField,\n blocks: BlocksField,\n boolean: BooleanField,\n collectionType: CollectionType,\n component: ComponentField,\n contentType: CollectionType,\n date: DateField,\n datetime: DateField,\n decimal: NumberField,\n dynamiczone: DynamicZoneField,\n email: EmailField,\n enum: EnumerationField,\n enumeration: EnumerationField,\n file: MediaField,\n files: MediaField,\n float: NumberField,\n integer: NumberField,\n json: JsonField,\n JSON: JsonField,\n media: MediaField,\n number: NumberField,\n password: PasswordField,\n relation: RelationField,\n richtext: MarkdownField,\n singleType: SingleType,\n string: TextField,\n text: TextField,\n time: DateField,\n timestamp: DateField,\n uid: UidField,\n};\n\nconst IconBox = styled(Box)`\n svg {\n height: 100%;\n width: 100%;\n }\n`;\n\nexport type IconByType = keyof typeof iconByTypes;\n\ntype AttributeIconProps = {\n type: IconByType;\n customField?: string | null;\n};\n\nexport const AttributeIcon = ({ type, customField = null, ...rest }: AttributeIconProps) => {\n const getCustomField = useStrapiApp('AttributeIcon', (state) => state.customFields.get);\n\n let Compo: any = iconByTypes[type];\n\n if (customField) {\n const customFieldObject = getCustomField(customField);\n const icon = customFieldObject?.icon;\n if (icon) {\n Compo = icon;\n }\n }\n\n if (!iconByTypes[type]) {\n return null;\n }\n\n return (\n <IconBox width=\"3.2rem\" height=\"3.2rem\" shrink={0} {...rest} aria-hidden>\n <Box tag={Compo} />\n </IconBox>\n );\n};\n"],"names":["iconByTypes","biginteger","NumberField","blocks","BlocksField","boolean","BooleanField","collectionType","CollectionType","component","ComponentField","contentType","date","DateField","datetime","decimal","dynamiczone","DynamicZoneField","email","EmailField","enum","EnumerationField","enumeration","file","MediaField","files","float","integer","json","JsonField","JSON","media","number","password","PasswordField","relation","RelationField","richtext","MarkdownField","singleType","SingleType","string","TextField","text","time","timestamp","uid","UidField","IconBox","styled","Box","AttributeIcon","type","customField","rest","getCustomField","useStrapiApp","state","customFields","get","Compo","customFieldObject","icon","_jsx","width","height","shrink","aria-hidden","tag"],"mappings":";;;;;;;;AAyBA,MAAMA,
|
|
1
|
+
{"version":3,"file":"AttributeIcon.js","sources":["../../../admin/src/components/AttributeIcon.tsx"],"sourcesContent":["import { ComponentType, SVGProps } from 'react';\n\nimport { useStrapiApp } from '@strapi/admin/strapi-admin';\nimport { Box } from '@strapi/design-system';\nimport {\n BooleanField,\n CollectionType,\n ComponentField,\n DateField,\n DynamicZoneField,\n EmailField,\n EnumerationField,\n JsonField,\n MediaField,\n NumberField,\n PasswordField,\n RelationField,\n MarkdownField,\n SingleType,\n TextField,\n UidField,\n BlocksField,\n} from '@strapi/icons/symbols';\nimport { styled } from 'styled-components';\n\nconst iconByTypes: Record<string, ComponentType<SVGProps<SVGSVGElement>>> = {\n biginteger: NumberField,\n blocks: BlocksField,\n boolean: BooleanField,\n collectionType: CollectionType,\n component: ComponentField,\n contentType: CollectionType,\n date: DateField,\n datetime: DateField,\n decimal: NumberField,\n dynamiczone: DynamicZoneField,\n email: EmailField,\n enum: EnumerationField,\n enumeration: EnumerationField,\n file: MediaField,\n files: MediaField,\n float: NumberField,\n integer: NumberField,\n json: JsonField,\n JSON: JsonField,\n media: MediaField,\n number: NumberField,\n password: PasswordField,\n relation: RelationField,\n richtext: MarkdownField,\n singleType: SingleType,\n string: TextField,\n text: TextField,\n time: DateField,\n timestamp: DateField,\n uid: UidField,\n};\n\nconst IconBox = styled(Box)`\n svg {\n height: 100%;\n width: 100%;\n }\n`;\n\nexport type IconByType = keyof typeof iconByTypes;\n\ntype AttributeIconProps = {\n type: IconByType;\n customField?: string | null;\n};\n\nexport const AttributeIcon = ({ type, customField = null, ...rest }: AttributeIconProps) => {\n const getCustomField = useStrapiApp('AttributeIcon', (state) => state.customFields.get);\n\n let Compo: any = iconByTypes[type];\n\n if (customField) {\n const customFieldObject = getCustomField(customField);\n const icon = customFieldObject?.icon;\n if (icon) {\n Compo = icon;\n }\n }\n\n if (!iconByTypes[type]) {\n return null;\n }\n\n return (\n <IconBox width=\"3.2rem\" height=\"3.2rem\" shrink={0} {...rest} aria-hidden>\n <Box tag={Compo} />\n </IconBox>\n );\n};\n"],"names":["iconByTypes","biginteger","NumberField","blocks","BlocksField","boolean","BooleanField","collectionType","CollectionType","component","ComponentField","contentType","date","DateField","datetime","decimal","dynamiczone","DynamicZoneField","email","EmailField","enum","EnumerationField","enumeration","file","MediaField","files","float","integer","json","JsonField","JSON","media","number","password","PasswordField","relation","RelationField","richtext","MarkdownField","singleType","SingleType","string","TextField","text","time","timestamp","uid","UidField","IconBox","styled","Box","AttributeIcon","type","customField","rest","getCustomField","useStrapiApp","state","customFields","get","Compo","customFieldObject","icon","_jsx","width","height","shrink","aria-hidden","tag"],"mappings":";;;;;;;;AAyBA,MAAMA,WAAAA,GAAsE;IAC1EC,UAAAA,EAAYC,mBAAAA;IACZC,MAAAA,EAAQC,mBAAAA;IACRC,OAAAA,EAASC,oBAAAA;IACTC,cAAAA,EAAgBC,sBAAAA;IAChBC,SAAAA,EAAWC,sBAAAA;IACXC,WAAAA,EAAaH,sBAAAA;IACbI,IAAAA,EAAMC,iBAAAA;IACNC,QAAAA,EAAUD,iBAAAA;IACVE,OAAAA,EAASb,mBAAAA;IACTc,WAAAA,EAAaC,wBAAAA;IACbC,KAAAA,EAAOC,kBAAAA;IACPC,IAAAA,EAAMC,wBAAAA;IACNC,WAAAA,EAAaD,wBAAAA;IACbE,IAAAA,EAAMC,kBAAAA;IACNC,KAAAA,EAAOD,kBAAAA;IACPE,KAAAA,EAAOxB,mBAAAA;IACPyB,OAAAA,EAASzB,mBAAAA;IACT0B,IAAAA,EAAMC,iBAAAA;IACNC,IAAAA,EAAMD,iBAAAA;IACNE,KAAAA,EAAOP,kBAAAA;IACPQ,MAAAA,EAAQ9B,mBAAAA;IACR+B,QAAAA,EAAUC,qBAAAA;IACVC,QAAAA,EAAUC,qBAAAA;IACVC,QAAAA,EAAUC,qBAAAA;IACVC,UAAAA,EAAYC,kBAAAA;IACZC,MAAAA,EAAQC,iBAAAA;IACRC,IAAAA,EAAMD,iBAAAA;IACNE,IAAAA,EAAM/B,iBAAAA;IACNgC,SAAAA,EAAWhC,iBAAAA;IACXiC,GAAAA,EAAKC;AACP,CAAA;AAEA,MAAMC,OAAAA,GAAUC,uBAAAA,CAAOC,gBAAAA,CAAI;;;;;AAK3B,CAAC;AASM,MAAMC,aAAAA,GAAgB,CAAC,EAAEC,IAAI,EAAEC,WAAAA,GAAc,IAAI,EAAE,GAAGC,IAAAA,EAA0B,GAAA;IACrF,MAAMC,cAAAA,GAAiBC,yBAAa,eAAA,EAAiB,CAACC,QAAUA,KAAAA,CAAMC,YAAY,CAACC,GAAG,CAAA;IAEtF,IAAIC,KAAAA,GAAa5D,WAAW,CAACoD,IAAAA,CAAK;AAElC,IAAA,IAAIC,WAAAA,EAAa;AACf,QAAA,MAAMQ,oBAAoBN,cAAAA,CAAeF,WAAAA,CAAAA;AACzC,QAAA,MAAMS,OAAOD,iBAAAA,EAAmBC,IAAAA;AAChC,QAAA,IAAIA,IAAAA,EAAM;YACRF,KAAAA,GAAQE,IAAAA;AACV,QAAA;AACF,IAAA;AAEA,IAAA,IAAI,CAAC9D,WAAW,CAACoD,IAAAA,CAAK,EAAE;QACtB,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,qBACEW,cAAA,CAACf,OAAAA,EAAAA;QAAQgB,KAAAA,EAAM,QAAA;QAASC,MAAAA,EAAO,QAAA;QAASC,MAAAA,EAAQ,CAAA;AAAI,QAAA,GAAGZ,IAAI;QAAEa,aAAW,EAAA,IAAA;AACtE,QAAA,QAAA,gBAAAJ,cAAA,CAACb,gBAAAA,EAAAA;YAAIkB,GAAAA,EAAKR;;;AAGhB;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useStrapiApp } from '@strapi/admin/strapi-admin';
|
|
3
3
|
import { Box } from '@strapi/design-system';
|
|
4
|
-
import {
|
|
4
|
+
import { UidField, DateField, TextField, SingleType, MarkdownField, RelationField, PasswordField, NumberField, MediaField, JsonField, EnumerationField, EmailField, DynamicZoneField, CollectionType, ComponentField, BooleanField, BlocksField } from '@strapi/icons/symbols';
|
|
5
5
|
import { styled } from 'styled-components';
|
|
6
6
|
|
|
7
7
|
const iconByTypes = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttributeIcon.mjs","sources":["../../../admin/src/components/AttributeIcon.tsx"],"sourcesContent":["import { ComponentType, SVGProps } from 'react';\n\nimport { useStrapiApp } from '@strapi/admin/strapi-admin';\nimport { Box } from '@strapi/design-system';\nimport {\n BooleanField,\n CollectionType,\n ComponentField,\n DateField,\n DynamicZoneField,\n EmailField,\n EnumerationField,\n JsonField,\n MediaField,\n NumberField,\n PasswordField,\n RelationField,\n MarkdownField,\n SingleType,\n TextField,\n UidField,\n BlocksField,\n} from '@strapi/icons/symbols';\nimport { styled } from 'styled-components';\n\nconst iconByTypes: Record<string, ComponentType<SVGProps<SVGSVGElement>>> = {\n biginteger: NumberField,\n blocks: BlocksField,\n boolean: BooleanField,\n collectionType: CollectionType,\n component: ComponentField,\n contentType: CollectionType,\n date: DateField,\n datetime: DateField,\n decimal: NumberField,\n dynamiczone: DynamicZoneField,\n email: EmailField,\n enum: EnumerationField,\n enumeration: EnumerationField,\n file: MediaField,\n files: MediaField,\n float: NumberField,\n integer: NumberField,\n json: JsonField,\n JSON: JsonField,\n media: MediaField,\n number: NumberField,\n password: PasswordField,\n relation: RelationField,\n richtext: MarkdownField,\n singleType: SingleType,\n string: TextField,\n text: TextField,\n time: DateField,\n timestamp: DateField,\n uid: UidField,\n};\n\nconst IconBox = styled(Box)`\n svg {\n height: 100%;\n width: 100%;\n }\n`;\n\nexport type IconByType = keyof typeof iconByTypes;\n\ntype AttributeIconProps = {\n type: IconByType;\n customField?: string | null;\n};\n\nexport const AttributeIcon = ({ type, customField = null, ...rest }: AttributeIconProps) => {\n const getCustomField = useStrapiApp('AttributeIcon', (state) => state.customFields.get);\n\n let Compo: any = iconByTypes[type];\n\n if (customField) {\n const customFieldObject = getCustomField(customField);\n const icon = customFieldObject?.icon;\n if (icon) {\n Compo = icon;\n }\n }\n\n if (!iconByTypes[type]) {\n return null;\n }\n\n return (\n <IconBox width=\"3.2rem\" height=\"3.2rem\" shrink={0} {...rest} aria-hidden>\n <Box tag={Compo} />\n </IconBox>\n );\n};\n"],"names":["iconByTypes","biginteger","NumberField","blocks","BlocksField","boolean","BooleanField","collectionType","CollectionType","component","ComponentField","contentType","date","DateField","datetime","decimal","dynamiczone","DynamicZoneField","email","EmailField","enum","EnumerationField","enumeration","file","MediaField","files","float","integer","json","JsonField","JSON","media","number","password","PasswordField","relation","RelationField","richtext","MarkdownField","singleType","SingleType","string","TextField","text","time","timestamp","uid","UidField","IconBox","styled","Box","AttributeIcon","type","customField","rest","getCustomField","useStrapiApp","state","customFields","get","Compo","customFieldObject","icon","_jsx","width","height","shrink","aria-hidden","tag"],"mappings":";;;;;;AAyBA,MAAMA,
|
|
1
|
+
{"version":3,"file":"AttributeIcon.mjs","sources":["../../../admin/src/components/AttributeIcon.tsx"],"sourcesContent":["import { ComponentType, SVGProps } from 'react';\n\nimport { useStrapiApp } from '@strapi/admin/strapi-admin';\nimport { Box } from '@strapi/design-system';\nimport {\n BooleanField,\n CollectionType,\n ComponentField,\n DateField,\n DynamicZoneField,\n EmailField,\n EnumerationField,\n JsonField,\n MediaField,\n NumberField,\n PasswordField,\n RelationField,\n MarkdownField,\n SingleType,\n TextField,\n UidField,\n BlocksField,\n} from '@strapi/icons/symbols';\nimport { styled } from 'styled-components';\n\nconst iconByTypes: Record<string, ComponentType<SVGProps<SVGSVGElement>>> = {\n biginteger: NumberField,\n blocks: BlocksField,\n boolean: BooleanField,\n collectionType: CollectionType,\n component: ComponentField,\n contentType: CollectionType,\n date: DateField,\n datetime: DateField,\n decimal: NumberField,\n dynamiczone: DynamicZoneField,\n email: EmailField,\n enum: EnumerationField,\n enumeration: EnumerationField,\n file: MediaField,\n files: MediaField,\n float: NumberField,\n integer: NumberField,\n json: JsonField,\n JSON: JsonField,\n media: MediaField,\n number: NumberField,\n password: PasswordField,\n relation: RelationField,\n richtext: MarkdownField,\n singleType: SingleType,\n string: TextField,\n text: TextField,\n time: DateField,\n timestamp: DateField,\n uid: UidField,\n};\n\nconst IconBox = styled(Box)`\n svg {\n height: 100%;\n width: 100%;\n }\n`;\n\nexport type IconByType = keyof typeof iconByTypes;\n\ntype AttributeIconProps = {\n type: IconByType;\n customField?: string | null;\n};\n\nexport const AttributeIcon = ({ type, customField = null, ...rest }: AttributeIconProps) => {\n const getCustomField = useStrapiApp('AttributeIcon', (state) => state.customFields.get);\n\n let Compo: any = iconByTypes[type];\n\n if (customField) {\n const customFieldObject = getCustomField(customField);\n const icon = customFieldObject?.icon;\n if (icon) {\n Compo = icon;\n }\n }\n\n if (!iconByTypes[type]) {\n return null;\n }\n\n return (\n <IconBox width=\"3.2rem\" height=\"3.2rem\" shrink={0} {...rest} aria-hidden>\n <Box tag={Compo} />\n </IconBox>\n );\n};\n"],"names":["iconByTypes","biginteger","NumberField","blocks","BlocksField","boolean","BooleanField","collectionType","CollectionType","component","ComponentField","contentType","date","DateField","datetime","decimal","dynamiczone","DynamicZoneField","email","EmailField","enum","EnumerationField","enumeration","file","MediaField","files","float","integer","json","JsonField","JSON","media","number","password","PasswordField","relation","RelationField","richtext","MarkdownField","singleType","SingleType","string","TextField","text","time","timestamp","uid","UidField","IconBox","styled","Box","AttributeIcon","type","customField","rest","getCustomField","useStrapiApp","state","customFields","get","Compo","customFieldObject","icon","_jsx","width","height","shrink","aria-hidden","tag"],"mappings":";;;;;;AAyBA,MAAMA,WAAAA,GAAsE;IAC1EC,UAAAA,EAAYC,WAAAA;IACZC,MAAAA,EAAQC,WAAAA;IACRC,OAAAA,EAASC,YAAAA;IACTC,cAAAA,EAAgBC,cAAAA;IAChBC,SAAAA,EAAWC,cAAAA;IACXC,WAAAA,EAAaH,cAAAA;IACbI,IAAAA,EAAMC,SAAAA;IACNC,QAAAA,EAAUD,SAAAA;IACVE,OAAAA,EAASb,WAAAA;IACTc,WAAAA,EAAaC,gBAAAA;IACbC,KAAAA,EAAOC,UAAAA;IACPC,IAAAA,EAAMC,gBAAAA;IACNC,WAAAA,EAAaD,gBAAAA;IACbE,IAAAA,EAAMC,UAAAA;IACNC,KAAAA,EAAOD,UAAAA;IACPE,KAAAA,EAAOxB,WAAAA;IACPyB,OAAAA,EAASzB,WAAAA;IACT0B,IAAAA,EAAMC,SAAAA;IACNC,IAAAA,EAAMD,SAAAA;IACNE,KAAAA,EAAOP,UAAAA;IACPQ,MAAAA,EAAQ9B,WAAAA;IACR+B,QAAAA,EAAUC,aAAAA;IACVC,QAAAA,EAAUC,aAAAA;IACVC,QAAAA,EAAUC,aAAAA;IACVC,UAAAA,EAAYC,UAAAA;IACZC,MAAAA,EAAQC,SAAAA;IACRC,IAAAA,EAAMD,SAAAA;IACNE,IAAAA,EAAM/B,SAAAA;IACNgC,SAAAA,EAAWhC,SAAAA;IACXiC,GAAAA,EAAKC;AACP,CAAA;AAEA,MAAMC,OAAAA,GAAUC,MAAAA,CAAOC,GAAAA,CAAI;;;;;AAK3B,CAAC;AASM,MAAMC,aAAAA,GAAgB,CAAC,EAAEC,IAAI,EAAEC,WAAAA,GAAc,IAAI,EAAE,GAAGC,IAAAA,EAA0B,GAAA;IACrF,MAAMC,cAAAA,GAAiBC,aAAa,eAAA,EAAiB,CAACC,QAAUA,KAAAA,CAAMC,YAAY,CAACC,GAAG,CAAA;IAEtF,IAAIC,KAAAA,GAAa5D,WAAW,CAACoD,IAAAA,CAAK;AAElC,IAAA,IAAIC,WAAAA,EAAa;AACf,QAAA,MAAMQ,oBAAoBN,cAAAA,CAAeF,WAAAA,CAAAA;AACzC,QAAA,MAAMS,OAAOD,iBAAAA,EAAmBC,IAAAA;AAChC,QAAA,IAAIA,IAAAA,EAAM;YACRF,KAAAA,GAAQE,IAAAA;AACV,QAAA;AACF,IAAA;AAEA,IAAA,IAAI,CAAC9D,WAAW,CAACoD,IAAAA,CAAK,EAAE;QACtB,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,qBACEW,GAAA,CAACf,OAAAA,EAAAA;QAAQgB,KAAAA,EAAM,QAAA;QAASC,MAAAA,EAAO,QAAA;QAASC,MAAAA,EAAQ,CAAA;AAAI,QAAA,GAAGZ,IAAI;QAAEa,aAAW,EAAA,IAAA;AACtE,QAAA,QAAA,gBAAAJ,GAAA,CAACb,GAAAA,EAAAA;YAAIkB,GAAAA,EAAKR;;;AAGhB;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttributeList.js","sources":["../../../../admin/src/components/AttributeOptions/AttributeList.tsx"],"sourcesContent":["import { Flex, Grid, KeyboardNavigable } from '@strapi/design-system';\n\nimport { IconByType } from '../AttributeIcon';\n\nimport { AttributeOption } from './AttributeOption';\n\ntype AttributeListProps = {\n attributes: IconByType[][];\n};\n\nexport const AttributeList = ({ attributes }: AttributeListProps) => (\n <KeyboardNavigable tagName=\"button\">\n <Flex direction=\"column\" alignItems=\"stretch\" gap={8}>\n {attributes.map((attributeRow, index) => {\n return (\n // eslint-disable-next-line react/no-array-index-key\n <Grid.Root key={index} gap={3}>\n {attributeRow.map((attribute) => (\n <Grid.Item key={attribute} col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <AttributeOption type={attribute} />\n </Grid.Item>\n ))}\n </Grid.Root>\n );\n })}\n </Flex>\n </KeyboardNavigable>\n);\n"],"names":["AttributeList","attributes","_jsx","KeyboardNavigable","tagName","Flex","direction","alignItems","gap","map","attributeRow","index","Grid","Root","attribute","Item","col","xs","AttributeOption","type"],"mappings":";;;;;;MAUaA,
|
|
1
|
+
{"version":3,"file":"AttributeList.js","sources":["../../../../admin/src/components/AttributeOptions/AttributeList.tsx"],"sourcesContent":["import { Flex, Grid, KeyboardNavigable } from '@strapi/design-system';\n\nimport { IconByType } from '../AttributeIcon';\n\nimport { AttributeOption } from './AttributeOption';\n\ntype AttributeListProps = {\n attributes: IconByType[][];\n};\n\nexport const AttributeList = ({ attributes }: AttributeListProps) => (\n <KeyboardNavigable tagName=\"button\">\n <Flex direction=\"column\" alignItems=\"stretch\" gap={8}>\n {attributes.map((attributeRow, index) => {\n return (\n // eslint-disable-next-line react/no-array-index-key\n <Grid.Root key={index} gap={3}>\n {attributeRow.map((attribute) => (\n <Grid.Item key={attribute} col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <AttributeOption type={attribute} />\n </Grid.Item>\n ))}\n </Grid.Root>\n );\n })}\n </Flex>\n </KeyboardNavigable>\n);\n"],"names":["AttributeList","attributes","_jsx","KeyboardNavigable","tagName","Flex","direction","alignItems","gap","map","attributeRow","index","Grid","Root","attribute","Item","col","xs","AttributeOption","type"],"mappings":";;;;;;MAUaA,aAAAA,GAAgB,CAAC,EAAEC,UAAU,EAAsB,iBAC9DC,cAAA,CAACC,8BAAAA,EAAAA;QAAkBC,OAAAA,EAAQ,QAAA;AACzB,QAAA,QAAA,gBAAAF,cAAA,CAACG,iBAAAA,EAAAA;YAAKC,SAAAA,EAAU,QAAA;YAASC,UAAAA,EAAW,SAAA;YAAUC,GAAAA,EAAK,CAAA;sBAChDP,UAAAA,CAAWQ,GAAG,CAAC,CAACC,YAAAA,EAAcC,KAAAA,GAAAA;AAC7B,gBAAA;AAEE,8BAAAT,cAAA,CAACU,kBAAKC,IAAI,EAAA;oBAAaL,GAAAA,EAAK,CAAA;AACzBE,oBAAAA,QAAAA,EAAAA,YAAAA,CAAaD,GAAG,CAAC,CAACK,SAAAA,iBACjBZ,cAAA,CAACU,kBAAKG,IAAI,EAAA;4BAAiBC,GAAAA,EAAK,CAAA;4BAAGC,EAAAA,EAAI,EAAA;4BAAIX,SAAAA,EAAU,QAAA;4BAASC,UAAAA,EAAW,SAAA;AACvE,4BAAA,QAAA,gBAAAL,cAAA,CAACgB,+BAAAA,EAAAA;gCAAgBC,IAAAA,EAAML;;AADTA,yBAAAA,EAAAA,SAAAA,CAAAA;AAFJH,iBAAAA,EAAAA,KAAAA,CAAAA;AAQpB,YAAA,CAAA;;AAGJ,KAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttributeList.mjs","sources":["../../../../admin/src/components/AttributeOptions/AttributeList.tsx"],"sourcesContent":["import { Flex, Grid, KeyboardNavigable } from '@strapi/design-system';\n\nimport { IconByType } from '../AttributeIcon';\n\nimport { AttributeOption } from './AttributeOption';\n\ntype AttributeListProps = {\n attributes: IconByType[][];\n};\n\nexport const AttributeList = ({ attributes }: AttributeListProps) => (\n <KeyboardNavigable tagName=\"button\">\n <Flex direction=\"column\" alignItems=\"stretch\" gap={8}>\n {attributes.map((attributeRow, index) => {\n return (\n // eslint-disable-next-line react/no-array-index-key\n <Grid.Root key={index} gap={3}>\n {attributeRow.map((attribute) => (\n <Grid.Item key={attribute} col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <AttributeOption type={attribute} />\n </Grid.Item>\n ))}\n </Grid.Root>\n );\n })}\n </Flex>\n </KeyboardNavigable>\n);\n"],"names":["AttributeList","attributes","_jsx","KeyboardNavigable","tagName","Flex","direction","alignItems","gap","map","attributeRow","index","Grid","Root","attribute","Item","col","xs","AttributeOption","type"],"mappings":";;;;MAUaA,
|
|
1
|
+
{"version":3,"file":"AttributeList.mjs","sources":["../../../../admin/src/components/AttributeOptions/AttributeList.tsx"],"sourcesContent":["import { Flex, Grid, KeyboardNavigable } from '@strapi/design-system';\n\nimport { IconByType } from '../AttributeIcon';\n\nimport { AttributeOption } from './AttributeOption';\n\ntype AttributeListProps = {\n attributes: IconByType[][];\n};\n\nexport const AttributeList = ({ attributes }: AttributeListProps) => (\n <KeyboardNavigable tagName=\"button\">\n <Flex direction=\"column\" alignItems=\"stretch\" gap={8}>\n {attributes.map((attributeRow, index) => {\n return (\n // eslint-disable-next-line react/no-array-index-key\n <Grid.Root key={index} gap={3}>\n {attributeRow.map((attribute) => (\n <Grid.Item key={attribute} col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <AttributeOption type={attribute} />\n </Grid.Item>\n ))}\n </Grid.Root>\n );\n })}\n </Flex>\n </KeyboardNavigable>\n);\n"],"names":["AttributeList","attributes","_jsx","KeyboardNavigable","tagName","Flex","direction","alignItems","gap","map","attributeRow","index","Grid","Root","attribute","Item","col","xs","AttributeOption","type"],"mappings":";;;;MAUaA,aAAAA,GAAgB,CAAC,EAAEC,UAAU,EAAsB,iBAC9DC,GAAA,CAACC,iBAAAA,EAAAA;QAAkBC,OAAAA,EAAQ,QAAA;AACzB,QAAA,QAAA,gBAAAF,GAAA,CAACG,IAAAA,EAAAA;YAAKC,SAAAA,EAAU,QAAA;YAASC,UAAAA,EAAW,SAAA;YAAUC,GAAAA,EAAK,CAAA;sBAChDP,UAAAA,CAAWQ,GAAG,CAAC,CAACC,YAAAA,EAAcC,KAAAA,GAAAA;AAC7B,gBAAA;AAEE,8BAAAT,GAAA,CAACU,KAAKC,IAAI,EAAA;oBAAaL,GAAAA,EAAK,CAAA;AACzBE,oBAAAA,QAAAA,EAAAA,YAAAA,CAAaD,GAAG,CAAC,CAACK,SAAAA,iBACjBZ,GAAA,CAACU,KAAKG,IAAI,EAAA;4BAAiBC,GAAAA,EAAK,CAAA;4BAAGC,EAAAA,EAAI,EAAA;4BAAIX,SAAAA,EAAU,QAAA;4BAASC,UAAAA,EAAW,SAAA;AACvE,4BAAA,QAAA,gBAAAL,GAAA,CAACgB,eAAAA,EAAAA;gCAAgBC,IAAAA,EAAML;;AADTA,yBAAAA,EAAAA,SAAAA,CAAAA;AAFJH,iBAAAA,EAAAA,KAAAA,CAAAA;AAQpB,YAAA,CAAA;;AAGJ,KAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttributeOption.js","sources":["../../../../admin/src/components/AttributeOptions/AttributeOption.tsx"],"sourcesContent":["/**\n *\n * AttributeOption\n *\n */\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { Sparkle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../utils/getTrad';\nimport { AttributeIcon, IconByType } from '../AttributeIcon';\nimport { useFormModalNavigation } from '../FormModalNavigation/useFormModalNavigation';\n\nimport { OptionBoxWrapper } from './OptionBoxWrapper';\n\nconst newAttributes: string[] = [];\n\nconst NewBadge = () => (\n <Flex grow={1} justifyContent=\"flex-end\">\n <Flex gap={1} hasRadius background=\"alternative100\" padding={`0.2rem 0.4rem`}>\n <Sparkle width={`1rem`} height={`1rem`} fill=\"alternative600\" />\n <Typography textColor=\"alternative600\" variant=\"sigma\">\n New\n </Typography>\n </Flex>\n </Flex>\n);\n\ntype AttributeOptionProps = {\n type: IconByType;\n};\n\nexport const AttributeOption = ({ type = 'text' }: AttributeOptionProps) => {\n const { formatMessage } = useIntl();\n\n const { onClickSelectField } = useFormModalNavigation();\n\n const handleClick = () => {\n const step = type === 'component' ? '1' : null;\n\n onClickSelectField({\n attributeType: type,\n step,\n });\n };\n\n return (\n <OptionBoxWrapper padding={4} tag=\"button\" hasRadius type=\"button\" onClick={handleClick}>\n <Flex>\n <AttributeIcon type={type} />\n <Box paddingLeft={4} width=\"100%\">\n <Flex justifyContent=\"space-between\">\n <Typography fontWeight=\"bold\" textColor=\"neutral800\">\n {formatMessage({ id: getTrad(`attribute.${type}`), defaultMessage: type })}\n </Typography>\n {newAttributes.includes(type) && <NewBadge />}\n </Flex>\n <Flex>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: getTrad(`attribute.${type}.description`),\n defaultMessage: 'A type for modeling data',\n })}\n </Typography>\n </Flex>\n </Box>\n </Flex>\n </OptionBoxWrapper>\n );\n};\n"],"names":["newAttributes","NewBadge","_jsx","Flex","grow","justifyContent","_jsxs","gap","hasRadius","background","padding","Sparkle","width","height","fill","Typography","textColor","variant","AttributeOption","type","formatMessage","useIntl","onClickSelectField","useFormModalNavigation","handleClick","step","attributeType","OptionBoxWrapper","tag","onClick","AttributeIcon","Box","paddingLeft","fontWeight","id","getTrad","defaultMessage","includes"],"mappings":";;;;;;;;;;;AAgBA,MAAMA,gBAA0B,EAAE;AAElC,MAAMC,QAAAA,GAAW,kBACfC,
|
|
1
|
+
{"version":3,"file":"AttributeOption.js","sources":["../../../../admin/src/components/AttributeOptions/AttributeOption.tsx"],"sourcesContent":["/**\n *\n * AttributeOption\n *\n */\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { Sparkle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../utils/getTrad';\nimport { AttributeIcon, IconByType } from '../AttributeIcon';\nimport { useFormModalNavigation } from '../FormModalNavigation/useFormModalNavigation';\n\nimport { OptionBoxWrapper } from './OptionBoxWrapper';\n\nconst newAttributes: string[] = [];\n\nconst NewBadge = () => (\n <Flex grow={1} justifyContent=\"flex-end\">\n <Flex gap={1} hasRadius background=\"alternative100\" padding={`0.2rem 0.4rem`}>\n <Sparkle width={`1rem`} height={`1rem`} fill=\"alternative600\" />\n <Typography textColor=\"alternative600\" variant=\"sigma\">\n New\n </Typography>\n </Flex>\n </Flex>\n);\n\ntype AttributeOptionProps = {\n type: IconByType;\n};\n\nexport const AttributeOption = ({ type = 'text' }: AttributeOptionProps) => {\n const { formatMessage } = useIntl();\n\n const { onClickSelectField } = useFormModalNavigation();\n\n const handleClick = () => {\n const step = type === 'component' ? '1' : null;\n\n onClickSelectField({\n attributeType: type,\n step,\n });\n };\n\n return (\n <OptionBoxWrapper padding={4} tag=\"button\" hasRadius type=\"button\" onClick={handleClick}>\n <Flex>\n <AttributeIcon type={type} />\n <Box paddingLeft={4} width=\"100%\">\n <Flex justifyContent=\"space-between\">\n <Typography fontWeight=\"bold\" textColor=\"neutral800\">\n {formatMessage({ id: getTrad(`attribute.${type}`), defaultMessage: type })}\n </Typography>\n {newAttributes.includes(type) && <NewBadge />}\n </Flex>\n <Flex>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: getTrad(`attribute.${type}.description`),\n defaultMessage: 'A type for modeling data',\n })}\n </Typography>\n </Flex>\n </Box>\n </Flex>\n </OptionBoxWrapper>\n );\n};\n"],"names":["newAttributes","NewBadge","_jsx","Flex","grow","justifyContent","_jsxs","gap","hasRadius","background","padding","Sparkle","width","height","fill","Typography","textColor","variant","AttributeOption","type","formatMessage","useIntl","onClickSelectField","useFormModalNavigation","handleClick","step","attributeType","OptionBoxWrapper","tag","onClick","AttributeIcon","Box","paddingLeft","fontWeight","id","getTrad","defaultMessage","includes"],"mappings":";;;;;;;;;;;AAgBA,MAAMA,gBAA0B,EAAE;AAElC,MAAMC,QAAAA,GAAW,kBACfC,cAAA,CAACC,iBAAAA,EAAAA;QAAKC,IAAAA,EAAM,CAAA;QAAGC,cAAAA,EAAe,UAAA;AAC5B,QAAA,QAAA,gBAAAC,eAAA,CAACH,iBAAAA,EAAAA;YAAKI,GAAAA,EAAK,CAAA;YAAGC,SAAS,EAAA,IAAA;YAACC,UAAAA,EAAW,gBAAA;YAAiBC,OAAAA,EAAS,CAAC,aAAa,CAAC;;8BAC1ER,cAAA,CAACS,aAAAA,EAAAA;oBAAQC,KAAAA,EAAO,CAAC,IAAI,CAAC;oBAAEC,MAAAA,EAAQ,CAAC,IAAI,CAAC;oBAAEC,IAAAA,EAAK;;8BAC7CZ,cAAA,CAACa,uBAAAA,EAAAA;oBAAWC,SAAAA,EAAU,gBAAA;oBAAiBC,OAAAA,EAAQ,OAAA;AAAQ,oBAAA,QAAA,EAAA;;;;;MAWhDC,eAAAA,GAAkB,CAAC,EAAEC,IAAAA,GAAO,MAAM,EAAwB,GAAA;IACrE,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAE1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,6CAAAA,EAAAA;AAE/B,IAAA,MAAMC,WAAAA,GAAc,IAAA;QAClB,MAAMC,IAAAA,GAAON,IAAAA,KAAS,WAAA,GAAc,GAAA,GAAM,IAAA;QAE1CG,kBAAAA,CAAmB;YACjBI,aAAAA,EAAeP,IAAAA;AACfM,YAAAA;AACF,SAAA,CAAA;AACF,IAAA,CAAA;AAEA,IAAA,qBACEvB,cAAA,CAACyB,iCAAAA,EAAAA;QAAiBjB,OAAAA,EAAS,CAAA;QAAGkB,GAAAA,EAAI,QAAA;QAASpB,SAAS,EAAA,IAAA;QAACW,IAAAA,EAAK,QAAA;QAASU,OAAAA,EAASL,WAAAA;AAC1E,QAAA,QAAA,gBAAAlB,eAAA,CAACH,iBAAAA,EAAAA;;8BACCD,cAAA,CAAC4B,2BAAAA,EAAAA;oBAAcX,IAAAA,EAAMA;;8BACrBb,eAAA,CAACyB,gBAAAA,EAAAA;oBAAIC,WAAAA,EAAa,CAAA;oBAAGpB,KAAAA,EAAM,MAAA;;sCACzBN,eAAA,CAACH,iBAAAA,EAAAA;4BAAKE,cAAAA,EAAe,eAAA;;8CACnBH,cAAA,CAACa,uBAAAA,EAAAA;oCAAWkB,UAAAA,EAAW,MAAA;oCAAOjB,SAAAA,EAAU,YAAA;8CACrCI,aAAAA,CAAc;AAAEc,wCAAAA,EAAAA,EAAIC,eAAAA,CAAQ,CAAC,UAAU,EAAEhB,IAAAA,CAAAA,CAAM,CAAA;wCAAGiB,cAAAA,EAAgBjB;AAAK,qCAAA;;gCAEzEnB,aAAAA,CAAcqC,QAAQ,CAAClB,IAAAA,CAAAA,kBAASjB,cAAA,CAACD,QAAAA,EAAAA,EAAAA;;;sCAEpCC,cAAA,CAACC,iBAAAA,EAAAA;AACC,4BAAA,QAAA,gBAAAD,cAAA,CAACa,uBAAAA,EAAAA;gCAAWE,OAAAA,EAAQ,IAAA;gCAAKD,SAAAA,EAAU,YAAA;0CAChCI,aAAAA,CAAc;AACbc,oCAAAA,EAAAA,EAAIC,gBAAQ,CAAC,UAAU,EAAEhB,IAAAA,CAAK,YAAY,CAAC,CAAA;oCAC3CiB,cAAAA,EAAgB;AAClB,iCAAA;;;;;;;;AAOd;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttributeOption.mjs","sources":["../../../../admin/src/components/AttributeOptions/AttributeOption.tsx"],"sourcesContent":["/**\n *\n * AttributeOption\n *\n */\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { Sparkle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../utils/getTrad';\nimport { AttributeIcon, IconByType } from '../AttributeIcon';\nimport { useFormModalNavigation } from '../FormModalNavigation/useFormModalNavigation';\n\nimport { OptionBoxWrapper } from './OptionBoxWrapper';\n\nconst newAttributes: string[] = [];\n\nconst NewBadge = () => (\n <Flex grow={1} justifyContent=\"flex-end\">\n <Flex gap={1} hasRadius background=\"alternative100\" padding={`0.2rem 0.4rem`}>\n <Sparkle width={`1rem`} height={`1rem`} fill=\"alternative600\" />\n <Typography textColor=\"alternative600\" variant=\"sigma\">\n New\n </Typography>\n </Flex>\n </Flex>\n);\n\ntype AttributeOptionProps = {\n type: IconByType;\n};\n\nexport const AttributeOption = ({ type = 'text' }: AttributeOptionProps) => {\n const { formatMessage } = useIntl();\n\n const { onClickSelectField } = useFormModalNavigation();\n\n const handleClick = () => {\n const step = type === 'component' ? '1' : null;\n\n onClickSelectField({\n attributeType: type,\n step,\n });\n };\n\n return (\n <OptionBoxWrapper padding={4} tag=\"button\" hasRadius type=\"button\" onClick={handleClick}>\n <Flex>\n <AttributeIcon type={type} />\n <Box paddingLeft={4} width=\"100%\">\n <Flex justifyContent=\"space-between\">\n <Typography fontWeight=\"bold\" textColor=\"neutral800\">\n {formatMessage({ id: getTrad(`attribute.${type}`), defaultMessage: type })}\n </Typography>\n {newAttributes.includes(type) && <NewBadge />}\n </Flex>\n <Flex>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: getTrad(`attribute.${type}.description`),\n defaultMessage: 'A type for modeling data',\n })}\n </Typography>\n </Flex>\n </Box>\n </Flex>\n </OptionBoxWrapper>\n );\n};\n"],"names":["newAttributes","NewBadge","_jsx","Flex","grow","justifyContent","_jsxs","gap","hasRadius","background","padding","Sparkle","width","height","fill","Typography","textColor","variant","AttributeOption","type","formatMessage","useIntl","onClickSelectField","useFormModalNavigation","handleClick","step","attributeType","OptionBoxWrapper","tag","onClick","AttributeIcon","Box","paddingLeft","fontWeight","id","getTrad","defaultMessage","includes"],"mappings":";;;;;;;;;AAgBA,MAAMA,gBAA0B,EAAE;AAElC,MAAMC,QAAAA,GAAW,kBACfC,
|
|
1
|
+
{"version":3,"file":"AttributeOption.mjs","sources":["../../../../admin/src/components/AttributeOptions/AttributeOption.tsx"],"sourcesContent":["/**\n *\n * AttributeOption\n *\n */\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { Sparkle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../utils/getTrad';\nimport { AttributeIcon, IconByType } from '../AttributeIcon';\nimport { useFormModalNavigation } from '../FormModalNavigation/useFormModalNavigation';\n\nimport { OptionBoxWrapper } from './OptionBoxWrapper';\n\nconst newAttributes: string[] = [];\n\nconst NewBadge = () => (\n <Flex grow={1} justifyContent=\"flex-end\">\n <Flex gap={1} hasRadius background=\"alternative100\" padding={`0.2rem 0.4rem`}>\n <Sparkle width={`1rem`} height={`1rem`} fill=\"alternative600\" />\n <Typography textColor=\"alternative600\" variant=\"sigma\">\n New\n </Typography>\n </Flex>\n </Flex>\n);\n\ntype AttributeOptionProps = {\n type: IconByType;\n};\n\nexport const AttributeOption = ({ type = 'text' }: AttributeOptionProps) => {\n const { formatMessage } = useIntl();\n\n const { onClickSelectField } = useFormModalNavigation();\n\n const handleClick = () => {\n const step = type === 'component' ? '1' : null;\n\n onClickSelectField({\n attributeType: type,\n step,\n });\n };\n\n return (\n <OptionBoxWrapper padding={4} tag=\"button\" hasRadius type=\"button\" onClick={handleClick}>\n <Flex>\n <AttributeIcon type={type} />\n <Box paddingLeft={4} width=\"100%\">\n <Flex justifyContent=\"space-between\">\n <Typography fontWeight=\"bold\" textColor=\"neutral800\">\n {formatMessage({ id: getTrad(`attribute.${type}`), defaultMessage: type })}\n </Typography>\n {newAttributes.includes(type) && <NewBadge />}\n </Flex>\n <Flex>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: getTrad(`attribute.${type}.description`),\n defaultMessage: 'A type for modeling data',\n })}\n </Typography>\n </Flex>\n </Box>\n </Flex>\n </OptionBoxWrapper>\n );\n};\n"],"names":["newAttributes","NewBadge","_jsx","Flex","grow","justifyContent","_jsxs","gap","hasRadius","background","padding","Sparkle","width","height","fill","Typography","textColor","variant","AttributeOption","type","formatMessage","useIntl","onClickSelectField","useFormModalNavigation","handleClick","step","attributeType","OptionBoxWrapper","tag","onClick","AttributeIcon","Box","paddingLeft","fontWeight","id","getTrad","defaultMessage","includes"],"mappings":";;;;;;;;;AAgBA,MAAMA,gBAA0B,EAAE;AAElC,MAAMC,QAAAA,GAAW,kBACfC,GAAA,CAACC,IAAAA,EAAAA;QAAKC,IAAAA,EAAM,CAAA;QAAGC,cAAAA,EAAe,UAAA;AAC5B,QAAA,QAAA,gBAAAC,IAAA,CAACH,IAAAA,EAAAA;YAAKI,GAAAA,EAAK,CAAA;YAAGC,SAAS,EAAA,IAAA;YAACC,UAAAA,EAAW,gBAAA;YAAiBC,OAAAA,EAAS,CAAC,aAAa,CAAC;;8BAC1ER,GAAA,CAACS,OAAAA,EAAAA;oBAAQC,KAAAA,EAAO,CAAC,IAAI,CAAC;oBAAEC,MAAAA,EAAQ,CAAC,IAAI,CAAC;oBAAEC,IAAAA,EAAK;;8BAC7CZ,GAAA,CAACa,UAAAA,EAAAA;oBAAWC,SAAAA,EAAU,gBAAA;oBAAiBC,OAAAA,EAAQ,OAAA;AAAQ,oBAAA,QAAA,EAAA;;;;;MAWhDC,eAAAA,GAAkB,CAAC,EAAEC,IAAAA,GAAO,MAAM,EAAwB,GAAA;IACrE,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAE1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,sBAAAA,EAAAA;AAE/B,IAAA,MAAMC,WAAAA,GAAc,IAAA;QAClB,MAAMC,IAAAA,GAAON,IAAAA,KAAS,WAAA,GAAc,GAAA,GAAM,IAAA;QAE1CG,kBAAAA,CAAmB;YACjBI,aAAAA,EAAeP,IAAAA;AACfM,YAAAA;AACF,SAAA,CAAA;AACF,IAAA,CAAA;AAEA,IAAA,qBACEvB,GAAA,CAACyB,gBAAAA,EAAAA;QAAiBjB,OAAAA,EAAS,CAAA;QAAGkB,GAAAA,EAAI,QAAA;QAASpB,SAAS,EAAA,IAAA;QAACW,IAAAA,EAAK,QAAA;QAASU,OAAAA,EAASL,WAAAA;AAC1E,QAAA,QAAA,gBAAAlB,IAAA,CAACH,IAAAA,EAAAA;;8BACCD,GAAA,CAAC4B,aAAAA,EAAAA;oBAAcX,IAAAA,EAAMA;;8BACrBb,IAAA,CAACyB,GAAAA,EAAAA;oBAAIC,WAAAA,EAAa,CAAA;oBAAGpB,KAAAA,EAAM,MAAA;;sCACzBN,IAAA,CAACH,IAAAA,EAAAA;4BAAKE,cAAAA,EAAe,eAAA;;8CACnBH,GAAA,CAACa,UAAAA,EAAAA;oCAAWkB,UAAAA,EAAW,MAAA;oCAAOjB,SAAAA,EAAU,YAAA;8CACrCI,aAAAA,CAAc;AAAEc,wCAAAA,EAAAA,EAAIC,OAAAA,CAAQ,CAAC,UAAU,EAAEhB,IAAAA,CAAAA,CAAM,CAAA;wCAAGiB,cAAAA,EAAgBjB;AAAK,qCAAA;;gCAEzEnB,aAAAA,CAAcqC,QAAQ,CAAClB,IAAAA,CAAAA,kBAASjB,GAAA,CAACD,QAAAA,EAAAA,EAAAA;;;sCAEpCC,GAAA,CAACC,IAAAA,EAAAA;AACC,4BAAA,QAAA,gBAAAD,GAAA,CAACa,UAAAA,EAAAA;gCAAWE,OAAAA,EAAQ,IAAA;gCAAKD,SAAAA,EAAU,YAAA;0CAChCI,aAAAA,CAAc;AACbc,oCAAAA,EAAAA,EAAIC,QAAQ,CAAC,UAAU,EAAEhB,IAAAA,CAAK,YAAY,CAAC,CAAA;oCAC3CiB,cAAAA,EAAgB;AAClB,iCAAA;;;;;;;;AAOd;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttributeOptions.js","sources":["../../../../admin/src/components/AttributeOptions/AttributeOptions.tsx"],"sourcesContent":["/**\n *\n * AttributeOptions\n *\n */\n\nimport { Divider, Flex, Modal, Tabs, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../utils';\nimport { IconByType } from '../AttributeIcon';\n\nimport { AttributeList } from './AttributeList';\nimport { CustomFieldsList } from './CustomFieldsList';\n\ntype AttributeOptionsProps = {\n attributes: IconByType[][];\n forTarget: string;\n kind: string;\n};\n\nexport const AttributeOptions = ({ attributes, forTarget, kind }: AttributeOptionsProps) => {\n const { formatMessage } = useIntl();\n\n const defaultTabId = getTrad('modalForm.tabs.default');\n const customTabId = getTrad('modalForm.tabs.custom');\n\n const titleIdSuffix = forTarget.includes('component') ? 'component' : kind;\n const titleId = getTrad(`modalForm.sub-header.chooseAttribute.${titleIdSuffix}`);\n\n return (\n <Modal.Body>\n <Tabs.Root variant=\"simple\" defaultValue=\"default\">\n <Flex justifyContent=\"space-between\">\n <Typography variant=\"beta\" tag=\"h2\">\n {formatMessage({ id: titleId, defaultMessage: 'Select a field' })}\n </Typography>\n <Tabs.List>\n <Tabs.Trigger value=\"default\">\n {formatMessage({ id: defaultTabId, defaultMessage: 'Default' })}\n </Tabs.Trigger>\n <Tabs.Trigger value=\"custom\">\n {formatMessage({ id: customTabId, defaultMessage: 'Custom' })}\n </Tabs.Trigger>\n </Tabs.List>\n </Flex>\n <Divider marginBottom={6} />\n <Tabs.Content value=\"default\">\n <AttributeList attributes={attributes} />\n </Tabs.Content>\n <Tabs.Content value=\"custom\">\n <CustomFieldsList />\n </Tabs.Content>\n </Tabs.Root>\n </Modal.Body>\n );\n};\n"],"names":["AttributeOptions","attributes","forTarget","kind","formatMessage","useIntl","defaultTabId","getTrad","customTabId","titleIdSuffix","includes","titleId","_jsx","Modal","Body","_jsxs","Tabs","Root","variant","defaultValue","Flex","justifyContent","Typography","tag","id","defaultMessage","List","Trigger","value","Divider","marginBottom","Content","AttributeList","CustomFieldsList"],"mappings":";;;;;;;;;AAqBO,MAAMA,mBAAmB,CAAC,EAAEC,UAAU,EAAEC,SAAS,EAAEC,IAAI,EAAyB,GAAA;IACrF,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAE1B,IAAA,MAAMC,eAAeC,
|
|
1
|
+
{"version":3,"file":"AttributeOptions.js","sources":["../../../../admin/src/components/AttributeOptions/AttributeOptions.tsx"],"sourcesContent":["/**\n *\n * AttributeOptions\n *\n */\n\nimport { Divider, Flex, Modal, Tabs, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../utils';\nimport { IconByType } from '../AttributeIcon';\n\nimport { AttributeList } from './AttributeList';\nimport { CustomFieldsList } from './CustomFieldsList';\n\ntype AttributeOptionsProps = {\n attributes: IconByType[][];\n forTarget: string;\n kind: string;\n};\n\nexport const AttributeOptions = ({ attributes, forTarget, kind }: AttributeOptionsProps) => {\n const { formatMessage } = useIntl();\n\n const defaultTabId = getTrad('modalForm.tabs.default');\n const customTabId = getTrad('modalForm.tabs.custom');\n\n const titleIdSuffix = forTarget.includes('component') ? 'component' : kind;\n const titleId = getTrad(`modalForm.sub-header.chooseAttribute.${titleIdSuffix}`);\n\n return (\n <Modal.Body>\n <Tabs.Root variant=\"simple\" defaultValue=\"default\">\n <Flex justifyContent=\"space-between\">\n <Typography variant=\"beta\" tag=\"h2\">\n {formatMessage({ id: titleId, defaultMessage: 'Select a field' })}\n </Typography>\n <Tabs.List>\n <Tabs.Trigger value=\"default\">\n {formatMessage({ id: defaultTabId, defaultMessage: 'Default' })}\n </Tabs.Trigger>\n <Tabs.Trigger value=\"custom\">\n {formatMessage({ id: customTabId, defaultMessage: 'Custom' })}\n </Tabs.Trigger>\n </Tabs.List>\n </Flex>\n <Divider marginBottom={6} />\n <Tabs.Content value=\"default\">\n <AttributeList attributes={attributes} />\n </Tabs.Content>\n <Tabs.Content value=\"custom\">\n <CustomFieldsList />\n </Tabs.Content>\n </Tabs.Root>\n </Modal.Body>\n );\n};\n"],"names":["AttributeOptions","attributes","forTarget","kind","formatMessage","useIntl","defaultTabId","getTrad","customTabId","titleIdSuffix","includes","titleId","_jsx","Modal","Body","_jsxs","Tabs","Root","variant","defaultValue","Flex","justifyContent","Typography","tag","id","defaultMessage","List","Trigger","value","Divider","marginBottom","Content","AttributeList","CustomFieldsList"],"mappings":";;;;;;;;;AAqBO,MAAMA,mBAAmB,CAAC,EAAEC,UAAU,EAAEC,SAAS,EAAEC,IAAI,EAAyB,GAAA;IACrF,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAE1B,IAAA,MAAMC,eAAeC,eAAAA,CAAQ,wBAAA,CAAA;AAC7B,IAAA,MAAMC,cAAcD,eAAAA,CAAQ,uBAAA,CAAA;AAE5B,IAAA,MAAME,aAAAA,GAAgBP,SAAAA,CAAUQ,QAAQ,CAAC,eAAe,WAAA,GAAcP,IAAAA;AACtE,IAAA,MAAMQ,OAAAA,GAAUJ,eAAAA,CAAQ,CAAC,qCAAqC,EAAEE,aAAAA,CAAAA,CAAe,CAAA;IAE/E,qBACEG,cAAA,CAACC,mBAAMC,IAAI,EAAA;gCACTC,eAAA,CAACC,kBAAKC,IAAI,EAAA;YAACC,OAAAA,EAAQ,QAAA;YAASC,YAAAA,EAAa,SAAA;;8BACvCJ,eAAA,CAACK,iBAAAA,EAAAA;oBAAKC,cAAAA,EAAe,eAAA;;sCACnBT,cAAA,CAACU,uBAAAA,EAAAA;4BAAWJ,OAAAA,EAAQ,MAAA;4BAAOK,GAAAA,EAAI,IAAA;sCAC5BnB,aAAAA,CAAc;gCAAEoB,EAAAA,EAAIb,OAAAA;gCAASc,cAAAA,EAAgB;AAAiB,6BAAA;;AAEjE,sCAAAV,eAAA,CAACC,kBAAKU,IAAI,EAAA;;AACR,8CAAAd,cAAA,CAACI,kBAAKW,OAAO,EAAA;oCAACC,KAAAA,EAAM,SAAA;8CACjBxB,aAAAA,CAAc;wCAAEoB,EAAAA,EAAIlB,YAAAA;wCAAcmB,cAAAA,EAAgB;AAAU,qCAAA;;AAE/D,8CAAAb,cAAA,CAACI,kBAAKW,OAAO,EAAA;oCAACC,KAAAA,EAAM,QAAA;8CACjBxB,aAAAA,CAAc;wCAAEoB,EAAAA,EAAIhB,WAAAA;wCAAaiB,cAAAA,EAAgB;AAAS,qCAAA;;;;;;8BAIjEb,cAAA,CAACiB,oBAAAA,EAAAA;oBAAQC,YAAAA,EAAc;;AACvB,8BAAAlB,cAAA,CAACI,kBAAKe,OAAO,EAAA;oBAACH,KAAAA,EAAM,SAAA;AAClB,oBAAA,QAAA,gBAAAhB,cAAA,CAACoB,2BAAAA,EAAAA;wBAAc/B,UAAAA,EAAYA;;;AAE7B,8BAAAW,cAAA,CAACI,kBAAKe,OAAO,EAAA;oBAACH,KAAAA,EAAM,QAAA;AAClB,oBAAA,QAAA,gBAAAhB,cAAA,CAACqB,iCAAAA,EAAAA,EAAAA;;;;;AAKX;;;;"}
|