{"version":3,"file":"Field.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/Wysiwyg/Field.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useField, useStrapiApp, type InputProps } from '@strapi/admin/strapi-admin';\nimport { Field, Flex } from '@strapi/design-system';\nimport { EditorFromTextArea } from 'codemirror5';\n\nimport { prefixFileUrlWithBackendUrl } from '../../../../../utils/urls';\n\nimport { Editor, EditorApi } from './Editor';\nimport { EditorLayout } from './EditorLayout';\nimport { insertFile } from './utils/utils';\nimport { WysiwygFooter } from './WysiwygFooter';\nimport { WysiwygNav } from './WysiwygNav';\n\nimport type { Schema } from '@strapi/types';\n\ninterface WysiwygProps extends Omit<InputProps, 'type'> {\n  labelAction?: React.ReactNode;\n  type: Schema.Attribute.RichText['type'];\n}\n\nconst Wysiwyg = React.forwardRef<EditorApi, WysiwygProps>(\n  ({ hint, disabled, label, name, placeholder, required, labelAction }, forwardedRef) => {\n    const field = useField(name);\n    const textareaRef = React.useRef<HTMLTextAreaElement>(null);\n    const editorRef = React.useRef<EditorFromTextArea>(\n      null\n    ) as React.MutableRefObject<EditorFromTextArea>;\n    const [isPreviewMode, setIsPreviewMode] = React.useState(false);\n    const [mediaLibVisible, setMediaLibVisible] = React.useState(false);\n    const [isExpandMode, setIsExpandMode] = React.useState(false);\n    const components = useStrapiApp('ImageDialog', (state) => state.components);\n\n    const MediaLibraryDialog = components['media-library'];\n\n    const handleToggleMediaLib = () => setMediaLibVisible((prev) => !prev);\n    const handleTogglePreviewMode = () => setIsPreviewMode((prev) => !prev);\n    const handleToggleExpand = () => {\n      setIsPreviewMode(false);\n      setIsExpandMode((prev) => !prev);\n    };\n\n    const handleSelectAssets = (files: any[]) => {\n      const formattedFiles = files.map((f) => ({\n        alt: f.alternativeText || f.name,\n        url: prefixFileUrlWithBackendUrl(f.url),\n        mime: f.mime,\n      }));\n\n      insertFile(editorRef, formattedFiles);\n      setMediaLibVisible(false);\n    };\n\n    return (\n      <Field.Root name={name} hint={hint} error={field.error} required={required}>\n        <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n          <Field.Label action={labelAction}>{label}</Field.Label>\n          <EditorLayout\n            isExpandMode={isExpandMode}\n            error={field.error}\n            previewContent={field.value}\n            onCollapse={handleToggleExpand}\n          >\n            <WysiwygNav\n              isExpandMode={isExpandMode}\n              editorRef={editorRef}\n              isPreviewMode={isPreviewMode}\n              onToggleMediaLib={handleToggleMediaLib}\n              onTogglePreviewMode={isExpandMode ? undefined : handleTogglePreviewMode}\n              disabled={disabled}\n            />\n\n            <Editor\n              disabled={disabled}\n              isExpandMode={isExpandMode}\n              editorRef={editorRef}\n              error={field.error}\n              isPreviewMode={isPreviewMode}\n              name={name}\n              onChange={field.onChange}\n              placeholder={placeholder}\n              textareaRef={textareaRef}\n              value={field.value}\n              ref={forwardedRef}\n            />\n\n            {!isExpandMode && <WysiwygFooter onToggleExpand={handleToggleExpand} />}\n          </EditorLayout>\n          <Field.Hint />\n          <Field.Error />\n        </Flex>\n        {mediaLibVisible && (\n          // @ts-expect-error – TODO: fix this way of injecting because it's not really typeable without a registry.\n          <MediaLibraryDialog onClose={handleToggleMediaLib} onSelectAssets={handleSelectAssets} />\n        )}\n      </Field.Root>\n    );\n  }\n);\n\nconst MemoizedWysiwyg = React.memo(Wysiwyg);\n\nexport { MemoizedWysiwyg as Wysiwyg };\nexport type { WysiwygProps };\n"],"names":["Wysiwyg","React","forwardRef","hint","disabled","label","name","placeholder","required","labelAction","forwardedRef","field","useField","textareaRef","useRef","editorRef","isPreviewMode","setIsPreviewMode","useState","mediaLibVisible","setMediaLibVisible","isExpandMode","setIsExpandMode","components","useStrapiApp","state","MediaLibraryDialog","handleToggleMediaLib","prev","handleTogglePreviewMode","handleToggleExpand","handleSelectAssets","files","formattedFiles","map","f","alt","alternativeText","url","prefixFileUrlWithBackendUrl","mime","insertFile","_jsxs","Field","Root","error","Flex","direction","alignItems","gap","_jsx","Label","action","EditorLayout","previewContent","value","onCollapse","WysiwygNav","onToggleMediaLib","onTogglePreviewMode","undefined","Editor","onChange","ref","WysiwygFooter","onToggleExpand","Hint","Error","onClose","onSelectAssets","MemoizedWysiwyg","memo"],"mappings":"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"}