{"version":3,"file":"fable-editor.mjs","sources":["../../../src/core/i18n.ts","../../../src/core/config.ts","../../../src/core/icons.ts","../../../src/core/paste-engine.ts","../../../src/core/docx-import.ts","../../../src/core/editor.ts","../../../src/angular/fable-editor.component.ts","../../../src/angular/fable-editor.module.ts","../../../src/fable-editor.ts"],"sourcesContent":["import { EditorLanguage } from './types';\n\nexport interface I18nStrings {\n  dir: 'ltr' | 'rtl';\n  file: string;\n  edit: string;\n  view: string;\n  insert: string;\n  format: string;\n  tools: string;\n  table: string;\n  help: string;\n  newdoc: string;\n  preview: string;\n  print: string;\n  undo: string;\n  redo: string;\n  cut: string;\n  copy: string;\n  paste: string;\n  selectall: string;\n  fullscreen: string;\n  sourcecode: string;\n  wordcount: string;\n  image: string;\n  inserttable: string;\n  hr: string;\n  charmap: string;\n  datetime: string;\n  pagebreak: string;\n  nbsp: string;\n  bold: string;\n  italic: string;\n  underline: string;\n  strikethrough: string;\n  superscript: string;\n  subscript: string;\n  clearformat: string;\n  rowabove: string;\n  rowbelow: string;\n  delrow: string;\n  moverowup: string;\n  moverowdown: string;\n  colbefore: string;\n  colafter: string;\n  delcol: string;\n  movecolleft: string;\n  movecolright: string;\n  cellbg: string;\n  deltable: string;\n  ltr: string;\n  rtl: string;\n  alignleft: string;\n  aligncenter: string;\n  alignright: string;\n  alignjustify: string;\n  align: string;\n  numlist: string;\n  bullist: string;\n  forecolor: string;\n  backcolor: string;\n  removeformat: string;\n  outdent: string;\n  indent: string;\n  fontfamily: string;\n  fontsize: string;\n  blocks: string;\n  quickimage: string;\n  quicktable: string;\n  more: string;\n  para: string;\n  heading: string;\n  pre: string;\n  removecolor: string;\n  currentcolor: string;\n  statushelp: string;\n  words: string;\n  helpttl: string;\n  shortcuts: string;\n  close: string;\n  save: string;\n  cancel: string;\n  srcttl: string;\n  wcttl: string;\n  wcwords: string;\n  wcchars: string;\n  pastehint: string;\n  liststyles_ol: string[];\n  liststyles_ul: string[];\n  previewttl: string;\n  tablepropsttl: string;\n  tblwidth: string;\n  tblcellspacing: string;\n  tblcellpadding: string;\n  tblborder: string;\n  tblalign: string;\n  tblalignleft: string;\n  tblaligncenter: string;\n  tblalignright: string;\n  alignnone: string;\n  quote: string;\n  link: string;\n  linkttl: string;\n  linkurl: string;\n  unlink: string;\n  lineheight: string;\n  wordspacing: string;\n  letterspacing: string;\n  changecase: string;\n  lowercase: string;\n  uppercase: string;\n  capitalize: string;\n  customcolor: string;\n  normal: string;\n  revhistory: string;\n  revempty: string;\n  restore: string;\n  currentver: string;\n  importword: string;\n  importfail: string;\n  restoredraft: string;\n  draftempty: string;\n  deleteimg: string;\n  rotateleft: string;\n  rotateright: string;\n  fliphorizontal: string;\n  flipvertical: string;\n  cell: string;\n  row: string;\n  column: string;\n  cellprops: string;\n  rowprops: string;\n  colprops: string;\n  tblheight: string;\n  valign: string;\n  valigntop: string;\n  valignmiddle: string;\n  valignbottom: string;\n  fill: string;\n  nocell: string;\n  uploadimg: string;\n  imagelink: string;\n  imageurlph: string;\n  insertimg: string;\n  dropimage: string;\n  uploading: string;\n  uploadfailed: string;\n  template: string;\n  tplimgleft: string;\n  tplimgright: string;\n  tplimgtop: string;\n  tplimgcenter: string;\n  deltemplate: string;\n  video: string;\n  quickvideo: string;\n  deletevideo: string;\n  uploadvideo: string;\n  videolink: string;\n  videourlph: string;\n  insertvideo: string;\n  dropvideo: string;\n  videodlgttl: string;\n  vidgeneral: string;\n  vidembed: string;\n  vidadvanced: string;\n  vidsource: string;\n  vidembedhint: string;\n  vidaltsource: string;\n  vidposter: string;\n  emoji: string;\n  code: string;\n  codesample: string;\n  codedlgttl: string;\n  codelang: string;\n  editcode: string;\n  deletecode: string;\n  copycode: string;\n  chcat_currency: string;\n  chcat_text: string;\n  chcat_math: string;\n  chcat_arrows: string;\n  chcat_symbols: string;\n  chcat_latin: string;\n  chcat_arabic: string;\n  emcat_smileys: string;\n  emcat_people: string;\n  emcat_animals: string;\n  emcat_food: string;\n  emcat_travel: string;\n  emcat_activities: string;\n  emcat_objects: string;\n  emcat_symbols: string;\n  emcat_flags: string;\n}\n\nexport const I18N: Record<EditorLanguage, I18nStrings> = {\n  en: {\n    dir: 'ltr',\n    file: 'File',\n    edit: 'Edit',\n    view: 'View',\n    insert: 'Insert',\n    format: 'Format',\n    tools: 'Tools',\n    table: 'Table',\n    help: 'Help',\n    newdoc: 'New document',\n    preview: 'Preview',\n    print: 'Print…',\n    undo: 'Undo',\n    redo: 'Redo',\n    cut: 'Cut',\n    copy: 'Copy',\n    paste: 'Paste',\n    selectall: 'Select all',\n    fullscreen: 'Fullscreen',\n    sourcecode: 'Source code',\n    wordcount: 'Word count',\n    image: 'Image…',\n    inserttable: 'Table',\n    hr: 'Horizontal line',\n    charmap: 'Special character…',\n    datetime: 'Date/time',\n    pagebreak: 'Page break',\n    nbsp: 'Nonbreaking space',\n    bold: 'Bold',\n    italic: 'Italic',\n    underline: 'Underline',\n    strikethrough: 'Strikethrough',\n    superscript: 'Superscript',\n    subscript: 'Subscript',\n    clearformat: 'Clear formatting',\n    rowabove: 'Insert row before',\n    rowbelow: 'Insert row after',\n    delrow: 'Delete row',\n    moverowup: 'Move row up',\n    moverowdown: 'Move row down',\n    colbefore: 'Insert column before',\n    colafter: 'Insert column after',\n    delcol: 'Delete column',\n    movecolleft: 'Move column left',\n    movecolright: 'Move column right',\n    cellbg: 'Cell background',\n    deltable: 'Delete table',\n    ltr: 'Left to right',\n    rtl: 'Right to left',\n    alignleft: 'Align left',\n    aligncenter: 'Align center',\n    alignright: 'Align right',\n    alignjustify: 'Justify',\n    align: 'Align',\n    numlist: 'Numbered list',\n    bullist: 'Bullet list',\n    forecolor: 'Text color',\n    backcolor: 'Background color',\n    removeformat: 'Clear formatting',\n    outdent: 'Decrease indent',\n    indent: 'Increase indent',\n    fontfamily: 'Font family',\n    fontsize: 'Font size',\n    blocks: 'Blocks',\n    quickimage: 'Insert image',\n    quicktable: 'Insert table',\n    more: 'More…',\n    para: 'Paragraph',\n    heading: 'Heading',\n    pre: 'Preformatted',\n    removecolor: 'Remove color',\n    currentcolor: 'Current color',\n    statushelp: 'Press Alt+0 for help',\n    words: 'words',\n    helpttl: 'Help',\n    shortcuts: 'Handy shortcuts',\n    close: 'Close',\n    save: 'Save',\n    cancel: 'Cancel',\n    srcttl: 'Source code',\n    wcttl: 'Word count',\n    wcwords: 'Words',\n    wcchars: 'Characters',\n    pastehint: 'Use Ctrl+V / ⌘V to paste',\n    liststyles_ol: ['Default', 'Lower alpha', 'Lower roman', 'Upper alpha', 'Upper roman'],\n    liststyles_ul: ['Default', 'Circle', 'Square'],\n    previewttl: 'Preview',\n    tablepropsttl: 'Table properties',\n    tblwidth: 'Width',\n    tblcellspacing: 'Cell spacing',\n    tblcellpadding: 'Cell padding',\n    tblborder: 'Border width',\n    tblalign: 'Alignment',\n    tblalignleft: 'Align table left',\n    tblaligncenter: 'Center table',\n    tblalignright: 'Align table right',\n    alignnone: 'None',\n    quote: 'Blockquote',\n    link: 'Link…',\n    linkttl: 'Insert/edit link',\n    linkurl: 'URL',\n    unlink: 'Remove link',\n    lineheight: 'Line height',\n    wordspacing: 'Word spacing',\n    letterspacing: 'Letter spacing',\n    changecase: 'Change case',\n    lowercase: 'Lowercase',\n    uppercase: 'Uppercase',\n    capitalize: 'Capitalize Each Word',\n    customcolor: 'Custom color…',\n    normal: 'Normal',\n    revhistory: 'Revision history',\n    revempty: 'No revisions yet',\n    restore: 'Restore',\n    currentver: 'Current version',\n    importword: 'Import from Word…',\n    importfail: 'Could not import this file. Please choose a valid .docx document.',\n    restoredraft: 'Restore last draft',\n    draftempty: 'No saved draft found',\n    deleteimg: 'Delete image',\n    rotateleft: 'Rotate left',\n    rotateright: 'Rotate right',\n    fliphorizontal: 'Flip horizontal',\n    flipvertical: 'Flip vertical',\n    cell: 'Cell',\n    row: 'Row',\n    column: 'Column',\n    cellprops: 'Cell properties…',\n    rowprops: 'Row properties…',\n    colprops: 'Column properties…',\n    tblheight: 'Height',\n    valign: 'Vertical align',\n    valigntop: 'Top',\n    valignmiddle: 'Middle',\n    valignbottom: 'Bottom',\n    fill: 'Fill',\n    nocell: 'Click inside a table cell first',\n    uploadimg: 'Upload from computer',\n    imagelink: 'Insert from URL',\n    imageurlph: 'Paste image URL…',\n    insertimg: 'Insert',\n    dropimage: 'Drop image here',\n    uploading: 'Uploading…',\n    uploadfailed: 'Upload failed — click to retry',\n    template: 'Templates',\n    tplimgleft: 'Image left, text right',\n    tplimgright: 'Image right, text left',\n    tplimgtop: 'Image top, text below',\n    tplimgcenter: 'Text top, image center',\n    deltemplate: 'Delete template',\n    video: 'Video',\n    quickvideo: 'Insert video',\n    deletevideo: 'Delete video',\n    uploadvideo: 'Upload from computer',\n    videolink: 'Insert from URL',\n    videourlph: 'Paste video URL…',\n    insertvideo: 'Insert',\n    dropvideo: 'Drop video here',\n    videodlgttl: 'Insert/edit video',\n    vidgeneral: 'General',\n    vidembed: 'Embed',\n    vidadvanced: 'Advanced',\n    vidsource: 'Source',\n    vidembedhint: 'Paste your embed code below:',\n    vidaltsource: 'Alternative source URL',\n    vidposter: 'Media poster (Image URL)',\n    emoji: 'Emojis…',\n    code: 'Inline code',\n    codesample: 'Code sample…',\n    codedlgttl: 'Insert/edit code sample',\n    codelang: 'Language',\n    editcode: 'Edit code sample',\n    deletecode: 'Delete code sample',\n    copycode: 'Copy code',\n    chcat_currency: 'Currency',\n    chcat_text: 'Text & punctuation',\n    chcat_math: 'Mathematical',\n    chcat_arrows: 'Arrows',\n    chcat_symbols: 'Symbols',\n    chcat_latin: 'Extended Latin',\n    chcat_arabic: 'Arabic',\n    emcat_smileys: 'Smileys & emotion',\n    emcat_people: 'People & body',\n    emcat_animals: 'Animals & nature',\n    emcat_food: 'Food & drink',\n    emcat_travel: 'Travel & places',\n    emcat_activities: 'Activities',\n    emcat_objects: 'Objects',\n    emcat_symbols: 'Symbols',\n    emcat_flags: 'Flags'\n  },\n  ar: {\n    dir: 'rtl',\n    file: 'ملف',\n    edit: 'تحرير',\n    view: 'عرض',\n    insert: 'إدراج',\n    format: 'التنسيق',\n    tools: 'الأدوات',\n    table: 'جدول',\n    help: 'تعليمات',\n    newdoc: 'مستند جديد',\n    preview: 'معاينة',\n    print: 'طباعة…',\n    undo: 'تراجع',\n    redo: 'إعادة',\n    cut: 'قص',\n    copy: 'نسخ',\n    paste: 'لصق',\n    selectall: 'تحديد الكل',\n    fullscreen: 'ملء الشاشة',\n    sourcecode: 'الكود المصدري',\n    wordcount: 'عدد الكلمات',\n    image: 'صورة…',\n    inserttable: 'جدول',\n    hr: 'خط أفقي',\n    charmap: 'رمز خاص…',\n    datetime: 'التاريخ/الوقت',\n    pagebreak: 'فاصل الصفحة',\n    nbsp: 'مسافة غير فاصلة',\n    bold: 'غامق',\n    italic: 'مائل',\n    underline: 'تسطير',\n    strikethrough: 'يتوسطه خط',\n    superscript: 'نص مرتفع',\n    subscript: 'نص منخفض',\n    clearformat: 'مسح التنسيق',\n    rowabove: 'إدراج صف قبل',\n    rowbelow: 'إدراج صف بعد',\n    delrow: 'حذف الصف',\n    moverowup: 'نقل الصف لأعلى',\n    moverowdown: 'نقل الصف لأسفل',\n    colbefore: 'إدراج عمود قبل',\n    colafter: 'إدراج عمود بعد',\n    delcol: 'حذف العمود',\n    movecolleft: 'نقل العمود لليسار',\n    movecolright: 'نقل العمود لليمين',\n    cellbg: 'خلفية الخلية',\n    deltable: 'حذف الجدول',\n    ltr: 'من اليسار إلى اليمين',\n    rtl: 'من اليمين إلى اليسار',\n    alignleft: 'محاذاة لليسار',\n    aligncenter: 'توسيط',\n    alignright: 'محاذاة لليمين',\n    alignjustify: 'ضبط',\n    align: 'محاذاة',\n    numlist: 'قائمة رقمية',\n    bullist: 'قائمة نقطية',\n    forecolor: 'لون النص',\n    backcolor: 'لون الخلفية',\n    removeformat: 'مسح التنسيق',\n    outdent: 'إنقاص المسافة البادئة',\n    indent: 'زيادة المسافة البادئة',\n    fontfamily: 'عائلة الخط',\n    fontsize: 'حجم الخط',\n    blocks: 'الفقرات',\n    quickimage: 'إدراج صورة',\n    quicktable: 'إدراج جدول',\n    more: 'المزيد…',\n    para: 'الفقرة',\n    heading: 'العنوان',\n    pre: 'منسق مسبقاً',\n    removecolor: 'إزالة اللون',\n    currentcolor: 'اللون الحالي',\n    statushelp: 'اضغط على Alt+0 للحصول على مساعدة',\n    words: 'الكلمات',\n    helpttl: 'تعليمات',\n    shortcuts: 'اختصارات مفيدة',\n    close: 'إغلاق',\n    save: 'حفظ',\n    cancel: 'إلغاء',\n    srcttl: 'الكود المصدري',\n    wcttl: 'عدد الكلمات',\n    wcwords: 'الكلمات',\n    wcchars: 'الأحرف',\n    pastehint: 'استخدم Ctrl+V / ⌘V للصق',\n    liststyles_ol: ['افتراضي', 'أبجدي صغير', 'روماني صغير', 'أبجدي كبير', 'روماني كبير'],\n    liststyles_ul: ['افتراضي', 'دائرة', 'مربع'],\n    previewttl: 'معاينة',\n    tablepropsttl: 'خصائص الجدول',\n    tblwidth: 'العرض',\n    tblcellspacing: 'تباعد الخلايا',\n    tblcellpadding: 'حشو الخلايا',\n    tblborder: 'عرض الحدود',\n    tblalign: 'المحاذاة',\n    tblalignleft: 'محاذاة الجدول لليسار',\n    tblaligncenter: 'توسيط الجدول',\n    tblalignright: 'محاذاة الجدول لليمين',\n    alignnone: 'بدون',\n    quote: 'اقتباس',\n    link: 'رابط…',\n    linkttl: 'إدراج/تعديل رابط',\n    linkurl: 'الرابط',\n    unlink: 'إزالة الرابط',\n    lineheight: 'تباعد الأسطر',\n    wordspacing: 'تباعد الكلمات',\n    letterspacing: 'تباعد الأحرف',\n    changecase: 'تغيير حالة الأحرف',\n    lowercase: 'أحرف صغيرة',\n    uppercase: 'أحرف كبيرة',\n    capitalize: 'تكبير أول حرف',\n    customcolor: 'لون مخصص…',\n    normal: 'عادي',\n    revhistory: 'سجل المراجعات',\n    revempty: 'لا توجد مراجعات بعد',\n    restore: 'استعادة',\n    currentver: 'النسخة الحالية',\n    importword: 'استيراد من Word…',\n    importfail: 'تعذر استيراد هذا الملف. الرجاء اختيار مستند ‎.docx صالح.',\n    restoredraft: 'استعادة آخر مسودة',\n    draftempty: 'لا توجد مسودة محفوظة',\n    deleteimg: 'حذف الصورة',\n    rotateleft: 'تدوير لليسار',\n    rotateright: 'تدوير لليمين',\n    fliphorizontal: 'قلب أفقي',\n    flipvertical: 'قلب رأسي',\n    cell: 'خلية',\n    row: 'صف',\n    column: 'عمود',\n    cellprops: 'خصائص الخلية…',\n    rowprops: 'خصائص الصف…',\n    colprops: 'خصائص العمود…',\n    tblheight: 'الارتفاع',\n    valign: 'محاذاة عمودية',\n    valigntop: 'أعلى',\n    valignmiddle: 'وسط',\n    valignbottom: 'أسفل',\n    fill: 'تعبئة',\n    nocell: 'انقر داخل خلية جدول أولاً',\n    uploadimg: 'رفع من الجهاز',\n    imagelink: 'إدراج من رابط',\n    imageurlph: 'الصق رابط الصورة…',\n    insertimg: 'إدراج',\n    dropimage: 'أسقط الصورة هنا',\n    uploading: 'جارٍ الرفع…',\n    uploadfailed: 'فشل الرفع — انقر لإعادة المحاولة',\n    template: 'قوالب',\n    tplimgleft: 'صورة يسار، نص يمين',\n    tplimgright: 'صورة يمين، نص يسار',\n    tplimgtop: 'صورة أعلى، نص أسفل',\n    tplimgcenter: 'نص أعلى، صورة وسط',\n    deltemplate: 'حذف القالب',\n    video: 'فيديو',\n    quickvideo: 'إدراج فيديو',\n    deletevideo: 'حذف الفيديو',\n    uploadvideo: 'رفع من الجهاز',\n    videolink: 'إدراج من رابط',\n    videourlph: 'الصق رابط الفيديو…',\n    insertvideo: 'إدراج',\n    dropvideo: 'أسقط الفيديو هنا',\n    videodlgttl: 'إدراج/تعديل فيديو',\n    vidgeneral: 'عام',\n    vidembed: 'تضمين',\n    vidadvanced: 'متقدم',\n    vidsource: 'المصدر',\n    vidembedhint: 'الصق كود التضمين أدناه:',\n    vidaltsource: 'رابط مصدر بديل',\n    vidposter: 'صورة الغلاف (رابط الصورة)',\n    emoji: 'رموز تعبيرية…',\n    code: 'كود مضمّن',\n    codesample: 'عينة كود…',\n    codedlgttl: 'إدراج/تعديل عينة كود',\n    codelang: 'اللغة',\n    editcode: 'تعديل عينة الكود',\n    deletecode: 'حذف عينة الكود',\n    copycode: 'نسخ الكود',\n    chcat_currency: 'عملات',\n    chcat_text: 'نص وعلامات ترقيم',\n    chcat_math: 'رموز رياضية',\n    chcat_arrows: 'أسهم',\n    chcat_symbols: 'رموز',\n    chcat_latin: 'لاتينية موسعة',\n    chcat_arabic: 'عربية',\n    emcat_smileys: 'وجوه ومشاعر',\n    emcat_people: 'أشخاص وإيماءات',\n    emcat_animals: 'حيوانات وطبيعة',\n    emcat_food: 'طعام وشراب',\n    emcat_travel: 'سفر وأماكن',\n    emcat_activities: 'أنشطة',\n    emcat_objects: 'أشياء',\n    emcat_symbols: 'رموز',\n    emcat_flags: 'أعلام'\n  }\n};\n\nexport function getStrings(lang: EditorLanguage): I18nStrings {\n  return I18N[lang];\n}\n","/** Transcribed group-by-group from the editor's built-in toolbar layout so that\n *  `toolbar: true` (the default) renders identically to the hard-coded original. */\nexport const DEFAULT_TOOLBAR =\n  'undo redo | preview print | importword revhistory | fontfamily fontsize | fontsizeincrease fontsizedecrease | ' +\n  'bold italic underline strikethrough | forecolor backcolor | alignleft aligncenter alignright alignjustify | ' +\n  'bullist numlist | outdent indent | link blockquote code changecase lineheight wordspacing letterspacing | removeformat | blocks | ' +\n  'ltr rtl | quickimage quickvideo quicktable codesample template charmap emoji | fullscreen sourcecode';\n\n/** Transcribed from the editor's built-in menu keys so that `menubar: true` (the\n *  default) renders identically to the hard-coded original. */\nexport const DEFAULT_MENUBAR = 'file edit view insert format tools table help';\n\nexport const FONTS: [string, string][] = [\n  ['Andale Mono', 'andale mono,times'],\n  ['Arial', 'arial,helvetica,sans-serif'],\n  ['Arial Black', 'arial black,avant garde'],\n  ['Book Antiqua', 'book antiqua,palatino'],\n  ['Comic Sans MS', 'comic sans ms,sans-serif'],\n  ['Courier New', 'courier new,courier'],\n  ['Georgia', 'georgia,palatino'],\n  ['Helvetica', 'helvetica'],\n  ['Impact', 'impact,chicago'],\n  ['Oswald', 'oswald'],\n  ['Sakkal Majalla', 'sakkal majalla'],\n  ['Symbol', 'symbol'],\n  ['Tahoma', 'tahoma,arial,helvetica,sans-serif'],\n  ['Terminal', 'terminal,monaco'],\n  ['Times New Roman', 'times new roman,times'],\n  ['Trebuchet MS', 'trebuchet ms,geneva'],\n  ['Verdana', 'verdana,geneva'],\n  ['Webdings', 'webdings'],\n  ['Wingdings', 'wingdings,zapf dingbats']\n];\n\nexport const SIZES = ['8px', '9px', '10px', '11px', '12px', '14px', '16px', '18px', '20px', '24px', '28px', '32px', '36px', '48px', '72px', '96px'];\n\nexport const MIN_FONT_PX = 1;\nexport const MAX_FONT_PX = 100;\n\nexport const LINE_HEIGHTS = ['1', '1.15', '1.4', '1.5', '1.75', '2', '2.5', '3'];\n\nexport const WORD_SPACINGS = ['1px', '2px', '4px', '6px', '8px', '12px'];\n\nexport const LETTER_SPACINGS = ['0.5px', '1px', '1.5px', '2px', '3px', '4px'];\n\n/** Languages offered by the code-sample dialog: [value stored in data-lang, label]. */\nexport const CODE_LANGS: [string, string][] = [\n  ['plain', 'Plain text'],\n  ['html', 'HTML/XML'],\n  ['css', 'CSS'],\n  ['javascript', 'JavaScript'],\n  ['typescript', 'TypeScript'],\n  ['json', 'JSON'],\n  ['python', 'Python'],\n  ['java', 'Java'],\n  ['csharp', 'C#'],\n  ['cpp', 'C/C++'],\n  ['php', 'PHP'],\n  ['ruby', 'Ruby'],\n  ['go', 'Go'],\n  ['rust', 'Rust'],\n  ['sql', 'SQL'],\n  ['bash', 'Bash/Shell']\n];\n\nexport const BLOCKS: [string, string][] = [\n  ['p', 'para'],\n  ['h1', 'heading1'],\n  ['h2', 'heading2'],\n  ['h3', 'heading3'],\n  ['h4', 'heading4'],\n  ['h5', 'heading5'],\n  ['h6', 'heading6'],\n  ['pre', 'pre']\n];\n\n/** Quick-access text color chips shown directly in the toolbar. */\nexport const QUICK_COLORS = ['#F76707', '#4263EB', '#CC5DE8'];\n\n/** 25 swatches — a 5×5 grid in the picker (pastels, brights, darks, grays,\n *  then pink/brown/cyan + black/white). Shared by fore/back color and cell fill. */\nexport const COLORS = [\n  '#FFFFFF',\n  '#F4F4F4',\n  '#E8EAED',\n  '#DADCE0',\n  '#000000',\n\n  '#F28B82',\n  '#FBBC04',\n  '#FFF475',\n  '#CCFF90',\n  '#A7FFEB',\n\n  '#CBF0F8',\n  '#AECBFA',\n  '#D7AEFB',\n  '#FDCFE8',\n  '#E6C9A8',\n\n  '#EA4335',\n  '#FB8C00',\n  '#FDD835',\n  '#34A853',\n  '#00ACC1',\n\n  '#4285F4',\n  '#5E35B1',\n  '#8E24AA',\n  '#C2185B',\n  '#6D4C41'\n];\n\n/** Category key = i18n string key for the tab label in the picker dialogs. */\nexport interface GlyphCategory {\n  key: string;\n  chars: string[];\n}\n\n/** Special-character map, grouped for the two-pane picker (tabs left, glyphs right).\n *  `CHARS` below is the legacy flat list and is kept exported for back-compat. */\nexport const CHAR_CATEGORIES: GlyphCategory[] = [\n  {\n    key: 'chcat_currency',\n    chars: [\n      '€','£','¥','¢','$','₹','₽','₩','₺','₴','₦','฿','₫','₪','﷼','¤',\n      '₡','₱','₲','₵','₭','₮','₸','₼','₾','₿'\n    ]\n  },\n  {\n    key: 'chcat_text',\n    chars: [\n      '§','¶','†','‡','•','…','′','″','‰','‱','–','—','―','¡','¿','·',\n      '‹','›','«','»','“','”','‘','’','„','‚','¦','ª','º',\n      '‽','※','❝','❞','❮','❯'\n    ]\n  },\n  {\n    key: 'chcat_math',\n    chars: [\n      '°','±','×','÷','≈','≠','≤','≥','∞','µ','√','∑','∫','∂','∆','∏',\n      'π','Ω','α','β','γ','δ','ε','θ','λ','σ','φ','ψ','ω',\n      '∈','∉','∪','∩','⊂','⊃','⊆','⊇','∀','∃','∅','∝','∴','∵','¬','∧','∨',\n      '½','⅓','¼','¾','⅔','⅛','⅜','⅝','⅞',\n      '¹','²','³','⁴','⁵','⁶','⁷','⁸','⁹','⁰',\n      '₁','₂','₃','₄','₅','₆','₇','₈','₉','₀'\n    ]\n  },\n  {\n    key: 'chcat_arrows',\n    chars: [\n      '←','→','↑','↓','↔','↕','⇐','⇒','⇑','⇓','⇔',\n      '↖','↗','↘','↙','↩','↪','↺','↻',\n      '⤴','⤵','➜','➝','➞','➟','⇦','⇨','⇧','⇩'\n    ]\n  },\n  {\n    key: 'chcat_symbols',\n    chars: [\n      '©','®','™','℠','№','℮',\n      '✓','✔','✗','✘',\n      '★','☆','✦','✪',\n      '♠','♣','♥','♦',\n      '♪','♫','♬',\n      '☀','☁','☂','☃','☾',\n      '☹','☺','☻',\n      '✉','✂','✎','✏',\n      '☎','☏','⌛','⌚',\n      '☞','☜','☝','☟'\n    ]\n  },\n  {\n    key: 'chcat_latin',\n    chars: [\n      'À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï',\n      'Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß',\n      'à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï',\n      'ð','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','þ','ÿ',\n      'Œ','œ','Š','š','Ž','ž','Ł','ł'\n    ]\n  },\n  {\n    key: 'chcat_arabic',\n    chars: [\n      '؟','،','؛','٪','٭','ـ',\n      '٠','١','٢','٣','٤','٥','٦','٧','٨','٩',\n      '﴾','﴿','۞','؎',\n      'ء','آ','أ','ؤ','إ','ئ','ى','ة'\n    ]\n  }\n];\n\n/** Emoji map for the emoji picker — same two-pane dialog as the character map. */\nexport const EMOJI_CATEGORIES: GlyphCategory[] = [\n  {\n    key: 'emcat_smileys',\n    chars: [\n      '😀', '😃', '😄', '😁', '😆', '😅', '😂', '🤣', '😊', '😇', '🙂', '🙃', '😉', '😌', '😍', '🥰',\n      '😘', '😋', '😛', '😜', '🤪', '🤨', '🧐', '🤓', '😎', '🥳', '😏', '😒', '😞', '😔', '😟', '😕',\n      '🙁', '😣', '😫', '😩', '🥺', '😢', '😭', '😤', '😠', '😡', '🤯', '😳', '🥵', '🥶', '😱', '😨',\n      '😥', '🤗', '🤔', '🤭', '🤫', '😐', '😑', '😬', '🙄', '😯', '😴', '😪', '😷', '🤒', '🤕', '🤢',\n      '🤧', '😈', '💀', '👻', '👽', '🤖', '💩', '😺', '😸', '😹', '😻', '🙀'\n    ]\n  },\n  {\n    key: 'emcat_people',\n    chars: [\n      '👋', '🤚', '✋', '🖖', '👌', '🤏', '✌', '🤞', '🤟', '🤘', '🤙', '👈', '👉', '👆', '👇', '☝',\n      '👍', '👎', '✊', '👊', '👏', '🙌', '👐', '🤲', '🤝', '🙏', '💪', '✍', '💅', '🤳', '👂', '👃',\n      '👀', '👁', '🧠', '👶', '🧒', '👦', '👧', '🧑', '👨', '👩', '🧓', '👴', '👵', '👮', '👷', '💂',\n      '🕵', '👸', '🤴', '👰', '🤵', '🤰', '👼', '🎅', '🦸', '🦹', '🧙', '🧚', '🧛', '🧟', '💃', '🕺',\n      '🚶', '🏃', '🧘'\n    ]\n  },\n  {\n    key: 'emcat_animals',\n    chars: [\n      '🐶', '🐱', '🐭', '🐹', '🐰', '🦊', '🐻', '🐼', '🐨', '🐯', '🦁', '🐮', '🐷', '🐸', '🐵', '🐔',\n      '🐧', '🐦', '🐤', '🦆', '🦅', '🦉', '🐺', '🐗', '🐴', '🦄', '🐝', '🐛', '🦋', '🐌', '🐞', '🐢',\n      '🐍', '🦎', '🦖', '🐙', '🦑', '🦀', '🐠', '🐟', '🐬', '🐳', '🦈', '🐊', '🐅', '🦓', '🦍', '🐘',\n      '🦏', '🐪', '🦒', '🦘', '🐄', '🐎', '🐖', '🐑', '🐐', '🦌', '🐕', '🐈', '🐓', '🦃', '🦚', '🦜',\n      '🦢', '🕊', '🐇', '🦔', '🌵', '🌲', '🌴', '🌱', '🌿', '☘', '🍀', '🍁', '🌸', '🌺', '🌻', '🌹',\n      '🌷', '💐'\n    ]\n  },\n  {\n    key: 'emcat_food',\n    chars: [\n      '🍏', '🍎', '🍐', '🍊', '🍋', '🍌', '🍉', '🍇', '🍓', '🍈', '🍒', '🍑', '🥭', '🍍', '🥥', '🥝',\n      '🍅', '🍆', '🥑', '🥦', '🥒', '🌶', '🌽', '🥕', '🥔', '🥐', '🍞', '🥖', '🥨', '🧀', '🥚', '🍳',\n      '🥞', '🥓', '🥩', '🍗', '🍖', '🌭', '🍔', '🍟', '🍕', '🥪', '🌮', '🌯', '🥗', '🍝', '🍜', '🍲',\n      '🍛', '🍣', '🍱', '🥟', '🍤', '🍚', '🍧', '🍨', '🍦', '🥧', '🧁', '🍰', '🎂', '🍮', '🍭', '🍬',\n      '🍫', '🍿', '🍩', '🍪', '🥜', '🍯', '🥛', '☕', '🍵', '🥤', '🍺', '🥂', '🍷', '🍸', '🍹'\n    ]\n  },\n  {\n    key: 'emcat_travel',\n    chars: [\n      '🚗', '🚕', '🚙', '🚌', '🏎', '🚓', '🚑', '🚒', '🚚', '🚜', '🛵', '🏍', '🚲', '🛴', '🚔', '🚃',\n      '🚄', '🚅', '🚂', '🚆', '🚇', '🚉', '✈', '🛫', '🛬', '💺', '🚁', '🚀', '🛸', '🚢', '⛵', '🚤',\n      '⚓', '⛽', '🚧', '🗺', '🗿', '🗽', '🗼', '🏰', '🏯', '🎡', '🎢', '🎠', '⛲', '🏖', '🏝', '🌋',\n      '⛰', '🏔', '🗻', '🏕', '⛺', '🏠', '🏡', '🏢', '🏬', '🏥', '🏦', '🏨', '🏪', '🏫', '💒', '⛪',\n      '🕌', '🕍', '🕋', '⛩', '🌅', '🌄', '🌇', '🌆', '🌃', '🌉', '🌌', '🌠'\n    ]\n  },\n  {\n    key: 'emcat_activities',\n    chars: [\n      '⚽', '🏀', '🏈', '⚾', '🎾', '🏐', '🏉', '🎱', '🏓', '🏸', '🏒', '🏑', '🏏', '⛳', '🏹', '🎣',\n      '🥊', '🥋', '⛸', '🎿', '⛷', '🏂', '🏋', '🤸', '⛹', '🤺', '🏇', '🧗', '🏄', '🏊', '🚣', '🚵',\n      '🚴', '🏆', '🥇', '🥈', '🥉', '🏅', '🎖', '🎫', '🎪', '🤹', '🎭', '🎨', '🎬', '🎤', '🎧', '🎼',\n      '🎹', '🥁', '🎷', '🎺', '🎸', '🎻', '🎲', '🎯', '🎳', '🎮', '🎰', '🧩'\n    ]\n  },\n  {\n    key: 'emcat_objects',\n    chars: [\n      '⌚', '📱', '💻', '⌨', '🖥', '🖨', '🖱', '🕹', '💽', '💾', '💿', '📀', '📷', '📸', '📹', '🎥',\n      '📞', '☎', '📺', '📻', '🎙', '⏱', '⏰', '⌛', '⏳', '📡', '🔋', '🔌', '💡', '🔦', '🕯', '💸',\n      '💵', '💰', '💳', '💎', '⚖', '🔧', '🔨', '⚒', '🛠', '⛏', '🔩', '⚙', '🧲', '🔫', '💣', '🔪',\n      '🛡', '🔮', '🧿', '🔭', '🔬', '💊', '💉', '🌡', '🧬', '🧪', '🧹', '🧺', '🛁', '🔑', '🗝', '🚪',\n      '🛋', '🛏', '🧸', '🖼', '🛍', '🛒', '🎁', '🎈', '🎀', '🎊', '🎉', '✉', '📩', '📦', '📜', '📄',\n      '📊', '📈', '📉', '📅', '📋', '📁', '📰', '📓', '📚', '📖', '🔖', '🔗', '📎', '📐', '📏', '📌',\n      '📍', '✂', '🖊', '✒', '🖌', '🖍', '📝', '✏', '🔍', '🔒', '🔓'\n    ]\n  },\n  {\n    key: 'emcat_symbols',\n    chars: [\n      '❤', '🧡', '💛', '💚', '💙', '💜', '🖤', '💔', '❣', '💕', '💞', '💓', '💗', '💖', '💘', '💝',\n      '☮', '✝', '☪', '🕉', '☸', '✡', '☯', '♈', '♉', '♊', '♋', '♌', '♍', '♎', '♏', '♐',\n      '♑', '♒', '♓', '⚛', '❌', '⭕', '🛑', '⛔', '🚫', '💯', '💢', '⚠', '🚸', '🔱', '⚜', '🔰',\n      '♻', '✅', '❇', '✳', '❎', '🌐', '💠', '🌀', '💤', '🏧', '♿', '🚭', '❗', '❕', '❓', '❔',\n      '‼', '⁉', '💲', '🔅', '🔆', '〽', 'ℹ', '🆗', '🆕', '🆓', '🆒', '🆙', '🈯', '🈚'\n    ]\n  },\n  {\n    key: 'emcat_flags',\n    chars: [\n      '🏁', '🚩', '🎌', '🏴', '🏳', '🇦🇪', '🇸🇦', '🇶🇦', '🇰🇼', '🇧🇭', '🇴🇲', '🇪🇬', '🇯🇴', '🇱🇧', '🇮🇳', '🇵🇰',\n      '🇺🇸', '🇬🇧', '🇨🇦', '🇦🇺', '🇫🇷', '🇩🇪', '🇮🇹', '🇪🇸', '🇵🇹', '🇳🇱', '🇧🇪', '🇨🇭', '🇸🇪', '🇳🇴', '🇩🇰', '🇫🇮',\n      '🇮🇪', '🇬🇷', '🇹🇷', '🇷🇺', '🇺🇦', '🇵🇱', '🇯🇵', '🇰🇷', '🇨🇳', '🇸🇬', '🇲🇾', '🇮🇩', '🇹🇭', '🇵🇭', '🇻🇳', '🇧🇷',\n      '🇦🇷', '🇲🇽', '🇿🇦', '🇳🇬', '🇰🇪', '🇲🇦'\n    ]\n  }\n];\n\nexport const CHARS = [\n  '©',\n  '®',\n  '™',\n  '§',\n  '¶',\n  '†',\n  '‡',\n  '•',\n  '…',\n  '′',\n  '″',\n  '‰',\n  '°',\n  '±',\n  '×',\n  '÷',\n  '≈',\n  '≠',\n  '≤',\n  '≥',\n  '∞',\n  'µ',\n  '√',\n  '∑',\n  '€',\n  '£',\n  '¥',\n  '¢',\n  '←',\n  '→',\n  '↑',\n  '↓',\n  '«',\n  '»',\n  '“',\n  '”',\n  '‘',\n  '’',\n  '–',\n  '—',\n  '؟',\n  '،',\n  '؛',\n  '٪',\n  '٭',\n  'ـ',\n  '٠',\n  '١'\n];\n","const S = (inner: string, vb?: string) => `<svg viewBox=\"${vb || '0 0 24 24'}\">${inner}</svg>`;\n\n/** Google Material Symbols icon: solid-fill path on the -960..0/0..960 grid those exports use. */\nconst G = (path: string) => S(`<path class=\"f\" d=\"${path}\"/>`, '0 -960 960 960');\n\n/** Three-line list icon with custom markers (text glyphs) per line. */\nconst LIST = (marks: [string, string, string], fs = 7.5) =>\n  S(\n    '<path d=\"M10 6h10M10 12h10M10 18h10\"/>' +\n      marks\n        .map(\n          (m, i) =>\n            `<text x=\"2.5\" y=\"${8.4 + i * 6}\" font-size=\"${fs}\" stroke=\"none\" fill=\"#222f3e\" font-family=\"Arial\">${m}</text>`\n        )\n        .join('')\n  );\n\nexport const IC: Record<string, string> = {\n  bold: G(\n    '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'\n  ),\n  italic: G('M200-200v-100h160l120-360H320v-100h400v100H580L460-300h140v100H200Z'),\n  underline: G(\n    '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'\n  ),\n  strikethrough: G(\n    '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'\n  ),\n  undo: G('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'),\n  redo: G('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'),\n  ltr: G(\n    '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'\n  ),\n  rtl: G(\n    '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'\n  ),\n  alignleft: G(\n    'M120-120v-80h720v80H120Zm0-160v-80h480v80H120Zm0-160v-80h720v80H120Zm0-160v-80h480v80H120Zm0-160v-80h720v80H120Z'\n  ),\n  aligncenter: G(\n    'M120-120v-80h720v80H120Zm160-160v-80h400v80H280ZM120-440v-80h720v80H120Zm160-160v-80h400v80H280ZM120-760v-80h720v80H120Z'\n  ),\n  alignright: G(\n    'M120-760v-80h720v80H120Zm240 160v-80h480v80H360ZM120-440v-80h720v80H120Zm240 160v-80h480v80H360ZM120-120v-80h720v80H120Z'\n  ),\n  alignjustify: G(\n    'M120-120v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Z'\n  ),\n  fullscreen: G(\n    'M120-120v-200h80v120h120v80H120Zm520 0v-80h120v-120h80v200H640ZM120-640v-200h200v80H200v120h-80Zm640 0v-120H640v-80h200v200h-80Z'\n  ),\n  clearformatic: G(\n    'm528-546-93-93-121-121h486v120H568l-40 94ZM792-56 460-388l-80 188H249l119-280L56-792l56-56 736 736-56 56Z'\n  ),\n  numlist: G(\n    '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'\n  ),\n  bullist: G(\n    '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'\n  ),\n  chev: S('<path d=\"M2 3.5 6 7.5 10 3.5\"/>', '0 0 12 11'),\n  backcolor: G(\n    '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'\n  ),\n  outdent: G(\n    'M120-120v-80h720v80H120Zm320-160v-80h400v80H440Zm0-160v-80h400v80H440Zm0-160v-80h400v80H440ZM120-760v-80h720v80H120Zm160 440L120-480l160-160v320Z'\n  ),\n  indent: G(\n    'M120-120v-80h720v80H120Zm320-160v-80h400v80H440Zm0-160v-80h400v80H440Zm0-160v-80h400v80H440ZM120-760v-80h720v80H120Zm0 440v-320l160 160-160 160Z'\n  ),\n  more: S(\n    '<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\"/>'\n  ),\n  image: G(\n    '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'\n  ),\n  uploadic: G(\n    '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'\n  ),\n  tableic: G(\n    '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'\n  ),\n  hric: S('<path d=\"M4 12h16\"/>'),\n  charic: G(\n    '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'\n  ),\n  dateic: S(\n    '<rect x=\"4\" y=\"6\" width=\"16\" height=\"14\" rx=\"1.5\"/><path d=\"M4 10h16M8 4v4M16 4v4\"/>'\n  ),\n  pbic: G(\n    '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'\n  ),\n  nbspic: S('<path d=\"M6 12v4h12v-4\"/>'),\n  srcic: G(\n    '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'\n  ),\n  prevw: G(\n    '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'\n  ),\n  printic: G(\n    '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'\n  ),\n  cutic: G(\n    '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'\n  ),\n  copyic: G(\n    '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'\n  ),\n  pasteic: G(\n    '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'\n  ),\n  selall: G(\n    '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'\n  ),\n  superscriptic: G(\n    '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'\n  ),\n  subscriptic: G(\n    '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'\n  ),\n  newic: S('<path d=\"M6 3h8l5 5v13H6z\"/><path d=\"M14 3v5h5\"/>'),\n  helpic: S(\n    '<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\"/>'\n  ),\n  wcic: S('<path d=\"M4 6h16M4 10h16M4 14h9\"/><path d=\"M15 17.5l2 2 3.6-4\"/>'),\n  rowbefore: G(\n    'M200-160h560v-240H200v240Zm640 80H120v-720h160v80h-80v240h560v-240h-80v-80h160v720ZM480-480Zm0 80v-80 80Zm0 0Zm-40-240v-80h-80v-80h80v-80h80v80h80v80h-80v80h-80Z'\n  ),\n  rowafter: G(\n    'M200-560h560v-240H200v240Zm-80 400v-720h720v720H680v-80h80v-240H200v240h80v80H120Zm360-320Zm0-80v80-80Zm0 0ZM440-80v-80h-80v-80h80v-80h80v80h80v80h-80v80h-80Z'\n  ),\n  rowdelete: G(\n    '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'\n  ),\n  colbefore: G(\n    'M800-200v-560H560v560h240Zm-640 80v-160h80v80h240v-560H240v80h-80v-160h720v720H160Zm320-360Zm80 0h-80 80Zm0 0ZM160-360v-80H80v-80h80v-80h80v80h80v80h-80v80h-80Z'\n  ),\n  colafter: G(\n    'M160-760v560h240v-560H160ZM80-120v-720h720v160h-80v-80H480v560h240v-80h80v160H80Zm400-360Zm-80 0h80-80Zm0 0Zm320 120v-80h-80v-80h80v-80h80v80h80v80h-80v80h-80Z'\n  ),\n  coldelete: G(\n    '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'\n  ),\n  tabledelete: S(\n    '<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\"/>'\n  ),\n  quote: G(\n    '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'\n  ),\n  link: G(\n    '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'\n  ),\n  unlink: S(\n    '<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\"/>'\n  ),\n  lineheight: G(\n    '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'\n  ),\n  wordspacing: G(\n    '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'\n  ),\n  caseic: G(\n    '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'\n  ),\n  uppercaseic: G(\n    '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'\n  ),\n  lowercaseic: G(\n    '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'\n  ),\n  capitalizeic: G(\n    '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'\n  ),\n  plus: S('<path d=\"M12 5.5v13M5.5 12h13\"/>'),\n  minus: S('<path d=\"M5.5 12h13\"/>'),\n  fontsizeup: G(\n    'm40-200 210-560h100l210 560h-96l-51-143H187l-51 143H40Zm176-224h168l-82-232h-4l-82 232Zm504 104v-120H600v-80h120v-120h80v120h120v80H800v120h-80Z'\n  ),\n  fontsizedown: G(\n    'm40-200 210-560h100l210 560h-96l-51-143H187l-51 143H40Zm176-224h168l-82-232h-4l-82 232Zm384-16v-80h320v80H600Z'\n  ),\n  historyic: G(\n    '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'\n  ),\n  wordic: S(\n    '<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>'\n  ),\n  draftic: G(\n    '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'\n  ),\n  trash: S(\n    '<path d=\"M5 7h14M10 7V5h4v2M7.5 7l1 13h7l1-13\"/>'\n  ),\n  templateic: S(\n    '<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\"/>'\n  ),\n  tplleft: S(\n    '<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\"/>'\n  ),\n  tplright: S(\n    '<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\"/>'\n  ),\n  tpltop: S(\n    '<rect x=\"5\" y=\"3\" width=\"14\" height=\"9\" rx=\".8\"/><path d=\"M3 15h18M3 18h18M3 21h12\"/>'\n  ),\n  tplcenter: S(\n    '<path d=\"M3 4h18M3 7h18M3 10h12\"/><rect x=\"5\" y=\"12.5\" width=\"14\" height=\"9\" rx=\".8\"/>'\n  ),\n  rotateleft: S(\n    '<polyline points=\"1 4 1 10 7 10\"/><path d=\"M3.51 15a9 9 0 1 0 2.13-9.36L1 10\"/>'\n  ),\n  rotateright: S(\n    '<polyline points=\"23 4 23 10 17 10\"/><path d=\"M20.49 15a9 9 0 1 1-2.12-9.36L23 10\"/>'\n  ),\n  fliphorizontal: S(\n    '<path d=\"M12 3v18\"/><path d=\"M7 8l-4 4 4 4\"/><path d=\"M17 8l4 4-4 4\"/>'\n  ),\n  flipvertical: S(\n    '<path d=\"M3 12h18\"/><path d=\"M8 7l4-4 4 4\"/><path d=\"M8 17l4 4 4-4\"/>'\n  ),\n  check: S('<path d=\"M5 12.5 9.5 17 19 7\"/>'),\n  palette: S(\n    '<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\"/>'\n  ),\n  ul_circle: G(\n    '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'\n  ),\n  ul_square: G(\n    'M80-160v-160h160v160H80Zm240 0v-160h560v160H320ZM80-400v-160h160v160H80Zm240 0v-160h560v160H320ZM80-640v-160h160v160H80Zm240 0v-160h560v160H320Z'\n  ),\n  ol_alpha: LIST(['a', 'b', 'c']),\n  ol_roman: LIST(['i', 'ii', 'iii'], 6.5),\n  ol_alphau: LIST(['A', 'B', 'C']),\n  ol_romanu: LIST(['I', 'II', 'III'], 6.5),\n  video: S('<rect x=\"3\" y=\"6\" width=\"13\" height=\"12\" rx=\"1.5\"/><path d=\"M16 10l5-3v10l-5-3z\"/>'),\n  editic: S('<path d=\"M4 20l1-4.5L15.5 5 19 8.5 8.5 19 4 20z\"/><path d=\"M13.5 6.5l4 4\"/>'),\n  letterspacing: S(\n    '<text x=\"2.5\" y=\"13\" font-size=\"12\" stroke=\"none\" fill=\"#222f3e\" font-family=\"Arial\" font-weight=\"bold\">A</text><text x=\"13\" y=\"13\" font-size=\"12\" stroke=\"none\" fill=\"#222f3e\" font-family=\"Arial\" font-weight=\"bold\">B</text><path d=\"M7 18.5h10\"/><path class=\"f\" d=\"M7.5 18.5 4.5 16.6v3.8z\"/><path class=\"f\" d=\"M16.5 18.5l3-1.9v3.8z\"/>'\n  ),\n  emojiic: S(\n    '<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M8.6 14.3a4.6 4.6 0 0 0 6.8 0\"/><path d=\"M9.2 9.6v.7M14.8 9.6v.7\"/>'\n  ),\n  inlinecodeic: S('<path d=\"M8.5 8 4.5 12l4 4M15.5 8l4 4-4 4\"/><path d=\"M13 6l-2 12\"/>'),\n  moverowup: S('<rect x=\"4\" y=\"15.5\" width=\"16\" height=\"5\" rx=\"1\"/><path d=\"M12 12.5V4M8.5 7.5 12 4l3.5 3.5\"/>'),\n  moverowdown: S('<rect x=\"4\" y=\"3.5\" width=\"16\" height=\"5\" rx=\"1\"/><path d=\"M12 11.5V20M8.5 16.5 12 20l3.5-3.5\"/>'),\n  movecolleft: S('<rect x=\"15.5\" y=\"4\" width=\"5\" height=\"16\" rx=\"1\"/><path d=\"M12.5 12H4M7.5 8.5 4 12l3.5 3.5\"/>'),\n  movecolright: S('<rect x=\"3.5\" y=\"4\" width=\"5\" height=\"16\" rx=\"1\"/><path d=\"M11.5 12H20M16.5 8.5 20 12l-3.5 3.5\"/>'),\n  codesampleic: S(\n    '<rect x=\"3.5\" y=\"4\" width=\"17\" height=\"16\" rx=\"2\"/><path d=\"M3.5 8.5h17\"/><path d=\"M9.5 12 7 14.25l2.5 2.25M14.5 12l2.5 2.25-2.5 2.25\"/>'\n  )\n};\n\nexport const TXT = (html: string) => `<span class=\"txt\">${html}</span>`;\n","const ALLOWED_TAGS = new Set([\n  'p',\n  'div',\n  'span',\n  'br',\n  'hr',\n  'a',\n  'b',\n  'strong',\n  'i',\n  'em',\n  'u',\n  's',\n  'strike',\n  'sub',\n  'sup',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'blockquote',\n  'pre',\n  'code',\n  'ul',\n  'ol',\n  'li',\n  'table',\n  'thead',\n  'tbody',\n  'tfoot',\n  'tr',\n  'td',\n  'th',\n  'caption',\n  'colgroup',\n  'col',\n  'img',\n  'figure',\n  'figcaption',\n  'mark'\n]);\n\nconst ALLOWED_STYLES = new Set([\n  'text-align',\n  'direction',\n  'unicode-bidi',\n  'font-weight',\n  'font-style',\n  'text-decoration',\n  'text-decoration-line',\n  'color',\n  'background-color',\n  'background',\n  'background-image',\n  'background-position',\n  'background-repeat',\n  'background-size',\n  'font-size',\n  'font-family',\n  'line-height',\n  'letter-spacing',\n  'vertical-align',\n  'text-indent',\n  'margin',\n  'margin-top',\n  'margin-bottom',\n  'margin-left',\n  'margin-right',\n  'margin-inline-start',\n  'margin-inline-end',\n  'padding',\n  'padding-top',\n  'padding-bottom',\n  'padding-left',\n  'padding-right',\n  'width',\n  'height',\n  'min-width',\n  'max-width',\n  'min-height',\n  'max-height',\n  'border',\n  'border-top',\n  'border-right',\n  'border-bottom',\n  'border-left',\n  'border-color',\n  'border-style',\n  'border-width',\n  'border-radius',\n  'border-collapse',\n  'border-spacing',\n  'table-layout',\n  'float',\n  'display',\n  'box-sizing',\n  'list-style-type',\n  'white-space'\n]);\n\nconst ALLOWED_ATTRS: Record<string, string[]> = {\n  '*': ['dir', 'lang', 'colspan', 'rowspan'],\n  a: ['href', 'target', 'rel', 'title'],\n  img: ['src', 'alt', 'width', 'height', 'title'],\n  col: ['span', 'width'],\n  td: ['width', 'valign'],\n  th: ['width', 'valign'],\n  table: ['width', 'cellpadding', 'cellspacing']\n};\n\nexport interface StyleMap {\n  [key: string]: string;\n}\n\nexport function styleMap(el: Element): StyleMap {\n  const map: StyleMap = {};\n  const raw = el.getAttribute && el.getAttribute('style');\n  if (!raw) return map;\n  raw.split(';').forEach((p) => {\n    const i = p.indexOf(':');\n    if (i < 1) return;\n    map[p.slice(0, i).trim().toLowerCase()] = p.slice(i + 1).trim();\n  });\n  return map;\n}\n\nfunction preClean(html: string): string {\n  return html\n    .replace(/<!--\\[if !supportLists\\]-->([\\s\\S]*?)<!--\\[endif\\]-->/gi, '$1')\n    .replace(/<!--\\[if !supportLists\\]>([\\s\\S]*?)<!\\[endif\\]-->/gi, '$1')\n    .replace(/<!\\[if !supportLists\\]>([\\s\\S]*?)<!\\[endif\\]>/gi, '$1')\n    .replace(/<!--\\[if [\\s\\S]*?<!\\[endif\\]-->/gi, '')\n    .replace(/<!--[\\s\\S]*?-->/g, '')\n    .replace(/<(script|style|xml|title)[\\s\\S]*?<\\/\\1>/gi, '')\n    .replace(/<\\/?(meta|link)[^>]*>/gi, '')\n    .replace(/<\\?xml[\\s\\S]*?\\?>/gi, '')\n    .replace(/<\\/?(o|v|w|m|st1):[^>]*>/gi, '');\n}\n\ninterface MarkerInfo {\n  ordered: boolean;\n  style?: string;\n}\n\nfunction markerType(mt: string): MarkerInfo {\n  if (/^[0-9]+[\\.\\)،]/.test(mt)) return { ordered: true };\n  if (/^[٠-٩۰-۹]+/.test(mt)) return { ordered: true, style: 'arabic-indic' };\n  if (/^[ivxlc]{2,}[\\.\\)]/.test(mt)) return { ordered: true, style: 'lower-roman' };\n  if (/^[IVXLC]{2,}[\\.\\)]/.test(mt)) return { ordered: true, style: 'upper-roman' };\n  if (/^[a-z][\\.\\)]/.test(mt)) return { ordered: true, style: 'lower-alpha' };\n  if (/^[A-Z][\\.\\)]/.test(mt)) return { ordered: true, style: 'upper-alpha' };\n  if (/^[ء-ي][\\.\\)،-]/.test(mt)) return { ordered: true, style: 'arabic-indic' };\n  return { ordered: false };\n}\n\nfunction rebuildWordLists(doc: Document): void {\n  const isListP = (p: Element) => {\n    const s = (p.getAttribute('style') || '') + ' ' + (p.className || '');\n    return /mso-list\\s*:(?!\\s*ignore)/i.test(s) || /MsoListParagraph/i.test(s);\n  };\n  const groups: HTMLParagraphElement[][] = [];\n  let cur: HTMLParagraphElement[] | null = null;\n  Array.from(doc.body.querySelectorAll('p')).forEach((p) => {\n    if (!isListP(p)) {\n      cur = null;\n      return;\n    }\n    const prev = p.previousElementSibling;\n    if (cur && prev && cur[cur.length - 1] === prev) cur.push(p);\n    else {\n      cur = [p];\n      groups.push(cur);\n    }\n  });\n  groups.forEach((group) => {\n    const stack: { list: HTMLOListElement | HTMLUListElement; level: number }[] = [];\n    const rootAnchor = group[0];\n    group.forEach((p) => {\n      const style = p.getAttribute('style') || '';\n      const level = +(style.match(/level(\\d+)/i)?.[1] || 1);\n      const marker = Array.from(p.querySelectorAll('span')).find((sp) =>\n        /mso-list\\s*:\\s*ignore/i.test(sp.getAttribute('style') || '')\n      );\n      const mt = marker\n        ? marker.textContent?.trim() || ''\n        : (p.textContent?.trim().match(/^\\S{1,4}/) || [''])[0];\n      const { ordered, style: listStyle } = markerType(mt);\n      if (marker) marker.remove();\n      while (stack.length && stack[stack.length - 1].level > level) stack.pop();\n      if (!stack.length || stack[stack.length - 1].level < level) {\n        const list = doc.createElement(ordered ? 'ol' : 'ul');\n        if (ordered && listStyle) list.style.listStyleType = listStyle;\n        if (stack.length) {\n          const par = stack[stack.length - 1].list;\n          (par.lastElementChild || par).appendChild(list);\n        } else {\n          rootAnchor.parentNode!.insertBefore(list, rootAnchor);\n        }\n        stack.push({ list, level });\n      }\n      const li = doc.createElement('li');\n      const keep = styleMap(p);\n      const kept = ['text-align', 'direction', 'unicode-bidi', 'color', 'font-size', 'font-family', 'background-color']\n        .filter((k) => keep[k])\n        .map((k) => k + ':' + keep[k])\n        .join(';');\n      if (kept) li.setAttribute('style', kept);\n      if (p.getAttribute('dir')) li.setAttribute('dir', p.getAttribute('dir')!);\n      while (p.firstChild) li.appendChild(p.firstChild);\n      stack[stack.length - 1].list.appendChild(li);\n      p.remove();\n    });\n  });\n}\n\nfunction fixGoogleDocs(doc: Document): void {\n  doc.querySelectorAll('b[id^=\"docs-internal-guid\"]').forEach((b) => {\n    while (b.firstChild) b.parentNode!.insertBefore(b.firstChild, b);\n    b.remove();\n  });\n}\n\nfunction fixLegacyAttrs(doc: Document): void {\n  doc.querySelectorAll('table').forEach((tb) => {\n    const htmlTb = tb as HTMLElement;\n    if (!styleMap(htmlTb)['border-collapse']) htmlTb.style.borderCollapse = 'collapse';\n  });\n  doc.querySelectorAll('[align]').forEach((el) => {\n    const htmlEl = el as HTMLElement;\n    const v = htmlEl.getAttribute('align')!.toLowerCase();\n    if (htmlEl.tagName.toLowerCase() === 'table') {\n      if (v === 'center') {\n        htmlEl.style.marginLeft = htmlEl.style.marginLeft || 'auto';\n        htmlEl.style.marginRight = htmlEl.style.marginRight || 'auto';\n      } else if (v === 'right') htmlEl.style.marginLeft = htmlEl.style.marginLeft || 'auto';\n      else if (v === 'left') htmlEl.style.marginRight = htmlEl.style.marginRight || 'auto';\n    } else if (['left', 'right', 'center', 'justify'].includes(v)) {\n      htmlEl.style.textAlign = htmlEl.style.textAlign || v;\n      // Word aligns tables by wrapping them in <div align=...>; text-align\n      // does not move a table box, so mirror the alignment onto the table.\n      Array.from(htmlEl.children).forEach((ch) => {\n        if (ch.tagName.toLowerCase() !== 'table') return;\n        const tb = ch as HTMLElement;\n        if (v === 'center') {\n          tb.style.marginLeft = tb.style.marginLeft || 'auto';\n          tb.style.marginRight = tb.style.marginRight || 'auto';\n        } else if (v === 'right') tb.style.marginLeft = tb.style.marginLeft || 'auto';\n        else if (v === 'left') tb.style.marginRight = tb.style.marginRight || 'auto';\n      });\n    }\n    htmlEl.removeAttribute('align');\n  });\n  doc.querySelectorAll('center table').forEach((tb) => {\n    const htmlTb = tb as HTMLElement;\n    htmlTb.style.marginLeft = htmlTb.style.marginLeft || 'auto';\n    htmlTb.style.marginRight = htmlTb.style.marginRight || 'auto';\n  });\n  doc.querySelectorAll('[bgcolor]').forEach((el) => {\n    const htmlEl = el as HTMLElement;\n    htmlEl.style.backgroundColor = htmlEl.style.backgroundColor || htmlEl.getAttribute('bgcolor')!;\n    htmlEl.removeAttribute('bgcolor');\n  });\n}\n\nfunction sanitize(node: Node, doc: Document): void {\n  Array.from(node.childNodes).forEach((child) => {\n    if (child.nodeType === Node.COMMENT_NODE) {\n      child.remove();\n      return;\n    }\n    if (child.nodeType !== Node.ELEMENT_NODE) return;\n    const el = child as Element;\n    const tag = el.tagName.toLowerCase();\n    if (!ALLOWED_TAGS.has(tag)) {\n      if (tag === 'font') {\n        const span = doc.createElement('span');\n        if (el.getAttribute('style')) span.setAttribute('style', el.getAttribute('style')!);\n        if (el.getAttribute('color')) span.style.color = el.getAttribute('color')!;\n        if (el.getAttribute('face')) span.style.fontFamily = el.getAttribute('face')!;\n        const sz = el.getAttribute('size');\n        if (sz && !span.style.fontSize) {\n          const szMap: Record<string, string> = {\n            '1': '8pt',\n            '2': '10pt',\n            '3': '12pt',\n            '4': '14pt',\n            '5': '18pt',\n            '6': '24pt',\n            '7': '36pt'\n          };\n          if (szMap[sz]) span.style.fontSize = szMap[sz];\n        }\n        while (el.firstChild) span.appendChild(el.firstChild);\n        el.replaceWith(span);\n        sanitize(span, doc);\n        return;\n      }\n      sanitize(el, doc);\n      while (el.firstChild) el.parentNode!.insertBefore(el.firstChild, el);\n      el.remove();\n      return;\n    }\n    const allowed = new Set([...(ALLOWED_ATTRS['*'] || []), ...(ALLOWED_ATTRS[tag] || [])]);\n    Array.from(el.attributes).forEach((a) => {\n      const n = a.name.toLowerCase();\n      if (n !== 'style' && !allowed.has(n)) el.removeAttribute(a.name);\n    });\n    if (tag === 'a') {\n      const href = el.getAttribute('href') || '';\n      if (!/^(https?:|mailto:|tel:|#)/i.test(href)) el.removeAttribute('href');\n    }\n    if (tag === 'img') {\n      const src = el.getAttribute('src') || '';\n      if (!/^(https?:|data:image\\/|blob:)/i.test(src)) {\n        const ph = doc.createElement('span');\n        ph.textContent = '[local image — paste it separately]';\n        ph.setAttribute('style', 'color:#a33;font-style:italic;font-size:12px');\n        el.replaceWith(ph);\n        return;\n      }\n    }\n    const styles = styleMap(el);\n    const kept: string[] = [];\n    for (const [k, v] of Object.entries(styles)) {\n      if (!ALLOWED_STYLES.has(k)) continue;\n      if (/expression|javascript|url\\s*\\(\\s*['\"]?\\s*file:/i.test(v)) continue;\n      if (k === 'font-weight' && /^(400|normal)$/i.test(v)) continue;\n      if (k === 'font-style' && /^normal$/i.test(v)) continue;\n      if (k === 'text-decoration' && /^none$/i.test(v)) continue;\n      kept.push(k + ':' + v);\n    }\n    if (kept.length) el.setAttribute('style', kept.join(';'));\n    else el.removeAttribute('style');\n    el.removeAttribute('class');\n    sanitize(el, doc);\n    if (tag === 'span' && !el.attributes.length) {\n      while (el.firstChild) el.parentNode!.insertBefore(el.firstChild, el);\n      el.remove();\n    }\n  });\n}\n\ninterface StyleRule {\n  sel: string;\n  decls: [string, string][];\n}\n\nfunction extractStyleRules(raw: string): StyleRule[] {\n  const rules: StyleRule[] = [];\n  const re = /<style[^>]*>([\\s\\S]*?)<\\/style>/gi;\n  let m: RegExpExecArray | null;\n  while ((m = re.exec(raw))) {\n    let css = m[1].replace(/<!--|-->/g, '').replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n    css = css.replace(/@media[^{]*\\{(?:[^{}]*\\{[^{}]*\\})*[^{}]*\\}/gi, '');\n    css = css.replace(/@[\\w-]+[^{]*\\{[^{}]*\\}/g, '');\n    let rm: RegExpExecArray | null;\n    const rre = /([^{}]+)\\{([^}]*)\\}/g;\n    while ((rm = rre.exec(css))) {\n      const decls = rm[2]\n        .split(';')\n        .map((d) => {\n          const i = d.indexOf(':');\n          if (i < 1) return null;\n          return [d.slice(0, i).trim().toLowerCase(), d.slice(i + 1).trim()] as [string, string];\n        })\n        .filter((d): d is [string, string] => !!d && !!d[1]);\n      if (!decls.length) continue;\n      rm[1]\n        .split(',')\n        .map((s) => s.trim())\n        .filter((s) => s && !s.startsWith('@'))\n        .forEach((sel) => rules.push({ sel, decls }));\n    }\n  }\n  return rules;\n}\n\nfunction applyStyleRules(doc: Document, rules: StyleRule[]): void {\n  if (!rules.length) return;\n  const addMap = new Map<Element, { [k: string]: string }>();\n  rules.forEach(({ sel, decls }) => {\n    let els: NodeListOf<Element>;\n    try {\n      els = doc.querySelectorAll(sel);\n    } catch (e) {\n      return;\n    }\n    els.forEach((el) => {\n      let m = addMap.get(el);\n      if (!m) {\n        m = {};\n        addMap.set(el, m);\n      }\n      decls.forEach(([k, v]) => {\n        m![k] = v;\n      });\n    });\n  });\n  addMap.forEach((m, el) => {\n    const have = styleMap(el);\n    const hasDir = el.hasAttribute('dir');\n    const hasAlign = el.hasAttribute('align');\n    const add = Object.entries(m).filter(([k]) => {\n      if (k in have) return false;\n      if ((k === 'direction' || k === 'unicode-bidi') && hasDir) return false;\n      if (k === 'text-align' && (hasAlign || hasDir)) return false;\n      if ((k === 'background' || k === 'background-color') && el.hasAttribute('bgcolor')) return false;\n      return true;\n    });\n    if (!add.length) return;\n    const prefix = add.map(([k, v]) => k + ':' + v).join(';');\n    const cur = el.getAttribute('style');\n    el.setAttribute('style', cur ? prefix + ';' + cur : prefix);\n  });\n}\n\nfunction normalizeArabicPresentation(s: string): string {\n  return s.replace(/[ﭐ-﷿ﹰ-ﻼ]+/g, (m) => m.normalize('NFKC'));\n}\n\nfunction normalizeArabicText(doc: Document): void {\n  const w = doc.createTreeWalker(doc.body, NodeFilter.SHOW_TEXT, null);\n  let n: Node | null;\n  while ((n = w.nextNode()))\n    if (/[ﭐ-﷿ﹰ-ﻼ]/.test(n.nodeValue || '')) n.nodeValue = normalizeArabicPresentation(n.nodeValue || '');\n}\n\nexport function cleanPastedHTML(raw: string, editorDir: 'ltr' | 'rtl' = 'ltr'): string {\n  const cssRules = extractStyleRules(raw);\n  const doc = new DOMParser().parseFromString(preClean(raw), 'text/html');\n  applyStyleRules(doc, cssRules);\n  if (/class=\"?Mso|mso-|urn:schemas-microsoft-com/i.test(doc.body.innerHTML)) rebuildWordLists(doc);\n  fixGoogleDocs(doc);\n  fixLegacyAttrs(doc);\n  sanitize(doc.body, doc);\n  normalizeArabicText(doc);\n  const emptyP = (el: Element | null) => el && el.tagName === 'P' && !el.textContent?.trim() && !el.querySelector('img,table');\n  while (emptyP(doc.body.firstElementChild)) doc.body.firstElementChild!.remove();\n  while (emptyP(doc.body.lastElementChild)) doc.body.lastElementChild!.remove();\n  return doc.body.innerHTML.trim();\n}\n\nexport function normalizeTextPaste(raw: string): string {\n  const txt = normalizeArabicPresentation(raw).replace(/\\r/g, '');\n  const esc = (s: string) => s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n  if (/\\n/.test(txt)) {\n    return txt\n      .split(/\\n{2,}/)\n      .map((par) => `<p dir=\"auto\">${esc(par).replace(/\\n/g, '<br>') || '<br>'}</p>`)\n      .join('');\n  }\n  return esc(txt);\n}\n","/* Minimal .docx → HTML converter with no dependencies.\n   Parses the ZIP container manually and inflates entries with the browser's\n   DecompressionStream, then maps WordprocessingML to editor-friendly HTML:\n   headings, run formatting, colors, hyperlinks, lists, tables and images. */\n\ninterface ZipEntry {\n  name: string;\n  method: number;\n  compSize: number;\n  localOffset: number;\n}\n\nfunction parseZip(buf: ArrayBuffer): Map<string, ZipEntry> {\n  const d = new DataView(buf);\n  const entries = new Map<string, ZipEntry>();\n  // find End Of Central Directory record (sig 0x06054b50), scanning back over the comment\n  let eocd = -1;\n  for (let i = buf.byteLength - 22; i >= Math.max(0, buf.byteLength - 22 - 0xffff); i--) {\n    if (d.getUint32(i, true) === 0x06054b50) {\n      eocd = i;\n      break;\n    }\n  }\n  if (eocd < 0) throw new Error('EOCD not found');\n  const count = d.getUint16(eocd + 10, true);\n  let p = d.getUint32(eocd + 16, true);\n  const utf8 = new TextDecoder();\n  for (let i = 0; i < count; i++) {\n    if (d.getUint32(p, true) !== 0x02014b50) break;\n    const method = d.getUint16(p + 10, true);\n    const compSize = d.getUint32(p + 20, true);\n    const nameLen = d.getUint16(p + 28, true);\n    const extraLen = d.getUint16(p + 30, true);\n    const commentLen = d.getUint16(p + 32, true);\n    const localOffset = d.getUint32(p + 42, true);\n    const name = utf8.decode(new Uint8Array(buf, p + 46, nameLen));\n    entries.set(name, { name, method, compSize, localOffset });\n    p += 46 + nameLen + extraLen + commentLen;\n  }\n  return entries;\n}\n\nasync function readEntry(buf: ArrayBuffer, e: ZipEntry): Promise<Uint8Array> {\n  const d = new DataView(buf, e.localOffset);\n  if (d.getUint32(0, true) !== 0x04034b50) throw new Error('Bad local header');\n  const nameLen = d.getUint16(26, true);\n  const extraLen = d.getUint16(28, true);\n  const start = e.localOffset + 30 + nameLen + extraLen;\n  const comp = new Uint8Array(buf.slice(start, start + e.compSize));\n  if (e.method === 0) return comp;\n  if (e.method !== 8) throw new Error('Unsupported compression method ' + e.method);\n  const stream = new Blob([comp as BlobPart]).stream().pipeThrough(new DecompressionStream('deflate-raw'));\n  return new Uint8Array(await new Response(stream).arrayBuffer());\n}\n\n/* ------------------------------------------------------------- helpers */\nconst esc = (s: string) =>\n  s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;');\n\nconst kids = (el: Element, name: string): Element[] =>\n  Array.from(el.children).filter((c) => c.localName === name);\n\nconst kid = (el: Element, ...path: string[]): Element | null => {\n  let cur: Element | null = el;\n  for (const name of path) {\n    if (!cur) return null;\n    cur = Array.from(cur.children).find((c) => c.localName === name) || null;\n  }\n  return cur;\n};\n\nconst val = (el: Element | null, attrName = 'val'): string => {\n  if (!el) return '';\n  for (const a of Array.from(el.attributes)) {\n    if (a.localName === attrName) return a.value;\n  }\n  return '';\n};\n\n/** A toggle property like <w:b/> is on unless val is explicitly false/0. */\nconst flagOn = (rPr: Element | null, name: string): boolean => {\n  const el = rPr ? kid(rPr, name) : null;\n  if (!el) return false;\n  const v = val(el);\n  return v !== 'false' && v !== '0';\n};\n\nconst HIGHLIGHTS: Record<string, string> = {\n  yellow: '#FFFF00',\n  green: '#00FF00',\n  cyan: '#00FFFF',\n  magenta: '#FF00FF',\n  blue: '#0000FF',\n  red: '#FF0000',\n  darkBlue: '#00008B',\n  darkCyan: '#008B8B',\n  darkGreen: '#006400',\n  darkMagenta: '#8B008B',\n  darkRed: '#8B0000',\n  darkYellow: '#808000',\n  darkGray: '#A9A9A9',\n  lightGray: '#D3D3D3',\n  black: '#000000',\n  white: '#FFFFFF'\n};\n\nconst IMG_MIME: Record<string, string> = {\n  png: 'image/png',\n  jpg: 'image/jpeg',\n  jpeg: 'image/jpeg',\n  gif: 'image/gif',\n  bmp: 'image/bmp',\n  webp: 'image/webp'\n};\n\nfunction toBase64(bytes: Uint8Array): string {\n  let bin = '';\n  for (let i = 0; i < bytes.length; i += 0x8000) {\n    bin += String.fromCharCode(...bytes.subarray(i, i + 0x8000));\n  }\n  return btoa(bin);\n}\n\n/* ------------------------------------------------------------- converter */\nclass DocxConverter {\n  constructor(\n    private rels: Map<string, string>,\n    private images: Map<string, string>,\n    private numFmt: Map<string, 'ul' | 'ol'>\n  ) {}\n\n  convertBody(body: Element): string {\n    let html = '';\n    // stack of open lists for nested numbering\n    let listStack: Array<'ul' | 'ol'> = [];\n    const closeLists = (depth: number) => {\n      while (listStack.length > depth) html += `</${listStack.pop()}>`;\n    };\n    for (const child of Array.from(body.children)) {\n      if (child.localName === 'p') {\n        const list = this.paraList(child);\n        if (list) {\n          const depth = list.ilvl + 1;\n          while (listStack.length > depth) html += `</${listStack.pop()}>`;\n          if (listStack.length === depth && listStack[depth - 1] !== list.type) {\n            html += `</${listStack.pop()}>`;\n          }\n          while (listStack.length < depth) {\n            html += `<${list.type}>`;\n            listStack.push(list.type);\n          }\n          html += `<li>${this.runsOf(child) || '<br>'}</li>`;\n          continue;\n        }\n        closeLists(0);\n        html += this.convertPara(child);\n      } else if (child.localName === 'tbl') {\n        closeLists(0);\n        html += this.convertTable(child);\n      } else if (child.localName === 'sectPr') {\n        // section properties — no visual content\n      }\n    }\n    closeLists(0);\n    return html || '<p><br></p>';\n  }\n\n  private paraList(p: Element): { type: 'ul' | 'ol'; ilvl: number } | null {\n    const numPr = kid(p, 'pPr', 'numPr');\n    if (!numPr) return null;\n    const numId = val(kid(numPr, 'numId'));\n    if (!numId || numId === '0') return null;\n    const ilvl = parseInt(val(kid(numPr, 'ilvl')) || '0', 10) || 0;\n    return { type: this.numFmt.get(numId) || 'ul', ilvl: Math.min(ilvl, 8) };\n  }\n\n  private convertPara(p: Element): string {\n    const pPr = kid(p, 'pPr');\n    const style = val(kid(p, 'pPr', 'pStyle'));\n    let tag = 'p';\n    const m = /^Heading([1-6])$/i.exec(style);\n    if (m) tag = 'h' + m[1];\n    else if (/^Title$/i.test(style)) tag = 'h1';\n    const css: string[] = [];\n    const jc = val(kid(p, 'pPr', 'jc'));\n    if (jc === 'center') css.push('text-align:center');\n    else if (jc === 'right' || jc === 'end') css.push('text-align:right');\n    else if (jc === 'both' || jc === 'distribute') css.push('text-align:justify');\n    if (pPr && kid(pPr, 'bidi')) css.push('direction:rtl');\n    const inner = this.runsOf(p);\n    const attrs = css.length ? ` style=\"${css.join(';')}\"` : '';\n    return `<${tag}${attrs}>${inner || '<br>'}</${tag}>`;\n  }\n\n  private runsOf(el: Element): string {\n    let html = '';\n    for (const child of Array.from(el.children)) {\n      if (child.localName === 'r') html += this.convertRun(child);\n      else if (child.localName === 'hyperlink') {\n        let href = this.rels.get(val(child, 'id')) || '';\n        const anchor = val(child, 'anchor');\n        if (!href && anchor) href = '#' + anchor;\n        const inner = this.runsOf(child);\n        html += href ? `<a href=\"${esc(href)}\">${inner}</a>` : inner;\n      } else if (child.localName === 'smartTag' || child.localName === 'ins') {\n        html += this.runsOf(child);\n      }\n    }\n    return html;\n  }\n\n  private convertRun(r: Element): string {\n    const rPr = kid(r, 'rPr');\n    let text = '';\n    for (const child of Array.from(r.children)) {\n      if (child.localName === 't') text += esc(child.textContent || '');\n      else if (child.localName === 'br' || child.localName === 'cr') text += '<br>';\n      else if (child.localName === 'tab') text += '&emsp;';\n      else if (child.localName === 'drawing' || child.localName === 'pict' || child.localName === 'object') {\n        text += this.convertImage(child);\n      }\n    }\n    if (!text) return '';\n    const css: string[] = [];\n    const color = val(rPr ? kid(rPr, 'color') : null);\n    if (color && color !== 'auto') css.push('color:#' + color);\n    const highlight = val(rPr ? kid(rPr, 'highlight') : null);\n    if (highlight && HIGHLIGHTS[highlight]) css.push('background-color:' + HIGHLIGHTS[highlight]);\n    const sz = parseFloat(val(rPr ? kid(rPr, 'sz') : null));\n    if (sz) css.push('font-size:' + Math.round((sz / 2) * (4 / 3)) + 'px');\n    const font = rPr ? kid(rPr, 'rFonts') : null;\n    const fontName = val(font, 'ascii') || val(font, 'cs');\n    if (fontName) css.push(`font-family:'${fontName}'`);\n    if (css.length) text = `<span style=\"${css.join(';')}\">${text}</span>`;\n    if (flagOn(rPr, 'b')) text = `<strong>${text}</strong>`;\n    if (flagOn(rPr, 'i')) text = `<em>${text}</em>`;\n    if (flagOn(rPr, 'u') && val(kid(rPr!, 'u')) !== 'none') text = `<u>${text}</u>`;\n    if (flagOn(rPr, 'strike')) text = `<s>${text}</s>`;\n    const vert = val(rPr ? kid(rPr, 'vertAlign') : null);\n    if (vert === 'superscript') text = `<sup>${text}</sup>`;\n    else if (vert === 'subscript') text = `<sub>${text}</sub>`;\n    return text;\n  }\n\n  private convertImage(holder: Element): string {\n    // find any blip (DrawingML) or imagedata (VML) descendant regardless of depth\n    let relId = '';\n    let widthPx = 0;\n    const walk = (el: Element) => {\n      if (el.localName === 'blip') relId = relId || val(el, 'embed') || val(el, 'link');\n      if (el.localName === 'imagedata') relId = relId || val(el, 'id');\n      if (el.localName === 'extent') {\n        const cx = parseFloat(el.getAttribute('cx') || '0');\n        if (cx) widthPx = Math.round(cx / 9525); // EMU → px\n      }\n      for (const c of Array.from(el.children)) walk(c);\n    };\n    walk(holder);\n    if (!relId) return '';\n    const src = this.images.get(relId);\n    if (!src) return '';\n    const w = widthPx ? ` width=\"${widthPx}\"` : '';\n    return `<img src=\"${src}\" alt=\"\"${w}>`;\n  }\n\n  private convertTable(tbl: Element): string {\n    let html = '<table style=\"border-collapse:collapse;width:100%\"><tbody>';\n    for (const tr of kids(tbl, 'tr')) {\n      html += '<tr>';\n      for (const tc of kids(tr, 'tc')) {\n        const span = parseInt(val(kid(tc, 'tcPr', 'gridSpan')) || '1', 10) || 1;\n        const spanAttr = span > 1 ? ` colspan=\"${span}\"` : '';\n        let inner = '';\n        for (const child of Array.from(tc.children)) {\n          if (child.localName === 'p') inner += this.convertPara(child);\n          else if (child.localName === 'tbl') inner += this.convertTable(child);\n        }\n        html += `<td style=\"border:1px solid #b9c2cc\"${spanAttr}>${inner || '<br>'}</td>`;\n      }\n      html += '</tr>';\n    }\n    return html + '</tbody></table>';\n  }\n}\n\n/* ------------------------------------------------------------- entry point */\nexport async function importDocxToHtml(input: File | Blob | ArrayBuffer): Promise<string> {\n  const buf = input instanceof ArrayBuffer ? input : await input.arrayBuffer();\n  const entries = parseZip(buf);\n  const decoder = new TextDecoder();\n  const readXml = async (name: string): Promise<Document | null> => {\n    const e = entries.get(name);\n    if (!e) return null;\n    return new DOMParser().parseFromString(decoder.decode(await readEntry(buf, e)), 'application/xml');\n  };\n\n  const doc = await readXml('word/document.xml');\n  const body = doc?.getElementsByTagName('*');\n  let bodyEl: Element | null = null;\n  if (body) {\n    for (const el of Array.from(body)) {\n      if (el.localName === 'body') {\n        bodyEl = el;\n        break;\n      }\n    }\n  }\n  if (!bodyEl) throw new Error('word/document.xml missing or invalid');\n\n  // relationships: id → target (hyperlinks are absolute, images relative to word/)\n  const rels = new Map<string, string>();\n  const imageTargets = new Map<string, string>();\n  const relsDoc = await readXml('word/_rels/document.xml.rels');\n  if (relsDoc) {\n    for (const rel of Array.from(relsDoc.getElementsByTagName('*'))) {\n      if (rel.localName !== 'Relationship') continue;\n      const id = rel.getAttribute('Id') || '';\n      const target = rel.getAttribute('Target') || '';\n      const type = rel.getAttribute('Type') || '';\n      if (/hyperlink/i.test(type)) rels.set(id, target);\n      else if (/image/i.test(type)) imageTargets.set(id, target);\n    }\n  }\n\n  // load referenced images as data URLs\n  const images = new Map<string, string>();\n  for (const [id, target] of imageTargets) {\n    const path = target.startsWith('/') ? target.slice(1) : 'word/' + target.replace(/^\\.\\//, '');\n    const entry = entries.get(path);\n    if (!entry) continue;\n    const ext = (path.split('.').pop() || '').toLowerCase();\n    const mime = IMG_MIME[ext];\n    if (!mime) continue; // skip unsupported formats like emf/wmf\n    try {\n      images.set(id, `data:${mime};base64,${toBase64(await readEntry(buf, entry))}`);\n    } catch {\n      /* skip broken image */\n    }\n  }\n\n  // numbering: numId → ul/ol (from level-0 numFmt of the abstract definition)\n  const numFmt = new Map<string, 'ul' | 'ol'>();\n  const numDoc = await readXml('word/numbering.xml');\n  if (numDoc) {\n    const abstractFmt = new Map<string, 'ul' | 'ol'>();\n    const all = Array.from(numDoc.getElementsByTagName('*'));\n    for (const el of all) {\n      if (el.localName !== 'abstractNum') continue;\n      const id = val(el, 'abstractNumId');\n      const lvl0 = kids(el, 'lvl').find((l) => val(l, 'ilvl') === '0') || kids(el, 'lvl')[0];\n      const fmt = lvl0 ? val(kid(lvl0, 'numFmt')) : '';\n      abstractFmt.set(id, fmt === 'bullet' ? 'ul' : 'ol');\n    }\n    for (const el of all) {\n      if (el.localName !== 'num') continue;\n      const numId = val(el, 'numId');\n      const absId = val(kid(el, 'abstractNumId'));\n      numFmt.set(numId, abstractFmt.get(absId) || 'ul');\n    }\n  }\n\n  return new DocxConverter(rels, images, numFmt).convertBody(bodyEl);\n}\n","import { EditorInitOptions, EditorLanguage, FableEditorApi, MenuItemDef, DialogButton } from './types';\nimport { getStrings, I18nStrings } from './i18n';\nimport { FONTS, SIZES, BLOCKS, COLORS, QUICK_COLORS, CHAR_CATEGORIES, EMOJI_CATEGORIES, GlyphCategory, MIN_FONT_PX, MAX_FONT_PX, LINE_HEIGHTS, WORD_SPACINGS, LETTER_SPACINGS, CODE_LANGS, DEFAULT_TOOLBAR, DEFAULT_MENUBAR } from './config';\nimport { IC } from './icons';\nimport { cleanPastedHTML, normalizeTextPaste } from './paste-engine';\nimport { importDocxToHtml } from './docx-import';\n\ntype ImgCorner = 'nw' | 'ne' | 'sw' | 'se';\nconst IMG_CORNERS: ImgCorner[] = ['nw', 'ne', 'sw', 'se'];\n\ntype TplLayout = 'img-left' | 'img-right' | 'img-top' | 'img-center';\nconst TPL_LAYOUTS: TplLayout[] = ['img-left', 'img-right', 'img-top', 'img-center'];\nconst TPL_LABEL: Record<TplLayout, keyof I18nStrings> = {\n    'img-left': 'tplimgleft',\n    'img-right': 'tplimgright',\n    'img-top': 'tplimgtop',\n    'img-center': 'tplimgcenter'\n};\nconst TPL_ICON: Record<TplLayout, string> = {\n    'img-left': IC.tplleft,\n    'img-right': IC.tplright,\n    'img-top': IC.tpltop,\n    'img-center': IC.tplcenter\n};\n\n/* ---------------------------------------------------------- tooltips\n   One shared bubble + one delegated document listener restyles every native\n   `title` tooltip in the editor UI (toolbar, menus, popups, context toolbars,\n   dialogs) without extra wrapper markup per control. Titles inside the\n   editable area are user content and keep the browser default. */\nconst TIP_SCOPE = '.tox,.pop,.tblctx,.imgctx,.selctx,.dlg';\nlet tipEl: HTMLDivElement | null = null;\nlet tipTarget: HTMLElement | null = null;\nlet tipTimer = 0;\nlet tipsInstalled = false;\n\nfunction hideTip(): void {\n    clearTimeout(tipTimer);\n    tipTarget = null;\n    if (tipEl) tipEl.classList.remove('show');\n}\n\nfunction showTip(el: HTMLElement): void {\n    const text = el.dataset.tip;\n    if (!text) return;\n    tipTarget = el;\n    clearTimeout(tipTimer);\n    // moving along a toolbar re-anchors an already-visible tip almost instantly\n    const delay = tipEl && tipEl.classList.contains('show') ? 60 : 350;\n    tipTimer = window.setTimeout(() => {\n        if (tipTarget !== el || !document.contains(el)) return;\n        if (!tipEl) {\n            tipEl = document.createElement('div');\n            tipEl.className = 'etip';\n            document.body.appendChild(tipEl);\n        }\n        tipEl.textContent = text;\n        tipEl.classList.add('show');\n        const r = el.getBoundingClientRect();\n        const w = tipEl.offsetWidth;\n        const h = tipEl.offsetHeight;\n        let x = r.left + r.width / 2 - w / 2;\n        x = Math.max(6, Math.min(x, innerWidth - w - 6));\n        let y = r.bottom + 7;\n        if (y + h > innerHeight - 6) y = r.top - h - 7;\n        tipEl.style.left = x + 'px';\n        tipEl.style.top = y + 'px';\n    }, delay);\n}\n\nfunction installTooltips(): void {\n    if (tipsInstalled) return;\n    tipsInstalled = true;\n    document.addEventListener('mouseover', (e) => {\n        const raw = e.target as HTMLElement;\n        const el = raw.closest ? (raw.closest('[title],[data-tip]') as HTMLElement | null) : null;\n        if (!el || !el.closest(TIP_SCOPE) || el.closest('.earea')) {\n            if (el !== tipTarget) hideTip();\n            return;\n        }\n        const title = el.getAttribute('title');\n        if (title) {\n            // hand the text to the custom bubble and disarm the native one\n            el.dataset.tip = title;\n            el.removeAttribute('title');\n            if (!el.getAttribute('aria-label')) el.setAttribute('aria-label', title);\n        }\n        if (el !== tipTarget) showTip(el);\n    });\n    document.addEventListener('mouseout', (e) => {\n        if (tipTarget && !tipTarget.contains(e.relatedTarget as Node)) hideTip();\n    });\n    document.addEventListener('mousedown', hideTip, true);\n    addEventListener('scroll', hideTip, true);\n}\n\n/* ---------------------------------------------------------- email-export direction\n   detection — used only by getContentForEmail(). Content pasted from Word/Outlook\n   usually carries explicit dir=\"rtl\"/\"ltr\" per paragraph, but plain-text paste\n   (normalizeTextPaste's dir=\"auto\") and some other sources carry no reliable\n   explicit direction at all. For those blocks we fall back to a first-strong-\n   character scan (the same idea as HTML5's dir=\"auto\") instead of the app's\n   configured UI language, which has nothing to do with what the pasted text\n   actually is. */\nconst EMAIL_RTL_CHAR =\n    /[\\u0590-\\u05FF\\u0600-\\u06FF\\u0750-\\u077F\\u0780-\\u07BF\\u08A0-\\u08FF\\uFB1D-\\uFB4F\\uFB50-\\uFDFF\\uFE70-\\uFEFF]/;\nconst EMAIL_STRONG_CHAR = /\\p{L}/u;\nconst EMAIL_BLOCK_SELECTOR = 'p,div,li,td,th,blockquote,h1,h2,h3,h4,h5,h6,pre,figcaption';\n\nfunction firstStrongDir(text: string): 'rtl' | 'ltr' | null {\n    for (const ch of text) {\n        if (EMAIL_RTL_CHAR.test(ch)) return 'rtl';\n        if (EMAIL_STRONG_CHAR.test(ch)) return 'ltr';\n    }\n    return null;\n}\n\n/* Text belonging to el itself, skipping subtrees rooted at a descendant that\n   already carries its own explicit rtl/ltr dir — that subtree's direction is\n   already independently decided and shouldn't sway el's own detection. */\nfunction ownText(el: Element): string {\n    let text = '';\n    el.childNodes.forEach((node) => {\n        if (node.nodeType === Node.TEXT_NODE) {\n            text += node.nodeValue || '';\n        } else if (node.nodeType === Node.ELEMENT_NODE) {\n            const child = node as Element;\n            const d = (child.getAttribute('dir') || '').toLowerCase();\n            if (d === 'rtl' || d === 'ltr') return;\n            text += ownText(child);\n        }\n    });\n    return text;\n}\n\nexport class FableEditor implements FableEditorApi {\n    private static instanceCounter = 0;\n\n    private options: Required<\n        Omit<\n            EditorInitOptions,\n            | 'imageUploadHandler'\n            | 'onImageUploadError'\n            | 'contentStyle'\n            | 'videoUploadHandler'\n            | 'onVideoUploadError'\n            | 'primaryColor'\n            | 'toolbarGroupBackground'\n            | 'uiFontFamily'\n        >\n    >;\n    private lang: EditorLanguage = 'en';\n    private contentClass = 'fable-content-' + FableEditor.instanceCounter++;\n    private contentStyleEl: HTMLStyleElement | null = null;\n\n    private shell!: HTMLElement;\n    private menubar!: HTMLElement;\n    private toolbar!: HTMLElement;\n    private ed!: HTMLElement;\n    private statusbar!: HTMLElement;\n    private sbHelp!: HTMLElement;\n    private sbWords!: HTMLElement;\n    private imgInput!: HTMLInputElement;\n\n    private savedRange: Range | null = null;\n    private foreColor = '#000000';\n    private backColor = '#FACC15';\n\n    private openPop: HTMLElement | null = null;\n    /** Stack of currently-open flyout submenus, shallowest first (e.g. for\n     *  Table > Cell > Cell background: [Cell flyout, Cell background flyout]).\n     *  A single slot isn't enough past one level deep - opening a 2nd-level\n     *  flyout would remove the 1st-level one still needed to bridge visually\n     *  back to the top-level popup, leaving a gap. */\n    private subStack: HTMLElement[] = [];\n    private popAnchor: HTMLElement | null = null;\n    private dlgOvl: HTMLElement | null = null;\n\n    private tblActive: HTMLTableElement | null = null;\n    private tblCorner: HTMLElement | null = null;\n    private tblColBars: HTMLElement[] = [];\n    private tblCtx: HTMLElement | null = null;\n    private tblCellMark: HTMLElement | null = null;\n    private tblOpMark: HTMLElement | null = null;\n    private tblOpMarkKind: 'row' | 'col' | null = null;\n\n    private imgActive: HTMLImageElement | null = null;\n    private imgHandles: HTMLElement[] = [];\n    private imgCtx: HTMLElement | null = null;\n    private imgHideTimer: number | null = null;\n\n    private phActive: HTMLElement | null = null;\n    private phCtx: HTMLElement | null = null;\n    private phUploadTarget: HTMLElement | null = null;\n    private imageUploadHandler?: (file: File) => Promise<string>;\n    private onImageUploadError?: (error: unknown, file: File) => void;\n    private contentStyle?: string;\n\n    private vidInput!: HTMLInputElement;\n    /* a <video> element or a .video-embed iframe wrapper — both share the\n       same selection outline + align/delete context toolbar */\n    private vidActive: HTMLElement | null = null;\n    private vidCtx: HTMLElement | null = null;\n    private vidHideTimer: number | null = null;\n    private vphActive: HTMLElement | null = null;\n    private vphCtx: HTMLElement | null = null;\n    private vphUploadTarget: HTMLElement | null = null;\n    private videoUploadHandler?: (file: File) => Promise<string>;\n    private onVideoUploadError?: (error: unknown, file: File) => void;\n\n    private selCtx: HTMLElement | null = null;\n\n    private tbrMore: HTMLButtonElement | null = null;\n    private tbrExpanded = false;\n\n    private codeActive: HTMLElement | null = null;\n    private codeCtx: HTMLElement | null = null;\n\n    private tplActive: HTMLElement | null = null;\n    private tplCtx: HTMLElement | null = null;\n\n    private docInput!: HTMLInputElement;\n    private revisions: Array<{ time: number; html: string }> = [];\n    private revTimer: number | null = null;\n    private draftTimer: number | null = null;\n    private draftStorageKey = '';\n\n    private listeners: Array<() => void> = [];\n    private isDestroyed = false;\n\n    constructor(options: EditorInitOptions) {\n        this.options = {\n            target: options.target,\n            language: options.language || 'en',\n            height: options.height ?? 302,\n            initialContent: options.initialContent ?? '<p><br></p>',\n            onChange: options.onChange || (() => { }),\n            onReady: options.onReady || (() => { }),\n            menubar: options.menubar ?? true,\n            toolbar: options.toolbar ?? true,\n            statusbar: options.statusbar ?? true,\n            readonly: options.readonly ?? false,\n            draftKey: options.draftKey ?? (typeof location !== 'undefined' ? location.pathname : 'default'),\n            fontFamilyFormats: options.fontFamilyFormats ?? FONTS,\n            imageFileTypes: options.imageFileTypes ?? ['image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/bmp', 'image/webp'],\n            videoFileTypes: options.videoFileTypes ?? ['video/mp4', 'video/webm', 'video/ogg']\n        };\n        this.imageUploadHandler = options.imageUploadHandler;\n        this.onImageUploadError = options.onImageUploadError;\n        this.videoUploadHandler = options.videoUploadHandler;\n        this.onVideoUploadError = options.onVideoUploadError;\n        this.contentStyle = options.contentStyle;\n        this.applyTheme(options);\n        this.lang = this.options.language;\n        this.draftStorageKey = 'tmclone-draft:' + this.options.draftKey;\n        this.initDOM();\n        this.bindEvents();\n        this.initUI();\n        this.recordRevision();\n        this.options.onReady(this);\n    }\n\n    private t(key: keyof I18nStrings): string {\n        const s = getStrings(this.lang)[key];\n        return typeof s === 'string' ? s : (s as string[]).join(',');\n    }\n\n    private tArr(key: keyof I18nStrings): string[] {\n        return getStrings(this.lang)[key] as string[];\n    }\n\n    private dir(): 'ltr' | 'rtl' {\n        return getStrings(this.lang).dir;\n    }\n\n    /* ---------------------------------------------------------- DOM setup */\n    private initDOM(): void {\n        const target = this.options.target;\n        target.innerHTML = '';\n        target.classList.add('tox-root');\n\n        this.shell = document.createElement('div');\n        this.shell.className = 'tox';\n\n        this.menubar = document.createElement('div');\n        this.menubar.className = 'mnb';\n\n        this.toolbar = document.createElement('div');\n        this.toolbar.className = 'tbr';\n\n        this.ed = document.createElement('div');\n        this.ed.className = 'earea ' + this.contentClass;\n        this.ed.setAttribute('contenteditable', (!this.options.readonly).toString());\n        this.ed.spellcheck = true;\n        this.ed.innerHTML = this.options.initialContent;\n        this.ed.style.height = this.options.height + 'px';\n\n        this.statusbar = document.createElement('div');\n        this.statusbar.className = 'sbar';\n        this.statusbar.innerHTML = `\n      <span class=\"mid\"></span>\n      <span class=\"words\"></span>\n      <span class=\"grip\">\n        <svg viewBox=\"0 0 12 12\"><path d=\"M11 1 1 11M11 6 6 11M11 11h0\"/></svg>\n      </span>\n    `;\n        this.sbHelp = this.statusbar.querySelector('.mid') as HTMLElement;\n        this.sbWords = this.statusbar.querySelector('.words') as HTMLElement;\n        const grip = this.statusbar.querySelector('.grip') as HTMLElement;\n        this.bindGrip(grip);\n\n        this.shell.appendChild(this.menubar);\n        this.shell.appendChild(this.toolbar);\n        this.shell.appendChild(this.ed);\n        this.shell.appendChild(this.statusbar);\n        if (this.contentStyle) {\n            this.contentStyleEl = document.createElement('style');\n            this.contentStyleEl.textContent = this.scopeContentStyle(this.contentStyle);\n            this.shell.appendChild(this.contentStyleEl);\n        }\n        target.appendChild(this.shell);\n        installTooltips();\n\n        if (!this.options.statusbar) this.statusbar.style.display = 'none';\n\n        this.imgInput = document.createElement('input');\n        this.imgInput.type = 'file';\n        this.imgInput.accept = this.options.imageFileTypes.join(',');\n        this.imgInput.style.display = 'none';\n        target.appendChild(this.imgInput);\n\n        this.vidInput = document.createElement('input');\n        this.vidInput.type = 'file';\n        this.vidInput.accept = this.options.videoFileTypes.join(',');\n        this.vidInput.style.display = 'none';\n        target.appendChild(this.vidInput);\n\n        this.docInput = document.createElement('input');\n        this.docInput.type = 'file';\n        this.docInput.accept = '.docx,application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n        this.docInput.style.display = 'none';\n        target.appendChild(this.docInput);\n    }\n\n    /** Theme options land as CSS variables on the document root rather than the editor\n     *  shell, because dialogs, popups and floating context toolbars are appended to\n     *  document.body and would not inherit variables scoped to the shell. */\n    private applyTheme(options: EditorInitOptions): void {\n        const root = document.documentElement;\n        if (options.primaryColor) root.style.setProperty('--fable-primary', options.primaryColor);\n        if (options.toolbarGroupBackground) root.style.setProperty('--fable-tgrp-bg', options.toolbarGroupBackground);\n        if (options.uiFontFamily) root.style.setProperty('--fable-ui-font', options.uiFontFamily);\n    }\n\n    /** Rewrites the literal word `body` in a user-supplied `contentStyle` string to a\n     *  selector scoped to this instance's content div. Everything else passes through\n     *  verbatim, since `.ed` is a plain div in the host page (not an iframe) and an\n     *  unscoped `body { ... }` rule would otherwise leak onto the host page's body. */\n    private scopeContentStyle(css: string): string {\n        return css.replace(/\\bbody\\b/g, '.' + this.contentClass);\n    }\n\n    private bindGrip(grip: HTMLElement): void {\n        let startY = 0;\n        let startH = 0;\n        const md = (e: MouseEvent) => {\n            startY = e.clientY;\n            startH = this.ed.offsetHeight;\n            e.preventDefault();\n            const mv = (ev: MouseEvent) => {\n                this.ed.style.height = Math.max(120, startH + ev.clientY - startY) + 'px';\n            };\n            const up = () => {\n                window.removeEventListener('mousemove', mv);\n                window.removeEventListener('mouseup', up);\n            };\n            window.addEventListener('mousemove', mv);\n            window.addEventListener('mouseup', up);\n        };\n        grip.addEventListener('mousedown', md);\n        this.listeners.push(() => grip.removeEventListener('mousedown', md));\n    }\n\n    /* ---------------------------------------------------------- event binding */\n    private bindEvents(): void {\n        this.onDoc('mousedown', (e) => {\n            if (\n                this.openPop &&\n                !this.openPop.contains(e.target as Node) &&\n                !this.popAnchor!.contains(e.target as Node) &&\n                !this.subContains(e.target as Node)\n            ) {\n                this.closePop();\n            }\n        });\n        this.onDoc('keydown', (e) => {\n            if (e.key === 'Escape') {\n                this.closePop();\n                this.closeDlg();\n            }\n        });\n        this.onDoc('selectionchange', () => {\n            const sel = window.getSelection();\n            if (sel && this.ed.contains(sel.anchorNode)) {\n                this.saveSel();\n                this.refreshState();\n                this.updateSelToolbar(sel);\n                this.positionCellMarker();\n            } else {\n                this.clearSelToolbar();\n            }\n        });\n\n        this.on(this.ed, 'input', () => {\n            this.refreshState();\n            this.onChange();\n            this.positionTableHandles();\n            this.positionImageHandles();\n            this.positionImgPhCtx();\n            this.positionTplCtx();\n            this.positionVphCtx();\n            this.positionVidCtx();\n            this.positionCodeCtx();\n        });\n        this.on(this.ed, 'keydown', (e: KeyboardEvent) => {\n            if (e.altKey && e.key === '0') {\n                e.preventDefault();\n                this.helpDlg();\n            }\n            if ((e.key === 'Delete' || e.key === 'Backspace') && this.phActive) {\n                e.preventDefault();\n                this.removeImgPlaceholder();\n            }\n            if ((e.key === 'Delete' || e.key === 'Backspace') && this.vphActive) {\n                e.preventDefault();\n                this.removeVphPlaceholder();\n            }\n            if (e.key === '`' && !e.ctrlKey && !e.metaKey && !e.altKey) this.tryCodeTyping(e);\n            if (e.key === 'Enter' && !e.shiftKey && !e.ctrlKey && !e.metaKey && !e.altKey) this.tryExitBlockquote(e);\n        });\n        this.on(this.ed, 'paste', (e: ClipboardEvent) => this.handlePaste(e));\n        this.on(this.ed, 'drop', (e: DragEvent) => {\n            /* content drops stay blocked (powerpaste_block_drop) — only an\n               image/video file dropped onto its matching upload placeholder is consumed */\n            e.preventDefault();\n            const target = e.target as HTMLElement;\n            const ph = target.closest?.('.img-ph:not(.vid-ph)') as HTMLElement | null;\n            if (ph && this.ed.contains(ph) && !this.options.readonly) {\n                const file = Array.from(e.dataTransfer?.files || []).find((f) => f.type.startsWith('image/'));\n                if (file) this.readImageFileInto(file, ph);\n                return;\n            }\n            const vph = target.closest?.('.vid-ph') as HTMLElement | null;\n            if (vph && this.ed.contains(vph) && !this.options.readonly) {\n                const file = Array.from(e.dataTransfer?.files || []).find((f) => f.type.startsWith('video/'));\n                if (file) this.readVideoFileInto(file, vph);\n            }\n        });\n        this.on(this.ed, 'dragover', (e: DragEvent) => e.preventDefault());\n        this.on(this.ed, 'mousedown', (e: MouseEvent) => {\n            const target = e.target as HTMLElement;\n            const table = target.closest?.('table');\n            if (table && this.ed.contains(table)) this.selectTableForResize(table as HTMLTableElement);\n            else this.clearTableHandles();\n            const ph = target.closest?.('.img-ph:not(.vid-ph)') as HTMLElement | null;\n            if (ph && this.ed.contains(ph) && !this.options.readonly) {\n                e.preventDefault();\n                this.ed.focus();\n                this.selectImgPlaceholder(ph);\n            } else {\n                this.clearImgPlaceholderSel();\n            }\n            const vph = target.closest?.('.vid-ph') as HTMLElement | null;\n            if (vph && this.ed.contains(vph) && !this.options.readonly) {\n                e.preventDefault();\n                this.ed.focus();\n                this.selectVphPlaceholder(vph);\n            } else {\n                this.clearVphPlaceholderSel();\n            }\n            const tpl = target.closest?.('.tpl') as HTMLElement | null;\n            if (tpl && this.ed.contains(tpl) && !this.options.readonly) this.selectTemplate(tpl);\n            else this.clearTplSel();\n            const codeBlk = target.closest?.('pre.code-block') as HTMLElement | null;\n            if (codeBlk && this.ed.contains(codeBlk) && !this.options.readonly) {\n                e.preventDefault();\n                this.selectCodeEl(codeBlk);\n            } else {\n                this.clearCodeSel();\n            }\n            const img = target.closest?.('img') as HTMLImageElement | null;\n            if (img && this.ed.contains(img) && !this.options.readonly) {\n                e.preventDefault();\n                this.selectImage(img);\n            } else {\n                this.clearImageHandles();\n            }\n            const vid = target.closest?.('video, .video-embed') as HTMLElement | null;\n            if (vid && this.ed.contains(vid) && !this.options.readonly) {\n                e.preventDefault();\n                this.selectVideo(vid);\n            } else {\n                this.clearVidHandles();\n            }\n        });\n        this.on(this.ed, 'mouseover', (e: MouseEvent) => {\n            if (this.options.readonly) return;\n            const img = (e.target as HTMLElement).closest?.('img') as HTMLImageElement | null;\n            if (img && this.ed.contains(img)) {\n                this.cancelImgHide();\n                this.selectImage(img);\n            }\n        });\n        this.on(this.ed, 'mouseout', (e: MouseEvent) => {\n            const img = (e.target as HTMLElement).closest?.('img');\n            if (!img) return;\n            const to = e.relatedTarget as Node | null;\n            if (\n                to &&\n                (this.imgCtx?.contains(to) ||\n                    this.imgHandles.some((h) => h.contains(to)) ||\n                    (to as HTMLElement).closest?.('img') === img)\n            )\n                return;\n            this.scheduleImgHide();\n        });\n        this.on(this.ed, 'scroll', () => {\n            this.positionTableHandles();\n            this.positionImageHandles();\n            this.positionImgPhCtx();\n            this.positionTplCtx();\n            this.positionVphCtx();\n            this.positionVidCtx();\n            this.positionCodeCtx();\n        });\n        this.onWin(\n            'scroll',\n            (e) => {\n                /* this fires for ANY scroll in the document (capture:true is what\n                   lets it catch a scrollable ancestor, not just the window) -\n                   including the popup's own overflow:auto scrolling through a long\n                   menu. Only close it for a scroll that happened outside the open\n                   menu/flyouts; otherwise scrolling a long dropdown would close it\n                   on the very first scroll tick instead of scrolling its content. */\n                const t = e.target;\n                const withinOpenMenu = t instanceof Node && ((this.openPop?.contains(t) ?? false) || this.subContains(t));\n                if (!withinOpenMenu) this.closePop();\n                this.positionTableHandles();\n                this.positionImageHandles();\n                this.positionImgPhCtx();\n                this.positionTplCtx();\n                this.positionVphCtx();\n                this.positionVidCtx();\n                this.positionCodeCtx();\n                this.repositionSelToolbar();\n            },\n            true\n        );\n        this.onWin('resize', () => {\n            this.positionTableHandles();\n            this.positionImageHandles();\n            this.positionImgPhCtx();\n            this.positionTplCtx();\n            this.positionVphCtx();\n            this.positionVidCtx();\n            this.positionCodeCtx();\n            this.repositionSelToolbar();\n            this.updateToolbarOverflow();\n        });\n        /* container-driven, not just viewport-driven: an editor inside a resizable\n           panel collapses/expands its toolbar as its own width changes */\n        if (typeof ResizeObserver !== 'undefined') {\n            const ro = new ResizeObserver(() => this.updateToolbarOverflow());\n            ro.observe(this.shell);\n            this.listeners.push(() => ro.disconnect());\n        }\n\n        this.on(this.imgInput, 'change', () => {\n            const file = this.imgInput.files?.[0];\n            if (!file) return;\n            const ph = this.phUploadTarget;\n            this.phUploadTarget = null;\n            if (ph && this.ed.contains(ph)) {\n                this.readImageFileInto(file, ph);\n                return;\n            }\n            const fr = new FileReader();\n            fr.onload = () => {\n                this.restoreSel();\n                document.execCommand(\n                    'insertHTML',\n                    false,\n                    `<img src=\"${fr.result}\" title=\"${file.name.replace(/\"/g, '')}\" alt=\"\">`\n                );\n                this.onChange();\n            };\n            fr.readAsDataURL(file);\n        });\n\n        this.on(this.vidInput, 'change', () => {\n            const file = this.vidInput.files?.[0];\n            if (!file) return;\n            const vph = this.vphUploadTarget;\n            this.vphUploadTarget = null;\n            if (vph && this.ed.contains(vph)) {\n                this.readVideoFileInto(file, vph);\n                return;\n            }\n            const fr = new FileReader();\n            fr.onload = () => {\n                this.restoreSel();\n                document.execCommand(\n                    'insertHTML',\n                    false,\n                    `<video controls src=\"${fr.result}\" title=\"${file.name.replace(/\"/g, '')}\"></video>`\n                );\n                this.onChange();\n            };\n            fr.readAsDataURL(file);\n        });\n\n        this.on(this.docInput, 'change', () => {\n            const file = this.docInput.files?.[0];\n            if (!file) return;\n            this.importWordFile(file).catch(() => alert(this.t('importfail')));\n        });\n\n        this.onDoc('mousedown', (e) => {\n            if (\n                this.ed.contains(e.target as Node) ||\n                e.target === this.tblCorner ||\n                this.tblColBars.includes(e.target as HTMLElement) ||\n                (this.tblCtx && this.tblCtx.contains(e.target as Node)) ||\n                this.imgHandles.includes(e.target as HTMLElement) ||\n                (this.imgCtx && this.imgCtx.contains(e.target as Node)) ||\n                (this.phCtx && this.phCtx.contains(e.target as Node)) ||\n                (this.tplCtx && this.tplCtx.contains(e.target as Node)) ||\n                (this.selCtx && this.selCtx.contains(e.target as Node)) ||\n                (this.vphCtx && this.vphCtx.contains(e.target as Node)) ||\n                (this.vidCtx && this.vidCtx.contains(e.target as Node)) ||\n                (this.codeCtx && this.codeCtx.contains(e.target as Node)) ||\n                (this.openPop && this.openPop.contains(e.target as Node)) ||\n                this.subContains(e.target as Node)\n            )\n                return;\n            this.clearTableHandles();\n            this.clearImageHandles();\n            this.clearImgPlaceholderSel();\n            this.clearTplSel();\n            this.clearVphPlaceholderSel();\n            this.clearVidHandles();\n            this.clearCodeSel();\n            this.clearSelToolbar();\n        });\n    }\n\n    private on<K extends keyof HTMLElementEventMap>(\n        target: EventTarget,\n        event: K,\n        handler: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any\n    ): void {\n        target.addEventListener(event, handler as EventListener);\n        this.listeners.push(() => target.removeEventListener(event, handler as EventListener));\n    }\n\n    private onDoc<K extends keyof DocumentEventMap>(event: K, handler: (this: Document, ev: DocumentEventMap[K]) => any): void {\n        document.addEventListener(event, handler as EventListener);\n        this.listeners.push(() => document.removeEventListener(event, handler as EventListener));\n    }\n\n    private onWin<K extends keyof WindowEventMap>(\n        event: K,\n        handler: (this: Window, ev: WindowEventMap[K]) => any,\n        capture?: boolean\n    ): void {\n        window.addEventListener(event, handler as EventListener, capture);\n        this.listeners.push(() => window.removeEventListener(event, handler as EventListener, capture));\n    }\n\n    /* ---------------------------------------------------------- public API */\n    getContent(): string {\n        return this.ed.innerHTML;\n    }\n\n    /** Same HTML as getContent(), wrapped so its RTL/LTR direction survives being\n     *  dropped into a fixed-alignment host (e.g. an email template's\n     *  `<td align=\"left\">`), which otherwise forces left alignment onto any\n     *  descendant that has no `text-align` of its own — even one with its own\n     *  dir=\"rtl\". Elements that already carry their own dir (preserved as-is by\n     *  the paste engine) each get their own matching text-align only if they\n     *  don't already have one. Blocks with no reliable explicit dir (missing, or\n     *  dir=\"auto\" from plain-text paste) get their direction from a first-strong-\n     *  character scan of their own text instead of silently inheriting the\n     *  editor's configured UI language — mixed-direction content and any\n     *  alignment the user explicitly set are left untouched either way. Only\n     *  content with no strongly-directional character anywhere falls back to the\n     *  editor's current direction. */\n    getContentForEmail(): string {\n        const setStyle = (el: Element, decl: string): void => {\n            const cur = (el.getAttribute('style') || '').trim();\n            el.setAttribute('style', cur ? cur.replace(/;?$/, '; ') + decl : decl);\n        };\n        const box = document.createElement('div');\n        box.innerHTML = this.ed.innerHTML;\n        let found: 'rtl' | 'ltr' | null = null;\n\n        box.querySelectorAll<HTMLElement>('[dir]').forEach((el) => {\n            const raw = (el.getAttribute('dir') || '').toLowerCase();\n            if (raw !== 'rtl' && raw !== 'ltr') return;\n            const d = raw as 'rtl' | 'ltr';\n            if (!found) found = d;\n            if (!/text-align\\s*:/i.test(el.getAttribute('style') || '')) setStyle(el, `text-align:${d === 'rtl' ? 'right' : 'left'}`);\n        });\n\n        box.querySelectorAll<HTMLElement>(EMAIL_BLOCK_SELECTOR).forEach((el) => {\n            const raw = (el.getAttribute('dir') || '').toLowerCase();\n            if (raw === 'rtl' || raw === 'ltr') return;\n            const d = firstStrongDir(ownText(el));\n            if (!d) return;\n            if (!found) found = d;\n            el.setAttribute('dir', d);\n            const hasAlign = /text-align\\s*:/i.test(el.getAttribute('style') || '');\n            setStyle(el, hasAlign ? `direction:${d}` : `direction:${d};text-align:${d === 'rtl' ? 'right' : 'left'}`);\n        });\n\n        const dir: 'rtl' | 'ltr' = found || (this.ed.getAttribute('dir') as 'rtl' | 'ltr' | null) || this.dir();\n        box.querySelectorAll('table:not([dir])').forEach((tbl) => {\n            tbl.setAttribute('dir', dir);\n            if (!/direction\\s*:/i.test(tbl.getAttribute('style') || '')) setStyle(tbl, `direction:${dir}`);\n        });\n        const align = dir === 'rtl' ? 'right' : 'left';\n        return `<div dir=\"${dir}\" style=\"direction:${dir};text-align:${align}\">${box.innerHTML}</div>`;\n    }\n\n    setContent(html: string): void {\n        this.ed.innerHTML = html || '<p><br></p>';\n        this.refreshState();\n        this.clearTableHandles();\n        this.clearImageHandles();\n        this.clearImgPlaceholderSel();\n        this.clearTplSel();\n        this.clearVphPlaceholderSel();\n        this.clearVidHandles();\n        this.clearCodeSel();\n        this.clearSelToolbar();\n        this.onChange();\n    }\n\n    insertContent(html: string): void {\n        this.restoreSel();\n        document.execCommand('insertHTML', false, html);\n        this.saveSel();\n        this.refreshState();\n        this.onChange();\n    }\n\n    setLanguage(lang: EditorLanguage): void {\n        this.lang = lang;\n        this.initUI();\n    }\n\n    focus(): void {\n        this.ed.focus();\n    }\n\n    async importWordFile(file: File | Blob): Promise<void> {\n        const html = await importDocxToHtml(file);\n        this.recordRevision();\n        this.setContent(html);\n        this.recordRevision();\n    }\n\n    restoreDraft(): boolean {\n        let raw: string | null = null;\n        try {\n            raw = localStorage.getItem(this.draftStorageKey);\n        } catch {\n            /* storage unavailable */\n        }\n        if (!raw) return false;\n        try {\n            const draft = JSON.parse(raw) as { time: number; html: string };\n            if (!draft.html) return false;\n            this.recordRevision();\n            this.setContent(draft.html);\n            return true;\n        } catch {\n            return false;\n        }\n    }\n\n    getRevisions(): Array<{ time: number; html: string }> {\n        return this.revisions.slice();\n    }\n\n    destroy(): void {\n        if (this.isDestroyed) return;\n        this.isDestroyed = true;\n        if (this.revTimer != null) window.clearTimeout(this.revTimer);\n        if (this.draftTimer != null) window.clearTimeout(this.draftTimer);\n        this.closePop();\n        this.closeDlg();\n        this.clearTableHandles();\n        this.clearImageHandles();\n        this.clearImgPlaceholderSel();\n        this.clearTplSel();\n        this.clearVphPlaceholderSel();\n        this.clearVidHandles();\n        this.clearCodeSel();\n        this.clearSelToolbar();\n        this.listeners.forEach((fn) => fn());\n        this.listeners = [];\n        if (this.shell && this.shell.parentNode) this.shell.parentNode.removeChild(this.shell);\n        if (this.imgInput && this.imgInput.parentNode) this.imgInput.parentNode.removeChild(this.imgInput);\n        if (this.vidInput && this.vidInput.parentNode) this.vidInput.parentNode.removeChild(this.vidInput);\n        if (this.docInput && this.docInput.parentNode) this.docInput.parentNode.removeChild(this.docInput);\n        this.contentStyleEl = null;\n    }\n\n    /* ---------------------------------------------------------- selection */\n    private saveSel(): void {\n        const s = window.getSelection();\n        if (s && s.rangeCount && this.ed.contains(s.anchorNode)) this.savedRange = s.getRangeAt(0).cloneRange();\n    }\n\n    private restoreSel(): void {\n        if (!this.savedRange) {\n            this.ed.focus();\n            return;\n        }\n        this.ed.focus();\n        const s = window.getSelection();\n        if (!s) return;\n        s.removeAllRanges();\n        s.addRange(this.savedRange);\n    }\n\n    private exec(cmd: string, val?: string): void {\n        this.restoreSel();\n        document.execCommand('styleWithCSS', false, cmd !== 'fontSize' ? 'true' : 'false');\n        document.execCommand(cmd, false, val ?? (undefined as any));\n        this.saveSel();\n        this.refreshState();\n        this.onChange();\n    }\n\n    private closestBlock(node: Node | null): HTMLElement | null {\n        while (node && node !== this.ed) {\n            if ((node as HTMLElement).nodeType === 1 && /^(P|DIV|H[1-6]|LI|PRE|BLOCKQUOTE|TD|TH)$/i.test((node as HTMLElement).tagName)) {\n                return node as HTMLElement;\n            }\n            node = (node as ChildNode).parentNode;\n        }\n        return null;\n    }\n\n    /** Enter on an empty last line inside a blockquote exits it into a plain paragraph, mirroring how lists exit on an empty item. */\n    private tryExitBlockquote(e: KeyboardEvent): void {\n        const s = window.getSelection();\n        if (!s || !s.isCollapsed || !s.anchorNode || !this.ed.contains(s.anchorNode)) return;\n        const block = this.closestBlock(s.anchorNode);\n        if (!block || block.tagName === 'BLOCKQUOTE' || (block.textContent || '').trim() !== '') return;\n        const bq = block.closest('blockquote');\n        if (!bq || !this.ed.contains(bq) || block !== bq.lastElementChild) return;\n        e.preventDefault();\n        const p = document.createElement('p');\n        p.appendChild(document.createElement('br'));\n        bq.after(p);\n        block.remove();\n        if (!bq.firstElementChild) bq.remove();\n        const r = document.createRange();\n        r.setStart(p, 0);\n        r.collapse(true);\n        s.removeAllRanges();\n        s.addRange(r);\n        this.saveSel();\n        this.onChange();\n    }\n\n    private selectedBlocks(): HTMLElement[] {\n        const s = window.getSelection();\n        if (!s || !s.rangeCount || !this.ed.contains(s.anchorNode)) return [];\n        const r = s.getRangeAt(0);\n        const blocks = Array.from(this.ed.querySelectorAll('p,h1,h2,h3,h4,h5,h6,li,pre,blockquote,td,th')).filter((b) =>\n            r.intersectsNode(b)\n        );\n        if (!blocks.length) {\n            const b = this.closestBlock(s.anchorNode);\n            if (b) return [b];\n        }\n        return blocks as HTMLElement[];\n    }\n\n    private onChange(): void {\n        this.options.onChange(this.ed.innerHTML);\n        this.scheduleRevision();\n        this.scheduleDraftSave();\n    }\n\n    /* ---------------------------------------------------------- revisions / drafts */\n    private recordRevision(): void {\n        const html = this.ed.innerHTML;\n        const last = this.revisions[this.revisions.length - 1];\n        if (last && last.html === html) return;\n        this.revisions.push({ time: Date.now(), html });\n        if (this.revisions.length > 30) this.revisions.shift();\n    }\n\n    private scheduleRevision(): void {\n        if (this.revTimer != null) window.clearTimeout(this.revTimer);\n        this.revTimer = window.setTimeout(() => {\n            this.revTimer = null;\n            this.recordRevision();\n        }, 1500);\n    }\n\n    private scheduleDraftSave(): void {\n        if (this.draftTimer != null) window.clearTimeout(this.draftTimer);\n        this.draftTimer = window.setTimeout(() => {\n            this.draftTimer = null;\n            try {\n                localStorage.setItem(this.draftStorageKey, JSON.stringify({ time: Date.now(), html: this.ed.innerHTML }));\n            } catch {\n                /* storage unavailable or full */\n            }\n        }, 800);\n    }\n\n    private revisionDlg(): void {\n        this.recordRevision();\n        this.dialog(this.t('revhistory'), (body) => {\n            if (!this.revisions.length) {\n                body.innerHTML = `<p style=\"color:#556\">${this.t('revempty')}</p>`;\n                return;\n            }\n            const wrap = document.createElement('div');\n            wrap.className = 'revwrap';\n            const list = document.createElement('div');\n            list.className = 'revlist';\n            const prev = document.createElement('div');\n            prev.className = 'revprev';\n            const restoreBtn = document.createElement('button');\n            restoreBtn.type = 'button';\n            restoreBtn.className = 'revrestore';\n            restoreBtn.textContent = this.t('restore');\n            let selected = this.revisions.length - 1;\n            const fmt = new Intl.DateTimeFormat(this.lang === 'ar' ? 'ar-AE' : 'en-GB', {\n                year: 'numeric',\n                month: 'short',\n                day: 'numeric',\n                hour: '2-digit',\n                minute: '2-digit',\n                second: '2-digit'\n            });\n            const items: Record<number, HTMLButtonElement> = {};\n            const show = (i: number) => {\n                selected = i;\n                this.revisions.forEach((_, j) => items[j]?.classList.toggle('on', j === i));\n                prev.innerHTML = this.revisions[i].html;\n                restoreBtn.disabled = i === this.revisions.length - 1;\n            };\n            for (let i = this.revisions.length - 1; i >= 0; i--) {\n                const rev = this.revisions[i];\n                const b = document.createElement('button');\n                b.type = 'button';\n                const words = (new DOMParser().parseFromString(rev.html, 'text/html').body.textContent || '').trim();\n                const wc = words ? words.split(/\\s+/).length : 0;\n                const isCurrent = i === this.revisions.length - 1;\n                b.innerHTML = `<span>${isCurrent ? this.t('currentver') : fmt.format(new Date(rev.time))}</span><span class=\"wc\">${wc} ${this.t('words')}</span>`;\n                b.addEventListener('click', () => show(i));\n                items[i] = b;\n                list.appendChild(b);\n            }\n            list.append(restoreBtn);\n            restoreBtn.addEventListener('click', () => {\n                const rev = this.revisions[selected];\n                if (!rev) return;\n                this.recordRevision();\n                this.setContent(rev.html);\n                this.recordRevision();\n                this.closeDlg();\n            });\n            wrap.append(list, prev);\n            body.appendChild(wrap);\n            show(selected);\n        });\n    }\n\n    /* ---------------------------------------------------------- popups / menus */\n    private closeSub(): void {\n        this.closeSubFrom(0);\n    }\n\n    /** Removes stacked flyouts from `level` (0 = shallowest) onward, keeping\n     *  anything shallower - e.g. hovering a sibling item inside the \"Cell\"\n     *  flyout should drop a deeper \"Cell background\" flyout but keep \"Cell\"\n     *  itself and the top-level popup it bridges to. */\n    private closeSubFrom(level: number): void {\n        while (this.subStack.length > level) this.subStack.pop()!.remove();\n    }\n\n    /** True if `node` is inside any currently-open flyout submenu (any depth). */\n    private subContains(node: Node): boolean {\n        return this.subStack.some((el) => el.contains(node));\n    }\n\n    /** 0 for the top-level popup itself; otherwise this container's depth in\n     *  the flyout stack + 1. Used to know how many deeper flyouts to close\n     *  when opening or hovering within `container`. */\n    private subLevelOf(container: HTMLElement): number {\n        if (container === this.openPop) return 0;\n        const idx = this.subStack.indexOf(container);\n        return idx === -1 ? this.subStack.length : idx + 1;\n    }\n\n    private closePop(): void {\n        this.closeSub();\n        if (this.openPop) {\n            this.openPop.remove();\n            this.openPop = null;\n            this.popAnchor?.classList.remove('open');\n            this.popAnchor = null;\n            /* a menu item's mouseleave never fires once the menu is removed,\n               so drop any row/column highlight it left behind */\n            this.setOpTarget(null);\n        }\n    }\n\n    private openSubFor(item: MenuItemDef, anchor: HTMLElement): void {\n        /* captured before truncating the stack - for a flyout nested inside\n           another flyout (e.g. Table > Cell > Cell background), anchor is itself\n           a descendant of the currently-open sub-popup; measuring after removing\n           it would read a detached, zeroed-out rect and land the new flyout at\n           the top-left corner of the screen */\n        const r = anchor.getBoundingClientRect();\n        /* only close flyouts deeper than the one anchor lives in - closing\n           everything (the old behavior) would also remove that same containing\n           flyout, leaving a visual gap back to the top-level popup */\n        const parentPop = anchor.closest('.pop') as HTMLElement | null;\n        this.closeSubFrom(parentPop ? this.subLevelOf(parentPop) : 0);\n        const sub = document.createElement('div');\n        sub.className = 'pop sub';\n        sub.dir = this.dir();\n        if (item.subBuild) item.subBuild(sub);\n        else if (item.sub) this.menuItems(sub, item.sub);\n        sub.addEventListener('mousedown', (e) => {\n            if ((e.target as HTMLElement).tagName !== 'INPUT') e.preventDefault();\n        });\n        document.body.appendChild(sub);\n        const isRtl = this.dir() === 'rtl';\n        // overlap the parent item slightly so the pointer can travel into the flyout\n        let x = isRtl ? r.left - sub.offsetWidth + 2 : r.right - 2;\n        x = Math.max(8, Math.min(x + scrollX, scrollX + innerWidth - sub.offsetWidth - 8));\n        let y = r.top + scrollY - 6;\n        y = Math.max(8 + scrollY, Math.min(y, scrollY + innerHeight - sub.offsetHeight - 8));\n        sub.style.left = x + 'px';\n        sub.style.top = y + 'px';\n        this.subStack.push(sub);\n    }\n\n    private popup(anchor: HTMLElement, build: (el: HTMLElement) => void, cls?: string): void {\n        if (this.openPop && this.popAnchor === anchor) {\n            this.closePop();\n            return;\n        }\n        this.closePop();\n        const el = document.createElement('div');\n        el.className = 'pop' + (cls ? ' ' + cls : '');\n        el.dir = this.dir();\n        build(el);\n        document.body.appendChild(el);\n        const r = anchor.getBoundingClientRect();\n        // align the menu with its control: at least as wide as the anchor\n        el.style.minWidth = Math.max(160, Math.round(r.width)) + 'px';\n        // clamp so a long menu (its own max-height/overflow makes it scrollable)\n        // stays fully on-screen instead of running off the bottom of the viewport\n        let y = r.bottom + scrollY + 2;\n        y = Math.max(8 + scrollY, Math.min(y, scrollY + innerHeight - el.offsetHeight - 8));\n        el.style.top = y + 'px';\n        const isRtl = this.dir() === 'rtl';\n        let x = isRtl ? r.right - el.offsetWidth : r.left;\n        x = Math.max(8, Math.min(x + scrollX, scrollX + innerWidth - el.offsetWidth - 8));\n        el.style.left = x + 'px';\n        el.addEventListener('mousedown', (e) => {\n            if ((e.target as HTMLElement).tagName !== 'INPUT') e.preventDefault();\n        });\n        this.openPop = el;\n        this.popAnchor = anchor;\n        anchor.classList.add('open');\n    }\n\n    private menuItems(el: HTMLElement, items: (MenuItemDef | '|')[]): void {\n        items.forEach((it) => {\n            if (it === '|') {\n                el.insertAdjacentHTML('beforeend', '<div class=\"sep\"></div>');\n                return;\n            }\n            const hasSub = !!(it.sub || it.subBuild);\n            const b = document.createElement('button');\n            b.className = 'mi' + (it.on ? ' on' : '');\n            b.innerHTML = `<span class=\"ic\">${it.icon || ''}</span><span class=\"prev\" ${it.previewStyle ? `style=\"${it.previewStyle}\"` : ''\n                }>${it.label}</span>${it.shortcut ? `<span class=\"sc\">${it.shortcut}</span>` : ''}${hasSub ? `<span class=\"subarrow\">${IC.chev}</span>` : ''\n                }`;\n            b.addEventListener('click', () => {\n                if (!it.action) return;\n                this.closePop();\n                it.action();\n            });\n            b.addEventListener('mouseenter', () => {\n                if (hasSub) this.openSubFor(it, b);\n                /* hovering a no-submenu item drops whatever deeper flyout was open\n                   from a previously-hovered sibling, but keeps el itself and any\n                   shallower ancestors intact */\n                else this.closeSubFrom(this.subLevelOf(el));\n                it.hover?.(true);\n            });\n            b.addEventListener('mouseleave', () => it.hover?.(false));\n            el.appendChild(b);\n        });\n    }\n\n    /* ---------------------------------------------------------- toolbar builders */\n    private tbtn(icon: string, tip: string, fn: (e?: Event) => void, id?: string): HTMLButtonElement {\n        const b = document.createElement('button');\n        b.className = 'tbtn';\n        b.type = 'button';\n        b.title = tip;\n        b.innerHTML = icon;\n        if (id) b.dataset.id = id;\n        b.addEventListener('mousedown', (e) => e.preventDefault());\n        b.addEventListener('click', fn as EventListener);\n        return b;\n    }\n\n    /** Font-size increase / decrease step button. */\n    private stepBtn(delta: number): HTMLButtonElement {\n        const sign = delta > 0 ? '+' : '−';\n        const icon = delta > 0 ? IC.fontsizeup : IC.fontsizedown;\n        const b = this.tbtn(icon, this.t('fontsize') + ' ' + sign, () => this.stepFontSize(delta));\n        b.addEventListener('mousedown', () => this.saveSel());\n        return b;\n    }\n\n    /** Toolbar icon button that opens a popup menu anchored to itself. */\n    private menuTbtn(icon: string, tip: string, menuFn: (b: HTMLButtonElement) => void, id?: string): HTMLButtonElement {\n        const b = this.tbtn(icon, tip, () => menuFn(b), id);\n        b.classList.add('hasmenu');\n        b.insertAdjacentHTML('beforeend', IC.chev);\n        b.addEventListener('mousedown', () => this.saveSel());\n        return b;\n    }\n\n    /** Quick text-color chips plus a \"more\" chip that opens the full palette. */\n    private colorChips(): HTMLElement[] {\n        const chip = (title: string): HTMLButtonElement => {\n            const b = document.createElement('button');\n            b.type = 'button';\n            b.className = 'cchip';\n            b.title = title;\n            b.addEventListener('mousedown', (e) => {\n                e.preventDefault();\n                this.saveSel();\n            });\n            return b;\n        };\n        const chips = QUICK_COLORS.map((c) => {\n            const b = chip(this.t('forecolor'));\n            b.style.background = c;\n            b.addEventListener('click', () => this.applyColor('fore', c));\n            return b;\n        });\n        const more = chip(this.t('forecolor'));\n        more.classList.add('more');\n        more.dataset.cb = 'fore';\n        more.innerHTML = IC.chev;\n        more.addEventListener('click', () => this.colorMenu(more, 'fore'));\n        return [...chips, more];\n    }\n\n    private group(...els: HTMLElement[]): HTMLElement {\n        const g = document.createElement('div');\n        g.className = 'tgrp';\n        els.forEach((e) => {\n            e.classList.add('gbtn');\n            g.appendChild(e);\n        });\n        return g;\n    }\n\n    private tsel(cls: string, id: string, defLabel: string, menuFn: (b: HTMLButtonElement) => void): HTMLButtonElement {\n        const b = document.createElement('button');\n        b.className = 'tsel ' + cls;\n        b.type = 'button';\n        b.dataset.id = id;\n        b.innerHTML = `<span class=\"lbl empty\">${defLabel || ''}</span>${IC.chev}`;\n        b.addEventListener('mousedown', (e) => {\n            e.preventDefault();\n            this.saveSel();\n        });\n        b.addEventListener('click', () => menuFn(b));\n        return b;\n    }\n\n    private setListStyle(kind: 'ol' | 'ul', style: string): void {\n        this.restoreSel();\n        const s = window.getSelection();\n        if (!s) return;\n        let list = this.closestBlock(s.anchorNode)?.closest(kind);\n        if (!list) {\n            this.exec(kind === 'ol' ? 'insertOrderedList' : 'insertUnorderedList');\n            list = this.closestBlock(s.anchorNode)?.closest(kind);\n        }\n        if (list) (list as HTMLElement).style.listStyleType = style;\n        this.saveSel();\n        this.onChange();\n    }\n\n    private listMenu(anchor: HTMLButtonElement, kind: 'ul' | 'ol'): void {\n        const cmd = kind === 'ol' ? 'insertOrderedList' : 'insertUnorderedList';\n        // the toggle item creates the default style, so it is not repeated below\n        const styles: [string, string][] =\n            kind === 'ol'\n                ? [\n                    ['lower-alpha', IC.ol_alpha],\n                    ['lower-roman', IC.ol_roman],\n                    ['upper-alpha', IC.ol_alphau],\n                    ['upper-roman', IC.ol_romanu]\n                ]\n                : [\n                    ['circle', IC.ul_circle],\n                    ['square', IC.ul_square]\n                ];\n        const labels = this.tArr(kind === 'ol' ? 'liststyles_ol' : 'liststyles_ul').slice(1);\n        const sel = window.getSelection();\n        const listEl = sel ? (this.closestBlock(sel.anchorNode)?.closest(kind) as HTMLElement | null) : null;\n        const curStyle = listEl ? listEl.style.listStyleType : '';\n        this.popup(anchor, (el) => {\n            this.menuItems(el, [\n                {\n                    label: this.t(kind === 'ol' ? 'numlist' : 'bullist'),\n                    icon: kind === 'ol' ? IC.numlist : IC.bullist,\n                    on: document.queryCommandState(cmd),\n                    action: () => this.exec(cmd)\n                }\n            ]);\n            el.insertAdjacentHTML('beforeend', '<div class=\"sep\"></div>');\n            const grid = document.createElement('div');\n            grid.className = 'mi-grid';\n            styles.forEach(([s, icon], i) => {\n                const b = document.createElement('button');\n                b.className = 'mi' + (curStyle === s ? ' on' : '');\n                b.innerHTML = `<span class=\"ic\">${icon}</span><span class=\"prev\">${labels[i]}</span>`;\n                b.addEventListener('click', () => {\n                    this.closePop();\n                    this.setListStyle(kind, s);\n                });\n                grid.appendChild(b);\n            });\n            el.appendChild(grid);\n        });\n    }\n\n    /** Shared color-picker popup body — swatch grid plus the current-color /\n     *  no-color / custom-picker footer — so the fore/back toolbar menus and the\n     *  table cell-background menu all show the identical popup. */\n    private buildPaletteInto(el: HTMLElement, curColor: string, apply: (c: string | null) => void): void {\n        const grid = document.createElement('div');\n        grid.className = 'cpal';\n        COLORS.forEach((c) => {\n            const b = document.createElement('button');\n            b.type = 'button';\n            b.style.background = c;\n            b.title = c;\n            b.addEventListener('click', () => {\n                this.closePop();\n                apply(c);\n            });\n            grid.appendChild(b);\n        });\n        el.appendChild(grid);\n        el.insertAdjacentHTML('beforeend', '<div class=\"sep\"></div>');\n        const foot = document.createElement('div');\n        foot.className = 'cfoot';\n        const hex = /^#[0-9a-f]{6}$/i.test(curColor) ? curColor : '#000000';\n        const cur = document.createElement('div');\n        cur.className = 'cswatch cur';\n        cur.title = this.t('currentcolor');\n        cur.style.background = hex;\n        cur.innerHTML = IC.check;\n        const nocolor = document.createElement('button');\n        nocolor.type = 'button';\n        nocolor.className = 'cswatch nocolor';\n        nocolor.title = this.t('removecolor');\n        nocolor.addEventListener('click', () => {\n            this.closePop();\n            apply(null);\n        });\n        const wheel = document.createElement('label');\n        wheel.className = 'cswatch cwheel';\n        wheel.title = this.t('customcolor');\n        wheel.innerHTML = IC.palette;\n        const picker = document.createElement('input');\n        picker.type = 'color';\n        picker.value = hex;\n        picker.addEventListener('change', () => {\n            this.closePop();\n            apply(picker.value);\n        });\n        wheel.appendChild(picker);\n        foot.append(cur, nocolor, wheel);\n        el.appendChild(foot);\n    }\n\n    private colorMenu(anchor: HTMLButtonElement, kind: 'fore' | 'back'): void {\n        this.popup(\n            anchor,\n            (el) => {\n                const curColor = kind === 'fore' ? this.foreColor : this.backColor;\n                this.buildPaletteInto(el, curColor, (c) => this.applyColor(kind, c));\n            },\n            kind === 'fore' ? 'pop-forecolor' : 'pop-backcolor'\n        );\n    }\n\n    private applyColor(kind: 'fore' | 'back', c: string | null): void {\n        if (kind === 'fore') {\n            this.foreColor = c || '#000000';\n            this.exec('foreColor', c || '#000000');\n        } else {\n            this.backColor = c || 'transparent';\n            this.exec('hiliteColor', c || 'transparent');\n        }\n        this.syncColorSwatches(this.toolbar);\n        if (this.selCtx) this.syncColorSwatches(this.selCtx);\n    }\n\n    private syncColorSwatches(container: HTMLElement): void {\n        container.querySelectorAll(`[data-cb=fore]`).forEach((el) => ((el as HTMLElement).style.background = this.foreColor));\n        container.querySelectorAll(`[data-cb=back]`).forEach((el) => ((el as HTMLElement).style.background = this.backColor));\n    }\n\n    private fontItems(): MenuItemDef[] {\n        return this.options.fontFamilyFormats.map(([name, val]) => ({\n            label: name,\n            previewStyle: `font-family:${val}`,\n            on: this.currentFont() === name,\n            action: () => this.exec('fontName', val)\n        }));\n    }\n\n    private fontMenu(anchor: HTMLButtonElement): void {\n        this.popup(anchor, (el) => this.menuItems(el, this.fontItems()));\n    }\n\n    private sizeItems(): MenuItemDef[] {\n        return SIZES.map((s) => ({\n            label: s,\n            on: this.currentSize() === s,\n            action: () => this.applyFontSize(s)\n        }));\n    }\n\n    private sizeMenu(anchor: HTMLButtonElement): void {\n        this.popup(anchor, (el) => this.menuItems(el, this.sizeItems()));\n    }\n\n    /** Font sizing needs a non-collapsed range. With a bare caret, grow the\n        selection to the word under it; in an empty spot, select a zero-width\n        space so the new size applies to what gets typed next. */\n    private ensureSizeTarget(): void {\n        const s = window.getSelection();\n        if (!s) return;\n        if (!s.rangeCount) {\n            const r = document.createRange();\n            r.selectNodeContents(this.ed);\n            r.collapse(true);\n            s.addRange(r);\n        }\n        if (!s.isCollapsed) return;\n        const r = s.getRangeAt(0);\n        const node = r.startContainer;\n        if (node.nodeType === 3) {\n            const text = (node as Text).data;\n            let a = r.startOffset;\n            let b = r.startOffset;\n            while (a > 0 && /\\S/.test(text[a - 1])) a--;\n            while (b < text.length && /\\S/.test(text[b])) b++;\n            if (b > a) {\n                const nr = document.createRange();\n                nr.setStart(node, a);\n                nr.setEnd(node, b);\n                s.removeAllRanges();\n                s.addRange(nr);\n                this.savedRange = nr.cloneRange();\n                return;\n            }\n        }\n        const zw = document.createTextNode(String.fromCharCode(0x200b));\n        r.insertNode(zw);\n        const nr = document.createRange();\n        nr.setStart(zw, 0);\n        nr.setEnd(zw, 1);\n        s.removeAllRanges();\n        s.addRange(nr);\n        this.savedRange = nr.cloneRange();\n    }\n\n    private applyFontSize(px: string): void {\n        this.restoreSel();\n        this.ensureSizeTarget();\n        document.execCommand('styleWithCSS', false, 'false');\n        document.execCommand('fontSize', false, '7');\n        const spans: HTMLSpanElement[] = [];\n        this.ed.querySelectorAll('font[size=\"7\"]').forEach((f) => {\n            const span = document.createElement('span');\n            span.style.fontSize = px;\n            while (f.firstChild) span.appendChild(f.firstChild);\n            f.replaceWith(span);\n            spans.push(span);\n        });\n        if (spans.length) {\n            // keep the selection anchored inside the new spans so the current\n            // size reads back correctly (e.g. for repeated +/- stepping)\n            const r = document.createRange();\n            r.setStart(spans[0], 0);\n            r.setEnd(spans[spans.length - 1], spans[spans.length - 1].childNodes.length);\n            const s = window.getSelection();\n            if (s) {\n                s.removeAllRanges();\n                s.addRange(r);\n            }\n        }\n        this.saveSel();\n        this.refreshState();\n        this.onChange();\n    }\n\n    private stepFontSize(delta: number): void {\n        const cur = parseInt(this.currentSize(), 10) || 14;\n        const next = Math.min(MAX_FONT_PX, Math.max(MIN_FONT_PX, cur + delta));\n        if (next === cur) return;\n        this.applyFontSize(next + 'px');\n    }\n\n    /* ------------------------------------------------ case / spacing / link */\n    private transformCase(kind: 'lower' | 'upper' | 'capitalize'): void {\n        this.restoreSel();\n        const s = window.getSelection();\n        if (!s || !s.rangeCount || s.isCollapsed) return;\n        const range = s.getRangeAt(0);\n        const walker = document.createTreeWalker(this.ed, NodeFilter.SHOW_TEXT);\n        const nodes: Text[] = [];\n        let n: Node | null;\n        while ((n = walker.nextNode())) if (range.intersectsNode(n)) nodes.push(n as Text);\n        nodes.forEach((t) => {\n            const start = t === range.startContainer ? range.startOffset : 0;\n            const end = t === range.endContainer ? range.endOffset : t.data.length;\n            if (end <= start) return;\n            const mid = t.data.slice(start, end);\n            let out = mid;\n            if (kind === 'lower') out = mid.toLowerCase();\n            else if (kind === 'upper') out = mid.toUpperCase();\n            else out = mid.replace(/(^|\\s)(\\S)/g, (m, sp, ch) => sp + ch.toUpperCase());\n            t.replaceData(start, end - start, out);\n        });\n        this.saveSel();\n        this.refreshState();\n        this.onChange();\n    }\n\n    private caseItems(): MenuItemDef[] {\n        return [\n            { label: this.t('lowercase'), icon: IC.lowercaseic, action: () => this.transformCase('lower') },\n            { label: this.t('uppercase'), icon: IC.uppercaseic, action: () => this.transformCase('upper') },\n            { label: this.t('capitalize'), icon: IC.capitalizeic, action: () => this.transformCase('capitalize') }\n        ];\n    }\n\n    private caseMenu(anchor: HTMLButtonElement): void {\n        this.popup(anchor, (el) => this.menuItems(el, this.caseItems()));\n    }\n\n    private applyBlockStyle(prop: 'lineHeight' | 'wordSpacing' | 'letterSpacing', value: string): void {\n        this.restoreSel();\n        const blocks = this.selectedBlocks();\n        const cssProp = prop === 'lineHeight' ? 'line-height' : prop === 'wordSpacing' ? 'word-spacing' : 'letter-spacing';\n        blocks.forEach((b) => {\n            if (value) b.style[prop] = value;\n            else b.style.removeProperty(cssProp);\n        });\n        this.saveSel();\n        this.onChange();\n    }\n\n    private currentBlockStyle(prop: 'lineHeight' | 'wordSpacing' | 'letterSpacing'): string {\n        const s = window.getSelection();\n        const b = s ? this.closestBlock(s.anchorNode) : null;\n        return b ? b.style[prop] || '' : '';\n    }\n\n    private blockStyleItems(prop: 'lineHeight' | 'wordSpacing' | 'letterSpacing', values: string[]): MenuItemDef[] {\n        const cur = this.currentBlockStyle(prop);\n        return [\n            { label: this.t('normal'), on: !cur, action: () => this.applyBlockStyle(prop, '') },\n            ...values.map((v) => ({\n                label: v,\n                on: cur === v,\n                action: () => this.applyBlockStyle(prop, v)\n            }))\n        ];\n    }\n\n    private lineHeightMenu(anchor: HTMLButtonElement): void {\n        this.popup(anchor, (el) => this.menuItems(el, this.blockStyleItems('lineHeight', LINE_HEIGHTS)));\n    }\n\n    private wordSpacingMenu(anchor: HTMLButtonElement): void {\n        this.popup(anchor, (el) => this.menuItems(el, this.blockStyleItems('wordSpacing', WORD_SPACINGS)));\n    }\n\n    private letterSpacingMenu(anchor: HTMLButtonElement): void {\n        this.popup(anchor, (el) => this.menuItems(el, this.blockStyleItems('letterSpacing', LETTER_SPACINGS)));\n    }\n\n    private closestAnchor(): HTMLAnchorElement | null {\n        const s = window.getSelection();\n        let node: Node | null = s && this.ed.contains(s.anchorNode) ? s.anchorNode : null;\n        while (node && node !== this.ed) {\n            if ((node as HTMLElement).nodeType === 1 && (node as HTMLElement).tagName === 'A') return node as HTMLAnchorElement;\n            node = node.parentNode;\n        }\n        return null;\n    }\n\n    private linkDlg(): void {\n        this.saveSel();\n        const anchorEl = this.closestAnchor();\n        let urlIn: HTMLInputElement;\n        const buttons: DialogButton[] = [];\n        if (anchorEl) {\n            buttons.push({\n                label: this.t('unlink'),\n                action: () => {\n                    const r = document.createRange();\n                    r.selectNodeContents(anchorEl);\n                    const s = window.getSelection();\n                    if (s) {\n                        s.removeAllRanges();\n                        s.addRange(r);\n                    }\n                    document.execCommand('unlink');\n                    this.closeDlg();\n                    this.onChange();\n                }\n            });\n        }\n        buttons.push(\n            { label: this.t('cancel'), action: () => this.closeDlg() },\n            {\n                label: this.t('save'),\n                primary: true,\n                action: () => {\n                    const url = urlIn.value.trim();\n                    this.closeDlg();\n                    if (!url) return;\n                    if (anchorEl) {\n                        anchorEl.setAttribute('href', url);\n                        this.onChange();\n                        return;\n                    }\n                    this.restoreSel();\n                    const s = window.getSelection();\n                    if (!s || s.isCollapsed) {\n                        document.execCommand('insertHTML', false, `<a href=\"${url.replace(/\"/g, '&quot;')}\">${url\n                            .replace(/&/g, '&amp;')\n                            .replace(/</g, '&lt;')}</a>`);\n                    } else {\n                        document.execCommand('styleWithCSS', false, 'false');\n                        document.execCommand('createLink', false, url);\n                    }\n                    this.saveSel();\n                    this.onChange();\n                }\n            }\n        );\n        this.dialog(\n            this.t('linkttl'),\n            (body) => {\n                const row = document.createElement('div');\n                row.style.cssText = 'display:flex;align-items:center;gap:10px;margin:10px 0;min-width:360px';\n                const lbl = document.createElement('span');\n                lbl.style.cssText = 'width:60px;color:#556;flex:none';\n                lbl.textContent = this.t('linkurl');\n                urlIn = document.createElement('input');\n                urlIn.type = 'url';\n                urlIn.placeholder = 'https://';\n                urlIn.style.cssText = 'flex:1;border:1px solid #cfd6df;border-radius:6px;padding:7px 9px;font:14px inherit';\n                urlIn.value = anchorEl?.getAttribute('href') || '';\n                row.append(lbl, urlIn);\n                body.appendChild(row);\n                setTimeout(() => urlIn.focus(), 0);\n            },\n            buttons\n        );\n    }\n\n    private blockItems(): MenuItemDef[] {\n        return BLOCKS.map(([tag]) => ({\n            label: this.blockLabel(tag),\n            previewStyle: tag.startsWith('h')\n                ? `font-weight:700;font-size:${22 - 2 * (+tag[1])}px`\n                : tag === 'pre'\n                    ? 'font-family:monospace'\n                    : '',\n            on: this.currentBlock() === tag,\n            action: () => this.exec('formatBlock', '<' + tag + '>')\n        }));\n    }\n\n    private blocksMenu(anchor: HTMLButtonElement): void {\n        this.popup(anchor, (el) => this.menuItems(el, this.blockItems()));\n    }\n\n    private alignItems(): MenuItemDef[] {\n        const cmds: ['justifyLeft' | 'justifyCenter' | 'justifyRight' | 'justifyFull', keyof I18nStrings, string][] = [\n            ['justifyLeft', 'alignleft', IC.alignleft],\n            ['justifyCenter', 'aligncenter', IC.aligncenter],\n            ['justifyRight', 'alignright', IC.alignright],\n            ['justifyFull', 'alignjustify', IC.alignjustify]\n        ];\n        return cmds.map(([cmd, key, icon]) => ({\n            label: this.t(key),\n            icon,\n            on: document.queryCommandState(cmd),\n            action: () => this.exec(cmd)\n        }));\n    }\n\n    private blockLabel(tag: string): string {\n        if (tag === 'p') return this.t('para');\n        if (tag === 'pre') return this.t('pre');\n        return this.t('heading') + ' ' + tag[1];\n    }\n\n    private tableGrid(anchor: HTMLElement, after?: () => void): void {\n        this.popup(anchor, (el) => this.buildTableGridInto(el, after));\n    }\n\n    private buildTableGridInto(el: HTMLElement, after?: () => void): void {\n        {\n            const wrap = document.createElement('div');\n            wrap.className = 'tgridwrap';\n            const grid = document.createElement('div');\n            grid.className = 'tgrid';\n            const lbl = document.createElement('div');\n            lbl.className = 'tgridlbl';\n            lbl.textContent = '1 × 1';\n            const cells: HTMLSpanElement[] = [];\n            for (let r = 0; r < 8; r++)\n                for (let c = 0; c < 10; c++) {\n                    const sp = document.createElement('span');\n                    sp.dataset.r = String(r);\n                    sp.dataset.c = String(c);\n                    sp.addEventListener('mouseenter', () => {\n                        cells.forEach((x) => x.classList.toggle('hot', +x.dataset.r! <= r && +x.dataset.c! <= c));\n                        lbl.textContent = c + 1 + ' × ' + (r + 1);\n                    });\n                    sp.addEventListener('click', () => {\n                        this.closePop();\n                        this.insertTable(r + 1, c + 1);\n                        after?.();\n                    });\n                    cells.push(sp);\n                    grid.appendChild(sp);\n                }\n            wrap.append(grid, lbl);\n            el.appendChild(wrap);\n        }\n    }\n\n    private insertTable(rows: number, cols: number): void {\n        this.restoreSel();\n        /* table-layout:fixed keeps the columns evenly sized while typing —\n           text wraps at the column edge instead of widening the column */\n        let html = '<table style=\"border-collapse:collapse;width:100%;table-layout:fixed\"><tbody>';\n        for (let r = 0; r < rows; r++) {\n            html += '<tr>';\n            for (let c = 0; c < cols; c++) html += '<td style=\"border:1px solid #b9c2cc\"><br></td>';\n            html += '</tr>';\n        }\n        html += '</tbody></table><p><br></p>';\n        document.execCommand('insertHTML', false, html);\n        this.saveSel();\n        this.onChange();\n    }\n\n    private setDir(dir: 'ltr' | 'rtl'): void {\n        this.restoreSel();\n        const blocks = this.selectedBlocks();\n        if (blocks.length) blocks.forEach((b) => b.setAttribute('dir', dir));\n        else this.ed.setAttribute('dir', dir);\n        this.saveSel();\n        this.refreshState();\n        this.onChange();\n    }\n\n    /** Splits a toolbar layout string into groups of item names: `|` separates visual\n     *  groups, whitespace separates items within a group. Empty groups/tokens (e.g. from\n     *  leading/trailing/doubled separators) are dropped. Pure function. */\n    private parseToolbarString(spec: string): string[][] {\n        return spec\n            .split('|')\n            .map((group) => group.trim().split(/\\s+/).filter(Boolean))\n            .filter((group) => group.length > 0);\n    }\n\n    /** Maps every supported toolbar item name to a builder for that one control. Each\n     *  entry is a direct lift of what used to be an inline call in `buildToolbar()` — no\n     *  behavior changes, just named lookup. Only `forecolor` yields multiple elements\n     *  (the quick color chips); everything else yields one. */\n    private buildToolbarRegistry(): Record<string, () => HTMLElement | HTMLElement[]> {\n        const tableBtn = this.tbtn(IC.tableic, this.t('quicktable'), () => this.tableGrid(tableBtn));\n        const registry: Record<string, () => HTMLElement | HTMLElement[]> = {\n            undo: () => this.tbtn(IC.undo, this.t('undo'), () => this.exec('undo'), 'undo'),\n            redo: () => this.tbtn(IC.redo, this.t('redo'), () => this.exec('redo'), 'redo'),\n            preview: () => this.tbtn(IC.prevw, this.t('preview'), () => this.previewDlg()),\n            print: () => this.tbtn(IC.printic, this.t('print'), () => this.printDoc()),\n            importword: () => this.tbtn(IC.wordic, this.t('importword'), () => this.pickWordDoc()),\n            revhistory: () => this.tbtn(IC.historyic, this.t('revhistory'), () => this.revisionDlg()),\n            fontfamily: () => this.tsel('w-font', 'fontsel', '', (b) => this.fontMenu(b)),\n            fontsize: () => this.tsel('w-size', 'sizesel', '', (b) => this.sizeMenu(b)),\n            fontsizeincrease: () => this.stepBtn(1),\n            fontsizedecrease: () => this.stepBtn(-1),\n            bold: () => this.tbtn(IC.bold, this.t('bold'), () => this.exec('bold'), 'bold'),\n            italic: () => this.tbtn(IC.italic, this.t('italic'), () => this.exec('italic'), 'italic'),\n            underline: () => this.tbtn(IC.underline, this.t('underline'), () => this.exec('underline'), 'underline'),\n            strikethrough: () => this.tbtn(IC.strikethrough, this.t('strikethrough'), () => this.exec('strikeThrough'), 'strikeThrough'),\n            forecolor: () => this.colorChips(),\n            backcolor: () =>\n                this.menuTbtn(\n                    IC.backcolor + '<span class=\"colorbar\" data-cb=\"back\"></span>',\n                    this.t('backcolor'),\n                    (b) => this.colorMenu(b, 'back')\n                ),\n            alignleft: () => this.tbtn(IC.alignleft, this.t('alignleft'), () => this.exec('justifyLeft'), 'justifyLeft'),\n            aligncenter: () => this.tbtn(IC.aligncenter, this.t('aligncenter'), () => this.exec('justifyCenter'), 'justifyCenter'),\n            alignright: () => this.tbtn(IC.alignright, this.t('alignright'), () => this.exec('justifyRight'), 'justifyRight'),\n            alignjustify: () => this.tbtn(IC.alignjustify, this.t('alignjustify'), () => this.exec('justifyFull'), 'justifyFull'),\n            bullist: () => this.menuTbtn(IC.bullist, this.t('bullist'), (b) => this.listMenu(b, 'ul'), 'insertUnorderedList'),\n            numlist: () => this.menuTbtn(IC.numlist, this.t('numlist'), (b) => this.listMenu(b, 'ol'), 'insertOrderedList'),\n            outdent: () => this.tbtn(IC.outdent, this.t('outdent'), () => this.exec('outdent')),\n            indent: () => this.tbtn(IC.indent, this.t('indent'), () => this.exec('indent')),\n            link: () => this.tbtn(IC.link, this.t('linkttl'), () => this.linkDlg()),\n            blockquote: () => this.tbtn(IC.quote, this.t('quote'), () => this.toggleBlock('blockquote'), 'blockquote'),\n            code: () => this.tbtn(IC.inlinecodeic, this.t('code'), () => this.toggleInlineCode(), 'code'),\n            codesample: () => this.tbtn(IC.codesampleic, this.t('codesample'), () => this.codeDlg()),\n            changecase: () => this.menuTbtn(IC.caseic, this.t('changecase'), (b) => this.caseMenu(b)),\n            lineheight: () => this.menuTbtn(IC.lineheight, this.t('lineheight'), (b) => this.lineHeightMenu(b)),\n            wordspacing: () => this.menuTbtn(IC.wordspacing, this.t('wordspacing'), (b) => this.wordSpacingMenu(b)),\n            letterspacing: () => this.menuTbtn(IC.letterspacing, this.t('letterspacing'), (b) => this.letterSpacingMenu(b)),\n            removeformat: () => this.tbtn(IC.clearformatic, this.t('removeformat'), () => this.exec('removeFormat')),\n            blocks: () => this.tsel('w-block', 'blocksel', this.t('para'), (b) => this.blocksMenu(b)),\n            ltr: () => this.tbtn(IC.ltr, this.t('ltr'), () => this.setDir('ltr'), 'ltr'),\n            rtl: () => this.tbtn(IC.rtl, this.t('rtl'), () => this.setDir('rtl'), 'rtl'),\n            quickimage: () => this.tbtn(IC.image, this.t('quickimage'), () => this.insertImagePlaceholder()),\n            quickvideo: () => this.tbtn(IC.video, this.t('quickvideo'), () => this.videoDlg()),\n            quicktable: () => tableBtn,\n            template: () => this.menuTbtn(IC.templateic, this.t('template'), (b) => this.templateMenu(b)),\n            charmap: () => this.tbtn(IC.charic, this.t('charmap'), () => this.charMap()),\n            emoji: () => this.tbtn(IC.emojiic, this.t('emoji'), () => this.emojiMap()),\n            fullscreen: () => this.tbtn(IC.fullscreen, this.t('fullscreen'), () => this.toggleFullscreen(), 'fullscreen'),\n            sourcecode: () => this.tbtn(IC.srcic, this.t('sourcecode'), () => this.sourceDlg())\n        };\n        /* TinyMCE-compatible aliases so common TinyMCE toolbar strings\n           (e.g. \"undo redo | styles | ... | link image media\") work as-is */\n        registry.styles = registry.blocks;\n        registry.image = registry.quickimage;\n        registry.media = registry.quickvideo;\n        registry.table = registry.quicktable;\n        return registry;\n    }\n\n    private buildToolbar(): void {\n        this.toolbar.innerHTML = '';\n        const spec = this.options.toolbar === true ? DEFAULT_TOOLBAR : (this.options.toolbar as string);\n        const registry = this.buildToolbarRegistry();\n        this.parseToolbarString(spec).forEach((tokens) => {\n            const elements: HTMLElement[] = [];\n            tokens.forEach((token) => {\n                const builder = registry[token];\n                if (!builder) {\n                    console.warn(`FableEditor: unknown toolbar item \"${token}\"`);\n                    return;\n                }\n                const result = builder();\n                if (Array.isArray(result)) elements.push(...result);\n                else elements.push(result);\n            });\n            if (elements.length) this.toolbar.appendChild(this.group(...elements));\n        });\n        this.tbrMore = this.tbtn(IC.more, this.t('more'), () => {\n            this.tbrExpanded = !this.tbrExpanded;\n            this.updateToolbarOverflow();\n        });\n        this.tbrMore.classList.add('tbr-more');\n        this.toolbar.appendChild(this.tbrMore);\n        this.syncColorSwatches(this.toolbar);\n        this.updateToolbarOverflow();\n    }\n\n    /** xs/sm/md editors (< 992px wide) collapse an overflowing toolbar to one row +\n     *  \"…\" expander; at lg widths and up the toolbar wraps to multiple rows as before. */\n    private static readonly TBR_COLLAPSE_MAX = 992;\n\n    /** Responsive one-line toolbar: on mobile/tablet widths (or a narrow host\n     *  container) a toolbar that can't fit on a single row collapses to one\n     *  clipped row plus a trailing \"…\" button that expands/collapses the full\n     *  set. Driven by the editor's own width, so it also applies to narrow\n     *  panels on desktop. */\n    private updateToolbarOverflow(): void {\n        const tb = this.toolbar;\n        if (!this.tbrMore) return;\n        tb.classList.add('tbr-measure');\n        const overflows = tb.scrollWidth > tb.clientWidth + 1;\n        tb.classList.remove('tbr-measure');\n        const narrow = this.shell.offsetWidth < FableEditor.TBR_COLLAPSE_MAX;\n        if (!overflows || !narrow) {\n            this.tbrExpanded = false;\n            tb.classList.remove('collapsible', 'expanded');\n            this.tbrMore.classList.remove('on');\n            return;\n        }\n        tb.classList.add('collapsible');\n        tb.classList.toggle('expanded', this.tbrExpanded);\n        this.tbrMore.classList.toggle('on', this.tbrExpanded);\n    }\n\n    /* ---------------------------------------------------------- menubar */\n    private mItem(label: keyof I18nStrings, icon: string | undefined, action: () => void, shortcut?: string): MenuItemDef {\n        return { label: this.t(label), icon, action, shortcut };\n    }\n\n    private buildMenubar(): void {\n        this.menubar.innerHTML = '';\n        const menus: Record<string, (MenuItemDef | '|')[]> = {\n            file: [\n                this.mItem('newdoc', IC.newic, () => {\n                    this.recordRevision();\n                    this.ed.innerHTML = '<p><br></p>';\n                    this.onChange();\n                }),\n                '|',\n                this.mItem('importword', IC.wordic, () => this.pickWordDoc()),\n                this.mItem('restoredraft', IC.draftic, () => {\n                    if (!this.restoreDraft()) alert(this.t('draftempty'));\n                }),\n                this.mItem('revhistory', IC.historyic, () => this.revisionDlg()),\n                '|',\n                this.mItem('preview', IC.prevw, () => this.previewDlg()),\n                this.mItem('print', IC.printic, () => this.printDoc(), 'Ctrl+P')\n            ],\n            edit: [\n                this.mItem('undo', IC.undo, () => this.exec('undo'), 'Ctrl+Z'),\n                this.mItem('redo', IC.redo, () => this.exec('redo'), 'Ctrl+Y'),\n                '|',\n                this.mItem('cut', IC.cutic, () => this.exec('cut'), 'Ctrl+X'),\n                this.mItem('copy', IC.copyic, () => this.exec('copy'), 'Ctrl+C'),\n                this.mItem('paste', IC.pasteic, () => alert(this.t('pastehint')), 'Ctrl+V'),\n                '|',\n                this.mItem('selectall', IC.selall, () => this.exec('selectAll'), 'Ctrl+A')\n            ],\n            view: [\n                this.mItem('fullscreen', IC.fullscreen, () => this.toggleFullscreen()),\n                this.mItem('preview', IC.prevw, () => this.previewDlg()),\n                this.mItem('sourcecode', IC.srcic, () => this.sourceDlg())\n            ],\n            insert: [\n                this.mItem('link', IC.link, () => this.linkDlg()),\n                this.mItem('image', IC.image, () => this.insertImagePlaceholder()),\n                this.mItem('video', IC.video, () => this.videoDlg()),\n                { label: this.t('inserttable'), icon: IC.tableic, action: () => this.tableGrid((this.menubar.querySelector('[data-menu-key=\"table\"]') as HTMLElement) || this.menubar) },\n                this.mItem('codesample', IC.codesampleic, () => this.codeDlg()),\n                { label: this.t('template'), icon: IC.templateic, subBuild: (el) => this.buildTemplatePickInto(el) },\n                this.mItem('hr', IC.hric, () => this.exec('insertHorizontalRule')),\n                '|',\n                this.mItem('charmap', IC.charic, () => this.charMap()),\n                this.mItem('emoji', IC.emojiic, () => this.emojiMap()),\n                this.mItem('datetime', IC.dateic, () =>\n                    this.exec('insertText', new Date().toLocaleString(this.lang === 'ar' ? 'ar-AE' : 'en-GB'))\n                ),\n                '|',\n                {\n                    label: this.t('pagebreak'),\n                    icon: IC.pbic,\n                    action: () => {\n                        this.restoreSel();\n                        document.execCommand('insertHTML', false, '<hr class=\"pagebreak\"><p><br></p>');\n                        this.onChange();\n                    }\n                },\n                this.mItem('nbsp', IC.nbspic, () => this.exec('insertText', '\\u00A0'))\n            ],\n            format: [\n                this.mItem('bold', IC.bold, () => this.exec('bold'), 'Ctrl+B'),\n                this.mItem('italic', IC.italic, () => this.exec('italic'), 'Ctrl+I'),\n                this.mItem('underline', IC.underline, () => this.exec('underline'), 'Ctrl+U'),\n                this.mItem('strikethrough', IC.strikethrough, () => this.exec('strikeThrough')),\n                this.mItem('superscript', IC.superscriptic, () => this.exec('superscript')),\n                this.mItem('subscript', IC.subscriptic, () => this.exec('subscript')),\n                this.mItem('code', IC.inlinecodeic, () => this.toggleInlineCode()),\n                this.mItem('quote', IC.quote, () => this.toggleBlock('blockquote')),\n                '|',\n                { label: this.t('fontfamily'), subBuild: (el) => this.menuItems(el, this.fontItems()) },\n                { label: this.t('fontsize'), subBuild: (el) => this.menuItems(el, this.sizeItems()) },\n                { label: this.t('blocks'), subBuild: (el) => this.menuItems(el, this.blockItems()) },\n                { label: this.t('align'), subBuild: (el) => this.menuItems(el, this.alignItems()) },\n                { label: this.t('lineheight'), icon: IC.lineheight, subBuild: (el) => this.menuItems(el, this.blockStyleItems('lineHeight', LINE_HEIGHTS)) },\n                { label: this.t('wordspacing'), icon: IC.wordspacing, subBuild: (el) => this.menuItems(el, this.blockStyleItems('wordSpacing', WORD_SPACINGS)) },\n                { label: this.t('letterspacing'), icon: IC.letterspacing, subBuild: (el) => this.menuItems(el, this.blockStyleItems('letterSpacing', LETTER_SPACINGS)) },\n                '|',\n                { label: this.t('forecolor'), icon: IC.palette, subBuild: (el) => this.buildPaletteInto(el, this.foreColor, (c) => this.applyColor('fore', c)) },\n                { label: this.t('backcolor'), icon: IC.backcolor, subBuild: (el) => this.buildPaletteInto(el, this.backColor, (c) => this.applyColor('back', c)) },\n                '|',\n                this.mItem('bullist', IC.bullist, () => this.exec('insertUnorderedList')),\n                this.mItem('numlist', IC.numlist, () => this.exec('insertOrderedList')),\n                this.mItem('outdent', IC.outdent, () => this.exec('outdent')),\n                this.mItem('indent', IC.indent, () => this.exec('indent')),\n                '|',\n                this.mItem('ltr', IC.ltr, () => this.setDir('ltr')),\n                this.mItem('rtl', IC.rtl, () => this.setDir('rtl')),\n                '|',\n                { label: this.t('changecase'), icon: IC.caseic, sub: this.caseItems() },\n                '|',\n                this.mItem('clearformat', IC.clearformatic, () => this.exec('removeFormat'))\n            ],\n            tools: [this.mItem('sourcecode', IC.srcic, () => this.sourceDlg()), this.mItem('wordcount', IC.wcic, () => this.wordCountDlg())],\n            table: [\n                { label: this.t('inserttable'), icon: IC.tableic, subBuild: (el) => this.buildTableGridInto(el) },\n                '|',\n                {\n                    label: this.t('cell'),\n                    sub: [\n                        { label: this.t('cellprops'), icon: IC.tableic, action: () => this.cellPropsDlg() },\n                        { label: this.t('cellbg'), icon: IC.palette, subBuild: (el) => this.buildCellFillInto(el) }\n                    ]\n                },\n                {\n                    label: this.t('row'),\n                    sub: [\n                        { label: this.t('rowabove'), icon: IC.rowbefore, action: () => this.tableOp('rowabove'), hover: (on) => this.setOpTarget(on ? 'row' : null) },\n                        { label: this.t('rowbelow'), icon: IC.rowafter, action: () => this.tableOp('rowbelow'), hover: (on) => this.setOpTarget(on ? 'row' : null) },\n                        { label: this.t('delrow'), icon: IC.rowdelete, action: () => this.tableOp('delrow'), hover: (on) => this.setOpTarget(on ? 'row' : null) },\n                        '|',\n                        { label: this.t('moverowup'), icon: IC.moverowup, action: () => this.tableMove('rowup'), hover: (on) => this.setOpTarget(on ? 'row' : null) },\n                        { label: this.t('moverowdown'), icon: IC.moverowdown, action: () => this.tableMove('rowdown'), hover: (on) => this.setOpTarget(on ? 'row' : null) },\n                        '|',\n                        { label: this.t('rowprops'), icon: IC.tableic, action: () => this.rowPropsDlg(), hover: (on) => this.setOpTarget(on ? 'row' : null) }\n                    ]\n                },\n                {\n                    label: this.t('column'),\n                    sub: [\n                        { label: this.t('colbefore'), icon: IC.colbefore, action: () => this.tableOp('colbefore'), hover: (on) => this.setOpTarget(on ? 'col' : null) },\n                        { label: this.t('colafter'), icon: IC.colafter, action: () => this.tableOp('colafter'), hover: (on) => this.setOpTarget(on ? 'col' : null) },\n                        { label: this.t('delcol'), icon: IC.coldelete, action: () => this.tableOp('delcol'), hover: (on) => this.setOpTarget(on ? 'col' : null) },\n                        '|',\n                        { label: this.t('movecolleft'), icon: IC.movecolleft, action: () => this.tableMove('colleft'), hover: (on) => this.setOpTarget(on ? 'col' : null) },\n                        { label: this.t('movecolright'), icon: IC.movecolright, action: () => this.tableMove('colright'), hover: (on) => this.setOpTarget(on ? 'col' : null) },\n                        '|',\n                        { label: this.t('colprops'), icon: IC.tableic, action: () => this.colPropsDlg(), hover: (on) => this.setOpTarget(on ? 'col' : null) }\n                    ]\n                },\n                '|',\n                {\n                    label: this.t('tablepropsttl'),\n                    icon: IC.tableic,\n                    action: () => {\n                        const cell = this.currentCell();\n                        if (!cell) {\n                            alert(this.t('nocell'));\n                            return;\n                        }\n                        this.tblActive = cell.closest('table');\n                        this.tablePropsDlg();\n                    }\n                },\n                { label: this.t('deltable'), icon: IC.trash, action: () => this.tableOp('deltable') }\n            ],\n            help: [this.mItem('helpttl', IC.helpic, () => this.helpDlg(), 'Alt+0')]\n        };\n        const spec = this.options.menubar === true ? DEFAULT_MENUBAR : (this.options.menubar as string);\n        const seen = new Set<string>();\n        spec\n            .split(/\\s+/)\n            .filter(Boolean)\n            .forEach((key) => {\n                if (seen.has(key)) return;\n                seen.add(key);\n                if (!menus[key]) {\n                    console.warn(`FableEditor: unknown menubar item \"${key}\"`);\n                    return;\n                }\n                const b = document.createElement('button');\n                b.type = 'button';\n                b.textContent = this.t(key as keyof I18nStrings);\n                b.dataset.menuKey = key;\n                b.addEventListener('mousedown', (e) => {\n                    e.preventDefault();\n                    this.saveSel();\n                });\n                b.addEventListener('click', () => this.popup(b, (el) => this.menuItems(el, menus[key])));\n                this.menubar.appendChild(b);\n            });\n    }\n\n    /* ---------------------------------------------------------- table ops */\n    private tableOp(op: string): void {\n        this.restoreSel();\n        const s = window.getSelection();\n        if (!s) return;\n        const cell =\n            this.closestBlock(s.anchorNode)?.closest('td,th') ||\n            (s.anchorNode && (s.anchorNode as Element).nodeType === 1 ? (s.anchorNode as Element).closest?.('td,th') : null);\n        if (!cell) return;\n        const row = cell.parentElement as HTMLTableRowElement;\n        const table = cell.closest('table') as HTMLTableElement;\n        const idx = Array.from(row.children).indexOf(cell as HTMLTableCellElement);\n        const newRow = () => {\n            const r = row.cloneNode(false) as HTMLTableRowElement;\n            Array.from(row.children).forEach((src) => {\n                const td = document.createElement('td');\n                /* carry the source cell's inline style so borders / padding /\n                   column widths survive on inserted rows */\n                const st = (src as HTMLElement).getAttribute('style');\n                if (st) td.setAttribute('style', st);\n                td.style.removeProperty('background-color');\n                td.innerHTML = '<br>';\n                r.appendChild(td);\n            });\n            return r;\n        };\n        if (op === 'rowabove') row.before(newRow());\n        if (op === 'rowbelow') row.after(newRow());\n        if (op === 'delrow') {\n            const body = row.parentElement!;\n            row.remove();\n            if (!body.querySelector('tr')) table.remove();\n        }\n        if (op === 'colbefore' || op === 'colafter') {\n            table.querySelectorAll('tr').forEach((tr) => {\n                const ref = tr.children[Math.min(idx, tr.children.length - 1)] as HTMLElement;\n                const td = document.createElement('td');\n                /* carry the reference cell's inline style so borders / padding\n                   survive on inserted columns; width is dropped so the new\n                   column shares the table space instead of doubling it */\n                const st = ref.getAttribute('style');\n                if (st) td.setAttribute('style', st);\n                td.style.removeProperty('width');\n                td.style.removeProperty('background-color');\n                td.innerHTML = '<br>';\n                op === 'colbefore' ? ref.before(td) : ref.after(td);\n            });\n        }\n        if (op === 'delcol') {\n            table.querySelectorAll('tr').forEach((tr) => tr.children[idx]?.remove());\n            if (!table.querySelector('td,th')) table.remove();\n        }\n        if (op === 'deltable') table.remove();\n        this.onChange();\n        this.positionTableHandles();\n    }\n\n    /** Reorders the current row/column: 'rowup'/'rowdown' swap the caret's row with\n     *  its neighbour, 'colleft'/'colright' move the caret's column one position in\n     *  DOM order across every row. The caret travels with the moved cell. */\n    private tableMove(op: 'rowup' | 'rowdown' | 'colleft' | 'colright'): void {\n        this.restoreSel();\n        const cell = this.currentCell();\n        if (!cell) return;\n        const row = cell.parentElement as HTMLTableRowElement;\n        const table = cell.closest('table') as HTMLTableElement;\n        const idx = Array.from(row.children).indexOf(cell);\n        if (op === 'rowup') {\n            const prev = row.previousElementSibling;\n            if (prev) prev.before(row);\n        }\n        if (op === 'rowdown') {\n            const next = row.nextElementSibling;\n            if (next) next.after(row);\n        }\n        if (op === 'colleft' && idx > 0) {\n            table.querySelectorAll('tr').forEach((tr) => {\n                const c = tr.children[idx];\n                const prev = tr.children[idx - 1];\n                if (c && prev) prev.before(c);\n            });\n        }\n        if (op === 'colright') {\n            table.querySelectorAll('tr').forEach((tr) => {\n                const c = tr.children[idx];\n                const next = tr.children[idx + 1];\n                if (c && next) next.after(c);\n            });\n        }\n        /* moving a node resets live ranges inside it (they collapse to the old\n           parent), so put the caret back into the moved cell explicitly — this is\n           what lets the user click \"move\" repeatedly to walk a row/column along */\n        const range = document.createRange();\n        range.selectNodeContents(cell);\n        range.collapse(true);\n        const s = window.getSelection();\n        if (s) {\n            s.removeAllRanges();\n            s.addRange(range);\n        }\n        this.saveSel();\n        this.onChange();\n        this.positionTableHandles();\n        this.positionCellMarker();\n    }\n\n    /** Align the whole table via auto margins — same semantics as the align\n     *  field in the table-properties dialog. */\n    private alignTable(align: 'left' | 'center' | 'right'): void {\n        const table = this.tblActive;\n        if (!table) return;\n        table.style.marginLeft = align === 'left' ? '0' : 'auto';\n        table.style.marginRight = align === 'right' ? '0' : 'auto';\n        this.onChange();\n        this.positionTableHandles();\n    }\n\n    /** Color grid applying a background to the caret's cell — the direct way to\n     *  build header rows (the toolbar's backcolor highlights text, not cells). */\n    private buildCellFillInto(el: HTMLElement): void {\n        const apply = (c: string | null) => {\n            const cell = this.currentCell();\n            if (!cell) {\n                alert(this.t('nocell'));\n                return;\n            }\n            this.setOrClear(cell, 'background-color', c || '');\n            this.onChange();\n        };\n        const cell = this.currentCell();\n        this.buildPaletteInto(el, this.cssToHex(cell ? cell.style.backgroundColor : ''), apply);\n    }\n\n    /** style.backgroundColor reads back as rgb(...) — normalise to #rrggbb for the picker. */\n    private cssToHex(c: string): string {\n        const m = c.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);\n        return m ? '#' + m.slice(1, 4).map((n) => (+n).toString(16).padStart(2, '0')).join('') : c;\n    }\n\n    private cellFillMenu(anchor: HTMLElement): void {\n        this.popup(anchor, (el) => this.buildCellFillInto(el), 'pop-cellbg');\n    }\n\n    private applyTableProps(table: HTMLTableElement, vals: Record<string, string>): void {\n        if (vals.width) table.style.width = /^\\d+$/.test(vals.width) ? vals.width + 'px' : vals.width;\n        else table.style.removeProperty('width');\n\n        const cells = Array.from(table.querySelectorAll('td,th')) as HTMLElement[];\n        if (vals.cellpadding !== '') cells.forEach((c) => (c.style.padding = vals.cellpadding + 'px'));\n        else cells.forEach((c) => c.style.removeProperty('padding'));\n\n        if (vals.cellspacing !== '') {\n            table.style.borderCollapse = 'separate';\n            table.style.borderSpacing = vals.cellspacing + 'px';\n        } else {\n            table.style.borderCollapse = 'collapse';\n            table.style.removeProperty('border-spacing');\n        }\n\n        if (vals.border !== '' && +vals.border > 0) {\n            table.style.border = vals.border + 'px solid #b9c2cc';\n            cells.forEach((c) => (c.style.border = vals.border + 'px solid #b9c2cc'));\n        } else {\n            table.style.removeProperty('border');\n            cells.forEach((c) => c.style.removeProperty('border'));\n        }\n\n        table.style.removeProperty('margin-left');\n        table.style.removeProperty('margin-right');\n        if (vals.align === 'center') {\n            table.style.marginLeft = 'auto';\n            table.style.marginRight = 'auto';\n        } else if (vals.align === 'right') {\n            table.style.marginLeft = 'auto';\n            table.style.marginRight = '0';\n        } else if (vals.align === 'left') {\n            table.style.marginLeft = '0';\n            table.style.marginRight = 'auto';\n        }\n    }\n\n    private tablePropsDlg(): void {\n        const table = this.tblActive;\n        if (!table) return;\n        let wIn: HTMLInputElement;\n        let padIn: HTMLInputElement;\n        let spIn: HTMLInputElement;\n        let bIn: HTMLInputElement;\n        let alignSel: HTMLSelectElement;\n        const rowStyle = 'display:flex;align-items:center;gap:10px;margin:10px 0';\n        const lblStyle = 'width:120px;color:#556;flex:none';\n        const inputStyle = 'flex:1;border:1px solid #cfd6df;border-radius:6px;padding:7px 9px;font:14px inherit';\n        const firstCell = table.querySelector('td,th') as HTMLElement | null;\n        const curWidth = table.style.width || '';\n        const curPad = firstCell && firstCell.style.padding ? parseFloat(firstCell.style.padding) : '';\n        const curSp = table.style.borderSpacing ? parseFloat(table.style.borderSpacing) : '';\n        const curBorder = table.style.borderWidth ? parseFloat(table.style.borderWidth) : '';\n        const ml = table.style.marginLeft;\n        const mr = table.style.marginRight;\n        const curAlign = ml === 'auto' && mr === 'auto' ? 'center' : ml === 'auto' ? 'right' : mr === 'auto' && ml === '0' ? 'left' : '';\n\n        this.dialog(\n            this.t('tablepropsttl'),\n            (body) => {\n                const mk = (labelKey: keyof I18nStrings, el: HTMLElement) => {\n                    const row = document.createElement('div');\n                    row.style.cssText = rowStyle;\n                    const lbl = document.createElement('span');\n                    lbl.style.cssText = lblStyle;\n                    lbl.textContent = this.t(labelKey);\n                    row.append(lbl, el);\n                    body.appendChild(row);\n                };\n                wIn = document.createElement('input');\n                wIn.type = 'text';\n                wIn.style.cssText = inputStyle;\n                wIn.placeholder = 'e.g. 600px or 100%';\n                wIn.value = curWidth as string;\n                mk('tblwidth', wIn);\n                padIn = document.createElement('input');\n                padIn.type = 'number';\n                padIn.min = '0';\n                padIn.style.cssText = inputStyle;\n                padIn.value = String(curPad);\n                mk('tblcellpadding', padIn);\n                spIn = document.createElement('input');\n                spIn.type = 'number';\n                spIn.min = '0';\n                spIn.style.cssText = inputStyle;\n                spIn.value = String(curSp);\n                mk('tblcellspacing', spIn);\n                bIn = document.createElement('input');\n                bIn.type = 'number';\n                bIn.min = '0';\n                bIn.style.cssText = inputStyle;\n                bIn.value = String(curBorder);\n                mk('tblborder', bIn);\n                alignSel = document.createElement('select');\n                alignSel.style.cssText = inputStyle;\n                (\n                    [\n                        ['', 'alignnone'],\n                        ['left', 'alignleft'],\n                        ['center', 'aligncenter'],\n                        ['right', 'alignright']\n                    ] as [string, keyof I18nStrings][]\n                ).forEach(([v, k]) => {\n                    const o = document.createElement('option');\n                    o.value = v;\n                    o.textContent = this.t(k);\n                    if (v === curAlign) o.selected = true;\n                    alignSel.appendChild(o);\n                });\n                mk('tblalign', alignSel);\n            },\n            [\n                { label: this.t('cancel'), action: () => this.closeDlg() },\n                {\n                    label: this.t('save'),\n                    primary: true,\n                    action: () => {\n                        this.applyTableProps(table, {\n                            width: wIn.value.trim(),\n                            cellpadding: padIn.value.trim(),\n                            cellspacing: spIn.value.trim(),\n                            border: bIn.value.trim(),\n                            align: alignSel.value\n                        });\n                        this.closeDlg();\n                        this.onChange();\n                        this.positionTableHandles();\n                    }\n                }\n            ]\n        );\n    }\n\n    /* ------------------------------------------- cell / row / column props */\n    private currentCell(): HTMLTableCellElement | null {\n        let node: Node | null = this.savedRange ? this.savedRange.startContainer : null;\n        if (!node || !this.ed.contains(node)) {\n            const s = window.getSelection();\n            node = s && this.ed.contains(s.anchorNode) ? s.anchorNode : null;\n        }\n        while (node && node !== this.ed) {\n            if ((node as HTMLElement).nodeType === 1 && /^(TD|TH)$/.test((node as HTMLElement).tagName)) {\n                return node as HTMLTableCellElement;\n            }\n            node = node.parentNode;\n        }\n        return null;\n    }\n\n    private toHexColor(c: string): string {\n        if (/^#[0-9a-fA-F]{6}$/.test(c)) return c;\n        const m = /rgba?\\((\\d+)[,\\s]+(\\d+)[,\\s]+(\\d+)/.exec(c);\n        if (!m) return '';\n        return '#' + [m[1], m[2], m[3]].map((n) => (+n).toString(16).padStart(2, '0')).join('');\n    }\n\n    private formRow(body: HTMLElement, label: string, el: HTMLElement): void {\n        const row = document.createElement('div');\n        row.style.cssText = 'display:flex;align-items:center;gap:10px;margin:10px 0;min-width:360px';\n        const lbl = document.createElement('span');\n        lbl.style.cssText = 'width:120px;color:#556;flex:none';\n        lbl.textContent = label;\n        row.append(lbl, el);\n        body.appendChild(row);\n    }\n\n    private formInput(value: string, placeholder = ''): HTMLInputElement {\n        const i = document.createElement('input');\n        i.type = 'text';\n        i.style.cssText = 'flex:1;border:1px solid #cfd6df;border-radius:6px;padding:7px 9px;font:14px inherit;min-width:0';\n        i.value = value;\n        i.placeholder = placeholder;\n        return i;\n    }\n\n    private formSelect(options: [string, string][], cur: string): HTMLSelectElement {\n        const sel = document.createElement('select');\n        sel.style.cssText = 'flex:1;border:1px solid #cfd6df;border-radius:6px;padding:7px 9px;font:14px inherit;background:#fff';\n        options.forEach(([v, label]) => {\n            const o = document.createElement('option');\n            o.value = v;\n            o.textContent = label;\n            if (v === cur) o.selected = true;\n            sel.appendChild(o);\n        });\n        return sel;\n    }\n\n    private formBg(cur: string): { wrap: HTMLElement; color: HTMLInputElement; fill: HTMLInputElement } {\n        const wrap = document.createElement('div');\n        wrap.style.cssText = 'flex:1;display:flex;align-items:center;gap:8px';\n        const hex = this.toHexColor(cur);\n        const color = document.createElement('input');\n        color.type = 'color';\n        color.value = hex || '#ffffff';\n        color.style.cssText = 'width:36px;height:29px;border:1px solid #cfd6df;border-radius:4px;padding:1px;background:none;cursor:pointer';\n        const lbl = document.createElement('label');\n        lbl.style.cssText = 'display:flex;align-items:center;gap:6px;cursor:pointer;color:#556';\n        const fill = document.createElement('input');\n        fill.type = 'checkbox';\n        fill.checked = !!hex;\n        lbl.append(fill, document.createTextNode(this.t('fill')));\n        color.addEventListener('input', () => (fill.checked = true));\n        wrap.append(color, lbl);\n        return { wrap, color, fill };\n    }\n\n    private setOrClear(el: HTMLElement, prop: string, val: string): void {\n        if (val) el.style.setProperty(prop, /^(width|height)$/.test(prop) && /^\\d+$/.test(val) ? val + 'px' : val);\n        else el.style.removeProperty(prop);\n    }\n\n    private cellPropsDlg(): void {\n        const cell = this.currentCell();\n        if (!cell) {\n            alert(this.t('nocell'));\n            return;\n        }\n        let wIn: HTMLInputElement;\n        let hIn: HTMLInputElement;\n        let alignSel: HTMLSelectElement;\n        let vSel: HTMLSelectElement;\n        let bg: { wrap: HTMLElement; color: HTMLInputElement; fill: HTMLInputElement };\n        this.dialog(\n            this.t('cellprops').replace('…', ''),\n            (body) => {\n                wIn = this.formInput(cell.style.width, 'e.g. 120px / 25%');\n                this.formRow(body, this.t('tblwidth'), wIn);\n                hIn = this.formInput(cell.style.height, 'e.g. 40px');\n                this.formRow(body, this.t('tblheight'), hIn);\n                alignSel = this.formSelect(\n                    [\n                        ['', this.t('alignnone')],\n                        ['left', this.t('alignleft')],\n                        ['center', this.t('aligncenter')],\n                        ['right', this.t('alignright')]\n                    ],\n                    cell.style.textAlign || ''\n                );\n                this.formRow(body, this.t('tblalign'), alignSel);\n                vSel = this.formSelect(\n                    [\n                        ['', this.t('alignnone')],\n                        ['top', this.t('valigntop')],\n                        ['middle', this.t('valignmiddle')],\n                        ['bottom', this.t('valignbottom')]\n                    ],\n                    cell.style.verticalAlign || ''\n                );\n                this.formRow(body, this.t('valign'), vSel);\n                bg = this.formBg(cell.style.backgroundColor || '');\n                this.formRow(body, this.t('backcolor'), bg.wrap);\n            },\n            [\n                { label: this.t('cancel'), action: () => this.closeDlg() },\n                {\n                    label: this.t('save'),\n                    primary: true,\n                    action: () => {\n                        this.setOrClear(cell, 'width', wIn.value.trim());\n                        this.setOrClear(cell, 'height', hIn.value.trim());\n                        this.setOrClear(cell, 'text-align', alignSel.value);\n                        this.setOrClear(cell, 'vertical-align', vSel.value);\n                        this.setOrClear(cell, 'background-color', bg.fill.checked ? bg.color.value : '');\n                        this.closeDlg();\n                        this.onChange();\n                        this.positionTableHandles();\n                    }\n                }\n            ]\n        );\n    }\n\n    private rowPropsDlg(): void {\n        const cell = this.currentCell();\n        if (!cell) {\n            alert(this.t('nocell'));\n            return;\n        }\n        const row = cell.parentElement as HTMLTableRowElement;\n        let hIn: HTMLInputElement;\n        let bg: { wrap: HTMLElement; color: HTMLInputElement; fill: HTMLInputElement };\n        this.dialog(\n            this.t('rowprops').replace('…', ''),\n            (body) => {\n                hIn = this.formInput(row.style.height, 'e.g. 40px');\n                this.formRow(body, this.t('tblheight'), hIn);\n                bg = this.formBg(row.style.backgroundColor || '');\n                this.formRow(body, this.t('backcolor'), bg.wrap);\n            },\n            [\n                { label: this.t('cancel'), action: () => this.closeDlg() },\n                {\n                    label: this.t('save'),\n                    primary: true,\n                    action: () => {\n                        this.setOrClear(row, 'height', hIn.value.trim());\n                        this.setOrClear(row, 'background-color', bg.fill.checked ? bg.color.value : '');\n                        this.closeDlg();\n                        this.onChange();\n                        this.positionTableHandles();\n                    }\n                }\n            ]\n        );\n    }\n\n    private colPropsDlg(): void {\n        const cell = this.currentCell();\n        if (!cell) {\n            alert(this.t('nocell'));\n            return;\n        }\n        const row = cell.parentElement as HTMLTableRowElement;\n        const table = cell.closest('table') as HTMLTableElement;\n        const idx = Array.from(row.children).indexOf(cell);\n        const colCells = Array.from(table.rows)\n            .map((r) => r.cells[idx])\n            .filter(Boolean) as HTMLTableCellElement[];\n        let wIn: HTMLInputElement;\n        let bg: { wrap: HTMLElement; color: HTMLInputElement; fill: HTMLInputElement };\n        this.dialog(\n            this.t('colprops').replace('…', ''),\n            (body) => {\n                wIn = this.formInput(cell.style.width, 'e.g. 120px / 25%');\n                this.formRow(body, this.t('tblwidth'), wIn);\n                bg = this.formBg(cell.style.backgroundColor || '');\n                this.formRow(body, this.t('backcolor'), bg.wrap);\n            },\n            [\n                { label: this.t('cancel'), action: () => this.closeDlg() },\n                {\n                    label: this.t('save'),\n                    primary: true,\n                    action: () => {\n                        colCells.forEach((c) => {\n                            this.setOrClear(c, 'width', wIn.value.trim());\n                            this.setOrClear(c, 'background-color', bg.fill.checked ? bg.color.value : '');\n                        });\n                        this.closeDlg();\n                        this.onChange();\n                        this.positionTableHandles();\n                    }\n                }\n            ]\n        );\n    }\n\n    /* ---------------------------------------------------------- dialogs */\n    private closeDlg(): void {\n        if (this.dlgOvl) {\n            this.dlgOvl.remove();\n            this.dlgOvl = null;\n        }\n    }\n\n    private dialog(title: string, bodyBuild: (body: HTMLElement) => void, buttons?: DialogButton[]): void {\n        this.closeDlg();\n        this.closePop();\n        this.dlgOvl = document.createElement('div');\n        this.dlgOvl.className = 'ovl';\n        const d = document.createElement('div');\n        d.className = 'dlg';\n        d.dir = this.dir();\n        d.innerHTML = `<header><span>${title}</span><button type=\"button\">×</button></header>\n                   <div class=\"body\"></div><footer></footer>`;\n        (d.querySelector('header button') as HTMLButtonElement).onclick = () => this.closeDlg();\n        bodyBuild(d.querySelector('.body') as HTMLElement);\n        (buttons || [{ label: this.t('close'), primary: true, action: () => this.closeDlg() }]).forEach((b) => {\n            const btn = document.createElement('button');\n            btn.type = 'button';\n            btn.textContent = b.label;\n            if (b.primary) btn.className = 'pri';\n            btn.onclick = b.action;\n            d.querySelector('footer')!.appendChild(btn);\n        });\n        this.dlgOvl.appendChild(d);\n        this.dlgOvl.addEventListener('mousedown', (e) => {\n            if (e.target === this.dlgOvl) this.closeDlg();\n        });\n        document.body.appendChild(this.dlgOvl);\n    }\n\n    private sourceDlg(): void {\n        let ta: HTMLTextAreaElement;\n        this.dialog(\n            this.t('srcttl'),\n            (body) => {\n                ta = document.createElement('textarea');\n                ta.value = this.ed.innerHTML.replace(/></g, '>\\n<');\n                body.appendChild(ta);\n            },\n            [\n                { label: this.t('cancel'), action: () => this.closeDlg() },\n                {\n                    label: this.t('save'),\n                    primary: true,\n                    action: () => {\n                        this.ed.innerHTML = ta.value;\n                        this.closeDlg();\n                        this.onChange();\n                    }\n                }\n            ]\n        );\n    }\n\n    private helpDlg(): void {\n        this.dialog(this.t('helpttl'), (body) => {\n            const rows = [\n                ['Ctrl+B', this.t('bold')],\n                ['Ctrl+I', this.t('italic')],\n                ['Ctrl+U', this.t('underline')],\n                ['Ctrl+Z', this.t('undo')],\n                ['Ctrl+Y', this.t('redo')],\n                ['Ctrl+A', this.t('selectall')],\n                ['Alt+0', this.t('helpttl')]\n            ];\n            body.innerHTML = `<p style=\"color:#556\">${this.t('shortcuts')}</p>\n        <table class=\"kbd\">${rows.map((r) => `<tr><td>${r[1]}</td><td><kbd>${r[0]}</kbd></td></tr>`).join('')}</table>`;\n        });\n    }\n\n    private wordCountDlg(): void {\n        this.dialog(this.t('wcttl'), (body) => {\n            body.innerHTML = `<table class=\"kbd\">\n        <tr><td>${this.t('wcwords')}</td><td>${this.countWords()}</td></tr>\n        <tr><td>${this.t('wcchars')}</td><td>${this.ed.textContent?.replace(/\\s/g, '').length ?? 0}</td></tr></table>`;\n        });\n    }\n\n    private previewDlg(): void {\n        this.dialog(this.t('previewttl'), (body) => {\n            const box = document.createElement('div');\n            box.style.cssText =\n                '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';\n            box.innerHTML = this.ed.innerHTML;\n            body.appendChild(box);\n        });\n    }\n\n    /** Two-pane picker shared by the special-character map and the emoji map:\n     *  fixed category tabs on the left, the active category's glyphs on the right. */\n    private glyphPickerDlg(title: string, cats: GlyphCategory[], emoji: boolean): void {\n        this.saveSel();\n        this.dialog(title, (body) => {\n            const wrap = document.createElement('div');\n            wrap.className = 'chmap';\n            const tabs = document.createElement('div');\n            tabs.className = 'chtabs';\n            const panel = document.createElement('div');\n            panel.className = 'chpanel';\n            const grid = document.createElement('div');\n            grid.className = 'chgrid' + (emoji ? ' emgrid' : '');\n            panel.appendChild(grid);\n            const show = (i: number) => {\n                tabs.querySelectorAll('button').forEach((b, bi) => b.classList.toggle('on', bi === i));\n                grid.innerHTML = '';\n                cats[i].chars.forEach((ch) => {\n                    const b = document.createElement('button');\n                    b.type = 'button';\n                    b.textContent = ch;\n                    b.onclick = () => {\n                        this.closeDlg();\n                        this.exec('insertText', ch);\n                    };\n                    grid.appendChild(b);\n                });\n                panel.scrollTop = 0;\n            };\n            cats.forEach((c, i) => {\n                const b = document.createElement('button');\n                b.type = 'button';\n                b.textContent = this.t(c.key as keyof I18nStrings);\n                b.addEventListener('click', () => show(i));\n                tabs.appendChild(b);\n            });\n            wrap.append(tabs, panel);\n            body.appendChild(wrap);\n            show(0);\n        });\n    }\n\n    private charMap(): void {\n        this.glyphPickerDlg(this.t('charmap').replace('…', ''), CHAR_CATEGORIES, false);\n    }\n\n    private emojiMap(): void {\n        this.glyphPickerDlg(this.t('emoji').replace('…', ''), EMOJI_CATEGORIES, true);\n    }\n\n    private printDoc(): void {\n        const w = window.open('', '_blank');\n        if (!w) return;\n        w.document.write(\n            `<html dir=\"${this.dir()}\"><body style=\"font-family:Helvetica,Arial,sans-serif;font-size:14px\">${this.ed.innerHTML}</body></html>`\n        );\n        w.document.close();\n        w.focus();\n        w.print();\n    }\n\n    private pickImage(): void {\n        this.imgInput.value = '';\n        this.imgInput.click();\n    }\n\n    /* ---------------------------------------------- image upload placeholder */\n    private imgPhHTML(id?: string): string {\n        return `<div class=\"img-ph\"${id ? ` id=\"${id}\"` : ''} contenteditable=\"false\">${IC.image}<span>${this.t('dropimage')}</span></div>`;\n    }\n\n    private insertImagePlaceholder(): void {\n        this.restoreSel();\n        const id = 'img-ph-' + Date.now().toString(36) + Math.random().toString(36).slice(2, 6);\n        document.execCommand('insertHTML', false, this.imgPhHTML(id));\n        const ph = this.ed.querySelector('#' + id) as HTMLElement | null;\n        if (ph) {\n            ph.removeAttribute('id');\n            this.selectImgPlaceholder(ph);\n        }\n        this.onChange();\n    }\n\n    private clearImgPlaceholderSel(): void {\n        this.phCtx?.remove();\n        this.phCtx = null;\n        this.phActive?.classList.remove('active');\n        this.phActive = null;\n    }\n\n    private removeImgPlaceholder(): void {\n        const ph = this.phActive;\n        if (!ph) return;\n        this.clearImgPlaceholderSel();\n        /* the placeholder inside a template block IS the media slot — deleting\n           it drops the slot entirely, leaving a text-only block */\n        (ph.closest('.tpl-media') || ph).remove();\n        this.refreshState();\n        this.onChange();\n    }\n\n    private selectImgPlaceholder(ph: HTMLElement): void {\n        if (this.phActive === ph) return;\n        this.clearImgPlaceholderSel();\n        this.phActive = ph;\n        ph.classList.add('active');\n        this.phCtx = document.createElement('div');\n        this.phCtx.className = 'imgctx img-ph-ctx';\n        this.phCtx.dir = this.dir();\n        document.body.appendChild(this.phCtx);\n        this.renderPhCtxButtons();\n    }\n\n    private renderPhCtxButtons(): void {\n        const el = this.phCtx;\n        if (!el) return;\n        el.innerHTML = '';\n        el.append(\n            this.ctxBtn(IC.uploadic, this.t('uploadimg'), () => {\n                this.phUploadTarget = this.phActive;\n                this.pickImage();\n            }),\n            this.ctxBtn(IC.link, this.t('imagelink'), () => this.renderPhCtxUrlInput())\n        );\n        /* a template's media slot is image-first, but can host a video instead */\n        if (this.phActive?.closest('.tpl-media')) {\n            el.append(this.ctxBtn(IC.video, this.t('quickvideo'), () => this.swapPlaceholderKind('video')));\n        }\n        el.append(this.ctxSep(), this.ctxBtn(IC.trash, this.t('deleteimg'), () => this.removeImgPlaceholder()));\n        this.positionImgPhCtx();\n    }\n\n    /** Swaps a template slot's placeholder between image and video kinds, so the\n     *  same media slot can be filled with either. */\n    private swapPlaceholderKind(to: 'image' | 'video'): void {\n        const ph = to === 'video' ? this.phActive : this.vphActive;\n        if (!ph) return;\n        const tmp = document.createElement('div');\n        tmp.innerHTML = to === 'video' ? this.vidPhHTML() : this.imgPhHTML();\n        const next = tmp.firstElementChild as HTMLElement;\n        if (to === 'video') this.clearImgPlaceholderSel();\n        else this.clearVphPlaceholderSel();\n        ph.replaceWith(next);\n        if (to === 'video') this.selectVphPlaceholder(next);\n        else this.selectImgPlaceholder(next);\n        this.onChange();\n    }\n\n    private renderPhCtxUrlInput(): void {\n        const el = this.phCtx;\n        if (!el) return;\n        el.innerHTML = '';\n        const inp = document.createElement('input');\n        inp.type = 'url';\n        inp.className = 'urlinp';\n        inp.placeholder = this.t('imageurlph');\n        const ok = document.createElement('button');\n        ok.type = 'button';\n        ok.className = 'txtbtn';\n        ok.textContent = this.t('insertimg');\n        const submit = () => {\n            const url = inp.value.trim();\n            const ph = this.phActive;\n            if (!ph) return;\n            if (!/^(https?:|data:image\\/|blob:)/i.test(url)) {\n                inp.classList.add('err');\n                inp.focus();\n                return;\n            }\n            ok.disabled = true;\n            inp.disabled = true;\n            /* only place the image once the URL actually loads, so the user\n               gets a working preview instead of a broken-image icon */\n            const probe = new Image();\n            probe.onload = () => this.replacePlaceholderWithImage(ph, url, '');\n            probe.onerror = () => {\n                ok.disabled = false;\n                inp.disabled = false;\n                inp.classList.add('err');\n                inp.focus();\n            };\n            probe.src = url;\n        };\n        ok.addEventListener('click', submit);\n        inp.addEventListener('input', () => inp.classList.remove('err'));\n        inp.addEventListener('keydown', (e) => {\n            if (e.key === 'Enter') {\n                e.preventDefault();\n                submit();\n            } else if (e.key === 'Escape') {\n                e.stopPropagation();\n                this.renderPhCtxButtons();\n            }\n        });\n        el.append(inp, ok);\n        this.positionImgPhCtx();\n        inp.focus();\n    }\n\n    private readImageFileInto(file: File, ph: HTMLElement): void {\n        if (ph.classList.contains('uploading')) return;\n        if (this.imageUploadHandler) {\n            this.uploadImageFile(file, ph);\n            return;\n        }\n        const fr = new FileReader();\n        fr.onload = () => {\n            if (this.ed.contains(ph)) this.replacePlaceholderWithImage(ph, fr.result as string, file.name.replace(/\"/g, ''));\n        };\n        fr.readAsDataURL(file);\n    }\n\n    /** Runs the host-supplied imageUploadHandler instead of inlining base64,\n     *  so apps can route the file to S3 / Azure Blob / their own server. */\n    private uploadImageFile(file: File, ph: HTMLElement): void {\n        const title = file.name.replace(/\"/g, '');\n        ph.classList.remove('upload-error');\n        ph.classList.add('uploading');\n        const span = ph.querySelector('span');\n        if (span) span.textContent = this.t('uploading');\n        this.imageUploadHandler!(file)\n            .then((url) => {\n                if (!this.ed.contains(ph)) return;\n                this.replacePlaceholderWithImage(ph, url, title);\n            })\n            .catch((err) => {\n                if (!this.ed.contains(ph)) return;\n                ph.classList.remove('uploading');\n                ph.classList.add('upload-error');\n                if (span) span.textContent = this.t('uploadfailed');\n                this.onImageUploadError?.(err, file);\n            });\n    }\n\n    private replacePlaceholderWithImage(ph: HTMLElement, src: string, title: string): void {\n        const img = document.createElement('img');\n        img.src = src;\n        img.alt = '';\n        if (title) img.title = title;\n        ph.replaceWith(img);\n        if (this.phActive === ph) this.clearImgPlaceholderSel();\n        this.refreshState();\n        this.onChange();\n    }\n\n    private positionImgPhCtx(): void {\n        if (this.phActive && !document.body.contains(this.phActive)) {\n            this.clearImgPlaceholderSel();\n            return;\n        }\n        if (!this.phActive || !this.phCtx) return;\n        const r = this.phActive.getBoundingClientRect();\n        const cw = this.phCtx.offsetWidth;\n        const ch = this.phCtx.offsetHeight;\n        let cx = r.left + scrollX + (r.width - cw) / 2;\n        cx = Math.max(8 + scrollX, Math.min(cx, scrollX + innerWidth - cw - 8));\n        let cy = r.bottom + scrollY + 8;\n        if (r.bottom + 8 + ch > innerHeight - 4) cy = Math.max(this.ctxMinTop(), r.top + scrollY - ch - 8);\n        this.phCtx.style.left = cx + 'px';\n        this.phCtx.style.top = cy + 'px';\n    }\n\n    /* ---------------------------------------------------------- video upload placeholder */\n    private pickVideo(): void {\n        this.vidInput.value = '';\n        this.vidInput.click();\n    }\n\n    private vidPhHTML(id?: string): string {\n        return `<div class=\"img-ph vid-ph\"${id ? ` id=\"${id}\"` : ''} contenteditable=\"false\">${IC.video}<span>${this.t('dropvideo')}</span></div>`;\n    }\n\n    private insertVideoPlaceholder(): void {\n        this.restoreSel();\n        const id = 'vid-ph-' + Date.now().toString(36) + Math.random().toString(36).slice(2, 6);\n        document.execCommand('insertHTML', false, this.vidPhHTML(id));\n        const ph = this.ed.querySelector('#' + id) as HTMLElement | null;\n        if (ph) {\n            ph.removeAttribute('id');\n            this.selectVphPlaceholder(ph);\n        }\n        this.onChange();\n    }\n\n    private clearVphPlaceholderSel(): void {\n        this.vphCtx?.remove();\n        this.vphCtx = null;\n        this.vphActive?.classList.remove('active');\n        this.vphActive = null;\n    }\n\n    private removeVphPlaceholder(): void {\n        const ph = this.vphActive;\n        if (!ph) return;\n        this.clearVphPlaceholderSel();\n        /* like the image variant: a placeholder inside a template block IS the\n           media slot — deleting it drops the slot, leaving a text-only block */\n        (ph.closest('.tpl-media') || ph).remove();\n        this.refreshState();\n        this.onChange();\n    }\n\n    private selectVphPlaceholder(ph: HTMLElement): void {\n        if (this.vphActive === ph) return;\n        this.clearVphPlaceholderSel();\n        this.vphActive = ph;\n        ph.classList.add('active');\n        this.vphCtx = document.createElement('div');\n        this.vphCtx.className = 'imgctx img-ph-ctx';\n        this.vphCtx.dir = this.dir();\n        document.body.appendChild(this.vphCtx);\n        this.renderVphCtxButtons();\n    }\n\n    private renderVphCtxButtons(): void {\n        const el = this.vphCtx;\n        if (!el) return;\n        el.innerHTML = '';\n        el.append(\n            this.ctxBtn(IC.uploadic, this.t('uploadvideo'), () => {\n                this.vphUploadTarget = this.vphActive;\n                this.pickVideo();\n            }),\n            this.ctxBtn(IC.link, this.t('videolink'), () => this.renderVphCtxUrlInput())\n        );\n        /* inside a template slot, offer switching the slot back to an image */\n        if (this.vphActive?.closest('.tpl-media')) {\n            el.append(this.ctxBtn(IC.image, this.t('quickimage'), () => this.swapPlaceholderKind('image')));\n        }\n        el.append(this.ctxSep(), this.ctxBtn(IC.trash, this.t('deletevideo'), () => this.removeVphPlaceholder()));\n        this.positionVphCtx();\n    }\n\n    private renderVphCtxUrlInput(): void {\n        const el = this.vphCtx;\n        if (!el) return;\n        el.innerHTML = '';\n        const inp = document.createElement('input');\n        inp.type = 'url';\n        inp.className = 'urlinp';\n        inp.placeholder = this.t('videourlph');\n        const ok = document.createElement('button');\n        ok.type = 'button';\n        ok.className = 'txtbtn';\n        ok.textContent = this.t('insertvideo');\n        const submit = () => {\n            const url = inp.value.trim();\n            const ph = this.vphActive;\n            if (!ph) return;\n            if (!/^(https?:|data:video\\/|blob:)/i.test(url)) {\n                inp.classList.add('err');\n                inp.focus();\n                return;\n            }\n            /* a page URL from a known video host can't play in a <video> tag —\n               swap in the host's iframe player instead of probing it */\n            const embed = this.videoEmbedUrl(url);\n            if (embed) {\n                this.replacePlaceholderWithEmbed(ph, embed);\n                return;\n            }\n            ok.disabled = true;\n            inp.disabled = true;\n            /* only place the video once its metadata actually loads, so the user\n               gets a working preview instead of a broken player */\n            const probe = document.createElement('video');\n            probe.preload = 'metadata';\n            probe.onloadedmetadata = () => this.replacePlaceholderWithVideo(ph, url, '');\n            probe.onerror = () => {\n                ok.disabled = false;\n                inp.disabled = false;\n                inp.classList.add('err');\n                inp.focus();\n            };\n            probe.src = url;\n        };\n        ok.addEventListener('click', submit);\n        inp.addEventListener('input', () => inp.classList.remove('err'));\n        inp.addEventListener('keydown', (e) => {\n            if (e.key === 'Enter') {\n                e.preventDefault();\n                submit();\n            } else if (e.key === 'Escape') {\n                e.stopPropagation();\n                this.renderVphCtxButtons();\n            }\n        });\n        el.append(inp, ok);\n        this.positionVphCtx();\n        inp.focus();\n    }\n\n    private readVideoFileInto(file: File, ph: HTMLElement): void {\n        if (ph.classList.contains('uploading')) return;\n        if (this.videoUploadHandler) {\n            this.uploadVideoFile(file, ph);\n            return;\n        }\n        const fr = new FileReader();\n        fr.onload = () => {\n            if (this.ed.contains(ph)) this.replacePlaceholderWithVideo(ph, fr.result as string, file.name.replace(/\"/g, ''));\n        };\n        fr.readAsDataURL(file);\n    }\n\n    /** Runs the host-supplied videoUploadHandler instead of inlining base64,\n     *  so apps can route the file to S3 / Azure Blob / their own server. */\n    private uploadVideoFile(file: File, ph: HTMLElement): void {\n        const title = file.name.replace(/\"/g, '');\n        ph.classList.remove('upload-error');\n        ph.classList.add('uploading');\n        const span = ph.querySelector('span');\n        if (span) span.textContent = this.t('uploading');\n        this.videoUploadHandler!(file)\n            .then((url) => {\n                if (!this.ed.contains(ph)) return;\n                this.replacePlaceholderWithVideo(ph, url, title);\n            })\n            .catch((err) => {\n                if (!this.ed.contains(ph)) return;\n                ph.classList.remove('uploading');\n                ph.classList.add('upload-error');\n                if (span) span.textContent = this.t('uploadfailed');\n                this.onVideoUploadError?.(err, file);\n            });\n    }\n\n    private replacePlaceholderWithVideo(ph: HTMLElement, src: string, title: string): void {\n        const vid = document.createElement('video');\n        vid.controls = true;\n        vid.src = src;\n        if (title) vid.title = title;\n        ph.replaceWith(vid);\n        if (this.vphActive === ph) this.clearVphPlaceholderSel();\n        this.refreshState();\n        this.onChange();\n    }\n\n    /** Swaps a video placeholder for a hosted player iframe (YouTube & co.). */\n    private replacePlaceholderWithEmbed(ph: HTMLElement, embedUrl: string): void {\n        const tmp = document.createElement('div');\n        tmp.innerHTML = this.videoEmbedHTML(embedUrl);\n        ph.replaceWith(tmp.firstElementChild as HTMLElement);\n        if (this.vphActive === ph) this.clearVphPlaceholderSel();\n        this.refreshState();\n        this.onChange();\n    }\n\n    private positionVphCtx(): void {\n        if (this.vphActive && !document.body.contains(this.vphActive)) {\n            this.clearVphPlaceholderSel();\n            return;\n        }\n        if (!this.vphActive || !this.vphCtx) return;\n        const r = this.vphActive.getBoundingClientRect();\n        const cw = this.vphCtx.offsetWidth;\n        const ch = this.vphCtx.offsetHeight;\n        let cx = r.left + scrollX + (r.width - cw) / 2;\n        cx = Math.max(8 + scrollX, Math.min(cx, scrollX + innerWidth - cw - 8));\n        let cy = r.bottom + scrollY + 8;\n        if (r.bottom + 8 + ch > innerHeight - 4) cy = Math.max(this.ctxMinTop(), r.top + scrollY - ch - 8);\n        this.vphCtx.style.left = cx + 'px';\n        this.vphCtx.style.top = cy + 'px';\n    }\n\n    /* ---------------------------------------------------------- video toolbar (post-insert) */\n    private cancelVidHide(): void {\n        if (this.vidHideTimer != null) {\n            window.clearTimeout(this.vidHideTimer);\n            this.vidHideTimer = null;\n        }\n    }\n\n    private clearVidHandles(): void {\n        this.cancelVidHide();\n        this.vidCtx?.remove();\n        this.vidCtx = null;\n        this.vidActive?.classList.remove('vid-selected');\n        this.vidActive = null;\n    }\n\n    private selectVideo(vid: HTMLElement): void {\n        if (this.vidActive === vid) return;\n        this.clearVidHandles();\n        this.vidActive = vid;\n        vid.classList.add('vid-selected');\n        this.vidCtx = this.buildVideoCtxToolbar(vid);\n        this.positionVidCtx();\n    }\n\n    private buildVideoCtxToolbar(vid: HTMLElement): HTMLElement {\n        const el = document.createElement('div');\n        el.className = 'imgctx';\n        el.dir = this.dir();\n        const rebuild = () => {\n            const rebuilt = this.buildVideoCtxToolbar(vid);\n            this.vidCtx?.replaceWith(rebuilt);\n            this.vidCtx = rebuilt;\n            this.positionVidCtx();\n        };\n        const align = (a: 'left' | 'center' | 'right') => {\n            this.setVideoAlign(vid, a);\n            rebuild();\n        };\n        const isLeft = vid.style.float === 'left';\n        const isRight = vid.style.float === 'right';\n        const isCenter = !isLeft && !isRight && vid.style.marginLeft === 'auto' && vid.style.marginRight === 'auto';\n        const mkBtn = (icon: string, tip: string, on: boolean, fn: () => void) => {\n            const b = this.ctxBtn(icon, tip, fn);\n            b.classList.toggle('on', on);\n            return b;\n        };\n        el.append(\n            mkBtn(IC.alignleft, this.t('alignleft'), isLeft, () => align('left')),\n            mkBtn(IC.aligncenter, this.t('aligncenter'), isCenter, () => align('center')),\n            mkBtn(IC.alignright, this.t('alignright'), isRight, () => align('right')),\n            this.ctxSep(),\n            mkBtn(IC.trash, this.t('deletevideo'), false, () => {\n                vid.remove();\n                this.clearVidHandles();\n                this.onChange();\n            })\n        );\n        el.addEventListener('mousedown', (e) => e.preventDefault());\n        el.addEventListener('mouseenter', () => this.cancelVidHide());\n        el.addEventListener('mouseleave', () => {\n            this.cancelVidHide();\n            this.vidHideTimer = window.setTimeout(() => this.clearVidHandles(), 250);\n        });\n        document.body.appendChild(el);\n        return el;\n    }\n\n    private setVideoAlign(vid: HTMLElement, align: 'left' | 'center' | 'right'): void {\n        vid.style.float = '';\n        vid.style.display = '';\n        vid.style.marginLeft = '';\n        vid.style.marginRight = '';\n        vid.style.marginBottom = '';\n        if (align === 'left') {\n            vid.style.float = 'left';\n            vid.style.marginInlineEnd = '1em';\n            vid.style.marginBottom = '0.5em';\n        } else if (align === 'right') {\n            vid.style.float = 'right';\n            vid.style.marginInlineStart = '1em';\n            vid.style.marginBottom = '0.5em';\n        } else {\n            vid.style.display = 'block';\n            vid.style.marginLeft = 'auto';\n            vid.style.marginRight = 'auto';\n        }\n        this.onChange();\n    }\n\n    private positionVidCtx(): void {\n        if (!this.vidActive || !document.body.contains(this.vidActive)) {\n            this.clearVidHandles();\n            return;\n        }\n        const r = this.vidActive.getBoundingClientRect();\n        if (!this.vidCtx) return;\n        const cw = this.vidCtx.offsetWidth;\n        const ch = this.vidCtx.offsetHeight;\n        let cx = r.left + scrollX + (r.width - cw) / 2;\n        cx = Math.max(8 + scrollX, Math.min(cx, scrollX + innerWidth - cw - 8));\n        let cy = r.top + scrollY - ch - 8;\n        if (cy < this.ctxMinTop()) cy = r.bottom + scrollY + 8;\n        this.vidCtx.style.left = cx + 'px';\n        this.vidCtx.style.top = cy + 'px';\n    }\n\n    /* ---------------------------------------------------------- video dialog / embeds */\n    /** Maps a page URL from a known video host to its iframe player URL. Returns\n     *  null for anything else (e.g. direct .mp4 file URLs). */\n    private videoEmbedUrl(url: string): string | null {\n        let m = url.match(/^https?:\\/\\/(?:www\\.|m\\.)?youtube\\.com\\/watch\\?(?:[^\\s#]*[?&])?v=([\\w-]{5,})/i);\n        if (!m) m = url.match(/^https?:\\/\\/(?:www\\.)?(?:youtu\\.be|youtube\\.com\\/(?:embed|shorts|live))\\/([\\w-]{5,})/i);\n        if (m) return 'https://www.youtube.com/embed/' + m[1];\n        m = url.match(/^https?:\\/\\/(?:www\\.)?vimeo\\.com\\/(\\d+)/i);\n        if (m) return 'https://player.vimeo.com/video/' + m[1];\n        m = url.match(/^https?:\\/\\/(?:www\\.)?dailymotion\\.com\\/video\\/(\\w+)/i);\n        if (m) return 'https://www.dailymotion.com/embed/video/' + m[1];\n        return null;\n    }\n\n    private videoEmbedHTML(src: string, w = 560, h = 314): string {\n        return `<span class=\"video-embed\" contenteditable=\"false\"><iframe src=\"${src}\" width=\"${w}\" height=\"${h}\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe></span>`;\n    }\n\n    /** Insert/edit-video dialog with General (source/width/height), Embed (embed\n     *  code) and Advanced (alternative source, poster image) tabs. Hosted page\n     *  URLs (YouTube & co.) become iframe players; anything else becomes a\n     *  <video> tag. The General tab also offers the same upload path as before\n     *  (videoUploadHandler when configured, else inline base64). */\n    private videoDlg(): void {\n        this.saveSel();\n        let srcInp: HTMLInputElement;\n        let wInp: HTMLInputElement;\n        let hInp: HTMLInputElement;\n        let embedTa: HTMLTextAreaElement;\n        let altInp: HTMLInputElement;\n        let posterInp: HTMLInputElement;\n        const field = (labelKey: keyof I18nStrings, input: HTMLElement): HTMLElement => {\n            const f = document.createElement('div');\n            f.className = 'dfield';\n            const l = document.createElement('label');\n            l.textContent = this.t(labelKey);\n            f.append(l, input);\n            return f;\n        };\n        const urlInput = (): HTMLInputElement => {\n            const i = document.createElement('input');\n            i.type = 'url';\n            return i;\n        };\n        this.dialog(\n            this.t('videodlgttl'),\n            (body) => {\n                const tabs = document.createElement('div');\n                tabs.className = 'dtabs';\n                const panels: HTMLElement[] = [];\n                const mkTab = (labelKey: keyof I18nStrings, build: (p: HTMLElement) => void) => {\n                    const b = document.createElement('button');\n                    b.type = 'button';\n                    b.textContent = this.t(labelKey);\n                    const p = document.createElement('div');\n                    p.className = 'dtabpanel';\n                    build(p);\n                    const i = panels.length;\n                    panels.push(p);\n                    b.addEventListener('click', () => show(i));\n                    tabs.appendChild(b);\n                };\n                const show = (i: number) => {\n                    tabs.querySelectorAll('button').forEach((x, xi) => x.classList.toggle('on', xi === i));\n                    panels.forEach((x, xi) => (x.style.display = xi === i ? '' : 'none'));\n                };\n                mkTab('vidgeneral', (p) => {\n                    srcInp = urlInput();\n                    srcInp.placeholder = this.t('videourlph');\n                    const srcRow = document.createElement('div');\n                    srcRow.className = 'drow';\n                    const upBtn = document.createElement('button');\n                    upBtn.type = 'button';\n                    upBtn.className = 'txtbtn';\n                    upBtn.textContent = this.t('uploadvideo');\n                    const file = document.createElement('input');\n                    file.type = 'file';\n                    file.accept = this.options.videoFileTypes.join(',');\n                    file.style.display = 'none';\n                    upBtn.addEventListener('click', () => {\n                        file.value = '';\n                        file.click();\n                    });\n                    file.addEventListener('change', () => {\n                        const f = file.files?.[0];\n                        if (!f) return;\n                        upBtn.disabled = true;\n                        upBtn.textContent = this.t('uploading');\n                        const done = (url: string) => {\n                            srcInp.value = url;\n                            upBtn.disabled = false;\n                            upBtn.textContent = this.t('uploadvideo');\n                        };\n                        if (this.videoUploadHandler) {\n                            this.videoUploadHandler(f)\n                                .then(done)\n                                .catch((err) => {\n                                    upBtn.disabled = false;\n                                    upBtn.textContent = this.t('uploadfailed');\n                                    this.onVideoUploadError?.(err, f);\n                                });\n                        } else {\n                            const fr = new FileReader();\n                            fr.onload = () => done(fr.result as string);\n                            fr.readAsDataURL(f);\n                        }\n                    });\n                    srcRow.append(srcInp, upBtn, file);\n                    srcInp.style.flex = '1';\n                    p.appendChild(field('vidsource', srcRow));\n                    const dims = document.createElement('div');\n                    dims.className = 'drow';\n                    wInp = document.createElement('input');\n                    wInp.type = 'number';\n                    wInp.value = '560';\n                    hInp = document.createElement('input');\n                    hInp.type = 'number';\n                    hInp.value = '314';\n                    dims.append(field('tblwidth', wInp), field('tblheight', hInp));\n                    p.appendChild(dims);\n                });\n                mkTab('vidembed', (p) => {\n                    const hint = document.createElement('p');\n                    hint.textContent = this.t('vidembedhint');\n                    hint.style.cssText = 'margin:0 0 8px;color:#556;font-size:13.5px';\n                    embedTa = document.createElement('textarea');\n                    embedTa.style.cssText = 'width:100%;box-sizing:border-box;height:160px';\n                    p.append(hint, embedTa);\n                });\n                mkTab('vidadvanced', (p) => {\n                    altInp = urlInput();\n                    posterInp = urlInput();\n                    p.append(field('vidaltsource', altInp), field('vidposter', posterInp));\n                });\n                const wrap = document.createElement('div');\n                wrap.className = 'dtabbody';\n                panels.forEach((p) => wrap.appendChild(p));\n                body.append(tabs, wrap);\n                show(0);\n                setTimeout(() => srcInp.focus(), 0);\n            },\n            [\n                { label: this.t('cancel'), action: () => this.closeDlg() },\n                {\n                    label: this.t('save'),\n                    primary: true,\n                    action: () => {\n                        const embedCode = embedTa.value.trim();\n                        const src = srcInp.value.trim();\n                        const w = parseInt(wInp.value, 10) || 560;\n                        const h = parseInt(hInp.value, 10) || 314;\n                        this.closeDlg();\n                        if (!embedCode && !src) return;\n                        this.restoreSel();\n                        if (embedCode) {\n                            document.execCommand('insertHTML', false, `<span class=\"video-embed\" contenteditable=\"false\">${embedCode}</span>`);\n                            this.onChange();\n                            return;\n                        }\n                        const embed = this.videoEmbedUrl(src);\n                        if (embed) {\n                            document.execCommand('insertHTML', false, this.videoEmbedHTML(embed, w, h));\n                        } else {\n                            const alt = altInp.value.trim();\n                            const poster = posterInp.value.trim();\n                            document.execCommand(\n                                'insertHTML',\n                                false,\n                                `<video controls width=\"${w}\" height=\"${h}\"${poster ? ` poster=\"${this.escapeAttr(poster)}\"` : ''}>` +\n                                    `<source src=\"${this.escapeAttr(src)}\">${alt ? `<source src=\"${this.escapeAttr(alt)}\">` : ''}</video>`\n                            );\n                        }\n                        this.onChange();\n                    }\n                }\n            ]\n        );\n    }\n\n    private escapeAttr(s: string): string {\n        return s.replace(/&/g, '&amp;').replace(/\"/g, '&quot;');\n    }\n\n    private escHtml(s: string): string {\n        return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n    }\n\n    /* ---------------------------------------------------------- inline code & code samples */\n    /** The inline <code> run the caret sits in, if any (code blocks don't count). */\n    private closestInlineCode(): HTMLElement | null {\n        const s = window.getSelection();\n        const node = s && this.ed.contains(s.anchorNode) ? s.anchorNode : null;\n        if (!node) return null;\n        const el = node.nodeType === Node.ELEMENT_NODE ? (node as HTMLElement) : node.parentElement;\n        const code = el?.closest('code') as HTMLElement | null;\n        return code && this.ed.contains(code) && !code.closest('pre') ? code : null;\n    }\n\n    /** Wraps the selection in an inline <code> run, or unwraps the run the caret is\n     *  in. Selections spanning multiple blocks are left alone (a <code> can't wrap\n     *  across paragraphs without producing invalid markup). */\n    private toggleInlineCode(): void {\n        this.restoreSel();\n        const sel = window.getSelection();\n        if (!sel || !sel.rangeCount) return;\n        const existing = this.closestInlineCode();\n        if (existing) {\n            const first = existing.firstChild;\n            const last = existing.lastChild;\n            while (existing.firstChild) existing.parentNode!.insertBefore(existing.firstChild, existing);\n            existing.remove();\n            if (first && last) {\n                const r = document.createRange();\n                r.setStartBefore(first);\n                r.setEndAfter(last);\n                sel.removeAllRanges();\n                sel.addRange(r);\n            }\n        } else {\n            const range = sel.getRangeAt(0);\n            if (range.collapsed) return;\n            if (this.closestBlock(range.startContainer) !== this.closestBlock(range.endContainer)) return;\n            const code = document.createElement('code');\n            code.appendChild(range.extractContents());\n            range.insertNode(code);\n            const r = document.createRange();\n            r.selectNodeContents(code);\n            sel.removeAllRanges();\n            sel.addRange(r);\n        }\n        this.saveSel();\n        this.refreshState();\n        this.onChange();\n    }\n\n    /** Typing `snippet` converts to an inline <code> run the moment the closing\n     *  backtick is typed, so code can be marked up without reaching for the toolbar. */\n    private tryCodeTyping(e: KeyboardEvent): void {\n        const sel = window.getSelection();\n        if (!sel || !sel.isCollapsed || !sel.anchorNode) return;\n        const node = sel.anchorNode;\n        if (node.nodeType !== Node.TEXT_NODE || !this.ed.contains(node)) return;\n        if (node.parentElement?.closest('code, pre')) return;\n        const before = (node.textContent || '').slice(0, sel.anchorOffset);\n        const m = before.match(/(?:^|[^`])`([^`]+)$/);\n        if (!m) return;\n        const src = m[1];\n        if (/^\\s|\\s$/.test(src)) return;\n        e.preventDefault();\n        const range = document.createRange();\n        range.setStart(node, sel.anchorOffset - src.length - 1);\n        range.setEnd(node, sel.anchorOffset);\n        /* direct DOM instead of execCommand('insertHTML') — with styleWithCSS\n           active the browser rewrites a pasted <code> into a styled <span>,\n           losing the semantic tag */\n        range.deleteContents();\n        const code = document.createElement('code');\n        code.textContent = src;\n        range.insertNode(code);\n        const after = document.createRange();\n        after.setStartAfter(code);\n        after.collapse(true);\n        sel.removeAllRanges();\n        sel.addRange(after);\n        this.saveSel();\n        this.onChange();\n    }\n\n    /** Custom dropdown for dialog fields (a native <select> popup can't be styled):\n     *  a field-styled button showing the current choice that opens a floating,\n     *  scrollable option list. Read the current choice via `.value()`. */\n    private dlgSelect(options: [string, string][], selected: string): { el: HTMLElement; value: () => string } {\n        let value = selected;\n        const el = document.createElement('div');\n        el.className = 'dsel';\n        const btn = document.createElement('button');\n        btn.type = 'button';\n        btn.className = 'dsel-btn';\n        const lbl = document.createElement('span');\n        lbl.className = 'lbl';\n        lbl.textContent = options.find(([v]) => v === selected)?.[1] || '';\n        btn.append(lbl);\n        btn.insertAdjacentHTML('beforeend', IC.chev);\n        const list = document.createElement('div');\n        list.className = 'dsel-list';\n        options.forEach(([v, label]) => {\n            const o = document.createElement('button');\n            o.type = 'button';\n            o.textContent = label;\n            o.classList.toggle('on', v === value);\n            o.addEventListener('click', () => {\n                value = v;\n                lbl.textContent = label;\n                list.querySelectorAll('button').forEach((b) => b.classList.toggle('on', b === o));\n                el.classList.remove('open');\n                btn.focus();\n            });\n            list.appendChild(o);\n        });\n        btn.addEventListener('click', () => {\n            el.classList.toggle('open');\n            if (el.classList.contains('open')) (list.querySelector('.on') as HTMLElement | null)?.scrollIntoView({ block: 'nearest' });\n        });\n        el.addEventListener('focusout', (e) => {\n            if (!el.contains((e as FocusEvent).relatedTarget as Node)) el.classList.remove('open');\n        });\n        el.addEventListener('keydown', (e) => {\n            /* Escape closes the open list without closing the whole dialog */\n            if ((e as KeyboardEvent).key === 'Escape' && el.classList.contains('open')) {\n                e.stopPropagation();\n                el.classList.remove('open');\n                btn.focus();\n            }\n        });\n        el.append(btn, list);\n        return { el, value: () => value };\n    }\n\n    /** Insert/edit-code-sample dialog: language dropdown + monospace textarea to\n     *  paste or type code into. Inserts a non-editable <pre class=\"code-block\">\n     *  whose header shows the language; click the block to edit / copy / delete. */\n    private codeDlg(existing?: HTMLElement): void {\n        this.saveSel();\n        let langDd: { el: HTMLElement; value: () => string };\n        let ta: HTMLTextAreaElement;\n        this.dialog(\n            this.t('codedlgttl'),\n            (body) => {\n                const f = document.createElement('div');\n                f.className = 'dfield';\n                const l = document.createElement('label');\n                l.textContent = this.t('codelang');\n                langDd = this.dlgSelect(CODE_LANGS, existing?.dataset.lang || 'plain');\n                f.append(l, langDd.el);\n                ta = document.createElement('textarea');\n                ta.className = 'code-input';\n                ta.spellcheck = false;\n                ta.value = existing?.querySelector('code')?.textContent || '';\n                ta.placeholder = 'const answer = 42;';\n                body.append(f, ta);\n                setTimeout(() => ta.focus(), 0);\n            },\n            [\n                { label: this.t('cancel'), action: () => this.closeDlg() },\n                {\n                    label: this.t('save'),\n                    primary: true,\n                    action: () => {\n                        const src = ta.value.replace(/\\s+$/, '');\n                        const lang = langDd.value();\n                        const label = CODE_LANGS.find(([v]) => v === lang)?.[1] || lang;\n                        this.closeDlg();\n                        if (!src.trim()) return;\n                        if (existing) {\n                            existing.dataset.lang = lang;\n                            existing.setAttribute('data-lang-label', label);\n                            const codeEl = existing.querySelector('code') || existing;\n                            codeEl.textContent = src;\n                            this.clearCodeSel();\n                            this.onChange();\n                            return;\n                        }\n                        this.restoreSel();\n                        document.execCommand(\n                            'insertHTML',\n                            false,\n                            `<pre class=\"code-block\" contenteditable=\"false\" data-lang=\"${lang}\" data-lang-label=\"${this.escapeAttr(label)}\">` +\n                                `<code>${this.escHtml(src)}</code></pre><p><br></p>`\n                        );\n                        this.onChange();\n                    }\n                }\n            ]\n        );\n    }\n\n    private clearCodeSel(): void {\n        this.codeCtx?.remove();\n        this.codeCtx = null;\n        this.codeActive?.classList.remove('code-selected');\n        this.codeActive = null;\n    }\n\n    private selectCodeEl(el: HTMLElement): void {\n        if (this.codeActive === el) return;\n        this.clearCodeSel();\n        this.codeActive = el;\n        el.classList.add('code-selected');\n        this.codeCtx = this.buildCodeCtxToolbar(el);\n        this.positionCodeCtx();\n    }\n\n    private buildCodeCtxToolbar(el: HTMLElement): HTMLElement {\n        const ctx = document.createElement('div');\n        ctx.className = 'imgctx';\n        ctx.dir = this.dir();\n        ctx.append(\n            this.ctxBtn(IC.editic, this.t('editcode'), () => this.codeDlg(el)),\n            this.ctxBtn(IC.copyic, this.t('copycode'), () => this.copyCodeBlock(el)),\n            this.ctxSep(),\n            this.ctxBtn(IC.trash, this.t('deletecode'), () => {\n                el.remove();\n                this.clearCodeSel();\n                this.onChange();\n            })\n        );\n        ctx.addEventListener('mousedown', (e) => e.preventDefault());\n        document.body.appendChild(ctx);\n        return ctx;\n    }\n\n    private copyCodeBlock(el: HTMLElement): void {\n        const text = el.querySelector('code')?.textContent ?? el.textContent ?? '';\n        if (navigator.clipboard?.writeText) {\n            navigator.clipboard.writeText(text).catch(() => {});\n            return;\n        }\n        const ta = document.createElement('textarea');\n        ta.value = text;\n        document.body.appendChild(ta);\n        ta.select();\n        document.execCommand('copy');\n        ta.remove();\n    }\n\n    private positionCodeCtx(): void {\n        if (!this.codeActive || !document.body.contains(this.codeActive)) {\n            this.clearCodeSel();\n            return;\n        }\n        const r = this.codeActive.getBoundingClientRect();\n        if (!this.codeCtx) return;\n        const cw = this.codeCtx.offsetWidth;\n        const ch = this.codeCtx.offsetHeight;\n        let cx = r.left + scrollX + (r.width - cw) / 2;\n        cx = Math.max(8 + scrollX, Math.min(cx, scrollX + innerWidth - cw - 8));\n        let cy = r.top + scrollY - ch - 8;\n        if (cy < this.ctxMinTop()) cy = r.bottom + scrollY + 8;\n        this.codeCtx.style.left = cx + 'px';\n        this.codeCtx.style.top = cy + 'px';\n    }\n\n    /* ---------------------------------------------------------- templates */\n    private templateMenu(anchor: HTMLElement): void {\n        this.popup(anchor, (el) => this.buildTemplatePickInto(el));\n    }\n\n    /** Miniature div-based mockup of a layout, mirroring what the block looks\n        like in the editor: grey box = image slot, bars = heading/paragraph. */\n    private tplPreviewHTML(layout: TplLayout): string {\n        const img = '<span class=\"pv-img\"></span>';\n        const head = '<span class=\"pv-h\"></span>';\n        const line = (w: number) => `<span class=\"pv-l\" style=\"width:${w}%\"></span>`;\n        const col = (inner: string) => `<span class=\"pv-col\">${inner}</span>`;\n        const row = (inner: string) => `<span class=\"pv-row\">${inner}</span>`;\n        const textCol = col(head + line(100) + line(88));\n        if (layout === 'img-left')\n            return `<span class=\"pv\">${row(img + textCol)}${line(100)}${line(72)}</span>`;\n        if (layout === 'img-right')\n            return `<span class=\"pv\">${row(textCol + img)}${line(100)}${line(72)}</span>`;\n        if (layout === 'img-top')\n            return `<span class=\"pv pv-c\">${img}${head}${line(100)}${line(72)}</span>`;\n        return `<span class=\"pv pv-c\">${head}${line(100)}${line(72)}${img}</span>`;\n    }\n\n    private buildTemplatePickInto(el: HTMLElement, after?: () => void): void {\n        const wrap = document.createElement('div');\n        wrap.className = 'tplpick';\n        TPL_LAYOUTS.forEach((layout) => {\n            const tile = document.createElement('button');\n            tile.type = 'button';\n            tile.className = 'tpltile';\n            tile.title = this.t(TPL_LABEL[layout]);\n            tile.innerHTML = this.tplPreviewHTML(layout) + `<span class=\"tpllbl\">${this.t(TPL_LABEL[layout])}</span>`;\n            tile.addEventListener('click', () => {\n                this.closePop();\n                this.insertTemplate(layout);\n                after?.();\n            });\n            wrap.appendChild(tile);\n        });\n        el.appendChild(wrap);\n    }\n\n    private insertTemplate(layout: TplLayout): void {\n        this.restoreSel();\n        const media = `<div class=\"tpl-media\" contenteditable=\"false\">${this.imgPhHTML()}</div>`;\n        const text = `<div class=\"tpl-text\"><h2>${this.t('heading')}</h2><p>${this.t('para')}</p></div>`;\n        /* text-above-image layout keeps DOM order = visual order so the caret\n           travels naturally; every other layout has the media slot first */\n        const inner = layout === 'img-center' ? text + media : media + text;\n        document.execCommand('insertHTML', false, `<div class=\"tpl tpl-${layout}\">${inner}</div><p><br></p>`);\n        this.saveSel();\n        this.onChange();\n    }\n\n    private clearTplSel(): void {\n        this.tplCtx?.remove();\n        this.tplCtx = null;\n        this.tplActive?.classList.remove('tpl-selected');\n        this.tplActive = null;\n    }\n\n    private selectTemplate(tpl: HTMLElement): void {\n        if (this.tplActive === tpl) return;\n        this.clearTplSel();\n        this.tplActive = tpl;\n        tpl.classList.add('tpl-selected');\n        this.tplCtx = document.createElement('div');\n        this.tplCtx.className = 'imgctx tplctx';\n        this.tplCtx.dir = this.dir();\n        document.body.appendChild(this.tplCtx);\n        this.renderTplCtxButtons();\n    }\n\n    private renderTplCtxButtons(): void {\n        const el = this.tplCtx;\n        const tpl = this.tplActive;\n        if (!el || !tpl) return;\n        el.innerHTML = '';\n        TPL_LAYOUTS.forEach((layout) => {\n            const b = this.ctxBtn(TPL_ICON[layout], this.t(TPL_LABEL[layout]), () => this.setTplLayout(layout));\n            b.classList.toggle('on', tpl.classList.contains('tpl-' + layout));\n            el.appendChild(b);\n        });\n        el.append(this.ctxSep(), this.ctxBtn(IC.trash, this.t('deltemplate'), () => this.removeTemplate()));\n        this.positionTplCtx();\n    }\n\n    private setTplLayout(layout: TplLayout): void {\n        const tpl = this.tplActive;\n        if (!tpl) return;\n        TPL_LAYOUTS.forEach((l) => tpl.classList.remove('tpl-' + l));\n        tpl.classList.add('tpl-' + layout);\n        /* keep DOM order = visual order (see insertTemplate) */\n        const media = tpl.querySelector(':scope > .tpl-media');\n        const text = tpl.querySelector(':scope > .tpl-text');\n        if (media && text) {\n            if (layout === 'img-center') tpl.appendChild(media);\n            else tpl.insertBefore(media, text);\n        }\n        this.renderTplCtxButtons();\n        this.positionImgPhCtx();\n        this.positionImageHandles();\n        this.onChange();\n    }\n\n    private removeTemplate(): void {\n        const tpl = this.tplActive;\n        if (!tpl) return;\n        this.clearTplSel();\n        if (this.phActive && tpl.contains(this.phActive)) this.clearImgPlaceholderSel();\n        if (this.imgActive && tpl.contains(this.imgActive)) this.clearImageHandles();\n        tpl.remove();\n        this.refreshState();\n        this.onChange();\n    }\n\n    private positionTplCtx(): void {\n        if (this.tplActive && !document.body.contains(this.tplActive)) {\n            this.clearTplSel();\n            return;\n        }\n        if (!this.tplActive || !this.tplCtx) return;\n        const r = this.tplActive.getBoundingClientRect();\n        const cw = this.tplCtx.offsetWidth;\n        const ch = this.tplCtx.offsetHeight;\n        let cx = r.left + scrollX + (r.width - cw) / 2;\n        cx = Math.max(8 + scrollX, Math.min(cx, scrollX + innerWidth - cw - 8));\n        let cy = r.top + scrollY - ch - 8;\n        if (cy < this.ctxMinTop()) cy = r.bottom + scrollY + 8;\n        this.tplCtx.style.left = cx + 'px';\n        this.tplCtx.style.top = cy + 'px';\n    }\n\n    private pickWordDoc(): void {\n        this.docInput.value = '';\n        this.docInput.click();\n    }\n\n    /* ---------------------------------------------------------- fullscreen */\n    private toggleFullscreen(): void {\n        this.shell.classList.toggle('fullscreen');\n        const b = this.toolbar.querySelector('[data-id=fullscreen]') as HTMLElement | null;\n        b?.classList.toggle('on', this.shell.classList.contains('fullscreen'));\n        this.positionTableHandles();\n    }\n\n    /* ---------------------------------------------------------- table resize */\n    private clearTableHandles(): void {\n        this.tblCorner?.remove();\n        this.tblCorner = null;\n        this.tblColBars.forEach((b) => b.remove());\n        this.tblColBars = [];\n        this.tblCtx?.remove();\n        this.tblCtx = null;\n        this.tblCellMark?.remove();\n        this.tblCellMark = null;\n        this.tblOpMark?.remove();\n        this.tblOpMark = null;\n        this.tblOpMarkKind = null;\n        this.tblActive?.classList.remove('tbl-selected');\n        this.tblActive = null;\n    }\n\n    /** Blue outline around the cell that holds the caret, so it is clear\n        which cell / row / column the table operations will target. */\n    private positionCellMarker(): void {\n        if (!this.tblCellMark) return;\n        const cell = this.currentCell();\n        if (!cell || !this.tblActive || cell.closest('table') !== this.tblActive) {\n            this.tblCellMark.style.display = 'none';\n            return;\n        }\n        const r = cell.getBoundingClientRect();\n        this.tblCellMark.style.display = 'block';\n        this.tblCellMark.style.left = r.left + scrollX + 'px';\n        this.tblCellMark.style.top = r.top + scrollY + 'px';\n        this.tblCellMark.style.width = r.width + 'px';\n        this.tblCellMark.style.height = r.height + 'px';\n    }\n\n    /** Dashed highlight over the whole row / column an operation targets,\n        shown while its button or menu item is hovered. */\n    private setOpTarget(kind: 'row' | 'col' | null): void {\n        this.tblOpMarkKind = kind;\n        this.positionOpMark();\n    }\n\n    private positionOpMark(): void {\n        const kind = this.tblOpMarkKind;\n        const cell = kind ? this.currentCell() : null;\n        if (!kind || !cell || !this.tblActive || cell.closest('table') !== this.tblActive) {\n            this.tblOpMark?.remove();\n            this.tblOpMark = null;\n            return;\n        }\n        if (!this.tblOpMark) {\n            this.tblOpMark = document.createElement('div');\n            this.tblOpMark.className = 'tbl-opmark';\n            document.body.appendChild(this.tblOpMark);\n        }\n        const tr = this.tblActive.getBoundingClientRect();\n        const cr = cell.getBoundingClientRect();\n        const rr = (cell.parentElement as HTMLElement).getBoundingClientRect();\n        const left = kind === 'row' ? rr.left : cr.left;\n        const top = kind === 'row' ? rr.top : tr.top;\n        const width = kind === 'row' ? rr.width : cr.width;\n        const height = kind === 'row' ? rr.height : tr.height;\n        this.tblOpMark.style.left = left + scrollX + 'px';\n        this.tblOpMark.style.top = top + scrollY + 'px';\n        this.tblOpMark.style.width = width + 'px';\n        this.tblOpMark.style.height = height + 'px';\n    }\n\n    /** Lowest allowed top for floating context toolbars — keeps them from\n        covering the editor menubar/toolbar when the target sits on the first line. */\n    private ctxMinTop(): number {\n        return Math.max(scrollY + 4, this.ed.getBoundingClientRect().top + scrollY - 2);\n    }\n\n    private ctxBtn(icon: string, tip: string, fn: () => void, id?: string): HTMLButtonElement {\n        const b = document.createElement('button');\n        b.type = 'button';\n        b.title = tip;\n        b.innerHTML = icon;\n        if (id) b.dataset.id = id;\n        b.addEventListener('mousedown', (e) => e.preventDefault());\n        b.addEventListener('click', fn);\n        return b;\n    }\n\n    private ctxSep(): HTMLElement {\n        const s = document.createElement('div');\n        s.className = 'sep';\n        return s;\n    }\n\n    private buildTableCtxToolbar(): HTMLElement {\n        const el = document.createElement('div');\n        el.className = 'tblctx';\n        el.dir = this.dir();\n        /* hovering a row/column button highlights the row/column it targets */\n        const hl = (b: HTMLButtonElement, kind: 'row' | 'col'): HTMLButtonElement => {\n            b.addEventListener('mouseenter', () => this.setOpTarget(kind));\n            b.addEventListener('mouseleave', () => this.setOpTarget(null));\n            return b;\n        };\n        const fillBtn = this.ctxBtn(IC.palette, this.t('cellbg'), () => this.cellFillMenu(fillBtn));\n        el.append(\n            hl(this.ctxBtn(IC.rowbefore, this.t('rowabove'), () => this.tableOp('rowabove')), 'row'),\n            hl(this.ctxBtn(IC.rowafter, this.t('rowbelow'), () => this.tableOp('rowbelow')), 'row'),\n            hl(this.ctxBtn(IC.moverowup, this.t('moverowup'), () => this.tableMove('rowup')), 'row'),\n            hl(this.ctxBtn(IC.moverowdown, this.t('moverowdown'), () => this.tableMove('rowdown')), 'row'),\n            hl(this.ctxBtn(IC.rowdelete, this.t('delrow'), () => this.tableOp('delrow')), 'row'),\n            this.ctxSep(),\n            hl(this.ctxBtn(IC.colbefore, this.t('colbefore'), () => this.tableOp('colbefore')), 'col'),\n            hl(this.ctxBtn(IC.colafter, this.t('colafter'), () => this.tableOp('colafter')), 'col'),\n            hl(this.ctxBtn(IC.movecolleft, this.t('movecolleft'), () => this.tableMove('colleft')), 'col'),\n            hl(this.ctxBtn(IC.movecolright, this.t('movecolright'), () => this.tableMove('colright')), 'col'),\n            hl(this.ctxBtn(IC.coldelete, this.t('delcol'), () => this.tableOp('delcol')), 'col'),\n            this.ctxSep(),\n            this.ctxBtn(IC.alignleft, this.t('tblalignleft'), () => this.alignTable('left')),\n            this.ctxBtn(IC.aligncenter, this.t('tblaligncenter'), () => this.alignTable('center')),\n            this.ctxBtn(IC.alignright, this.t('tblalignright'), () => this.alignTable('right')),\n            this.ctxSep(),\n            fillBtn,\n            this.ctxBtn(IC.trash, this.t('deltable'), () => this.tableOp('deltable')),\n            this.ctxBtn(IC.tableic, this.t('tablepropsttl'), () => this.tablePropsDlg())\n        );\n        document.body.appendChild(el);\n        return el;\n    }\n\n    private positionTableHandles(): void {\n        if (!this.tblActive || !document.body.contains(this.tblActive)) {\n            this.clearTableHandles();\n            return;\n        }\n        const rtl = this.ed.getAttribute('dir') === 'rtl';\n        const r = this.tblActive.getBoundingClientRect();\n        const top = r.top + scrollY;\n        const left = r.left + scrollX;\n        const right = r.right + scrollX;\n        const bottom = r.bottom + scrollY;\n        if (this.tblCorner) {\n            this.tblCorner.style.top = bottom - 5 + 'px';\n            this.tblCorner.style.left = (rtl ? left - 5 : right - 5) + 'px';\n            this.tblCorner.style.cursor = rtl ? 'nesw-resize' : 'nwse-resize';\n        }\n        if (this.tblCtx) {\n            const cw = this.tblCtx.offsetWidth;\n            const ch = this.tblCtx.offsetHeight;\n            let cx = left + (right - left) / 2 - cw / 2;\n            cx = Math.max(8 + scrollX, Math.min(cx, scrollX + innerWidth - cw - 8));\n            let cy = top - ch - 8;\n            if (cy < this.ctxMinTop()) cy = bottom + 8;\n            this.tblCtx.style.left = cx + 'px';\n            this.tblCtx.style.top = cy + 'px';\n        }\n        this.tblColBars.forEach((b) => b.remove());\n        this.tblColBars = [];\n        const row = this.tblActive.rows[0];\n        if (row) {\n            for (let i = 0; i < row.cells.length - 1; i++) {\n                const rA = row.cells[i].getBoundingClientRect();\n                const boundaryX = (rtl ? rA.left : rA.right) + scrollX;\n                const bar = document.createElement('div');\n                bar.className = 'tbl-colbar';\n                bar.style.top = top + 'px';\n                bar.style.left = boundaryX + 'px';\n                bar.style.height = bottom - top + 'px';\n                document.body.appendChild(bar);\n                bar.addEventListener('mousedown', (e) => this.startColBarDrag(e, i));\n                this.tblColBars.push(bar);\n            }\n        }\n        this.positionCellMarker();\n        this.positionOpMark();\n    }\n\n    private selectTableForResize(table: HTMLTableElement): void {\n        if (this.tblActive === table) return;\n        this.clearTableHandles();\n        this.tblActive = table;\n        table.classList.add('tbl-selected');\n        this.tblCorner = document.createElement('div');\n        this.tblCorner.className = 'tbl-handle';\n        document.body.appendChild(this.tblCorner);\n        this.tblCorner.addEventListener('mousedown', (e) => this.startTableCornerDrag(e));\n        this.tblCellMark = document.createElement('div');\n        this.tblCellMark.className = 'tbl-cellmark';\n        this.tblCellMark.style.display = 'none';\n        document.body.appendChild(this.tblCellMark);\n        this.tblCtx = this.buildTableCtxToolbar();\n        this.positionTableHandles();\n    }\n\n    private withNoTextSelect(fn: (restore: () => void) => void): void {\n        const prev = document.body.style.userSelect;\n        document.body.style.userSelect = 'none';\n        fn(() => {\n            document.body.style.userSelect = prev;\n        });\n    }\n\n    private startTableCornerDrag(e: MouseEvent): void {\n        e.preventDefault();\n        const table = this.tblActive;\n        if (!table) return;\n        const rtl = this.ed.getAttribute('dir') === 'rtl';\n        const startX = e.clientX;\n        const startW = table.getBoundingClientRect().width;\n        table.style.tableLayout = table.style.tableLayout || 'fixed';\n        this.withNoTextSelect((restore) => {\n            const mv = (ev: MouseEvent) => {\n                const dx = rtl ? -(ev.clientX - startX) : ev.clientX - startX;\n                table.style.width = Math.max(60, Math.round(startW + dx)) + 'px';\n                this.positionTableHandles();\n            };\n            const up = () => {\n                window.removeEventListener('mousemove', mv);\n                window.removeEventListener('mouseup', up);\n                restore();\n                this.onChange();\n            };\n            window.addEventListener('mousemove', mv);\n            window.addEventListener('mouseup', up);\n        });\n    }\n\n    private startColBarDrag(e: MouseEvent, i: number): void {\n        e.preventDefault();\n        e.stopPropagation();\n        const table = this.tblActive;\n        if (!table) return;\n        const rtl = this.ed.getAttribute('dir') === 'rtl';\n        const rows = Array.from(table.rows);\n        const colA = rows.map((r) => r.cells[i]).filter(Boolean) as HTMLTableCellElement[];\n        const colB = rows.map((r) => r.cells[i + 1]).filter(Boolean) as HTMLTableCellElement[];\n        if (!colA.length || !colB.length) return;\n        const startX = e.clientX;\n        const wA = colA[0].getBoundingClientRect().width;\n        const wB = colB[0].getBoundingClientRect().width;\n        table.style.tableLayout = 'fixed';\n        this.withNoTextSelect((restore) => {\n            const mv = (ev: MouseEvent) => {\n                const dx = (rtl ? -1 : 1) * (ev.clientX - startX);\n                colA.forEach((c) => (c.style.width = Math.max(24, Math.round(wA + dx)) + 'px'));\n                colB.forEach((c) => (c.style.width = Math.max(24, Math.round(wB - dx)) + 'px'));\n                this.positionTableHandles();\n            };\n            const up = () => {\n                window.removeEventListener('mousemove', mv);\n                window.removeEventListener('mouseup', up);\n                restore();\n                this.onChange();\n            };\n            window.addEventListener('mousemove', mv);\n            window.addEventListener('mouseup', up);\n        });\n    }\n\n    /* ---------------------------------------------------------- image toolbar / resize */\n    private cancelImgHide(): void {\n        if (this.imgHideTimer != null) {\n            window.clearTimeout(this.imgHideTimer);\n            this.imgHideTimer = null;\n        }\n    }\n\n    private scheduleImgHide(): void {\n        this.cancelImgHide();\n        this.imgHideTimer = window.setTimeout(() => this.clearImageHandles(), 250);\n    }\n\n    private clearImageHandles(): void {\n        this.cancelImgHide();\n        this.imgHandles.forEach((h) => h.remove());\n        this.imgHandles = [];\n        this.imgCtx?.remove();\n        this.imgCtx = null;\n        this.imgActive?.classList.remove('img-selected');\n        this.imgActive = null;\n    }\n\n    private selectImage(img: HTMLImageElement): void {\n        if (this.imgActive === img) return;\n        this.clearImageHandles();\n        this.imgActive = img;\n        img.classList.add('img-selected');\n        this.imgHandles = IMG_CORNERS.map((corner) => {\n            const h = document.createElement('div');\n            h.className = 'img-handle img-handle-' + corner;\n            h.dataset.corner = corner;\n            h.addEventListener('mousedown', (e) => this.startImageResizeDrag(e, corner));\n            h.addEventListener('mouseenter', () => this.cancelImgHide());\n            h.addEventListener('mouseleave', () => this.scheduleImgHide());\n            document.body.appendChild(h);\n            return h;\n        });\n        this.imgCtx = this.buildImageCtxToolbar(img);\n        this.positionImageHandles();\n    }\n\n    private buildImageCtxToolbar(img: HTMLImageElement): HTMLElement {\n        const el = document.createElement('div');\n        el.className = 'imgctx';\n        el.dir = this.dir();\n        const rebuild = () => {\n            const rebuilt = this.buildImageCtxToolbar(img);\n            this.imgCtx?.replaceWith(rebuilt);\n            this.imgCtx = rebuilt;\n            this.positionImageHandles();\n        };\n        const align = (a: 'left' | 'center' | 'right') => {\n            this.setImageAlign(img, a);\n            rebuild();\n        };\n        const isLeft = img.style.float === 'left';\n        const isRight = img.style.float === 'right';\n        const isCenter = !isLeft && !isRight && img.style.marginLeft === 'auto' && img.style.marginRight === 'auto';\n        const mkBtn = (icon: string, tip: string, on: boolean, fn: () => void) => {\n            const b = this.ctxBtn(icon, tip, fn);\n            b.classList.toggle('on', on);\n            return b;\n        };\n        el.append(\n            mkBtn(IC.alignleft, this.t('alignleft'), isLeft, () => align('left')),\n            mkBtn(IC.aligncenter, this.t('aligncenter'), isCenter, () => align('center')),\n            mkBtn(IC.alignright, this.t('alignright'), isRight, () => align('right')),\n            this.ctxSep(),\n            mkBtn(IC.rotateleft, this.t('rotateleft'), false, () => {\n                this.rotateImage(img, -90);\n                rebuild();\n            }),\n            mkBtn(IC.rotateright, this.t('rotateright'), false, () => {\n                this.rotateImage(img, 90);\n                rebuild();\n            }),\n            this.ctxSep(),\n            mkBtn(IC.fliphorizontal, this.t('fliphorizontal'), img.dataset.flipx === '1', () => {\n                this.flipImage(img, 'x');\n                rebuild();\n            }),\n            mkBtn(IC.flipvertical, this.t('flipvertical'), img.dataset.flipy === '1', () => {\n                this.flipImage(img, 'y');\n                rebuild();\n            }),\n            this.ctxSep(),\n            mkBtn(IC.trash, this.t('deleteimg'), false, () => {\n                /* inside a template media slot the image swaps back to an\n                   upload placeholder so the slot is not lost */\n                const slot = img.closest('.tpl-media');\n                if (slot && this.ed.contains(slot)) img.outerHTML = this.imgPhHTML();\n                else img.remove();\n                this.clearImageHandles();\n                this.onChange();\n            })\n        );\n        el.addEventListener('mousedown', (e) => e.preventDefault());\n        el.addEventListener('mouseenter', () => this.cancelImgHide());\n        el.addEventListener('mouseleave', () => this.scheduleImgHide());\n        document.body.appendChild(el);\n        return el;\n    }\n\n    private setImageAlign(img: HTMLImageElement, align: 'left' | 'center' | 'right'): void {\n        img.style.float = '';\n        img.style.display = '';\n        img.style.marginLeft = '';\n        img.style.marginRight = '';\n        img.style.marginBottom = '';\n        if (align === 'left') {\n            img.style.float = 'left';\n            img.style.marginInlineEnd = '1em';\n            img.style.marginBottom = '0.5em';\n        } else if (align === 'right') {\n            img.style.float = 'right';\n            img.style.marginInlineStart = '1em';\n            img.style.marginBottom = '0.5em';\n        } else {\n            img.style.display = 'block';\n            img.style.marginLeft = 'auto';\n            img.style.marginRight = 'auto';\n        }\n        this.onChange();\n    }\n\n    private applyImgTransform(img: HTMLImageElement): void {\n        const rot = parseInt(img.dataset.rotate || '0', 10);\n        const fx = img.dataset.flipx === '1' ? -1 : 1;\n        const fy = img.dataset.flipy === '1' ? -1 : 1;\n        img.style.transform = rot || fx < 0 || fy < 0 ? `rotate(${rot}deg) scale(${fx}, ${fy})` : '';\n    }\n\n    private rotateImage(img: HTMLImageElement, delta: number): void {\n        const rot = (((parseInt(img.dataset.rotate || '0', 10) + delta) % 360) + 360) % 360;\n        img.dataset.rotate = String(rot);\n        this.applyImgTransform(img);\n        this.positionImageHandles();\n        this.onChange();\n    }\n\n    private flipImage(img: HTMLImageElement, axis: 'x' | 'y'): void {\n        const key = axis === 'x' ? 'flipx' : 'flipy';\n        img.dataset[key] = img.dataset[key] === '1' ? '' : '1';\n        this.applyImgTransform(img);\n        this.positionImageHandles();\n        this.onChange();\n    }\n\n    private positionImageHandles(): void {\n        if (!this.imgActive || !document.body.contains(this.imgActive)) {\n            this.clearImageHandles();\n            return;\n        }\n        const r = this.imgActive.getBoundingClientRect();\n        const top = r.top + scrollY;\n        const left = r.left + scrollX;\n        const right = r.right + scrollX;\n        const bottom = r.bottom + scrollY;\n        const cornerPos: Record<ImgCorner, [number, number]> = {\n            nw: [left, top],\n            ne: [right, top],\n            sw: [left, bottom],\n            se: [right, bottom]\n        };\n        this.imgHandles.forEach((h) => {\n            const [x, y] = cornerPos[h.dataset.corner as ImgCorner];\n            h.style.left = x - 5 + 'px';\n            h.style.top = y - 5 + 'px';\n        });\n        if (this.imgCtx) {\n            const cw = this.imgCtx.offsetWidth;\n            const ch = this.imgCtx.offsetHeight;\n            let cx = left + (right - left) / 2 - cw / 2;\n            cx = Math.max(8 + scrollX, Math.min(cx, scrollX + innerWidth - cw - 8));\n            let cy = top - ch - 8;\n            if (cy < this.ctxMinTop()) cy = bottom + 8;\n            this.imgCtx.style.left = cx + 'px';\n            this.imgCtx.style.top = cy + 'px';\n        }\n    }\n\n    private startImageResizeDrag(e: MouseEvent, corner: ImgCorner): void {\n        e.preventDefault();\n        const img = this.imgActive;\n        if (!img) return;\n        this.cancelImgHide();\n        const startX = e.clientX;\n        const startW = img.getBoundingClientRect().width;\n        const sign = corner === 'nw' || corner === 'sw' ? -1 : 1;\n        this.withNoTextSelect((restore) => {\n            const mv = (ev: MouseEvent) => {\n                img.style.width = Math.max(24, Math.round(startW + sign * (ev.clientX - startX))) + 'px';\n                img.style.height = 'auto';\n                this.positionImageHandles();\n            };\n            const up = () => {\n                window.removeEventListener('mousemove', mv);\n                window.removeEventListener('mouseup', up);\n                restore();\n                this.onChange();\n            };\n            window.addEventListener('mousemove', mv);\n            window.addEventListener('mouseup', up);\n        });\n    }\n\n    /* ---------------------------------------------------------- selection bubble toolbar */\n    private toggleBlock(tag: string): void {\n        const active = this.currentBlock() === tag;\n        this.exec('formatBlock', active ? '<p>' : '<' + tag + '>');\n        if (tag === 'blockquote' && active) this.unwrapBlockquote();\n    }\n\n    /** Some browsers leave the <blockquote> wrapper in place after formatBlock('<p>'); strip it manually if so. */\n    private unwrapBlockquote(): void {\n        const s = window.getSelection();\n        let node: Node | null = s && this.ed.contains(s.anchorNode) ? s.anchorNode : null;\n        while (node && node !== this.ed) {\n            if ((node as HTMLElement).nodeType === 1 && (node as HTMLElement).tagName === 'BLOCKQUOTE') {\n                const bq = node as HTMLElement;\n                const parent = bq.parentNode!;\n                while (bq.firstChild) parent.insertBefore(bq.firstChild, bq);\n                parent.removeChild(bq);\n                this.onChange();\n                return;\n            }\n            node = node.parentNode;\n        }\n    }\n\n    private clearSelToolbar(): void {\n        this.selCtx?.remove();\n        this.selCtx = null;\n    }\n\n    private updateSelToolbar(sel: Selection): void {\n        if (this.options.readonly || sel.isCollapsed || !sel.rangeCount) {\n            this.clearSelToolbar();\n            return;\n        }\n        const range = sel.getRangeAt(0);\n        const r = range.getBoundingClientRect();\n        if (!r.width && !r.height) {\n            this.clearSelToolbar();\n            return;\n        }\n        if (!this.selCtx) this.selCtx = this.buildSelToolbar();\n        this.positionSelToolbar(range);\n    }\n\n    private buildSelToolbar(): HTMLElement {\n        const el = document.createElement('div');\n        el.className = 'selctx';\n        el.dir = this.dir();\n        const foreBtn = this.ctxBtn(\n            '<b style=\"font:600 15px/1 Georgia,serif\">A</b><span class=\"colorbar\" data-cb=\"fore\"></span>',\n            this.t('forecolor'),\n            () => this.colorMenu(foreBtn, 'fore')\n        );\n        const backBtn = this.ctxBtn(IC.backcolor, this.t('backcolor'), () => this.colorMenu(backBtn, 'back'));\n        backBtn.querySelector('svg')?.insertAdjacentHTML('afterend', '<span class=\"colorbar\" data-cb=\"back\"></span>');\n        const caseBtn = this.ctxBtn(IC.caseic, this.t('changecase'), () => this.caseMenu(caseBtn));\n        const lhBtn = this.ctxBtn(IC.lineheight, this.t('lineheight'), () => this.lineHeightMenu(lhBtn));\n        const wsBtn = this.ctxBtn(IC.wordspacing, this.t('wordspacing'), () => this.wordSpacingMenu(wsBtn));\n        el.append(\n            this.ctxBtn(IC.bold, this.t('bold'), () => this.exec('bold'), 'bold'),\n            this.ctxBtn(IC.italic, this.t('italic'), () => this.exec('italic'), 'italic'),\n            foreBtn,\n            backBtn,\n            this.ctxSep(),\n            this.ctxBtn(IC.quote, this.t('quote'), () => this.toggleBlock('blockquote'), 'blockquote'),\n            this.ctxBtn(IC.inlinecodeic, this.t('code'), () => this.toggleInlineCode(), 'code'),\n            this.ctxBtn('<b style=\"font:700 12px/1 Arial,sans-serif\">H2</b>', this.blockLabel('h2'), () => this.toggleBlock('h2'), 'h2'),\n            this.ctxBtn('<b style=\"font:700 12px/1 Arial,sans-serif\">H3</b>', this.blockLabel('h3'), () => this.toggleBlock('h3'), 'h3'),\n            this.ctxSep(),\n            this.ctxBtn(IC.link, this.t('linkttl'), () => this.linkDlg()),\n            caseBtn,\n            lhBtn,\n            wsBtn\n        );\n        el.addEventListener('mousedown', (e) => e.preventDefault());\n        document.body.appendChild(el);\n        this.syncColorSwatches(el);\n        return el;\n    }\n\n    private positionSelToolbar(range: Range): void {\n        if (!this.selCtx) return;\n        const r = range.getBoundingClientRect();\n        const top = r.top + scrollY;\n        const left = r.left + scrollX;\n        const right = r.right + scrollX;\n        const bottom = r.bottom + scrollY;\n        const cw = this.selCtx.offsetWidth;\n        const ch = this.selCtx.offsetHeight;\n        let cx = left + (right - left) / 2 - cw / 2;\n        cx = Math.max(8 + scrollX, Math.min(cx, scrollX + innerWidth - cw - 8));\n        let cy = top - ch - 8;\n        if (cy < this.ctxMinTop()) cy = bottom + 8;\n        this.selCtx.style.left = cx + 'px';\n        this.selCtx.style.top = cy + 'px';\n    }\n\n    private repositionSelToolbar(): void {\n        if (!this.selCtx) return;\n        const s = window.getSelection();\n        if (s && s.rangeCount && !s.isCollapsed && this.ed.contains(s.anchorNode)) this.positionSelToolbar(s.getRangeAt(0));\n    }\n\n    /* ---------------------------------------------------------- state sync */\n    private currentBlock(): string {\n        const s = window.getSelection();\n        if (!s || !s.anchorNode || !this.ed.contains(s.anchorNode)) return 'p';\n        let node: Node | null = s.anchorNode;\n        while (node && node !== this.ed) {\n            if ((node as HTMLElement).nodeType === 1 && (node as HTMLElement).tagName === 'BLOCKQUOTE') return 'blockquote';\n            node = node.parentNode;\n        }\n        const b = this.closestBlock(s.anchorNode);\n        return b ? b.tagName.toLowerCase().replace('div', 'p') : 'p';\n    }\n\n    /** Element whose computed font reflects the current caret, falling back to the editor root before any selection lands inside it. */\n    private fontRefEl(): Element {\n        const s = window.getSelection();\n        if (s && s.anchorNode && this.ed.contains(s.anchorNode)) {\n            return s.anchorNode.nodeType === 1 ? (s.anchorNode as Element) : (s.anchorNode.parentElement as Element);\n        }\n        return this.ed;\n    }\n\n    private currentFont(): string {\n        const fam = getComputedStyle(this.fontRefEl()).fontFamily.toLowerCase();\n        const hit = this.options.fontFamilyFormats.find(([n, v]) => fam.includes(v.split(',')[0].toLowerCase()));\n        return hit ? hit[0] : '';\n    }\n\n    private currentSize(): string {\n        const px = Math.round(parseFloat(getComputedStyle(this.fontRefEl()).fontSize));\n        return px > 0 ? px + 'px' : '';\n    }\n\n    private refreshState(): void {\n        const s = window.getSelection();\n        const inEd = s ? this.ed.contains(s.anchorNode) : false;\n        const blkTag = this.currentBlock();\n        const containers = [this.toolbar, this.selCtx].filter(Boolean) as HTMLElement[];\n        containers.forEach((container) => {\n            (\n                [\n                    'bold',\n                    'italic',\n                    'underline',\n                    'strikeThrough',\n                    'justifyLeft',\n                    'justifyCenter',\n                    'justifyRight',\n                    'justifyFull',\n                    'insertOrderedList',\n                    'insertUnorderedList'\n                ] as const\n            ).forEach((c) => {\n                const b = container.querySelector(`[data-id=${c}]`) as HTMLElement | null;\n                if (b) b.classList.toggle('on', inEd && document.queryCommandState(c));\n            });\n            (['h2', 'h3', 'blockquote'] as const).forEach((tag) => {\n                const b = container.querySelector(`[data-id=${tag}]`) as HTMLElement | null;\n                if (b) b.classList.toggle('on', inEd && blkTag === tag);\n            });\n            const codeB = container.querySelector('[data-id=code]') as HTMLElement | null;\n            if (codeB) codeB.classList.toggle('on', inEd && !!this.closestInlineCode());\n        });\n        const blk = s ? this.closestBlock(s.anchorNode) : null;\n        const dir = blk?.closest('[dir]')?.getAttribute('dir') || this.ed.getAttribute('dir') || this.dir();\n        this.toolbar.querySelector('[data-id=ltr]')?.classList.toggle('on', inEd && dir === 'ltr');\n        this.toolbar.querySelector('[data-id=rtl]')?.classList.toggle('on', inEd && dir === 'rtl');\n        const setLbl = (id: string, val: string, def?: string) => {\n            const l = this.toolbar.querySelector(`[data-id=${id}] .lbl`) as HTMLElement | null;\n            if (!l) return;\n            l.textContent = val || def || '';\n            l.classList.toggle('empty', !val);\n        };\n        setLbl('fontsel', this.currentFont());\n        setLbl('sizesel', this.currentSize().replace('px', ''));\n        if (inEd) {\n            setLbl('blocksel', BLOCKS.some((b) => b[0] === blkTag) ? this.blockLabel(blkTag) : this.t('para'));\n        }\n        this.sbWords.textContent = this.countWords() + ' ' + this.t('words');\n    }\n\n    private countWords(): number {\n        const txt = (this.ed.textContent || '').trim();\n        return txt ? txt.split(/\\s+/).length : 0;\n    }\n\n    /* ---------------------------------------------------------- paste */\n    private handlePaste(e: ClipboardEvent): void {\n        const cd = e.clipboardData;\n        if (!cd) return;\n        e.preventDefault();\n        const html = cd.getData('text/html');\n        const imgItem = Array.from(cd.items).find((i) => i.type.startsWith('image/'));\n        if (imgItem && !html) {\n            const fr = new FileReader();\n            fr.onload = () => {\n                document.execCommand('insertHTML', false, `<img src=\"${fr.result}\" alt=\"\">`);\n                this.onChange();\n            };\n            fr.readAsDataURL(imgItem.getAsFile() as Blob);\n            return;\n        }\n        if (!html) {\n            /* additive pre-check before the normal text pipeline runs (the paste\n               engine itself is untouched): a bare video page URL (YouTube & co.)\n               becomes an embedded player. Anything else falls through unchanged. */\n            const text = cd.getData('text/plain');\n            const embed = /^\\S+$/.test(text.trim()) ? this.videoEmbedUrl(text.trim()) : null;\n            if (embed) {\n                document.execCommand('insertHTML', false, this.videoEmbedHTML(embed));\n                this.onChange();\n                return;\n            }\n        }\n        if (html) {\n            document.execCommand('insertHTML', false, cleanPastedHTML(html, this.dir()));\n        } else {\n            document.execCommand('insertHTML', false, normalizeTextPaste(cd.getData('text/plain')));\n        }\n        this.onChange();\n    }\n\n    /* ---------------------------------------------------------- init */\n    private initUI(): void {\n        this.closePop();\n        this.closeDlg();\n        this.clearTableHandles();\n        this.clearImgPlaceholderSel();\n        this.clearVphPlaceholderSel();\n        this.clearVidHandles();\n        this.clearCodeSel();\n        this.shell.dir = this.dir();\n        this.ed.dir = this.dir();\n        if (this.options.menubar) this.buildMenubar();\n        else this.menubar.style.display = 'none';\n        if (this.options.toolbar) this.buildToolbar();\n        else this.toolbar.style.display = 'none';\n        this.sbHelp.textContent = this.t('statushelp');\n        this.refreshState();\n    }\n}\n\nexport default FableEditor;\n","import {\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n  ViewChild\n} from '@angular/core';\nimport { FableEditor, EditorInitOptions, EditorLanguage, FableEditorApi } from '../core';\n\n@Component({\n  selector: 'fable-editor',\n  standalone: true,\n  template: `<div #container></div>`,\n  styles: [':host { display: block; }']\n})\nexport class FableEditorComponent implements OnInit, OnChanges, OnDestroy {\n  @ViewChild('container', { static: true }) container!: ElementRef<HTMLDivElement>;\n\n  @Input() language: EditorLanguage = 'en';\n  @Input() height = 302;\n  @Input() menubar: boolean | string = true;\n  @Input() toolbar: boolean | string = true;\n  @Input() statusbar = true;\n  @Input() readonly = false;\n  @Input() primaryColor?: string;\n  @Input() toolbarGroupBackground?: string;\n  @Input() uiFontFamily?: string;\n  @Input() init: Partial<Omit<EditorInitOptions, 'target'>> = {};\n  @Input() value = '';\n\n  @Output() editorChange = new EventEmitter<string>();\n  @Output() editorReady = new EventEmitter<FableEditorApi>();\n\n  private editor?: FableEditor;\n  private lastContent = '';\n\n  ngOnInit(): void {\n    this.lastContent = this.value;\n    this.editor = new FableEditor({\n      target: this.container.nativeElement,\n      language: this.language,\n      height: this.height,\n      menubar: this.menubar,\n      toolbar: this.toolbar,\n      statusbar: this.statusbar,\n      readonly: this.readonly,\n      primaryColor: this.primaryColor,\n      toolbarGroupBackground: this.toolbarGroupBackground,\n      uiFontFamily: this.uiFontFamily,\n      initialContent: this.value,\n      ...this.init,\n      onChange: (content) => {\n        this.lastContent = content;\n        this.editorChange.emit(content);\n      },\n      onReady: (api) => this.editorReady.emit(api)\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (!this.editor) return;\n    if (changes['language'] && !changes['language'].firstChange) {\n      this.editor.setLanguage(this.language);\n    }\n    if (changes['value'] && !changes['value'].firstChange && this.value !== this.lastContent) {\n      this.lastContent = this.value;\n      this.editor.setContent(this.value ?? '');\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.editor?.destroy();\n    this.editor = undefined;\n  }\n\n  getContent(): string {\n    return this.editor?.getContent() ?? '';\n  }\n\n  getContentForEmail(): string {\n    return this.editor?.getContentForEmail() ?? '';\n  }\n\n  setContent(html: string): void {\n    this.lastContent = html;\n    this.editor?.setContent(html ?? '');\n  }\n\n  insertContent(html: string): void {\n    this.editor?.insertContent(html);\n  }\n\n  setLanguage(lang: EditorLanguage): void {\n    this.editor?.setLanguage(lang);\n  }\n\n  focus(): void {\n    this.editor?.focus();\n  }\n\n  writeValue(value: string): void {\n    this.editor?.setContent(value ?? '');\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { FableEditorComponent } from './fable-editor.component';\n\n@NgModule({\n  imports: [FableEditorComponent],\n  exports: [FableEditorComponent]\n})\nexport class FableEditorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}