@evolution-james/evolution-editor 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +13 -0
- package/README.md +241 -0
- package/dist/index.esm.js +1665 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +1672 -0
- package/dist/index.js.map +1 -0
- package/dist/styles.css +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/utils/constants.js","../src/utils/blockHelpers.js","../src/utils/serializer.js","../src/hooks/useEditor.js","../src/components/Toolbar/ToolbarButton.jsx","../src/components/Toolbar/Toolbar.jsx","../src/components/Blocks/ParagraphBlock.jsx","../src/components/Blocks/HeadingBlock.jsx","../src/components/Blocks/ListBlock.jsx","../src/components/Blocks/ImageBlock.jsx","../src/components/Blocks/YouTubeBlock.jsx","../src/components/Blocks/DividerBlock.jsx","../src/components/Editor/ContextMenu.jsx","../src/components/Editor/StyleModal.jsx","../src/components/Editor/Editor.jsx"],"sourcesContent":["export const PADDING_OPTIONS = [\n '0px', '4px', '8px', '12px', '16px', '24px', '32px', '40px', '48px', '64px'\n];\n\nexport const MARGIN_OPTIONS = [\n '0px', '4px', '8px', '12px', '16px', '24px', '32px', '40px', '48px', '64px'\n];\n/**\n * Block type identifiers used throughout the editor.\n * Each type corresponds to a React block component.\n */\nexport const BLOCK_TYPES = {\n PARAGRAPH: 'paragraph', // Standard text block\n HEADING: 'heading', // Heading block (h1, h2, h3)\n LIST: 'list', // Ordered or unordered list\n IMAGE: 'image', // Image block\n YOUTUBE: 'youtube', // Embedded YouTube video\n DIVIDER: 'divider' // Horizontal divider\n};\n\n/**\n * Supported heading levels for heading blocks.\n */\nexport const HEADING_LEVELS = {\n H1: 1,\n H2: 2,\n H3: 3\n};\n\n/**\n * List style options for list blocks.\n */\nexport const LIST_STYLES = {\n UNORDERED: 'unordered', // Bulleted list\n ORDERED: 'ordered' // Numbered list\n};\n\n/**\n * Default style objects for each block type.\n * These are used as the initial styles for new blocks.\n */\nexport const DEFAULT_STYLES = {\n heading: {\n 1: {\n fontSize: '32px',\n marginTop: '0px',\n marginBottom: '16px',\n marginLeft: '0px',\n marginRight: '0px',\n paddingTop: '0px',\n paddingBottom: '0px',\n paddingLeft: '0px',\n paddingRight: '0px',\n color: '#000000'\n },\n 2: {\n fontSize: '24px',\n marginTop: '0px',\n marginBottom: '14px',\n marginLeft: '0px',\n marginRight: '0px',\n paddingTop: '0px',\n paddingBottom: '0px',\n paddingLeft: '0px',\n paddingRight: '0px',\n color: '#000000'\n },\n 3: {\n fontSize: '20px',\n marginTop: '0px',\n marginBottom: '12px',\n marginLeft: '0px',\n marginRight: '0px',\n paddingTop: '0px',\n paddingBottom: '0px',\n paddingLeft: '0px',\n paddingRight: '0px',\n color: '#000000'\n }\n },\n paragraph: {\n fontSize: '16px',\n marginTop: '0px',\n marginBottom: '12px',\n marginLeft: '0px',\n marginRight: '0px',\n paddingTop: '0px',\n paddingBottom: '0px',\n paddingLeft: '0px',\n paddingRight: '0px',\n color: '#333333'\n },\n list: {\n fontSize: '16px',\n marginTop: '0px',\n marginBottom: '12px',\n marginLeft: '0px',\n marginRight: '0px',\n paddingTop: '0px',\n paddingBottom: '0px',\n paddingLeft: '40px',\n paddingRight: '0px',\n color: '#333333'\n },\n image: {\n marginTop: '16px',\n marginBottom: '16px',\n marginLeft: '0px',\n marginRight: '0px',\n paddingTop: '0px',\n paddingBottom: '0px',\n paddingLeft: '0px',\n paddingRight: '0px'\n },\n youtube: {\n marginTop: '16px',\n marginBottom: '16px',\n marginLeft: '0px',\n marginRight: '0px',\n paddingTop: '0px',\n paddingBottom: '0px',\n paddingLeft: '0px',\n paddingRight: '0px'\n },\n divider: {\n marginTop: '24px',\n marginBottom: '24px',\n marginLeft: '0px',\n marginRight: '0px',\n paddingTop: '0px',\n paddingBottom: '0px',\n paddingLeft: '0px',\n paddingRight: '0px'\n }\n};\n\n/**\n * Font size options for the toolbar font size picker.\n */\nexport const FONT_SIZE_OPTIONS = [\n '12px',\n '14px',\n '16px',\n '18px',\n '20px',\n '24px',\n '28px',\n '32px',\n '36px',\n '48px'\n];\n\n/**\n * Color options for the toolbar color pickers (text, border, background).\n */\nexport const COLOR_OPTIONS = [\n '#000000',\n '#333333',\n '#666666',\n '#999999',\n '#CCCCCC',\n '#FFFFFF',\n '#FF0000',\n '#00FF00',\n '#0000FF',\n '#FFFF00',\n '#FF00FF',\n '#00FFFF',\n '#FFA500',\n '#800080',\n '#008000'\n];\n","import { BLOCK_TYPES, DEFAULT_STYLES, HEADING_LEVELS, LIST_STYLES } from './constants';\n\n/**\n * Generate a unique block ID\n */\nexport function generateId() {\n return `block_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n}\n\n/**\n * Create an empty paragraph block with instructions\n */\nexport function createEmptyBlock() {\n return createBlock(BLOCK_TYPES.PARAGRAPH, {\n text: '',\n htmlTag: 'p',\n styles: { ...DEFAULT_STYLES.paragraph }\n });\n}\n\n/**\n * Create a new block with given type and data\n */\nexport function createBlock(type, data) {\n return {\n id: generateId(),\n type,\n data\n };\n}\n\n/**\n * Create a heading block\n */\nexport function createHeadingBlock(level = HEADING_LEVELS.H1, text = '') {\n return createBlock(BLOCK_TYPES.HEADING, {\n level,\n text,\n htmlTag: `h${level}`,\n styles: { ...DEFAULT_STYLES.heading[level] }\n });\n}\n\n/**\n * Create a list block\n */\nexport function createListBlock(style = LIST_STYLES.UNORDERED, items = ['']) {\n return createBlock(BLOCK_TYPES.LIST, {\n style,\n items,\n htmlTag: style === LIST_STYLES.UNORDERED ? 'ul' : 'ol',\n styles: { ...DEFAULT_STYLES.list }\n });\n}\n\n/**\n * Create an image block\n */\nexport function createImageBlock(url = '', alt = '') {\n return createBlock(BLOCK_TYPES.IMAGE, {\n url,\n alt,\n htmlTag: 'img',\n styles: { ...DEFAULT_STYLES.image }\n });\n}\n\n/**\n * Create a YouTube block\n */\nexport function createYouTubeBlock(url = '') {\n const videoId = extractYouTubeId(url);\n return createBlock(BLOCK_TYPES.YOUTUBE, {\n url,\n videoId,\n htmlTag: 'iframe',\n styles: { ...DEFAULT_STYLES.youtube }\n });\n}\n\n/**\n * Create a divider block\n */\nexport function createDividerBlock() {\n return createBlock(BLOCK_TYPES.DIVIDER, {\n htmlTag: 'hr',\n styles: { ...DEFAULT_STYLES.divider }\n });\n}\n\n/**\n * Extract YouTube video ID from URL\n */\nexport function extractYouTubeId(url) {\n if (!url) return '';\n \n const regExp = /^.*((youtu.be\\/)|(v\\/)|(\\/u\\/\\w\\/)|(embed\\/)|(watch\\?))\\??v?=?([^#&?]*).*/;\n const match = url.match(regExp);\n return (match && match[7].length === 11) ? match[7] : '';\n}\n\n/**\n * Update block styles\n */\nexport function updateBlockStyles(block, styleUpdates) {\n return {\n ...block,\n data: {\n ...block.data,\n styles: {\n ...block.data.styles,\n ...styleUpdates\n }\n }\n };\n}\n\n/**\n * Update block data\n */\nexport function updateBlockData(block, dataUpdates) {\n return {\n ...block,\n data: {\n ...block.data,\n ...dataUpdates\n }\n };\n}","import { createEmptyBlock } from './blockHelpers';\n\n/**\n * Serialize editor blocks to JSON format\n */\nexport function serialize(blocks) {\n return {\n version: '1.0.0',\n time: Date.now(),\n blocks: blocks.map(block => ({\n id: block.id,\n type: block.type,\n data: block.data\n }))\n };\n}\n\n/**\n * Deserialize JSON to editor blocks\n */\nexport function deserialize(json) {\n // Handle empty or invalid JSON\n if (!json || !json.blocks || !Array.isArray(json.blocks)) {\n return [createEmptyBlock()];\n }\n\n // Handle empty blocks array\n if (json.blocks.length === 0) {\n return [createEmptyBlock()];\n }\n\n // Map JSON blocks to editor blocks\n return json.blocks.map(block => ({\n id: block.id,\n type: block.type,\n data: block.data\n }));\n}\n\n/**\n * Validate JSON structure\n */\nexport function validateJSON(json) {\n try {\n if (!json || typeof json !== 'object') {\n return false;\n }\n\n if (!json.blocks || !Array.isArray(json.blocks)) {\n return false;\n }\n\n // Validate each block has required fields\n for (const block of json.blocks) {\n if (!block.id || !block.type || !block.data) {\n return false;\n }\n }\n\n return true;\n } catch (error) {\n return false;\n }\n}\n","import { useState, useEffect, useCallback } from 'react';\nimport { createEmptyBlock, updateBlockData, updateBlockStyles } from '../utils/blockHelpers';\nimport { deserialize, serialize } from '../utils/serializer';\n\n/**\n * Main hook for managing editor state\n */\nexport function useEditor(initialData) {\n const [blocks, setBlocks] = useState(() => {\n if (initialData) {\n return deserialize(initialData);\n }\n return [];\n });\n\n const [focusedBlockId, setFocusedBlockId] = useState(null);\n\n // Update blocks when initialData changes\n useEffect(() => {\n if (initialData) {\n setBlocks(deserialize(initialData));\n } else {\n setBlocks([]);\n }\n }, [initialData]);\n\n /**\n * Add a new block at the specified index\n */\n const addBlock = useCallback((block, index) => {\n setBlocks(prev => {\n const newBlocks = [...prev];\n newBlocks.splice(index, 0, block);\n return newBlocks;\n });\n }, []);\n\n /**\n * Update a block by ID\n */\n const updateBlock = useCallback((blockId, updates) => {\n setBlocks(prev =>\n prev.map(block =>\n block.id === blockId ? updateBlockData(block, updates) : block\n )\n );\n }, []);\n\n /**\n * Update block styles by ID\n */\n const updateBlockStyle = useCallback((blockId, styleUpdates) => {\n setBlocks(prev =>\n prev.map(block =>\n block.id === blockId ? updateBlockStyles(block, styleUpdates) : block\n )\n );\n }, []);\n\n /**\n * Delete a block by ID\n */\n const deleteBlock = useCallback((blockId) => {\n setBlocks(prev => {\n const filtered = prev.filter(block => block.id !== blockId);\n return filtered;\n });\n }, []);\n\n /**\n * Move a block to a new position\n */\n const moveBlock = useCallback((fromIndex, toIndex) => {\n setBlocks(prev => {\n const newBlocks = [...prev];\n const [movedBlock] = newBlocks.splice(fromIndex, 1);\n newBlocks.splice(toIndex, 0, movedBlock);\n return newBlocks;\n });\n }, []);\n\n /**\n * Get the current editor data as JSON\n */\n const getJSON = useCallback(() => {\n return serialize(blocks);\n }, [blocks]);\n\n /**\n * Clear all blocks\n */\n const clear = useCallback(() => {\n setBlocks([createEmptyBlock()]);\n }, []);\n\n return {\n blocks,\n focusedBlockId,\n setFocusedBlockId,\n addBlock,\n updateBlock,\n updateBlockStyle,\n deleteBlock,\n moveBlock,\n getJSON,\n clear\n };\n}","import React from 'react';\n\nexport function ToolbarButton({ onClick, children, title, active, disabled }) {\n return (\n <button\n onClick={onClick}\n title={title}\n disabled={disabled}\n className={`toolbar-button ${active ? 'active' : ''}`}\n type=\"button\"\n >\n {children}\n </button>\n );\n}\n","import React, { useState } from 'react';\nimport { ToolbarButton } from './ToolbarButton.jsx';\nimport { FONT_SIZE_OPTIONS, COLOR_OPTIONS, PADDING_OPTIONS, MARGIN_OPTIONS } from '../../utils/constants';\nimport './Toolbar.css';\n\nconst TEXT_TYPES = ['paragraph', 'heading', 'list'];\n\nexport function Toolbar({\n focusedBlock,\n onUpdateBlockStyle,\n onMoveBlockUp,\n onMoveBlockDown,\n onSave\n}) {\n const [showFontSizePicker, setShowFontSizePicker] = useState(false);\n const [showBgColorPicker, setShowBgColorPicker] = useState(false);\n const [showPaddingPicker, setShowPaddingPicker] = useState(false);\n const [showMarginPicker, setShowMarginPicker] = useState(false);\n\n const hasFocusedBlock = !!focusedBlock;\n const isTextBlock = focusedBlock && TEXT_TYPES.includes(focusedBlock.type);\n const styles = focusedBlock?.data?.styles || {};\n\n const handleStyleChange = (updates) => {\n if (!hasFocusedBlock) return;\n onUpdateBlockStyle(updates);\n };\n\n const handleColorChange = (color) => {\n handleStyleChange({ color });\n };\n\n const handleFontSizeChange = (fontSize) => {\n handleStyleChange({ fontSize });\n setShowFontSizePicker(false);\n };\n\n const handleBorderColorChange = (borderColor) => {\n handleStyleChange({ borderColor, borderStyle: 'solid' });\n };\n\n const handleBgColorChange = (backgroundColor) => {\n handleStyleChange({ backgroundColor });\n setShowBgColorPicker(false);\n };\n\n const handleAllPadding = (value) => {\n handleStyleChange({\n paddingTop: value,\n paddingRight: value,\n paddingBottom: value,\n paddingLeft: value\n });\n };\n\n const handleAllMargin = (value) => {\n handleStyleChange({\n marginTop: value,\n marginRight: value,\n marginBottom: value,\n marginLeft: value\n });\n };\n\n const parsePx = (val) => parseInt(val, 10) || 0;\n\n return (\n <div className=\"toolbar\">\n <div className=\"toolbar-sections\">\n {/* Move controls */}\n <div className=\"toolbar-section\">\n <ToolbarButton onClick={onMoveBlockUp} disabled={!hasFocusedBlock} title=\"Move Up\">\n ↑\n </ToolbarButton>\n <ToolbarButton onClick={onMoveBlockDown} disabled={!hasFocusedBlock} title=\"Move Down\">\n ↓\n </ToolbarButton>\n </div>\n\n <div className=\"toolbar-divider\" />\n\n {/* Text Alignment */}\n <div className=\"toolbar-section\">\n <label className=\"toolbar-label\">Align:</label>\n <ToolbarButton\n onClick={() => handleStyleChange({ textAlign: 'left' })}\n disabled={!isTextBlock}\n active={isTextBlock && (styles.textAlign || 'left') === 'left'}\n title=\"Align Left\"\n >\n <span className=\"align-icon align-left\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => handleStyleChange({ textAlign: 'center' })}\n disabled={!isTextBlock}\n active={isTextBlock && styles.textAlign === 'center'}\n title=\"Align Center\"\n >\n <span className=\"align-icon align-center\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => handleStyleChange({ textAlign: 'right' })}\n disabled={!isTextBlock}\n active={isTextBlock && styles.textAlign === 'right'}\n title=\"Align Right\"\n >\n <span className=\"align-icon align-right\" />\n </ToolbarButton>\n </div>\n\n <div className=\"toolbar-divider\" />\n\n {/* Font Size */}\n <div className=\"toolbar-section\">\n <label className=\"toolbar-label\">Font Size:</label>\n <div className=\"toolbar-dropdown\">\n <ToolbarButton\n onClick={() => setShowFontSizePicker(!showFontSizePicker)}\n disabled={!isTextBlock}\n title=\"Font Size\"\n >\n {styles.fontSize || '16px'}\n </ToolbarButton>\n {showFontSizePicker && (\n <div className=\"toolbar-dropdown-menu font-size-picker\">\n {FONT_SIZE_OPTIONS.map(size => (\n <button\n key={size}\n className=\"font-size-option\"\n onClick={() => handleFontSizeChange(size)}\n >\n {size}\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n\n <div className=\"toolbar-divider\" />\n\n {/* Text Color */}\n <div className=\"toolbar-section\">\n <label className=\"toolbar-label\">Text Color:</label>\n <input\n type=\"color\"\n className=\"toolbar-color-picker\"\n value={styles.color || '#333333'}\n onChange={e => handleColorChange(e.target.value)}\n disabled={!isTextBlock}\n title=\"Text Color\"\n />\n </div>\n\n <div className=\"toolbar-divider\" />\n\n {/* Padding */}\n <div className=\"toolbar-section\">\n <label className=\"toolbar-label\">Padding:</label>\n <div className=\"toolbar-dropdown\">\n <ToolbarButton\n onClick={() => setShowPaddingPicker(!showPaddingPicker)}\n disabled={!hasFocusedBlock}\n title=\"Padding (all sides)\"\n >\n {styles.paddingTop || '0px'}\n </ToolbarButton>\n {showPaddingPicker && (\n <div className=\"toolbar-dropdown-menu padding-picker\">\n {PADDING_OPTIONS.map(option => (\n <button\n key={option}\n className=\"padding-option\"\n onClick={() => { handleAllPadding(option); setShowPaddingPicker(false); }}\n >\n {option}\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n\n <div className=\"toolbar-divider\" />\n\n {/* Margin */}\n <div className=\"toolbar-section\">\n <label className=\"toolbar-label\">Margin:</label>\n <div className=\"toolbar-dropdown\">\n <ToolbarButton\n onClick={() => setShowMarginPicker(!showMarginPicker)}\n disabled={!hasFocusedBlock}\n title=\"Margin (all sides)\"\n >\n {styles.marginTop || '0px'}\n </ToolbarButton>\n {showMarginPicker && (\n <div className=\"toolbar-dropdown-menu margin-picker\">\n {MARGIN_OPTIONS.map(option => (\n <button\n key={option}\n className=\"margin-option\"\n onClick={() => { handleAllMargin(option); setShowMarginPicker(false); }}\n >\n {option}\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n\n <div className=\"toolbar-divider\" />\n\n {/* Border Color */}\n <div className=\"toolbar-section\">\n <label className=\"toolbar-label\">Border Color:</label>\n <input\n type=\"color\"\n className=\"toolbar-color-picker\"\n value={styles.borderColor || '#cccccc'}\n onChange={e => handleBorderColorChange(e.target.value)}\n disabled={!hasFocusedBlock}\n title=\"Border Color\"\n />\n </div>\n\n <div className=\"toolbar-divider\" />\n\n {/* Border Width */}\n <div className=\"toolbar-section\">\n <label className=\"toolbar-label\">Border Width:</label>\n <input\n type=\"number\"\n className=\"toolbar-input\"\n min=\"0\"\n value={parsePx(styles.borderWidth)}\n disabled={!hasFocusedBlock}\n onChange={(e) => handleStyleChange({ borderWidth: `${e.target.value}px`, borderStyle: 'solid' })}\n title=\"Border Width\"\n />\n </div>\n\n <div className=\"toolbar-divider\" />\n\n {/* Background Color */}\n <div className=\"toolbar-section\">\n <label className=\"toolbar-label\">Background Color:</label>\n <div className=\"toolbar-dropdown\">\n <button\n className=\"toolbar-color-swatch\"\n style={{ backgroundColor: hasFocusedBlock ? (styles.backgroundColor || '#ffffff') : '#cccccc' }}\n onClick={() => hasFocusedBlock && setShowBgColorPicker(!showBgColorPicker)}\n disabled={!hasFocusedBlock}\n title=\"Background Color\"\n />\n {showBgColorPicker && (\n <div className=\"toolbar-dropdown-menu color-picker\">\n {COLOR_OPTIONS.map(color => (\n <button\n key={color}\n className=\"color-option\"\n style={{ backgroundColor: color }}\n onClick={() => handleBgColorChange(color)}\n title={color}\n />\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n\n <div className=\"toolbar-section\">\n <ToolbarButton onClick={onSave} title=\"Save\">\n 💾 Save\n </ToolbarButton>\n </div>\n </div>\n );\n}\n","import React, { useRef, useEffect } from 'react';\nimport './ParagraphBlock.css';\n\nexport function ParagraphBlock({ block, onChange, onFocus, onKeyDown, isFocused, editable = true, placeholder }) {\n const editorRef = useRef(null);\n const isUpdatingRef = useRef(false);\n\n useEffect(() => {\n if (editable && isFocused && editorRef.current) {\n editorRef.current.focus();\n }\n }, [isFocused, editable]);\n\n useEffect(() => {\n // Only update if content changed from outside (not from user typing)\n if (editorRef.current && !isUpdatingRef.current) {\n if (editorRef.current.innerHTML !== block.data.text) {\n editorRef.current.innerHTML = block.data.text || '';\n }\n }\n isUpdatingRef.current = false;\n }, [block.data.text]);\n\n const handleInput = (e) => {\n isUpdatingRef.current = true;\n onChange({\n text: e.target.innerHTML\n });\n };\n\n const handleKeyDown = (e) => {\n if (onKeyDown) {\n onKeyDown(e);\n }\n };\n\n if (!editable) {\n return (\n <div\n className=\"paragraph-block\"\n style={block.data.styles}\n dangerouslySetInnerHTML={{ __html: block.data.text || '' }}\n />\n );\n }\n\n return (\n <div\n ref={editorRef}\n className=\"paragraph-block\"\n contentEditable\n suppressContentEditableWarning\n onInput={handleInput}\n onFocus={onFocus}\n onKeyDown={handleKeyDown}\n data-placeholder={placeholder || \"Start typing...\"}\n style={block.data.styles}\n />\n );\n}\n","import React, { useRef, useEffect } from 'react';\nimport './HeadingBlock.css';\n\nexport function HeadingBlock({ block, onChange, onFocus, onKeyDown, isFocused, editable = true }) {\n const editorRef = useRef(null);\n const isUpdatingRef = useRef(false);\n const HeadingTag = block.data.htmlTag || 'h1';\n\n useEffect(() => {\n if (editable && isFocused && editorRef.current) {\n editorRef.current.focus();\n }\n }, [isFocused, editable]);\n\n useEffect(() => {\n if (editorRef.current && !isUpdatingRef.current) {\n if (editorRef.current.innerHTML !== block.data.text) {\n editorRef.current.innerHTML = block.data.text || '';\n }\n }\n isUpdatingRef.current = false;\n }, [block.data.text]);\n\n const handleInput = (e) => {\n isUpdatingRef.current = true;\n onChange({\n text: e.target.innerHTML\n });\n };\n\n const handleKeyDown = (e) => {\n if (onKeyDown) {\n onKeyDown(e);\n }\n };\n\n if (!editable) {\n return (\n <HeadingTag\n className=\"heading-block\"\n style={block.data.styles}\n dangerouslySetInnerHTML={{ __html: block.data.text || '' }}\n />\n );\n }\n\n return (\n <HeadingTag\n ref={editorRef}\n className=\"heading-block\"\n contentEditable\n suppressContentEditableWarning\n onInput={handleInput}\n onFocus={onFocus}\n onKeyDown={handleKeyDown}\n data-placeholder=\"Heading\"\n style={block.data.styles}\n />\n );\n}\n","import React, { useState, useRef, useEffect } from 'react';\nimport './ListBlock.css';\n\nexport function ListBlock({ block, onChange, onFocus, editable = true }) {\n const [editingIndex, setEditingIndex] = useState(null);\n // Focus the first item when block is focused/created\n useEffect(() => {\n if (!editable) return;\n if (typeof onFocus === 'function' && editingIndex === null) {\n // Wait for block to be focused by parent\n setTimeout(() => {\n if (listRef.current) {\n const first = listRef.current.querySelector('.list-item-content[data-idx=\"0\"]');\n if (first) {\n first.focus();\n setEditingIndex(0);\n }\n }\n }, 0);\n }\n }, [editable, onFocus, editingIndex]);\n const ListTag = block.data.htmlTag || 'ul';\n const listRef = useRef(null);\n\n const handleItemChange = (index, value, el) => {\n // Save caret position\n let caretOffset = 0;\n if (el && el.isContentEditable) {\n const selection = window.getSelection();\n if (selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n const preCaretRange = range.cloneRange();\n preCaretRange.selectNodeContents(el);\n preCaretRange.setEnd(range.endContainer, range.endOffset);\n caretOffset = preCaretRange.toString().length;\n }\n }\n const newItems = [...block.data.items];\n newItems[index] = value;\n onChange({ items: newItems });\n // Restore caret position\n if (el && el.isContentEditable) {\n setTimeout(() => {\n let node = el;\n let charIndex = 0, found = false, sel = window.getSelection();\n function setCaret(node) {\n if (found) return;\n if (node.nodeType === 3) { // text node\n const nextCharIndex = charIndex + node.length;\n if (!found && caretOffset >= charIndex && caretOffset <= nextCharIndex) {\n const range = document.createRange();\n range.setStart(node, caretOffset - charIndex);\n range.collapse(true);\n sel.removeAllRanges();\n sel.addRange(range);\n found = true;\n }\n charIndex = nextCharIndex;\n } else {\n for (let i = 0; i < node.childNodes.length; i++) {\n setCaret(node.childNodes[i]);\n if (found) break;\n }\n }\n }\n setCaret(node);\n }, 0);\n }\n };\n\n const handleItemKeyDown = (e, index) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n const newItems = [...block.data.items];\n newItems.splice(index + 1, 0, '');\n onChange({ items: newItems });\n setTimeout(() => {\n setEditingIndex(index + 1);\n // Focus the next item, scoped to this ListBlock only\n if (listRef.current) {\n const next = listRef.current.querySelector(\n `.list-item-content[data-idx='${index + 1}']`\n );\n if (next) {\n next.focus();\n }\n }\n }, 0);\n } else if (e.key === 'Backspace' && block.data.items[index] === '') {\n e.preventDefault();\n if (block.data.items.length > 1) {\n const newItems = block.data.items.filter((_, i) => i !== index);\n onChange({ items: newItems });\n setEditingIndex(index > 0 ? index - 1 : 0);\n }\n }\n };\n\n if (!editable) {\n return (\n <ListTag className=\"list-block\" style={block.data.styles}>\n {block.data.items.map((item, index) => (\n <li key={index} className=\"list-item\">\n <span dangerouslySetInnerHTML={{ __html: item }} />\n </li>\n ))}\n </ListTag>\n );\n }\n\n return (\n <ListTag\n className=\"list-block\"\n style={block.data.styles}\n onClick={onFocus}\n ref={listRef}\n >\n {block.data.items.map((item, index) => (\n <li key={index} className=\"list-item\">\n <div\n contentEditable\n suppressContentEditableWarning\n data-idx={index}\n onInput={(e) => handleItemChange(index, e.target.textContent, e.currentTarget)}\n onKeyDown={(e) => handleItemKeyDown(e, index)}\n onFocus={() => setEditingIndex(index)}\n dangerouslySetInnerHTML={{ __html: item }}\n className=\"list-item-content\"\n />\n </li>\n ))}\n </ListTag>\n );\n}\n","import React, { useState } from 'react';\nimport './ImageBlock.css';\n\nexport function ImageBlock({ block, onChange, onFocus, editable = true }) {\n const [isEditing, setIsEditing] = useState(!block.data.url);\n const [inputUrl, setInputUrl] = useState(block.data.url || '');\n\n const handleSubmit = (e) => {\n e.preventDefault();\n if (inputUrl.trim()) {\n onChange({ url: inputUrl.trim() });\n setIsEditing(false);\n }\n };\n\n const handleEdit = () => {\n setIsEditing(true);\n setInputUrl(block.data.url || '');\n };\n\n if (editable && isEditing) {\n return (\n <div className=\"image-block-input\" style={block.data.styles} onClick={onFocus}>\n <form onSubmit={handleSubmit}>\n <input\n type=\"text\"\n placeholder=\"Enter image URL...\"\n value={inputUrl}\n onChange={(e) => setInputUrl(e.target.value)}\n autoFocus\n className=\"image-url-input\"\n />\n <div className=\"image-block-actions\">\n <button type=\"submit\" className=\"image-block-btn\">Insert</button>\n {block.data.url && (\n <button\n type=\"button\"\n onClick={() => setIsEditing(false)}\n className=\"image-block-btn\"\n >\n Cancel\n </button>\n )}\n </div>\n </form>\n </div>\n );\n }\n\n return (\n <div className=\"image-block-wrapper\" style={block.data.styles} onClick={editable ? onFocus : undefined}>\n <img\n src={block.data.url}\n alt={block.data.alt || 'Image'}\n className=\"image-block\"\n onError={(e) => {\n e.target.style.display = 'none';\n e.target.nextSibling.style.display = 'block';\n }}\n />\n <div className=\"image-error\" style={{ display: 'none' }}>\n Failed to load image\n </div>\n {editable && (\n <button onClick={handleEdit} className=\"image-edit-btn\">\n Edit URL\n </button>\n )}\n </div>\n );\n}\n","import React, { useState } from 'react';\nimport { extractYouTubeId } from '../../utils/blockHelpers';\nimport './YouTubeBlock.css';\n\nexport function YouTubeBlock({ block, onChange, onFocus, editable = true }) {\n const [isEditing, setIsEditing] = useState(!block.data.videoId);\n const [inputUrl, setInputUrl] = useState(block.data.url || '');\n\n const handleSubmit = (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (inputUrl.trim()) {\n const videoId = extractYouTubeId(inputUrl.trim());\n if (videoId) {\n onChange({ url: inputUrl.trim(), videoId });\n setIsEditing(false);\n } else {\n alert('Invalid YouTube URL. Please enter a valid YouTube video link.');\n }\n }\n };\n\n const handleEdit = () => {\n setIsEditing(true);\n setInputUrl(block.data.url || '');\n };\n\n if (editable && isEditing) {\n return (\n <div className=\"youtube-block-input\" style={block.data.styles} onClick={onFocus}>\n <form onSubmit={handleSubmit}>\n <input\n type=\"text\"\n placeholder=\"Enter YouTube URL...\"\n value={inputUrl}\n onChange={(e) => setInputUrl(e.target.value)}\n autoFocus\n className=\"youtube-url-input\"\n />\n <div className=\"youtube-block-actions\">\n <button type=\"submit\" className=\"youtube-block-btn\">Embed</button>\n {block.data.videoId && (\n <button\n type=\"button\"\n onClick={() => setIsEditing(false)}\n className=\"youtube-block-btn\"\n >\n Cancel\n </button>\n )}\n </div>\n </form>\n </div>\n );\n }\n\n return (\n <div className=\"youtube-block-wrapper\" style={block.data.styles} onClick={editable ? onFocus : undefined}>\n <div className=\"youtube-embed\">\n <iframe\n src={`https://www.youtube.com/embed/${block.data.videoId}`}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n title=\"YouTube video\"\n />\n </div>\n {editable && (\n <button onClick={handleEdit} className=\"youtube-edit-btn\">\n Change Video\n </button>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport './DividerBlock.css';\n\nexport function DividerBlock({ block, onFocus }) {\n return (\n <div className=\"divider-block-wrapper\" style={block.data.styles} onClick={onFocus}>\n <hr className=\"divider-block\" />\n </div>\n );\n}\n","import React, { useEffect, useRef } from 'react';\nimport {\n createEmptyBlock,\n createHeadingBlock,\n createListBlock,\n createImageBlock,\n createYouTubeBlock,\n createDividerBlock\n} from '../../utils/blockHelpers';\nimport { HEADING_LEVELS, LIST_STYLES } from '../../utils/constants';\n\nexport function ContextMenu({ x, y, onAddBlock, onClose }) {\n const menuRef = useRef(null);\n\n useEffect(() => {\n const handleClickOutside = (e) => {\n if (menuRef.current && !menuRef.current.contains(e.target)) {\n onClose();\n }\n };\n const handleEscape = (e) => {\n if (e.key === 'Escape') onClose();\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('keydown', handleEscape);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleEscape);\n };\n }, [onClose]);\n\n const handleInsert = (block) => {\n onAddBlock(block, 'append');\n onClose();\n };\n\n const items = [\n { label: '¶ Paragraph', action: () => handleInsert(createEmptyBlock()) },\n { label: 'H1', action: () => handleInsert(createHeadingBlock(HEADING_LEVELS.H1)) },\n { label: 'H2', action: () => handleInsert(createHeadingBlock(HEADING_LEVELS.H2)) },\n { label: 'H3', action: () => handleInsert(createHeadingBlock(HEADING_LEVELS.H3)) },\n { label: '• Bullet List', action: () => handleInsert(createListBlock(LIST_STYLES.UNORDERED)) },\n { label: '1. Numbered List', action: () => handleInsert(createListBlock(LIST_STYLES.ORDERED)) },\n { label: 'Image', action: () => handleInsert(createImageBlock()) },\n { label: 'YouTube', action: () => handleInsert(createYouTubeBlock()) },\n { label: '─ Divider', action: () => handleInsert(createDividerBlock()) },\n ];\n\n return (\n <div ref={menuRef} className=\"context-menu\" style={{ left: x, top: y }}>\n {items.map((item) => (\n <button\n key={item.label}\n className=\"context-menu-item\"\n onClick={item.action}\n >\n {item.label}\n </button>\n ))}\n </div>\n );\n}\n","import React from 'react';\nimport { BLOCK_TYPES, FONT_SIZE_OPTIONS } from '../../utils/constants';\n\nconst TEXT_BLOCK_TYPES = [BLOCK_TYPES.PARAGRAPH, BLOCK_TYPES.HEADING, BLOCK_TYPES.LIST];\n\nfunction StyleField({ label, value, onChange, type = 'text', suffix = '' }) {\n if (type === 'color') {\n return (\n <div className=\"style-modal-field\">\n <label>{label}</label>\n <input\n type=\"color\"\n value={value || '#000000'}\n onChange={(e) => onChange(e.target.value)}\n />\n </div>\n );\n }\n\n if (type === 'font-size') {\n const numericValue = parseInt(value, 10) || 16;\n return (\n <div className=\"style-modal-field\">\n <label>{label}</label>\n <div className=\"style-modal-font-size\">\n <select\n value={FONT_SIZE_OPTIONS.includes(value) ? value : ''}\n onChange={(e) => {\n if (e.target.value) onChange(e.target.value);\n }}\n >\n <option value=\"\" disabled>Common sizes</option>\n {FONT_SIZE_OPTIONS.map(size => (\n <option key={size} value={size}>{size}</option>\n ))}\n </select>\n <div className=\"style-modal-input-wrapper\">\n <input\n type=\"number\"\n min=\"1\"\n value={numericValue}\n onChange={(e) => onChange(`${e.target.value}px`)}\n />\n <span className=\"style-modal-suffix\">px</span>\n </div>\n </div>\n </div>\n );\n }\n\n const numericValue = parseInt(value, 10) || 0;\n\n return (\n <div className=\"style-modal-field\">\n <label>{label}</label>\n <div className=\"style-modal-input-wrapper\">\n <input\n type=\"number\"\n min=\"0\"\n value={numericValue}\n onChange={(e) => onChange(`${e.target.value}${suffix}`)}\n />\n {suffix && <span className=\"style-modal-suffix\">{suffix}</span>}\n </div>\n </div>\n );\n}\n\nexport function StyleModal({ block, onUpdateStyle, onClose }) {\n const styles = block.data.styles || {};\n const isTextBlock = TEXT_BLOCK_TYPES.includes(block.type);\n\n const handleChange = (prop, value) => {\n const updates = { [prop]: value };\n if (prop === 'borderWidth' || prop === 'borderColor') {\n updates.borderStyle = 'solid';\n }\n onUpdateStyle(block.id, updates);\n };\n\n const handleAllMargins = (value) => {\n onUpdateStyle(block.id, {\n marginTop: value,\n marginRight: value,\n marginBottom: value,\n marginLeft: value\n });\n };\n\n const handleAllPadding = (value) => {\n onUpdateStyle(block.id, {\n paddingTop: value,\n paddingRight: value,\n paddingBottom: value,\n paddingLeft: value\n });\n };\n\n return (\n <div className=\"style-modal-overlay\" onMouseDown={onClose}>\n <div className=\"style-modal\" onMouseDown={(e) => e.stopPropagation()}>\n <div className=\"style-modal-header\">\n <h3>Edit Block Style</h3>\n <button className=\"style-modal-close\" onClick={onClose}>×</button>\n </div>\n\n <div className=\"style-modal-body\">\n {isTextBlock && (\n <>\n <div className=\"style-modal-section\">\n <h4>Text</h4>\n <div className=\"style-modal-row\">\n <StyleField\n label=\"Font Size\"\n value={styles.fontSize}\n onChange={(v) => handleChange('fontSize', v)}\n type=\"font-size\"\n />\n <StyleField\n label=\"Color\"\n value={styles.color}\n onChange={(v) => handleChange('color', v)}\n type=\"color\"\n />\n </div>\n </div>\n <hr className=\"style-modal-divider\" />\n </>\n )}\n\n <div className=\"style-modal-section\">\n <h4>Margin</h4>\n <div className=\"style-modal-row\">\n <StyleField label=\"All\" value={styles.marginAll || ''} onChange={(v) => { handleAllMargins(v); handleChange('marginAll', v); }} suffix=\"px\" />\n <StyleField label=\"Top\" value={styles.marginTop} onChange={(v) => handleChange('marginTop', v)} suffix=\"px\" />\n <StyleField label=\"Right\" value={styles.marginRight} onChange={(v) => handleChange('marginRight', v)} suffix=\"px\" />\n <StyleField label=\"Bottom\" value={styles.marginBottom} onChange={(v) => handleChange('marginBottom', v)} suffix=\"px\" />\n <StyleField label=\"Left\" value={styles.marginLeft} onChange={(v) => handleChange('marginLeft', v)} suffix=\"px\" />\n </div>\n </div>\n\n <hr className=\"style-modal-divider\" />\n\n <div className=\"style-modal-section\">\n <h4>Padding</h4>\n <div className=\"style-modal-row\">\n <StyleField label=\"All\" value={styles.paddingAll || ''} onChange={(v) => { handleAllPadding(v); handleChange('paddingAll', v); }} suffix=\"px\" />\n <StyleField label=\"Top\" value={styles.paddingTop} onChange={(v) => handleChange('paddingTop', v)} suffix=\"px\" />\n <StyleField label=\"Right\" value={styles.paddingRight} onChange={(v) => handleChange('paddingRight', v)} suffix=\"px\" />\n <StyleField label=\"Bottom\" value={styles.paddingBottom} onChange={(v) => handleChange('paddingBottom', v)} suffix=\"px\" />\n <StyleField label=\"Left\" value={styles.paddingLeft} onChange={(v) => handleChange('paddingLeft', v)} suffix=\"px\" />\n </div>\n </div>\n\n <hr className=\"style-modal-divider\" />\n\n <div className=\"style-modal-section\">\n <h4>Border</h4>\n <div className=\"style-modal-row\">\n <StyleField\n label=\"Width\"\n value={styles.borderWidth}\n onChange={(v) => handleChange('borderWidth', v)}\n suffix=\"px\"\n />\n <StyleField\n label=\"Color\"\n value={styles.borderColor}\n onChange={(v) => handleChange('borderColor', v)}\n type=\"color\"\n />\n </div>\n </div>\n\n <hr className=\"style-modal-divider\" />\n\n <div className=\"style-modal-section\">\n <h4>Background</h4>\n <div className=\"style-modal-row\">\n <StyleField\n label=\"Color\"\n value={styles.backgroundColor}\n onChange={(v) => handleChange('backgroundColor', v)}\n type=\"color\"\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import React, { useRef, useEffect, useState } from 'react';\nimport { useEditor } from '../../hooks/useEditor';\nimport { Toolbar } from '../Toolbar/Toolbar.jsx';\nimport { ParagraphBlock } from '../Blocks/ParagraphBlock.jsx';\nimport { HeadingBlock } from '../Blocks/HeadingBlock.jsx';\nimport { ListBlock } from '../Blocks/ListBlock.jsx';\nimport { ImageBlock } from '../Blocks/ImageBlock.jsx';\nimport { YouTubeBlock } from '../Blocks/YouTubeBlock.jsx';\nimport { DividerBlock } from '../Blocks/DividerBlock.jsx';\nimport { ContextMenu } from './ContextMenu.jsx';\nimport { StyleModal } from './StyleModal.jsx';\nimport { BLOCK_TYPES, LIST_STYLES } from '../../utils/constants';\nimport './Editor.css';\n\nexport function Editor({ initialData, onSave, placeholder = 'Start writing...', editable = true, showBranding = true }) {\n const editorContentRef = useRef(null);\n const blockRefs = useRef({});\n const [contextMenu, setContextMenu] = useState({ visible: false, x: 0, y: 0 });\n const [editingBlockId, setEditingBlockId] = useState(null);\n const [showSaveNotification, setShowSaveNotification] = useState(false);\n\n const {\n blocks,\n focusedBlockId,\n setFocusedBlockId,\n addBlock,\n updateBlock,\n updateBlockStyle,\n deleteBlock,\n moveBlock,\n getJSON\n } = useEditor(initialData);\n\n // Global ESC key handler to deselect\n useEffect(() => {\n if (!editable) return;\n\n const handleGlobalKeyDown = (e) => {\n if (e.key === 'Escape' && focusedBlockId) {\n setFocusedBlockId(null);\n if (document.activeElement) {\n document.activeElement.blur();\n }\n }\n };\n\n document.addEventListener('keydown', handleGlobalKeyDown);\n return () => document.removeEventListener('keydown', handleGlobalKeyDown);\n }, [focusedBlockId, editable, setFocusedBlockId]);\n\n const handleSave = () => {\n const json = getJSON();\n if (onSave) {\n onSave(json);\n }\n setShowSaveNotification(true);\n setTimeout(() => setShowSaveNotification(false), 1800);\n };\n\n const handleBlockChange = (blockId, updates) => {\n updateBlock(blockId, updates);\n };\n\n const handleBlockStyleChange = (styleUpdates) => {\n if (focusedBlockId) {\n updateBlockStyle(focusedBlockId, styleUpdates);\n }\n };\n\n const handleMoveBlockUp = () => {\n if (!focusedBlockId) return;\n const index = blocks.findIndex(b => b.id === focusedBlockId);\n if (index > 0) {\n moveBlock(index, index - 1);\n }\n };\n\n const handleMoveBlockDown = () => {\n if (!focusedBlockId) return;\n const index = blocks.findIndex(b => b.id === focusedBlockId);\n if (index < blocks.length - 1) {\n moveBlock(index, index + 1);\n }\n };\n\n const handleAddBlock = (block, mode = 'append') => {\n if (mode === 'replace' && focusedBlockId) {\n const focusedIndex = blocks.findIndex(b => b.id === focusedBlockId);\n if (focusedIndex !== -1) {\n deleteBlock(focusedBlockId);\n addBlock(block, focusedIndex);\n setTimeout(() => setFocusedBlockId(block.id), 0);\n return;\n }\n }\n\n addBlock(block, blocks.length);\n setTimeout(() => setFocusedBlockId(block.id), 0);\n };\n\n const handleContextMenu = (e) => {\n if (!editable) return;\n e.preventDefault();\n const rect = editorContentRef.current.getBoundingClientRect();\n setContextMenu({\n visible: true,\n x: e.clientX - rect.left,\n y: e.clientY - rect.top\n });\n };\n\n const handleMouseDown = (e) => {\n if (!editable) return;\n\n let clickedBlockId = null;\n\n for (let blockId in blockRefs.current) {\n const blockEl = blockRefs.current[blockId];\n if (blockEl && blockEl.contains(e.target)) {\n clickedBlockId = blockId;\n break;\n }\n }\n\n if (clickedBlockId) {\n setFocusedBlockId(clickedBlockId);\n } else {\n setFocusedBlockId(null);\n }\n };\n\n const handleKeyDown = (blockId, e) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n setFocusedBlockId(null);\n if (document.activeElement) {\n document.activeElement.blur();\n }\n return;\n }\n\n const blockIndex = blocks.findIndex(b => b.id === blockId);\n const block = blocks[blockIndex];\n\n if (e.key === 'Backspace' && block.data.text === '') {\n e.preventDefault();\n deleteBlock(blockId);\n\n if (blockIndex > 0) {\n setFocusedBlockId(blocks[blockIndex - 1].id);\n }\n }\n };\n\n const renderBlock = (block) => {\n const isFocused = editable && block.id === focusedBlockId;\n const commonProps = {\n block,\n onChange: (updates) => handleBlockChange(block.id, updates),\n onFocus: () => {},\n isFocused,\n editable,\n placeholder\n };\n\n switch (block.type) {\n case BLOCK_TYPES.PARAGRAPH:\n return (\n <ParagraphBlock\n {...commonProps}\n onKeyDown={editable ? (e) => handleKeyDown(block.id, e) : undefined}\n />\n );\n case BLOCK_TYPES.HEADING:\n return (\n <HeadingBlock\n {...commonProps}\n onKeyDown={editable ? (e) => handleKeyDown(block.id, e) : undefined}\n />\n );\n case BLOCK_TYPES.LIST:\n return <ListBlock {...commonProps} />;\n case BLOCK_TYPES.IMAGE:\n return <ImageBlock {...commonProps} />;\n case BLOCK_TYPES.YOUTUBE:\n return <YouTubeBlock {...commonProps} />;\n case BLOCK_TYPES.DIVIDER:\n return <DividerBlock {...commonProps} />;\n default:\n return null;\n }\n };\n\n const getBlockTagLabel = (block) => {\n switch (block.type) {\n case BLOCK_TYPES.PARAGRAPH: return 'p';\n case BLOCK_TYPES.HEADING: return block.data.htmlTag || 'h1';\n case BLOCK_TYPES.LIST: return block.data.style === LIST_STYLES.ORDERED ? 'ol' : 'ul';\n case BLOCK_TYPES.IMAGE: return 'img';\n case BLOCK_TYPES.YOUTUBE: return 'iframe';\n case BLOCK_TYPES.DIVIDER: return 'hr';\n default: return 'div';\n }\n };\n\n const focusedBlock = blocks.find(b => b.id === focusedBlockId);\n\n return (\n <div className={`evolution-editor ${!editable ? 'read-only' : ''}`}>\n {editable && (\n <>\n {showBranding && (\n <div className=\"editor-branding\">\n <div className=\"editor-logo\">Evolution Editor</div>\n <div className=\"editor-subtitle\">\n Developed by <a href=\"https://github.com/james-evolution\" target=\"_blank\" rel=\"noopener noreferrer\">@james-evolution</a>\n </div>\n {showSaveNotification && (\n <div className=\"editor-save-notification\">JSON exported successfully</div>\n )}\n </div>\n )}\n {!showBranding && showSaveNotification && (\n <div className=\"editor-save-notification editor-save-notification-no-brand\">JSON exported successfully</div>\n )}\n <div className=\"editor-stepper\">\n <div className=\"step\">\n <span className=\"step-label\">Add Element</span>\n <span className=\"step-desc\">Right-click anywhere to open the menu for inserting elements.</span>\n </div>\n <div className=\"step\">\n <span className=\"step-label\">Style Element</span>\n <span className=\"step-desc\">Click the element to unlock toolbar styling options, or hover over the element and click ✏️ to style.</span>\n </div>\n <div className=\"step\">\n <span className=\"step-label\">Reorder Element</span>\n <span className=\"step-desc\">Use ↑ ↓ on the toolbar or hover an element and click ↕️ to reorder.</span>\n </div>\n <div className=\"step\">\n <span className=\"step-label\">Delete Element</span>\n <span className=\"step-desc\">Hover over an element and click 🗑️ to delete it.</span>\n </div>\n </div>\n <Toolbar\n focusedBlock={focusedBlock}\n onUpdateBlockStyle={handleBlockStyleChange}\n onMoveBlockUp={handleMoveBlockUp}\n onMoveBlockDown={handleMoveBlockDown}\n onSave={handleSave}\n />\n </>\n )}\n <div\n ref={editorContentRef}\n className=\"editor-content\"\n onMouseDown={handleMouseDown}\n onContextMenu={editable ? handleContextMenu : undefined}\n >\n {blocks.map((block, idx) => (\n <div\n key={block.id}\n className=\"editor-block-wrapper\"\n >\n <span className=\"block-tag-label\"><{getBlockTagLabel(block)}></span>\n <div className=\"block-left-controls\">\n {editable && (\n <div className=\"block-move-controls\">\n <button\n className=\"block-move-btn\"\n onClick={() => idx > 0 && moveBlock(idx, idx - 1)}\n title=\"Move up\"\n disabled={idx === 0}\n >\n ↑\n </button>\n <button\n className=\"block-move-btn\"\n onClick={() => idx < blocks.length - 1 && moveBlock(idx, idx + 1)}\n title=\"Move down\"\n disabled={idx === blocks.length - 1}\n >\n ↓\n </button>\n </div>\n )}\n </div>\n <div\n ref={editable ? (el) => blockRefs.current[block.id] = el : undefined}\n className={`editor-block ${editable && block.id === focusedBlockId ? 'focused' : ''}`}\n data-block-id={block.id}\n >\n {renderBlock(block)}\n </div>\n {editable && (\n <div className=\"block-actions\">\n <button\n className=\"block-edit-button\"\n onClick={() => setEditingBlockId(block.id)}\n title=\"Edit block style\"\n >\n ✏️\n </button>\n <button\n className=\"block-delete-button\"\n onClick={() => deleteBlock(block.id)}\n title=\"Delete block\"\n >\n 🗑️\n </button>\n </div>\n )}\n </div>\n ))}\n {editable && contextMenu.visible && (\n <ContextMenu\n x={contextMenu.x}\n y={contextMenu.y}\n onAddBlock={handleAddBlock}\n onClose={() => setContextMenu({ visible: false, x: 0, y: 0 })}\n />\n )}\n </div>\n {editable && editingBlockId && (\n <StyleModal\n block={blocks.find(b => b.id === editingBlockId)}\n onUpdateStyle={(blockId, styleUpdates) => updateBlockStyle(blockId, styleUpdates)}\n onClose={() => setEditingBlockId(null)}\n />\n )}\n </div>\n );\n}\n"],"names":["PADDING_OPTIONS","MARGIN_OPTIONS","BLOCK_TYPES","PARAGRAPH","HEADING","LIST","IMAGE","YOUTUBE","DIVIDER","HEADING_LEVELS","H1","H2","H3","LIST_STYLES","UNORDERED","ORDERED","DEFAULT_STYLES","heading","fontSize","marginTop","marginBottom","marginLeft","marginRight","paddingTop","paddingBottom","paddingLeft","paddingRight","color","paragraph","list","image","youtube","divider","FONT_SIZE_OPTIONS","COLOR_OPTIONS","generateId","Date","now","Math","random","toString","substr","createEmptyBlock","createBlock","text","htmlTag","styles","type","data","id","createHeadingBlock","level","createListBlock","style","items","createImageBlock","url","alt","createYouTubeBlock","videoId","extractYouTubeId","createDividerBlock","regExp","match","length","updateBlockStyles","block","styleUpdates","updateBlockData","dataUpdates","serialize","blocks","version","time","map","deserialize","json","Array","isArray","useEditor","initialData","setBlocks","useState","focusedBlockId","setFocusedBlockId","useEffect","addBlock","useCallback","index","prev","newBlocks","splice","updateBlock","blockId","updates","updateBlockStyle","deleteBlock","filtered","filter","moveBlock","fromIndex","toIndex","movedBlock","getJSON","clear","ToolbarButton","onClick","children","title","active","disabled","React","createElement","className","TEXT_TYPES","Toolbar","focusedBlock","onUpdateBlockStyle","onMoveBlockUp","onMoveBlockDown","onSave","showFontSizePicker","setShowFontSizePicker","showBgColorPicker","setShowBgColorPicker","showPaddingPicker","setShowPaddingPicker","showMarginPicker","setShowMarginPicker","hasFocusedBlock","isTextBlock","includes","handleStyleChange","handleColorChange","handleFontSizeChange","handleBorderColorChange","borderColor","borderStyle","handleBgColorChange","backgroundColor","handleAllPadding","value","handleAllMargin","parsePx","val","parseInt","textAlign","size","key","onChange","e","target","option","min","borderWidth","ParagraphBlock","onFocus","onKeyDown","isFocused","editable","placeholder","editorRef","useRef","isUpdatingRef","current","focus","innerHTML","handleInput","handleKeyDown","dangerouslySetInnerHTML","__html","ref","contentEditable","suppressContentEditableWarning","onInput","HeadingBlock","HeadingTag","ListBlock","editingIndex","setEditingIndex","setTimeout","listRef","first","querySelector","ListTag","handleItemChange","el","caretOffset","isContentEditable","selection","window","getSelection","rangeCount","range","getRangeAt","preCaretRange","cloneRange","selectNodeContents","setEnd","endContainer","endOffset","newItems","node","charIndex","found","sel","setCaret","nodeType","nextCharIndex","document","createRange","setStart","collapse","removeAllRanges","addRange","i","childNodes","handleItemKeyDown","preventDefault","next","_","item","textContent","currentTarget","ImageBlock","isEditing","setIsEditing","inputUrl","setInputUrl","handleSubmit","trim","handleEdit","onSubmit","autoFocus","undefined","src","onError","display","nextSibling","YouTubeBlock","stopPropagation","alert","frameBorder","allow","allowFullScreen","DividerBlock","ContextMenu","x","y","onAddBlock","onClose","menuRef","handleClickOutside","contains","handleEscape","addEventListener","removeEventListener","handleInsert","label","action","left","top","TEXT_BLOCK_TYPES","StyleField","suffix","numericValue","StyleModal","onUpdateStyle","handleChange","prop","handleAllMargins","onMouseDown","Fragment","v","marginAll","paddingAll","Editor","showBranding","editorContentRef","blockRefs","contextMenu","setContextMenu","visible","editingBlockId","setEditingBlockId","showSaveNotification","setShowSaveNotification","handleGlobalKeyDown","activeElement","blur","handleSave","handleBlockChange","handleBlockStyleChange","handleMoveBlockUp","findIndex","b","handleMoveBlockDown","handleAddBlock","mode","focusedIndex","handleContextMenu","rect","getBoundingClientRect","clientX","clientY","handleMouseDown","clickedBlockId","blockEl","blockIndex","renderBlock","commonProps","_extends","getBlockTagLabel","find","href","rel","onContextMenu","idx"],"mappings":";;;;;;;;;;;;;;AAAO,MAAMA,eAAe,GAAG,CAC7B,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAC5E,CAAA;AAEM,MAAMC,cAAc,GAAG,CAC5B,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAC5E,CAAA;AACD;AACA;AACA;AACA;AACO,MAAMC,WAAW,GAAG;AACzBC,EAAAA,SAAS,EAAE,WAAW;AAAI;AAC1BC,EAAAA,OAAO,EAAE,SAAS;AAAQ;AAC1BC,EAAAA,IAAI,EAAE,MAAM;AAAc;AAC1BC,EAAAA,KAAK,EAAE,OAAO;AAAY;AAC1BC,EAAAA,OAAO,EAAE,SAAS;AAAQ;EAC1BC,OAAO,EAAE,SAAS;AACpB,EAAC;;AAED;AACA;AACA;AACO,MAAMC,cAAc,GAAG;AAC5BC,EAAAA,EAAE,EAAE,CAAC;AACLC,EAAAA,EAAE,EAAE,CAAC;AACLC,EAAAA,EAAE,EAAE,CAAA;AACN,EAAC;;AAED;AACA;AACA;AACO,MAAMC,WAAW,GAAG;AACzBC,EAAAA,SAAS,EAAE,WAAW;AAAE;EACxBC,OAAO,EAAE,SAAS;AACpB,EAAC;;AAED;AACA;AACA;AACA;AACO,MAAMC,cAAc,GAAG;AAC5BC,EAAAA,OAAO,EAAE;AACP,IAAA,CAAC,EAAE;AACDC,MAAAA,QAAQ,EAAE,MAAM;AAChBC,MAAAA,SAAS,EAAE,KAAK;AAChBC,MAAAA,YAAY,EAAE,MAAM;AACpBC,MAAAA,UAAU,EAAE,KAAK;AACjBC,MAAAA,WAAW,EAAE,KAAK;AAClBC,MAAAA,UAAU,EAAE,KAAK;AACjBC,MAAAA,aAAa,EAAE,KAAK;AACpBC,MAAAA,WAAW,EAAE,KAAK;AAClBC,MAAAA,YAAY,EAAE,KAAK;AACnBC,MAAAA,KAAK,EAAE,SAAA;KACR;AACD,IAAA,CAAC,EAAE;AACDT,MAAAA,QAAQ,EAAE,MAAM;AAChBC,MAAAA,SAAS,EAAE,KAAK;AAChBC,MAAAA,YAAY,EAAE,MAAM;AACpBC,MAAAA,UAAU,EAAE,KAAK;AACjBC,MAAAA,WAAW,EAAE,KAAK;AAClBC,MAAAA,UAAU,EAAE,KAAK;AACjBC,MAAAA,aAAa,EAAE,KAAK;AACpBC,MAAAA,WAAW,EAAE,KAAK;AAClBC,MAAAA,YAAY,EAAE,KAAK;AACnBC,MAAAA,KAAK,EAAE,SAAA;KACR;AACD,IAAA,CAAC,EAAE;AACDT,MAAAA,QAAQ,EAAE,MAAM;AAChBC,MAAAA,SAAS,EAAE,KAAK;AAChBC,MAAAA,YAAY,EAAE,MAAM;AACpBC,MAAAA,UAAU,EAAE,KAAK;AACjBC,MAAAA,WAAW,EAAE,KAAK;AAClBC,MAAAA,UAAU,EAAE,KAAK;AACjBC,MAAAA,aAAa,EAAE,KAAK;AACpBC,MAAAA,WAAW,EAAE,KAAK;AAClBC,MAAAA,YAAY,EAAE,KAAK;AACnBC,MAAAA,KAAK,EAAE,SAAA;AACT,KAAA;GACD;AACDC,EAAAA,SAAS,EAAE;AACTV,IAAAA,QAAQ,EAAE,MAAM;AAChBC,IAAAA,SAAS,EAAE,KAAK;AAChBC,IAAAA,YAAY,EAAE,MAAM;AACpBC,IAAAA,UAAU,EAAE,KAAK;AACjBC,IAAAA,WAAW,EAAE,KAAK;AAClBC,IAAAA,UAAU,EAAE,KAAK;AACjBC,IAAAA,aAAa,EAAE,KAAK;AACpBC,IAAAA,WAAW,EAAE,KAAK;AAClBC,IAAAA,YAAY,EAAE,KAAK;AACnBC,IAAAA,KAAK,EAAE,SAAA;GACR;AACDE,EAAAA,IAAI,EAAE;AACJX,IAAAA,QAAQ,EAAE,MAAM;AAChBC,IAAAA,SAAS,EAAE,KAAK;AAChBC,IAAAA,YAAY,EAAE,MAAM;AACpBC,IAAAA,UAAU,EAAE,KAAK;AACjBC,IAAAA,WAAW,EAAE,KAAK;AAClBC,IAAAA,UAAU,EAAE,KAAK;AACjBC,IAAAA,aAAa,EAAE,KAAK;AACpBC,IAAAA,WAAW,EAAE,MAAM;AACnBC,IAAAA,YAAY,EAAE,KAAK;AACnBC,IAAAA,KAAK,EAAE,SAAA;GACR;AACDG,EAAAA,KAAK,EAAE;AACLX,IAAAA,SAAS,EAAE,MAAM;AACjBC,IAAAA,YAAY,EAAE,MAAM;AACpBC,IAAAA,UAAU,EAAE,KAAK;AACjBC,IAAAA,WAAW,EAAE,KAAK;AAClBC,IAAAA,UAAU,EAAE,KAAK;AACjBC,IAAAA,aAAa,EAAE,KAAK;AACpBC,IAAAA,WAAW,EAAE,KAAK;AAClBC,IAAAA,YAAY,EAAE,KAAA;GACf;AACDK,EAAAA,OAAO,EAAE;AACPZ,IAAAA,SAAS,EAAE,MAAM;AACjBC,IAAAA,YAAY,EAAE,MAAM;AACpBC,IAAAA,UAAU,EAAE,KAAK;AACjBC,IAAAA,WAAW,EAAE,KAAK;AAClBC,IAAAA,UAAU,EAAE,KAAK;AACjBC,IAAAA,aAAa,EAAE,KAAK;AACpBC,IAAAA,WAAW,EAAE,KAAK;AAClBC,IAAAA,YAAY,EAAE,KAAA;GACf;AACDM,EAAAA,OAAO,EAAE;AACPb,IAAAA,SAAS,EAAE,MAAM;AACjBC,IAAAA,YAAY,EAAE,MAAM;AACpBC,IAAAA,UAAU,EAAE,KAAK;AACjBC,IAAAA,WAAW,EAAE,KAAK;AAClBC,IAAAA,UAAU,EAAE,KAAK;AACjBC,IAAAA,aAAa,EAAE,KAAK;AACpBC,IAAAA,WAAW,EAAE,KAAK;AAClBC,IAAAA,YAAY,EAAE,KAAA;AAChB,GAAA;AACF,CAAC,CAAA;;AAED;AACA;AACA;AACO,MAAMO,iBAAiB,GAAG,CAC/B,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,CACP,CAAA;;AAED;AACA;AACA;AACO,MAAMC,aAAa,GAAG,CAC3B,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,CACV;;ACzKD;AACA;AACA;AACO,SAASC,UAAUA,GAAG;EAC3B,OAAO,CAAA,MAAA,EAASC,IAAI,CAACC,GAAG,EAAE,CAAIC,CAAAA,EAAAA,IAAI,CAACC,MAAM,EAAE,CAACC,QAAQ,CAAC,EAAE,CAAC,CAACC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,CAAA,CAAA;AACzE,CAAA;;AAEA;AACA;AACA;AACO,SAASC,gBAAgBA,GAAG;AACjC,EAAA,OAAOC,WAAW,CAACzC,WAAW,CAACC,SAAS,EAAE;AACxCyC,IAAAA,IAAI,EAAE,EAAE;AACRC,IAAAA,OAAO,EAAE,GAAG;AACZC,IAAAA,MAAM,EAAE;AAAE,MAAA,GAAG9B,cAAc,CAACY,SAAAA;AAAU,KAAA;AACxC,GAAC,CAAC,CAAA;AACJ,CAAA;;AAEA;AACA;AACA;AACO,SAASe,WAAWA,CAACI,IAAI,EAAEC,IAAI,EAAE;EACtC,OAAO;IACLC,EAAE,EAAEd,UAAU,EAAE;IAChBY,IAAI;AACJC,IAAAA,IAAAA;GACD,CAAA;AACH,CAAA;;AAEA;AACA;AACA;AACO,SAASE,kBAAkBA,CAACC,KAAK,GAAG1C,cAAc,CAACC,EAAE,EAAEkC,IAAI,GAAG,EAAE,EAAE;AACvE,EAAA,OAAOD,WAAW,CAACzC,WAAW,CAACE,OAAO,EAAE;IACtC+C,KAAK;IACLP,IAAI;IACJC,OAAO,EAAE,CAAIM,CAAAA,EAAAA,KAAK,CAAE,CAAA;AACpBL,IAAAA,MAAM,EAAE;AAAE,MAAA,GAAG9B,cAAc,CAACC,OAAO,CAACkC,KAAK,CAAA;AAAE,KAAA;AAC7C,GAAC,CAAC,CAAA;AACJ,CAAA;;AAEA;AACA;AACA;AACO,SAASC,eAAeA,CAACC,KAAK,GAAGxC,WAAW,CAACC,SAAS,EAAEwC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE;AAC3E,EAAA,OAAOX,WAAW,CAACzC,WAAW,CAACG,IAAI,EAAE;IACnCgD,KAAK;IACLC,KAAK;IACLT,OAAO,EAAEQ,KAAK,KAAKxC,WAAW,CAACC,SAAS,GAAG,IAAI,GAAG,IAAI;AACtDgC,IAAAA,MAAM,EAAE;AAAE,MAAA,GAAG9B,cAAc,CAACa,IAAAA;AAAK,KAAA;AACnC,GAAC,CAAC,CAAA;AACJ,CAAA;;AAEA;AACA;AACA;AACO,SAAS0B,gBAAgBA,CAACC,GAAG,GAAG,EAAE,EAAEC,GAAG,GAAG,EAAE,EAAE;AACnD,EAAA,OAAOd,WAAW,CAACzC,WAAW,CAACI,KAAK,EAAE;IACpCkD,GAAG;IACHC,GAAG;AACHZ,IAAAA,OAAO,EAAE,KAAK;AACdC,IAAAA,MAAM,EAAE;AAAE,MAAA,GAAG9B,cAAc,CAACc,KAAAA;AAAM,KAAA;AACpC,GAAC,CAAC,CAAA;AACJ,CAAA;;AAEA;AACA;AACA;AACO,SAAS4B,kBAAkBA,CAACF,GAAG,GAAG,EAAE,EAAE;AAC3C,EAAA,MAAMG,OAAO,GAAGC,gBAAgB,CAACJ,GAAG,CAAC,CAAA;AACrC,EAAA,OAAOb,WAAW,CAACzC,WAAW,CAACK,OAAO,EAAE;IACtCiD,GAAG;IACHG,OAAO;AACPd,IAAAA,OAAO,EAAE,QAAQ;AACjBC,IAAAA,MAAM,EAAE;AAAE,MAAA,GAAG9B,cAAc,CAACe,OAAAA;AAAQ,KAAA;AACtC,GAAC,CAAC,CAAA;AACJ,CAAA;;AAEA;AACA;AACA;AACO,SAAS8B,kBAAkBA,GAAG;AACnC,EAAA,OAAOlB,WAAW,CAACzC,WAAW,CAACM,OAAO,EAAE;AACtCqC,IAAAA,OAAO,EAAE,IAAI;AACbC,IAAAA,MAAM,EAAE;AAAE,MAAA,GAAG9B,cAAc,CAACgB,OAAAA;AAAQ,KAAA;AACtC,GAAC,CAAC,CAAA;AACJ,CAAA;;AAEA;AACA;AACA;AACO,SAAS4B,gBAAgBA,CAACJ,GAAG,EAAE;AACpC,EAAA,IAAI,CAACA,GAAG,EAAE,OAAO,EAAE,CAAA;EAEnB,MAAMM,MAAM,GAAG,2EAA2E,CAAA;AAC1F,EAAA,MAAMC,KAAK,GAAGP,GAAG,CAACO,KAAK,CAACD,MAAM,CAAC,CAAA;AAC/B,EAAA,OAAQC,KAAK,IAAIA,KAAK,CAAC,CAAC,CAAC,CAACC,MAAM,KAAK,EAAE,GAAID,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;AAC1D,CAAA;;AAEA;AACA;AACA;AACO,SAASE,iBAAiBA,CAACC,KAAK,EAAEC,YAAY,EAAE;EACrD,OAAO;AACL,IAAA,GAAGD,KAAK;AACRlB,IAAAA,IAAI,EAAE;MACJ,GAAGkB,KAAK,CAAClB,IAAI;AACbF,MAAAA,MAAM,EAAE;AACN,QAAA,GAAGoB,KAAK,CAAClB,IAAI,CAACF,MAAM;QACpB,GAAGqB,YAAAA;AACL,OAAA;AACF,KAAA;GACD,CAAA;AACH,CAAA;;AAEA;AACA;AACA;AACO,SAASC,eAAeA,CAACF,KAAK,EAAEG,WAAW,EAAE;EAClD,OAAO;AACL,IAAA,GAAGH,KAAK;AACRlB,IAAAA,IAAI,EAAE;MACJ,GAAGkB,KAAK,CAAClB,IAAI;MACb,GAAGqB,WAAAA;AACL,KAAA;GACD,CAAA;AACH;;AC9HA;AACA;AACA;AACO,SAASC,SAASA,CAACC,MAAM,EAAE;EAChC,OAAO;AACLC,IAAAA,OAAO,EAAE,OAAO;AAChBC,IAAAA,IAAI,EAAErC,IAAI,CAACC,GAAG,EAAE;AAChBkC,IAAAA,MAAM,EAAEA,MAAM,CAACG,GAAG,CAACR,KAAK,KAAK;MAC3BjB,EAAE,EAAEiB,KAAK,CAACjB,EAAE;MACZF,IAAI,EAAEmB,KAAK,CAACnB,IAAI;MAChBC,IAAI,EAAEkB,KAAK,CAAClB,IAAAA;AACd,KAAC,CAAC,CAAA;GACH,CAAA;AACH,CAAA;;AAEA;AACA;AACA;AACO,SAAS2B,WAAWA,CAACC,IAAI,EAAE;AAChC;AACA,EAAA,IAAI,CAACA,IAAI,IAAI,CAACA,IAAI,CAACL,MAAM,IAAI,CAACM,KAAK,CAACC,OAAO,CAACF,IAAI,CAACL,MAAM,CAAC,EAAE;AACxD,IAAA,OAAO,CAAC7B,gBAAgB,EAAE,CAAC,CAAA;AAC7B,GAAA;;AAEA;AACA,EAAA,IAAIkC,IAAI,CAACL,MAAM,CAACP,MAAM,KAAK,CAAC,EAAE;AAC5B,IAAA,OAAO,CAACtB,gBAAgB,EAAE,CAAC,CAAA;AAC7B,GAAA;;AAEA;AACA,EAAA,OAAOkC,IAAI,CAACL,MAAM,CAACG,GAAG,CAACR,KAAK,KAAK;IAC/BjB,EAAE,EAAEiB,KAAK,CAACjB,EAAE;IACZF,IAAI,EAAEmB,KAAK,CAACnB,IAAI;IAChBC,IAAI,EAAEkB,KAAK,CAAClB,IAAAA;AACd,GAAC,CAAC,CAAC,CAAA;AACL;;ACjCA;AACA;AACA;AACO,SAAS+B,SAASA,CAACC,WAAW,EAAE;EACrC,MAAM,CAACT,MAAM,EAAEU,SAAS,CAAC,GAAGC,cAAQ,CAAC,MAAM;AACzC,IAAA,IAAIF,WAAW,EAAE;MACf,OAAOL,WAAW,CAACK,WAAW,CAAC,CAAA;AACjC,KAAA;AACA,IAAA,OAAO,EAAE,CAAA;AACX,GAAC,CAAC,CAAA;EAEF,MAAM,CAACG,cAAc,EAAEC,iBAAiB,CAAC,GAAGF,cAAQ,CAAC,IAAI,CAAC,CAAA;;AAE1D;AACAG,EAAAA,eAAS,CAAC,MAAM;AACd,IAAA,IAAIL,WAAW,EAAE;AACfC,MAAAA,SAAS,CAACN,WAAW,CAACK,WAAW,CAAC,CAAC,CAAA;AACrC,KAAC,MAAM;MACLC,SAAS,CAAC,EAAE,CAAC,CAAA;AACf,KAAA;AACF,GAAC,EAAE,CAACD,WAAW,CAAC,CAAC,CAAA;;AAEjB;AACF;AACA;EACE,MAAMM,QAAQ,GAAGC,iBAAW,CAAC,CAACrB,KAAK,EAAEsB,KAAK,KAAK;IAC7CP,SAAS,CAACQ,IAAI,IAAI;AAChB,MAAA,MAAMC,SAAS,GAAG,CAAC,GAAGD,IAAI,CAAC,CAAA;MAC3BC,SAAS,CAACC,MAAM,CAACH,KAAK,EAAE,CAAC,EAAEtB,KAAK,CAAC,CAAA;AACjC,MAAA,OAAOwB,SAAS,CAAA;AAClB,KAAC,CAAC,CAAA;GACH,EAAE,EAAE,CAAC,CAAA;;AAEN;AACF;AACA;EACE,MAAME,WAAW,GAAGL,iBAAW,CAAC,CAACM,OAAO,EAAEC,OAAO,KAAK;IACpDb,SAAS,CAACQ,IAAI,IACZA,IAAI,CAACf,GAAG,CAACR,KAAK,IACZA,KAAK,CAACjB,EAAE,KAAK4C,OAAO,GAAGzB,eAAe,CAACF,KAAK,EAAE4B,OAAO,CAAC,GAAG5B,KAC3D,CACF,CAAC,CAAA;GACF,EAAE,EAAE,CAAC,CAAA;;AAEN;AACF;AACA;EACE,MAAM6B,gBAAgB,GAAGR,iBAAW,CAAC,CAACM,OAAO,EAAE1B,YAAY,KAAK;IAC9Dc,SAAS,CAACQ,IAAI,IACZA,IAAI,CAACf,GAAG,CAACR,KAAK,IACZA,KAAK,CAACjB,EAAE,KAAK4C,OAAO,GAAG5B,iBAAiB,CAACC,KAAK,EAAEC,YAAY,CAAC,GAAGD,KAClE,CACF,CAAC,CAAA;GACF,EAAE,EAAE,CAAC,CAAA;;AAEN;AACF;AACA;AACE,EAAA,MAAM8B,WAAW,GAAGT,iBAAW,CAAEM,OAAO,IAAK;IAC3CZ,SAAS,CAACQ,IAAI,IAAI;AAChB,MAAA,MAAMQ,QAAQ,GAAGR,IAAI,CAACS,MAAM,CAAChC,KAAK,IAAIA,KAAK,CAACjB,EAAE,KAAK4C,OAAO,CAAC,CAAA;AAC3D,MAAA,OAAOI,QAAQ,CAAA;AACjB,KAAC,CAAC,CAAA;GACH,EAAE,EAAE,CAAC,CAAA;;AAEN;AACF;AACA;EACE,MAAME,SAAS,GAAGZ,iBAAW,CAAC,CAACa,SAAS,EAAEC,OAAO,KAAK;IACpDpB,SAAS,CAACQ,IAAI,IAAI;AAChB,MAAA,MAAMC,SAAS,GAAG,CAAC,GAAGD,IAAI,CAAC,CAAA;MAC3B,MAAM,CAACa,UAAU,CAAC,GAAGZ,SAAS,CAACC,MAAM,CAACS,SAAS,EAAE,CAAC,CAAC,CAAA;MACnDV,SAAS,CAACC,MAAM,CAACU,OAAO,EAAE,CAAC,EAAEC,UAAU,CAAC,CAAA;AACxC,MAAA,OAAOZ,SAAS,CAAA;AAClB,KAAC,CAAC,CAAA;GACH,EAAE,EAAE,CAAC,CAAA;;AAEN;AACF;AACA;AACE,EAAA,MAAMa,OAAO,GAAGhB,iBAAW,CAAC,MAAM;IAChC,OAAOjB,SAAS,CAACC,MAAM,CAAC,CAAA;AAC1B,GAAC,EAAE,CAACA,MAAM,CAAC,CAAC,CAAA;;AAEZ;AACF;AACA;AACE,EAAA,MAAMiC,KAAK,GAAGjB,iBAAW,CAAC,MAAM;AAC9BN,IAAAA,SAAS,CAAC,CAACvC,gBAAgB,EAAE,CAAC,CAAC,CAAA;GAChC,EAAE,EAAE,CAAC,CAAA;EAEN,OAAO;IACL6B,MAAM;IACNY,cAAc;IACdC,iBAAiB;IACjBE,QAAQ;IACRM,WAAW;IACXG,gBAAgB;IAChBC,WAAW;IACXG,SAAS;IACTI,OAAO;AACPC,IAAAA,KAAAA;GACD,CAAA;AACH;;ACzGO,SAASC,aAAaA,CAAC;EAAEC,OAAO;EAAEC,QAAQ;EAAEC,KAAK;EAAEC,MAAM;AAAEC,EAAAA,QAAAA;AAAS,CAAC,EAAE;EAC5E,oBACEC,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACEN,IAAAA,OAAO,EAAEA,OAAQ;AACjBE,IAAAA,KAAK,EAAEA,KAAM;AACbE,IAAAA,QAAQ,EAAEA,QAAS;AACnBG,IAAAA,SAAS,EAAE,CAAkBJ,eAAAA,EAAAA,MAAM,GAAG,QAAQ,GAAG,EAAE,CAAG,CAAA;AACtD9D,IAAAA,IAAI,EAAC,QAAA;AAAQ,GAAA,EAEZ4D,QACK,CAAC,CAAA;AAEb;;ACTA,MAAMO,UAAU,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;AAE5C,SAASC,OAAOA,CAAC;EACtBC,YAAY;EACZC,kBAAkB;EAClBC,aAAa;EACbC,eAAe;AACfC,EAAAA,MAAAA;AACF,CAAC,EAAE;EACD,MAAM,CAACC,kBAAkB,EAAEC,qBAAqB,CAAC,GAAGxC,cAAQ,CAAC,KAAK,CAAC,CAAA;EACnE,MAAM,CAACyC,iBAAiB,EAAEC,oBAAoB,CAAC,GAAG1C,cAAQ,CAAC,KAAK,CAAC,CAAA;EACjE,MAAM,CAAC2C,iBAAiB,EAAEC,oBAAoB,CAAC,GAAG5C,cAAQ,CAAC,KAAK,CAAC,CAAA;EACjE,MAAM,CAAC6C,gBAAgB,EAAEC,mBAAmB,CAAC,GAAG9C,cAAQ,CAAC,KAAK,CAAC,CAAA;AAE/D,EAAA,MAAM+C,eAAe,GAAG,CAAC,CAACb,YAAY,CAAA;EACtC,MAAMc,WAAW,GAAGd,YAAY,IAAIF,UAAU,CAACiB,QAAQ,CAACf,YAAY,CAACrE,IAAI,CAAC,CAAA;EAC1E,MAAMD,MAAM,GAAGsE,YAAY,EAAEpE,IAAI,EAAEF,MAAM,IAAI,EAAE,CAAA;EAE/C,MAAMsF,iBAAiB,GAAItC,OAAO,IAAK;IACrC,IAAI,CAACmC,eAAe,EAAE,OAAA;IACtBZ,kBAAkB,CAACvB,OAAO,CAAC,CAAA;GAC5B,CAAA;EAED,MAAMuC,iBAAiB,GAAI1G,KAAK,IAAK;AACnCyG,IAAAA,iBAAiB,CAAC;AAAEzG,MAAAA,KAAAA;AAAM,KAAC,CAAC,CAAA;GAC7B,CAAA;EAED,MAAM2G,oBAAoB,GAAIpH,QAAQ,IAAK;AACzCkH,IAAAA,iBAAiB,CAAC;AAAElH,MAAAA,QAAAA;AAAS,KAAC,CAAC,CAAA;IAC/BwG,qBAAqB,CAAC,KAAK,CAAC,CAAA;GAC7B,CAAA;EAED,MAAMa,uBAAuB,GAAIC,WAAW,IAAK;AAC/CJ,IAAAA,iBAAiB,CAAC;MAAEI,WAAW;AAAEC,MAAAA,WAAW,EAAE,OAAA;AAAQ,KAAC,CAAC,CAAA;GACzD,CAAA;EAED,MAAMC,mBAAmB,GAAIC,eAAe,IAAK;AAC/CP,IAAAA,iBAAiB,CAAC;AAAEO,MAAAA,eAAAA;AAAgB,KAAC,CAAC,CAAA;IACtCf,oBAAoB,CAAC,KAAK,CAAC,CAAA;GAC5B,CAAA;EAED,MAAMgB,gBAAgB,GAAIC,KAAK,IAAK;AAClCT,IAAAA,iBAAiB,CAAC;AAChB7G,MAAAA,UAAU,EAAEsH,KAAK;AACjBnH,MAAAA,YAAY,EAAEmH,KAAK;AACnBrH,MAAAA,aAAa,EAAEqH,KAAK;AACpBpH,MAAAA,WAAW,EAAEoH,KAAAA;AACf,KAAC,CAAC,CAAA;GACH,CAAA;EAED,MAAMC,eAAe,GAAID,KAAK,IAAK;AACjCT,IAAAA,iBAAiB,CAAC;AAChBjH,MAAAA,SAAS,EAAE0H,KAAK;AAChBvH,MAAAA,WAAW,EAAEuH,KAAK;AAClBzH,MAAAA,YAAY,EAAEyH,KAAK;AACnBxH,MAAAA,UAAU,EAAEwH,KAAAA;AACd,KAAC,CAAC,CAAA;GACH,CAAA;EAED,MAAME,OAAO,GAAIC,GAAG,IAAKC,QAAQ,CAACD,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;EAE/C,oBACEjC,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,SAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,kBAAA;GAEbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,iBAAA;AAAiB,GAAA,eAC9BF,KAAA,CAAAC,aAAA,CAACP,aAAa,EAAA;AAACC,IAAAA,OAAO,EAAEY,aAAc;IAACR,QAAQ,EAAE,CAACmB,eAAgB;AAACrB,IAAAA,KAAK,EAAC,SAAA;AAAS,GAAA,EAAC,QAEpE,CAAC,eAChBG,KAAA,CAAAC,aAAA,CAACP,aAAa,EAAA;AAACC,IAAAA,OAAO,EAAEa,eAAgB;IAACT,QAAQ,EAAE,CAACmB,eAAgB;AAACrB,IAAAA,KAAK,EAAC,WAAA;AAAW,GAAA,EAAC,QAExE,CACZ,CAAC,eAENG,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,iBAAA;AAAiB,GAAE,CAAC,eAGnCF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,iBAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AAAOC,IAAAA,SAAS,EAAC,eAAA;AAAe,GAAA,EAAC,QAAa,CAAC,eAC/CF,KAAA,CAAAC,aAAA,CAACP,aAAa,EAAA;AACZC,IAAAA,OAAO,EAAEA,MAAM0B,iBAAiB,CAAC;AAAEc,MAAAA,SAAS,EAAE,MAAA;AAAO,KAAC,CAAE;IACxDpC,QAAQ,EAAE,CAACoB,WAAY;IACvBrB,MAAM,EAAEqB,WAAW,IAAI,CAACpF,MAAM,CAACoG,SAAS,IAAI,MAAM,MAAM,MAAO;AAC/DtC,IAAAA,KAAK,EAAC,YAAA;GAENG,eAAAA,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMC,IAAAA,SAAS,EAAC,uBAAA;AAAuB,GAAE,CAC5B,CAAC,eAChBF,KAAA,CAAAC,aAAA,CAACP,aAAa,EAAA;AACZC,IAAAA,OAAO,EAAEA,MAAM0B,iBAAiB,CAAC;AAAEc,MAAAA,SAAS,EAAE,QAAA;AAAS,KAAC,CAAE;IAC1DpC,QAAQ,EAAE,CAACoB,WAAY;AACvBrB,IAAAA,MAAM,EAAEqB,WAAW,IAAIpF,MAAM,CAACoG,SAAS,KAAK,QAAS;AACrDtC,IAAAA,KAAK,EAAC,cAAA;GAENG,eAAAA,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMC,IAAAA,SAAS,EAAC,yBAAA;AAAyB,GAAE,CAC9B,CAAC,eAChBF,KAAA,CAAAC,aAAA,CAACP,aAAa,EAAA;AACZC,IAAAA,OAAO,EAAEA,MAAM0B,iBAAiB,CAAC;AAAEc,MAAAA,SAAS,EAAE,OAAA;AAAQ,KAAC,CAAE;IACzDpC,QAAQ,EAAE,CAACoB,WAAY;AACvBrB,IAAAA,MAAM,EAAEqB,WAAW,IAAIpF,MAAM,CAACoG,SAAS,KAAK,OAAQ;AACpDtC,IAAAA,KAAK,EAAC,aAAA;GAENG,eAAAA,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMC,IAAAA,SAAS,EAAC,wBAAA;AAAwB,GAAE,CAC7B,CACZ,CAAC,eAENF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,iBAAA;AAAiB,GAAE,CAAC,eAGnCF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,iBAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AAAOC,IAAAA,SAAS,EAAC,eAAA;AAAe,GAAA,EAAC,YAAiB,CAAC,eACnDF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,kBAAA;AAAkB,GAAA,eAC/BF,KAAA,CAAAC,aAAA,CAACP,aAAa,EAAA;AACZC,IAAAA,OAAO,EAAEA,MAAMgB,qBAAqB,CAAC,CAACD,kBAAkB,CAAE;IAC1DX,QAAQ,EAAE,CAACoB,WAAY;AACvBtB,IAAAA,KAAK,EAAC,WAAA;GAEL9D,EAAAA,MAAM,CAAC5B,QAAQ,IAAI,MACP,CAAC,EACfuG,kBAAkB,iBACjBV,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,wCAAA;GACZhF,EAAAA,iBAAiB,CAACyC,GAAG,CAACyE,IAAI,iBACzBpC,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACEoC,IAAAA,GAAG,EAAED,IAAK;AACVlC,IAAAA,SAAS,EAAC,kBAAkB;AAC5BP,IAAAA,OAAO,EAAEA,MAAM4B,oBAAoB,CAACa,IAAI,CAAA;GAEvCA,EAAAA,IACK,CACT,CACE,CAEJ,CACF,CAAC,eAENpC,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,iBAAA;AAAiB,GAAE,CAAC,eAGnCF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,iBAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AAAOC,IAAAA,SAAS,EAAC,eAAA;AAAe,GAAA,EAAC,aAAkB,CAAC,eACpDF,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AACEjE,IAAAA,IAAI,EAAC,OAAO;AACZkE,IAAAA,SAAS,EAAC,sBAAsB;AAChC4B,IAAAA,KAAK,EAAE/F,MAAM,CAACnB,KAAK,IAAI,SAAU;IACjC0H,QAAQ,EAAEC,CAAC,IAAIjB,iBAAiB,CAACiB,CAAC,CAACC,MAAM,CAACV,KAAK,CAAE;IACjD/B,QAAQ,EAAE,CAACoB,WAAY;AACvBtB,IAAAA,KAAK,EAAC,YAAA;AAAY,GACnB,CACE,CAAC,eAENG,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,iBAAA;AAAiB,GAAE,CAAC,eAGnCF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,iBAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AAAOC,IAAAA,SAAS,EAAC,eAAA;AAAe,GAAA,EAAC,UAAe,CAAC,eACjDF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,kBAAA;AAAkB,GAAA,eAC/BF,KAAA,CAAAC,aAAA,CAACP,aAAa,EAAA;AACZC,IAAAA,OAAO,EAAEA,MAAMoB,oBAAoB,CAAC,CAACD,iBAAiB,CAAE;IACxDf,QAAQ,EAAE,CAACmB,eAAgB;AAC3BrB,IAAAA,KAAK,EAAC,qBAAA;GAEL9D,EAAAA,MAAM,CAACvB,UAAU,IAAI,KACT,CAAC,EACfsG,iBAAiB,iBAChBd,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,sCAAA;GACZjH,EAAAA,eAAe,CAAC0E,GAAG,CAAC8E,MAAM,iBACzBzC,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACEoC,IAAAA,GAAG,EAAEI,MAAO;AACZvC,IAAAA,SAAS,EAAC,gBAAgB;IAC1BP,OAAO,EAAEA,MAAM;MAAEkC,gBAAgB,CAACY,MAAM,CAAC,CAAA;MAAE1B,oBAAoB,CAAC,KAAK,CAAC,CAAA;AAAE,KAAA;GAEvE0B,EAAAA,MACK,CACT,CACE,CAEJ,CACF,CAAC,eAENzC,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,iBAAA;AAAiB,GAAE,CAAC,eAGnCF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,iBAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AAAOC,IAAAA,SAAS,EAAC,eAAA;AAAe,GAAA,EAAC,SAAc,CAAC,eAChDF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,kBAAA;AAAkB,GAAA,eAC/BF,KAAA,CAAAC,aAAA,CAACP,aAAa,EAAA;AACZC,IAAAA,OAAO,EAAEA,MAAMsB,mBAAmB,CAAC,CAACD,gBAAgB,CAAE;IACtDjB,QAAQ,EAAE,CAACmB,eAAgB;AAC3BrB,IAAAA,KAAK,EAAC,oBAAA;GAEL9D,EAAAA,MAAM,CAAC3B,SAAS,IAAI,KACR,CAAC,EACf4G,gBAAgB,iBACfhB,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,qCAAA;GACZhH,EAAAA,cAAc,CAACyE,GAAG,CAAC8E,MAAM,iBACxBzC,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACEoC,IAAAA,GAAG,EAAEI,MAAO;AACZvC,IAAAA,SAAS,EAAC,eAAe;IACzBP,OAAO,EAAEA,MAAM;MAAEoC,eAAe,CAACU,MAAM,CAAC,CAAA;MAAExB,mBAAmB,CAAC,KAAK,CAAC,CAAA;AAAE,KAAA;GAErEwB,EAAAA,MACK,CACT,CACE,CAEJ,CACF,CAAC,eAENzC,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,iBAAA;AAAiB,GAAE,CAAC,eAGnCF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,iBAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AAAOC,IAAAA,SAAS,EAAC,eAAA;AAAe,GAAA,EAAC,eAAoB,CAAC,eACtDF,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AACEjE,IAAAA,IAAI,EAAC,OAAO;AACZkE,IAAAA,SAAS,EAAC,sBAAsB;AAChC4B,IAAAA,KAAK,EAAE/F,MAAM,CAAC0F,WAAW,IAAI,SAAU;IACvCa,QAAQ,EAAEC,CAAC,IAAIf,uBAAuB,CAACe,CAAC,CAACC,MAAM,CAACV,KAAK,CAAE;IACvD/B,QAAQ,EAAE,CAACmB,eAAgB;AAC3BrB,IAAAA,KAAK,EAAC,cAAA;AAAc,GACrB,CACE,CAAC,eAENG,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,iBAAA;AAAiB,GAAE,CAAC,eAGnCF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,iBAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AAAOC,IAAAA,SAAS,EAAC,eAAA;AAAe,GAAA,EAAC,eAAoB,CAAC,eACtDF,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AACEjE,IAAAA,IAAI,EAAC,QAAQ;AACbkE,IAAAA,SAAS,EAAC,eAAe;AACzBwC,IAAAA,GAAG,EAAC,GAAG;AACPZ,IAAAA,KAAK,EAAEE,OAAO,CAACjG,MAAM,CAAC4G,WAAW,CAAE;IACnC5C,QAAQ,EAAE,CAACmB,eAAgB;AAC3BoB,IAAAA,QAAQ,EAAGC,CAAC,IAAKlB,iBAAiB,CAAC;AAAEsB,MAAAA,WAAW,EAAE,CAAGJ,EAAAA,CAAC,CAACC,MAAM,CAACV,KAAK,CAAI,EAAA,CAAA;AAAEJ,MAAAA,WAAW,EAAE,OAAA;AAAQ,KAAC,CAAE;AACjG7B,IAAAA,KAAK,EAAC,cAAA;AAAc,GACrB,CACE,CAAC,eAENG,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,iBAAA;AAAiB,GAAE,CAAC,eAGnCF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,iBAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AAAOC,IAAAA,SAAS,EAAC,eAAA;AAAe,GAAA,EAAC,mBAAwB,CAAC,eAC1DF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,kBAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACEC,IAAAA,SAAS,EAAC,sBAAsB;AAChC5D,IAAAA,KAAK,EAAE;MAAEsF,eAAe,EAAEV,eAAe,GAAInF,MAAM,CAAC6F,eAAe,IAAI,SAAS,GAAI,SAAA;KAAY;IAChGjC,OAAO,EAAEA,MAAMuB,eAAe,IAAIL,oBAAoB,CAAC,CAACD,iBAAiB,CAAE;IAC3Eb,QAAQ,EAAE,CAACmB,eAAgB;AAC3BrB,IAAAA,KAAK,EAAC,kBAAA;AAAkB,GACzB,CAAC,EACDe,iBAAiB,iBAChBZ,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,oCAAA;GACZ/E,EAAAA,aAAa,CAACwC,GAAG,CAAC/C,KAAK,iBACtBoF,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACEoC,IAAAA,GAAG,EAAEzH,KAAM;AACXsF,IAAAA,SAAS,EAAC,cAAc;AACxB5D,IAAAA,KAAK,EAAE;AAAEsF,MAAAA,eAAe,EAAEhH,KAAAA;KAAQ;AAClC+E,IAAAA,OAAO,EAAEA,MAAMgC,mBAAmB,CAAC/G,KAAK,CAAE;AAC1CiF,IAAAA,KAAK,EAAEjF,KAAAA;GACR,CACF,CACE,CAEJ,CACF,CACF,CAAC,eAENoF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,iBAAA;AAAiB,GAAA,eAC9BF,KAAA,CAAAC,aAAA,CAACP,aAAa,EAAA;AAACC,IAAAA,OAAO,EAAEc,MAAO;AAACZ,IAAAA,KAAK,EAAC,MAAA;GAAO,EAAA,mBAE9B,CACZ,CACF,CAAC,CAAA;AAEV;;ACrRO,SAAS+C,cAAcA,CAAC;EAAEzF,KAAK;EAAEmF,QAAQ;EAAEO,OAAO;EAAEC,SAAS;EAAEC,SAAS;AAAEC,EAAAA,QAAQ,GAAG,IAAI;AAAEC,EAAAA,WAAAA;AAAY,CAAC,EAAE;AAC/G,EAAA,MAAMC,SAAS,GAAGC,YAAM,CAAC,IAAI,CAAC,CAAA;AAC9B,EAAA,MAAMC,aAAa,GAAGD,YAAM,CAAC,KAAK,CAAC,CAAA;AAEnC7E,EAAAA,eAAS,CAAC,MAAM;AACd,IAAA,IAAI0E,QAAQ,IAAID,SAAS,IAAIG,SAAS,CAACG,OAAO,EAAE;AAC9CH,MAAAA,SAAS,CAACG,OAAO,CAACC,KAAK,EAAE,CAAA;AAC3B,KAAA;AACF,GAAC,EAAE,CAACP,SAAS,EAAEC,QAAQ,CAAC,CAAC,CAAA;AAEzB1E,EAAAA,eAAS,CAAC,MAAM;AACd;IACA,IAAI4E,SAAS,CAACG,OAAO,IAAI,CAACD,aAAa,CAACC,OAAO,EAAE;MAC/C,IAAIH,SAAS,CAACG,OAAO,CAACE,SAAS,KAAKpG,KAAK,CAAClB,IAAI,CAACJ,IAAI,EAAE;QACnDqH,SAAS,CAACG,OAAO,CAACE,SAAS,GAAGpG,KAAK,CAAClB,IAAI,CAACJ,IAAI,IAAI,EAAE,CAAA;AACrD,OAAA;AACF,KAAA;IACAuH,aAAa,CAACC,OAAO,GAAG,KAAK,CAAA;GAC9B,EAAE,CAAClG,KAAK,CAAClB,IAAI,CAACJ,IAAI,CAAC,CAAC,CAAA;EAErB,MAAM2H,WAAW,GAAIjB,CAAC,IAAK;IACzBa,aAAa,CAACC,OAAO,GAAG,IAAI,CAAA;AAC5Bf,IAAAA,QAAQ,CAAC;AACPzG,MAAAA,IAAI,EAAE0G,CAAC,CAACC,MAAM,CAACe,SAAAA;AACjB,KAAC,CAAC,CAAA;GACH,CAAA;EAED,MAAME,aAAa,GAAIlB,CAAC,IAAK;AAC3B,IAAA,IAAIO,SAAS,EAAE;MACbA,SAAS,CAACP,CAAC,CAAC,CAAA;AACd,KAAA;GACD,CAAA;EAED,IAAI,CAACS,QAAQ,EAAE;IACb,oBACEhD,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AACEC,MAAAA,SAAS,EAAC,iBAAiB;AAC3B5D,MAAAA,KAAK,EAAEa,KAAK,CAAClB,IAAI,CAACF,MAAO;AACzB2H,MAAAA,uBAAuB,EAAE;AAAEC,QAAAA,MAAM,EAAExG,KAAK,CAAClB,IAAI,CAACJ,IAAI,IAAI,EAAA;AAAG,OAAA;AAAE,KAC5D,CAAC,CAAA;AAEN,GAAA;EAEA,oBACEmE,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AACE2D,IAAAA,GAAG,EAAEV,SAAU;AACfhD,IAAAA,SAAS,EAAC,iBAAiB;IAC3B2D,eAAe,EAAA,IAAA;IACfC,8BAA8B,EAAA,IAAA;AAC9BC,IAAAA,OAAO,EAAEP,WAAY;AACrBX,IAAAA,OAAO,EAAEA,OAAQ;AACjBC,IAAAA,SAAS,EAAEW,aAAc;IACzB,kBAAkBR,EAAAA,WAAW,IAAI,iBAAkB;AACnD3G,IAAAA,KAAK,EAAEa,KAAK,CAAClB,IAAI,CAACF,MAAAA;AAAO,GAC1B,CAAC,CAAA;AAEN;;ACxDO,SAASiI,YAAYA,CAAC;EAAE7G,KAAK;EAAEmF,QAAQ;EAAEO,OAAO;EAAEC,SAAS;EAAEC,SAAS;AAAEC,EAAAA,QAAQ,GAAG,IAAA;AAAK,CAAC,EAAE;AAChG,EAAA,MAAME,SAAS,GAAGC,YAAM,CAAC,IAAI,CAAC,CAAA;AAC9B,EAAA,MAAMC,aAAa,GAAGD,YAAM,CAAC,KAAK,CAAC,CAAA;EACnC,MAAMc,UAAU,GAAG9G,KAAK,CAAClB,IAAI,CAACH,OAAO,IAAI,IAAI,CAAA;AAE7CwC,EAAAA,eAAS,CAAC,MAAM;AACd,IAAA,IAAI0E,QAAQ,IAAID,SAAS,IAAIG,SAAS,CAACG,OAAO,EAAE;AAC9CH,MAAAA,SAAS,CAACG,OAAO,CAACC,KAAK,EAAE,CAAA;AAC3B,KAAA;AACF,GAAC,EAAE,CAACP,SAAS,EAAEC,QAAQ,CAAC,CAAC,CAAA;AAEzB1E,EAAAA,eAAS,CAAC,MAAM;IACd,IAAI4E,SAAS,CAACG,OAAO,IAAI,CAACD,aAAa,CAACC,OAAO,EAAE;MAC/C,IAAIH,SAAS,CAACG,OAAO,CAACE,SAAS,KAAKpG,KAAK,CAAClB,IAAI,CAACJ,IAAI,EAAE;QACnDqH,SAAS,CAACG,OAAO,CAACE,SAAS,GAAGpG,KAAK,CAAClB,IAAI,CAACJ,IAAI,IAAI,EAAE,CAAA;AACrD,OAAA;AACF,KAAA;IACAuH,aAAa,CAACC,OAAO,GAAG,KAAK,CAAA;GAC9B,EAAE,CAAClG,KAAK,CAAClB,IAAI,CAACJ,IAAI,CAAC,CAAC,CAAA;EAErB,MAAM2H,WAAW,GAAIjB,CAAC,IAAK;IACzBa,aAAa,CAACC,OAAO,GAAG,IAAI,CAAA;AAC5Bf,IAAAA,QAAQ,CAAC;AACPzG,MAAAA,IAAI,EAAE0G,CAAC,CAACC,MAAM,CAACe,SAAAA;AACjB,KAAC,CAAC,CAAA;GACH,CAAA;EAED,MAAME,aAAa,GAAIlB,CAAC,IAAK;AAC3B,IAAA,IAAIO,SAAS,EAAE;MACbA,SAAS,CAACP,CAAC,CAAC,CAAA;AACd,KAAA;GACD,CAAA;EAED,IAAI,CAACS,QAAQ,EAAE;AACb,IAAA,oBACEhD,KAAA,CAAAC,aAAA,CAACgE,UAAU,EAAA;AACT/D,MAAAA,SAAS,EAAC,eAAe;AACzB5D,MAAAA,KAAK,EAAEa,KAAK,CAAClB,IAAI,CAACF,MAAO;AACzB2H,MAAAA,uBAAuB,EAAE;AAAEC,QAAAA,MAAM,EAAExG,KAAK,CAAClB,IAAI,CAACJ,IAAI,IAAI,EAAA;AAAG,OAAA;AAAE,KAC5D,CAAC,CAAA;AAEN,GAAA;AAEA,EAAA,oBACEmE,KAAA,CAAAC,aAAA,CAACgE,UAAU,EAAA;AACTL,IAAAA,GAAG,EAAEV,SAAU;AACfhD,IAAAA,SAAS,EAAC,eAAe;IACzB2D,eAAe,EAAA,IAAA;IACfC,8BAA8B,EAAA,IAAA;AAC9BC,IAAAA,OAAO,EAAEP,WAAY;AACrBX,IAAAA,OAAO,EAAEA,OAAQ;AACjBC,IAAAA,SAAS,EAAEW,aAAc;AACzB,IAAA,kBAAA,EAAiB,SAAS;AAC1BnH,IAAAA,KAAK,EAAEa,KAAK,CAAClB,IAAI,CAACF,MAAAA;AAAO,GAC1B,CAAC,CAAA;AAEN;;ACxDO,SAASmI,SAASA,CAAC;EAAE/G,KAAK;EAAEmF,QAAQ;EAAEO,OAAO;AAAEG,EAAAA,QAAQ,GAAG,IAAA;AAAK,CAAC,EAAE;EACvE,MAAM,CAACmB,YAAY,EAAEC,eAAe,CAAC,GAAGjG,cAAQ,CAAC,IAAI,CAAC,CAAA;AACpD;AACAG,EAAAA,eAAS,CAAC,MAAM;IACd,IAAI,CAAC0E,QAAQ,EAAE,OAAA;IACf,IAAI,OAAOH,OAAO,KAAK,UAAU,IAAIsB,YAAY,KAAK,IAAI,EAAE;AAC1D;AACAE,MAAAA,UAAU,CAAC,MAAM;QACf,IAAIC,OAAO,CAACjB,OAAO,EAAE;UACnB,MAAMkB,KAAK,GAAGD,OAAO,CAACjB,OAAO,CAACmB,aAAa,CAAC,kCAAkC,CAAC,CAAA;AAC/E,UAAA,IAAID,KAAK,EAAE;YACTA,KAAK,CAACjB,KAAK,EAAE,CAAA;YACbc,eAAe,CAAC,CAAC,CAAC,CAAA;AACpB,WAAA;AACF,SAAA;OACD,EAAE,CAAC,CAAC,CAAA;AACP,KAAA;GACD,EAAE,CAACpB,QAAQ,EAAEH,OAAO,EAAEsB,YAAY,CAAC,CAAC,CAAA;EACvC,MAAMM,OAAO,GAAGtH,KAAK,CAAClB,IAAI,CAACH,OAAO,IAAI,IAAI,CAAA;AAC1C,EAAA,MAAMwI,OAAO,GAAGnB,YAAM,CAAC,IAAI,CAAC,CAAA;EAE5B,MAAMuB,gBAAgB,GAAGA,CAACjG,KAAK,EAAEqD,KAAK,EAAE6C,EAAE,KAAK;AAC7C;IACA,IAAIC,WAAW,GAAG,CAAC,CAAA;AACnB,IAAA,IAAID,EAAE,IAAIA,EAAE,CAACE,iBAAiB,EAAE;AAC9B,MAAA,MAAMC,SAAS,GAAGC,MAAM,CAACC,YAAY,EAAE,CAAA;AACvC,MAAA,IAAIF,SAAS,CAACG,UAAU,GAAG,CAAC,EAAE;AAC5B,QAAA,MAAMC,KAAK,GAAGJ,SAAS,CAACK,UAAU,CAAC,CAAC,CAAC,CAAA;AACrC,QAAA,MAAMC,aAAa,GAAGF,KAAK,CAACG,UAAU,EAAE,CAAA;AACxCD,QAAAA,aAAa,CAACE,kBAAkB,CAACX,EAAE,CAAC,CAAA;QACpCS,aAAa,CAACG,MAAM,CAACL,KAAK,CAACM,YAAY,EAAEN,KAAK,CAACO,SAAS,CAAC,CAAA;AACzDb,QAAAA,WAAW,GAAGQ,aAAa,CAAC3J,QAAQ,EAAE,CAACwB,MAAM,CAAA;AAC/C,OAAA;AACF,KAAA;IACA,MAAMyI,QAAQ,GAAG,CAAC,GAAGvI,KAAK,CAAClB,IAAI,CAACM,KAAK,CAAC,CAAA;AACtCmJ,IAAAA,QAAQ,CAACjH,KAAK,CAAC,GAAGqD,KAAK,CAAA;AACvBQ,IAAAA,QAAQ,CAAC;AAAE/F,MAAAA,KAAK,EAAEmJ,QAAAA;AAAS,KAAC,CAAC,CAAA;AAC7B;AACA,IAAA,IAAIf,EAAE,IAAIA,EAAE,CAACE,iBAAiB,EAAE;AAC9BR,MAAAA,UAAU,CAAC,MAAM;QACf,IAAIsB,IAAI,GAAGhB,EAAE,CAAA;QACb,IAAIiB,SAAS,GAAG,CAAC;AAAEC,UAAAA,KAAK,GAAG,KAAK;AAAEC,UAAAA,GAAG,GAAGf,MAAM,CAACC,YAAY,EAAE,CAAA;QAC7D,SAASe,QAAQA,CAACJ,IAAI,EAAE;AACtB,UAAA,IAAIE,KAAK,EAAE,OAAA;AACX,UAAA,IAAIF,IAAI,CAACK,QAAQ,KAAK,CAAC,EAAE;AAAE;AACzB,YAAA,MAAMC,aAAa,GAAGL,SAAS,GAAGD,IAAI,CAAC1I,MAAM,CAAA;YAC7C,IAAI,CAAC4I,KAAK,IAAIjB,WAAW,IAAIgB,SAAS,IAAIhB,WAAW,IAAIqB,aAAa,EAAE;AACtE,cAAA,MAAMf,KAAK,GAAGgB,QAAQ,CAACC,WAAW,EAAE,CAAA;cACpCjB,KAAK,CAACkB,QAAQ,CAACT,IAAI,EAAEf,WAAW,GAAGgB,SAAS,CAAC,CAAA;AAC7CV,cAAAA,KAAK,CAACmB,QAAQ,CAAC,IAAI,CAAC,CAAA;cACpBP,GAAG,CAACQ,eAAe,EAAE,CAAA;AACrBR,cAAAA,GAAG,CAACS,QAAQ,CAACrB,KAAK,CAAC,CAAA;AACnBW,cAAAA,KAAK,GAAG,IAAI,CAAA;AACd,aAAA;AACAD,YAAAA,SAAS,GAAGK,aAAa,CAAA;AAC3B,WAAC,MAAM;AACL,YAAA,KAAK,IAAIO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGb,IAAI,CAACc,UAAU,CAACxJ,MAAM,EAAEuJ,CAAC,EAAE,EAAE;AAC/CT,cAAAA,QAAQ,CAACJ,IAAI,CAACc,UAAU,CAACD,CAAC,CAAC,CAAC,CAAA;AAC5B,cAAA,IAAIX,KAAK,EAAE,MAAA;AACb,aAAA;AACF,WAAA;AACF,SAAA;QACAE,QAAQ,CAACJ,IAAI,CAAC,CAAA;OACf,EAAE,CAAC,CAAC,CAAA;AACP,KAAA;GACD,CAAA;AAED,EAAA,MAAMe,iBAAiB,GAAGA,CAACnE,CAAC,EAAE9D,KAAK,KAAK;AACtC,IAAA,IAAI8D,CAAC,CAACF,GAAG,KAAK,OAAO,EAAE;MACrBE,CAAC,CAACoE,cAAc,EAAE,CAAA;MAClB,MAAMjB,QAAQ,GAAG,CAAC,GAAGvI,KAAK,CAAClB,IAAI,CAACM,KAAK,CAAC,CAAA;MACtCmJ,QAAQ,CAAC9G,MAAM,CAACH,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;AACjC6D,MAAAA,QAAQ,CAAC;AAAE/F,QAAAA,KAAK,EAAEmJ,QAAAA;AAAS,OAAC,CAAC,CAAA;AAC7BrB,MAAAA,UAAU,CAAC,MAAM;AACfD,QAAAA,eAAe,CAAC3F,KAAK,GAAG,CAAC,CAAC,CAAA;AAC1B;QACA,IAAI6F,OAAO,CAACjB,OAAO,EAAE;AACnB,UAAA,MAAMuD,IAAI,GAAGtC,OAAO,CAACjB,OAAO,CAACmB,aAAa,CACxC,CAAgC/F,6BAAAA,EAAAA,KAAK,GAAG,CAAC,IAC3C,CAAC,CAAA;AACD,UAAA,IAAImI,IAAI,EAAE;YACRA,IAAI,CAACtD,KAAK,EAAE,CAAA;AACd,WAAA;AACF,SAAA;OACD,EAAE,CAAC,CAAC,CAAA;AACP,KAAC,MAAM,IAAIf,CAAC,CAACF,GAAG,KAAK,WAAW,IAAIlF,KAAK,CAAClB,IAAI,CAACM,KAAK,CAACkC,KAAK,CAAC,KAAK,EAAE,EAAE;MAClE8D,CAAC,CAACoE,cAAc,EAAE,CAAA;MAClB,IAAIxJ,KAAK,CAAClB,IAAI,CAACM,KAAK,CAACU,MAAM,GAAG,CAAC,EAAE;AAC/B,QAAA,MAAMyI,QAAQ,GAAGvI,KAAK,CAAClB,IAAI,CAACM,KAAK,CAAC4C,MAAM,CAAC,CAAC0H,CAAC,EAAEL,CAAC,KAAKA,CAAC,KAAK/H,KAAK,CAAC,CAAA;AAC/D6D,QAAAA,QAAQ,CAAC;AAAE/F,UAAAA,KAAK,EAAEmJ,QAAAA;AAAS,SAAC,CAAC,CAAA;QAC7BtB,eAAe,CAAC3F,KAAK,GAAG,CAAC,GAAGA,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;AAC5C,OAAA;AACF,KAAA;GACD,CAAA;EAED,IAAI,CAACuE,QAAQ,EAAE;AACb,IAAA,oBACEhD,KAAA,CAAAC,aAAA,CAACwE,OAAO,EAAA;AAACvE,MAAAA,SAAS,EAAC,YAAY;AAAC5D,MAAAA,KAAK,EAAEa,KAAK,CAAClB,IAAI,CAACF,MAAAA;AAAO,KAAA,EACtDoB,KAAK,CAAClB,IAAI,CAACM,KAAK,CAACoB,GAAG,CAAC,CAACmJ,IAAI,EAAErI,KAAK,kBAChCuB,KAAA,CAAAC,aAAA,CAAA,IAAA,EAAA;AAAIoC,MAAAA,GAAG,EAAE5D,KAAM;AAACyB,MAAAA,SAAS,EAAC,WAAA;KACxBF,eAAAA,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMyD,MAAAA,uBAAuB,EAAE;AAAEC,QAAAA,MAAM,EAAEmD,IAAAA;AAAK,OAAA;KAAI,CAChD,CACL,CACM,CAAC,CAAA;AAEd,GAAA;AAEA,EAAA,oBACE9G,KAAA,CAAAC,aAAA,CAACwE,OAAO,EAAA;AACNvE,IAAAA,SAAS,EAAC,YAAY;AACtB5D,IAAAA,KAAK,EAAEa,KAAK,CAAClB,IAAI,CAACF,MAAO;AACzB4D,IAAAA,OAAO,EAAEkD,OAAQ;AACjBe,IAAAA,GAAG,EAAEU,OAAAA;AAAQ,GAAA,EAEZnH,KAAK,CAAClB,IAAI,CAACM,KAAK,CAACoB,GAAG,CAAC,CAACmJ,IAAI,EAAErI,KAAK,kBAChCuB,KAAA,CAAAC,aAAA,CAAA,IAAA,EAAA;AAAIoC,IAAAA,GAAG,EAAE5D,KAAM;AAACyB,IAAAA,SAAS,EAAC,WAAA;GACxBF,eAAAA,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;IACE4D,eAAe,EAAA,IAAA;IACfC,8BAA8B,EAAA,IAAA;AAC9B,IAAA,UAAA,EAAUrF,KAAM;AAChBsF,IAAAA,OAAO,EAAGxB,CAAC,IAAKmC,gBAAgB,CAACjG,KAAK,EAAE8D,CAAC,CAACC,MAAM,CAACuE,WAAW,EAAExE,CAAC,CAACyE,aAAa,CAAE;IAC/ElE,SAAS,EAAGP,CAAC,IAAKmE,iBAAiB,CAACnE,CAAC,EAAE9D,KAAK,CAAE;AAC9CoE,IAAAA,OAAO,EAAEA,MAAMuB,eAAe,CAAC3F,KAAK,CAAE;AACtCiF,IAAAA,uBAAuB,EAAE;AAAEC,MAAAA,MAAM,EAAEmD,IAAAA;KAAO;AAC1C5G,IAAAA,SAAS,EAAC,mBAAA;GACX,CACC,CACL,CACM,CAAC,CAAA;AAEd;;AClIO,SAAS+G,UAAUA,CAAC;EAAE9J,KAAK;EAAEmF,QAAQ;EAAEO,OAAO;AAAEG,EAAAA,QAAQ,GAAG,IAAA;AAAK,CAAC,EAAE;AACxE,EAAA,MAAM,CAACkE,SAAS,EAAEC,YAAY,CAAC,GAAGhJ,cAAQ,CAAC,CAAChB,KAAK,CAAClB,IAAI,CAACQ,GAAG,CAAC,CAAA;AAC3D,EAAA,MAAM,CAAC2K,QAAQ,EAAEC,WAAW,CAAC,GAAGlJ,cAAQ,CAAChB,KAAK,CAAClB,IAAI,CAACQ,GAAG,IAAI,EAAE,CAAC,CAAA;EAE9D,MAAM6K,YAAY,GAAI/E,CAAC,IAAK;IAC1BA,CAAC,CAACoE,cAAc,EAAE,CAAA;AAClB,IAAA,IAAIS,QAAQ,CAACG,IAAI,EAAE,EAAE;AACnBjF,MAAAA,QAAQ,CAAC;AAAE7F,QAAAA,GAAG,EAAE2K,QAAQ,CAACG,IAAI,EAAC;AAAE,OAAC,CAAC,CAAA;MAClCJ,YAAY,CAAC,KAAK,CAAC,CAAA;AACrB,KAAA;GACD,CAAA;EAED,MAAMK,UAAU,GAAGA,MAAM;IACvBL,YAAY,CAAC,IAAI,CAAC,CAAA;IAClBE,WAAW,CAAClK,KAAK,CAAClB,IAAI,CAACQ,GAAG,IAAI,EAAE,CAAC,CAAA;GAClC,CAAA;EAED,IAAIuG,QAAQ,IAAIkE,SAAS,EAAE;IACzB,oBACElH,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,MAAAA,SAAS,EAAC,mBAAmB;AAAC5D,MAAAA,KAAK,EAAEa,KAAK,CAAClB,IAAI,CAACF,MAAO;AAAC4D,MAAAA,OAAO,EAAEkD,OAAAA;KACpE7C,eAAAA,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMwH,MAAAA,QAAQ,EAAEH,YAAAA;KACdtH,eAAAA,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AACEjE,MAAAA,IAAI,EAAC,MAAM;AACXiH,MAAAA,WAAW,EAAC,oBAAoB;AAChCnB,MAAAA,KAAK,EAAEsF,QAAS;MAChB9E,QAAQ,EAAGC,CAAC,IAAK8E,WAAW,CAAC9E,CAAC,CAACC,MAAM,CAACV,KAAK,CAAE;MAC7C4F,SAAS,EAAA,IAAA;AACTxH,MAAAA,SAAS,EAAC,iBAAA;AAAiB,KAC5B,CAAC,eACFF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,MAAAA,SAAS,EAAC,qBAAA;KACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AAAQjE,MAAAA,IAAI,EAAC,QAAQ;AAACkE,MAAAA,SAAS,EAAC,iBAAA;KAAkB,EAAA,QAAc,CAAC,EAChE/C,KAAK,CAAClB,IAAI,CAACQ,GAAG,iBACbuD,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACEjE,MAAAA,IAAI,EAAC,QAAQ;AACb2D,MAAAA,OAAO,EAAEA,MAAMwH,YAAY,CAAC,KAAK,CAAE;AACnCjH,MAAAA,SAAS,EAAC,iBAAA;AAAiB,KAAA,EAC5B,QAEO,CAEP,CACD,CACH,CAAC,CAAA;AAEV,GAAA;EAEA,oBACEF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,qBAAqB;AAAC5D,IAAAA,KAAK,EAAEa,KAAK,CAAClB,IAAI,CAACF,MAAO;AAAC4D,IAAAA,OAAO,EAAEqD,QAAQ,GAAGH,OAAO,GAAG8E,SAAAA;GAC3F3H,eAAAA,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AACE2H,IAAAA,GAAG,EAAEzK,KAAK,CAAClB,IAAI,CAACQ,GAAI;AACpBC,IAAAA,GAAG,EAAES,KAAK,CAAClB,IAAI,CAACS,GAAG,IAAI,OAAQ;AAC/BwD,IAAAA,SAAS,EAAC,aAAa;IACvB2H,OAAO,EAAGtF,CAAC,IAAK;AACdA,MAAAA,CAAC,CAACC,MAAM,CAAClG,KAAK,CAACwL,OAAO,GAAG,MAAM,CAAA;MAC/BvF,CAAC,CAACC,MAAM,CAACuF,WAAW,CAACzL,KAAK,CAACwL,OAAO,GAAG,OAAO,CAAA;AAC9C,KAAA;AAAE,GACH,CAAC,eACF9H,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,aAAa;AAAC5D,IAAAA,KAAK,EAAE;AAAEwL,MAAAA,OAAO,EAAE,MAAA;AAAO,KAAA;AAAE,GAAA,EAAC,sBAEpD,CAAC,EACL9E,QAAQ,iBACPhD,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AAAQN,IAAAA,OAAO,EAAE6H,UAAW;AAACtH,IAAAA,SAAS,EAAC,gBAAA;GAAiB,EAAA,UAEhD,CAEP,CAAC,CAAA;AAEV;;AClEO,SAAS8H,YAAYA,CAAC;EAAE7K,KAAK;EAAEmF,QAAQ;EAAEO,OAAO;AAAEG,EAAAA,QAAQ,GAAG,IAAA;AAAK,CAAC,EAAE;AAC1E,EAAA,MAAM,CAACkE,SAAS,EAAEC,YAAY,CAAC,GAAGhJ,cAAQ,CAAC,CAAChB,KAAK,CAAClB,IAAI,CAACW,OAAO,CAAC,CAAA;AAC/D,EAAA,MAAM,CAACwK,QAAQ,EAAEC,WAAW,CAAC,GAAGlJ,cAAQ,CAAChB,KAAK,CAAClB,IAAI,CAACQ,GAAG,IAAI,EAAE,CAAC,CAAA;EAE9D,MAAM6K,YAAY,GAAI/E,CAAC,IAAK;IAC1BA,CAAC,CAACoE,cAAc,EAAE,CAAA;IAClBpE,CAAC,CAAC0F,eAAe,EAAE,CAAA;AACnB,IAAA,IAAIb,QAAQ,CAACG,IAAI,EAAE,EAAE;MACnB,MAAM3K,OAAO,GAAGC,gBAAgB,CAACuK,QAAQ,CAACG,IAAI,EAAE,CAAC,CAAA;AACjD,MAAA,IAAI3K,OAAO,EAAE;AACX0F,QAAAA,QAAQ,CAAC;AAAE7F,UAAAA,GAAG,EAAE2K,QAAQ,CAACG,IAAI,EAAE;AAAE3K,UAAAA,OAAAA;AAAQ,SAAC,CAAC,CAAA;QAC3CuK,YAAY,CAAC,KAAK,CAAC,CAAA;AACrB,OAAC,MAAM;QACLe,KAAK,CAAC,+DAA+D,CAAC,CAAA;AACxE,OAAA;AACF,KAAA;GACD,CAAA;EAED,MAAMV,UAAU,GAAGA,MAAM;IACvBL,YAAY,CAAC,IAAI,CAAC,CAAA;IAClBE,WAAW,CAAClK,KAAK,CAAClB,IAAI,CAACQ,GAAG,IAAI,EAAE,CAAC,CAAA;GAClC,CAAA;EAED,IAAIuG,QAAQ,IAAIkE,SAAS,EAAE;IACzB,oBACElH,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,MAAAA,SAAS,EAAC,qBAAqB;AAAC5D,MAAAA,KAAK,EAAEa,KAAK,CAAClB,IAAI,CAACF,MAAO;AAAC4D,MAAAA,OAAO,EAAEkD,OAAAA;KACtE7C,eAAAA,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMwH,MAAAA,QAAQ,EAAEH,YAAAA;KACdtH,eAAAA,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AACEjE,MAAAA,IAAI,EAAC,MAAM;AACXiH,MAAAA,WAAW,EAAC,sBAAsB;AAClCnB,MAAAA,KAAK,EAAEsF,QAAS;MAChB9E,QAAQ,EAAGC,CAAC,IAAK8E,WAAW,CAAC9E,CAAC,CAACC,MAAM,CAACV,KAAK,CAAE;MAC7C4F,SAAS,EAAA,IAAA;AACTxH,MAAAA,SAAS,EAAC,mBAAA;AAAmB,KAC9B,CAAC,eACFF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,MAAAA,SAAS,EAAC,uBAAA;KACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AAAQjE,MAAAA,IAAI,EAAC,QAAQ;AAACkE,MAAAA,SAAS,EAAC,mBAAA;KAAoB,EAAA,OAAa,CAAC,EACjE/C,KAAK,CAAClB,IAAI,CAACW,OAAO,iBACjBoD,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACEjE,MAAAA,IAAI,EAAC,QAAQ;AACb2D,MAAAA,OAAO,EAAEA,MAAMwH,YAAY,CAAC,KAAK,CAAE;AACnCjH,MAAAA,SAAS,EAAC,mBAAA;AAAmB,KAAA,EAC9B,QAEO,CAEP,CACD,CACH,CAAC,CAAA;AAEV,GAAA;EAEA,oBACEF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,uBAAuB;AAAC5D,IAAAA,KAAK,EAAEa,KAAK,CAAClB,IAAI,CAACF,MAAO;AAAC4D,IAAAA,OAAO,EAAEqD,QAAQ,GAAGH,OAAO,GAAG8E,SAAAA;GAC7F3H,eAAAA,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,eAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACE2H,IAAAA,GAAG,EAAE,CAAiCzK,8BAAAA,EAAAA,KAAK,CAAClB,IAAI,CAACW,OAAO,CAAG,CAAA;AAC3DuL,IAAAA,WAAW,EAAC,GAAG;AACfC,IAAAA,KAAK,EAAC,0FAA0F;IAChGC,eAAe,EAAA,IAAA;AACfxI,IAAAA,KAAK,EAAC,eAAA;AAAe,GACtB,CACE,CAAC,EACLmD,QAAQ,iBACPhD,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AAAQN,IAAAA,OAAO,EAAE6H,UAAW;AAACtH,IAAAA,SAAS,EAAC,kBAAA;GAAmB,EAAA,cAElD,CAEP,CAAC,CAAA;AAEV;;ACvEO,SAASoI,YAAYA,CAAC;EAAEnL,KAAK;AAAE0F,EAAAA,OAAAA;AAAQ,CAAC,EAAE;EAC/C,oBACE7C,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,uBAAuB;AAAC5D,IAAAA,KAAK,EAAEa,KAAK,CAAClB,IAAI,CAACF,MAAO;AAAC4D,IAAAA,OAAO,EAAEkD,OAAAA;GACxE7C,eAAAA,KAAA,CAAAC,aAAA,CAAA,IAAA,EAAA;AAAIC,IAAAA,SAAS,EAAC,eAAA;AAAe,GAAE,CAC5B,CAAC,CAAA;AAEV;;ACEO,SAASqI,WAAWA,CAAC;EAAEC,CAAC;EAAEC,CAAC;EAAEC,UAAU;AAAEC,EAAAA,OAAAA;AAAQ,CAAC,EAAE;AACzD,EAAA,MAAMC,OAAO,GAAGzF,YAAM,CAAC,IAAI,CAAC,CAAA;AAE5B7E,EAAAA,eAAS,CAAC,MAAM;IACd,MAAMuK,kBAAkB,GAAItG,CAAC,IAAK;AAChC,MAAA,IAAIqG,OAAO,CAACvF,OAAO,IAAI,CAACuF,OAAO,CAACvF,OAAO,CAACyF,QAAQ,CAACvG,CAAC,CAACC,MAAM,CAAC,EAAE;AAC1DmG,QAAAA,OAAO,EAAE,CAAA;AACX,OAAA;KACD,CAAA;IACD,MAAMI,YAAY,GAAIxG,CAAC,IAAK;MAC1B,IAAIA,CAAC,CAACF,GAAG,KAAK,QAAQ,EAAEsG,OAAO,EAAE,CAAA;KAClC,CAAA;AAEDzC,IAAAA,QAAQ,CAAC8C,gBAAgB,CAAC,WAAW,EAAEH,kBAAkB,CAAC,CAAA;AAC1D3C,IAAAA,QAAQ,CAAC8C,gBAAgB,CAAC,SAAS,EAAED,YAAY,CAAC,CAAA;AAClD,IAAA,OAAO,MAAM;AACX7C,MAAAA,QAAQ,CAAC+C,mBAAmB,CAAC,WAAW,EAAEJ,kBAAkB,CAAC,CAAA;AAC7D3C,MAAAA,QAAQ,CAAC+C,mBAAmB,CAAC,SAAS,EAAEF,YAAY,CAAC,CAAA;KACtD,CAAA;AACH,GAAC,EAAE,CAACJ,OAAO,CAAC,CAAC,CAAA;EAEb,MAAMO,YAAY,GAAI/L,KAAK,IAAK;AAC9BuL,IAAAA,UAAU,CAACvL,KAAK,EAAE,QAAQ,CAAC,CAAA;AAC3BwL,IAAAA,OAAO,EAAE,CAAA;GACV,CAAA;EAED,MAAMpM,KAAK,GAAG,CACZ;AAAE4M,IAAAA,KAAK,EAAE,aAAa;AAAEC,IAAAA,MAAM,EAAEA,MAAMF,YAAY,CAACvN,gBAAgB,EAAE,CAAA;AAAE,GAAC,EACxE;AAAEwN,IAAAA,KAAK,EAAE,IAAI;IAAEC,MAAM,EAAEA,MAAMF,YAAY,CAAC/M,kBAAkB,CAACzC,cAAc,CAACC,EAAE,CAAC,CAAA;AAAE,GAAC,EAClF;AAAEwP,IAAAA,KAAK,EAAE,IAAI;IAAEC,MAAM,EAAEA,MAAMF,YAAY,CAAC/M,kBAAkB,CAACzC,cAAc,CAACE,EAAE,CAAC,CAAA;AAAE,GAAC,EAClF;AAAEuP,IAAAA,KAAK,EAAE,IAAI;IAAEC,MAAM,EAAEA,MAAMF,YAAY,CAAC/M,kBAAkB,CAACzC,cAAc,CAACG,EAAE,CAAC,CAAA;AAAE,GAAC,EAClF;AAAEsP,IAAAA,KAAK,EAAE,eAAe;IAAEC,MAAM,EAAEA,MAAMF,YAAY,CAAC7M,eAAe,CAACvC,WAAW,CAACC,SAAS,CAAC,CAAA;AAAE,GAAC,EAC9F;AAAEoP,IAAAA,KAAK,EAAE,kBAAkB;IAAEC,MAAM,EAAEA,MAAMF,YAAY,CAAC7M,eAAe,CAACvC,WAAW,CAACE,OAAO,CAAC,CAAA;AAAE,GAAC,EAC/F;AAAEmP,IAAAA,KAAK,EAAE,OAAO;AAAEC,IAAAA,MAAM,EAAEA,MAAMF,YAAY,CAAC1M,gBAAgB,EAAE,CAAA;AAAE,GAAC,EAClE;AAAE2M,IAAAA,KAAK,EAAE,SAAS;AAAEC,IAAAA,MAAM,EAAEA,MAAMF,YAAY,CAACvM,kBAAkB,EAAE,CAAA;AAAE,GAAC,EACtE;AAAEwM,IAAAA,KAAK,EAAE,WAAW;AAAEC,IAAAA,MAAM,EAAEA,MAAMF,YAAY,CAACpM,kBAAkB,EAAE,CAAA;AAAE,GAAC,CACzE,CAAA;EAED,oBACEkD,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAK2D,IAAAA,GAAG,EAAEgF,OAAQ;AAAC1I,IAAAA,SAAS,EAAC,cAAc;AAAC5D,IAAAA,KAAK,EAAE;AAAE+M,MAAAA,IAAI,EAAEb,CAAC;AAAEc,MAAAA,GAAG,EAAEb,CAAAA;AAAE,KAAA;GAClElM,EAAAA,KAAK,CAACoB,GAAG,CAAEmJ,IAAI,iBACd9G,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;IACEoC,GAAG,EAAEyE,IAAI,CAACqC,KAAM;AAChBjJ,IAAAA,SAAS,EAAC,mBAAmB;IAC7BP,OAAO,EAAEmH,IAAI,CAACsC,MAAAA;AAAO,GAAA,EAEpBtC,IAAI,CAACqC,KACA,CACT,CACE,CAAC,CAAA;AAEV;;AC3DA,MAAMI,gBAAgB,GAAG,CAACpQ,WAAW,CAACC,SAAS,EAAED,WAAW,CAACE,OAAO,EAAEF,WAAW,CAACG,IAAI,CAAC,CAAA;AAEvF,SAASkQ,UAAUA,CAAC;EAAEL,KAAK;EAAErH,KAAK;EAAEQ,QAAQ;AAAEtG,EAAAA,IAAI,GAAG,MAAM;AAAEyN,EAAAA,MAAM,GAAG,EAAA;AAAG,CAAC,EAAE;EAC1E,IAAIzN,IAAI,KAAK,OAAO,EAAE;IACpB,oBACEgE,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,MAAAA,SAAS,EAAC,mBAAA;KACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQkJ,KAAa,CAAC,eACtBnJ,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AACEjE,MAAAA,IAAI,EAAC,OAAO;MACZ8F,KAAK,EAAEA,KAAK,IAAI,SAAU;MAC1BQ,QAAQ,EAAGC,CAAC,IAAKD,QAAQ,CAACC,CAAC,CAACC,MAAM,CAACV,KAAK,CAAA;AAAE,KAC3C,CACE,CAAC,CAAA;AAEV,GAAA;EAEA,IAAI9F,IAAI,KAAK,WAAW,EAAE;IACxB,MAAM0N,YAAY,GAAGxH,QAAQ,CAACJ,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,CAAA;IAC9C,oBACE9B,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,MAAAA,SAAS,EAAC,mBAAA;KACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQkJ,KAAa,CAAC,eACtBnJ,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,MAAAA,SAAS,EAAC,uBAAA;KACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;MACE6B,KAAK,EAAE5G,iBAAiB,CAACkG,QAAQ,CAACU,KAAK,CAAC,GAAGA,KAAK,GAAG,EAAG;MACtDQ,QAAQ,EAAGC,CAAC,IAAK;AACf,QAAA,IAAIA,CAAC,CAACC,MAAM,CAACV,KAAK,EAAEQ,QAAQ,CAACC,CAAC,CAACC,MAAM,CAACV,KAAK,CAAC,CAAA;AAC9C,OAAA;KAEA9B,eAAAA,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AAAQ6B,MAAAA,KAAK,EAAC,EAAE;MAAC/B,QAAQ,EAAA,IAAA;KAAC,EAAA,cAAoB,CAAC,EAC9C7E,iBAAiB,CAACyC,GAAG,CAACyE,IAAI,iBACzBpC,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AAAQoC,MAAAA,GAAG,EAAED,IAAK;AAACN,MAAAA,KAAK,EAAEM,IAAAA;AAAK,KAAA,EAAEA,IAAa,CAC/C,CACK,CAAC,eACTpC,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,MAAAA,SAAS,EAAC,2BAAA;KACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AACEjE,MAAAA,IAAI,EAAC,QAAQ;AACb0G,MAAAA,GAAG,EAAC,GAAG;AACPZ,MAAAA,KAAK,EAAE4H,YAAa;MACpBpH,QAAQ,EAAGC,CAAC,IAAKD,QAAQ,CAAC,CAAGC,EAAAA,CAAC,CAACC,MAAM,CAACV,KAAK,CAAI,EAAA,CAAA,CAAA;AAAE,KAClD,CAAC,eACF9B,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMC,MAAAA,SAAS,EAAC,oBAAA;AAAoB,KAAA,EAAC,IAAQ,CAC1C,CACF,CACF,CAAC,CAAA;AAEV,GAAA;EAEA,MAAMwJ,YAAY,GAAGxH,QAAQ,CAACJ,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;EAE7C,oBACE9B,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,mBAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQkJ,KAAa,CAAC,eACtBnJ,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,2BAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AACEjE,IAAAA,IAAI,EAAC,QAAQ;AACb0G,IAAAA,GAAG,EAAC,GAAG;AACPZ,IAAAA,KAAK,EAAE4H,YAAa;AACpBpH,IAAAA,QAAQ,EAAGC,CAAC,IAAKD,QAAQ,CAAC,CAAA,EAAGC,CAAC,CAACC,MAAM,CAACV,KAAK,CAAA,EAAG2H,MAAM,CAAE,CAAA,CAAA;AAAE,GACzD,CAAC,EACDA,MAAM,iBAAIzJ,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMC,IAAAA,SAAS,EAAC,oBAAA;GAAsBuJ,EAAAA,MAAa,CAC3D,CACF,CAAC,CAAA;AAEV,CAAA;AAEO,SAASE,UAAUA,CAAC;EAAExM,KAAK;EAAEyM,aAAa;AAAEjB,EAAAA,OAAAA;AAAQ,CAAC,EAAE;EAC5D,MAAM5M,MAAM,GAAGoB,KAAK,CAAClB,IAAI,CAACF,MAAM,IAAI,EAAE,CAAA;EACtC,MAAMoF,WAAW,GAAGoI,gBAAgB,CAACnI,QAAQ,CAACjE,KAAK,CAACnB,IAAI,CAAC,CAAA;AAEzD,EAAA,MAAM6N,YAAY,GAAGA,CAACC,IAAI,EAAEhI,KAAK,KAAK;AACpC,IAAA,MAAM/C,OAAO,GAAG;AAAE,MAAA,CAAC+K,IAAI,GAAGhI,KAAAA;KAAO,CAAA;AACjC,IAAA,IAAIgI,IAAI,KAAK,aAAa,IAAIA,IAAI,KAAK,aAAa,EAAE;MACpD/K,OAAO,CAAC2C,WAAW,GAAG,OAAO,CAAA;AAC/B,KAAA;AACAkI,IAAAA,aAAa,CAACzM,KAAK,CAACjB,EAAE,EAAE6C,OAAO,CAAC,CAAA;GACjC,CAAA;EAED,MAAMgL,gBAAgB,GAAIjI,KAAK,IAAK;AAClC8H,IAAAA,aAAa,CAACzM,KAAK,CAACjB,EAAE,EAAE;AACtB9B,MAAAA,SAAS,EAAE0H,KAAK;AAChBvH,MAAAA,WAAW,EAAEuH,KAAK;AAClBzH,MAAAA,YAAY,EAAEyH,KAAK;AACnBxH,MAAAA,UAAU,EAAEwH,KAAAA;AACd,KAAC,CAAC,CAAA;GACH,CAAA;EAED,MAAMD,gBAAgB,GAAIC,KAAK,IAAK;AAClC8H,IAAAA,aAAa,CAACzM,KAAK,CAACjB,EAAE,EAAE;AACtB1B,MAAAA,UAAU,EAAEsH,KAAK;AACjBnH,MAAAA,YAAY,EAAEmH,KAAK;AACnBrH,MAAAA,aAAa,EAAEqH,KAAK;AACpBpH,MAAAA,WAAW,EAAEoH,KAAAA;AACf,KAAC,CAAC,CAAA;GACH,CAAA;EAED,oBACE9B,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,qBAAqB;AAAC8J,IAAAA,WAAW,EAAErB,OAAAA;GAChD3I,eAAAA,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,aAAa;AAAC8J,IAAAA,WAAW,EAAGzH,CAAC,IAAKA,CAAC,CAAC0F,eAAe,EAAC;GACjEjI,eAAAA,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,oBAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,IAAA,EAAA,IAAA,EAAI,kBAAoB,CAAC,eACzBD,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AAAQC,IAAAA,SAAS,EAAC,mBAAmB;AAACP,IAAAA,OAAO,EAAEgJ,OAAAA;AAAQ,GAAA,EAAC,MAAS,CAC9D,CAAC,eAEN3I,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,kBAAA;AAAkB,GAAA,EAC9BiB,WAAW,iBACVnB,KAAA,CAAAC,aAAA,CAAAD,KAAA,CAAAiK,QAAA,EAAA,IAAA,eACEjK,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,qBAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,IAAA,EAAA,IAAA,EAAI,MAAQ,CAAC,eACbD,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,iBAAA;AAAiB,GAAA,eAC9BF,KAAA,CAAAC,aAAA,CAACuJ,UAAU,EAAA;AACTL,IAAAA,KAAK,EAAC,WAAW;IACjBrH,KAAK,EAAE/F,MAAM,CAAC5B,QAAS;IACvBmI,QAAQ,EAAG4H,CAAC,IAAKL,YAAY,CAAC,UAAU,EAAEK,CAAC,CAAE;AAC7ClO,IAAAA,IAAI,EAAC,WAAA;AAAW,GACjB,CAAC,eACFgE,KAAA,CAAAC,aAAA,CAACuJ,UAAU,EAAA;AACTL,IAAAA,KAAK,EAAC,OAAO;IACbrH,KAAK,EAAE/F,MAAM,CAACnB,KAAM;IACpB0H,QAAQ,EAAG4H,CAAC,IAAKL,YAAY,CAAC,OAAO,EAAEK,CAAC,CAAE;AAC1ClO,IAAAA,IAAI,EAAC,OAAA;AAAO,GACb,CACE,CACF,CAAC,eACNgE,KAAA,CAAAC,aAAA,CAAA,IAAA,EAAA;AAAIC,IAAAA,SAAS,EAAC,qBAAA;AAAqB,GAAE,CACrC,CACH,eAEDF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,qBAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,IAAA,EAAA,IAAA,EAAI,QAAU,CAAC,eACfD,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,iBAAA;AAAiB,GAAA,eAC9BF,KAAA,CAAAC,aAAA,CAACuJ,UAAU,EAAA;AAACL,IAAAA,KAAK,EAAC,KAAK;AAACrH,IAAAA,KAAK,EAAE/F,MAAM,CAACoO,SAAS,IAAI,EAAG;IAAC7H,QAAQ,EAAG4H,CAAC,IAAK;MAAEH,gBAAgB,CAACG,CAAC,CAAC,CAAA;AAAEL,MAAAA,YAAY,CAAC,WAAW,EAAEK,CAAC,CAAC,CAAA;KAAI;AAACT,IAAAA,MAAM,EAAC,IAAA;AAAI,GAAE,CAAC,eAC9IzJ,KAAA,CAAAC,aAAA,CAACuJ,UAAU,EAAA;AAACL,IAAAA,KAAK,EAAC,KAAK;IAACrH,KAAK,EAAE/F,MAAM,CAAC3B,SAAU;IAACkI,QAAQ,EAAG4H,CAAC,IAAKL,YAAY,CAAC,WAAW,EAAEK,CAAC,CAAE;AAACT,IAAAA,MAAM,EAAC,IAAA;AAAI,GAAE,CAAC,eAC9GzJ,KAAA,CAAAC,aAAA,CAACuJ,UAAU,EAAA;AAACL,IAAAA,KAAK,EAAC,OAAO;IAACrH,KAAK,EAAE/F,MAAM,CAACxB,WAAY;IAAC+H,QAAQ,EAAG4H,CAAC,IAAKL,YAAY,CAAC,aAAa,EAAEK,CAAC,CAAE;AAACT,IAAAA,MAAM,EAAC,IAAA;AAAI,GAAE,CAAC,eACpHzJ,KAAA,CAAAC,aAAA,CAACuJ,UAAU,EAAA;AAACL,IAAAA,KAAK,EAAC,QAAQ;IAACrH,KAAK,EAAE/F,MAAM,CAAC1B,YAAa;IAACiI,QAAQ,EAAG4H,CAAC,IAAKL,YAAY,CAAC,cAAc,EAAEK,CAAC,CAAE;AAACT,IAAAA,MAAM,EAAC,IAAA;AAAI,GAAE,CAAC,eACvHzJ,KAAA,CAAAC,aAAA,CAACuJ,UAAU,EAAA;AAACL,IAAAA,KAAK,EAAC,MAAM;IAACrH,KAAK,EAAE/F,MAAM,CAACzB,UAAW;IAACgI,QAAQ,EAAG4H,CAAC,IAAKL,YAAY,CAAC,YAAY,EAAEK,CAAC,CAAE;AAACT,IAAAA,MAAM,EAAC,IAAA;AAAI,GAAE,CAC7G,CACF,CAAC,eAENzJ,KAAA,CAAAC,aAAA,CAAA,IAAA,EAAA;AAAIC,IAAAA,SAAS,EAAC,qBAAA;AAAqB,GAAE,CAAC,eAEtCF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,qBAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,IAAA,EAAA,IAAA,EAAI,SAAW,CAAC,eAChBD,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,iBAAA;AAAiB,GAAA,eAC9BF,KAAA,CAAAC,aAAA,CAACuJ,UAAU,EAAA;AAACL,IAAAA,KAAK,EAAC,KAAK;AAACrH,IAAAA,KAAK,EAAE/F,MAAM,CAACqO,UAAU,IAAI,EAAG;IAAC9H,QAAQ,EAAG4H,CAAC,IAAK;MAAErI,gBAAgB,CAACqI,CAAC,CAAC,CAAA;AAAEL,MAAAA,YAAY,CAAC,YAAY,EAAEK,CAAC,CAAC,CAAA;KAAI;AAACT,IAAAA,MAAM,EAAC,IAAA;AAAI,GAAE,CAAC,eAChJzJ,KAAA,CAAAC,aAAA,CAACuJ,UAAU,EAAA;AAACL,IAAAA,KAAK,EAAC,KAAK;IAACrH,KAAK,EAAE/F,MAAM,CAACvB,UAAW;IAAC8H,QAAQ,EAAG4H,CAAC,IAAKL,YAAY,CAAC,YAAY,EAAEK,CAAC,CAAE;AAACT,IAAAA,MAAM,EAAC,IAAA;AAAI,GAAE,CAAC,eAChHzJ,KAAA,CAAAC,aAAA,CAACuJ,UAAU,EAAA;AAACL,IAAAA,KAAK,EAAC,OAAO;IAACrH,KAAK,EAAE/F,MAAM,CAACpB,YAAa;IAAC2H,QAAQ,EAAG4H,CAAC,IAAKL,YAAY,CAAC,cAAc,EAAEK,CAAC,CAAE;AAACT,IAAAA,MAAM,EAAC,IAAA;AAAI,GAAE,CAAC,eACtHzJ,KAAA,CAAAC,aAAA,CAACuJ,UAAU,EAAA;AAACL,IAAAA,KAAK,EAAC,QAAQ;IAACrH,KAAK,EAAE/F,MAAM,CAACtB,aAAc;IAAC6H,QAAQ,EAAG4H,CAAC,IAAKL,YAAY,CAAC,eAAe,EAAEK,CAAC,CAAE;AAACT,IAAAA,MAAM,EAAC,IAAA;AAAI,GAAE,CAAC,eACzHzJ,KAAA,CAAAC,aAAA,CAACuJ,UAAU,EAAA;AAACL,IAAAA,KAAK,EAAC,MAAM;IAACrH,KAAK,EAAE/F,MAAM,CAACrB,WAAY;IAAC4H,QAAQ,EAAG4H,CAAC,IAAKL,YAAY,CAAC,aAAa,EAAEK,CAAC,CAAE;AAACT,IAAAA,MAAM,EAAC,IAAA;AAAI,GAAE,CAC/G,CACF,CAAC,eAENzJ,KAAA,CAAAC,aAAA,CAAA,IAAA,EAAA;AAAIC,IAAAA,SAAS,EAAC,qBAAA;AAAqB,GAAE,CAAC,eAEtCF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,qBAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,IAAA,EAAA,IAAA,EAAI,QAAU,CAAC,eACfD,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,iBAAA;AAAiB,GAAA,eAC9BF,KAAA,CAAAC,aAAA,CAACuJ,UAAU,EAAA;AACTL,IAAAA,KAAK,EAAC,OAAO;IACbrH,KAAK,EAAE/F,MAAM,CAAC4G,WAAY;IAC1BL,QAAQ,EAAG4H,CAAC,IAAKL,YAAY,CAAC,aAAa,EAAEK,CAAC,CAAE;AAChDT,IAAAA,MAAM,EAAC,IAAA;AAAI,GACZ,CAAC,eACFzJ,KAAA,CAAAC,aAAA,CAACuJ,UAAU,EAAA;AACTL,IAAAA,KAAK,EAAC,OAAO;IACbrH,KAAK,EAAE/F,MAAM,CAAC0F,WAAY;IAC1Ba,QAAQ,EAAG4H,CAAC,IAAKL,YAAY,CAAC,aAAa,EAAEK,CAAC,CAAE;AAChDlO,IAAAA,IAAI,EAAC,OAAA;AAAO,GACb,CACE,CACF,CAAC,eAENgE,KAAA,CAAAC,aAAA,CAAA,IAAA,EAAA;AAAIC,IAAAA,SAAS,EAAC,qBAAA;AAAqB,GAAE,CAAC,eAEtCF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,qBAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,IAAA,EAAA,IAAA,EAAI,YAAc,CAAC,eACnBD,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,iBAAA;AAAiB,GAAA,eAC9BF,KAAA,CAAAC,aAAA,CAACuJ,UAAU,EAAA;AACTL,IAAAA,KAAK,EAAC,OAAO;IACbrH,KAAK,EAAE/F,MAAM,CAAC6F,eAAgB;IAC9BU,QAAQ,EAAG4H,CAAC,IAAKL,YAAY,CAAC,iBAAiB,EAAEK,CAAC,CAAE;AACpDlO,IAAAA,IAAI,EAAC,OAAA;AAAO,GACb,CACE,CACF,CACF,CACF,CACF,CAAC,CAAA;AAEV;;ACjLO,SAASqO,MAAMA,CAAC;EAAEpM,WAAW;EAAEwC,MAAM;AAAEwC,EAAAA,WAAW,GAAG,kBAAkB;AAAED,EAAAA,QAAQ,GAAG,IAAI;AAAEsH,EAAAA,YAAY,GAAG,IAAA;AAAK,CAAC,EAAE;AACtH,EAAA,MAAMC,gBAAgB,GAAGpH,YAAM,CAAC,IAAI,CAAC,CAAA;AACrC,EAAA,MAAMqH,SAAS,GAAGrH,YAAM,CAAC,EAAE,CAAC,CAAA;AAC5B,EAAA,MAAM,CAACsH,WAAW,EAAEC,cAAc,CAAC,GAAGvM,cAAQ,CAAC;AAAEwM,IAAAA,OAAO,EAAE,KAAK;AAAEnC,IAAAA,CAAC,EAAE,CAAC;AAAEC,IAAAA,CAAC,EAAE,CAAA;AAAE,GAAC,CAAC,CAAA;EAC9E,MAAM,CAACmC,cAAc,EAAEC,iBAAiB,CAAC,GAAG1M,cAAQ,CAAC,IAAI,CAAC,CAAA;EAC1D,MAAM,CAAC2M,oBAAoB,EAAEC,uBAAuB,CAAC,GAAG5M,cAAQ,CAAC,KAAK,CAAC,CAAA;EAEvE,MAAM;IACJX,MAAM;IACNY,cAAc;IACdC,iBAAiB;IACjBE,QAAQ;IACRM,WAAW;IACXG,gBAAgB;IAChBC,WAAW;IACXG,SAAS;AACTI,IAAAA,OAAAA;AACF,GAAC,GAAGxB,SAAS,CAACC,WAAW,CAAC,CAAA;;AAE1B;AACAK,EAAAA,eAAS,CAAC,MAAM;IACd,IAAI,CAAC0E,QAAQ,EAAE,OAAA;IAEf,MAAMgI,mBAAmB,GAAIzI,CAAC,IAAK;AACjC,MAAA,IAAIA,CAAC,CAACF,GAAG,KAAK,QAAQ,IAAIjE,cAAc,EAAE;QACxCC,iBAAiB,CAAC,IAAI,CAAC,CAAA;QACvB,IAAI6H,QAAQ,CAAC+E,aAAa,EAAE;AAC1B/E,UAAAA,QAAQ,CAAC+E,aAAa,CAACC,IAAI,EAAE,CAAA;AAC/B,SAAA;AACF,OAAA;KACD,CAAA;AAEDhF,IAAAA,QAAQ,CAAC8C,gBAAgB,CAAC,SAAS,EAAEgC,mBAAmB,CAAC,CAAA;IACzD,OAAO,MAAM9E,QAAQ,CAAC+C,mBAAmB,CAAC,SAAS,EAAE+B,mBAAmB,CAAC,CAAA;GAC1E,EAAE,CAAC5M,cAAc,EAAE4E,QAAQ,EAAE3E,iBAAiB,CAAC,CAAC,CAAA;EAEjD,MAAM8M,UAAU,GAAGA,MAAM;AACvB,IAAA,MAAMtN,IAAI,GAAG2B,OAAO,EAAE,CAAA;AACtB,IAAA,IAAIiB,MAAM,EAAE;MACVA,MAAM,CAAC5C,IAAI,CAAC,CAAA;AACd,KAAA;IACAkN,uBAAuB,CAAC,IAAI,CAAC,CAAA;IAC7B1G,UAAU,CAAC,MAAM0G,uBAAuB,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAA;GACvD,CAAA;AAED,EAAA,MAAMK,iBAAiB,GAAGA,CAACtM,OAAO,EAAEC,OAAO,KAAK;AAC9CF,IAAAA,WAAW,CAACC,OAAO,EAAEC,OAAO,CAAC,CAAA;GAC9B,CAAA;EAED,MAAMsM,sBAAsB,GAAIjO,YAAY,IAAK;AAC/C,IAAA,IAAIgB,cAAc,EAAE;AAClBY,MAAAA,gBAAgB,CAACZ,cAAc,EAAEhB,YAAY,CAAC,CAAA;AAChD,KAAA;GACD,CAAA;EAED,MAAMkO,iBAAiB,GAAGA,MAAM;IAC9B,IAAI,CAAClN,cAAc,EAAE,OAAA;AACrB,IAAA,MAAMK,KAAK,GAAGjB,MAAM,CAAC+N,SAAS,CAACC,CAAC,IAAIA,CAAC,CAACtP,EAAE,KAAKkC,cAAc,CAAC,CAAA;IAC5D,IAAIK,KAAK,GAAG,CAAC,EAAE;AACbW,MAAAA,SAAS,CAACX,KAAK,EAAEA,KAAK,GAAG,CAAC,CAAC,CAAA;AAC7B,KAAA;GACD,CAAA;EAED,MAAMgN,mBAAmB,GAAGA,MAAM;IAChC,IAAI,CAACrN,cAAc,EAAE,OAAA;AACrB,IAAA,MAAMK,KAAK,GAAGjB,MAAM,CAAC+N,SAAS,CAACC,CAAC,IAAIA,CAAC,CAACtP,EAAE,KAAKkC,cAAc,CAAC,CAAA;AAC5D,IAAA,IAAIK,KAAK,GAAGjB,MAAM,CAACP,MAAM,GAAG,CAAC,EAAE;AAC7BmC,MAAAA,SAAS,CAACX,KAAK,EAAEA,KAAK,GAAG,CAAC,CAAC,CAAA;AAC7B,KAAA;GACD,CAAA;EAED,MAAMiN,cAAc,GAAGA,CAACvO,KAAK,EAAEwO,IAAI,GAAG,QAAQ,KAAK;AACjD,IAAA,IAAIA,IAAI,KAAK,SAAS,IAAIvN,cAAc,EAAE;AACxC,MAAA,MAAMwN,YAAY,GAAGpO,MAAM,CAAC+N,SAAS,CAACC,CAAC,IAAIA,CAAC,CAACtP,EAAE,KAAKkC,cAAc,CAAC,CAAA;AACnE,MAAA,IAAIwN,YAAY,KAAK,CAAC,CAAC,EAAE;QACvB3M,WAAW,CAACb,cAAc,CAAC,CAAA;AAC3BG,QAAAA,QAAQ,CAACpB,KAAK,EAAEyO,YAAY,CAAC,CAAA;QAC7BvH,UAAU,CAAC,MAAMhG,iBAAiB,CAAClB,KAAK,CAACjB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;AAChD,QAAA,OAAA;AACF,OAAA;AACF,KAAA;AAEAqC,IAAAA,QAAQ,CAACpB,KAAK,EAAEK,MAAM,CAACP,MAAM,CAAC,CAAA;IAC9BoH,UAAU,CAAC,MAAMhG,iBAAiB,CAAClB,KAAK,CAACjB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;GACjD,CAAA;EAED,MAAM2P,iBAAiB,GAAItJ,CAAC,IAAK;IAC/B,IAAI,CAACS,QAAQ,EAAE,OAAA;IACfT,CAAC,CAACoE,cAAc,EAAE,CAAA;IAClB,MAAMmF,IAAI,GAAGvB,gBAAgB,CAAClH,OAAO,CAAC0I,qBAAqB,EAAE,CAAA;AAC7DrB,IAAAA,cAAc,CAAC;AACbC,MAAAA,OAAO,EAAE,IAAI;AACbnC,MAAAA,CAAC,EAAEjG,CAAC,CAACyJ,OAAO,GAAGF,IAAI,CAACzC,IAAI;AACxBZ,MAAAA,CAAC,EAAElG,CAAC,CAAC0J,OAAO,GAAGH,IAAI,CAACxC,GAAAA;AACtB,KAAC,CAAC,CAAA;GACH,CAAA;EAED,MAAM4C,eAAe,GAAI3J,CAAC,IAAK;IAC7B,IAAI,CAACS,QAAQ,EAAE,OAAA;IAEf,IAAImJ,cAAc,GAAG,IAAI,CAAA;AAEzB,IAAA,KAAK,IAAIrN,OAAO,IAAI0L,SAAS,CAACnH,OAAO,EAAE;AACrC,MAAA,MAAM+I,OAAO,GAAG5B,SAAS,CAACnH,OAAO,CAACvE,OAAO,CAAC,CAAA;MAC1C,IAAIsN,OAAO,IAAIA,OAAO,CAACtD,QAAQ,CAACvG,CAAC,CAACC,MAAM,CAAC,EAAE;AACzC2J,QAAAA,cAAc,GAAGrN,OAAO,CAAA;AACxB,QAAA,MAAA;AACF,OAAA;AACF,KAAA;AAEA,IAAA,IAAIqN,cAAc,EAAE;MAClB9N,iBAAiB,CAAC8N,cAAc,CAAC,CAAA;AACnC,KAAC,MAAM;MACL9N,iBAAiB,CAAC,IAAI,CAAC,CAAA;AACzB,KAAA;GACD,CAAA;AAED,EAAA,MAAMoF,aAAa,GAAGA,CAAC3E,OAAO,EAAEyD,CAAC,KAAK;AACpC,IAAA,IAAIA,CAAC,CAACF,GAAG,KAAK,QAAQ,EAAE;MACtBE,CAAC,CAACoE,cAAc,EAAE,CAAA;MAClBtI,iBAAiB,CAAC,IAAI,CAAC,CAAA;MACvB,IAAI6H,QAAQ,CAAC+E,aAAa,EAAE;AAC1B/E,QAAAA,QAAQ,CAAC+E,aAAa,CAACC,IAAI,EAAE,CAAA;AAC/B,OAAA;AACA,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,MAAMmB,UAAU,GAAG7O,MAAM,CAAC+N,SAAS,CAACC,CAAC,IAAIA,CAAC,CAACtP,EAAE,KAAK4C,OAAO,CAAC,CAAA;AAC1D,IAAA,MAAM3B,KAAK,GAAGK,MAAM,CAAC6O,UAAU,CAAC,CAAA;AAEhC,IAAA,IAAI9J,CAAC,CAACF,GAAG,KAAK,WAAW,IAAIlF,KAAK,CAAClB,IAAI,CAACJ,IAAI,KAAK,EAAE,EAAE;MACnD0G,CAAC,CAACoE,cAAc,EAAE,CAAA;MAClB1H,WAAW,CAACH,OAAO,CAAC,CAAA;MAEpB,IAAIuN,UAAU,GAAG,CAAC,EAAE;QAClBhO,iBAAiB,CAACb,MAAM,CAAC6O,UAAU,GAAG,CAAC,CAAC,CAACnQ,EAAE,CAAC,CAAA;AAC9C,OAAA;AACF,KAAA;GACD,CAAA;EAED,MAAMoQ,WAAW,GAAInP,KAAK,IAAK;IAC7B,MAAM4F,SAAS,GAAGC,QAAQ,IAAI7F,KAAK,CAACjB,EAAE,KAAKkC,cAAc,CAAA;AACzD,IAAA,MAAMmO,WAAW,GAAG;MAClBpP,KAAK;MACLmF,QAAQ,EAAGvD,OAAO,IAAKqM,iBAAiB,CAACjO,KAAK,CAACjB,EAAE,EAAE6C,OAAO,CAAC;AAC3D8D,MAAAA,OAAO,EAAEA,MAAM,EAAE;MACjBE,SAAS;MACTC,QAAQ;AACRC,MAAAA,WAAAA;KACD,CAAA;IAED,QAAQ9F,KAAK,CAACnB,IAAI;MAChB,KAAK7C,WAAW,CAACC,SAAS;QACxB,oBACE4G,KAAA,CAAAC,aAAA,CAAC2C,cAAc,EAAA4J,QAAA,KACTD,WAAW,EAAA;AACfzJ,UAAAA,SAAS,EAAEE,QAAQ,GAAIT,CAAC,IAAKkB,aAAa,CAACtG,KAAK,CAACjB,EAAE,EAAEqG,CAAC,CAAC,GAAGoF,SAAAA;AAAU,SAAA,CACrE,CAAC,CAAA;MAEN,KAAKxO,WAAW,CAACE,OAAO;QACtB,oBACE2G,KAAA,CAAAC,aAAA,CAAC+D,YAAY,EAAAwI,QAAA,KACPD,WAAW,EAAA;AACfzJ,UAAAA,SAAS,EAAEE,QAAQ,GAAIT,CAAC,IAAKkB,aAAa,CAACtG,KAAK,CAACjB,EAAE,EAAEqG,CAAC,CAAC,GAAGoF,SAAAA;AAAU,SAAA,CACrE,CAAC,CAAA;MAEN,KAAKxO,WAAW,CAACG,IAAI;AACnB,QAAA,oBAAO0G,KAAA,CAAAC,aAAA,CAACiE,SAAS,EAAKqI,WAAc,CAAC,CAAA;MACvC,KAAKpT,WAAW,CAACI,KAAK;AACpB,QAAA,oBAAOyG,KAAA,CAAAC,aAAA,CAACgH,UAAU,EAAKsF,WAAc,CAAC,CAAA;MACxC,KAAKpT,WAAW,CAACK,OAAO;AACtB,QAAA,oBAAOwG,KAAA,CAAAC,aAAA,CAAC+H,YAAY,EAAKuE,WAAc,CAAC,CAAA;MAC1C,KAAKpT,WAAW,CAACM,OAAO;AACtB,QAAA,oBAAOuG,KAAA,CAAAC,aAAA,CAACqI,YAAY,EAAKiE,WAAc,CAAC,CAAA;AAC1C,MAAA;AACE,QAAA,OAAO,IAAI,CAAA;AACf,KAAA;GACD,CAAA;EAED,MAAME,gBAAgB,GAAItP,KAAK,IAAK;IAClC,QAAQA,KAAK,CAACnB,IAAI;MAChB,KAAK7C,WAAW,CAACC,SAAS;AAAE,QAAA,OAAO,GAAG,CAAA;MACtC,KAAKD,WAAW,CAACE,OAAO;AAAE,QAAA,OAAO8D,KAAK,CAAClB,IAAI,CAACH,OAAO,IAAI,IAAI,CAAA;MAC3D,KAAK3C,WAAW,CAACG,IAAI;AAAE,QAAA,OAAO6D,KAAK,CAAClB,IAAI,CAACK,KAAK,KAAKxC,WAAW,CAACE,OAAO,GAAG,IAAI,GAAG,IAAI,CAAA;MACpF,KAAKb,WAAW,CAACI,KAAK;AAAE,QAAA,OAAO,KAAK,CAAA;MACpC,KAAKJ,WAAW,CAACK,OAAO;AAAE,QAAA,OAAO,QAAQ,CAAA;MACzC,KAAKL,WAAW,CAACM,OAAO;AAAE,QAAA,OAAO,IAAI,CAAA;AACrC,MAAA;AAAS,QAAA,OAAO,KAAK,CAAA;AACvB,KAAA;GACD,CAAA;AAED,EAAA,MAAM4G,YAAY,GAAG7C,MAAM,CAACkP,IAAI,CAAClB,CAAC,IAAIA,CAAC,CAACtP,EAAE,KAAKkC,cAAc,CAAC,CAAA;EAE9D,oBACE4B,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAE,CAAoB,iBAAA,EAAA,CAAC8C,QAAQ,GAAG,WAAW,GAAG,EAAE,CAAA,CAAA;AAAG,GAAA,EAChEA,QAAQ,iBACPhD,KAAA,CAAAC,aAAA,CAAAD,KAAA,CAAAiK,QAAA,EACGK,IAAAA,EAAAA,YAAY,iBACXtK,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,iBAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,aAAA;AAAa,GAAA,EAAC,kBAAqB,CAAC,eACnDF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,iBAAA;AAAiB,GAAA,EAAC,eAClB,eAAAF,KAAA,CAAAC,aAAA,CAAA,GAAA,EAAA;AAAG0M,IAAAA,IAAI,EAAC,oCAAoC;AAACnK,IAAAA,MAAM,EAAC,QAAQ;AAACoK,IAAAA,GAAG,EAAC,qBAAA;GAAsB,EAAA,kBAAmB,CACpH,CAAC,EACL9B,oBAAoB,iBACnB9K,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,0BAAA;GAA2B,EAAA,4BAA+B,CAExE,CACN,EACA,CAACoK,YAAY,IAAIQ,oBAAoB,iBACpC9K,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,4DAAA;AAA4D,GAAA,EAAC,4BAA+B,CAC5G,eACDF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,gBAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,MAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMC,IAAAA,SAAS,EAAC,YAAA;AAAY,GAAA,EAAC,aAAiB,CAAC,eAC/CF,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMC,IAAAA,SAAS,EAAC,WAAA;AAAW,GAAA,EAAC,+DAAmE,CAC5F,CAAC,eACNF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,MAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMC,IAAAA,SAAS,EAAC,YAAA;AAAY,GAAA,EAAC,eAAmB,CAAC,eACjDF,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMC,IAAAA,SAAS,EAAC,WAAA;AAAW,GAAA,EAAC,iHAA2G,CACpI,CAAC,eACNF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,MAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMC,IAAAA,SAAS,EAAC,YAAA;AAAY,GAAA,EAAC,iBAAqB,CAAC,eACnDF,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMC,IAAAA,SAAS,EAAC,WAAA;AAAW,GAAA,EAAC,yFAAyE,CAClG,CAAC,eACNF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,MAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMC,IAAAA,SAAS,EAAC,YAAA;AAAY,GAAA,EAAC,gBAAoB,CAAC,eAClDF,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMC,IAAAA,SAAS,EAAC,WAAA;GAAY,EAAA,kEAAuD,CAChF,CACF,CAAC,eACNF,KAAA,CAAAC,aAAA,CAACG,OAAO,EAAA;AACNC,IAAAA,YAAY,EAAEA,YAAa;AAC3BC,IAAAA,kBAAkB,EAAE+K,sBAAuB;AAC3C9K,IAAAA,aAAa,EAAE+K,iBAAkB;AACjC9K,IAAAA,eAAe,EAAEiL,mBAAoB;AACrChL,IAAAA,MAAM,EAAE0K,UAAAA;AAAW,GACpB,CACD,CACH,eACDnL,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AACE2D,IAAAA,GAAG,EAAE2G,gBAAiB;AACtBrK,IAAAA,SAAS,EAAC,gBAAgB;AAC1B8J,IAAAA,WAAW,EAAEkC,eAAgB;AAC7BW,IAAAA,aAAa,EAAE7J,QAAQ,GAAG6I,iBAAiB,GAAGlE,SAAAA;GAE7CnK,EAAAA,MAAM,CAACG,GAAG,CAAC,CAACR,KAAK,EAAE2P,GAAG,kBACrB9M,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;IACEoC,GAAG,EAAElF,KAAK,CAACjB,EAAG;AACdgE,IAAAA,SAAS,EAAC,sBAAA;GAEVF,eAAAA,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMC,IAAAA,SAAS,EAAC,iBAAA;AAAiB,GAAA,EAAC,GAAI,EAACuM,gBAAgB,CAACtP,KAAK,CAAC,EAAC,GAAU,CAAC,eAC1E6C,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,qBAAA;AAAqB,GAAA,EACjC8C,QAAQ,iBACPhD,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,qBAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACEC,IAAAA,SAAS,EAAC,gBAAgB;AAC1BP,IAAAA,OAAO,EAAEA,MAAMmN,GAAG,GAAG,CAAC,IAAI1N,SAAS,CAAC0N,GAAG,EAAEA,GAAG,GAAG,CAAC,CAAE;AAClDjN,IAAAA,KAAK,EAAC,SAAS;IACfE,QAAQ,EAAE+M,GAAG,KAAK,CAAA;AAAE,GAAA,EACrB,QAEO,CAAC,eACT9M,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACEC,IAAAA,SAAS,EAAC,gBAAgB;AAC1BP,IAAAA,OAAO,EAAEA,MAAMmN,GAAG,GAAGtP,MAAM,CAACP,MAAM,GAAG,CAAC,IAAImC,SAAS,CAAC0N,GAAG,EAAEA,GAAG,GAAG,CAAC,CAAE;AAClEjN,IAAAA,KAAK,EAAC,WAAW;AACjBE,IAAAA,QAAQ,EAAE+M,GAAG,KAAKtP,MAAM,CAACP,MAAM,GAAG,CAAA;AAAE,GAAA,EACrC,QAEO,CACL,CAEJ,CAAC,eACN+C,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AACE2D,IAAAA,GAAG,EAAEZ,QAAQ,GAAI2B,EAAE,IAAK6F,SAAS,CAACnH,OAAO,CAAClG,KAAK,CAACjB,EAAE,CAAC,GAAGyI,EAAE,GAAGgD,SAAU;AACrEzH,IAAAA,SAAS,EAAE,CAAA,aAAA,EAAgB8C,QAAQ,IAAI7F,KAAK,CAACjB,EAAE,KAAKkC,cAAc,GAAG,SAAS,GAAG,EAAE,CAAG,CAAA;AACtF,IAAA,eAAA,EAAejB,KAAK,CAACjB,EAAAA;GAEpBoQ,EAAAA,WAAW,CAACnP,KAAK,CACf,CAAC,EACL6F,QAAQ,iBACPhD,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,eAAA;GACbF,eAAAA,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACEC,IAAAA,SAAS,EAAC,mBAAmB;IAC7BP,OAAO,EAAEA,MAAMkL,iBAAiB,CAAC1N,KAAK,CAACjB,EAAE,CAAE;AAC3C2D,IAAAA,KAAK,EAAC,kBAAA;AAAkB,GAAA,EACzB,cAEO,CAAC,eACTG,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACEC,IAAAA,SAAS,EAAC,qBAAqB;IAC/BP,OAAO,EAAEA,MAAMV,WAAW,CAAC9B,KAAK,CAACjB,EAAE,CAAE;AACrC2D,IAAAA,KAAK,EAAC,cAAA;AAAc,GAAA,EACrB,oBAEO,CACL,CAEJ,CACN,CAAC,EACDmD,QAAQ,IAAIyH,WAAW,CAACE,OAAO,iBAC9B3K,KAAA,CAAAC,aAAA,CAACsI,WAAW,EAAA;IACVC,CAAC,EAAEiC,WAAW,CAACjC,CAAE;IACjBC,CAAC,EAAEgC,WAAW,CAAChC,CAAE;AACjBC,IAAAA,UAAU,EAAEgD,cAAe;AAC3B/C,IAAAA,OAAO,EAAEA,MAAM+B,cAAc,CAAC;AAAEC,MAAAA,OAAO,EAAE,KAAK;AAAEnC,MAAAA,CAAC,EAAE,CAAC;AAAEC,MAAAA,CAAC,EAAE,CAAA;KAAG,CAAA;GAC7D,CAEA,CAAC,EACLzF,QAAQ,IAAI4H,cAAc,iBACzB5K,KAAA,CAAAC,aAAA,CAAC0J,UAAU,EAAA;AACTxM,IAAAA,KAAK,EAAEK,MAAM,CAACkP,IAAI,CAAClB,CAAC,IAAIA,CAAC,CAACtP,EAAE,KAAK0O,cAAc,CAAE;IACjDhB,aAAa,EAAEA,CAAC9K,OAAO,EAAE1B,YAAY,KAAK4B,gBAAgB,CAACF,OAAO,EAAE1B,YAAY,CAAE;AAClFuL,IAAAA,OAAO,EAAEA,MAAMkC,iBAAiB,CAAC,IAAI,CAAA;AAAE,GACxC,CAEA,CAAC,CAAA;AAEV;;;;;;;;;"}
|
package/dist/styles.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.margin-option,.padding-option{background:none;border:none;color:#333;cursor:pointer;font-size:14px;padding:6px 12px}.margin-option:hover,.padding-option:hover{background:#eaf3fb;color:#4a90e2}.toolbar{background-color:var(--color-bg);border-bottom:1px solid var(--color-divider);justify-content:space-between;padding:12px 16px;position:sticky;top:0;z-index:100}.toolbar,.toolbar-sections{align-items:center;display:flex;flex-wrap:wrap;gap:8px}.toolbar-section{align-items:center;display:flex;gap:4px}.toolbar-label{color:var(--color-text);font-size:12px;font-weight:500;margin-right:4px}.toolbar-button{background-color:var(--color-card-bg);border:1px solid var(--color-card-border);border-radius:4px;color:var(--color-text);cursor:pointer;font-size:14px;padding:6px 12px;transition:all .2s;white-space:nowrap}.toolbar-button:hover:not(:disabled){background-color:var(--color-btn-light-bg);border-color:var(--color-divider)}.toolbar-button:active:not(:disabled){background-color:#dee2e6}.toolbar-button.active{background-color:#4a90e2;border-color:#4a90e2;color:#fff}.toolbar-button:disabled{cursor:not-allowed;opacity:.5}.toolbar-divider{background-color:var(--color-divider);height:24px;width:1px}.toolbar-dropdown{position:relative}.toolbar-dropdown-menu{background-color:var(--color-card-bg);border:1px solid var(--color-card-border);border-radius:4px;box-shadow:0 2px 8px rgba(0,0,0,.15);left:0;margin-top:4px;max-height:200px;overflow-y:auto;position:absolute;top:100%;z-index:1000}.color-picker{display:grid;gap:4px;grid-template-columns:repeat(5,1fr);padding:8px;width:180px}.color-option{border:2px solid var(--color-card-border);border-radius:4px;cursor:pointer;height:28px;transition:transform .2s;width:28px}.color-option:hover{border-color:#4a90e2;transform:scale(1.1)}.font-size-picker{min-width:100px;padding:4px}.font-size-option{background:none;border:none;cursor:pointer;display:block;font-size:14px;padding:8px 12px;text-align:left;width:100%}.font-size-option:hover{background-color:#f8f9fa}.toolbar-color-swatch{border:2px solid var(--color-card-border);border-radius:4px;cursor:pointer;height:28px;padding:0;transition:border-color .2s;width:28px}.toolbar-color-swatch:hover:not(:disabled){border-color:#4a90e2}.toolbar-color-swatch:disabled{cursor:not-allowed;opacity:.5}.toolbar-input{border:1px solid #dee2e6;border-radius:4px;font-size:13px;padding:6px 8px;text-align:center;width:56px}.toolbar-input:disabled{cursor:not-allowed;opacity:.5}.align-icon{display:flex;flex-direction:column;gap:2px;height:12px;width:14px}.align-icon:after,.align-icon:before{background:currentColor;border-radius:1px;content:"";height:2px}.align-left:before{width:100%}.align-left:after{width:70%}.align-center:before{margin:0 auto;width:100%}.align-center:after{margin:0 auto;width:70%}.align-right:before{margin-left:auto;width:100%}.align-right:after{margin-left:auto;width:70%}.paragraph-block{word-wrap:break-word;min-height:1.5em;outline:none;white-space:pre-wrap}.paragraph-block:empty:before{color:#999;content:attr(data-placeholder);pointer-events:none}.heading-block{word-wrap:break-word;font-weight:700;outline:none;white-space:pre-wrap}.heading-block:empty:before{color:#999;content:attr(data-placeholder);font-weight:400;pointer-events:none}.list-block{list-style-position:inside}.list-item{margin-bottom:4px}.list-item-content{word-wrap:break-word;display:inline;outline:none}.list-item-content:focus{background-color:#f0f8ff}.list-item-content:empty:before{color:#999;content:"List item...";pointer-events:none}.image-block-wrapper{display:inline-block;max-width:100%;position:relative}.image-block{border-radius:4px;display:block;height:auto;max-width:100%}.image-block-input{background-color:#f5f5f5;border:2px dashed #ccc;border-radius:4px;padding:16px}.image-url-input{border:1px solid #ddd;border-radius:4px;font-size:14px;margin-bottom:8px;padding:8px 12px;width:100%}.image-url-input:focus{border-color:#4a90e2;outline:none}.image-block-actions{display:flex;gap:8px}.image-block-btn{background-color:#4a90e2;border:none;border-radius:4px;color:#fff;cursor:pointer;font-size:14px;padding:6px 12px}.image-block-btn:hover{background-color:#357abd}.image-edit-btn{background-color:rgba(0,0,0,.6);border:none;border-radius:4px;color:#fff;cursor:pointer;font-size:12px;opacity:0;padding:4px 8px;position:absolute;right:8px;top:8px;transition:opacity .2s}.image-block-wrapper:hover .image-edit-btn{opacity:1}.image-error{background-color:#fee;border-radius:4px;color:#c00;padding:16px;text-align:center}.youtube-block-wrapper{max-width:100%;position:relative}.youtube-embed{border-radius:4px;height:0;overflow:hidden;padding-bottom:56.25%;position:relative}.youtube-embed iframe{height:100%;left:0;position:absolute;top:0;width:100%}.youtube-block-input{background-color:#f5f5f5;border:2px dashed #ccc;border-radius:4px;padding:16px}.youtube-url-input{border:1px solid #ddd;border-radius:4px;font-size:14px;margin-bottom:8px;padding:8px 12px;width:100%}.youtube-url-input:focus{border-color:#4a90e2;outline:none}.youtube-block-actions{display:flex;gap:8px}.youtube-block-btn{background-color:#4a90e2;border:none;border-radius:4px;color:#fff;cursor:pointer;font-size:14px;padding:6px 12px}.youtube-block-btn:hover{background-color:#357abd}.youtube-edit-btn{background-color:#f5f5f5;border:1px solid #ddd;border-radius:4px;color:#333;cursor:pointer;font-size:12px;margin-top:8px;padding:6px 12px}.youtube-edit-btn:hover{background-color:#e8e8e8}.divider-block-wrapper{cursor:pointer}.divider-block{border:none;border-top:2px solid #ddd;width:100%}.divider-block-wrapper:hover .divider-block{border-top-color:#4a90e2}.evolution-editor{box-shadow:0 1px 2px 0 rgba(60,64,67,.3),0 1px 3px 1px rgba(60,64,67,.15);display:flex;flex-direction:column;height:100%;min-height:0}.editor-save-notification{background:#232b36;border-radius:6px;box-shadow:0 2px 16px 0 rgba(41,121,255,.1);color:#90caf9;font-size:.98rem;font-weight:500;opacity:.97;padding:6px 18px;pointer-events:none;position:absolute;right:24px;top:10px;transition:opacity .3s;z-index:10}.editor-branding{align-items:center;background:var(--color-brand-bg,#232b36);border-bottom:1px solid var(--color-divider,#1a2230);display:flex;flex-direction:column;justify-content:center;padding:1px 0 6px;position:relative}.editor-logo{color:var(--color-primary,#90caf9);font-family:Roboto Mono,Fira Mono,Consolas,Menlo,Monaco,monospace;font-size:1.45rem;font-weight:600;letter-spacing:.08em;text-align:center;text-shadow:0 1px 6px rgba(41,121,255,.08);text-transform:uppercase;user-select:none}.editor-subtitle{color:#b0b8c9;font-size:.85rem;margin-bottom:2px;margin-top:0;opacity:.85;text-align:center}.editor-subtitle a{color:var(--color-primary,#4a90e2);text-decoration:none;transition:text-decoration .2s}.editor-subtitle a:hover{text-decoration:underline}.toolbar-color-picker{background-color:#fff;border:1px solid #dee2e6;border-radius:4px;cursor:pointer;height:28px;padding:2px;transition:border-color .15s;width:28px}.toolbar-color-picker:hover{border-color:#4a90e2}.block-move-btn{align-items:center;background:none;border:none;border-radius:3px;color:#4a90e2;cursor:pointer;display:flex;font-size:18px;height:20px;line-height:1;padding:0 3px;transition:background .2s,color .2s}.block-move-btn:disabled{color:#ccc;cursor:not-allowed}.block-move-btn:hover:not(:disabled){background:#eaf3fb}.block-actions{align-items:center;display:none;gap:4px;position:absolute;right:-65px;top:50%;transform:translateY(-50%);z-index:1}.block-delete-button,.block-edit-button{background:none;border:none;border-radius:3px;color:#666;cursor:pointer;font-size:16px;padding:2px 4px;transition:background .2s,color .2s}.block-edit-button:hover{background:#eaf3fb;color:#4a90e2}.block-delete-button:hover{background:#fdeaea;color:#e24a4a}.block-left-controls{align-items:center;display:none;gap:6px;left:-90px;position:absolute;top:50%;transform:translateY(-50%);z-index:1}.block-actions:hover,.block-left-controls:hover,.editor-block-wrapper:hover .block-actions,.editor-block-wrapper:hover .block-left-controls,.editor-block:hover~.block-left-controls{display:flex}.block-tag-label{color:#999;display:block;font-family:monospace;font-size:11px;left:-50px;pointer-events:none;position:absolute;top:50%;transform:translateY(-50%);user-select:none;white-space:nowrap}.editor-stepper{align-items:stretch;background-color:var(--color-bg,#eef4fb);border-bottom:1px solid var(--color-divider,#d0dce8);display:flex;flex-direction:row;gap:0;justify-content:space-between;margin-top:12px}.step{align-items:center;display:flex;flex:1 1 0;flex-direction:column;padding:0 8px 10px;position:relative}.step-label{color:var(--color-primary,#4a90e2);font-size:13px;font-weight:600;margin-bottom:2px}.step-desc{color:var(--color-text,#555);font-size:11px;opacity:.85;text-align:center}.instruction-action{color:#4a90e2;font-weight:600;white-space:nowrap}.instruction-desc{color:var(--color-text,#555);white-space:nowrap}.editor-content{box-sizing:border-box;cursor:default;flex:1;margin:0;max-width:100%;overflow-x:auto;overflow-y:auto;padding:24px 80px 24px 120px;position:relative;width:100%}.editor-content:after{content:"";display:block;min-height:30vh}.editor-block-wrapper{box-sizing:border-box;margin-bottom:4px;max-width:100%;position:relative}.editor-block-wrapper:before{left:-100px;width:100px}.editor-block-wrapper:after,.editor-block-wrapper:before{bottom:0;content:"";pointer-events:auto;position:absolute;top:0}.editor-block-wrapper:after{right:-75px;width:75px}.editor-block{border:2px solid rgba(0,0,0,.07);border-radius:4px;cursor:text;padding:4px;transition:all .2s}.editor-block:hover{background-color:#f8f9fa;border-color:#e9ecef}.editor-block.focused{background-color:#f0f8ff;border-color:#4a90e2;box-shadow:0 0 0 3px rgba(74,144,226,.1)}.context-menu{background-color:#fff;border:1px solid #dee2e6;border-radius:6px;box-shadow:0 4px 12px rgba(0,0,0,.15);min-width:160px;padding:4px 0;position:absolute;z-index:1000}.context-menu-item{background:none;border:none;color:#333;cursor:pointer;display:block;font-size:14px;padding:8px 16px;text-align:left;width:100%}.context-menu-item:hover{background-color:#f0f8ff;color:#4a90e2}.style-modal-overlay{align-items:center;background-color:rgba(0,0,0,.35);bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:2000}.style-modal{background:#fff;border:1px solid rgba(0,0,0,.1);border-radius:6px;box-shadow:0 4px 24px rgba(0,0,0,.15);max-height:80vh;overflow-y:auto;width:440px}.style-modal-header{align-items:center;background-color:#f8f9fa;border-bottom:1px solid #dee2e6;border-radius:6px 6px 0 0;display:flex;justify-content:space-between;padding:14px 20px}.style-modal-header h3{color:#333;font-size:16px;font-weight:600;margin:0}.style-modal-close{background:none;border:none;border-radius:4px;color:#999;cursor:pointer;font-size:20px;line-height:1;padding:2px 6px;transition:all .15s}.style-modal-close:hover{background-color:rgba(0,0,0,.06);color:#333}.style-modal-body{padding:20px}.style-modal-section{padding:16px 0}.style-modal-section:first-child{padding-top:0}.style-modal-section:last-child{padding-bottom:0}.style-modal-divider{background:#dee2e6;border:none;display:block;height:1px;margin:4px 0;opacity:1;width:100%}.style-modal-section h4{color:#6c757d;font-size:12px;font-weight:600;letter-spacing:.6px;margin:0 0 12px;text-transform:uppercase}.style-modal-row{display:flex;flex-wrap:wrap;gap:10px}.style-modal-field{display:flex;flex:1;flex-direction:column;gap:5px;min-width:70px}.style-modal-field label{color:#888;font-size:11px;font-weight:500;letter-spacing:.3px;text-transform:uppercase}.style-modal-field input[type=number]{background-color:#fff;border:1px solid #dee2e6;border-radius:4px;box-sizing:border-box;font-size:13px;padding:7px 10px;transition:border-color .15s,box-shadow .15s;width:100%}.style-modal-field input[type=number]:focus{border-color:#4a90e2;box-shadow:0 0 0 3px rgba(74,144,226,.12);outline:none}.style-modal-field input[type=color]{background-color:#fff;border:1px solid #dee2e6;border-radius:4px;box-sizing:border-box;cursor:pointer;height:34px;padding:3px;transition:border-color .15s;width:100%}.style-modal-field input[type=color]:hover{border-color:#adb5bd}.style-modal-font-size{display:flex;gap:8px}.style-modal-font-size select{transition:border-color .15s,box-shadow .15s}.style-modal-font-size select:focus{border-color:#4a90e2;box-shadow:0 0 0 3px rgba(74,144,226,.12);outline:none}.style-modal-font-size select{background:#fff;border:1px solid #dee2e6;border-radius:4px;cursor:pointer;flex:1;font-size:13px;padding:6px 8px}.style-modal-font-size .style-modal-input-wrapper{flex:1}.style-modal-input-wrapper{align-items:center;display:flex;position:relative}.style-modal-input-wrapper input{padding-right:24px!important}.style-modal-suffix{color:#999;font-size:11px;pointer-events:none;position:absolute;right:8px}.evolution-editor.read-only .editor-content{overflow-x:hidden;padding:24px}.evolution-editor.read-only .editor-content:after{display:none}.evolution-editor.read-only .editor-block{border:none;cursor:default;padding:0}.evolution-editor.read-only .editor-block:hover{background-color:transparent;border-color:transparent}.evolution-editor.read-only .block-tag-label{display:none}
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@evolution-james/evolution-editor",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A modular, block-based rich text editor for React",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"module": "dist/index.esm.js",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "rollup -c",
|
|
12
|
+
"dev": "rollup -c -w"
|
|
13
|
+
},
|
|
14
|
+
"keywords": [
|
|
15
|
+
"react",
|
|
16
|
+
"editor",
|
|
17
|
+
"rich-text",
|
|
18
|
+
"wysiwyg"
|
|
19
|
+
],
|
|
20
|
+
"author": {
|
|
21
|
+
"name": "James Evolution (Evolution Coding Academy)",
|
|
22
|
+
"url": "https://github.com/james-evolution"
|
|
23
|
+
},
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"peerDependencies": {
|
|
26
|
+
"react": ">=16.8.0",
|
|
27
|
+
"react-dom": ">=16.8.0"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@babel/core": "^7.29.0",
|
|
31
|
+
"@babel/preset-react": "^7.28.5",
|
|
32
|
+
"@rollup/plugin-babel": "^6.1.0",
|
|
33
|
+
"@rollup/plugin-commonjs": "^25.0.0",
|
|
34
|
+
"@rollup/plugin-node-resolve": "^15.0.0",
|
|
35
|
+
"rollup": "^3.29.5",
|
|
36
|
+
"rollup-plugin-peer-deps-external": "^2.2.4",
|
|
37
|
+
"rollup-plugin-postcss": "^4.0.2"
|
|
38
|
+
},
|
|
39
|
+
"repository": {
|
|
40
|
+
"type": "git",
|
|
41
|
+
"url": "https://github.com/james-evolution/EvolutionEditor"
|
|
42
|
+
}
|
|
43
|
+
}
|