{"version":3,"file":"index.cjs","sources":["../../../../src/components/markdown-input/index.tsx"],"sourcesContent":["import { useEditor, EditorContent } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport React, {\n    type ReactElement,\n    useCallback,\n    useEffect,\n    useId,\n    useState,\n} from \"react\";\n\nimport { MenuBar } from \"./menu-bar\";\nimport { type BaseInputProps, BaseInputWrapper } from \"../commons/input\";\nimport { mergedCva } from \"../../utils/components\";\n\nexport interface MarkdownInputProps\n    extends Omit<BaseInputProps<string>, \"onChange\" | \"id\"> {\n    id?: string;\n    onChange: (value: string) => void;\n}\n\nexport const markdownInputRootStyles = mergedCva([\n    \"cui-rounded-xxl\",\n    \"cui-border\",\n    \"cui-border-black\",\n    \"dark:cui-border-white\",\n    \"focus-within:cui-outline-none\",\n    \"focus-within:cui-border-orange\",\n    \"dark:focus-within:cui-border-orange\",\n]);\n\nexport const markdownInputContentStyles = mergedCva(\n    [\n        \"cui-rounded-b-xxl\",\n        \"cui-scrollbar\",\n        \"cui-h-44\",\n        \"cui-overflow-y-auto\",\n        \"cui-overflow-x-hidden\",\n        \"cui-p-3\",\n        \"cui-text-lg\",\n        \"cui-font-normal\",\n        \"cui-cursor-text\",\n        \"focus:cui-outline-none\",\n        \"cui-bg-white\",\n        \"dark:cui-bg-black\",\n    ],\n    {\n        variants: {\n            error: {\n                true: [\n                    \"cui-bg-red\",\n                    \"cui-bg-opacity-20\",\n                    \"dark:cui-bg-red\",\n                    \"dark:cui-bg-opacity-20\",\n                ],\n            },\n        },\n    },\n);\n\nexport const MarkdownInput = ({\n    id,\n    label,\n    error = false,\n    errorText,\n    info,\n    placeholder,\n    value,\n    onChange,\n    className,\n}: MarkdownInputProps): ReactElement => {\n    const generatedId = useId();\n\n    const resolvedId = id || generatedId;\n\n    const [focused, setFocused] = useState(false);\n    const [localValue, setLocalValue] = useState(value);\n\n    const editor = useEditor(\n        {\n            content: value,\n            extensions: [\n                StarterKit.configure({}),\n                Placeholder.configure({\n                    placeholder,\n                    emptyEditorClass:\n                        \"before:cui-content-[attr(data-placeholder)] before:cui-absolute before:cui-opacity-30 cui-font-mono dark:before:cui-opacity-20 cui-text-base cui-font-normal\",\n                }),\n            ],\n            editorProps: {\n                attributes: {\n                    class: \"cui-prose cui-prose-base focus:cui-outline-none prose-p:cui-font-mono prose-li:cui-font-mono prose-a:cui-font-mono cui-h-full dark:cui-prose-invert prose-pre:dark:cui-bg-gray-700\",\n                },\n            },\n            onUpdate: ({ editor }) => {\n                setLocalValue(editor.getHTML());\n            },\n        },\n        [],\n    );\n\n    useEffect(() => {\n        if (!onChange || typeof localValue !== \"string\" || localValue === value)\n            return;\n        onChange(localValue as string);\n    }, [localValue, onChange, value]);\n\n    const handleFocus = useCallback(() => {\n        setFocused(true);\n    }, []);\n\n    const handleBlur = useCallback(() => {\n        setFocused(false);\n    }, []);\n\n    return (\n        <BaseInputWrapper\n            id={resolvedId}\n            label={label}\n            error={error}\n            errorText={errorText}\n            info={info}\n            className={{ ...className }}\n        >\n            <div\n                className={markdownInputRootStyles({\n                    className: className?.input,\n                })}\n                onFocus={handleFocus}\n                onBlur={handleBlur}\n            >\n                <MenuBar editor={editor} focused={focused} />\n                <EditorContent\n                    id={resolvedId}\n                    className={markdownInputContentStyles({ error })}\n                    editor={editor}\n                />\n            </div>\n        </BaseInputWrapper>\n    );\n};\n"],"names":["mergedCva","useId","useState","useEditor","StarterKit","Placeholder","editor","useEffect","useCallback","BaseInputWrapper","MenuBar","EditorContent"],"mappings":"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"}