fable-editor 1.0.0 → 1.0.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.
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/dist/angular/LICENSE +1 -1
- package/dist/angular/README.md +1 -1
- package/dist/angular/core/editor.d.ts +16 -0
- package/dist/angular/core/i18n.d.ts +6 -0
- package/dist/angular/esm2022/core/config.mjs +2 -2
- package/dist/angular/esm2022/core/editor.mjs +194 -6
- package/dist/angular/esm2022/core/i18n.mjs +15 -3
- package/dist/angular/esm2022/core/icons.mjs +6 -1
- package/dist/angular/fesm2022/fable-editor.mjs +213 -8
- package/dist/angular/fesm2022/fable-editor.mjs.map +1 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/editor.css +142 -0
- package/dist/core/editor.d.ts +16 -0
- package/dist/core/editor.d.ts.map +1 -1
- package/dist/core/i18n.d.ts +6 -0
- package/dist/core/i18n.d.ts.map +1 -1
- package/dist/core/icons.d.ts.map +1 -1
- package/dist/core/index.cjs +3 -3
- package/dist/core/index.mjs +282 -174
- package/dist/react/index.cjs +12 -12
- package/dist/react/index.mjs +411 -306
- package/package.json +10 -2
- package/style.css +142 -0
package/dist/core/index.cjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const z={en:{dir:"ltr",file:"File",edit:"Edit",view:"View",insert:"Insert",format:"Format",tools:"Tools",table:"Table",help:"Help",newdoc:"New document",preview:"Preview",print:"Print…",undo:"Undo",redo:"Redo",cut:"Cut",copy:"Copy",paste:"Paste",selectall:"Select all",fullscreen:"Fullscreen",sourcecode:"Source code",wordcount:"Word count",image:"Image…",inserttable:"Table",hr:"Horizontal line",charmap:"Special character…",datetime:"Date/time",pagebreak:"Page break",nbsp:"Nonbreaking space",bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",superscript:"Superscript",subscript:"Subscript",clearformat:"Clear formatting",rowabove:"Insert row before",rowbelow:"Insert row after",delrow:"Delete row",colbefore:"Insert column before",colafter:"Insert column after",delcol:"Delete column",deltable:"Delete table",ltr:"Left to right",rtl:"Right to left",alignleft:"Align left",aligncenter:"Align center",alignright:"Align right",alignjustify:"Justify",numlist:"Numbered list",bullist:"Bullet list",forecolor:"Text color",backcolor:"Background color",removeformat:"Clear formatting",outdent:"Decrease indent",indent:"Increase indent",fontfamily:"Font family",fontsize:"Font size",blocks:"Blocks",quickimage:"Insert image",quicktable:"Insert table",more:"More…",para:"Paragraph",heading:"Heading",pre:"Preformatted",removecolor:"Remove color",currentcolor:"Current color",statushelp:"Press Alt+0 for help",words:"words",helpttl:"Help",shortcuts:"Handy shortcuts",close:"Close",save:"Save",cancel:"Cancel",srcttl:"Source code",wcttl:"Word count",wcwords:"Words",wcchars:"Characters",pastehint:"Use Ctrl+V / ⌘V to paste",liststyles_ol:["Default","Lower alpha","Lower roman","Upper alpha","Upper roman"],liststyles_ul:["Default","Circle","Square"],previewttl:"Preview",tablepropsttl:"Table properties",tblwidth:"Width",tblcellspacing:"Cell spacing",tblcellpadding:"Cell padding",tblborder:"Border width",tblalign:"Alignment",alignnone:"None",quote:"Blockquote",link:"Link…",linkttl:"Insert/edit link",linkurl:"URL",unlink:"Remove link",lineheight:"Line height",wordspacing:"Word spacing",changecase:"Change case",lowercase:"Lowercase",uppercase:"Uppercase",capitalize:"Capitalize Each Word",customcolor:"Custom color…",normal:"Normal",revhistory:"Revision history",revempty:"No revisions yet",restore:"Restore",currentver:"Current version",importword:"Import from Word…",importfail:"Could not import this file. Please choose a valid .docx document.",restoredraft:"Restore last draft",draftempty:"No saved draft found",deleteimg:"Delete image",rotateleft:"Rotate left",rotateright:"Rotate right",fliphorizontal:"Flip horizontal",flipvertical:"Flip vertical",cell:"Cell",row:"Row",column:"Column",cellprops:"Cell properties…",rowprops:"Row properties…",colprops:"Column properties…",tblheight:"Height",valign:"Vertical align",valigntop:"Top",valignmiddle:"Middle",valignbottom:"Bottom",fill:"Fill",nocell:"Click inside a table cell first",uploadimg:"Upload from computer",imagelink:"Insert from URL",imageurlph:"Paste image URL…",insertimg:"Insert",dropimage:"Drop image here",uploading:"Uploading…",uploadfailed:"Upload failed — click to retry"},ar:{dir:"rtl",file:"ملف",edit:"تحرير",view:"عرض",insert:"إدراج",format:"التنسيق",tools:"الأدوات",table:"جدول",help:"تعليمات",newdoc:"مستند جديد",preview:"معاينة",print:"طباعة…",undo:"تراجع",redo:"إعادة",cut:"قص",copy:"نسخ",paste:"لصق",selectall:"تحديد الكل",fullscreen:"ملء الشاشة",sourcecode:"الكود المصدري",wordcount:"عدد الكلمات",image:"صورة…",inserttable:"جدول",hr:"خط أفقي",charmap:"رمز خاص…",datetime:"التاريخ/الوقت",pagebreak:"فاصل الصفحة",nbsp:"مسافة غير فاصلة",bold:"غامق",italic:"مائل",underline:"تسطير",strikethrough:"يتوسطه خط",superscript:"نص مرتفع",subscript:"نص منخفض",clearformat:"مسح التنسيق",rowabove:"إدراج صف قبل",rowbelow:"إدراج صف بعد",delrow:"حذف الصف",colbefore:"إدراج عمود قبل",colafter:"إدراج عمود بعد",delcol:"حذف العمود",deltable:"حذف الجدول",ltr:"من اليسار إلى اليمين",rtl:"من اليمين إلى اليسار",alignleft:"محاذاة لليسار",aligncenter:"توسيط",alignright:"محاذاة لليمين",alignjustify:"ضبط",numlist:"قائمة رقمية",bullist:"قائمة نقطية",forecolor:"لون النص",backcolor:"لون الخلفية",removeformat:"مسح التنسيق",outdent:"إنقاص المسافة البادئة",indent:"زيادة المسافة البادئة",fontfamily:"عائلة الخط",fontsize:"حجم الخط",blocks:"الفقرات",quickimage:"إدراج صورة",quicktable:"إدراج جدول",more:"المزيد…",para:"الفقرة",heading:"العنوان",pre:"منسق مسبقاً",removecolor:"إزالة اللون",currentcolor:"اللون الحالي",statushelp:"اضغط على Alt+0 للحصول على مساعدة",words:"الكلمات",helpttl:"تعليمات",shortcuts:"اختصارات مفيدة",close:"إغلاق",save:"حفظ",cancel:"إلغاء",srcttl:"الكود المصدري",wcttl:"عدد الكلمات",wcwords:"الكلمات",wcchars:"الأحرف",pastehint:"استخدم Ctrl+V / ⌘V للصق",liststyles_ol:["افتراضي","أبجدي صغير","روماني صغير","أبجدي كبير","روماني كبير"],liststyles_ul:["افتراضي","دائرة","مربع"],previewttl:"معاينة",tablepropsttl:"خصائص الجدول",tblwidth:"العرض",tblcellspacing:"تباعد الخلايا",tblcellpadding:"حشو الخلايا",tblborder:"عرض الحدود",tblalign:"المحاذاة",alignnone:"بدون",quote:"اقتباس",link:"رابط…",linkttl:"إدراج/تعديل رابط",linkurl:"الرابط",unlink:"إزالة الرابط",lineheight:"تباعد الأسطر",wordspacing:"تباعد الكلمات",changecase:"تغيير حالة الأحرف",lowercase:"أحرف صغيرة",uppercase:"أحرف كبيرة",capitalize:"تكبير أول حرف",customcolor:"لون مخصص…",normal:"عادي",revhistory:"سجل المراجعات",revempty:"لا توجد مراجعات بعد",restore:"استعادة",currentver:"النسخة الحالية",importword:"استيراد من Word…",importfail:"تعذر استيراد هذا الملف. الرجاء اختيار مستند .docx صالح.",restoredraft:"استعادة آخر مسودة",draftempty:"لا توجد مسودة محفوظة",deleteimg:"حذف الصورة",rotateleft:"تدوير لليسار",rotateright:"تدوير لليمين",fliphorizontal:"قلب أفقي",flipvertical:"قلب رأسي",cell:"خلية",row:"صف",column:"عمود",cellprops:"خصائص الخلية…",rowprops:"خصائص الصف…",colprops:"خصائص العمود…",tblheight:"الارتفاع",valign:"محاذاة عمودية",valigntop:"أعلى",valignmiddle:"وسط",valignbottom:"أسفل",fill:"تعبئة",nocell:"انقر داخل خلية جدول أولاً",uploadimg:"رفع من الجهاز",imagelink:"إدراج من رابط",imageurlph:"الصق رابط الصورة…",insertimg:"إدراج",dropimage:"أسقط الصورة هنا",uploading:"جارٍ الرفع…",uploadfailed:"فشل الرفع — انقر لإعادة المحاولة"}};function L(p){return z[p]}const Y="undo redo | preview print | importword revhistory | fontfamily fontsize | fontsizeincrease fontsizedecrease | bold italic underline strikethrough | forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist | outdent indent | link blockquote changecase lineheight wordspacing | removeformat | blocks | ltr rtl | quickimage quicktable charmap | fullscreen sourcecode",K="file edit view insert format tools table help",W=[["Andale Mono","andale mono,times"],["Arial","arial,helvetica,sans-serif"],["Arial Black","arial black,avant garde"],["Book Antiqua","book antiqua,palatino"],["Comic Sans MS","comic sans ms,sans-serif"],["Courier New","courier new,courier"],["Georgia","georgia,palatino"],["Helvetica","helvetica"],["Impact","impact,chicago"],["Oswald","oswald"],["Sakkal Majalla","sakkal majalla"],["Symbol","symbol"],["Tahoma","tahoma,arial,helvetica,sans-serif"],["Terminal","terminal,monaco"],["Times New Roman","times new roman,times"],["Trebuchet MS","trebuchet ms,geneva"],["Verdana","verdana,geneva"],["Webdings","webdings"],["Wingdings","wingdings,zapf dingbats"]],U=["8px","9px","10px","11px","12px","14px","16px","18px","20px","24px","28px","32px","36px","48px","72px","96px"],V=1,J=100,tt=["1","1.15","1.4","1.5","1.75","2","2.5","3"],et=["1px","2px","4px","6px","8px","12px"],D=[["p","para"],["h1","heading1"],["h2","heading2"],["h3","heading3"],["h4","heading4"],["h5","heading5"],["h6","heading6"],["pre","pre"]],it=["#F76707","#4263EB","#CC5DE8"],j=["#BFEDD2","#FBEEB8","#F8CAC6","#ECCAFA","#C2E0F4","#2DC26B","#F1C40F","#E03E2D","#B96AD9","#3598DB","#169179","#E67E23","#BA372A","#843FA1","#236FA1","#ECF0F1","#CED4D9","#95A5A6","#7E8C8D","#34495E","#000000","#FFFFFF"],X=["©","®","™","§","¶","†","‡","•","…","′","″","‰","°","±","×","÷","≈","≠","≤","≥","∞","µ","√","∑","€","£","¥","¢","←","→","↑","↓","«","»","“","”","‘","’","–","—","؟","،","؛","٪","٭","ـ","٠","١"],w=(p,t)=>`<svg viewBox="${t||"0 0 24 24"}">${p}</svg>`,u=p=>w(`<path class="f" d="${p}"/>`,"0 -960 960 960"),k=(p,t=7.5)=>w('<path d="M10 6h10M10 12h10M10 18h10"/>'+p.map((e,i)=>`<text x="2.5" y="${8.4+i*6}" font-size="${t}" stroke="none" fill="#222f3e" font-family="Arial">${e}</text>`).join("")),a={bold:u("M272-200v-560h221q65 0 120 40t55 111q0 51-23 78.5T602-491q25 11 55.5 41t30.5 90q0 89-65 124.5T501-200H272Zm121-112h104q48 0 58.5-24.5T566-372q0-11-10.5-35.5T494-432H393v120Zm0-228h93q33 0 48-17t15-38q0-24-17-39t-44-15h-95v109Z"),italic:u("M200-200v-100h160l120-360H320v-100h400v100H580L460-300h140v100H200Z"),underline:u("M200-120v-80h560v80H200Zm123-223q-56-63-56-167v-330h103v336q0 56 28 91t82 35q54 0 82-35t28-91v-336h103v330q0 104-56 167t-157 63q-101 0-157-63Z"),strikethrough:u("M486-160q-76 0-135-45t-85-123l88-38q14 48 48.5 79t85.5 31q42 0 76-20t34-64q0-18-7-33t-19-27h112q5 14 7.5 28.5T694-340q0 86-61.5 133T486-160ZM80-480v-80h800v80H80Zm402-326q66 0 115.5 32.5T674-674l-88 39q-9-29-33.5-52T484-710q-41 0-68 18.5T386-640h-96q2-69 54.5-117.5T482-806Z"),undo:u("M280-200v-80h284q63 0 109.5-40T720-420q0-60-46.5-100T564-560H312l104 104-56 56-200-200 200-200 56 56-104 104h252q97 0 166.5 63T800-420q0 94-69.5 157T564-200H280Z"),redo:u("M396-200q-97 0-166.5-63T160-420q0-94 69.5-157T396-640h252L544-744l56-56 200 200-200 200-56-56 104-104H396q-63 0-109.5 40T240-420q0 60 46.5 100T396-280h284v80H396Z"),ltr:u("M360-360v-200q-66 0-113-47t-47-113q0-66 47-113t113-47h320v80h-80v440h-80v-440h-80v440h-80Zm0-280v-160q-33 0-56.5 23.5T280-720q0 33 23.5 56.5T360-640Zm0-80ZM680-80l-56-56 64-64H120v-80h568l-64-64 56-56 160 160L680-80Z"),rtl:u("M360-360v-200q-66 0-113-47t-47-113q0-66 47-113t113-47h320v80h-80v440h-80v-440h-80v440h-80Zm-88 160 64 64-56 56-160-160 160-160 56 56-64 64h568v80H272Zm88-440v-160q-33 0-56.5 23.5T280-720q0 33 23.5 56.5T360-640Zm0-80Z"),alignleft:u("M120-120v-80h720v80H120Zm0-160v-80h480v80H120Zm0-160v-80h720v80H120Zm0-160v-80h480v80H120Zm0-160v-80h720v80H120Z"),aligncenter:u("M120-120v-80h720v80H120Zm160-160v-80h400v80H280ZM120-440v-80h720v80H120Zm160-160v-80h400v80H280ZM120-760v-80h720v80H120Z"),alignright:u("M120-760v-80h720v80H120Zm240 160v-80h480v80H360ZM120-440v-80h720v80H120Zm240 160v-80h480v80H360ZM120-120v-80h720v80H120Z"),alignjustify:u("M120-120v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Z"),fullscreen:u("M120-120v-200h80v120h120v80H120Zm520 0v-80h120v-120h80v200H640ZM120-640v-200h200v80H200v120h-80Zm640 0v-120H640v-80h200v200h-80Z"),clearformatic:u("m528-546-93-93-121-121h486v120H568l-40 94ZM792-56 460-388l-80 188H249l119-280L56-792l56-56 736 736-56 56Z"),numlist:u("M120-80v-60h100v-30h-60v-60h60v-30H120v-60h120q17 0 28.5 11.5T280-280v40q0 17-11.5 28.5T240-200q17 0 28.5 11.5T280-160v40q0 17-11.5 28.5T240-80H120Zm0-280v-110q0-17 11.5-28.5T160-510h60v-30H120v-60h120q17 0 28.5 11.5T280-560v70q0 17-11.5 28.5T240-450h-60v30h100v60H120Zm60-280v-180h-60v-60h120v240h-60Zm180 440v-80h480v80H360Zm0-240v-80h480v80H360Zm0-240v-80h480v80H360Z"),bullist:u("M360-200v-80h480v80H360Zm0-240v-80h480v80H360Zm0-240v-80h480v80H360ZM200-160q-33 0-56.5-23.5T120-240q0-33 23.5-56.5T200-320q33 0 56.5 23.5T280-240q0 33-23.5 56.5T200-160Zm0-240q-33 0-56.5-23.5T120-480q0-33 23.5-56.5T200-560q33 0 56.5 23.5T280-480q0 33-23.5 56.5T200-400Zm-56.5-263.5Q120-687 120-720t23.5-56.5Q167-800 200-800t56.5 23.5Q280-753 280-720t-23.5 56.5Q233-640 200-640t-56.5-23.5Z"),chev:w('<path d="M2 3.5 6 7.5 10 3.5"/>',"0 0 12 11"),backcolor:u("M440-80q-33 0-56.5-23.5T360-160v-160H240q-33 0-56.5-23.5T160-400v-280q0-66 47-113t113-47h480v440q0 33-23.5 56.5T720-320H600v160q0 33-23.5 56.5T520-80h-80ZM240-560h480v-200h-40v160h-80v-160h-40v80h-80v-80H320q-33 0-56.5 23.5T240-680v120Zm0 160h480v-80H240v80Zm0 0v-80 80Z"),outdent:u("M120-120v-80h720v80H120Zm320-160v-80h400v80H440Zm0-160v-80h400v80H440Zm0-160v-80h400v80H440ZM120-760v-80h720v80H120Zm160 440L120-480l160-160v320Z"),indent:u("M120-120v-80h720v80H120Zm320-160v-80h400v80H440Zm0-160v-80h400v80H440Zm0-160v-80h400v80H440ZM120-760v-80h720v80H120Zm0 440v-320l160 160-160 160Z"),more:w('<circle class="f" cx="5" cy="12" r="1.7"/><circle class="f" cx="12" cy="12" r="1.7"/><circle class="f" cx="19" cy="12" r="1.7"/>'),image:u("M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm40-80h480L570-480 450-320l-90-120-120 160Zm-40 80v-560 560Z"),uploadic:u("M440-200v-326L336-422l-56-58 200-200 200 200-56 58-104-104v326h-80ZM240-80q-33 0-56.5-23.5T160-160v-120h80v120h480v-120h80v120q0 33-23.5 56.5T720-80H240Z"),tableic:u("M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm240-240H200v160h240v-160Zm80 0v160h240v-160H520Zm-80-80v-160H200v160h240Zm80 0h240v-160H520v160ZM200-680h560v-80H200v80Z"),hric:w('<path d="M4 12h16"/>'),charic:u("M120-120v-120h200q-84-45-132-125t-48-175q0-142 99-241t241-99q142 0 241 99t99 241q0 95-48 175T640-240h200v120H520v-204q78-14 129-75t51-141q0-92-64-156t-156-64q-92 0-156 64t-64 156q0 80 51 141t129 75v204H120Z"),dateic:w('<rect x="4" y="6" width="16" height="14" rx="1.5"/><path d="M4 10h16M8 4v4M16 4v4"/>'),pbic:u("M240-80q-33 0-56.5-23.5T160-160v-120h80v120h480v-120h80v120q0 33-23.5 56.5T720-80H240Zm-80-440v-280q0-33 23.5-56.5T240-880h320l240 240v120h-80v-80H520v-200H240v280h-80Zm200 160v-80h240v80H360Zm320 0v-80h240v80H680Zm-640 0v-80h240v80H40Zm440-160Zm0 240Z"),nbspic:w('<path d="M6 12v4h12v-4"/>'),srcic:u("M240-280 40-480l200-200 56 56-143 144 143 144-56 56Zm178 132-76-24 200-640 76 24-200 640Zm302-132-56-56 143-144-143-144 56-56 200 200-200 200Z"),prevw:u("M607.5-372.5Q660-425 660-500t-52.5-127.5Q555-680 480-680t-127.5 52.5Q300-575 300-500t52.5 127.5Q405-320 480-320t127.5-52.5Zm-204-51Q372-455 372-500t31.5-76.5Q435-608 480-608t76.5 31.5Q588-545 588-500t-31.5 76.5Q525-392 480-392t-76.5-31.5ZM214-281.5Q94-363 40-500q54-137 174-218.5T480-800q146 0 266 81.5T920-500q-54 137-174 218.5T480-200q-146 0-266-81.5ZM480-500Zm207.5 160.5Q782-399 832-500q-50-101-144.5-160.5T480-720q-113 0-207.5 59.5T128-500q50 101 144.5 160.5T480-280q113 0 207.5-59.5Z"),printic:u("M640-640v-120H320v120h-80v-200h480v200h-80Zm-480 80h640-640Zm560 100q17 0 28.5-11.5T760-500q0-17-11.5-28.5T720-540q-17 0-28.5 11.5T680-500q0 17 11.5 28.5T720-460Zm-80 260v-160H320v160h320Zm80 80H240v-160H80v-240q0-51 35-85.5t85-34.5h560q51 0 85.5 34.5T880-520v240H720v160Zm80-240v-160q0-17-11.5-28.5T760-560H200q-17 0-28.5 11.5T160-520v160h80v-80h480v80h80Z"),cutic:u("M760-120 480-400l-94 94q8 15 11 32t3 34q0 66-47 113T240-80q-66 0-113-47T80-240q0-66 47-113t113-47q17 0 34 3t32 11l94-94-94-94q-15 8-32 11t-34 3q-66 0-113-47T80-720q0-66 47-113t113-47q66 0 113 47t47 113q0 17-3 34t-11 32l494 494v40H760ZM600-520l-80-80 240-240h120v40L600-520ZM296.5-663.5Q320-687 320-720t-23.5-56.5Q273-800 240-800t-56.5 23.5Q160-753 160-720t23.5 56.5Q207-640 240-640t56.5-23.5ZM494-466q6-6 6-14t-6-14q-6-6-14-6t-14 6q-6 6-6 14t6 14q6 6 14 6t14-6ZM296.5-183.5Q320-207 320-240t-23.5-56.5Q273-320 240-320t-56.5 23.5Q160-273 160-240t23.5 56.5Q207-160 240-160t56.5-23.5Z"),copyic:u("M360-240q-33 0-56.5-23.5T280-320v-480q0-33 23.5-56.5T360-880h360q33 0 56.5 23.5T800-800v480q0 33-23.5 56.5T720-240H360Zm0-80h360v-480H360v480ZM200-80q-33 0-56.5-23.5T120-160v-560h80v560h440v80H200Zm160-240v-480 480Z"),pasteic:u("M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h167q11-35 43-57.5t70-22.5q40 0 71.5 22.5T594-840h166q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560h-80v120H280v-120h-80v560Zm308.5-571.5Q520-783 520-800t-11.5-28.5Q497-840 480-840t-28.5 11.5Q440-817 440-800t11.5 28.5Q463-760 480-760t28.5-11.5Z"),selall:u("M280-280v-400h400v400H280Zm80-80h240v-240H360v240ZM200-200v80q-33 0-56.5-23.5T120-200h80Zm-80-80v-80h80v80h-80Zm0-160v-80h80v80h-80Zm0-160v-80h80v80h-80Zm80-160h-80q0-33 23.5-56.5T200-840v80Zm80 640v-80h80v80h-80Zm0-640v-80h80v80h-80Zm160 640v-80h80v80h-80Zm0-640v-80h80v80h-80Zm160 640v-80h80v80h-80Zm0-640v-80h80v80h-80Zm160 640v-80h80q0 33-23.5 56.5T760-120Zm0-160v-80h80v80h-80Zm0-160v-80h80v80h-80Zm0-160v-80h80v80h-80Zm0-160v-80q33 0 56.5 23.5T840-760h-80Z"),superscriptic:u("M760-600v-80q0-17 11.5-28.5T800-720h80v-40H760v-40h120q17 0 28.5 11.5T920-760v40q0 17-11.5 28.5T880-680h-80v40h120v40H760ZM235-160l185-291-172-269h106l124 200h4l123-200h107L539-451l186 291H618L482-377h-4L342-160H235Z"),subscriptic:u("M760-160v-80q0-17 11.5-28.5T800-280h80v-40H760v-40h120q17 0 28.5 11.5T920-320v40q0 17-11.5 28.5T880-240h-80v40h120v40H760Zm-525-80 185-291-172-269h106l124 200h4l123-200h107L539-531l186 291H618L482-457h-4L342-240H235Z"),newic:w('<path d="M6 3h8l5 5v13H6z"/><path d="M14 3v5h5"/>'),helpic:w('<circle cx="12" cy="12" r="8.5"/><path d="M9.6 9.6a2.5 2.5 0 1 1 3.4 2.6c-.8.3-1 .9-1 1.8"/><circle class="f" cx="12" cy="16.6" r="1.1"/>'),wcic:w('<path d="M4 6h16M4 10h16M4 14h9"/><path d="M15 17.5l2 2 3.6-4"/>'),rowbefore:u("M200-160h560v-240H200v240Zm640 80H120v-720h160v80h-80v240h560v-240h-80v-80h160v720ZM480-480Zm0 80v-80 80Zm0 0Zm-40-240v-80h-80v-80h80v-80h80v80h80v80h-80v80h-80Z"),rowafter:u("M200-560h560v-240H200v240Zm-80 400v-720h720v720H680v-80h80v-240H200v240h80v80H120Zm360-320Zm0-80v80-80Zm0 0ZM440-80v-80h-80v-80h80v-80h80v80h80v80h-80v80h-80Z"),rowdelete:u("M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200ZM200-200h560v-560H200ZM200-400v-160h560v160H200ZM330-580l250 250 50-50-250-250ZM330-380l250-250 50 50-250 250Z"),colbefore:u("M800-200v-560H560v560h240Zm-640 80v-160h80v80h240v-560H240v80h-80v-160h720v720H160Zm320-360Zm80 0h-80 80Zm0 0ZM160-360v-80H80v-80h80v-80h80v80h80v80h-80v80h-80Z"),colafter:u("M160-760v560h240v-560H160ZM80-120v-720h720v160h-80v-80H480v560h240v-80h80v160H80Zm400-360Zm-80 0h80-80Zm0 0Zm320 120v-80h-80v-80h80v-80h80v80h80v80h-80v80h-80Z"),coldelete:u("M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200ZM200-200h560v-560H200ZM400-200v-560h160v560H400ZM330-580l250 250 50-50-250-250ZM330-380l250-250 50 50-250 250Z"),tabledelete:w('<rect x="4" y="5" width="16" height="14" rx="1.5"/><path d="M4 10h16M4 14.5h16M9.5 5v14M14.5 5v14"/><path d="M6.5 6.5l11 11M17.5 6.5l-11 11" stroke-width="2.1"/>'),quote:u("m228-240 92-160q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 23-5.5 42.5T458-480L320-240h-92Zm360 0 92-160q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 23-5.5 42.5T818-480L680-240h-92ZM362.5-517.5Q380-535 380-560t-17.5-42.5Q345-620 320-620t-42.5 17.5Q260-585 260-560t17.5 42.5Q295-500 320-500t42.5-17.5Zm360 0Q740-535 740-560t-17.5-42.5Q705-620 680-620t-42.5 17.5Q620-585 620-560t17.5 42.5Q655-500 680-500t42.5-17.5ZM680-560Zm-360 0Z"),link:u("M440-280H280q-83 0-141.5-58.5T80-480q0-83 58.5-141.5T280-680h160v80H280q-50 0-85 35t-35 85q0 50 35 85t85 35h160v80ZM320-440v-80h320v80H320Zm200 160v-80h160q50 0 85-35t35-85q0-50-35-85t-85-35H520v-80h160q83 0 141.5 58.5T880-480q0 83-58.5 141.5T680-280H520Z"),unlink:w('<path d="M13.5 6.5l1.7-1.7a4 4 0 0 1 5.6 5.6L19 12.2"/><path d="M10.5 17.5l-1.7 1.7a4 4 0 0 1-5.6-5.6L5 11.8"/><path d="M4 4l16 16"/>'),lineheight:u("M240-160 80-320l56-56 64 62v-332l-64 62-56-56 160-160 160 160-56 56-64-62v332l64-62 56 56-160 160Zm240-40v-80h400v80H480Zm0-240v-80h400v80H480Zm0-240v-80h400v80H480Z"),wordspacing:u("M320-80 160-240l160-160 57 56-64 64h334l-63-64 56-56 160 160L640-80l-57-56 64-64H313l63 64-56 56ZM200-480v-400h80v400h-80Zm240 0v-400h80v400h-80Zm240 0v-400h80v400h-80Z"),caseic:u("m131-252 165-440h79l165 440h-76l-39-112H247l-40 112h-76Zm139-176h131l-64-182h-4l-63 182Zm395 186q-51 0-81-27.5T554-342q0-44 34.5-72.5T677-443q23 0 45 4t38 11v-12q0-29-20.5-47T685-505q-23 0-42 9.5T610-468l-47-35q24-29 54.5-43t68.5-14q69 0 103 32.5t34 97.5v178h-63v-37h-4q-14 23-38 35t-53 12Zm12-54q35 0 59.5-24t24.5-56q-14-8-33.5-12.5T689-393q-32 0-50 14t-18 37q0 20 16 33t40 13Z"),uppercaseic:u("M660-240v-248l-64 64-56-56 160-160 160 160-56 56-64-64v248h-80Zm-540 0 165-440h79l165 440h-76l-39-113H236l-40 113h-76Zm139-177h131l-65-182h-4l-62 182Z"),lowercaseic:u("M300-240q-51 0-81-27.5T189-340q0-44 34.5-72.5T312-441q23 0 45 4t38 11v-12q0-29-20.5-47T320-503q-23 0-42 9.5T245-466l-47-35q24-29 54.5-43t68.5-14q69 0 103 32.5t34 97.5v178h-63v-37h-4q-14 23-38 35t-53 12Zm12-54q35 0 59.5-24t24.5-56q-14-8-33.5-12.5T324-391q-32 0-50 14t-18 37q0 20 16 33t40 13Zm388 54L540-400l56-56 64 64v-248h80v248l64-64 56 56-160 160Z"),capitalizeic:u("M344-250v-366H224v-64h308v64H412v366h-68Zm344 10q-44 0-69-25.5T594-336v-162h-54v-58h54v-87h66v87h74v58h-74v148q0 23 10.5 36t28.5 13q9 0 18.5-3.5T736-314v65q-10 5-22 7t-26 2Z"),plus:w('<path d="M12 5.5v13M5.5 12h13"/>'),minus:w('<path d="M5.5 12h13"/>'),fontsizeup:u("m40-200 210-560h100l210 560h-96l-51-143H187l-51 143H40Zm176-224h168l-82-232h-4l-82 232Zm504 104v-120H600v-80h120v-120h80v120h120v80H800v120h-80Z"),fontsizedown:u("m40-200 210-560h100l210 560h-96l-51-143H187l-51 143H40Zm176-224h168l-82-232h-4l-82 232Zm384-16v-80h320v80H600Z"),historyic:u("M480-120q-138 0-240.5-91.5T122-440h82q14 104 92.5 172T480-200q117 0 198.5-81.5T760-480q0-117-81.5-198.5T480-760q-69 0-129 32t-101 88h110v80H120v-240h80v94q51-64 124.5-99T480-840q75 0 140.5 28.5t114 77q48.5 48.5 77 114T840-480q0 75-28.5 140.5t-77 114q-48.5 48.5-114 77T480-120Zm112-192L440-464v-216h80v184l128 128-56 56Z"),wordic:w('<path d="M6 3h8l5 5v13H6z"/><path d="M14 3v5h5"/><text x="8" y="17" font-size="8.5" stroke="none" fill="#222f3e" font-family="Arial" font-weight="bold">W</text>'),draftic:u("M480-160q-134 0-227-93t-93-227q0-134 93-227t227-93q69 0 132 28.5T720-690v-110h80v280H520v-80h168q-32-56-87.5-88T480-720q-100 0-170 70t-70 170q0 100 70 170t170 70q77 0 139-44t87-116h84q-28 106-114 173t-196 67Z"),trash:w('<path d="M5 7h14M10 7V5h4v2M7.5 7l1 13h7l1-13"/>'),rotateleft:w('<polyline points="1 4 1 10 7 10"/><path d="M3.51 15a9 9 0 1 0 2.13-9.36L1 10"/>'),rotateright:w('<polyline points="23 4 23 10 17 10"/><path d="M20.49 15a9 9 0 1 1-2.12-9.36L23 10"/>'),fliphorizontal:w('<path d="M12 3v18"/><path d="M7 8l-4 4 4 4"/><path d="M17 8l4 4-4 4"/>'),flipvertical:w('<path d="M3 12h18"/><path d="M8 7l4-4 4 4"/><path d="M8 17l4 4 4-4"/>'),check:w('<path d="M5 12.5 9.5 17 19 7"/>'),palette:w('<path d="M12 3a9 9 0 1 0 0 18h1.2a2 2 0 0 0 2-2 2 2 0 0 1 2-2H18a3 3 0 0 0 3-3c0-6.1-4.5-11-9-11z"/><circle class="f" cx="7.8" cy="10.2" r="1.3"/><circle class="f" cx="11.6" cy="7.3" r="1.3"/><circle class="f" cx="15.8" cy="9.6" r="1.3"/><circle class="f" cx="9" cy="14.8" r="1.3"/>'),ul_circle:u("M280-600v-80h560v80H280Zm0 160v-80h560v80H280Zm0 160v-80h560v80H280ZM160-600q-17 0-28.5-11.5T120-640q0-17 11.5-28.5T160-680q17 0 28.5 11.5T200-640q0 17-11.5 28.5T160-600Zm0 160q-17 0-28.5-11.5T120-480q0-17 11.5-28.5T160-520q17 0 28.5 11.5T200-480q0 17-11.5 28.5T160-440Zm0 160q-17 0-28.5-11.5T120-320q0-17 11.5-28.5T160-360q17 0 28.5 11.5T200-320q0 17-11.5 28.5T160-280Z"),ul_square:u("M80-160v-160h160v160H80Zm240 0v-160h560v160H320ZM80-400v-160h160v160H80Zm240 0v-160h560v160H320ZM80-640v-160h160v160H80Zm240 0v-160h560v160H320Z"),ol_alpha:k(["a","b","c"]),ol_roman:k(["i","ii","iii"],6.5),ol_alphau:k(["A","B","C"]),ol_romanu:k(["I","II","III"],6.5)},st=p=>`<span class="txt">${p}</span>`,lt=new Set(["p","div","span","br","hr","a","b","strong","i","em","u","s","strike","sub","sup","h1","h2","h3","h4","h5","h6","blockquote","pre","code","ul","ol","li","table","thead","tbody","tfoot","tr","td","th","caption","colgroup","col","img","figure","figcaption","mark"]),nt=new Set(["text-align","direction","unicode-bidi","font-weight","font-style","text-decoration","text-decoration-line","color","background-color","background","background-image","background-position","background-repeat","background-size","font-size","font-family","line-height","letter-spacing","vertical-align","text-indent","margin","margin-top","margin-bottom","margin-left","margin-right","margin-inline-start","margin-inline-end","padding","padding-top","padding-bottom","padding-left","padding-right","width","height","min-width","max-width","min-height","max-height","border","border-top","border-right","border-bottom","border-left","border-color","border-style","border-width","border-radius","border-collapse","border-spacing","table-layout","float","display","box-sizing","list-style-type","white-space"]),P={"*":["dir","lang","colspan","rowspan"],a:["href","target","rel","title"],img:["src","alt","width","height","title"],col:["span","width"],td:["width","valign"],th:["width","valign"],table:["width","cellpadding","cellspacing"]};function N(p){const t={},e=p.getAttribute&&p.getAttribute("style");return e&&e.split(";").forEach(i=>{const s=i.indexOf(":");s<1||(t[i.slice(0,s).trim().toLowerCase()]=i.slice(s+1).trim())}),t}function ot(p){return p.replace(/<!--\[if !supportLists\]-->([\s\S]*?)<!--\[endif\]-->/gi,"$1").replace(/<!--\[if !supportLists\]>([\s\S]*?)<!\[endif\]-->/gi,"$1").replace(/<!\[if !supportLists\]>([\s\S]*?)<!\[endif\]>/gi,"$1").replace(/<!--\[if [\s\S]*?<!\[endif\]-->/gi,"").replace(/<!--[\s\S]*?-->/g,"").replace(/<(script|style|xml|title)[\s\S]*?<\/\1>/gi,"").replace(/<\/?(meta|link)[^>]*>/gi,"").replace(/<\?xml[\s\S]*?\?>/gi,"").replace(/<\/?(o|v|w|m|st1):[^>]*>/gi,"")}function rt(p){return/^[0-9]+[\.\)،]/.test(p)?{ordered:!0}:/^[٠-٩۰-۹]+/.test(p)?{ordered:!0,style:"arabic-indic"}:/^[ivxlc]{2,}[\.\)]/.test(p)?{ordered:!0,style:"lower-roman"}:/^[IVXLC]{2,}[\.\)]/.test(p)?{ordered:!0,style:"upper-roman"}:/^[a-z][\.\)]/.test(p)?{ordered:!0,style:"lower-alpha"}:/^[A-Z][\.\)]/.test(p)?{ordered:!0,style:"upper-alpha"}:/^[ء-ي][\.\)،-]/.test(p)?{ordered:!0,style:"arabic-indic"}:{ordered:!1}}function at(p){const t=s=>{const l=(s.getAttribute("style")||"")+" "+(s.className||"");return/mso-list\s*:(?!\s*ignore)/i.test(l)||/MsoListParagraph/i.test(l)},e=[];let i=null;Array.from(p.body.querySelectorAll("p")).forEach(s=>{if(!t(s)){i=null;return}const l=s.previousElementSibling;i&&l&&i[i.length-1]===l?i.push(s):(i=[s],e.push(i))}),e.forEach(s=>{const l=[],n=s[0];s.forEach(o=>{var T,M,S;const c=+(((T=(o.getAttribute("style")||"").match(/level(\d+)/i))==null?void 0:T[1])||1),h=Array.from(o.querySelectorAll("span")).find(x=>/mso-list\s*:\s*ignore/i.test(x.getAttribute("style")||"")),d=h?((M=h.textContent)==null?void 0:M.trim())||"":(((S=o.textContent)==null?void 0:S.trim().match(/^\S{1,4}/))||[""])[0],{ordered:m,style:g}=rt(d);for(h&&h.remove();l.length&&l[l.length-1].level>c;)l.pop();if(!l.length||l[l.length-1].level<c){const x=p.createElement(m?"ol":"ul");if(m&&g&&(x.style.listStyleType=g),l.length){const E=l[l.length-1].list;(E.lastElementChild||E).appendChild(x)}else n.parentNode.insertBefore(x,n);l.push({list:x,level:c})}const f=p.createElement("li"),b=N(o),v=["text-align","direction","unicode-bidi","color","font-size","font-family","background-color"].filter(x=>b[x]).map(x=>x+":"+b[x]).join(";");for(v&&f.setAttribute("style",v),o.getAttribute("dir")&&f.setAttribute("dir",o.getAttribute("dir"));o.firstChild;)f.appendChild(o.firstChild);l[l.length-1].list.appendChild(f),o.remove()})})}function ct(p){p.querySelectorAll('b[id^="docs-internal-guid"]').forEach(t=>{for(;t.firstChild;)t.parentNode.insertBefore(t.firstChild,t);t.remove()})}function ht(p){p.querySelectorAll("table").forEach(t=>{const e=t;N(e)["border-collapse"]||(e.style.borderCollapse="collapse")}),p.querySelectorAll("[align]").forEach(t=>{const e=t,i=e.getAttribute("align").toLowerCase();e.tagName.toLowerCase()==="table"?i==="center"?(e.style.marginLeft=e.style.marginLeft||"auto",e.style.marginRight=e.style.marginRight||"auto"):i==="right"?e.style.marginLeft=e.style.marginLeft||"auto":i==="left"&&(e.style.marginRight=e.style.marginRight||"auto"):["left","right","center","justify"].includes(i)&&(e.style.textAlign=e.style.textAlign||i,Array.from(e.children).forEach(s=>{if(s.tagName.toLowerCase()!=="table")return;const l=s;i==="center"?(l.style.marginLeft=l.style.marginLeft||"auto",l.style.marginRight=l.style.marginRight||"auto"):i==="right"?l.style.marginLeft=l.style.marginLeft||"auto":i==="left"&&(l.style.marginRight=l.style.marginRight||"auto")})),e.removeAttribute("align")}),p.querySelectorAll("center table").forEach(t=>{const e=t;e.style.marginLeft=e.style.marginLeft||"auto",e.style.marginRight=e.style.marginRight||"auto"}),p.querySelectorAll("[bgcolor]").forEach(t=>{const e=t;e.style.backgroundColor=e.style.backgroundColor||e.getAttribute("bgcolor"),e.removeAttribute("bgcolor")})}function I(p,t){Array.from(p.childNodes).forEach(e=>{if(e.nodeType===Node.COMMENT_NODE){e.remove();return}if(e.nodeType!==Node.ELEMENT_NODE)return;const i=e,s=i.tagName.toLowerCase();if(!lt.has(s)){if(s==="font"){const r=t.createElement("span");i.getAttribute("style")&&r.setAttribute("style",i.getAttribute("style")),i.getAttribute("color")&&(r.style.color=i.getAttribute("color")),i.getAttribute("face")&&(r.style.fontFamily=i.getAttribute("face"));const c=i.getAttribute("size");if(c&&!r.style.fontSize){const h={1:"8pt",2:"10pt",3:"12pt",4:"14pt",5:"18pt",6:"24pt",7:"36pt"};h[c]&&(r.style.fontSize=h[c])}for(;i.firstChild;)r.appendChild(i.firstChild);i.replaceWith(r),I(r,t);return}for(I(i,t);i.firstChild;)i.parentNode.insertBefore(i.firstChild,i);i.remove();return}const l=new Set([...P["*"]||[],...P[s]||[]]);if(Array.from(i.attributes).forEach(r=>{const c=r.name.toLowerCase();c!=="style"&&!l.has(c)&&i.removeAttribute(r.name)}),s==="a"){const r=i.getAttribute("href")||"";/^(https?:|mailto:|tel:|#)/i.test(r)||i.removeAttribute("href")}if(s==="img"){const r=i.getAttribute("src")||"";if(!/^(https?:|data:image\/|blob:)/i.test(r)){const c=t.createElement("span");c.textContent="[local image — paste it separately]",c.setAttribute("style","color:#a33;font-style:italic;font-size:12px"),i.replaceWith(c);return}}const n=N(i),o=[];for(const[r,c]of Object.entries(n))nt.has(r)&&(/expression|javascript|url\s*\(\s*['"]?\s*file:/i.test(c)||r==="font-weight"&&/^(400|normal)$/i.test(c)||r==="font-style"&&/^normal$/i.test(c)||r==="text-decoration"&&/^none$/i.test(c)||o.push(r+":"+c));if(o.length?i.setAttribute("style",o.join(";")):i.removeAttribute("style"),i.removeAttribute("class"),I(i,t),s==="span"&&!i.attributes.length){for(;i.firstChild;)i.parentNode.insertBefore(i.firstChild,i);i.remove()}})}function dt(p){const t=[],e=/<style[^>]*>([\s\S]*?)<\/style>/gi;let i;for(;i=e.exec(p);){let s=i[1].replace(/<!--|-->/g,"").replace(/\/\*[\s\S]*?\*\//g,"");s=s.replace(/@media[^{]*\{(?:[^{}]*\{[^{}]*\})*[^{}]*\}/gi,""),s=s.replace(/@[\w-]+[^{]*\{[^{}]*\}/g,"");let l;const n=/([^{}]+)\{([^}]*)\}/g;for(;l=n.exec(s);){const o=l[2].split(";").map(r=>{const c=r.indexOf(":");return c<1?null:[r.slice(0,c).trim().toLowerCase(),r.slice(c+1).trim()]}).filter(r=>!!r&&!!r[1]);o.length&&l[1].split(",").map(r=>r.trim()).filter(r=>r&&!r.startsWith("@")).forEach(r=>t.push({sel:r,decls:o}))}}return t}function pt(p,t){if(!t.length)return;const e=new Map;t.forEach(({sel:i,decls:s})=>{let l;try{l=p.querySelectorAll(i)}catch{return}l.forEach(n=>{let o=e.get(n);o||(o={},e.set(n,o)),s.forEach(([r,c])=>{o[r]=c})})}),e.forEach((i,s)=>{const l=N(s),n=s.hasAttribute("dir"),o=s.hasAttribute("align"),r=Object.entries(i).filter(([d])=>!(d in l||(d==="direction"||d==="unicode-bidi")&&n||d==="text-align"&&(o||n)||(d==="background"||d==="background-color")&&s.hasAttribute("bgcolor")));if(!r.length)return;const c=r.map(([d,m])=>d+":"+m).join(";"),h=s.getAttribute("style");s.setAttribute("style",h?c+";"+h:c)})}function _(p){return p.replace(/[ﭐ-﷿ﹰ-ﻼ]+/g,t=>t.normalize("NFKC"))}function mt(p){const t=p.createTreeWalker(p.body,NodeFilter.SHOW_TEXT,null);let e;for(;e=t.nextNode();)/[ﭐ-﷿ﹰ-ﻼ]/.test(e.nodeValue||"")&&(e.nodeValue=_(e.nodeValue||""))}function Q(p,t="ltr"){const e=dt(p),i=new DOMParser().parseFromString(ot(p),"text/html");pt(i,e),/class="?Mso|mso-|urn:schemas-microsoft-com/i.test(i.body.innerHTML)&&at(i),ct(i),ht(i),I(i.body,i),mt(i);const s=l=>{var n;return l&&l.tagName==="P"&&!((n=l.textContent)!=null&&n.trim())&&!l.querySelector("img,table")};for(;s(i.body.firstElementChild);)i.body.firstElementChild.remove();for(;s(i.body.lastElementChild);)i.body.lastElementChild.remove();return i.body.innerHTML.trim()}function G(p){const t=_(p).replace(/\r/g,""),e=i=>i.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");return/\n/.test(t)?t.split(/\n{2,}/).map(i=>`<p dir="auto">${e(i).replace(/\n/g,"<br>")||"<br>"}</p>`).join(""):e(t)}function ut(p){const t=new DataView(p),e=new Map;let i=-1;for(let o=p.byteLength-22;o>=Math.max(0,p.byteLength-22-65535);o--)if(t.getUint32(o,!0)===101010256){i=o;break}if(i<0)throw new Error("EOCD not found");const s=t.getUint16(i+10,!0);let l=t.getUint32(i+16,!0);const n=new TextDecoder;for(let o=0;o<s&&t.getUint32(l,!0)===33639248;o++){const r=t.getUint16(l+10,!0),c=t.getUint32(l+20,!0),h=t.getUint16(l+28,!0),d=t.getUint16(l+30,!0),m=t.getUint16(l+32,!0),g=t.getUint32(l+42,!0),f=n.decode(new Uint8Array(p,l+46,h));e.set(f,{name:f,method:r,compSize:c,localOffset:g}),l+=46+h+d+m}return e}async function O(p,t){const e=new DataView(p,t.localOffset);if(e.getUint32(0,!0)!==67324752)throw new Error("Bad local header");const i=e.getUint16(26,!0),s=e.getUint16(28,!0),l=t.localOffset+30+i+s,n=new Uint8Array(p.slice(l,l+t.compSize));if(t.method===0)return n;if(t.method!==8)throw new Error("Unsupported compression method "+t.method);const o=new Blob([n]).stream().pipeThrough(new DecompressionStream("deflate-raw"));return new Uint8Array(await new Response(o).arrayBuffer())}const F=p=>p.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""),A=(p,t)=>Array.from(p.children).filter(e=>e.localName===t),C=(p,...t)=>{let e=p;for(const i of t){if(!e)return null;e=Array.from(e.children).find(s=>s.localName===i)||null}return e},y=(p,t="val")=>{if(!p)return"";for(const e of Array.from(p.attributes))if(e.localName===t)return e.value;return""},q=(p,t)=>{const e=p?C(p,t):null;if(!e)return!1;const i=y(e);return i!=="false"&&i!=="0"},$={yellow:"#FFFF00",green:"#00FF00",cyan:"#00FFFF",magenta:"#FF00FF",blue:"#0000FF",red:"#FF0000",darkBlue:"#00008B",darkCyan:"#008B8B",darkGreen:"#006400",darkMagenta:"#8B008B",darkRed:"#8B0000",darkYellow:"#808000",darkGray:"#A9A9A9",lightGray:"#D3D3D3",black:"#000000",white:"#FFFFFF"},gt={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",bmp:"image/bmp",webp:"image/webp"};function ft(p){let t="";for(let e=0;e<p.length;e+=32768)t+=String.fromCharCode(...p.subarray(e,e+32768));return btoa(t)}class bt{constructor(t,e,i){this.rels=t,this.images=e,this.numFmt=i}convertBody(t){let e="",i=[];const s=l=>{for(;i.length>l;)e+=`</${i.pop()}>`};for(const l of Array.from(t.children))if(l.localName==="p"){const n=this.paraList(l);if(n){const o=n.ilvl+1;for(;i.length>o;)e+=`</${i.pop()}>`;for(i.length===o&&i[o-1]!==n.type&&(e+=`</${i.pop()}>`);i.length<o;)e+=`<${n.type}>`,i.push(n.type);e+=`<li>${this.runsOf(l)||"<br>"}</li>`;continue}s(0),e+=this.convertPara(l)}else l.localName==="tbl"?(s(0),e+=this.convertTable(l)):l.localName;return s(0),e||"<p><br></p>"}paraList(t){const e=C(t,"pPr","numPr");if(!e)return null;const i=y(C(e,"numId"));if(!i||i==="0")return null;const s=parseInt(y(C(e,"ilvl"))||"0",10)||0;return{type:this.numFmt.get(i)||"ul",ilvl:Math.min(s,8)}}convertPara(t){const e=C(t,"pPr"),i=y(C(t,"pPr","pStyle"));let s="p";const l=/^Heading([1-6])$/i.exec(i);l?s="h"+l[1]:/^Title$/i.test(i)&&(s="h1");const n=[],o=y(C(t,"pPr","jc"));o==="center"?n.push("text-align:center"):o==="right"||o==="end"?n.push("text-align:right"):(o==="both"||o==="distribute")&&n.push("text-align:justify"),e&&C(e,"bidi")&&n.push("direction:rtl");const r=this.runsOf(t),c=n.length?` style="${n.join(";")}"`:"";return`<${s}${c}>${r||"<br>"}</${s}>`}runsOf(t){let e="";for(const i of Array.from(t.children))if(i.localName==="r")e+=this.convertRun(i);else if(i.localName==="hyperlink"){let s=this.rels.get(y(i,"id"))||"";const l=y(i,"anchor");!s&&l&&(s="#"+l);const n=this.runsOf(i);e+=s?`<a href="${F(s)}">${n}</a>`:n}else(i.localName==="smartTag"||i.localName==="ins")&&(e+=this.runsOf(i));return e}convertRun(t){const e=C(t,"rPr");let i="";for(const d of Array.from(t.children))d.localName==="t"?i+=F(d.textContent||""):d.localName==="br"||d.localName==="cr"?i+="<br>":d.localName==="tab"?i+=" ":(d.localName==="drawing"||d.localName==="pict"||d.localName==="object")&&(i+=this.convertImage(d));if(!i)return"";const s=[],l=y(e?C(e,"color"):null);l&&l!=="auto"&&s.push("color:#"+l);const n=y(e?C(e,"highlight"):null);n&&$[n]&&s.push("background-color:"+$[n]);const o=parseFloat(y(e?C(e,"sz"):null));o&&s.push("font-size:"+Math.round(o/2*(4/3))+"px");const r=e?C(e,"rFonts"):null,c=y(r,"ascii")||y(r,"cs");c&&s.push(`font-family:'${c}'`),s.length&&(i=`<span style="${s.join(";")}">${i}</span>`),q(e,"b")&&(i=`<strong>${i}</strong>`),q(e,"i")&&(i=`<em>${i}</em>`),q(e,"u")&&y(C(e,"u"))!=="none"&&(i=`<u>${i}</u>`),q(e,"strike")&&(i=`<s>${i}</s>`);const h=y(e?C(e,"vertAlign"):null);return h==="superscript"?i=`<sup>${i}</sup>`:h==="subscript"&&(i=`<sub>${i}</sub>`),i}convertImage(t){let e="",i=0;const s=o=>{if(o.localName==="blip"&&(e=e||y(o,"embed")||y(o,"link")),o.localName==="imagedata"&&(e=e||y(o,"id")),o.localName==="extent"){const r=parseFloat(o.getAttribute("cx")||"0");r&&(i=Math.round(r/9525))}for(const r of Array.from(o.children))s(r)};if(s(t),!e)return"";const l=this.images.get(e);if(!l)return"";const n=i?` width="${i}"`:"";return`<img src="${l}" alt=""${n}>`}convertTable(t){let e='<table style="border-collapse:collapse;width:100%"><tbody>';for(const i of A(t,"tr")){e+="<tr>";for(const s of A(i,"tc")){const l=parseInt(y(C(s,"tcPr","gridSpan"))||"1",10)||1,n=l>1?` colspan="${l}"`:"";let o="";for(const r of Array.from(s.children))r.localName==="p"?o+=this.convertPara(r):r.localName==="tbl"&&(o+=this.convertTable(r));e+=`<td style="border:1px solid #b9c2cc"${n}>${o||"<br>"}</td>`}e+="</tr>"}return e+"</tbody></table>"}}async function vt(p){const t=p instanceof ArrayBuffer?p:await p.arrayBuffer(),e=ut(t),i=new TextDecoder,s=async f=>{const b=e.get(f);return b?new DOMParser().parseFromString(i.decode(await O(t,b)),"application/xml"):null},l=await s("word/document.xml"),n=l==null?void 0:l.getElementsByTagName("*");let o=null;if(n){for(const f of Array.from(n))if(f.localName==="body"){o=f;break}}if(!o)throw new Error("word/document.xml missing or invalid");const r=new Map,c=new Map,h=await s("word/_rels/document.xml.rels");if(h)for(const f of Array.from(h.getElementsByTagName("*"))){if(f.localName!=="Relationship")continue;const b=f.getAttribute("Id")||"",v=f.getAttribute("Target")||"",T=f.getAttribute("Type")||"";/hyperlink/i.test(T)?r.set(b,v):/image/i.test(T)&&c.set(b,v)}const d=new Map;for(const[f,b]of c){const v=b.startsWith("/")?b.slice(1):"word/"+b.replace(/^\.\//,""),T=e.get(v);if(!T)continue;const M=(v.split(".").pop()||"").toLowerCase(),S=gt[M];if(S)try{d.set(f,`data:${S};base64,${ft(await O(t,T))}`)}catch{}}const m=new Map,g=await s("word/numbering.xml");if(g){const f=new Map,b=Array.from(g.getElementsByTagName("*"));for(const v of b){if(v.localName!=="abstractNum")continue;const T=y(v,"abstractNumId"),M=A(v,"lvl").find(x=>y(x,"ilvl")==="0")||A(v,"lvl")[0],S=M?y(C(M,"numFmt")):"";f.set(T,S==="bullet"?"ul":"ol")}for(const v of b){if(v.localName!=="num")continue;const T=y(v,"numId"),M=y(C(v,"abstractNumId"));m.set(T,f.get(M)||"ul")}}return new bt(r,d,m).convertBody(o)}const yt=["nw","ne","sw","se"],Z=class Z{constructor(t){this.lang="en",this.contentClass="fable-content-"+Z.instanceCounter++,this.contentStyleEl=null,this.savedRange=null,this.foreColor="#000000",this.backColor="#FACC15",this.openPop=null,this.openSubEl=null,this.popAnchor=null,this.dlgOvl=null,this.tblActive=null,this.tblCorner=null,this.tblColBars=[],this.tblCtx=null,this.tblCellMark=null,this.tblOpMark=null,this.tblOpMarkKind=null,this.imgActive=null,this.imgHandles=[],this.imgCtx=null,this.imgHideTimer=null,this.phActive=null,this.phCtx=null,this.phUploadTarget=null,this.selCtx=null,this.revisions=[],this.revTimer=null,this.draftTimer=null,this.draftStorageKey="",this.listeners=[],this.isDestroyed=!1,this.options={target:t.target,language:t.language||"en",height:t.height??302,initialContent:t.initialContent??"<p><br></p>",onChange:t.onChange||(()=>{}),onReady:t.onReady||(()=>{}),menubar:t.menubar??!0,toolbar:t.toolbar??!0,statusbar:t.statusbar??!0,readonly:t.readonly??!1,draftKey:t.draftKey??(typeof location<"u"?location.pathname:"default"),fontFamilyFormats:t.fontFamilyFormats??W,imageFileTypes:t.imageFileTypes??["image/jpeg","image/jpg","image/png","image/gif","image/bmp","image/webp"]},this.imageUploadHandler=t.imageUploadHandler,this.onImageUploadError=t.onImageUploadError,this.contentStyle=t.contentStyle,this.lang=this.options.language,this.draftStorageKey="tmclone-draft:"+this.options.draftKey,this.initDOM(),this.bindEvents(),this.initUI(),this.recordRevision(),this.options.onReady(this)}t(t){const e=L(this.lang)[t];return typeof e=="string"?e:e.join(",")}tArr(t){return L(this.lang)[t]}dir(){return L(this.lang).dir}initDOM(){const t=this.options.target;t.innerHTML="",t.classList.add("tox-root"),this.shell=document.createElement("div"),this.shell.className="tox",this.menubar=document.createElement("div"),this.menubar.className="mnb",this.toolbar=document.createElement("div"),this.toolbar.className="tbr",this.ed=document.createElement("div"),this.ed.className="earea "+this.contentClass,this.ed.setAttribute("contenteditable",(!this.options.readonly).toString()),this.ed.spellcheck=!0,this.ed.innerHTML=this.options.initialContent,this.ed.style.height=this.options.height+"px",this.statusbar=document.createElement("div"),this.statusbar.className="sbar",this.statusbar.innerHTML=`
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const U={en:{dir:"ltr",file:"File",edit:"Edit",view:"View",insert:"Insert",format:"Format",tools:"Tools",table:"Table",help:"Help",newdoc:"New document",preview:"Preview",print:"Print…",undo:"Undo",redo:"Redo",cut:"Cut",copy:"Copy",paste:"Paste",selectall:"Select all",fullscreen:"Fullscreen",sourcecode:"Source code",wordcount:"Word count",image:"Image…",inserttable:"Table",hr:"Horizontal line",charmap:"Special character…",datetime:"Date/time",pagebreak:"Page break",nbsp:"Nonbreaking space",bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",superscript:"Superscript",subscript:"Subscript",clearformat:"Clear formatting",rowabove:"Insert row before",rowbelow:"Insert row after",delrow:"Delete row",colbefore:"Insert column before",colafter:"Insert column after",delcol:"Delete column",deltable:"Delete table",ltr:"Left to right",rtl:"Right to left",alignleft:"Align left",aligncenter:"Align center",alignright:"Align right",alignjustify:"Justify",numlist:"Numbered list",bullist:"Bullet list",forecolor:"Text color",backcolor:"Background color",removeformat:"Clear formatting",outdent:"Decrease indent",indent:"Increase indent",fontfamily:"Font family",fontsize:"Font size",blocks:"Blocks",quickimage:"Insert image",quicktable:"Insert table",more:"More…",para:"Paragraph",heading:"Heading",pre:"Preformatted",removecolor:"Remove color",currentcolor:"Current color",statushelp:"Press Alt+0 for help",words:"words",helpttl:"Help",shortcuts:"Handy shortcuts",close:"Close",save:"Save",cancel:"Cancel",srcttl:"Source code",wcttl:"Word count",wcwords:"Words",wcchars:"Characters",pastehint:"Use Ctrl+V / ⌘V to paste",liststyles_ol:["Default","Lower alpha","Lower roman","Upper alpha","Upper roman"],liststyles_ul:["Default","Circle","Square"],previewttl:"Preview",tablepropsttl:"Table properties",tblwidth:"Width",tblcellspacing:"Cell spacing",tblcellpadding:"Cell padding",tblborder:"Border width",tblalign:"Alignment",alignnone:"None",quote:"Blockquote",link:"Link…",linkttl:"Insert/edit link",linkurl:"URL",unlink:"Remove link",lineheight:"Line height",wordspacing:"Word spacing",changecase:"Change case",lowercase:"Lowercase",uppercase:"Uppercase",capitalize:"Capitalize Each Word",customcolor:"Custom color…",normal:"Normal",revhistory:"Revision history",revempty:"No revisions yet",restore:"Restore",currentver:"Current version",importword:"Import from Word…",importfail:"Could not import this file. Please choose a valid .docx document.",restoredraft:"Restore last draft",draftempty:"No saved draft found",deleteimg:"Delete image",rotateleft:"Rotate left",rotateright:"Rotate right",fliphorizontal:"Flip horizontal",flipvertical:"Flip vertical",cell:"Cell",row:"Row",column:"Column",cellprops:"Cell properties…",rowprops:"Row properties…",colprops:"Column properties…",tblheight:"Height",valign:"Vertical align",valigntop:"Top",valignmiddle:"Middle",valignbottom:"Bottom",fill:"Fill",nocell:"Click inside a table cell first",uploadimg:"Upload from computer",imagelink:"Insert from URL",imageurlph:"Paste image URL…",insertimg:"Insert",dropimage:"Drop image here",uploading:"Uploading…",uploadfailed:"Upload failed — click to retry",template:"Templates",tplimgleft:"Image left, text right",tplimgright:"Image right, text left",tplimgtop:"Image top, text below",tplimgcenter:"Text top, image center",deltemplate:"Delete template"},ar:{dir:"rtl",file:"ملف",edit:"تحرير",view:"عرض",insert:"إدراج",format:"التنسيق",tools:"الأدوات",table:"جدول",help:"تعليمات",newdoc:"مستند جديد",preview:"معاينة",print:"طباعة…",undo:"تراجع",redo:"إعادة",cut:"قص",copy:"نسخ",paste:"لصق",selectall:"تحديد الكل",fullscreen:"ملء الشاشة",sourcecode:"الكود المصدري",wordcount:"عدد الكلمات",image:"صورة…",inserttable:"جدول",hr:"خط أفقي",charmap:"رمز خاص…",datetime:"التاريخ/الوقت",pagebreak:"فاصل الصفحة",nbsp:"مسافة غير فاصلة",bold:"غامق",italic:"مائل",underline:"تسطير",strikethrough:"يتوسطه خط",superscript:"نص مرتفع",subscript:"نص منخفض",clearformat:"مسح التنسيق",rowabove:"إدراج صف قبل",rowbelow:"إدراج صف بعد",delrow:"حذف الصف",colbefore:"إدراج عمود قبل",colafter:"إدراج عمود بعد",delcol:"حذف العمود",deltable:"حذف الجدول",ltr:"من اليسار إلى اليمين",rtl:"من اليمين إلى اليسار",alignleft:"محاذاة لليسار",aligncenter:"توسيط",alignright:"محاذاة لليمين",alignjustify:"ضبط",numlist:"قائمة رقمية",bullist:"قائمة نقطية",forecolor:"لون النص",backcolor:"لون الخلفية",removeformat:"مسح التنسيق",outdent:"إنقاص المسافة البادئة",indent:"زيادة المسافة البادئة",fontfamily:"عائلة الخط",fontsize:"حجم الخط",blocks:"الفقرات",quickimage:"إدراج صورة",quicktable:"إدراج جدول",more:"المزيد…",para:"الفقرة",heading:"العنوان",pre:"منسق مسبقاً",removecolor:"إزالة اللون",currentcolor:"اللون الحالي",statushelp:"اضغط على Alt+0 للحصول على مساعدة",words:"الكلمات",helpttl:"تعليمات",shortcuts:"اختصارات مفيدة",close:"إغلاق",save:"حفظ",cancel:"إلغاء",srcttl:"الكود المصدري",wcttl:"عدد الكلمات",wcwords:"الكلمات",wcchars:"الأحرف",pastehint:"استخدم Ctrl+V / ⌘V للصق",liststyles_ol:["افتراضي","أبجدي صغير","روماني صغير","أبجدي كبير","روماني كبير"],liststyles_ul:["افتراضي","دائرة","مربع"],previewttl:"معاينة",tablepropsttl:"خصائص الجدول",tblwidth:"العرض",tblcellspacing:"تباعد الخلايا",tblcellpadding:"حشو الخلايا",tblborder:"عرض الحدود",tblalign:"المحاذاة",alignnone:"بدون",quote:"اقتباس",link:"رابط…",linkttl:"إدراج/تعديل رابط",linkurl:"الرابط",unlink:"إزالة الرابط",lineheight:"تباعد الأسطر",wordspacing:"تباعد الكلمات",changecase:"تغيير حالة الأحرف",lowercase:"أحرف صغيرة",uppercase:"أحرف كبيرة",capitalize:"تكبير أول حرف",customcolor:"لون مخصص…",normal:"عادي",revhistory:"سجل المراجعات",revempty:"لا توجد مراجعات بعد",restore:"استعادة",currentver:"النسخة الحالية",importword:"استيراد من Word…",importfail:"تعذر استيراد هذا الملف. الرجاء اختيار مستند .docx صالح.",restoredraft:"استعادة آخر مسودة",draftempty:"لا توجد مسودة محفوظة",deleteimg:"حذف الصورة",rotateleft:"تدوير لليسار",rotateright:"تدوير لليمين",fliphorizontal:"قلب أفقي",flipvertical:"قلب رأسي",cell:"خلية",row:"صف",column:"عمود",cellprops:"خصائص الخلية…",rowprops:"خصائص الصف…",colprops:"خصائص العمود…",tblheight:"الارتفاع",valign:"محاذاة عمودية",valigntop:"أعلى",valignmiddle:"وسط",valignbottom:"أسفل",fill:"تعبئة",nocell:"انقر داخل خلية جدول أولاً",uploadimg:"رفع من الجهاز",imagelink:"إدراج من رابط",imageurlph:"الصق رابط الصورة…",insertimg:"إدراج",dropimage:"أسقط الصورة هنا",uploading:"جارٍ الرفع…",uploadfailed:"فشل الرفع — انقر لإعادة المحاولة",template:"قوالب",tplimgleft:"صورة يسار، نص يمين",tplimgright:"صورة يمين، نص يسار",tplimgtop:"صورة أعلى، نص أسفل",tplimgcenter:"نص أعلى، صورة وسط",deltemplate:"حذف القالب"}};function q(p){return U[p]}const V="undo redo | preview print | importword revhistory | fontfamily fontsize | fontsizeincrease fontsizedecrease | bold italic underline strikethrough | forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist | outdent indent | link blockquote changecase lineheight wordspacing | removeformat | blocks | ltr rtl | quickimage quicktable template charmap | fullscreen sourcecode",J="file edit view insert format tools table help",j=[["Andale Mono","andale mono,times"],["Arial","arial,helvetica,sans-serif"],["Arial Black","arial black,avant garde"],["Book Antiqua","book antiqua,palatino"],["Comic Sans MS","comic sans ms,sans-serif"],["Courier New","courier new,courier"],["Georgia","georgia,palatino"],["Helvetica","helvetica"],["Impact","impact,chicago"],["Oswald","oswald"],["Sakkal Majalla","sakkal majalla"],["Symbol","symbol"],["Tahoma","tahoma,arial,helvetica,sans-serif"],["Terminal","terminal,monaco"],["Times New Roman","times new roman,times"],["Trebuchet MS","trebuchet ms,geneva"],["Verdana","verdana,geneva"],["Webdings","webdings"],["Wingdings","wingdings,zapf dingbats"]],X=["8px","9px","10px","11px","12px","14px","16px","18px","20px","24px","28px","32px","36px","48px","72px","96px"],tt=1,et=100,it=["1","1.15","1.4","1.5","1.75","2","2.5","3"],st=["1px","2px","4px","6px","8px","12px"],P=[["p","para"],["h1","heading1"],["h2","heading2"],["h3","heading3"],["h4","heading4"],["h5","heading5"],["h6","heading6"],["pre","pre"]],lt=["#F76707","#4263EB","#CC5DE8"],_=["#BFEDD2","#FBEEB8","#F8CAC6","#ECCAFA","#C2E0F4","#2DC26B","#F1C40F","#E03E2D","#B96AD9","#3598DB","#169179","#E67E23","#BA372A","#843FA1","#236FA1","#ECF0F1","#CED4D9","#95A5A6","#7E8C8D","#34495E","#000000","#FFFFFF"],Q=["©","®","™","§","¶","†","‡","•","…","′","″","‰","°","±","×","÷","≈","≠","≤","≥","∞","µ","√","∑","€","£","¥","¢","←","→","↑","↓","«","»","“","”","‘","’","–","—","؟","،","؛","٪","٭","ـ","٠","١"],b=(p,t)=>`<svg viewBox="${t||"0 0 24 24"}">${p}</svg>`,u=p=>b(`<path class="f" d="${p}"/>`,"0 -960 960 960"),L=(p,t=7.5)=>b('<path d="M10 6h10M10 12h10M10 18h10"/>'+p.map((e,i)=>`<text x="2.5" y="${8.4+i*6}" font-size="${t}" stroke="none" fill="#222f3e" font-family="Arial">${e}</text>`).join("")),a={bold:u("M272-200v-560h221q65 0 120 40t55 111q0 51-23 78.5T602-491q25 11 55.5 41t30.5 90q0 89-65 124.5T501-200H272Zm121-112h104q48 0 58.5-24.5T566-372q0-11-10.5-35.5T494-432H393v120Zm0-228h93q33 0 48-17t15-38q0-24-17-39t-44-15h-95v109Z"),italic:u("M200-200v-100h160l120-360H320v-100h400v100H580L460-300h140v100H200Z"),underline:u("M200-120v-80h560v80H200Zm123-223q-56-63-56-167v-330h103v336q0 56 28 91t82 35q54 0 82-35t28-91v-336h103v330q0 104-56 167t-157 63q-101 0-157-63Z"),strikethrough:u("M486-160q-76 0-135-45t-85-123l88-38q14 48 48.5 79t85.5 31q42 0 76-20t34-64q0-18-7-33t-19-27h112q5 14 7.5 28.5T694-340q0 86-61.5 133T486-160ZM80-480v-80h800v80H80Zm402-326q66 0 115.5 32.5T674-674l-88 39q-9-29-33.5-52T484-710q-41 0-68 18.5T386-640h-96q2-69 54.5-117.5T482-806Z"),undo:u("M280-200v-80h284q63 0 109.5-40T720-420q0-60-46.5-100T564-560H312l104 104-56 56-200-200 200-200 56 56-104 104h252q97 0 166.5 63T800-420q0 94-69.5 157T564-200H280Z"),redo:u("M396-200q-97 0-166.5-63T160-420q0-94 69.5-157T396-640h252L544-744l56-56 200 200-200 200-56-56 104-104H396q-63 0-109.5 40T240-420q0 60 46.5 100T396-280h284v80H396Z"),ltr:u("M360-360v-200q-66 0-113-47t-47-113q0-66 47-113t113-47h320v80h-80v440h-80v-440h-80v440h-80Zm0-280v-160q-33 0-56.5 23.5T280-720q0 33 23.5 56.5T360-640Zm0-80ZM680-80l-56-56 64-64H120v-80h568l-64-64 56-56 160 160L680-80Z"),rtl:u("M360-360v-200q-66 0-113-47t-47-113q0-66 47-113t113-47h320v80h-80v440h-80v-440h-80v440h-80Zm-88 160 64 64-56 56-160-160 160-160 56 56-64 64h568v80H272Zm88-440v-160q-33 0-56.5 23.5T280-720q0 33 23.5 56.5T360-640Zm0-80Z"),alignleft:u("M120-120v-80h720v80H120Zm0-160v-80h480v80H120Zm0-160v-80h720v80H120Zm0-160v-80h480v80H120Zm0-160v-80h720v80H120Z"),aligncenter:u("M120-120v-80h720v80H120Zm160-160v-80h400v80H280ZM120-440v-80h720v80H120Zm160-160v-80h400v80H280ZM120-760v-80h720v80H120Z"),alignright:u("M120-760v-80h720v80H120Zm240 160v-80h480v80H360ZM120-440v-80h720v80H120Zm240 160v-80h480v80H360ZM120-120v-80h720v80H120Z"),alignjustify:u("M120-120v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Z"),fullscreen:u("M120-120v-200h80v120h120v80H120Zm520 0v-80h120v-120h80v200H640ZM120-640v-200h200v80H200v120h-80Zm640 0v-120H640v-80h200v200h-80Z"),clearformatic:u("m528-546-93-93-121-121h486v120H568l-40 94ZM792-56 460-388l-80 188H249l119-280L56-792l56-56 736 736-56 56Z"),numlist:u("M120-80v-60h100v-30h-60v-60h60v-30H120v-60h120q17 0 28.5 11.5T280-280v40q0 17-11.5 28.5T240-200q17 0 28.5 11.5T280-160v40q0 17-11.5 28.5T240-80H120Zm0-280v-110q0-17 11.5-28.5T160-510h60v-30H120v-60h120q17 0 28.5 11.5T280-560v70q0 17-11.5 28.5T240-450h-60v30h100v60H120Zm60-280v-180h-60v-60h120v240h-60Zm180 440v-80h480v80H360Zm0-240v-80h480v80H360Zm0-240v-80h480v80H360Z"),bullist:u("M360-200v-80h480v80H360Zm0-240v-80h480v80H360Zm0-240v-80h480v80H360ZM200-160q-33 0-56.5-23.5T120-240q0-33 23.5-56.5T200-320q33 0 56.5 23.5T280-240q0 33-23.5 56.5T200-160Zm0-240q-33 0-56.5-23.5T120-480q0-33 23.5-56.5T200-560q33 0 56.5 23.5T280-480q0 33-23.5 56.5T200-400Zm-56.5-263.5Q120-687 120-720t23.5-56.5Q167-800 200-800t56.5 23.5Q280-753 280-720t-23.5 56.5Q233-640 200-640t-56.5-23.5Z"),chev:b('<path d="M2 3.5 6 7.5 10 3.5"/>',"0 0 12 11"),backcolor:u("M440-80q-33 0-56.5-23.5T360-160v-160H240q-33 0-56.5-23.5T160-400v-280q0-66 47-113t113-47h480v440q0 33-23.5 56.5T720-320H600v160q0 33-23.5 56.5T520-80h-80ZM240-560h480v-200h-40v160h-80v-160h-40v80h-80v-80H320q-33 0-56.5 23.5T240-680v120Zm0 160h480v-80H240v80Zm0 0v-80 80Z"),outdent:u("M120-120v-80h720v80H120Zm320-160v-80h400v80H440Zm0-160v-80h400v80H440Zm0-160v-80h400v80H440ZM120-760v-80h720v80H120Zm160 440L120-480l160-160v320Z"),indent:u("M120-120v-80h720v80H120Zm320-160v-80h400v80H440Zm0-160v-80h400v80H440Zm0-160v-80h400v80H440ZM120-760v-80h720v80H120Zm0 440v-320l160 160-160 160Z"),more:b('<circle class="f" cx="5" cy="12" r="1.7"/><circle class="f" cx="12" cy="12" r="1.7"/><circle class="f" cx="19" cy="12" r="1.7"/>'),image:u("M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm40-80h480L570-480 450-320l-90-120-120 160Zm-40 80v-560 560Z"),uploadic:u("M440-200v-326L336-422l-56-58 200-200 200 200-56 58-104-104v326h-80ZM240-80q-33 0-56.5-23.5T160-160v-120h80v120h480v-120h80v120q0 33-23.5 56.5T720-80H240Z"),tableic:u("M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm240-240H200v160h240v-160Zm80 0v160h240v-160H520Zm-80-80v-160H200v160h240Zm80 0h240v-160H520v160ZM200-680h560v-80H200v80Z"),hric:b('<path d="M4 12h16"/>'),charic:u("M120-120v-120h200q-84-45-132-125t-48-175q0-142 99-241t241-99q142 0 241 99t99 241q0 95-48 175T640-240h200v120H520v-204q78-14 129-75t51-141q0-92-64-156t-156-64q-92 0-156 64t-64 156q0 80 51 141t129 75v204H120Z"),dateic:b('<rect x="4" y="6" width="16" height="14" rx="1.5"/><path d="M4 10h16M8 4v4M16 4v4"/>'),pbic:u("M240-80q-33 0-56.5-23.5T160-160v-120h80v120h480v-120h80v120q0 33-23.5 56.5T720-80H240Zm-80-440v-280q0-33 23.5-56.5T240-880h320l240 240v120h-80v-80H520v-200H240v280h-80Zm200 160v-80h240v80H360Zm320 0v-80h240v80H680Zm-640 0v-80h240v80H40Zm440-160Zm0 240Z"),nbspic:b('<path d="M6 12v4h12v-4"/>'),srcic:u("M240-280 40-480l200-200 56 56-143 144 143 144-56 56Zm178 132-76-24 200-640 76 24-200 640Zm302-132-56-56 143-144-143-144 56-56 200 200-200 200Z"),prevw:u("M607.5-372.5Q660-425 660-500t-52.5-127.5Q555-680 480-680t-127.5 52.5Q300-575 300-500t52.5 127.5Q405-320 480-320t127.5-52.5Zm-204-51Q372-455 372-500t31.5-76.5Q435-608 480-608t76.5 31.5Q588-545 588-500t-31.5 76.5Q525-392 480-392t-76.5-31.5ZM214-281.5Q94-363 40-500q54-137 174-218.5T480-800q146 0 266 81.5T920-500q-54 137-174 218.5T480-200q-146 0-266-81.5ZM480-500Zm207.5 160.5Q782-399 832-500q-50-101-144.5-160.5T480-720q-113 0-207.5 59.5T128-500q50 101 144.5 160.5T480-280q113 0 207.5-59.5Z"),printic:u("M640-640v-120H320v120h-80v-200h480v200h-80Zm-480 80h640-640Zm560 100q17 0 28.5-11.5T760-500q0-17-11.5-28.5T720-540q-17 0-28.5 11.5T680-500q0 17 11.5 28.5T720-460Zm-80 260v-160H320v160h320Zm80 80H240v-160H80v-240q0-51 35-85.5t85-34.5h560q51 0 85.5 34.5T880-520v240H720v160Zm80-240v-160q0-17-11.5-28.5T760-560H200q-17 0-28.5 11.5T160-520v160h80v-80h480v80h80Z"),cutic:u("M760-120 480-400l-94 94q8 15 11 32t3 34q0 66-47 113T240-80q-66 0-113-47T80-240q0-66 47-113t113-47q17 0 34 3t32 11l94-94-94-94q-15 8-32 11t-34 3q-66 0-113-47T80-720q0-66 47-113t113-47q66 0 113 47t47 113q0 17-3 34t-11 32l494 494v40H760ZM600-520l-80-80 240-240h120v40L600-520ZM296.5-663.5Q320-687 320-720t-23.5-56.5Q273-800 240-800t-56.5 23.5Q160-753 160-720t23.5 56.5Q207-640 240-640t56.5-23.5ZM494-466q6-6 6-14t-6-14q-6-6-14-6t-14 6q-6 6-6 14t6 14q6 6 14 6t14-6ZM296.5-183.5Q320-207 320-240t-23.5-56.5Q273-320 240-320t-56.5 23.5Q160-273 160-240t23.5 56.5Q207-160 240-160t56.5-23.5Z"),copyic:u("M360-240q-33 0-56.5-23.5T280-320v-480q0-33 23.5-56.5T360-880h360q33 0 56.5 23.5T800-800v480q0 33-23.5 56.5T720-240H360Zm0-80h360v-480H360v480ZM200-80q-33 0-56.5-23.5T120-160v-560h80v560h440v80H200Zm160-240v-480 480Z"),pasteic:u("M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h167q11-35 43-57.5t70-22.5q40 0 71.5 22.5T594-840h166q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560h-80v120H280v-120h-80v560Zm308.5-571.5Q520-783 520-800t-11.5-28.5Q497-840 480-840t-28.5 11.5Q440-817 440-800t11.5 28.5Q463-760 480-760t28.5-11.5Z"),selall:u("M280-280v-400h400v400H280Zm80-80h240v-240H360v240ZM200-200v80q-33 0-56.5-23.5T120-200h80Zm-80-80v-80h80v80h-80Zm0-160v-80h80v80h-80Zm0-160v-80h80v80h-80Zm80-160h-80q0-33 23.5-56.5T200-840v80Zm80 640v-80h80v80h-80Zm0-640v-80h80v80h-80Zm160 640v-80h80v80h-80Zm0-640v-80h80v80h-80Zm160 640v-80h80v80h-80Zm0-640v-80h80v80h-80Zm160 640v-80h80q0 33-23.5 56.5T760-120Zm0-160v-80h80v80h-80Zm0-160v-80h80v80h-80Zm0-160v-80h80v80h-80Zm0-160v-80q33 0 56.5 23.5T840-760h-80Z"),superscriptic:u("M760-600v-80q0-17 11.5-28.5T800-720h80v-40H760v-40h120q17 0 28.5 11.5T920-760v40q0 17-11.5 28.5T880-680h-80v40h120v40H760ZM235-160l185-291-172-269h106l124 200h4l123-200h107L539-451l186 291H618L482-377h-4L342-160H235Z"),subscriptic:u("M760-160v-80q0-17 11.5-28.5T800-280h80v-40H760v-40h120q17 0 28.5 11.5T920-320v40q0 17-11.5 28.5T880-240h-80v40h120v40H760Zm-525-80 185-291-172-269h106l124 200h4l123-200h107L539-531l186 291H618L482-457h-4L342-240H235Z"),newic:b('<path d="M6 3h8l5 5v13H6z"/><path d="M14 3v5h5"/>'),helpic:b('<circle cx="12" cy="12" r="8.5"/><path d="M9.6 9.6a2.5 2.5 0 1 1 3.4 2.6c-.8.3-1 .9-1 1.8"/><circle class="f" cx="12" cy="16.6" r="1.1"/>'),wcic:b('<path d="M4 6h16M4 10h16M4 14h9"/><path d="M15 17.5l2 2 3.6-4"/>'),rowbefore:u("M200-160h560v-240H200v240Zm640 80H120v-720h160v80h-80v240h560v-240h-80v-80h160v720ZM480-480Zm0 80v-80 80Zm0 0Zm-40-240v-80h-80v-80h80v-80h80v80h80v80h-80v80h-80Z"),rowafter:u("M200-560h560v-240H200v240Zm-80 400v-720h720v720H680v-80h80v-240H200v240h80v80H120Zm360-320Zm0-80v80-80Zm0 0ZM440-80v-80h-80v-80h80v-80h80v80h80v80h-80v80h-80Z"),rowdelete:u("M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200ZM200-200h560v-560H200ZM200-400v-160h560v160H200ZM330-580l250 250 50-50-250-250ZM330-380l250-250 50 50-250 250Z"),colbefore:u("M800-200v-560H560v560h240Zm-640 80v-160h80v80h240v-560H240v80h-80v-160h720v720H160Zm320-360Zm80 0h-80 80Zm0 0ZM160-360v-80H80v-80h80v-80h80v80h80v80h-80v80h-80Z"),colafter:u("M160-760v560h240v-560H160ZM80-120v-720h720v160h-80v-80H480v560h240v-80h80v160H80Zm400-360Zm-80 0h80-80Zm0 0Zm320 120v-80h-80v-80h80v-80h80v80h80v80h-80v80h-80Z"),coldelete:u("M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200ZM200-200h560v-560H200ZM400-200v-560h160v560H400ZM330-580l250 250 50-50-250-250ZM330-380l250-250 50 50-250 250Z"),tabledelete:b('<rect x="4" y="5" width="16" height="14" rx="1.5"/><path d="M4 10h16M4 14.5h16M9.5 5v14M14.5 5v14"/><path d="M6.5 6.5l11 11M17.5 6.5l-11 11" stroke-width="2.1"/>'),quote:u("m228-240 92-160q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 23-5.5 42.5T458-480L320-240h-92Zm360 0 92-160q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 23-5.5 42.5T818-480L680-240h-92ZM362.5-517.5Q380-535 380-560t-17.5-42.5Q345-620 320-620t-42.5 17.5Q260-585 260-560t17.5 42.5Q295-500 320-500t42.5-17.5Zm360 0Q740-535 740-560t-17.5-42.5Q705-620 680-620t-42.5 17.5Q620-585 620-560t17.5 42.5Q655-500 680-500t42.5-17.5ZM680-560Zm-360 0Z"),link:u("M440-280H280q-83 0-141.5-58.5T80-480q0-83 58.5-141.5T280-680h160v80H280q-50 0-85 35t-35 85q0 50 35 85t85 35h160v80ZM320-440v-80h320v80H320Zm200 160v-80h160q50 0 85-35t35-85q0-50-35-85t-85-35H520v-80h160q83 0 141.5 58.5T880-480q0 83-58.5 141.5T680-280H520Z"),unlink:b('<path d="M13.5 6.5l1.7-1.7a4 4 0 0 1 5.6 5.6L19 12.2"/><path d="M10.5 17.5l-1.7 1.7a4 4 0 0 1-5.6-5.6L5 11.8"/><path d="M4 4l16 16"/>'),lineheight:u("M240-160 80-320l56-56 64 62v-332l-64 62-56-56 160-160 160 160-56 56-64-62v332l64-62 56 56-160 160Zm240-40v-80h400v80H480Zm0-240v-80h400v80H480Zm0-240v-80h400v80H480Z"),wordspacing:u("M320-80 160-240l160-160 57 56-64 64h334l-63-64 56-56 160 160L640-80l-57-56 64-64H313l63 64-56 56ZM200-480v-400h80v400h-80Zm240 0v-400h80v400h-80Zm240 0v-400h80v400h-80Z"),caseic:u("m131-252 165-440h79l165 440h-76l-39-112H247l-40 112h-76Zm139-176h131l-64-182h-4l-63 182Zm395 186q-51 0-81-27.5T554-342q0-44 34.5-72.5T677-443q23 0 45 4t38 11v-12q0-29-20.5-47T685-505q-23 0-42 9.5T610-468l-47-35q24-29 54.5-43t68.5-14q69 0 103 32.5t34 97.5v178h-63v-37h-4q-14 23-38 35t-53 12Zm12-54q35 0 59.5-24t24.5-56q-14-8-33.5-12.5T689-393q-32 0-50 14t-18 37q0 20 16 33t40 13Z"),uppercaseic:u("M660-240v-248l-64 64-56-56 160-160 160 160-56 56-64-64v248h-80Zm-540 0 165-440h79l165 440h-76l-39-113H236l-40 113h-76Zm139-177h131l-65-182h-4l-62 182Z"),lowercaseic:u("M300-240q-51 0-81-27.5T189-340q0-44 34.5-72.5T312-441q23 0 45 4t38 11v-12q0-29-20.5-47T320-503q-23 0-42 9.5T245-466l-47-35q24-29 54.5-43t68.5-14q69 0 103 32.5t34 97.5v178h-63v-37h-4q-14 23-38 35t-53 12Zm12-54q35 0 59.5-24t24.5-56q-14-8-33.5-12.5T324-391q-32 0-50 14t-18 37q0 20 16 33t40 13Zm388 54L540-400l56-56 64 64v-248h80v248l64-64 56 56-160 160Z"),capitalizeic:u("M344-250v-366H224v-64h308v64H412v366h-68Zm344 10q-44 0-69-25.5T594-336v-162h-54v-58h54v-87h66v87h74v58h-74v148q0 23 10.5 36t28.5 13q9 0 18.5-3.5T736-314v65q-10 5-22 7t-26 2Z"),plus:b('<path d="M12 5.5v13M5.5 12h13"/>'),minus:b('<path d="M5.5 12h13"/>'),fontsizeup:u("m40-200 210-560h100l210 560h-96l-51-143H187l-51 143H40Zm176-224h168l-82-232h-4l-82 232Zm504 104v-120H600v-80h120v-120h80v120h120v80H800v120h-80Z"),fontsizedown:u("m40-200 210-560h100l210 560h-96l-51-143H187l-51 143H40Zm176-224h168l-82-232h-4l-82 232Zm384-16v-80h320v80H600Z"),historyic:u("M480-120q-138 0-240.5-91.5T122-440h82q14 104 92.5 172T480-200q117 0 198.5-81.5T760-480q0-117-81.5-198.5T480-760q-69 0-129 32t-101 88h110v80H120v-240h80v94q51-64 124.5-99T480-840q75 0 140.5 28.5t114 77q48.5 48.5 77 114T840-480q0 75-28.5 140.5t-77 114q-48.5 48.5-114 77T480-120Zm112-192L440-464v-216h80v184l128 128-56 56Z"),wordic:b('<path d="M6 3h8l5 5v13H6z"/><path d="M14 3v5h5"/><text x="8" y="17" font-size="8.5" stroke="none" fill="#222f3e" font-family="Arial" font-weight="bold">W</text>'),draftic:u("M480-160q-134 0-227-93t-93-227q0-134 93-227t227-93q69 0 132 28.5T720-690v-110h80v280H520v-80h168q-32-56-87.5-88T480-720q-100 0-170 70t-70 170q0 100 70 170t170 70q77 0 139-44t87-116h84q-28 106-114 173t-196 67Z"),trash:b('<path d="M5 7h14M10 7V5h4v2M7.5 7l1 13h7l1-13"/>'),templateic:b('<rect x="4" y="4" width="16" height="16" rx="1.5"/><rect x="6.5" y="6.5" width="5" height="5" rx=".5"/><path d="M14 7.5h3.5M14 10h3.5M6.5 14h11M6.5 17h11"/>'),tplleft:b('<rect x="3" y="5" width="8" height="8" rx=".8"/><path d="M13.5 6.5H21M13.5 9.5H21M13.5 12.5H21M3 15.5h18M3 18.5h18"/>'),tplright:b('<rect x="13" y="5" width="8" height="8" rx=".8"/><path d="M3 6.5h7.5M3 9.5h7.5M3 12.5h7.5M3 15.5h18M3 18.5h18"/>'),tpltop:b('<rect x="5" y="3" width="14" height="9" rx=".8"/><path d="M3 15h18M3 18h18M3 21h12"/>'),tplcenter:b('<path d="M3 4h18M3 7h18M3 10h12"/><rect x="5" y="12.5" width="14" height="9" rx=".8"/>'),rotateleft:b('<polyline points="1 4 1 10 7 10"/><path d="M3.51 15a9 9 0 1 0 2.13-9.36L1 10"/>'),rotateright:b('<polyline points="23 4 23 10 17 10"/><path d="M20.49 15a9 9 0 1 1-2.12-9.36L23 10"/>'),fliphorizontal:b('<path d="M12 3v18"/><path d="M7 8l-4 4 4 4"/><path d="M17 8l4 4-4 4"/>'),flipvertical:b('<path d="M3 12h18"/><path d="M8 7l4-4 4 4"/><path d="M8 17l4 4 4-4"/>'),check:b('<path d="M5 12.5 9.5 17 19 7"/>'),palette:b('<path d="M12 3a9 9 0 1 0 0 18h1.2a2 2 0 0 0 2-2 2 2 0 0 1 2-2H18a3 3 0 0 0 3-3c0-6.1-4.5-11-9-11z"/><circle class="f" cx="7.8" cy="10.2" r="1.3"/><circle class="f" cx="11.6" cy="7.3" r="1.3"/><circle class="f" cx="15.8" cy="9.6" r="1.3"/><circle class="f" cx="9" cy="14.8" r="1.3"/>'),ul_circle:u("M280-600v-80h560v80H280Zm0 160v-80h560v80H280Zm0 160v-80h560v80H280ZM160-600q-17 0-28.5-11.5T120-640q0-17 11.5-28.5T160-680q17 0 28.5 11.5T200-640q0 17-11.5 28.5T160-600Zm0 160q-17 0-28.5-11.5T120-480q0-17 11.5-28.5T160-520q17 0 28.5 11.5T200-480q0 17-11.5 28.5T160-440Zm0 160q-17 0-28.5-11.5T120-320q0-17 11.5-28.5T160-360q17 0 28.5 11.5T200-320q0 17-11.5 28.5T160-280Z"),ul_square:u("M80-160v-160h160v160H80Zm240 0v-160h560v160H320ZM80-400v-160h160v160H80Zm240 0v-160h560v160H320ZM80-640v-160h160v160H80Zm240 0v-160h560v160H320Z"),ol_alpha:L(["a","b","c"]),ol_roman:L(["i","ii","iii"],6.5),ol_alphau:L(["A","B","C"]),ol_romanu:L(["I","II","III"],6.5)},nt=p=>`<span class="txt">${p}</span>`,ot=new Set(["p","div","span","br","hr","a","b","strong","i","em","u","s","strike","sub","sup","h1","h2","h3","h4","h5","h6","blockquote","pre","code","ul","ol","li","table","thead","tbody","tfoot","tr","td","th","caption","colgroup","col","img","figure","figcaption","mark"]),rt=new Set(["text-align","direction","unicode-bidi","font-weight","font-style","text-decoration","text-decoration-line","color","background-color","background","background-image","background-position","background-repeat","background-size","font-size","font-family","line-height","letter-spacing","vertical-align","text-indent","margin","margin-top","margin-bottom","margin-left","margin-right","margin-inline-start","margin-inline-end","padding","padding-top","padding-bottom","padding-left","padding-right","width","height","min-width","max-width","min-height","max-height","border","border-top","border-right","border-bottom","border-left","border-color","border-style","border-width","border-radius","border-collapse","border-spacing","table-layout","float","display","box-sizing","list-style-type","white-space"]),F={"*":["dir","lang","colspan","rowspan"],a:["href","target","rel","title"],img:["src","alt","width","height","title"],col:["span","width"],td:["width","valign"],th:["width","valign"],table:["width","cellpadding","cellspacing"]};function N(p){const t={},e=p.getAttribute&&p.getAttribute("style");return e&&e.split(";").forEach(i=>{const s=i.indexOf(":");s<1||(t[i.slice(0,s).trim().toLowerCase()]=i.slice(s+1).trim())}),t}function at(p){return p.replace(/<!--\[if !supportLists\]-->([\s\S]*?)<!--\[endif\]-->/gi,"$1").replace(/<!--\[if !supportLists\]>([\s\S]*?)<!\[endif\]-->/gi,"$1").replace(/<!\[if !supportLists\]>([\s\S]*?)<!\[endif\]>/gi,"$1").replace(/<!--\[if [\s\S]*?<!\[endif\]-->/gi,"").replace(/<!--[\s\S]*?-->/g,"").replace(/<(script|style|xml|title)[\s\S]*?<\/\1>/gi,"").replace(/<\/?(meta|link)[^>]*>/gi,"").replace(/<\?xml[\s\S]*?\?>/gi,"").replace(/<\/?(o|v|w|m|st1):[^>]*>/gi,"")}function ct(p){return/^[0-9]+[\.\)،]/.test(p)?{ordered:!0}:/^[٠-٩۰-۹]+/.test(p)?{ordered:!0,style:"arabic-indic"}:/^[ivxlc]{2,}[\.\)]/.test(p)?{ordered:!0,style:"lower-roman"}:/^[IVXLC]{2,}[\.\)]/.test(p)?{ordered:!0,style:"upper-roman"}:/^[a-z][\.\)]/.test(p)?{ordered:!0,style:"lower-alpha"}:/^[A-Z][\.\)]/.test(p)?{ordered:!0,style:"upper-alpha"}:/^[ء-ي][\.\)،-]/.test(p)?{ordered:!0,style:"arabic-indic"}:{ordered:!1}}function ht(p){const t=s=>{const l=(s.getAttribute("style")||"")+" "+(s.className||"");return/mso-list\s*:(?!\s*ignore)/i.test(l)||/MsoListParagraph/i.test(l)},e=[];let i=null;Array.from(p.body.querySelectorAll("p")).forEach(s=>{if(!t(s)){i=null;return}const l=s.previousElementSibling;i&&l&&i[i.length-1]===l?i.push(s):(i=[s],e.push(i))}),e.forEach(s=>{const l=[],n=s[0];s.forEach(o=>{var T,S,M;const c=+(((T=(o.getAttribute("style")||"").match(/level(\d+)/i))==null?void 0:T[1])||1),h=Array.from(o.querySelectorAll("span")).find(x=>/mso-list\s*:\s*ignore/i.test(x.getAttribute("style")||"")),d=h?((S=h.textContent)==null?void 0:S.trim())||"":(((M=o.textContent)==null?void 0:M.trim().match(/^\S{1,4}/))||[""])[0],{ordered:m,style:g}=ct(d);for(h&&h.remove();l.length&&l[l.length-1].level>c;)l.pop();if(!l.length||l[l.length-1].level<c){const x=p.createElement(m?"ol":"ul");if(m&&g&&(x.style.listStyleType=g),l.length){const E=l[l.length-1].list;(E.lastElementChild||E).appendChild(x)}else n.parentNode.insertBefore(x,n);l.push({list:x,level:c})}const f=p.createElement("li"),v=N(o),y=["text-align","direction","unicode-bidi","color","font-size","font-family","background-color"].filter(x=>v[x]).map(x=>x+":"+v[x]).join(";");for(y&&f.setAttribute("style",y),o.getAttribute("dir")&&f.setAttribute("dir",o.getAttribute("dir"));o.firstChild;)f.appendChild(o.firstChild);l[l.length-1].list.appendChild(f),o.remove()})})}function dt(p){p.querySelectorAll('b[id^="docs-internal-guid"]').forEach(t=>{for(;t.firstChild;)t.parentNode.insertBefore(t.firstChild,t);t.remove()})}function pt(p){p.querySelectorAll("table").forEach(t=>{const e=t;N(e)["border-collapse"]||(e.style.borderCollapse="collapse")}),p.querySelectorAll("[align]").forEach(t=>{const e=t,i=e.getAttribute("align").toLowerCase();e.tagName.toLowerCase()==="table"?i==="center"?(e.style.marginLeft=e.style.marginLeft||"auto",e.style.marginRight=e.style.marginRight||"auto"):i==="right"?e.style.marginLeft=e.style.marginLeft||"auto":i==="left"&&(e.style.marginRight=e.style.marginRight||"auto"):["left","right","center","justify"].includes(i)&&(e.style.textAlign=e.style.textAlign||i,Array.from(e.children).forEach(s=>{if(s.tagName.toLowerCase()!=="table")return;const l=s;i==="center"?(l.style.marginLeft=l.style.marginLeft||"auto",l.style.marginRight=l.style.marginRight||"auto"):i==="right"?l.style.marginLeft=l.style.marginLeft||"auto":i==="left"&&(l.style.marginRight=l.style.marginRight||"auto")})),e.removeAttribute("align")}),p.querySelectorAll("center table").forEach(t=>{const e=t;e.style.marginLeft=e.style.marginLeft||"auto",e.style.marginRight=e.style.marginRight||"auto"}),p.querySelectorAll("[bgcolor]").forEach(t=>{const e=t;e.style.backgroundColor=e.style.backgroundColor||e.getAttribute("bgcolor"),e.removeAttribute("bgcolor")})}function I(p,t){Array.from(p.childNodes).forEach(e=>{if(e.nodeType===Node.COMMENT_NODE){e.remove();return}if(e.nodeType!==Node.ELEMENT_NODE)return;const i=e,s=i.tagName.toLowerCase();if(!ot.has(s)){if(s==="font"){const r=t.createElement("span");i.getAttribute("style")&&r.setAttribute("style",i.getAttribute("style")),i.getAttribute("color")&&(r.style.color=i.getAttribute("color")),i.getAttribute("face")&&(r.style.fontFamily=i.getAttribute("face"));const c=i.getAttribute("size");if(c&&!r.style.fontSize){const h={1:"8pt",2:"10pt",3:"12pt",4:"14pt",5:"18pt",6:"24pt",7:"36pt"};h[c]&&(r.style.fontSize=h[c])}for(;i.firstChild;)r.appendChild(i.firstChild);i.replaceWith(r),I(r,t);return}for(I(i,t);i.firstChild;)i.parentNode.insertBefore(i.firstChild,i);i.remove();return}const l=new Set([...F["*"]||[],...F[s]||[]]);if(Array.from(i.attributes).forEach(r=>{const c=r.name.toLowerCase();c!=="style"&&!l.has(c)&&i.removeAttribute(r.name)}),s==="a"){const r=i.getAttribute("href")||"";/^(https?:|mailto:|tel:|#)/i.test(r)||i.removeAttribute("href")}if(s==="img"){const r=i.getAttribute("src")||"";if(!/^(https?:|data:image\/|blob:)/i.test(r)){const c=t.createElement("span");c.textContent="[local image — paste it separately]",c.setAttribute("style","color:#a33;font-style:italic;font-size:12px"),i.replaceWith(c);return}}const n=N(i),o=[];for(const[r,c]of Object.entries(n))rt.has(r)&&(/expression|javascript|url\s*\(\s*['"]?\s*file:/i.test(c)||r==="font-weight"&&/^(400|normal)$/i.test(c)||r==="font-style"&&/^normal$/i.test(c)||r==="text-decoration"&&/^none$/i.test(c)||o.push(r+":"+c));if(o.length?i.setAttribute("style",o.join(";")):i.removeAttribute("style"),i.removeAttribute("class"),I(i,t),s==="span"&&!i.attributes.length){for(;i.firstChild;)i.parentNode.insertBefore(i.firstChild,i);i.remove()}})}function mt(p){const t=[],e=/<style[^>]*>([\s\S]*?)<\/style>/gi;let i;for(;i=e.exec(p);){let s=i[1].replace(/<!--|-->/g,"").replace(/\/\*[\s\S]*?\*\//g,"");s=s.replace(/@media[^{]*\{(?:[^{}]*\{[^{}]*\})*[^{}]*\}/gi,""),s=s.replace(/@[\w-]+[^{]*\{[^{}]*\}/g,"");let l;const n=/([^{}]+)\{([^}]*)\}/g;for(;l=n.exec(s);){const o=l[2].split(";").map(r=>{const c=r.indexOf(":");return c<1?null:[r.slice(0,c).trim().toLowerCase(),r.slice(c+1).trim()]}).filter(r=>!!r&&!!r[1]);o.length&&l[1].split(",").map(r=>r.trim()).filter(r=>r&&!r.startsWith("@")).forEach(r=>t.push({sel:r,decls:o}))}}return t}function ut(p,t){if(!t.length)return;const e=new Map;t.forEach(({sel:i,decls:s})=>{let l;try{l=p.querySelectorAll(i)}catch{return}l.forEach(n=>{let o=e.get(n);o||(o={},e.set(n,o)),s.forEach(([r,c])=>{o[r]=c})})}),e.forEach((i,s)=>{const l=N(s),n=s.hasAttribute("dir"),o=s.hasAttribute("align"),r=Object.entries(i).filter(([d])=>!(d in l||(d==="direction"||d==="unicode-bidi")&&n||d==="text-align"&&(o||n)||(d==="background"||d==="background-color")&&s.hasAttribute("bgcolor")));if(!r.length)return;const c=r.map(([d,m])=>d+":"+m).join(";"),h=s.getAttribute("style");s.setAttribute("style",h?c+";"+h:c)})}function Y(p){return p.replace(/[ﭐ-﷿ﹰ-ﻼ]+/g,t=>t.normalize("NFKC"))}function gt(p){const t=p.createTreeWalker(p.body,NodeFilter.SHOW_TEXT,null);let e;for(;e=t.nextNode();)/[ﭐ-﷿ﹰ-ﻼ]/.test(e.nodeValue||"")&&(e.nodeValue=Y(e.nodeValue||""))}function G(p,t="ltr"){const e=mt(p),i=new DOMParser().parseFromString(at(p),"text/html");ut(i,e),/class="?Mso|mso-|urn:schemas-microsoft-com/i.test(i.body.innerHTML)&&ht(i),dt(i),pt(i),I(i.body,i),gt(i);const s=l=>{var n;return l&&l.tagName==="P"&&!((n=l.textContent)!=null&&n.trim())&&!l.querySelector("img,table")};for(;s(i.body.firstElementChild);)i.body.firstElementChild.remove();for(;s(i.body.lastElementChild);)i.body.lastElementChild.remove();return i.body.innerHTML.trim()}function K(p){const t=Y(p).replace(/\r/g,""),e=i=>i.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");return/\n/.test(t)?t.split(/\n{2,}/).map(i=>`<p dir="auto">${e(i).replace(/\n/g,"<br>")||"<br>"}</p>`).join(""):e(t)}function ft(p){const t=new DataView(p),e=new Map;let i=-1;for(let o=p.byteLength-22;o>=Math.max(0,p.byteLength-22-65535);o--)if(t.getUint32(o,!0)===101010256){i=o;break}if(i<0)throw new Error("EOCD not found");const s=t.getUint16(i+10,!0);let l=t.getUint32(i+16,!0);const n=new TextDecoder;for(let o=0;o<s&&t.getUint32(l,!0)===33639248;o++){const r=t.getUint16(l+10,!0),c=t.getUint32(l+20,!0),h=t.getUint16(l+28,!0),d=t.getUint16(l+30,!0),m=t.getUint16(l+32,!0),g=t.getUint32(l+42,!0),f=n.decode(new Uint8Array(p,l+46,h));e.set(f,{name:f,method:r,compSize:c,localOffset:g}),l+=46+h+d+m}return e}async function $(p,t){const e=new DataView(p,t.localOffset);if(e.getUint32(0,!0)!==67324752)throw new Error("Bad local header");const i=e.getUint16(26,!0),s=e.getUint16(28,!0),l=t.localOffset+30+i+s,n=new Uint8Array(p.slice(l,l+t.compSize));if(t.method===0)return n;if(t.method!==8)throw new Error("Unsupported compression method "+t.method);const o=new Blob([n]).stream().pipeThrough(new DecompressionStream("deflate-raw"));return new Uint8Array(await new Response(o).arrayBuffer())}const z=p=>p.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""),A=(p,t)=>Array.from(p.children).filter(e=>e.localName===t),C=(p,...t)=>{let e=p;for(const i of t){if(!e)return null;e=Array.from(e.children).find(s=>s.localName===i)||null}return e},w=(p,t="val")=>{if(!p)return"";for(const e of Array.from(p.attributes))if(e.localName===t)return e.value;return""},k=(p,t)=>{const e=p?C(p,t):null;if(!e)return!1;const i=w(e);return i!=="false"&&i!=="0"},W={yellow:"#FFFF00",green:"#00FF00",cyan:"#00FFFF",magenta:"#FF00FF",blue:"#0000FF",red:"#FF0000",darkBlue:"#00008B",darkCyan:"#008B8B",darkGreen:"#006400",darkMagenta:"#8B008B",darkRed:"#8B0000",darkYellow:"#808000",darkGray:"#A9A9A9",lightGray:"#D3D3D3",black:"#000000",white:"#FFFFFF"},vt={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",bmp:"image/bmp",webp:"image/webp"};function bt(p){let t="";for(let e=0;e<p.length;e+=32768)t+=String.fromCharCode(...p.subarray(e,e+32768));return btoa(t)}class yt{constructor(t,e,i){this.rels=t,this.images=e,this.numFmt=i}convertBody(t){let e="",i=[];const s=l=>{for(;i.length>l;)e+=`</${i.pop()}>`};for(const l of Array.from(t.children))if(l.localName==="p"){const n=this.paraList(l);if(n){const o=n.ilvl+1;for(;i.length>o;)e+=`</${i.pop()}>`;for(i.length===o&&i[o-1]!==n.type&&(e+=`</${i.pop()}>`);i.length<o;)e+=`<${n.type}>`,i.push(n.type);e+=`<li>${this.runsOf(l)||"<br>"}</li>`;continue}s(0),e+=this.convertPara(l)}else l.localName==="tbl"?(s(0),e+=this.convertTable(l)):l.localName;return s(0),e||"<p><br></p>"}paraList(t){const e=C(t,"pPr","numPr");if(!e)return null;const i=w(C(e,"numId"));if(!i||i==="0")return null;const s=parseInt(w(C(e,"ilvl"))||"0",10)||0;return{type:this.numFmt.get(i)||"ul",ilvl:Math.min(s,8)}}convertPara(t){const e=C(t,"pPr"),i=w(C(t,"pPr","pStyle"));let s="p";const l=/^Heading([1-6])$/i.exec(i);l?s="h"+l[1]:/^Title$/i.test(i)&&(s="h1");const n=[],o=w(C(t,"pPr","jc"));o==="center"?n.push("text-align:center"):o==="right"||o==="end"?n.push("text-align:right"):(o==="both"||o==="distribute")&&n.push("text-align:justify"),e&&C(e,"bidi")&&n.push("direction:rtl");const r=this.runsOf(t),c=n.length?` style="${n.join(";")}"`:"";return`<${s}${c}>${r||"<br>"}</${s}>`}runsOf(t){let e="";for(const i of Array.from(t.children))if(i.localName==="r")e+=this.convertRun(i);else if(i.localName==="hyperlink"){let s=this.rels.get(w(i,"id"))||"";const l=w(i,"anchor");!s&&l&&(s="#"+l);const n=this.runsOf(i);e+=s?`<a href="${z(s)}">${n}</a>`:n}else(i.localName==="smartTag"||i.localName==="ins")&&(e+=this.runsOf(i));return e}convertRun(t){const e=C(t,"rPr");let i="";for(const d of Array.from(t.children))d.localName==="t"?i+=z(d.textContent||""):d.localName==="br"||d.localName==="cr"?i+="<br>":d.localName==="tab"?i+=" ":(d.localName==="drawing"||d.localName==="pict"||d.localName==="object")&&(i+=this.convertImage(d));if(!i)return"";const s=[],l=w(e?C(e,"color"):null);l&&l!=="auto"&&s.push("color:#"+l);const n=w(e?C(e,"highlight"):null);n&&W[n]&&s.push("background-color:"+W[n]);const o=parseFloat(w(e?C(e,"sz"):null));o&&s.push("font-size:"+Math.round(o/2*(4/3))+"px");const r=e?C(e,"rFonts"):null,c=w(r,"ascii")||w(r,"cs");c&&s.push(`font-family:'${c}'`),s.length&&(i=`<span style="${s.join(";")}">${i}</span>`),k(e,"b")&&(i=`<strong>${i}</strong>`),k(e,"i")&&(i=`<em>${i}</em>`),k(e,"u")&&w(C(e,"u"))!=="none"&&(i=`<u>${i}</u>`),k(e,"strike")&&(i=`<s>${i}</s>`);const h=w(e?C(e,"vertAlign"):null);return h==="superscript"?i=`<sup>${i}</sup>`:h==="subscript"&&(i=`<sub>${i}</sub>`),i}convertImage(t){let e="",i=0;const s=o=>{if(o.localName==="blip"&&(e=e||w(o,"embed")||w(o,"link")),o.localName==="imagedata"&&(e=e||w(o,"id")),o.localName==="extent"){const r=parseFloat(o.getAttribute("cx")||"0");r&&(i=Math.round(r/9525))}for(const r of Array.from(o.children))s(r)};if(s(t),!e)return"";const l=this.images.get(e);if(!l)return"";const n=i?` width="${i}"`:"";return`<img src="${l}" alt=""${n}>`}convertTable(t){let e='<table style="border-collapse:collapse;width:100%"><tbody>';for(const i of A(t,"tr")){e+="<tr>";for(const s of A(i,"tc")){const l=parseInt(w(C(s,"tcPr","gridSpan"))||"1",10)||1,n=l>1?` colspan="${l}"`:"";let o="";for(const r of Array.from(s.children))r.localName==="p"?o+=this.convertPara(r):r.localName==="tbl"&&(o+=this.convertTable(r));e+=`<td style="border:1px solid #b9c2cc"${n}>${o||"<br>"}</td>`}e+="</tr>"}return e+"</tbody></table>"}}async function wt(p){const t=p instanceof ArrayBuffer?p:await p.arrayBuffer(),e=ft(t),i=new TextDecoder,s=async f=>{const v=e.get(f);return v?new DOMParser().parseFromString(i.decode(await $(t,v)),"application/xml"):null},l=await s("word/document.xml"),n=l==null?void 0:l.getElementsByTagName("*");let o=null;if(n){for(const f of Array.from(n))if(f.localName==="body"){o=f;break}}if(!o)throw new Error("word/document.xml missing or invalid");const r=new Map,c=new Map,h=await s("word/_rels/document.xml.rels");if(h)for(const f of Array.from(h.getElementsByTagName("*"))){if(f.localName!=="Relationship")continue;const v=f.getAttribute("Id")||"",y=f.getAttribute("Target")||"",T=f.getAttribute("Type")||"";/hyperlink/i.test(T)?r.set(v,y):/image/i.test(T)&&c.set(v,y)}const d=new Map;for(const[f,v]of c){const y=v.startsWith("/")?v.slice(1):"word/"+v.replace(/^\.\//,""),T=e.get(y);if(!T)continue;const S=(y.split(".").pop()||"").toLowerCase(),M=vt[S];if(M)try{d.set(f,`data:${M};base64,${bt(await $(t,T))}`)}catch{}}const m=new Map,g=await s("word/numbering.xml");if(g){const f=new Map,v=Array.from(g.getElementsByTagName("*"));for(const y of v){if(y.localName!=="abstractNum")continue;const T=w(y,"abstractNumId"),S=A(y,"lvl").find(x=>w(x,"ilvl")==="0")||A(y,"lvl")[0],M=S?w(C(S,"numFmt")):"";f.set(T,M==="bullet"?"ul":"ol")}for(const y of v){if(y.localName!=="num")continue;const T=w(y,"numId"),S=w(C(y,"abstractNumId"));m.set(T,f.get(S)||"ul")}}return new yt(r,d,m).convertBody(o)}const xt=["nw","ne","sw","se"],D=["img-left","img-right","img-top","img-center"],R={"img-left":"tplimgleft","img-right":"tplimgright","img-top":"tplimgtop","img-center":"tplimgcenter"},Ct={"img-left":a.tplleft,"img-right":a.tplright,"img-top":a.tpltop,"img-center":a.tplcenter},Z=class Z{constructor(t){this.lang="en",this.contentClass="fable-content-"+Z.instanceCounter++,this.contentStyleEl=null,this.savedRange=null,this.foreColor="#000000",this.backColor="#FACC15",this.openPop=null,this.openSubEl=null,this.popAnchor=null,this.dlgOvl=null,this.tblActive=null,this.tblCorner=null,this.tblColBars=[],this.tblCtx=null,this.tblCellMark=null,this.tblOpMark=null,this.tblOpMarkKind=null,this.imgActive=null,this.imgHandles=[],this.imgCtx=null,this.imgHideTimer=null,this.phActive=null,this.phCtx=null,this.phUploadTarget=null,this.selCtx=null,this.tplActive=null,this.tplCtx=null,this.revisions=[],this.revTimer=null,this.draftTimer=null,this.draftStorageKey="",this.listeners=[],this.isDestroyed=!1,this.options={target:t.target,language:t.language||"en",height:t.height??302,initialContent:t.initialContent??"<p><br></p>",onChange:t.onChange||(()=>{}),onReady:t.onReady||(()=>{}),menubar:t.menubar??!0,toolbar:t.toolbar??!0,statusbar:t.statusbar??!0,readonly:t.readonly??!1,draftKey:t.draftKey??(typeof location<"u"?location.pathname:"default"),fontFamilyFormats:t.fontFamilyFormats??j,imageFileTypes:t.imageFileTypes??["image/jpeg","image/jpg","image/png","image/gif","image/bmp","image/webp"]},this.imageUploadHandler=t.imageUploadHandler,this.onImageUploadError=t.onImageUploadError,this.contentStyle=t.contentStyle,this.lang=this.options.language,this.draftStorageKey="tmclone-draft:"+this.options.draftKey,this.initDOM(),this.bindEvents(),this.initUI(),this.recordRevision(),this.options.onReady(this)}t(t){const e=q(this.lang)[t];return typeof e=="string"?e:e.join(",")}tArr(t){return q(this.lang)[t]}dir(){return q(this.lang).dir}initDOM(){const t=this.options.target;t.innerHTML="",t.classList.add("tox-root"),this.shell=document.createElement("div"),this.shell.className="tox",this.menubar=document.createElement("div"),this.menubar.className="mnb",this.toolbar=document.createElement("div"),this.toolbar.className="tbr",this.ed=document.createElement("div"),this.ed.className="earea "+this.contentClass,this.ed.setAttribute("contenteditable",(!this.options.readonly).toString()),this.ed.spellcheck=!0,this.ed.innerHTML=this.options.initialContent,this.ed.style.height=this.options.height+"px",this.statusbar=document.createElement("div"),this.statusbar.className="sbar",this.statusbar.innerHTML=`
|
|
2
2
|
<span class="mid"></span>
|
|
3
3
|
<span class="words"></span>
|
|
4
4
|
<span class="grip">
|
|
5
5
|
<svg viewBox="0 0 12 12"><path d="M11 1 1 11M11 6 6 11M11 11h0"/></svg>
|
|
6
6
|
</span>
|
|
7
|
-
`,this.sbHelp=this.statusbar.querySelector(".mid"),this.sbWords=this.statusbar.querySelector(".words");const e=this.statusbar.querySelector(".grip");this.bindGrip(e),this.shell.appendChild(this.menubar),this.shell.appendChild(this.toolbar),this.shell.appendChild(this.ed),this.shell.appendChild(this.statusbar),this.contentStyle&&(this.contentStyleEl=document.createElement("style"),this.contentStyleEl.textContent=this.scopeContentStyle(this.contentStyle),this.shell.appendChild(this.contentStyleEl)),t.appendChild(this.shell),this.options.statusbar||(this.statusbar.style.display="none"),this.imgInput=document.createElement("input"),this.imgInput.type="file",this.imgInput.accept=this.options.imageFileTypes.join(","),this.imgInput.style.display="none",t.appendChild(this.imgInput),this.docInput=document.createElement("input"),this.docInput.type="file",this.docInput.accept=".docx,application/vnd.openxmlformats-officedocument.wordprocessingml.document",this.docInput.style.display="none",t.appendChild(this.docInput)}scopeContentStyle(t){return t.replace(/\bbody\b/g,"."+this.contentClass)}bindGrip(t){let e=0,i=0;const s=l=>{e=l.clientY,i=this.ed.offsetHeight,l.preventDefault();const n=r=>{this.ed.style.height=Math.max(120,i+r.clientY-e)+"px"},o=()=>{window.removeEventListener("mousemove",n),window.removeEventListener("mouseup",o)};window.addEventListener("mousemove",n),window.addEventListener("mouseup",o)};t.addEventListener("mousedown",s),this.listeners.push(()=>t.removeEventListener("mousedown",s))}bindEvents(){this.onDoc("mousedown",t=>{this.openPop&&!this.openPop.contains(t.target)&&!this.popAnchor.contains(t.target)&&!(this.openSubEl&&this.openSubEl.contains(t.target))&&this.closePop()}),this.onDoc("keydown",t=>{t.key==="Escape"&&(this.closePop(),this.closeDlg())}),this.onDoc("selectionchange",()=>{const t=window.getSelection();t&&this.ed.contains(t.anchorNode)?(this.saveSel(),this.refreshState(),this.updateSelToolbar(t),this.positionCellMarker()):this.clearSelToolbar()}),this.on(this.ed,"input",()=>{this.refreshState(),this.onChange(),this.positionTableHandles(),this.positionImageHandles(),this.positionImgPhCtx()}),this.on(this.ed,"keydown",t=>{t.altKey&&t.key==="0"&&(t.preventDefault(),this.helpDlg())}),this.on(this.ed,"paste",t=>this.handlePaste(t)),this.on(this.ed,"drop",t=>{var s,l,n;t.preventDefault();const e=(l=(s=t.target).closest)==null?void 0:l.call(s,".img-ph");if(!e||!this.ed.contains(e)||this.options.readonly)return;const i=Array.from(((n=t.dataTransfer)==null?void 0:n.files)||[]).find(o=>o.type.startsWith("image/"));i&&this.readImageFileInto(i,e)}),this.on(this.ed,"dragover",t=>t.preventDefault()),this.on(this.ed,"mousedown",t=>{var n,o,r;const e=t.target,i=(n=e.closest)==null?void 0:n.call(e,"table");i&&this.ed.contains(i)?this.selectTableForResize(i):this.clearTableHandles();const s=(o=e.closest)==null?void 0:o.call(e,".img-ph");s&&this.ed.contains(s)&&!this.options.readonly?(t.preventDefault(),this.selectImgPlaceholder(s)):this.clearImgPlaceholderSel();const l=(r=e.closest)==null?void 0:r.call(e,"img");l&&this.ed.contains(l)&&!this.options.readonly?(t.preventDefault(),this.selectImage(l)):this.clearImageHandles()}),this.on(this.ed,"mouseover",t=>{var i,s;if(this.options.readonly)return;const e=(s=(i=t.target).closest)==null?void 0:s.call(i,"img");e&&this.ed.contains(e)&&(this.cancelImgHide(),this.selectImage(e))}),this.on(this.ed,"mouseout",t=>{var s,l,n,o;const e=(l=(s=t.target).closest)==null?void 0:l.call(s,"img");if(!e)return;const i=t.relatedTarget;i&&((n=this.imgCtx)!=null&&n.contains(i)||this.imgHandles.some(r=>r.contains(i))||((o=i.closest)==null?void 0:o.call(i,"img"))===e)||this.scheduleImgHide()}),this.on(this.ed,"scroll",()=>{this.positionTableHandles(),this.positionImageHandles(),this.positionImgPhCtx()}),this.onWin("scroll",()=>{this.positionTableHandles(),this.positionImageHandles(),this.positionImgPhCtx(),this.repositionSelToolbar()},!0),this.onWin("resize",()=>{this.positionTableHandles(),this.positionImageHandles(),this.positionImgPhCtx(),this.repositionSelToolbar()}),this.on(this.imgInput,"change",()=>{var s;const t=(s=this.imgInput.files)==null?void 0:s[0];if(!t)return;const e=this.phUploadTarget;if(this.phUploadTarget=null,e&&this.ed.contains(e)){this.readImageFileInto(t,e);return}const i=new FileReader;i.onload=()=>{this.restoreSel(),document.execCommand("insertHTML",!1,`<img src="${i.result}" title="${t.name.replace(/"/g,"")}" alt="">`),this.onChange()},i.readAsDataURL(t)}),this.on(this.docInput,"change",()=>{var e;const t=(e=this.docInput.files)==null?void 0:e[0];t&&this.importWordFile(t).catch(()=>alert(this.t("importfail")))}),this.onDoc("mousedown",t=>{this.ed.contains(t.target)||t.target===this.tblCorner||this.tblColBars.includes(t.target)||this.tblCtx&&this.tblCtx.contains(t.target)||this.imgHandles.includes(t.target)||this.imgCtx&&this.imgCtx.contains(t.target)||this.phCtx&&this.phCtx.contains(t.target)||this.selCtx&&this.selCtx.contains(t.target)||this.openPop&&this.openPop.contains(t.target)||this.openSubEl&&this.openSubEl.contains(t.target)||(this.clearTableHandles(),this.clearImageHandles(),this.clearImgPlaceholderSel(),this.clearSelToolbar())})}on(t,e,i){t.addEventListener(e,i),this.listeners.push(()=>t.removeEventListener(e,i))}onDoc(t,e){document.addEventListener(t,e),this.listeners.push(()=>document.removeEventListener(t,e))}onWin(t,e,i){window.addEventListener(t,e,i),this.listeners.push(()=>window.removeEventListener(t,e,i))}getContent(){return this.ed.innerHTML}setContent(t){this.ed.innerHTML=t||"<p><br></p>",this.refreshState(),this.clearTableHandles(),this.clearImageHandles(),this.clearImgPlaceholderSel(),this.clearSelToolbar(),this.onChange()}insertContent(t){this.restoreSel(),document.execCommand("insertHTML",!1,t),this.saveSel(),this.refreshState(),this.onChange()}setLanguage(t){this.lang=t,this.initUI()}focus(){this.ed.focus()}async importWordFile(t){const e=await vt(t);this.recordRevision(),this.setContent(e),this.recordRevision()}restoreDraft(){let t=null;try{t=localStorage.getItem(this.draftStorageKey)}catch{}if(!t)return!1;try{const e=JSON.parse(t);return e.html?(this.recordRevision(),this.setContent(e.html),!0):!1}catch{return!1}}getRevisions(){return this.revisions.slice()}destroy(){this.isDestroyed||(this.isDestroyed=!0,this.revTimer!=null&&window.clearTimeout(this.revTimer),this.draftTimer!=null&&window.clearTimeout(this.draftTimer),this.closePop(),this.closeDlg(),this.clearTableHandles(),this.clearImageHandles(),this.clearImgPlaceholderSel(),this.clearSelToolbar(),this.listeners.forEach(t=>t()),this.listeners=[],this.shell&&this.shell.parentNode&&this.shell.parentNode.removeChild(this.shell),this.imgInput&&this.imgInput.parentNode&&this.imgInput.parentNode.removeChild(this.imgInput),this.docInput&&this.docInput.parentNode&&this.docInput.parentNode.removeChild(this.docInput),this.contentStyleEl=null)}saveSel(){const t=window.getSelection();t&&t.rangeCount&&this.ed.contains(t.anchorNode)&&(this.savedRange=t.getRangeAt(0).cloneRange())}restoreSel(){if(!this.savedRange){this.ed.focus();return}this.ed.focus();const t=window.getSelection();t&&(t.removeAllRanges(),t.addRange(this.savedRange))}exec(t,e){this.restoreSel(),document.execCommand("styleWithCSS",!1,t!=="fontSize"?"true":"false"),document.execCommand(t,!1,e??void 0),this.saveSel(),this.refreshState(),this.onChange()}closestBlock(t){for(;t&&t!==this.ed;){if(t.nodeType===1&&/^(P|DIV|H[1-6]|LI|PRE|BLOCKQUOTE|TD|TH)$/i.test(t.tagName))return t;t=t.parentNode}return null}selectedBlocks(){const t=window.getSelection();if(!t||!t.rangeCount||!this.ed.contains(t.anchorNode))return[];const e=t.getRangeAt(0),i=Array.from(this.ed.querySelectorAll("p,h1,h2,h3,h4,h5,h6,li,pre,blockquote,td,th")).filter(s=>e.intersectsNode(s));if(!i.length){const s=this.closestBlock(t.anchorNode);if(s)return[s]}return i}onChange(){this.options.onChange(this.ed.innerHTML),this.scheduleRevision(),this.scheduleDraftSave()}recordRevision(){const t=this.ed.innerHTML,e=this.revisions[this.revisions.length-1];e&&e.html===t||(this.revisions.push({time:Date.now(),html:t}),this.revisions.length>30&&this.revisions.shift())}scheduleRevision(){this.revTimer!=null&&window.clearTimeout(this.revTimer),this.revTimer=window.setTimeout(()=>{this.revTimer=null,this.recordRevision()},1500)}scheduleDraftSave(){this.draftTimer!=null&&window.clearTimeout(this.draftTimer),this.draftTimer=window.setTimeout(()=>{this.draftTimer=null;try{localStorage.setItem(this.draftStorageKey,JSON.stringify({time:Date.now(),html:this.ed.innerHTML}))}catch{}},800)}revisionDlg(){this.recordRevision(),this.dialog(this.t("revhistory"),t=>{if(!this.revisions.length){t.innerHTML=`<p style="color:#556">${this.t("revempty")}</p>`;return}const e=document.createElement("div");e.className="revwrap";const i=document.createElement("div");i.className="revlist";const s=document.createElement("div");s.className="revprev";const l=document.createElement("button");l.type="button",l.className="revrestore",l.textContent=this.t("restore");let n=this.revisions.length-1;const o=new Intl.DateTimeFormat(this.lang==="ar"?"ar-AE":"en-GB",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"}),r={},c=h=>{n=h,this.revisions.forEach((d,m)=>{var g;return(g=r[m])==null?void 0:g.classList.toggle("on",m===h)}),s.innerHTML=this.revisions[h].html,l.disabled=h===this.revisions.length-1};for(let h=this.revisions.length-1;h>=0;h--){const d=this.revisions[h],m=document.createElement("button");m.type="button";const g=(new DOMParser().parseFromString(d.html,"text/html").body.textContent||"").trim(),f=g?g.split(/\s+/).length:0,b=h===this.revisions.length-1;m.innerHTML=`<span>${b?this.t("currentver"):o.format(new Date(d.time))}</span><span class="wc">${f} ${this.t("words")}</span>`,m.addEventListener("click",()=>c(h)),r[h]=m,i.appendChild(m)}i.append(l),l.addEventListener("click",()=>{const h=this.revisions[n];h&&(this.recordRevision(),this.setContent(h.html),this.recordRevision(),this.closeDlg())}),e.append(i,s),t.appendChild(e),c(n)})}closeSub(){var t;(t=this.openSubEl)==null||t.remove(),this.openSubEl=null}closePop(){var t;this.closeSub(),this.openPop&&(this.openPop.remove(),this.openPop=null,(t=this.popAnchor)==null||t.classList.remove("open"),this.popAnchor=null,this.setOpTarget(null))}openSubFor(t,e){this.closeSub();const i=document.createElement("div");i.className="pop sub",i.dir=this.dir(),t.subBuild?t.subBuild(i):t.sub&&this.menuItems(i,t.sub),i.addEventListener("mousedown",r=>{r.target.tagName!=="INPUT"&&r.preventDefault()}),document.body.appendChild(i);const s=e.getBoundingClientRect();let n=this.dir()==="rtl"?s.left-i.offsetWidth+2:s.right-2;n=Math.max(8,Math.min(n+scrollX,scrollX+innerWidth-i.offsetWidth-8));let o=s.top+scrollY-6;o=Math.max(8+scrollY,Math.min(o,scrollY+innerHeight-i.offsetHeight-8)),i.style.left=n+"px",i.style.top=o+"px",this.openSubEl=i}popup(t,e){if(this.openPop&&this.popAnchor===t){this.closePop();return}this.closePop();const i=document.createElement("div");i.className="pop",i.dir=this.dir(),e(i),document.body.appendChild(i);const s=t.getBoundingClientRect();i.style.minWidth=Math.max(160,Math.round(s.width))+"px",i.style.top=s.bottom+scrollY+2+"px";let n=this.dir()==="rtl"?s.right-i.offsetWidth:s.left;n=Math.max(8,Math.min(n+scrollX,scrollX+innerWidth-i.offsetWidth-8)),i.style.left=n+"px",i.addEventListener("mousedown",o=>{o.target.tagName!=="INPUT"&&o.preventDefault()}),this.openPop=i,this.popAnchor=t,t.classList.add("open")}menuItems(t,e){e.forEach(i=>{if(i==="|"){t.insertAdjacentHTML("beforeend",'<div class="sep"></div>');return}const s=!!(i.sub||i.subBuild),l=document.createElement("button");l.className="mi"+(i.on?" on":""),l.innerHTML=`<span class="ic">${i.icon||""}</span><span class="prev" ${i.previewStyle?`style="${i.previewStyle}"`:""}>${i.label}</span>${i.shortcut?`<span class="sc">${i.shortcut}</span>`:""}${s?`<span class="subarrow">${a.chev}</span>`:""}`,l.addEventListener("click",()=>{i.action&&(this.closePop(),i.action())}),l.addEventListener("mouseenter",()=>{var n;s?this.openSubFor(i,l):this.openSubEl&&t!==this.openSubEl&&this.closeSub(),(n=i.hover)==null||n.call(i,!0)}),l.addEventListener("mouseleave",()=>{var n;return(n=i.hover)==null?void 0:n.call(i,!1)}),t.appendChild(l)})}tbtn(t,e,i,s){const l=document.createElement("button");return l.className="tbtn",l.type="button",l.title=e,l.innerHTML=t,s&&(l.dataset.id=s),l.addEventListener("mousedown",n=>n.preventDefault()),l.addEventListener("click",i),l}stepBtn(t){const e=t>0?"+":"−",i=t>0?a.fontsizeup:a.fontsizedown,s=this.tbtn(i,this.t("fontsize")+" "+e,()=>this.stepFontSize(t));return s.addEventListener("mousedown",()=>this.saveSel()),s}menuTbtn(t,e,i,s){const l=this.tbtn(t,e,()=>i(l),s);return l.classList.add("hasmenu"),l.insertAdjacentHTML("beforeend",a.chev),l.addEventListener("mousedown",()=>this.saveSel()),l}colorChips(){const t=s=>{const l=document.createElement("button");return l.type="button",l.className="cchip",l.title=s,l.addEventListener("mousedown",n=>{n.preventDefault(),this.saveSel()}),l},e=it.map(s=>{const l=t(this.t("forecolor"));return l.style.background=s,l.addEventListener("click",()=>this.applyColor("fore",s)),l}),i=t(this.t("forecolor"));return i.classList.add("more"),i.dataset.cb="fore",i.innerHTML=a.chev,i.addEventListener("click",()=>this.colorMenu(i,"fore")),[...e,i]}group(...t){const e=document.createElement("div");return e.className="tgrp",t.forEach(i=>{i.classList.add("gbtn"),e.appendChild(i)}),e}tsel(t,e,i,s){const l=document.createElement("button");return l.className="tsel "+t,l.type="button",l.dataset.id=e,l.innerHTML=`<span class="lbl empty">${i||""}</span>${a.chev}`,l.addEventListener("mousedown",n=>{n.preventDefault(),this.saveSel()}),l.addEventListener("click",()=>s(l)),l}setListStyle(t,e){var l,n;this.restoreSel();const i=window.getSelection();if(!i)return;let s=(l=this.closestBlock(i.anchorNode))==null?void 0:l.closest(t);s||(this.exec(t==="ol"?"insertOrderedList":"insertUnorderedList"),s=(n=this.closestBlock(i.anchorNode))==null?void 0:n.closest(t)),s&&(s.style.listStyleType=e),this.saveSel(),this.onChange()}listMenu(t,e){var c;const i=e==="ol"?"insertOrderedList":"insertUnorderedList",s=e==="ol"?[["lower-alpha",a.ol_alpha],["lower-roman",a.ol_roman],["upper-alpha",a.ol_alphau],["upper-roman",a.ol_romanu]]:[["circle",a.ul_circle],["square",a.ul_square]],l=this.tArr(e==="ol"?"liststyles_ol":"liststyles_ul").slice(1),n=window.getSelection(),o=n?(c=this.closestBlock(n.anchorNode))==null?void 0:c.closest(e):null,r=o?o.style.listStyleType:"";this.popup(t,h=>{this.menuItems(h,[{label:this.t(e==="ol"?"numlist":"bullist"),icon:e==="ol"?a.numlist:a.bullist,on:document.queryCommandState(i),action:()=>this.exec(i)}]),h.insertAdjacentHTML("beforeend",'<div class="sep"></div>');const d=document.createElement("div");d.className="mi-grid",s.forEach(([m,g],f)=>{const b=document.createElement("button");b.className="mi"+(r===m?" on":""),b.innerHTML=`<span class="ic">${g}</span><span class="prev">${l[f]}</span>`,b.addEventListener("click",()=>{this.closePop(),this.setListStyle(e,m)}),d.appendChild(b)}),h.appendChild(d)})}colorMenu(t,e){this.popup(t,i=>{const s=document.createElement("div");s.className="cpal",j.forEach(d=>{const m=document.createElement("button");m.style.background=d,m.title=d,m.addEventListener("click",()=>{this.closePop(),this.applyColor(e,d)}),s.appendChild(m)}),i.appendChild(s),i.insertAdjacentHTML("beforeend",'<div class="sep"></div>');const l=document.createElement("div");l.className="cfoot";const n=document.createElement("div");n.className="cswatch cur",n.title=this.t("currentcolor");const o=e==="fore"?this.foreColor:this.backColor;n.style.background=/^#[0-9a-f]{6}$/i.test(o)?o:"#000000",n.innerHTML=a.check;const r=document.createElement("button");r.type="button",r.className="cswatch nocolor",r.title=this.t("removecolor"),r.addEventListener("click",()=>{this.closePop(),this.applyColor(e,null)});const c=document.createElement("label");c.className="cswatch cwheel",c.title=this.t("customcolor"),c.innerHTML=a.palette;const h=document.createElement("input");h.type="color",h.value=/^#[0-9a-f]{6}$/i.test(o)?o:"#000000",h.addEventListener("change",()=>{this.closePop(),this.applyColor(e,h.value)}),c.appendChild(h),l.append(n,r,c),i.appendChild(l)})}applyColor(t,e){t==="fore"?(this.foreColor=e||"#000000",this.exec("foreColor",e||"#000000")):(this.backColor=e||"transparent",this.exec("hiliteColor",e||"transparent")),this.syncColorSwatches(this.toolbar),this.selCtx&&this.syncColorSwatches(this.selCtx)}syncColorSwatches(t){t.querySelectorAll("[data-cb=fore]").forEach(e=>e.style.background=this.foreColor),t.querySelectorAll("[data-cb=back]").forEach(e=>e.style.background=this.backColor)}fontMenu(t){this.popup(t,e=>{this.menuItems(e,this.options.fontFamilyFormats.map(([i,s])=>({label:i,previewStyle:`font-family:${s}`,on:this.currentFont()===i,action:()=>this.exec("fontName",s)})))})}sizeMenu(t){this.popup(t,e=>{this.menuItems(e,U.map(i=>({label:i,on:this.currentSize()===i,action:()=>this.applyFontSize(i)})))})}ensureSizeTarget(){const t=window.getSelection();if(!t)return;if(!t.rangeCount){const n=document.createRange();n.selectNodeContents(this.ed),n.collapse(!0),t.addRange(n)}if(!t.isCollapsed)return;const e=t.getRangeAt(0),i=e.startContainer;if(i.nodeType===3){const n=i.data;let o=e.startOffset,r=e.startOffset;for(;o>0&&/\S/.test(n[o-1]);)o--;for(;r<n.length&&/\S/.test(n[r]);)r++;if(r>o){const c=document.createRange();c.setStart(i,o),c.setEnd(i,r),t.removeAllRanges(),t.addRange(c),this.savedRange=c.cloneRange();return}}const s=document.createTextNode("");e.insertNode(s);const l=document.createRange();l.setStart(s,0),l.setEnd(s,1),t.removeAllRanges(),t.addRange(l),this.savedRange=l.cloneRange()}applyFontSize(t){this.restoreSel(),this.ensureSizeTarget(),document.execCommand("styleWithCSS",!1,"false"),document.execCommand("fontSize",!1,"7");const e=[];if(this.ed.querySelectorAll('font[size="7"]').forEach(i=>{const s=document.createElement("span");for(s.style.fontSize=t;i.firstChild;)s.appendChild(i.firstChild);i.replaceWith(s),e.push(s)}),e.length){const i=document.createRange();i.setStart(e[0],0),i.setEnd(e[e.length-1],e[e.length-1].childNodes.length);const s=window.getSelection();s&&(s.removeAllRanges(),s.addRange(i))}this.saveSel(),this.refreshState(),this.onChange()}stepFontSize(t){const e=parseInt(this.currentSize(),10)||14,i=Math.min(J,Math.max(V,e+t));i!==e&&this.applyFontSize(i+"px")}transformCase(t){this.restoreSel();const e=window.getSelection();if(!e||!e.rangeCount||e.isCollapsed)return;const i=e.getRangeAt(0),s=document.createTreeWalker(this.ed,NodeFilter.SHOW_TEXT),l=[];let n;for(;n=s.nextNode();)i.intersectsNode(n)&&l.push(n);l.forEach(o=>{const r=o===i.startContainer?i.startOffset:0,c=o===i.endContainer?i.endOffset:o.data.length;if(c<=r)return;const h=o.data.slice(r,c);let d=h;t==="lower"?d=h.toLowerCase():t==="upper"?d=h.toUpperCase():d=h.replace(/(^|\s)(\S)/g,(m,g,f)=>g+f.toUpperCase()),o.replaceData(r,c-r,d)}),this.saveSel(),this.refreshState(),this.onChange()}caseMenu(t){this.popup(t,e=>{this.menuItems(e,[{label:this.t("lowercase"),icon:a.lowercaseic,action:()=>this.transformCase("lower")},{label:this.t("uppercase"),icon:a.uppercaseic,action:()=>this.transformCase("upper")},{label:this.t("capitalize"),icon:a.capitalizeic,action:()=>this.transformCase("capitalize")}])})}applyBlockStyle(t,e){this.restoreSel(),this.selectedBlocks().forEach(s=>{e?s.style[t]=e:s.style.removeProperty(t==="lineHeight"?"line-height":"word-spacing")}),this.saveSel(),this.onChange()}currentBlockStyle(t){const e=window.getSelection(),i=e?this.closestBlock(e.anchorNode):null;return i&&i.style[t]||""}lineHeightMenu(t){const e=this.currentBlockStyle("lineHeight");this.popup(t,i=>{this.menuItems(i,[{label:this.t("normal"),on:!e,action:()=>this.applyBlockStyle("lineHeight","")},...tt.map(s=>({label:s,on:e===s,action:()=>this.applyBlockStyle("lineHeight",s)}))])})}wordSpacingMenu(t){const e=this.currentBlockStyle("wordSpacing");this.popup(t,i=>{this.menuItems(i,[{label:this.t("normal"),on:!e,action:()=>this.applyBlockStyle("wordSpacing","")},...et.map(s=>({label:s,on:e===s,action:()=>this.applyBlockStyle("wordSpacing",s)}))])})}closestAnchor(){const t=window.getSelection();let e=t&&this.ed.contains(t.anchorNode)?t.anchorNode:null;for(;e&&e!==this.ed;){if(e.nodeType===1&&e.tagName==="A")return e;e=e.parentNode}return null}linkDlg(){this.saveSel();const t=this.closestAnchor();let e;const i=[];t&&i.push({label:this.t("unlink"),action:()=>{const s=document.createRange();s.selectNodeContents(t);const l=window.getSelection();l&&(l.removeAllRanges(),l.addRange(s)),document.execCommand("unlink"),this.closeDlg(),this.onChange()}}),i.push({label:this.t("cancel"),action:()=>this.closeDlg()},{label:this.t("save"),primary:!0,action:()=>{const s=e.value.trim();if(this.closeDlg(),!s)return;if(t){t.setAttribute("href",s),this.onChange();return}this.restoreSel();const l=window.getSelection();!l||l.isCollapsed?document.execCommand("insertHTML",!1,`<a href="${s.replace(/"/g,""")}">${s.replace(/&/g,"&").replace(/</g,"<")}</a>`):(document.execCommand("styleWithCSS",!1,"false"),document.execCommand("createLink",!1,s)),this.saveSel(),this.onChange()}}),this.dialog(this.t("linkttl"),s=>{const l=document.createElement("div");l.style.cssText="display:flex;align-items:center;gap:10px;margin:10px 0;min-width:360px";const n=document.createElement("span");n.style.cssText="width:60px;color:#556;flex:none",n.textContent=this.t("linkurl"),e=document.createElement("input"),e.type="url",e.placeholder="https://",e.style.cssText="flex:1;border:1px solid #cfd6df;border-radius:6px;padding:7px 9px;font:14px inherit",e.value=(t==null?void 0:t.getAttribute("href"))||"",l.append(n,e),s.appendChild(l),setTimeout(()=>e.focus(),0)},i)}blocksMenu(t){this.popup(t,e=>{this.menuItems(e,D.map(([i,s])=>({label:this.blockLabel(i),previewStyle:i.startsWith("h")?`font-weight:700;font-size:${22-2*+i[1]}px`:i==="pre"?"font-family:monospace":"",on:this.currentBlock()===i,action:()=>this.exec("formatBlock","<"+i+">")})))})}blockLabel(t){return t==="p"?this.t("para"):t==="pre"?this.t("pre"):this.t("heading")+" "+t[1]}tableGrid(t,e){this.popup(t,i=>this.buildTableGridInto(i,e))}buildTableGridInto(t,e){{const i=document.createElement("div");i.className="tgridwrap";const s=document.createElement("div");s.className="tgrid";const l=document.createElement("div");l.className="tgridlbl",l.textContent="1 × 1";const n=[];for(let o=0;o<8;o++)for(let r=0;r<10;r++){const c=document.createElement("span");c.dataset.r=String(o),c.dataset.c=String(r),c.addEventListener("mouseenter",()=>{n.forEach(h=>h.classList.toggle("hot",+h.dataset.r<=o&&+h.dataset.c<=r)),l.textContent=r+1+" × "+(o+1)}),c.addEventListener("click",()=>{this.closePop(),this.insertTable(o+1,r+1),e==null||e()}),n.push(c),s.appendChild(c)}i.append(s,l),t.appendChild(i)}}insertTable(t,e){this.restoreSel();let i='<table style="border-collapse:collapse;width:100%;table-layout:fixed"><tbody>';for(let s=0;s<t;s++){i+="<tr>";for(let l=0;l<e;l++)i+='<td style="border:1px solid #b9c2cc"><br></td>';i+="</tr>"}i+="</tbody></table><p><br></p>",document.execCommand("insertHTML",!1,i),this.saveSel(),this.onChange()}setDir(t){this.restoreSel();const e=this.selectedBlocks();e.length?e.forEach(i=>i.setAttribute("dir",t)):this.ed.setAttribute("dir",t),this.saveSel(),this.refreshState(),this.onChange()}parseToolbarString(t){return t.split("|").map(e=>e.trim().split(/\s+/).filter(Boolean)).filter(e=>e.length>0)}buildToolbarRegistry(){const t=this.tbtn(a.tableic,this.t("quicktable"),()=>this.tableGrid(t));return{undo:()=>this.tbtn(a.undo,this.t("undo"),()=>this.exec("undo")),redo:()=>this.tbtn(a.redo,this.t("redo"),()=>this.exec("redo")),preview:()=>this.tbtn(a.prevw,this.t("preview"),()=>this.previewDlg()),print:()=>this.tbtn(a.printic,this.t("print"),()=>this.printDoc()),importword:()=>this.tbtn(a.wordic,this.t("importword"),()=>this.pickWordDoc()),revhistory:()=>this.tbtn(a.historyic,this.t("revhistory"),()=>this.revisionDlg()),fontfamily:()=>this.tsel("w-font","fontsel","",e=>this.fontMenu(e)),fontsize:()=>this.tsel("w-size","sizesel","",e=>this.sizeMenu(e)),fontsizeincrease:()=>this.stepBtn(1),fontsizedecrease:()=>this.stepBtn(-1),bold:()=>this.tbtn(a.bold,this.t("bold"),()=>this.exec("bold"),"bold"),italic:()=>this.tbtn(a.italic,this.t("italic"),()=>this.exec("italic"),"italic"),underline:()=>this.tbtn(a.underline,this.t("underline"),()=>this.exec("underline"),"underline"),strikethrough:()=>this.tbtn(a.strikethrough,this.t("strikethrough"),()=>this.exec("strikeThrough"),"strikeThrough"),forecolor:()=>this.colorChips(),backcolor:()=>this.menuTbtn(a.backcolor+'<span class="colorbar" data-cb="back"></span>',this.t("backcolor"),e=>this.colorMenu(e,"back")),alignleft:()=>this.tbtn(a.alignleft,this.t("alignleft"),()=>this.exec("justifyLeft"),"justifyLeft"),aligncenter:()=>this.tbtn(a.aligncenter,this.t("aligncenter"),()=>this.exec("justifyCenter"),"justifyCenter"),alignright:()=>this.tbtn(a.alignright,this.t("alignright"),()=>this.exec("justifyRight"),"justifyRight"),alignjustify:()=>this.tbtn(a.alignjustify,this.t("alignjustify"),()=>this.exec("justifyFull"),"justifyFull"),bullist:()=>this.menuTbtn(a.bullist,this.t("bullist"),e=>this.listMenu(e,"ul"),"insertUnorderedList"),numlist:()=>this.menuTbtn(a.numlist,this.t("numlist"),e=>this.listMenu(e,"ol"),"insertOrderedList"),outdent:()=>this.tbtn(a.outdent,this.t("outdent"),()=>this.exec("outdent")),indent:()=>this.tbtn(a.indent,this.t("indent"),()=>this.exec("indent")),link:()=>this.tbtn(a.link,this.t("linkttl"),()=>this.linkDlg()),blockquote:()=>this.tbtn(a.quote,this.t("quote"),()=>this.toggleBlock("blockquote"),"blockquote"),changecase:()=>this.menuTbtn(a.caseic,this.t("changecase"),e=>this.caseMenu(e)),lineheight:()=>this.menuTbtn(a.lineheight,this.t("lineheight"),e=>this.lineHeightMenu(e)),wordspacing:()=>this.menuTbtn(a.wordspacing,this.t("wordspacing"),e=>this.wordSpacingMenu(e)),removeformat:()=>this.tbtn(a.clearformatic,this.t("removeformat"),()=>this.exec("removeFormat")),blocks:()=>this.tsel("w-block","blocksel",this.t("para"),e=>this.blocksMenu(e)),ltr:()=>this.tbtn(a.ltr,this.t("ltr"),()=>this.setDir("ltr"),"ltr"),rtl:()=>this.tbtn(a.rtl,this.t("rtl"),()=>this.setDir("rtl"),"rtl"),quickimage:()=>this.tbtn(a.image,this.t("quickimage"),()=>this.insertImagePlaceholder()),quicktable:()=>t,charmap:()=>this.tbtn(a.charic,this.t("charmap"),()=>this.charMap()),fullscreen:()=>this.tbtn(a.fullscreen,this.t("fullscreen"),()=>this.toggleFullscreen(),"fullscreen"),sourcecode:()=>this.tbtn(a.srcic,this.t("sourcecode"),()=>this.sourceDlg())}}buildToolbar(){this.toolbar.innerHTML="";const t=this.options.toolbar===!0?Y:this.options.toolbar,e=this.buildToolbarRegistry();this.parseToolbarString(t).forEach(i=>{const s=[];i.forEach(l=>{const n=e[l];if(!n){console.warn(`FableEditor: unknown toolbar item "${l}"`);return}const o=n();Array.isArray(o)?s.push(...o):s.push(o)}),s.length&&this.toolbar.appendChild(this.group(...s))}),this.syncColorSwatches(this.toolbar)}mItem(t,e,i,s){return{label:this.t(t),icon:e,action:i,shortcut:s}}buildMenubar(){this.menubar.innerHTML="";const t={file:[this.mItem("newdoc",a.newic,()=>{this.recordRevision(),this.ed.innerHTML="<p><br></p>",this.onChange()}),"|",this.mItem("importword",a.wordic,()=>this.pickWordDoc()),this.mItem("restoredraft",a.draftic,()=>{this.restoreDraft()||alert(this.t("draftempty"))}),this.mItem("revhistory",a.historyic,()=>this.revisionDlg()),"|",this.mItem("preview",a.prevw,()=>this.previewDlg()),this.mItem("print",a.printic,()=>this.printDoc(),"Ctrl+P")],edit:[this.mItem("undo",a.undo,()=>this.exec("undo"),"Ctrl+Z"),this.mItem("redo",a.redo,()=>this.exec("redo"),"Ctrl+Y"),"|",this.mItem("cut",a.cutic,()=>this.exec("cut"),"Ctrl+X"),this.mItem("copy",a.copyic,()=>this.exec("copy"),"Ctrl+C"),this.mItem("paste",a.pasteic,()=>alert(this.t("pastehint")),"Ctrl+V"),"|",this.mItem("selectall",a.selall,()=>this.exec("selectAll"),"Ctrl+A")],view:[this.mItem("fullscreen",a.fullscreen,()=>this.toggleFullscreen()),this.mItem("preview",a.prevw,()=>this.previewDlg()),this.mItem("sourcecode",a.srcic,()=>this.sourceDlg())],insert:[this.mItem("link",a.link,()=>this.linkDlg()),this.mItem("image",a.image,()=>this.insertImagePlaceholder()),{label:this.t("inserttable"),icon:a.tableic,action:()=>this.tableGrid(this.menubar.querySelector('[data-menu-key="table"]')||this.menubar)},this.mItem("hr",a.hric,()=>this.exec("insertHorizontalRule")),"|",this.mItem("charmap",a.charic,()=>this.charMap()),this.mItem("datetime",a.dateic,()=>this.exec("insertText",new Date().toLocaleString(this.lang==="ar"?"ar-AE":"en-GB"))),"|",{label:this.t("pagebreak"),icon:a.pbic,action:()=>{this.restoreSel(),document.execCommand("insertHTML",!1,'<hr class="pagebreak"><p><br></p>'),this.onChange()}},this.mItem("nbsp",a.nbspic,()=>this.exec("insertText"," "))],format:[this.mItem("bold",a.bold,()=>this.exec("bold"),"Ctrl+B"),this.mItem("italic",a.italic,()=>this.exec("italic"),"Ctrl+I"),this.mItem("underline",a.underline,()=>this.exec("underline"),"Ctrl+U"),this.mItem("strikethrough",a.strikethrough,()=>this.exec("strikeThrough")),this.mItem("superscript",a.superscriptic,()=>this.exec("superscript")),this.mItem("subscript",a.subscriptic,()=>this.exec("subscript")),"|",this.mItem("lowercase",a.lowercaseic,()=>this.transformCase("lower")),this.mItem("uppercase",a.uppercaseic,()=>this.transformCase("upper")),this.mItem("capitalize",a.capitalizeic,()=>this.transformCase("capitalize")),"|",this.mItem("clearformat",a.clearformatic,()=>this.exec("removeFormat"))],tools:[this.mItem("sourcecode",a.srcic,()=>this.sourceDlg()),this.mItem("wordcount",a.wcic,()=>this.wordCountDlg())],table:[{label:this.t("inserttable"),icon:a.tableic,subBuild:s=>this.buildTableGridInto(s)},"|",{label:this.t("cell"),sub:[{label:this.t("cellprops"),icon:a.tableic,action:()=>this.cellPropsDlg()}]},{label:this.t("row"),sub:[{label:this.t("rowabove"),icon:a.rowbefore,action:()=>this.tableOp("rowabove"),hover:s=>this.setOpTarget(s?"row":null)},{label:this.t("rowbelow"),icon:a.rowafter,action:()=>this.tableOp("rowbelow"),hover:s=>this.setOpTarget(s?"row":null)},{label:this.t("delrow"),icon:a.rowdelete,action:()=>this.tableOp("delrow"),hover:s=>this.setOpTarget(s?"row":null)},"|",{label:this.t("rowprops"),icon:a.tableic,action:()=>this.rowPropsDlg(),hover:s=>this.setOpTarget(s?"row":null)}]},{label:this.t("column"),sub:[{label:this.t("colbefore"),icon:a.colbefore,action:()=>this.tableOp("colbefore"),hover:s=>this.setOpTarget(s?"col":null)},{label:this.t("colafter"),icon:a.colafter,action:()=>this.tableOp("colafter"),hover:s=>this.setOpTarget(s?"col":null)},{label:this.t("delcol"),icon:a.coldelete,action:()=>this.tableOp("delcol"),hover:s=>this.setOpTarget(s?"col":null)},"|",{label:this.t("colprops"),icon:a.tableic,action:()=>this.colPropsDlg(),hover:s=>this.setOpTarget(s?"col":null)}]},"|",{label:this.t("tablepropsttl"),icon:a.tableic,action:()=>{const s=this.currentCell();if(!s){alert(this.t("nocell"));return}this.tblActive=s.closest("table"),this.tablePropsDlg()}},{label:this.t("deltable"),icon:a.tabledelete,action:()=>this.tableOp("deltable")}],help:[this.mItem("helpttl",a.helpic,()=>this.helpDlg(),"Alt+0")]},e=this.options.menubar===!0?K:this.options.menubar,i=new Set;e.split(/\s+/).filter(Boolean).forEach(s=>{if(i.has(s))return;if(i.add(s),!t[s]){console.warn(`FableEditor: unknown menubar item "${s}"`);return}const l=document.createElement("button");l.type="button",l.textContent=this.t(s),l.dataset.menuKey=s,l.addEventListener("mousedown",n=>{n.preventDefault(),this.saveSel()}),l.addEventListener("click",()=>this.popup(l,n=>this.menuItems(n,t[s]))),this.menubar.appendChild(l)})}tableOp(t){var r,c,h;this.restoreSel();const e=window.getSelection();if(!e)return;const i=((r=this.closestBlock(e.anchorNode))==null?void 0:r.closest("td,th"))||(e.anchorNode&&e.anchorNode.nodeType===1?(h=(c=e.anchorNode).closest)==null?void 0:h.call(c,"td,th"):null);if(!i)return;const s=i.parentElement,l=i.closest("table"),n=Array.from(s.children).indexOf(i),o=()=>{const d=s.cloneNode(!1);return Array.from(s.children).forEach(m=>{const g=document.createElement("td"),f=m.getAttribute("style");f&&g.setAttribute("style",f),g.style.removeProperty("background-color"),g.innerHTML="<br>",d.appendChild(g)}),d};if(t==="rowabove"&&s.before(o()),t==="rowbelow"&&s.after(o()),t==="delrow"){const d=s.parentElement;s.remove(),d.querySelector("tr")||l.remove()}(t==="colbefore"||t==="colafter")&&l.querySelectorAll("tr").forEach(d=>{const m=d.children[Math.min(n,d.children.length-1)],g=document.createElement("td"),f=m.getAttribute("style");f&&g.setAttribute("style",f),g.style.removeProperty("width"),g.style.removeProperty("background-color"),g.innerHTML="<br>",t==="colbefore"?m.before(g):m.after(g)}),t==="delcol"&&(l.querySelectorAll("tr").forEach(d=>{var m;return(m=d.children[n])==null?void 0:m.remove()}),l.querySelector("td,th")||l.remove()),t==="deltable"&&l.remove(),this.onChange(),this.positionTableHandles()}applyTableProps(t,e){e.width?t.style.width=/^\d+$/.test(e.width)?e.width+"px":e.width:t.style.removeProperty("width");const i=Array.from(t.querySelectorAll("td,th"));e.cellpadding!==""?i.forEach(s=>s.style.padding=e.cellpadding+"px"):i.forEach(s=>s.style.removeProperty("padding")),e.cellspacing!==""?(t.style.borderCollapse="separate",t.style.borderSpacing=e.cellspacing+"px"):(t.style.borderCollapse="collapse",t.style.removeProperty("border-spacing")),e.border!==""&&+e.border>0?(t.style.border=e.border+"px solid #b9c2cc",i.forEach(s=>s.style.border=e.border+"px solid #b9c2cc")):(t.style.removeProperty("border"),i.forEach(s=>s.style.removeProperty("border"))),t.style.removeProperty("margin-left"),t.style.removeProperty("margin-right"),e.align==="center"?(t.style.marginLeft="auto",t.style.marginRight="auto"):e.align==="right"?(t.style.marginLeft="auto",t.style.marginRight="0"):e.align==="left"&&(t.style.marginLeft="0",t.style.marginRight="auto")}tablePropsDlg(){const t=this.tblActive;if(!t)return;let e,i,s,l,n;const o="display:flex;align-items:center;gap:10px;margin:10px 0",r="width:120px;color:#556;flex:none",c="flex:1;border:1px solid #cfd6df;border-radius:6px;padding:7px 9px;font:14px inherit",h=t.querySelector("td,th"),d=t.style.width||"",m=h&&h.style.padding?parseFloat(h.style.padding):"",g=t.style.borderSpacing?parseFloat(t.style.borderSpacing):"",f=t.style.borderWidth?parseFloat(t.style.borderWidth):"",b=t.style.marginLeft,v=t.style.marginRight,T=b==="auto"&&v==="auto"?"center":b==="auto"?"right":v==="auto"&&b==="0"?"left":"";this.dialog(this.t("tablepropsttl"),M=>{const S=(x,E)=>{const H=document.createElement("div");H.style.cssText=o;const B=document.createElement("span");B.style.cssText=r,B.textContent=this.t(x),H.append(B,E),M.appendChild(H)};e=document.createElement("input"),e.type="text",e.style.cssText=c,e.placeholder="e.g. 600px or 100%",e.value=d,S("tblwidth",e),i=document.createElement("input"),i.type="number",i.min="0",i.style.cssText=c,i.value=String(m),S("tblcellpadding",i),s=document.createElement("input"),s.type="number",s.min="0",s.style.cssText=c,s.value=String(g),S("tblcellspacing",s),l=document.createElement("input"),l.type="number",l.min="0",l.style.cssText=c,l.value=String(f),S("tblborder",l),n=document.createElement("select"),n.style.cssText=c,[["","alignnone"],["left","alignleft"],["center","aligncenter"],["right","alignright"]].forEach(([x,E])=>{const H=document.createElement("option");H.value=x,H.textContent=this.t(E),x===T&&(H.selected=!0),n.appendChild(H)}),S("tblalign",n)},[{label:this.t("cancel"),action:()=>this.closeDlg()},{label:this.t("save"),primary:!0,action:()=>{this.applyTableProps(t,{width:e.value.trim(),cellpadding:i.value.trim(),cellspacing:s.value.trim(),border:l.value.trim(),align:n.value}),this.closeDlg(),this.onChange(),this.positionTableHandles()}}])}currentCell(){let t=this.savedRange?this.savedRange.startContainer:null;if(!t||!this.ed.contains(t)){const e=window.getSelection();t=e&&this.ed.contains(e.anchorNode)?e.anchorNode:null}for(;t&&t!==this.ed;){if(t.nodeType===1&&/^(TD|TH)$/.test(t.tagName))return t;t=t.parentNode}return null}toHexColor(t){if(/^#[0-9a-fA-F]{6}$/.test(t))return t;const e=/rgba?\((\d+)[,\s]+(\d+)[,\s]+(\d+)/.exec(t);return e?"#"+[e[1],e[2],e[3]].map(i=>(+i).toString(16).padStart(2,"0")).join(""):""}formRow(t,e,i){const s=document.createElement("div");s.style.cssText="display:flex;align-items:center;gap:10px;margin:10px 0;min-width:360px";const l=document.createElement("span");l.style.cssText="width:120px;color:#556;flex:none",l.textContent=e,s.append(l,i),t.appendChild(s)}formInput(t,e=""){const i=document.createElement("input");return i.type="text",i.style.cssText="flex:1;border:1px solid #cfd6df;border-radius:6px;padding:7px 9px;font:14px inherit;min-width:0",i.value=t,i.placeholder=e,i}formSelect(t,e){const i=document.createElement("select");return i.style.cssText="flex:1;border:1px solid #cfd6df;border-radius:6px;padding:7px 9px;font:14px inherit;background:#fff",t.forEach(([s,l])=>{const n=document.createElement("option");n.value=s,n.textContent=l,s===e&&(n.selected=!0),i.appendChild(n)}),i}formBg(t){const e=document.createElement("div");e.style.cssText="flex:1;display:flex;align-items:center;gap:8px";const i=this.toHexColor(t),s=document.createElement("input");s.type="color",s.value=i||"#ffffff",s.style.cssText="width:36px;height:29px;border:1px solid #cfd6df;border-radius:4px;padding:1px;background:none;cursor:pointer";const l=document.createElement("label");l.style.cssText="display:flex;align-items:center;gap:6px;cursor:pointer;color:#556";const n=document.createElement("input");return n.type="checkbox",n.checked=!!i,l.append(n,document.createTextNode(this.t("fill"))),s.addEventListener("input",()=>n.checked=!0),e.append(s,l),{wrap:e,color:s,fill:n}}setOrClear(t,e,i){i?t.style.setProperty(e,/^(width|height)$/.test(e)&&/^\d+$/.test(i)?i+"px":i):t.style.removeProperty(e)}cellPropsDlg(){const t=this.currentCell();if(!t){alert(this.t("nocell"));return}let e,i,s,l,n;this.dialog(this.t("cellprops").replace("…",""),o=>{e=this.formInput(t.style.width,"e.g. 120px / 25%"),this.formRow(o,this.t("tblwidth"),e),i=this.formInput(t.style.height,"e.g. 40px"),this.formRow(o,this.t("tblheight"),i),s=this.formSelect([["",this.t("alignnone")],["left",this.t("alignleft")],["center",this.t("aligncenter")],["right",this.t("alignright")]],t.style.textAlign||""),this.formRow(o,this.t("tblalign"),s),l=this.formSelect([["",this.t("alignnone")],["top",this.t("valigntop")],["middle",this.t("valignmiddle")],["bottom",this.t("valignbottom")]],t.style.verticalAlign||""),this.formRow(o,this.t("valign"),l),n=this.formBg(t.style.backgroundColor||""),this.formRow(o,this.t("backcolor"),n.wrap)},[{label:this.t("cancel"),action:()=>this.closeDlg()},{label:this.t("save"),primary:!0,action:()=>{this.setOrClear(t,"width",e.value.trim()),this.setOrClear(t,"height",i.value.trim()),this.setOrClear(t,"text-align",s.value),this.setOrClear(t,"vertical-align",l.value),this.setOrClear(t,"background-color",n.fill.checked?n.color.value:""),this.closeDlg(),this.onChange(),this.positionTableHandles()}}])}rowPropsDlg(){const t=this.currentCell();if(!t){alert(this.t("nocell"));return}const e=t.parentElement;let i,s;this.dialog(this.t("rowprops").replace("…",""),l=>{i=this.formInput(e.style.height,"e.g. 40px"),this.formRow(l,this.t("tblheight"),i),s=this.formBg(e.style.backgroundColor||""),this.formRow(l,this.t("backcolor"),s.wrap)},[{label:this.t("cancel"),action:()=>this.closeDlg()},{label:this.t("save"),primary:!0,action:()=>{this.setOrClear(e,"height",i.value.trim()),this.setOrClear(e,"background-color",s.fill.checked?s.color.value:""),this.closeDlg(),this.onChange(),this.positionTableHandles()}}])}colPropsDlg(){const t=this.currentCell();if(!t){alert(this.t("nocell"));return}const e=t.parentElement,i=t.closest("table"),s=Array.from(e.children).indexOf(t),l=Array.from(i.rows).map(r=>r.cells[s]).filter(Boolean);let n,o;this.dialog(this.t("colprops").replace("…",""),r=>{n=this.formInput(t.style.width,"e.g. 120px / 25%"),this.formRow(r,this.t("tblwidth"),n),o=this.formBg(t.style.backgroundColor||""),this.formRow(r,this.t("backcolor"),o.wrap)},[{label:this.t("cancel"),action:()=>this.closeDlg()},{label:this.t("save"),primary:!0,action:()=>{l.forEach(r=>{this.setOrClear(r,"width",n.value.trim()),this.setOrClear(r,"background-color",o.fill.checked?o.color.value:"")}),this.closeDlg(),this.onChange(),this.positionTableHandles()}}])}closeDlg(){this.dlgOvl&&(this.dlgOvl.remove(),this.dlgOvl=null)}dialog(t,e,i){this.closeDlg(),this.closePop(),this.dlgOvl=document.createElement("div"),this.dlgOvl.className="ovl";const s=document.createElement("div");s.className="dlg",s.dir=this.dir(),s.innerHTML=`<header><span>${t}</span><button type="button">×</button></header>
|
|
7
|
+
`,this.sbHelp=this.statusbar.querySelector(".mid"),this.sbWords=this.statusbar.querySelector(".words");const e=this.statusbar.querySelector(".grip");this.bindGrip(e),this.shell.appendChild(this.menubar),this.shell.appendChild(this.toolbar),this.shell.appendChild(this.ed),this.shell.appendChild(this.statusbar),this.contentStyle&&(this.contentStyleEl=document.createElement("style"),this.contentStyleEl.textContent=this.scopeContentStyle(this.contentStyle),this.shell.appendChild(this.contentStyleEl)),t.appendChild(this.shell),this.options.statusbar||(this.statusbar.style.display="none"),this.imgInput=document.createElement("input"),this.imgInput.type="file",this.imgInput.accept=this.options.imageFileTypes.join(","),this.imgInput.style.display="none",t.appendChild(this.imgInput),this.docInput=document.createElement("input"),this.docInput.type="file",this.docInput.accept=".docx,application/vnd.openxmlformats-officedocument.wordprocessingml.document",this.docInput.style.display="none",t.appendChild(this.docInput)}scopeContentStyle(t){return t.replace(/\bbody\b/g,"."+this.contentClass)}bindGrip(t){let e=0,i=0;const s=l=>{e=l.clientY,i=this.ed.offsetHeight,l.preventDefault();const n=r=>{this.ed.style.height=Math.max(120,i+r.clientY-e)+"px"},o=()=>{window.removeEventListener("mousemove",n),window.removeEventListener("mouseup",o)};window.addEventListener("mousemove",n),window.addEventListener("mouseup",o)};t.addEventListener("mousedown",s),this.listeners.push(()=>t.removeEventListener("mousedown",s))}bindEvents(){this.onDoc("mousedown",t=>{this.openPop&&!this.openPop.contains(t.target)&&!this.popAnchor.contains(t.target)&&!(this.openSubEl&&this.openSubEl.contains(t.target))&&this.closePop()}),this.onDoc("keydown",t=>{t.key==="Escape"&&(this.closePop(),this.closeDlg())}),this.onDoc("selectionchange",()=>{const t=window.getSelection();t&&this.ed.contains(t.anchorNode)?(this.saveSel(),this.refreshState(),this.updateSelToolbar(t),this.positionCellMarker()):this.clearSelToolbar()}),this.on(this.ed,"input",()=>{this.refreshState(),this.onChange(),this.positionTableHandles(),this.positionImageHandles(),this.positionImgPhCtx(),this.positionTplCtx()}),this.on(this.ed,"keydown",t=>{t.altKey&&t.key==="0"&&(t.preventDefault(),this.helpDlg()),(t.key==="Delete"||t.key==="Backspace")&&this.phActive&&(t.preventDefault(),this.removeImgPlaceholder())}),this.on(this.ed,"paste",t=>this.handlePaste(t)),this.on(this.ed,"drop",t=>{var s,l,n;t.preventDefault();const e=(l=(s=t.target).closest)==null?void 0:l.call(s,".img-ph");if(!e||!this.ed.contains(e)||this.options.readonly)return;const i=Array.from(((n=t.dataTransfer)==null?void 0:n.files)||[]).find(o=>o.type.startsWith("image/"));i&&this.readImageFileInto(i,e)}),this.on(this.ed,"dragover",t=>t.preventDefault()),this.on(this.ed,"mousedown",t=>{var o,r,c,h;const e=t.target,i=(o=e.closest)==null?void 0:o.call(e,"table");i&&this.ed.contains(i)?this.selectTableForResize(i):this.clearTableHandles();const s=(r=e.closest)==null?void 0:r.call(e,".img-ph");s&&this.ed.contains(s)&&!this.options.readonly?(t.preventDefault(),this.ed.focus(),this.selectImgPlaceholder(s)):this.clearImgPlaceholderSel();const l=(c=e.closest)==null?void 0:c.call(e,".tpl");l&&this.ed.contains(l)&&!this.options.readonly?this.selectTemplate(l):this.clearTplSel();const n=(h=e.closest)==null?void 0:h.call(e,"img");n&&this.ed.contains(n)&&!this.options.readonly?(t.preventDefault(),this.selectImage(n)):this.clearImageHandles()}),this.on(this.ed,"mouseover",t=>{var i,s;if(this.options.readonly)return;const e=(s=(i=t.target).closest)==null?void 0:s.call(i,"img");e&&this.ed.contains(e)&&(this.cancelImgHide(),this.selectImage(e))}),this.on(this.ed,"mouseout",t=>{var s,l,n,o;const e=(l=(s=t.target).closest)==null?void 0:l.call(s,"img");if(!e)return;const i=t.relatedTarget;i&&((n=this.imgCtx)!=null&&n.contains(i)||this.imgHandles.some(r=>r.contains(i))||((o=i.closest)==null?void 0:o.call(i,"img"))===e)||this.scheduleImgHide()}),this.on(this.ed,"scroll",()=>{this.positionTableHandles(),this.positionImageHandles(),this.positionImgPhCtx(),this.positionTplCtx()}),this.onWin("scroll",()=>{this.positionTableHandles(),this.positionImageHandles(),this.positionImgPhCtx(),this.positionTplCtx(),this.repositionSelToolbar()},!0),this.onWin("resize",()=>{this.positionTableHandles(),this.positionImageHandles(),this.positionImgPhCtx(),this.positionTplCtx(),this.repositionSelToolbar()}),this.on(this.imgInput,"change",()=>{var s;const t=(s=this.imgInput.files)==null?void 0:s[0];if(!t)return;const e=this.phUploadTarget;if(this.phUploadTarget=null,e&&this.ed.contains(e)){this.readImageFileInto(t,e);return}const i=new FileReader;i.onload=()=>{this.restoreSel(),document.execCommand("insertHTML",!1,`<img src="${i.result}" title="${t.name.replace(/"/g,"")}" alt="">`),this.onChange()},i.readAsDataURL(t)}),this.on(this.docInput,"change",()=>{var e;const t=(e=this.docInput.files)==null?void 0:e[0];t&&this.importWordFile(t).catch(()=>alert(this.t("importfail")))}),this.onDoc("mousedown",t=>{this.ed.contains(t.target)||t.target===this.tblCorner||this.tblColBars.includes(t.target)||this.tblCtx&&this.tblCtx.contains(t.target)||this.imgHandles.includes(t.target)||this.imgCtx&&this.imgCtx.contains(t.target)||this.phCtx&&this.phCtx.contains(t.target)||this.tplCtx&&this.tplCtx.contains(t.target)||this.selCtx&&this.selCtx.contains(t.target)||this.openPop&&this.openPop.contains(t.target)||this.openSubEl&&this.openSubEl.contains(t.target)||(this.clearTableHandles(),this.clearImageHandles(),this.clearImgPlaceholderSel(),this.clearTplSel(),this.clearSelToolbar())})}on(t,e,i){t.addEventListener(e,i),this.listeners.push(()=>t.removeEventListener(e,i))}onDoc(t,e){document.addEventListener(t,e),this.listeners.push(()=>document.removeEventListener(t,e))}onWin(t,e,i){window.addEventListener(t,e,i),this.listeners.push(()=>window.removeEventListener(t,e,i))}getContent(){return this.ed.innerHTML}setContent(t){this.ed.innerHTML=t||"<p><br></p>",this.refreshState(),this.clearTableHandles(),this.clearImageHandles(),this.clearImgPlaceholderSel(),this.clearTplSel(),this.clearSelToolbar(),this.onChange()}insertContent(t){this.restoreSel(),document.execCommand("insertHTML",!1,t),this.saveSel(),this.refreshState(),this.onChange()}setLanguage(t){this.lang=t,this.initUI()}focus(){this.ed.focus()}async importWordFile(t){const e=await wt(t);this.recordRevision(),this.setContent(e),this.recordRevision()}restoreDraft(){let t=null;try{t=localStorage.getItem(this.draftStorageKey)}catch{}if(!t)return!1;try{const e=JSON.parse(t);return e.html?(this.recordRevision(),this.setContent(e.html),!0):!1}catch{return!1}}getRevisions(){return this.revisions.slice()}destroy(){this.isDestroyed||(this.isDestroyed=!0,this.revTimer!=null&&window.clearTimeout(this.revTimer),this.draftTimer!=null&&window.clearTimeout(this.draftTimer),this.closePop(),this.closeDlg(),this.clearTableHandles(),this.clearImageHandles(),this.clearImgPlaceholderSel(),this.clearTplSel(),this.clearSelToolbar(),this.listeners.forEach(t=>t()),this.listeners=[],this.shell&&this.shell.parentNode&&this.shell.parentNode.removeChild(this.shell),this.imgInput&&this.imgInput.parentNode&&this.imgInput.parentNode.removeChild(this.imgInput),this.docInput&&this.docInput.parentNode&&this.docInput.parentNode.removeChild(this.docInput),this.contentStyleEl=null)}saveSel(){const t=window.getSelection();t&&t.rangeCount&&this.ed.contains(t.anchorNode)&&(this.savedRange=t.getRangeAt(0).cloneRange())}restoreSel(){if(!this.savedRange){this.ed.focus();return}this.ed.focus();const t=window.getSelection();t&&(t.removeAllRanges(),t.addRange(this.savedRange))}exec(t,e){this.restoreSel(),document.execCommand("styleWithCSS",!1,t!=="fontSize"?"true":"false"),document.execCommand(t,!1,e??void 0),this.saveSel(),this.refreshState(),this.onChange()}closestBlock(t){for(;t&&t!==this.ed;){if(t.nodeType===1&&/^(P|DIV|H[1-6]|LI|PRE|BLOCKQUOTE|TD|TH)$/i.test(t.tagName))return t;t=t.parentNode}return null}selectedBlocks(){const t=window.getSelection();if(!t||!t.rangeCount||!this.ed.contains(t.anchorNode))return[];const e=t.getRangeAt(0),i=Array.from(this.ed.querySelectorAll("p,h1,h2,h3,h4,h5,h6,li,pre,blockquote,td,th")).filter(s=>e.intersectsNode(s));if(!i.length){const s=this.closestBlock(t.anchorNode);if(s)return[s]}return i}onChange(){this.options.onChange(this.ed.innerHTML),this.scheduleRevision(),this.scheduleDraftSave()}recordRevision(){const t=this.ed.innerHTML,e=this.revisions[this.revisions.length-1];e&&e.html===t||(this.revisions.push({time:Date.now(),html:t}),this.revisions.length>30&&this.revisions.shift())}scheduleRevision(){this.revTimer!=null&&window.clearTimeout(this.revTimer),this.revTimer=window.setTimeout(()=>{this.revTimer=null,this.recordRevision()},1500)}scheduleDraftSave(){this.draftTimer!=null&&window.clearTimeout(this.draftTimer),this.draftTimer=window.setTimeout(()=>{this.draftTimer=null;try{localStorage.setItem(this.draftStorageKey,JSON.stringify({time:Date.now(),html:this.ed.innerHTML}))}catch{}},800)}revisionDlg(){this.recordRevision(),this.dialog(this.t("revhistory"),t=>{if(!this.revisions.length){t.innerHTML=`<p style="color:#556">${this.t("revempty")}</p>`;return}const e=document.createElement("div");e.className="revwrap";const i=document.createElement("div");i.className="revlist";const s=document.createElement("div");s.className="revprev";const l=document.createElement("button");l.type="button",l.className="revrestore",l.textContent=this.t("restore");let n=this.revisions.length-1;const o=new Intl.DateTimeFormat(this.lang==="ar"?"ar-AE":"en-GB",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"}),r={},c=h=>{n=h,this.revisions.forEach((d,m)=>{var g;return(g=r[m])==null?void 0:g.classList.toggle("on",m===h)}),s.innerHTML=this.revisions[h].html,l.disabled=h===this.revisions.length-1};for(let h=this.revisions.length-1;h>=0;h--){const d=this.revisions[h],m=document.createElement("button");m.type="button";const g=(new DOMParser().parseFromString(d.html,"text/html").body.textContent||"").trim(),f=g?g.split(/\s+/).length:0,v=h===this.revisions.length-1;m.innerHTML=`<span>${v?this.t("currentver"):o.format(new Date(d.time))}</span><span class="wc">${f} ${this.t("words")}</span>`,m.addEventListener("click",()=>c(h)),r[h]=m,i.appendChild(m)}i.append(l),l.addEventListener("click",()=>{const h=this.revisions[n];h&&(this.recordRevision(),this.setContent(h.html),this.recordRevision(),this.closeDlg())}),e.append(i,s),t.appendChild(e),c(n)})}closeSub(){var t;(t=this.openSubEl)==null||t.remove(),this.openSubEl=null}closePop(){var t;this.closeSub(),this.openPop&&(this.openPop.remove(),this.openPop=null,(t=this.popAnchor)==null||t.classList.remove("open"),this.popAnchor=null,this.setOpTarget(null))}openSubFor(t,e){this.closeSub();const i=document.createElement("div");i.className="pop sub",i.dir=this.dir(),t.subBuild?t.subBuild(i):t.sub&&this.menuItems(i,t.sub),i.addEventListener("mousedown",r=>{r.target.tagName!=="INPUT"&&r.preventDefault()}),document.body.appendChild(i);const s=e.getBoundingClientRect();let n=this.dir()==="rtl"?s.left-i.offsetWidth+2:s.right-2;n=Math.max(8,Math.min(n+scrollX,scrollX+innerWidth-i.offsetWidth-8));let o=s.top+scrollY-6;o=Math.max(8+scrollY,Math.min(o,scrollY+innerHeight-i.offsetHeight-8)),i.style.left=n+"px",i.style.top=o+"px",this.openSubEl=i}popup(t,e){if(this.openPop&&this.popAnchor===t){this.closePop();return}this.closePop();const i=document.createElement("div");i.className="pop",i.dir=this.dir(),e(i),document.body.appendChild(i);const s=t.getBoundingClientRect();i.style.minWidth=Math.max(160,Math.round(s.width))+"px",i.style.top=s.bottom+scrollY+2+"px";let n=this.dir()==="rtl"?s.right-i.offsetWidth:s.left;n=Math.max(8,Math.min(n+scrollX,scrollX+innerWidth-i.offsetWidth-8)),i.style.left=n+"px",i.addEventListener("mousedown",o=>{o.target.tagName!=="INPUT"&&o.preventDefault()}),this.openPop=i,this.popAnchor=t,t.classList.add("open")}menuItems(t,e){e.forEach(i=>{if(i==="|"){t.insertAdjacentHTML("beforeend",'<div class="sep"></div>');return}const s=!!(i.sub||i.subBuild),l=document.createElement("button");l.className="mi"+(i.on?" on":""),l.innerHTML=`<span class="ic">${i.icon||""}</span><span class="prev" ${i.previewStyle?`style="${i.previewStyle}"`:""}>${i.label}</span>${i.shortcut?`<span class="sc">${i.shortcut}</span>`:""}${s?`<span class="subarrow">${a.chev}</span>`:""}`,l.addEventListener("click",()=>{i.action&&(this.closePop(),i.action())}),l.addEventListener("mouseenter",()=>{var n;s?this.openSubFor(i,l):this.openSubEl&&t!==this.openSubEl&&this.closeSub(),(n=i.hover)==null||n.call(i,!0)}),l.addEventListener("mouseleave",()=>{var n;return(n=i.hover)==null?void 0:n.call(i,!1)}),t.appendChild(l)})}tbtn(t,e,i,s){const l=document.createElement("button");return l.className="tbtn",l.type="button",l.title=e,l.innerHTML=t,s&&(l.dataset.id=s),l.addEventListener("mousedown",n=>n.preventDefault()),l.addEventListener("click",i),l}stepBtn(t){const e=t>0?"+":"−",i=t>0?a.fontsizeup:a.fontsizedown,s=this.tbtn(i,this.t("fontsize")+" "+e,()=>this.stepFontSize(t));return s.addEventListener("mousedown",()=>this.saveSel()),s}menuTbtn(t,e,i,s){const l=this.tbtn(t,e,()=>i(l),s);return l.classList.add("hasmenu"),l.insertAdjacentHTML("beforeend",a.chev),l.addEventListener("mousedown",()=>this.saveSel()),l}colorChips(){const t=s=>{const l=document.createElement("button");return l.type="button",l.className="cchip",l.title=s,l.addEventListener("mousedown",n=>{n.preventDefault(),this.saveSel()}),l},e=lt.map(s=>{const l=t(this.t("forecolor"));return l.style.background=s,l.addEventListener("click",()=>this.applyColor("fore",s)),l}),i=t(this.t("forecolor"));return i.classList.add("more"),i.dataset.cb="fore",i.innerHTML=a.chev,i.addEventListener("click",()=>this.colorMenu(i,"fore")),[...e,i]}group(...t){const e=document.createElement("div");return e.className="tgrp",t.forEach(i=>{i.classList.add("gbtn"),e.appendChild(i)}),e}tsel(t,e,i,s){const l=document.createElement("button");return l.className="tsel "+t,l.type="button",l.dataset.id=e,l.innerHTML=`<span class="lbl empty">${i||""}</span>${a.chev}`,l.addEventListener("mousedown",n=>{n.preventDefault(),this.saveSel()}),l.addEventListener("click",()=>s(l)),l}setListStyle(t,e){var l,n;this.restoreSel();const i=window.getSelection();if(!i)return;let s=(l=this.closestBlock(i.anchorNode))==null?void 0:l.closest(t);s||(this.exec(t==="ol"?"insertOrderedList":"insertUnorderedList"),s=(n=this.closestBlock(i.anchorNode))==null?void 0:n.closest(t)),s&&(s.style.listStyleType=e),this.saveSel(),this.onChange()}listMenu(t,e){var c;const i=e==="ol"?"insertOrderedList":"insertUnorderedList",s=e==="ol"?[["lower-alpha",a.ol_alpha],["lower-roman",a.ol_roman],["upper-alpha",a.ol_alphau],["upper-roman",a.ol_romanu]]:[["circle",a.ul_circle],["square",a.ul_square]],l=this.tArr(e==="ol"?"liststyles_ol":"liststyles_ul").slice(1),n=window.getSelection(),o=n?(c=this.closestBlock(n.anchorNode))==null?void 0:c.closest(e):null,r=o?o.style.listStyleType:"";this.popup(t,h=>{this.menuItems(h,[{label:this.t(e==="ol"?"numlist":"bullist"),icon:e==="ol"?a.numlist:a.bullist,on:document.queryCommandState(i),action:()=>this.exec(i)}]),h.insertAdjacentHTML("beforeend",'<div class="sep"></div>');const d=document.createElement("div");d.className="mi-grid",s.forEach(([m,g],f)=>{const v=document.createElement("button");v.className="mi"+(r===m?" on":""),v.innerHTML=`<span class="ic">${g}</span><span class="prev">${l[f]}</span>`,v.addEventListener("click",()=>{this.closePop(),this.setListStyle(e,m)}),d.appendChild(v)}),h.appendChild(d)})}colorMenu(t,e){this.popup(t,i=>{const s=document.createElement("div");s.className="cpal",_.forEach(d=>{const m=document.createElement("button");m.style.background=d,m.title=d,m.addEventListener("click",()=>{this.closePop(),this.applyColor(e,d)}),s.appendChild(m)}),i.appendChild(s),i.insertAdjacentHTML("beforeend",'<div class="sep"></div>');const l=document.createElement("div");l.className="cfoot";const n=document.createElement("div");n.className="cswatch cur",n.title=this.t("currentcolor");const o=e==="fore"?this.foreColor:this.backColor;n.style.background=/^#[0-9a-f]{6}$/i.test(o)?o:"#000000",n.innerHTML=a.check;const r=document.createElement("button");r.type="button",r.className="cswatch nocolor",r.title=this.t("removecolor"),r.addEventListener("click",()=>{this.closePop(),this.applyColor(e,null)});const c=document.createElement("label");c.className="cswatch cwheel",c.title=this.t("customcolor"),c.innerHTML=a.palette;const h=document.createElement("input");h.type="color",h.value=/^#[0-9a-f]{6}$/i.test(o)?o:"#000000",h.addEventListener("change",()=>{this.closePop(),this.applyColor(e,h.value)}),c.appendChild(h),l.append(n,r,c),i.appendChild(l)})}applyColor(t,e){t==="fore"?(this.foreColor=e||"#000000",this.exec("foreColor",e||"#000000")):(this.backColor=e||"transparent",this.exec("hiliteColor",e||"transparent")),this.syncColorSwatches(this.toolbar),this.selCtx&&this.syncColorSwatches(this.selCtx)}syncColorSwatches(t){t.querySelectorAll("[data-cb=fore]").forEach(e=>e.style.background=this.foreColor),t.querySelectorAll("[data-cb=back]").forEach(e=>e.style.background=this.backColor)}fontMenu(t){this.popup(t,e=>{this.menuItems(e,this.options.fontFamilyFormats.map(([i,s])=>({label:i,previewStyle:`font-family:${s}`,on:this.currentFont()===i,action:()=>this.exec("fontName",s)})))})}sizeMenu(t){this.popup(t,e=>{this.menuItems(e,X.map(i=>({label:i,on:this.currentSize()===i,action:()=>this.applyFontSize(i)})))})}ensureSizeTarget(){const t=window.getSelection();if(!t)return;if(!t.rangeCount){const n=document.createRange();n.selectNodeContents(this.ed),n.collapse(!0),t.addRange(n)}if(!t.isCollapsed)return;const e=t.getRangeAt(0),i=e.startContainer;if(i.nodeType===3){const n=i.data;let o=e.startOffset,r=e.startOffset;for(;o>0&&/\S/.test(n[o-1]);)o--;for(;r<n.length&&/\S/.test(n[r]);)r++;if(r>o){const c=document.createRange();c.setStart(i,o),c.setEnd(i,r),t.removeAllRanges(),t.addRange(c),this.savedRange=c.cloneRange();return}}const s=document.createTextNode("");e.insertNode(s);const l=document.createRange();l.setStart(s,0),l.setEnd(s,1),t.removeAllRanges(),t.addRange(l),this.savedRange=l.cloneRange()}applyFontSize(t){this.restoreSel(),this.ensureSizeTarget(),document.execCommand("styleWithCSS",!1,"false"),document.execCommand("fontSize",!1,"7");const e=[];if(this.ed.querySelectorAll('font[size="7"]').forEach(i=>{const s=document.createElement("span");for(s.style.fontSize=t;i.firstChild;)s.appendChild(i.firstChild);i.replaceWith(s),e.push(s)}),e.length){const i=document.createRange();i.setStart(e[0],0),i.setEnd(e[e.length-1],e[e.length-1].childNodes.length);const s=window.getSelection();s&&(s.removeAllRanges(),s.addRange(i))}this.saveSel(),this.refreshState(),this.onChange()}stepFontSize(t){const e=parseInt(this.currentSize(),10)||14,i=Math.min(et,Math.max(tt,e+t));i!==e&&this.applyFontSize(i+"px")}transformCase(t){this.restoreSel();const e=window.getSelection();if(!e||!e.rangeCount||e.isCollapsed)return;const i=e.getRangeAt(0),s=document.createTreeWalker(this.ed,NodeFilter.SHOW_TEXT),l=[];let n;for(;n=s.nextNode();)i.intersectsNode(n)&&l.push(n);l.forEach(o=>{const r=o===i.startContainer?i.startOffset:0,c=o===i.endContainer?i.endOffset:o.data.length;if(c<=r)return;const h=o.data.slice(r,c);let d=h;t==="lower"?d=h.toLowerCase():t==="upper"?d=h.toUpperCase():d=h.replace(/(^|\s)(\S)/g,(m,g,f)=>g+f.toUpperCase()),o.replaceData(r,c-r,d)}),this.saveSel(),this.refreshState(),this.onChange()}caseMenu(t){this.popup(t,e=>{this.menuItems(e,[{label:this.t("lowercase"),icon:a.lowercaseic,action:()=>this.transformCase("lower")},{label:this.t("uppercase"),icon:a.uppercaseic,action:()=>this.transformCase("upper")},{label:this.t("capitalize"),icon:a.capitalizeic,action:()=>this.transformCase("capitalize")}])})}applyBlockStyle(t,e){this.restoreSel(),this.selectedBlocks().forEach(s=>{e?s.style[t]=e:s.style.removeProperty(t==="lineHeight"?"line-height":"word-spacing")}),this.saveSel(),this.onChange()}currentBlockStyle(t){const e=window.getSelection(),i=e?this.closestBlock(e.anchorNode):null;return i&&i.style[t]||""}lineHeightMenu(t){const e=this.currentBlockStyle("lineHeight");this.popup(t,i=>{this.menuItems(i,[{label:this.t("normal"),on:!e,action:()=>this.applyBlockStyle("lineHeight","")},...it.map(s=>({label:s,on:e===s,action:()=>this.applyBlockStyle("lineHeight",s)}))])})}wordSpacingMenu(t){const e=this.currentBlockStyle("wordSpacing");this.popup(t,i=>{this.menuItems(i,[{label:this.t("normal"),on:!e,action:()=>this.applyBlockStyle("wordSpacing","")},...st.map(s=>({label:s,on:e===s,action:()=>this.applyBlockStyle("wordSpacing",s)}))])})}closestAnchor(){const t=window.getSelection();let e=t&&this.ed.contains(t.anchorNode)?t.anchorNode:null;for(;e&&e!==this.ed;){if(e.nodeType===1&&e.tagName==="A")return e;e=e.parentNode}return null}linkDlg(){this.saveSel();const t=this.closestAnchor();let e;const i=[];t&&i.push({label:this.t("unlink"),action:()=>{const s=document.createRange();s.selectNodeContents(t);const l=window.getSelection();l&&(l.removeAllRanges(),l.addRange(s)),document.execCommand("unlink"),this.closeDlg(),this.onChange()}}),i.push({label:this.t("cancel"),action:()=>this.closeDlg()},{label:this.t("save"),primary:!0,action:()=>{const s=e.value.trim();if(this.closeDlg(),!s)return;if(t){t.setAttribute("href",s),this.onChange();return}this.restoreSel();const l=window.getSelection();!l||l.isCollapsed?document.execCommand("insertHTML",!1,`<a href="${s.replace(/"/g,""")}">${s.replace(/&/g,"&").replace(/</g,"<")}</a>`):(document.execCommand("styleWithCSS",!1,"false"),document.execCommand("createLink",!1,s)),this.saveSel(),this.onChange()}}),this.dialog(this.t("linkttl"),s=>{const l=document.createElement("div");l.style.cssText="display:flex;align-items:center;gap:10px;margin:10px 0;min-width:360px";const n=document.createElement("span");n.style.cssText="width:60px;color:#556;flex:none",n.textContent=this.t("linkurl"),e=document.createElement("input"),e.type="url",e.placeholder="https://",e.style.cssText="flex:1;border:1px solid #cfd6df;border-radius:6px;padding:7px 9px;font:14px inherit",e.value=(t==null?void 0:t.getAttribute("href"))||"",l.append(n,e),s.appendChild(l),setTimeout(()=>e.focus(),0)},i)}blocksMenu(t){this.popup(t,e=>{this.menuItems(e,P.map(([i,s])=>({label:this.blockLabel(i),previewStyle:i.startsWith("h")?`font-weight:700;font-size:${22-2*+i[1]}px`:i==="pre"?"font-family:monospace":"",on:this.currentBlock()===i,action:()=>this.exec("formatBlock","<"+i+">")})))})}blockLabel(t){return t==="p"?this.t("para"):t==="pre"?this.t("pre"):this.t("heading")+" "+t[1]}tableGrid(t,e){this.popup(t,i=>this.buildTableGridInto(i,e))}buildTableGridInto(t,e){{const i=document.createElement("div");i.className="tgridwrap";const s=document.createElement("div");s.className="tgrid";const l=document.createElement("div");l.className="tgridlbl",l.textContent="1 × 1";const n=[];for(let o=0;o<8;o++)for(let r=0;r<10;r++){const c=document.createElement("span");c.dataset.r=String(o),c.dataset.c=String(r),c.addEventListener("mouseenter",()=>{n.forEach(h=>h.classList.toggle("hot",+h.dataset.r<=o&&+h.dataset.c<=r)),l.textContent=r+1+" × "+(o+1)}),c.addEventListener("click",()=>{this.closePop(),this.insertTable(o+1,r+1),e==null||e()}),n.push(c),s.appendChild(c)}i.append(s,l),t.appendChild(i)}}insertTable(t,e){this.restoreSel();let i='<table style="border-collapse:collapse;width:100%;table-layout:fixed"><tbody>';for(let s=0;s<t;s++){i+="<tr>";for(let l=0;l<e;l++)i+='<td style="border:1px solid #b9c2cc"><br></td>';i+="</tr>"}i+="</tbody></table><p><br></p>",document.execCommand("insertHTML",!1,i),this.saveSel(),this.onChange()}setDir(t){this.restoreSel();const e=this.selectedBlocks();e.length?e.forEach(i=>i.setAttribute("dir",t)):this.ed.setAttribute("dir",t),this.saveSel(),this.refreshState(),this.onChange()}parseToolbarString(t){return t.split("|").map(e=>e.trim().split(/\s+/).filter(Boolean)).filter(e=>e.length>0)}buildToolbarRegistry(){const t=this.tbtn(a.tableic,this.t("quicktable"),()=>this.tableGrid(t));return{undo:()=>this.tbtn(a.undo,this.t("undo"),()=>this.exec("undo")),redo:()=>this.tbtn(a.redo,this.t("redo"),()=>this.exec("redo")),preview:()=>this.tbtn(a.prevw,this.t("preview"),()=>this.previewDlg()),print:()=>this.tbtn(a.printic,this.t("print"),()=>this.printDoc()),importword:()=>this.tbtn(a.wordic,this.t("importword"),()=>this.pickWordDoc()),revhistory:()=>this.tbtn(a.historyic,this.t("revhistory"),()=>this.revisionDlg()),fontfamily:()=>this.tsel("w-font","fontsel","",e=>this.fontMenu(e)),fontsize:()=>this.tsel("w-size","sizesel","",e=>this.sizeMenu(e)),fontsizeincrease:()=>this.stepBtn(1),fontsizedecrease:()=>this.stepBtn(-1),bold:()=>this.tbtn(a.bold,this.t("bold"),()=>this.exec("bold"),"bold"),italic:()=>this.tbtn(a.italic,this.t("italic"),()=>this.exec("italic"),"italic"),underline:()=>this.tbtn(a.underline,this.t("underline"),()=>this.exec("underline"),"underline"),strikethrough:()=>this.tbtn(a.strikethrough,this.t("strikethrough"),()=>this.exec("strikeThrough"),"strikeThrough"),forecolor:()=>this.colorChips(),backcolor:()=>this.menuTbtn(a.backcolor+'<span class="colorbar" data-cb="back"></span>',this.t("backcolor"),e=>this.colorMenu(e,"back")),alignleft:()=>this.tbtn(a.alignleft,this.t("alignleft"),()=>this.exec("justifyLeft"),"justifyLeft"),aligncenter:()=>this.tbtn(a.aligncenter,this.t("aligncenter"),()=>this.exec("justifyCenter"),"justifyCenter"),alignright:()=>this.tbtn(a.alignright,this.t("alignright"),()=>this.exec("justifyRight"),"justifyRight"),alignjustify:()=>this.tbtn(a.alignjustify,this.t("alignjustify"),()=>this.exec("justifyFull"),"justifyFull"),bullist:()=>this.menuTbtn(a.bullist,this.t("bullist"),e=>this.listMenu(e,"ul"),"insertUnorderedList"),numlist:()=>this.menuTbtn(a.numlist,this.t("numlist"),e=>this.listMenu(e,"ol"),"insertOrderedList"),outdent:()=>this.tbtn(a.outdent,this.t("outdent"),()=>this.exec("outdent")),indent:()=>this.tbtn(a.indent,this.t("indent"),()=>this.exec("indent")),link:()=>this.tbtn(a.link,this.t("linkttl"),()=>this.linkDlg()),blockquote:()=>this.tbtn(a.quote,this.t("quote"),()=>this.toggleBlock("blockquote"),"blockquote"),changecase:()=>this.menuTbtn(a.caseic,this.t("changecase"),e=>this.caseMenu(e)),lineheight:()=>this.menuTbtn(a.lineheight,this.t("lineheight"),e=>this.lineHeightMenu(e)),wordspacing:()=>this.menuTbtn(a.wordspacing,this.t("wordspacing"),e=>this.wordSpacingMenu(e)),removeformat:()=>this.tbtn(a.clearformatic,this.t("removeformat"),()=>this.exec("removeFormat")),blocks:()=>this.tsel("w-block","blocksel",this.t("para"),e=>this.blocksMenu(e)),ltr:()=>this.tbtn(a.ltr,this.t("ltr"),()=>this.setDir("ltr"),"ltr"),rtl:()=>this.tbtn(a.rtl,this.t("rtl"),()=>this.setDir("rtl"),"rtl"),quickimage:()=>this.tbtn(a.image,this.t("quickimage"),()=>this.insertImagePlaceholder()),quicktable:()=>t,template:()=>this.menuTbtn(a.templateic,this.t("template"),e=>this.templateMenu(e)),charmap:()=>this.tbtn(a.charic,this.t("charmap"),()=>this.charMap()),fullscreen:()=>this.tbtn(a.fullscreen,this.t("fullscreen"),()=>this.toggleFullscreen(),"fullscreen"),sourcecode:()=>this.tbtn(a.srcic,this.t("sourcecode"),()=>this.sourceDlg())}}buildToolbar(){this.toolbar.innerHTML="";const t=this.options.toolbar===!0?V:this.options.toolbar,e=this.buildToolbarRegistry();this.parseToolbarString(t).forEach(i=>{const s=[];i.forEach(l=>{const n=e[l];if(!n){console.warn(`FableEditor: unknown toolbar item "${l}"`);return}const o=n();Array.isArray(o)?s.push(...o):s.push(o)}),s.length&&this.toolbar.appendChild(this.group(...s))}),this.syncColorSwatches(this.toolbar)}mItem(t,e,i,s){return{label:this.t(t),icon:e,action:i,shortcut:s}}buildMenubar(){this.menubar.innerHTML="";const t={file:[this.mItem("newdoc",a.newic,()=>{this.recordRevision(),this.ed.innerHTML="<p><br></p>",this.onChange()}),"|",this.mItem("importword",a.wordic,()=>this.pickWordDoc()),this.mItem("restoredraft",a.draftic,()=>{this.restoreDraft()||alert(this.t("draftempty"))}),this.mItem("revhistory",a.historyic,()=>this.revisionDlg()),"|",this.mItem("preview",a.prevw,()=>this.previewDlg()),this.mItem("print",a.printic,()=>this.printDoc(),"Ctrl+P")],edit:[this.mItem("undo",a.undo,()=>this.exec("undo"),"Ctrl+Z"),this.mItem("redo",a.redo,()=>this.exec("redo"),"Ctrl+Y"),"|",this.mItem("cut",a.cutic,()=>this.exec("cut"),"Ctrl+X"),this.mItem("copy",a.copyic,()=>this.exec("copy"),"Ctrl+C"),this.mItem("paste",a.pasteic,()=>alert(this.t("pastehint")),"Ctrl+V"),"|",this.mItem("selectall",a.selall,()=>this.exec("selectAll"),"Ctrl+A")],view:[this.mItem("fullscreen",a.fullscreen,()=>this.toggleFullscreen()),this.mItem("preview",a.prevw,()=>this.previewDlg()),this.mItem("sourcecode",a.srcic,()=>this.sourceDlg())],insert:[this.mItem("link",a.link,()=>this.linkDlg()),this.mItem("image",a.image,()=>this.insertImagePlaceholder()),{label:this.t("inserttable"),icon:a.tableic,action:()=>this.tableGrid(this.menubar.querySelector('[data-menu-key="table"]')||this.menubar)},{label:this.t("template"),icon:a.templateic,subBuild:s=>this.buildTemplatePickInto(s)},this.mItem("hr",a.hric,()=>this.exec("insertHorizontalRule")),"|",this.mItem("charmap",a.charic,()=>this.charMap()),this.mItem("datetime",a.dateic,()=>this.exec("insertText",new Date().toLocaleString(this.lang==="ar"?"ar-AE":"en-GB"))),"|",{label:this.t("pagebreak"),icon:a.pbic,action:()=>{this.restoreSel(),document.execCommand("insertHTML",!1,'<hr class="pagebreak"><p><br></p>'),this.onChange()}},this.mItem("nbsp",a.nbspic,()=>this.exec("insertText"," "))],format:[this.mItem("bold",a.bold,()=>this.exec("bold"),"Ctrl+B"),this.mItem("italic",a.italic,()=>this.exec("italic"),"Ctrl+I"),this.mItem("underline",a.underline,()=>this.exec("underline"),"Ctrl+U"),this.mItem("strikethrough",a.strikethrough,()=>this.exec("strikeThrough")),this.mItem("superscript",a.superscriptic,()=>this.exec("superscript")),this.mItem("subscript",a.subscriptic,()=>this.exec("subscript")),"|",this.mItem("lowercase",a.lowercaseic,()=>this.transformCase("lower")),this.mItem("uppercase",a.uppercaseic,()=>this.transformCase("upper")),this.mItem("capitalize",a.capitalizeic,()=>this.transformCase("capitalize")),"|",this.mItem("clearformat",a.clearformatic,()=>this.exec("removeFormat"))],tools:[this.mItem("sourcecode",a.srcic,()=>this.sourceDlg()),this.mItem("wordcount",a.wcic,()=>this.wordCountDlg())],table:[{label:this.t("inserttable"),icon:a.tableic,subBuild:s=>this.buildTableGridInto(s)},"|",{label:this.t("cell"),sub:[{label:this.t("cellprops"),icon:a.tableic,action:()=>this.cellPropsDlg()}]},{label:this.t("row"),sub:[{label:this.t("rowabove"),icon:a.rowbefore,action:()=>this.tableOp("rowabove"),hover:s=>this.setOpTarget(s?"row":null)},{label:this.t("rowbelow"),icon:a.rowafter,action:()=>this.tableOp("rowbelow"),hover:s=>this.setOpTarget(s?"row":null)},{label:this.t("delrow"),icon:a.rowdelete,action:()=>this.tableOp("delrow"),hover:s=>this.setOpTarget(s?"row":null)},"|",{label:this.t("rowprops"),icon:a.tableic,action:()=>this.rowPropsDlg(),hover:s=>this.setOpTarget(s?"row":null)}]},{label:this.t("column"),sub:[{label:this.t("colbefore"),icon:a.colbefore,action:()=>this.tableOp("colbefore"),hover:s=>this.setOpTarget(s?"col":null)},{label:this.t("colafter"),icon:a.colafter,action:()=>this.tableOp("colafter"),hover:s=>this.setOpTarget(s?"col":null)},{label:this.t("delcol"),icon:a.coldelete,action:()=>this.tableOp("delcol"),hover:s=>this.setOpTarget(s?"col":null)},"|",{label:this.t("colprops"),icon:a.tableic,action:()=>this.colPropsDlg(),hover:s=>this.setOpTarget(s?"col":null)}]},"|",{label:this.t("tablepropsttl"),icon:a.tableic,action:()=>{const s=this.currentCell();if(!s){alert(this.t("nocell"));return}this.tblActive=s.closest("table"),this.tablePropsDlg()}},{label:this.t("deltable"),icon:a.trash,action:()=>this.tableOp("deltable")}],help:[this.mItem("helpttl",a.helpic,()=>this.helpDlg(),"Alt+0")]},e=this.options.menubar===!0?J:this.options.menubar,i=new Set;e.split(/\s+/).filter(Boolean).forEach(s=>{if(i.has(s))return;if(i.add(s),!t[s]){console.warn(`FableEditor: unknown menubar item "${s}"`);return}const l=document.createElement("button");l.type="button",l.textContent=this.t(s),l.dataset.menuKey=s,l.addEventListener("mousedown",n=>{n.preventDefault(),this.saveSel()}),l.addEventListener("click",()=>this.popup(l,n=>this.menuItems(n,t[s]))),this.menubar.appendChild(l)})}tableOp(t){var r,c,h;this.restoreSel();const e=window.getSelection();if(!e)return;const i=((r=this.closestBlock(e.anchorNode))==null?void 0:r.closest("td,th"))||(e.anchorNode&&e.anchorNode.nodeType===1?(h=(c=e.anchorNode).closest)==null?void 0:h.call(c,"td,th"):null);if(!i)return;const s=i.parentElement,l=i.closest("table"),n=Array.from(s.children).indexOf(i),o=()=>{const d=s.cloneNode(!1);return Array.from(s.children).forEach(m=>{const g=document.createElement("td"),f=m.getAttribute("style");f&&g.setAttribute("style",f),g.style.removeProperty("background-color"),g.innerHTML="<br>",d.appendChild(g)}),d};if(t==="rowabove"&&s.before(o()),t==="rowbelow"&&s.after(o()),t==="delrow"){const d=s.parentElement;s.remove(),d.querySelector("tr")||l.remove()}(t==="colbefore"||t==="colafter")&&l.querySelectorAll("tr").forEach(d=>{const m=d.children[Math.min(n,d.children.length-1)],g=document.createElement("td"),f=m.getAttribute("style");f&&g.setAttribute("style",f),g.style.removeProperty("width"),g.style.removeProperty("background-color"),g.innerHTML="<br>",t==="colbefore"?m.before(g):m.after(g)}),t==="delcol"&&(l.querySelectorAll("tr").forEach(d=>{var m;return(m=d.children[n])==null?void 0:m.remove()}),l.querySelector("td,th")||l.remove()),t==="deltable"&&l.remove(),this.onChange(),this.positionTableHandles()}applyTableProps(t,e){e.width?t.style.width=/^\d+$/.test(e.width)?e.width+"px":e.width:t.style.removeProperty("width");const i=Array.from(t.querySelectorAll("td,th"));e.cellpadding!==""?i.forEach(s=>s.style.padding=e.cellpadding+"px"):i.forEach(s=>s.style.removeProperty("padding")),e.cellspacing!==""?(t.style.borderCollapse="separate",t.style.borderSpacing=e.cellspacing+"px"):(t.style.borderCollapse="collapse",t.style.removeProperty("border-spacing")),e.border!==""&&+e.border>0?(t.style.border=e.border+"px solid #b9c2cc",i.forEach(s=>s.style.border=e.border+"px solid #b9c2cc")):(t.style.removeProperty("border"),i.forEach(s=>s.style.removeProperty("border"))),t.style.removeProperty("margin-left"),t.style.removeProperty("margin-right"),e.align==="center"?(t.style.marginLeft="auto",t.style.marginRight="auto"):e.align==="right"?(t.style.marginLeft="auto",t.style.marginRight="0"):e.align==="left"&&(t.style.marginLeft="0",t.style.marginRight="auto")}tablePropsDlg(){const t=this.tblActive;if(!t)return;let e,i,s,l,n;const o="display:flex;align-items:center;gap:10px;margin:10px 0",r="width:120px;color:#556;flex:none",c="flex:1;border:1px solid #cfd6df;border-radius:6px;padding:7px 9px;font:14px inherit",h=t.querySelector("td,th"),d=t.style.width||"",m=h&&h.style.padding?parseFloat(h.style.padding):"",g=t.style.borderSpacing?parseFloat(t.style.borderSpacing):"",f=t.style.borderWidth?parseFloat(t.style.borderWidth):"",v=t.style.marginLeft,y=t.style.marginRight,T=v==="auto"&&y==="auto"?"center":v==="auto"?"right":y==="auto"&&v==="0"?"left":"";this.dialog(this.t("tablepropsttl"),S=>{const M=(x,E)=>{const H=document.createElement("div");H.style.cssText=o;const B=document.createElement("span");B.style.cssText=r,B.textContent=this.t(x),H.append(B,E),S.appendChild(H)};e=document.createElement("input"),e.type="text",e.style.cssText=c,e.placeholder="e.g. 600px or 100%",e.value=d,M("tblwidth",e),i=document.createElement("input"),i.type="number",i.min="0",i.style.cssText=c,i.value=String(m),M("tblcellpadding",i),s=document.createElement("input"),s.type="number",s.min="0",s.style.cssText=c,s.value=String(g),M("tblcellspacing",s),l=document.createElement("input"),l.type="number",l.min="0",l.style.cssText=c,l.value=String(f),M("tblborder",l),n=document.createElement("select"),n.style.cssText=c,[["","alignnone"],["left","alignleft"],["center","aligncenter"],["right","alignright"]].forEach(([x,E])=>{const H=document.createElement("option");H.value=x,H.textContent=this.t(E),x===T&&(H.selected=!0),n.appendChild(H)}),M("tblalign",n)},[{label:this.t("cancel"),action:()=>this.closeDlg()},{label:this.t("save"),primary:!0,action:()=>{this.applyTableProps(t,{width:e.value.trim(),cellpadding:i.value.trim(),cellspacing:s.value.trim(),border:l.value.trim(),align:n.value}),this.closeDlg(),this.onChange(),this.positionTableHandles()}}])}currentCell(){let t=this.savedRange?this.savedRange.startContainer:null;if(!t||!this.ed.contains(t)){const e=window.getSelection();t=e&&this.ed.contains(e.anchorNode)?e.anchorNode:null}for(;t&&t!==this.ed;){if(t.nodeType===1&&/^(TD|TH)$/.test(t.tagName))return t;t=t.parentNode}return null}toHexColor(t){if(/^#[0-9a-fA-F]{6}$/.test(t))return t;const e=/rgba?\((\d+)[,\s]+(\d+)[,\s]+(\d+)/.exec(t);return e?"#"+[e[1],e[2],e[3]].map(i=>(+i).toString(16).padStart(2,"0")).join(""):""}formRow(t,e,i){const s=document.createElement("div");s.style.cssText="display:flex;align-items:center;gap:10px;margin:10px 0;min-width:360px";const l=document.createElement("span");l.style.cssText="width:120px;color:#556;flex:none",l.textContent=e,s.append(l,i),t.appendChild(s)}formInput(t,e=""){const i=document.createElement("input");return i.type="text",i.style.cssText="flex:1;border:1px solid #cfd6df;border-radius:6px;padding:7px 9px;font:14px inherit;min-width:0",i.value=t,i.placeholder=e,i}formSelect(t,e){const i=document.createElement("select");return i.style.cssText="flex:1;border:1px solid #cfd6df;border-radius:6px;padding:7px 9px;font:14px inherit;background:#fff",t.forEach(([s,l])=>{const n=document.createElement("option");n.value=s,n.textContent=l,s===e&&(n.selected=!0),i.appendChild(n)}),i}formBg(t){const e=document.createElement("div");e.style.cssText="flex:1;display:flex;align-items:center;gap:8px";const i=this.toHexColor(t),s=document.createElement("input");s.type="color",s.value=i||"#ffffff",s.style.cssText="width:36px;height:29px;border:1px solid #cfd6df;border-radius:4px;padding:1px;background:none;cursor:pointer";const l=document.createElement("label");l.style.cssText="display:flex;align-items:center;gap:6px;cursor:pointer;color:#556";const n=document.createElement("input");return n.type="checkbox",n.checked=!!i,l.append(n,document.createTextNode(this.t("fill"))),s.addEventListener("input",()=>n.checked=!0),e.append(s,l),{wrap:e,color:s,fill:n}}setOrClear(t,e,i){i?t.style.setProperty(e,/^(width|height)$/.test(e)&&/^\d+$/.test(i)?i+"px":i):t.style.removeProperty(e)}cellPropsDlg(){const t=this.currentCell();if(!t){alert(this.t("nocell"));return}let e,i,s,l,n;this.dialog(this.t("cellprops").replace("…",""),o=>{e=this.formInput(t.style.width,"e.g. 120px / 25%"),this.formRow(o,this.t("tblwidth"),e),i=this.formInput(t.style.height,"e.g. 40px"),this.formRow(o,this.t("tblheight"),i),s=this.formSelect([["",this.t("alignnone")],["left",this.t("alignleft")],["center",this.t("aligncenter")],["right",this.t("alignright")]],t.style.textAlign||""),this.formRow(o,this.t("tblalign"),s),l=this.formSelect([["",this.t("alignnone")],["top",this.t("valigntop")],["middle",this.t("valignmiddle")],["bottom",this.t("valignbottom")]],t.style.verticalAlign||""),this.formRow(o,this.t("valign"),l),n=this.formBg(t.style.backgroundColor||""),this.formRow(o,this.t("backcolor"),n.wrap)},[{label:this.t("cancel"),action:()=>this.closeDlg()},{label:this.t("save"),primary:!0,action:()=>{this.setOrClear(t,"width",e.value.trim()),this.setOrClear(t,"height",i.value.trim()),this.setOrClear(t,"text-align",s.value),this.setOrClear(t,"vertical-align",l.value),this.setOrClear(t,"background-color",n.fill.checked?n.color.value:""),this.closeDlg(),this.onChange(),this.positionTableHandles()}}])}rowPropsDlg(){const t=this.currentCell();if(!t){alert(this.t("nocell"));return}const e=t.parentElement;let i,s;this.dialog(this.t("rowprops").replace("…",""),l=>{i=this.formInput(e.style.height,"e.g. 40px"),this.formRow(l,this.t("tblheight"),i),s=this.formBg(e.style.backgroundColor||""),this.formRow(l,this.t("backcolor"),s.wrap)},[{label:this.t("cancel"),action:()=>this.closeDlg()},{label:this.t("save"),primary:!0,action:()=>{this.setOrClear(e,"height",i.value.trim()),this.setOrClear(e,"background-color",s.fill.checked?s.color.value:""),this.closeDlg(),this.onChange(),this.positionTableHandles()}}])}colPropsDlg(){const t=this.currentCell();if(!t){alert(this.t("nocell"));return}const e=t.parentElement,i=t.closest("table"),s=Array.from(e.children).indexOf(t),l=Array.from(i.rows).map(r=>r.cells[s]).filter(Boolean);let n,o;this.dialog(this.t("colprops").replace("…",""),r=>{n=this.formInput(t.style.width,"e.g. 120px / 25%"),this.formRow(r,this.t("tblwidth"),n),o=this.formBg(t.style.backgroundColor||""),this.formRow(r,this.t("backcolor"),o.wrap)},[{label:this.t("cancel"),action:()=>this.closeDlg()},{label:this.t("save"),primary:!0,action:()=>{l.forEach(r=>{this.setOrClear(r,"width",n.value.trim()),this.setOrClear(r,"background-color",o.fill.checked?o.color.value:"")}),this.closeDlg(),this.onChange(),this.positionTableHandles()}}])}closeDlg(){this.dlgOvl&&(this.dlgOvl.remove(),this.dlgOvl=null)}dialog(t,e,i){this.closeDlg(),this.closePop(),this.dlgOvl=document.createElement("div"),this.dlgOvl.className="ovl";const s=document.createElement("div");s.className="dlg",s.dir=this.dir(),s.innerHTML=`<header><span>${t}</span><button type="button">×</button></header>
|
|
8
8
|
<div class="body"></div><footer></footer>`,s.querySelector("header button").onclick=()=>this.closeDlg(),e(s.querySelector(".body")),(i||[{label:this.t("close"),primary:!0,action:()=>this.closeDlg()}]).forEach(l=>{const n=document.createElement("button");n.type="button",n.textContent=l.label,l.primary&&(n.className="pri"),n.onclick=l.action,s.querySelector("footer").appendChild(n)}),this.dlgOvl.appendChild(s),this.dlgOvl.addEventListener("mousedown",l=>{l.target===this.dlgOvl&&this.closeDlg()}),document.body.appendChild(this.dlgOvl)}sourceDlg(){let t;this.dialog(this.t("srcttl"),e=>{t=document.createElement("textarea"),t.value=this.ed.innerHTML.replace(/></g,`>
|
|
9
9
|
<`),e.appendChild(t)},[{label:this.t("cancel"),action:()=>this.closeDlg()},{label:this.t("save"),primary:!0,action:()=>{this.ed.innerHTML=t.value,this.closeDlg(),this.onChange()}}])}helpDlg(){this.dialog(this.t("helpttl"),t=>{const e=[["Ctrl+B",this.t("bold")],["Ctrl+I",this.t("italic")],["Ctrl+U",this.t("underline")],["Ctrl+Z",this.t("undo")],["Ctrl+Y",this.t("redo")],["Ctrl+A",this.t("selectall")],["Alt+0",this.t("helpttl")]];t.innerHTML=`<p style="color:#556">${this.t("shortcuts")}</p>
|
|
10
10
|
<table class="kbd">${e.map(i=>`<tr><td>${i[1]}</td><td><kbd>${i[0]}</kbd></td></tr>`).join("")}</table>`})}wordCountDlg(){this.dialog(this.t("wcttl"),t=>{var e;t.innerHTML=`<table class="kbd">
|
|
11
11
|
<tr><td>${this.t("wcwords")}</td><td>${this.countWords()}</td></tr>
|
|
12
|
-
<tr><td>${this.t("wcchars")}</td><td>${((e=this.ed.textContent)==null?void 0:e.replace(/\s/g,"").length)??0}</td></tr></table>`})}previewDlg(){this.dialog(this.t("previewttl"),t=>{const e=document.createElement("div");e.style.cssText="width:640px;max-width:78vw;max-height:52vh;overflow:auto;border:1px solid #e3e3e3;border-radius:6px;padding:14px;font-family:Helvetica,Arial,sans-serif;font-size:14px",e.innerHTML=this.ed.innerHTML,t.appendChild(e)})}charMap(){this.dialog(this.t("charmap").replace("…",""),t=>{const e=document.createElement("div");e.className="chgrid",X.forEach(i=>{const s=document.createElement("button");s.textContent=i,s.onclick=()=>{this.closeDlg(),this.exec("insertText",i)},e.appendChild(s)}),t.appendChild(e)})}printDoc(){const t=window.open("","_blank");t&&(t.document.write(`<html dir="${this.dir()}"><body style="font-family:Helvetica,Arial,sans-serif;font-size:14px">${this.ed.innerHTML}</body></html>`),t.document.close(),t.focus(),t.print())}pickImage(){this.imgInput.value="",this.imgInput.click()}insertImagePlaceholder(){this.restoreSel();const t="img-ph-"+Date.now().toString(36)+Math.random().toString(36).slice(2,6);document.execCommand("insertHTML",!1,`<div class="img-ph" id="${t}" contenteditable="false">${a.image}<span>${this.t("dropimage")}</span></div>`);const e=this.ed.querySelector("#"+t);e&&(e.removeAttribute("id"),this.selectImgPlaceholder(e)),this.onChange()}clearImgPlaceholderSel(){var t,e;(t=this.phCtx)==null||t.remove(),this.phCtx=null,(e=this.phActive)==null||e.classList.remove("active"),this.phActive=null}selectImgPlaceholder(t){this.phActive!==t&&(this.clearImgPlaceholderSel(),this.phActive=t,t.classList.add("active"),this.phCtx=document.createElement("div"),this.phCtx.className="imgctx img-ph-ctx",this.phCtx.dir=this.dir(),document.body.appendChild(this.phCtx),this.renderPhCtxButtons())}renderPhCtxButtons(){const t=this.phCtx;t&&(t.innerHTML="",t.append(this.ctxBtn(a.uploadic,this.t("uploadimg"),()=>{this.phUploadTarget=this.phActive,this.pickImage()}),this.ctxBtn(a.link,this.t("imagelink"),()=>this.renderPhCtxUrlInput())),this.positionImgPhCtx())}renderPhCtxUrlInput(){const t=this.phCtx;if(!t)return;t.innerHTML="";const e=document.createElement("input");e.type="url",e.className="urlinp",e.placeholder=this.t("imageurlph");const i=document.createElement("button");i.type="button",i.className="txtbtn",i.textContent=this.t("insertimg");const s=()=>{const l=e.value.trim(),n=this.phActive;if(!n)return;if(!/^(https?:|data:image\/|blob:)/i.test(l)){e.classList.add("err"),e.focus();return}i.disabled=!0,e.disabled=!0;const o=new Image;o.onload=()=>this.replacePlaceholderWithImage(n,l,""),o.onerror=()=>{i.disabled=!1,e.disabled=!1,e.classList.add("err"),e.focus()},o.src=l};i.addEventListener("click",s),e.addEventListener("input",()=>e.classList.remove("err")),e.addEventListener("keydown",l=>{l.key==="Enter"?(l.preventDefault(),s()):l.key==="Escape"&&(l.stopPropagation(),this.renderPhCtxButtons())}),t.append(e,i),this.positionImgPhCtx(),e.focus()}readImageFileInto(t,e){if(e.classList.contains("uploading"))return;if(this.imageUploadHandler){this.uploadImageFile(t,e);return}const i=new FileReader;i.onload=()=>{this.ed.contains(e)&&this.replacePlaceholderWithImage(e,i.result,t.name.replace(/"/g,""))},i.readAsDataURL(t)}uploadImageFile(t,e){const i=t.name.replace(/"/g,"");e.classList.remove("upload-error"),e.classList.add("uploading");const s=e.querySelector("span");s&&(s.textContent=this.t("uploading")),this.imageUploadHandler(t).then(l=>{this.ed.contains(e)&&this.replacePlaceholderWithImage(e,l,i)}).catch(l=>{var n;this.ed.contains(e)&&(e.classList.remove("uploading"),e.classList.add("upload-error"),s&&(s.textContent=this.t("uploadfailed")),(n=this.onImageUploadError)==null||n.call(this,l,t))})}replacePlaceholderWithImage(t,e,i){const s=document.createElement("img");s.src=e,s.alt="",i&&(s.title=i),t.replaceWith(s),this.phActive===t&&this.clearImgPlaceholderSel(),this.refreshState(),this.onChange()}positionImgPhCtx(){if(this.phActive&&!document.body.contains(this.phActive)){this.clearImgPlaceholderSel();return}if(!this.phActive||!this.phCtx)return;const t=this.phActive.getBoundingClientRect(),e=this.phCtx.offsetWidth,i=this.phCtx.offsetHeight;let s=t.left+scrollX+(t.width-e)/2;s=Math.max(8+scrollX,Math.min(s,scrollX+innerWidth-e-8));let l=t.bottom+scrollY+8;t.bottom+8+i>innerHeight-4&&(l=Math.max(this.ctxMinTop(),t.top+scrollY-i-8)),this.phCtx.style.left=s+"px",this.phCtx.style.top=l+"px"}pickWordDoc(){this.docInput.value="",this.docInput.click()}toggleFullscreen(){this.shell.classList.toggle("fullscreen");const t=this.toolbar.querySelector("[data-id=fullscreen]");t==null||t.classList.toggle("on",this.shell.classList.contains("fullscreen")),this.positionTableHandles()}clearTableHandles(){var t,e,i,s,l;(t=this.tblCorner)==null||t.remove(),this.tblCorner=null,this.tblColBars.forEach(n=>n.remove()),this.tblColBars=[],(e=this.tblCtx)==null||e.remove(),this.tblCtx=null,(i=this.tblCellMark)==null||i.remove(),this.tblCellMark=null,(s=this.tblOpMark)==null||s.remove(),this.tblOpMark=null,this.tblOpMarkKind=null,(l=this.tblActive)==null||l.classList.remove("tbl-selected"),this.tblActive=null}positionCellMarker(){if(!this.tblCellMark)return;const t=this.currentCell();if(!t||!this.tblActive||t.closest("table")!==this.tblActive){this.tblCellMark.style.display="none";return}const e=t.getBoundingClientRect();this.tblCellMark.style.display="block",this.tblCellMark.style.left=e.left+scrollX+"px",this.tblCellMark.style.top=e.top+scrollY+"px",this.tblCellMark.style.width=e.width+"px",this.tblCellMark.style.height=e.height+"px"}setOpTarget(t){this.tblOpMarkKind=t,this.positionOpMark()}positionOpMark(){var h;const t=this.tblOpMarkKind,e=t?this.currentCell():null;if(!t||!e||!this.tblActive||e.closest("table")!==this.tblActive){(h=this.tblOpMark)==null||h.remove(),this.tblOpMark=null;return}this.tblOpMark||(this.tblOpMark=document.createElement("div"),this.tblOpMark.className="tbl-opmark",document.body.appendChild(this.tblOpMark));const i=this.tblActive.getBoundingClientRect(),s=e.getBoundingClientRect(),l=e.parentElement.getBoundingClientRect(),n=t==="row"?l.left:s.left,o=t==="row"?l.top:i.top,r=t==="row"?l.width:s.width,c=t==="row"?l.height:i.height;this.tblOpMark.style.left=n+scrollX+"px",this.tblOpMark.style.top=o+scrollY+"px",this.tblOpMark.style.width=r+"px",this.tblOpMark.style.height=c+"px"}ctxMinTop(){return Math.max(scrollY+4,this.ed.getBoundingClientRect().top+scrollY-2)}ctxBtn(t,e,i,s){const l=document.createElement("button");return l.type="button",l.title=e,l.innerHTML=t,s&&(l.dataset.id=s),l.addEventListener("mousedown",n=>n.preventDefault()),l.addEventListener("click",i),l}ctxSep(){const t=document.createElement("div");return t.className="sep",t}buildTableCtxToolbar(){const t=document.createElement("div");t.className="tblctx",t.dir=this.dir();const e=(i,s)=>(i.addEventListener("mouseenter",()=>this.setOpTarget(s)),i.addEventListener("mouseleave",()=>this.setOpTarget(null)),i);return t.append(e(this.ctxBtn(a.rowbefore,this.t("rowabove"),()=>this.tableOp("rowabove")),"row"),e(this.ctxBtn(a.rowafter,this.t("rowbelow"),()=>this.tableOp("rowbelow")),"row"),e(this.ctxBtn(a.rowdelete,this.t("delrow"),()=>this.tableOp("delrow")),"row"),this.ctxSep(),e(this.ctxBtn(a.colbefore,this.t("colbefore"),()=>this.tableOp("colbefore")),"col"),e(this.ctxBtn(a.colafter,this.t("colafter"),()=>this.tableOp("colafter")),"col"),e(this.ctxBtn(a.coldelete,this.t("delcol"),()=>this.tableOp("delcol")),"col"),this.ctxSep(),this.ctxBtn(a.tabledelete,this.t("deltable"),()=>this.tableOp("deltable")),this.ctxBtn(a.tableic,this.t("tablepropsttl"),()=>this.tablePropsDlg())),document.body.appendChild(t),t}positionTableHandles(){if(!this.tblActive||!document.body.contains(this.tblActive)){this.clearTableHandles();return}const t=this.ed.getAttribute("dir")==="rtl",e=this.tblActive.getBoundingClientRect(),i=e.top+scrollY,s=e.left+scrollX,l=e.right+scrollX,n=e.bottom+scrollY;if(this.tblCorner&&(this.tblCorner.style.top=n-5+"px",this.tblCorner.style.left=(t?s-5:l-5)+"px",this.tblCorner.style.cursor=t?"nesw-resize":"nwse-resize"),this.tblCtx){const r=this.tblCtx.offsetWidth,c=this.tblCtx.offsetHeight;let h=s+(l-s)/2-r/2;h=Math.max(8+scrollX,Math.min(h,scrollX+innerWidth-r-8));let d=i-c-8;d<this.ctxMinTop()&&(d=n+8),this.tblCtx.style.left=h+"px",this.tblCtx.style.top=d+"px"}this.tblColBars.forEach(r=>r.remove()),this.tblColBars=[];const o=this.tblActive.rows[0];if(o)for(let r=0;r<o.cells.length-1;r++){const c=o.cells[r].getBoundingClientRect(),h=(t?c.left:c.right)+scrollX,d=document.createElement("div");d.className="tbl-colbar",d.style.top=i+"px",d.style.left=h+"px",d.style.height=n-i+"px",document.body.appendChild(d),d.addEventListener("mousedown",m=>this.startColBarDrag(m,r)),this.tblColBars.push(d)}this.positionCellMarker(),this.positionOpMark()}selectTableForResize(t){this.tblActive!==t&&(this.clearTableHandles(),this.tblActive=t,t.classList.add("tbl-selected"),this.tblCorner=document.createElement("div"),this.tblCorner.className="tbl-handle",document.body.appendChild(this.tblCorner),this.tblCorner.addEventListener("mousedown",e=>this.startTableCornerDrag(e)),this.tblCellMark=document.createElement("div"),this.tblCellMark.className="tbl-cellmark",this.tblCellMark.style.display="none",document.body.appendChild(this.tblCellMark),this.tblCtx=this.buildTableCtxToolbar(),this.positionTableHandles())}withNoTextSelect(t){const e=document.body.style.userSelect;document.body.style.userSelect="none",t(()=>{document.body.style.userSelect=e})}startTableCornerDrag(t){t.preventDefault();const e=this.tblActive;if(!e)return;const i=this.ed.getAttribute("dir")==="rtl",s=t.clientX,l=e.getBoundingClientRect().width;e.style.tableLayout=e.style.tableLayout||"fixed",this.withNoTextSelect(n=>{const o=c=>{const h=i?-(c.clientX-s):c.clientX-s;e.style.width=Math.max(60,Math.round(l+h))+"px",this.positionTableHandles()},r=()=>{window.removeEventListener("mousemove",o),window.removeEventListener("mouseup",r),n(),this.onChange()};window.addEventListener("mousemove",o),window.addEventListener("mouseup",r)})}startColBarDrag(t,e){t.preventDefault(),t.stopPropagation();const i=this.tblActive;if(!i)return;const s=this.ed.getAttribute("dir")==="rtl",l=Array.from(i.rows),n=l.map(d=>d.cells[e]).filter(Boolean),o=l.map(d=>d.cells[e+1]).filter(Boolean);if(!n.length||!o.length)return;const r=t.clientX,c=n[0].getBoundingClientRect().width,h=o[0].getBoundingClientRect().width;i.style.tableLayout="fixed",this.withNoTextSelect(d=>{const m=f=>{const b=(s?-1:1)*(f.clientX-r);n.forEach(v=>v.style.width=Math.max(24,Math.round(c+b))+"px"),o.forEach(v=>v.style.width=Math.max(24,Math.round(h-b))+"px"),this.positionTableHandles()},g=()=>{window.removeEventListener("mousemove",m),window.removeEventListener("mouseup",g),d(),this.onChange()};window.addEventListener("mousemove",m),window.addEventListener("mouseup",g)})}cancelImgHide(){this.imgHideTimer!=null&&(window.clearTimeout(this.imgHideTimer),this.imgHideTimer=null)}scheduleImgHide(){this.cancelImgHide(),this.imgHideTimer=window.setTimeout(()=>this.clearImageHandles(),250)}clearImageHandles(){var t,e;this.cancelImgHide(),this.imgHandles.forEach(i=>i.remove()),this.imgHandles=[],(t=this.imgCtx)==null||t.remove(),this.imgCtx=null,(e=this.imgActive)==null||e.classList.remove("img-selected"),this.imgActive=null}selectImage(t){this.imgActive!==t&&(this.clearImageHandles(),this.imgActive=t,t.classList.add("img-selected"),this.imgHandles=yt.map(e=>{const i=document.createElement("div");return i.className="img-handle img-handle-"+e,i.dataset.corner=e,i.addEventListener("mousedown",s=>this.startImageResizeDrag(s,e)),i.addEventListener("mouseenter",()=>this.cancelImgHide()),i.addEventListener("mouseleave",()=>this.scheduleImgHide()),document.body.appendChild(i),i}),this.imgCtx=this.buildImageCtxToolbar(t),this.positionImageHandles())}buildImageCtxToolbar(t){const e=document.createElement("div");e.className="imgctx",e.dir=this.dir();const i=()=>{var h;const c=this.buildImageCtxToolbar(t);(h=this.imgCtx)==null||h.replaceWith(c),this.imgCtx=c,this.positionImageHandles()},s=c=>{this.setImageAlign(t,c),i()},l=t.style.float==="left",n=t.style.float==="right",o=!l&&!n&&t.style.marginLeft==="auto"&&t.style.marginRight==="auto",r=(c,h,d,m)=>{const g=this.ctxBtn(c,h,m);return g.classList.toggle("on",d),g};return e.append(r(a.alignleft,this.t("alignleft"),l,()=>s("left")),r(a.aligncenter,this.t("aligncenter"),o,()=>s("center")),r(a.alignright,this.t("alignright"),n,()=>s("right")),this.ctxSep(),r(a.rotateleft,this.t("rotateleft"),!1,()=>{this.rotateImage(t,-90),i()}),r(a.rotateright,this.t("rotateright"),!1,()=>{this.rotateImage(t,90),i()}),this.ctxSep(),r(a.fliphorizontal,this.t("fliphorizontal"),t.dataset.flipx==="1",()=>{this.flipImage(t,"x"),i()}),r(a.flipvertical,this.t("flipvertical"),t.dataset.flipy==="1",()=>{this.flipImage(t,"y"),i()}),this.ctxSep(),r(a.trash,this.t("deleteimg"),!1,()=>{t.remove(),this.clearImageHandles(),this.onChange()})),e.addEventListener("mousedown",c=>c.preventDefault()),e.addEventListener("mouseenter",()=>this.cancelImgHide()),e.addEventListener("mouseleave",()=>this.scheduleImgHide()),document.body.appendChild(e),e}setImageAlign(t,e){t.style.float="",t.style.display="",t.style.marginLeft="",t.style.marginRight="",t.style.marginBottom="",e==="left"?(t.style.float="left",t.style.marginInlineEnd="1em",t.style.marginBottom="0.5em"):e==="right"?(t.style.float="right",t.style.marginInlineStart="1em",t.style.marginBottom="0.5em"):(t.style.display="block",t.style.marginLeft="auto",t.style.marginRight="auto"),this.onChange()}applyImgTransform(t){const e=parseInt(t.dataset.rotate||"0",10),i=t.dataset.flipx==="1"?-1:1,s=t.dataset.flipy==="1"?-1:1;t.style.transform=e||i<0||s<0?`rotate(${e}deg) scale(${i}, ${s})`:""}rotateImage(t,e){const i=((parseInt(t.dataset.rotate||"0",10)+e)%360+360)%360;t.dataset.rotate=String(i),this.applyImgTransform(t),this.positionImageHandles(),this.onChange()}flipImage(t,e){const i=e==="x"?"flipx":"flipy";t.dataset[i]=t.dataset[i]==="1"?"":"1",this.applyImgTransform(t),this.positionImageHandles(),this.onChange()}positionImageHandles(){if(!this.imgActive||!document.body.contains(this.imgActive)){this.clearImageHandles();return}const t=this.imgActive.getBoundingClientRect(),e=t.top+scrollY,i=t.left+scrollX,s=t.right+scrollX,l=t.bottom+scrollY,n={nw:[i,e],ne:[s,e],sw:[i,l],se:[s,l]};if(this.imgHandles.forEach(o=>{const[r,c]=n[o.dataset.corner];o.style.left=r-5+"px",o.style.top=c-5+"px"}),this.imgCtx){const o=this.imgCtx.offsetWidth,r=this.imgCtx.offsetHeight;let c=i+(s-i)/2-o/2;c=Math.max(8+scrollX,Math.min(c,scrollX+innerWidth-o-8));let h=e-r-8;h<this.ctxMinTop()&&(h=l+8),this.imgCtx.style.left=c+"px",this.imgCtx.style.top=h+"px"}}startImageResizeDrag(t,e){t.preventDefault();const i=this.imgActive;if(!i)return;this.cancelImgHide();const s=t.clientX,l=i.getBoundingClientRect().width,n=e==="nw"||e==="sw"?-1:1;this.withNoTextSelect(o=>{const r=h=>{i.style.width=Math.max(24,Math.round(l+n*(h.clientX-s)))+"px",i.style.height="auto",this.positionImageHandles()},c=()=>{window.removeEventListener("mousemove",r),window.removeEventListener("mouseup",c),o(),this.onChange()};window.addEventListener("mousemove",r),window.addEventListener("mouseup",c)})}toggleBlock(t){this.exec("formatBlock",this.currentBlock()===t?"<p>":"<"+t+">")}clearSelToolbar(){var t;(t=this.selCtx)==null||t.remove(),this.selCtx=null}updateSelToolbar(t){if(this.options.readonly||t.isCollapsed||!t.rangeCount){this.clearSelToolbar();return}const e=t.getRangeAt(0),i=e.getBoundingClientRect();if(!i.width&&!i.height){this.clearSelToolbar();return}this.selCtx||(this.selCtx=this.buildSelToolbar()),this.positionSelToolbar(e)}buildSelToolbar(){var o;const t=document.createElement("div");t.className="selctx",t.dir=this.dir();const e=this.ctxBtn('<b style="font:600 15px/1 Georgia,serif">A</b><span class="colorbar" data-cb="fore"></span>',this.t("forecolor"),()=>this.colorMenu(e,"fore")),i=this.ctxBtn(a.backcolor,this.t("backcolor"),()=>this.colorMenu(i,"back"));(o=i.querySelector("svg"))==null||o.insertAdjacentHTML("afterend",'<span class="colorbar" data-cb="back"></span>');const s=this.ctxBtn(a.caseic,this.t("changecase"),()=>this.caseMenu(s)),l=this.ctxBtn(a.lineheight,this.t("lineheight"),()=>this.lineHeightMenu(l)),n=this.ctxBtn(a.wordspacing,this.t("wordspacing"),()=>this.wordSpacingMenu(n));return t.append(this.ctxBtn(a.bold,this.t("bold"),()=>this.exec("bold"),"bold"),this.ctxBtn(a.italic,this.t("italic"),()=>this.exec("italic"),"italic"),e,i,this.ctxSep(),this.ctxBtn(a.quote,this.t("quote"),()=>this.toggleBlock("blockquote"),"blockquote"),this.ctxBtn('<b style="font:700 12px/1 Arial,sans-serif">H2</b>',this.blockLabel("h2"),()=>this.toggleBlock("h2"),"h2"),this.ctxBtn('<b style="font:700 12px/1 Arial,sans-serif">H3</b>',this.blockLabel("h3"),()=>this.toggleBlock("h3"),"h3"),this.ctxSep(),this.ctxBtn(a.link,this.t("linkttl"),()=>this.linkDlg()),s,l,n),t.addEventListener("mousedown",r=>r.preventDefault()),document.body.appendChild(t),this.syncColorSwatches(t),t}positionSelToolbar(t){if(!this.selCtx)return;const e=t.getBoundingClientRect(),i=e.top+scrollY,s=e.left+scrollX,l=e.right+scrollX,n=e.bottom+scrollY,o=this.selCtx.offsetWidth,r=this.selCtx.offsetHeight;let c=s+(l-s)/2-o/2;c=Math.max(8+scrollX,Math.min(c,scrollX+innerWidth-o-8));let h=i-r-8;h<this.ctxMinTop()&&(h=n+8),this.selCtx.style.left=c+"px",this.selCtx.style.top=h+"px"}repositionSelToolbar(){if(!this.selCtx)return;const t=window.getSelection();t&&t.rangeCount&&!t.isCollapsed&&this.ed.contains(t.anchorNode)&&this.positionSelToolbar(t.getRangeAt(0))}currentBlock(){const t=window.getSelection();if(!t||!t.anchorNode||!this.ed.contains(t.anchorNode))return"p";const e=this.closestBlock(t.anchorNode);return e?e.tagName.toLowerCase().replace("div","p"):"p"}fontRefEl(){const t=window.getSelection();return t&&t.anchorNode&&this.ed.contains(t.anchorNode)?t.anchorNode.nodeType===1?t.anchorNode:t.anchorNode.parentElement:this.ed}currentFont(){const t=getComputedStyle(this.fontRefEl()).fontFamily.toLowerCase(),e=this.options.fontFamilyFormats.find(([i,s])=>t.includes(s.split(",")[0].toLowerCase()));return e?e[0]:""}currentSize(){const t=Math.round(parseFloat(getComputedStyle(this.fontRefEl()).fontSize));return t>0?t+"px":""}refreshState(){var r,c,h;const t=window.getSelection(),e=t?this.ed.contains(t.anchorNode):!1,i=this.currentBlock();[this.toolbar,this.selCtx].filter(Boolean).forEach(d=>{["bold","italic","underline","strikeThrough","justifyLeft","justifyCenter","justifyRight","justifyFull","insertOrderedList","insertUnorderedList"].forEach(m=>{const g=d.querySelector(`[data-id=${m}]`);g&&g.classList.toggle("on",e&&document.queryCommandState(m))}),["h2","h3","blockquote"].forEach(m=>{const g=d.querySelector(`[data-id=${m}]`);g&&g.classList.toggle("on",e&&i===m)})});const l=t?this.closestBlock(t.anchorNode):null,n=((r=l==null?void 0:l.closest("[dir]"))==null?void 0:r.getAttribute("dir"))||this.ed.getAttribute("dir")||this.dir();(c=this.toolbar.querySelector("[data-id=ltr]"))==null||c.classList.toggle("on",e&&n==="ltr"),(h=this.toolbar.querySelector("[data-id=rtl]"))==null||h.classList.toggle("on",e&&n==="rtl");const o=(d,m,g)=>{const f=this.toolbar.querySelector(`[data-id=${d}] .lbl`);f&&(f.textContent=m||g||"",f.classList.toggle("empty",!m))};o("fontsel",this.currentFont()),o("sizesel",this.currentSize().replace("px","")),e&&o("blocksel",D.some(d=>d[0]===i)?this.blockLabel(i):this.t("para")),this.sbWords.textContent=this.countWords()+" "+this.t("words")}countWords(){const t=(this.ed.textContent||"").trim();return t?t.split(/\s+/).length:0}handlePaste(t){const e=t.clipboardData;if(!e)return;t.preventDefault();const i=e.getData("text/html"),s=Array.from(e.items).find(l=>l.type.startsWith("image/"));if(s&&!i){const l=new FileReader;l.onload=()=>{document.execCommand("insertHTML",!1,`<img src="${l.result}" alt="">`),this.onChange()},l.readAsDataURL(s.getAsFile());return}i?document.execCommand("insertHTML",!1,Q(i,this.dir())):document.execCommand("insertHTML",!1,G(e.getData("text/plain"))),this.onChange()}initUI(){this.closePop(),this.closeDlg(),this.clearTableHandles(),this.clearImgPlaceholderSel(),this.shell.dir=this.dir(),this.ed.dir=this.dir(),this.options.menubar?this.buildMenubar():this.menubar.style.display="none",this.options.toolbar?this.buildToolbar():this.toolbar.style.display="none",this.sbHelp.textContent=this.t("statushelp"),this.refreshState()}};Z.instanceCounter=0;let R=Z;exports.BLOCKS=D;exports.CHARS=X;exports.COLORS=j;exports.FONTS=W;exports.FableEditor=R;exports.I18N=z;exports.IC=a;exports.SIZES=U;exports.TXT=st;exports.cleanPastedHTML=Q;exports.getStrings=L;exports.normalizeTextPaste=G;
|
|
12
|
+
<tr><td>${this.t("wcchars")}</td><td>${((e=this.ed.textContent)==null?void 0:e.replace(/\s/g,"").length)??0}</td></tr></table>`})}previewDlg(){this.dialog(this.t("previewttl"),t=>{const e=document.createElement("div");e.style.cssText="width:640px;max-width:78vw;max-height:52vh;overflow:auto;border:1px solid #e3e3e3;border-radius:6px;padding:14px;font-family:Helvetica,Arial,sans-serif;font-size:14px",e.innerHTML=this.ed.innerHTML,t.appendChild(e)})}charMap(){this.dialog(this.t("charmap").replace("…",""),t=>{const e=document.createElement("div");e.className="chgrid",Q.forEach(i=>{const s=document.createElement("button");s.textContent=i,s.onclick=()=>{this.closeDlg(),this.exec("insertText",i)},e.appendChild(s)}),t.appendChild(e)})}printDoc(){const t=window.open("","_blank");t&&(t.document.write(`<html dir="${this.dir()}"><body style="font-family:Helvetica,Arial,sans-serif;font-size:14px">${this.ed.innerHTML}</body></html>`),t.document.close(),t.focus(),t.print())}pickImage(){this.imgInput.value="",this.imgInput.click()}imgPhHTML(t){return`<div class="img-ph"${t?` id="${t}"`:""} contenteditable="false">${a.image}<span>${this.t("dropimage")}</span></div>`}insertImagePlaceholder(){this.restoreSel();const t="img-ph-"+Date.now().toString(36)+Math.random().toString(36).slice(2,6);document.execCommand("insertHTML",!1,this.imgPhHTML(t));const e=this.ed.querySelector("#"+t);e&&(e.removeAttribute("id"),this.selectImgPlaceholder(e)),this.onChange()}clearImgPlaceholderSel(){var t,e;(t=this.phCtx)==null||t.remove(),this.phCtx=null,(e=this.phActive)==null||e.classList.remove("active"),this.phActive=null}removeImgPlaceholder(){const t=this.phActive;t&&(this.clearImgPlaceholderSel(),(t.closest(".tpl-media")||t).remove(),this.refreshState(),this.onChange())}selectImgPlaceholder(t){this.phActive!==t&&(this.clearImgPlaceholderSel(),this.phActive=t,t.classList.add("active"),this.phCtx=document.createElement("div"),this.phCtx.className="imgctx img-ph-ctx",this.phCtx.dir=this.dir(),document.body.appendChild(this.phCtx),this.renderPhCtxButtons())}renderPhCtxButtons(){const t=this.phCtx;t&&(t.innerHTML="",t.append(this.ctxBtn(a.uploadic,this.t("uploadimg"),()=>{this.phUploadTarget=this.phActive,this.pickImage()}),this.ctxBtn(a.link,this.t("imagelink"),()=>this.renderPhCtxUrlInput()),this.ctxSep(),this.ctxBtn(a.trash,this.t("deleteimg"),()=>this.removeImgPlaceholder())),this.positionImgPhCtx())}renderPhCtxUrlInput(){const t=this.phCtx;if(!t)return;t.innerHTML="";const e=document.createElement("input");e.type="url",e.className="urlinp",e.placeholder=this.t("imageurlph");const i=document.createElement("button");i.type="button",i.className="txtbtn",i.textContent=this.t("insertimg");const s=()=>{const l=e.value.trim(),n=this.phActive;if(!n)return;if(!/^(https?:|data:image\/|blob:)/i.test(l)){e.classList.add("err"),e.focus();return}i.disabled=!0,e.disabled=!0;const o=new Image;o.onload=()=>this.replacePlaceholderWithImage(n,l,""),o.onerror=()=>{i.disabled=!1,e.disabled=!1,e.classList.add("err"),e.focus()},o.src=l};i.addEventListener("click",s),e.addEventListener("input",()=>e.classList.remove("err")),e.addEventListener("keydown",l=>{l.key==="Enter"?(l.preventDefault(),s()):l.key==="Escape"&&(l.stopPropagation(),this.renderPhCtxButtons())}),t.append(e,i),this.positionImgPhCtx(),e.focus()}readImageFileInto(t,e){if(e.classList.contains("uploading"))return;if(this.imageUploadHandler){this.uploadImageFile(t,e);return}const i=new FileReader;i.onload=()=>{this.ed.contains(e)&&this.replacePlaceholderWithImage(e,i.result,t.name.replace(/"/g,""))},i.readAsDataURL(t)}uploadImageFile(t,e){const i=t.name.replace(/"/g,"");e.classList.remove("upload-error"),e.classList.add("uploading");const s=e.querySelector("span");s&&(s.textContent=this.t("uploading")),this.imageUploadHandler(t).then(l=>{this.ed.contains(e)&&this.replacePlaceholderWithImage(e,l,i)}).catch(l=>{var n;this.ed.contains(e)&&(e.classList.remove("uploading"),e.classList.add("upload-error"),s&&(s.textContent=this.t("uploadfailed")),(n=this.onImageUploadError)==null||n.call(this,l,t))})}replacePlaceholderWithImage(t,e,i){const s=document.createElement("img");s.src=e,s.alt="",i&&(s.title=i),t.replaceWith(s),this.phActive===t&&this.clearImgPlaceholderSel(),this.refreshState(),this.onChange()}positionImgPhCtx(){if(this.phActive&&!document.body.contains(this.phActive)){this.clearImgPlaceholderSel();return}if(!this.phActive||!this.phCtx)return;const t=this.phActive.getBoundingClientRect(),e=this.phCtx.offsetWidth,i=this.phCtx.offsetHeight;let s=t.left+scrollX+(t.width-e)/2;s=Math.max(8+scrollX,Math.min(s,scrollX+innerWidth-e-8));let l=t.bottom+scrollY+8;t.bottom+8+i>innerHeight-4&&(l=Math.max(this.ctxMinTop(),t.top+scrollY-i-8)),this.phCtx.style.left=s+"px",this.phCtx.style.top=l+"px"}templateMenu(t){this.popup(t,e=>this.buildTemplatePickInto(e))}tplPreviewHTML(t){const e='<span class="pv-img"></span>',i='<span class="pv-h"></span>',s=r=>`<span class="pv-l" style="width:${r}%"></span>`,l=r=>`<span class="pv-col">${r}</span>`,n=r=>`<span class="pv-row">${r}</span>`,o=l(i+s(100)+s(88));return t==="img-left"?`<span class="pv">${n(e+o)}${s(100)}${s(72)}</span>`:t==="img-right"?`<span class="pv">${n(o+e)}${s(100)}${s(72)}</span>`:t==="img-top"?`<span class="pv pv-c">${e}${i}${s(100)}${s(72)}</span>`:`<span class="pv pv-c">${i}${s(100)}${s(72)}${e}</span>`}buildTemplatePickInto(t,e){const i=document.createElement("div");i.className="tplpick",D.forEach(s=>{const l=document.createElement("button");l.type="button",l.className="tpltile",l.title=this.t(R[s]),l.innerHTML=this.tplPreviewHTML(s)+`<span class="tpllbl">${this.t(R[s])}</span>`,l.addEventListener("click",()=>{this.closePop(),this.insertTemplate(s),e==null||e()}),i.appendChild(l)}),t.appendChild(i)}insertTemplate(t){this.restoreSel();const e=`<div class="tpl-media" contenteditable="false">${this.imgPhHTML()}</div>`,i=`<div class="tpl-text"><h2>${this.t("heading")}</h2><p>${this.t("para")}</p></div>`,s=t==="img-center"?i+e:e+i;document.execCommand("insertHTML",!1,`<div class="tpl tpl-${t}">${s}</div><p><br></p>`),this.saveSel(),this.onChange()}clearTplSel(){var t,e;(t=this.tplCtx)==null||t.remove(),this.tplCtx=null,(e=this.tplActive)==null||e.classList.remove("tpl-selected"),this.tplActive=null}selectTemplate(t){this.tplActive!==t&&(this.clearTplSel(),this.tplActive=t,t.classList.add("tpl-selected"),this.tplCtx=document.createElement("div"),this.tplCtx.className="imgctx tplctx",this.tplCtx.dir=this.dir(),document.body.appendChild(this.tplCtx),this.renderTplCtxButtons())}renderTplCtxButtons(){const t=this.tplCtx,e=this.tplActive;!t||!e||(t.innerHTML="",D.forEach(i=>{const s=this.ctxBtn(Ct[i],this.t(R[i]),()=>this.setTplLayout(i));s.classList.toggle("on",e.classList.contains("tpl-"+i)),t.appendChild(s)}),t.append(this.ctxSep(),this.ctxBtn(a.trash,this.t("deltemplate"),()=>this.removeTemplate())),this.positionTplCtx())}setTplLayout(t){const e=this.tplActive;if(!e)return;D.forEach(l=>e.classList.remove("tpl-"+l)),e.classList.add("tpl-"+t);const i=e.querySelector(":scope > .tpl-media"),s=e.querySelector(":scope > .tpl-text");i&&s&&(t==="img-center"?e.appendChild(i):e.insertBefore(i,s)),this.renderTplCtxButtons(),this.positionImgPhCtx(),this.positionImageHandles(),this.onChange()}removeTemplate(){const t=this.tplActive;t&&(this.clearTplSel(),this.phActive&&t.contains(this.phActive)&&this.clearImgPlaceholderSel(),this.imgActive&&t.contains(this.imgActive)&&this.clearImageHandles(),t.remove(),this.refreshState(),this.onChange())}positionTplCtx(){if(this.tplActive&&!document.body.contains(this.tplActive)){this.clearTplSel();return}if(!this.tplActive||!this.tplCtx)return;const t=this.tplActive.getBoundingClientRect(),e=this.tplCtx.offsetWidth,i=this.tplCtx.offsetHeight;let s=t.left+scrollX+(t.width-e)/2;s=Math.max(8+scrollX,Math.min(s,scrollX+innerWidth-e-8));let l=t.top+scrollY-i-8;l<this.ctxMinTop()&&(l=t.bottom+scrollY+8),this.tplCtx.style.left=s+"px",this.tplCtx.style.top=l+"px"}pickWordDoc(){this.docInput.value="",this.docInput.click()}toggleFullscreen(){this.shell.classList.toggle("fullscreen");const t=this.toolbar.querySelector("[data-id=fullscreen]");t==null||t.classList.toggle("on",this.shell.classList.contains("fullscreen")),this.positionTableHandles()}clearTableHandles(){var t,e,i,s,l;(t=this.tblCorner)==null||t.remove(),this.tblCorner=null,this.tblColBars.forEach(n=>n.remove()),this.tblColBars=[],(e=this.tblCtx)==null||e.remove(),this.tblCtx=null,(i=this.tblCellMark)==null||i.remove(),this.tblCellMark=null,(s=this.tblOpMark)==null||s.remove(),this.tblOpMark=null,this.tblOpMarkKind=null,(l=this.tblActive)==null||l.classList.remove("tbl-selected"),this.tblActive=null}positionCellMarker(){if(!this.tblCellMark)return;const t=this.currentCell();if(!t||!this.tblActive||t.closest("table")!==this.tblActive){this.tblCellMark.style.display="none";return}const e=t.getBoundingClientRect();this.tblCellMark.style.display="block",this.tblCellMark.style.left=e.left+scrollX+"px",this.tblCellMark.style.top=e.top+scrollY+"px",this.tblCellMark.style.width=e.width+"px",this.tblCellMark.style.height=e.height+"px"}setOpTarget(t){this.tblOpMarkKind=t,this.positionOpMark()}positionOpMark(){var h;const t=this.tblOpMarkKind,e=t?this.currentCell():null;if(!t||!e||!this.tblActive||e.closest("table")!==this.tblActive){(h=this.tblOpMark)==null||h.remove(),this.tblOpMark=null;return}this.tblOpMark||(this.tblOpMark=document.createElement("div"),this.tblOpMark.className="tbl-opmark",document.body.appendChild(this.tblOpMark));const i=this.tblActive.getBoundingClientRect(),s=e.getBoundingClientRect(),l=e.parentElement.getBoundingClientRect(),n=t==="row"?l.left:s.left,o=t==="row"?l.top:i.top,r=t==="row"?l.width:s.width,c=t==="row"?l.height:i.height;this.tblOpMark.style.left=n+scrollX+"px",this.tblOpMark.style.top=o+scrollY+"px",this.tblOpMark.style.width=r+"px",this.tblOpMark.style.height=c+"px"}ctxMinTop(){return Math.max(scrollY+4,this.ed.getBoundingClientRect().top+scrollY-2)}ctxBtn(t,e,i,s){const l=document.createElement("button");return l.type="button",l.title=e,l.innerHTML=t,s&&(l.dataset.id=s),l.addEventListener("mousedown",n=>n.preventDefault()),l.addEventListener("click",i),l}ctxSep(){const t=document.createElement("div");return t.className="sep",t}buildTableCtxToolbar(){const t=document.createElement("div");t.className="tblctx",t.dir=this.dir();const e=(i,s)=>(i.addEventListener("mouseenter",()=>this.setOpTarget(s)),i.addEventListener("mouseleave",()=>this.setOpTarget(null)),i);return t.append(e(this.ctxBtn(a.rowbefore,this.t("rowabove"),()=>this.tableOp("rowabove")),"row"),e(this.ctxBtn(a.rowafter,this.t("rowbelow"),()=>this.tableOp("rowbelow")),"row"),e(this.ctxBtn(a.rowdelete,this.t("delrow"),()=>this.tableOp("delrow")),"row"),this.ctxSep(),e(this.ctxBtn(a.colbefore,this.t("colbefore"),()=>this.tableOp("colbefore")),"col"),e(this.ctxBtn(a.colafter,this.t("colafter"),()=>this.tableOp("colafter")),"col"),e(this.ctxBtn(a.coldelete,this.t("delcol"),()=>this.tableOp("delcol")),"col"),this.ctxSep(),this.ctxBtn(a.trash,this.t("deltable"),()=>this.tableOp("deltable")),this.ctxBtn(a.tableic,this.t("tablepropsttl"),()=>this.tablePropsDlg())),document.body.appendChild(t),t}positionTableHandles(){if(!this.tblActive||!document.body.contains(this.tblActive)){this.clearTableHandles();return}const t=this.ed.getAttribute("dir")==="rtl",e=this.tblActive.getBoundingClientRect(),i=e.top+scrollY,s=e.left+scrollX,l=e.right+scrollX,n=e.bottom+scrollY;if(this.tblCorner&&(this.tblCorner.style.top=n-5+"px",this.tblCorner.style.left=(t?s-5:l-5)+"px",this.tblCorner.style.cursor=t?"nesw-resize":"nwse-resize"),this.tblCtx){const r=this.tblCtx.offsetWidth,c=this.tblCtx.offsetHeight;let h=s+(l-s)/2-r/2;h=Math.max(8+scrollX,Math.min(h,scrollX+innerWidth-r-8));let d=i-c-8;d<this.ctxMinTop()&&(d=n+8),this.tblCtx.style.left=h+"px",this.tblCtx.style.top=d+"px"}this.tblColBars.forEach(r=>r.remove()),this.tblColBars=[];const o=this.tblActive.rows[0];if(o)for(let r=0;r<o.cells.length-1;r++){const c=o.cells[r].getBoundingClientRect(),h=(t?c.left:c.right)+scrollX,d=document.createElement("div");d.className="tbl-colbar",d.style.top=i+"px",d.style.left=h+"px",d.style.height=n-i+"px",document.body.appendChild(d),d.addEventListener("mousedown",m=>this.startColBarDrag(m,r)),this.tblColBars.push(d)}this.positionCellMarker(),this.positionOpMark()}selectTableForResize(t){this.tblActive!==t&&(this.clearTableHandles(),this.tblActive=t,t.classList.add("tbl-selected"),this.tblCorner=document.createElement("div"),this.tblCorner.className="tbl-handle",document.body.appendChild(this.tblCorner),this.tblCorner.addEventListener("mousedown",e=>this.startTableCornerDrag(e)),this.tblCellMark=document.createElement("div"),this.tblCellMark.className="tbl-cellmark",this.tblCellMark.style.display="none",document.body.appendChild(this.tblCellMark),this.tblCtx=this.buildTableCtxToolbar(),this.positionTableHandles())}withNoTextSelect(t){const e=document.body.style.userSelect;document.body.style.userSelect="none",t(()=>{document.body.style.userSelect=e})}startTableCornerDrag(t){t.preventDefault();const e=this.tblActive;if(!e)return;const i=this.ed.getAttribute("dir")==="rtl",s=t.clientX,l=e.getBoundingClientRect().width;e.style.tableLayout=e.style.tableLayout||"fixed",this.withNoTextSelect(n=>{const o=c=>{const h=i?-(c.clientX-s):c.clientX-s;e.style.width=Math.max(60,Math.round(l+h))+"px",this.positionTableHandles()},r=()=>{window.removeEventListener("mousemove",o),window.removeEventListener("mouseup",r),n(),this.onChange()};window.addEventListener("mousemove",o),window.addEventListener("mouseup",r)})}startColBarDrag(t,e){t.preventDefault(),t.stopPropagation();const i=this.tblActive;if(!i)return;const s=this.ed.getAttribute("dir")==="rtl",l=Array.from(i.rows),n=l.map(d=>d.cells[e]).filter(Boolean),o=l.map(d=>d.cells[e+1]).filter(Boolean);if(!n.length||!o.length)return;const r=t.clientX,c=n[0].getBoundingClientRect().width,h=o[0].getBoundingClientRect().width;i.style.tableLayout="fixed",this.withNoTextSelect(d=>{const m=f=>{const v=(s?-1:1)*(f.clientX-r);n.forEach(y=>y.style.width=Math.max(24,Math.round(c+v))+"px"),o.forEach(y=>y.style.width=Math.max(24,Math.round(h-v))+"px"),this.positionTableHandles()},g=()=>{window.removeEventListener("mousemove",m),window.removeEventListener("mouseup",g),d(),this.onChange()};window.addEventListener("mousemove",m),window.addEventListener("mouseup",g)})}cancelImgHide(){this.imgHideTimer!=null&&(window.clearTimeout(this.imgHideTimer),this.imgHideTimer=null)}scheduleImgHide(){this.cancelImgHide(),this.imgHideTimer=window.setTimeout(()=>this.clearImageHandles(),250)}clearImageHandles(){var t,e;this.cancelImgHide(),this.imgHandles.forEach(i=>i.remove()),this.imgHandles=[],(t=this.imgCtx)==null||t.remove(),this.imgCtx=null,(e=this.imgActive)==null||e.classList.remove("img-selected"),this.imgActive=null}selectImage(t){this.imgActive!==t&&(this.clearImageHandles(),this.imgActive=t,t.classList.add("img-selected"),this.imgHandles=xt.map(e=>{const i=document.createElement("div");return i.className="img-handle img-handle-"+e,i.dataset.corner=e,i.addEventListener("mousedown",s=>this.startImageResizeDrag(s,e)),i.addEventListener("mouseenter",()=>this.cancelImgHide()),i.addEventListener("mouseleave",()=>this.scheduleImgHide()),document.body.appendChild(i),i}),this.imgCtx=this.buildImageCtxToolbar(t),this.positionImageHandles())}buildImageCtxToolbar(t){const e=document.createElement("div");e.className="imgctx",e.dir=this.dir();const i=()=>{var h;const c=this.buildImageCtxToolbar(t);(h=this.imgCtx)==null||h.replaceWith(c),this.imgCtx=c,this.positionImageHandles()},s=c=>{this.setImageAlign(t,c),i()},l=t.style.float==="left",n=t.style.float==="right",o=!l&&!n&&t.style.marginLeft==="auto"&&t.style.marginRight==="auto",r=(c,h,d,m)=>{const g=this.ctxBtn(c,h,m);return g.classList.toggle("on",d),g};return e.append(r(a.alignleft,this.t("alignleft"),l,()=>s("left")),r(a.aligncenter,this.t("aligncenter"),o,()=>s("center")),r(a.alignright,this.t("alignright"),n,()=>s("right")),this.ctxSep(),r(a.rotateleft,this.t("rotateleft"),!1,()=>{this.rotateImage(t,-90),i()}),r(a.rotateright,this.t("rotateright"),!1,()=>{this.rotateImage(t,90),i()}),this.ctxSep(),r(a.fliphorizontal,this.t("fliphorizontal"),t.dataset.flipx==="1",()=>{this.flipImage(t,"x"),i()}),r(a.flipvertical,this.t("flipvertical"),t.dataset.flipy==="1",()=>{this.flipImage(t,"y"),i()}),this.ctxSep(),r(a.trash,this.t("deleteimg"),!1,()=>{const c=t.closest(".tpl-media");c&&this.ed.contains(c)?t.outerHTML=this.imgPhHTML():t.remove(),this.clearImageHandles(),this.onChange()})),e.addEventListener("mousedown",c=>c.preventDefault()),e.addEventListener("mouseenter",()=>this.cancelImgHide()),e.addEventListener("mouseleave",()=>this.scheduleImgHide()),document.body.appendChild(e),e}setImageAlign(t,e){t.style.float="",t.style.display="",t.style.marginLeft="",t.style.marginRight="",t.style.marginBottom="",e==="left"?(t.style.float="left",t.style.marginInlineEnd="1em",t.style.marginBottom="0.5em"):e==="right"?(t.style.float="right",t.style.marginInlineStart="1em",t.style.marginBottom="0.5em"):(t.style.display="block",t.style.marginLeft="auto",t.style.marginRight="auto"),this.onChange()}applyImgTransform(t){const e=parseInt(t.dataset.rotate||"0",10),i=t.dataset.flipx==="1"?-1:1,s=t.dataset.flipy==="1"?-1:1;t.style.transform=e||i<0||s<0?`rotate(${e}deg) scale(${i}, ${s})`:""}rotateImage(t,e){const i=((parseInt(t.dataset.rotate||"0",10)+e)%360+360)%360;t.dataset.rotate=String(i),this.applyImgTransform(t),this.positionImageHandles(),this.onChange()}flipImage(t,e){const i=e==="x"?"flipx":"flipy";t.dataset[i]=t.dataset[i]==="1"?"":"1",this.applyImgTransform(t),this.positionImageHandles(),this.onChange()}positionImageHandles(){if(!this.imgActive||!document.body.contains(this.imgActive)){this.clearImageHandles();return}const t=this.imgActive.getBoundingClientRect(),e=t.top+scrollY,i=t.left+scrollX,s=t.right+scrollX,l=t.bottom+scrollY,n={nw:[i,e],ne:[s,e],sw:[i,l],se:[s,l]};if(this.imgHandles.forEach(o=>{const[r,c]=n[o.dataset.corner];o.style.left=r-5+"px",o.style.top=c-5+"px"}),this.imgCtx){const o=this.imgCtx.offsetWidth,r=this.imgCtx.offsetHeight;let c=i+(s-i)/2-o/2;c=Math.max(8+scrollX,Math.min(c,scrollX+innerWidth-o-8));let h=e-r-8;h<this.ctxMinTop()&&(h=l+8),this.imgCtx.style.left=c+"px",this.imgCtx.style.top=h+"px"}}startImageResizeDrag(t,e){t.preventDefault();const i=this.imgActive;if(!i)return;this.cancelImgHide();const s=t.clientX,l=i.getBoundingClientRect().width,n=e==="nw"||e==="sw"?-1:1;this.withNoTextSelect(o=>{const r=h=>{i.style.width=Math.max(24,Math.round(l+n*(h.clientX-s)))+"px",i.style.height="auto",this.positionImageHandles()},c=()=>{window.removeEventListener("mousemove",r),window.removeEventListener("mouseup",c),o(),this.onChange()};window.addEventListener("mousemove",r),window.addEventListener("mouseup",c)})}toggleBlock(t){this.exec("formatBlock",this.currentBlock()===t?"<p>":"<"+t+">")}clearSelToolbar(){var t;(t=this.selCtx)==null||t.remove(),this.selCtx=null}updateSelToolbar(t){if(this.options.readonly||t.isCollapsed||!t.rangeCount){this.clearSelToolbar();return}const e=t.getRangeAt(0),i=e.getBoundingClientRect();if(!i.width&&!i.height){this.clearSelToolbar();return}this.selCtx||(this.selCtx=this.buildSelToolbar()),this.positionSelToolbar(e)}buildSelToolbar(){var o;const t=document.createElement("div");t.className="selctx",t.dir=this.dir();const e=this.ctxBtn('<b style="font:600 15px/1 Georgia,serif">A</b><span class="colorbar" data-cb="fore"></span>',this.t("forecolor"),()=>this.colorMenu(e,"fore")),i=this.ctxBtn(a.backcolor,this.t("backcolor"),()=>this.colorMenu(i,"back"));(o=i.querySelector("svg"))==null||o.insertAdjacentHTML("afterend",'<span class="colorbar" data-cb="back"></span>');const s=this.ctxBtn(a.caseic,this.t("changecase"),()=>this.caseMenu(s)),l=this.ctxBtn(a.lineheight,this.t("lineheight"),()=>this.lineHeightMenu(l)),n=this.ctxBtn(a.wordspacing,this.t("wordspacing"),()=>this.wordSpacingMenu(n));return t.append(this.ctxBtn(a.bold,this.t("bold"),()=>this.exec("bold"),"bold"),this.ctxBtn(a.italic,this.t("italic"),()=>this.exec("italic"),"italic"),e,i,this.ctxSep(),this.ctxBtn(a.quote,this.t("quote"),()=>this.toggleBlock("blockquote"),"blockquote"),this.ctxBtn('<b style="font:700 12px/1 Arial,sans-serif">H2</b>',this.blockLabel("h2"),()=>this.toggleBlock("h2"),"h2"),this.ctxBtn('<b style="font:700 12px/1 Arial,sans-serif">H3</b>',this.blockLabel("h3"),()=>this.toggleBlock("h3"),"h3"),this.ctxSep(),this.ctxBtn(a.link,this.t("linkttl"),()=>this.linkDlg()),s,l,n),t.addEventListener("mousedown",r=>r.preventDefault()),document.body.appendChild(t),this.syncColorSwatches(t),t}positionSelToolbar(t){if(!this.selCtx)return;const e=t.getBoundingClientRect(),i=e.top+scrollY,s=e.left+scrollX,l=e.right+scrollX,n=e.bottom+scrollY,o=this.selCtx.offsetWidth,r=this.selCtx.offsetHeight;let c=s+(l-s)/2-o/2;c=Math.max(8+scrollX,Math.min(c,scrollX+innerWidth-o-8));let h=i-r-8;h<this.ctxMinTop()&&(h=n+8),this.selCtx.style.left=c+"px",this.selCtx.style.top=h+"px"}repositionSelToolbar(){if(!this.selCtx)return;const t=window.getSelection();t&&t.rangeCount&&!t.isCollapsed&&this.ed.contains(t.anchorNode)&&this.positionSelToolbar(t.getRangeAt(0))}currentBlock(){const t=window.getSelection();if(!t||!t.anchorNode||!this.ed.contains(t.anchorNode))return"p";const e=this.closestBlock(t.anchorNode);return e?e.tagName.toLowerCase().replace("div","p"):"p"}fontRefEl(){const t=window.getSelection();return t&&t.anchorNode&&this.ed.contains(t.anchorNode)?t.anchorNode.nodeType===1?t.anchorNode:t.anchorNode.parentElement:this.ed}currentFont(){const t=getComputedStyle(this.fontRefEl()).fontFamily.toLowerCase(),e=this.options.fontFamilyFormats.find(([i,s])=>t.includes(s.split(",")[0].toLowerCase()));return e?e[0]:""}currentSize(){const t=Math.round(parseFloat(getComputedStyle(this.fontRefEl()).fontSize));return t>0?t+"px":""}refreshState(){var r,c,h;const t=window.getSelection(),e=t?this.ed.contains(t.anchorNode):!1,i=this.currentBlock();[this.toolbar,this.selCtx].filter(Boolean).forEach(d=>{["bold","italic","underline","strikeThrough","justifyLeft","justifyCenter","justifyRight","justifyFull","insertOrderedList","insertUnorderedList"].forEach(m=>{const g=d.querySelector(`[data-id=${m}]`);g&&g.classList.toggle("on",e&&document.queryCommandState(m))}),["h2","h3","blockquote"].forEach(m=>{const g=d.querySelector(`[data-id=${m}]`);g&&g.classList.toggle("on",e&&i===m)})});const l=t?this.closestBlock(t.anchorNode):null,n=((r=l==null?void 0:l.closest("[dir]"))==null?void 0:r.getAttribute("dir"))||this.ed.getAttribute("dir")||this.dir();(c=this.toolbar.querySelector("[data-id=ltr]"))==null||c.classList.toggle("on",e&&n==="ltr"),(h=this.toolbar.querySelector("[data-id=rtl]"))==null||h.classList.toggle("on",e&&n==="rtl");const o=(d,m,g)=>{const f=this.toolbar.querySelector(`[data-id=${d}] .lbl`);f&&(f.textContent=m||g||"",f.classList.toggle("empty",!m))};o("fontsel",this.currentFont()),o("sizesel",this.currentSize().replace("px","")),e&&o("blocksel",P.some(d=>d[0]===i)?this.blockLabel(i):this.t("para")),this.sbWords.textContent=this.countWords()+" "+this.t("words")}countWords(){const t=(this.ed.textContent||"").trim();return t?t.split(/\s+/).length:0}handlePaste(t){const e=t.clipboardData;if(!e)return;t.preventDefault();const i=e.getData("text/html"),s=Array.from(e.items).find(l=>l.type.startsWith("image/"));if(s&&!i){const l=new FileReader;l.onload=()=>{document.execCommand("insertHTML",!1,`<img src="${l.result}" alt="">`),this.onChange()},l.readAsDataURL(s.getAsFile());return}i?document.execCommand("insertHTML",!1,G(i,this.dir())):document.execCommand("insertHTML",!1,K(e.getData("text/plain"))),this.onChange()}initUI(){this.closePop(),this.closeDlg(),this.clearTableHandles(),this.clearImgPlaceholderSel(),this.shell.dir=this.dir(),this.ed.dir=this.dir(),this.options.menubar?this.buildMenubar():this.menubar.style.display="none",this.options.toolbar?this.buildToolbar():this.toolbar.style.display="none",this.sbHelp.textContent=this.t("statushelp"),this.refreshState()}};Z.instanceCounter=0;let O=Z;exports.BLOCKS=P;exports.CHARS=Q;exports.COLORS=_;exports.FONTS=j;exports.FableEditor=O;exports.I18N=U;exports.IC=a;exports.SIZES=X;exports.TXT=nt;exports.cleanPastedHTML=G;exports.getStrings=q;exports.normalizeTextPaste=K;
|