{"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, useIsMobile, type InputProps } from '@strapi/admin/strapi-admin';\nimport { Box, 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, WysiwygPreviewToggleButton } 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\ntype SelectedAsset = {\n  alternativeText?: string | null;\n  name: string;\n  url: string;\n  mime: string;\n};\n\nconst Wysiwyg = React.forwardRef<EditorApi, WysiwygProps>(\n  ({ hint, disabled, label, name, placeholder, required, labelAction }, forwardedRef) => {\n    const field = useField<string>(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 isMobile = useIsMobile();\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: SelectedAsset[]) => {\n      const formattedFiles = files.map((f) => ({\n        alt: f.alternativeText || f.name,\n        url: prefixFileUrlWithBackendUrl(f.url) ?? 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            <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            {!isExpandMode && !isMobile && <WysiwygFooter onToggleExpand={handleToggleExpand} />}\n            {isMobile && (\n              <Box position=\"absolute\" bottom={0} right={0} left={0} pointerEvents=\"none\">\n                <Flex justifyContent=\"flex-end\" padding={4}>\n                  <Box pointerEvents=\"auto\" display=\"inline-flex\">\n                    <WysiwygPreviewToggleButton\n                      isPreviewMode={isPreviewMode}\n                      onTogglePreviewMode={handleTogglePreviewMode}\n                    />\n                  </Box>\n                </Flex>\n              </Box>\n            )}\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","isMobile","useIsMobile","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","Box","position","bottom","right","left","pointerEvents","justifyContent","padding","display","WysiwygPreviewToggleButton","Hint","Error","onClose","onSelectAssets","MemoizedWysiwyg","memo"],"mappings":"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"}