dishui 0.0.64 → 0.0.65
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/components/Badge/index.js +12 -9
- package/dist/components/Badge/index.js.map +1 -1
- package/dist/components/Button/index.js +43 -40
- package/dist/components/Button/index.js.map +1 -1
- package/dist/components/Card/index.d.ts +11 -0
- package/dist/components/Card/index.js +62 -37
- package/dist/components/Card/index.js.map +1 -1
- package/dist/components/Chart/Chart.js.map +1 -1
- package/dist/components/Checkbox/index.js +32 -30
- package/dist/components/Checkbox/index.js.map +1 -1
- package/dist/components/Demo/index.js.map +1 -1
- package/dist/components/EmptyState/index.d.ts +4 -1
- package/dist/components/EmptyState/index.js +3 -3
- package/dist/components/EmptyState/index.js.map +1 -1
- package/dist/components/FileUploader/DropZone.js.map +1 -1
- package/dist/components/FileUploader/FileItem.js.map +1 -1
- package/dist/components/FileUploader/FileUploader.js.map +1 -1
- package/dist/components/FileUploader/UploadQueue.js.map +1 -1
- package/dist/components/Input/index.js +30 -30
- package/dist/components/Input/index.js.map +1 -1
- package/dist/components/Label/index.js +41 -40
- package/dist/components/Label/index.js.map +1 -1
- package/dist/components/List/index.js +47 -32
- package/dist/components/List/index.js.map +1 -1
- package/dist/components/Markdown/Markdown.js +61 -57
- package/dist/components/Markdown/Markdown.js.map +1 -1
- package/dist/components/Markdown/markdownComponents.js +49 -49
- package/dist/components/Markdown/markdownComponents.js.map +1 -1
- package/dist/components/Modal/index.d.ts +7 -3
- package/dist/components/Modal/index.js +77 -65
- package/dist/components/Modal/index.js.map +1 -1
- package/dist/components/Page/index.d.ts +58 -0
- package/dist/components/Page/index.js +74 -0
- package/dist/components/Page/index.js.map +1 -0
- package/dist/components/PageHeader/index.js.map +1 -1
- package/dist/components/Select/index.js +0 -3
- package/dist/components/Select/index.js.map +1 -1
- package/dist/components/SidebarToggleButton/index.js.map +1 -1
- package/dist/components/StatCard/index.d.ts +3 -1
- package/dist/components/StatCard/index.js +39 -11
- package/dist/components/StatCard/index.js.map +1 -1
- package/dist/components/Table/index.js +103 -85
- package/dist/components/Table/index.js.map +1 -1
- package/dist/components/Tabs/index.d.ts +19 -5
- package/dist/components/Tabs/index.js +32 -13
- package/dist/components/Tabs/index.js.map +1 -1
- package/dist/components/Tree/Tree.js.map +1 -1
- package/dist/components/pro/ArticleContextMenu/index.js.map +1 -1
- package/dist/components/pro/ArticleControl/ArticleControl2.js.map +1 -1
- package/dist/components/pro/CodeEditor/editors/CodeEditor.js +141 -134
- package/dist/components/pro/CodeEditor/editors/CodeEditor.js.map +1 -1
- package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js +81 -78
- package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js.map +1 -1
- package/dist/components/pro/CodeEditor/panels/FootnotePanel.js.map +1 -1
- package/dist/components/pro/CodeEditor/panels/HistoryPanel.js.map +1 -1
- package/dist/components/pro/CodeEditor/panels/OutlinePanel.js.map +1 -1
- package/dist/components/pro/CodeEditor/panels/TableOfContentsPanel.js.map +1 -1
- package/dist/components/pro/CodeEditor/panels/VariablePanel.js.map +1 -1
- package/dist/components/pro/CodeEditor/themes.js +59 -59
- package/dist/components/pro/CodeEditor/themes.js.map +1 -1
- package/dist/components/pro/DataTable/DataTable.js +49 -48
- package/dist/components/pro/DataTable/DataTable.js.map +1 -1
- package/dist/components/pro/DataTable/Filters.js +42 -42
- package/dist/components/pro/DataTable/Filters.js.map +1 -1
- package/dist/components/pro/DataTable/PivotPanel.js.map +1 -1
- package/dist/components/pro/DataTable/PivotView.js +35 -32
- package/dist/components/pro/DataTable/PivotView.js.map +1 -1
- package/dist/components/pro/DataTable/components/BulkActions.js.map +1 -1
- package/dist/components/pro/DataTable/components/ColumnSelector.js.map +1 -1
- package/dist/components/pro/DataTable/components/FilterBar.js.map +1 -1
- package/dist/components/pro/DataTable/components/TableBody.js.map +1 -1
- package/dist/components/pro/DataTable/components/TableHeader.js.map +1 -1
- package/dist/components/pro/DataTable/components/TablePagination.js.map +1 -1
- package/dist/components/pro/DataTable/components/TableToolbar.js.map +1 -1
- package/dist/components/pro/DataTable/pivotExtension.js.map +1 -1
- package/dist/components/pro/DataTable/rowDetailExtension.js.map +1 -1
- package/dist/components/pro/DataTable/tanstack-table.js +37 -37
- package/dist/components/pro/DataTable/tanstack-table.js.map +1 -1
- package/dist/components/pro/FileExplorer/Breadcrumb.js +53 -53
- package/dist/components/pro/FileExplorer/Breadcrumb.js.map +1 -1
- package/dist/components/pro/FileExplorer/CreateDialog.js.map +1 -1
- package/dist/components/pro/FileExplorer/FileExplorer.js.map +1 -1
- package/dist/components/pro/FileExplorer/FileIcon.js +22 -22
- package/dist/components/pro/FileExplorer/FileIcon.js.map +1 -1
- package/dist/components/pro/FileExplorer/GridView.js.map +1 -1
- package/dist/components/pro/FileExplorer/ListView.js.map +1 -1
- package/dist/components/pro/FileExplorer/Toolbar.js.map +1 -1
- package/dist/components/pro/Flow/Flow.js +496 -494
- package/dist/components/pro/Flow/Flow.js.map +1 -1
- package/dist/components/pro/Flow/FlowCanvas.js +916 -917
- package/dist/components/pro/Flow/FlowCanvas.js.map +1 -1
- package/dist/components/pro/Flow/context/FlowUIContext.js.map +1 -1
- package/dist/components/pro/Flow/edges/EdgeRenderer.js +59 -59
- package/dist/components/pro/Flow/edges/EdgeRenderer.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useClipboard.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useDeleteSelection.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useEdgeMutations.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useLayoutActions.js +9 -11
- package/dist/components/pro/Flow/hooks/useLayoutActions.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useLineMutations.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useMindMap.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useNodeMutations.js.map +1 -1
- package/dist/components/pro/Flow/lines/FreehandTool.js +9 -9
- package/dist/components/pro/Flow/lines/FreehandTool.js.map +1 -1
- package/dist/components/pro/Flow/lines/LineRenderer.js +5 -5
- package/dist/components/pro/Flow/lines/LineRenderer.js.map +1 -1
- package/dist/components/pro/Flow/nodes/DataNodeView.js +113 -93
- package/dist/components/pro/Flow/nodes/DataNodeView.js.map +1 -1
- package/dist/components/pro/Flow/nodes/MediaContent.js.map +1 -1
- package/dist/components/pro/Flow/nodes/MediaOverlay.js.map +1 -1
- package/dist/components/pro/Flow/nodes/Model3DView.js +1 -1
- package/dist/components/pro/Flow/nodes/Model3DView.js.map +1 -1
- package/dist/components/pro/Flow/nodes/NodeRenderer.js +118 -118
- package/dist/components/pro/Flow/nodes/NodeRenderer.js.map +1 -1
- package/dist/components/pro/Flow/nodes/dataUtils.js.map +1 -1
- package/dist/components/pro/Flow/nodes/shapes.js +1 -3
- package/dist/components/pro/Flow/nodes/shapes.js.map +1 -1
- package/dist/components/pro/Flow/panels/AIPanel.js.map +1 -1
- package/dist/components/pro/Flow/panels/Breadcrumb.js.map +1 -1
- package/dist/components/pro/Flow/panels/ContextMenu.js.map +1 -1
- package/dist/components/pro/Flow/panels/DataInspectorSection.js.map +1 -1
- package/dist/components/pro/Flow/panels/ExpandableTextarea.js.map +1 -1
- package/dist/components/pro/Flow/panels/FlowPanelGroup.js.map +1 -1
- package/dist/components/pro/Flow/panels/FlowToolbar.js +97 -97
- package/dist/components/pro/Flow/panels/FlowToolbar.js.map +1 -1
- package/dist/components/pro/Flow/panels/InspectorPanel.js +57 -57
- package/dist/components/pro/Flow/panels/InspectorPanel.js.map +1 -1
- package/dist/components/pro/Flow/panels/OutlinePanel.js +26 -22
- package/dist/components/pro/Flow/panels/OutlinePanel.js.map +1 -1
- package/dist/components/pro/Flow/panels/PresentationMode.js +18 -16
- package/dist/components/pro/Flow/panels/PresentationMode.js.map +1 -1
- package/dist/components/pro/Flow/panels/ProjectTitle.js.map +1 -1
- package/dist/components/pro/Flow/panels/ShapePalette.js +109 -104
- package/dist/components/pro/Flow/panels/ShapePalette.js.map +1 -1
- package/dist/components/pro/Flow/panels/toolbarIcons.js.map +1 -1
- package/dist/components/pro/RichTextEditor/AIRewrite.js.map +1 -1
- package/dist/components/pro/RichTextEditor/BlockHandle.js.map +1 -1
- package/dist/components/pro/RichTextEditor/BubbleToolbar.js.map +1 -1
- package/dist/components/pro/RichTextEditor/CommentDialog.js.map +1 -1
- package/dist/components/pro/RichTextEditor/CommentPanel.js.map +1 -1
- package/dist/components/pro/RichTextEditor/CommentPopover.js.map +1 -1
- package/dist/components/pro/RichTextEditor/ContextMenu.js.map +1 -1
- package/dist/components/pro/RichTextEditor/RichTextEditor.js.map +1 -1
- package/dist/components/pro/RichTextEditor/SlashMenu.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/SelectDropdown.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/CodeBlockView.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/FloatingDialog.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/MarkdownBlock.js.map +1 -1
- package/dist/contexts/AppContext.js.map +1 -1
- package/dist/dishui.css +1 -1
- package/dist/hooks/useTableColumns.js +7 -8
- package/dist/hooks/useTableColumns.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +227 -221
- package/dist/layouts/MainLayout.js +22 -22
- package/dist/layouts/MainLayout.js.map +1 -1
- package/dist/layouts/Navbar.js.map +1 -1
- package/dist/layouts/Sidebar.js +94 -73
- package/dist/layouts/Sidebar.js.map +1 -1
- package/dist/layouts/headbar/Headbar.js.map +1 -1
- package/dist/layouts/headbar/HeadbarLangSwitcher.js.map +1 -1
- package/dist/layouts/headbar/HeadbarSearch.js.map +1 -1
- package/dist/layouts/headbar/HeadbarThemeSwitcher.js +11 -11
- package/dist/layouts/headbar/HeadbarThemeSwitcher.js.map +1 -1
- package/dist/layouts/headbar/HeadbarTitle.js.map +1 -1
- package/dist/utils/i18n.js +10 -10
- package/dist/utils/i18n.js.map +1 -1
- package/dist/utils/menu.js.map +1 -1
- package/dist/utils/routerBuilder.js +17 -15
- package/dist/utils/routerBuilder.js.map +1 -1
- package/dist/utils/themes.js.map +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toolbar.js","names":[],"sources":["../../../../../src/components/pro/RichTextEditor/Toolbar/Toolbar.tsx"],"sourcesContent":["import React, { useCallback, useState, useEffect } from 'react';\nimport type { Editor } from '@tiptap/react';\nimport type { ToolbarSection, RichTextEditorLabels } from '../types';\nimport { defaultLabels } from '../types';\nimport { getNextFloatZIndex } from '../extensions/FloatingDialog';\nimport { ToolbarButton, ToolbarDivider } from './ToolbarButton';\nimport { ColorPicker } from './ColorPicker';\nimport { SelectDropdown, FONT_FAMILIES, FONT_SIZES } from './SelectDropdown';\nimport { MarkdownTemplateMenu } from './MarkdownTemplates';\nimport { FloatingDialogMenu } from './FloatingDialogMenu';\nimport { TableOpsMenu } from './TableOpsMenu';\n\ninterface ToolbarProps {\n editor: Editor;\n config?: ToolbarSection;\n labels?: RichTextEditorLabels;\n hasAI?: boolean;\n onAIClick?: () => void;\n onFormatPainterChange?: (active: boolean) => void;\n children?: React.ReactNode;\n}\n\nconst Toolbar: React.FC<ToolbarProps> = ({\n editor,\n config,\n labels: propsLabels,\n hasAI,\n onAIClick,\n onFormatPainterChange,\n children,\n}) => {\n const labels = { ...defaultLabels, ...propsLabels };\n const [formatPainterMarks, setFormatPainterMarks] = useState<Record<string, unknown>[] | null>(null);\n\n const cfg: Required<ToolbarSection> = {\n textFormat: config?.textFormat ?? true,\n heading: config?.heading ?? true,\n alignment: config?.alignment ?? true,\n list: config?.list ?? true,\n insert: config?.insert ?? true,\n color: config?.color ?? true,\n history: config?.history ?? true,\n ai: config?.ai ?? true,\n tableOps: config?.tableOps ?? true,\n fontStyle: config?.fontStyle ?? true,\n formatPainter: config?.formatPainter ?? true,\n };\n\n const setLink = useCallback(() => {\n const previousUrl = editor.getAttributes('link').href;\n const url = window.prompt(labels.insertLinkUrl, previousUrl);\n if (url === null) return;\n if (url === '') {\n editor.chain().focus().extendMarkRange('link').unsetLink().run();\n return;\n }\n editor.chain().focus().extendMarkRange('link').setLink({ href: url }).run();\n }, [editor, labels.insertLinkUrl]);\n\n const addImage = useCallback(() => {\n const url = window.prompt(labels.insertImageUrl);\n if (url) {\n editor.chain().focus().setImage({ src: url }).run();\n }\n }, [editor, labels.insertImageUrl]);\n\n const insertTable = useCallback(() => {\n editor.chain().focus().insertTable({ rows: 3, cols: 3, withHeaderRow: true }).run();\n }, [editor]);\n\n const insertMarkdownBlock = useCallback(() => {\n editor.chain().focus().insertContent({\n type: 'codeBlock',\n attrs: { language: 'r-markdown' },\n content: [{ type: 'text', text: '# Markdown\\n\\nWrite your **markdown** here.' }],\n }).run();\n }, [editor]);\n\n const insertMarkdownTemplate = useCallback((content: string) => {\n editor.chain().focus().insertContent({\n type: 'codeBlock',\n attrs: { language: 'r-markdown' },\n content: [{ type: 'text', text: content }],\n }).run();\n }, [editor]);\n\n const insertFloatingDialog = useCallback((layout: 'block' | 'wrap-left' | 'wrap-right' | 'float' = 'block') => {\n const extraAttrs = layout === 'float'\n ? { x: 40, y: 40, zIndex: getNextFloatZIndex(editor) }\n : layout === 'block'\n ? {}\n : { width: 240 };\n editor.chain().focus().insertContent({\n type: 'floatingDialog',\n attrs: { title: 'Note', layout, ...extraAttrs },\n content: [{ type: 'paragraph' }],\n }).run();\n }, [editor]);\n\n const handleFormatPainter = useCallback(() => {\n if (formatPainterMarks) {\n setFormatPainterMarks(null);\n onFormatPainterChange?.(false);\n return;\n }\n const { from, to } = editor.state.selection;\n if (from === to) return;\n\n const marks: Record<string, unknown>[] = [];\n editor.state.doc.nodesBetween(from, to, (node) => {\n if (node.marks) {\n node.marks.forEach((mark) => {\n marks.push({ type: mark.type.name, attrs: mark.attrs });\n });\n }\n });\n setFormatPainterMarks(marks);\n onFormatPainterChange?.(true);\n }, [editor, formatPainterMarks, onFormatPainterChange]);\n\n useEffect(() => {\n if (!formatPainterMarks) return;\n\n const editorEl = editor.view.dom;\n\n const applyMarks = () => {\n const { from, to } = editor.state.selection;\n if (from === to || !formatPainterMarks) return;\n\n const { tr } = editor.state;\n tr.removeMark(from, to);\n for (const mark of formatPainterMarks) {\n const markType = editor.schema.marks[mark.type as string];\n if (markType) {\n tr.addMark(from, to, markType.create(mark.attrs as Record<string, unknown>));\n }\n }\n editor.view.dispatch(tr);\n\n setFormatPainterMarks(null);\n onFormatPainterChange?.(false);\n };\n\n const onMouseUp = () => {\n requestAnimationFrame(applyMarks);\n };\n\n editorEl.addEventListener('mouseup', onMouseUp);\n return () => { editorEl.removeEventListener('mouseup', onMouseUp); };\n }, [editor, formatPainterMarks, onFormatPainterChange]);\n\n const currentFontFamily = editor.getAttributes('textStyle').fontFamily || '';\n const currentFontSize = editor.getAttributes('textStyle').fontSize || '';\n\n return (\n <div className=\"rte-toolbar\">\n {cfg.history && (\n <>\n <ToolbarButton\n onClick={() => editor.chain().focus().undo().run()}\n disabled={!editor.can().undo()}\n title={labels.undo}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"1 4 1 10 7 10\" />\n <path d=\"M3.51 15a9 9 0 102.13-9.36L1 10\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().redo().run()}\n disabled={!editor.can().redo()}\n title={labels.redo}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"23 4 23 10 17 10\" />\n <path d=\"M20.49 15a9 9 0 11-2.13-9.36L23 10\" />\n </svg>\n </ToolbarButton>\n <ToolbarDivider />\n </>\n )}\n\n {cfg.fontStyle && (\n <>\n <SelectDropdown\n value={currentFontFamily}\n options={FONT_FAMILIES}\n onChange={(val) => {\n if (val) {\n editor.chain().focus().setFontFamily(val).run();\n } else {\n editor.chain().focus().unsetFontFamily().run();\n }\n }}\n title={labels.fontFamily}\n width={120}\n />\n <SelectDropdown\n value={currentFontSize}\n options={FONT_SIZES}\n onChange={(val) => {\n if (val) {\n (editor.chain().focus() as any).setFontSize(val).run();\n } else {\n (editor.chain().focus() as any).unsetFontSize().run();\n }\n }}\n title={labels.fontSize}\n width={80}\n />\n <ToolbarDivider />\n </>\n )}\n\n {cfg.textFormat && (\n <>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleBold().run()}\n isActive={editor.isActive('bold')}\n title={labels.bold}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M6 4h8a4 4 0 014 4 4 4 0 01-4 4H6z\" />\n <path d=\"M6 12h9a4 4 0 014 4 4 4 0 01-4 4H6z\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleItalic().run()}\n isActive={editor.isActive('italic')}\n title={labels.italic}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"19\" y1=\"4\" x2=\"10\" y2=\"4\" />\n <line x1=\"14\" y1=\"20\" x2=\"5\" y2=\"20\" />\n <line x1=\"15\" y1=\"4\" x2=\"9\" y2=\"20\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleUnderline().run()}\n isActive={editor.isActive('underline')}\n title={labels.underline}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M6 3v7a6 6 0 006 6 6 6 0 006-6V3\" />\n <line x1=\"4\" y1=\"21\" x2=\"20\" y2=\"21\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleStrike().run()}\n isActive={editor.isActive('strike')}\n title={labels.strikethrough}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M17.3 4.9c-2.3-.6-4.4-1-6.2-.9-2.7 0-5.3.7-5.3 3.6 0 1.5 1.8 3.3 7.2 3.3\" />\n <path d=\"M13 15.1c0 2.8-2.6 3.6-5.3 3.6-1.8-.1-3.9-.5-6.2-.9\" />\n <line x1=\"4\" y1=\"12\" x2=\"20\" y2=\"12\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleSubscript().run()}\n isActive={editor.isActive('subscript')}\n title={labels.subscript}\n >\n <span style={{ fontSize: '13px', fontWeight: 600 }}>X<sub style={{ fontSize: '9px' }}>2</sub></span>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleSuperscript().run()}\n isActive={editor.isActive('superscript')}\n title={labels.superscript}\n >\n <span style={{ fontSize: '13px', fontWeight: 600 }}>X<sup style={{ fontSize: '9px' }}>2</sup></span>\n </ToolbarButton>\n {cfg.formatPainter && (\n <ToolbarButton\n onClick={handleFormatPainter}\n isActive={!!formatPainterMarks}\n title={formatPainterMarks ? labels.formatPainterActive : labels.formatPainter}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M19 3H5a2 2 0 00-2 2v2a2 2 0 002 2h14a2 2 0 002-2V5a2 2 0 00-2-2z\" />\n <path d=\"M10 7v4a2 2 0 01-2 2H7\" />\n <path d=\"M7 13l-3 8\" />\n <path d=\"M4 21h6\" />\n </svg>\n </ToolbarButton>\n )}\n <ToolbarDivider />\n </>\n )}\n\n {cfg.heading && (\n <>\n {([1, 2, 3, 4, 5, 6] as const).map((level) => (\n <ToolbarButton\n key={level}\n onClick={() => editor.chain().focus().toggleHeading({ level }).run()}\n isActive={editor.isActive('heading', { level })}\n title={`${labels.heading} ${level}`}\n >\n <span style={{ fontSize: '12px', fontWeight: 700 }}>H{level}</span>\n </ToolbarButton>\n ))}\n <ToolbarDivider />\n </>\n )}\n\n {cfg.alignment && (\n <>\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign('left').run()}\n isActive={editor.isActive({ textAlign: 'left' })}\n title={labels.alignLeft}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"17\" y1=\"10\" x2=\"3\" y2=\"10\" /><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\" />\n <line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\" /><line x1=\"17\" y1=\"18\" x2=\"3\" y2=\"18\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign('center').run()}\n isActive={editor.isActive({ textAlign: 'center' })}\n title={labels.alignCenter}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"10\" x2=\"6\" y2=\"10\" /><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\" />\n <line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\" /><line x1=\"18\" y1=\"18\" x2=\"6\" y2=\"18\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign('right').run()}\n isActive={editor.isActive({ textAlign: 'right' })}\n title={labels.alignRight}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"21\" y1=\"10\" x2=\"7\" y2=\"10\" /><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\" />\n <line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\" /><line x1=\"21\" y1=\"18\" x2=\"7\" y2=\"18\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign('justify').run()}\n isActive={editor.isActive({ textAlign: 'justify' })}\n title={labels.alignJustify}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"21\" y1=\"10\" x2=\"3\" y2=\"10\" /><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\" />\n <line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\" /><line x1=\"21\" y1=\"18\" x2=\"3\" y2=\"18\" />\n </svg>\n </ToolbarButton>\n <ToolbarDivider />\n </>\n )}\n\n {cfg.list && (\n <>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n isActive={editor.isActive('bulletList')}\n title={labels.bulletList}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\" /><line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\" />\n <circle cx=\"4\" cy=\"6\" r=\"1\" fill=\"currentColor\" /><circle cx=\"4\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"4\" cy=\"18\" r=\"1\" fill=\"currentColor\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleOrderedList().run()}\n isActive={editor.isActive('orderedList')}\n title={labels.orderedList}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"10\" y1=\"6\" x2=\"21\" y2=\"6\" /><line x1=\"10\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"10\" y1=\"18\" x2=\"21\" y2=\"18\" />\n <text x=\"2\" y=\"8\" fontSize=\"8\" fill=\"currentColor\" stroke=\"none\" fontWeight=\"bold\">1</text>\n <text x=\"2\" y=\"14\" fontSize=\"8\" fill=\"currentColor\" stroke=\"none\" fontWeight=\"bold\">2</text>\n <text x=\"2\" y=\"20\" fontSize=\"8\" fill=\"currentColor\" stroke=\"none\" fontWeight=\"bold\">3</text>\n </svg>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleTaskList().run()}\n isActive={editor.isActive('taskList')}\n title={labels.taskList}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"5\" width=\"6\" height=\"6\" rx=\"1\" /><path d=\"M5 8l1.5 1.5L9 6.5\" />\n <line x1=\"12\" y1=\"8\" x2=\"21\" y2=\"8\" />\n <rect x=\"3\" y=\"14\" width=\"6\" height=\"6\" rx=\"1\" />\n <line x1=\"12\" y1=\"17\" x2=\"21\" y2=\"17\" />\n </svg>\n </ToolbarButton>\n <ToolbarDivider />\n </>\n )}\n\n {cfg.insert && (\n <>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleBlockquote().run()}\n isActive={editor.isActive('blockquote')}\n title={labels.blockquote}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V21z\" />\n <path d=\"M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3z\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleNode('codeBlock', 'paragraph').run()}\n isActive={editor.isActive('codeBlock')}\n title={labels.codeBlock}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"16 18 22 12 16 6\" /><polyline points=\"8 6 2 12 8 18\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => {\n editor.chain().focus().insertContent({\n type: 'codeBlock',\n attrs: { language: 'r-mermaid' },\n content: [{ type: 'text', text: 'graph TD\\n A[Start] --> B[End]' }],\n }).run();\n }}\n title={labels.mermaidBlock}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"6\" cy=\"6\" r=\"3\" /><circle cx=\"18\" cy=\"6\" r=\"3\" />\n <circle cx=\"12\" cy=\"18\" r=\"3\" />\n <line x1=\"6\" y1=\"9\" x2=\"12\" y2=\"15\" /><line x1=\"18\" y1=\"9\" x2=\"12\" y2=\"15\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton onClick={setLink} isActive={editor.isActive('link')} title={labels.link}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71\" />\n <path d=\"M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton onClick={addImage} title={labels.image}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" /><polyline points=\"21 15 16 10 5 21\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton onClick={insertTable} title={labels.table}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n <line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\" /><line x1=\"3\" y1=\"15\" x2=\"21\" y2=\"15\" />\n <line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\" /><line x1=\"15\" y1=\"3\" x2=\"15\" y2=\"21\" />\n </svg>\n </ToolbarButton>\n {cfg.tableOps && <TableOpsMenu editor={editor} labels={labels} />}\n <ToolbarButton\n onClick={() => editor.chain().focus().setHorizontalRule().run()}\n title={labels.horizontalRule}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\">\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton onClick={insertMarkdownBlock} title={labels.markdownBlock}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M2 3h20v18H2z\" />\n <path d=\"M5 15V9l3 3.5L11 9v6\" />\n <path d=\"M17 9l-2.5 3H17v3\" />\n </svg>\n </ToolbarButton>\n <MarkdownTemplateMenu labels={labels} onSelect={insertMarkdownTemplate} />\n <FloatingDialogMenu labels={labels} onInsert={insertFloatingDialog} />\n <ToolbarDivider />\n </>\n )}\n\n {cfg.color && (\n <>\n <ColorPicker\n value={editor.getAttributes('textStyle').color || ''}\n onChange={(color) => {\n if (color) {\n editor.chain().focus().setColor(color).run();\n } else {\n editor.chain().focus().unsetColor().run();\n }\n }}\n title={labels.color}\n icon={\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 2L2 22h20L12 2z\" />\n </svg>\n }\n />\n <ColorPicker\n value={editor.getAttributes('highlight').color || ''}\n onChange={(color) => {\n if (color) {\n editor.chain().focus().toggleHighlight({ color }).run();\n } else {\n editor.chain().focus().unsetHighlight().run();\n }\n }}\n title={labels.highlight}\n icon={\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 20h9\" /><path d=\"M16.5 3.5a2.121 2.121 0 013 3L7 19l-4 1 1-4L16.5 3.5z\" />\n </svg>\n }\n />\n <ToolbarDivider />\n </>\n )}\n\n {cfg.ai && hasAI && onAIClick && (\n <ToolbarButton onClick={onAIClick} title={labels.ai}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M9.5 2A2.5 2.5 0 0112 4.5v15a2.5 2.5 0 01-4.96.44 2.5 2.5 0 01-2.96-3.08 3 3 0 01-.34-5.58 2.5 2.5 0 011.32-4.24 2.5 2.5 0 011.98-3A2.5 2.5 0 019.5 2z\" />\n <path d=\"M14.5 2A2.5 2.5 0 0012 4.5v15a2.5 2.5 0 004.96.44 2.5 2.5 0 002.96-3.08 3 3 0 00.34-5.58 2.5 2.5 0 00-1.32-4.24 2.5 2.5 0 00-1.98-3A2.5 2.5 0 0014.5 2z\" />\n </svg>\n </ToolbarButton>\n )}\n\n {children}\n </div>\n );\n};\n\nexport default Toolbar;\n"],"mappings":";;;;;;;;;;AAsBA,IAAM,KAAA,CAAmC,EACvC,QAAA,GACA,QAAA,GACA,QAAQ,GACR,OAAA,GACA,WAAA,GACA,uBAAA,GACA,UAAA,EAAA,MACI;AACJ,QAAM,IAAS;AAAA,IAAE,GAAG;AAAA,IAAe,GAAG;AAAA,EAAY,GAC5C,CAAC,GAAoB,CAAA,IAAyB,EAA2C,IAAI,GAE7F,IAAgC;AAAA,IACpC,YAAY,GAAQ,cAAc;AAAA,IAClC,SAAS,GAAQ,WAAW;AAAA,IAC5B,WAAW,GAAQ,aAAa;AAAA,IAChC,MAAM,GAAQ,QAAQ;AAAA,IACtB,QAAQ,GAAQ,UAAU;AAAA,IAC1B,OAAO,GAAQ,SAAS;AAAA,IACxB,SAAS,GAAQ,WAAW;AAAA,IAC5B,IAAI,GAAQ,MAAM;AAAA,IAClB,UAAU,GAAQ,YAAY;AAAA,IAC9B,WAAW,GAAQ,aAAa;AAAA,IAChC,eAAe,GAAQ,iBAAiB;AAAA,EAC1C,GAEM,IAAU,EAAA,MAAkB;AAChC,UAAM,IAAc,EAAO,cAAc,MAAM,EAAE,MAC3C,IAAM,OAAO,OAAO,EAAO,eAAe,CAAW;AAC3D,QAAI,MAAQ,MACZ;AAAA,UAAI,MAAQ,IAAI;AACd,QAAA,EAAO,MAAM,EAAE,MAAM,EAAE,gBAAgB,MAAM,EAAE,UAAU,EAAE,IAAI;AAC/D;AAAA,MACF;AACA,MAAA,EAAO,MAAM,EAAE,MAAM,EAAE,gBAAgB,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAI,CAAC,EAAE,IAAI;AAAA;AAAA,EAC5E,GAAG,CAAC,GAAQ,EAAO,aAAa,CAAC,GAE3B,IAAW,EAAA,MAAkB;AACjC,UAAM,IAAM,OAAO,OAAO,EAAO,cAAc;AAC/C,IAAI,KACF,EAAO,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAI,CAAC,EAAE,IAAI;AAAA,EAEtD,GAAG,CAAC,GAAQ,EAAO,cAAc,CAAC,GAE5B,IAAc,EAAA,MAAkB;AACpC,IAAA,EAAO,MAAM,EAAE,MAAM,EAAE,YAAY;AAAA,MAAE,MAAM;AAAA,MAAG,MAAM;AAAA,MAAG,eAAe;AAAA,IAAK,CAAC,EAAE,IAAI;AAAA,EACpF,GAAG,CAAC,CAAM,CAAC,GAEL,IAAsB,EAAA,MAAkB;AAC5C,IAAA,EAAO,MAAM,EAAE,MAAM,EAAE,cAAc;AAAA,MACnC,MAAM;AAAA,MACN,OAAO,EAAE,UAAU,aAAa;AAAA,MAChC,SAAS,CAAC;AAAA,QAAE,MAAM;AAAA,QAAQ,MAAM;AAAA;AAAA;AAAA,MAA8C,CAAC;AAAA,IACjF,CAAC,EAAE,IAAI;AAAA,EACT,GAAG,CAAC,CAAM,CAAC,GAEL,IAAyB,EAAA,CAAa,MAAoB;AAC9D,IAAA,EAAO,MAAM,EAAE,MAAM,EAAE,cAAc;AAAA,MACnC,MAAM;AAAA,MACN,OAAO,EAAE,UAAU,aAAa;AAAA,MAChC,SAAS,CAAC;AAAA,QAAE,MAAM;AAAA,QAAQ,MAAM;AAAA,MAAQ,CAAC;AAAA,IAC3C,CAAC,EAAE,IAAI;AAAA,EACT,GAAG,CAAC,CAAM,CAAC,GAEL,IAAuB,EAAA,CAAa,IAAyD,YAAY;AAC7G,UAAM,IAAa,MAAW,UAC1B;AAAA,MAAE,GAAG;AAAA,MAAI,GAAG;AAAA,MAAI,QAAQ,EAAmB,CAAM;AAAA,IAAE,IACnD,MAAW,UACT,CAAC,IACD,EAAE,OAAO,IAAI;AACnB,IAAA,EAAO,MAAM,EAAE,MAAM,EAAE,cAAc;AAAA,MACnC,MAAM;AAAA,MACN,OAAO;AAAA,QAAE,OAAO;AAAA,QAAQ,QAAA;AAAA,QAAQ,GAAG;AAAA,MAAW;AAAA,MAC9C,SAAS,CAAC,EAAE,MAAM,YAAY,CAAC;AAAA,IACjC,CAAC,EAAE,IAAI;AAAA,EACT,GAAG,CAAC,CAAM,CAAC,GAEL,IAAsB,EAAA,MAAkB;AAC5C,QAAI,GAAoB;AACtB,MAAA,EAAsB,IAAI,GAC1B,IAAwB,EAAK;AAC7B;AAAA,IACF;AACA,UAAM,EAAE,MAAA,GAAM,IAAA,EAAA,IAAO,EAAO,MAAM;AAClC,QAAI,MAAS,EAAI;AAEjB,UAAM,IAAmC,CAAC;AAC1C,IAAA,EAAO,MAAM,IAAI,aAAa,GAAM,GAAA,CAAK,MAAS;AAChD,MAAI,EAAK,SACP,EAAK,MAAM,QAAA,CAAS,MAAS;AAC3B,QAAA,EAAM,KAAK;AAAA,UAAE,MAAM,EAAK,KAAK;AAAA,UAAM,OAAO,EAAK;AAAA,QAAM,CAAC;AAAA,MACxD,CAAC;AAAA,IAEL,CAAC,GACD,EAAsB,CAAK,GAC3B,IAAwB,EAAI;AAAA,EAC9B,GAAG;AAAA,IAAC;AAAA,IAAQ;AAAA,IAAoB;AAAA,EAAqB,CAAC;AAEtD,EAAA,EAAA,MAAgB;AACd,QAAI,CAAC,EAAoB;AAEzB,UAAM,IAAW,EAAO,KAAK,KAEvB,IAAA,MAAmB;AACvB,YAAM,EAAE,MAAA,GAAM,IAAA,EAAA,IAAO,EAAO,MAAM;AAClC,UAAI,MAAS,KAAM,CAAC,EAAoB;AAExC,YAAM,EAAE,IAAA,EAAA,IAAO,EAAO;AACtB,MAAA,EAAG,WAAW,GAAM,CAAE;AACtB,iBAAW,KAAQ,GAAoB;AACrC,cAAM,IAAW,EAAO,OAAO,MAAM,EAAK,IAAA;AAC1C,QAAI,KACF,EAAG,QAAQ,GAAM,GAAI,EAAS,OAAO,EAAK,KAAgC,CAAC;AAAA,MAE/E;AACA,MAAA,EAAO,KAAK,SAAS,CAAE,GAEvB,EAAsB,IAAI,GAC1B,IAAwB,EAAK;AAAA,IAC/B,GAEM,IAAA,MAAkB;AACtB,4BAAsB,CAAU;AAAA,IAClC;AAEA,WAAA,EAAS,iBAAiB,WAAW,CAAS,GAC9C,MAAa;AAAE,MAAA,EAAS,oBAAoB,WAAW,CAAS;AAAA,IAAG;AAAA,EACrE,GAAG;AAAA,IAAC;AAAA,IAAQ;AAAA,IAAoB;AAAA,EAAqB,CAAC;AAEtD,QAAM,IAAoB,EAAO,cAAc,WAAW,EAAE,cAAc,IACpE,IAAkB,EAAO,cAAc,WAAW,EAAE,YAAY;AAEtE,SACE,gBAAA,EAAC,OAAD;AAAA,IAAK,WAAU;AAAA,cAAf;AAAA,MACG,EAAI,WACH,gBAAA,EAAA,GAAA,EAAA,UAAA;AAAA,QACE,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI;AAAA,UACjD,UAAU,CAAC,EAAO,IAAI,EAAE,KAAK;AAAA,UAC7B,OAAO,EAAO;AAAA,oBAEd,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,sBAAvI,CACE,gBAAA,EAAC,YAAD,EAAU,QAAO,gBAAiB,CAAA,GAClC,gBAAA,EAAC,QAAD,EAAM,GAAE,kCAAmC,CAAA,CACxC;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI;AAAA,UACjD,UAAU,CAAC,EAAO,IAAI,EAAE,KAAK;AAAA,UAC7B,OAAO,EAAO;AAAA,oBAEd,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,sBAAvI,CACE,gBAAA,EAAC,YAAD,EAAU,QAAO,mBAAoB,CAAA,GACrC,gBAAA,EAAC,QAAD,EAAM,GAAE,qCAAsC,CAAA,CAC3C;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD,CAAiB,CAAA;AAAA,MACjB,EAAA,CAAA;AAAA,MAGH,EAAI,aACH,gBAAA,EAAA,GAAA,EAAA,UAAA;AAAA,QACE,gBAAA,EAAC,GAAD;AAAA,UACE,OAAO;AAAA,UACP,SAAS;AAAA,UACT,UAAA,CAAW,MAAQ;AACjB,YAAI,IACF,EAAO,MAAM,EAAE,MAAM,EAAE,cAAc,CAAG,EAAE,IAAI,IAE9C,EAAO,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI;AAAA,UAEjD;AAAA,UACA,OAAO,EAAO;AAAA,UACd,OAAO;AAAA,QACR,CAAA;AAAA,QACD,gBAAA,EAAC,GAAD;AAAA,UACE,OAAO;AAAA,UACP,SAAS;AAAA,UACT,UAAA,CAAW,MAAQ;AACjB,YAAI,IACF,EAAQ,MAAM,EAAE,MAAM,EAAU,YAAY,CAAG,EAAE,IAAI,IAErD,EAAQ,MAAM,EAAE,MAAM,EAAU,cAAc,EAAE,IAAI;AAAA,UAExD;AAAA,UACA,OAAO,EAAO;AAAA,UACd,OAAO;AAAA,QACR,CAAA;AAAA,QACD,gBAAA,EAAC,GAAD,CAAiB,CAAA;AAAA,MACjB,EAAA,CAAA;AAAA,MAGH,EAAI,cACH,gBAAA,EAAA,GAAA,EAAA,UAAA;AAAA,QACE,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI;AAAA,UACvD,UAAU,EAAO,SAAS,MAAM;AAAA,UAChC,OAAO,EAAO;AAAA,oBAEd,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAM,eAAc;AAAA,YAAQ,gBAAe;AAAA,sBAAzI,CACE,gBAAA,EAAC,QAAD,EAAM,GAAE,qCAAsC,CAAA,GAC9C,gBAAA,EAAC,QAAD,EAAM,GAAE,sCAAuC,CAAA,CAC5C;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI;AAAA,UACzD,UAAU,EAAO,SAAS,QAAQ;AAAA,UAClC,OAAO,EAAO;AAAA,oBAEd,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,sBAAvI;AAAA,cACE,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAK,CAAA;AAAA,cACrC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,cACtC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,YAClC;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI;AAAA,UAC5D,UAAU,EAAO,SAAS,WAAW;AAAA,UACrC,OAAO,EAAO;AAAA,oBAEd,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,sBAAvI,CACE,gBAAA,EAAC,QAAD,EAAM,GAAE,mCAAoC,CAAA,GAC5C,gBAAA,EAAC,QAAD;AAAA,cAAM,IAAG;AAAA,cAAI,IAAG;AAAA,cAAK,IAAG;AAAA,cAAK,IAAG;AAAA,YAAM,CAAA,CACnC;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI;AAAA,UACzD,UAAU,EAAO,SAAS,QAAQ;AAAA,UAClC,OAAO,EAAO;AAAA,oBAEd,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,sBAAvI;AAAA,cACE,gBAAA,EAAC,QAAD,EAAM,GAAE,2EAA4E,CAAA;AAAA,cACpF,gBAAA,EAAC,QAAD,EAAM,GAAE,sDAAuD,CAAA;AAAA,cAC/D,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAM,CAAA;AAAA,YACnC;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI;AAAA,UAC5D,UAAU,EAAO,SAAS,WAAW;AAAA,UACrC,OAAO,EAAO;AAAA,oBAEd,gBAAA,EAAC,QAAD;AAAA,YAAM,OAAO;AAAA,cAAE,UAAU;AAAA,cAAQ,YAAY;AAAA,YAAI;AAAA,sBAAjD,CAAoD,KAAC,gBAAA,EAAC,OAAD;AAAA,cAAK,OAAO,EAAE,UAAU,MAAM;AAAA,wBAAG;AAAA,YAAM,CAAA,CAAO;AAAA;QACtF,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,IAAI;AAAA,UAC9D,UAAU,EAAO,SAAS,aAAa;AAAA,UACvC,OAAO,EAAO;AAAA,oBAEd,gBAAA,EAAC,QAAD;AAAA,YAAM,OAAO;AAAA,cAAE,UAAU;AAAA,cAAQ,YAAY;AAAA,YAAI;AAAA,sBAAjD,CAAoD,KAAC,gBAAA,EAAC,OAAD;AAAA,cAAK,OAAO,EAAE,UAAU,MAAM;AAAA,wBAAG;AAAA,YAAM,CAAA,CAAO;AAAA;QACtF,CAAA;AAAA,QACd,EAAI,iBACH,gBAAA,EAAC,GAAD;AAAA,UACE,SAAS;AAAA,UACT,UAAU,CAAC,CAAC;AAAA,UACZ,OAAO,IAAqB,EAAO,sBAAsB,EAAO;AAAA,oBAEhE,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,sBAAvI;AAAA,cACE,gBAAA,EAAC,QAAD,EAAM,GAAE,oEAAqE,CAAA;AAAA,cAC7E,gBAAA,EAAC,QAAD,EAAM,GAAE,yBAA0B,CAAA;AAAA,cAClC,gBAAA,EAAC,QAAD,EAAM,GAAE,aAAc,CAAA;AAAA,cACtB,gBAAA,EAAC,QAAD,EAAM,GAAE,UAAW,CAAA;AAAA,YAChB;AAAA;QACQ,CAAA;AAAA,QAEjB,gBAAA,EAAC,GAAD,CAAiB,CAAA;AAAA,MACjB,EAAA,CAAA;AAAA,MAGH,EAAI,WACH,gBAAA,EAAA,GAAA,EAAA,UAAA,CACI;AAAA,QAAC;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MAAC,EAAY,IAAA,CAAK,MAClC,gBAAA,EAAC,GAAD;AAAA,QAEE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,OAAA,EAAM,CAAC,EAAE,IAAI;AAAA,QACnE,UAAU,EAAO,SAAS,WAAW,EAAE,OAAA,EAAM,CAAC;AAAA,QAC9C,OAAO,GAAG,EAAO,OAAA,IAAW,CAAA;AAAA,kBAE5B,gBAAA,EAAC,QAAD;AAAA,UAAM,OAAO;AAAA,YAAE,UAAU;AAAA,YAAQ,YAAY;AAAA,UAAI;AAAA,oBAAjD,CAAoD,KAAE,CAAY;AAAA;MACrD,GANR,CAMQ,CAChB,GACD,gBAAA,EAAC,GAAD,CAAiB,CAAA,CACjB,EAAA,CAAA;AAAA,MAGH,EAAI,aACH,gBAAA,EAAA,GAAA,EAAA,UAAA;AAAA,QACE,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,aAAa,MAAM,EAAE,IAAI;AAAA,UAC/D,UAAU,EAAO,SAAS,EAAE,WAAW,OAAO,CAAC;AAAA,UAC/C,OAAO,EAAO;AAAA,oBAEd,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,sBAAvI;AAAA,cACE,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAK,CAAA;AAAA,cAC3E,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,YAC1E;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,aAAa,QAAQ,EAAE,IAAI;AAAA,UACjE,UAAU,EAAO,SAAS,EAAE,WAAW,SAAS,CAAC;AAAA,UACjD,OAAO,EAAO;AAAA,oBAEd,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,sBAAvI;AAAA,cACE,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAK,CAAA;AAAA,cAC3E,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,YAC1E;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,aAAa,OAAO,EAAE,IAAI;AAAA,UAChE,UAAU,EAAO,SAAS,EAAE,WAAW,QAAQ,CAAC;AAAA,UAChD,OAAO,EAAO;AAAA,oBAEd,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,sBAAvI;AAAA,cACE,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAK,CAAA;AAAA,cAC3E,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,YAC1E;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,aAAa,SAAS,EAAE,IAAI;AAAA,UAClE,UAAU,EAAO,SAAS,EAAE,WAAW,UAAU,CAAC;AAAA,UAClD,OAAO,EAAO;AAAA,oBAEd,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,sBAAvI;AAAA,cACE,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAK,CAAA;AAAA,cAC3E,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,YAC1E;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD,CAAiB,CAAA;AAAA,MACjB,EAAA,CAAA;AAAA,MAGH,EAAI,QACH,gBAAA,EAAA,GAAA,EAAA,UAAA;AAAA,QACE,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI;AAAA,UAC7D,UAAU,EAAO,SAAS,YAAY;AAAA,UACtC,OAAO,EAAO;AAAA,oBAEd,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,sBAAvI;AAAA,cACE,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAK,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAM,CAAA;AAAA,cAC3E,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAM,CAAA;AAAA,cACtC,gBAAA,EAAC,UAAD;AAAA,gBAAQ,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,GAAE;AAAA,gBAAI,MAAK;AAAA,cAAgB,CAAA;AAAA,cAAC,gBAAA,EAAC,UAAD;AAAA,gBAAQ,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,GAAE;AAAA,gBAAI,MAAK;AAAA,cAAgB,CAAA;AAAA,cACpG,gBAAA,EAAC,UAAD;AAAA,gBAAQ,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,GAAE;AAAA,gBAAI,MAAK;AAAA,cAAgB,CAAA;AAAA,YAC/C;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,IAAI;AAAA,UAC9D,UAAU,EAAO,SAAS,aAAa;AAAA,UACvC,OAAO,EAAO;AAAA,oBAEd,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,sBAAvI;AAAA,cACE,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAK,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAM,CAAA;AAAA,cAC7E,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAM,CAAA;AAAA,cACvC,gBAAA,EAAC,QAAD;AAAA,gBAAM,GAAE;AAAA,gBAAI,GAAE;AAAA,gBAAI,UAAS;AAAA,gBAAI,MAAK;AAAA,gBAAe,QAAO;AAAA,gBAAO,YAAW;AAAA,0BAAO;AAAA,cAAO,CAAA;AAAA,cAC1F,gBAAA,EAAC,QAAD;AAAA,gBAAM,GAAE;AAAA,gBAAI,GAAE;AAAA,gBAAK,UAAS;AAAA,gBAAI,MAAK;AAAA,gBAAe,QAAO;AAAA,gBAAO,YAAW;AAAA,0BAAO;AAAA,cAAO,CAAA;AAAA,cAC3F,gBAAA,EAAC,QAAD;AAAA,gBAAM,GAAE;AAAA,gBAAI,GAAE;AAAA,gBAAK,UAAS;AAAA,gBAAI,MAAK;AAAA,gBAAe,QAAO;AAAA,gBAAO,YAAW;AAAA,0BAAO;AAAA,cAAO,CAAA;AAAA,YACxF;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI;AAAA,UAC3D,UAAU,EAAO,SAAS,UAAU;AAAA,UACpC,OAAO,EAAO;AAAA,oBAEd,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,sBAAvI;AAAA,cACE,gBAAA,EAAC,QAAD;AAAA,gBAAM,GAAE;AAAA,gBAAI,GAAE;AAAA,gBAAI,OAAM;AAAA,gBAAI,QAAO;AAAA,gBAAI,IAAG;AAAA,cAAK,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD,EAAM,GAAE,qBAAsB,CAAA;AAAA,cAC9E,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAK,CAAA;AAAA,cACrC,gBAAA,EAAC,QAAD;AAAA,gBAAM,GAAE;AAAA,gBAAI,GAAE;AAAA,gBAAK,OAAM;AAAA,gBAAI,QAAO;AAAA,gBAAI,IAAG;AAAA,cAAK,CAAA;AAAA,cAChD,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAM,CAAA;AAAA,YACpC;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD,CAAiB,CAAA;AAAA,MACjB,EAAA,CAAA;AAAA,MAGH,EAAI,UACH,gBAAA,EAAA,GAAA,EAAA,UAAA;AAAA,QACE,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI;AAAA,UAC7D,UAAU,EAAO,SAAS,YAAY;AAAA,UACtC,OAAO,EAAO;AAAA,oBAEd,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,sBAAvI,CACE,gBAAA,EAAC,QAAD,EAAM,GAAE,qIAAsI,CAAA,GAC9I,gBAAA,EAAC,QAAD,EAAM,GAAE,mHAAoH,CAAA,CACzH;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,WAAW,aAAa,WAAW,EAAE,IAAI;AAAA,UAC/E,UAAU,EAAO,SAAS,WAAW;AAAA,UACrC,OAAO,EAAO;AAAA,oBAEd,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,sBAAvI,CACE,gBAAA,EAAC,YAAD,EAAU,QAAO,mBAAoB,CAAA,GAAC,gBAAA,EAAC,YAAD,EAAU,QAAO,gBAAiB,CAAA,CACrE;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe;AACb,YAAA,EAAO,MAAM,EAAE,MAAM,EAAE,cAAc;AAAA,cACnC,MAAM;AAAA,cACN,OAAO,EAAE,UAAU,YAAY;AAAA,cAC/B,SAAS,CAAC;AAAA,gBAAE,MAAM;AAAA,gBAAQ,MAAM;AAAA;AAAA,cAAoC,CAAC;AAAA,YACvE,CAAC,EAAE,IAAI;AAAA,UACT;AAAA,UACA,OAAO,EAAO;AAAA,oBAEd,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,sBAAvI;AAAA,cACE,gBAAA,EAAC,UAAD;AAAA,gBAAQ,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,GAAE;AAAA,cAAK,CAAA;AAAA,cAAC,gBAAA,EAAC,UAAD;AAAA,gBAAQ,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,GAAE;AAAA,cAAK,CAAA;AAAA,cAC5D,gBAAA,EAAC,UAAD;AAAA,gBAAQ,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,GAAE;AAAA,cAAK,CAAA;AAAA,cAC/B,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAM,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAM,CAAA;AAAA,YACzE;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UAAe,SAAS;AAAA,UAAS,UAAU,EAAO,SAAS,MAAM;AAAA,UAAG,OAAO,EAAO;AAAA,oBAChF,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,sBAAvI,CACE,gBAAA,EAAC,QAAD,EAAM,GAAE,2DAA4D,CAAA,GACpE,gBAAA,EAAC,QAAD,EAAM,GAAE,4DAA6D,CAAA,CAClE;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UAAe,SAAS;AAAA,UAAU,OAAO,EAAO;AAAA,oBAC9C,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,sBAAvI;AAAA,cACE,gBAAA,EAAC,QAAD;AAAA,gBAAM,GAAE;AAAA,gBAAI,GAAE;AAAA,gBAAI,OAAM;AAAA,gBAAK,QAAO;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAK,CAAA;AAAA,cACxD,gBAAA,EAAC,UAAD;AAAA,gBAAQ,IAAG;AAAA,gBAAM,IAAG;AAAA,gBAAM,GAAE;AAAA,cAAO,CAAA;AAAA,cAAC,gBAAA,EAAC,YAAD,EAAU,QAAO,mBAAoB,CAAA;AAAA,YACtE;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UAAe,SAAS;AAAA,UAAa,OAAO,EAAO;AAAA,oBACjD,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,sBAAvI;AAAA,cACE,gBAAA,EAAC,QAAD;AAAA,gBAAM,GAAE;AAAA,gBAAI,GAAE;AAAA,gBAAI,OAAM;AAAA,gBAAK,QAAO;AAAA,gBAAK,IAAG;AAAA,cAAK,CAAA;AAAA,cACjD,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAK,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAM,CAAA;AAAA,cAC3E,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAM,CAAA;AAAA,YACxE;AAAA;QACQ,CAAA;AAAA,QACd,EAAI,YAAY,gBAAA,EAAC,GAAD;AAAA,UAAsB,QAAA;AAAA,UAAgB,QAAA;AAAA,QAAS,CAAA;AAAA,QAChE,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,IAAI;AAAA,UAC9D,OAAO,EAAO;AAAA,oBAEd,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,sBAC9G,gBAAA,EAAC,QAAD;AAAA,cAAM,IAAG;AAAA,cAAI,IAAG;AAAA,cAAK,IAAG;AAAA,cAAK,IAAG;AAAA,YAAM,CAAA;AAAA,UACnC,CAAA;AAAA,QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UAAe,SAAS;AAAA,UAAqB,OAAO,EAAO;AAAA,oBACzD,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,sBAAvI;AAAA,cACE,gBAAA,EAAC,QAAD,EAAM,GAAE,gBAAiB,CAAA;AAAA,cACzB,gBAAA,EAAC,QAAD,EAAM,GAAE,uBAAwB,CAAA;AAAA,cAChC,gBAAA,EAAC,QAAD,EAAM,GAAE,oBAAqB,CAAA;AAAA,YAC1B;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UAA8B,QAAA;AAAA,UAAQ,UAAU;AAAA,QAAyB,CAAA;AAAA,QACzE,gBAAA,EAAC,GAAD;AAAA,UAA4B,QAAA;AAAA,UAAQ,UAAU;AAAA,QAAuB,CAAA;AAAA,QACrE,gBAAA,EAAC,GAAD,CAAiB,CAAA;AAAA,MACjB,EAAA,CAAA;AAAA,MAGH,EAAI,SACH,gBAAA,EAAA,GAAA,EAAA,UAAA;AAAA,QACE,gBAAA,EAAC,GAAD;AAAA,UACE,OAAO,EAAO,cAAc,WAAW,EAAE,SAAS;AAAA,UAClD,UAAA,CAAW,MAAU;AACnB,YAAI,IACF,EAAO,MAAM,EAAE,MAAM,EAAE,SAAS,CAAK,EAAE,IAAI,IAE3C,EAAO,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI;AAAA,UAE5C;AAAA,UACA,OAAO,EAAO;AAAA,UACd,MACE,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,sBACrI,gBAAA,EAAC,QAAD,EAAM,GAAE,sBAAuB,CAAA;AAAA,UAC5B,CAAA;AAAA,QAER,CAAA;AAAA,QACD,gBAAA,EAAC,GAAD;AAAA,UACE,OAAO,EAAO,cAAc,WAAW,EAAE,SAAS;AAAA,UAClD,UAAA,CAAW,MAAU;AACnB,YAAI,IACF,EAAO,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAA,EAAM,CAAC,EAAE,IAAI,IAEtD,EAAO,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI;AAAA,UAEhD;AAAA,UACA,OAAO,EAAO;AAAA,UACd,MACE,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,sBAAvI,CACE,gBAAA,EAAC,QAAD,EAAM,GAAE,WAAY,CAAA,GAAC,gBAAA,EAAC,QAAD,EAAM,GAAE,wDAAyD,CAAA,CACnF;AAAA;QAER,CAAA;AAAA,QACD,gBAAA,EAAC,GAAD,CAAiB,CAAA;AAAA,MACjB,EAAA,CAAA;AAAA,MAGH,EAAI,MAAM,KAAS,KAClB,gBAAA,EAAC,GAAD;AAAA,QAAe,SAAS;AAAA,QAAW,OAAO,EAAO;AAAA,kBAC/C,gBAAA,EAAC,OAAD;AAAA,UAAK,OAAM;AAAA,UAAK,QAAO;AAAA,UAAK,SAAQ;AAAA,UAAY,MAAK;AAAA,UAAO,QAAO;AAAA,UAAe,aAAY;AAAA,UAAI,eAAc;AAAA,UAAQ,gBAAe;AAAA,oBAAvI,CACE,gBAAA,EAAC,QAAD,EAAM,GAAE,yJAA0J,CAAA,GAClK,gBAAA,EAAC,QAAD,EAAM,GAAE,0JAA2J,CAAA,CAChK;AAAA;MACQ,CAAA;AAAA,MAGhB;AAAA,IACE;AAAA;AAET"}
|
|
1
|
+
{"version":3,"file":"Toolbar.js","names":[],"sources":["../../../../../src/components/pro/RichTextEditor/Toolbar/Toolbar.tsx"],"sourcesContent":["import React, { useCallback, useState, useEffect } from 'react';\nimport type { Editor } from '@tiptap/react';\nimport type { ToolbarSection, RichTextEditorLabels } from '../types';\nimport { defaultLabels } from '../types';\nimport { getNextFloatZIndex } from '../extensions/FloatingDialog';\nimport { ToolbarButton, ToolbarDivider } from './ToolbarButton';\nimport { ColorPicker } from './ColorPicker';\nimport { SelectDropdown, FONT_FAMILIES, FONT_SIZES } from './SelectDropdown';\nimport { MarkdownTemplateMenu } from './MarkdownTemplates';\nimport { FloatingDialogMenu } from './FloatingDialogMenu';\nimport { TableOpsMenu } from './TableOpsMenu';\n\ninterface ToolbarProps {\n editor: Editor;\n config?: ToolbarSection;\n labels?: RichTextEditorLabels;\n hasAI?: boolean;\n onAIClick?: () => void;\n onFormatPainterChange?: (active: boolean) => void;\n children?: React.ReactNode;\n}\n\nconst Toolbar: React.FC<ToolbarProps> = ({\n editor,\n config,\n labels: propsLabels,\n hasAI,\n onAIClick,\n onFormatPainterChange,\n children,\n}) => {\n const labels = { ...defaultLabels, ...propsLabels };\n const [formatPainterMarks, setFormatPainterMarks] = useState<Record<string, unknown>[] | null>(null);\n\n const cfg: Required<ToolbarSection> = {\n textFormat: config?.textFormat ?? true,\n heading: config?.heading ?? true,\n alignment: config?.alignment ?? true,\n list: config?.list ?? true,\n insert: config?.insert ?? true,\n color: config?.color ?? true,\n history: config?.history ?? true,\n ai: config?.ai ?? true,\n tableOps: config?.tableOps ?? true,\n fontStyle: config?.fontStyle ?? true,\n formatPainter: config?.formatPainter ?? true,\n };\n\n const setLink = useCallback(() => {\n const previousUrl = editor.getAttributes('link').href;\n const url = window.prompt(labels.insertLinkUrl, previousUrl);\n if (url === null) return;\n if (url === '') {\n editor.chain().focus().extendMarkRange('link').unsetLink().run();\n return;\n }\n editor.chain().focus().extendMarkRange('link').setLink({ href: url }).run();\n }, [editor, labels.insertLinkUrl]);\n\n const addImage = useCallback(() => {\n const url = window.prompt(labels.insertImageUrl);\n if (url) {\n editor.chain().focus().setImage({ src: url }).run();\n }\n }, [editor, labels.insertImageUrl]);\n\n const insertTable = useCallback(() => {\n editor.chain().focus().insertTable({ rows: 3, cols: 3, withHeaderRow: true }).run();\n }, [editor]);\n\n const insertMarkdownBlock = useCallback(() => {\n editor.chain().focus().insertContent({\n type: 'codeBlock',\n attrs: { language: 'r-markdown' },\n content: [{ type: 'text', text: '# Markdown\\n\\nWrite your **markdown** here.' }],\n }).run();\n }, [editor]);\n\n const insertMarkdownTemplate = useCallback((content: string) => {\n editor.chain().focus().insertContent({\n type: 'codeBlock',\n attrs: { language: 'r-markdown' },\n content: [{ type: 'text', text: content }],\n }).run();\n }, [editor]);\n\n const insertFloatingDialog = useCallback((layout: 'block' | 'wrap-left' | 'wrap-right' | 'float' = 'block') => {\n const extraAttrs = layout === 'float'\n ? { x: 40, y: 40, zIndex: getNextFloatZIndex(editor) }\n : layout === 'block'\n ? {}\n : { width: 240 };\n editor.chain().focus().insertContent({\n type: 'floatingDialog',\n attrs: { title: 'Note', layout, ...extraAttrs },\n content: [{ type: 'paragraph' }],\n }).run();\n }, [editor]);\n\n const handleFormatPainter = useCallback(() => {\n if (formatPainterMarks) {\n setFormatPainterMarks(null);\n onFormatPainterChange?.(false);\n return;\n }\n const { from, to } = editor.state.selection;\n if (from === to) return;\n\n const marks: Record<string, unknown>[] = [];\n editor.state.doc.nodesBetween(from, to, (node) => {\n if (node.marks) {\n node.marks.forEach((mark) => {\n marks.push({ type: mark.type.name, attrs: mark.attrs });\n });\n }\n });\n setFormatPainterMarks(marks);\n onFormatPainterChange?.(true);\n }, [editor, formatPainterMarks, onFormatPainterChange]);\n\n useEffect(() => {\n if (!formatPainterMarks) return;\n\n const editorEl = editor.view.dom;\n\n const applyMarks = () => {\n const { from, to } = editor.state.selection;\n if (from === to || !formatPainterMarks) return;\n\n const { tr } = editor.state;\n tr.removeMark(from, to);\n for (const mark of formatPainterMarks) {\n const markType = editor.schema.marks[mark.type as string];\n if (markType) {\n tr.addMark(from, to, markType.create(mark.attrs as Record<string, unknown>));\n }\n }\n editor.view.dispatch(tr);\n\n setFormatPainterMarks(null);\n onFormatPainterChange?.(false);\n };\n\n const onMouseUp = () => {\n requestAnimationFrame(applyMarks);\n };\n\n editorEl.addEventListener('mouseup', onMouseUp);\n return () => { editorEl.removeEventListener('mouseup', onMouseUp); };\n }, [editor, formatPainterMarks, onFormatPainterChange]);\n\n const currentFontFamily = editor.getAttributes('textStyle').fontFamily || '';\n const currentFontSize = editor.getAttributes('textStyle').fontSize || '';\n\n return (\n <div className=\"rte-toolbar\">\n {cfg.history && (\n <>\n <ToolbarButton\n onClick={() => editor.chain().focus().undo().run()}\n disabled={!editor.can().undo()}\n title={labels.undo}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"1 4 1 10 7 10\" />\n <path d=\"M3.51 15a9 9 0 102.13-9.36L1 10\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().redo().run()}\n disabled={!editor.can().redo()}\n title={labels.redo}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"23 4 23 10 17 10\" />\n <path d=\"M20.49 15a9 9 0 11-2.13-9.36L23 10\" />\n </svg>\n </ToolbarButton>\n <ToolbarDivider />\n </>\n )}\n\n {cfg.fontStyle && (\n <>\n <SelectDropdown\n value={currentFontFamily}\n options={FONT_FAMILIES}\n onChange={(val) => {\n if (val) {\n editor.chain().focus().setFontFamily(val).run();\n } else {\n editor.chain().focus().unsetFontFamily().run();\n }\n }}\n title={labels.fontFamily}\n width={120}\n />\n <SelectDropdown\n value={currentFontSize}\n options={FONT_SIZES}\n onChange={(val) => {\n if (val) {\n (editor.chain().focus() as any).setFontSize(val).run();\n } else {\n (editor.chain().focus() as any).unsetFontSize().run();\n }\n }}\n title={labels.fontSize}\n width={80}\n />\n <ToolbarDivider />\n </>\n )}\n\n {cfg.textFormat && (\n <>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleBold().run()}\n isActive={editor.isActive('bold')}\n title={labels.bold}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M6 4h8a4 4 0 014 4 4 4 0 01-4 4H6z\" />\n <path d=\"M6 12h9a4 4 0 014 4 4 4 0 01-4 4H6z\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleItalic().run()}\n isActive={editor.isActive('italic')}\n title={labels.italic}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"19\" y1=\"4\" x2=\"10\" y2=\"4\" />\n <line x1=\"14\" y1=\"20\" x2=\"5\" y2=\"20\" />\n <line x1=\"15\" y1=\"4\" x2=\"9\" y2=\"20\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleUnderline().run()}\n isActive={editor.isActive('underline')}\n title={labels.underline}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M6 3v7a6 6 0 006 6 6 6 0 006-6V3\" />\n <line x1=\"4\" y1=\"21\" x2=\"20\" y2=\"21\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleStrike().run()}\n isActive={editor.isActive('strike')}\n title={labels.strikethrough}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M17.3 4.9c-2.3-.6-4.4-1-6.2-.9-2.7 0-5.3.7-5.3 3.6 0 1.5 1.8 3.3 7.2 3.3\" />\n <path d=\"M13 15.1c0 2.8-2.6 3.6-5.3 3.6-1.8-.1-3.9-.5-6.2-.9\" />\n <line x1=\"4\" y1=\"12\" x2=\"20\" y2=\"12\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleSubscript().run()}\n isActive={editor.isActive('subscript')}\n title={labels.subscript}\n >\n <span style={{ fontSize: '13px', fontWeight: 600 }}>X<sub style={{ fontSize: '9px' }}>2</sub></span>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleSuperscript().run()}\n isActive={editor.isActive('superscript')}\n title={labels.superscript}\n >\n <span style={{ fontSize: '13px', fontWeight: 600 }}>X<sup style={{ fontSize: '9px' }}>2</sup></span>\n </ToolbarButton>\n {cfg.formatPainter && (\n <ToolbarButton\n onClick={handleFormatPainter}\n isActive={!!formatPainterMarks}\n title={formatPainterMarks ? labels.formatPainterActive : labels.formatPainter}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M19 3H5a2 2 0 00-2 2v2a2 2 0 002 2h14a2 2 0 002-2V5a2 2 0 00-2-2z\" />\n <path d=\"M10 7v4a2 2 0 01-2 2H7\" />\n <path d=\"M7 13l-3 8\" />\n <path d=\"M4 21h6\" />\n </svg>\n </ToolbarButton>\n )}\n <ToolbarDivider />\n </>\n )}\n\n {cfg.heading && (\n <>\n {([1, 2, 3, 4, 5, 6] as const).map((level) => (\n <ToolbarButton\n key={level}\n onClick={() => editor.chain().focus().toggleHeading({ level }).run()}\n isActive={editor.isActive('heading', { level })}\n title={`${labels.heading} ${level}`}\n >\n <span style={{ fontSize: '12px', fontWeight: 700 }}>H{level}</span>\n </ToolbarButton>\n ))}\n <ToolbarDivider />\n </>\n )}\n\n {cfg.alignment && (\n <>\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign('left').run()}\n isActive={editor.isActive({ textAlign: 'left' })}\n title={labels.alignLeft}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"17\" y1=\"10\" x2=\"3\" y2=\"10\" /><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\" />\n <line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\" /><line x1=\"17\" y1=\"18\" x2=\"3\" y2=\"18\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign('center').run()}\n isActive={editor.isActive({ textAlign: 'center' })}\n title={labels.alignCenter}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"10\" x2=\"6\" y2=\"10\" /><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\" />\n <line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\" /><line x1=\"18\" y1=\"18\" x2=\"6\" y2=\"18\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign('right').run()}\n isActive={editor.isActive({ textAlign: 'right' })}\n title={labels.alignRight}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"21\" y1=\"10\" x2=\"7\" y2=\"10\" /><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\" />\n <line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\" /><line x1=\"21\" y1=\"18\" x2=\"7\" y2=\"18\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign('justify').run()}\n isActive={editor.isActive({ textAlign: 'justify' })}\n title={labels.alignJustify}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"21\" y1=\"10\" x2=\"3\" y2=\"10\" /><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\" />\n <line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\" /><line x1=\"21\" y1=\"18\" x2=\"3\" y2=\"18\" />\n </svg>\n </ToolbarButton>\n <ToolbarDivider />\n </>\n )}\n\n {cfg.list && (\n <>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n isActive={editor.isActive('bulletList')}\n title={labels.bulletList}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\" /><line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\" />\n <circle cx=\"4\" cy=\"6\" r=\"1\" fill=\"currentColor\" /><circle cx=\"4\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"4\" cy=\"18\" r=\"1\" fill=\"currentColor\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleOrderedList().run()}\n isActive={editor.isActive('orderedList')}\n title={labels.orderedList}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"10\" y1=\"6\" x2=\"21\" y2=\"6\" /><line x1=\"10\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"10\" y1=\"18\" x2=\"21\" y2=\"18\" />\n <text x=\"2\" y=\"8\" fontSize=\"8\" fill=\"currentColor\" stroke=\"none\" fontWeight=\"bold\">1</text>\n <text x=\"2\" y=\"14\" fontSize=\"8\" fill=\"currentColor\" stroke=\"none\" fontWeight=\"bold\">2</text>\n <text x=\"2\" y=\"20\" fontSize=\"8\" fill=\"currentColor\" stroke=\"none\" fontWeight=\"bold\">3</text>\n </svg>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleTaskList().run()}\n isActive={editor.isActive('taskList')}\n title={labels.taskList}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"5\" width=\"6\" height=\"6\" rx=\"1\" /><path d=\"M5 8l1.5 1.5L9 6.5\" />\n <line x1=\"12\" y1=\"8\" x2=\"21\" y2=\"8\" />\n <rect x=\"3\" y=\"14\" width=\"6\" height=\"6\" rx=\"1\" />\n <line x1=\"12\" y1=\"17\" x2=\"21\" y2=\"17\" />\n </svg>\n </ToolbarButton>\n <ToolbarDivider />\n </>\n )}\n\n {cfg.insert && (\n <>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleBlockquote().run()}\n isActive={editor.isActive('blockquote')}\n title={labels.blockquote}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V21z\" />\n <path d=\"M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3z\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleNode('codeBlock', 'paragraph').run()}\n isActive={editor.isActive('codeBlock')}\n title={labels.codeBlock}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"16 18 22 12 16 6\" /><polyline points=\"8 6 2 12 8 18\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton\n onClick={() => {\n editor.chain().focus().insertContent({\n type: 'codeBlock',\n attrs: { language: 'r-mermaid' },\n content: [{ type: 'text', text: 'graph TD\\n A[Start] --> B[End]' }],\n }).run();\n }}\n title={labels.mermaidBlock}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"6\" cy=\"6\" r=\"3\" /><circle cx=\"18\" cy=\"6\" r=\"3\" />\n <circle cx=\"12\" cy=\"18\" r=\"3\" />\n <line x1=\"6\" y1=\"9\" x2=\"12\" y2=\"15\" /><line x1=\"18\" y1=\"9\" x2=\"12\" y2=\"15\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton onClick={setLink} isActive={editor.isActive('link')} title={labels.link}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71\" />\n <path d=\"M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton onClick={addImage} title={labels.image}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" /><polyline points=\"21 15 16 10 5 21\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton onClick={insertTable} title={labels.table}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n <line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\" /><line x1=\"3\" y1=\"15\" x2=\"21\" y2=\"15\" />\n <line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\" /><line x1=\"15\" y1=\"3\" x2=\"15\" y2=\"21\" />\n </svg>\n </ToolbarButton>\n {cfg.tableOps && <TableOpsMenu editor={editor} labels={labels} />}\n <ToolbarButton\n onClick={() => editor.chain().focus().setHorizontalRule().run()}\n title={labels.horizontalRule}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\">\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" />\n </svg>\n </ToolbarButton>\n <ToolbarButton onClick={insertMarkdownBlock} title={labels.markdownBlock}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M2 3h20v18H2z\" />\n <path d=\"M5 15V9l3 3.5L11 9v6\" />\n <path d=\"M17 9l-2.5 3H17v3\" />\n </svg>\n </ToolbarButton>\n <MarkdownTemplateMenu labels={labels} onSelect={insertMarkdownTemplate} />\n <FloatingDialogMenu labels={labels} onInsert={insertFloatingDialog} />\n <ToolbarDivider />\n </>\n )}\n\n {cfg.color && (\n <>\n <ColorPicker\n value={editor.getAttributes('textStyle').color || ''}\n onChange={(color) => {\n if (color) {\n editor.chain().focus().setColor(color).run();\n } else {\n editor.chain().focus().unsetColor().run();\n }\n }}\n title={labels.color}\n icon={\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 2L2 22h20L12 2z\" />\n </svg>\n }\n />\n <ColorPicker\n value={editor.getAttributes('highlight').color || ''}\n onChange={(color) => {\n if (color) {\n editor.chain().focus().toggleHighlight({ color }).run();\n } else {\n editor.chain().focus().unsetHighlight().run();\n }\n }}\n title={labels.highlight}\n icon={\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 20h9\" /><path d=\"M16.5 3.5a2.121 2.121 0 013 3L7 19l-4 1 1-4L16.5 3.5z\" />\n </svg>\n }\n />\n <ToolbarDivider />\n </>\n )}\n\n {cfg.ai && hasAI && onAIClick && (\n <ToolbarButton onClick={onAIClick} title={labels.ai}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M9.5 2A2.5 2.5 0 0112 4.5v15a2.5 2.5 0 01-4.96.44 2.5 2.5 0 01-2.96-3.08 3 3 0 01-.34-5.58 2.5 2.5 0 011.32-4.24 2.5 2.5 0 011.98-3A2.5 2.5 0 019.5 2z\" />\n <path d=\"M14.5 2A2.5 2.5 0 0012 4.5v15a2.5 2.5 0 004.96.44 2.5 2.5 0 002.96-3.08 3 3 0 00.34-5.58 2.5 2.5 0 00-1.32-4.24 2.5 2.5 0 00-1.98-3A2.5 2.5 0 0014.5 2z\" />\n </svg>\n </ToolbarButton>\n )}\n\n {children}\n </div>\n );\n};\n\nexport default Toolbar;\n"],"mappings":";;;;;;;;;;AAsBA,IAAM,KAAA,CAAmC,EACvC,QAAA,GACA,QAAA,GACA,QAAQ,GACR,OAAA,GACA,WAAA,GACA,uBAAA,GACA,UAAA,EAAA,MACI;AACJ,QAAM,IAAS;AAAA,IAAE,GAAG;AAAA,IAAe,GAAG;AAAA,EAAY,GAC5C,CAAC,GAAoB,CAAA,IAAyB,EAA2C,IAAI,GAE7F,IAAgC;AAAA,IACpC,YAAY,GAAQ,cAAc;AAAA,IAClC,SAAS,GAAQ,WAAW;AAAA,IAC5B,WAAW,GAAQ,aAAa;AAAA,IAChC,MAAM,GAAQ,QAAQ;AAAA,IACtB,QAAQ,GAAQ,UAAU;AAAA,IAC1B,OAAO,GAAQ,SAAS;AAAA,IACxB,SAAS,GAAQ,WAAW;AAAA,IAC5B,IAAI,GAAQ,MAAM;AAAA,IAClB,UAAU,GAAQ,YAAY;AAAA,IAC9B,WAAW,GAAQ,aAAa;AAAA,IAChC,eAAe,GAAQ,iBAAiB;AAAA,EAC1C,GAEM,IAAU,EAAA,MAAkB;AAChC,UAAM,IAAc,EAAO,cAAc,MAAM,EAAE,MAC3C,IAAM,OAAO,OAAO,EAAO,eAAe,CAAW;AAC3D,QAAI,MAAQ,MACZ;AAAA,UAAI,MAAQ,IAAI;AACd,QAAA,EAAO,MAAM,EAAE,MAAM,EAAE,gBAAgB,MAAM,EAAE,UAAU,EAAE,IAAI;AAC/D;AAAA,MACF;AACA,MAAA,EAAO,MAAM,EAAE,MAAM,EAAE,gBAAgB,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAI,CAAC,EAAE,IAAI;AAAA;AAAA,EAC5E,GAAG,CAAC,GAAQ,EAAO,aAAa,CAAC,GAE3B,IAAW,EAAA,MAAkB;AACjC,UAAM,IAAM,OAAO,OAAO,EAAO,cAAc;AAC/C,IAAI,KACF,EAAO,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAI,CAAC,EAAE,IAAI;AAAA,EAEtD,GAAG,CAAC,GAAQ,EAAO,cAAc,CAAC,GAE5B,IAAc,EAAA,MAAkB;AACpC,IAAA,EAAO,MAAM,EAAE,MAAM,EAAE,YAAY;AAAA,MAAE,MAAM;AAAA,MAAG,MAAM;AAAA,MAAG,eAAe;AAAA,IAAK,CAAC,EAAE,IAAI;AAAA,EACpF,GAAG,CAAC,CAAM,CAAC,GAEL,IAAsB,EAAA,MAAkB;AAC5C,IAAA,EAAO,MAAM,EAAE,MAAM,EAAE,cAAc;AAAA,MACnC,MAAM;AAAA,MACN,OAAO,EAAE,UAAU,aAAa;AAAA,MAChC,SAAS,CAAC;AAAA,QAAE,MAAM;AAAA,QAAQ,MAAM;AAAA;AAAA;AAAA,MAA8C,CAAC;AAAA,IACjF,CAAC,EAAE,IAAI;AAAA,EACT,GAAG,CAAC,CAAM,CAAC,GAEL,IAAyB,EAAA,CAAa,MAAoB;AAC9D,IAAA,EAAO,MAAM,EAAE,MAAM,EAAE,cAAc;AAAA,MACnC,MAAM;AAAA,MACN,OAAO,EAAE,UAAU,aAAa;AAAA,MAChC,SAAS,CAAC;AAAA,QAAE,MAAM;AAAA,QAAQ,MAAM;AAAA,MAAQ,CAAC;AAAA,IAC3C,CAAC,EAAE,IAAI;AAAA,EACT,GAAG,CAAC,CAAM,CAAC,GAEL,IAAuB,EAAA,CAAa,IAAyD,YAAY;AAC7G,UAAM,IAAa,MAAW,UAC1B;AAAA,MAAE,GAAG;AAAA,MAAI,GAAG;AAAA,MAAI,QAAQ,EAAmB,CAAM;AAAA,IAAE,IACnD,MAAW,UACT,CAAC,IACD,EAAE,OAAO,IAAI;AACnB,IAAA,EAAO,MAAM,EAAE,MAAM,EAAE,cAAc;AAAA,MACnC,MAAM;AAAA,MACN,OAAO;AAAA,QAAE,OAAO;AAAA,QAAQ,QAAA;AAAA,QAAQ,GAAG;AAAA,MAAW;AAAA,MAC9C,SAAS,CAAC,EAAE,MAAM,YAAY,CAAC;AAAA,IACjC,CAAC,EAAE,IAAI;AAAA,EACT,GAAG,CAAC,CAAM,CAAC,GAEL,IAAsB,EAAA,MAAkB;AAC5C,QAAI,GAAoB;AACtB,MAAA,EAAsB,IAAI,GAC1B,IAAwB,EAAK;AAC7B;AAAA,IACF;AACA,UAAM,EAAE,MAAA,GAAM,IAAA,EAAA,IAAO,EAAO,MAAM;AAClC,QAAI,MAAS,EAAI;AAEjB,UAAM,IAAmC,CAAC;AAC1C,IAAA,EAAO,MAAM,IAAI,aAAa,GAAM,GAAA,CAAK,MAAS;AAChD,MAAI,EAAK,SACP,EAAK,MAAM,QAAA,CAAS,MAAS;AAC3B,QAAA,EAAM,KAAK;AAAA,UAAE,MAAM,EAAK,KAAK;AAAA,UAAM,OAAO,EAAK;AAAA,QAAM,CAAC;AAAA,MACxD,CAAC;AAAA,IAEL,CAAC,GACD,EAAsB,CAAK,GAC3B,IAAwB,EAAI;AAAA,EAC9B,GAAG;AAAA,IAAC;AAAA,IAAQ;AAAA,IAAoB;AAAA,EAAqB,CAAC;AAEtD,EAAA,EAAA,MAAgB;AACd,QAAI,CAAC,EAAoB;AAEzB,UAAM,IAAW,EAAO,KAAK,KAEvB,IAAA,MAAmB;AACvB,YAAM,EAAE,MAAA,GAAM,IAAA,EAAA,IAAO,EAAO,MAAM;AAClC,UAAI,MAAS,KAAM,CAAC,EAAoB;AAExC,YAAM,EAAE,IAAA,EAAA,IAAO,EAAO;AACtB,MAAA,EAAG,WAAW,GAAM,CAAE;AACtB,iBAAW,KAAQ,GAAoB;AACrC,cAAM,IAAW,EAAO,OAAO,MAAM,EAAK,IAAA;AAC1C,QAAI,KACF,EAAG,QAAQ,GAAM,GAAI,EAAS,OAAO,EAAK,KAAgC,CAAC;AAAA,MAE/E;AACA,MAAA,EAAO,KAAK,SAAS,CAAE,GAEvB,EAAsB,IAAI,GAC1B,IAAwB,EAAK;AAAA,IAC/B,GAEM,IAAA,MAAkB;AACtB,4BAAsB,CAAU;AAAA,IAClC;AAEA,WAAA,EAAS,iBAAiB,WAAW,CAAS,GAC9C,MAAa;AAAE,MAAA,EAAS,oBAAoB,WAAW,CAAS;AAAA,IAAG;AAAA,EACrE,GAAG;AAAA,IAAC;AAAA,IAAQ;AAAA,IAAoB;AAAA,EAAqB,CAAC;AAEtD,QAAM,IAAoB,EAAO,cAAc,WAAW,EAAE,cAAc,IACpE,IAAkB,EAAO,cAAc,WAAW,EAAE,YAAY;AAEtE,SACE,gBAAA,EAAC,OAAD;AAAA,IAAK,WAAU;AAAA,IAAf,UAAA;AAAA,MACG,EAAI,WACH,gBAAA,EAAA,GAAA,EAAA,UAAA;AAAA,QACE,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI;AAAA,UACjD,UAAU,CAAC,EAAO,IAAI,EAAE,KAAK;AAAA,UAC7B,OAAO,EAAO;AAAA,UAEd,UAAA,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,YAAvI,UAAA,CACE,gBAAA,EAAC,YAAD,EAAU,QAAO,gBAAiB,CAAA,GAClC,gBAAA,EAAC,QAAD,EAAM,GAAE,kCAAmC,CAAA,CACxC;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI;AAAA,UACjD,UAAU,CAAC,EAAO,IAAI,EAAE,KAAK;AAAA,UAC7B,OAAO,EAAO;AAAA,UAEd,UAAA,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,YAAvI,UAAA,CACE,gBAAA,EAAC,YAAD,EAAU,QAAO,mBAAoB,CAAA,GACrC,gBAAA,EAAC,QAAD,EAAM,GAAE,qCAAsC,CAAA,CAC3C;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD,CAAiB,CAAA;AAAA,MACjB,EAAA,CAAA;AAAA,MAGH,EAAI,aACH,gBAAA,EAAA,GAAA,EAAA,UAAA;AAAA,QACE,gBAAA,EAAC,GAAD;AAAA,UACE,OAAO;AAAA,UACP,SAAS;AAAA,UACT,UAAA,CAAW,MAAQ;AACjB,YAAI,IACF,EAAO,MAAM,EAAE,MAAM,EAAE,cAAc,CAAG,EAAE,IAAI,IAE9C,EAAO,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI;AAAA,UAEjD;AAAA,UACA,OAAO,EAAO;AAAA,UACd,OAAO;AAAA,QACR,CAAA;AAAA,QACD,gBAAA,EAAC,GAAD;AAAA,UACE,OAAO;AAAA,UACP,SAAS;AAAA,UACT,UAAA,CAAW,MAAQ;AACjB,YAAI,IACF,EAAQ,MAAM,EAAE,MAAM,EAAU,YAAY,CAAG,EAAE,IAAI,IAErD,EAAQ,MAAM,EAAE,MAAM,EAAU,cAAc,EAAE,IAAI;AAAA,UAExD;AAAA,UACA,OAAO,EAAO;AAAA,UACd,OAAO;AAAA,QACR,CAAA;AAAA,QACD,gBAAA,EAAC,GAAD,CAAiB,CAAA;AAAA,MACjB,EAAA,CAAA;AAAA,MAGH,EAAI,cACH,gBAAA,EAAA,GAAA,EAAA,UAAA;AAAA,QACE,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI;AAAA,UACvD,UAAU,EAAO,SAAS,MAAM;AAAA,UAChC,OAAO,EAAO;AAAA,UAEd,UAAA,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAM,eAAc;AAAA,YAAQ,gBAAe;AAAA,YAAzI,UAAA,CACE,gBAAA,EAAC,QAAD,EAAM,GAAE,qCAAsC,CAAA,GAC9C,gBAAA,EAAC,QAAD,EAAM,GAAE,sCAAuC,CAAA,CAC5C;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI;AAAA,UACzD,UAAU,EAAO,SAAS,QAAQ;AAAA,UAClC,OAAO,EAAO;AAAA,UAEd,UAAA,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,YAAvI,UAAA;AAAA,cACE,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAK,CAAA;AAAA,cACrC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,cACtC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,YAClC;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI;AAAA,UAC5D,UAAU,EAAO,SAAS,WAAW;AAAA,UACrC,OAAO,EAAO;AAAA,UAEd,UAAA,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,YAAvI,UAAA,CACE,gBAAA,EAAC,QAAD,EAAM,GAAE,mCAAoC,CAAA,GAC5C,gBAAA,EAAC,QAAD;AAAA,cAAM,IAAG;AAAA,cAAI,IAAG;AAAA,cAAK,IAAG;AAAA,cAAK,IAAG;AAAA,YAAM,CAAA,CACnC;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI;AAAA,UACzD,UAAU,EAAO,SAAS,QAAQ;AAAA,UAClC,OAAO,EAAO;AAAA,UAEd,UAAA,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,YAAvI,UAAA;AAAA,cACE,gBAAA,EAAC,QAAD,EAAM,GAAE,2EAA4E,CAAA;AAAA,cACpF,gBAAA,EAAC,QAAD,EAAM,GAAE,sDAAuD,CAAA;AAAA,cAC/D,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAM,CAAA;AAAA,YACnC;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI;AAAA,UAC5D,UAAU,EAAO,SAAS,WAAW;AAAA,UACrC,OAAO,EAAO;AAAA,UAEd,UAAA,gBAAA,EAAC,QAAD;AAAA,YAAM,OAAO;AAAA,cAAE,UAAU;AAAA,cAAQ,YAAY;AAAA,YAAI;AAAA,YAAjD,UAAA,CAAoD,KAAC,gBAAA,EAAC,OAAD;AAAA,cAAK,OAAO,EAAE,UAAU,MAAM;AAAA,cAAG,UAAA;AAAA,YAAM,CAAA,CAAO;AAAA;QACtF,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,IAAI;AAAA,UAC9D,UAAU,EAAO,SAAS,aAAa;AAAA,UACvC,OAAO,EAAO;AAAA,UAEd,UAAA,gBAAA,EAAC,QAAD;AAAA,YAAM,OAAO;AAAA,cAAE,UAAU;AAAA,cAAQ,YAAY;AAAA,YAAI;AAAA,YAAjD,UAAA,CAAoD,KAAC,gBAAA,EAAC,OAAD;AAAA,cAAK,OAAO,EAAE,UAAU,MAAM;AAAA,cAAG,UAAA;AAAA,YAAM,CAAA,CAAO;AAAA;QACtF,CAAA;AAAA,QACd,EAAI,iBACH,gBAAA,EAAC,GAAD;AAAA,UACE,SAAS;AAAA,UACT,UAAU,CAAC,CAAC;AAAA,UACZ,OAAO,IAAqB,EAAO,sBAAsB,EAAO;AAAA,UAEhE,UAAA,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,YAAvI,UAAA;AAAA,cACE,gBAAA,EAAC,QAAD,EAAM,GAAE,oEAAqE,CAAA;AAAA,cAC7E,gBAAA,EAAC,QAAD,EAAM,GAAE,yBAA0B,CAAA;AAAA,cAClC,gBAAA,EAAC,QAAD,EAAM,GAAE,aAAc,CAAA;AAAA,cACtB,gBAAA,EAAC,QAAD,EAAM,GAAE,UAAW,CAAA;AAAA,YAChB;AAAA;QACQ,CAAA;AAAA,QAEjB,gBAAA,EAAC,GAAD,CAAiB,CAAA;AAAA,MACjB,EAAA,CAAA;AAAA,MAGH,EAAI,WACH,gBAAA,EAAA,GAAA,EAAA,UAAA,CACI;AAAA,QAAC;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MAAC,EAAY,IAAA,CAAK,MAClC,gBAAA,EAAC,GAAD;AAAA,QAEE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,OAAA,EAAM,CAAC,EAAE,IAAI;AAAA,QACnE,UAAU,EAAO,SAAS,WAAW,EAAE,OAAA,EAAM,CAAC;AAAA,QAC9C,OAAO,GAAG,EAAO,OAAA,IAAW,CAAA;AAAA,QAE5B,UAAA,gBAAA,EAAC,QAAD;AAAA,UAAM,OAAO;AAAA,YAAE,UAAU;AAAA,YAAQ,YAAY;AAAA,UAAI;AAAA,UAAjD,UAAA,CAAoD,KAAE,CAAY;AAAA;MACrD,GANR,CAMQ,CAChB,GACD,gBAAA,EAAC,GAAD,CAAiB,CAAA,CACjB,EAAA,CAAA;AAAA,MAGH,EAAI,aACH,gBAAA,EAAA,GAAA,EAAA,UAAA;AAAA,QACE,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,aAAa,MAAM,EAAE,IAAI;AAAA,UAC/D,UAAU,EAAO,SAAS,EAAE,WAAW,OAAO,CAAC;AAAA,UAC/C,OAAO,EAAO;AAAA,UAEd,UAAA,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,YAAvI,UAAA;AAAA,cACE,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAK,CAAA;AAAA,cAC3E,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,YAC1E;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,aAAa,QAAQ,EAAE,IAAI;AAAA,UACjE,UAAU,EAAO,SAAS,EAAE,WAAW,SAAS,CAAC;AAAA,UACjD,OAAO,EAAO;AAAA,UAEd,UAAA,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,YAAvI,UAAA;AAAA,cACE,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAK,CAAA;AAAA,cAC3E,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,YAC1E;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,aAAa,OAAO,EAAE,IAAI;AAAA,UAChE,UAAU,EAAO,SAAS,EAAE,WAAW,QAAQ,CAAC;AAAA,UAChD,OAAO,EAAO;AAAA,UAEd,UAAA,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,YAAvI,UAAA;AAAA,cACE,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAK,CAAA;AAAA,cAC3E,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,YAC1E;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,aAAa,SAAS,EAAE,IAAI;AAAA,UAClE,UAAU,EAAO,SAAS,EAAE,WAAW,UAAU,CAAC;AAAA,UAClD,OAAO,EAAO;AAAA,UAEd,UAAA,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,YAAvI,UAAA;AAAA,cACE,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAK,CAAA;AAAA,cAC3E,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,YAC1E;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD,CAAiB,CAAA;AAAA,MACjB,EAAA,CAAA;AAAA,MAGH,EAAI,QACH,gBAAA,EAAA,GAAA,EAAA,UAAA;AAAA,QACE,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI;AAAA,UAC7D,UAAU,EAAO,SAAS,YAAY;AAAA,UACtC,OAAO,EAAO;AAAA,UAEd,UAAA,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,YAAvI,UAAA;AAAA,cACE,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAK,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAM,CAAA;AAAA,cAC3E,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAM,CAAA;AAAA,cACtC,gBAAA,EAAC,UAAD;AAAA,gBAAQ,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,GAAE;AAAA,gBAAI,MAAK;AAAA,cAAgB,CAAA;AAAA,cAAC,gBAAA,EAAC,UAAD;AAAA,gBAAQ,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,GAAE;AAAA,gBAAI,MAAK;AAAA,cAAgB,CAAA;AAAA,cACpG,gBAAA,EAAC,UAAD;AAAA,gBAAQ,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,GAAE;AAAA,gBAAI,MAAK;AAAA,cAAgB,CAAA;AAAA,YAC/C;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,IAAI;AAAA,UAC9D,UAAU,EAAO,SAAS,aAAa;AAAA,UACvC,OAAO,EAAO;AAAA,UAEd,UAAA,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,YAAvI,UAAA;AAAA,cACE,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAK,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAM,CAAA;AAAA,cAC7E,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAM,CAAA;AAAA,cACvC,gBAAA,EAAC,QAAD;AAAA,gBAAM,GAAE;AAAA,gBAAI,GAAE;AAAA,gBAAI,UAAS;AAAA,gBAAI,MAAK;AAAA,gBAAe,QAAO;AAAA,gBAAO,YAAW;AAAA,gBAAO,UAAA;AAAA,cAAO,CAAA;AAAA,cAC1F,gBAAA,EAAC,QAAD;AAAA,gBAAM,GAAE;AAAA,gBAAI,GAAE;AAAA,gBAAK,UAAS;AAAA,gBAAI,MAAK;AAAA,gBAAe,QAAO;AAAA,gBAAO,YAAW;AAAA,gBAAO,UAAA;AAAA,cAAO,CAAA;AAAA,cAC3F,gBAAA,EAAC,QAAD;AAAA,gBAAM,GAAE;AAAA,gBAAI,GAAE;AAAA,gBAAK,UAAS;AAAA,gBAAI,MAAK;AAAA,gBAAe,QAAO;AAAA,gBAAO,YAAW;AAAA,gBAAO,UAAA;AAAA,cAAO,CAAA;AAAA,YACxF;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI;AAAA,UAC3D,UAAU,EAAO,SAAS,UAAU;AAAA,UACpC,OAAO,EAAO;AAAA,UAEd,UAAA,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,YAAvI,UAAA;AAAA,cACE,gBAAA,EAAC,QAAD;AAAA,gBAAM,GAAE;AAAA,gBAAI,GAAE;AAAA,gBAAI,OAAM;AAAA,gBAAI,QAAO;AAAA,gBAAI,IAAG;AAAA,cAAK,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD,EAAM,GAAE,qBAAsB,CAAA;AAAA,cAC9E,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAK,CAAA;AAAA,cACrC,gBAAA,EAAC,QAAD;AAAA,gBAAM,GAAE;AAAA,gBAAI,GAAE;AAAA,gBAAK,OAAM;AAAA,gBAAI,QAAO;AAAA,gBAAI,IAAG;AAAA,cAAK,CAAA;AAAA,cAChD,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAM,CAAA;AAAA,YACpC;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD,CAAiB,CAAA;AAAA,MACjB,EAAA,CAAA;AAAA,MAGH,EAAI,UACH,gBAAA,EAAA,GAAA,EAAA,UAAA;AAAA,QACE,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI;AAAA,UAC7D,UAAU,EAAO,SAAS,YAAY;AAAA,UACtC,OAAO,EAAO;AAAA,UAEd,UAAA,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,YAAvI,UAAA,CACE,gBAAA,EAAC,QAAD,EAAM,GAAE,qIAAsI,CAAA,GAC9I,gBAAA,EAAC,QAAD,EAAM,GAAE,mHAAoH,CAAA,CACzH;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,WAAW,aAAa,WAAW,EAAE,IAAI;AAAA,UAC/E,UAAU,EAAO,SAAS,WAAW;AAAA,UACrC,OAAO,EAAO;AAAA,UAEd,UAAA,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,YAAvI,UAAA,CACE,gBAAA,EAAC,YAAD,EAAU,QAAO,mBAAoB,CAAA,GAAC,gBAAA,EAAC,YAAD,EAAU,QAAO,gBAAiB,CAAA,CACrE;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe;AACb,YAAA,EAAO,MAAM,EAAE,MAAM,EAAE,cAAc;AAAA,cACnC,MAAM;AAAA,cACN,OAAO,EAAE,UAAU,YAAY;AAAA,cAC/B,SAAS,CAAC;AAAA,gBAAE,MAAM;AAAA,gBAAQ,MAAM;AAAA;AAAA,cAAoC,CAAC;AAAA,YACvE,CAAC,EAAE,IAAI;AAAA,UACT;AAAA,UACA,OAAO,EAAO;AAAA,UAEd,UAAA,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,YAAvI,UAAA;AAAA,cACE,gBAAA,EAAC,UAAD;AAAA,gBAAQ,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,GAAE;AAAA,cAAK,CAAA;AAAA,cAAC,gBAAA,EAAC,UAAD;AAAA,gBAAQ,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,GAAE;AAAA,cAAK,CAAA;AAAA,cAC5D,gBAAA,EAAC,UAAD;AAAA,gBAAQ,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,GAAE;AAAA,cAAK,CAAA;AAAA,cAC/B,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAM,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAM,CAAA;AAAA,YACzE;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UAAe,SAAS;AAAA,UAAS,UAAU,EAAO,SAAS,MAAM;AAAA,UAAG,OAAO,EAAO;AAAA,UAChF,UAAA,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,YAAvI,UAAA,CACE,gBAAA,EAAC,QAAD,EAAM,GAAE,2DAA4D,CAAA,GACpE,gBAAA,EAAC,QAAD,EAAM,GAAE,4DAA6D,CAAA,CAClE;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UAAe,SAAS;AAAA,UAAU,OAAO,EAAO;AAAA,UAC9C,UAAA,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,YAAvI,UAAA;AAAA,cACE,gBAAA,EAAC,QAAD;AAAA,gBAAM,GAAE;AAAA,gBAAI,GAAE;AAAA,gBAAI,OAAM;AAAA,gBAAK,QAAO;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAK,CAAA;AAAA,cACxD,gBAAA,EAAC,UAAD;AAAA,gBAAQ,IAAG;AAAA,gBAAM,IAAG;AAAA,gBAAM,GAAE;AAAA,cAAO,CAAA;AAAA,cAAC,gBAAA,EAAC,YAAD,EAAU,QAAO,mBAAoB,CAAA;AAAA,YACtE;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UAAe,SAAS;AAAA,UAAa,OAAO,EAAO;AAAA,UACjD,UAAA,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,YAAvI,UAAA;AAAA,cACE,gBAAA,EAAC,QAAD;AAAA,gBAAM,GAAE;AAAA,gBAAI,GAAE;AAAA,gBAAI,OAAM;AAAA,gBAAK,QAAO;AAAA,gBAAK,IAAG;AAAA,cAAK,CAAA;AAAA,cACjD,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAK,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAM,CAAA;AAAA,cAC3E,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA;AAAA,cAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAM,CAAA;AAAA,YACxE;AAAA;QACQ,CAAA;AAAA,QACd,EAAI,YAAY,gBAAA,EAAC,GAAD;AAAA,UAAsB,QAAA;AAAA,UAAgB,QAAA;AAAA,QAAS,CAAA;AAAA,QAChE,gBAAA,EAAC,GAAD;AAAA,UACE,SAAA,MAAe,EAAO,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,IAAI;AAAA,UAC9D,OAAO,EAAO;AAAA,UAEd,UAAA,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAC9G,UAAA,gBAAA,EAAC,QAAD;AAAA,cAAM,IAAG;AAAA,cAAI,IAAG;AAAA,cAAK,IAAG;AAAA,cAAK,IAAG;AAAA,YAAM,CAAA;AAAA,UACnC,CAAA;AAAA,QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UAAe,SAAS;AAAA,UAAqB,OAAO,EAAO;AAAA,UACzD,UAAA,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,YAAvI,UAAA;AAAA,cACE,gBAAA,EAAC,QAAD,EAAM,GAAE,gBAAiB,CAAA;AAAA,cACzB,gBAAA,EAAC,QAAD,EAAM,GAAE,uBAAwB,CAAA;AAAA,cAChC,gBAAA,EAAC,QAAD,EAAM,GAAE,oBAAqB,CAAA;AAAA,YAC1B;AAAA;QACQ,CAAA;AAAA,QACf,gBAAA,EAAC,GAAD;AAAA,UAA8B,QAAA;AAAA,UAAQ,UAAU;AAAA,QAAyB,CAAA;AAAA,QACzE,gBAAA,EAAC,GAAD;AAAA,UAA4B,QAAA;AAAA,UAAQ,UAAU;AAAA,QAAuB,CAAA;AAAA,QACrE,gBAAA,EAAC,GAAD,CAAiB,CAAA;AAAA,MACjB,EAAA,CAAA;AAAA,MAGH,EAAI,SACH,gBAAA,EAAA,GAAA,EAAA,UAAA;AAAA,QACE,gBAAA,EAAC,GAAD;AAAA,UACE,OAAO,EAAO,cAAc,WAAW,EAAE,SAAS;AAAA,UAClD,UAAA,CAAW,MAAU;AACnB,YAAI,IACF,EAAO,MAAM,EAAE,MAAM,EAAE,SAAS,CAAK,EAAE,IAAI,IAE3C,EAAO,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI;AAAA,UAE5C;AAAA,UACA,OAAO,EAAO;AAAA,UACd,MACE,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,YACrI,UAAA,gBAAA,EAAC,QAAD,EAAM,GAAE,sBAAuB,CAAA;AAAA,UAC5B,CAAA;AAAA,QAER,CAAA;AAAA,QACD,gBAAA,EAAC,GAAD;AAAA,UACE,OAAO,EAAO,cAAc,WAAW,EAAE,SAAS;AAAA,UAClD,UAAA,CAAW,MAAU;AACnB,YAAI,IACF,EAAO,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAA,EAAM,CAAC,EAAE,IAAI,IAEtD,EAAO,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI;AAAA,UAEhD;AAAA,UACA,OAAO,EAAO;AAAA,UACd,MACE,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAM;AAAA,YAAK,QAAO;AAAA,YAAK,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,QAAO;AAAA,YAAe,aAAY;AAAA,YAAI,eAAc;AAAA,YAAQ,gBAAe;AAAA,YAAvI,UAAA,CACE,gBAAA,EAAC,QAAD,EAAM,GAAE,WAAY,CAAA,GAAC,gBAAA,EAAC,QAAD,EAAM,GAAE,wDAAyD,CAAA,CACnF;AAAA;QAER,CAAA;AAAA,QACD,gBAAA,EAAC,GAAD,CAAiB,CAAA;AAAA,MACjB,EAAA,CAAA;AAAA,MAGH,EAAI,MAAM,KAAS,KAClB,gBAAA,EAAC,GAAD;AAAA,QAAe,SAAS;AAAA,QAAW,OAAO,EAAO;AAAA,QAC/C,UAAA,gBAAA,EAAC,OAAD;AAAA,UAAK,OAAM;AAAA,UAAK,QAAO;AAAA,UAAK,SAAQ;AAAA,UAAY,MAAK;AAAA,UAAO,QAAO;AAAA,UAAe,aAAY;AAAA,UAAI,eAAc;AAAA,UAAQ,gBAAe;AAAA,UAAvI,UAAA,CACE,gBAAA,EAAC,QAAD,EAAM,GAAE,yJAA0J,CAAA,GAClK,gBAAA,EAAC,QAAD,EAAM,GAAE,0JAA2J,CAAA,CAChK;AAAA;MACQ,CAAA;AAAA,MAGhB;AAAA,IACE;AAAA;AAET"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeBlockView.js","names":[],"sources":["../../../../../src/components/pro/RichTextEditor/extensions/CodeBlockView.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\nimport { Node, mergeAttributes, textblockTypeInputRule } from '@tiptap/react';\nimport { Plugin, PluginKey } from '@tiptap/pm/state';\nimport { NodeViewWrapper, NodeViewContent, ReactNodeViewRenderer } from '@tiptap/react';\nimport type { NodeViewProps } from '@tiptap/react';\nimport { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';\nimport { oneLight } from 'react-syntax-highlighter/dist/esm/styles/prism';\nimport ReactMarkdown from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport remarkMath from 'remark-math';\nimport rehypeKatex from 'rehype-katex';\nimport rehypeRaw from 'rehype-raw';\nimport mermaid from 'mermaid';\nimport 'katex/dist/katex.min.css';\n\nlet mermaidInitialized = false;\n\nfunction initMermaid() {\n if (!mermaidInitialized) {\n mermaid.initialize({\n startOnLoad: false,\n theme: 'default',\n securityLevel: 'loose',\n fontFamily: 'inherit',\n flowchart: { useMaxWidth: true, htmlLabels: true },\n });\n mermaidInitialized = true;\n }\n}\n\nconst MermaidRenderer: React.FC<{ code: string }> = ({ code }) => {\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!code.trim() || !containerRef.current) return;\n initMermaid();\n\n let cancelled = false;\n const render = async () => {\n try {\n const id = `mermaid-cb-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;\n const { svg } = await mermaid.render(id, code);\n if (!cancelled && containerRef.current) {\n containerRef.current.innerHTML = svg;\n }\n } catch (err) {\n if (!cancelled && containerRef.current) {\n containerRef.current.innerHTML = `<pre style=\"color:#ef4444;font-size:12px;padding:8px;\">${String(err)}</pre>`;\n }\n }\n };\n render();\n return () => { cancelled = true; };\n }, [code]);\n\n return <div ref={containerRef} className=\"rte-mermaid-container\" />;\n};\n\nconst KatexRenderer: React.FC<{ code: string }> = ({ code }) => {\n const wrapped = code.includes('$$') ? code : `$$\\n${code}\\n$$`;\n return (\n <ReactMarkdown\n remarkPlugins={[remarkMath]}\n rehypePlugins={[rehypeKatex]}\n >\n {wrapped}\n </ReactMarkdown>\n );\n};\n\nconst MarkdownRenderer: React.FC<{ code: string }> = ({ code }) => {\n return (\n <ReactMarkdown\n remarkPlugins={[remarkGfm, remarkMath]}\n rehypePlugins={[rehypeKatex, rehypeRaw]}\n components={{\n code({ className, children, ...props }) {\n const match = /language-(\\w+)/.exec(className || '');\n const lang = match?.[1];\n const text = String(children).replace(/\\n$/, '');\n\n if (lang === 'mermaid') return <MermaidRenderer code={text} />;\n\n if (lang) {\n return (\n <SyntaxHighlighter\n style={oneLight as Record<string, React.CSSProperties>}\n language={lang}\n PreTag=\"div\"\n customStyle={{ borderRadius: '0.5rem', fontSize: '0.875em', padding: '1em', margin: '0.5em 0' }}\n >\n {text}\n </SyntaxHighlighter>\n );\n }\n return <code className={className} {...props}>{children}</code>;\n },\n }}\n >\n {code}\n </ReactMarkdown>\n );\n};\n\nconst RENDER_LANGUAGES = ['r-markdown', 'r-mermaid', 'r-math'];\n\nconst HIGHLIGHT_LANGUAGES = [\n '', 'javascript', 'typescript', 'python', 'rust', 'go', 'java', 'c', 'cpp',\n 'csharp', 'ruby', 'php', 'swift', 'kotlin', 'sql', 'bash', 'shell',\n 'html', 'css', 'json', 'yaml', 'toml', 'xml', 'markdown', 'mermaid', 'math',\n 'docker', 'graphql', 'latex', 'tex',\n];\n\nconst ALL_LANGUAGES = [...HIGHLIGHT_LANGUAGES, ...RENDER_LANGUAGES];\n\nfunction isRenderLang(lang: string): boolean {\n return RENDER_LANGUAGES.includes(lang);\n}\n\nfunction highlightLang(lang: string): string {\n if (lang === 'math' || lang === 'latex' || lang === 'tex') return 'latex';\n return lang;\n}\n\nconst CodeBlockNodeView: React.FC<NodeViewProps> = ({\n node,\n updateAttributes,\n}) => {\n const language = node.attrs.language || '';\n const textContent = node.textContent;\n const hasLanguage = !!language;\n const isRenderable = isRenderLang(language);\n\n const [isEditing, setIsEditing] = useState(true);\n\n useEffect(() => {\n if (!hasLanguage) setIsEditing(true);\n }, [language, hasLanguage]);\n\n const editIcon = (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7\" />\n <path d=\"M18.5 2.5a2.121 2.121 0 013 3L12 15l-4 1 1-4 9.5-9.5z\" />\n </svg>\n );\n const previewIcon = (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n );\n\n const renderPreview = () => {\n if (language === 'r-mermaid') {\n return textContent.trim()\n ? <MermaidRenderer code={textContent} />\n : <p className=\"rte-codeblock__placeholder\">Enter mermaid diagram code...</p>;\n }\n if (language === 'r-math') {\n return textContent.trim()\n ? <KatexRenderer code={textContent} />\n : <p className=\"rte-codeblock__placeholder\">Enter KaTeX math formula...</p>;\n }\n if (language === 'r-markdown') {\n return textContent.trim()\n ? <MarkdownRenderer code={textContent} />\n : <p className=\"rte-codeblock__placeholder\">Enter Markdown content...</p>;\n }\n return null;\n };\n\n const displayLabel = language.startsWith('r-') ? language.slice(2) + ' (render)' : language || 'plain text';\n\n return (\n <NodeViewWrapper className={`rte-codeblock-wrapper ${!isEditing && hasLanguage ? 'rte-codeblock-wrapper--preview' : ''}`}>\n {isEditing ? (\n <>\n <div className=\"rte-codeblock__header\">\n <select\n className=\"rte-codeblock__lang-select\"\n value={language}\n onChange={(e) => {\n updateAttributes({ language: e.target.value });\n if (!e.target.value) setIsEditing(true);\n }}\n contentEditable={false}\n >\n <option value=\"\">Plain text</option>\n <optgroup label=\"Syntax Highlight\">\n {HIGHLIGHT_LANGUAGES.filter(Boolean).map((lang) => (\n <option key={lang} value={lang}>{lang}</option>\n ))}\n </optgroup>\n <optgroup label=\"Live Render\">\n {RENDER_LANGUAGES.map((lang) => (\n <option key={lang} value={lang}>{lang}</option>\n ))}\n </optgroup>\n </select>\n {hasLanguage && (\n <button\n type=\"button\"\n className=\"rte-codeblock__preview-btn\"\n onClick={() => setIsEditing(false)}\n contentEditable={false}\n >\n {previewIcon} Preview\n </button>\n )}\n </div>\n <pre className=\"rte-codeblock__editable-pre\">\n <NodeViewContent as={'code' as any} />\n </pre>\n </>\n ) : isRenderable ? (\n <div\n className=\"rte-codeblock__render-preview\"\n contentEditable={false}\n onDoubleClick={() => setIsEditing(true)}\n >\n <div className=\"rte-codeblock__preview-toolbar\" contentEditable={false}>\n <span className=\"rte-codeblock__preview-label\">{displayLabel}</span>\n <button\n type=\"button\"\n className=\"rte-codeblock__preview-edit-btn\"\n onClick={() => setIsEditing(true)}\n >\n {editIcon} Edit\n </button>\n </div>\n <div className=\"rte-codeblock__render-body\">\n {renderPreview()}\n </div>\n </div>\n ) : (\n <div\n className=\"rte-codeblock__syntax-preview\"\n contentEditable={false}\n onDoubleClick={() => setIsEditing(true)}\n >\n <div className=\"rte-codeblock__preview-toolbar\" contentEditable={false}>\n <span className=\"rte-codeblock__preview-label\">{displayLabel}</span>\n <button\n type=\"button\"\n className=\"rte-codeblock__preview-edit-btn\"\n onClick={() => setIsEditing(true)}\n >\n {editIcon} Edit\n </button>\n </div>\n <SyntaxHighlighter\n style={oneLight as Record<string, React.CSSProperties>}\n language={highlightLang(language)}\n PreTag=\"div\"\n customStyle={{\n borderRadius: '0 0 0.5rem 0.5rem',\n fontSize: '0.875em',\n padding: '1em',\n margin: '0',\n }}\n >\n {textContent || ' '}\n </SyntaxHighlighter>\n </div>\n )}\n </NodeViewWrapper>\n );\n};\n\nconst backtickInputRegex = /^```([a-z-]*)[\\s\\n]$/;\nconst tildeInputRegex = /^~~~([a-z-]*)[\\s\\n]$/;\nconst tableShortcutRegex = /^(?:```|~~~)table(?:(\\d+)[x×X\\*](\\d+))?\\s?$/;\n\nexport const CodeBlockExtension = Node.create({\n name: 'codeBlock',\n group: 'block',\n content: 'text*',\n marks: '',\n code: true,\n defining: true,\n\n addAttributes() {\n return {\n language: {\n default: null,\n parseHTML: (element) => {\n const classAttr = element.querySelector('code')?.className ||\n element.className || '';\n const match = /language-([\\w-]+)/.exec(classAttr);\n return match?.[1] || element.getAttribute('data-language') || null;\n },\n renderHTML: (attributes) => {\n if (!attributes.language) return {};\n return { 'data-language': attributes.language };\n },\n },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: 'pre',\n preserveWhitespace: 'full',\n },\n ];\n },\n\n renderHTML({ node, HTMLAttributes }) {\n return [\n 'pre',\n mergeAttributes(HTMLAttributes, { 'data-language': node.attrs.language }),\n ['code', { class: node.attrs.language ? `language-${node.attrs.language}` : undefined }, 0],\n ];\n },\n\n addInputRules() {\n return [\n textblockTypeInputRule({\n find: backtickInputRegex,\n type: this.type,\n getAttributes: (match) => {\n if (match[1]?.startsWith('table')) return false;\n return { language: match[1] || null };\n },\n }),\n textblockTypeInputRule({\n find: tildeInputRegex,\n type: this.type,\n getAttributes: (match) => {\n if (match[1]?.startsWith('table')) return false;\n return { language: match[1] || null };\n },\n }),\n ];\n },\n\n addProseMirrorPlugins() {\n const editorRef = this.editor;\n return [\n new Plugin({\n key: new PluginKey('tableShortcut'),\n props: {\n handleTextInput(view, from, to, text) {\n if (text !== ' ') return false;\n const { state } = view;\n const $from = state.doc.resolve(from);\n const blockStart = $from.start();\n const textBefore = state.doc.textBetween(blockStart, from, '\\0');\n const full = textBefore + ' ';\n const m = tableShortcutRegex.exec(full);\n if (!m) return false;\n\n const rows = Math.min(Math.max(parseInt(m[1], 10) || 3, 1), 20);\n const cols = Math.min(Math.max(parseInt(m[2], 10) || 3, 1), 20);\n dispatchTable(view, blockStart, to, rows, cols);\n return true;\n },\n handleKeyDown(view, event) {\n if (event.key !== 'Enter') return false;\n const { state } = view;\n const { $from } = state.selection;\n if (!$from.parent.isTextblock) return false;\n const blockStart = $from.start();\n const textBefore = state.doc.textBetween(blockStart, $from.pos, '\\0');\n const m = tableShortcutRegex.exec(textBefore);\n if (!m) return false;\n\n event.preventDefault();\n const rows = Math.min(Math.max(parseInt(m[1], 10) || 3, 1), 20);\n const cols = Math.min(Math.max(parseInt(m[2], 10) || 3, 1), 20);\n dispatchTable(view, blockStart, $from.pos, rows, cols);\n return true;\n },\n },\n }),\n ];\n\n function dispatchTable(view: typeof editorRef.view, from: number, to: number, rows: number, cols: number) {\n const { state } = view;\n const $from = state.doc.resolve(from);\n const blockNode = $from.parent;\n const blockPos = $from.before();\n\n const tableType = state.schema.nodes.table;\n const rowType = state.schema.nodes.tableRow;\n const headerType = state.schema.nodes.tableHeader;\n const cellType = state.schema.nodes.tableCell;\n if (!tableType || !rowType || !cellType) return;\n\n const emptyParagraph = state.schema.nodes.paragraph.create();\n const buildRow = (isHeader: boolean) => {\n const type = isHeader && headerType ? headerType : cellType;\n const cells = Array.from({ length: cols }, () => type.create(null, emptyParagraph));\n return rowType.create(null, cells);\n };\n\n const tableRows = [\n buildRow(true),\n ...Array.from({ length: rows - 1 }, () => buildRow(false)),\n ];\n const table = tableType.create(null, tableRows);\n const tr = state.tr.replaceWith(blockPos, blockPos + blockNode.nodeSize, table);\n view.dispatch(tr);\n }\n },\n\n addKeyboardShortcuts() {\n return {\n 'Mod-Alt-c': () => this.editor.commands.toggleNode('codeBlock', 'paragraph'),\n Tab: ({ editor }) => {\n if (editor.isActive('codeBlock')) {\n editor.commands.insertContent('\\t');\n return true;\n }\n return false;\n },\n Enter: ({ editor }) => {\n if (!editor.isActive('codeBlock')) return false;\n editor.commands.newlineInCode();\n return true;\n },\n ArrowDown: ({ editor }) => {\n if (!editor.isActive('codeBlock')) return false;\n const { $from } = editor.state.selection;\n const isAtEnd = $from.parentOffset === $from.parent.content.size;\n if (!isAtEnd) return false;\n const after = $from.after();\n if (after === undefined) return false;\n const nodeAfter = editor.state.doc.nodeAt(after);\n if (nodeAfter) return false;\n editor.commands.exitCode();\n return true;\n },\n };\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(CodeBlockNodeView);\n },\n});\n\nexport default CodeBlockExtension;\n"],"mappings":";;;;;;;;;;;;;AAeA,IAAI,IAAqB;AAEzB,SAAS,IAAc;AACrB,EAAK,MACH,EAAQ,WAAW;AAAA,IACjB,aAAa;AAAA,IACb,OAAO;AAAA,IACP,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,WAAW;AAAA,MAAE,aAAa;AAAA,MAAM,YAAY;AAAA,IAAK;AAAA,EACnD,CAAC,GACD,IAAqB;AAEzB;AAEA,IAAM,IAAA,CAA+C,EAAE,MAAA,EAAA,MAAW;AAChE,QAAM,IAAe,EAAuB,IAAI;AAEhD,SAAA,EAAA,MAAgB;AACd,QAAI,CAAC,EAAK,KAAK,KAAK,CAAC,EAAa,QAAS;AAC3C,IAAA,EAAY;AAEZ,QAAI,IAAY;AAchB,YAbe,YAAY;AACzB,UAAI;AACF,cAAM,IAAK,cAAc,KAAK,IAAI,CAAA,IAAK,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAA,IACtE,EAAE,KAAA,EAAA,IAAQ,MAAM,EAAQ,OAAO,GAAI,CAAI;AAC7C,QAAI,CAAC,KAAa,EAAa,YAC7B,EAAa,QAAQ,YAAY;AAAA,MAErC,SAAS,GAAK;AACZ,QAAI,CAAC,KAAa,EAAa,YAC7B,EAAa,QAAQ,YAAY,0DAA0D,OAAO,CAAG,CAAA;AAAA,MAEzG;AAAA,IACF,GACO,GACP,MAAa;AAAE,MAAA,IAAY;AAAA,IAAM;AAAA,EACnC,GAAG,CAAC,CAAI,CAAC,GAEF,gBAAA,EAAC,OAAD;AAAA,IAAK,KAAK;AAAA,IAAc,WAAU;AAAA,EAAyB,CAAA;AACpE,GAEM,IAAA,CAA6C,EAAE,MAAA,EAAA,MAAW;AAC9D,QAAM,IAAU,EAAK,SAAS,IAAI,IAAI,IAAO;AAAA,EAAO,CAAA;AAAA;AACpD,SACE,gBAAA,EAAC,GAAD;AAAA,IACE,eAAe,CAAC,CAAU;AAAA,IAC1B,eAAe,CAAC,CAAW;AAAA,cAE1B;AAAA,EACY,CAAA;AAEnB,GAEM,IAAA,CAAgD,EAAE,MAAA,EAAA,MAEpD,gBAAA,EAAC,GAAD;AAAA,EACE,eAAe,CAAC,GAAW,CAAU;AAAA,EACrC,eAAe,CAAC,GAAa,CAAS;AAAA,EACtC,YAAY,EACV,KAAK,EAAE,WAAA,GAAW,UAAA,GAAU,GAAG,EAAA,GAAS;AAEtC,UAAM,IADQ,iBAAiB,KAAK,KAAa,EACpC,IAAQ,CAAA,GACf,IAAO,OAAO,CAAQ,EAAE,QAAQ,OAAO,EAAE;AAE/C,WAAI,MAAS,YAAkB,gBAAA,EAAC,GAAD,EAAiB,MAAM,EAAO,CAAA,IAEzD,IAEA,gBAAA,EAAC,GAAD;AAAA,MACE,OAAO;AAAA,MACP,UAAU;AAAA,MACV,QAAO;AAAA,MACP,aAAa;AAAA,QAAE,cAAc;AAAA,QAAU,UAAU;AAAA,QAAW,SAAS;AAAA,QAAO,QAAQ;AAAA,MAAU;AAAA,gBAE7F;AAAA,IACgB,CAAA,IAGhB,gBAAA,EAAC,QAAD;AAAA,MAAiB,WAAA;AAAA,MAAW,GAAI;AAAA,MAAQ,UAAA;AAAA,IAAe,CAAA;AAAA,EAChE,EACF;AAAA,YAEC;AACY,CAAA,GAIb,IAAmB;AAAA,EAAC;AAAA,EAAc;AAAA,EAAa;AAAQ,GAEvD,IAAsB;AAAA,EAC1B;AAAA,EAAI;AAAA,EAAc;AAAA,EAAc;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAM;AAAA,EAAQ;AAAA,EAAK;AAAA,EACrE;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAS;AAAA,EAAU;AAAA,EAAO;AAAA,EAAQ;AAAA,EAC3D;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAY;AAAA,EAAW;AAAA,EACrE;AAAA,EAAU;AAAA,EAAW;AAAA,EAAS;AAChC;AAEsB,CAAC,GAAG,GAAqB,GAAG,CAAgB;AAElE,SAAS,EAAa,GAAuB;AAC3C,SAAO,EAAiB,SAAS,CAAI;AACvC;AAEA,SAAS,EAAc,GAAsB;AAC3C,SAAI,MAAS,UAAU,MAAS,WAAW,MAAS,QAAc,UAC3D;AACT;AAEA,IAAM,KAAA,CAA8C,EAClD,MAAA,GACA,kBAAA,EAAA,MACI;AACJ,QAAM,IAAW,EAAK,MAAM,YAAY,IAClC,IAAc,EAAK,aACnB,IAAc,CAAC,CAAC,GAChB,IAAe,EAAa,CAAQ,GAEpC,CAAC,GAAW,CAAA,IAAgB,EAAS,EAAI;AAE/C,EAAA,EAAA,MAAgB;AACd,IAAK,KAAa,EAAa,EAAI;AAAA,EACrC,GAAG,CAAC,GAAU,CAAW,CAAC;AAE1B,QAAM,IACJ,gBAAA,EAAC,OAAD;AAAA,IAAK,OAAM;AAAA,IAAK,QAAO;AAAA,IAAK,SAAQ;AAAA,IAAY,MAAK;AAAA,IAAO,QAAO;AAAA,IAAe,aAAY;AAAA,IAAI,eAAc;AAAA,IAAQ,gBAAe;AAAA,cAAvI,CACE,gBAAA,EAAC,QAAD,EAAM,GAAE,wDAAyD,CAAA,GACjE,gBAAA,EAAC,QAAD,EAAM,GAAE,wDAAyD,CAAA,CAC9D;AAAA,MAED,IACJ,gBAAA,EAAC,OAAD;AAAA,IAAK,OAAM;AAAA,IAAK,QAAO;AAAA,IAAK,SAAQ;AAAA,IAAY,MAAK;AAAA,IAAO,QAAO;AAAA,IAAe,aAAY;AAAA,IAAI,eAAc;AAAA,IAAQ,gBAAe;AAAA,cAAvI,CACE,gBAAA,EAAC,QAAD,EAAM,GAAE,+CAAgD,CAAA,GACxD,gBAAA,EAAC,UAAD;AAAA,MAAQ,IAAG;AAAA,MAAK,IAAG;AAAA,MAAK,GAAE;AAAA,IAAK,CAAA,CAC5B;AAAA,MAGD,IAAA,MACA,MAAa,cACR,EAAY,KAAK,IACpB,gBAAA,EAAC,GAAD,EAAiB,MAAM,EAAc,CAAA,IACrC,gBAAA,EAAC,KAAD;AAAA,IAAG,WAAU;AAAA,cAA6B;AAAA,EAAgC,CAAA,IAE5E,MAAa,WACR,EAAY,KAAK,IACpB,gBAAA,EAAC,GAAD,EAAe,MAAM,EAAc,CAAA,IACnC,gBAAA,EAAC,KAAD;AAAA,IAAG,WAAU;AAAA,cAA6B;AAAA,EAA8B,CAAA,IAE1E,MAAa,eACR,EAAY,KAAK,IACpB,gBAAA,EAAC,GAAD,EAAkB,MAAM,EAAc,CAAA,IACtC,gBAAA,EAAC,KAAD;AAAA,IAAG,WAAU;AAAA,cAA6B;AAAA,EAA4B,CAAA,IAErE,MAGH,IAAe,EAAS,WAAW,IAAI,IAAI,EAAS,MAAM,CAAC,IAAI,cAAc,KAAY;AAE/F,SACE,gBAAA,EAAC,GAAD;AAAA,IAAiB,WAAW,yBAAyB,CAAC,KAAa,IAAc,mCAAmC,EAAA;AAAA,cACjH,IACC,gBAAA,EAAA,GAAA,EAAA,UAAA,CACE,gBAAA,EAAC,OAAD;AAAA,MAAK,WAAU;AAAA,gBAAf,CACE,gBAAA,EAAC,UAAD;AAAA,QACE,WAAU;AAAA,QACV,OAAO;AAAA,QACP,UAAA,CAAW,MAAM;AACf,UAAA,EAAiB,EAAE,UAAU,EAAE,OAAO,MAAM,CAAC,GACxC,EAAE,OAAO,SAAO,EAAa,EAAI;AAAA,QACxC;AAAA,QACA,iBAAiB;AAAA,kBAPnB;AAAA,UASE,gBAAA,EAAC,UAAD;AAAA,YAAQ,OAAM;AAAA,sBAAG;AAAA,UAAkB,CAAA;AAAA,UACnC,gBAAA,EAAC,YAAD;AAAA,YAAU,OAAM;AAAA,sBACb,EAAoB,OAAO,OAAO,EAAE,IAAA,CAAK,MACxC,gBAAA,EAAC,UAAD;AAAA,cAAmB,OAAO;AAAA,wBAAO;AAAA,YAAa,GAAjC,CAAiC,CAC/C;AAAA,UACO,CAAA;AAAA,UACV,gBAAA,EAAC,YAAD;AAAA,YAAU,OAAM;AAAA,sBACb,EAAiB,IAAA,CAAK,MACrB,gBAAA,EAAC,UAAD;AAAA,cAAmB,OAAO;AAAA,wBAAO;AAAA,YAAa,GAAjC,CAAiC,CAC/C;AAAA,UACO,CAAA;AAAA,QACJ;AAAA,UACP,KACC,gBAAA,EAAC,UAAD;AAAA,QACE,MAAK;AAAA,QACL,WAAU;AAAA,QACV,SAAA,MAAe,EAAa,EAAK;AAAA,QACjC,iBAAiB;AAAA,kBAJnB,CAMG,GAAY,UACP;AAAA,QAEP;AAAA,QACL,gBAAA,EAAC,OAAD;AAAA,MAAK,WAAU;AAAA,gBACb,gBAAA,EAAC,GAAD,EAAiB,IAAI,OAAgB,CAAA;AAAA,IAClC,CAAA,CACL,EAAA,CAAA,IACA,IACF,gBAAA,EAAC,OAAD;AAAA,MACE,WAAU;AAAA,MACV,iBAAiB;AAAA,MACjB,eAAA,MAAqB,EAAa,EAAI;AAAA,gBAHxC,CAKE,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAiC,iBAAiB;AAAA,kBAAjE,CACE,gBAAA,EAAC,QAAD;AAAA,UAAM,WAAU;AAAA,oBAAgC;AAAA,QAAmB,CAAA,GACnE,gBAAA,EAAC,UAAD;AAAA,UACE,MAAK;AAAA,UACL,WAAU;AAAA,UACV,SAAA,MAAe,EAAa,EAAI;AAAA,oBAHlC,CAKG,GAAS,OACJ;AAAA,UACL;AAAA,UACL,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,kBACZ,EAAc;AAAA,MACZ,CAAA,CACF;AAAA,SAEL,gBAAA,EAAC,OAAD;AAAA,MACE,WAAU;AAAA,MACV,iBAAiB;AAAA,MACjB,eAAA,MAAqB,EAAa,EAAI;AAAA,gBAHxC,CAKE,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAiC,iBAAiB;AAAA,kBAAjE,CACE,gBAAA,EAAC,QAAD;AAAA,UAAM,WAAU;AAAA,oBAAgC;AAAA,QAAmB,CAAA,GACnE,gBAAA,EAAC,UAAD;AAAA,UACE,MAAK;AAAA,UACL,WAAU;AAAA,UACV,SAAA,MAAe,EAAa,EAAI;AAAA,oBAHlC,CAKG,GAAS,OACJ;AAAA,UACL;AAAA,UACL,gBAAA,EAAC,GAAD;AAAA,QACE,OAAO;AAAA,QACP,UAAU,EAAc,CAAQ;AAAA,QAChC,QAAO;AAAA,QACP,aAAa;AAAA,UACX,cAAc;AAAA,UACd,UAAU;AAAA,UACV,SAAS;AAAA,UACT,QAAQ;AAAA,QACV;AAAA,kBAEC,KAAe;AAAA,MACC,CAAA,CAChB;AAAA;EAEQ,CAAA;AAErB,GAEM,KAAqB,wBACrB,KAAkB,wBAClB,IAAqB,+CAEd,KAAqB,EAAK,OAAO;AAAA,EAC5C,MAAM;AAAA,EACN,OAAO;AAAA,EACP,SAAS;AAAA,EACT,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU;AAAA,EAEV,gBAAgB;AACd,WAAO,EACL,UAAU;AAAA,MACR,SAAS;AAAA,MACT,WAAA,CAAY,MAAY;AACtB,cAAM,IAAY,EAAQ,cAAc,MAAM,GAAG,aAC/B,EAAQ,aAAa;AAEvC,eADc,oBAAoB,KAAK,CAChC,IAAQ,CAAA,KAAM,EAAQ,aAAa,eAAe,KAAK;AAAA,MAChE;AAAA,MACA,YAAA,CAAa,MACN,EAAW,WACT,EAAE,iBAAiB,EAAW,SAAS,IADb,CAAC;AAAA,IAGtC,EACF;AAAA,EACF;AAAA,EAEA,YAAY;AACV,WAAO,CACL;AAAA,MACE,KAAK;AAAA,MACL,oBAAoB;AAAA,IACtB,CACF;AAAA,EACF;AAAA,EAEA,WAAW,EAAE,MAAA,GAAM,gBAAA,EAAA,GAAkB;AACnC,WAAO;AAAA,MACL;AAAA,MACA,EAAgB,GAAgB,EAAE,iBAAiB,EAAK,MAAM,SAAS,CAAC;AAAA,MACxE;AAAA,QAAC;AAAA,QAAQ,EAAE,OAAO,EAAK,MAAM,WAAW,YAAY,EAAK,MAAM,QAAA,KAAa,OAAU;AAAA,QAAG;AAAA,MAAC;AAAA,IAC5F;AAAA,EACF;AAAA,EAEA,gBAAgB;AACd,WAAO,CACL,EAAuB;AAAA,MACrB,MAAM;AAAA,MACN,MAAM,KAAK;AAAA,MACX,eAAA,CAAgB,MACV,EAAM,CAAA,GAAI,WAAW,OAAO,IAAU,KACnC,EAAE,UAAU,EAAM,CAAA,KAAM,KAAK;AAAA,IAExC,CAAC,GACD,EAAuB;AAAA,MACrB,MAAM;AAAA,MACN,MAAM,KAAK;AAAA,MACX,eAAA,CAAgB,MACV,EAAM,CAAA,GAAI,WAAW,OAAO,IAAU,KACnC,EAAE,UAAU,EAAM,CAAA,KAAM,KAAK;AAAA,IAExC,CAAC,CACH;AAAA,EACF;AAAA,EAEA,wBAAwB;AACJ,gBAAK,QAChB,CACL,IAAI,EAAO;AAAA,MACT,KAAK,IAAI,EAAU,eAAe;AAAA,MAClC,OAAO;AAAA,QACL,gBAAgB,GAAM,GAAM,GAAI,GAAM;AACpC,cAAI,MAAS,IAAK,QAAO;AACzB,gBAAM,EAAE,OAAA,EAAA,IAAU,GAEZ,IADQ,EAAM,IAAI,QAAQ,CACb,EAAM,MAAM,GAEzB,IADa,EAAM,IAAI,YAAY,GAAY,GAAM,IAC9C,IAAa,KACpB,IAAI,EAAmB,KAAK,CAAI;AACtC,iBAAK,KAIL,EAAc,GAAM,GAAY,GAFnB,KAAK,IAAI,KAAK,IAAI,SAAS,EAAE,CAAA,GAAI,EAAE,KAAK,GAAG,CAAC,GAAG,EAExB,GADvB,KAAK,IAAI,KAAK,IAAI,SAAS,EAAE,CAAA,GAAI,EAAE,KAAK,GAAG,CAAC,GAAG,EAClB,CAAI,GACvC,MALQ;AAAA,QAMjB;AAAA,QACA,cAAc,GAAM,GAAO;AACzB,cAAI,EAAM,QAAQ,QAAS,QAAO;AAClC,gBAAM,EAAE,OAAA,EAAA,IAAU,GACZ,EAAE,OAAA,EAAA,IAAU,EAAM;AACxB,cAAI,CAAC,EAAM,OAAO,YAAa,QAAO;AACtC,gBAAM,IAAa,EAAM,MAAM,GACzB,IAAa,EAAM,IAAI,YAAY,GAAY,EAAM,KAAK,IAAI,GAC9D,IAAI,EAAmB,KAAK,CAAU;AAC5C,cAAI,CAAC,EAAG,QAAO;AAEf,UAAA,EAAM,eAAe;AACrB,gBAAM,IAAO,KAAK,IAAI,KAAK,IAAI,SAAS,EAAE,CAAA,GAAI,EAAE,KAAK,GAAG,CAAC,GAAG,EAAE,GACxD,IAAO,KAAK,IAAI,KAAK,IAAI,SAAS,EAAE,CAAA,GAAI,EAAE,KAAK,GAAG,CAAC,GAAG,EAAE;AAC9D,iBAAA,EAAc,GAAM,GAAY,EAAM,KAAK,GAAM,CAAI,GAC9C;AAAA,QACT;AAAA,MACF;AAAA,IACF,CAAC,CACH;AAEA,aAAS,EAAc,GAA6B,GAAc,GAAY,GAAc,GAAc;AACxG,YAAM,EAAE,OAAA,EAAA,IAAU,GACZ,IAAQ,EAAM,IAAI,QAAQ,CAAI,GAC9B,IAAY,EAAM,QAClB,IAAW,EAAM,OAAO,GAExB,IAAY,EAAM,OAAO,MAAM,OAC/B,IAAU,EAAM,OAAO,MAAM,UAC7B,IAAa,EAAM,OAAO,MAAM,aAChC,IAAW,EAAM,OAAO,MAAM;AACpC,UAAI,CAAC,KAAa,CAAC,KAAW,CAAC,EAAU;AAEzC,YAAM,IAAiB,EAAM,OAAO,MAAM,UAAU,OAAO,GACrD,IAAA,CAAY,MAAsB;AACtC,cAAM,IAAO,KAAY,IAAa,IAAa,GAC7C,IAAQ,MAAM,KAAK,EAAE,QAAQ,EAAK,GAAA,MAAS,EAAK,OAAO,MAAM,CAAc,CAAC;AAClF,eAAO,EAAQ,OAAO,MAAM,CAAK;AAAA,MACnC,GAEM,IAAY,CAChB,EAAS,EAAI,GACb,GAAG,MAAM,KAAK,EAAE,QAAQ,IAAO,EAAE,GAAA,MAAS,EAAS,EAAK,CAAC,CAC3D,GACM,IAAQ,EAAU,OAAO,MAAM,CAAS,GACxC,IAAK,EAAM,GAAG,YAAY,GAAU,IAAW,EAAU,UAAU,CAAK;AAC9E,MAAA,EAAK,SAAS,CAAE;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,uBAAuB;AACrB,WAAO;AAAA,MACL,aAAA,MAAmB,KAAK,OAAO,SAAS,WAAW,aAAa,WAAW;AAAA,MAC3E,KAAA,CAAM,EAAE,QAAA,EAAA,MACF,EAAO,SAAS,WAAW,KAC7B,EAAO,SAAS,cAAc,GAAI,GAC3B,MAEF;AAAA,MAET,OAAA,CAAQ,EAAE,QAAA,EAAA,MACH,EAAO,SAAS,WAAW,KAChC,EAAO,SAAS,cAAc,GACvB,MAFmC;AAAA,MAI5C,WAAA,CAAY,EAAE,QAAA,EAAA,MAAa;AACzB,YAAI,CAAC,EAAO,SAAS,WAAW,EAAG,QAAO;AAC1C,cAAM,EAAE,OAAA,EAAA,IAAU,EAAO,MAAM;AAE/B,YADgB,EAAM,iBAAiB,EAAM,OAAO,QAAQ,KAC9C,QAAO;AACrB,cAAM,IAAQ,EAAM,MAAM;AAG1B,eAFI,MAAU,UACI,EAAO,MAAM,IAAI,OAAO,CACtC,IAAkB,MACtB,EAAO,SAAS,SAAS,GAClB;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EAEA,cAAc;AACZ,WAAO,EAAsB,EAAiB;AAAA,EAChD;AACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"CodeBlockView.js","names":[],"sources":["../../../../../src/components/pro/RichTextEditor/extensions/CodeBlockView.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\nimport { Node, mergeAttributes, textblockTypeInputRule } from '@tiptap/react';\nimport { Plugin, PluginKey } from '@tiptap/pm/state';\nimport { NodeViewWrapper, NodeViewContent, ReactNodeViewRenderer } from '@tiptap/react';\nimport type { NodeViewProps } from '@tiptap/react';\nimport { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';\nimport { oneLight } from 'react-syntax-highlighter/dist/esm/styles/prism';\nimport ReactMarkdown from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport remarkMath from 'remark-math';\nimport rehypeKatex from 'rehype-katex';\nimport rehypeRaw from 'rehype-raw';\nimport mermaid from 'mermaid';\nimport 'katex/dist/katex.min.css';\n\nlet mermaidInitialized = false;\n\nfunction initMermaid() {\n if (!mermaidInitialized) {\n mermaid.initialize({\n startOnLoad: false,\n theme: 'default',\n securityLevel: 'loose',\n fontFamily: 'inherit',\n flowchart: { useMaxWidth: true, htmlLabels: true },\n });\n mermaidInitialized = true;\n }\n}\n\nconst MermaidRenderer: React.FC<{ code: string }> = ({ code }) => {\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!code.trim() || !containerRef.current) return;\n initMermaid();\n\n let cancelled = false;\n const render = async () => {\n try {\n const id = `mermaid-cb-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;\n const { svg } = await mermaid.render(id, code);\n if (!cancelled && containerRef.current) {\n containerRef.current.innerHTML = svg;\n }\n } catch (err) {\n if (!cancelled && containerRef.current) {\n containerRef.current.innerHTML = `<pre style=\"color:#ef4444;font-size:12px;padding:8px;\">${String(err)}</pre>`;\n }\n }\n };\n render();\n return () => { cancelled = true; };\n }, [code]);\n\n return <div ref={containerRef} className=\"rte-mermaid-container\" />;\n};\n\nconst KatexRenderer: React.FC<{ code: string }> = ({ code }) => {\n const wrapped = code.includes('$$') ? code : `$$\\n${code}\\n$$`;\n return (\n <ReactMarkdown\n remarkPlugins={[remarkMath]}\n rehypePlugins={[rehypeKatex]}\n >\n {wrapped}\n </ReactMarkdown>\n );\n};\n\nconst MarkdownRenderer: React.FC<{ code: string }> = ({ code }) => {\n return (\n <ReactMarkdown\n remarkPlugins={[remarkGfm, remarkMath]}\n rehypePlugins={[rehypeKatex, rehypeRaw]}\n components={{\n code({ className, children, ...props }) {\n const match = /language-(\\w+)/.exec(className || '');\n const lang = match?.[1];\n const text = String(children).replace(/\\n$/, '');\n\n if (lang === 'mermaid') return <MermaidRenderer code={text} />;\n\n if (lang) {\n return (\n <SyntaxHighlighter\n style={oneLight as Record<string, React.CSSProperties>}\n language={lang}\n PreTag=\"div\"\n customStyle={{ borderRadius: '0.5rem', fontSize: '0.875em', padding: '1em', margin: '0.5em 0' }}\n >\n {text}\n </SyntaxHighlighter>\n );\n }\n return <code className={className} {...props}>{children}</code>;\n },\n }}\n >\n {code}\n </ReactMarkdown>\n );\n};\n\nconst RENDER_LANGUAGES = ['r-markdown', 'r-mermaid', 'r-math'];\n\nconst HIGHLIGHT_LANGUAGES = [\n '', 'javascript', 'typescript', 'python', 'rust', 'go', 'java', 'c', 'cpp',\n 'csharp', 'ruby', 'php', 'swift', 'kotlin', 'sql', 'bash', 'shell',\n 'html', 'css', 'json', 'yaml', 'toml', 'xml', 'markdown', 'mermaid', 'math',\n 'docker', 'graphql', 'latex', 'tex',\n];\n\nconst ALL_LANGUAGES = [...HIGHLIGHT_LANGUAGES, ...RENDER_LANGUAGES];\n\nfunction isRenderLang(lang: string): boolean {\n return RENDER_LANGUAGES.includes(lang);\n}\n\nfunction highlightLang(lang: string): string {\n if (lang === 'math' || lang === 'latex' || lang === 'tex') return 'latex';\n return lang;\n}\n\nconst CodeBlockNodeView: React.FC<NodeViewProps> = ({\n node,\n updateAttributes,\n}) => {\n const language = node.attrs.language || '';\n const textContent = node.textContent;\n const hasLanguage = !!language;\n const isRenderable = isRenderLang(language);\n\n const [isEditing, setIsEditing] = useState(true);\n\n useEffect(() => {\n if (!hasLanguage) setIsEditing(true);\n }, [language, hasLanguage]);\n\n const editIcon = (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7\" />\n <path d=\"M18.5 2.5a2.121 2.121 0 013 3L12 15l-4 1 1-4 9.5-9.5z\" />\n </svg>\n );\n const previewIcon = (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n );\n\n const renderPreview = () => {\n if (language === 'r-mermaid') {\n return textContent.trim()\n ? <MermaidRenderer code={textContent} />\n : <p className=\"rte-codeblock__placeholder\">Enter mermaid diagram code...</p>;\n }\n if (language === 'r-math') {\n return textContent.trim()\n ? <KatexRenderer code={textContent} />\n : <p className=\"rte-codeblock__placeholder\">Enter KaTeX math formula...</p>;\n }\n if (language === 'r-markdown') {\n return textContent.trim()\n ? <MarkdownRenderer code={textContent} />\n : <p className=\"rte-codeblock__placeholder\">Enter Markdown content...</p>;\n }\n return null;\n };\n\n const displayLabel = language.startsWith('r-') ? language.slice(2) + ' (render)' : language || 'plain text';\n\n return (\n <NodeViewWrapper className={`rte-codeblock-wrapper ${!isEditing && hasLanguage ? 'rte-codeblock-wrapper--preview' : ''}`}>\n {isEditing ? (\n <>\n <div className=\"rte-codeblock__header\">\n <select\n className=\"rte-codeblock__lang-select\"\n value={language}\n onChange={(e) => {\n updateAttributes({ language: e.target.value });\n if (!e.target.value) setIsEditing(true);\n }}\n contentEditable={false}\n >\n <option value=\"\">Plain text</option>\n <optgroup label=\"Syntax Highlight\">\n {HIGHLIGHT_LANGUAGES.filter(Boolean).map((lang) => (\n <option key={lang} value={lang}>{lang}</option>\n ))}\n </optgroup>\n <optgroup label=\"Live Render\">\n {RENDER_LANGUAGES.map((lang) => (\n <option key={lang} value={lang}>{lang}</option>\n ))}\n </optgroup>\n </select>\n {hasLanguage && (\n <button\n type=\"button\"\n className=\"rte-codeblock__preview-btn\"\n onClick={() => setIsEditing(false)}\n contentEditable={false}\n >\n {previewIcon} Preview\n </button>\n )}\n </div>\n <pre className=\"rte-codeblock__editable-pre\">\n <NodeViewContent as={'code' as any} />\n </pre>\n </>\n ) : isRenderable ? (\n <div\n className=\"rte-codeblock__render-preview\"\n contentEditable={false}\n onDoubleClick={() => setIsEditing(true)}\n >\n <div className=\"rte-codeblock__preview-toolbar\" contentEditable={false}>\n <span className=\"rte-codeblock__preview-label\">{displayLabel}</span>\n <button\n type=\"button\"\n className=\"rte-codeblock__preview-edit-btn\"\n onClick={() => setIsEditing(true)}\n >\n {editIcon} Edit\n </button>\n </div>\n <div className=\"rte-codeblock__render-body\">\n {renderPreview()}\n </div>\n </div>\n ) : (\n <div\n className=\"rte-codeblock__syntax-preview\"\n contentEditable={false}\n onDoubleClick={() => setIsEditing(true)}\n >\n <div className=\"rte-codeblock__preview-toolbar\" contentEditable={false}>\n <span className=\"rte-codeblock__preview-label\">{displayLabel}</span>\n <button\n type=\"button\"\n className=\"rte-codeblock__preview-edit-btn\"\n onClick={() => setIsEditing(true)}\n >\n {editIcon} Edit\n </button>\n </div>\n <SyntaxHighlighter\n style={oneLight as Record<string, React.CSSProperties>}\n language={highlightLang(language)}\n PreTag=\"div\"\n customStyle={{\n borderRadius: '0 0 0.5rem 0.5rem',\n fontSize: '0.875em',\n padding: '1em',\n margin: '0',\n }}\n >\n {textContent || ' '}\n </SyntaxHighlighter>\n </div>\n )}\n </NodeViewWrapper>\n );\n};\n\nconst backtickInputRegex = /^```([a-z-]*)[\\s\\n]$/;\nconst tildeInputRegex = /^~~~([a-z-]*)[\\s\\n]$/;\nconst tableShortcutRegex = /^(?:```|~~~)table(?:(\\d+)[x×X\\*](\\d+))?\\s?$/;\n\nexport const CodeBlockExtension = Node.create({\n name: 'codeBlock',\n group: 'block',\n content: 'text*',\n marks: '',\n code: true,\n defining: true,\n\n addAttributes() {\n return {\n language: {\n default: null,\n parseHTML: (element) => {\n const classAttr = element.querySelector('code')?.className ||\n element.className || '';\n const match = /language-([\\w-]+)/.exec(classAttr);\n return match?.[1] || element.getAttribute('data-language') || null;\n },\n renderHTML: (attributes) => {\n if (!attributes.language) return {};\n return { 'data-language': attributes.language };\n },\n },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: 'pre',\n preserveWhitespace: 'full',\n },\n ];\n },\n\n renderHTML({ node, HTMLAttributes }) {\n return [\n 'pre',\n mergeAttributes(HTMLAttributes, { 'data-language': node.attrs.language }),\n ['code', { class: node.attrs.language ? `language-${node.attrs.language}` : undefined }, 0],\n ];\n },\n\n addInputRules() {\n return [\n textblockTypeInputRule({\n find: backtickInputRegex,\n type: this.type,\n getAttributes: (match) => {\n if (match[1]?.startsWith('table')) return false;\n return { language: match[1] || null };\n },\n }),\n textblockTypeInputRule({\n find: tildeInputRegex,\n type: this.type,\n getAttributes: (match) => {\n if (match[1]?.startsWith('table')) return false;\n return { language: match[1] || null };\n },\n }),\n ];\n },\n\n addProseMirrorPlugins() {\n const editorRef = this.editor;\n return [\n new Plugin({\n key: new PluginKey('tableShortcut'),\n props: {\n handleTextInput(view, from, to, text) {\n if (text !== ' ') return false;\n const { state } = view;\n const $from = state.doc.resolve(from);\n const blockStart = $from.start();\n const textBefore = state.doc.textBetween(blockStart, from, '\\0');\n const full = textBefore + ' ';\n const m = tableShortcutRegex.exec(full);\n if (!m) return false;\n\n const rows = Math.min(Math.max(parseInt(m[1], 10) || 3, 1), 20);\n const cols = Math.min(Math.max(parseInt(m[2], 10) || 3, 1), 20);\n dispatchTable(view, blockStart, to, rows, cols);\n return true;\n },\n handleKeyDown(view, event) {\n if (event.key !== 'Enter') return false;\n const { state } = view;\n const { $from } = state.selection;\n if (!$from.parent.isTextblock) return false;\n const blockStart = $from.start();\n const textBefore = state.doc.textBetween(blockStart, $from.pos, '\\0');\n const m = tableShortcutRegex.exec(textBefore);\n if (!m) return false;\n\n event.preventDefault();\n const rows = Math.min(Math.max(parseInt(m[1], 10) || 3, 1), 20);\n const cols = Math.min(Math.max(parseInt(m[2], 10) || 3, 1), 20);\n dispatchTable(view, blockStart, $from.pos, rows, cols);\n return true;\n },\n },\n }),\n ];\n\n function dispatchTable(view: typeof editorRef.view, from: number, to: number, rows: number, cols: number) {\n const { state } = view;\n const $from = state.doc.resolve(from);\n const blockNode = $from.parent;\n const blockPos = $from.before();\n\n const tableType = state.schema.nodes.table;\n const rowType = state.schema.nodes.tableRow;\n const headerType = state.schema.nodes.tableHeader;\n const cellType = state.schema.nodes.tableCell;\n if (!tableType || !rowType || !cellType) return;\n\n const emptyParagraph = state.schema.nodes.paragraph.create();\n const buildRow = (isHeader: boolean) => {\n const type = isHeader && headerType ? headerType : cellType;\n const cells = Array.from({ length: cols }, () => type.create(null, emptyParagraph));\n return rowType.create(null, cells);\n };\n\n const tableRows = [\n buildRow(true),\n ...Array.from({ length: rows - 1 }, () => buildRow(false)),\n ];\n const table = tableType.create(null, tableRows);\n const tr = state.tr.replaceWith(blockPos, blockPos + blockNode.nodeSize, table);\n view.dispatch(tr);\n }\n },\n\n addKeyboardShortcuts() {\n return {\n 'Mod-Alt-c': () => this.editor.commands.toggleNode('codeBlock', 'paragraph'),\n Tab: ({ editor }) => {\n if (editor.isActive('codeBlock')) {\n editor.commands.insertContent('\\t');\n return true;\n }\n return false;\n },\n Enter: ({ editor }) => {\n if (!editor.isActive('codeBlock')) return false;\n editor.commands.newlineInCode();\n return true;\n },\n ArrowDown: ({ editor }) => {\n if (!editor.isActive('codeBlock')) return false;\n const { $from } = editor.state.selection;\n const isAtEnd = $from.parentOffset === $from.parent.content.size;\n if (!isAtEnd) return false;\n const after = $from.after();\n if (after === undefined) return false;\n const nodeAfter = editor.state.doc.nodeAt(after);\n if (nodeAfter) return false;\n editor.commands.exitCode();\n return true;\n },\n };\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(CodeBlockNodeView);\n },\n});\n\nexport default CodeBlockExtension;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FloatingDialog.js","names":[],"sources":["../../../../../src/components/pro/RichTextEditor/extensions/FloatingDialog.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback, useEffect } from 'react';\nimport { Node, mergeAttributes } from '@tiptap/react';\nimport { NodeViewWrapper, NodeViewContent, ReactNodeViewRenderer } from '@tiptap/react';\nimport type { NodeViewProps } from '@tiptap/react';\n\ntype DialogLayout = 'block' | 'wrap-left' | 'wrap-right' | 'float';\n\ninterface DialogAttrs {\n x: number;\n y: number;\n width: number;\n height: number;\n borderColor: string;\n bgColor: string;\n title: string;\n layout: DialogLayout;\n zIndex: number;\n}\n\nconst DIALOG_COLORS = [\n { label: 'Blue', border: '#3b82f6', bg: '#eff6ff' },\n { label: 'Green', border: '#22c55e', bg: '#f0fdf4' },\n { label: 'Orange', border: '#f97316', bg: '#fff7ed' },\n { label: 'Red', border: '#ef4444', bg: '#fef2f2' },\n { label: 'Purple', border: '#8b5cf6', bg: '#faf5ff' },\n { label: 'Gray', border: '#6b7280', bg: '#f9fafb' },\n];\n\nconst LAYOUT_OPTIONS: { key: DialogLayout; label: string; icon: React.ReactNode }[] = [\n {\n key: 'block', label: 'Block',\n icon: <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\" /><line x1=\"3\" y1=\"3\" x2=\"21\" y2=\"3\" /><line x1=\"3\" y1=\"21\" x2=\"21\" y2=\"21\" /></svg>,\n },\n {\n key: 'wrap-left', label: 'Wrap Left',\n icon: <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><rect x=\"2\" y=\"4\" width=\"10\" height=\"8\" rx=\"1\" /><line x1=\"15\" y1=\"5\" x2=\"22\" y2=\"5\" /><line x1=\"15\" y1=\"8\" x2=\"22\" y2=\"8\" /><line x1=\"15\" y1=\"11\" x2=\"22\" y2=\"11\" /><line x1=\"2\" y1=\"15\" x2=\"22\" y2=\"15\" /><line x1=\"2\" y1=\"18\" x2=\"22\" y2=\"18\" /></svg>,\n },\n {\n key: 'wrap-right', label: 'Wrap Right',\n icon: <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><rect x=\"12\" y=\"4\" width=\"10\" height=\"8\" rx=\"1\" /><line x1=\"2\" y1=\"5\" x2=\"9\" y2=\"5\" /><line x1=\"2\" y1=\"8\" x2=\"9\" y2=\"8\" /><line x1=\"2\" y1=\"11\" x2=\"9\" y2=\"11\" /><line x1=\"2\" y1=\"15\" x2=\"22\" y2=\"15\" /><line x1=\"2\" y1=\"18\" x2=\"22\" y2=\"18\" /></svg>,\n },\n {\n key: 'float', label: 'Float',\n icon: <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\" /><path d=\"M2 2h4M18 2h4M2 22h4M18 22h4\" strokeDasharray=\"2 2\" /><line x1=\"2\" y1=\"12\" x2=\"6\" y2=\"12\" strokeDasharray=\"2 2\" /><line x1=\"18\" y1=\"12\" x2=\"22\" y2=\"12\" strokeDasharray=\"2 2\" /></svg>,\n },\n];\n\n/** Scan the document and return all zIndex values of float-layout floatingDialog nodes */\nfunction collectFloatZIndices(editor: NodeViewProps['editor']): number[] {\n const indices: number[] = [];\n editor.state.doc.descendants((node) => {\n if (node.type.name === 'floatingDialog' && node.attrs.layout === 'float') {\n indices.push(node.attrs.zIndex ?? 10);\n }\n });\n return indices;\n}\n\nconst FloatingDialogView: React.FC<NodeViewProps> = ({\n node,\n editor,\n updateAttributes,\n deleteNode,\n selected,\n}) => {\n const attrs = node.attrs as DialogAttrs;\n const layout = attrs.layout || 'block';\n const isFloat = layout === 'float';\n const zIndex = attrs.zIndex ?? 10;\n\n const [editingTitle, setEditingTitle] = useState(false);\n const [localTitle, setLocalTitle] = useState(attrs.title);\n const [showColorPicker, setShowColorPicker] = useState(false);\n const [showLayoutPicker, setShowLayoutPicker] = useState(false);\n const dragStart = useRef({ mx: 0, my: 0, x: 0, y: 0 });\n const resizeStart = useRef({ mx: 0, my: 0, w: 0, h: 0 });\n const colorRef = useRef<HTMLDivElement>(null);\n const layoutRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n setLocalTitle(attrs.title);\n }, [attrs.title]);\n\n useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (colorRef.current && !colorRef.current.contains(e.target as globalThis.Node)) {\n setShowColorPicker(false);\n }\n if (layoutRef.current && !layoutRef.current.contains(e.target as globalThis.Node)) {\n setShowLayoutPicker(false);\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, []);\n\n const onDragStart = useCallback((e: React.MouseEvent) => {\n if (!isFloat) return;\n e.preventDefault();\n e.stopPropagation();\n dragStart.current = { mx: e.clientX, my: e.clientY, x: attrs.x, y: attrs.y };\n\n const onMove = (ev: MouseEvent) => {\n const dx = ev.clientX - dragStart.current.mx;\n const dy = ev.clientY - dragStart.current.my;\n updateAttributes({\n x: dragStart.current.x + dx,\n y: dragStart.current.y + dy,\n });\n };\n const onUp = () => {\n document.removeEventListener('mousemove', onMove);\n document.removeEventListener('mouseup', onUp);\n };\n document.addEventListener('mousemove', onMove);\n document.addEventListener('mouseup', onUp);\n }, [isFloat, attrs.x, attrs.y, updateAttributes]);\n\n const onResizeStart = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n resizeStart.current = { mx: e.clientX, my: e.clientY, w: attrs.width, h: attrs.height };\n\n const onMove = (ev: MouseEvent) => {\n const dw = ev.clientX - resizeStart.current.mx;\n const dh = ev.clientY - resizeStart.current.my;\n updateAttributes({\n width: Math.max(160, resizeStart.current.w + dw),\n height: Math.max(80, resizeStart.current.h + dh),\n });\n };\n const onUp = () => {\n document.removeEventListener('mousemove', onMove);\n document.removeEventListener('mouseup', onUp);\n };\n document.addEventListener('mousemove', onMove);\n document.addEventListener('mouseup', onUp);\n }, [attrs.width, attrs.height, updateAttributes]);\n\n const saveTitle = useCallback(() => {\n updateAttributes({ title: localTitle });\n setEditingTitle(false);\n }, [localTitle, updateAttributes]);\n\n const bringForward = useCallback(() => {\n const all = collectFloatZIndices(editor);\n const maxZ = Math.max(...all);\n if (zIndex < maxZ) {\n updateAttributes({ zIndex: maxZ + 1 });\n }\n }, [editor, zIndex, updateAttributes]);\n\n const sendBackward = useCallback(() => {\n const all = collectFloatZIndices(editor);\n const minZ = Math.min(...all);\n if (zIndex > minZ) {\n updateAttributes({ zIndex: minZ - 1 });\n } else if (zIndex > 1) {\n updateAttributes({ zIndex: zIndex - 1 });\n }\n }, [editor, zIndex, updateAttributes]);\n\n const wrapperClass = [\n 'rte-float-dialog',\n `rte-float-dialog--${layout}`,\n selected ? 'rte-float-dialog--selected' : '',\n ].filter(Boolean).join(' ');\n\n const wrapperStyle: React.CSSProperties = isFloat\n ? { position: 'absolute', left: attrs.x, top: attrs.y, zIndex }\n : {};\n\n const boxStyle: React.CSSProperties = {\n width: layout === 'block' ? '100%' : attrs.width,\n minHeight: attrs.height,\n borderColor: attrs.borderColor,\n backgroundColor: attrs.bgColor,\n };\n\n const layoutIcon = LAYOUT_OPTIONS.find((l) => l.key === layout)?.icon;\n\n return (\n <NodeViewWrapper className={wrapperClass} style={wrapperStyle}>\n <div className=\"rte-float-dialog__box\" style={boxStyle}>\n {/* Title bar */}\n <div\n className=\"rte-float-dialog__titlebar\"\n style={{ borderBottomColor: attrs.borderColor }}\n onMouseDown={onDragStart}\n contentEditable={false}\n >\n {isFloat && (\n <span className=\"rte-float-dialog__drag-icon\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"9\" cy=\"5\" r=\"1.5\" /><circle cx=\"15\" cy=\"5\" r=\"1.5\" />\n <circle cx=\"9\" cy=\"12\" r=\"1.5\" /><circle cx=\"15\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"9\" cy=\"19\" r=\"1.5\" /><circle cx=\"15\" cy=\"19\" r=\"1.5\" />\n </svg>\n </span>\n )}\n\n {editingTitle ? (\n <input\n className=\"rte-float-dialog__title-input\"\n value={localTitle}\n onChange={(e) => setLocalTitle(e.target.value)}\n placeholder=\"Title...\"\n onMouseDown={(e) => e.stopPropagation()}\n onBlur={saveTitle}\n onKeyDown={(e) => { if (e.key === 'Enter' || e.key === 'Escape') saveTitle(); }}\n autoFocus\n />\n ) : (\n <span className=\"rte-float-dialog__title\" onDoubleClick={() => setEditingTitle(true)}>\n {attrs.title || 'Dialog'}\n </span>\n )}\n\n <div className=\"rte-float-dialog__actions\">\n {/* Z-order controls — only for float layout */}\n {isFloat && (\n <div className=\"rte-float-dialog__zorder\">\n <button\n type=\"button\"\n className=\"rte-float-dialog__action-btn\"\n onClick={(e) => { e.stopPropagation(); bringForward(); }}\n title=\"Bring to Front\"\n onMouseDown={(e) => e.stopPropagation()}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect x=\"8\" y=\"2\" width=\"13\" height=\"13\" rx=\"2\" />\n <rect x=\"3\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" opacity=\"0.4\" />\n </svg>\n </button>\n <button\n type=\"button\"\n className=\"rte-float-dialog__action-btn\"\n onClick={(e) => { e.stopPropagation(); sendBackward(); }}\n title=\"Send to Back\"\n onMouseDown={(e) => e.stopPropagation()}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect x=\"3\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" />\n <rect x=\"8\" y=\"2\" width=\"13\" height=\"13\" rx=\"2\" opacity=\"0.4\" />\n </svg>\n </button>\n </div>\n )}\n\n {/* Layout picker */}\n <div ref={layoutRef} style={{ position: 'relative' }}>\n <button\n type=\"button\"\n className=\"rte-float-dialog__action-btn\"\n onClick={(e) => { e.stopPropagation(); setShowLayoutPicker(!showLayoutPicker); }}\n title={`Layout: ${layout}`}\n onMouseDown={(e) => e.stopPropagation()}\n >\n {layoutIcon}\n </button>\n {showLayoutPicker && (\n <div className=\"rte-float-dialog__layout-dropdown\" onMouseDown={(e) => e.stopPropagation()}>\n {LAYOUT_OPTIONS.map((opt) => (\n <button\n key={opt.key}\n type=\"button\"\n className={`rte-float-dialog__layout-option ${layout === opt.key ? 'rte-float-dialog__layout-option--active' : ''}`}\n onClick={() => { updateAttributes({ layout: opt.key }); setShowLayoutPicker(false); }}\n title={opt.label}\n >\n {opt.icon}\n <span>{opt.label}</span>\n </button>\n ))}\n </div>\n )}\n </div>\n\n {/* Color picker */}\n <div ref={colorRef} style={{ position: 'relative' }}>\n <button\n type=\"button\"\n className=\"rte-float-dialog__action-btn\"\n onClick={(e) => { e.stopPropagation(); setShowColorPicker(!showColorPicker); }}\n title=\"Color\"\n onMouseDown={(e) => e.stopPropagation()}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill={attrs.borderColor} stroke={attrs.borderColor} strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"8\" />\n </svg>\n </button>\n {showColorPicker && (\n <div className=\"rte-float-dialog__color-dropdown\" onMouseDown={(e) => e.stopPropagation()}>\n {DIALOG_COLORS.map((c) => (\n <button\n key={c.label}\n type=\"button\"\n className=\"rte-float-dialog__color-swatch\"\n style={{ backgroundColor: c.border }}\n onClick={() => { updateAttributes({ borderColor: c.border, bgColor: c.bg }); setShowColorPicker(false); }}\n title={c.label}\n />\n ))}\n </div>\n )}\n </div>\n\n {/* Delete */}\n <button\n type=\"button\"\n className=\"rte-float-dialog__action-btn rte-float-dialog__action-btn--danger\"\n onClick={(e) => { e.stopPropagation(); deleteNode(); }}\n title=\"Delete\"\n onMouseDown={(e) => e.stopPropagation()}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" /><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n </div>\n\n {/* Rich text body — Tiptap editable content */}\n <NodeViewContent className=\"rte-float-dialog__body\" />\n\n {/* Resize handle */}\n <div className=\"rte-float-dialog__resize-handle\" onMouseDown={onResizeStart} contentEditable={false}>\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"currentColor\">\n <circle cx=\"8\" cy=\"8\" r=\"1.2\" /><circle cx=\"4\" cy=\"8\" r=\"1.2\" /><circle cx=\"8\" cy=\"4\" r=\"1.2\" />\n </svg>\n </div>\n </div>\n </NodeViewWrapper>\n );\n};\n\n/** Scan document for the highest zIndex among existing float dialogs */\nexport function getNextFloatZIndex(editor: { state: { doc: { descendants: (cb: (node: { type: { name: string }; attrs: Record<string, unknown> }) => void) => void } } }): number {\n let maxZ = 9;\n editor.state.doc.descendants((node) => {\n if (node.type.name === 'floatingDialog' && node.attrs.layout === 'float') {\n const z = (node.attrs.zIndex as number) ?? 10;\n if (z > maxZ) maxZ = z;\n }\n });\n return maxZ + 1;\n}\n\nexport const FloatingDialogExtension = Node.create({\n name: 'floatingDialog',\n group: 'block',\n content: 'block+',\n draggable: true,\n isolating: true,\n defining: true,\n\n addAttributes() {\n return {\n title: { default: 'Note' },\n x: { default: 20 },\n y: { default: 0 },\n width: { default: 280 },\n height: { default: 120 },\n borderColor: { default: '#3b82f6' },\n bgColor: { default: '#eff6ff' },\n layout: { default: 'block' },\n zIndex: { default: 10 },\n };\n },\n\n parseHTML() {\n return [{ tag: 'div[data-type=\"floating-dialog\"]' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['div', mergeAttributes(HTMLAttributes, { 'data-type': 'floating-dialog' }), 0];\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(FloatingDialogView);\n },\n});\n\nexport default FloatingDialogExtension;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FloatingDialog.js","names":[],"sources":["../../../../../src/components/pro/RichTextEditor/extensions/FloatingDialog.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback, useEffect } from 'react';\nimport { Node, mergeAttributes } from '@tiptap/react';\nimport { NodeViewWrapper, NodeViewContent, ReactNodeViewRenderer } from '@tiptap/react';\nimport type { NodeViewProps } from '@tiptap/react';\n\ntype DialogLayout = 'block' | 'wrap-left' | 'wrap-right' | 'float';\n\ninterface DialogAttrs {\n x: number;\n y: number;\n width: number;\n height: number;\n borderColor: string;\n bgColor: string;\n title: string;\n layout: DialogLayout;\n zIndex: number;\n}\n\nconst DIALOG_COLORS = [\n { label: 'Blue', border: '#3b82f6', bg: '#eff6ff' },\n { label: 'Green', border: '#22c55e', bg: '#f0fdf4' },\n { label: 'Orange', border: '#f97316', bg: '#fff7ed' },\n { label: 'Red', border: '#ef4444', bg: '#fef2f2' },\n { label: 'Purple', border: '#8b5cf6', bg: '#faf5ff' },\n { label: 'Gray', border: '#6b7280', bg: '#f9fafb' },\n];\n\nconst LAYOUT_OPTIONS: { key: DialogLayout; label: string; icon: React.ReactNode }[] = [\n {\n key: 'block', label: 'Block',\n icon: <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\" /><line x1=\"3\" y1=\"3\" x2=\"21\" y2=\"3\" /><line x1=\"3\" y1=\"21\" x2=\"21\" y2=\"21\" /></svg>,\n },\n {\n key: 'wrap-left', label: 'Wrap Left',\n icon: <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><rect x=\"2\" y=\"4\" width=\"10\" height=\"8\" rx=\"1\" /><line x1=\"15\" y1=\"5\" x2=\"22\" y2=\"5\" /><line x1=\"15\" y1=\"8\" x2=\"22\" y2=\"8\" /><line x1=\"15\" y1=\"11\" x2=\"22\" y2=\"11\" /><line x1=\"2\" y1=\"15\" x2=\"22\" y2=\"15\" /><line x1=\"2\" y1=\"18\" x2=\"22\" y2=\"18\" /></svg>,\n },\n {\n key: 'wrap-right', label: 'Wrap Right',\n icon: <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><rect x=\"12\" y=\"4\" width=\"10\" height=\"8\" rx=\"1\" /><line x1=\"2\" y1=\"5\" x2=\"9\" y2=\"5\" /><line x1=\"2\" y1=\"8\" x2=\"9\" y2=\"8\" /><line x1=\"2\" y1=\"11\" x2=\"9\" y2=\"11\" /><line x1=\"2\" y1=\"15\" x2=\"22\" y2=\"15\" /><line x1=\"2\" y1=\"18\" x2=\"22\" y2=\"18\" /></svg>,\n },\n {\n key: 'float', label: 'Float',\n icon: <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\" /><path d=\"M2 2h4M18 2h4M2 22h4M18 22h4\" strokeDasharray=\"2 2\" /><line x1=\"2\" y1=\"12\" x2=\"6\" y2=\"12\" strokeDasharray=\"2 2\" /><line x1=\"18\" y1=\"12\" x2=\"22\" y2=\"12\" strokeDasharray=\"2 2\" /></svg>,\n },\n];\n\n/** Scan the document and return all zIndex values of float-layout floatingDialog nodes */\nfunction collectFloatZIndices(editor: NodeViewProps['editor']): number[] {\n const indices: number[] = [];\n editor.state.doc.descendants((node) => {\n if (node.type.name === 'floatingDialog' && node.attrs.layout === 'float') {\n indices.push(node.attrs.zIndex ?? 10);\n }\n });\n return indices;\n}\n\nconst FloatingDialogView: React.FC<NodeViewProps> = ({\n node,\n editor,\n updateAttributes,\n deleteNode,\n selected,\n}) => {\n const attrs = node.attrs as DialogAttrs;\n const layout = attrs.layout || 'block';\n const isFloat = layout === 'float';\n const zIndex = attrs.zIndex ?? 10;\n\n const [editingTitle, setEditingTitle] = useState(false);\n const [localTitle, setLocalTitle] = useState(attrs.title);\n const [showColorPicker, setShowColorPicker] = useState(false);\n const [showLayoutPicker, setShowLayoutPicker] = useState(false);\n const dragStart = useRef({ mx: 0, my: 0, x: 0, y: 0 });\n const resizeStart = useRef({ mx: 0, my: 0, w: 0, h: 0 });\n const colorRef = useRef<HTMLDivElement>(null);\n const layoutRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n setLocalTitle(attrs.title);\n }, [attrs.title]);\n\n useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (colorRef.current && !colorRef.current.contains(e.target as globalThis.Node)) {\n setShowColorPicker(false);\n }\n if (layoutRef.current && !layoutRef.current.contains(e.target as globalThis.Node)) {\n setShowLayoutPicker(false);\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, []);\n\n const onDragStart = useCallback((e: React.MouseEvent) => {\n if (!isFloat) return;\n e.preventDefault();\n e.stopPropagation();\n dragStart.current = { mx: e.clientX, my: e.clientY, x: attrs.x, y: attrs.y };\n\n const onMove = (ev: MouseEvent) => {\n const dx = ev.clientX - dragStart.current.mx;\n const dy = ev.clientY - dragStart.current.my;\n updateAttributes({\n x: dragStart.current.x + dx,\n y: dragStart.current.y + dy,\n });\n };\n const onUp = () => {\n document.removeEventListener('mousemove', onMove);\n document.removeEventListener('mouseup', onUp);\n };\n document.addEventListener('mousemove', onMove);\n document.addEventListener('mouseup', onUp);\n }, [isFloat, attrs.x, attrs.y, updateAttributes]);\n\n const onResizeStart = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n resizeStart.current = { mx: e.clientX, my: e.clientY, w: attrs.width, h: attrs.height };\n\n const onMove = (ev: MouseEvent) => {\n const dw = ev.clientX - resizeStart.current.mx;\n const dh = ev.clientY - resizeStart.current.my;\n updateAttributes({\n width: Math.max(160, resizeStart.current.w + dw),\n height: Math.max(80, resizeStart.current.h + dh),\n });\n };\n const onUp = () => {\n document.removeEventListener('mousemove', onMove);\n document.removeEventListener('mouseup', onUp);\n };\n document.addEventListener('mousemove', onMove);\n document.addEventListener('mouseup', onUp);\n }, [attrs.width, attrs.height, updateAttributes]);\n\n const saveTitle = useCallback(() => {\n updateAttributes({ title: localTitle });\n setEditingTitle(false);\n }, [localTitle, updateAttributes]);\n\n const bringForward = useCallback(() => {\n const all = collectFloatZIndices(editor);\n const maxZ = Math.max(...all);\n if (zIndex < maxZ) {\n updateAttributes({ zIndex: maxZ + 1 });\n }\n }, [editor, zIndex, updateAttributes]);\n\n const sendBackward = useCallback(() => {\n const all = collectFloatZIndices(editor);\n const minZ = Math.min(...all);\n if (zIndex > minZ) {\n updateAttributes({ zIndex: minZ - 1 });\n } else if (zIndex > 1) {\n updateAttributes({ zIndex: zIndex - 1 });\n }\n }, [editor, zIndex, updateAttributes]);\n\n const wrapperClass = [\n 'rte-float-dialog',\n `rte-float-dialog--${layout}`,\n selected ? 'rte-float-dialog--selected' : '',\n ].filter(Boolean).join(' ');\n\n const wrapperStyle: React.CSSProperties = isFloat\n ? { position: 'absolute', left: attrs.x, top: attrs.y, zIndex }\n : {};\n\n const boxStyle: React.CSSProperties = {\n width: layout === 'block' ? '100%' : attrs.width,\n minHeight: attrs.height,\n borderColor: attrs.borderColor,\n backgroundColor: attrs.bgColor,\n };\n\n const layoutIcon = LAYOUT_OPTIONS.find((l) => l.key === layout)?.icon;\n\n return (\n <NodeViewWrapper className={wrapperClass} style={wrapperStyle}>\n <div className=\"rte-float-dialog__box\" style={boxStyle}>\n {/* Title bar */}\n <div\n className=\"rte-float-dialog__titlebar\"\n style={{ borderBottomColor: attrs.borderColor }}\n onMouseDown={onDragStart}\n contentEditable={false}\n >\n {isFloat && (\n <span className=\"rte-float-dialog__drag-icon\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"9\" cy=\"5\" r=\"1.5\" /><circle cx=\"15\" cy=\"5\" r=\"1.5\" />\n <circle cx=\"9\" cy=\"12\" r=\"1.5\" /><circle cx=\"15\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"9\" cy=\"19\" r=\"1.5\" /><circle cx=\"15\" cy=\"19\" r=\"1.5\" />\n </svg>\n </span>\n )}\n\n {editingTitle ? (\n <input\n className=\"rte-float-dialog__title-input\"\n value={localTitle}\n onChange={(e) => setLocalTitle(e.target.value)}\n placeholder=\"Title...\"\n onMouseDown={(e) => e.stopPropagation()}\n onBlur={saveTitle}\n onKeyDown={(e) => { if (e.key === 'Enter' || e.key === 'Escape') saveTitle(); }}\n autoFocus\n />\n ) : (\n <span className=\"rte-float-dialog__title\" onDoubleClick={() => setEditingTitle(true)}>\n {attrs.title || 'Dialog'}\n </span>\n )}\n\n <div className=\"rte-float-dialog__actions\">\n {/* Z-order controls — only for float layout */}\n {isFloat && (\n <div className=\"rte-float-dialog__zorder\">\n <button\n type=\"button\"\n className=\"rte-float-dialog__action-btn\"\n onClick={(e) => { e.stopPropagation(); bringForward(); }}\n title=\"Bring to Front\"\n onMouseDown={(e) => e.stopPropagation()}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect x=\"8\" y=\"2\" width=\"13\" height=\"13\" rx=\"2\" />\n <rect x=\"3\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" opacity=\"0.4\" />\n </svg>\n </button>\n <button\n type=\"button\"\n className=\"rte-float-dialog__action-btn\"\n onClick={(e) => { e.stopPropagation(); sendBackward(); }}\n title=\"Send to Back\"\n onMouseDown={(e) => e.stopPropagation()}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect x=\"3\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" />\n <rect x=\"8\" y=\"2\" width=\"13\" height=\"13\" rx=\"2\" opacity=\"0.4\" />\n </svg>\n </button>\n </div>\n )}\n\n {/* Layout picker */}\n <div ref={layoutRef} style={{ position: 'relative' }}>\n <button\n type=\"button\"\n className=\"rte-float-dialog__action-btn\"\n onClick={(e) => { e.stopPropagation(); setShowLayoutPicker(!showLayoutPicker); }}\n title={`Layout: ${layout}`}\n onMouseDown={(e) => e.stopPropagation()}\n >\n {layoutIcon}\n </button>\n {showLayoutPicker && (\n <div className=\"rte-float-dialog__layout-dropdown\" onMouseDown={(e) => e.stopPropagation()}>\n {LAYOUT_OPTIONS.map((opt) => (\n <button\n key={opt.key}\n type=\"button\"\n className={`rte-float-dialog__layout-option ${layout === opt.key ? 'rte-float-dialog__layout-option--active' : ''}`}\n onClick={() => { updateAttributes({ layout: opt.key }); setShowLayoutPicker(false); }}\n title={opt.label}\n >\n {opt.icon}\n <span>{opt.label}</span>\n </button>\n ))}\n </div>\n )}\n </div>\n\n {/* Color picker */}\n <div ref={colorRef} style={{ position: 'relative' }}>\n <button\n type=\"button\"\n className=\"rte-float-dialog__action-btn\"\n onClick={(e) => { e.stopPropagation(); setShowColorPicker(!showColorPicker); }}\n title=\"Color\"\n onMouseDown={(e) => e.stopPropagation()}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill={attrs.borderColor} stroke={attrs.borderColor} strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"8\" />\n </svg>\n </button>\n {showColorPicker && (\n <div className=\"rte-float-dialog__color-dropdown\" onMouseDown={(e) => e.stopPropagation()}>\n {DIALOG_COLORS.map((c) => (\n <button\n key={c.label}\n type=\"button\"\n className=\"rte-float-dialog__color-swatch\"\n style={{ backgroundColor: c.border }}\n onClick={() => { updateAttributes({ borderColor: c.border, bgColor: c.bg }); setShowColorPicker(false); }}\n title={c.label}\n />\n ))}\n </div>\n )}\n </div>\n\n {/* Delete */}\n <button\n type=\"button\"\n className=\"rte-float-dialog__action-btn rte-float-dialog__action-btn--danger\"\n onClick={(e) => { e.stopPropagation(); deleteNode(); }}\n title=\"Delete\"\n onMouseDown={(e) => e.stopPropagation()}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" /><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n </div>\n\n {/* Rich text body — Tiptap editable content */}\n <NodeViewContent className=\"rte-float-dialog__body\" />\n\n {/* Resize handle */}\n <div className=\"rte-float-dialog__resize-handle\" onMouseDown={onResizeStart} contentEditable={false}>\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"currentColor\">\n <circle cx=\"8\" cy=\"8\" r=\"1.2\" /><circle cx=\"4\" cy=\"8\" r=\"1.2\" /><circle cx=\"8\" cy=\"4\" r=\"1.2\" />\n </svg>\n </div>\n </div>\n </NodeViewWrapper>\n );\n};\n\n/** Scan document for the highest zIndex among existing float dialogs */\nexport function getNextFloatZIndex(editor: { state: { doc: { descendants: (cb: (node: { type: { name: string }; attrs: Record<string, unknown> }) => void) => void } } }): number {\n let maxZ = 9;\n editor.state.doc.descendants((node) => {\n if (node.type.name === 'floatingDialog' && node.attrs.layout === 'float') {\n const z = (node.attrs.zIndex as number) ?? 10;\n if (z > maxZ) maxZ = z;\n }\n });\n return maxZ + 1;\n}\n\nexport const FloatingDialogExtension = Node.create({\n name: 'floatingDialog',\n group: 'block',\n content: 'block+',\n draggable: true,\n isolating: true,\n defining: true,\n\n addAttributes() {\n return {\n title: { default: 'Note' },\n x: { default: 20 },\n y: { default: 0 },\n width: { default: 280 },\n height: { default: 120 },\n borderColor: { default: '#3b82f6' },\n bgColor: { default: '#eff6ff' },\n layout: { default: 'block' },\n zIndex: { default: 10 },\n };\n },\n\n parseHTML() {\n return [{ tag: 'div[data-type=\"floating-dialog\"]' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['div', mergeAttributes(HTMLAttributes, { 'data-type': 'floating-dialog' }), 0];\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(FloatingDialogView);\n },\n});\n\nexport default FloatingDialogExtension;\n"],"mappings":"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"}
|