neiki-editor 2.9.1 → 2.9.2

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.
@@ -1 +1 @@
1
- !function(e){"use strict";!function(){if(document.getElementById("neiki-editor-styles"))return;const e=document.createElement("style");e.id="neiki-editor-styles",e.textContent=".neiki-checkbox,.neiki-find-replace-option input{accent-color:var(--neiki-accent-color)}.neiki-modal,.neiki-modal-overlay.show .neiki-modal{animation:.2s neiki-modal-in}:root{--neiki-bg-primary:#ffffff;--neiki-bg-secondary:#f8f9fa;--neiki-bg-tertiary:#e9ecef;--neiki-bg-hover:#dee2e6;--neiki-bg-active:#ced4da;--neiki-border-color:#dee2e6;--neiki-border-color-dark:#adb5bd;--neiki-text-primary:#212529;--neiki-text-secondary:#495057;--neiki-text-muted:#6c757d;--neiki-accent-color:#0d6efd;--neiki-accent-hover:#0b5ed7;--neiki-danger-color:#dc3545;--neiki-success-color:#198754;--neiki-shadow-sm:0 1px 2px rgba(0, 0, 0, 0.05);--neiki-shadow-md:0 4px 6px rgba(0, 0, 0, 0.1);--neiki-shadow-lg:0 10px 15px rgba(0, 0, 0, 0.1);--neiki-editor-bg:#ffffff;--neiki-toolbar-bg:#f8f9fa;--neiki-statusbar-bg:#f8f9fa;--neiki-modal-overlay:rgba(0, 0, 0, 0.5);--neiki-scrollbar-thumb:#ced4da;--neiki-scrollbar-track:#f8f9fa;--neiki-selection-bg:#b3d7ff;--neiki-highlight-color:#fff3cd;--neiki-table-border:#dee2e6}.neiki-editor.neiki-dark{--neiki-bg-primary:#1e1e1e;--neiki-bg-secondary:#252526;--neiki-bg-tertiary:#2d2d30;--neiki-bg-hover:#3e3e42;--neiki-bg-active:#505050;--neiki-border-color:#3e3e42;--neiki-border-color-dark:#505050;--neiki-text-primary:#d4d4d4;--neiki-text-secondary:#a0a0a0;--neiki-text-muted:#808080;--neiki-accent-color:#4fc3f7;--neiki-accent-hover:#29b6f6;--neiki-danger-color:#f44336;--neiki-success-color:#4caf50;--neiki-shadow-sm:0 1px 2px rgba(0, 0, 0, 0.2);--neiki-shadow-md:0 4px 6px rgba(0, 0, 0, 0.3);--neiki-shadow-lg:0 10px 15px rgba(0, 0, 0, 0.4);--neiki-editor-bg:#1e1e1e;--neiki-toolbar-bg:#252526;--neiki-statusbar-bg:#252526;--neiki-modal-overlay:rgba(0, 0, 0, 0.7);--neiki-scrollbar-thumb:#505050;--neiki-scrollbar-track:#2d2d30;--neiki-selection-bg:#264f78;--neiki-highlight-color:#5c4d00;--neiki-table-border:#3e3e42}.neiki-editor{display:flex;flex-direction:column;width:100%;height:100%;min-height:400px;background:var(--neiki-bg-primary);border:1px solid var(--neiki-border-color);border-radius:8px;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:14px;color:var(--neiki-text-primary);box-shadow:var(--neiki-shadow-md)}.neiki-editor *{box-sizing:border-box}.neiki-editor.neiki-fullscreen{position:fixed!important;top:0!important;left:0!important;right:0!important;bottom:0!important;width:100vw!important;height:100vh!important;z-index:999999!important;border-radius:0!important;border:none!important}.neiki-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:2px;padding:6px 8px;background:var(--neiki-toolbar-bg);border-bottom:1px solid var(--neiki-border-color);min-height:44px}.neiki-toolbar-group{display:inline-flex;align-items:center;gap:2px;padding:0 4px;flex-wrap:nowrap}.neiki-toolbar-group:not(:last-child){border-right:1px solid var(--neiki-border-color);padding-right:8px;margin-right:4px}.neiki-toolbar-divider{width:1px;height:24px;background:var(--neiki-border-color);margin:0 4px}.neiki-btn,.neiki-toolbar-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;background:0 0;border:1px solid transparent;border-radius:4px;cursor:pointer;color:var(--neiki-text-secondary);transition:.15s;position:relative}.neiki-btn:hover,.neiki-fontsize-btn:hover,.neiki-modal-close:hover,.neiki-preview-close:hover,.neiki-toolbar-btn:hover{background:var(--neiki-bg-hover);color:var(--neiki-text-primary)}.neiki-btn:active,.neiki-floating-btn:active,.neiki-toolbar-btn:active{background:var(--neiki-bg-active)}.neiki-btn.active,.neiki-toolbar-btn.active{background:var(--neiki-bg-active);color:var(--neiki-accent-color);border-color:var(--neiki-accent-color)}.neiki-btn:disabled,.neiki-toolbar-btn:disabled{opacity:.4;cursor:not-allowed}.neiki-btn svg,.neiki-toolbar-btn svg{width:18px;height:18px;fill:currentColor;pointer-events:none}.neiki-select{height:32px;padding:0 28px 0 10px;background:var(--neiki-bg-primary);border:1px solid var(--neiki-border-color);border-radius:4px;color:var(--neiki-text-primary);font-size:13px;cursor:pointer;appearance:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%236c757d' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right 8px center;min-width:100px}.neiki-select:hover{border-color:var(--neiki-border-color-dark)}.neiki-select:focus{outline:0;border-color:var(--neiki-accent-color);box-shadow:0 0 0 2px rgba(13,110,253,.15)}.neiki-color-custom,.neiki-statusbar{border-top:1px solid var(--neiki-border-color)}.neiki-color-btn{position:relative;width:36px}.neiki-color-btn .neiki-color-indicator{position:absolute;bottom:4px;left:50%;transform:translateX(-50%);width:16px;height:3px;border-radius:1px;background:currentColor}.neiki-checkbox-wrapper{display:flex;align-items:center;gap:6px;padding:0 8px;height:32px;font-size:12px;color:var(--neiki-text-secondary);cursor:pointer;user-select:none}.neiki-checkbox{width:16px;height:16px;cursor:pointer}.neiki-content-wrapper,.neiki-editor-wrapper{flex:1;display:flex;flex-direction:column;overflow:hidden;position:relative}.neiki-content{flex:1;padding:20px 24px;background:var(--neiki-editor-bg);overflow-y:auto;outline:0;line-height:1.6;color:var(--neiki-text-primary);min-height:200px}.neiki-code-view-textarea:focus,.neiki-content:focus{outline:0}.neiki-content:empty::before{content:attr(data-placeholder);color:var(--neiki-text-muted);font-style:italic;pointer-events:none}.neiki-content.neiki-drag-over{border:2px dashed var(--neiki-accent-color);background:rgba(13,110,253,.05)}.neiki-content.neiki-drag-over::after{content:'Drop images here';position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:var(--neiki-accent-color);font-weight:600;font-size:16px;pointer-events:none;z-index:10}.neiki-editor.neiki-disabled{opacity:.6;pointer-events:none}.neiki-content::-webkit-scrollbar{width:10px}.neiki-content::-webkit-scrollbar-track{background:var(--neiki-scrollbar-track)}.neiki-content::-webkit-scrollbar-thumb{background:var(--neiki-scrollbar-thumb);border-radius:5px}.neiki-content::-webkit-scrollbar-thumb:hover{background:var(--neiki-border-color-dark)}.neiki-content p{margin:0 0 1em}.neiki-content h1{font-size:2em;font-weight:700;margin:0 0 .5em}.neiki-content h2{font-size:1.5em;font-weight:600;margin:0 0 .5em}.neiki-content h3{font-size:1.25em;font-weight:600;margin:0 0 .5em}.neiki-content h4{font-size:1.1em;font-weight:600;margin:0 0 .5em}.neiki-content h5{font-size:1em;font-weight:600;margin:0 0 .5em}.neiki-content h6{font-size:.9em;font-weight:600;margin:0 0 .5em}.neiki-content ol,.neiki-content ul{margin:0 0 1em;padding-left:2em}.neiki-content li{margin-bottom:.25em}.neiki-content blockquote{margin:0 0 1em;padding:10px 20px;border-left:4px solid var(--neiki-accent-color);background:var(--neiki-bg-secondary);font-style:italic}.neiki-content code,.neiki-content pre{background:var(--neiki-bg-tertiary);font-family:Consolas,Monaco,monospace}.neiki-content pre{margin:0 0 1em;padding:16px;border-radius:4px;overflow-x:auto;font-size:13px}.neiki-content code{padding:2px 6px;border-radius:3px;font-size:.9em}.neiki-content a{color:var(--neiki-accent-color);text-decoration:underline}.neiki-content a:hover{color:var(--neiki-accent-hover)}.neiki-content img{max-width:100%;height:auto;border-radius:4px;cursor:pointer}.neiki-content img.neiki-selected{outline:2px solid var(--neiki-accent-color);outline-offset:2px}.neiki-highlight{background:var(--neiki-highlight-color);padding:1px 0}.neiki-content table,.neiki-table{width:100%;border-collapse:collapse;margin:1em 0;table-layout:fixed}.neiki-content table td,.neiki-content table th{border:1px solid var(--neiki-table-border);padding:8px 12px;min-width:50px;vertical-align:top;position:relative}.neiki-content table th{background:var(--neiki-bg-secondary);font-weight:600}.neiki-btn-secondary:hover,.neiki-button-secondary:hover,.neiki-content table td:hover,.neiki-content table th:hover,.neiki-context-item:hover,.neiki-context-menu-item:hover,.neiki-dropdown-item:hover,.neiki-fontsize-dropdown-item:hover,.neiki-special-char-item:hover{background:var(--neiki-bg-hover)}.neiki-content table td.neiki-cell-selected,.neiki-content table th.neiki-cell-selected{background:var(--neiki-selection-bg)}.neiki-table-resize-handle{position:absolute;top:0;right:-3px;width:6px;height:100%;cursor:col-resize;z-index:10}.neiki-table-resize-handle:hover{background:var(--neiki-accent-color)}.neiki-statusbar{display:flex;justify-content:space-between;align-items:center;padding:6px 12px;background:var(--neiki-statusbar-bg);font-size:12px;color:var(--neiki-text-muted)}.neiki-statusbar-left,.neiki-statusbar-right{display:flex;align-items:center;gap:16px}.neiki-statusbar-item{display:flex;align-items:center;gap:4px}.neiki-statusbar-block{font-family:Consolas,Monaco,monospace;font-size:11px;padding:2px 6px;background:var(--neiki-bg-tertiary);border-radius:3px;color:var(--neiki-accent-color);font-weight:600;border:1px solid var(--neiki-border-color)}.neiki-color-picker,.neiki-dropdown{position:absolute;top:100%;left:0;z-index:1000;border:1px solid var(--neiki-border-color);box-shadow:var(--neiki-shadow-lg)}.neiki-dropdown{min-width:180px;background:var(--neiki-bg-primary);border-radius:6px;padding:4px;margin-top:4px}.neiki-dropdown-item{display:flex;align-items:center;gap:6px;padding:7px 10px;border-radius:4px;cursor:pointer;color:var(--neiki-text-primary);font-size:13px;transition:background .1s}.neiki-dropdown-item.active{background:var(--neiki-bg-active);color:var(--neiki-accent-color)}.neiki-context-divider,.neiki-context-menu-divider,.neiki-dropdown-divider{height:1px;background:var(--neiki-border-color);margin:4px 0}.neiki-color-picker{background:var(--neiki-bg-primary);border-radius:8px;padding:8px;margin-top:4px;display:flex;flex-direction:column;gap:6px}.neiki-color-grid{display:grid;grid-template-columns:repeat(10,1fr);gap:2px}.neiki-color-custom{display:flex;align-items:center;gap:6px}.neiki-color-custom-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:28px;height:28px;border:1px solid var(--neiki-border-color);border-radius:4px;padding:2px;cursor:pointer;background:0 0}.neiki-color-custom-input::-webkit-color-swatch-wrapper{padding:0}.neiki-color-custom-input::-webkit-color-swatch{border:none;border-radius:2px}.neiki-color-custom-input::-moz-color-swatch{border:none;border-radius:2px}.neiki-color-hex-input{flex:1;height:28px;padding:0 8px;border:1px solid var(--neiki-border-color);border-radius:4px;font-size:12px;font-family:monospace;background:var(--neiki-bg-secondary);color:var(--neiki-text-primary);outline:0}.neiki-color-hex-input:focus{border-color:var(--neiki-accent-color);box-shadow:0 0 0 2px rgba(13,110,253,.15)}.neiki-color-apply-btn{height:28px;padding:0 10px;border:none;border-radius:4px;font-size:12px;font-weight:500;background:var(--neiki-accent-color);color:#fff;cursor:pointer;transition:background .15s}.neiki-emoji-picker,.neiki-special-picker{max-width:calc(100vw - 16px);overflow-y:auto;background:var(--neiki-bg-primary);padding:8px;margin-top:4px;position:absolute;top:100%;z-index:1000;box-shadow:var(--neiki-shadow-lg);left:0}.neiki-btn-primary:hover,.neiki-button-primary:hover,.neiki-color-apply-btn:hover{background:var(--neiki-accent-hover)}.neiki-color-swatch{width:22px;height:22px;border-radius:3px;cursor:pointer;border:1px solid var(--neiki-border-color);transition:transform .1s}.neiki-color-swatch:hover{transform:scale(1.2);z-index:1}.neiki-color-swatch.neiki-color-reset{background:#fff;position:relative;overflow:hidden;border:1px solid #ccc}.neiki-color-preset.active,.neiki-special-item:hover{border-color:var(--neiki-accent-color)}.neiki-color-swatch.neiki-color-reset::after{content:'';position:absolute;top:50%;left:-2px;right:-2px;height:2px;background:#e53935;transform:rotate(-45deg);transform-origin:center;pointer-events:none}.neiki-color-picker-label{font-size:11px;font-weight:600;color:var(--neiki-text-muted);text-transform:uppercase;margin-bottom:8px}.neiki-emoji-item,.neiki-special-item{align-items:center;font-size:18px;cursor:pointer}.neiki-emoji-picker{width:280px;max-height:250px;border:1px solid var(--neiki-border-color);border-radius:8px;display:grid;grid-template-columns:repeat(10,1fr);gap:2px}.neiki-emoji-item{display:flex;justify-content:center;width:24px;height:24px;border-radius:4px;transition:background .15s,transform .1s}.neiki-emoji-item:hover{background:var(--neiki-bg-hover);transform:scale(1.2)}.neiki-special-picker{width:320px;max-height:280px;border:1px solid var(--neiki-border-color);border-radius:8px;display:grid;grid-template-columns:repeat(8,1fr);gap:4px}.neiki-special-item{display:flex;justify-content:center;width:32px;height:32px;border-radius:4px;border:1px solid var(--neiki-border-color);background:var(--neiki-bg-secondary);transition:.15s}.neiki-special-item:hover{background:var(--neiki-accent-color);color:#fff;transform:scale(1.1)}.neiki-highlight-find{background:#ffeb3b;padding:1px 0;border-radius:2px}.neiki-highlight-current{background:#ff9800;outline:#e65100 solid 2px}.neiki-color-presets{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;margin-bottom:12px}.neiki-color-preset{width:32px;height:32px;border-radius:4px;border:2px solid transparent;cursor:pointer;transition:transform .1s,border-color .1s}.neiki-color-preset:hover{transform:scale(1.1)}.neiki-img-size-label,[data-tooltip]::after{transform:translateX(-50%);white-space:nowrap;pointer-events:none}.neiki-color-preset.neiki-color-reset{background:linear-gradient(45deg,#fff 45%,red 45%,red 55%,#fff 55%);border:1px solid var(--neiki-border-color)}.neiki-color-custom{display:flex;align-items:center;gap:8px;padding-top:8px;border-top:1px solid var(--neiki-border-color)}.neiki-color-custom input[type=color]{width:40px;height:32px;padding:0;border:1px solid var(--neiki-border-color);border-radius:4px;cursor:pointer}.neiki-color-custom input[type=text]{flex:1;height:32px;padding:0 8px;border:1px solid var(--neiki-border-color);border-radius:4px;background:var(--neiki-bg-primary);color:var(--neiki-text-primary);font-size:12px;font-family:monospace}.neiki-table-picker,.neiki-table-picker-cell{border:1px solid var(--neiki-border-color);background:var(--neiki-bg-primary)}.neiki-table-picker{position:absolute;top:100%;left:0;z-index:1000;border-radius:8px;box-shadow:var(--neiki-shadow-lg);padding:12px;display:none}.neiki-context-menu.show,.neiki-find-replace.show,.neiki-fontsize-dropdown.show,.neiki-table-picker.show{display:block}.neiki-table-picker-label{font-size:12px;color:var(--neiki-text-secondary);margin-bottom:8px;text-align:center}.neiki-dark .neiki-modal h3,.neiki-dark .neiki-modal-header h3,.neiki-modal-title{color:var(--neiki-text-primary)}.neiki-table-picker-grid{display:grid;grid-template-columns:repeat(10,20px);gap:2px}.neiki-table-picker-cell{width:20px;height:20px;border-radius:2px;cursor:pointer;transition:background .1s}.neiki-table-picker-cell.active,.neiki-table-picker-cell:hover{background:var(--neiki-accent-color);border-color:var(--neiki-accent-color)}.neiki-special-chars{position:absolute;top:100%;left:0;z-index:1000;width:280px;max-height:300px;background:var(--neiki-bg-primary);border:1px solid var(--neiki-border-color);border-radius:8px;box-shadow:var(--neiki-shadow-lg);display:none;overflow:hidden}.neiki-special-chars.show{display:flex;flex-direction:column}.neiki-special-chars-grid{display:grid;grid-template-columns:repeat(10,1fr);gap:2px;padding:8px;overflow-y:auto}.neiki-special-char-item{display:flex;align-items:center;justify-content:center;width:24px;height:24px;font-size:16px;border-radius:4px;cursor:pointer;transition:background .1s}.neiki-modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:var(--neiki-modal-overlay);z-index:10000;display:flex;align-items:center;justify-content:center;opacity:0;visibility:hidden;transition:opacity .2s,visibility .2s}.neiki-modal-overlay.active,[data-tooltip]:hover::after{opacity:1;visibility:visible}.neiki-modal{background:var(--neiki-bg-primary);border-radius:12px;box-shadow:var(--neiki-shadow-lg);width:100%;max-width:440px;max-height:90vh;overflow:hidden}.neiki-modal-wide{max-width:520px}.neiki-modal-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--neiki-border-color)}.neiki-modal-title{font-size:16px;font-weight:600;margin:0}.neiki-modal-close,.neiki-preview-close{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:0 0;border:none;border-radius:4px;cursor:pointer;color:var(--neiki-text-muted);transition:background .15s}.neiki-modal-body{padding:20px;overflow-y:auto}.neiki-modal h3,.neiki-modal-header h3{color:#000;margin:0}.neiki-modal-footer{display:flex;justify-content:flex-end;gap:10px;padding:16px 20px;border-top:1px solid var(--neiki-border-color)}.neiki-modal-footer .neiki-btn{width:auto;height:38px;padding:0 16px;font-size:14px;font-weight:500;border-radius:6px}.neiki-form-divider::after,.neiki-form-divider::before{content:'';height:1px;background:var(--neiki-border-color)}.neiki-form-group{margin-bottom:16px}.neiki-find-replace-row:last-child,.neiki-form-group:last-child{margin-bottom:0}.neiki-form-group label,.neiki-form-label{display:block;margin-bottom:6px;font-size:13px;font-weight:500;color:var(--neiki-text-secondary)}.neiki-form-input,.neiki-form-textarea,.neiki-input{width:100%;background:var(--neiki-bg-primary);color:var(--neiki-text-primary);font-size:14px;transition:border-color .15s}.neiki-form-input,.neiki-input{height:40px;padding:0 12px;border:1px solid var(--neiki-border-color);border-radius:6px}.neiki-find-replace,.neiki-form-textarea{border:1px solid var(--neiki-border-color)}.neiki-form-input:focus,.neiki-form-textarea:focus,.neiki-input:focus{outline:0;border-color:var(--neiki-accent-color);box-shadow:0 0 0 3px rgba(13,110,253,.15)}.neiki-form-input::placeholder,.neiki-input::placeholder{color:var(--neiki-text-muted)}.neiki-input[type=file]{display:flex;align-items:center;padding:0 12px;line-height:40px;cursor:pointer}.neiki-form-row{display:flex;gap:16px}.neiki-form-divider{display:flex;align-items:center;margin:16px 0;text-align:center;position:relative}.neiki-form-divider::before{flex:1;margin-right:12px}.neiki-form-divider::after{flex:1;margin-left:12px}.neiki-form-divider span{color:var(--neiki-text-muted);font-size:12px;font-weight:500;text-transform:uppercase}.neiki-form-textarea{min-height:120px;padding:12px;border-radius:6px;font-family:inherit;resize:vertical}.neiki-btn-primary,.neiki-btn-secondary,.neiki-button{display:inline-flex;align-items:center;height:38px;padding:0 16px;font-size:14px;transition:.15s;cursor:pointer;font-weight:500}.neiki-button{justify-content:center;gap:6px;border:1px solid transparent;border-radius:6px}.neiki-btn-primary,.neiki-button-primary{background:var(--neiki-accent-color);color:#fff}.neiki-btn-secondary,.neiki-button-secondary{background:var(--neiki-bg-secondary);color:var(--neiki-text-primary);border-color:var(--neiki-border-color)}.neiki-btn-primary,.neiki-btn-secondary{justify-content:center;border:1px solid transparent;border-radius:6px}.neiki-btn-secondary{border-color:var(--neiki-border-color)}.neiki-button-danger{background:var(--neiki-danger-color);color:#fff}.neiki-code-view,.neiki-find-replace,.neiki-find-replace-input{background:var(--neiki-bg-primary)}.neiki-button-danger:hover{opacity:.9}.neiki-find-replace{position:absolute;top:0;right:0;z-index:100;width:360px;border-radius:0 0 0 8px;box-shadow:var(--neiki-shadow-lg);display:none}.neiki-find-replace-header{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-bottom:1px solid var(--neiki-border-color)}.neiki-code-view-title,.neiki-find-replace-title{font-size:13px;font-weight:600;color:var(--neiki-text-primary)}.neiki-find-replace-body{padding:12px}.neiki-find-replace-row{display:flex;gap:8px;margin-bottom:10px}.neiki-find-replace-input{flex:1;height:32px;padding:0 10px;border:1px solid var(--neiki-border-color);border-radius:4px;color:var(--neiki-text-primary);font-size:13px}.neiki-find-replace-input:focus{outline:0;border-color:var(--neiki-accent-color)}.neiki-find-replace-options{display:flex;align-items:center;gap:12px;margin-bottom:10px}.neiki-find-replace-option{display:flex;align-items:center;gap:4px;font-size:12px;color:var(--neiki-text-secondary);cursor:pointer}.neiki-find-replace-actions{display:flex;gap:6px;flex-wrap:wrap}.neiki-find-replace-btn{height:28px;padding:0 10px;font-size:12px;border-radius:4px}.neiki-find-replace-count{font-size:12px;color:var(--neiki-text-muted);margin-left:auto}.neiki-code-view{position:absolute;top:0;left:0;right:0;bottom:0;z-index:50;display:none;flex-direction:column}.neiki-code-view.show,.neiki-drop-overlay.show{display:flex}.neiki-code-view-header{display:flex;align-items:center;justify-content:space-between;padding:8px 16px;background:var(--neiki-bg-secondary);border-bottom:1px solid var(--neiki-border-color);flex-shrink:0}.neiki-code-view-textarea{flex:1;width:100%;padding:16px;border:none;background:var(--neiki-bg-primary);color:var(--neiki-text-primary);font-family:Consolas,Monaco,'Courier New',monospace;font-size:13px;line-height:1.5;resize:none}.neiki-code-view-apply{width:auto!important;padding:0 12px!important;display:inline-flex;align-items:center;gap:4px;height:30px;font-size:12px;background:var(--neiki-accent-color)!important;color:#fff!important;border-radius:5px}.neiki-context-menu,.neiki-floating-btn,.neiki-floating-toolbar{background:var(--neiki-bg-primary)}.neiki-code-view-apply:hover{background:var(--neiki-accent-hover)!important;color:#fff!important}.neiki-code-view-apply svg{width:14px!important;height:14px!important}.neiki-context-menu{position:fixed;z-index:10001;min-width:180px;border:1px solid var(--neiki-border-color);border-radius:8px;box-shadow:var(--neiki-shadow-lg);padding:4px;display:none}.neiki-context-item,.neiki-context-menu-item{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:4px;cursor:pointer;color:var(--neiki-text-primary);font-size:13px;transition:background .1s}.neiki-context-item.neiki-context-danger,.neiki-context-menu-item.danger{color:var(--neiki-danger-color)}.neiki-context-item svg,.neiki-context-menu-item svg,.neiki-dropdown-item-icon svg,.neiki-floating-btn svg{width:16px;height:16px;fill:currentColor}.neiki-floating-toolbar{position:absolute;z-index:1000;display:none;border:1px solid var(--neiki-border-color);border-radius:8px;box-shadow:var(--neiki-shadow-lg);padding:4px}.neiki-floating-toolbar.show{display:flex;align-items:center;gap:2px}.neiki-floating-btn{width:32px;height:32px;border:none;color:var(--neiki-text-primary);border-radius:6px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:.15s}.neiki-floating-btn:hover{background:var(--neiki-bg-hover);color:var(--neiki-accent-color)}.neiki-floating-toolbar .neiki-btn{width:28px;height:28px}.neiki-chevron svg,.neiki-floating-toolbar .neiki-btn svg{width:14px;height:14px}.neiki-floating-divider{width:1px;height:20px;background:var(--neiki-border-color);margin:0 2px}.neiki-floating-move-btn svg{width:16px;height:16px}.neiki-more-btn,[data-tooltip]{position:relative}[data-tooltip]::after{content:attr(data-tooltip);position:absolute;bottom:100%;left:50%;padding:6px 10px;background:var(--neiki-text-primary);color:var(--neiki-bg-primary);font-size:11px;font-weight:500;border-radius:4px;opacity:0;visibility:hidden;transition:opacity .15s,visibility .15s;z-index:10002;margin-bottom:6px}.neiki-drop-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(13,110,253,.1);border:3px dashed var(--neiki-accent-color);border-radius:8px;display:none;align-items:center;justify-content:center;z-index:100;pointer-events:none}.neiki-drop-overlay-text{font-size:18px;font-weight:600;color:var(--neiki-accent-color)}.neiki-img-resizable{display:inline-block;position:relative;outline:2px solid var(--neiki-accent-color);outline-offset:2px;border-radius:4px;line-height:0}.neiki-img-resizable img{display:block;max-width:100%}.neiki-img-resize-handle{position:absolute;width:12px;height:12px;background:var(--neiki-accent-color);border:2px solid #fff;border-radius:2px;z-index:10;box-shadow:0 1px 3px rgba(0,0,0,.3)}.neiki-img-resize-handle.nw{top:-6px;left:-6px;cursor:nw-resize}.neiki-img-resize-handle.ne{top:-6px;right:-6px;cursor:ne-resize}.neiki-img-resize-handle.sw{bottom:-6px;left:-6px;cursor:sw-resize}.neiki-img-resize-handle.se{bottom:-6px;right:-6px;cursor:se-resize}.neiki-img-size-label{position:absolute;bottom:-32px;left:50%;background:var(--neiki-text-primary);color:var(--neiki-bg-primary);font-size:13px;line-height:1.4;font-weight:600;padding:4px 12px;border-radius:6px;z-index:10;opacity:.9}@media (pointer:coarse){.neiki-img-resize-handle{width:20px;height:20px}.neiki-img-resize-handle.nw{top:-10px;left:-10px}.neiki-img-resize-handle.ne{top:-10px;right:-10px}.neiki-img-resize-handle.sw{bottom:-10px;left:-10px}.neiki-img-resize-handle.se{bottom:-10px;right:-10px}}.neiki-table-col-resize-handle{position:absolute;width:6px;cursor:col-resize;z-index:10;background:0 0;transition:background .1s}.neiki-table-col-resize-handle:active,.neiki-table-col-resize-handle:hover{background:var(--neiki-accent-color);opacity:.6;border-radius:3px}.neiki-block-grip{position:absolute;width:22px;height:22px;display:flex;align-items:center;justify-content:center;cursor:grab;color:var(--neiki-text-muted);opacity:0;transition:opacity .15s,color .15s;border-radius:4px;z-index:5;user-select:none}.neiki-content:hover .neiki-block-grip{opacity:.5}.neiki-block-grip:hover{opacity:1!important;color:var(--neiki-text-primary);background:var(--neiki-bg-hover)}.neiki-block-grip:active{cursor:grabbing}.neiki-block-grip svg{width:14px;height:14px;fill:currentColor;pointer-events:none}.neiki-block-ghost{position:fixed;z-index:100000;pointer-events:none;opacity:.7;background:var(--neiki-bg-primary);border:2px solid var(--neiki-accent-color);border-radius:6px;padding:8px 12px;box-shadow:var(--neiki-shadow-lg);max-height:120px;overflow:hidden}.neiki-block-placeholder{border:2px dashed var(--neiki-accent-color);border-radius:6px;background:rgba(13,110,253,.05);margin:2px 0;transition:height .15s}@media print{.neiki-content,.neiki-editor-wrapper{overflow:visible!important}.neiki-editor{border:none!important;box-shadow:none!important}.neiki-block-grip,.neiki-code-view-header,.neiki-find-replace,.neiki-floating-toolbar,.neiki-img-resize-handle,.neiki-img-size-label,.neiki-statusbar,.neiki-table-col-resize-handle,.neiki-toolbar{display:none!important}.neiki-content{padding:0!important}}@media (max-width:768px){.neiki-toolbar{padding:4px;gap:1px}.neiki-toolbar-group{padding:0 2px}.neiki-toolbar-group:not(:last-child){padding-right:4px;margin-right:2px}.neiki-btn{width:28px;height:28px}.neiki-btn svg{width:16px;height:16px}.neiki-select{height:28px;min-width:80px;font-size:12px;padding:0 24px 0 8px}.neiki-content{padding:12px 16px}.neiki-statusbar{padding:4px 8px;font-size:11px}.neiki-modal{width:95%;max-width:none;margin:10px}.neiki-find-replace{width:100%;border-radius:0}.neiki-checkbox-wrapper{padding:0 4px;font-size:11px}.neiki-color-picker{left:auto;right:0}}@media (max-width:480px){.neiki-toolbar-group:not(:last-child){border-right:none;padding-right:2px;margin-right:0}.neiki-select{min-width:60px}.neiki-statusbar-left,.neiki-statusbar-right{gap:8px}}@keyframes neiki-fade-in{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.neiki-color-picker.show,.neiki-dropdown.show,.neiki-emoji-picker.show,.neiki-special-chars.show,.neiki-table-picker.show{animation:.15s neiki-fade-in}@keyframes neiki-modal-in{from{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.neiki-fontsize-widget{display:inline-flex;align-items:center;position:relative;height:32px;border:1px solid var(--neiki-border-color);border-radius:4px;overflow:visible;background:var(--neiki-bg-primary)}.neiki-fontsize-btn{display:flex;align-items:center;justify-content:center;width:26px;height:30px;background:0 0;border:none;cursor:pointer;color:var(--neiki-text-secondary);transition:background .15s,color .15s;padding:0}.neiki-fontsize-dropdown-item,.neiki-fontsize-input{color:var(--neiki-text-primary);text-align:center;font-size:13px}.neiki-fontsize-input{width:38px;height:30px;border:none;border-left:1px solid var(--neiki-border-color);border-right:1px solid var(--neiki-border-color);background:var(--neiki-bg-primary);outline:0;-moz-appearance:textfield;appearance:textfield;padding:0}.neiki-fontsize-dropdown,.neiki-insert-dropdown{left:0;border:1px solid var(--neiki-border-color)}.neiki-fontsize-input::-webkit-inner-spin-button,.neiki-fontsize-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.neiki-fontsize-dropdown{display:none;position:absolute;top:100%;z-index:1000;min-width:70px;max-height:240px;overflow-y:auto;background:var(--neiki-bg-primary);border-radius:6px;box-shadow:var(--neiki-shadow-lg);padding:4px;margin-top:4px}.neiki-fontsize-dropdown-item{padding:6px 12px;cursor:pointer;border-radius:4px;transition:background .1s}.neiki-insert-dropdown-btn{width:auto!important;padding:0 8px!important;gap:4px;font-size:13px;font-weight:500}.neiki-insert-label{font-size:13px;pointer-events:none}.neiki-chevron{display:inline-flex;pointer-events:none}.neiki-insert-dropdown,.neiki-more-dropdown{display:none;position:absolute;top:100%;z-index:1000;background:var(--neiki-bg-primary);box-shadow:var(--neiki-shadow-lg);padding:4px;margin-top:4px}.neiki-insert-dropdown{min-width:160px;max-width:calc(100vw - 16px);border-radius:6px}.neiki-insert-dropdown.show,.neiki-more-dropdown.show{display:block;animation:.15s neiki-fade-in}.neiki-more-dropdown{right:0;min-width:140px;max-width:170px;border:1px solid var(--neiki-border-color);border-radius:6px}.neiki-lang-cs .neiki-more-dropdown{min-width:165px}.neiki-dropdown-item-icon{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;flex-shrink:0}.neiki-dropdown-item-danger{color:var(--neiki-danger-color)!important}.neiki-dropdown-item-danger:hover{background:rgba(220,53,69,.1)}.neiki-autosave-badge{font-size:12px;font-weight:600;color:var(--neiki-text-muted);padding:0 4px}.neiki-autosave-badge.active{color:var(--neiki-success-color)}.neiki-preview-overlay{position:fixed;inset:0;background:rgba(0,0,0,.6);z-index:100000;display:flex;align-items:center;justify-content:center;padding:30px;animation:.2s neiki-fade-in}.neiki-preview-modal{background:var(--neiki-bg-primary);border-radius:12px;width:100%;max-width:900px;max-height:90vh;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 25px 60px rgba(0,0,0,.3);animation:.2s neiki-modal-in}.neiki-preview-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;background:var(--neiki-bg-secondary);border-bottom:1px solid var(--neiki-border-color);font-weight:600;font-size:14px;color:var(--neiki-text-primary)}.neiki-preview-close svg{width:18px;height:18px;fill:currentColor}.neiki-preview-body{flex:1;overflow:auto;padding:30px;color:var(--neiki-text-primary);font-size:15px;line-height:1.7}.neiki-preview-body img{max-width:100%}.neiki-preview-body table{border-collapse:collapse;width:100%}.neiki-preview-body table td,.neiki-preview-body table th{border:1px solid var(--neiki-border-color);padding:8px 12px}.neiki-statusbar-autosave{font-style:italic;color:var(--neiki-success-color);font-size:11px}",document.head.appendChild(e)}();const t={en:{"toolbar.undo":"Undo (Ctrl+Z)","toolbar.redo":"Redo (Ctrl+Y)","toolbar.bold":"Bold (Ctrl+B)","toolbar.italic":"Italic (Ctrl+I)","toolbar.underline":"Underline (Ctrl+U)","toolbar.strikethrough":"Strikethrough","toolbar.heading":"Heading","toolbar.fontSize":"Font Size","toolbar.fontFamily":"Font Family","toolbar.foreColor":"Text Color","toolbar.backColor":"Background Color","toolbar.alignLeft":"Align Left","toolbar.alignCenter":"Align Center","toolbar.alignRight":"Align Right","toolbar.alignJustify":"Justify","toolbar.bulletList":"Bullet List","toolbar.numberedList":"Numbered List","toolbar.indent":"Increase Indent","toolbar.outdent":"Decrease Indent","toolbar.link":"Insert Link (Ctrl+K)","toolbar.image":"Insert Image","toolbar.table":"Insert Table","toolbar.blockquote":"Blockquote","toolbar.viewCode":"View Code (Toggle HTML)","toolbar.horizontalRule":"Horizontal Line","toolbar.subscript":"Subscript","toolbar.superscript":"Superscript","toolbar.removeFormat":"Remove Formatting","toolbar.findReplace":"Find & Replace","toolbar.emoji":"Insert Emoji","toolbar.specialChars":"Special Characters","toolbar.fullscreen":"Fullscreen","toolbar.autosave":"Toggle Autosave","toolbar.themeToggle":"Toggle Theme","toolbar.print":"Print","toolbar.insert":"Insert","toolbar.moreOptions":"More options","toolbar.decreaseFontSize":"Decrease font size","toolbar.increaseFontSize":"Increase font size","heading.paragraph":"Paragraph","heading.h1":"Heading 1","heading.h2":"Heading 2","heading.h3":"Heading 3","heading.h4":"Heading 4","heading.h5":"Heading 5","heading.h6":"Heading 6","font.sansSerif":"Sans Serif","font.serif":"Serif","font.monospace":"Monospace","font.cursive":"Cursive","insert.link":"Link","insert.image":"Image","insert.table":"Table","insert.emoji":"Emoji","insert.symbol":"Symbol","menu.save":"Save","menu.preview":"Preview","menu.download":"Download","menu.print":"Print","menu.autosave":"Autosave","menu.clearAll":"Clear all","menu.toggleTheme":"Toggle Theme","menu.fullscreen":"Fullscreen","menu.help":"Help","help.author":"Author","help.version":"Version","help.github":"GitHub","help.documentation":"Documentation","modal.insertLink":"Insert Link","modal.url":"URL","modal.text":"Text","modal.linkText":"Link text","modal.openInNewTab":"Open in new tab","modal.cancel":"Cancel","modal.insert":"Insert","modal.insertImage":"Insert Image","modal.uploadImage":"Upload Image","modal.convertedToBase64":"Will be converted to base64","modal.handledViaUploader":"Will be uploaded via handler","modal.uploadingImage":"Uploading...","modal.uploadError":"Upload failed. Please try again.","modal.or":"OR","modal.imageUrl":"Image URL","modal.altText":"Alt Text","modal.describeImage":"Describe the image","modal.widthOptional":"Width (optional)","modal.invalidImageFile":"Please select a valid image file.","modal.insertTable":"Insert Table","modal.rows":"Rows","modal.columns":"Columns","modal.includeHeaderRow":"Include header row","modal.findReplace":"Find & Replace","modal.find":"Find","modal.searchText":"Search text...","modal.replaceWith":"Replace with","modal.replacementText":"Replacement text...","modal.useRegex":"Use Regular Expression","modal.caseSensitive":"Case Sensitive","modal.findNext":"Find Next","modal.replace":"Replace","modal.replaceAll":"Replace All","modal.invalidRegex":"Invalid regex","modal.matchesFound":"{count} match(es) found","modal.matchOf":"Match {current} of {total}","modal.matchesRemaining":"{count} match(es) remaining","modal.replacedOccurrences":"Replaced {count} occurrence(s)","status.words":"words","status.word":"word","status.chars":"chars","status.char":"char","autosave.savedLocally":"Saved locally","autosave.autosaving":"Autosaving...","preview.title":"Document Preview","confirm.clearAll":"Clear all content?","color.reset":"Reset to default","color.pick":"Pick a color","color.apply":"Apply",placeholder:"Start typing..."},cs:{"toolbar.undo":"Zpět (Ctrl+Z)","toolbar.redo":"Znovu (Ctrl+Y)","toolbar.bold":"Tučné (Ctrl+B)","toolbar.italic":"Kurzíva (Ctrl+I)","toolbar.underline":"Podtržené (Ctrl+U)","toolbar.strikethrough":"Přeškrtnuté","toolbar.heading":"Nadpis","toolbar.fontSize":"Velikost písma","toolbar.fontFamily":"Rodina písma","toolbar.foreColor":"Barva textu","toolbar.backColor":"Barva pozadí","toolbar.alignLeft":"Zarovnat vlevo","toolbar.alignCenter":"Zarovnat na střed","toolbar.alignRight":"Zarovnat vpravo","toolbar.alignJustify":"Do bloku","toolbar.bulletList":"Odrážkový seznam","toolbar.numberedList":"Číslovaný seznam","toolbar.indent":"Zvětšit odsazení","toolbar.outdent":"Zmenšit odsazení","toolbar.link":"Vložit odkaz (Ctrl+K)","toolbar.image":"Vložit obrázek","toolbar.table":"Vložit tabulku","toolbar.blockquote":"Citace","toolbar.viewCode":"Zobrazit kód (HTML)","toolbar.horizontalRule":"Vodorovná čára","toolbar.subscript":"Dolní index","toolbar.superscript":"Horní index","toolbar.removeFormat":"Odstranit formátování","toolbar.findReplace":"Najít a nahradit","toolbar.emoji":"Vložit emoji","toolbar.specialChars":"Speciální znaky","toolbar.fullscreen":"Celá obrazovka","toolbar.autosave":"Auto. ukládání","toolbar.themeToggle":"Přepnout motiv","toolbar.print":"Tisk","toolbar.insert":"Vložit","toolbar.moreOptions":"Další možnosti","toolbar.decreaseFontSize":"Zmenšit písmo","toolbar.increaseFontSize":"Zvětšit písmo","heading.paragraph":"Odstavec","heading.h1":"Nadpis 1","heading.h2":"Nadpis 2","heading.h3":"Nadpis 3","heading.h4":"Nadpis 4","heading.h5":"Nadpis 5","heading.h6":"Nadpis 6","font.sansSerif":"Sans Serif","font.serif":"Serif","font.monospace":"Monospace","font.cursive":"Cursive","insert.link":"Odkaz","insert.image":"Obrázek","insert.table":"Tabulka","insert.emoji":"Emoji","insert.symbol":"Symbol","menu.save":"Uložit","menu.preview":"Náhled","menu.download":"Stáhnout","menu.print":"Tisk","menu.autosave":"Auto. ukládání","menu.clearAll":"Vymazat vše","menu.toggleTheme":"Přepnout motiv","menu.fullscreen":"Celá obrazovka","menu.help":"Nápověda","help.author":"Autor","help.version":"Verze","help.github":"GitHub","help.documentation":"Dokumentace","modal.insertLink":"Vložit odkaz","modal.url":"URL","modal.text":"Text","modal.linkText":"Text odkazu","modal.openInNewTab":"Otevřít v nové záložce","modal.cancel":"Zrušit","modal.insert":"Vložit","modal.insertImage":"Vložit obrázek","modal.uploadImage":"Nahrát obrázek","modal.convertedToBase64":"Bude převeden na base64","modal.handledViaUploader":"Bude nahráno přes handler","modal.uploadingImage":"Nahrávání...","modal.uploadError":"Nahrávání selhalo. Zkuste to znovu.","modal.or":"NEBO","modal.imageUrl":"URL obrázku","modal.altText":"Alternativní text","modal.describeImage":"Popis obrázku","modal.widthOptional":"Šířka (volitelné)","modal.invalidImageFile":"Vyberte prosím platný soubor obrázku.","modal.insertTable":"Vložit tabulku","modal.rows":"Řádky","modal.columns":"Sloupce","modal.includeHeaderRow":"Včetně řádku záhlaví","modal.findReplace":"Najít a nahradit","modal.find":"Najít","modal.searchText":"Hledaný text...","modal.replaceWith":"Nahradit za","modal.replacementText":"Text náhrady...","modal.useRegex":"Použít regulární výraz","modal.caseSensitive":"Rozlišovat velikost písmen","modal.findNext":"Najít další","modal.replace":"Nahradit","modal.replaceAll":"Nahradit vše","modal.invalidRegex":"Neplatný regulární výraz","modal.matchesFound":"Nalezeno {count} shod","modal.matchOf":"Shoda {current} z {total}","modal.matchesRemaining":"Zbývá {count} shod","modal.replacedOccurrences":"Nahrazeno {count} výskytů","status.words":"slov","status.word":"slovo","status.chars":"znaků","status.char":"znak","autosave.savedLocally":"Uloženo lokálně","autosave.autosaving":"Ukládám...","preview.title":"Náhled dokumentu","confirm.clearAll":"Vymazat veškerý obsah?","color.reset":"Obnovit výchozí","color.pick":"Vybrat barvu","color.apply":"Použít",placeholder:"Začněte psát..."},zh:{"toolbar.undo":"撤销 (Ctrl+Z)","toolbar.redo":"重做 (Ctrl+Y)","toolbar.bold":"粗体 (Ctrl+B)","toolbar.italic":"斜体 (Ctrl+I)","toolbar.underline":"下划线 (Ctrl+U)","toolbar.strikethrough":"删除线","toolbar.heading":"标题","toolbar.fontSize":"字体大小","toolbar.fontFamily":"字体","toolbar.foreColor":"文字颜色","toolbar.backColor":"背景颜色","toolbar.alignLeft":"左对齐","toolbar.alignCenter":"居中对齐","toolbar.alignRight":"右对齐","toolbar.alignJustify":"两端对齐","toolbar.bulletList":"无序列表","toolbar.numberedList":"有序列表","toolbar.indent":"增加缩进","toolbar.outdent":"减少缩进","toolbar.link":"插入链接 (Ctrl+K)","toolbar.image":"插入图片","toolbar.table":"插入表格","toolbar.blockquote":"引用","toolbar.viewCode":"查看代码 (HTML)","toolbar.horizontalRule":"水平线","toolbar.subscript":"下标","toolbar.superscript":"上标","toolbar.removeFormat":"清除格式","toolbar.findReplace":"查找和替换","toolbar.emoji":"插入表情","toolbar.specialChars":"特殊字符","toolbar.fullscreen":"全屏","toolbar.autosave":"自动保存","toolbar.themeToggle":"切换主题","toolbar.print":"打印","toolbar.insert":"插入","toolbar.moreOptions":"更多选项","toolbar.decreaseFontSize":"缩小字体","toolbar.increaseFontSize":"增大字体","heading.paragraph":"段落","heading.h1":"标题 1","heading.h2":"标题 2","heading.h3":"标题 3","heading.h4":"标题 4","heading.h5":"标题 5","heading.h6":"标题 6","font.sansSerif":"无衬线","font.serif":"衬线","font.monospace":"等宽","font.cursive":"手写","insert.link":"链接","insert.image":"图片","insert.table":"表格","insert.emoji":"表情","insert.symbol":"符号","menu.save":"保存","menu.preview":"预览","menu.download":"下载","menu.print":"打印","menu.autosave":"自动保存","menu.clearAll":"清除全部","menu.toggleTheme":"切换主题","menu.fullscreen":"全屏","menu.help":"帮助","help.author":"作者","help.version":"版本","help.github":"GitHub","help.documentation":"文档","modal.insertLink":"插入链接","modal.url":"URL","modal.text":"文本","modal.linkText":"链接文字","modal.openInNewTab":"在新标签页中打开","modal.cancel":"取消","modal.insert":"插入","modal.insertImage":"插入图片","modal.uploadImage":"上传图片","modal.convertedToBase64":"将转换为base64","modal.handledViaUploader":"将通过上传处理器上传","modal.uploadingImage":"上传中...","modal.uploadError":"上传失败,请重试。","modal.or":"或","modal.imageUrl":"图片URL","modal.altText":"替代文本","modal.describeImage":"描述图片","modal.widthOptional":"宽度(可选)","modal.invalidImageFile":"请选择有效的图片文件。","modal.insertTable":"插入表格","modal.rows":"行","modal.columns":"列","modal.includeHeaderRow":"包含标题行","modal.findReplace":"查找和替换","modal.find":"查找","modal.searchText":"搜索文本...","modal.replaceWith":"替换为","modal.replacementText":"替换文本...","modal.useRegex":"使用正则表达式","modal.caseSensitive":"区分大小写","modal.findNext":"查找下一个","modal.replace":"替换","modal.replaceAll":"全部替换","modal.invalidRegex":"无效的正则表达式","modal.matchesFound":"找到 {count} 个匹配","modal.matchOf":"第 {current} 个,共 {total} 个","modal.matchesRemaining":"剩余 {count} 个匹配","modal.replacedOccurrences":"已替换 {count} 处","status.words":"词","status.word":"词","status.chars":"字符","status.char":"字符","autosave.savedLocally":"已本地保存","autosave.autosaving":"正在保存...","preview.title":"文档预览","confirm.clearAll":"清除所有内容?","color.reset":"重置为默认","color.pick":"选择颜色","color.apply":"应用",placeholder:"开始输入..."},es:{"toolbar.undo":"Deshacer (Ctrl+Z)","toolbar.redo":"Rehacer (Ctrl+Y)","toolbar.bold":"Negrita (Ctrl+B)","toolbar.italic":"Cursiva (Ctrl+I)","toolbar.underline":"Subrayado (Ctrl+U)","toolbar.strikethrough":"Tachado","toolbar.heading":"Encabezado","toolbar.fontSize":"Tamaño de fuente","toolbar.fontFamily":"Familia de fuente","toolbar.foreColor":"Color de texto","toolbar.backColor":"Color de fondo","toolbar.alignLeft":"Alinear a la izquierda","toolbar.alignCenter":"Centrar","toolbar.alignRight":"Alinear a la derecha","toolbar.alignJustify":"Justificar","toolbar.bulletList":"Lista con viñetas","toolbar.numberedList":"Lista numerada","toolbar.indent":"Aumentar sangría","toolbar.outdent":"Disminuir sangría","toolbar.link":"Insertar enlace (Ctrl+K)","toolbar.image":"Insertar imagen","toolbar.table":"Insertar tabla","toolbar.blockquote":"Cita","toolbar.viewCode":"Ver código (HTML)","toolbar.horizontalRule":"Línea horizontal","toolbar.subscript":"Subíndice","toolbar.superscript":"Superíndice","toolbar.removeFormat":"Eliminar formato","toolbar.findReplace":"Buscar y reemplazar","toolbar.emoji":"Insertar emoji","toolbar.specialChars":"Caracteres especiales","toolbar.fullscreen":"Pantalla completa","toolbar.autosave":"Guardado automático","toolbar.themeToggle":"Cambiar tema","toolbar.print":"Imprimir","toolbar.insert":"Insertar","toolbar.moreOptions":"Más opciones","toolbar.decreaseFontSize":"Reducir tamaño de fuente","toolbar.increaseFontSize":"Aumentar tamaño de fuente","heading.paragraph":"Párrafo","heading.h1":"Encabezado 1","heading.h2":"Encabezado 2","heading.h3":"Encabezado 3","heading.h4":"Encabezado 4","heading.h5":"Encabezado 5","heading.h6":"Encabezado 6","font.sansSerif":"Sans Serif","font.serif":"Serif","font.monospace":"Monospace","font.cursive":"Cursiva","insert.link":"Enlace","insert.image":"Imagen","insert.table":"Tabla","insert.emoji":"Emoji","insert.symbol":"Símbolo","menu.save":"Guardar","menu.preview":"Vista previa","menu.download":"Descargar","menu.print":"Imprimir","menu.autosave":"Guardado automático","menu.clearAll":"Borrar todo","menu.toggleTheme":"Cambiar tema","menu.fullscreen":"Pantalla completa","menu.help":"Ayuda","help.author":"Autor","help.version":"Versión","help.github":"GitHub","help.documentation":"Documentación","modal.insertLink":"Insertar enlace","modal.url":"URL","modal.text":"Texto","modal.linkText":"Texto del enlace","modal.openInNewTab":"Abrir en nueva pestaña","modal.cancel":"Cancelar","modal.insert":"Insertar","modal.insertImage":"Insertar imagen","modal.uploadImage":"Subir imagen","modal.convertedToBase64":"Se convertirá a base64","modal.handledViaUploader":"Se subirá a través del handler","modal.uploadingImage":"Subiendo...","modal.uploadError":"Error al subir. Inténtelo de nuevo.","modal.or":"O","modal.imageUrl":"URL de imagen","modal.altText":"Texto alternativo","modal.describeImage":"Describir la imagen","modal.widthOptional":"Ancho (opcional)","modal.invalidImageFile":"Por favor, seleccione un archivo de imagen válido.","modal.insertTable":"Insertar tabla","modal.rows":"Filas","modal.columns":"Columnas","modal.includeHeaderRow":"Incluir fila de encabezado","modal.findReplace":"Buscar y reemplazar","modal.find":"Buscar","modal.searchText":"Texto a buscar...","modal.replaceWith":"Reemplazar con","modal.replacementText":"Texto de reemplazo...","modal.useRegex":"Usar expresión regular","modal.caseSensitive":"Distinguir mayúsculas","modal.findNext":"Buscar siguiente","modal.replace":"Reemplazar","modal.replaceAll":"Reemplazar todo","modal.invalidRegex":"Expresión regular no válida","modal.matchesFound":"{count} coincidencia(s) encontrada(s)","modal.matchOf":"Coincidencia {current} de {total}","modal.matchesRemaining":"{count} coincidencia(s) restante(s)","modal.replacedOccurrences":"{count} ocurrencia(s) reemplazada(s)","status.words":"palabras","status.word":"palabra","status.chars":"caracteres","status.char":"carácter","autosave.savedLocally":"Guardado localmente","autosave.autosaving":"Guardando...","preview.title":"Vista previa del documento","confirm.clearAll":"¿Borrar todo el contenido?","color.reset":"Restablecer","color.pick":"Elegir color","color.apply":"Aplicar",placeholder:"Empiece a escribir..."},de:{"toolbar.undo":"Rückgängig (Strg+Z)","toolbar.redo":"Wiederholen (Strg+Y)","toolbar.bold":"Fett (Strg+B)","toolbar.italic":"Kursiv (Strg+I)","toolbar.underline":"Unterstrichen (Strg+U)","toolbar.strikethrough":"Durchgestrichen","toolbar.heading":"Überschrift","toolbar.fontSize":"Schriftgröße","toolbar.fontFamily":"Schriftart","toolbar.foreColor":"Textfarbe","toolbar.backColor":"Hintergrundfarbe","toolbar.alignLeft":"Linksbündig","toolbar.alignCenter":"Zentriert","toolbar.alignRight":"Rechtsbündig","toolbar.alignJustify":"Blocksatz","toolbar.bulletList":"Aufzählungsliste","toolbar.numberedList":"Nummerierte Liste","toolbar.indent":"Einzug vergrößern","toolbar.outdent":"Einzug verkleinern","toolbar.link":"Link einfügen (Strg+K)","toolbar.image":"Bild einfügen","toolbar.table":"Tabelle einfügen","toolbar.blockquote":"Zitat","toolbar.viewCode":"Code anzeigen (HTML)","toolbar.horizontalRule":"Horizontale Linie","toolbar.subscript":"Tiefgestellt","toolbar.superscript":"Hochgestellt","toolbar.removeFormat":"Formatierung entfernen","toolbar.findReplace":"Suchen und Ersetzen","toolbar.emoji":"Emoji einfügen","toolbar.specialChars":"Sonderzeichen","toolbar.fullscreen":"Vollbild","toolbar.autosave":"Automatisch speichern","toolbar.themeToggle":"Design wechseln","toolbar.print":"Drucken","toolbar.insert":"Einfügen","toolbar.moreOptions":"Weitere Optionen","toolbar.decreaseFontSize":"Schrift verkleinern","toolbar.increaseFontSize":"Schrift vergrößern","heading.paragraph":"Absatz","heading.h1":"Überschrift 1","heading.h2":"Überschrift 2","heading.h3":"Überschrift 3","heading.h4":"Überschrift 4","heading.h5":"Überschrift 5","heading.h6":"Überschrift 6","font.sansSerif":"Sans Serif","font.serif":"Serif","font.monospace":"Monospace","font.cursive":"Schreibschrift","insert.link":"Link","insert.image":"Bild","insert.table":"Tabelle","insert.emoji":"Emoji","insert.symbol":"Symbol","menu.save":"Speichern","menu.preview":"Vorschau","menu.download":"Herunterladen","menu.print":"Drucken","menu.autosave":"Automatisch speichern","menu.clearAll":"Alles löschen","menu.toggleTheme":"Design wechseln","menu.fullscreen":"Vollbild","menu.help":"Hilfe","help.author":"Autor","help.version":"Version","help.github":"GitHub","help.documentation":"Dokumentation","modal.insertLink":"Link einfügen","modal.url":"URL","modal.text":"Text","modal.linkText":"Linktext","modal.openInNewTab":"In neuem Tab öffnen","modal.cancel":"Abbrechen","modal.insert":"Einfügen","modal.insertImage":"Bild einfügen","modal.uploadImage":"Bild hochladen","modal.convertedToBase64":"Wird in Base64 konvertiert","modal.handledViaUploader":"Wird über Handler hochgeladen","modal.uploadingImage":"Hochladen...","modal.uploadError":"Upload fehlgeschlagen. Bitte versuchen Sie es erneut.","modal.or":"ODER","modal.imageUrl":"Bild-URL","modal.altText":"Alternativtext","modal.describeImage":"Bild beschreiben","modal.widthOptional":"Breite (optional)","modal.invalidImageFile":"Bitte wählen Sie eine gültige Bilddatei.","modal.insertTable":"Tabelle einfügen","modal.rows":"Zeilen","modal.columns":"Spalten","modal.includeHeaderRow":"Kopfzeile einfügen","modal.findReplace":"Suchen und Ersetzen","modal.find":"Suchen","modal.searchText":"Suchtext...","modal.replaceWith":"Ersetzen durch","modal.replacementText":"Ersatztext...","modal.useRegex":"Regulären Ausdruck verwenden","modal.caseSensitive":"Groß-/Kleinschreibung beachten","modal.findNext":"Weitersuchen","modal.replace":"Ersetzen","modal.replaceAll":"Alle ersetzen","modal.invalidRegex":"Ungültiger regulärer Ausdruck","modal.matchesFound":"{count} Treffer gefunden","modal.matchOf":"Treffer {current} von {total}","modal.matchesRemaining":"{count} Treffer verbleibend","modal.replacedOccurrences":"{count} Vorkommen ersetzt","status.words":"Wörter","status.word":"Wort","status.chars":"Zeichen","status.char":"Zeichen","autosave.savedLocally":"Lokal gespeichert","autosave.autosaving":"Speichern...","preview.title":"Dokumentvorschau","confirm.clearAll":"Gesamten Inhalt löschen?","color.reset":"Zurücksetzen","color.pick":"Farbe wählen","color.apply":"Anwenden",placeholder:"Hier schreiben..."},fr:{"toolbar.undo":"Annuler (Ctrl+Z)","toolbar.redo":"Rétablir (Ctrl+Y)","toolbar.bold":"Gras (Ctrl+B)","toolbar.italic":"Italique (Ctrl+I)","toolbar.underline":"Souligné (Ctrl+U)","toolbar.strikethrough":"Barré","toolbar.heading":"Titre","toolbar.fontSize":"Taille de police","toolbar.fontFamily":"Police","toolbar.foreColor":"Couleur du texte","toolbar.backColor":"Couleur de fond","toolbar.alignLeft":"Aligner à gauche","toolbar.alignCenter":"Centrer","toolbar.alignRight":"Aligner à droite","toolbar.alignJustify":"Justifier","toolbar.bulletList":"Liste à puces","toolbar.numberedList":"Liste numérotée","toolbar.indent":"Augmenter le retrait","toolbar.outdent":"Diminuer le retrait","toolbar.link":"Insérer un lien (Ctrl+K)","toolbar.image":"Insérer une image","toolbar.table":"Insérer un tableau","toolbar.blockquote":"Citation","toolbar.viewCode":"Voir le code (HTML)","toolbar.horizontalRule":"Ligne horizontale","toolbar.subscript":"Indice","toolbar.superscript":"Exposant","toolbar.removeFormat":"Supprimer la mise en forme","toolbar.findReplace":"Rechercher et remplacer","toolbar.emoji":"Insérer un emoji","toolbar.specialChars":"Caractères spéciaux","toolbar.fullscreen":"Plein écran","toolbar.autosave":"Sauvegarde automatique","toolbar.themeToggle":"Changer de thème","toolbar.print":"Imprimer","toolbar.insert":"Insérer","toolbar.moreOptions":"Plus d'options","toolbar.decreaseFontSize":"Réduire la taille de police","toolbar.increaseFontSize":"Augmenter la taille de police","heading.paragraph":"Paragraphe","heading.h1":"Titre 1","heading.h2":"Titre 2","heading.h3":"Titre 3","heading.h4":"Titre 4","heading.h5":"Titre 5","heading.h6":"Titre 6","font.sansSerif":"Sans Serif","font.serif":"Serif","font.monospace":"Monospace","font.cursive":"Cursive","insert.link":"Lien","insert.image":"Image","insert.table":"Tableau","insert.emoji":"Emoji","insert.symbol":"Symbole","menu.save":"Enregistrer","menu.preview":"Aperçu","menu.download":"Télécharger","menu.print":"Imprimer","menu.autosave":"Sauvegarde auto","menu.clearAll":"Tout effacer","menu.toggleTheme":"Changer de thème","menu.fullscreen":"Plein écran","menu.help":"Aide","help.author":"Auteur","help.version":"Version","help.github":"GitHub","help.documentation":"Documentation","modal.insertLink":"Insérer un lien","modal.url":"URL","modal.text":"Texte","modal.linkText":"Texte du lien","modal.openInNewTab":"Ouvrir dans un nouvel onglet","modal.cancel":"Annuler","modal.insert":"Insérer","modal.insertImage":"Insérer une image","modal.uploadImage":"Téléverser une image","modal.convertedToBase64":"Sera converti en base64","modal.handledViaUploader":"Sera téléversé via le handler","modal.uploadingImage":"Téléversement...","modal.uploadError":"Échec du téléversement. Veuillez réessayer.","modal.or":"OU","modal.imageUrl":"URL de l'image","modal.altText":"Texte alternatif","modal.describeImage":"Décrire l'image","modal.widthOptional":"Largeur (optionnel)","modal.invalidImageFile":"Veuillez sélectionner un fichier image valide.","modal.insertTable":"Insérer un tableau","modal.rows":"Lignes","modal.columns":"Colonnes","modal.includeHeaderRow":"Inclure la ligne d'en-tête","modal.findReplace":"Rechercher et remplacer","modal.find":"Rechercher","modal.searchText":"Texte à rechercher...","modal.replaceWith":"Remplacer par","modal.replacementText":"Texte de remplacement...","modal.useRegex":"Utiliser une expression régulière","modal.caseSensitive":"Sensible à la casse","modal.findNext":"Suivant","modal.replace":"Remplacer","modal.replaceAll":"Tout remplacer","modal.invalidRegex":"Expression régulière invalide","modal.matchesFound":"{count} correspondance(s) trouvée(s)","modal.matchOf":"Correspondance {current} sur {total}","modal.matchesRemaining":"{count} correspondance(s) restante(s)","modal.replacedOccurrences":"{count} occurrence(s) remplacée(s)","status.words":"mots","status.word":"mot","status.chars":"caractères","status.char":"caractère","autosave.savedLocally":"Enregistré localement","autosave.autosaving":"Enregistrement...","preview.title":"Aperçu du document","confirm.clearAll":"Effacer tout le contenu ?","color.reset":"Réinitialiser","color.pick":"Choisir une couleur","color.apply":"Appliquer",placeholder:"Commencez à écrire..."},pt:{"toolbar.undo":"Desfazer (Ctrl+Z)","toolbar.redo":"Refazer (Ctrl+Y)","toolbar.bold":"Negrito (Ctrl+B)","toolbar.italic":"Itálico (Ctrl+I)","toolbar.underline":"Sublinhado (Ctrl+U)","toolbar.strikethrough":"Tachado","toolbar.heading":"Título","toolbar.fontSize":"Tamanho da fonte","toolbar.fontFamily":"Família da fonte","toolbar.foreColor":"Cor do texto","toolbar.backColor":"Cor de fundo","toolbar.alignLeft":"Alinhar à esquerda","toolbar.alignCenter":"Centralizar","toolbar.alignRight":"Alinhar à direita","toolbar.alignJustify":"Justificar","toolbar.bulletList":"Lista com marcadores","toolbar.numberedList":"Lista numerada","toolbar.indent":"Aumentar recuo","toolbar.outdent":"Diminuir recuo","toolbar.link":"Inserir link (Ctrl+K)","toolbar.image":"Inserir imagem","toolbar.table":"Inserir tabela","toolbar.blockquote":"Citação","toolbar.viewCode":"Ver código (HTML)","toolbar.horizontalRule":"Linha horizontal","toolbar.subscript":"Subscrito","toolbar.superscript":"Sobrescrito","toolbar.removeFormat":"Remover formatação","toolbar.findReplace":"Localizar e substituir","toolbar.emoji":"Inserir emoji","toolbar.specialChars":"Caracteres especiais","toolbar.fullscreen":"Tela cheia","toolbar.autosave":"Salvamento automático","toolbar.themeToggle":"Alternar tema","toolbar.print":"Imprimir","toolbar.insert":"Inserir","toolbar.moreOptions":"Mais opções","toolbar.decreaseFontSize":"Diminuir fonte","toolbar.increaseFontSize":"Aumentar fonte","heading.paragraph":"Parágrafo","heading.h1":"Título 1","heading.h2":"Título 2","heading.h3":"Título 3","heading.h4":"Título 4","heading.h5":"Título 5","heading.h6":"Título 6","font.sansSerif":"Sans Serif","font.serif":"Serif","font.monospace":"Monospace","font.cursive":"Cursiva","insert.link":"Link","insert.image":"Imagem","insert.table":"Tabela","insert.emoji":"Emoji","insert.symbol":"Símbolo","menu.save":"Salvar","menu.preview":"Visualizar","menu.download":"Baixar","menu.print":"Imprimir","menu.autosave":"Salvamento automático","menu.clearAll":"Limpar tudo","menu.toggleTheme":"Alternar tema","menu.fullscreen":"Tela cheia","menu.help":"Ajuda","help.author":"Autor","help.version":"Versão","help.github":"GitHub","help.documentation":"Documentação","modal.insertLink":"Inserir link","modal.url":"URL","modal.text":"Texto","modal.linkText":"Texto do link","modal.openInNewTab":"Abrir em nova aba","modal.cancel":"Cancelar","modal.insert":"Inserir","modal.insertImage":"Inserir imagem","modal.uploadImage":"Enviar imagem","modal.convertedToBase64":"Será convertido para base64","modal.handledViaUploader":"Será enviado via handler","modal.uploadingImage":"Enviando...","modal.uploadError":"Falha no envio. Tente novamente.","modal.or":"OU","modal.imageUrl":"URL da imagem","modal.altText":"Texto alternativo","modal.describeImage":"Descrever a imagem","modal.widthOptional":"Largura (opcional)","modal.invalidImageFile":"Por favor, selecione um arquivo de imagem válido.","modal.insertTable":"Inserir tabela","modal.rows":"Linhas","modal.columns":"Colunas","modal.includeHeaderRow":"Incluir linha de cabeçalho","modal.findReplace":"Localizar e substituir","modal.find":"Localizar","modal.searchText":"Texto a localizar...","modal.replaceWith":"Substituir por","modal.replacementText":"Texto de substituição...","modal.useRegex":"Usar expressão regular","modal.caseSensitive":"Diferenciar maiúsculas","modal.findNext":"Localizar próximo","modal.replace":"Substituir","modal.replaceAll":"Substituir tudo","modal.invalidRegex":"Expressão regular inválida","modal.matchesFound":"{count} correspondência(s) encontrada(s)","modal.matchOf":"Correspondência {current} de {total}","modal.matchesRemaining":"{count} correspondência(s) restante(s)","modal.replacedOccurrences":"{count} ocorrência(s) substituída(s)","status.words":"palavras","status.word":"palavra","status.chars":"caracteres","status.char":"caractere","autosave.savedLocally":"Salvo localmente","autosave.autosaving":"Salvando...","preview.title":"Visualização do documento","confirm.clearAll":"Limpar todo o conteúdo?","color.reset":"Redefinir","color.pick":"Escolher cor","color.apply":"Aplicar",placeholder:"Comece a digitar..."},ja:{"toolbar.undo":"元に戻す (Ctrl+Z)","toolbar.redo":"やり直し (Ctrl+Y)","toolbar.bold":"太字 (Ctrl+B)","toolbar.italic":"斜体 (Ctrl+I)","toolbar.underline":"下線 (Ctrl+U)","toolbar.strikethrough":"取り消し線","toolbar.heading":"見出し","toolbar.fontSize":"フォントサイズ","toolbar.fontFamily":"フォント","toolbar.foreColor":"文字色","toolbar.backColor":"背景色","toolbar.alignLeft":"左揃え","toolbar.alignCenter":"中央揃え","toolbar.alignRight":"右揃え","toolbar.alignJustify":"両端揃え","toolbar.bulletList":"箇条書き","toolbar.numberedList":"番号付きリスト","toolbar.indent":"インデント増","toolbar.outdent":"インデント減","toolbar.link":"リンク挿入 (Ctrl+K)","toolbar.image":"画像挿入","toolbar.table":"表挿入","toolbar.blockquote":"引用","toolbar.viewCode":"コード表示 (HTML)","toolbar.horizontalRule":"水平線","toolbar.subscript":"下付き","toolbar.superscript":"上付き","toolbar.removeFormat":"書式解除","toolbar.findReplace":"検索と置換","toolbar.emoji":"絵文字挿入","toolbar.specialChars":"特殊文字","toolbar.fullscreen":"全画面","toolbar.autosave":"自動保存","toolbar.themeToggle":"テーマ切替","toolbar.print":"印刷","toolbar.insert":"挿入","toolbar.moreOptions":"その他","toolbar.decreaseFontSize":"フォント縮小","toolbar.increaseFontSize":"フォント拡大","heading.paragraph":"段落","heading.h1":"見出し 1","heading.h2":"見出し 2","heading.h3":"見出し 3","heading.h4":"見出し 4","heading.h5":"見出し 5","heading.h6":"見出し 6","font.sansSerif":"ゴシック","font.serif":"明朝","font.monospace":"等幅","font.cursive":"手書き","insert.link":"リンク","insert.image":"画像","insert.table":"表","insert.emoji":"絵文字","insert.symbol":"記号","menu.save":"保存","menu.preview":"プレビュー","menu.download":"ダウンロード","menu.print":"印刷","menu.autosave":"自動保存","menu.clearAll":"すべて消去","menu.toggleTheme":"テーマ切替","menu.fullscreen":"全画面","menu.help":"ヘルプ","help.author":"作成者","help.version":"バージョン","help.github":"GitHub","help.documentation":"ドキュメント","modal.insertLink":"リンク挿入","modal.url":"URL","modal.text":"テキスト","modal.linkText":"リンクテキスト","modal.openInNewTab":"新しいタブで開く","modal.cancel":"キャンセル","modal.insert":"挿入","modal.insertImage":"画像挿入","modal.uploadImage":"画像アップロード","modal.convertedToBase64":"Base64に変換されます","modal.handledViaUploader":"ハンドラー経由でアップロードされます","modal.uploadingImage":"アップロード中...","modal.uploadError":"アップロードに失敗しました。もう一度お試しください。","modal.or":"または","modal.imageUrl":"画像URL","modal.altText":"代替テキスト","modal.describeImage":"画像の説明","modal.widthOptional":"幅(任意)","modal.invalidImageFile":"有効な画像ファイルを選択してください。","modal.insertTable":"表挿入","modal.rows":"行","modal.columns":"列","modal.includeHeaderRow":"ヘッダー行を含む","modal.findReplace":"検索と置換","modal.find":"検索","modal.searchText":"検索テキスト...","modal.replaceWith":"置換後","modal.replacementText":"置換テキスト...","modal.useRegex":"正規表現を使用","modal.caseSensitive":"大文字小文字を区別","modal.findNext":"次を検索","modal.replace":"置換","modal.replaceAll":"すべて置換","modal.invalidRegex":"無効な正規表現","modal.matchesFound":"{count} 件見つかりました","modal.matchOf":"{total} 件中 {current} 件目","modal.matchesRemaining":"残り {count} 件","modal.replacedOccurrences":"{count} 件を置換しました","status.words":"語","status.word":"語","status.chars":"文字","status.char":"文字","autosave.savedLocally":"ローカルに保存済み","autosave.autosaving":"保存中...","preview.title":"ドキュメントプレビュー","confirm.clearAll":"すべての内容を消去しますか?","color.reset":"デフォルトに戻す","color.pick":"色を選択","color.apply":"適用",placeholder:"入力してください..."}};let i="en";function o(e,i){e&&"object"==typeof i&&(t[e]||(t[e]={}),Object.assign(t[e],i))}function n(e,o={}){const n=i||"en";let a=t[n]?.[e]||t.en?.[e]||e;return Object.keys(o).forEach(e=>{a=a.replace(new RegExp(`\\{${e}\\}`,"g"),o[e])}),a}const a={toolbar:["viewCode","undo","redo","findReplace","|","bold","italic","underline","strikethrough","superscript","subscript","removeFormat","|","heading","fontFamily","fontSize","|","foreColor","backColor","|","alignLeft","alignCenter","alignRight","alignJustify","|","indent","outdent","|","bulletList","numberedList","blockquote","horizontalRule","|","insertDropdown","|","moreMenu"],placeholder:"Start typing...",minHeight:300,maxHeight:null,autofocus:!1,spellcheck:!0,readonly:!1,theme:"light",language:"en",translations:null,plugins:[],onChange:null,onSave:null,onFocus:null,onBlur:null,onReady:null,showHelp:!0,imageUploadHandler:null},r={undo:{icon:"undo",titleKey:"toolbar.undo",command:"undo"},redo:{icon:"redo",titleKey:"toolbar.redo",command:"redo"},bold:{icon:"bold",titleKey:"toolbar.bold",command:"bold"},italic:{icon:"italic",titleKey:"toolbar.italic",command:"italic"},underline:{icon:"underline",titleKey:"toolbar.underline",command:"underline"},strikethrough:{icon:"strikethrough",titleKey:"toolbar.strikethrough",command:"strikeThrough"},heading:{titleKey:"toolbar.heading",command:"heading",type:"select"},fontSize:{titleKey:"toolbar.fontSize",command:"fontSize",type:"fontSizeWidget"},fontFamily:{titleKey:"toolbar.fontFamily",command:"fontFamily",type:"select"},foreColor:{icon:"text-color",titleKey:"toolbar.foreColor",command:"foreColor",picker:"color"},backColor:{icon:"highlight",titleKey:"toolbar.backColor",command:"backColor",picker:"color"},alignLeft:{icon:"align-left",titleKey:"toolbar.alignLeft",command:"justifyLeft"},alignCenter:{icon:"align-center",titleKey:"toolbar.alignCenter",command:"justifyCenter"},alignRight:{icon:"align-right",titleKey:"toolbar.alignRight",command:"justifyRight"},alignJustify:{icon:"align-justify",titleKey:"toolbar.alignJustify",command:"justifyFull"},bulletList:{icon:"list-ul",titleKey:"toolbar.bulletList",command:"insertUnorderedList"},numberedList:{icon:"list-ol",titleKey:"toolbar.numberedList",command:"insertOrderedList"},indent:{icon:"indent",titleKey:"toolbar.indent",command:"indent"},outdent:{icon:"outdent",titleKey:"toolbar.outdent",command:"outdent"},link:{icon:"link",titleKey:"toolbar.link",command:"createLink",modal:!0},image:{icon:"image",titleKey:"toolbar.image",command:"insertImage",modal:!0},table:{icon:"table",titleKey:"toolbar.table",command:"insertTable",modal:!0},blockquote:{icon:"quote",titleKey:"toolbar.blockquote",command:"formatBlock",value:"blockquote"},viewCode:{icon:"code",titleKey:"toolbar.viewCode",command:"viewCode"},horizontalRule:{icon:"minus",titleKey:"toolbar.horizontalRule",command:"insertHorizontalRule"},subscript:{icon:"subscript",titleKey:"toolbar.subscript",command:"subscript"},superscript:{icon:"superscript",titleKey:"toolbar.superscript",command:"superscript"},removeFormat:{icon:"eraser",titleKey:"toolbar.removeFormat",command:"removeFormat"},findReplace:{icon:"search",titleKey:"toolbar.findReplace",command:"findReplace",modal:!0},emoji:{icon:"emoji",titleKey:"toolbar.emoji",command:"emoji",picker:"emoji"},specialChars:{icon:"specialChars",titleKey:"toolbar.specialChars",command:"specialChars",picker:"specialChars"},fullscreen:{icon:"fullscreen",titleKey:"toolbar.fullscreen",command:"fullscreen"},autosave:{icon:"save",titleKey:"toolbar.autosave",command:"autosave",toggle:!0},themeToggle:{icon:"sun",titleKey:"toolbar.themeToggle",command:"themeToggle",toggle:!0},print:{icon:"print",titleKey:"toolbar.print",command:"print"},insertDropdown:{icon:"plus",titleKey:"toolbar.insert",type:"insertDropdown"},moreMenu:{icon:"more",titleKey:"toolbar.moreOptions",type:"moreMenu"}},l=[8,9,10,11,12,14,18,24,30,36,48,60,72,96],s=[{labelKey:"font.sansSerif",value:"Arial, sans-serif"},{labelKey:"font.serif",value:"Georgia, serif"},{labelKey:"font.monospace",value:"Consolas, monospace"},{labelKey:"font.cursive",value:"Comic Sans MS, cursive"}],d=[{labelKey:"heading.paragraph",value:"p"},{labelKey:"heading.h1",value:"h1"},{labelKey:"heading.h2",value:"h2"},{labelKey:"heading.h3",value:"h3"},{labelKey:"heading.h4",value:"h4"},{labelKey:"heading.h5",value:"h5"},{labelKey:"heading.h6",value:"h6"}],c=["😀","😃","😄","😁","😅","😂","🤣","😊","😇","🙂","😉","😌","😍","🥰","😘","😗","😙","😚","😋","😛","😜","🤪","😝","🤑","🤗","🤭","🤫","🤔","🤐","🤨","😐","😑","😶","😏","😒","🙄","😬","🤥","😌","😔","😪","🤤","😴","😷","🤒","🤕","🤢","🤮","🤧","🥵","👍","👎","👌","✌️","🤞","🤟","🤘","🤙","👈","👉","👆","👇","☝️","👋","🤚","🖐️","✋","🖖","👏","🙌","❤️","🧡","💛","💚","💙","💜","🖤","🤍","🤎","💔","⭐","🌟","✨","💫","🔥","💥","💯","✅","❌","❓"],h=[{char:"©",name:"Copyright"},{char:"®",name:"Registered"},{char:"™",name:"Trademark"},{char:"€",name:"Euro"},{char:"£",name:"Pound"},{char:"¥",name:"Yen"},{char:"¢",name:"Cent"},{char:"°",name:"Degree"},{char:"±",name:"Plus-Minus"},{char:"×",name:"Multiply"},{char:"÷",name:"Divide"},{char:"≠",name:"Not Equal"},{char:"≤",name:"Less or Equal"},{char:"≥",name:"Greater or Equal"},{char:"∞",name:"Infinity"},{char:"√",name:"Square Root"},{char:"π",name:"Pi"},{char:"Ω",name:"Omega"},{char:"α",name:"Alpha"},{char:"β",name:"Beta"},{char:"γ",name:"Gamma"},{char:"δ",name:"Delta"},{char:"µ",name:"Micro"},{char:"∑",name:"Sum"},{char:"∆",name:"Delta (big)"},{char:"←",name:"Left Arrow"},{char:"→",name:"Right Arrow"},{char:"↑",name:"Up Arrow"},{char:"↓",name:"Down Arrow"},{char:"↔",name:"Left-Right Arrow"},{char:"•",name:"Bullet"},{char:"…",name:"Ellipsis"},{char:"—",name:"Em Dash"},{char:"–",name:"En Dash"},{char:"§",name:"Section"},{char:"¶",name:"Paragraph"},{char:"†",name:"Dagger"},{char:"‡",name:"Double Dagger"},{char:"♠",name:"Spade"},{char:"♣",name:"Club"},{char:"♥",name:"Heart"},{char:"♦",name:"Diamond"}],p=["#000000","#434343","#666666","#999999","#b7b7b7","#cccccc","#d9d9d9","#efefef","#f3f3f3","#ffffff","#980000","#ff0000","#ff9900","#ffff00","#00ff00","#00ffff","#4a86e8","#0000ff","#9900ff","#ff00ff","#e6b8af","#f4cccc","#fce5cd","#fff2cc","#d9ead3","#d0e0e3","#c9daf8","#cfe2f3","#d9d2e9","#ead1dc","#dd7e6b","#ea9999","#f9cb9c","#ffe599","#b6d7a8","#a2c4c9","#a4c2f4","#9fc5e8","#b4a7d6","#d5a6bd","#cc4125","#e06666","#f6b26b","#ffd966","#93c47d","#76a5af","#6d9eeb","#6fa8dc","#8e7cc3","#c27ba0","#a61c00","#cc0000","#e69138","#f1c232","#6aa84f","#45818e","#3c78d8","#3d85c6","#674ea7","#a64d79","#85200c","#990000","#b45f06","#bf9000","#38761d","#134f5c","#1155cc","#0b5394","#351c75","#741b47","#5b0f00","#660000","#783f04","#7f6000","#274e13","#0c343d","#1c4587","#073763","#20124d","#4c1130"],m={generateId:()=>"neiki-"+Math.random().toString(36).substr(2,9),createElement(e,t={},i=[]){const o=document.createElement(e);return Object.entries(t).forEach(([e,t])=>{"className"===e?o.className=t:"innerHTML"===e?o.innerHTML=t:"textContent"===e?o.textContent=t:e.startsWith("on")&&"function"==typeof t?o.addEventListener(e.slice(2).toLowerCase(),t):"style"===e&&"object"==typeof t?Object.assign(o.style,t):o.setAttribute(e,t)}),i.forEach(e=>{"string"==typeof e?o.appendChild(document.createTextNode(e)):e instanceof Node&&o.appendChild(e)}),o},debounce(e,t){let i;return function(...o){clearTimeout(i),i=setTimeout(()=>e.apply(this,o),t)}},deepMerge(e,t){const i={...e};return Object.keys(t).forEach(e=>{t[e]&&"object"==typeof t[e]&&!Array.isArray(t[e])?i[e]=m.deepMerge(i[e]||{},t[e]):i[e]=t[e]}),i},sanitizeHTML(e){const t=document.createElement("div");t.innerHTML=e;return t.querySelectorAll("script").forEach(e=>e.remove()),t.innerHTML},isValidUrl(e){try{return new URL(e),!0}catch(e){return!1}},getSelection:()=>window.getSelection(),isNodeInside(e,t){if(!e||!t)return!1;const i=e.nodeType===Node.TEXT_NODE?e.parentNode:e;return i===t||t.contains(i)},isRangeInside:(e,t)=>!(!e||!t)&&(m.isNodeInside(e.commonAncestorContainer,t)||m.isNodeInside(e.startContainer,t)&&m.isNodeInside(e.endContainer,t)),saveSelection(){const e=window.getSelection();return e.rangeCount>0?e.getRangeAt(0).cloneRange():null},restoreSelection(e){if(e){const t=window.getSelection();t.removeAllRanges(),t.addRange(e)}},positionPopup(e,t,i={}){if(!e||!t)return;const o=i.margin||8;t.style.position="fixed",t.style.left="0",t.style.right="auto",t.style.top="0",t.style.bottom="auto";const n=()=>{const i=e.getBoundingClientRect(),n=t.offsetWidth||t.getBoundingClientRect().width,a=t.offsetHeight||t.getBoundingClientRect().height,r=document.documentElement.clientWidth,l=document.documentElement.clientHeight;let s=i.left,d=i.bottom+4;s+n>r-o&&(s=r-o-n),s<o&&(s=o);const c=l-i.bottom-o,h=i.top-o;a>c&&h>c&&(d=Math.max(o,i.top-a-4)),t.style.left=s+"px",t.style.top=d+"px"};n(),requestAnimationFrame(n),setTimeout(n,0),setTimeout(n,50)}},u={undo:'<svg viewBox="0 0 24 24"><path d="M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8z"/></svg>',redo:'<svg viewBox="0 0 24 24"><path d="M18.4 10.6C16.55 8.99 14.15 8 11.5 8c-4.65 0-8.58 3.03-9.96 7.22L3.9 16c1.05-3.19 4.05-5.5 7.6-5.5 1.95 0 3.73.72 5.12 1.88L13 16h9V7l-3.6 3.6z"/></svg>',bold:'<svg viewBox="0 0 24 24"><path d="M15.6 10.79c.97-.67 1.65-1.77 1.65-2.79 0-2.26-1.75-4-4-4H7v14h7.04c2.09 0 3.71-1.7 3.71-3.79 0-1.52-.86-2.82-2.15-3.42zM10 6.5h3c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-3v-3zm3.5 9H10v-3h3.5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5z"/></svg>',italic:'<svg viewBox="0 0 24 24"><path d="M10 4v3h2.21l-3.42 8H6v3h8v-3h-2.21l3.42-8H18V4z"/></svg>',underline:'<svg viewBox="0 0 24 24"><path d="M12 17c3.31 0 6-2.69 6-6V3h-2.5v8c0 1.93-1.57 3.5-3.5 3.5S8.5 12.93 8.5 11V3H6v8c0 3.31 2.69 6 6 6zm-7 2v2h14v-2H5z"/></svg>',strikethrough:'<svg viewBox="0 0 24 24"><path d="M10 19h4v-3h-4v3zM5 4v3h5v3h4V7h5V4H5zM3 14h18v-2H3v2z"/></svg>',heading:'<svg viewBox="0 0 24 24"><path d="M5 4v3h5.5v12h3V7H19V4z"/></svg>',"font-size":'<svg viewBox="0 0 24 24"><path d="M9 4v3h5v12h3V7h5V4H9zm-6 8h3v7h3v-7h3v-3H3v3z"/></svg>',font:'<svg viewBox="0 0 24 24"><path d="M9.93 13.5h4.14L12 7.98 9.93 13.5zM20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-4.05 16.5l-1.14-3H9.17l-1.12 3H5.96l5.11-13h1.86l5.11 13h-2.09z"/></svg>',"text-color":'<svg viewBox="0 0 24 24"><path d="M11 3L5.5 17h2.25l1.12-3h6.25l1.12 3h2.25L13 3h-2zm-1.38 9L12 5.67 14.38 12H9.62z"/><rect x="3" y="19" width="18" height="3" fill="currentColor"/></svg>',highlight:'<svg viewBox="0 0 24 24"><path d="M16.56 8.94L7.62 0 6.21 1.41l2.38 2.38-5.15 5.15c-.59.59-.59 1.54 0 2.12l5.5 5.5c.29.29.68.44 1.06.44s.77-.15 1.06-.44l5.5-5.5c.59-.58.59-1.53 0-2.12zM5.21 10L10 5.21 14.79 10H5.21zM19 11.5s-2 2.17-2 3.5c0 1.1.9 2 2 2s2-.9 2-2c0-1.33-2-3.5-2-3.5z"/><rect x="0" y="20" width="24" height="4"/></svg>',"align-left":'<svg viewBox="0 0 24 24"><path d="M15 15H3v2h12v-2zm0-8H3v2h12V7zM3 13h18v-2H3v2zm0 8h18v-2H3v2zM3 3v2h18V3H3z"/></svg>',"align-center":'<svg viewBox="0 0 24 24"><path d="M7 15v2h10v-2H7zm-4 6h18v-2H3v2zm0-8h18v-2H3v2zm4-6v2h10V7H7zM3 3v2h18V3H3z"/></svg>',"align-right":'<svg viewBox="0 0 24 24"><path d="M3 21h18v-2H3v2zm6-4h12v-2H9v2zm-6-4h18v-2H3v2zm6-4h12V7H9v2zM3 3v2h18V3H3z"/></svg>',"align-justify":'<svg viewBox="0 0 24 24"><path d="M3 21h18v-2H3v2zm0-4h18v-2H3v2zm0-4h18v-2H3v2zm0-4h18V7H3v2zm0-6v2h18V3H3z"/></svg>',"list-ul":'<svg viewBox="0 0 24 24"><path d="M4 10.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0-6c-.83 0-1.5.67-1.5 1.5S3.17 7.5 4 7.5 5.5 6.83 5.5 6 4.83 4.5 4 4.5zm0 12c-.83 0-1.5.68-1.5 1.5s.68 1.5 1.5 1.5 1.5-.68 1.5-1.5-.67-1.5-1.5-1.5zM7 19h14v-2H7v2zm0-6h14v-2H7v2zm0-8v2h14V5H7z"/></svg>',"list-ol":'<svg viewBox="0 0 24 24"><path d="M2 17h2v.5H3v1h1v.5H2v1h3v-4H2v1zm1-9h1V4H2v1h1v3zm-1 3h1.8L2 13.1v.9h3v-1H3.2L5 10.9V10H2v1zm5-6v2h14V5H7zm0 14h14v-2H7v2zm0-6h14v-2H7v2z"/></svg>',indent:'<svg viewBox="0 0 24 24"><path d="M3 21h18v-2H3v2zM3 8v8l4-4-4-4zm8 9h10v-2H11v2zM3 3v2h18V3H3zm8 6h10V7H11v2zm0 4h10v-2H11v2z"/></svg>',outdent:'<svg viewBox="0 0 24 24"><path d="M11 17h10v-2H11v2zm-8-5l4 4V8l-4 4zm0 9h18v-2H3v2zM3 3v2h18V3H3zm8 6h10V7H11v2zm0 4h10v-2H11v2z"/></svg>',link:'<svg viewBox="0 0 24 24"><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"/></svg>',image:'<svg viewBox="0 0 24 24"><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"/></svg>',table:'<svg viewBox="0 0 24 24"><path d="M20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM8 20H4v-4h4v4zm0-6H4v-4h4v4zm0-6H4V4h4v4zm6 12h-4v-4h4v4zm0-6h-4v-4h4v4zm0-6h-4V4h4v4zm6 12h-4v-4h4v4zm0-6h-4v-4h4v4zm0-6h-4V4h4v4z"/></svg>',quote:'<svg viewBox="0 0 24 24"><path d="M6 17h3l2-4V7H5v6h3zm8 0h3l2-4V7h-6v6h3z"/></svg>',code:'<svg viewBox="0 0 24 24"><path d="M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"/></svg>',minus:'<svg viewBox="0 0 24 24"><path d="M19 13H5v-2h14v2z"/></svg>',eraser:'<svg viewBox="0 0 24 24"><path d="M16.24 3.56l4.95 4.94c.78.79.78 2.05 0 2.84L12 20.53a4.008 4.008 0 01-5.66 0L2.81 17c-.78-.79-.78-2.05 0-2.84l10.6-10.6c.79-.78 2.05-.78 2.83 0zm-1.41 1.42L6.93 12.9l4.24 4.24 7.9-7.9-4.24-4.26z"/></svg>',fullscreen:'<svg viewBox="0 0 24 24"><path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"/></svg>',close:'<svg viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>',check:'<svg viewBox="0 0 24 24"><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/></svg>',save:'<svg viewBox="0 0 24 24"><path d="M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm3-10H5V5h10v4z"/></svg>',print:'<svg viewBox="0 0 24 24"><path d="M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z"/></svg>',subscript:'<svg viewBox="0 0 24 24"><path d="M22 18h-2v1h3v1h-4v-2.5c0-.83.67-1.5 1.5-1.5h1.5v-1h-3v-1h2.5c.83 0 1.5.67 1.5 1.5v1c0 .83-.67 1.5-1.5 1.5zM5.88 18h2.66l3.4-5.42h.12l3.4 5.42h2.66l-4.65-7.27L17.81 4h-2.68l-3.07 4.99h-.12L8.87 4H6.19l4.32 6.73L5.88 18z"/></svg>',superscript:'<svg viewBox="0 0 24 24"><path d="M22 7h-2v1h3v1h-4V6.5c0-.83.67-1.5 1.5-1.5h1.5V4h-3V3h2.5c.83 0 1.5.67 1.5 1.5v1c0 .83-.67 1.5-1.5 1.5zM5.88 20h2.66l3.4-5.42h.12l3.4 5.42h2.66l-4.65-7.27L17.81 6h-2.68l-3.07 4.99h-.12L8.87 6H6.19l4.32 6.73L5.88 20z"/></svg>',search:'<svg viewBox="0 0 24 24"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg>',emoji:'<svg viewBox="0 0 24 24"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm3.5-9c.83 0 1.5-.67 1.5-1.5S16.33 8 15.5 8 14 8.67 14 9.5s.67 1.5 1.5 1.5zm-7 0c.83 0 1.5-.67 1.5-1.5S9.33 8 8.5 8 7 8.67 7 9.5 7.67 11 8.5 11zm3.5 6.5c2.33 0 4.31-1.46 5.11-3.5H6.89c.8 2.04 2.78 3.5 5.11 3.5z"/></svg>',specialChars:'<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10" fill="none" stroke="currentColor" stroke-width="2"/><text x="12" y="16" text-anchor="middle" font-size="12" font-weight="bold" fill="currentColor">©</text></svg>',sun:'<svg viewBox="0 0 24 24"><path d="M6.76 4.84l-1.8-1.79-1.41 1.41 1.79 1.79 1.42-1.41zM4 10.5H1v2h3v-2zm9-9.95h-2V3.5h2V.55zm7.45 3.91l-1.41-1.41-1.79 1.79 1.41 1.41 1.79-1.79zm-3.21 13.7l1.79 1.8 1.41-1.41-1.8-1.79-1.4 1.4zM20 10.5v2h3v-2h-3zm-8-5c-3.31 0-6 2.69-6 6s2.69 6 6 6 6-2.69 6-6-2.69-6-6-6zm-1 16.95h2V19.5h-2v2.95zm-7.45-3.91l1.41 1.41 1.79-1.8-1.41-1.41-1.79 1.8z"/></svg>',moon:'<svg viewBox="0 0 24 24"><path d="M12 3c-4.97 0-9 4.03-9 9s4.03 9 9 9 9-4.03 9-9c0-.46-.04-.92-.1-1.36-.98 1.37-2.58 2.26-4.4 2.26-2.98 0-5.4-2.42-5.4-5.4 0-1.81.89-3.42 2.26-4.4-.44-.06-.9-.1-1.36-.1z"/></svg>',plus:'<svg viewBox="0 0 24 24"><path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/></svg>',more:'<svg viewBox="0 0 24 24"><circle cx="6" cy="12" r="2"/><circle cx="12" cy="12" r="2"/><circle cx="18" cy="12" r="2"/></svg>',download:'<svg viewBox="0 0 24 24"><path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"/></svg>',eye:'<svg viewBox="0 0 24 24"><path d="M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>',trash:'<svg viewBox="0 0 24 24"><path d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"/></svg>',"chevron-down":'<svg viewBox="0 0 24 24"><path d="M7 10l5 5 5-5z"/></svg>',help:'<svg viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z"/></svg>',grip:'<svg viewBox="0 0 24 24"><circle cx="9" cy="5" r="1.5"/><circle cx="15" cy="5" r="1.5"/><circle cx="9" cy="10" r="1.5"/><circle cx="15" cy="10" r="1.5"/><circle cx="9" cy="15" r="1.5"/><circle cx="15" cy="15" r="1.5"/><circle cx="9" cy="20" r="1.5"/><circle cx="15" cy="20" r="1.5"/></svg>',moveUp:'<svg viewBox="0 0 24 24"><path d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"/></svg>',moveDown:'<svg viewBox="0 0 24 24"><path d="M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6z"/></svg>'};class g{constructor(e){this.prefix="neiki_"+e+"_"}set(e,t){try{localStorage.setItem(this.prefix+e,JSON.stringify(t))}catch(e){console.warn("NeikiEditor: localStorage not available")}}get(e,t=null){try{const i=localStorage.getItem(this.prefix+e);return i?JSON.parse(i):t}catch(e){return t}}remove(e){try{localStorage.removeItem(this.prefix+e)}catch(e){}}static setGlobal(e,t){try{localStorage.setItem("neiki_global_"+e,JSON.stringify(t))}catch(e){}}static getGlobal(e,t=null){try{const i=localStorage.getItem("neiki_global_"+e);return i?JSON.parse(i):t}catch(e){return t}}}class b{constructor(e,t=100){this.editor=e,this.maxSize=t,this.undoStack=[],this.redoStack=[],this.isRecording=!0,this.loadFromStorage()}record(){if(!this.isRecording)return;const e=this.editor.getContent();this.undoStack[this.undoStack.length-1]!==e&&(this.undoStack.push(e),this.redoStack=[],this.undoStack.length>this.maxSize&&this.undoStack.shift(),this.saveToStorage())}undo(){if(this.undoStack.length<=1)return!1;const e=this.undoStack.pop();this.redoStack.push(e);const t=this.undoStack[this.undoStack.length-1];return this.isRecording=!1,this.editor.setContent(t),this.isRecording=!0,this.saveToStorage(),!0}redo(){if(0===this.redoStack.length)return!1;const e=this.redoStack.pop();return this.undoStack.push(e),this.isRecording=!1,this.editor.setContent(e),this.isRecording=!0,this.saveToStorage(),!0}canUndo(){return this.undoStack.length>1}canRedo(){return this.redoStack.length>0}clear(){this.undoStack=[],this.redoStack=[],this.record()}saveToStorage(){}loadFromStorage(){}clearStorage(){}}class v{constructor(e){this.editor=e,this.activeModal=null,this.overlay=null}createOverlay(){return this.overlay||(this.overlay=m.createElement("div",{className:"neiki-modal-overlay",onClick:e=>{e.target===this.overlay&&this.close()}}),document.body.appendChild(this.overlay)),this.overlay}open(e,t={}){let i;switch(this.editor.saveCurrentSelection&&this.editor.saveCurrentSelection(),this.close(),this.createOverlay(),e){case"link":i=this.createLinkModal(t);break;case"image":i=this.createImageModal(t);break;case"table":i=this.createTableModal(t);break;case"findReplace":i=this.createFindReplaceModal(t);break;case"help":i=this.createHelpModal(t);break;default:return}this.activeModal=i,this.overlay.appendChild(i),this.overlay.classList.add("active");const o=i.querySelector("input");o&&o.focus()}close(){this.overlay&&(this.overlay.classList.remove("active"),this.activeModal&&(this.activeModal.remove(),this.activeModal=null))}createLinkModal(e){const t=m.createElement("div",{className:"neiki-modal"});return t.innerHTML=`\n <div class="neiki-modal-header">\n <h3>${n("modal.insertLink")}</h3>\n <button class="neiki-modal-close" type="button">${u.close}</button>\n </div>\n <div class="neiki-modal-body">\n <div class="neiki-form-group">\n <label>${n("modal.url")}</label>\n <input type="url" class="neiki-input" name="url" placeholder="https://example.com" value="${e.url||""}">\n </div>\n <div class="neiki-form-group">\n <label>${n("modal.text")}</label>\n <input type="text" class="neiki-input" name="text" placeholder="${n("modal.linkText")}" value="${e.text||""}">\n </div>\n <div class="neiki-form-group">\n <label>\n <input type="checkbox" name="newTab" ${e.newTab?"checked":""}> ${n("modal.openInNewTab")}\n </label>\n </div>\n </div>\n <div class="neiki-modal-footer">\n <button class="neiki-btn neiki-btn-secondary" type="button" data-action="cancel">${n("modal.cancel")}</button>\n <button class="neiki-btn neiki-btn-primary" type="button" data-action="insert">${n("modal.insert")}</button>\n </div>\n `,t.querySelector(".neiki-modal-close").addEventListener("click",()=>this.close()),t.querySelector('[data-action="cancel"]').addEventListener("click",()=>this.close()),t.querySelector('[data-action="insert"]').addEventListener("click",()=>{const e=t.querySelector('[name="url"]').value,i=t.querySelector('[name="text"]').value||e,o=t.querySelector('[name="newTab"]').checked;e&&(this.editor.restoreSavedSelection(),this.editor.commands.insertLink(e,i,o)),this.close()}),t}createImageModal(e){const t=m.createElement("div",{className:"neiki-modal"}),i="function"==typeof this.editor.config.imageUploadHandler,o=n(i?"modal.handledViaUploader":"modal.convertedToBase64");t.innerHTML=`\n <div class="neiki-modal-header">\n <h3>${n("modal.insertImage")}</h3>\n <button class="neiki-modal-close" type="button">${u.close}</button>\n </div>\n <div class="neiki-modal-body">\n <div class="neiki-form-group">\n <label>${n("modal.uploadImage")}</label>\n <input type="file" class="neiki-input" name="upload" accept="image/*" multiple>\n <small class="neiki-upload-hint" style="color: var(--neiki-text-muted); font-size: 11px;">${o}</small>\n </div>\n <div class="neiki-form-divider">\n <span>${n("modal.or")}</span>\n </div>\n <div class="neiki-form-group">\n <label>${n("modal.imageUrl")}</label>\n <input type="url" class="neiki-input" name="url" placeholder="https://example.com/image.jpg" value="${e.url||""}">\n </div>\n <div class="neiki-form-group">\n <label>${n("modal.altText")}</label>\n <input type="text" class="neiki-input" name="alt" placeholder="${n("modal.describeImage")}" value="${e.alt||""}">\n </div>\n <div class="neiki-form-group">\n <label>${n("modal.widthOptional")}</label>\n <input type="text" class="neiki-input" name="width" placeholder="e.g. 300px or 50%" value="${e.width||""}">\n </div>\n </div>\n <div class="neiki-modal-footer">\n <button class="neiki-btn neiki-btn-secondary" type="button" data-action="cancel">${n("modal.cancel")}</button>\n <button class="neiki-btn neiki-btn-primary" type="button" data-action="insert">${n("modal.insert")}</button>\n </div>\n `;const a=t.querySelector('[name="upload"]'),r=t.querySelector('[name="url"]'),l=(t.querySelector(".neiki-upload-hint"),t.querySelector('[data-action="insert"]'));let s=[];return a.addEventListener("change",e=>{const t=Array.from(e.target.files).filter(e=>e.type.startsWith("image/"));if(Array.from(e.target.files).filter(e=>!e.type.startsWith("image/")).length>0&&alert(n("modal.invalidImageFile")),0!==t.length)if(s=t,1!==t.length||i)r.value="",r.disabled=!0;else{const e=new FileReader;e.onload=e=>{r.value=e.target.result,r.disabled=!0},e.readAsDataURL(t[0])}else s=[]}),r.addEventListener("input",()=>{r.value||(r.disabled=!1,a.value="",s=[])}),t.querySelector(".neiki-modal-close").addEventListener("click",()=>this.close()),t.querySelector('[data-action="cancel"]').addEventListener("click",()=>this.close()),t.querySelector('[data-action="insert"]').addEventListener("click",async()=>{const e=t.querySelector('[name="alt"]').value,o=t.querySelector('[name="width"]').value;if(s.length>0&&i){l.disabled=!0,l.textContent=n("modal.uploadingImage");try{const t=[];for(const i of s){const o=await this.editor.config.imageUploadHandler(i);o&&t.push({url:o,alt:e||i.name})}this.editor.restoreSavedSelection(),t.forEach(e=>{this.editor.commands.insertImage(e.url,e.alt,o)})}catch(e){alert(n("modal.uploadError"))}this.close()}else if(s.length>1){l.disabled=!0,l.textContent=n("modal.uploadingImage"),this.editor.restoreSavedSelection();for(const t of s)await new Promise(i=>{const n=new FileReader;n.onload=n=>{this.editor.commands.insertImage(n.target.result,e||t.name,o),i()},n.readAsDataURL(t)});this.close()}else{const i=t.querySelector('[name="url"]').value;i&&(this.editor.restoreSavedSelection(),this.editor.commands.insertImage(i,e,o)),this.close()}}),t}createTableModal(e){const t=m.createElement("div",{className:"neiki-modal"});return t.innerHTML=`\n <div class="neiki-modal-header">\n <h3>${n("modal.insertTable")}</h3>\n <button class="neiki-modal-close" type="button">${u.close}</button>\n </div>\n <div class="neiki-modal-body">\n <div class="neiki-form-row">\n <div class="neiki-form-group">\n <label>${n("modal.rows")}</label>\n <input type="number" class="neiki-input" name="rows" min="1" max="20" value="${e.rows||3}">\n </div>\n <div class="neiki-form-group">\n <label>${n("modal.columns")}</label>\n <input type="number" class="neiki-input" name="cols" min="1" max="10" value="${e.cols||3}">\n </div>\n </div>\n <div class="neiki-form-group">\n <label>\n <input type="checkbox" name="header" ${!1!==e.header?"checked":""}> ${n("modal.includeHeaderRow")}\n </label>\n </div>\n </div>\n <div class="neiki-modal-footer">\n <button class="neiki-btn neiki-btn-secondary" type="button" data-action="cancel">${n("modal.cancel")}</button>\n <button class="neiki-btn neiki-btn-primary" type="button" data-action="insert">${n("modal.insert")}</button>\n </div>\n `,t.querySelector(".neiki-modal-close").addEventListener("click",()=>this.close()),t.querySelector('[data-action="cancel"]').addEventListener("click",()=>this.close()),t.querySelector('[data-action="insert"]').addEventListener("click",()=>{const e=parseInt(t.querySelector('[name="rows"]').value)||3,i=parseInt(t.querySelector('[name="cols"]').value)||3,o=t.querySelector('[name="header"]').checked;this.editor.restoreSavedSelection(),this.editor.commands.insertTable(e,i,o),this.close()}),t}createFindReplaceModal(e){const t=m.createElement("div",{className:"neiki-modal neiki-modal-wide"});t.innerHTML=`\n <div class="neiki-modal-header">\n <h3>${n("modal.findReplace")}</h3>\n <button class="neiki-modal-close" type="button">${u.close}</button>\n </div>\n <div class="neiki-modal-body">\n <div class="neiki-form-group">\n <label>${n("modal.find")}</label>\n <input type="text" class="neiki-input" name="find" placeholder="${n("modal.searchText")}">\n </div>\n <div class="neiki-form-group">\n <label>${n("modal.replaceWith")}</label>\n <input type="text" class="neiki-input" name="replace" placeholder="${n("modal.replacementText")}">\n </div>\n <div class="neiki-form-group neiki-form-row">\n <label><input type="checkbox" name="regex"> ${n("modal.useRegex")}</label>\n <label><input type="checkbox" name="caseSensitive"> ${n("modal.caseSensitive")}</label>\n </div>\n <div class="neiki-find-results" style="margin-top:10px;font-size:13px;color:var(--neiki-text-muted);"></div>\n </div>\n <div class="neiki-modal-footer">\n <button class="neiki-btn neiki-btn-secondary" type="button" data-action="findNext">${n("modal.findNext")}</button>\n <button class="neiki-btn neiki-btn-secondary" type="button" data-action="replaceOne">${n("modal.replace")}</button>\n <button class="neiki-btn neiki-btn-primary" type="button" data-action="replaceAll">${n("modal.replaceAll")}</button>\n </div>\n `;const i=t.querySelector('[name="find"]'),o=t.querySelector('[name="replace"]'),a=t.querySelector('[name="regex"]'),r=t.querySelector('[name="caseSensitive"]'),l=t.querySelector(".neiki-find-results");let s=[],d=-1;const c=()=>{this.editor.contentArea.querySelectorAll(".neiki-highlight-find").forEach(e=>{const t=document.createTextNode(e.textContent);e.parentNode.replaceChild(t,e)}),this.editor.contentArea.normalize()},h=()=>{c(),s=[],d=-1;const e=i.value;if(!e)return void(l.textContent="");this.editor.contentArea.innerHTML;let t,o="g";r.checked||(o+="i");try{t=a.checked?new RegExp(e,o):new RegExp(e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),o)}catch(e){return void(l.textContent=n("modal.invalidRegex"))}const h=document.createTreeWalker(this.editor.contentArea,NodeFilter.SHOW_TEXT,null,!1),p=[];for(;h.nextNode();)p.push(h.currentNode);p.forEach(e=>{const i=e.textContent,o=[...i.matchAll(t)];if(o.length>0){const t=document.createDocumentFragment();let n=0;o.forEach(e=>{e.index>n&&t.appendChild(document.createTextNode(i.slice(n,e.index)));const o=document.createElement("span");o.className="neiki-highlight-find",o.textContent=e[0],t.appendChild(o),s.push(o),n=e.index+e[0].length}),n<i.length&&t.appendChild(document.createTextNode(i.slice(n))),e.parentNode.replaceChild(t,e)}}),l.textContent=n("modal.matchesFound",{count:s.length})},p=()=>{if(0===s.length&&h(),0===s.length)return;d>=0&&s[d]&&s[d].classList.remove("neiki-highlight-current"),d=(d+1)%s.length;const e=s[d];e.classList.add("neiki-highlight-current"),e.scrollIntoView({behavior:"smooth",block:"center"}),l.textContent=n("modal.matchOf",{current:d+1,total:s.length})};return i.addEventListener("input",m.debounce(h,300)),t.querySelector(".neiki-modal-close").addEventListener("click",()=>{c(),this.close()}),t.querySelector('[data-action="findNext"]').addEventListener("click",p),t.querySelector('[data-action="replaceOne"]').addEventListener("click",()=>{if(d>=0&&s[d]){const e=s[d];e.textContent=o.value,e.classList.remove("neiki-highlight-find","neiki-highlight-current"),s.splice(d,1),d--,this.editor.history.record(),this.editor.triggerChange(),l.textContent=n("modal.matchesRemaining",{count:s.length}),s.length>0&&p()}}),t.querySelector('[data-action="replaceAll"]').addEventListener("click",()=>{c();const e=i.value,t=o.value;if(!e)return;let h,p="g";r.checked||(p+="i");try{h=a.checked?new RegExp(e,p):new RegExp(e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),p)}catch(e){return}const m=document.createTreeWalker(this.editor.contentArea,NodeFilter.SHOW_TEXT,null,!1),u=[];for(;m.nextNode();)u.push(m.currentNode);let g=0;u.forEach(e=>{const i=e.textContent,o=i.replace(h,()=>(g++,t));o!==i&&(e.textContent=o)}),this.editor.history.record(),this.editor.triggerChange(),s=[],d=-1,l.textContent=n("modal.replacedOccurrences",{count:g})}),t}createHelpModal(){const e=m.createElement("div",{className:"neiki-modal"});return e.innerHTML=`\n <div class="neiki-modal-header">\n <h3>${n("menu.help")}</h3>\n <button class="neiki-modal-close" type="button">${u.close}</button>\n </div>\n <div class="neiki-modal-body" style="text-align: center; padding: 24px 20px;">\n <img src="https://github.com/neikiri/neiki-editor/raw/main/logo.png" alt="Neiki's Editor" style="width: 120px; height: auto; margin: 0 auto 16px; display: block;">\n <div style="font-size: 14px; line-height: 2; color: var(--neiki-text-primary);">\n <div><strong>${n("help.author")}:</strong> neikiri (Jindřich Stoklasa)</div>\n <div><strong>${n("help.version")}:</strong> 2.9.1</div>\n <div><strong>${n("help.github")}:</strong> <a href="https://github.com/neikiri/neiki-editor" target="_blank" style="color: var(--neiki-accent);">github.com/neikiri/neiki-editor</a></div>\n <div><strong>${n("help.documentation")}:</strong> <a href="https://github.com/neikiri/neiki-editor/wiki" target="_blank" style="color: var(--neiki-accent);">Wiki</a></div>\n </div>\n </div>\n `,e.querySelector(".neiki-modal-close").addEventListener("click",()=>this.close()),e}}class k{constructor(e){this.editor=e,this.activeDropdown=null,document.addEventListener("click",e=>{this.activeDropdown&&!this.activeDropdown.contains(e.target)&&this.close()})}toggle(e,t){if(e.querySelector(".neiki-dropdown"))return void this.close();let i;switch(this.close(),t){case"heading":i=this.createHeadingDropdown();break;case"fontSize":i=this.createFontSizeDropdown();break;case"fontFamily":i=this.createFontFamilyDropdown();break;default:return}e.appendChild(i),this.activeDropdown=i}close(){this.activeDropdown&&(this.activeDropdown.remove(),this.activeDropdown=null)}createHeadingDropdown(){const e=m.createElement("div",{className:"neiki-dropdown"});return d.forEach(({label:t,value:i})=>{const o=m.createElement("div",{className:"neiki-dropdown-item",innerHTML:`<${i}>${t}</${i}>`,onClick:()=>{this.editor.commands.formatBlock(i),this.close()}});e.appendChild(o)}),e}createFontSizeDropdown(){const e=m.createElement("div",{className:"neiki-dropdown"});return l.forEach(t=>{const i=m.createElement("div",{className:"neiki-dropdown-item",textContent:t+"px",onClick:()=>{this.editor.commands.fontSize(t+"px"),this.close()}});e.appendChild(i)}),e}createFontFamilyDropdown(){const e=m.createElement("div",{className:"neiki-dropdown"});return s.forEach(({label:t,value:i})=>{const o=m.createElement("div",{className:"neiki-dropdown-item",textContent:t,style:{fontFamily:i},onClick:()=>{this.editor.commands.fontFamily(i),this.close()}});e.appendChild(o)}),e}}class f{constructor(e){this.editor=e,this.activePicker=null,this.activeButton=null,document.addEventListener("mousedown",e=>{!this.activePicker||this.activePicker.contains(e.target)||this.activeButton&&this.activeButton.contains(e.target)||this.close()})}toggle(e,t){if(this.activeButton===e&&this.activePicker)return void this.close();this.close();const i=m.createElement("div",{className:"neiki-color-picker"}),o=m.createElement("div",{className:"neiki-color-grid"}),a=m.createElement("div",{className:"neiki-color-swatch neiki-color-reset",title:n("color.reset")});a.addEventListener("mousedown",e=>{e.preventDefault(),e.stopPropagation(),"foreColor"===t?this.editor.commands.resetForeColor():this.editor.commands.resetBackColor(),this.close()}),o.appendChild(a),p.forEach(e=>{const i=m.createElement("div",{className:"neiki-color-swatch",style:{backgroundColor:e},title:e});i.addEventListener("mousedown",i=>{i.preventDefault(),i.stopPropagation(),"foreColor"===t?this.editor.commands.foreColor(e):this.editor.commands.backColor(e),this.close()}),o.appendChild(i)}),i.appendChild(o);const r=m.createElement("div",{className:"neiki-color-custom"}),l=m.createElement("input",{className:"neiki-color-custom-input",type:"color",value:"#000000",title:n("color.pick")}),s=m.createElement("input",{className:"neiki-color-hex-input",type:"text",value:"#000000",placeholder:"#hex",maxLength:7}),d=m.createElement("button",{className:"neiki-color-apply-btn",type:"button"});d.textContent=n("color.apply"),l.addEventListener("input",e=>{s.value=e.target.value}),s.addEventListener("input",e=>{const t=e.target.value;/^#[0-9A-Fa-f]{6}$/.test(t)&&(l.value=t)});const c=e=>{e.preventDefault(),e.stopPropagation();let i=s.value.trim();/^#/.test(i)||(i="#"+i),/^#[0-9A-Fa-f]{6}$/.test(i)&&("foreColor"===t?this.editor.commands.foreColor(i):this.editor.commands.backColor(i),this.close())};d.addEventListener("mousedown",c),s.addEventListener("keydown",e=>{"Enter"===e.key&&c(e)}),r.appendChild(l),r.appendChild(s),r.appendChild(d),i.appendChild(r),i.addEventListener("mousedown",e=>{e.stopPropagation()}),i.addEventListener("click",e=>{e.stopPropagation()}),e.appendChild(i),requestAnimationFrame(()=>{const e=i.getBoundingClientRect();e.right>window.innerWidth&&(i.style.left="auto",i.style.right="0"),e.left<0&&(i.style.left="0",i.style.right="auto")}),this.activePicker=i,this.activeButton=e}close(){this.activePicker&&(this.activePicker.remove(),this.activePicker=null,this.activeButton=null)}}class x{constructor(e){this.editor=e,this.picker=null,this.activeButton=null,document.addEventListener("mousedown",e=>{!this.picker||this.picker.contains(e.target)||this.activeButton&&this.activeButton.contains(e.target)||this.close()})}toggle(e){this.activeButton===e&&this.picker?this.close():(this.close(),this.picker=m.createElement("div",{className:"neiki-emoji-picker"}),c.forEach(e=>{const t=document.createElement("span");t.className="neiki-emoji-item",t.textContent=e,t.title=e,t.addEventListener("mousedown",t=>{t.preventDefault(),t.stopPropagation(),this.editor.restoreSavedSelection(),document.execCommand("insertText",!1,e),this.editor.history.record(),this.editor.triggerChange(),this.close()}),this.picker.appendChild(t)}),e.appendChild(this.picker),this.activeButton=e,this.editor.saveCurrentSelection(),m.positionPopup(e,this.picker))}close(){this.picker&&(this.picker.remove(),this.picker=null,this.activeButton=null)}}class y{constructor(e){this.editor=e,this.picker=null,this.activeButton=null,document.addEventListener("mousedown",e=>{!this.picker||this.picker.contains(e.target)||this.activeButton&&this.activeButton.contains(e.target)||this.close()})}toggle(e){this.activeButton===e&&this.picker?this.close():(this.close(),this.picker=m.createElement("div",{className:"neiki-special-picker"}),h.forEach(({char:e,name:t})=>{const i=document.createElement("span");i.className="neiki-special-item",i.textContent=e,i.title=t,i.addEventListener("mousedown",t=>{t.preventDefault(),t.stopPropagation(),this.editor.restoreSavedSelection(),document.execCommand("insertText",!1,e),this.editor.history.record(),this.editor.triggerChange(),this.close()}),this.picker.appendChild(i)}),e.appendChild(this.picker),this.activeButton=e,this.editor.saveCurrentSelection(),m.positionPopup(e,this.picker))}close(){this.picker&&(this.picker.remove(),this.picker=null,this.activeButton=null)}}class w{constructor(e){this.editor=e}exec(e,t=null){this.editor.focus();["bold","italic","underline","strikeThrough","subscript","superscript","foreColor","backColor","fontName","fontSize","removeFormat"].includes(e)&&this._expandToWordIfCollapsed(),document.execCommand(e,!1,t),this.editor.history.record(),this.editor.updateToolbar(),this.editor.triggerChange()}_expandToWordIfCollapsed(){const e=window.getSelection();if(!e||!e.rangeCount||!e.isCollapsed)return;const t=e.getRangeAt(0),i=t.startContainer;if(i.nodeType!==Node.TEXT_NODE)return;const o=i.textContent;let n=t.startOffset,a=t.startOffset;for(;n>0&&/\S/.test(o[n-1]);)n--;for(;a<o.length&&/\S/.test(o[a]);)a++;n!==a&&(t.setStart(i,n),t.setEnd(i,a),e.removeAllRanges(),e.addRange(t))}bold(){this.exec("bold")}italic(){this.exec("italic")}underline(){this.exec("underline")}strikeThrough(){this.exec("strikeThrough")}subscript(){this.exec("subscript")}superscript(){this.exec("superscript")}justifyLeft(){this.exec("justifyLeft")}justifyCenter(){this.exec("justifyCenter")}justifyRight(){this.exec("justifyRight")}justifyFull(){this.exec("justifyFull")}insertUnorderedList(){this.exec("insertUnorderedList")}insertOrderedList(){this.exec("insertOrderedList")}indent(){this.exec("indent")}outdent(){this.exec("outdent")}removeFormat(){this.exec("removeFormat")}insertHorizontalRule(){this.exec("insertHorizontalRule")}formatBlock(e){this.exec("formatBlock",`<${e}>`)}fontSize(e){this.editor.focus(),this._expandToWordIfCollapsed(),document.execCommand("fontSize",!1,"7");this.editor.contentArea.querySelectorAll('font[size="7"]').forEach(t=>{const i=document.createElement("span");for(i.style.fontSize=e;t.firstChild;)i.appendChild(t.firstChild);t.parentNode.replaceChild(i,t)}),this.editor.history.record(),this.editor.updateToolbar(),this.editor.triggerChange()}fontFamily(e){this.exec("fontName",e)}foreColor(e){this.exec("foreColor",e)}backColor(e){this.exec("backColor",e)}resetForeColor(){this._resetColorProperty("color")}resetBackColor(){this._resetColorProperty("backgroundColor")}_resetColorProperty(e){this.editor.focus();const t=window.getSelection();if(!t||!t.rangeCount)return;const i=t.getRangeAt(0);if(i.collapsed)return;const o=i.extractContents(),n=t=>{if(t.nodeType===Node.ELEMENT_NODE){if(t.style&&t.style[e]&&(t.style[e]="",t.getAttribute("style")&&t.getAttribute("style").trim()||t.removeAttribute("style")),"color"===e&&"FONT"===t.tagName&&t.hasAttribute("color")&&t.removeAttribute("color"),"backgroundColor"===e&&"FONT"===t.tagName&&t.style.backgroundColor&&(t.style.backgroundColor=""),!("FONT"!==t.tagName||t.hasAttribute("color")||t.hasAttribute("face")||t.hasAttribute("size")||t.getAttribute("style")&&t.getAttribute("style").trim())){const e=t.parentNode;if(e){for(;t.firstChild;)e.insertBefore(t.firstChild,t);e.removeChild(t)}return}if(!("SPAN"!==t.tagName||t.getAttribute("style")&&t.getAttribute("style").trim()||t.className)){const e=t.parentNode;if(e){for(;t.firstChild;)e.insertBefore(t.firstChild,t);e.removeChild(t)}return}Array.from(t.childNodes).forEach(n)}};Array.from(o.childNodes).forEach(n),i.insertNode(o),t.removeAllRanges(),t.addRange(i),this.editor.history.record(),this.editor.updateToolbar(),this.editor.triggerChange()}viewCode(){this.editor.toggleCodeView()}autosave(){this.editor.toggleAutosave()}print(){this.editor.printContent()}insertHTML(e){this.editor.focus(),document.execCommand("insertHTML",!1,e),this.editor.history.record(),this.editor.triggerChange()}insertLink(e,t,i=!1){const o=m.getSelection(),n=o.rangeCount>0?o.getRangeAt(0):null;if(n&&!n.collapsed){if(this.exec("createLink",e),i){this.editor.contentArea.querySelectorAll('a[href="'+e+'"]').forEach(e=>e.setAttribute("target","_blank"))}}else{const o=document.createElement("a");o.href=e,o.textContent=t||e,i&&(o.target="_blank"),this.editor.focus(),document.execCommand("insertHTML",!1,o.outerHTML),this.editor.history.record(),this.editor.triggerChange()}}insertImage(e,t="",i=""){let o=`<img src="${e}"`;t&&(o+=` alt="${t}"`),i&&(o+=` width="${i}"`),o+=">",this.editor.focus(),document.execCommand("insertHTML",!1,o),this.editor.history.record(),this.editor.triggerChange()}insertTable(e,t,i=!0){let o='<table class="neiki-table">';for(let n=0;n<e;n++){o+="<tr>";for(let e=0;e<t;e++)o+=0===n&&i?"<th>Header</th>":"<td>Cell</td>";o+="</tr>"}o+="</table><p><br></p>",this.editor.focus(),document.execCommand("insertHTML",!1,o),this.editor.history.record(),this.editor.triggerChange()}undo(){this.editor.history.undo()&&(this.editor.updateToolbar(),this.editor.triggerChange())}redo(){this.editor.history.redo()&&(this.editor.updateToolbar(),this.editor.triggerChange())}}class C{constructor(e,t={}){if(this.originalElement="string"==typeof e?document.querySelector(e):e,!this.originalElement)throw new Error("NeikiEditor: Element not found");this.id=this.originalElement.id||this.originalElement.getAttribute("data-neiki-id")||"neiki_"+("string"==typeof e?e.replace(/[^a-zA-Z0-9]/g,"_"):"editor"),this.config=m.deepMerge(a,t),this.isFullscreen=!1,this.isAutosaveEnabled=!1,this.autosaveInterval=null,this.savedSelectionRange=null,this.init()}init(){this.storage=new g(this.id),i=this.config.language||"en",this.config.translations&&"object"==typeof this.config.translations&&Object.keys(this.config.translations).forEach(e=>{o(e,this.config.translations[e])});const e=g.getGlobal("theme",this.config.theme);this.config.theme=e,this.createStructure(),this.createToolbar(),this.createContentArea(),this.createStatusBar(),this.history=new b(this),this.modal=new v(this),this.dropdown=new k(this),this.colorPicker=new f(this),this.emojiPicker=new x(this),this.specialCharsPicker=new y(this),this.commands=new w(this),this.tableContextMenu=new A(this),this.floatingToolbar=new S(this),this.imageResizer=new z(this),this.tableColumnResizer=new E(this),this.blockDragDrop=new L(this),this.bindEvents(),this.initDragDrop(),this.initPlugins(),this.syncToOriginal(),this.history.record();this.storage.get("autosave_enabled",!1)&&this.enableAutosave(),this.updateStatusBar(),this.updateToolbar(),this.config.autofocus&&this.focus(),this.config.onReady&&this.config.onReady(this)}createStructure(){const e="en"!==i?`neiki-lang-${i}`:"";this.container=m.createElement("div",{className:`neiki-editor ${"dark"===this.config.theme?"neiki-dark":""} ${e}`.trim(),id:this.id}),this.originalElement.style.display="none",this.originalElement.parentNode.insertBefore(this.container,this.originalElement)}createToolbar(){this.toolbar=m.createElement("div",{className:"neiki-toolbar"}),this.toolbarButtons={},this.toolbarSelects={};let e=m.createElement("div",{className:"neiki-toolbar-group"});const t=t=>{e.appendChild(t)},i=()=>{e.childNodes.length>0&&this.toolbar.appendChild(e),e=m.createElement("div",{className:"neiki-toolbar-group"})};this.config.toolbar.forEach(o=>{if("|"===o)return void i();const a=r[o];if(!a)return;if("select"===a.type){const e=m.createElement("select",{className:"neiki-select",title:n(a.titleKey),"data-command":o});return"heading"===o?d.forEach(({labelKey:t,value:i})=>{const o=document.createElement("option");o.value=i,o.textContent=n(t),e.appendChild(o)}):"fontFamily"===o&&s.forEach(({labelKey:t,value:i})=>{const o=document.createElement("option");o.value=i,o.textContent=n(t),o.style.fontFamily=i,e.appendChild(o)}),e.addEventListener("change",t=>{t.preventDefault(),"heading"===o?this.commands.formatBlock(e.value):"fontFamily"===o&&this.commands.fontFamily(e.value),this.focus()}),this.toolbarSelects[o]=e,void t(e)}if("fontSizeWidget"===a.type){const e=m.createElement("div",{className:"neiki-fontsize-widget"}),i=m.createElement("button",{className:"neiki-fontsize-btn",type:"button",title:n("toolbar.decreaseFontSize"),innerHTML:'<svg viewBox="0 0 24 24" width="14" height="14"><path d="M19 13H5v-2h14v2z" fill="currentColor"/></svg>'}),o=m.createElement("input",{className:"neiki-fontsize-input",type:"text",title:n("toolbar.fontSize"),value:"16"}),a=m.createElement("button",{className:"neiki-fontsize-btn",type:"button",title:n("toolbar.increaseFontSize"),innerHTML:'<svg viewBox="0 0 24 24" width="14" height="14"><path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" fill="currentColor"/></svg>'});let r=null;const s=()=>{const e=window.getSelection();e&&e.rangeCount>0&&(r=e.getRangeAt(0).cloneRange())},d=()=>{if(r){const e=window.getSelection();e.removeAllRanges(),e.addRange(r)}},c=m.createElement("div",{className:"neiki-fontsize-dropdown"});l.forEach(e=>{const t=m.createElement("div",{className:"neiki-fontsize-dropdown-item",textContent:e,"data-size":String(e)});t.addEventListener("mousedown",e=>{e.preventDefault(),e.stopPropagation()}),t.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation(),o.value=e,d(),this.commands.fontSize(e+"px"),c.classList.remove("show")}),c.appendChild(t)});const h=()=>{const e=parseInt(o.value);e&&e>0&&(d(),this.commands.fontSize(e+"px"))};return i.addEventListener("mousedown",e=>{e.preventDefault(),e.stopPropagation(),s()}),i.addEventListener("click",e=>{e.preventDefault(),d();const t=parseInt(o.value)||16,i=Math.max(1,t-1);o.value=i,this.commands.fontSize(i+"px")}),a.addEventListener("mousedown",e=>{e.preventDefault(),e.stopPropagation(),s()}),a.addEventListener("click",e=>{e.preventDefault(),d();const t=parseInt(o.value)||16,i=Math.min(999,t+1);o.value=i,this.commands.fontSize(i+"px")}),o.addEventListener("mousedown",e=>{s()}),o.addEventListener("focus",()=>{c.classList.add("show")}),o.addEventListener("keydown",e=>{"Enter"===e.key&&(e.preventDefault(),h(),c.classList.remove("show"),this.focus()),"Escape"===e.key&&(c.classList.remove("show"),this.focus())}),document.addEventListener("mousedown",t=>{e.contains(t.target)||c.classList.remove("show")}),e.appendChild(i),e.appendChild(o),e.appendChild(a),e.appendChild(c),this.fontSizeInput=o,void t(e)}if("insertDropdown"===a.type){const e=m.createElement("button",{className:"neiki-toolbar-btn neiki-insert-dropdown-btn",title:n(a.titleKey),type:"button"});e.innerHTML=u[a.icon]+'<span class="neiki-insert-label">'+n("toolbar.insert")+'</span><span class="neiki-chevron">'+u["chevron-down"]+"</span>";const i=m.createElement("div",{className:"neiki-insert-dropdown"});return[{key:"link",icon:u.link,labelKey:"insert.link",action:()=>{this.saveCurrentSelection(),this.modal.open("link",{text:m.getSelection().toString()})}},{key:"image",icon:u.image,labelKey:"insert.image",action:()=>{this.saveCurrentSelection(),this.modal.open("image",{})}},{key:"table",icon:u.table,labelKey:"insert.table",action:()=>{this.saveCurrentSelection(),this.modal.open("table",{})}},{key:"emoji",icon:u.emoji,labelKey:"insert.emoji",action:()=>{this.saveCurrentSelection(),this.emojiPicker.toggle(e)}},{key:"specialChars",icon:u.specialChars,labelKey:"insert.symbol",action:()=>{this.saveCurrentSelection(),this.specialCharsPicker.toggle(e)}}].forEach(({icon:e,labelKey:t,action:o})=>{const a=m.createElement("div",{className:"neiki-dropdown-item"});a.innerHTML='<span class="neiki-dropdown-item-icon">'+e+"</span>"+n(t),a.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation(),i.classList.remove("show"),o()}),i.appendChild(a)}),e.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation();const o=this.toolbar.querySelector(".neiki-more-dropdown.show");o&&o.classList.remove("show"),this.emojiPicker.close(),this.specialCharsPicker.close(),i.classList.toggle("show"),i.classList.contains("show")&&m.positionPopup(e,i)}),document.addEventListener("mousedown",t=>{e.contains(t.target)||i.contains(t.target)||i.classList.remove("show")}),e.appendChild(i),this.toolbarButtons[o]=e,void t(e)}if("moreMenu"===a.type){const i=m.createElement("button",{className:"neiki-toolbar-btn neiki-more-btn",title:n(a.titleKey),type:"button",innerHTML:u[a.icon],"data-command":o}),r=m.createElement("div",{className:"neiki-more-dropdown"}),l=[{key:"save",icon:u.save,labelKey:"menu.save",action:()=>this.triggerSave()},{key:"preview",icon:u.eye,labelKey:"menu.preview",action:()=>this.previewContent()},{key:"download",icon:u.download,labelKey:"menu.download",action:()=>this.downloadContent()},{key:"print",icon:u.print,labelKey:"menu.print",action:()=>this.printContent()},{key:"divider"},{key:"autosave",icon:u.save,labelKey:"menu.autosave",action:()=>this.toggleAutosave(),toggle:!0},{key:"divider"},{key:"clearAll",icon:u.trash,labelKey:"menu.clearAll",action:()=>this.clearAll(),danger:!0},{key:"themeToggle",icon:u.sun,labelKey:"menu.toggleTheme",action:()=>{this.toggleTheme(),this._updateThemeMenuItem()}},{key:"fullscreen",icon:u.fullscreen,labelKey:"menu.fullscreen",action:()=>this.toggleFullscreen()}];return this.config.showHelp&&(l.push({key:"divider"}),l.push({key:"help",icon:u.help,labelKey:"menu.help",action:()=>this.modal.open("help")})),l.forEach(({key:e,icon:t,labelKey:i,action:o,danger:a,toggle:l})=>{if("divider"===e)return void r.appendChild(m.createElement("div",{className:"neiki-dropdown-divider"}));const s=m.createElement("div",{className:"neiki-dropdown-item"+(a?" neiki-dropdown-item-danger":"")});if(s.innerHTML='<span class="neiki-dropdown-item-icon">'+t+'</span><span class="neiki-dropdown-item-label">'+n(i)+"</span>","autosave"===e){const e=m.createElement("span",{className:"neiki-autosave-badge"});e.textContent="✕",s.appendChild(e),this._autosaveMenuItem=s,this._autosaveBadge=e}"themeToggle"===e&&(this._themeMenuItem=s,this._themeMenuIcon=s.querySelector(".neiki-dropdown-item-icon")),s.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation(),"autosave"!==e&&r.classList.remove("show"),o()}),r.appendChild(s)}),i.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation();const t=this.toolbar.querySelector(".neiki-insert-dropdown.show");t&&t.classList.remove("show"),r.classList.toggle("show")}),document.addEventListener("mousedown",e=>{i.contains(e.target)||r.contains(e.target)||r.classList.remove("show")}),i.appendChild(r),this.toolbarButtons[o]=i,t(i),void(e.style.marginLeft="auto")}const c=m.createElement("button",{className:"neiki-toolbar-btn",title:n(a.titleKey),type:"button",innerHTML:u[a.icon]||"","data-command":o});c.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation(),this.handleToolbarClick(o,c)}),this.toolbarButtons[o]=c,t(c)}),i(),this.container.appendChild(this.toolbar)}createContentArea(){this.contentWrapper=m.createElement("div",{className:"neiki-content-wrapper"}),this.contentArea=m.createElement("div",{className:"neiki-content",contentEditable:!this.config.readonly,spellcheck:this.config.spellcheck,"data-placeholder":n("placeholder")}),this.config.minHeight&&(this.contentArea.style.minHeight=this.config.minHeight+"px"),this.config.maxHeight&&(this.contentArea.style.maxHeight=this.config.maxHeight+"px",this.contentArea.style.overflowY="auto");const e=this.storage.get("autosave_enabled",!1),t=this.storage.get("autosave_content",null);e&&t?this.contentArea.innerHTML=t:this.originalElement.value?this.contentArea.innerHTML=this.originalElement.value:this.originalElement.innerHTML.trim()&&(this.contentArea.innerHTML=this.originalElement.innerHTML),this._ensureDefaultBlock(),this.contentWrapper.appendChild(this.contentArea),this.isCodeViewOpen=!1,this.codeView=m.createElement("div",{className:"neiki-code-view"});const i=m.createElement("div",{className:"neiki-code-view-header"}),o=m.createElement("span",{className:"neiki-code-view-title",textContent:"HTML Source"}),a=m.createElement("button",{className:"neiki-btn neiki-code-view-apply",type:"button",title:"Apply changes and close"});a.innerHTML=u.close+'<span style="margin-left:5px;font-size:12px;font-weight:500;">Apply & Close</span>',a.addEventListener("click",()=>this.toggleCodeView()),i.appendChild(o),i.appendChild(a),this.codeViewTextarea=m.createElement("textarea",{className:"neiki-code-view-textarea",spellcheck:"false"}),this.codeView.appendChild(i),this.codeView.appendChild(this.codeViewTextarea),this.contentWrapper.appendChild(this.codeView),this.container.appendChild(this.contentWrapper)}bindEvents(){this.contentArea.addEventListener("input",m.debounce(()=>{this._ensureDefaultBlock(),this.history.record(),this.syncToOriginal(),this.triggerChange(),this.updateStatusBar()},300)),document.addEventListener("selectionchange",()=>{const e=window.getSelection(),t=e&&e.rangeCount?e.getRangeAt(0):null,i=t&&m.isRangeInside(t,this.contentArea);i&&this.saveCurrentSelection(),(i||this.contentArea.contains(document.activeElement)||document.activeElement===this.contentArea)&&(this.updateToolbar(),this.updateStatusBar())}),this.contentArea.addEventListener("focus",()=>{this.config.onFocus&&this.config.onFocus(this)}),this.contentArea.addEventListener("blur",()=>{this.config.onBlur&&this.config.onBlur(this)}),this.contentArea.addEventListener("keydown",e=>this.handleKeydown(e)),this.contentArea.addEventListener("copy",e=>this.handleCopyCut(e,!1)),this.contentArea.addEventListener("cut",e=>this.handleCopyCut(e,!0)),this.contentArea.addEventListener("paste",e=>this.handlePaste(e))}handleCopyCut(e,t){if(!this.imageResizer)return;const i=this.imageResizer.getSelectedImageClipboardData();i&&(e.preventDefault(),e.clipboardData.setData("text/html",i.html),e.clipboardData.setData("text/plain",i.text),t&&this.imageResizer.deleteSelectedImage())}handleToolbarClick(e,t){const i=r[e];if(i&&!i.type)if("color"!==i.picker){if("emoji"===i.picker)return this.saveCurrentSelection(),void this.emojiPicker.toggle(t);if("specialChars"===i.picker)return this.saveCurrentSelection(),void this.specialCharsPicker.toggle(t);if(i.modal){this.saveCurrentSelection();let t={};if("link"===e){const e=m.getSelection();t.text=e.toString()}return void this.modal.open(e,t)}"fullscreen"!==e?"themeToggle"!==e?i.value?this.commands[i.command](i.value):this.commands[i.command]?this.commands[i.command]():this.commands.exec(i.command):this.toggleTheme():this.toggleFullscreen()}else this.colorPicker.toggle(t,i.command)}handleKeydown(e){if("Backspace"!==e.key&&"Delete"!==e.key||!this.imageResizer||!this.imageResizer.deleteSelectedImage()){if(e.ctrlKey||e.metaKey)switch(e.key.toLowerCase()){case"b":e.preventDefault(),this.commands.bold();break;case"i":e.preventDefault(),this.commands.italic();break;case"u":e.preventDefault(),this.commands.underline();break;case"k":e.preventDefault(),this.saveCurrentSelection(),this.modal.open("link",{text:m.getSelection().toString()});break;case"z":e.preventDefault(),e.shiftKey?this.commands.redo():this.commands.undo();break;case"y":e.preventDefault(),this.commands.redo();break;case"s":e.preventDefault(),this.triggerSave()}if("Enter"===e.key&&!e.shiftKey&&!e.ctrlKey&&!e.metaKey){const t=window.getSelection();if(t.rangeCount){const i=t.anchorNode,o=i.nodeType===Node.TEXT_NODE?i.parentElement?.closest("blockquote"):i.closest?.("blockquote");if(o&&o===this.contentArea.lastElementChild){const i=t.getRangeAt(0),n=document.createRange();if(n.selectNodeContents(o),n.setStart(i.endContainer,i.endOffset),""===n.toString().trim()){e.preventDefault();const i=document.createElement("p");i.innerHTML="<br>",o.after(i);const n=document.createRange();n.setStart(i,0),n.collapse(!0),t.removeAllRanges(),t.addRange(n),this.history.record(),this.triggerChange()}}}}"Tab"===e.key&&(e.preventDefault(),e.shiftKey?this.commands.outdent():this.commands.indent())}else e.preventDefault()}handlePaste(e){if(e.clipboardData&&e.clipboardData.files.length>0){const t=Array.from(e.clipboardData.files).filter(e=>e.type.startsWith("image/"));if(t.length>0){e.preventDefault();return void("function"==typeof this.config.imageUploadHandler?(async()=>{for(const e of t)try{const t=await this.config.imageUploadHandler(e);t&&this.commands.insertImage(t,e.name,"")}catch(e){console.error("NeikiEditor: Image upload failed",e)}})():t.forEach(e=>{const t=new FileReader;t.onload=t=>{this.commands.insertImage(t.target.result,e.name,"")},t.readAsDataURL(e)}))}}e.preventDefault();let t="";if(e.clipboardData){let i=e.clipboardData.getData("text/html");i?t=m.sanitizeHTML(i):(t=e.clipboardData.getData("text/plain"),t=t.replace(/\n/g,"<br>"))}document.execCommand("insertHTML",!1,t),this.history.record(),this.triggerChange()}updateToolbar(){if(Object.entries(this.toolbarButtons).forEach(([e,t])=>{const i=r[e];if(!i||i.type)return;let o=!1;try{switch(i.command){case"bold":case"italic":case"underline":case"strikeThrough":case"subscript":case"superscript":case"insertUnorderedList":case"insertOrderedList":case"justifyLeft":case"justifyCenter":case"justifyRight":case"justifyFull":o=document.queryCommandState(i.command)}}catch(e){}t.classList.toggle("active",o)}),this.toolbarButtons.undo&&(this.toolbarButtons.undo.disabled=!this.history.canUndo()),this.toolbarButtons.redo&&(this.toolbarButtons.redo.disabled=!this.history.canRedo()),this.toolbarButtons.viewCode&&this.toolbarButtons.viewCode.classList.toggle("active",this.isCodeViewOpen),this.toolbarSelects.heading){const e=this.getCurrentBlockType(),t=d.map(e=>e.value);this.toolbarSelects.heading.value=t.includes(e)?e:"p"}if(this.toolbarSelects.fontFamily)try{const e=document.queryCommandValue("fontName");if(e){const t=s.find(t=>t.value.toLowerCase().includes(e.toLowerCase().replace(/"/g,"")));t&&(this.toolbarSelects.fontFamily.value=t.value)}}catch(e){}if(this.fontSizeInput)try{const e=window.getSelection();if(e&&e.rangeCount){let t=e.getRangeAt(0).startContainer;t.nodeType===Node.TEXT_NODE&&(t=t.parentNode);const i=window.getComputedStyle(t),o=Math.round(parseFloat(i.fontSize));o&&(this.fontSizeInput.value=o)}}catch(e){}this._autosaveBadge&&(this._autosaveBadge.textContent=this.isAutosaveEnabled?"✓":"✕",this._autosaveBadge.classList.toggle("active",this.isAutosaveEnabled))}toggleFullscreen(){this.isFullscreen=!this.isFullscreen,this.container.classList.toggle("neiki-fullscreen",this.isFullscreen),document.body.classList.toggle("neiki-fullscreen-active",this.isFullscreen),this.toolbarButtons.fullscreen&&this.toolbarButtons.fullscreen.classList.toggle("active",this.isFullscreen)}toggleTheme(){const e=this.container.classList.contains("neiki-dark"),t=e?"light":"dark";this.container.classList.toggle("neiki-dark",!e),this.config.theme=t,g.setGlobal("theme",t),this.toolbarButtons.themeToggle&&(this.toolbarButtons.themeToggle.innerHTML=e?u.sun:u.moon,this.toolbarButtons.themeToggle.classList.toggle("active",!e),this.toolbarButtons.themeToggle.title=e?"Switch to Dark Mode":"Switch to Light Mode"),this._updateThemeMenuItem()}_updateThemeMenuItem(){if(this._themeMenuIcon){const e=this.container.classList.contains("neiki-dark");this._themeMenuIcon.innerHTML=e?u.moon:u.sun}}triggerSave(){this.config.onSave&&this.config.onSave(this.getContent(),this)}previewContent(){const e=this.getContent(),t=m.createElement("div",{className:"neiki-preview-overlay"}),i=m.createElement("div",{className:"neiki-preview-modal"}),o=m.createElement("div",{className:"neiki-preview-header"});o.innerHTML="<span>"+n("preview.title")+"</span>";const a=m.createElement("button",{className:"neiki-preview-close",type:"button",innerHTML:u.close});a.addEventListener("click",()=>t.remove()),o.appendChild(a);const r=m.createElement("div",{className:"neiki-preview-body"});r.innerHTML=e,i.appendChild(o),i.appendChild(r),t.appendChild(i),t.addEventListener("click",e=>{e.target===t&&t.remove()}),document.addEventListener("keydown",function e(i){"Escape"===i.key&&(t.remove(),document.removeEventListener("keydown",e))}),document.body.appendChild(t)}downloadContent(){const e=this.getContent(),t=new Blob(['<!DOCTYPE html>\n<html lang="en">\n<head>\n<meta charset="UTF-8">\n<meta name="viewport" content="width=device-width, initial-scale=1.0">\n<title>Document</title>\n<style>\nbody{font-family:-apple-system,BlinkMacSystemFont,\'Segoe UI\',Roboto,sans-serif;max-width:800px;margin:40px auto;padding:0 20px;line-height:1.7;color:#1e293b;}\nimg{max-width:100%;}\ntable{border-collapse:collapse;width:100%;}\ntable td,table th{border:1px solid #d1d5db;padding:8px 12px;}\n</style>\n</head>\n<body>\n'+e+"\n</body>\n</html>"],{type:"text/html"}),i=URL.createObjectURL(t),o=document.createElement("a");o.href=i,o.download="document.html",o.click(),URL.revokeObjectURL(i)}clearAll(){this.getContent().trim()&&!confirm(n("confirm.clearAll"))||(this.setContent(""),this.history.record(),this.triggerChange(),this.updateStatusBar())}_ensureDefaultBlock(){if(!this.contentArea)return;const e=this.contentArea.innerHTML.trim();if(!e||"<br>"===e){this.contentArea.innerHTML="<p><br></p>";try{if(document.activeElement===this.contentArea){const e=this.contentArea.querySelector("p");if(e){const t=window.getSelection(),i=document.createRange();i.setStart(e,0),i.collapse(!0),t.removeAllRanges(),t.addRange(i)}}}catch(e){}return}Array.from(this.contentArea.childNodes).forEach(e=>{if(e.nodeType===Node.TEXT_NODE&&e.textContent.trim()){const t=document.createElement("p");e.parentNode.insertBefore(t,e),t.appendChild(e)}})}syncToOriginal(){"TEXTAREA"===this.originalElement.tagName||"INPUT"===this.originalElement.tagName?this.originalElement.value=this.getContent():this.originalElement.innerHTML=this.getContent()}triggerChange(){this.config.onChange&&this.config.onChange(this.getContent(),this),this.container.dispatchEvent(new CustomEvent("neiki:change",{detail:{content:this.getContent(),editor:this}}))}getContent(){const e=this.contentArea.cloneNode(!0);return e.querySelectorAll(".neiki-img-resizable").forEach(e=>{const t=e.querySelector("img");t&&e.parentNode.insertBefore(t,e),e.remove()}),e.querySelectorAll(".neiki-block-grip, .neiki-block-placeholder, .neiki-table-col-resize-handle, .neiki-img-resize-handle, .neiki-img-size-label").forEach(e=>e.remove()),e.innerHTML}setContent(e){this.imageResizer&&this.imageResizer.deselect(),this.savedSelectionRange=null,this.contentArea.innerHTML=m.sanitizeHTML(e),this._ensureDefaultBlock(),this.syncToOriginal()}getText(){return this.contentArea.textContent||this.contentArea.innerText}isEmpty(){const e=this.getText().trim();return""===e||"\n"===e}focus(){this.contentArea.focus()}saveCurrentSelection(){const e=window.getSelection();if(!e||!e.rangeCount)return null;const t=e.getRangeAt(0);return m.isRangeInside(t,this.contentArea)?(this.savedSelectionRange=t.cloneRange(),this.savedSelectionRange):this.savedSelectionRange}restoreSavedSelection(){return this.savedSelectionRange&&m.isRangeInside(this.savedSelectionRange,this.contentArea)?(this.focus(),m.restoreSelection(this.savedSelectionRange),!0):(this.focus(),!1)}blur(){this.contentArea.blur()}enable(){this.contentArea.contentEditable="true",this.container.classList.remove("neiki-disabled")}disable(){this.contentArea.contentEditable="false",this.container.classList.add("neiki-disabled")}destroy(){this.modal.close(),this.dropdown.close(),this.colorPicker.close(),this.imageResizer&&this.imageResizer.destroy(),this.tableColumnResizer&&this.tableColumnResizer.destroy(),this.blockDragDrop&&this.blockDragDrop.destroy(),this.container.remove(),this.originalElement.style.display="",this.modal.overlay&&this.modal.overlay.remove()}setTheme(e){this.config.theme=e,this.container.classList.toggle("neiki-dark","dark"===e),g.setGlobal("theme",e)}createStatusBar(){this.statusBar=m.createElement("div",{className:"neiki-statusbar"});const e=m.createElement("div",{className:"neiki-statusbar-left"}),t=m.createElement("div",{className:"neiki-statusbar-right"});this.statusWordCount=m.createElement("span",{className:"neiki-statusbar-item",textContent:"0 "+n("status.words")}),this.statusCharCount=m.createElement("span",{className:"neiki-statusbar-item",textContent:"0 "+n("status.chars")}),this.statusAutosave=m.createElement("span",{className:"neiki-statusbar-item neiki-statusbar-autosave"}),this.statusAutosave.style.display="none",this.statusBlockType=m.createElement("span",{className:"neiki-statusbar-item neiki-statusbar-block",textContent:"p"}),e.appendChild(this.statusWordCount),e.appendChild(this.statusCharCount),t.appendChild(this.statusAutosave),t.appendChild(this.statusBlockType),this.statusBar.appendChild(e),this.statusBar.appendChild(t),this.container.appendChild(this.statusBar)}updateStatusBar(){if(!this.statusBar)return;const e=this.getText().trim(),t=e?e.split(/\s+/).filter(e=>e.length>0).length:0,i=this.getText().length;this.statusWordCount.textContent=t+" "+n(1===t?"status.word":"status.words"),this.statusCharCount.textContent=i+" "+n(1===i?"status.char":"status.chars"),this.statusBlockType.textContent=this.getCurrentBlockType()}getCurrentBlockType(){const e=window.getSelection();if(!e||!e.rangeCount)return"p";let t=e.getRangeAt(0).startContainer;t.nodeType===Node.TEXT_NODE&&(t=t.parentNode);const i=["P","H1","H2","H3","H4","H5","H6","BLOCKQUOTE","PRE","LI","DIV"];for(;t&&t!==this.contentArea;){if(i.includes(t.tagName))return t.tagName.toLowerCase();t=t.parentNode}return"p"}toggleCodeView(){this.isCodeViewOpen?(this.contentArea.innerHTML=m.sanitizeHTML(this.codeViewTextarea.value),this.codeView.classList.remove("show"),this.isCodeViewOpen=!1,this.history.record(),this.syncToOriginal(),this.triggerChange(),this.updateStatusBar(),this._codeViewEsc&&(document.removeEventListener("keydown",this._codeViewEsc),this._codeViewEsc=null)):(this.codeViewTextarea.value=this.contentArea.innerHTML,this.codeView.classList.add("show"),this.isCodeViewOpen=!0,this.codeViewTextarea.focus(),this._codeViewEsc=e=>{"Escape"===e.key&&this.toggleCodeView()},document.addEventListener("keydown",this._codeViewEsc)),this.updateToolbar()}toggleAutosave(){this.isAutosaveEnabled?this.disableAutosave():this.enableAutosave(),this.updateToolbar()}enableAutosave(){this.isAutosaveEnabled=!0,this.storage.set("autosave_enabled",!0),this.statusAutosave&&(this.statusAutosave.style.display="",this.statusAutosave.textContent=n("autosave.savedLocally")),this._autosaveContentHandler||(this._autosaveContentHandler=m.debounce(()=>{this.isAutosaveEnabled&&(this.statusAutosave&&(this.statusAutosave.textContent=n("autosave.autosaving"),this.statusAutosave.style.display=""),this.storage.set("autosave_content",this.getContent()),setTimeout(()=>{this.statusAutosave&&this.isAutosaveEnabled&&(this.statusAutosave.textContent=n("autosave.savedLocally"))},500))},1e3),this.contentArea.addEventListener("input",this._autosaveContentHandler)),this.storage.set("autosave_content",this.getContent()),this.updateToolbar()}disableAutosave(){this.isAutosaveEnabled=!1,this.storage.set("autosave_enabled",!1),this.autosaveInterval&&(clearInterval(this.autosaveInterval),this.autosaveInterval=null),this.statusAutosave&&(this.statusAutosave.style.display="none"),this.updateToolbar()}printContent(){const e=window.open("","_blank"),t=this.getContent();e.document.write(`\n <!DOCTYPE html>\n <html>\n <head>\n <title>Print</title>\n <style>\n body { font-family: Arial, sans-serif; padding: 20px; line-height: 1.6; }\n table { border-collapse: collapse; width: 100%; margin: 1em 0; }\n td, th { border: 1px solid #ccc; padding: 8px; }\n img { max-width: 100%; }\n blockquote { border-left: 4px solid #ccc; margin: 1em 0; padding-left: 1em; font-style: italic; }\n pre { background: #f5f5f5; padding: 1em; overflow-x: auto; }\n </style>\n </head>\n <body>${t}</body>\n </html>\n `),e.document.close(),e.focus(),setTimeout(()=>{e.print(),e.close()},250)}getJSON(){const e=t=>{if(t.nodeType===Node.TEXT_NODE)return{type:"text",content:t.textContent};if(t.nodeType!==Node.ELEMENT_NODE)return null;const i={type:t.tagName.toLowerCase(),children:[]};if(t.attributes.length>0){i.attrs={};for(let e of t.attributes)i.attrs[e.name]=e.value}t.style&&t.style.cssText&&(i.style=t.style.cssText);for(let o of t.childNodes){const t=e(o);t&&i.children.push(t)}return i},t=[];for(let i of this.contentArea.childNodes){const o=e(i);o&&t.push(o)}return{version:"1.0",content:t}}setJSON(e){if(!e||!e.content)return;const t=e=>{if("text"===e.type)return document.createTextNode(e.content||"");const i=document.createElement(e.type);if(e.attrs)for(let[t,o]of Object.entries(e.attrs))i.setAttribute(t,o);if(e.style&&(i.style.cssText=e.style),e.children)for(let o of e.children){const e=t(o);e&&i.appendChild(e)}return i};this.contentArea.innerHTML="";for(let i of e.content){const e=t(i);e&&this.contentArea.appendChild(e)}this.history.record(),this.syncToOriginal(),this.triggerChange(),this.updateStatusBar()}getHTML(){return this.getContent()}setHTML(e){this.setContent(e)}initPlugins(){C.getPlugins().forEach(e=>{try{if(e.icon&&e.action){const t=m.createElement("button",{className:"neiki-toolbar-btn neiki-plugin-btn",title:e.tooltip||e.name,type:"button",innerHTML:e.icon,"data-plugin":e.name});t.addEventListener("click",t=>{t.preventDefault(),e.action(this)}),this.toolbar.appendChild(t)}e.init&&e.init(this)}catch(t){console.error(`NeikiEditor: Plugin "${e.name}" failed to initialize`,t)}})}insertHTML(e){this.commands.insertHTML(e)}getSelection(){return m.getSelection()}wrapSelection(e,t={}){const i=window.getSelection();if(!i.rangeCount||i.getRangeAt(0).collapsed)return;const o=i.getRangeAt(0),n=document.createElement(e);Object.entries(t).forEach(([e,t])=>{n.setAttribute(e,t)});try{o.surroundContents(n),this.history.record(),this.triggerChange()}catch(e){const t=o.extractContents();n.appendChild(t),o.insertNode(n),this.history.record(),this.triggerChange()}}unwrapSelection(e){const t=window.getSelection();if(!t.rangeCount)return;let i=t.getRangeAt(0).commonAncestorContainer;i.nodeType===Node.TEXT_NODE&&(i=i.parentNode);const o=i.closest(e);if(o&&this.contentArea.contains(o)){const e=o.parentNode;for(;o.firstChild;)e.insertBefore(o.firstChild,o);e.removeChild(o),this.history.record(),this.triggerChange()}}execCommand(e,t=null){this.commands.exec(e,t)}initDragDrop(){let e=0;this.contentArea.addEventListener("dragenter",t=>{t.preventDefault(),t.dataTransfer.types.includes("Files")&&(e++,this.contentArea.classList.add("neiki-drag-over"))}),this.contentArea.addEventListener("dragleave",t=>{t.preventDefault(),t.dataTransfer.types.includes("Files")&&(e--,0===e&&this.contentArea.classList.remove("neiki-drag-over"))}),this.contentArea.addEventListener("dragover",e=>{e.preventDefault()}),this.contentArea.addEventListener("drop",t=>{t.preventDefault(),e=0,this.contentArea.classList.remove("neiki-drag-over");const i=Array.from(t.dataTransfer.files).filter(e=>e.type.startsWith("image/"));if(i.length>0){const e=t.clientX,o=t.clientY,n=()=>{const t=document.caretRangeFromPoint(e,o);if(t){const e=window.getSelection();e.removeAllRanges(),e.addRange(t)}};"function"==typeof this.config.imageUploadHandler?(async()=>{for(const e of i)try{n();const t=await this.config.imageUploadHandler(e);t&&this.commands.insertImage(t,e.name,"")}catch(e){console.error("NeikiEditor: Image upload failed",e)}})():i.forEach(e=>{const t=new FileReader;t.onload=t=>{n(),this.commands.insertImage(t.target.result,e.name,"")},t.readAsDataURL(e)})}})}}class z{constructor(e){this.editor=e,this.wrapper=null,this.currentImg=null,this.isResizing=!1,this.startX=0,this.startY=0,this.startWidth=0,this.startHeight=0,this.aspectRatio=1,this.handle=null,this.bindEvents()}bindEvents(){this.editor.contentArea.addEventListener("click",e=>{const t=e.target.closest("img");t&&this.editor.contentArea.contains(t)?(e.preventDefault(),this.selectImage(t)):e.target.closest(".neiki-img-resize-handle")||this.deselect()}),this.editor.contentArea.addEventListener("dragstart",e=>{"IMG"===e.target.tagName&&e.preventDefault()}),document.addEventListener("mousedown",e=>{!this.wrapper||this.wrapper.contains(e.target)||this.editor.contentArea.contains(e.target)||this.deselect()}),document.addEventListener("touchstart",e=>{!this.wrapper||this.wrapper.contains(e.target)||this.editor.contentArea.contains(e.target)||this.deselect()})}selectImage(e){this.deselect(),this.currentImg=e,this.wrapper=document.createElement("span"),this.wrapper.className="neiki-img-resizable",this.wrapper.contentEditable="false",this.wrapper.setAttribute("data-neiki-resizer","true"),e.parentNode.insertBefore(this.wrapper,e),this.wrapper.appendChild(e),["nw","ne","sw","se"].forEach(e=>{const t=document.createElement("span");t.className="neiki-img-resize-handle "+e,t.setAttribute("data-pos",e),t.addEventListener("mousedown",t=>this.startResize(t,e)),t.addEventListener("touchstart",t=>{t.preventDefault();const i=t.touches[0];this.startResize(i,e,!0)},{passive:!1}),this.wrapper.appendChild(t)}),this.sizeLabel=document.createElement("span"),this.sizeLabel.className="neiki-img-size-label",this.sizeLabel.textContent=Math.round(e.offsetWidth)+" × "+Math.round(e.offsetHeight),this.wrapper.appendChild(this.sizeLabel),this.selectWrapperRange()}selectWrapperRange(){if(!this.wrapper)return;this.editor.focus();const e=window.getSelection(),t=document.createRange();t.selectNode(this.wrapper),e.removeAllRanges(),e.addRange(t)}getSelectedImageClipboardData(){if(!this.currentImg||!this.wrapper||!this.editor.contentArea.contains(this.wrapper))return null;const e=this.currentImg.cloneNode(!0);return{html:e.outerHTML,text:e.getAttribute("src")||""}}deleteSelectedImage(){if(!this.currentImg||!this.wrapper||!this.editor.contentArea.contains(this.wrapper))return!1;const e=this.wrapper.parentNode,t=document.createTextNode("");e.insertBefore(t,this.wrapper),this.wrapper.remove(),this.wrapper=null,this.currentImg=null,this.sizeLabel=null;const i=document.createRange();t.parentNode?(i.setStartAfter(t),t.remove()):(i.selectNodeContents(this.editor.contentArea),i.collapse(!1)),i.collapse(!0);const o=window.getSelection();return o.removeAllRanges(),o.addRange(i),this.editor.savedSelectionRange=i.cloneRange(),this.editor._ensureDefaultBlock(),this.editor.history.record(),this.editor.syncToOriginal(),this.editor.triggerChange(),this.editor.updateStatusBar(),!0}deselect(){if(this.wrapper&&this.currentImg){const e=this.currentImg,t=this.wrapper.parentNode;t&&(t.insertBefore(e,this.wrapper),this.wrapper.remove())}this.wrapper=null,this.currentImg=null,this.sizeLabel=null}startResize(e,t,i=!1){if(e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),this.isResizing=!0,this.handle=t,this.startX=e.clientX,this.startY=e.clientY,this.startWidth=this.currentImg.offsetWidth,this.startHeight=this.currentImg.offsetHeight,this.aspectRatio=this.startWidth/this.startHeight,i){const e=e=>{e.preventDefault(),this.onResize(e.touches[0])},t=()=>{this.isResizing=!1,document.removeEventListener("touchmove",e),document.removeEventListener("touchend",t),this.editor.history.record(),this.editor.triggerChange()};document.addEventListener("touchmove",e,{passive:!1}),document.addEventListener("touchend",t)}else{const e=e=>this.onResize(e),t=()=>{this.isResizing=!1,document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",t),this.editor.history.record(),this.editor.triggerChange()};document.addEventListener("mousemove",e),document.addEventListener("mouseup",t)}}onResize(e){if(!this.isResizing||!this.currentImg)return;const t=e.clientX-this.startX;e.clientY,this.startY;let i,o;switch(this.handle){case"se":case"ne":i=this.startWidth+t;break;case"sw":case"nw":i=this.startWidth-t}i=Math.max(30,i),o=Math.round(i/this.aspectRatio),this.currentImg.style.width=i+"px",this.currentImg.style.height=o+"px",this.currentImg.removeAttribute("width"),this.currentImg.removeAttribute("height"),this.sizeLabel&&(this.sizeLabel.textContent=Math.round(i)+" × "+Math.round(o))}destroy(){this.deselect()}}class E{constructor(e){this.editor=e,this.isResizing=!1,this.currentHandle=null,this.startX=0,this.startWidthLeft=0,this.startWidthRight=0,this.cellLeft=null,this.cellRight=null,this.bindEvents()}bindEvents(){this.editor.contentArea.addEventListener("mousemove",e=>{if(this.isResizing)return;const t=e.target.closest("td, th");t?this.showHandle(t,e):this.removeHandles()}),this.editor.contentArea.addEventListener("mouseleave",()=>{this.isResizing||this.removeHandles()})}showHandle(e,t){const i=e.getBoundingClientRect(),o=t.clientX>i.right-6,n=t.clientX<i.left+6;if(this.removeHandles(),!o&&!n)return;const a=e.closest("table");if(!a)return;let r,l;const s=e.closest("tr"),d=Array.from(s.cells).indexOf(e);if(o&&d<s.cells.length-1)r=e,l=s.cells[d+1];else{if(!(n&&d>0))return;r=s.cells[d-1],l=e}const c=document.createElement("div");c.className="neiki-table-col-resize-handle";const h=r.getBoundingClientRect(),p=this.editor.contentArea.getBoundingClientRect();c.style.left=h.right-p.left-3+this.editor.contentArea.scrollLeft+"px",c.style.top=a.getBoundingClientRect().top-p.top+this.editor.contentArea.scrollTop+"px",c.style.height=a.offsetHeight+"px",c.addEventListener("mousedown",e=>{e.preventDefault(),e.stopPropagation(),this.startResize(e,r,l,a)}),this.editor.contentArea.appendChild(c),this.currentHandle=c}removeHandles(){this.currentHandle&&(this.currentHandle.remove(),this.currentHandle=null)}startResize(e,t,i,o){this.isResizing=!0,this.startX=e.clientX,this.cellLeft=t,this.cellRight=i,o.style.tableLayout="fixed";const n=o.rows[0];n&&Array.from(n.cells).forEach(e=>{e.style.width||(e.style.width=e.offsetWidth+"px")}),this.startWidthLeft=t.offsetWidth,this.startWidthRight=i.offsetWidth,this.removeHandles();const a=e=>{const n=e.clientX-this.startX,a=Math.max(40,this.startWidthLeft+n),r=Math.max(40,this.startWidthRight-n),l=Array.from(t.closest("tr").cells).indexOf(t),s=Array.from(i.closest("tr").cells).indexOf(i);Array.from(o.rows).forEach(e=>{e.cells[l]&&(e.cells[l].style.width=a+"px"),e.cells[s]&&(e.cells[s].style.width=r+"px")})},r=()=>{this.isResizing=!1,document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",r),this.editor.history.record(),this.editor.triggerChange()};document.addEventListener("mousemove",a),document.addEventListener("mouseup",r)}destroy(){this.removeHandles()}}class L{constructor(e){this.editor=e,this.gripEl=null,this.dragBlock=null,this.placeholder=null,this.isDragging=!1,this.offsetY=0,this.ghostEl=null,this.bindEvents()}getTopLevelBlocks(){return Array.from(this.editor.contentArea.children).filter(e=>e.nodeType===Node.ELEMENT_NODE&&!e.classList.contains("neiki-block-placeholder")&&!e.classList.contains("neiki-block-grip"))}getBlockFromPoint(e){const t=this.getTopLevelBlocks();for(let i=t.length-1;i>=0;i--){if(e>=t[i].getBoundingClientRect().top)return{block:t[i],index:i}}return t.length>0?{block:t[0],index:0}:null}bindEvents(){this.editor.contentArea.addEventListener("mousemove",e=>{if(this.isDragging)return;const t=this.getBlockAt(e.target);t?this.showGrip(t):this.hideGrip()}),this.editor.contentArea.addEventListener("mouseleave",()=>{this.isDragging||this.hideGrip()})}getBlockAt(e){if(!e||e===this.editor.contentArea)return null;let t=e;for(;t&&t.parentNode!==this.editor.contentArea;)t=t.parentNode;return t&&t.nodeType===Node.ELEMENT_NODE&&t.parentNode===this.editor.contentArea?t:null}showGrip(e){if(this.gripEl&&this.gripEl._block===e)return;this.hideGrip();const t=document.createElement("div");t.className="neiki-block-grip",t.innerHTML=u.grip,t.title="Drag to reorder",t.contentEditable="false",t._block=e;const i=this.editor.contentArea.getBoundingClientRect(),o=e.getBoundingClientRect();t.style.top=o.top-i.top+this.editor.contentArea.scrollTop+"px",t.style.left="-28px",t.addEventListener("mousedown",t=>{t.preventDefault(),t.stopPropagation(),this.startDrag(t,e)}),this.editor.contentArea.appendChild(t),this.gripEl=t}hideGrip(){this.gripEl&&(this.gripEl.remove(),this.gripEl=null)}startDrag(e,t){this.isDragging=!0,this.dragBlock=t,this.hideGrip(),this.ghostEl=t.cloneNode(!0),this.ghostEl.className=(this.ghostEl.className||"")+" neiki-block-ghost",this.ghostEl.style.width=t.offsetWidth+"px",document.body.appendChild(this.ghostEl);const i=t.getBoundingClientRect();this.offsetY=e.clientY-i.top,this.ghostEl.style.left=i.left+"px",this.ghostEl.style.top=e.clientY-this.offsetY+"px",this.placeholder=document.createElement("div"),this.placeholder.className="neiki-block-placeholder",this.placeholder.style.height=t.offsetHeight+"px",t.parentNode.insertBefore(this.placeholder,t),t.style.display="none";const o=e=>{this.ghostEl.style.top=e.clientY-this.offsetY+"px";const t=this.getBlockFromPoint(e.clientY);if(t&&t.block!==this.dragBlock&&t.block!==this.placeholder){const i=t.block.getBoundingClientRect(),o=i.top+i.height/2;e.clientY<o?t.block.parentNode.insertBefore(this.placeholder,t.block):t.block.parentNode.insertBefore(this.placeholder,t.block.nextSibling)}},n=()=>{document.removeEventListener("mousemove",o),document.removeEventListener("mouseup",n),this.placeholder.parentNode.insertBefore(this.dragBlock,this.placeholder),this.dragBlock.style.display="",this.placeholder.remove(),this.ghostEl.remove(),this.isDragging=!1,this.dragBlock=null,this.placeholder=null,this.ghostEl=null,this.editor.history.record(),this.editor.triggerChange()};document.addEventListener("mousemove",o),document.addEventListener("mouseup",n)}moveBlockUp(e){if(e||(e=this.getSelectedBlock()),!e)return;const t=e.previousElementSibling;t&&t.parentNode===this.editor.contentArea&&(t.parentNode.insertBefore(e,t),this.editor.history.record(),this.editor.triggerChange())}moveBlockDown(e){if(e||(e=this.getSelectedBlock()),!e)return;const t=e.nextElementSibling;t&&t.parentNode===this.editor.contentArea&&(t.parentNode.insertBefore(e,t.nextSibling),this.editor.history.record(),this.editor.triggerChange())}getSelectedBlock(){const e=window.getSelection();if(!e||!e.rangeCount)return null;let t=e.getRangeAt(0).startContainer;for(t.nodeType===Node.TEXT_NODE&&(t=t.parentNode);t&&t.parentNode!==this.editor.contentArea;)t=t.parentNode;return t&&t.parentNode===this.editor.contentArea?t:null}destroy(){this.hideGrip(),this.ghostEl&&this.ghostEl.remove(),this.placeholder&&this.placeholder.remove()}}class S{constructor(e){this.editor=e,this.toolbar=null,this.isVisible=!1,this.hideTimeout=null,this.createToolbar(),this.bindEvents()}createToolbar(){this.toolbar=m.createElement("div",{className:"neiki-floating-toolbar"});[{item:"moveUp",icon:u.moveUp,title:"Move block up"},{item:"moveDown",icon:u.moveDown,title:"Move block down"}].forEach(({item:e,icon:t,title:i})=>{const o=m.createElement("button",{className:"neiki-toolbar-btn neiki-floating-btn neiki-floating-move-btn",title:i,type:"button",innerHTML:t,"data-command":e});o.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation(),this.handleButtonClick(e)}),this.toolbar.appendChild(o)});const e=m.createElement("span",{className:"neiki-floating-divider"});this.toolbar.appendChild(e);[{item:"bold",icon:u.bold,title:"Bold"},{item:"italic",icon:u.italic,title:"Italic"},{item:"underline",icon:u.underline,title:"Underline"},{item:"strikeThrough",icon:u.strikethrough,title:"Strikethrough"},{item:"link",icon:u.link,title:"Link"}].forEach(({item:e,icon:t,title:i})=>{const o=m.createElement("button",{className:"neiki-toolbar-btn neiki-floating-btn",title:i,type:"button",innerHTML:t,"data-command":e});o.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation(),this.handleButtonClick(e)}),this.toolbar.appendChild(o)}),document.body.appendChild(this.toolbar)}bindEvents(){document.addEventListener("selectionchange",()=>{clearTimeout(this.hideTimeout),this.hideTimeout=setTimeout(()=>this.updatePosition(),100)}),document.addEventListener("mouseup",()=>{setTimeout(()=>this.updatePosition(),10)}),document.addEventListener("scroll",()=>{this.isVisible&&this.updatePosition()})}updatePosition(){const e=window.getSelection();if(!e.rangeCount||e.isCollapsed||!this.editor.contentArea.contains(e.anchorNode))return void this.hide();const t=e.getRangeAt(0).getBoundingClientRect();if(0===t.width&&0===t.height)return void this.hide();this.show();const i=this.toolbar.getBoundingClientRect(),o=t.left+t.width/2-i.width/2,n=t.top-i.height-10,a=Math.max(10,Math.min(o,window.innerWidth-i.width-10)),r=Math.max(10,n);this.toolbar.style.left=a+"px",this.toolbar.style.top=r+"px"}show(){this.isVisible||(this.toolbar.classList.add("show"),this.isVisible=!0)}hide(){this.isVisible&&(this.toolbar.classList.remove("show"),this.isVisible=!1)}handleButtonClick(e){if("link"===e){const e=m.getSelection();this.editor.modal.open("link",{text:e.toString()})}else"moveUp"===e?this.editor.blockDragDrop&&this.editor.blockDragDrop.moveBlockUp():"moveDown"===e?this.editor.blockDragDrop&&this.editor.blockDragDrop.moveBlockDown():this.editor.commands[e]();this.hide()}}const T=[];C.registerPlugin=function(e){e.name?T.push(e):console.error("NeikiEditor: Plugin must have a name")},C.getPlugins=function(){return[...T]};class A{constructor(e){this.editor=e,this.menu=null,this.currentCell=null,this.createMenu(),this.bindEvents()}createMenu(){this.menu=m.createElement("div",{className:"neiki-context-menu"}),this.menu.innerHTML=`\n <div class="neiki-context-item" data-action="insertRowAbove">${u.table} Insert Row Above</div>\n <div class="neiki-context-item" data-action="insertRowBelow">${u.table} Insert Row Below</div>\n <div class="neiki-context-item" data-action="insertColLeft">${u.table} Insert Column Left</div>\n <div class="neiki-context-item" data-action="insertColRight">${u.table} Insert Column Right</div>\n <div class="neiki-context-divider"></div>\n <div class="neiki-context-item" data-action="deleteRow">${u.eraser} Delete Row</div>\n <div class="neiki-context-item" data-action="deleteCol">${u.eraser} Delete Column</div>\n <div class="neiki-context-item neiki-context-danger" data-action="deleteTable">${u.eraser} Delete Table</div>\n <div class="neiki-context-divider"></div>\n <div class="neiki-context-item" data-action="mergeCells">${u.table} Merge Cells</div>\n <div class="neiki-context-item" data-action="splitCell">${u.table} Split Cell</div>\n `,document.body.appendChild(this.menu),this.menu.querySelectorAll(".neiki-context-item").forEach(e=>{e.addEventListener("click",t=>{const i=e.dataset.action;this.executeAction(i),this.hide()})})}bindEvents(){this.editor.contentArea.addEventListener("contextmenu",e=>{const t=e.target.closest("td, th");t&&(e.preventDefault(),this.currentCell=t,this.show(e.clientX,e.clientY))}),document.addEventListener("click",e=>{this.menu.contains(e.target)||this.hide()}),document.addEventListener("keydown",e=>{"Escape"===e.key&&this.hide()})}show(e,t){this.menu.style.display="block";const i=this.menu.getBoundingClientRect(),o=window.innerWidth,n=window.innerHeight;e+i.width>o&&(e=o-i.width-10),t+i.height>n&&(t=n-i.height-10),this.menu.style.left=e+"px",this.menu.style.top=t+"px"}hide(){this.menu.style.display="none",this.currentCell=null}executeAction(e){if(!this.currentCell)return;const t=this.currentCell.closest("table"),i=this.currentCell.closest("tr");if(!t||!i)return;const o=Array.from(t.rows).indexOf(i),n=Array.from(i.cells).indexOf(this.currentCell);switch(e){case"insertRowAbove":this.insertRow(t,o,"before");break;case"insertRowBelow":this.insertRow(t,o,"after");break;case"insertColLeft":this.insertColumn(t,n,"before");break;case"insertColRight":this.insertColumn(t,n,"after");break;case"deleteRow":this.deleteRow(t,o);break;case"deleteCol":this.deleteColumn(t,n);break;case"deleteTable":t.remove();break;case"mergeCells":this.mergeCells();break;case"splitCell":this.splitCell()}this.editor.history.record(),this.editor.triggerChange()}insertRow(e,t,i){const o=e.rows[t].cells.length,n=e.insertRow("before"===i?t:t+1);for(let e=0;e<o;e++){n.insertCell().innerHTML="&nbsp;"}}insertColumn(e,t,i){const o="before"===i?t:t+1;for(let t of e.rows){const e=t.insertCell(o);if(e.innerHTML="&nbsp;",t.cells[0]&&"TH"===t.cells[0].tagName){const t=document.createElement("th");t.innerHTML="&nbsp;",e.parentNode.replaceChild(t,e)}}}deleteRow(e,t){e.rows.length>1&&e.deleteRow(t)}deleteColumn(e,t){for(let i of e.rows)i.cells.length>1&&i.cells[t]&&i.deleteCell(t)}mergeCells(){if(!window.getSelection().rangeCount)return;const e=this.currentCell,t=parseInt(e.getAttribute("colspan")||1);e.setAttribute("colspan",t+1);const i=e.nextElementSibling;!i||"TD"!==i.tagName&&"TH"!==i.tagName||(e.innerHTML+=" "+i.innerHTML,i.remove())}splitCell(){const e=this.currentCell,t=parseInt(e.getAttribute("colspan")||1);if(t>1){e.setAttribute("colspan",t-1);const i=document.createElement(e.tagName);i.innerHTML="&nbsp;",e.after(i)}}}"undefined"!=typeof jQuery&&(jQuery.fn.neikiEditor=function(e){return this.each(function(){jQuery.data(this,"neikiEditor")||jQuery.data(this,"neikiEditor",new C(this,e))})}),C.addTranslation=o,e.NeikiEditor=C,e.createNeikiEditor=function(e,t){return new C(e,t)},"function"==typeof define&&define.amd&&define("NeikiEditor",[],function(){return C}),"object"==typeof module&&module.exports&&(module.exports=C)}("undefined"!=typeof window?window:this);
1
+ !function(e){"use strict";!function(){if(document.getElementById("neiki-editor-styles"))return;const e=document.createElement("style");e.id="neiki-editor-styles",e.textContent=".neiki-checkbox,.neiki-find-replace-option input{accent-color:var(--neiki-accent-color)}.neiki-modal,.neiki-modal-overlay.show .neiki-modal{animation:.2s neiki-modal-in}:root{--neiki-bg-primary:#ffffff;--neiki-bg-secondary:#f8f9fa;--neiki-bg-tertiary:#e9ecef;--neiki-bg-hover:#dee2e6;--neiki-bg-active:#ced4da;--neiki-border-color:#dee2e6;--neiki-border-color-dark:#adb5bd;--neiki-text-primary:#212529;--neiki-text-secondary:#495057;--neiki-text-muted:#6c757d;--neiki-accent-color:#0d6efd;--neiki-accent-hover:#0b5ed7;--neiki-danger-color:#dc3545;--neiki-success-color:#198754;--neiki-shadow-sm:0 1px 2px rgba(0, 0, 0, 0.05);--neiki-shadow-md:0 4px 6px rgba(0, 0, 0, 0.1);--neiki-shadow-lg:0 10px 15px rgba(0, 0, 0, 0.1);--neiki-editor-bg:#ffffff;--neiki-toolbar-bg:#f8f9fa;--neiki-statusbar-bg:#f8f9fa;--neiki-modal-overlay:rgba(0, 0, 0, 0.5);--neiki-scrollbar-thumb:#ced4da;--neiki-scrollbar-track:#f8f9fa;--neiki-selection-bg:#b3d7ff;--neiki-highlight-color:#fff3cd;--neiki-table-border:#dee2e6}.neiki-editor.neiki-dark{--neiki-bg-primary:#1e1e1e;--neiki-bg-secondary:#252526;--neiki-bg-tertiary:#2d2d30;--neiki-bg-hover:#3e3e42;--neiki-bg-active:#505050;--neiki-border-color:#3e3e42;--neiki-border-color-dark:#505050;--neiki-text-primary:#d4d4d4;--neiki-text-secondary:#a0a0a0;--neiki-text-muted:#808080;--neiki-accent-color:#4fc3f7;--neiki-accent-hover:#29b6f6;--neiki-danger-color:#f44336;--neiki-success-color:#4caf50;--neiki-shadow-sm:0 1px 2px rgba(0, 0, 0, 0.2);--neiki-shadow-md:0 4px 6px rgba(0, 0, 0, 0.3);--neiki-shadow-lg:0 10px 15px rgba(0, 0, 0, 0.4);--neiki-editor-bg:#1e1e1e;--neiki-toolbar-bg:#252526;--neiki-statusbar-bg:#252526;--neiki-modal-overlay:rgba(0, 0, 0, 0.7);--neiki-scrollbar-thumb:#505050;--neiki-scrollbar-track:#2d2d30;--neiki-selection-bg:#264f78;--neiki-highlight-color:#5c4d00;--neiki-table-border:#3e3e42}.neiki-editor{display:flex;flex-direction:column;width:100%;height:100%;min-height:400px;background:var(--neiki-bg-primary);border:1px solid var(--neiki-border-color);border-radius:8px;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:14px;color:var(--neiki-text-primary);box-shadow:var(--neiki-shadow-md)}.neiki-editor *{box-sizing:border-box}.neiki-editor.neiki-fullscreen{position:fixed!important;top:0!important;left:0!important;right:0!important;bottom:0!important;width:100vw!important;height:100vh!important;z-index:999999!important;border-radius:0!important;border:none!important}.neiki-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:2px;padding:6px 8px;background:var(--neiki-toolbar-bg);border-bottom:1px solid var(--neiki-border-color);min-height:44px}.neiki-editor.neiki-sticky-toolbar{overflow:visible}.neiki-editor.neiki-sticky-toolbar .neiki-toolbar{position:sticky;top:0;z-index:100;border-radius:8px 8px 0 0}.neiki-toolbar-group{display:inline-flex;align-items:center;gap:2px;padding:0 4px;flex-wrap:nowrap}.neiki-toolbar-group:not(:last-child){border-right:1px solid var(--neiki-border-color);padding-right:8px;margin-right:4px}.neiki-toolbar-divider{width:1px;height:24px;background:var(--neiki-border-color);margin:0 4px}.neiki-btn,.neiki-toolbar-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;background:0 0;border:1px solid transparent;border-radius:4px;cursor:pointer;color:var(--neiki-text-secondary);transition:.15s;position:relative}.neiki-btn:hover,.neiki-fontsize-btn:hover,.neiki-modal-close:hover,.neiki-preview-close:hover,.neiki-toolbar-btn:hover{background:var(--neiki-bg-hover);color:var(--neiki-text-primary)}.neiki-btn:active,.neiki-floating-btn:active,.neiki-toolbar-btn:active{background:var(--neiki-bg-active)}.neiki-btn.active,.neiki-toolbar-btn.active{background:var(--neiki-bg-active);color:var(--neiki-accent-color);border-color:var(--neiki-accent-color)}.neiki-btn:disabled,.neiki-toolbar-btn:disabled{opacity:.4;cursor:not-allowed}.neiki-btn svg,.neiki-toolbar-btn svg{width:18px;height:18px;fill:currentColor;pointer-events:none}.neiki-select{height:32px;padding:0 28px 0 10px;background:var(--neiki-bg-primary);border:1px solid var(--neiki-border-color);border-radius:4px;color:var(--neiki-text-primary);font-size:13px;cursor:pointer;appearance:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%236c757d' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right 8px center;min-width:100px}.neiki-select:hover{border-color:var(--neiki-border-color-dark)}.neiki-select:focus{outline:0;border-color:var(--neiki-accent-color);box-shadow:0 0 0 2px rgba(13,110,253,.15)}.neiki-color-custom,.neiki-statusbar{border-top:1px solid var(--neiki-border-color)}.neiki-color-btn{position:relative;width:36px}.neiki-color-btn .neiki-color-indicator{position:absolute;bottom:4px;left:50%;transform:translateX(-50%);width:16px;height:3px;border-radius:1px;background:currentColor}.neiki-checkbox-wrapper{display:flex;align-items:center;gap:6px;padding:0 8px;height:32px;font-size:12px;color:var(--neiki-text-secondary);cursor:pointer;user-select:none}.neiki-checkbox{width:16px;height:16px;cursor:pointer}.neiki-content-wrapper,.neiki-editor-wrapper{flex:1;display:flex;flex-direction:column;overflow:hidden;position:relative}.neiki-content{flex:1;padding:20px 24px;background:var(--neiki-editor-bg);overflow-y:auto;outline:0;line-height:1.6;color:var(--neiki-text-primary);min-height:200px}.neiki-code-view-textarea:focus,.neiki-content:focus{outline:0}.neiki-content:empty::before{content:attr(data-placeholder);color:var(--neiki-text-muted);font-style:italic;pointer-events:none}.neiki-content.neiki-drag-over{border:2px dashed var(--neiki-accent-color);background:rgba(13,110,253,.05)}.neiki-content.neiki-drag-over::after{content:'Drop images here';position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:var(--neiki-accent-color);font-weight:600;font-size:16px;pointer-events:none;z-index:10}.neiki-editor.neiki-disabled{opacity:.6;pointer-events:none}.neiki-content::-webkit-scrollbar{width:10px}.neiki-content::-webkit-scrollbar-track{background:var(--neiki-scrollbar-track)}.neiki-content::-webkit-scrollbar-thumb{background:var(--neiki-scrollbar-thumb);border-radius:5px}.neiki-content::-webkit-scrollbar-thumb:hover{background:var(--neiki-border-color-dark)}.neiki-content p{margin:0 0 1em}.neiki-content h1{font-size:2em;font-weight:700;margin:0 0 .5em}.neiki-content h2{font-size:1.5em;font-weight:600;margin:0 0 .5em}.neiki-content h3{font-size:1.25em;font-weight:600;margin:0 0 .5em}.neiki-content h4{font-size:1.1em;font-weight:600;margin:0 0 .5em}.neiki-content h5{font-size:1em;font-weight:600;margin:0 0 .5em}.neiki-content h6{font-size:.9em;font-weight:600;margin:0 0 .5em}.neiki-content ol,.neiki-content ul{margin:0 0 1em;padding-left:2em}.neiki-content li{margin-bottom:.25em}.neiki-content blockquote{margin:0 0 1em;padding:10px 20px;border-left:4px solid var(--neiki-accent-color);background:var(--neiki-bg-secondary);font-style:italic}.neiki-content code,.neiki-content pre{background:var(--neiki-bg-tertiary);font-family:Consolas,Monaco,monospace}.neiki-content pre{margin:0 0 1em;padding:16px;border-radius:4px;overflow-x:auto;font-size:13px}.neiki-content code{padding:2px 6px;border-radius:3px;font-size:.9em}.neiki-content a{color:var(--neiki-accent-color);text-decoration:underline}.neiki-content a:hover{color:var(--neiki-accent-hover)}.neiki-content img{max-width:100%;height:auto;border-radius:4px;cursor:pointer}.neiki-content img.neiki-selected{outline:2px solid var(--neiki-accent-color);outline-offset:2px}.neiki-highlight{background:var(--neiki-highlight-color);padding:1px 0}.neiki-content table,.neiki-table{width:100%;border-collapse:collapse;margin:1em 0;table-layout:fixed}.neiki-content table td,.neiki-content table th{border:1px solid var(--neiki-table-border);padding:8px 12px;min-width:50px;vertical-align:top;position:relative}.neiki-content table th{background:var(--neiki-bg-secondary);font-weight:600}.neiki-btn-secondary:hover,.neiki-button-secondary:hover,.neiki-content table td:hover,.neiki-content table th:hover,.neiki-context-item:hover,.neiki-context-menu-item:hover,.neiki-dropdown-item:hover,.neiki-fontsize-dropdown-item:hover,.neiki-special-char-item:hover{background:var(--neiki-bg-hover)}.neiki-content table td.neiki-cell-selected,.neiki-content table th.neiki-cell-selected{background:var(--neiki-selection-bg)}.neiki-table-resize-handle{position:absolute;top:0;right:-3px;width:6px;height:100%;cursor:col-resize;z-index:10}.neiki-table-resize-handle:hover{background:var(--neiki-accent-color)}.neiki-statusbar{display:flex;justify-content:space-between;align-items:center;padding:6px 12px;background:var(--neiki-statusbar-bg);font-size:12px;color:var(--neiki-text-muted)}.neiki-statusbar-left,.neiki-statusbar-right{display:flex;align-items:center;gap:16px}.neiki-statusbar-item{display:flex;align-items:center;gap:4px}.neiki-statusbar-block{font-family:Consolas,Monaco,monospace;font-size:11px;padding:2px 6px;background:var(--neiki-bg-tertiary);border-radius:3px;color:var(--neiki-accent-color);font-weight:600;border:1px solid var(--neiki-border-color)}.neiki-color-picker,.neiki-dropdown{position:absolute;top:100%;left:0;z-index:1000;border:1px solid var(--neiki-border-color);box-shadow:var(--neiki-shadow-lg)}.neiki-dropdown{min-width:180px;background:var(--neiki-bg-primary);border-radius:6px;padding:4px;margin-top:4px}.neiki-dropdown-item{display:flex;align-items:center;gap:6px;padding:7px 10px;border-radius:4px;cursor:pointer;color:var(--neiki-text-primary);font-size:13px;transition:background .1s}.neiki-dropdown-item.active{background:var(--neiki-bg-active);color:var(--neiki-accent-color)}.neiki-context-divider,.neiki-context-menu-divider,.neiki-dropdown-divider{height:1px;background:var(--neiki-border-color);margin:4px 0}.neiki-color-picker{background:var(--neiki-bg-primary);border-radius:8px;padding:8px;margin-top:4px;display:flex;flex-direction:column;gap:6px}.neiki-color-grid{display:grid;grid-template-columns:repeat(10,1fr);gap:2px}.neiki-color-custom{display:flex;align-items:center;gap:6px}.neiki-color-custom-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:28px;height:28px;border:1px solid var(--neiki-border-color);border-radius:4px;padding:2px;cursor:pointer;background:0 0}.neiki-color-custom-input::-webkit-color-swatch-wrapper{padding:0}.neiki-color-custom-input::-webkit-color-swatch{border:none;border-radius:2px}.neiki-color-custom-input::-moz-color-swatch{border:none;border-radius:2px}.neiki-color-hex-input{flex:1;height:28px;padding:0 8px;border:1px solid var(--neiki-border-color);border-radius:4px;font-size:12px;font-family:monospace;background:var(--neiki-bg-secondary);color:var(--neiki-text-primary);outline:0}.neiki-color-hex-input:focus{border-color:var(--neiki-accent-color);box-shadow:0 0 0 2px rgba(13,110,253,.15)}.neiki-color-apply-btn{height:28px;padding:0 10px;border:none;border-radius:4px;font-size:12px;font-weight:500;background:var(--neiki-accent-color);color:#fff;cursor:pointer;transition:background .15s}.neiki-emoji-picker,.neiki-special-picker{max-width:calc(100vw - 16px);overflow-y:auto;background:var(--neiki-bg-primary);padding:8px;margin-top:4px;position:absolute;top:100%;z-index:1000;box-shadow:var(--neiki-shadow-lg);left:0}.neiki-btn-primary:hover,.neiki-button-primary:hover,.neiki-color-apply-btn:hover{background:var(--neiki-accent-hover)}.neiki-color-swatch{width:22px;height:22px;border-radius:3px;cursor:pointer;border:1px solid var(--neiki-border-color);transition:transform .1s}.neiki-color-swatch:hover{transform:scale(1.2);z-index:1}.neiki-color-swatch.neiki-color-reset{background:#fff;position:relative;overflow:hidden;border:1px solid #ccc}.neiki-color-preset.active,.neiki-special-item:hover{border-color:var(--neiki-accent-color)}.neiki-color-swatch.neiki-color-reset::after{content:'';position:absolute;top:50%;left:-2px;right:-2px;height:2px;background:#e53935;transform:rotate(-45deg);transform-origin:center;pointer-events:none}.neiki-color-picker-label{font-size:11px;font-weight:600;color:var(--neiki-text-muted);text-transform:uppercase;margin-bottom:8px}.neiki-emoji-item,.neiki-special-item{align-items:center;font-size:18px;cursor:pointer}.neiki-emoji-picker{width:280px;max-height:250px;border:1px solid var(--neiki-border-color);border-radius:8px;display:grid;grid-template-columns:repeat(10,1fr);gap:2px}.neiki-emoji-item{display:flex;justify-content:center;width:24px;height:24px;border-radius:4px;transition:background .15s,transform .1s}.neiki-emoji-item:hover{background:var(--neiki-bg-hover);transform:scale(1.2)}.neiki-special-picker{width:320px;max-height:280px;border:1px solid var(--neiki-border-color);border-radius:8px;display:grid;grid-template-columns:repeat(8,1fr);gap:4px}.neiki-special-item{display:flex;justify-content:center;width:32px;height:32px;border-radius:4px;border:1px solid var(--neiki-border-color);background:var(--neiki-bg-secondary);transition:.15s}.neiki-special-item:hover{background:var(--neiki-accent-color);color:#fff;transform:scale(1.1)}.neiki-highlight-find{background:#ffeb3b;padding:1px 0;border-radius:2px}.neiki-highlight-current{background:#ff9800;outline:#e65100 solid 2px}.neiki-color-presets{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;margin-bottom:12px}.neiki-color-preset{width:32px;height:32px;border-radius:4px;border:2px solid transparent;cursor:pointer;transition:transform .1s,border-color .1s}.neiki-color-preset:hover{transform:scale(1.1)}.neiki-color-preset.neiki-color-reset{background:linear-gradient(45deg,#fff 45%,red 45%,red 55%,#fff 55%);border:1px solid var(--neiki-border-color)}.neiki-color-custom{display:flex;align-items:center;gap:8px;padding-top:8px;border-top:1px solid var(--neiki-border-color)}.neiki-color-custom input[type=color]{width:40px;height:32px;padding:0;border:1px solid var(--neiki-border-color);border-radius:4px;cursor:pointer}.neiki-color-custom input[type=text]{flex:1;height:32px;padding:0 8px;border:1px solid var(--neiki-border-color);border-radius:4px;background:var(--neiki-bg-primary);color:var(--neiki-text-primary);font-size:12px;font-family:monospace}.neiki-table-picker,.neiki-table-picker-cell{border:1px solid var(--neiki-border-color);background:var(--neiki-bg-primary)}.neiki-table-picker{position:absolute;top:100%;left:0;z-index:1000;border-radius:8px;box-shadow:var(--neiki-shadow-lg);padding:12px;display:none}.neiki-context-menu.show,.neiki-find-replace.show,.neiki-fontsize-dropdown.show,.neiki-table-picker.show{display:block}.neiki-table-picker-label{font-size:12px;color:var(--neiki-text-secondary);margin-bottom:8px;text-align:center}.neiki-dark .neiki-modal h3,.neiki-dark .neiki-modal-header h3,.neiki-modal-title{color:var(--neiki-text-primary)}.neiki-table-picker-grid{display:grid;grid-template-columns:repeat(10,20px);gap:2px}.neiki-table-picker-cell{width:20px;height:20px;border-radius:2px;cursor:pointer;transition:background .1s}.neiki-table-picker-cell.active,.neiki-table-picker-cell:hover{background:var(--neiki-accent-color);border-color:var(--neiki-accent-color)}.neiki-special-chars{position:absolute;top:100%;left:0;z-index:1000;width:280px;max-height:300px;background:var(--neiki-bg-primary);border:1px solid var(--neiki-border-color);border-radius:8px;box-shadow:var(--neiki-shadow-lg);display:none;overflow:hidden}.neiki-special-chars.show{display:flex;flex-direction:column}.neiki-special-chars-grid{display:grid;grid-template-columns:repeat(10,1fr);gap:2px;padding:8px;overflow-y:auto}.neiki-special-char-item{display:flex;align-items:center;justify-content:center;width:24px;height:24px;font-size:16px;border-radius:4px;cursor:pointer;transition:background .1s}.neiki-modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:var(--neiki-modal-overlay);z-index:10000;display:flex;align-items:center;justify-content:center;opacity:0;visibility:hidden;transition:opacity .2s,visibility .2s}.neiki-modal-overlay.active,[data-tooltip]:hover::after{opacity:1;visibility:visible}.neiki-modal{background:var(--neiki-bg-primary);border-radius:12px;box-shadow:var(--neiki-shadow-lg);width:100%;max-width:440px;max-height:90vh;overflow:hidden}.neiki-modal-wide{max-width:520px}.neiki-modal-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--neiki-border-color)}.neiki-modal-title{font-size:16px;font-weight:600;margin:0}.neiki-modal-close,.neiki-preview-close{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:0 0;border:none;border-radius:4px;cursor:pointer;color:var(--neiki-text-muted);transition:background .15s}.neiki-modal-body{padding:20px;overflow-y:auto}.neiki-modal h3,.neiki-modal-header h3{color:#000;margin:0}.neiki-modal-footer{display:flex;justify-content:flex-end;gap:10px;padding:16px 20px;border-top:1px solid var(--neiki-border-color)}.neiki-modal-footer .neiki-btn{width:auto;height:38px;padding:0 16px;font-size:14px;font-weight:500;border-radius:6px}.neiki-form-divider::after,.neiki-form-divider::before{content:'';height:1px;background:var(--neiki-border-color)}.neiki-form-group{margin-bottom:16px}.neiki-find-replace-row:last-child,.neiki-form-group:last-child{margin-bottom:0}.neiki-form-group label,.neiki-form-label{display:block;margin-bottom:6px;font-size:13px;font-weight:500;color:var(--neiki-text-secondary)}.neiki-form-input,.neiki-form-textarea,.neiki-input{width:100%;background:var(--neiki-bg-primary);color:var(--neiki-text-primary);font-size:14px;transition:border-color .15s}.neiki-form-input,.neiki-input{height:40px;padding:0 12px;border:1px solid var(--neiki-border-color);border-radius:6px}.neiki-form-input:focus,.neiki-form-textarea:focus,.neiki-input:focus{outline:0;border-color:var(--neiki-accent-color);box-shadow:0 0 0 3px rgba(13,110,253,.15)}.neiki-form-input::placeholder,.neiki-input::placeholder{color:var(--neiki-text-muted)}.neiki-input[type=file]{display:flex;align-items:center;padding:0;cursor:pointer}.neiki-input[type=file]::file-selector-button{height:100%;padding:0 14px;margin-right:12px;border:none;border-right:1px solid var(--neiki-border-color);background:var(--neiki-bg-tertiary,var(--neiki-bg-hover));color:var(--neiki-text-primary);font-size:13px;font-weight:500;cursor:pointer;border-radius:5px 0 0 5px}.neiki-find-replace,.neiki-form-textarea{border:1px solid var(--neiki-border-color)}.neiki-form-row{display:flex;gap:16px}.neiki-form-divider{display:flex;align-items:center;margin:16px 0;text-align:center;position:relative}.neiki-form-divider::before{flex:1;margin-right:12px}.neiki-form-divider::after{flex:1;margin-left:12px}.neiki-form-divider span{color:var(--neiki-text-muted);font-size:12px;font-weight:500;text-transform:uppercase}.neiki-form-textarea{min-height:120px;padding:12px;border-radius:6px;font-family:inherit;resize:vertical}.neiki-btn-primary,.neiki-btn-secondary,.neiki-button{display:inline-flex;align-items:center;height:38px;padding:0 16px;font-size:14px;transition:.15s;font-weight:500;cursor:pointer}.neiki-button{justify-content:center;gap:6px;border:1px solid transparent;border-radius:6px}.neiki-btn-primary,.neiki-button-primary{background:var(--neiki-accent-color);color:#fff}.neiki-btn-secondary,.neiki-button-secondary{background:var(--neiki-bg-secondary);color:var(--neiki-text-primary);border-color:var(--neiki-border-color)}.neiki-btn-primary,.neiki-btn-secondary{justify-content:center;border:1px solid transparent;border-radius:6px}.neiki-btn-secondary{border-color:var(--neiki-border-color)}.neiki-button-danger{background:var(--neiki-danger-color);color:#fff}.neiki-code-view,.neiki-find-replace,.neiki-find-replace-input{background:var(--neiki-bg-primary)}.neiki-button-danger:hover{opacity:.9}.neiki-find-replace{position:absolute;top:0;right:0;z-index:100;width:360px;border-radius:0 0 0 8px;box-shadow:var(--neiki-shadow-lg);display:none}.neiki-find-replace-header{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-bottom:1px solid var(--neiki-border-color)}.neiki-code-view-title,.neiki-find-replace-title{font-size:13px;font-weight:600;color:var(--neiki-text-primary)}.neiki-find-replace-body{padding:12px}.neiki-find-replace-row{display:flex;gap:8px;margin-bottom:10px}.neiki-find-replace-input{flex:1;height:32px;padding:0 10px;border:1px solid var(--neiki-border-color);border-radius:4px;color:var(--neiki-text-primary);font-size:13px}.neiki-find-replace-input:focus{outline:0;border-color:var(--neiki-accent-color)}.neiki-find-replace-options{display:flex;align-items:center;gap:12px;margin-bottom:10px}.neiki-find-replace-option{display:flex;align-items:center;gap:4px;font-size:12px;color:var(--neiki-text-secondary);cursor:pointer}.neiki-find-replace-actions{display:flex;gap:6px;flex-wrap:wrap}.neiki-find-replace-btn{height:28px;padding:0 10px;font-size:12px;border-radius:4px}.neiki-find-replace-count{font-size:12px;color:var(--neiki-text-muted);margin-left:auto}.neiki-code-view{position:absolute;top:0;left:0;right:0;bottom:0;z-index:50;display:none;flex-direction:column}.neiki-code-view.show,.neiki-drop-overlay.show{display:flex}.neiki-code-view-header{display:flex;align-items:center;justify-content:space-between;padding:8px 16px;background:var(--neiki-bg-secondary);border-bottom:1px solid var(--neiki-border-color);flex-shrink:0}.neiki-code-view-textarea{flex:1;width:100%;padding:16px;border:none;background:var(--neiki-bg-primary);color:var(--neiki-text-primary);font-family:Consolas,Monaco,'Courier New',monospace;font-size:13px;line-height:1.5;resize:none}.neiki-code-view-apply{width:auto!important;padding:0 12px!important;display:inline-flex;align-items:center;gap:4px;height:30px;font-size:12px;background:var(--neiki-accent-color)!important;color:#fff!important;border-radius:5px}.neiki-context-menu,.neiki-floating-btn,.neiki-floating-toolbar{background:var(--neiki-bg-primary)}.neiki-code-view-apply:hover{background:var(--neiki-accent-hover)!important;color:#fff!important}.neiki-code-view-apply svg{width:14px!important;height:14px!important}.neiki-context-menu{position:fixed;z-index:10001;min-width:180px;border:1px solid var(--neiki-border-color);border-radius:8px;box-shadow:var(--neiki-shadow-lg);padding:4px;display:none}.neiki-context-item,.neiki-context-menu-item{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:4px;cursor:pointer;color:var(--neiki-text-primary);font-size:13px;transition:background .1s}.neiki-context-item.neiki-context-danger,.neiki-context-menu-item.danger{color:var(--neiki-danger-color)}.neiki-context-item svg,.neiki-context-menu-item svg,.neiki-dropdown-item-icon svg,.neiki-floating-btn svg,.neiki-img-toolbar-btn svg{width:16px;height:16px;fill:currentColor}.neiki-floating-toolbar{position:absolute;z-index:1000;display:none;border:1px solid var(--neiki-border-color);border-radius:8px;box-shadow:var(--neiki-shadow-lg);padding:4px}.neiki-floating-toolbar.show{display:flex;align-items:center;gap:2px}.neiki-floating-btn{width:32px;height:32px;border:none;color:var(--neiki-text-primary);border-radius:6px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:.15s}.neiki-floating-btn:hover,.neiki-img-toolbar-btn:hover{background:var(--neiki-bg-hover);color:var(--neiki-accent-color)}.neiki-floating-toolbar .neiki-btn{width:28px;height:28px}.neiki-chevron svg,.neiki-floating-toolbar .neiki-btn svg{width:14px;height:14px}.neiki-floating-divider,.neiki-img-toolbar-separator{width:1px;height:20px;background:var(--neiki-border-color);margin:0 2px}.neiki-floating-move-btn svg{width:16px;height:16px}.neiki-more-btn,[data-tooltip]{position:relative}[data-tooltip]::after{content:attr(data-tooltip);position:absolute;bottom:100%;left:50%;transform:translateX(-50%);padding:6px 10px;background:var(--neiki-text-primary);color:var(--neiki-bg-primary);font-size:11px;font-weight:500;white-space:nowrap;border-radius:4px;opacity:0;visibility:hidden;transition:opacity .15s,visibility .15s;pointer-events:none;z-index:10002;margin-bottom:6px}.neiki-drop-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(13,110,253,.1);border:3px dashed var(--neiki-accent-color);border-radius:8px;display:none;align-items:center;justify-content:center;z-index:100;pointer-events:none}.neiki-img-size-label,.neiki-img-toolbar{left:50%;transform:translateX(-50%);white-space:nowrap}.neiki-drop-overlay-text{font-size:18px;font-weight:600;color:var(--neiki-accent-color)}.neiki-img-resizable{display:inline-block;position:relative;outline:2px solid var(--neiki-accent-color);outline-offset:2px;border-radius:4px;line-height:0}.neiki-img-resizable img{display:block;max-width:100%}.neiki-img-resize-handle{position:absolute;width:12px;height:12px;background:var(--neiki-accent-color);border:2px solid #fff;border-radius:2px;z-index:10;box-shadow:0 1px 3px rgba(0,0,0,.3)}.neiki-img-resize-handle.nw{top:-6px;left:-6px;cursor:nw-resize}.neiki-img-resize-handle.ne{top:-6px;right:-6px;cursor:ne-resize}.neiki-img-resize-handle.sw{bottom:-6px;left:-6px;cursor:sw-resize}.neiki-img-resize-handle.se{bottom:-6px;right:-6px;cursor:se-resize}.neiki-img-size-label{position:absolute;bottom:-32px;background:var(--neiki-text-primary);color:var(--neiki-bg-primary);font-size:13px;line-height:1.4;font-weight:600;padding:4px 12px;border-radius:6px;pointer-events:none;z-index:10;opacity:.9}@media (pointer:coarse){.neiki-img-resize-handle{width:20px;height:20px}.neiki-img-resize-handle.nw{top:-10px;left:-10px}.neiki-img-resize-handle.ne{top:-10px;right:-10px}.neiki-img-resize-handle.sw{bottom:-10px;left:-10px}.neiki-img-resize-handle.se{bottom:-10px;right:-10px}}.neiki-img-toolbar{position:absolute;display:flex;align-items:center;gap:2px;padding:4px;background:var(--neiki-bg-primary);border:1px solid var(--neiki-border-color);border-radius:6px;box-shadow:var(--neiki-shadow-md);z-index:20}.neiki-img-toolbar-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border:none;border-radius:4px;background:0 0;color:var(--neiki-text-secondary);cursor:pointer;transition:.15s}.neiki-img-toolbar-btn-danger:hover{background:#fee2e2;color:#dc2626}.neiki-editor.neiki-dark .neiki-img-toolbar-btn-danger:hover{background:#451a1a;color:#f87171}.neiki-img-drag-handle{cursor:grab}.neiki-block-grip:active,.neiki-img-drag-handle:active{cursor:grabbing}.neiki-table-col-resize-handle{position:absolute;width:6px;cursor:col-resize;z-index:10;background:0 0;transition:background .1s}.neiki-table-col-resize-handle:active,.neiki-table-col-resize-handle:hover{background:var(--neiki-accent-color);opacity:.6;border-radius:3px}.neiki-block-grip{position:absolute;width:22px;height:22px;display:flex;align-items:center;justify-content:center;cursor:grab;color:var(--neiki-text-muted);opacity:0;transition:opacity .15s,color .15s;border-radius:4px;z-index:5;user-select:none}.neiki-content:hover .neiki-block-grip{opacity:.5}.neiki-block-grip:hover{opacity:1!important;color:var(--neiki-text-primary);background:var(--neiki-bg-hover)}.neiki-block-grip svg{width:14px;height:14px;fill:currentColor;pointer-events:none}.neiki-block-ghost{position:fixed;z-index:100000;pointer-events:none;opacity:.7;background:var(--neiki-bg-primary);border:2px solid var(--neiki-accent-color);border-radius:6px;padding:8px 12px;box-shadow:var(--neiki-shadow-lg);max-height:120px;overflow:hidden}.neiki-block-placeholder{border:2px dashed var(--neiki-accent-color);border-radius:6px;background:rgba(13,110,253,.05);margin:2px 0;transition:height .15s}@media print{.neiki-content,.neiki-editor-wrapper{overflow:visible!important}.neiki-editor{border:none!important;box-shadow:none!important}.neiki-block-grip,.neiki-code-view-header,.neiki-find-replace,.neiki-floating-toolbar,.neiki-img-resize-handle,.neiki-img-size-label,.neiki-img-toolbar,.neiki-statusbar,.neiki-table-col-resize-handle,.neiki-toolbar{display:none!important}.neiki-content{padding:0!important}}@media (max-width:768px){.neiki-toolbar{padding:4px;gap:1px}.neiki-toolbar-group{padding:0 2px}.neiki-toolbar-group:not(:last-child){padding-right:4px;margin-right:2px}.neiki-btn{width:28px;height:28px}.neiki-btn svg{width:16px;height:16px}.neiki-select{height:28px;min-width:80px;font-size:12px;padding:0 24px 0 8px}.neiki-content,.neiki-modal-footer,.neiki-modal-header{padding:12px 16px}.neiki-statusbar{padding:4px 8px;font-size:11px}.neiki-modal{width:calc(100% - 20px);max-width:none;margin:10px;max-height:calc(100vh - 40px);border-radius:10px}.neiki-modal-overlay{padding:10px}.neiki-modal-body{padding:16px;max-height:calc(100vh - 160px);overflow-y:auto;-webkit-overflow-scrolling:touch}.neiki-modal-footer .neiki-btn{height:36px;padding:0 14px;font-size:13px}.neiki-form-row{flex-direction:column;gap:12px}.neiki-form-input,.neiki-input{height:38px;font-size:16px}.neiki-find-replace{width:100%;border-radius:0}.neiki-checkbox-wrapper{padding:0 4px;font-size:11px}.neiki-color-picker{left:auto;right:0}}@media (max-width:480px){.neiki-toolbar-group:not(:last-child){border-right:none;padding-right:2px;margin-right:0}.neiki-select{min-width:60px}.neiki-statusbar-left,.neiki-statusbar-right{gap:8px}.neiki-img-toolbar{padding:3px;gap:1px;border-radius:5px;left:0;transform:none;max-width:calc(100vw - 20px)}.neiki-img-toolbar-btn{width:26px;height:26px}.neiki-img-toolbar-btn svg{width:14px;height:14px}.neiki-img-toolbar-separator{height:16px;margin:0 1px}}@keyframes neiki-fade-in{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.neiki-color-picker.show,.neiki-dropdown.show,.neiki-emoji-picker.show,.neiki-special-chars.show,.neiki-table-picker.show{animation:.15s neiki-fade-in}@keyframes neiki-modal-in{from{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.neiki-fontsize-widget{display:inline-flex;align-items:center;position:relative;height:32px;border:1px solid var(--neiki-border-color);border-radius:4px;overflow:visible;background:var(--neiki-bg-primary)}.neiki-fontsize-btn{display:flex;align-items:center;justify-content:center;width:26px;height:30px;background:0 0;border:none;cursor:pointer;color:var(--neiki-text-secondary);transition:background .15s,color .15s;padding:0}.neiki-fontsize-dropdown-item,.neiki-fontsize-input{color:var(--neiki-text-primary);text-align:center;font-size:13px}.neiki-fontsize-input{width:38px;height:30px;border:none;border-left:1px solid var(--neiki-border-color);border-right:1px solid var(--neiki-border-color);background:var(--neiki-bg-primary);outline:0;-moz-appearance:textfield;appearance:textfield;padding:0}.neiki-fontsize-dropdown,.neiki-insert-dropdown{left:0;border:1px solid var(--neiki-border-color)}.neiki-fontsize-input::-webkit-inner-spin-button,.neiki-fontsize-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.neiki-fontsize-dropdown{display:none;position:absolute;top:100%;z-index:1000;min-width:70px;max-height:240px;overflow-y:auto;background:var(--neiki-bg-primary);border-radius:6px;box-shadow:var(--neiki-shadow-lg);padding:4px;margin-top:4px}.neiki-fontsize-dropdown-item{padding:6px 12px;cursor:pointer;border-radius:4px;transition:background .1s}.neiki-insert-dropdown-btn{width:auto!important;padding:0 8px!important;gap:4px;font-size:13px;font-weight:500}.neiki-insert-label{font-size:13px;pointer-events:none}.neiki-chevron{display:inline-flex;pointer-events:none}.neiki-insert-dropdown,.neiki-more-dropdown{display:none;position:absolute;top:100%;z-index:1000;background:var(--neiki-bg-primary);box-shadow:var(--neiki-shadow-lg);padding:4px;margin-top:4px}.neiki-insert-dropdown{min-width:160px;max-width:calc(100vw - 16px);border-radius:6px}.neiki-insert-dropdown.show,.neiki-more-dropdown.show{display:block;animation:.15s neiki-fade-in}.neiki-more-dropdown{right:0;min-width:140px;max-width:170px;border:1px solid var(--neiki-border-color);border-radius:6px}.neiki-lang-cs .neiki-more-dropdown{min-width:165px}.neiki-dropdown-item-icon{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;flex-shrink:0}.neiki-dropdown-item-danger{color:var(--neiki-danger-color)!important}.neiki-dropdown-item-danger:hover{background:rgba(220,53,69,.1)}.neiki-autosave-badge{font-size:12px;font-weight:600;color:var(--neiki-text-muted);padding:0 4px}.neiki-autosave-badge.active{color:var(--neiki-success-color)}.neiki-preview-overlay{position:fixed;inset:0;background:rgba(0,0,0,.6);z-index:100000;display:flex;align-items:center;justify-content:center;padding:30px;animation:.2s neiki-fade-in}.neiki-preview-modal{background:var(--neiki-bg-primary);border-radius:12px;width:100%;max-width:900px;max-height:90vh;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 25px 60px rgba(0,0,0,.3);animation:.2s neiki-modal-in}.neiki-preview-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;background:var(--neiki-bg-secondary);border-bottom:1px solid var(--neiki-border-color);font-weight:600;font-size:14px;color:var(--neiki-text-primary)}.neiki-preview-close svg{width:18px;height:18px;fill:currentColor}.neiki-preview-body{flex:1;overflow:auto;padding:30px;color:var(--neiki-text-primary);font-size:15px;line-height:1.7}.neiki-preview-body img{max-width:100%}.neiki-preview-body table{border-collapse:collapse;width:100%}.neiki-preview-body table td,.neiki-preview-body table th{border:1px solid var(--neiki-border-color);padding:8px 12px}.neiki-statusbar-autosave{font-style:italic;color:var(--neiki-success-color);font-size:11px}",document.head.appendChild(e)}();const t={en:{"toolbar.undo":"Undo (Ctrl+Z)","toolbar.redo":"Redo (Ctrl+Y)","toolbar.bold":"Bold (Ctrl+B)","toolbar.italic":"Italic (Ctrl+I)","toolbar.underline":"Underline (Ctrl+U)","toolbar.strikethrough":"Strikethrough","toolbar.heading":"Heading","toolbar.fontSize":"Font Size","toolbar.fontFamily":"Font Family","toolbar.foreColor":"Text Color","toolbar.backColor":"Background Color","toolbar.alignLeft":"Align Left","toolbar.alignCenter":"Align Center","toolbar.alignRight":"Align Right","toolbar.alignJustify":"Justify","toolbar.bulletList":"Bullet List","toolbar.numberedList":"Numbered List","toolbar.indent":"Increase Indent","toolbar.outdent":"Decrease Indent","toolbar.link":"Insert Link (Ctrl+K)","toolbar.image":"Insert Image","toolbar.table":"Insert Table","toolbar.blockquote":"Blockquote","toolbar.viewCode":"View Code (Toggle HTML)","toolbar.horizontalRule":"Horizontal Line","toolbar.subscript":"Subscript","toolbar.superscript":"Superscript","toolbar.removeFormat":"Remove Formatting","toolbar.findReplace":"Find & Replace","toolbar.emoji":"Insert Emoji","toolbar.specialChars":"Special Characters","toolbar.fullscreen":"Fullscreen","toolbar.autosave":"Toggle Autosave","toolbar.themeToggle":"Toggle Theme","toolbar.print":"Print","toolbar.insert":"Insert","toolbar.moreOptions":"More options","toolbar.decreaseFontSize":"Decrease font size","toolbar.increaseFontSize":"Increase font size","heading.paragraph":"Paragraph","heading.h1":"Heading 1","heading.h2":"Heading 2","heading.h3":"Heading 3","heading.h4":"Heading 4","heading.h5":"Heading 5","heading.h6":"Heading 6","font.sansSerif":"Sans Serif","font.serif":"Serif","font.monospace":"Monospace","font.cursive":"Cursive","insert.link":"Link","insert.image":"Image","insert.table":"Table","insert.emoji":"Emoji","insert.symbol":"Symbol","menu.save":"Save","menu.preview":"Preview","menu.download":"Download","menu.print":"Print","menu.autosave":"Autosave","menu.clearAll":"Clear all","menu.toggleTheme":"Toggle Theme","menu.fullscreen":"Fullscreen","menu.help":"Help","help.author":"Author","help.version":"Version","help.github":"GitHub","help.documentation":"Documentation","modal.insertLink":"Insert Link","modal.url":"URL","modal.text":"Text","modal.linkText":"Link text","modal.openInNewTab":"Open in new tab","modal.cancel":"Cancel","modal.insert":"Insert","modal.insertImage":"Insert Image","modal.uploadImage":"Upload Image","modal.convertedToBase64":"Will be converted to base64","modal.handledViaUploader":"Will be uploaded via handler","modal.uploadingImage":"Uploading...","modal.uploadError":"Upload failed. Please try again.","modal.or":"OR","modal.imageUrl":"Image URL","modal.altText":"Alt Text","modal.describeImage":"Describe the image","modal.widthOptional":"Width (optional)","modal.invalidImageFile":"Please select a valid image file.","modal.insertTable":"Insert Table","modal.rows":"Rows","modal.columns":"Columns","modal.includeHeaderRow":"Include header row","modal.findReplace":"Find & Replace","modal.find":"Find","modal.searchText":"Search text...","modal.replaceWith":"Replace with","modal.replacementText":"Replacement text...","modal.useRegex":"Use Regular Expression","modal.caseSensitive":"Case Sensitive","modal.findNext":"Find Next","modal.replace":"Replace","modal.replaceAll":"Replace All","modal.invalidRegex":"Invalid regex","modal.matchesFound":"{count} match(es) found","modal.matchOf":"Match {current} of {total}","modal.matchesRemaining":"{count} match(es) remaining","modal.replacedOccurrences":"Replaced {count} occurrence(s)","status.words":"words","status.word":"word","status.chars":"chars","status.char":"char","autosave.savedLocally":"Saved locally","autosave.autosaving":"Autosaving...","preview.title":"Document Preview","confirm.clearAll":"Clear all content?","color.reset":"Reset to default","color.pick":"Pick a color","color.apply":"Apply","imageToolbar.replaceImage":"Replace Image","imageToolbar.deleteImage":"Delete Image","imageToolbar.dragToMove":"Drag to move",placeholder:"Start typing..."},cs:{"toolbar.undo":"Zpět (Ctrl+Z)","toolbar.redo":"Znovu (Ctrl+Y)","toolbar.bold":"Tučné (Ctrl+B)","toolbar.italic":"Kurzíva (Ctrl+I)","toolbar.underline":"Podtržené (Ctrl+U)","toolbar.strikethrough":"Přeškrtnuté","toolbar.heading":"Nadpis","toolbar.fontSize":"Velikost písma","toolbar.fontFamily":"Rodina písma","toolbar.foreColor":"Barva textu","toolbar.backColor":"Barva pozadí","toolbar.alignLeft":"Zarovnat vlevo","toolbar.alignCenter":"Zarovnat na střed","toolbar.alignRight":"Zarovnat vpravo","toolbar.alignJustify":"Do bloku","toolbar.bulletList":"Odrážkový seznam","toolbar.numberedList":"Číslovaný seznam","toolbar.indent":"Zvětšit odsazení","toolbar.outdent":"Zmenšit odsazení","toolbar.link":"Vložit odkaz (Ctrl+K)","toolbar.image":"Vložit obrázek","toolbar.table":"Vložit tabulku","toolbar.blockquote":"Citace","toolbar.viewCode":"Zobrazit kód (HTML)","toolbar.horizontalRule":"Vodorovná čára","toolbar.subscript":"Dolní index","toolbar.superscript":"Horní index","toolbar.removeFormat":"Odstranit formátování","toolbar.findReplace":"Najít a nahradit","toolbar.emoji":"Vložit emoji","toolbar.specialChars":"Speciální znaky","toolbar.fullscreen":"Celá obrazovka","toolbar.autosave":"Auto. ukládání","toolbar.themeToggle":"Přepnout motiv","toolbar.print":"Tisk","toolbar.insert":"Vložit","toolbar.moreOptions":"Další možnosti","toolbar.decreaseFontSize":"Zmenšit písmo","toolbar.increaseFontSize":"Zvětšit písmo","heading.paragraph":"Odstavec","heading.h1":"Nadpis 1","heading.h2":"Nadpis 2","heading.h3":"Nadpis 3","heading.h4":"Nadpis 4","heading.h5":"Nadpis 5","heading.h6":"Nadpis 6","font.sansSerif":"Sans Serif","font.serif":"Serif","font.monospace":"Monospace","font.cursive":"Cursive","insert.link":"Odkaz","insert.image":"Obrázek","insert.table":"Tabulka","insert.emoji":"Emoji","insert.symbol":"Symbol","menu.save":"Uložit","menu.preview":"Náhled","menu.download":"Stáhnout","menu.print":"Tisk","menu.autosave":"Auto. ukládání","menu.clearAll":"Vymazat vše","menu.toggleTheme":"Přepnout motiv","menu.fullscreen":"Celá obrazovka","menu.help":"Nápověda","help.author":"Autor","help.version":"Verze","help.github":"GitHub","help.documentation":"Dokumentace","modal.insertLink":"Vložit odkaz","modal.url":"URL","modal.text":"Text","modal.linkText":"Text odkazu","modal.openInNewTab":"Otevřít v nové záložce","modal.cancel":"Zrušit","modal.insert":"Vložit","modal.insertImage":"Vložit obrázek","modal.uploadImage":"Nahrát obrázek","modal.convertedToBase64":"Bude převeden na base64","modal.handledViaUploader":"Bude nahráno přes handler","modal.uploadingImage":"Nahrávání...","modal.uploadError":"Nahrávání selhalo. Zkuste to znovu.","modal.or":"NEBO","modal.imageUrl":"URL obrázku","modal.altText":"Alternativní text","modal.describeImage":"Popis obrázku","modal.widthOptional":"Šířka (volitelné)","modal.invalidImageFile":"Vyberte prosím platný soubor obrázku.","modal.insertTable":"Vložit tabulku","modal.rows":"Řádky","modal.columns":"Sloupce","modal.includeHeaderRow":"Včetně řádku záhlaví","modal.findReplace":"Najít a nahradit","modal.find":"Najít","modal.searchText":"Hledaný text...","modal.replaceWith":"Nahradit za","modal.replacementText":"Text náhrady...","modal.useRegex":"Použít regulární výraz","modal.caseSensitive":"Rozlišovat velikost písmen","modal.findNext":"Najít další","modal.replace":"Nahradit","modal.replaceAll":"Nahradit vše","modal.invalidRegex":"Neplatný regulární výraz","modal.matchesFound":"Nalezeno {count} shod","modal.matchOf":"Shoda {current} z {total}","modal.matchesRemaining":"Zbývá {count} shod","modal.replacedOccurrences":"Nahrazeno {count} výskytů","status.words":"slov","status.word":"slovo","status.chars":"znaků","status.char":"znak","autosave.savedLocally":"Uloženo lokálně","autosave.autosaving":"Ukládám...","preview.title":"Náhled dokumentu","confirm.clearAll":"Vymazat veškerý obsah?","color.reset":"Obnovit výchozí","color.pick":"Vybrat barvu","color.apply":"Použít","imageToolbar.replaceImage":"Nahradit obrázek","imageToolbar.deleteImage":"Smazat obrázek","imageToolbar.dragToMove":"Přetáhněte pro přesun",placeholder:"Začněte psát..."},zh:{"toolbar.undo":"撤销 (Ctrl+Z)","toolbar.redo":"重做 (Ctrl+Y)","toolbar.bold":"粗体 (Ctrl+B)","toolbar.italic":"斜体 (Ctrl+I)","toolbar.underline":"下划线 (Ctrl+U)","toolbar.strikethrough":"删除线","toolbar.heading":"标题","toolbar.fontSize":"字体大小","toolbar.fontFamily":"字体","toolbar.foreColor":"文字颜色","toolbar.backColor":"背景颜色","toolbar.alignLeft":"左对齐","toolbar.alignCenter":"居中对齐","toolbar.alignRight":"右对齐","toolbar.alignJustify":"两端对齐","toolbar.bulletList":"无序列表","toolbar.numberedList":"有序列表","toolbar.indent":"增加缩进","toolbar.outdent":"减少缩进","toolbar.link":"插入链接 (Ctrl+K)","toolbar.image":"插入图片","toolbar.table":"插入表格","toolbar.blockquote":"引用","toolbar.viewCode":"查看代码 (HTML)","toolbar.horizontalRule":"水平线","toolbar.subscript":"下标","toolbar.superscript":"上标","toolbar.removeFormat":"清除格式","toolbar.findReplace":"查找和替换","toolbar.emoji":"插入表情","toolbar.specialChars":"特殊字符","toolbar.fullscreen":"全屏","toolbar.autosave":"自动保存","toolbar.themeToggle":"切换主题","toolbar.print":"打印","toolbar.insert":"插入","toolbar.moreOptions":"更多选项","toolbar.decreaseFontSize":"缩小字体","toolbar.increaseFontSize":"增大字体","heading.paragraph":"段落","heading.h1":"标题 1","heading.h2":"标题 2","heading.h3":"标题 3","heading.h4":"标题 4","heading.h5":"标题 5","heading.h6":"标题 6","font.sansSerif":"无衬线","font.serif":"衬线","font.monospace":"等宽","font.cursive":"手写","insert.link":"链接","insert.image":"图片","insert.table":"表格","insert.emoji":"表情","insert.symbol":"符号","menu.save":"保存","menu.preview":"预览","menu.download":"下载","menu.print":"打印","menu.autosave":"自动保存","menu.clearAll":"清除全部","menu.toggleTheme":"切换主题","menu.fullscreen":"全屏","menu.help":"帮助","help.author":"作者","help.version":"版本","help.github":"GitHub","help.documentation":"文档","modal.insertLink":"插入链接","modal.url":"URL","modal.text":"文本","modal.linkText":"链接文字","modal.openInNewTab":"在新标签页中打开","modal.cancel":"取消","modal.insert":"插入","modal.insertImage":"插入图片","modal.uploadImage":"上传图片","modal.convertedToBase64":"将转换为base64","modal.handledViaUploader":"将通过上传处理器上传","modal.uploadingImage":"上传中...","modal.uploadError":"上传失败,请重试。","modal.or":"或","modal.imageUrl":"图片URL","modal.altText":"替代文本","modal.describeImage":"描述图片","modal.widthOptional":"宽度(可选)","modal.invalidImageFile":"请选择有效的图片文件。","modal.insertTable":"插入表格","modal.rows":"行","modal.columns":"列","modal.includeHeaderRow":"包含标题行","modal.findReplace":"查找和替换","modal.find":"查找","modal.searchText":"搜索文本...","modal.replaceWith":"替换为","modal.replacementText":"替换文本...","modal.useRegex":"使用正则表达式","modal.caseSensitive":"区分大小写","modal.findNext":"查找下一个","modal.replace":"替换","modal.replaceAll":"全部替换","modal.invalidRegex":"无效的正则表达式","modal.matchesFound":"找到 {count} 个匹配","modal.matchOf":"第 {current} 个,共 {total} 个","modal.matchesRemaining":"剩余 {count} 个匹配","modal.replacedOccurrences":"已替换 {count} 处","status.words":"词","status.word":"词","status.chars":"字符","status.char":"字符","autosave.savedLocally":"已本地保存","autosave.autosaving":"正在保存...","preview.title":"文档预览","confirm.clearAll":"清除所有内容?","color.reset":"重置为默认","color.pick":"选择颜色","color.apply":"应用","imageToolbar.replaceImage":"替换图片","imageToolbar.deleteImage":"删除图片","imageToolbar.dragToMove":"拖动移动",placeholder:"开始输入..."},es:{"toolbar.undo":"Deshacer (Ctrl+Z)","toolbar.redo":"Rehacer (Ctrl+Y)","toolbar.bold":"Negrita (Ctrl+B)","toolbar.italic":"Cursiva (Ctrl+I)","toolbar.underline":"Subrayado (Ctrl+U)","toolbar.strikethrough":"Tachado","toolbar.heading":"Encabezado","toolbar.fontSize":"Tamaño de fuente","toolbar.fontFamily":"Familia de fuente","toolbar.foreColor":"Color de texto","toolbar.backColor":"Color de fondo","toolbar.alignLeft":"Alinear a la izquierda","toolbar.alignCenter":"Centrar","toolbar.alignRight":"Alinear a la derecha","toolbar.alignJustify":"Justificar","toolbar.bulletList":"Lista con viñetas","toolbar.numberedList":"Lista numerada","toolbar.indent":"Aumentar sangría","toolbar.outdent":"Disminuir sangría","toolbar.link":"Insertar enlace (Ctrl+K)","toolbar.image":"Insertar imagen","toolbar.table":"Insertar tabla","toolbar.blockquote":"Cita","toolbar.viewCode":"Ver código (HTML)","toolbar.horizontalRule":"Línea horizontal","toolbar.subscript":"Subíndice","toolbar.superscript":"Superíndice","toolbar.removeFormat":"Eliminar formato","toolbar.findReplace":"Buscar y reemplazar","toolbar.emoji":"Insertar emoji","toolbar.specialChars":"Caracteres especiales","toolbar.fullscreen":"Pantalla completa","toolbar.autosave":"Guardado automático","toolbar.themeToggle":"Cambiar tema","toolbar.print":"Imprimir","toolbar.insert":"Insertar","toolbar.moreOptions":"Más opciones","toolbar.decreaseFontSize":"Reducir tamaño de fuente","toolbar.increaseFontSize":"Aumentar tamaño de fuente","heading.paragraph":"Párrafo","heading.h1":"Encabezado 1","heading.h2":"Encabezado 2","heading.h3":"Encabezado 3","heading.h4":"Encabezado 4","heading.h5":"Encabezado 5","heading.h6":"Encabezado 6","font.sansSerif":"Sans Serif","font.serif":"Serif","font.monospace":"Monospace","font.cursive":"Cursiva","insert.link":"Enlace","insert.image":"Imagen","insert.table":"Tabla","insert.emoji":"Emoji","insert.symbol":"Símbolo","menu.save":"Guardar","menu.preview":"Vista previa","menu.download":"Descargar","menu.print":"Imprimir","menu.autosave":"Guardado automático","menu.clearAll":"Borrar todo","menu.toggleTheme":"Cambiar tema","menu.fullscreen":"Pantalla completa","menu.help":"Ayuda","help.author":"Autor","help.version":"Versión","help.github":"GitHub","help.documentation":"Documentación","modal.insertLink":"Insertar enlace","modal.url":"URL","modal.text":"Texto","modal.linkText":"Texto del enlace","modal.openInNewTab":"Abrir en nueva pestaña","modal.cancel":"Cancelar","modal.insert":"Insertar","modal.insertImage":"Insertar imagen","modal.uploadImage":"Subir imagen","modal.convertedToBase64":"Se convertirá a base64","modal.handledViaUploader":"Se subirá a través del handler","modal.uploadingImage":"Subiendo...","modal.uploadError":"Error al subir. Inténtelo de nuevo.","modal.or":"O","modal.imageUrl":"URL de imagen","modal.altText":"Texto alternativo","modal.describeImage":"Describir la imagen","modal.widthOptional":"Ancho (opcional)","modal.invalidImageFile":"Por favor, seleccione un archivo de imagen válido.","modal.insertTable":"Insertar tabla","modal.rows":"Filas","modal.columns":"Columnas","modal.includeHeaderRow":"Incluir fila de encabezado","modal.findReplace":"Buscar y reemplazar","modal.find":"Buscar","modal.searchText":"Texto a buscar...","modal.replaceWith":"Reemplazar con","modal.replacementText":"Texto de reemplazo...","modal.useRegex":"Usar expresión regular","modal.caseSensitive":"Distinguir mayúsculas","modal.findNext":"Buscar siguiente","modal.replace":"Reemplazar","modal.replaceAll":"Reemplazar todo","modal.invalidRegex":"Expresión regular no válida","modal.matchesFound":"{count} coincidencia(s) encontrada(s)","modal.matchOf":"Coincidencia {current} de {total}","modal.matchesRemaining":"{count} coincidencia(s) restante(s)","modal.replacedOccurrences":"{count} ocurrencia(s) reemplazada(s)","status.words":"palabras","status.word":"palabra","status.chars":"caracteres","status.char":"carácter","autosave.savedLocally":"Guardado localmente","autosave.autosaving":"Guardando...","preview.title":"Vista previa del documento","confirm.clearAll":"¿Borrar todo el contenido?","color.reset":"Restablecer","color.pick":"Elegir color","color.apply":"Aplicar","imageToolbar.replaceImage":"Reemplazar imagen","imageToolbar.deleteImage":"Eliminar imagen","imageToolbar.dragToMove":"Arrastrar para mover",placeholder:"Empiece a escribir..."},de:{"toolbar.undo":"Rückgängig (Strg+Z)","toolbar.redo":"Wiederholen (Strg+Y)","toolbar.bold":"Fett (Strg+B)","toolbar.italic":"Kursiv (Strg+I)","toolbar.underline":"Unterstrichen (Strg+U)","toolbar.strikethrough":"Durchgestrichen","toolbar.heading":"Überschrift","toolbar.fontSize":"Schriftgröße","toolbar.fontFamily":"Schriftart","toolbar.foreColor":"Textfarbe","toolbar.backColor":"Hintergrundfarbe","toolbar.alignLeft":"Linksbündig","toolbar.alignCenter":"Zentriert","toolbar.alignRight":"Rechtsbündig","toolbar.alignJustify":"Blocksatz","toolbar.bulletList":"Aufzählungsliste","toolbar.numberedList":"Nummerierte Liste","toolbar.indent":"Einzug vergrößern","toolbar.outdent":"Einzug verkleinern","toolbar.link":"Link einfügen (Strg+K)","toolbar.image":"Bild einfügen","toolbar.table":"Tabelle einfügen","toolbar.blockquote":"Zitat","toolbar.viewCode":"Code anzeigen (HTML)","toolbar.horizontalRule":"Horizontale Linie","toolbar.subscript":"Tiefgestellt","toolbar.superscript":"Hochgestellt","toolbar.removeFormat":"Formatierung entfernen","toolbar.findReplace":"Suchen und Ersetzen","toolbar.emoji":"Emoji einfügen","toolbar.specialChars":"Sonderzeichen","toolbar.fullscreen":"Vollbild","toolbar.autosave":"Automatisch speichern","toolbar.themeToggle":"Design wechseln","toolbar.print":"Drucken","toolbar.insert":"Einfügen","toolbar.moreOptions":"Weitere Optionen","toolbar.decreaseFontSize":"Schrift verkleinern","toolbar.increaseFontSize":"Schrift vergrößern","heading.paragraph":"Absatz","heading.h1":"Überschrift 1","heading.h2":"Überschrift 2","heading.h3":"Überschrift 3","heading.h4":"Überschrift 4","heading.h5":"Überschrift 5","heading.h6":"Überschrift 6","font.sansSerif":"Sans Serif","font.serif":"Serif","font.monospace":"Monospace","font.cursive":"Schreibschrift","insert.link":"Link","insert.image":"Bild","insert.table":"Tabelle","insert.emoji":"Emoji","insert.symbol":"Symbol","menu.save":"Speichern","menu.preview":"Vorschau","menu.download":"Herunterladen","menu.print":"Drucken","menu.autosave":"Automatisch speichern","menu.clearAll":"Alles löschen","menu.toggleTheme":"Design wechseln","menu.fullscreen":"Vollbild","menu.help":"Hilfe","help.author":"Autor","help.version":"Version","help.github":"GitHub","help.documentation":"Dokumentation","modal.insertLink":"Link einfügen","modal.url":"URL","modal.text":"Text","modal.linkText":"Linktext","modal.openInNewTab":"In neuem Tab öffnen","modal.cancel":"Abbrechen","modal.insert":"Einfügen","modal.insertImage":"Bild einfügen","modal.uploadImage":"Bild hochladen","modal.convertedToBase64":"Wird in Base64 konvertiert","modal.handledViaUploader":"Wird über Handler hochgeladen","modal.uploadingImage":"Hochladen...","modal.uploadError":"Upload fehlgeschlagen. Bitte versuchen Sie es erneut.","modal.or":"ODER","modal.imageUrl":"Bild-URL","modal.altText":"Alternativtext","modal.describeImage":"Bild beschreiben","modal.widthOptional":"Breite (optional)","modal.invalidImageFile":"Bitte wählen Sie eine gültige Bilddatei.","modal.insertTable":"Tabelle einfügen","modal.rows":"Zeilen","modal.columns":"Spalten","modal.includeHeaderRow":"Kopfzeile einfügen","modal.findReplace":"Suchen und Ersetzen","modal.find":"Suchen","modal.searchText":"Suchtext...","modal.replaceWith":"Ersetzen durch","modal.replacementText":"Ersatztext...","modal.useRegex":"Regulären Ausdruck verwenden","modal.caseSensitive":"Groß-/Kleinschreibung beachten","modal.findNext":"Weitersuchen","modal.replace":"Ersetzen","modal.replaceAll":"Alle ersetzen","modal.invalidRegex":"Ungültiger regulärer Ausdruck","modal.matchesFound":"{count} Treffer gefunden","modal.matchOf":"Treffer {current} von {total}","modal.matchesRemaining":"{count} Treffer verbleibend","modal.replacedOccurrences":"{count} Vorkommen ersetzt","status.words":"Wörter","status.word":"Wort","status.chars":"Zeichen","status.char":"Zeichen","autosave.savedLocally":"Lokal gespeichert","autosave.autosaving":"Speichern...","preview.title":"Dokumentvorschau","confirm.clearAll":"Gesamten Inhalt löschen?","color.reset":"Zurücksetzen","color.pick":"Farbe wählen","color.apply":"Anwenden","imageToolbar.replaceImage":"Bild ersetzen","imageToolbar.deleteImage":"Bild löschen","imageToolbar.dragToMove":"Ziehen zum Verschieben",placeholder:"Hier schreiben..."},fr:{"toolbar.undo":"Annuler (Ctrl+Z)","toolbar.redo":"Rétablir (Ctrl+Y)","toolbar.bold":"Gras (Ctrl+B)","toolbar.italic":"Italique (Ctrl+I)","toolbar.underline":"Souligné (Ctrl+U)","toolbar.strikethrough":"Barré","toolbar.heading":"Titre","toolbar.fontSize":"Taille de police","toolbar.fontFamily":"Police","toolbar.foreColor":"Couleur du texte","toolbar.backColor":"Couleur de fond","toolbar.alignLeft":"Aligner à gauche","toolbar.alignCenter":"Centrer","toolbar.alignRight":"Aligner à droite","toolbar.alignJustify":"Justifier","toolbar.bulletList":"Liste à puces","toolbar.numberedList":"Liste numérotée","toolbar.indent":"Augmenter le retrait","toolbar.outdent":"Diminuer le retrait","toolbar.link":"Insérer un lien (Ctrl+K)","toolbar.image":"Insérer une image","toolbar.table":"Insérer un tableau","toolbar.blockquote":"Citation","toolbar.viewCode":"Voir le code (HTML)","toolbar.horizontalRule":"Ligne horizontale","toolbar.subscript":"Indice","toolbar.superscript":"Exposant","toolbar.removeFormat":"Supprimer la mise en forme","toolbar.findReplace":"Rechercher et remplacer","toolbar.emoji":"Insérer un emoji","toolbar.specialChars":"Caractères spéciaux","toolbar.fullscreen":"Plein écran","toolbar.autosave":"Sauvegarde automatique","toolbar.themeToggle":"Changer de thème","toolbar.print":"Imprimer","toolbar.insert":"Insérer","toolbar.moreOptions":"Plus d'options","toolbar.decreaseFontSize":"Réduire la taille de police","toolbar.increaseFontSize":"Augmenter la taille de police","heading.paragraph":"Paragraphe","heading.h1":"Titre 1","heading.h2":"Titre 2","heading.h3":"Titre 3","heading.h4":"Titre 4","heading.h5":"Titre 5","heading.h6":"Titre 6","font.sansSerif":"Sans Serif","font.serif":"Serif","font.monospace":"Monospace","font.cursive":"Cursive","insert.link":"Lien","insert.image":"Image","insert.table":"Tableau","insert.emoji":"Emoji","insert.symbol":"Symbole","menu.save":"Enregistrer","menu.preview":"Aperçu","menu.download":"Télécharger","menu.print":"Imprimer","menu.autosave":"Sauvegarde auto","menu.clearAll":"Tout effacer","menu.toggleTheme":"Changer de thème","menu.fullscreen":"Plein écran","menu.help":"Aide","help.author":"Auteur","help.version":"Version","help.github":"GitHub","help.documentation":"Documentation","modal.insertLink":"Insérer un lien","modal.url":"URL","modal.text":"Texte","modal.linkText":"Texte du lien","modal.openInNewTab":"Ouvrir dans un nouvel onglet","modal.cancel":"Annuler","modal.insert":"Insérer","modal.insertImage":"Insérer une image","modal.uploadImage":"Téléverser une image","modal.convertedToBase64":"Sera converti en base64","modal.handledViaUploader":"Sera téléversé via le handler","modal.uploadingImage":"Téléversement...","modal.uploadError":"Échec du téléversement. Veuillez réessayer.","modal.or":"OU","modal.imageUrl":"URL de l'image","modal.altText":"Texte alternatif","modal.describeImage":"Décrire l'image","modal.widthOptional":"Largeur (optionnel)","modal.invalidImageFile":"Veuillez sélectionner un fichier image valide.","modal.insertTable":"Insérer un tableau","modal.rows":"Lignes","modal.columns":"Colonnes","modal.includeHeaderRow":"Inclure la ligne d'en-tête","modal.findReplace":"Rechercher et remplacer","modal.find":"Rechercher","modal.searchText":"Texte à rechercher...","modal.replaceWith":"Remplacer par","modal.replacementText":"Texte de remplacement...","modal.useRegex":"Utiliser une expression régulière","modal.caseSensitive":"Sensible à la casse","modal.findNext":"Suivant","modal.replace":"Remplacer","modal.replaceAll":"Tout remplacer","modal.invalidRegex":"Expression régulière invalide","modal.matchesFound":"{count} correspondance(s) trouvée(s)","modal.matchOf":"Correspondance {current} sur {total}","modal.matchesRemaining":"{count} correspondance(s) restante(s)","modal.replacedOccurrences":"{count} occurrence(s) remplacée(s)","status.words":"mots","status.word":"mot","status.chars":"caractères","status.char":"caractère","autosave.savedLocally":"Enregistré localement","autosave.autosaving":"Enregistrement...","preview.title":"Aperçu du document","confirm.clearAll":"Effacer tout le contenu ?","color.reset":"Réinitialiser","color.pick":"Choisir une couleur","color.apply":"Appliquer","imageToolbar.replaceImage":"Remplacer l'image","imageToolbar.deleteImage":"Supprimer l'image","imageToolbar.dragToMove":"Glisser pour déplacer",placeholder:"Commencez à écrire..."},pt:{"toolbar.undo":"Desfazer (Ctrl+Z)","toolbar.redo":"Refazer (Ctrl+Y)","toolbar.bold":"Negrito (Ctrl+B)","toolbar.italic":"Itálico (Ctrl+I)","toolbar.underline":"Sublinhado (Ctrl+U)","toolbar.strikethrough":"Tachado","toolbar.heading":"Título","toolbar.fontSize":"Tamanho da fonte","toolbar.fontFamily":"Família da fonte","toolbar.foreColor":"Cor do texto","toolbar.backColor":"Cor de fundo","toolbar.alignLeft":"Alinhar à esquerda","toolbar.alignCenter":"Centralizar","toolbar.alignRight":"Alinhar à direita","toolbar.alignJustify":"Justificar","toolbar.bulletList":"Lista com marcadores","toolbar.numberedList":"Lista numerada","toolbar.indent":"Aumentar recuo","toolbar.outdent":"Diminuir recuo","toolbar.link":"Inserir link (Ctrl+K)","toolbar.image":"Inserir imagem","toolbar.table":"Inserir tabela","toolbar.blockquote":"Citação","toolbar.viewCode":"Ver código (HTML)","toolbar.horizontalRule":"Linha horizontal","toolbar.subscript":"Subscrito","toolbar.superscript":"Sobrescrito","toolbar.removeFormat":"Remover formatação","toolbar.findReplace":"Localizar e substituir","toolbar.emoji":"Inserir emoji","toolbar.specialChars":"Caracteres especiais","toolbar.fullscreen":"Tela cheia","toolbar.autosave":"Salvamento automático","toolbar.themeToggle":"Alternar tema","toolbar.print":"Imprimir","toolbar.insert":"Inserir","toolbar.moreOptions":"Mais opções","toolbar.decreaseFontSize":"Diminuir fonte","toolbar.increaseFontSize":"Aumentar fonte","heading.paragraph":"Parágrafo","heading.h1":"Título 1","heading.h2":"Título 2","heading.h3":"Título 3","heading.h4":"Título 4","heading.h5":"Título 5","heading.h6":"Título 6","font.sansSerif":"Sans Serif","font.serif":"Serif","font.monospace":"Monospace","font.cursive":"Cursiva","insert.link":"Link","insert.image":"Imagem","insert.table":"Tabela","insert.emoji":"Emoji","insert.symbol":"Símbolo","menu.save":"Salvar","menu.preview":"Visualizar","menu.download":"Baixar","menu.print":"Imprimir","menu.autosave":"Salvamento automático","menu.clearAll":"Limpar tudo","menu.toggleTheme":"Alternar tema","menu.fullscreen":"Tela cheia","menu.help":"Ajuda","help.author":"Autor","help.version":"Versão","help.github":"GitHub","help.documentation":"Documentação","modal.insertLink":"Inserir link","modal.url":"URL","modal.text":"Texto","modal.linkText":"Texto do link","modal.openInNewTab":"Abrir em nova aba","modal.cancel":"Cancelar","modal.insert":"Inserir","modal.insertImage":"Inserir imagem","modal.uploadImage":"Enviar imagem","modal.convertedToBase64":"Será convertido para base64","modal.handledViaUploader":"Será enviado via handler","modal.uploadingImage":"Enviando...","modal.uploadError":"Falha no envio. Tente novamente.","modal.or":"OU","modal.imageUrl":"URL da imagem","modal.altText":"Texto alternativo","modal.describeImage":"Descrever a imagem","modal.widthOptional":"Largura (opcional)","modal.invalidImageFile":"Por favor, selecione um arquivo de imagem válido.","modal.insertTable":"Inserir tabela","modal.rows":"Linhas","modal.columns":"Colunas","modal.includeHeaderRow":"Incluir linha de cabeçalho","modal.findReplace":"Localizar e substituir","modal.find":"Localizar","modal.searchText":"Texto a localizar...","modal.replaceWith":"Substituir por","modal.replacementText":"Texto de substituição...","modal.useRegex":"Usar expressão regular","modal.caseSensitive":"Diferenciar maiúsculas","modal.findNext":"Localizar próximo","modal.replace":"Substituir","modal.replaceAll":"Substituir tudo","modal.invalidRegex":"Expressão regular inválida","modal.matchesFound":"{count} correspondência(s) encontrada(s)","modal.matchOf":"Correspondência {current} de {total}","modal.matchesRemaining":"{count} correspondência(s) restante(s)","modal.replacedOccurrences":"{count} ocorrência(s) substituída(s)","status.words":"palavras","status.word":"palavra","status.chars":"caracteres","status.char":"caractere","autosave.savedLocally":"Salvo localmente","autosave.autosaving":"Salvando...","preview.title":"Visualização do documento","confirm.clearAll":"Limpar todo o conteúdo?","color.reset":"Redefinir","color.pick":"Escolher cor","color.apply":"Aplicar","imageToolbar.replaceImage":"Substituir imagem","imageToolbar.deleteImage":"Excluir imagem","imageToolbar.dragToMove":"Arraste para mover",placeholder:"Comece a digitar..."},ja:{"toolbar.undo":"元に戻す (Ctrl+Z)","toolbar.redo":"やり直し (Ctrl+Y)","toolbar.bold":"太字 (Ctrl+B)","toolbar.italic":"斜体 (Ctrl+I)","toolbar.underline":"下線 (Ctrl+U)","toolbar.strikethrough":"取り消し線","toolbar.heading":"見出し","toolbar.fontSize":"フォントサイズ","toolbar.fontFamily":"フォント","toolbar.foreColor":"文字色","toolbar.backColor":"背景色","toolbar.alignLeft":"左揃え","toolbar.alignCenter":"中央揃え","toolbar.alignRight":"右揃え","toolbar.alignJustify":"両端揃え","toolbar.bulletList":"箇条書き","toolbar.numberedList":"番号付きリスト","toolbar.indent":"インデント増","toolbar.outdent":"インデント減","toolbar.link":"リンク挿入 (Ctrl+K)","toolbar.image":"画像挿入","toolbar.table":"表挿入","toolbar.blockquote":"引用","toolbar.viewCode":"コード表示 (HTML)","toolbar.horizontalRule":"水平線","toolbar.subscript":"下付き","toolbar.superscript":"上付き","toolbar.removeFormat":"書式解除","toolbar.findReplace":"検索と置換","toolbar.emoji":"絵文字挿入","toolbar.specialChars":"特殊文字","toolbar.fullscreen":"全画面","toolbar.autosave":"自動保存","toolbar.themeToggle":"テーマ切替","toolbar.print":"印刷","toolbar.insert":"挿入","toolbar.moreOptions":"その他","toolbar.decreaseFontSize":"フォント縮小","toolbar.increaseFontSize":"フォント拡大","heading.paragraph":"段落","heading.h1":"見出し 1","heading.h2":"見出し 2","heading.h3":"見出し 3","heading.h4":"見出し 4","heading.h5":"見出し 5","heading.h6":"見出し 6","font.sansSerif":"ゴシック","font.serif":"明朝","font.monospace":"等幅","font.cursive":"手書き","insert.link":"リンク","insert.image":"画像","insert.table":"表","insert.emoji":"絵文字","insert.symbol":"記号","menu.save":"保存","menu.preview":"プレビュー","menu.download":"ダウンロード","menu.print":"印刷","menu.autosave":"自動保存","menu.clearAll":"すべて消去","menu.toggleTheme":"テーマ切替","menu.fullscreen":"全画面","menu.help":"ヘルプ","help.author":"作成者","help.version":"バージョン","help.github":"GitHub","help.documentation":"ドキュメント","modal.insertLink":"リンク挿入","modal.url":"URL","modal.text":"テキスト","modal.linkText":"リンクテキスト","modal.openInNewTab":"新しいタブで開く","modal.cancel":"キャンセル","modal.insert":"挿入","modal.insertImage":"画像挿入","modal.uploadImage":"画像アップロード","modal.convertedToBase64":"Base64に変換されます","modal.handledViaUploader":"ハンドラー経由でアップロードされます","modal.uploadingImage":"アップロード中...","modal.uploadError":"アップロードに失敗しました。もう一度お試しください。","modal.or":"または","modal.imageUrl":"画像URL","modal.altText":"代替テキスト","modal.describeImage":"画像の説明","modal.widthOptional":"幅(任意)","modal.invalidImageFile":"有効な画像ファイルを選択してください。","modal.insertTable":"表挿入","modal.rows":"行","modal.columns":"列","modal.includeHeaderRow":"ヘッダー行を含む","modal.findReplace":"検索と置換","modal.find":"検索","modal.searchText":"検索テキスト...","modal.replaceWith":"置換後","modal.replacementText":"置換テキスト...","modal.useRegex":"正規表現を使用","modal.caseSensitive":"大文字小文字を区別","modal.findNext":"次を検索","modal.replace":"置換","modal.replaceAll":"すべて置換","modal.invalidRegex":"無効な正規表現","modal.matchesFound":"{count} 件見つかりました","modal.matchOf":"{total} 件中 {current} 件目","modal.matchesRemaining":"残り {count} 件","modal.replacedOccurrences":"{count} 件を置換しました","status.words":"語","status.word":"語","status.chars":"文字","status.char":"文字","autosave.savedLocally":"ローカルに保存済み","autosave.autosaving":"保存中...","preview.title":"ドキュメントプレビュー","confirm.clearAll":"すべての内容を消去しますか?","color.reset":"デフォルトに戻す","color.pick":"色を選択","color.apply":"適用","imageToolbar.replaceImage":"画像を置換","imageToolbar.deleteImage":"画像を削除","imageToolbar.dragToMove":"ドラッグで移動",placeholder:"入力してください..."}};let i="en";function o(e,i){e&&"object"==typeof i&&(t[e]||(t[e]={}),Object.assign(t[e],i))}function n(e,o={}){const n=i||"en";let a=t[n]?.[e]||t.en?.[e]||e;return Object.keys(o).forEach(e=>{a=a.replace(new RegExp(`\\{${e}\\}`,"g"),o[e])}),a}const a={toolbar:["viewCode","undo","redo","findReplace","|","bold","italic","underline","strikethrough","superscript","subscript","removeFormat","|","heading","fontFamily","fontSize","|","foreColor","backColor","|","alignLeft","alignCenter","alignRight","alignJustify","|","indent","outdent","|","bulletList","numberedList","blockquote","horizontalRule","|","insertDropdown","|","moreMenu"],placeholder:"Start typing...",minHeight:300,maxHeight:null,autofocus:!1,spellcheck:!0,readonly:!1,theme:"light",language:"en",translations:null,plugins:[],onChange:null,onSave:null,onFocus:null,onBlur:null,onReady:null,showHelp:!0,imageUploadHandler:null},r={undo:{icon:"undo",titleKey:"toolbar.undo",command:"undo"},redo:{icon:"redo",titleKey:"toolbar.redo",command:"redo"},bold:{icon:"bold",titleKey:"toolbar.bold",command:"bold"},italic:{icon:"italic",titleKey:"toolbar.italic",command:"italic"},underline:{icon:"underline",titleKey:"toolbar.underline",command:"underline"},strikethrough:{icon:"strikethrough",titleKey:"toolbar.strikethrough",command:"strikeThrough"},heading:{titleKey:"toolbar.heading",command:"heading",type:"select"},fontSize:{titleKey:"toolbar.fontSize",command:"fontSize",type:"fontSizeWidget"},fontFamily:{titleKey:"toolbar.fontFamily",command:"fontFamily",type:"select"},foreColor:{icon:"text-color",titleKey:"toolbar.foreColor",command:"foreColor",picker:"color"},backColor:{icon:"highlight",titleKey:"toolbar.backColor",command:"backColor",picker:"color"},alignLeft:{icon:"align-left",titleKey:"toolbar.alignLeft",command:"justifyLeft"},alignCenter:{icon:"align-center",titleKey:"toolbar.alignCenter",command:"justifyCenter"},alignRight:{icon:"align-right",titleKey:"toolbar.alignRight",command:"justifyRight"},alignJustify:{icon:"align-justify",titleKey:"toolbar.alignJustify",command:"justifyFull"},bulletList:{icon:"list-ul",titleKey:"toolbar.bulletList",command:"insertUnorderedList"},numberedList:{icon:"list-ol",titleKey:"toolbar.numberedList",command:"insertOrderedList"},indent:{icon:"indent",titleKey:"toolbar.indent",command:"indent"},outdent:{icon:"outdent",titleKey:"toolbar.outdent",command:"outdent"},link:{icon:"link",titleKey:"toolbar.link",command:"createLink",modal:!0},image:{icon:"image",titleKey:"toolbar.image",command:"insertImage",modal:!0},table:{icon:"table",titleKey:"toolbar.table",command:"insertTable",modal:!0},blockquote:{icon:"quote",titleKey:"toolbar.blockquote",command:"formatBlock",value:"blockquote"},viewCode:{icon:"code",titleKey:"toolbar.viewCode",command:"viewCode"},horizontalRule:{icon:"minus",titleKey:"toolbar.horizontalRule",command:"insertHorizontalRule"},subscript:{icon:"subscript",titleKey:"toolbar.subscript",command:"subscript"},superscript:{icon:"superscript",titleKey:"toolbar.superscript",command:"superscript"},removeFormat:{icon:"eraser",titleKey:"toolbar.removeFormat",command:"removeFormat"},findReplace:{icon:"search",titleKey:"toolbar.findReplace",command:"findReplace",modal:!0},emoji:{icon:"emoji",titleKey:"toolbar.emoji",command:"emoji",picker:"emoji"},specialChars:{icon:"specialChars",titleKey:"toolbar.specialChars",command:"specialChars",picker:"specialChars"},fullscreen:{icon:"fullscreen",titleKey:"toolbar.fullscreen",command:"fullscreen"},autosave:{icon:"save",titleKey:"toolbar.autosave",command:"autosave",toggle:!0},themeToggle:{icon:"sun",titleKey:"toolbar.themeToggle",command:"themeToggle",toggle:!0},print:{icon:"print",titleKey:"toolbar.print",command:"print"},insertDropdown:{icon:"plus",titleKey:"toolbar.insert",type:"insertDropdown"},moreMenu:{icon:"more",titleKey:"toolbar.moreOptions",type:"moreMenu"}},l=[8,9,10,11,12,14,18,24,30,36,48,60,72,96],s=[{labelKey:"font.sansSerif",value:"Arial, sans-serif"},{labelKey:"font.serif",value:"Georgia, serif"},{labelKey:"font.monospace",value:"Consolas, monospace"},{labelKey:"font.cursive",value:"Comic Sans MS, cursive"}],d=[{labelKey:"heading.paragraph",value:"p"},{labelKey:"heading.h1",value:"h1"},{labelKey:"heading.h2",value:"h2"},{labelKey:"heading.h3",value:"h3"},{labelKey:"heading.h4",value:"h4"},{labelKey:"heading.h5",value:"h5"},{labelKey:"heading.h6",value:"h6"}],c=["😀","😃","😄","😁","😅","😂","🤣","😊","😇","🙂","😉","😌","😍","🥰","😘","😗","😙","😚","😋","😛","😜","🤪","😝","🤑","🤗","🤭","🤫","🤔","🤐","🤨","😐","😑","😶","😏","😒","🙄","😬","🤥","😌","😔","😪","🤤","😴","😷","🤒","🤕","🤢","🤮","🤧","🥵","👍","👎","👌","✌️","🤞","🤟","🤘","🤙","👈","👉","👆","👇","☝️","👋","🤚","🖐️","✋","🖖","👏","🙌","❤️","🧡","💛","💚","💙","💜","🖤","🤍","🤎","💔","⭐","🌟","✨","💫","🔥","💥","💯","✅","❌","❓"],h=[{char:"©",name:"Copyright"},{char:"®",name:"Registered"},{char:"™",name:"Trademark"},{char:"€",name:"Euro"},{char:"£",name:"Pound"},{char:"¥",name:"Yen"},{char:"¢",name:"Cent"},{char:"°",name:"Degree"},{char:"±",name:"Plus-Minus"},{char:"×",name:"Multiply"},{char:"÷",name:"Divide"},{char:"≠",name:"Not Equal"},{char:"≤",name:"Less or Equal"},{char:"≥",name:"Greater or Equal"},{char:"∞",name:"Infinity"},{char:"√",name:"Square Root"},{char:"π",name:"Pi"},{char:"Ω",name:"Omega"},{char:"α",name:"Alpha"},{char:"β",name:"Beta"},{char:"γ",name:"Gamma"},{char:"δ",name:"Delta"},{char:"µ",name:"Micro"},{char:"∑",name:"Sum"},{char:"∆",name:"Delta (big)"},{char:"←",name:"Left Arrow"},{char:"→",name:"Right Arrow"},{char:"↑",name:"Up Arrow"},{char:"↓",name:"Down Arrow"},{char:"↔",name:"Left-Right Arrow"},{char:"•",name:"Bullet"},{char:"…",name:"Ellipsis"},{char:"—",name:"Em Dash"},{char:"–",name:"En Dash"},{char:"§",name:"Section"},{char:"¶",name:"Paragraph"},{char:"†",name:"Dagger"},{char:"‡",name:"Double Dagger"},{char:"♠",name:"Spade"},{char:"♣",name:"Club"},{char:"♥",name:"Heart"},{char:"♦",name:"Diamond"}],m=["#000000","#434343","#666666","#999999","#b7b7b7","#cccccc","#d9d9d9","#efefef","#f3f3f3","#ffffff","#980000","#ff0000","#ff9900","#ffff00","#00ff00","#00ffff","#4a86e8","#0000ff","#9900ff","#ff00ff","#e6b8af","#f4cccc","#fce5cd","#fff2cc","#d9ead3","#d0e0e3","#c9daf8","#cfe2f3","#d9d2e9","#ead1dc","#dd7e6b","#ea9999","#f9cb9c","#ffe599","#b6d7a8","#a2c4c9","#a4c2f4","#9fc5e8","#b4a7d6","#d5a6bd","#cc4125","#e06666","#f6b26b","#ffd966","#93c47d","#76a5af","#6d9eeb","#6fa8dc","#8e7cc3","#c27ba0","#a61c00","#cc0000","#e69138","#f1c232","#6aa84f","#45818e","#3c78d8","#3d85c6","#674ea7","#a64d79","#85200c","#990000","#b45f06","#bf9000","#38761d","#134f5c","#1155cc","#0b5394","#351c75","#741b47","#5b0f00","#660000","#783f04","#7f6000","#274e13","#0c343d","#1c4587","#073763","#20124d","#4c1130"],p={generateId:()=>"neiki-"+Math.random().toString(36).substr(2,9),createElement(e,t={},i=[]){const o=document.createElement(e);return Object.entries(t).forEach(([e,t])=>{"className"===e?o.className=t:"innerHTML"===e?o.innerHTML=t:"textContent"===e?o.textContent=t:e.startsWith("on")&&"function"==typeof t?o.addEventListener(e.slice(2).toLowerCase(),t):"style"===e&&"object"==typeof t?Object.assign(o.style,t):o.setAttribute(e,t)}),i.forEach(e=>{"string"==typeof e?o.appendChild(document.createTextNode(e)):e instanceof Node&&o.appendChild(e)}),o},debounce(e,t){let i;return function(...o){clearTimeout(i),i=setTimeout(()=>e.apply(this,o),t)}},deepMerge(e,t){const i={...e};return Object.keys(t).forEach(e=>{t[e]&&"object"==typeof t[e]&&!Array.isArray(t[e])?i[e]=p.deepMerge(i[e]||{},t[e]):i[e]=t[e]}),i},sanitizeHTML(e){const t=document.createElement("div");t.innerHTML=e;return t.querySelectorAll("script").forEach(e=>e.remove()),t.innerHTML},isValidUrl(e){try{return new URL(e),!0}catch(e){return!1}},getSelection:()=>window.getSelection(),isNodeInside(e,t){if(!e||!t)return!1;const i=e.nodeType===Node.TEXT_NODE?e.parentNode:e;return i===t||t.contains(i)},isRangeInside:(e,t)=>!(!e||!t)&&(p.isNodeInside(e.commonAncestorContainer,t)||p.isNodeInside(e.startContainer,t)&&p.isNodeInside(e.endContainer,t)),saveSelection(){const e=window.getSelection();return e.rangeCount>0?e.getRangeAt(0).cloneRange():null},restoreSelection(e){if(e){const t=window.getSelection();t.removeAllRanges(),t.addRange(e)}},positionPopup(e,t,i={}){if(!e||!t)return;const o=i.margin||8;t.style.position="fixed",t.style.left="0",t.style.right="auto",t.style.top="0",t.style.bottom="auto";const n=()=>{const i=e.getBoundingClientRect(),n=t.offsetWidth||t.getBoundingClientRect().width,a=t.offsetHeight||t.getBoundingClientRect().height,r=document.documentElement.clientWidth,l=document.documentElement.clientHeight;let s=i.left,d=i.bottom+4;s+n>r-o&&(s=r-o-n),s<o&&(s=o);const c=l-i.bottom-o,h=i.top-o;a>c&&h>c&&(d=Math.max(o,i.top-a-4)),t.style.left=s+"px",t.style.top=d+"px"};n(),requestAnimationFrame(n),setTimeout(n,0),setTimeout(n,50)}},u={undo:'<svg viewBox="0 0 24 24"><path d="M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8z"/></svg>',redo:'<svg viewBox="0 0 24 24"><path d="M18.4 10.6C16.55 8.99 14.15 8 11.5 8c-4.65 0-8.58 3.03-9.96 7.22L3.9 16c1.05-3.19 4.05-5.5 7.6-5.5 1.95 0 3.73.72 5.12 1.88L13 16h9V7l-3.6 3.6z"/></svg>',bold:'<svg viewBox="0 0 24 24"><path d="M15.6 10.79c.97-.67 1.65-1.77 1.65-2.79 0-2.26-1.75-4-4-4H7v14h7.04c2.09 0 3.71-1.7 3.71-3.79 0-1.52-.86-2.82-2.15-3.42zM10 6.5h3c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-3v-3zm3.5 9H10v-3h3.5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5z"/></svg>',italic:'<svg viewBox="0 0 24 24"><path d="M10 4v3h2.21l-3.42 8H6v3h8v-3h-2.21l3.42-8H18V4z"/></svg>',underline:'<svg viewBox="0 0 24 24"><path d="M12 17c3.31 0 6-2.69 6-6V3h-2.5v8c0 1.93-1.57 3.5-3.5 3.5S8.5 12.93 8.5 11V3H6v8c0 3.31 2.69 6 6 6zm-7 2v2h14v-2H5z"/></svg>',strikethrough:'<svg viewBox="0 0 24 24"><path d="M10 19h4v-3h-4v3zM5 4v3h5v3h4V7h5V4H5zM3 14h18v-2H3v2z"/></svg>',heading:'<svg viewBox="0 0 24 24"><path d="M5 4v3h5.5v12h3V7H19V4z"/></svg>',"font-size":'<svg viewBox="0 0 24 24"><path d="M9 4v3h5v12h3V7h5V4H9zm-6 8h3v7h3v-7h3v-3H3v3z"/></svg>',font:'<svg viewBox="0 0 24 24"><path d="M9.93 13.5h4.14L12 7.98 9.93 13.5zM20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-4.05 16.5l-1.14-3H9.17l-1.12 3H5.96l5.11-13h1.86l5.11 13h-2.09z"/></svg>',"text-color":'<svg viewBox="0 0 24 24"><path d="M11 3L5.5 17h2.25l1.12-3h6.25l1.12 3h2.25L13 3h-2zm-1.38 9L12 5.67 14.38 12H9.62z"/><rect x="3" y="19" width="18" height="3" fill="currentColor"/></svg>',highlight:'<svg viewBox="0 0 24 24"><path d="M16.56 8.94L7.62 0 6.21 1.41l2.38 2.38-5.15 5.15c-.59.59-.59 1.54 0 2.12l5.5 5.5c.29.29.68.44 1.06.44s.77-.15 1.06-.44l5.5-5.5c.59-.58.59-1.53 0-2.12zM5.21 10L10 5.21 14.79 10H5.21zM19 11.5s-2 2.17-2 3.5c0 1.1.9 2 2 2s2-.9 2-2c0-1.33-2-3.5-2-3.5z"/><rect x="0" y="20" width="24" height="4"/></svg>',"align-left":'<svg viewBox="0 0 24 24"><path d="M15 15H3v2h12v-2zm0-8H3v2h12V7zM3 13h18v-2H3v2zm0 8h18v-2H3v2zM3 3v2h18V3H3z"/></svg>',"align-center":'<svg viewBox="0 0 24 24"><path d="M7 15v2h10v-2H7zm-4 6h18v-2H3v2zm0-8h18v-2H3v2zm4-6v2h10V7H7zM3 3v2h18V3H3z"/></svg>',"align-right":'<svg viewBox="0 0 24 24"><path d="M3 21h18v-2H3v2zm6-4h12v-2H9v2zm-6-4h18v-2H3v2zm6-4h12V7H9v2zM3 3v2h18V3H3z"/></svg>',"align-justify":'<svg viewBox="0 0 24 24"><path d="M3 21h18v-2H3v2zm0-4h18v-2H3v2zm0-4h18v-2H3v2zm0-4h18V7H3v2zm0-6v2h18V3H3z"/></svg>',"list-ul":'<svg viewBox="0 0 24 24"><path d="M4 10.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0-6c-.83 0-1.5.67-1.5 1.5S3.17 7.5 4 7.5 5.5 6.83 5.5 6 4.83 4.5 4 4.5zm0 12c-.83 0-1.5.68-1.5 1.5s.68 1.5 1.5 1.5 1.5-.68 1.5-1.5-.67-1.5-1.5-1.5zM7 19h14v-2H7v2zm0-6h14v-2H7v2zm0-8v2h14V5H7z"/></svg>',"list-ol":'<svg viewBox="0 0 24 24"><path d="M2 17h2v.5H3v1h1v.5H2v1h3v-4H2v1zm1-9h1V4H2v1h1v3zm-1 3h1.8L2 13.1v.9h3v-1H3.2L5 10.9V10H2v1zm5-6v2h14V5H7zm0 14h14v-2H7v2zm0-6h14v-2H7v2z"/></svg>',indent:'<svg viewBox="0 0 24 24"><path d="M3 21h18v-2H3v2zM3 8v8l4-4-4-4zm8 9h10v-2H11v2zM3 3v2h18V3H3zm8 6h10V7H11v2zm0 4h10v-2H11v2z"/></svg>',outdent:'<svg viewBox="0 0 24 24"><path d="M11 17h10v-2H11v2zm-8-5l4 4V8l-4 4zm0 9h18v-2H3v2zM3 3v2h18V3H3zm8 6h10V7H11v2zm0 4h10v-2H11v2z"/></svg>',link:'<svg viewBox="0 0 24 24"><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"/></svg>',image:'<svg viewBox="0 0 24 24"><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"/></svg>',table:'<svg viewBox="0 0 24 24"><path d="M20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM8 20H4v-4h4v4zm0-6H4v-4h4v4zm0-6H4V4h4v4zm6 12h-4v-4h4v4zm0-6h-4v-4h4v4zm0-6h-4V4h4v4zm6 12h-4v-4h4v4zm0-6h-4v-4h4v4zm0-6h-4V4h4v4z"/></svg>',quote:'<svg viewBox="0 0 24 24"><path d="M6 17h3l2-4V7H5v6h3zm8 0h3l2-4V7h-6v6h3z"/></svg>',code:'<svg viewBox="0 0 24 24"><path d="M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"/></svg>',minus:'<svg viewBox="0 0 24 24"><path d="M19 13H5v-2h14v2z"/></svg>',eraser:'<svg viewBox="0 0 24 24"><path d="M16.24 3.56l4.95 4.94c.78.79.78 2.05 0 2.84L12 20.53a4.008 4.008 0 01-5.66 0L2.81 17c-.78-.79-.78-2.05 0-2.84l10.6-10.6c.79-.78 2.05-.78 2.83 0zm-1.41 1.42L6.93 12.9l4.24 4.24 7.9-7.9-4.24-4.26z"/></svg>',fullscreen:'<svg viewBox="0 0 24 24"><path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"/></svg>',close:'<svg viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>',check:'<svg viewBox="0 0 24 24"><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/></svg>',save:'<svg viewBox="0 0 24 24"><path d="M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm3-10H5V5h10v4z"/></svg>',print:'<svg viewBox="0 0 24 24"><path d="M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z"/></svg>',subscript:'<svg viewBox="0 0 24 24"><path d="M22 18h-2v1h3v1h-4v-2.5c0-.83.67-1.5 1.5-1.5h1.5v-1h-3v-1h2.5c.83 0 1.5.67 1.5 1.5v1c0 .83-.67 1.5-1.5 1.5zM5.88 18h2.66l3.4-5.42h.12l3.4 5.42h2.66l-4.65-7.27L17.81 4h-2.68l-3.07 4.99h-.12L8.87 4H6.19l4.32 6.73L5.88 18z"/></svg>',superscript:'<svg viewBox="0 0 24 24"><path d="M22 7h-2v1h3v1h-4V6.5c0-.83.67-1.5 1.5-1.5h1.5V4h-3V3h2.5c.83 0 1.5.67 1.5 1.5v1c0 .83-.67 1.5-1.5 1.5zM5.88 20h2.66l3.4-5.42h.12l3.4 5.42h2.66l-4.65-7.27L17.81 6h-2.68l-3.07 4.99h-.12L8.87 6H6.19l4.32 6.73L5.88 20z"/></svg>',search:'<svg viewBox="0 0 24 24"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg>',emoji:'<svg viewBox="0 0 24 24"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm3.5-9c.83 0 1.5-.67 1.5-1.5S16.33 8 15.5 8 14 8.67 14 9.5s.67 1.5 1.5 1.5zm-7 0c.83 0 1.5-.67 1.5-1.5S9.33 8 8.5 8 7 8.67 7 9.5 7.67 11 8.5 11zm3.5 6.5c2.33 0 4.31-1.46 5.11-3.5H6.89c.8 2.04 2.78 3.5 5.11 3.5z"/></svg>',specialChars:'<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10" fill="none" stroke="currentColor" stroke-width="2"/><text x="12" y="16" text-anchor="middle" font-size="12" font-weight="bold" fill="currentColor">©</text></svg>',sun:'<svg viewBox="0 0 24 24"><path d="M6.76 4.84l-1.8-1.79-1.41 1.41 1.79 1.79 1.42-1.41zM4 10.5H1v2h3v-2zm9-9.95h-2V3.5h2V.55zm7.45 3.91l-1.41-1.41-1.79 1.79 1.41 1.41 1.79-1.79zm-3.21 13.7l1.79 1.8 1.41-1.41-1.8-1.79-1.4 1.4zM20 10.5v2h3v-2h-3zm-8-5c-3.31 0-6 2.69-6 6s2.69 6 6 6 6-2.69 6-6-2.69-6-6-6zm-1 16.95h2V19.5h-2v2.95zm-7.45-3.91l1.41 1.41 1.79-1.8-1.41-1.41-1.79 1.8z"/></svg>',moon:'<svg viewBox="0 0 24 24"><path d="M12 3c-4.97 0-9 4.03-9 9s4.03 9 9 9 9-4.03 9-9c0-.46-.04-.92-.1-1.36-.98 1.37-2.58 2.26-4.4 2.26-2.98 0-5.4-2.42-5.4-5.4 0-1.81.89-3.42 2.26-4.4-.44-.06-.9-.1-1.36-.1z"/></svg>',plus:'<svg viewBox="0 0 24 24"><path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/></svg>',more:'<svg viewBox="0 0 24 24"><circle cx="6" cy="12" r="2"/><circle cx="12" cy="12" r="2"/><circle cx="18" cy="12" r="2"/></svg>',download:'<svg viewBox="0 0 24 24"><path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"/></svg>',eye:'<svg viewBox="0 0 24 24"><path d="M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>',trash:'<svg viewBox="0 0 24 24"><path d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"/></svg>',"chevron-down":'<svg viewBox="0 0 24 24"><path d="M7 10l5 5 5-5z"/></svg>',help:'<svg viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z"/></svg>',grip:'<svg viewBox="0 0 24 24"><circle cx="9" cy="5" r="1.5"/><circle cx="15" cy="5" r="1.5"/><circle cx="9" cy="10" r="1.5"/><circle cx="15" cy="10" r="1.5"/><circle cx="9" cy="15" r="1.5"/><circle cx="15" cy="15" r="1.5"/><circle cx="9" cy="20" r="1.5"/><circle cx="15" cy="20" r="1.5"/></svg>',moveUp:'<svg viewBox="0 0 24 24"><path d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"/></svg>',moveDown:'<svg viewBox="0 0 24 24"><path d="M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6z"/></svg>',replaceImage:'<svg viewBox="0 0 24 24"><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"/><path d="M19.35 10.04A7.49 7.49 0 0012 4C9.11 4 6.6 5.64 5.35 8.04" fill="none" stroke="currentColor" stroke-width="1.5"/></svg>'};class g{constructor(e){this.prefix="neiki_"+e+"_"}set(e,t){try{localStorage.setItem(this.prefix+e,JSON.stringify(t))}catch(e){console.warn("NeikiEditor: localStorage not available")}}get(e,t=null){try{const i=localStorage.getItem(this.prefix+e);return i?JSON.parse(i):t}catch(e){return t}}remove(e){try{localStorage.removeItem(this.prefix+e)}catch(e){}}static setGlobal(e,t){try{localStorage.setItem("neiki_global_"+e,JSON.stringify(t))}catch(e){}}static getGlobal(e,t=null){try{const i=localStorage.getItem("neiki_global_"+e);return i?JSON.parse(i):t}catch(e){return t}}}class b{constructor(e,t=100){this.editor=e,this.maxSize=t,this.undoStack=[],this.redoStack=[],this.isRecording=!0,this.loadFromStorage()}record(){if(!this.isRecording)return;const e=this.editor.getContent();this.undoStack[this.undoStack.length-1]!==e&&(this.undoStack.push(e),this.redoStack=[],this.undoStack.length>this.maxSize&&this.undoStack.shift(),this.saveToStorage())}undo(){if(this.undoStack.length<=1)return!1;const e=this.undoStack.pop();this.redoStack.push(e);const t=this.undoStack[this.undoStack.length-1];return this.isRecording=!1,this.editor.setContent(t),this.isRecording=!0,this.saveToStorage(),!0}redo(){if(0===this.redoStack.length)return!1;const e=this.redoStack.pop();return this.undoStack.push(e),this.isRecording=!1,this.editor.setContent(e),this.isRecording=!0,this.saveToStorage(),!0}canUndo(){return this.undoStack.length>1}canRedo(){return this.redoStack.length>0}clear(){this.undoStack=[],this.redoStack=[],this.record()}saveToStorage(){}loadFromStorage(){}clearStorage(){}}class v{constructor(e){this.editor=e,this.activeModal=null,this.overlay=null}createOverlay(){return this.overlay||(this.overlay=p.createElement("div",{className:"neiki-modal-overlay",onClick:e=>{e.target===this.overlay&&this.close()}}),document.body.appendChild(this.overlay)),this.overlay}open(e,t={}){let i;switch(this.editor.saveCurrentSelection&&this.editor.saveCurrentSelection(),this.close(),this.createOverlay(),e){case"link":i=this.createLinkModal(t);break;case"image":i=this.createImageModal(t);break;case"table":i=this.createTableModal(t);break;case"findReplace":i=this.createFindReplaceModal(t);break;case"help":i=this.createHelpModal(t);break;default:return}this.activeModal=i,this.overlay.appendChild(i),this.overlay.classList.add("active");const o=i.querySelector("input");o&&o.focus()}close(){this.overlay&&(this.overlay.classList.remove("active"),this.activeModal&&(this.activeModal.remove(),this.activeModal=null))}createLinkModal(e){const t=p.createElement("div",{className:"neiki-modal"});return t.innerHTML=`\n <div class="neiki-modal-header">\n <h3>${n("modal.insertLink")}</h3>\n <button class="neiki-modal-close" type="button">${u.close}</button>\n </div>\n <div class="neiki-modal-body">\n <div class="neiki-form-group">\n <label>${n("modal.url")}</label>\n <input type="url" class="neiki-input" name="url" placeholder="https://example.com" value="${e.url||""}">\n </div>\n <div class="neiki-form-group">\n <label>${n("modal.text")}</label>\n <input type="text" class="neiki-input" name="text" placeholder="${n("modal.linkText")}" value="${e.text||""}">\n </div>\n <div class="neiki-form-group">\n <label>\n <input type="checkbox" name="newTab" ${e.newTab?"checked":""}> ${n("modal.openInNewTab")}\n </label>\n </div>\n </div>\n <div class="neiki-modal-footer">\n <button class="neiki-btn neiki-btn-secondary" type="button" data-action="cancel">${n("modal.cancel")}</button>\n <button class="neiki-btn neiki-btn-primary" type="button" data-action="insert">${n("modal.insert")}</button>\n </div>\n `,t.querySelector(".neiki-modal-close").addEventListener("click",()=>this.close()),t.querySelector('[data-action="cancel"]').addEventListener("click",()=>this.close()),t.querySelector('[data-action="insert"]').addEventListener("click",()=>{const e=t.querySelector('[name="url"]').value,i=t.querySelector('[name="text"]').value||e,o=t.querySelector('[name="newTab"]').checked;e&&(this.editor.restoreSavedSelection(),this.editor.commands.insertLink(e,i,o)),this.close()}),t}createImageModal(e){const t=p.createElement("div",{className:"neiki-modal"}),i="function"==typeof this.editor.config.imageUploadHandler,o=n(i?"modal.handledViaUploader":"modal.convertedToBase64");t.innerHTML=`\n <div class="neiki-modal-header">\n <h3>${n("modal.insertImage")}</h3>\n <button class="neiki-modal-close" type="button">${u.close}</button>\n </div>\n <div class="neiki-modal-body">\n <div class="neiki-form-group">\n <label>${n("modal.uploadImage")}</label>\n <input type="file" class="neiki-input" name="upload" accept="image/*" multiple>\n <small class="neiki-upload-hint" style="color: var(--neiki-text-muted); font-size: 11px;">${o}</small>\n </div>\n <div class="neiki-form-divider">\n <span>${n("modal.or")}</span>\n </div>\n <div class="neiki-form-group">\n <label>${n("modal.imageUrl")}</label>\n <input type="url" class="neiki-input" name="url" placeholder="https://example.com/image.jpg" value="${e.url||""}">\n </div>\n <div class="neiki-form-group">\n <label>${n("modal.altText")}</label>\n <input type="text" class="neiki-input" name="alt" placeholder="${n("modal.describeImage")}" value="${e.alt||""}">\n </div>\n <div class="neiki-form-group">\n <label>${n("modal.widthOptional")}</label>\n <input type="text" class="neiki-input" name="width" placeholder="e.g. 300px or 50%" value="${e.width||""}">\n </div>\n </div>\n <div class="neiki-modal-footer">\n <button class="neiki-btn neiki-btn-secondary" type="button" data-action="cancel">${n("modal.cancel")}</button>\n <button class="neiki-btn neiki-btn-primary" type="button" data-action="insert">${n("modal.insert")}</button>\n </div>\n `;const a=t.querySelector('[name="upload"]'),r=t.querySelector('[name="url"]'),l=(t.querySelector(".neiki-upload-hint"),t.querySelector('[data-action="insert"]'));let s=[];return a.addEventListener("change",e=>{const t=Array.from(e.target.files).filter(e=>e.type.startsWith("image/"));if(Array.from(e.target.files).filter(e=>!e.type.startsWith("image/")).length>0&&alert(n("modal.invalidImageFile")),0!==t.length)if(s=t,1!==t.length||i)r.value="",r.disabled=!0;else{const e=new FileReader;e.onload=e=>{r.value=e.target.result,r.disabled=!0},e.readAsDataURL(t[0])}else s=[]}),r.addEventListener("input",()=>{r.value||(r.disabled=!1,a.value="",s=[])}),t.querySelector(".neiki-modal-close").addEventListener("click",()=>this.close()),t.querySelector('[data-action="cancel"]').addEventListener("click",()=>this.close()),t.querySelector('[data-action="insert"]').addEventListener("click",async()=>{const e=t.querySelector('[name="alt"]').value,o=t.querySelector('[name="width"]').value;if(s.length>0&&i){l.disabled=!0,l.textContent=n("modal.uploadingImage");try{const t=[];for(const i of s){const o=await this.editor.config.imageUploadHandler(i);o&&t.push({url:o,alt:e||i.name})}this.editor.restoreSavedSelection(),t.forEach(e=>{this.editor.commands.insertImage(e.url,e.alt,o)})}catch(e){alert(n("modal.uploadError"))}this.close()}else if(s.length>1){l.disabled=!0,l.textContent=n("modal.uploadingImage"),this.editor.restoreSavedSelection();for(const t of s)await new Promise(i=>{const n=new FileReader;n.onload=n=>{this.editor.commands.insertImage(n.target.result,e||t.name,o),i()},n.readAsDataURL(t)});this.close()}else{const i=t.querySelector('[name="url"]').value;i&&(this.editor.restoreSavedSelection(),this.editor.commands.insertImage(i,e,o)),this.close()}}),t}createTableModal(e){const t=p.createElement("div",{className:"neiki-modal"});return t.innerHTML=`\n <div class="neiki-modal-header">\n <h3>${n("modal.insertTable")}</h3>\n <button class="neiki-modal-close" type="button">${u.close}</button>\n </div>\n <div class="neiki-modal-body">\n <div class="neiki-form-row">\n <div class="neiki-form-group">\n <label>${n("modal.rows")}</label>\n <input type="number" class="neiki-input" name="rows" min="1" max="20" value="${e.rows||3}">\n </div>\n <div class="neiki-form-group">\n <label>${n("modal.columns")}</label>\n <input type="number" class="neiki-input" name="cols" min="1" max="10" value="${e.cols||3}">\n </div>\n </div>\n <div class="neiki-form-group">\n <label>\n <input type="checkbox" name="header" ${!1!==e.header?"checked":""}> ${n("modal.includeHeaderRow")}\n </label>\n </div>\n </div>\n <div class="neiki-modal-footer">\n <button class="neiki-btn neiki-btn-secondary" type="button" data-action="cancel">${n("modal.cancel")}</button>\n <button class="neiki-btn neiki-btn-primary" type="button" data-action="insert">${n("modal.insert")}</button>\n </div>\n `,t.querySelector(".neiki-modal-close").addEventListener("click",()=>this.close()),t.querySelector('[data-action="cancel"]').addEventListener("click",()=>this.close()),t.querySelector('[data-action="insert"]').addEventListener("click",()=>{const e=parseInt(t.querySelector('[name="rows"]').value)||3,i=parseInt(t.querySelector('[name="cols"]').value)||3,o=t.querySelector('[name="header"]').checked;this.editor.restoreSavedSelection(),this.editor.commands.insertTable(e,i,o),this.close()}),t}createFindReplaceModal(e){const t=p.createElement("div",{className:"neiki-modal neiki-modal-wide"});t.innerHTML=`\n <div class="neiki-modal-header">\n <h3>${n("modal.findReplace")}</h3>\n <button class="neiki-modal-close" type="button">${u.close}</button>\n </div>\n <div class="neiki-modal-body">\n <div class="neiki-form-group">\n <label>${n("modal.find")}</label>\n <input type="text" class="neiki-input" name="find" placeholder="${n("modal.searchText")}">\n </div>\n <div class="neiki-form-group">\n <label>${n("modal.replaceWith")}</label>\n <input type="text" class="neiki-input" name="replace" placeholder="${n("modal.replacementText")}">\n </div>\n <div class="neiki-form-group neiki-form-row">\n <label><input type="checkbox" name="regex"> ${n("modal.useRegex")}</label>\n <label><input type="checkbox" name="caseSensitive"> ${n("modal.caseSensitive")}</label>\n </div>\n <div class="neiki-find-results" style="margin-top:10px;font-size:13px;color:var(--neiki-text-muted);"></div>\n </div>\n <div class="neiki-modal-footer">\n <button class="neiki-btn neiki-btn-secondary" type="button" data-action="findNext">${n("modal.findNext")}</button>\n <button class="neiki-btn neiki-btn-secondary" type="button" data-action="replaceOne">${n("modal.replace")}</button>\n <button class="neiki-btn neiki-btn-primary" type="button" data-action="replaceAll">${n("modal.replaceAll")}</button>\n </div>\n `;const i=t.querySelector('[name="find"]'),o=t.querySelector('[name="replace"]'),a=t.querySelector('[name="regex"]'),r=t.querySelector('[name="caseSensitive"]'),l=t.querySelector(".neiki-find-results");let s=[],d=-1;const c=()=>{this.editor.contentArea.querySelectorAll(".neiki-highlight-find").forEach(e=>{const t=document.createTextNode(e.textContent);e.parentNode.replaceChild(t,e)}),this.editor.contentArea.normalize()},h=()=>{c(),s=[],d=-1;const e=i.value;if(!e)return void(l.textContent="");this.editor.contentArea.innerHTML;let t,o="g";r.checked||(o+="i");try{t=a.checked?new RegExp(e,o):new RegExp(e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),o)}catch(e){return void(l.textContent=n("modal.invalidRegex"))}const h=document.createTreeWalker(this.editor.contentArea,NodeFilter.SHOW_TEXT,null,!1),m=[];for(;h.nextNode();)m.push(h.currentNode);m.forEach(e=>{const i=e.textContent,o=[...i.matchAll(t)];if(o.length>0){const t=document.createDocumentFragment();let n=0;o.forEach(e=>{e.index>n&&t.appendChild(document.createTextNode(i.slice(n,e.index)));const o=document.createElement("span");o.className="neiki-highlight-find",o.textContent=e[0],t.appendChild(o),s.push(o),n=e.index+e[0].length}),n<i.length&&t.appendChild(document.createTextNode(i.slice(n))),e.parentNode.replaceChild(t,e)}}),l.textContent=n("modal.matchesFound",{count:s.length})},m=()=>{if(0===s.length&&h(),0===s.length)return;d>=0&&s[d]&&s[d].classList.remove("neiki-highlight-current"),d=(d+1)%s.length;const e=s[d];e.classList.add("neiki-highlight-current"),e.scrollIntoView({behavior:"smooth",block:"center"}),l.textContent=n("modal.matchOf",{current:d+1,total:s.length})};return i.addEventListener("input",p.debounce(h,300)),t.querySelector(".neiki-modal-close").addEventListener("click",()=>{c(),this.close()}),t.querySelector('[data-action="findNext"]').addEventListener("click",m),t.querySelector('[data-action="replaceOne"]').addEventListener("click",()=>{if(d>=0&&s[d]){const e=s[d];e.textContent=o.value,e.classList.remove("neiki-highlight-find","neiki-highlight-current"),s.splice(d,1),d--,this.editor.history.record(),this.editor.triggerChange(),l.textContent=n("modal.matchesRemaining",{count:s.length}),s.length>0&&m()}}),t.querySelector('[data-action="replaceAll"]').addEventListener("click",()=>{c();const e=i.value,t=o.value;if(!e)return;let h,m="g";r.checked||(m+="i");try{h=a.checked?new RegExp(e,m):new RegExp(e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),m)}catch(e){return}const p=document.createTreeWalker(this.editor.contentArea,NodeFilter.SHOW_TEXT,null,!1),u=[];for(;p.nextNode();)u.push(p.currentNode);let g=0;u.forEach(e=>{const i=e.textContent,o=i.replace(h,()=>(g++,t));o!==i&&(e.textContent=o)}),this.editor.history.record(),this.editor.triggerChange(),s=[],d=-1,l.textContent=n("modal.replacedOccurrences",{count:g})}),t}createHelpModal(){const e=p.createElement("div",{className:"neiki-modal"});return e.innerHTML=`\n <div class="neiki-modal-header">\n <h3>${n("menu.help")}</h3>\n <button class="neiki-modal-close" type="button">${u.close}</button>\n </div>\n <div class="neiki-modal-body" style="text-align: center; padding: 24px 20px;">\n <img src="https://github.com/neikiri/neiki-editor/raw/main/logo.png" alt="Neiki's Editor" style="width: 120px; height: auto; margin: 0 auto 16px; display: block;">\n <div style="font-size: 14px; line-height: 2; color: var(--neiki-text-primary);">\n <div><strong>${n("help.author")}:</strong> neikiri (Jindřich Stoklasa)</div>\n <div><strong>${n("help.version")}:</strong> 2.9.2</div>\n <div><strong>${n("help.github")}:</strong> <a href="https://github.com/neikiri/neiki-editor" target="_blank" style="color: var(--neiki-accent);">github.com/neikiri/neiki-editor</a></div>\n <div><strong>${n("help.documentation")}:</strong> <a href="https://github.com/neikiri/neiki-editor/wiki" target="_blank" style="color: var(--neiki-accent);">Wiki</a></div>\n </div>\n </div>\n `,e.querySelector(".neiki-modal-close").addEventListener("click",()=>this.close()),e}}class k{constructor(e){this.editor=e,this.activeDropdown=null,document.addEventListener("click",e=>{this.activeDropdown&&!this.activeDropdown.contains(e.target)&&this.close()})}toggle(e,t){if(e.querySelector(".neiki-dropdown"))return void this.close();let i;switch(this.close(),t){case"heading":i=this.createHeadingDropdown();break;case"fontSize":i=this.createFontSizeDropdown();break;case"fontFamily":i=this.createFontFamilyDropdown();break;default:return}e.appendChild(i),this.activeDropdown=i}close(){this.activeDropdown&&(this.activeDropdown.remove(),this.activeDropdown=null)}createHeadingDropdown(){const e=p.createElement("div",{className:"neiki-dropdown"});return d.forEach(({label:t,value:i})=>{const o=p.createElement("div",{className:"neiki-dropdown-item",innerHTML:`<${i}>${t}</${i}>`,onClick:()=>{this.editor.commands.formatBlock(i),this.close()}});e.appendChild(o)}),e}createFontSizeDropdown(){const e=p.createElement("div",{className:"neiki-dropdown"});return l.forEach(t=>{const i=p.createElement("div",{className:"neiki-dropdown-item",textContent:t+"px",onClick:()=>{this.editor.commands.fontSize(t+"px"),this.close()}});e.appendChild(i)}),e}createFontFamilyDropdown(){const e=p.createElement("div",{className:"neiki-dropdown"});return s.forEach(({label:t,value:i})=>{const o=p.createElement("div",{className:"neiki-dropdown-item",textContent:t,style:{fontFamily:i},onClick:()=>{this.editor.commands.fontFamily(i),this.close()}});e.appendChild(o)}),e}}class f{constructor(e){this.editor=e,this.activePicker=null,this.activeButton=null,document.addEventListener("mousedown",e=>{!this.activePicker||this.activePicker.contains(e.target)||this.activeButton&&this.activeButton.contains(e.target)||this.close()})}toggle(e,t){if(this.activeButton===e&&this.activePicker)return void this.close();this.close();const i=p.createElement("div",{className:"neiki-color-picker"}),o=p.createElement("div",{className:"neiki-color-grid"}),a=p.createElement("div",{className:"neiki-color-swatch neiki-color-reset",title:n("color.reset")});a.addEventListener("mousedown",e=>{e.preventDefault(),e.stopPropagation(),"foreColor"===t?this.editor.commands.resetForeColor():this.editor.commands.resetBackColor(),this.close()}),o.appendChild(a),m.forEach(e=>{const i=p.createElement("div",{className:"neiki-color-swatch",style:{backgroundColor:e},title:e});i.addEventListener("mousedown",i=>{i.preventDefault(),i.stopPropagation(),"foreColor"===t?this.editor.commands.foreColor(e):this.editor.commands.backColor(e),this.close()}),o.appendChild(i)}),i.appendChild(o);const r=p.createElement("div",{className:"neiki-color-custom"}),l=p.createElement("input",{className:"neiki-color-custom-input",type:"color",value:"#000000",title:n("color.pick")}),s=p.createElement("input",{className:"neiki-color-hex-input",type:"text",value:"#000000",placeholder:"#hex",maxLength:7}),d=p.createElement("button",{className:"neiki-color-apply-btn",type:"button"});d.textContent=n("color.apply"),l.addEventListener("input",e=>{s.value=e.target.value}),s.addEventListener("input",e=>{const t=e.target.value;/^#[0-9A-Fa-f]{6}$/.test(t)&&(l.value=t)});const c=e=>{e.preventDefault(),e.stopPropagation();let i=s.value.trim();/^#/.test(i)||(i="#"+i),/^#[0-9A-Fa-f]{6}$/.test(i)&&("foreColor"===t?this.editor.commands.foreColor(i):this.editor.commands.backColor(i),this.close())};d.addEventListener("mousedown",c),s.addEventListener("keydown",e=>{"Enter"===e.key&&c(e)}),r.appendChild(l),r.appendChild(s),r.appendChild(d),i.appendChild(r),i.addEventListener("mousedown",e=>{e.stopPropagation()}),i.addEventListener("click",e=>{e.stopPropagation()}),e.appendChild(i),requestAnimationFrame(()=>{const e=i.getBoundingClientRect();e.right>window.innerWidth&&(i.style.left="auto",i.style.right="0"),e.left<0&&(i.style.left="0",i.style.right="auto")}),this.activePicker=i,this.activeButton=e}close(){this.activePicker&&(this.activePicker.remove(),this.activePicker=null,this.activeButton=null)}}class x{constructor(e){this.editor=e,this.picker=null,this.activeButton=null,document.addEventListener("mousedown",e=>{!this.picker||this.picker.contains(e.target)||this.activeButton&&this.activeButton.contains(e.target)||this.close()})}toggle(e){this.activeButton===e&&this.picker?this.close():(this.close(),this.picker=p.createElement("div",{className:"neiki-emoji-picker"}),c.forEach(e=>{const t=document.createElement("span");t.className="neiki-emoji-item",t.textContent=e,t.title=e,t.addEventListener("mousedown",t=>{t.preventDefault(),t.stopPropagation(),this.editor.restoreSavedSelection(),document.execCommand("insertText",!1,e),this.editor.history.record(),this.editor.triggerChange(),this.close()}),this.picker.appendChild(t)}),e.appendChild(this.picker),this.activeButton=e,this.editor.saveCurrentSelection(),p.positionPopup(e,this.picker))}close(){this.picker&&(this.picker.remove(),this.picker=null,this.activeButton=null)}}class y{constructor(e){this.editor=e,this.picker=null,this.activeButton=null,document.addEventListener("mousedown",e=>{!this.picker||this.picker.contains(e.target)||this.activeButton&&this.activeButton.contains(e.target)||this.close()})}toggle(e){this.activeButton===e&&this.picker?this.close():(this.close(),this.picker=p.createElement("div",{className:"neiki-special-picker"}),h.forEach(({char:e,name:t})=>{const i=document.createElement("span");i.className="neiki-special-item",i.textContent=e,i.title=t,i.addEventListener("mousedown",t=>{t.preventDefault(),t.stopPropagation(),this.editor.restoreSavedSelection(),document.execCommand("insertText",!1,e),this.editor.history.record(),this.editor.triggerChange(),this.close()}),this.picker.appendChild(i)}),e.appendChild(this.picker),this.activeButton=e,this.editor.saveCurrentSelection(),p.positionPopup(e,this.picker))}close(){this.picker&&(this.picker.remove(),this.picker=null,this.activeButton=null)}}class w{constructor(e){this.editor=e}exec(e,t=null){this.editor.focus();["bold","italic","underline","strikeThrough","subscript","superscript","foreColor","backColor","fontName","fontSize","removeFormat"].includes(e)&&this._expandToWordIfCollapsed(),document.execCommand(e,!1,t),this.editor.history.record(),this.editor.updateToolbar(),this.editor.triggerChange()}_expandToWordIfCollapsed(){const e=window.getSelection();if(!e||!e.rangeCount||!e.isCollapsed)return;const t=e.getRangeAt(0),i=t.startContainer;if(i.nodeType!==Node.TEXT_NODE)return;const o=i.textContent;let n=t.startOffset,a=t.startOffset;for(;n>0&&/\S/.test(o[n-1]);)n--;for(;a<o.length&&/\S/.test(o[a]);)a++;n!==a&&(t.setStart(i,n),t.setEnd(i,a),e.removeAllRanges(),e.addRange(t))}bold(){this.exec("bold")}italic(){this.exec("italic")}underline(){this.exec("underline")}strikeThrough(){this.exec("strikeThrough")}subscript(){this.exec("subscript")}superscript(){this.exec("superscript")}justifyLeft(){this.exec("justifyLeft")}justifyCenter(){this.exec("justifyCenter")}justifyRight(){this.exec("justifyRight")}justifyFull(){this.exec("justifyFull")}insertUnorderedList(){this.exec("insertUnorderedList")}insertOrderedList(){this.exec("insertOrderedList")}indent(){this.exec("indent")}outdent(){this.exec("outdent")}removeFormat(){this.exec("removeFormat")}insertHorizontalRule(){this.exec("insertHorizontalRule")}formatBlock(e){if("blockquote"===e){const e=window.getSelection();if(e&&e.rangeCount){let t=e.getRangeAt(0).startContainer;t.nodeType===Node.TEXT_NODE&&(t=t.parentNode);const i=t.closest?t.closest("blockquote"):null;if(i&&this.editor.contentArea.contains(i))return void this.exec("formatBlock","<p>")}}this.exec("formatBlock",`<${e}>`)}fontSize(e){this.editor.focus(),this._expandToWordIfCollapsed(),document.execCommand("fontSize",!1,"7");const t=this.editor.contentArea.querySelectorAll('font[size="7"]'),i=[];if(t.forEach(t=>{const o=document.createElement("span");for(o.style.fontSize=e;t.firstChild;)o.appendChild(t.firstChild);t.parentNode.replaceChild(o,t),i.push(o)}),i.length>0)try{const e=window.getSelection(),t=document.createRange();t.setStartBefore(i[0].firstChild||i[0]);const o=i[i.length-1];t.setEndAfter(o.lastChild||o),e.removeAllRanges(),e.addRange(t)}catch(e){}this.editor.history.record(),this.editor.updateToolbar(),this.editor.triggerChange()}fontFamily(e){this.exec("fontName",e)}foreColor(e){this.exec("foreColor",e)}backColor(e){this.exec("backColor",e)}resetForeColor(){this._resetColorProperty("color")}resetBackColor(){this._resetColorProperty("backgroundColor")}_resetColorProperty(e){this.editor.focus();const t=window.getSelection();if(!t||!t.rangeCount)return;const i=t.getRangeAt(0);if(i.collapsed)return;const o=i.extractContents(),n=t=>{if(t.nodeType===Node.ELEMENT_NODE){if(t.style&&t.style[e]&&(t.style[e]="",t.getAttribute("style")&&t.getAttribute("style").trim()||t.removeAttribute("style")),"color"===e&&"FONT"===t.tagName&&t.hasAttribute("color")&&t.removeAttribute("color"),"backgroundColor"===e&&"FONT"===t.tagName&&t.style.backgroundColor&&(t.style.backgroundColor=""),!("FONT"!==t.tagName||t.hasAttribute("color")||t.hasAttribute("face")||t.hasAttribute("size")||t.getAttribute("style")&&t.getAttribute("style").trim())){const e=t.parentNode;if(e){for(;t.firstChild;)e.insertBefore(t.firstChild,t);e.removeChild(t)}return}if(!("SPAN"!==t.tagName||t.getAttribute("style")&&t.getAttribute("style").trim()||t.className)){const e=t.parentNode;if(e){for(;t.firstChild;)e.insertBefore(t.firstChild,t);e.removeChild(t)}return}Array.from(t.childNodes).forEach(n)}};Array.from(o.childNodes).forEach(n),i.insertNode(o),t.removeAllRanges(),t.addRange(i),this.editor.history.record(),this.editor.updateToolbar(),this.editor.triggerChange()}viewCode(){this.editor.toggleCodeView()}autosave(){this.editor.toggleAutosave()}print(){this.editor.printContent()}insertHTML(e){this.editor.focus(),document.execCommand("insertHTML",!1,e),this.editor.history.record(),this.editor.triggerChange()}insertLink(e,t,i=!1){const o=p.getSelection(),n=o.rangeCount>0?o.getRangeAt(0):null;if(n&&!n.collapsed){if(this.exec("createLink",e),i){this.editor.contentArea.querySelectorAll('a[href="'+e+'"]').forEach(e=>e.setAttribute("target","_blank"))}}else{const o=document.createElement("a");o.href=e,o.textContent=t||e,i&&(o.target="_blank"),this.editor.focus(),document.execCommand("insertHTML",!1,o.outerHTML),this.editor.history.record(),this.editor.triggerChange()}}insertImage(e,t="",i=""){let o=`<img src="${e}"`;t&&(o+=` alt="${t}"`),i&&(o+=` width="${i}"`),o+=">",this.editor.focus(),document.execCommand("insertHTML",!1,o),this.editor.history.record(),this.editor.triggerChange()}insertTable(e,t,i=!0){let o='<table class="neiki-table">';for(let n=0;n<e;n++){o+="<tr>";for(let e=0;e<t;e++)o+=0===n&&i?"<th>Header</th>":"<td>Cell</td>";o+="</tr>"}o+="</table><p><br></p>",this.editor.focus(),document.execCommand("insertHTML",!1,o),this.editor.history.record(),this.editor.triggerChange()}undo(){this.editor.history.undo()&&(this.editor.updateToolbar(),this.editor.triggerChange())}redo(){this.editor.history.redo()&&(this.editor.updateToolbar(),this.editor.triggerChange())}}class C{constructor(e,t={}){if(this.originalElement="string"==typeof e?document.querySelector(e):e,!this.originalElement)throw new Error("NeikiEditor: Element not found");this.id=this.originalElement.id||this.originalElement.getAttribute("data-neiki-id")||"neiki_"+("string"==typeof e?e.replace(/[^a-zA-Z0-9]/g,"_"):"editor"),this.config=p.deepMerge(a,t),this.isFullscreen=!1,this.isAutosaveEnabled=!1,this.autosaveInterval=null,this.savedSelectionRange=null,this.init()}init(){this.storage=new g(this.id),i=this.config.language||"en",this.config.translations&&"object"==typeof this.config.translations&&Object.keys(this.config.translations).forEach(e=>{o(e,this.config.translations[e])});const e=g.getGlobal("theme",this.config.theme);this.config.theme=e,this.createStructure(),this.createToolbar(),this.createContentArea(),this.createStatusBar(),this.history=new b(this),this.modal=new v(this),this.dropdown=new k(this),this.colorPicker=new f(this),this.emojiPicker=new x(this),this.specialCharsPicker=new y(this),this.commands=new w(this),this.tableContextMenu=new A(this),this.floatingToolbar=new L(this),this.imageResizer=new z(this),this.tableColumnResizer=new E(this),this.blockDragDrop=new T(this),this.bindEvents(),this.initDragDrop(),this.initPlugins(),this.syncToOriginal(),this.history.record();this.storage.get("autosave_enabled",!1)&&this.enableAutosave(),this.updateStatusBar(),this.updateToolbar(),this.config.autofocus&&this.focus(),this.config.onReady&&this.config.onReady(this)}createStructure(){const e="en"!==i?`neiki-lang-${i}`:"";this.container=p.createElement("div",{className:`neiki-editor ${"dark"===this.config.theme?"neiki-dark":""} ${e}`.trim(),id:this.id}),this.originalElement.style.display="none",this.originalElement.parentNode.insertBefore(this.container,this.originalElement)}createToolbar(){this.toolbar=p.createElement("div",{className:"neiki-toolbar"}),this.toolbarButtons={},this.toolbarSelects={};let e=p.createElement("div",{className:"neiki-toolbar-group"});const t=t=>{e.appendChild(t)},i=()=>{e.childNodes.length>0&&this.toolbar.appendChild(e),e=p.createElement("div",{className:"neiki-toolbar-group"})};this.config.toolbar.forEach(o=>{if("|"===o)return void i();const a=r[o];if(!a)return;if("select"===a.type){const e=p.createElement("select",{className:"neiki-select",title:n(a.titleKey),"data-command":o});return"heading"===o?d.forEach(({labelKey:t,value:i})=>{const o=document.createElement("option");o.value=i,o.textContent=n(t),e.appendChild(o)}):"fontFamily"===o&&s.forEach(({labelKey:t,value:i})=>{const o=document.createElement("option");o.value=i,o.textContent=n(t),o.style.fontFamily=i,e.appendChild(o)}),e.addEventListener("change",t=>{t.preventDefault(),"heading"===o?this.commands.formatBlock(e.value):"fontFamily"===o&&this.commands.fontFamily(e.value),this.focus()}),this.toolbarSelects[o]=e,void t(e)}if("fontSizeWidget"===a.type){const e=p.createElement("div",{className:"neiki-fontsize-widget"}),i=p.createElement("button",{className:"neiki-fontsize-btn",type:"button",title:n("toolbar.decreaseFontSize"),innerHTML:'<svg viewBox="0 0 24 24" width="14" height="14"><path d="M19 13H5v-2h14v2z" fill="currentColor"/></svg>'}),o=p.createElement("input",{className:"neiki-fontsize-input",type:"text",title:n("toolbar.fontSize"),value:"16"}),a=p.createElement("button",{className:"neiki-fontsize-btn",type:"button",title:n("toolbar.increaseFontSize"),innerHTML:'<svg viewBox="0 0 24 24" width="14" height="14"><path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" fill="currentColor"/></svg>'});let r=null;const s=()=>{const e=window.getSelection();e&&e.rangeCount>0&&this.contentArea&&this.contentArea.contains(e.anchorNode)&&(r=e.getRangeAt(0).cloneRange())},d=()=>{if(r&&this.contentArea)try{const e=window.getSelection();this.contentArea.focus(),e.removeAllRanges(),e.addRange(r)}catch(e){}};setTimeout(()=>{this.contentArea&&(this.contentArea.addEventListener("mouseup",s),this.contentArea.addEventListener("keyup",s))},0),document.addEventListener("selectionchange",()=>{const e=window.getSelection();e&&e.rangeCount>0&&!e.isCollapsed&&this.contentArea&&this.contentArea.contains(e.anchorNode)&&(r=e.getRangeAt(0).cloneRange())});const c=p.createElement("div",{className:"neiki-fontsize-dropdown"});l.forEach(e=>{const t=p.createElement("div",{className:"neiki-fontsize-dropdown-item",textContent:e,"data-size":String(e)});t.addEventListener("mousedown",e=>{e.preventDefault(),e.stopPropagation()}),t.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation(),o.value=e,d(),this.commands.fontSize(e+"px"),s(),c.classList.remove("show")}),c.appendChild(t)});const h=()=>{const e=parseInt(o.value);e&&e>0&&(d(),this.commands.fontSize(e+"px"),s())};return i.addEventListener("mousedown",e=>{e.preventDefault(),e.stopPropagation()}),i.addEventListener("click",e=>{e.preventDefault(),d();const t=parseInt(o.value)||16,i=Math.max(1,t-1);o.value=i,this.commands.fontSize(i+"px"),s()}),a.addEventListener("mousedown",e=>{e.preventDefault(),e.stopPropagation()}),a.addEventListener("click",e=>{e.preventDefault(),d();const t=parseInt(o.value)||16,i=Math.min(999,t+1);o.value=i,this.commands.fontSize(i+"px"),s()}),o.addEventListener("mousedown",e=>{e.preventDefault()}),o.addEventListener("focus",()=>{c.classList.add("show")}),o.addEventListener("keydown",e=>{"Enter"===e.key&&(e.preventDefault(),h(),c.classList.remove("show"),this.focus()),"Escape"===e.key&&(c.classList.remove("show"),this.focus())}),document.addEventListener("mousedown",t=>{e.contains(t.target)||c.classList.remove("show")}),e.appendChild(i),e.appendChild(o),e.appendChild(a),e.appendChild(c),this.fontSizeInput=o,void t(e)}if("insertDropdown"===a.type){const e=p.createElement("button",{className:"neiki-toolbar-btn neiki-insert-dropdown-btn",title:n(a.titleKey),type:"button"});e.innerHTML=u[a.icon]+'<span class="neiki-insert-label">'+n("toolbar.insert")+'</span><span class="neiki-chevron">'+u["chevron-down"]+"</span>";const i=p.createElement("div",{className:"neiki-insert-dropdown"});return[{key:"link",icon:u.link,labelKey:"insert.link",action:()=>{this.saveCurrentSelection(),this.modal.open("link",{text:p.getSelection().toString()})}},{key:"image",icon:u.image,labelKey:"insert.image",action:()=>{this.saveCurrentSelection(),this.modal.open("image",{})}},{key:"table",icon:u.table,labelKey:"insert.table",action:()=>{this.saveCurrentSelection(),this.modal.open("table",{})}},{key:"emoji",icon:u.emoji,labelKey:"insert.emoji",action:()=>{this.saveCurrentSelection(),this.emojiPicker.toggle(e)}},{key:"specialChars",icon:u.specialChars,labelKey:"insert.symbol",action:()=>{this.saveCurrentSelection(),this.specialCharsPicker.toggle(e)}}].forEach(({icon:e,labelKey:t,action:o})=>{const a=p.createElement("div",{className:"neiki-dropdown-item"});a.innerHTML='<span class="neiki-dropdown-item-icon">'+e+"</span>"+n(t),a.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation(),i.classList.remove("show"),o()}),i.appendChild(a)}),e.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation();const o=this.toolbar.querySelector(".neiki-more-dropdown.show");o&&o.classList.remove("show"),this.emojiPicker.close(),this.specialCharsPicker.close(),i.classList.toggle("show"),i.classList.contains("show")&&p.positionPopup(e,i)}),document.addEventListener("mousedown",t=>{e.contains(t.target)||i.contains(t.target)||i.classList.remove("show")}),e.appendChild(i),this.toolbarButtons[o]=e,void t(e)}if("moreMenu"===a.type){const i=p.createElement("button",{className:"neiki-toolbar-btn neiki-more-btn",title:n(a.titleKey),type:"button",innerHTML:u[a.icon],"data-command":o}),r=p.createElement("div",{className:"neiki-more-dropdown"}),l=[{key:"save",icon:u.save,labelKey:"menu.save",action:()=>this.triggerSave()},{key:"preview",icon:u.eye,labelKey:"menu.preview",action:()=>this.previewContent()},{key:"download",icon:u.download,labelKey:"menu.download",action:()=>this.downloadContent()},{key:"print",icon:u.print,labelKey:"menu.print",action:()=>this.printContent()},{key:"divider"},{key:"autosave",icon:u.save,labelKey:"menu.autosave",action:()=>this.toggleAutosave(),toggle:!0},{key:"divider"},{key:"clearAll",icon:u.trash,labelKey:"menu.clearAll",action:()=>this.clearAll(),danger:!0},{key:"themeToggle",icon:u.sun,labelKey:"menu.toggleTheme",action:()=>{this.toggleTheme(),this._updateThemeMenuItem()}},{key:"fullscreen",icon:u.fullscreen,labelKey:"menu.fullscreen",action:()=>this.toggleFullscreen()}];return this.config.showHelp&&(l.push({key:"divider"}),l.push({key:"help",icon:u.help,labelKey:"menu.help",action:()=>this.modal.open("help")})),l.forEach(({key:e,icon:t,labelKey:i,action:o,danger:a,toggle:l})=>{if("divider"===e)return void r.appendChild(p.createElement("div",{className:"neiki-dropdown-divider"}));const s=p.createElement("div",{className:"neiki-dropdown-item"+(a?" neiki-dropdown-item-danger":"")});if(s.innerHTML='<span class="neiki-dropdown-item-icon">'+t+'</span><span class="neiki-dropdown-item-label">'+n(i)+"</span>","autosave"===e){const e=p.createElement("span",{className:"neiki-autosave-badge"});e.textContent="✕",s.appendChild(e),this._autosaveMenuItem=s,this._autosaveBadge=e}"themeToggle"===e&&(this._themeMenuItem=s,this._themeMenuIcon=s.querySelector(".neiki-dropdown-item-icon")),s.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation(),"autosave"!==e&&r.classList.remove("show"),o()}),r.appendChild(s)}),i.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation();const t=this.toolbar.querySelector(".neiki-insert-dropdown.show");t&&t.classList.remove("show"),r.classList.toggle("show")}),document.addEventListener("mousedown",e=>{i.contains(e.target)||r.contains(e.target)||r.classList.remove("show")}),i.appendChild(r),this.toolbarButtons[o]=i,t(i),void(e.style.marginLeft="auto")}const c=p.createElement("button",{className:"neiki-toolbar-btn",title:n(a.titleKey),type:"button",innerHTML:u[a.icon]||"","data-command":o});c.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation(),this.handleToolbarClick(o,c)}),this.toolbarButtons[o]=c,t(c)}),i(),this.container.appendChild(this.toolbar)}createContentArea(){this.contentWrapper=p.createElement("div",{className:"neiki-content-wrapper"}),this.contentArea=p.createElement("div",{className:"neiki-content",contentEditable:!this.config.readonly,spellcheck:this.config.spellcheck,"data-placeholder":n("placeholder")}),this.config.minHeight&&(this.contentArea.style.minHeight=this.config.minHeight+"px"),this.config.maxHeight?(this.contentArea.style.maxHeight=this.config.maxHeight+"px",this.contentArea.style.overflowY="auto"):this.container.classList.add("neiki-sticky-toolbar");const e=this.storage.get("autosave_enabled",!1),t=this.storage.get("autosave_content",null);e&&t?this.contentArea.innerHTML=t:this.originalElement.value?this.contentArea.innerHTML=this.originalElement.value:this.originalElement.innerHTML.trim()&&(this.contentArea.innerHTML=this.originalElement.innerHTML),this._ensureDefaultBlock(),this.contentWrapper.appendChild(this.contentArea),this.isCodeViewOpen=!1,this.codeView=p.createElement("div",{className:"neiki-code-view"});const i=p.createElement("div",{className:"neiki-code-view-header"}),o=p.createElement("span",{className:"neiki-code-view-title",textContent:"HTML Source"}),a=p.createElement("button",{className:"neiki-btn neiki-code-view-apply",type:"button",title:"Apply changes and close"});a.innerHTML=u.close+'<span style="margin-left:5px;font-size:12px;font-weight:500;">Apply & Close</span>',a.addEventListener("click",()=>this.toggleCodeView()),i.appendChild(o),i.appendChild(a),this.codeViewTextarea=p.createElement("textarea",{className:"neiki-code-view-textarea",spellcheck:"false"}),this.codeView.appendChild(i),this.codeView.appendChild(this.codeViewTextarea),this.contentWrapper.appendChild(this.codeView),this.container.appendChild(this.contentWrapper)}bindEvents(){this.contentArea.addEventListener("input",p.debounce(()=>{this._ensureDefaultBlock(),this.history.record(),this.syncToOriginal(),this.triggerChange(),this.updateStatusBar()},300)),document.addEventListener("selectionchange",()=>{const e=window.getSelection(),t=e&&e.rangeCount?e.getRangeAt(0):null,i=t&&p.isRangeInside(t,this.contentArea);i&&this.saveCurrentSelection(),(i||this.contentArea.contains(document.activeElement)||document.activeElement===this.contentArea)&&(this.updateToolbar(),this.updateStatusBar())}),this.contentArea.addEventListener("focus",()=>{this.config.onFocus&&this.config.onFocus(this)}),this.contentArea.addEventListener("blur",()=>{this.config.onBlur&&this.config.onBlur(this)}),this.contentArea.addEventListener("keydown",e=>this.handleKeydown(e)),this.contentArea.addEventListener("copy",e=>this.handleCopyCut(e,!1)),this.contentArea.addEventListener("cut",e=>this.handleCopyCut(e,!0)),this.contentArea.addEventListener("paste",e=>this.handlePaste(e))}handleCopyCut(e,t){if(!this.imageResizer)return;const i=this.imageResizer.getSelectedImageClipboardData();i&&(e.preventDefault(),e.clipboardData.setData("text/html",i.html),e.clipboardData.setData("text/plain",i.text),t&&this.imageResizer.deleteSelectedImage())}handleToolbarClick(e,t){const i=r[e];if(i&&!i.type)if("color"!==i.picker){if("emoji"===i.picker)return this.saveCurrentSelection(),void this.emojiPicker.toggle(t);if("specialChars"===i.picker)return this.saveCurrentSelection(),void this.specialCharsPicker.toggle(t);if(i.modal){this.saveCurrentSelection();let t={};if("link"===e){const e=p.getSelection();t.text=e.toString()}return void this.modal.open(e,t)}"fullscreen"!==e?"themeToggle"!==e?i.value?this.commands[i.command](i.value):this.commands[i.command]?this.commands[i.command]():this.commands.exec(i.command):this.toggleTheme():this.toggleFullscreen()}else this.colorPicker.toggle(t,i.command)}handleKeydown(e){if("Backspace"!==e.key&&"Delete"!==e.key||!this.imageResizer||!this.imageResizer.deleteSelectedImage()){if(e.ctrlKey||e.metaKey)switch(e.key.toLowerCase()){case"b":e.preventDefault(),this.commands.bold();break;case"i":e.preventDefault(),this.commands.italic();break;case"u":e.preventDefault(),this.commands.underline();break;case"k":e.preventDefault(),this.saveCurrentSelection(),this.modal.open("link",{text:p.getSelection().toString()});break;case"z":e.preventDefault(),e.shiftKey?this.commands.redo():this.commands.undo();break;case"y":e.preventDefault(),this.commands.redo();break;case"s":e.preventDefault(),this.triggerSave()}if("Enter"===e.key&&!e.shiftKey&&!e.ctrlKey&&!e.metaKey){const t=window.getSelection();if(t.rangeCount){const i=t.anchorNode,o=i.nodeType===Node.TEXT_NODE?i.parentElement?.closest("blockquote"):i.closest?.("blockquote");if(o&&o===this.contentArea.lastElementChild){const i=t.getRangeAt(0),n=document.createRange();if(n.selectNodeContents(o),n.setStart(i.endContainer,i.endOffset),""===n.toString().trim()){e.preventDefault();const i=document.createElement("p");i.innerHTML="<br>",o.after(i);const n=document.createRange();n.setStart(i,0),n.collapse(!0),t.removeAllRanges(),t.addRange(n),this.history.record(),this.triggerChange()}}}}"Tab"===e.key&&(e.preventDefault(),e.shiftKey?this.commands.outdent():this.commands.indent())}else e.preventDefault()}handlePaste(e){if(e.clipboardData&&e.clipboardData.files.length>0){const t=Array.from(e.clipboardData.files).filter(e=>e.type.startsWith("image/"));if(t.length>0){e.preventDefault();return void("function"==typeof this.config.imageUploadHandler?(async()=>{for(const e of t)try{const t=await this.config.imageUploadHandler(e);t&&this.commands.insertImage(t,e.name,"")}catch(e){console.error("NeikiEditor: Image upload failed",e)}})():t.forEach(e=>{const t=new FileReader;t.onload=t=>{this.commands.insertImage(t.target.result,e.name,"")},t.readAsDataURL(e)}))}}e.preventDefault();let t="";if(e.clipboardData){let i=e.clipboardData.getData("text/html");i?t=p.sanitizeHTML(i):(t=e.clipboardData.getData("text/plain"),t=t.replace(/\n/g,"<br>"))}document.execCommand("insertHTML",!1,t),this.history.record(),this.triggerChange()}updateToolbar(){if(Object.entries(this.toolbarButtons).forEach(([e,t])=>{const i=r[e];if(!i||i.type)return;let o=!1;try{switch(i.command){case"bold":case"italic":case"underline":case"strikeThrough":case"subscript":case"superscript":case"insertUnorderedList":case"insertOrderedList":case"justifyLeft":case"justifyCenter":case"justifyRight":case"justifyFull":o=document.queryCommandState(i.command);break;case"formatBlock":if("blockquote"===i.value){const e=window.getSelection();if(e&&e.rangeCount){let t=e.getRangeAt(0).startContainer;t.nodeType===Node.TEXT_NODE&&(t=t.parentNode),o=!!(t.closest&&t.closest("blockquote")&&this.contentArea.contains(t.closest("blockquote")))}}}}catch(e){}t.classList.toggle("active",o)}),this.toolbarButtons.undo&&(this.toolbarButtons.undo.disabled=!this.history.canUndo()),this.toolbarButtons.redo&&(this.toolbarButtons.redo.disabled=!this.history.canRedo()),this.toolbarButtons.viewCode&&this.toolbarButtons.viewCode.classList.toggle("active",this.isCodeViewOpen),this.toolbarSelects.heading){const e=this.getCurrentBlockType(),t=d.map(e=>e.value);this.toolbarSelects.heading.value=t.includes(e)?e:"p"}if(this.toolbarSelects.fontFamily)try{const e=document.queryCommandValue("fontName");if(e){const t=s.find(t=>t.value.toLowerCase().includes(e.toLowerCase().replace(/"/g,"")));t&&(this.toolbarSelects.fontFamily.value=t.value)}}catch(e){}if(this.fontSizeInput)try{const e=window.getSelection();if(e&&e.rangeCount){let t=e.getRangeAt(0).startContainer;t.nodeType===Node.TEXT_NODE&&(t=t.parentNode);const i=window.getComputedStyle(t),o=Math.round(parseFloat(i.fontSize));o&&(this.fontSizeInput.value=o)}}catch(e){}this._autosaveBadge&&(this._autosaveBadge.textContent=this.isAutosaveEnabled?"✓":"✕",this._autosaveBadge.classList.toggle("active",this.isAutosaveEnabled))}toggleFullscreen(){this.isFullscreen=!this.isFullscreen,this.container.classList.toggle("neiki-fullscreen",this.isFullscreen),document.body.classList.toggle("neiki-fullscreen-active",this.isFullscreen),this.toolbarButtons.fullscreen&&this.toolbarButtons.fullscreen.classList.toggle("active",this.isFullscreen)}toggleTheme(){const e=this.container.classList.contains("neiki-dark"),t=e?"light":"dark";this.container.classList.toggle("neiki-dark",!e),this.config.theme=t,g.setGlobal("theme",t),this.toolbarButtons.themeToggle&&(this.toolbarButtons.themeToggle.innerHTML=e?u.sun:u.moon,this.toolbarButtons.themeToggle.classList.toggle("active",!e),this.toolbarButtons.themeToggle.title=e?"Switch to Dark Mode":"Switch to Light Mode"),this._updateThemeMenuItem()}_updateThemeMenuItem(){if(this._themeMenuIcon){const e=this.container.classList.contains("neiki-dark");this._themeMenuIcon.innerHTML=e?u.moon:u.sun}}triggerSave(){this.config.onSave&&this.config.onSave(this.getContent(),this)}previewContent(){const e=this.getContent(),t=p.createElement("div",{className:"neiki-preview-overlay"}),i=p.createElement("div",{className:"neiki-preview-modal"}),o=p.createElement("div",{className:"neiki-preview-header"});o.innerHTML="<span>"+n("preview.title")+"</span>";const a=p.createElement("button",{className:"neiki-preview-close",type:"button",innerHTML:u.close});a.addEventListener("click",()=>t.remove()),o.appendChild(a);const r=p.createElement("div",{className:"neiki-preview-body"});r.innerHTML=e,i.appendChild(o),i.appendChild(r),t.appendChild(i),t.addEventListener("click",e=>{e.target===t&&t.remove()}),document.addEventListener("keydown",function e(i){"Escape"===i.key&&(t.remove(),document.removeEventListener("keydown",e))}),document.body.appendChild(t)}downloadContent(){const e=this.getContent(),t=new Blob(['<!DOCTYPE html>\n<html lang="en">\n<head>\n<meta charset="UTF-8">\n<meta name="viewport" content="width=device-width, initial-scale=1.0">\n<title>Document</title>\n<style>\nbody{font-family:-apple-system,BlinkMacSystemFont,\'Segoe UI\',Roboto,sans-serif;max-width:800px;margin:40px auto;padding:0 20px;line-height:1.7;color:#1e293b;}\nimg{max-width:100%;}\ntable{border-collapse:collapse;width:100%;}\ntable td,table th{border:1px solid #d1d5db;padding:8px 12px;}\n</style>\n</head>\n<body>\n'+e+"\n</body>\n</html>"],{type:"text/html"}),i=URL.createObjectURL(t),o=document.createElement("a");o.href=i,o.download="document.html",o.click(),URL.revokeObjectURL(i)}clearAll(){this.getContent().trim()&&!confirm(n("confirm.clearAll"))||(this.setContent(""),this.history.record(),this.triggerChange(),this.updateStatusBar())}_ensureDefaultBlock(){if(!this.contentArea)return;const e=this.contentArea.innerHTML.trim();if(!e||"<br>"===e){this.contentArea.innerHTML="<p><br></p>";try{if(document.activeElement===this.contentArea){const e=this.contentArea.querySelector("p");if(e){const t=window.getSelection(),i=document.createRange();i.setStart(e,0),i.collapse(!0),t.removeAllRanges(),t.addRange(i)}}}catch(e){}return}Array.from(this.contentArea.childNodes).forEach(e=>{if(e.nodeType===Node.TEXT_NODE&&e.textContent.trim()){const t=document.createElement("p");e.parentNode.insertBefore(t,e),t.appendChild(e)}})}syncToOriginal(){"TEXTAREA"===this.originalElement.tagName||"INPUT"===this.originalElement.tagName?this.originalElement.value=this.getContent():this.originalElement.innerHTML=this.getContent()}triggerChange(){this.config.onChange&&this.config.onChange(this.getContent(),this),this.container.dispatchEvent(new CustomEvent("neiki:change",{detail:{content:this.getContent(),editor:this}}))}getContent(){const e=this.contentArea.cloneNode(!0);return e.querySelectorAll(".neiki-img-resizable").forEach(e=>{const t=e.querySelector("img");t&&e.parentNode.insertBefore(t,e),e.remove()}),e.querySelectorAll(".neiki-block-grip, .neiki-block-placeholder, .neiki-table-col-resize-handle, .neiki-img-resize-handle, .neiki-img-size-label, .neiki-img-toolbar").forEach(e=>e.remove()),e.innerHTML}setContent(e){this.imageResizer&&this.imageResizer.deselect(),this.savedSelectionRange=null,this.contentArea.innerHTML=p.sanitizeHTML(e),this._ensureDefaultBlock(),this.syncToOriginal()}getText(){return this.contentArea.textContent||this.contentArea.innerText}isEmpty(){const e=this.getText().trim();return""===e||"\n"===e}focus(){this.contentArea.focus()}saveCurrentSelection(){const e=window.getSelection();if(!e||!e.rangeCount)return null;const t=e.getRangeAt(0);return p.isRangeInside(t,this.contentArea)?(this.savedSelectionRange=t.cloneRange(),this.savedSelectionRange):this.savedSelectionRange}restoreSavedSelection(){return this.savedSelectionRange&&p.isRangeInside(this.savedSelectionRange,this.contentArea)?(this.focus(),p.restoreSelection(this.savedSelectionRange),!0):(this.focus(),!1)}blur(){this.contentArea.blur()}enable(){this.contentArea.contentEditable="true",this.container.classList.remove("neiki-disabled")}disable(){this.contentArea.contentEditable="false",this.container.classList.add("neiki-disabled")}destroy(){this.modal.close(),this.dropdown.close(),this.colorPicker.close(),this.imageResizer&&this.imageResizer.destroy(),this.tableColumnResizer&&this.tableColumnResizer.destroy(),this.blockDragDrop&&this.blockDragDrop.destroy(),this.container.remove(),this.originalElement.style.display="",this.modal.overlay&&this.modal.overlay.remove()}setTheme(e){this.config.theme=e,this.container.classList.toggle("neiki-dark","dark"===e),g.setGlobal("theme",e)}createStatusBar(){this.statusBar=p.createElement("div",{className:"neiki-statusbar"});const e=p.createElement("div",{className:"neiki-statusbar-left"}),t=p.createElement("div",{className:"neiki-statusbar-right"});this.statusWordCount=p.createElement("span",{className:"neiki-statusbar-item",textContent:"0 "+n("status.words")}),this.statusCharCount=p.createElement("span",{className:"neiki-statusbar-item",textContent:"0 "+n("status.chars")}),this.statusAutosave=p.createElement("span",{className:"neiki-statusbar-item neiki-statusbar-autosave"}),this.statusAutosave.style.display="none",this.statusBlockType=p.createElement("span",{className:"neiki-statusbar-item neiki-statusbar-block",textContent:"p"}),e.appendChild(this.statusWordCount),e.appendChild(this.statusCharCount),t.appendChild(this.statusAutosave),t.appendChild(this.statusBlockType),this.statusBar.appendChild(e),this.statusBar.appendChild(t),this.container.appendChild(this.statusBar)}updateStatusBar(){if(!this.statusBar)return;const e=this.getText().trim(),t=e?e.split(/\s+/).filter(e=>e.length>0).length:0,i=this.getText().length;this.statusWordCount.textContent=t+" "+n(1===t?"status.word":"status.words"),this.statusCharCount.textContent=i+" "+n(1===i?"status.char":"status.chars"),this.statusBlockType.textContent=this.getCurrentBlockType()}getCurrentBlockType(){const e=window.getSelection();if(!e||!e.rangeCount)return"p";let t=e.getRangeAt(0).startContainer;t.nodeType===Node.TEXT_NODE&&(t=t.parentNode);const i=["P","H1","H2","H3","H4","H5","H6","BLOCKQUOTE","PRE","LI","DIV"];for(;t&&t!==this.contentArea;){if(i.includes(t.tagName))return t.tagName.toLowerCase();t=t.parentNode}return"p"}toggleCodeView(){this.isCodeViewOpen?(this.contentArea.innerHTML=p.sanitizeHTML(this.codeViewTextarea.value),this.codeView.classList.remove("show"),this.isCodeViewOpen=!1,this.history.record(),this.syncToOriginal(),this.triggerChange(),this.updateStatusBar(),this._codeViewEsc&&(document.removeEventListener("keydown",this._codeViewEsc),this._codeViewEsc=null)):(this.codeViewTextarea.value=this.contentArea.innerHTML,this.codeView.classList.add("show"),this.isCodeViewOpen=!0,this.codeViewTextarea.focus(),this._codeViewEsc=e=>{"Escape"===e.key&&this.toggleCodeView()},document.addEventListener("keydown",this._codeViewEsc)),this.updateToolbar()}toggleAutosave(){this.isAutosaveEnabled?this.disableAutosave():this.enableAutosave(),this.updateToolbar()}enableAutosave(){this.isAutosaveEnabled=!0,this.storage.set("autosave_enabled",!0),this.statusAutosave&&(this.statusAutosave.style.display="",this.statusAutosave.textContent=n("autosave.savedLocally")),this._autosaveContentHandler||(this._autosaveContentHandler=p.debounce(()=>{this.isAutosaveEnabled&&(this.statusAutosave&&(this.statusAutosave.textContent=n("autosave.autosaving"),this.statusAutosave.style.display=""),this.storage.set("autosave_content",this.getContent()),setTimeout(()=>{this.statusAutosave&&this.isAutosaveEnabled&&(this.statusAutosave.textContent=n("autosave.savedLocally"))},500))},1e3),this.contentArea.addEventListener("input",this._autosaveContentHandler)),this.storage.set("autosave_content",this.getContent()),this.updateToolbar()}disableAutosave(){this.isAutosaveEnabled=!1,this.storage.set("autosave_enabled",!1),this.autosaveInterval&&(clearInterval(this.autosaveInterval),this.autosaveInterval=null),this.statusAutosave&&(this.statusAutosave.style.display="none"),this.updateToolbar()}printContent(){const e=window.open("","_blank"),t=this.getContent();e.document.write(`\n <!DOCTYPE html>\n <html>\n <head>\n <title>Print</title>\n <style>\n body { font-family: Arial, sans-serif; padding: 20px; line-height: 1.6; }\n table { border-collapse: collapse; width: 100%; margin: 1em 0; }\n td, th { border: 1px solid #ccc; padding: 8px; }\n img { max-width: 100%; }\n blockquote { border-left: 4px solid #ccc; margin: 1em 0; padding-left: 1em; font-style: italic; }\n pre { background: #f5f5f5; padding: 1em; overflow-x: auto; }\n </style>\n </head>\n <body>${t}</body>\n </html>\n `),e.document.close(),e.focus(),setTimeout(()=>{e.print(),e.close()},250)}getJSON(){const e=t=>{if(t.nodeType===Node.TEXT_NODE)return{type:"text",content:t.textContent};if(t.nodeType!==Node.ELEMENT_NODE)return null;const i={type:t.tagName.toLowerCase(),children:[]};if(t.attributes.length>0){i.attrs={};for(let e of t.attributes)i.attrs[e.name]=e.value}t.style&&t.style.cssText&&(i.style=t.style.cssText);for(let o of t.childNodes){const t=e(o);t&&i.children.push(t)}return i},t=[];for(let i of this.contentArea.childNodes){const o=e(i);o&&t.push(o)}return{version:"1.0",content:t}}setJSON(e){if(!e||!e.content)return;const t=e=>{if("text"===e.type)return document.createTextNode(e.content||"");const i=document.createElement(e.type);if(e.attrs)for(let[t,o]of Object.entries(e.attrs))i.setAttribute(t,o);if(e.style&&(i.style.cssText=e.style),e.children)for(let o of e.children){const e=t(o);e&&i.appendChild(e)}return i};this.contentArea.innerHTML="";for(let i of e.content){const e=t(i);e&&this.contentArea.appendChild(e)}this.history.record(),this.syncToOriginal(),this.triggerChange(),this.updateStatusBar()}getHTML(){return this.getContent()}setHTML(e){this.setContent(e)}initPlugins(){C.getPlugins().forEach(e=>{try{if(e.icon&&e.action){const t=p.createElement("button",{className:"neiki-toolbar-btn neiki-plugin-btn",title:e.tooltip||e.name,type:"button",innerHTML:e.icon,"data-plugin":e.name});t.addEventListener("click",t=>{t.preventDefault(),e.action(this)}),this.toolbar.appendChild(t)}e.init&&e.init(this)}catch(t){console.error(`NeikiEditor: Plugin "${e.name}" failed to initialize`,t)}})}insertHTML(e){this.commands.insertHTML(e)}getSelection(){return p.getSelection()}wrapSelection(e,t={}){const i=window.getSelection();if(!i.rangeCount||i.getRangeAt(0).collapsed)return;const o=i.getRangeAt(0),n=document.createElement(e);Object.entries(t).forEach(([e,t])=>{n.setAttribute(e,t)});try{o.surroundContents(n),this.history.record(),this.triggerChange()}catch(e){const t=o.extractContents();n.appendChild(t),o.insertNode(n),this.history.record(),this.triggerChange()}}unwrapSelection(e){const t=window.getSelection();if(!t.rangeCount)return;let i=t.getRangeAt(0).commonAncestorContainer;i.nodeType===Node.TEXT_NODE&&(i=i.parentNode);const o=i.closest(e);if(o&&this.contentArea.contains(o)){const e=o.parentNode;for(;o.firstChild;)e.insertBefore(o.firstChild,o);e.removeChild(o),this.history.record(),this.triggerChange()}}execCommand(e,t=null){this.commands.exec(e,t)}initDragDrop(){let e=0;this.contentArea.addEventListener("dragenter",t=>{t.preventDefault(),t.dataTransfer.types.includes("Files")&&(e++,this.contentArea.classList.add("neiki-drag-over"))}),this.contentArea.addEventListener("dragleave",t=>{t.preventDefault(),t.dataTransfer.types.includes("Files")&&(e--,0===e&&this.contentArea.classList.remove("neiki-drag-over"))}),this.contentArea.addEventListener("dragover",e=>{e.preventDefault()}),this.contentArea.addEventListener("drop",t=>{t.preventDefault(),e=0,this.contentArea.classList.remove("neiki-drag-over");const i=Array.from(t.dataTransfer.files).filter(e=>e.type.startsWith("image/"));if(i.length>0){const e=t.clientX,o=t.clientY,n=()=>{const t=document.caretRangeFromPoint(e,o);if(t){const e=window.getSelection();e.removeAllRanges(),e.addRange(t)}};"function"==typeof this.config.imageUploadHandler?(async()=>{for(const e of i)try{n();const t=await this.config.imageUploadHandler(e);t&&this.commands.insertImage(t,e.name,"")}catch(e){console.error("NeikiEditor: Image upload failed",e)}})():i.forEach(e=>{const t=new FileReader;t.onload=t=>{n(),this.commands.insertImage(t.target.result,e.name,"")},t.readAsDataURL(e)})}})}}class z{constructor(e){this.editor=e,this.wrapper=null,this.currentImg=null,this.isResizing=!1,this.startX=0,this.startY=0,this.startWidth=0,this.startHeight=0,this.aspectRatio=1,this.handle=null,this.bindEvents()}bindEvents(){this._dragTimeout=null,this._dragStarted=!1,this.editor.contentArea.addEventListener("mousedown",e=>{const t=e.target.closest("img");if(!t||!this.editor.contentArea.contains(t))return;if(e.target.closest(".neiki-img-resize-handle")||e.target.closest(".neiki-img-toolbar"))return;e.preventDefault(),this._dragStarted=!1,this.wrapper&&this.currentImg===t||this.selectImage(t),this._dragTimeout=setTimeout(()=>{this.wrapper&&this.currentImg&&(this._dragStarted=!0,this.startImageDrag(e))},200);const i=()=>{clearTimeout(this._dragTimeout),document.removeEventListener("mouseup",i),document.removeEventListener("mousemove",a)};let o=e.clientX,n=e.clientY;const a=e=>{(Math.abs(e.clientX-o)>5||Math.abs(e.clientY-n)>5)&&(clearTimeout(this._dragTimeout),!this._dragStarted&&this.wrapper&&this.currentImg&&(this._dragStarted=!0,this.startImageDrag(e)),document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",i))};document.addEventListener("mouseup",i),document.addEventListener("mousemove",a)}),this.editor.contentArea.addEventListener("click",e=>{if(this._dragStarted)return;const t=e.target.closest("img");t&&this.editor.contentArea.contains(t)?(e.preventDefault(),this.wrapper&&this.currentImg===t||this.selectImage(t)):e.target.closest(".neiki-img-resize-handle")||e.target.closest(".neiki-img-toolbar")||this.deselect()}),this.editor.contentArea.addEventListener("touchend",e=>{const t=e.target.closest("img");t&&this.editor.contentArea.contains(t)&&(e.target.closest(".neiki-img-resize-handle")||e.target.closest(".neiki-img-toolbar")||(e.preventDefault(),this.wrapper&&this.currentImg===t||this.selectImage(t)))}),this.editor.contentArea.addEventListener("dragstart",e=>{"IMG"===e.target.tagName&&e.preventDefault()}),document.addEventListener("mousedown",e=>{!this.wrapper||this.wrapper.contains(e.target)||this.editor.contentArea.contains(e.target)||this.deselect()}),document.addEventListener("touchstart",e=>{!this.wrapper||this.wrapper.contains(e.target)||this.editor.contentArea.contains(e.target)||this.deselect()})}selectImage(e){this.deselect(),this.currentImg=e,this.wrapper=document.createElement("span"),this.wrapper.className="neiki-img-resizable",this.wrapper.contentEditable="false",this.wrapper.setAttribute("data-neiki-resizer","true"),e.parentNode.insertBefore(this.wrapper,e),this.wrapper.appendChild(e),["nw","ne","sw","se"].forEach(e=>{const t=document.createElement("span");t.className="neiki-img-resize-handle "+e,t.setAttribute("data-pos",e),t.addEventListener("mousedown",t=>this.startResize(t,e)),t.addEventListener("touchstart",t=>{t.preventDefault();const i=t.touches[0];this.startResize(i,e,!0)},{passive:!1}),this.wrapper.appendChild(t)}),this.sizeLabel=document.createElement("span"),this.sizeLabel.className="neiki-img-size-label",this.sizeLabel.textContent=Math.round(e.offsetWidth)+" × "+Math.round(e.offsetHeight),this.wrapper.appendChild(this.sizeLabel),this.imgToolbar=document.createElement("div"),this.imgToolbar.className="neiki-img-toolbar",this.imgToolbar.contentEditable="false";const t=document.createElement("button");t.className="neiki-img-toolbar-btn neiki-img-drag-handle",t.type="button",t.title=n("imageToolbar.dragToMove"),t.innerHTML=u.grip,t.addEventListener("mousedown",e=>{e.preventDefault(),e.stopPropagation(),this.startImageDrag(e)}),t.addEventListener("touchstart",e=>{e.preventDefault(),e.stopPropagation();const t=e.touches[0];this.startImageDrag({clientX:t.clientX,clientY:t.clientY},!0)},{passive:!1});const i=document.createElement("button");i.className="neiki-img-toolbar-btn",i.type="button",i.innerHTML=u.moveUp,i.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation();const t=this.getImageBlock();t&&this.editor.blockDragDrop&&(this.editor.blockDragDrop.moveBlockUp(t),this.positionImgToolbar())});const o=document.createElement("button");o.className="neiki-img-toolbar-btn",o.type="button",o.innerHTML=u.moveDown,o.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation();const t=this.getImageBlock();t&&this.editor.blockDragDrop&&(this.editor.blockDragDrop.moveBlockDown(t),this.positionImgToolbar())});const a=document.createElement("span");a.className="neiki-img-toolbar-separator";const r=document.createElement("button");r.className="neiki-img-toolbar-btn",r.type="button",r.title=n("imageToolbar.replaceImage"),r.innerHTML=u.replaceImage,r.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation(),this.replaceImage()});const l=document.createElement("button");l.className="neiki-img-toolbar-btn neiki-img-toolbar-btn-danger",l.type="button",l.title=n("imageToolbar.deleteImage"),l.innerHTML=u.trash,l.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation(),this.deleteSelectedImage()}),this.imgToolbar.appendChild(t),this.imgToolbar.appendChild(i),this.imgToolbar.appendChild(o),this.imgToolbar.appendChild(a),this.imgToolbar.appendChild(r),this.imgToolbar.appendChild(l),this.wrapper.appendChild(this.imgToolbar),this.positionImgToolbar(),this.selectWrapperRange()}getImageBlock(){if(!this.wrapper)return null;let e=this.wrapper;for(;e&&e.parentNode!==this.editor.contentArea;)e=e.parentNode;return e}positionImgToolbar(){if(!this.imgToolbar||!this.wrapper)return;this.imgToolbar.style.top="",this.imgToolbar.style.bottom="",this.imgToolbar.style.left="",this.imgToolbar.style.transform="";const e=this.wrapper.getBoundingClientRect(),t=this.editor.toolbar.getBoundingClientRect();e.top-t.bottom<50?(this.imgToolbar.style.top="auto",this.imgToolbar.style.bottom="-42px"):(this.imgToolbar.style.top="-42px",this.imgToolbar.style.bottom="auto"),requestAnimationFrame(()=>{if(!this.imgToolbar)return;const e=this.imgToolbar.getBoundingClientRect();e.left<4?(this.imgToolbar.style.left="0",this.imgToolbar.style.transform="none"):e.right>window.innerWidth-4&&(this.imgToolbar.style.left="auto",this.imgToolbar.style.right="0",this.imgToolbar.style.transform="none")})}replaceImage(){if(!this.currentImg)return;const e=document.createElement("input");e.type="file",e.accept="image/*",e.addEventListener("change",async()=>{const t=e.files[0];if(!t)return;if("function"==typeof this.editor.config.imageUploadHandler)try{const e=await this.editor.config.imageUploadHandler(t);e&&(this.currentImg.src=e)}catch(e){console.error("NeikiEditor: Image upload failed",e)}else{const e=new FileReader;e.onload=e=>{this.currentImg.src=e.target.result},e.readAsDataURL(t)}this.editor.history.record(),this.editor.syncToOriginal(),this.editor.triggerChange()}),e.click()}startImageDrag(e,t=!1){if(!this.wrapper||!this.currentImg)return;const i=this.currentImg,o=this.wrapper,n=this.editor.contentArea,a=i.style.width,r=i.style.height,l=document.createElement("div");l.className="neiki-block-ghost",l.style.width=Math.min(i.offsetWidth,200)+"px",l.style.opacity="0.7",l.style.pointerEvents="none";const s=i.cloneNode(!0);s.style.width="100%",s.style.height="auto",l.appendChild(s),document.body.appendChild(l);const d=e.clientX-o.getBoundingClientRect().left,c=e.clientY-o.getBoundingClientRect().top;l.style.left=e.clientX-d+"px",l.style.top=e.clientY-c+"px",o.style.opacity="0.3";let h=null;const m=e=>{let i,a;if(t){if(!e.touches||!e.touches.length)return;i=e.touches[0].clientX,a=e.touches[0].clientY,e.preventDefault()}else i=e.clientX,a=e.clientY;l.style.left=i-d+"px",l.style.top=a-c+"px";const r=((e,t)=>{if(document.caretRangeFromPoint)return document.caretRangeFromPoint(e,t);if(document.caretPositionFromPoint){const i=document.caretPositionFromPoint(e,t);if(i){const e=document.createRange();return e.setStart(i.offsetNode,i.offset),e.collapse(!0),e}}return null})(i,a);if(r&&n.contains(r.startContainer)){let e=r.startContainer;for(;e&&e!==n;){if(e===o)return;e=e.parentNode}h=r;const t=window.getSelection();t.removeAllRanges(),t.addRange(r)}},p=()=>{t?(document.removeEventListener("touchmove",m),document.removeEventListener("touchend",p)):(document.removeEventListener("mousemove",m),document.removeEventListener("mouseup",p));const e=i.parentNode;e&&e.removeChild(i),a&&(i.style.width=a),r&&(i.style.height=r),o.parentNode&&o.parentNode.removeChild(o),this.wrapper=null,this.currentImg=null,this.sizeLabel=null,this.imgToolbar=null,h&&n.contains(h.startContainer)?h.insertNode(i):n.appendChild(i),l.remove(),this.editor._ensureDefaultBlock(),this.selectImage(i),this.editor.history.record(),this.editor.syncToOriginal(),this.editor.triggerChange()};t?(document.addEventListener("touchmove",m,{passive:!1}),document.addEventListener("touchend",p)):(document.addEventListener("mousemove",m),document.addEventListener("mouseup",p))}selectWrapperRange(){if(!this.wrapper)return;this.editor.focus();const e=window.getSelection(),t=document.createRange();t.selectNode(this.wrapper),e.removeAllRanges(),e.addRange(t)}getSelectedImageClipboardData(){if(!this.currentImg||!this.wrapper||!this.editor.contentArea.contains(this.wrapper))return null;const e=this.currentImg.cloneNode(!0);return{html:e.outerHTML,text:e.getAttribute("src")||""}}deleteSelectedImage(){if(!this.currentImg||!this.wrapper||!this.editor.contentArea.contains(this.wrapper))return!1;const e=this.wrapper.parentNode,t=document.createTextNode("");e.insertBefore(t,this.wrapper),this.wrapper.remove(),this.wrapper=null,this.currentImg=null,this.sizeLabel=null;const i=document.createRange();t.parentNode?(i.setStartAfter(t),t.remove()):(i.selectNodeContents(this.editor.contentArea),i.collapse(!1)),i.collapse(!0);const o=window.getSelection();return o.removeAllRanges(),o.addRange(i),this.editor.savedSelectionRange=i.cloneRange(),this.editor._ensureDefaultBlock(),this.editor.history.record(),this.editor.syncToOriginal(),this.editor.triggerChange(),this.editor.updateStatusBar(),!0}deselect(){if(this.wrapper&&this.currentImg){const e=this.currentImg,t=this.wrapper.parentNode;t&&(t.insertBefore(e,this.wrapper),this.wrapper.remove())}this.wrapper=null,this.currentImg=null,this.sizeLabel=null,this.imgToolbar=null}startResize(e,t,i=!1){if(e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),this.isResizing=!0,this.handle=t,this.startX=e.clientX,this.startY=e.clientY,this.startWidth=this.currentImg.offsetWidth,this.startHeight=this.currentImg.offsetHeight,this.aspectRatio=this.startWidth/this.startHeight,i){const e=e=>{e.preventDefault(),this.onResize(e.touches[0])},t=()=>{this.isResizing=!1,document.removeEventListener("touchmove",e),document.removeEventListener("touchend",t),this.editor.history.record(),this.editor.syncToOriginal(),this.editor.triggerChange()};document.addEventListener("touchmove",e,{passive:!1}),document.addEventListener("touchend",t)}else{const e=e=>this.onResize(e),t=()=>{this.isResizing=!1,document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",t),this.editor.history.record(),this.editor.syncToOriginal(),this.editor.triggerChange()};document.addEventListener("mousemove",e),document.addEventListener("mouseup",t)}}onResize(e){if(!this.isResizing||!this.currentImg)return;const t=e.clientX-this.startX;e.clientY,this.startY;let i,o;switch(this.handle){case"se":case"ne":i=this.startWidth+t;break;case"sw":case"nw":i=this.startWidth-t}i=Math.max(30,i),o=Math.round(i/this.aspectRatio),this.currentImg.style.width=i+"px",this.currentImg.style.height=o+"px",this.currentImg.removeAttribute("width"),this.currentImg.removeAttribute("height"),this.sizeLabel&&(this.sizeLabel.textContent=Math.round(i)+" × "+Math.round(o))}destroy(){this.deselect()}}class E{constructor(e){this.editor=e,this.isResizing=!1,this.currentHandle=null,this.startX=0,this.startWidthLeft=0,this.startWidthRight=0,this.cellLeft=null,this.cellRight=null,this.bindEvents()}bindEvents(){this.editor.contentArea.addEventListener("mousemove",e=>{if(this.isResizing)return;const t=e.target.closest("td, th");t?this.showHandle(t,e):this.removeHandles()}),this.editor.contentArea.addEventListener("mouseleave",()=>{this.isResizing||this.removeHandles()})}showHandle(e,t){const i=e.getBoundingClientRect(),o=t.clientX>i.right-6,n=t.clientX<i.left+6;if(this.removeHandles(),!o&&!n)return;const a=e.closest("table");if(!a)return;let r,l;const s=e.closest("tr"),d=Array.from(s.cells).indexOf(e);if(o&&d<s.cells.length-1)r=e,l=s.cells[d+1];else{if(!(n&&d>0))return;r=s.cells[d-1],l=e}const c=document.createElement("div");c.className="neiki-table-col-resize-handle";const h=r.getBoundingClientRect(),m=this.editor.contentArea.getBoundingClientRect();c.style.left=h.right-m.left-3+this.editor.contentArea.scrollLeft+"px",c.style.top=a.getBoundingClientRect().top-m.top+this.editor.contentArea.scrollTop+"px",c.style.height=a.offsetHeight+"px",c.addEventListener("mousedown",e=>{e.preventDefault(),e.stopPropagation(),this.startResize(e,r,l,a)}),this.editor.contentArea.appendChild(c),this.currentHandle=c}removeHandles(){this.currentHandle&&(this.currentHandle.remove(),this.currentHandle=null)}startResize(e,t,i,o){this.isResizing=!0,this.startX=e.clientX,this.cellLeft=t,this.cellRight=i,o.style.tableLayout="fixed";const n=o.rows[0];n&&Array.from(n.cells).forEach(e=>{e.style.width||(e.style.width=e.offsetWidth+"px")}),this.startWidthLeft=t.offsetWidth,this.startWidthRight=i.offsetWidth,this.removeHandles();const a=e=>{const n=e.clientX-this.startX,a=Math.max(40,this.startWidthLeft+n),r=Math.max(40,this.startWidthRight-n),l=Array.from(t.closest("tr").cells).indexOf(t),s=Array.from(i.closest("tr").cells).indexOf(i);Array.from(o.rows).forEach(e=>{e.cells[l]&&(e.cells[l].style.width=a+"px"),e.cells[s]&&(e.cells[s].style.width=r+"px")})},r=()=>{this.isResizing=!1,document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",r),this.editor.history.record(),this.editor.triggerChange()};document.addEventListener("mousemove",a),document.addEventListener("mouseup",r)}destroy(){this.removeHandles()}}class T{constructor(e){this.editor=e,this.gripEl=null,this.dragBlock=null,this.placeholder=null,this.isDragging=!1,this.offsetY=0,this.ghostEl=null,this.bindEvents()}getTopLevelBlocks(){return Array.from(this.editor.contentArea.children).filter(e=>e.nodeType===Node.ELEMENT_NODE&&!e.classList.contains("neiki-block-placeholder")&&!e.classList.contains("neiki-block-grip"))}getBlockFromPoint(e){const t=this.getTopLevelBlocks();for(let i=t.length-1;i>=0;i--){if(e>=t[i].getBoundingClientRect().top)return{block:t[i],index:i}}return t.length>0?{block:t[0],index:0}:null}bindEvents(){this.editor.contentArea.addEventListener("mousemove",e=>{if(this.isDragging)return;const t=this.getBlockAt(e.target);t?this.showGrip(t):this.hideGrip()}),this.editor.contentArea.addEventListener("mouseleave",()=>{this.isDragging||this.hideGrip()})}getBlockAt(e){if(!e||e===this.editor.contentArea)return null;let t=e;for(;t&&t.parentNode!==this.editor.contentArea;)t=t.parentNode;return t&&t.nodeType===Node.ELEMENT_NODE&&t.parentNode===this.editor.contentArea?t:null}showGrip(e){if(this.gripEl&&this.gripEl._block===e)return;this.hideGrip();const t=document.createElement("div");t.className="neiki-block-grip",t.innerHTML=u.grip,t.title="Drag to reorder",t.contentEditable="false",t._block=e;const i=this.editor.contentArea.getBoundingClientRect(),o=e.getBoundingClientRect();t.style.top=o.top-i.top+this.editor.contentArea.scrollTop+"px",t.style.left="-28px",t.addEventListener("mousedown",t=>{t.preventDefault(),t.stopPropagation(),this.startDrag(t,e)}),this.editor.contentArea.appendChild(t),this.gripEl=t}hideGrip(){this.gripEl&&(this.gripEl.remove(),this.gripEl=null)}startDrag(e,t){this.isDragging=!0,this.dragBlock=t,this.hideGrip(),this.ghostEl=t.cloneNode(!0),this.ghostEl.className=(this.ghostEl.className||"")+" neiki-block-ghost",this.ghostEl.style.width=t.offsetWidth+"px",document.body.appendChild(this.ghostEl);const i=t.getBoundingClientRect();this.offsetY=e.clientY-i.top,this.ghostEl.style.left=i.left+"px",this.ghostEl.style.top=e.clientY-this.offsetY+"px",this.placeholder=document.createElement("div"),this.placeholder.className="neiki-block-placeholder",this.placeholder.style.height=t.offsetHeight+"px",t.parentNode.insertBefore(this.placeholder,t),t.style.display="none";const o=e=>{this.ghostEl.style.top=e.clientY-this.offsetY+"px";const t=this.getBlockFromPoint(e.clientY);if(t&&t.block!==this.dragBlock&&t.block!==this.placeholder){const i=t.block.getBoundingClientRect(),o=i.top+i.height/2;e.clientY<o?t.block.parentNode.insertBefore(this.placeholder,t.block):t.block.parentNode.insertBefore(this.placeholder,t.block.nextSibling)}},n=()=>{document.removeEventListener("mousemove",o),document.removeEventListener("mouseup",n),this.placeholder.parentNode.insertBefore(this.dragBlock,this.placeholder),this.dragBlock.style.display="",this.placeholder.remove(),this.ghostEl.remove(),this.isDragging=!1,this.dragBlock=null,this.placeholder=null,this.ghostEl=null,this.editor.history.record(),this.editor.triggerChange()};document.addEventListener("mousemove",o),document.addEventListener("mouseup",n)}moveBlockUp(e){if(e||(e=this.getSelectedBlock()),!e)return;const t=e.previousElementSibling;t&&t.parentNode===this.editor.contentArea&&(t.parentNode.insertBefore(e,t),this.editor.history.record(),this.editor.triggerChange())}moveBlockDown(e){if(e||(e=this.getSelectedBlock()),!e)return;const t=e.nextElementSibling;t&&t.parentNode===this.editor.contentArea&&(t.parentNode.insertBefore(e,t.nextSibling),this.editor.history.record(),this.editor.triggerChange())}getSelectedBlock(){const e=window.getSelection();if(!e||!e.rangeCount)return null;let t=e.getRangeAt(0).startContainer;for(t.nodeType===Node.TEXT_NODE&&(t=t.parentNode);t&&t.parentNode!==this.editor.contentArea;)t=t.parentNode;return t&&t.parentNode===this.editor.contentArea?t:null}destroy(){this.hideGrip(),this.ghostEl&&this.ghostEl.remove(),this.placeholder&&this.placeholder.remove()}}class L{constructor(e){this.editor=e,this.toolbar=null,this.isVisible=!1,this.hideTimeout=null,this.createToolbar(),this.bindEvents()}createToolbar(){this.toolbar=p.createElement("div",{className:"neiki-floating-toolbar"});[{item:"moveUp",icon:u.moveUp,title:"Move block up"},{item:"moveDown",icon:u.moveDown,title:"Move block down"}].forEach(({item:e,icon:t,title:i})=>{const o=p.createElement("button",{className:"neiki-toolbar-btn neiki-floating-btn neiki-floating-move-btn",title:i,type:"button",innerHTML:t,"data-command":e});o.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation(),this.handleButtonClick(e)}),this.toolbar.appendChild(o)});const e=p.createElement("span",{className:"neiki-floating-divider"});this.toolbar.appendChild(e);[{item:"bold",icon:u.bold,title:"Bold"},{item:"italic",icon:u.italic,title:"Italic"},{item:"underline",icon:u.underline,title:"Underline"},{item:"strikeThrough",icon:u.strikethrough,title:"Strikethrough"},{item:"link",icon:u.link,title:"Link"}].forEach(({item:e,icon:t,title:i})=>{const o=p.createElement("button",{className:"neiki-toolbar-btn neiki-floating-btn",title:i,type:"button",innerHTML:t,"data-command":e});o.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation(),this.handleButtonClick(e)}),this.toolbar.appendChild(o)}),document.body.appendChild(this.toolbar)}bindEvents(){document.addEventListener("selectionchange",()=>{clearTimeout(this.hideTimeout),this.hideTimeout=setTimeout(()=>this.updatePosition(),100)}),document.addEventListener("mouseup",()=>{setTimeout(()=>this.updatePosition(),10)}),document.addEventListener("scroll",()=>{this.isVisible&&this.updatePosition()})}updatePosition(){if(this.editor.imageResizer&&this.editor.imageResizer.currentImg)return void this.hide();const e=window.getSelection();if(!e.rangeCount||e.isCollapsed||!this.editor.contentArea.contains(e.anchorNode))return void this.hide();const t=e.getRangeAt(0).getBoundingClientRect();if(0===t.width&&0===t.height)return void this.hide();this.show();const i=this.toolbar.getBoundingClientRect(),o=t.left+t.width/2-i.width/2,n=t.top-i.height-10,a=Math.max(10,Math.min(o,window.innerWidth-i.width-10)),r=Math.max(10,n);this.toolbar.style.left=a+"px",this.toolbar.style.top=r+"px"}show(){this.isVisible||(this.toolbar.classList.add("show"),this.isVisible=!0)}hide(){this.isVisible&&(this.toolbar.classList.remove("show"),this.isVisible=!1)}handleButtonClick(e){if("link"===e){const e=p.getSelection();this.editor.modal.open("link",{text:e.toString()})}else"moveUp"===e?this.editor.blockDragDrop&&this.editor.blockDragDrop.moveBlockUp():"moveDown"===e?this.editor.blockDragDrop&&this.editor.blockDragDrop.moveBlockDown():this.editor.commands[e]();this.hide()}}const S=[];C.registerPlugin=function(e){e.name?S.push(e):console.error("NeikiEditor: Plugin must have a name")},C.getPlugins=function(){return[...S]};class A{constructor(e){this.editor=e,this.menu=null,this.currentCell=null,this.createMenu(),this.bindEvents()}createMenu(){this.menu=p.createElement("div",{className:"neiki-context-menu"}),this.menu.innerHTML=`\n <div class="neiki-context-item" data-action="insertRowAbove">${u.table} Insert Row Above</div>\n <div class="neiki-context-item" data-action="insertRowBelow">${u.table} Insert Row Below</div>\n <div class="neiki-context-item" data-action="insertColLeft">${u.table} Insert Column Left</div>\n <div class="neiki-context-item" data-action="insertColRight">${u.table} Insert Column Right</div>\n <div class="neiki-context-divider"></div>\n <div class="neiki-context-item" data-action="deleteRow">${u.eraser} Delete Row</div>\n <div class="neiki-context-item" data-action="deleteCol">${u.eraser} Delete Column</div>\n <div class="neiki-context-item neiki-context-danger" data-action="deleteTable">${u.eraser} Delete Table</div>\n <div class="neiki-context-divider"></div>\n <div class="neiki-context-item" data-action="mergeCells">${u.table} Merge Cells</div>\n <div class="neiki-context-item" data-action="splitCell">${u.table} Split Cell</div>\n `,document.body.appendChild(this.menu),this.menu.querySelectorAll(".neiki-context-item").forEach(e=>{e.addEventListener("click",t=>{const i=e.dataset.action;this.executeAction(i),this.hide()})})}bindEvents(){this.editor.contentArea.addEventListener("contextmenu",e=>{const t=e.target.closest("td, th");t&&(e.preventDefault(),this.currentCell=t,this.show(e.clientX,e.clientY))}),document.addEventListener("click",e=>{this.menu.contains(e.target)||this.hide()}),document.addEventListener("keydown",e=>{"Escape"===e.key&&this.hide()})}show(e,t){this.menu.style.display="block";const i=this.menu.getBoundingClientRect(),o=window.innerWidth,n=window.innerHeight;e+i.width>o&&(e=o-i.width-10),t+i.height>n&&(t=n-i.height-10),this.menu.style.left=e+"px",this.menu.style.top=t+"px"}hide(){this.menu.style.display="none",this.currentCell=null}executeAction(e){if(!this.currentCell)return;const t=this.currentCell.closest("table"),i=this.currentCell.closest("tr");if(!t||!i)return;const o=Array.from(t.rows).indexOf(i),n=Array.from(i.cells).indexOf(this.currentCell);switch(e){case"insertRowAbove":this.insertRow(t,o,"before");break;case"insertRowBelow":this.insertRow(t,o,"after");break;case"insertColLeft":this.insertColumn(t,n,"before");break;case"insertColRight":this.insertColumn(t,n,"after");break;case"deleteRow":this.deleteRow(t,o);break;case"deleteCol":this.deleteColumn(t,n);break;case"deleteTable":t.remove();break;case"mergeCells":this.mergeCells();break;case"splitCell":this.splitCell()}this.editor.history.record(),this.editor.triggerChange()}insertRow(e,t,i){const o=e.rows[t].cells.length,n=e.insertRow("before"===i?t:t+1);for(let e=0;e<o;e++){n.insertCell().innerHTML="&nbsp;"}}insertColumn(e,t,i){const o="before"===i?t:t+1;for(let t of e.rows){const e=t.insertCell(o);if(e.innerHTML="&nbsp;",t.cells[0]&&"TH"===t.cells[0].tagName){const t=document.createElement("th");t.innerHTML="&nbsp;",e.parentNode.replaceChild(t,e)}}}deleteRow(e,t){e.rows.length>1&&e.deleteRow(t)}deleteColumn(e,t){for(let i of e.rows)i.cells.length>1&&i.cells[t]&&i.deleteCell(t)}mergeCells(){if(!window.getSelection().rangeCount)return;const e=this.currentCell,t=parseInt(e.getAttribute("colspan")||1);e.setAttribute("colspan",t+1);const i=e.nextElementSibling;!i||"TD"!==i.tagName&&"TH"!==i.tagName||(e.innerHTML+=" "+i.innerHTML,i.remove())}splitCell(){const e=this.currentCell,t=parseInt(e.getAttribute("colspan")||1);if(t>1){e.setAttribute("colspan",t-1);const i=document.createElement(e.tagName);i.innerHTML="&nbsp;",e.after(i)}}}"undefined"!=typeof jQuery&&(jQuery.fn.neikiEditor=function(e){return this.each(function(){jQuery.data(this,"neikiEditor")||jQuery.data(this,"neikiEditor",new C(this,e))})}),C.addTranslation=o,e.NeikiEditor=C,e.createNeikiEditor=function(e,t){return new C(e,t)},"function"==typeof define&&define.amd&&define("NeikiEditor",[],function(){return C}),"object"==typeof module&&module.exports&&(module.exports=C)}("undefined"!=typeof window?window:this);