revise 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/CHANGELOG.md +94 -0
  2. package/assets/historyMaterializeWorker-B51R08XN.js +612 -0
  3. package/backend.d.ts +8 -2
  4. package/backend.js +1 -1
  5. package/chunks/AgentPageRenderer-CH8kSTJn.js +1 -0
  6. package/chunks/AgentPageRenderer-P23XVguo.js +1 -0
  7. package/chunks/AttachmentDocumentImporter-B1WOaa7d.js +1 -0
  8. package/chunks/AttachmentDocumentImporter-CT_PJp_e.js +1 -0
  9. package/chunks/{BidiText-C8PBPSQY.js → BidiText-Swm5fl9J.js} +74 -74
  10. package/chunks/DocumentMutator-btiDK57e.js +31 -0
  11. package/chunks/{DocumentScrubber-DS4LFDKS.js → DocumentScrubber-CMPfm_HF.js} +1 -1
  12. package/chunks/{DocumentScrubber-COPepQKE.js → DocumentScrubber-Cm2kH8op.js} +1 -1
  13. package/chunks/{DocumentScrubber-Cf_QqHhF.js → DocumentScrubber-bJoKijol.js} +1 -1
  14. package/chunks/DocumentStylesheet-DreoD7sD.js +7 -0
  15. package/chunks/DocxConverter-BcVG-p5K.js +13 -0
  16. package/chunks/DocxConverter-D2bO5RE-.js +1125 -0
  17. package/chunks/DocxConverter-haCfRuWb.js +13 -0
  18. package/chunks/{DocxGraft-Ba63IRP4.js → DocxGraft-BRKh4mHQ.js} +1 -1
  19. package/chunks/{DocxGraft-DjERgl-z.js → DocxGraft-BxSQtl12.js} +2 -2
  20. package/chunks/{DocxGraft-cYlmw4Ab.js → DocxGraft-C9MBQCnf.js} +1 -1
  21. package/chunks/FileImporter-CszqRfVU.js +1 -0
  22. package/chunks/FileImporter-DObFoCCn.js +1 -0
  23. package/chunks/{HtmlConverter-Sd9t49vH.js → HtmlConverter-DwXB4IDh.js} +12 -12
  24. package/chunks/{MarkdownConverter-BdJgh8xt.js → MarkdownConverter-CUC8GgsS.js} +1 -1
  25. package/chunks/MathRenderer-DT6GyJXb.js +68 -0
  26. package/chunks/OdtConverter-7h9HHMpL.js +125 -0
  27. package/chunks/OdtConverter-Ct4qypJk.js +6 -0
  28. package/chunks/OdtConverter-DFl__sJc.js +6 -0
  29. package/chunks/OfficeImportShared-BY6FdZ8d.js +1 -0
  30. package/chunks/OfficeImportShared-BrZoDM0j.js +30 -0
  31. package/chunks/OfficeImportShared-Bvm-mOyj.js +1 -0
  32. package/chunks/PdfConverter-1wyvoT7X.js +21 -0
  33. package/chunks/PdfConverter-BAoEHILo.js +21 -0
  34. package/chunks/PdfConverter-CKEvFj11.js +448 -0
  35. package/chunks/{PdfImportService-CQCgsRX1.js → PdfImportService-BhLPp5uG.js} +2 -2
  36. package/chunks/{PdfImportService-xl7fstr-.js → PdfImportService-xbzrN__L.js} +2 -2
  37. package/chunks/RtfConverter-Bxn-enp8.js +15 -0
  38. package/chunks/RtfConverter-LZPzBDSr.js +15 -0
  39. package/chunks/RtfConverter-_bacXqr1.js +186 -0
  40. package/chunks/{TableBorders-Cdkc62cX.js → TableBorders-CwnF3jvH.js} +1 -1
  41. package/chunks/{TxtConverter-C-oiFUAp.js → TxtConverter-C7FOwHpH.js} +1 -1
  42. package/chunks/XmlConverter-7oo8oeQB.js +2 -0
  43. package/chunks/XmlConverter-DGORHJcZ.js +96 -0
  44. package/chunks/XmlConverter-DeLHReK_.js +2 -0
  45. package/chunks/ar-ComXvtmh.js +13 -0
  46. package/chunks/backend-DecaBz-I.js +490 -0
  47. package/chunks/base64-sSPOzq-u.js +198 -0
  48. package/chunks/{browser-module-CYGCfEyx.js → browser-module-Dj5o3kuL.js} +1 -1
  49. package/chunks/{browser-module-DgvTMhpA.js → browser-module-UuM_O36W.js} +1 -1
  50. package/chunks/{capture-BAJ2in5p.js → capture-1btcWcPF.js} +1 -1
  51. package/chunks/{carrier-C5VZRMxZ.js → carrier-DQeng6yq.js} +1 -1
  52. package/chunks/de-BkbpIKxx.js +13 -0
  53. package/chunks/es-CKkXujOF.js +13 -0
  54. package/chunks/fil-piIHMc8F.js +13 -0
  55. package/chunks/{footnoteFlatten-Bekh8ZfM.js → footnoteFlatten-DUQticYy.js} +1 -1
  56. package/chunks/fr-DuA8qLje.js +13 -0
  57. package/chunks/{graftExport-CRRm1Oe_.js → graftExport-CYnStOdU.js} +1 -1
  58. package/chunks/index-2TBhRkX7.js +387 -0
  59. package/chunks/{index-B1idHquf.js → index-Bf14eTEW.js} +231 -229
  60. package/chunks/index-BwcX_r62.js +387 -0
  61. package/chunks/{index.es-Bwt05m_b.js → index.es-CI7cDExj.js} +1 -1
  62. package/chunks/{index.es-DAQD57G4.js → index.es-DHpGt6Y5.js} +1 -1
  63. package/chunks/ja-DgrSs555.js +13 -0
  64. package/chunks/{jspdf.es.min-DlTF8uTw.js → jspdf.es.min--GshOuIm.js} +1 -1
  65. package/chunks/{jspdf.es.min-CnNRolk9.js → jspdf.es.min-DurJZ1zW.js} +1 -1
  66. package/chunks/pseudoLocale-BoYTjmiK.js +1 -0
  67. package/chunks/pseudoLocale-DG2NnZmz.js +1 -0
  68. package/chunks/serverDocumentSession-CJ1EH3Tp.js +15 -0
  69. package/chunks/{signatures-CBF7NZUy.js → signatures-Bwt_OGik.js} +1 -1
  70. package/chunks/suggestionAuthorship-B-IuLQlE.js +1 -0
  71. package/chunks/zh-9OF3SWWO.js +13 -0
  72. package/full.js +1 -1
  73. package/index.d.ts +13 -5
  74. package/index.js +1 -1
  75. package/package.json +1 -1
  76. package/root.js +2 -2
  77. package/style.css +1 -1
  78. package/assets/historyMaterializeWorker-C4uxcZEh.js +0 -607
  79. package/chunks/AgentPageRenderer-BFB0arQL.js +0 -1
  80. package/chunks/AgentPageRenderer-Dn6SaRjW.js +0 -1
  81. package/chunks/AttachmentDocumentImporter-BHDJAdky.js +0 -1
  82. package/chunks/AttachmentDocumentImporter-CxOZqzt1.js +0 -1
  83. package/chunks/DocumentMutator-4vBJQ74L.js +0 -31
  84. package/chunks/DocumentStylesheet-byN5dtC6.js +0 -7
  85. package/chunks/DocxConverter-BCEB7jWY.js +0 -1083
  86. package/chunks/DocxConverter-C3NflpDr.js +0 -11
  87. package/chunks/DocxConverter-D9ZNn4nX.js +0 -11
  88. package/chunks/FileImporter-CHXj9sNX.js +0 -1
  89. package/chunks/FileImporter-DetvRoJc.js +0 -1
  90. package/chunks/MathRenderer-B0Y1h1JU.js +0 -62
  91. package/chunks/OdtConverter-BKtyx012.js +0 -1
  92. package/chunks/OdtConverter-Ce9j8PRt.js +0 -1
  93. package/chunks/OdtConverter-D709qfYb.js +0 -31
  94. package/chunks/PdfConverter-BA8XLTAM.js +0 -21
  95. package/chunks/PdfConverter-CkDClffR.js +0 -438
  96. package/chunks/PdfConverter-CxLxd-LJ.js +0 -21
  97. package/chunks/RtfConverter-BZOnMUGH.js +0 -14
  98. package/chunks/RtfConverter-Bs81AfXt.js +0 -14
  99. package/chunks/RtfConverter-DfuE5olb.js +0 -45
  100. package/chunks/XmlConverter-C0FnrVYk.js +0 -70
  101. package/chunks/XmlConverter-CQa8baOF.js +0 -2
  102. package/chunks/XmlConverter-DjEYaIyf.js +0 -2
  103. package/chunks/ar-BdmGnaKI.js +0 -14
  104. package/chunks/backend-BIhAX-Gi.js +0 -484
  105. package/chunks/base64-Qx0OzT4p.js +0 -196
  106. package/chunks/de-DldIXRFC.js +0 -14
  107. package/chunks/es-CnyKlSPK.js +0 -14
  108. package/chunks/index-C-4H81OE.js +0 -378
  109. package/chunks/index-iZC8xN0t.js +0 -378
  110. package/chunks/pseudoLocale-BoJwIubw.js +0 -1
  111. package/chunks/pseudoLocale-DWAm7Dpa.js +0 -1
  112. package/chunks/serverDocumentSession-DASrQAbW.js +0 -15
@@ -1,21 +0,0 @@
1
- import{aZ as Ft,a_ as ne,a$ as re,an as se,a7 as bt,b0 as Pt,I as le,b1 as ce,b2 as Ht,b3 as Nt,b4 as Gt,b5 as Ut,af as zt,b6 as Kt,b7 as Rt,b8 as jt,av as Yt,b9 as he,ba as ge,bb as de,bc as fe,B as me,bd as Pe,be as ue,bf as pe,bg as Te,bh as xe,bi as be,bj as ye,bk as _e,aN as $t,bl as tt,bm as Vt,bn as Fe,bo as Se,bp as St,bq as Le,br as we,bs as Oe,Y as Ce,Z as ke,bt as Zt,bu as Me,bv as Et,bw as Lt,aD as It,K as Ne,bx as Jt,by as Re,bz as vt,bA as qt,bB as Qt,bC as Ee,bD as Ie,bE as ve,al as Be,bF as Bt,aU as De,a0 as Xe,bG as Ae,bH as We,aH as He,bI as Ge,bJ as dt,bK as te,A as ee,bL as Ue,bM as ze,bN as Ke,bO as ae,bP as ie,bQ as je,bR as Ye,bS as $e,bT as Ve,bU as Ze,bV as Je,bW as qe,au as Qe,V as wt,bX as ta,ab as ea,ac as aa,bY as Dt,bZ as ia,b_ as oa,b$ as na,c0 as ra,c1 as sa,c2 as Xt,c3 as la,c4 as oe,aV as ca,c5 as ha}from"./index-iZC8xN0t.js";const Mt=new Map;ne(()=>Mt.clear());function ga(it){const t=String.fromCharCode(...it.subarray(0,4));return it[0]===0&&it[1]===1&&it[2]===0&&it[3]===0||t==="true"||t==="OTTO"}function da(it){let t="";for(let e=0;e<it.length;e+=32768)t+=String.fromCharCode(...it.subarray(e,e+32768));return btoa(t)}async function fa(it){try{const t=await fetch(Ft(`fonts/${encodeURIComponent(it)}`),{credentials:"omit"});if(!t.ok)return null;const e=new Uint8Array(await t.arrayBuffer());return ga(e)?da(e):null}catch{return null}}async function ma(it){let t=Mt.get(it);return t||(t=fa(it),Mt.set(it,t),t.then(e=>{e===null&&Mt.delete(it)})),t}const J=it=>({normal:it,bold:it}),Pa={japanese:{family:"NotoSansJP",probeCodePoint:12354,charRegex:/[\p{Script=Hiragana}\p{Script=Katakana}]/u,files:J("NotoSansJP-Regular.ttf")},korean:{family:"NotoSansKR",probeCodePoint:54620,charRegex:/\p{Script=Hangul}/u,files:J("NotoSansKR-Regular.ttf")},devanagari:{family:"NotoSansDevanagari",probeCodePoint:2309,charRegex:/\p{Script=Devanagari}/u,files:J("NotoSansDevanagari-Regular.ttf"),shape:!0},bengali:{family:"NotoSansBengali",probeCodePoint:2437,charRegex:/\p{Script=Bengali}/u,files:J("NotoSansBengali-Regular.ttf"),shape:!0},gurmukhi:{family:"NotoSansGurmukhi",probeCodePoint:2565,charRegex:/\p{Script=Gurmukhi}/u,files:J("NotoSansGurmukhi-Regular.ttf"),shape:!0},gujarati:{family:"NotoSansGujarati",probeCodePoint:2693,charRegex:/\p{Script=Gujarati}/u,files:J("NotoSansGujarati-Regular.ttf"),shape:!0},oriya:{family:"NotoSansOriya",probeCodePoint:2821,charRegex:/\p{Script=Oriya}/u,files:J("NotoSansOriya-Regular.ttf"),shape:!0},tamil:{family:"NotoSansTamil",probeCodePoint:2949,charRegex:/\p{Script=Tamil}/u,files:J("NotoSansTamil-Regular.ttf"),shape:!0},telugu:{family:"NotoSansTelugu",probeCodePoint:3077,charRegex:/\p{Script=Telugu}/u,files:J("NotoSansTelugu-Regular.ttf"),shape:!0},kannada:{family:"NotoSansKannada",probeCodePoint:3205,charRegex:/\p{Script=Kannada}/u,files:J("NotoSansKannada-Regular.ttf"),shape:!0},malayalam:{family:"NotoSansMalayalam",probeCodePoint:3333,charRegex:/\p{Script=Malayalam}/u,files:J("NotoSansMalayalam-Regular.ttf"),shape:!0},sinhala:{family:"NotoSansSinhala",probeCodePoint:3461,charRegex:/\p{Script=Sinhala}/u,files:J("NotoSansSinhala-Regular.ttf"),shape:!0},thai:{family:"NotoSansThai",probeCodePoint:3585,charRegex:/\p{Script=Thai}/u,files:J("NotoSansThai-Regular.ttf"),shape:!0},lao:{family:"NotoSansLao",probeCodePoint:3713,charRegex:/\p{Script=Lao}/u,files:J("NotoSansLao-Regular.ttf"),shape:!0},khmer:{family:"NotoSansKhmer",probeCodePoint:6016,charRegex:/\p{Script=Khmer}/u,files:J("NotoSansKhmer-Regular.ttf"),shape:!0},myanmar:{family:"NotoSansMyanmar",probeCodePoint:4096,charRegex:/\p{Script=Myanmar}/u,files:J("NotoSansMyanmar-Regular.ttf"),shape:!0},tibetan:{family:"NotoSerifTibetan",probeCodePoint:3904,charRegex:/\p{Script=Tibetan}/u,files:J("NotoSerifTibetan-Regular.ttf"),shape:!0},ethiopic:{family:"NotoSansEthiopic",probeCodePoint:4608,charRegex:/\p{Script=Ethiopic}/u,files:J("NotoSansEthiopic-Regular.ttf")},armenian:{family:"NotoSansArmenian",probeCodePoint:1329,charRegex:/\p{Script=Armenian}/u,files:J("NotoSansArmenian-Regular.ttf")},georgian:{family:"NotoSansGeorgian",probeCodePoint:4304,charRegex:/\p{Script=Georgian}/u,files:J("NotoSansGeorgian-Regular.ttf")},syriac:{family:"NotoSansSyriac",probeCodePoint:1808,charRegex:/\p{Script=Syriac}/u,files:J("NotoSansSyriac-Regular.ttf"),shape:!0},thaana:{family:"NotoSansThaana",probeCodePoint:1920,charRegex:/\p{Script=Thaana}/u,files:J("NotoSansThaana-Regular.ttf"),shape:!0},arabic:{family:"NotoNaskhArabic",probeCodePoint:1575,charRegex:/[\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\uFB50-\uFDFF\uFE70-\uFEFF]/,files:{normal:"NotoNaskhArabic-Regular.ttf",bold:"NotoNaskhArabic-Bold.ttf"}},hebrew:{family:"NotoSansHebrew",probeCodePoint:1488,charRegex:/[\u0590-\u05FF\uFB1D-\uFB4F]/,files:{normal:"NotoSansHebrew-Regular.ttf",bold:"NotoSansHebrew-Bold.ttf"}},cjkExtensionB:{family:"HanExtBSubset",probeCodePoint:131079,charRegex:/[\u{20000}-\u{207FF}]/u,files:J("HanExtBSubset-Regular.ttf"),shape:!0},han:{family:"NotoSansSC",probeCodePoint:20013,charRegex:/[\p{Script=Han}\p{Script=Bopomofo}\u3000-\u303F\uFE30-\uFE4F\uFF00-\uFFEF]/u,files:J("NotoSansSC-Regular.ttf")},emoji:{family:"NotoEmoji",probeCodePoint:128512,charRegex:/[\p{Extended_Pictographic}\p{Regional_Indicator}]/u,files:J("NotoEmoji-Regular.ttf"),shape:!0},arrows:{family:"NotoSansSymbols",probeCodePoint:8592,charRegex:/[\u2190-\u21FF]/u,files:J("NotoSansSymbols-Regular.ttf")},symbols:{family:"NotoSansSymbols2",probeCodePoint:9728,charRegex:/[\u2300-\u23FF\u2460-\u24FF\u25A0-\u27BF\u2B00-\u2BFF\u{1F000}-\u{1F2FF}]/u,files:J("NotoSansSymbols2-Regular.ttf"),shape:!0}},E=class st{static async ensureAllLatexRendered(t){const e=[],a=new Set,i=(o,l)=>{const n=`${l}:${o}`;!a.has(n)&&o.trim()&&(a.add(n),e.push({content:o,displayMode:l}))},r=o=>{if(!o||typeof o!="object")return;if(Array.isArray(o)){o.forEach(r);return}const l=o;l.type==="math"&&l.content?i(l.content,l.displayMode!=="inline"):l.type==="text"&&l.marks?.latex&&l.text&&i(l.text,!1),r(l.children)};r(t.children),r(t.chrome),r(t.notes),await Promise.all(e.map(o=>le(o.content,o.displayMode)))}static getLatexSvgFromCache(t,e){return ce(t,e)}static async svgToPng(t,e,a,i=3){return new Promise(r=>{const o=new Image,l="data:image/svg+xml;charset=utf-8,"+encodeURIComponent(t);o.onload=()=>{try{const n=document.createElement("canvas");n.width=e*i,n.height=a*i;const h=n.getContext("2d");if(!h){r(null);return}h.scale(i,i),h.drawImage(o,0,0,e,a),r(n.toDataURL("image/png"))}catch(n){console.error("Failed to convert SVG to PNG:",n),r(null)}},o.onerror=()=>{r(null)},o.src=l})}static async loadFontFile(t,e=!0){const a=Ft(`fonts/${t}`),i=this.fontFileData.get(a);if(i!==void 0)return i;const r=await ma(t);let o=r??null;try{if(r===void 0){const l=await fetch(Ft(`fonts/${t}`));if(l.ok){const n=await l.arrayBuffer();Ht(new Uint8Array(n))==="ttf"&&(o=this.arrayBufferToBase64(n))}}}catch{}return o||(o=await this.readFontFromDisk(t)),!o&&e&&console.warn(`Failed to load font ${t}; PDF export used a fallback font. Embedded editors: if revise.io is unreachable, mirror the fonts and call setAssetBaseUrl().`),this.fontFileData.set(a,o),o}static async readFontFromDisk(t){try{const{readFile:e}=await import("./__vite-browser-external-l0sNRNKZ.js"),{join:a}=await import("./__vite-browser-external-l0sNRNKZ.js"),i=[a(process.cwd(),"public","fonts",t),a(process.cwd(),"frontend","public","fonts",t),a(process.cwd(),"..","frontend","public","fonts",t),a(process.cwd(),"..","..","frontend","public","fonts",t)];for(const r of i)try{return(await e(r)).toString("base64")}catch{}}catch{}return null}static async loadSourceCodePro(t){const e=await this.loadFontFile("SourceCodePro-Regular.ttf",!1);return e?(t.addFileToVFS("SourceCodePro-Regular.ttf",e),t.addFont("SourceCodePro-Regular.ttf","SourceCodePro","normal"),!0):!1}static async loadKaTeXMain(t){const e=[{file:"KaTeX_Main-Regular.ttf",style:"normal"},{file:"KaTeX_Main-Bold.ttf",style:"bold"},{file:"KaTeX_Main-Italic.ttf",style:"italic"},{file:"KaTeX_Main-BoldItalic.ttf",style:"bolditalic"}],a=await Promise.all(e.map(async i=>{const r=await this.loadFontFile(i.file);return r?{...i,base64:r}:null}));for(const i of a)i&&(t.addFileToVFS(i.file,i.base64),t.addFont(i.file,"KaTeX_Main",i.style));return a[0]!==null}static async embedBundledGenreFonts(t,e,a){this.bundledGenreFamilies.clear();const i=new Set,r=o=>{const l=this.mapFontFamilyToStandard(o);this.BUNDLED_GENRE_FONTS[l]&&i.add(l)};r(a);for(const o of Nt(e))r(o.value);for(const o of i){const l=this.BUNDLED_GENRE_FONTS[o],n=await Promise.all(Object.entries(l.files).map(async([h,s])=>({style:h,file:s,base64:await this.loadFontFile(s)})));if(!n.some(h=>!h.base64)){for(const{style:h,file:s,base64:g}of n)t.addFileToVFS(s,g),t.addFont(s,l.family,h);this.bundledGenreFamilies.set(o,l.family)}}}static documentFallbackScripts(t){const e=new Set,a=Object.keys(this.SCRIPT_FALLBACK_FONTS),i=r=>{if(e.size===a.length||!r||typeof r!="object")return;if(Array.isArray(r)){r.forEach(i);return}const o=r;if(typeof o.text=="string"&&o.text)for(const l of a)!e.has(l)&&this.SCRIPT_FALLBACK_FONTS[l].charRegex.test(o.text)&&e.add(l);i(o.children)};return i(t.children),i(t.chrome),i(t.notes),e}static splitDocumentFallbackRuns(t,e){const a=Object.entries(this.SCRIPT_FALLBACK_FONTS),i=s=>{const g=a.filter(([,P])=>P.charRegex.test(s)).map(([P])=>P);if(g.length>1&&e){const P=s.codePointAt(0)??0,c=g.find(d=>e(d,P));if(c)return c}return g[0]},r=/[\p{Letter}\p{Number}]/u,o=this.SCRIPT_FALLBACK_FONTS.japanese.charRegex,l=this.SCRIPT_FALLBACK_FONTS.korean.charRegex,n=s=>{const g=s.text??"";if(!g)return[{...s}];const P=[];let c="",d=null;for(const f of g.split(/(\s+)/)){const T=o.test(f)?"japanese":l.test(f)?"korean":null;for(const m of f){let x=i(m);if(x==="han"&&T&&(x=T),!x&&r.test(m)&&(x="base"),!x){d?d.text+=m:c+=m;continue}!d||d.key!==x?(d&&P.push(d),d={key:x,text:c+m},c=""):d.text+=m}}return d?(d.text+=c,P.push(d)):P.push({key:"base",text:c}),P.map(f=>{if(f.key==="base")return{...s,text:f.text};const T=this.SCRIPT_FALLBACK_FONTS[f.key];return{...s,text:f.text,marks:{...s.marks,fontFamily:T.family}}})},h=s=>Array.isArray(s)?s.flatMap(g=>g&&typeof g=="object"&&g.type==="text"?n(g):[h(g)]):!s||typeof s!="object"?s:Object.fromEntries(Object.entries(s).map(([g,P])=>[g,h(P)]));return h(t)}static async loadFallbackCoverage(t){const e=Object.entries(this.SCRIPT_FALLBACK_FONTS),a=new Set,i=new Set,r=l=>{if(!l||typeof l!="object")return;if(Array.isArray(l)){l.forEach(r);return}const n=l;if(typeof n.text=="string")for(const h of n.text){if(i.has(h)||h.charCodeAt(0)<128)continue;i.add(h);const s=e.filter(([,g])=>g.charRegex.test(h));s.length>1&&s.forEach(([g])=>a.add(g))}r(n.children)};r(t.children),r(t.chrome),r(t.notes);const o=new Map;for(const l of a){const n=this.SCRIPT_FALLBACK_FONTS[l].files.normal;let h=this.fallbackCharsetCache.get(n);if(h===void 0){h=null;const s=await this.loadFontFile(n,!1);if(s)try{const g=(await import("./browser-module-CYGCfEyx.js")).create(Gt(s));h=new Set(g.characterSet??[])}catch{h=null}this.fallbackCharsetCache.set(n,h)}h&&o.set(l,h)}return(l,n)=>{const h=o.get(l);return h?h.has(n):!0}}static async embedScriptFallbackFonts(t,e){this.scriptFallbackFamilies.clear(),this.shapingFonts.clear();for(const a of this.documentFallbackScripts(e)){const i=await this.registerScriptFallbackFace(t,a);i&&this.scriptFallbackFamilies.set(a,i)}}static async registerScriptFallbackFace(t,e){const a=this.SCRIPT_FALLBACK_FONTS[e];if(!a)return null;const i=await this.loadFontFile(a.files.normal);if(!i)return null;const r=await this.loadFontFile(a.files.bold,!1);t.addFileToVFS(a.files.normal,i),r&&a.files.bold!==a.files.normal&&t.addFileToVFS(a.files.bold,r);const o=r?a.files.bold:a.files.normal;if(t.addFont(a.files.normal,a.family,"normal"),t.addFont(o,a.family,"bold"),t.addFont(a.files.normal,a.family,"italic"),t.addFont(o,a.family,"bolditalic"),a.shape&&!this.shapingFonts.has(a.family))try{const[l,n]=await Promise.all([import("./browser-module-CYGCfEyx.js"),import("./_revise-sdk-lazy-harfbuzz-X8gnYTZL.js")]),h=n,s=h.loadHarfBuzz?await h.loadHarfBuzz():n,g=Gt(i),P=l.create(g),c=new s.Blob(g),d=new s.Face(c),f=new s.Font(d);this.shapingFonts.set(a.family,{unitsPerEm:d.upem,notdefPathCommands:P.getGlyph(0).path.commands,layout:T=>{const m=new s.Buffer;m.addText(T),m.guessSegmentProperties(),s.shape(f,m);const x=m.getGlyphInfosAndPositions(),F=x.map(b=>({xAdvance:b.xAdvance??0,yAdvance:b.yAdvance??0,xOffset:b.xOffset??0,yOffset:b.yOffset??0}));return{glyphs:x.map(b=>P.getGlyph(b.codepoint)),positions:F,advanceWidth:F.reduce((b,B)=>b+B.xAdvance,0)}}})}catch(l){console.warn(`Failed to initialize PDF shaping for ${a.family}:`,l)}return a.family}static fontCoversCodePoint(t,e,a){const i=`${e}:${a}`;let r=this.scriptFontCoverageCache.get(i);if(r===void 0){let o;try{o=t.getFont(e,"normal")}catch{o=void 0}r=!!o?.metadata?.cmap?.unicode?.codeMap?.[a],this.scriptFontCoverageCache.set(i,r)}return r}static fontCoversMatchedChars(t,e,a,i){let r=!1;for(const o of a)if(i.test(o)&&(r=!0,!this.fontCoversCodePoint(t,e,o.codePointAt(0)??0)))return!1;return r}static scriptFallbackFor(t,e,a){if(!e||this.scriptFallbackFamilies.size===0)return null;let i=null;for(const[r,o]of Object.entries(this.SCRIPT_FALLBACK_FONTS)){const l=this.scriptFallbackFamilies.get(r);if(l&&o.charRegex.test(e)&&!this.fontCoversCodePoint(t,a,o.probeCodePoint)&&!this.fontCoversMatchedChars(t,a,e,o.charRegex)){if(this.fontCoversMatchedChars(t,l,e,o.charRegex))return l;i??(i=l)}}return i}static async registerDocumentFonts(t,e,a){await this.embedLocalFonts(t,e),await this.embedBundledGenreFonts(t,e,a),await this.embedScriptFallbackFonts(t,e);const i=this.documentUsesSourceCodePro(e)?await this.loadSourceCodePro(t):!1;return this.inlineCodeFontFamily=i?"SourceCodePro":"courier",this.documentUsesKaTeXMain(e)&&await this.loadKaTeXMain(t),{hasSourceCodePro:i}}static async registerCurrentPdfFonts(t,e){for(const[a,i]of this.bundledGenreFamilies){const r=this.BUNDLED_GENRE_FONTS[a];if(!r||r.family!==i)continue;const o=await Promise.all(Object.entries(r.files).map(async([l,n])=>({style:l,file:n,base64:await this.loadFontFile(n)})));for(const{style:l,file:n,base64:h}of o)h&&(t.addFileToVFS(n,h),t.addFont(n,i,l))}for(const a of this.scriptFallbackFamilies.keys())await this.registerScriptFallbackFace(t,a);e&&await this.loadSourceCodePro(t)}static documentUsesKaTeXMain(t){return Nt(t).some(e=>{const a=e.family.toLowerCase();return a.includes("katex")||a.includes("computer modern")||a.includes("computermodern")})}static documentUsesSourceCodePro(t){const e=[...t.children];for(;e.length>0;){const a=e.pop();if(!a||typeof a!="object")continue;const i=a;if(i.type==="code"||i.type==="text"&&typeof i.marks=="object"&&i.marks!==null&&i.marks.code===!0)return!0;Array.isArray(i.children)&&e.push(...i.children)}return!1}static createCanvasTextContext(){if(typeof document>"u")return null;const t=document.createElement("canvas").getContext("2d");if(!t)return null;let e=null;return{measureText:a=>({width:Ut(a,e,i=>t.measureText(i).width)}),setFont:a=>{t.font=a,e=null},setMarkAdjustments:a=>{e=a}}}static resolveIndentStepPx(t){return this.resolvePdfLayoutMetrics(t).indentStepPx}static getDefaultPdfLayoutMetrics(){const t=zt(void 0),e=Math.max(1,this.PAGE_WIDTH-this.MARGIN_LEFT-this.MARGIN_RIGHT);return{orientation:"portrait",pageWidthPt:this.PAGE_WIDTH,pageHeightPt:this.PAGE_HEIGHT,marginTopPt:this.MARGIN_TOP,marginRightPt:this.MARGIN_RIGHT,marginBottomPt:this.MARGIN_BOTTOM,marginLeftPt:this.MARGIN_LEFT,contentWidthPt:e,fullContentWidthPt:e,pageMarginLeftPt:this.MARGIN_LEFT,columnCount:1,columnGapPt:Rt(t.columnGapTwips),columnStridePt:Kt(e,Rt(t.columnGapTwips)),blockSpacingPt:t.blockSpacingPx*this.PX_TO_PT,indentStepPx:t.indentStepPx,showPageNumbers:t.showPageNumbers,pageBorders:t.pageBorders,pageNumberPosition:t.pageNumberPosition,pageNumberStart:t.pageNumberStart,pageNumberFormat:t.pageNumberFormat,hyphenationEnabled:t.hyphenationEnabled,lineNumbering:t.lineNumbering}}static resolvePdfLayoutMetrics(t){return this.resolvePdfMetricsFromSettings(t?.pageLayout,t?.pageLayout,!1)}static resolvePdfMetricsFromSettings(t,e,a=!1){const i=jt(e,t),r=t,{pageWidth:o,pageHeight:l}=Yt(i),n=o*this.PX_TO_PT,h=l*this.PX_TO_PT,s=i.marginTopPx*this.PX_TO_PT,g=i.marginRightPx*this.PX_TO_PT,P=i.marginBottomPx*this.PX_TO_PT,c=i.marginLeftPx*this.PX_TO_PT,d=Math.max(1,n-c-g),f=Math.max(1,i.columnCount),T=Rt(i.columnGapTwips),m=he(d,f,T);return{orientation:i.orientation,pageWidthPt:n,pageHeightPt:h,marginTopPt:s,marginRightPt:g,marginBottomPt:P,marginLeftPt:c,contentWidthPt:m,fullContentWidthPt:d,pageMarginLeftPt:c,columnCount:f,columnGapPt:T,columnStridePt:Kt(m,T),...f>1?{columnFlow:{index:0,topPt:s,pageOffset:0}}:{},blockSpacingPt:i.blockSpacingPx*this.PX_TO_PT,indentStepPx:i.indentStepPx,showPageNumbers:i.showPageNumbers,pageBorders:i.pageBorders,pageNumberPosition:i.pageNumberPosition,pageNumberStart:i.pageNumberStart,pageNumberStartExplicit:a&&r?.pageNumberStart!==void 0,pageNumberFormat:i.pageNumberFormat,hyphenationEnabled:i.hyphenationEnabled,lineNumbering:i.lineNumbering}}static physicalPageMetrics(t){return{...t,marginLeftPt:t.pageMarginLeftPt,contentWidthPt:t.fullContentWidthPt,columnFlow:void 0,reservedInsetForPage:void 0}}static computeEngineLayout(t){if(typeof document>"u")return null;const e=document.createElement("canvas").getContext("2d");if(!e)return null;const a=zt(t.pageLayout),i=Yt(a),r=ge({pageWidth:i.pageWidth,pageHeight:i.pageHeight,pageMargin:a.marginLeftPx,pageMarginTop:a.marginTopPx,pageMarginRight:a.marginRightPx,pageMarginBottom:a.marginBottomPx,pageMarginLeft:a.marginLeftPx,availableWidth:Math.max(1,i.pageWidth-a.marginLeftPx-a.marginRightPx),textStartY:a.marginTopPx,indentStepPx:a.indentStepPx,blockSpacingPx:a.blockSpacingPx,hyphenationEnabled:a.hyphenationEnabled,lineNumbering:a.lineNumbering,columnCount:a.columnCount,columnGapPx:de(a.columnGapTwips),pageless:!1});try{return fe(t,me(e),r)}catch{return null}}static computeColumnBalanceTargets(t,e){const a=new Map,i=e.filter(g=>g.type==="section-break"),r=new Set;if(i.forEach((g,P)=>{const c=jt(t.pageLayout,g.layout);Pe(Math.max(1,c.columnCount),g.breakType==="continuous")&&r.add(P)}),r.size===0)return a;const o=this.computeEngineLayout(t);if(!o?.pageGeometries||o.pageGeometries.length===0)return a;const l=new Map(o.pageGeometries.map(g=>[g.pageIndex+1,g.pageTop])),n=(g,P)=>{if(!g||typeof g!="object")return;if(Array.isArray(g)){g.forEach(d=>n(d,P));return}const c=g;typeof c.id=="string"&&c.id&&P.add(c.id),n(c.children,P)},h=new Map;let s=0;for(const g of e){if(g.type==="section-break"){s+=1;continue}let P=h.get(s);P||(P=new Set,h.set(s,P)),n(g,P)}for(const g of r){const P=h.get(g);if(!P||P.size===0)continue;const c=o.fragments.filter(x=>!x.isChrome&&typeof x.pageNumber=="number"&&P.has(x.blockId));if(c.length===0)continue;let d=Number.POSITIVE_INFINITY,f=0;for(const x of c)d=Math.min(d,x.pageNumber),f=Math.max(f,x.pageNumber);const T=l.get(f);if(T===void 0)continue;let m=0;for(const x of c)x.pageNumber===f&&(m=Math.max(m,x.bounds.y+x.bounds.height-T));m<=0||a.set(g,{pageOffset:f-d,bottomPt:m*this.PX_TO_PT+this.COLUMN_BALANCE_SLACK_PT})}return a}static advancePdfColumnOrPage(t,e){const a=e.columnFlow;return!a||e.columnCount<=1?(t.addPage(),!0):a.index<e.columnCount-1?(a.index+=1,e.marginLeftPt=e.pageMarginLeftPt+a.index*e.columnStridePt,!1):(a.index=0,e.marginLeftPt=e.pageMarginLeftPt,t.addPage([e.pageWidthPt,e.pageHeightPt],e.orientation),a.topPt=e.marginTopPt,a.pageOffset+=1,!0)}static advancePdfFlowRegion(t,e){const a=this.advancePdfColumnOrPage(t,e);return{x:e.marginLeftPt,y:a?e.marginTopPt:e.columnFlow?.topPt??e.marginTopPt}}static declaredSpacingPx(t,e){const a=t?.[e];return typeof a=="number"&&Number.isFinite(a)?Math.max(0,a):void 0}static pdfSpaceBeforePt(t,e,a){const i=ue(a,t)??st.declaredSpacingPx(t,"spaceBefore");return i!==void 0?i*st.PX_TO_PT:e.blockSpacingPt}static pdfSpaceAfterPt(t,e){const a=pe(t,e)??st.declaredSpacingPx(t,"spaceAfter");return a!==void 0?a*st.PX_TO_PT:0}static syncPdfColumnOffset(t){const e=t.columnFlow;!e||t.columnCount<=1||(t.marginLeftPt=t.pageMarginLeftPt+e.index*t.columnStridePt)}static getPdfReservedInsetPt(t,e){return e.reservedInsetForPage?.get(this.getPdfCurrentPage(t))??0}static getPdfWritableBottomPt(t,e){return e.pageHeightPt-e.marginBottomPt-this.getPdfReservedInsetPt(t,e)}static getPdfFlowBottom(t,e){const a=this.getPdfWritableBottomPt(t,e),i=e.columnFlow;return!i?.balance||e.columnCount<=1||i.pageOffset!==i.balance.pageOffset?a:Math.min(a,i.balance.bottomPt)}static getPdfPageCount(t){return typeof t.getNumberOfPages=="function"?t.getNumberOfPages():typeof t.internal?.getNumberOfPages=="function"?t.internal.getNumberOfPages():1}static getPdfCurrentPage(t){return t.getCurrentPageInfo?.().pageNumber??this.getPdfPageCount(t)}static createPdfPageNumbering(t,e,a){const i=[...e?.keys()??[]].sort((n,h)=>n-h),r=n=>{let h=t;for(const s of i){if(s>n)break;h=e.get(s)}return h},o=[],l=n=>{const h=Math.max(1,Math.floor(n));for(let s=o.length+1;s<=h;s++){const g=r(s);o.push(s===1||a?.has(s)&&g.pageNumberStartExplicit?g.pageNumberStart:o[s-2]+1)}return o[h-1]};return{metricsForPage:r,numberForPage:l,labelForPage:n=>Te(l(n),r(n).pageNumberFormat)}}static async renderHeaderFooterChrome(t,e,a,i,r,o){const l=this.getPdfPageCount(t),n=d=>{if(!r)return a;let f=a,T=0;for(const[m,x]of r)m<=d&&m>T&&(f=x,T=m);return f},h=d=>{if(!o)return 0;let f=0,T=0;for(const[m,x]of o)m<=d&&m>T&&(f=x,T=m);return f},s=d=>{if(!o)return 1;let f=1;for(const[T]of o)T<=d&&T>f&&(f=T);return f},g=this.createPdfPageNumbering(a,r,o).labelForPage,P=(d,f)=>{if(e.chrome&&e.chrome.length>0)return ta(e.chrome,d,f,h(f));const T=d==="header"?e.headers:e.footers;if(!T)return;const m=f===s(f)&&T.first?"first":f%2===0&&T.even?"even":"default",x=T[m];if(x)return ea(d,m,aa(x),i)},c=async(d,f,T)=>{const m=n(T),x=d.children.slice(0,3).map((M,I)=>{const u=Dt[I];return{...M,...u&&!M.align?{align:u}:{},children:M.children.map(p=>p.type!=="text"||!p.marks?.field?p:p.marks.field==="page"?{...p,text:g(T)}:{...p,text:String(l)})}});for(;x.length<3;){const M=x.length;x.push({type:"paragraph",id:`${d.id}-pdf-column-${M}`,children:[{type:"text",text:""}],...Dt[M]?{align:Dt[M]}:{}})}const F=this.createLayoutForWrapping(m.contentWidthPt,m.indentStepPx,m),b=this.createCanvasTextContext(),B=b?ia(d,b,F,e,x).map(M=>M*this.PX_TO_PT):[m.contentWidthPt/3,m.contentWidthPt/3,m.contentWidthPt/3],N=f?Math.max(10*this.PX_TO_PT,m.marginTopPt/2):m.pageHeightPt-Math.max(10*this.PX_TO_PT,m.marginBottomPt/2);let v=m.marginLeftPt;for(let M=0;M<3;M++){const I=x[M],u=B[M],p=this.measureParagraphLineAdvances(I,u,m.indentStepPx,m).reduce((C,D)=>C+D,0),S=N-p/2,w={...m,marginTopPt:S,marginLeftPt:v,marginRightPt:Math.max(0,m.pageWidthPt-v-u),contentWidthPt:Math.max(1,u)};await this.renderParagraph(t,I,S,u,i,1e9,m.indentStepPx,w),v+=u}};for(let d=0;d<l;d++){const f=d+1;t.setPage(f);const T=P("header",f),m=P("footer",f);T&&await c(T,!0,f),m&&await c(m,!1,f)}this.renderPageNumbers(t,a,i,n,g,(d,f)=>!!P(f,d));for(let d=1;d<=l;d++){const f=n(d),T=xe(f.pageBorders,f.pageWidthPt,f.pageHeightPt,{top:f.marginTopPt,right:f.marginRightPt,bottom:f.marginBottomPt,left:f.pageMarginLeftPt},d===s(d));if(!T.length)continue;t.setPage(d);const m=t.internal?.pages?.[d],x=m?.length??0;t.saveGraphicsState(),t.setLineCap?.("square");for(const F of T){t.setDrawColor(F.color),t.setLineWidth(F.style==="double"?F.widthPt/3:F.widthPt),t.setLineDashPattern(F.style==="dotted"?[F.widthPt,F.widthPt*2]:F.style==="dashed"?[F.widthPt*4,F.widthPt*2]:[],0);for(const b of F.style==="double"?[-F.widthPt/3,F.widthPt/3]:[0]){const B=F.x1===F.x2?b:0,N=F.y1===F.y2?b:0;t.line(F.x1+B,F.y1+N,F.x2+B,F.y2+N)}}t.restoreGraphicsState(),f.pageBorders?.zOrder==="back"&&m&&m.unshift(...m.splice(x))}}static drawWatermarkOnPage(t,e,a,i){t.setFont("helvetica","normal");const r=be(e,a/this.PX_TO_PT,i/this.PX_TO_PT,(x,F)=>{t.setFontSize(F*this.PX_TO_PT);const b=t.getTextWidth(x);return typeof b=="number"?b/this.PX_TO_PT:0})*this.PX_TO_PT;t.setFontSize(r);const o=t.getTextWidth(e.text),l=this.hexToRgb(e.color);t.setTextColor(l.r,l.g,l.b);const n=typeof t.saveGraphicsState=="function"&&typeof t.setGState=="function"&&typeof t.GState=="function";n&&(t.saveGraphicsState(),t.setGState(new t.GState({opacity:e.opacity})));const h=e.diagonal?Math.atan2(i,a):0,s=Math.cos(h),g=Math.sin(h),P=a/2,c=i/2,d=o/2,f=-.35*r,T=P-(d*s+f*g),m=c-(-d*g+f*s);t.text(e.text,T,m,{...h!==0?{angle:h*180/Math.PI}:{}}),n&&t.restoreGraphicsState()}static installWatermarkUnderpaint(t,e){const a=()=>{const r=t.internal?.pageSize,o=typeof r?.getWidth=="function"?r.getWidth():r?.width,l=typeof r?.getHeight=="function"?r.getHeight():r?.height;!o||!l||this.drawWatermarkOnPage(t,e,o,l)},i=t.addPage.bind(t);t.addPage=(...r)=>{const o=i(...r);return a(),o},a()}static renderBodyLineNumbers(t,e,a,i){if(e.length===0)return;const r=h=>{let s,g=0;for(const[P,c]of a)P<=h&&P>g&&(s=c,g=P);return s??this.resolvePdfLayoutMetrics(i)},o=this.getPdfPageCount(t),l=o;let n=!1;for(let h=1;h<=o;h++){const s=r(h),g=s.lineNumbering;if(!g)continue;let P=g.start;if(g.restart==="continuous")for(const d of e)d.pageNumber<h&&P++;const c=s.marginLeftPt-(g.distancePx??12)*this.PX_TO_PT;t.setPage(h),t.setFont("helvetica","normal"),t.setFontSize(10*this.PX_TO_PT),t.setTextColor(115,115,115),n=!0;for(const d of e){if(d.pageNumber!==h)continue;const f=P++;f%g.countBy===0&&t.text(String(f),c,d.y+d.height/2,{align:"right",baseline:"middle"})}}n&&t.setPage(l)}static renderPageNumbers(t,e,a,i,r,o){const l=this.getPdfPageCount(t),n=12,h=n/2+6;t.setFont(this.mapFontFamily(a),"normal"),t.setFontSize(n),t.setTextColor(0,0,0);for(let s=0;s<l;s++){const g=i?.(s+1)??e;if(!g.showPageNumbers)continue;const P=s+1,c=g.pageNumberPosition.startsWith("top");if(o?.(P,c?"header":"footer"))continue;const d=g.pageNumberPosition.endsWith("right"),f=d?g.pageWidthPt-g.marginRightPt:g.marginLeftPt,T=c?Math.max(h,g.marginTopPt/2):g.pageHeightPt-Math.max(h,g.marginBottomPt/2);t.setPage(P),t.text(r?.(P)??ye({pageNumberStart:e.pageNumberStart,pageNumberFormat:e.pageNumberFormat??"decimal"},s),f,T,{align:d?"right":"left"})}}static getParagraphLineIndentPt(t,e,a){return _e(t,e,a)*this.PX_TO_PT}static createLayoutForWrapping(t,e,a=this.getDefaultPdfLayoutMetrics()){const i=t/this.PX_TO_PT;return{pageWidth:a.pageWidthPt/this.PX_TO_PT,pageHeight:a.pageHeightPt/this.PX_TO_PT,pageMargin:a.marginLeftPt/this.PX_TO_PT,pageMarginTop:a.marginTopPt/this.PX_TO_PT,pageMarginRight:a.marginRightPt/this.PX_TO_PT,pageMarginBottom:a.marginBottomPt/this.PX_TO_PT,pageMarginLeft:a.marginLeftPt/this.PX_TO_PT,pageSpacing:0,paragraphSpacing:0,availableWidth:i,textStartY:a.marginTopPt/this.PX_TO_PT,fontSize:16,fontFamily:this.DEFAULT_BODY_FONT,lineHeight:16*1.4,indentStepPx:e,pageless:!1,hyphenationEnabled:a.hyphenationEnabled}}static buildNumberedNoteEntries(t){const e=new Map,a=s=>{if(!s||typeof s!="object")return;if(Array.isArray(s)){s.forEach(a);return}const g=s;g.type!=="footnote"&&(g.marks?.footnoteRef&&!e.has(g.marks.footnoteRef)&&e.set(g.marks.footnoteRef,g.text??""),a(g.children))};a(t.children.filter(s=>s.type!=="footnote"));const i=[...t.notes??[],...t.children.filter(s=>s.type==="footnote")],r={footnote:0,endnote:0},o=new Map,l=new Map;for(const s of i)l.set(s.id,s.noteKind==="endnote"?"endnote":"footnote");for(const[s]of e){const g=l.get(s)??"footnote";r[g]+=1,o.set(s,$t(r[g],g))}const n=i.map(s=>{const g=l.get(s.id)??"footnote",P=o.get(s.id)||$t(r[g]+=1,g);return{footnoteId:s.id,number:P,kind:g,blocks:s.children}}),h=s=>{const g=[...o.keys()],P=g.indexOf(s.footnoteId);return P===-1?g.length:P};return n.sort((s,g)=>h(s)-h(g))}static async renderNoteEntry(t,e,a,i,r,o,l,n,h){n&&this.drawNoteNumeral(t,e.number,i.marginLeftPt,a,r);const s=tt.verticalPaddingPx*st.PX_TO_PT,g=tt.gutterPx*st.PX_TO_PT,P=a+s,c={...i,marginTopPt:i.marginTopPt+s,marginLeftPt:i.marginLeftPt+g,contentWidthPt:Math.max(1,i.contentWidthPt-g),blockSpacingPt:tt.blockSpacingPx*st.PX_TO_PT};if(h){const d=c.marginTopPt;Object.defineProperty(c,"marginTopPt",{get:()=>h.get(this.getPdfCurrentPage(t))??d})}return(await this.renderBodyBlocks(t,e.blocks,c,o,l,r,void 0,void 0,void 0,P)).finalY+s}static drawNoteNumeral(t,e,a,i,r){t.setFont(this.mapFontFamily(r),"normal"),t.setFontSize(Vt*this.PX_TO_PT),t.setTextColor(0,0,0),t.text(e,a+1.5,i+(6+Vt)*st.PX_TO_PT)}static mapFootnoteRefBlocks(t){const e=new Map,a=(i,r)=>{if(!i||typeof i!="object")return;if(Array.isArray(i)){i.forEach(l=>a(l,r));return}const o=i;o.marks?.footnoteRef&&!e.has(o.marks.footnoteRef)&&e.set(o.marks.footnoteRef,r),a(o.children,r)};for(const i of t)a(i,i.id??"");return e}static async renderBodyBlocks(t,e,a,i,r,o,l,n,h,s,g){const P=new Map,c=new Map([[1,0]]),d=[],f=[],T=Fe(e);let m=s??a.marginTopPt,x=a.contentWidthPt,F=a.indentStepPx,b=!0;const B=new Map([[1,this.physicalPageMetrics(a)]]),N=()=>t.getCurrentPageInfo?.()?.pageNumber??t.getNumberOfPages();let v=0;const M=I=>{if(v=I,!g)return;const u=a.columnFlow;!u||a.columnCount<=1||(u.index=0,u.topPt=m,u.pageOffset=0,u.balance=g.balanceBySection.get(I),a.marginLeftPt=a.pageMarginLeftPt)};M(0);for(let I=0;I<e.length;I++){this.syncPdfColumnOffset(a);const u=e[I],p=this.getPdfFlowBottom(t,a);if(u.type==="page-break"){!b&&a.blockSpacingPt>0&&(m+=a.blockSpacingPt),u.id&&P.set(u.id,N()),t.addPage([a.pageWidthPt,a.pageHeightPt],a.orientation),a.columnFlow&&(a.columnFlow.index=0,a.columnFlow.topPt=a.marginTopPt,a.columnFlow.pageOffset+=1,a.marginLeftPt=a.pageMarginLeftPt),m=a.marginTopPt,b=!0;continue}if(u.type==="docx-raw"){const k=St.heightPx*.75,R=a.pageWidthPt-a.marginLeftPt-a.marginRightPt,G=Se(u,R/.75)*.75;!b&&a.blockSpacingPt>0&&(m+=a.blockSpacingPt),m+k>p&&(m=this.advancePdfFlowRegion(t,a).y),u.id&&P.set(u.id,N());const H=a.marginLeftPt;t.setDrawColor(107,114,128),t.setFillColor(243,244,246),t.setLineWidth(.75),t.roundedRect(H,m,G,k,St.cornerRadiusPx*.75,St.cornerRadiusPx*.75,"FD"),t.setFont("courier","normal"),t.setFontSize(St.fontPx*.75),t.setTextColor(107,114,128),t.text(Le(u),H+St.paddingXPx*.75,m+k/2,{baseline:"middle"}),t.setTextColor(0,0,0),m+=k,b=!1;continue}if(u.type==="section-break"){u.id&&P.set(u.id,N());const k=l?.get(u.id),R=k?n?.(k)??k:void 0;if(R){const H=we(u.breakType==="continuous",{width:a.pageWidthPt,height:a.pageHeightPt},{width:R.pageWidthPt,height:R.pageHeightPt});a=R,x=R.contentWidthPt,F=R.indentStepPx,H?(m=Oe(m,a.blockSpacingPt,0,a.marginTopPt),m>this.getPdfWritableBottomPt(t,a)&&(t.addPage([a.pageWidthPt,a.pageHeightPt],a.orientation),m=a.marginTopPt)):(t.addPage([R.pageWidthPt,R.pageHeightPt],R.orientation),m=a.marginTopPt),B.set(N(),this.physicalPageMetrics(R))}else t.addPage(),m=a.marginTopPt;const G=h?.get(u.id);G!==void 0&&c.set(N(),G),M(v+1),b=!0;continue}if(u.type==="toc"){const k=a.blockSpacingPt;!b&&k>0&&(m+=k),b=!1,u.id&&P.set(u.id,N());const R=Ce({children:e.map(_=>_.type==="paragraph"?this.paragraphForPdfOutput(_):_)},ke(u)),G=(u.fontSize??16)*this.PX_TO_PT,H=G*1.4,j=Zt.paddingYPx*this.PX_TO_PT;t.setFont(this.mapFontFamily(u.fontFamily??o),"normal"),t.setFontSize(G);const y=this.hexToRgb(u.color??"#000000");t.setTextColor(y.r,y.g,y.b),m+=j,R.length===0&&(m+H>p&&(m=this.advancePdfFlowRegion(t,a).y),m+=H);for(const _ of R)m+H>p&&(m=this.advancePdfFlowRegion(t,a).y),f.push({pdfPage:N(),headingBlockId:_.blockId,block:u,entry:_,baseline:m+G,left:a.marginLeftPt,width:a.contentWidthPt,fontName:this.mapFontFamily(u.fontFamily??o),fontSizePt:G}),m+=H;m+=j;continue}const S=I>0?e[I-1]:void 0,w=st.pdfSpaceBeforePt(u,a,S)+st.pdfSpaceAfterPt(S,u);if(!b&&w>0?m+=w:b&&I===0&&a.keepFirstBlockDeclaredSpaceBefore&&(m+=(st.declaredSpacingPx(u,"spaceBefore")??0)*st.PX_TO_PT),b=!1,u.id&&u.type!=="paragraph"&&P.set(u.id,N()),u.type==="container"){const k=await this.renderContainerBlock(t,u,m,x,o,i,r,a);m=k.nextY;for(const[R,G]of k.blockStartPages)P.set(R,G);d.push(...k.lineMarks);continue}if(u.type==="placeholder"){m=this.advancePlaceholderBlock(t,u,m,a);continue}if(u.type==="image"){const k=await this.renderImageBlock(t,u,m,x,a);k&&(m=k.nextY);continue}if(u.type==="math"){const k=u;m=(await this.renderMathBlock(t,k,m,x,p,a)).nextY;continue}if(u.type==="list"){m=await this.renderListBlock(t,u,m,x,o,a,T.get(u.id),d);continue}if(u.type==="table"){m=await this.renderTableBlock(t,u,m,x,o,i,r,a);continue}if(u.type==="code"){m=await this.renderCodeBlock(t,u,m,x,p,a.marginLeftPt,i,r,a,d);continue}if(u.type!=="paragraph")continue;const C=u,{required:D,firstLineAdvance:V}=this.getRequiredParagraphStartHeight(e,I,x,F,a);D>0&&m+D>p&&a.marginTopPt+D<=p&&m!==a.marginTopPt&&(m=this.advancePdfFlowRegion(t,a).y),m+V>p&&m!==a.marginTopPt&&(m=this.advancePdfFlowRegion(t,a).y),C.id&&P.set(C.id,N()),m=await this.renderParagraph(t,C,m,x,o,p,F,a,d)}if(f.length>0){const I=N(),u=this.createPdfPageNumbering(B.get(1)??a,B,c).labelForPage;for(const p of f){t.setPage(p.pdfPage),t.setFont(p.fontName,"normal"),t.setFontSize(p.fontSizePt);const S=this.hexToRgb(p.block.color??"#000000");t.setTextColor(S.r,S.g,S.b);const w=P.get(p.headingBlockId),C=w!==void 0?u(w):"",D=Me(p.block,p.entry,p.left,p.width,C,V=>t.getTextWidth(V),this.PX_TO_PT);D.text&&t.text(D.text,D.textX,p.baseline,{align:D.align,...D.rtl?{isInputVisual:!1,isOutputVisual:!0,isInputRtl:!0,isOutputRtl:!1}:{}}),C&&D.leaderEnd-D.leaderStart>Zt.minimumLeaderWidthPx*this.PX_TO_PT&&(t.setDrawColor(150),typeof t.setLineDashPattern=="function"&&t.setLineDashPattern([.8,2.2],0),t.line(D.leaderStart,p.baseline,D.leaderEnd,p.baseline),typeof t.setLineDashPattern=="function"&&t.setLineDashPattern([],0),t.setDrawColor(0,0,0)),C&&t.text(C,D.numberX,p.baseline)}t.setPage(I)}return{blockStartPages:P,pageMetrics:B,pageSections:c,lineMarks:d,finalY:m}}static async renderContainerBlock(t,e,a,i,r,o,l,n){const h=Math.max(0,e.padding??Et.paddingPx)*this.PX_TO_PT,s=this.getPdfFlowBottom(t,n);a+h>s&&a!==n.marginTopPt&&(a=this.advancePdfFlowRegion(t,n).y);const g=()=>t.getCurrentPageInfo?.()?.pageNumber??t.getNumberOfPages(),P=g(),c=n.columnFlow?.index??0,d=n.columnFlow?.topPt??n.marginTopPt,f={...n,keepFirstBlockDeclaredSpaceBefore:void 0,marginTopPt:n.marginTopPt+h,marginRightPt:n.marginRightPt+h,marginBottomPt:n.marginBottomPt+h,marginLeftPt:n.marginLeftPt+h,contentWidthPt:Math.max(1,i-h*2),pageMarginLeftPt:n.pageMarginLeftPt+h},T=await this.renderBodyBlocks(t,e.children,f,o,l,r,void 0,void 0,void 0,a+h);let m=T.finalY+h;this.syncPdfColumnOffset(n),m>s&&T.finalY!==f.marginTopPt&&(m=this.advancePdfFlowRegion(t,n).y+h);const x=g(),F=n.columnFlow?.index??0,b=x,B=this.hexToRgb(e.borderColor??Et.borderColor);t.setDrawColor(B.r,B.g,B.b),t.setLineWidth(Et.borderWidthPx*this.PX_TO_PT);let N=P,v=c;for(;N<x||N===x&&v<=F;){t.setPage(N);const M=N===P&&v===c,I=N===x&&v===F,u=M?a:N===P?d:n.marginTopPt,p=I?m:s;p>u&&t.rect(n.pageMarginLeftPt+v*n.columnStridePt,u,i,p-u,"S"),v+=1,v>=n.columnCount&&(v=0,N+=1)}return t.setPage(b),{nextY:m,blockStartPages:T.blockStartPages,lineMarks:T.lineMarks}}static advancePlaceholderBlock(t,e,a,i){const r=Math.max(0,e.height||100)*this.PX_TO_PT,o=this.getPdfFlowBottom(t,i);return a+r>o&&a!==i.marginTopPt&&(a=this.advancePdfFlowRegion(t,i).y),a+r}static async toBlob(t,e,a){class i extends this{}return i.bundledGenreFamilies=new Map,i.scriptFallbackFamilies=new Map,i.shapingFonts=new Map,i.embeddedFamilyNames=new Map,i.inlineCodeFontFamily="courier",i.renderDocument(t,e,a)}static async renderDocument(t,e,a){t=this.splitDocumentFallbackRuns(t,await this.loadFallbackCoverage(t));const i=a||{...It,background:Lt.codeBackground,text:Lt.codeText};await this.ensureAllLatexRendered(t);const r=this.resolvePdfLayoutMetrics(t),o=t.children.filter(S=>S.type==="section-break"),l=new Map,n=new Map,h=t.pageLayout?.pageNumberRestart===!0?{...r,pageNumberStartExplicit:!0}:r;o.forEach((S,w)=>{const C=o[w+1];l.set(S.id,C?.layout?this.resolvePdfMetricsFromSettings(C.layout,t.pageLayout,!0):C?r:h),n.set(S.id,w+1)});const s=o[0]?.layout?this.resolvePdfMetricsFromSettings(o[0].layout,t.pageLayout,!1):r,g=await import("./jspdf.es.min-DlTF8uTw.js").then(S=>S.j),P=g.jsPDF??g.default,c=new P({orientation:s.orientation,unit:"pt",format:[s.pageWidthPt,s.pageHeightPt]}),d=this.DEFAULT_BODY_FONT,{hasSourceCodePro:f}=await this.registerDocumentFonts(c,t,d);e&&c.setProperties({title:e});const T=Ne(t.watermark);T&&this.installWatermarkUnderpaint(c,T);const m=[...t.children.filter(S=>S.type==="footnote"),...t.notes??[]],x=t.children.filter(S=>S.type!=="footnote"&&S.type!=="header-footer"),F={balanceBySection:this.computeColumnBalanceTargets(t,x)},b=m.length>0?this.buildNumberedNoteEntries(t):[],B=b.filter(S=>S.kind==="footnote"),N=b.filter(S=>S.kind==="endnote");let v=new Map([[1,s]]),M=new Map([[1,0]]),I=s.marginTopPt,u=[],p=new Map;if(B.length===0){const S=await this.renderBodyBlocks(c,x,s,i,f,d,l,void 0,n,void 0,F);v=S.pageMetrics,M=S.pageSections,u=S.lineMarks,I=S.finalY}else{const S=B,w=tt.separatorSpacePx*this.PX_TO_PT,C=this.mapFootnoteRefBlocks(x),D=new P({orientation:s.orientation,unit:"pt",format:[s.pageWidthPt,s.pageHeightPt]});await this.registerDocumentFonts(D,t,d);const V=await this.renderBodyBlocks(D,x,s,i,f,d,l,void 0,void 0,void 0,F),k=L=>{let A=s,z=0;for(const[U,Y]of V.pageMetrics)U<=L&&U>z&&(A=Y,z=U);return A},R=new Map,G=D.getNumberOfPages();for(const L of S){const A=C.get(L.footnoteId),z=(A?V.blockStartPages.get(A):void 0)??G,U=R.get(z)??[];U.push(L),R.set(z,U)}const H=new P({orientation:r.orientation,unit:"pt",format:[r.pageWidthPt,1e4]});await this.registerDocumentFonts(H,t,d);const j=new Map;for(const[L,A]of R){const z=k(L);for(const U of A){const Y={...z,pageHeightPt:1e4,marginTopPt:0,marginBottomPt:0},Z=await this.renderNoteEntry(H,U,0,Y,d,i,f,!1);j.set(U.footnoteId,Math.max(0,Z))}}const y=new Map;for(const[L,A]of R){const z=k(L),U=w+A.reduce((Q,rt)=>Q+(j.get(rt.footnoteId)??0),0),Y=z.pageHeightPt-z.marginTopPt-z.marginBottomPt,Z=V.lineMarks.filter(Q=>Q.pageNumber===L).sort((Q,rt)=>Q.y-rt.y).slice(0,tt.minimumBodyLinesBeforeFootnotes),q=this.getParagraphLineHeight({type:"paragraph",id:"__pdf_measure__",children:[]}),ot=(Z.length>0?Math.max(0,Math.max(...Z.map(Q=>Q.y+Q.height))-z.marginTopPt):q*tt.minimumBodyLinesBeforeFootnotes)+tt.bodyKeepSlackPx*this.PX_TO_PT;y.set(L,Math.min(U,Math.max(0,Y-ot)))}p=y;const _=L=>({...L,reservedInsetForPage:y}),X=_(s),O=await this.renderBodyBlocks(c,x,X,i,f,d,l,_,n,void 0,F);v=O.pageMetrics,M=O.pageSections,u=O.lineMarks,I=O.finalY;const K=new Map;for(const L of O.lineMarks)K.set(L.pageNumber,Math.max(K.get(L.pageNumber)??0,L.y+L.height+tt.separatorSpacePx*this.PX_TO_PT+tt.verticalPaddingPx*this.PX_TO_PT));const W=c.getNumberOfPages();for(const[L,A]of[...R.entries()].sort((z,U)=>z[0]-U[0])){const z=Math.min(L,W);c.setPage(z);const U=k(L),Y=y.get(L)??0,Z=U.pageHeightPt-U.marginBottomPt-Y+w;c.setDrawColor(120),c.setLineWidth(.75),c.line(U.marginLeftPt,Z-7,U.marginLeftPt+Math.max(tt.separatorWidthMinPx*this.PX_TO_PT,U.contentWidthPt*tt.separatorWidthFraction),Z-7);let q=Z;for(let ot=0;ot<A.length;ot++){ot>0&&(q+=tt.blockSpacingPx*this.PX_TO_PT);const Q=this.getPdfCurrentPage(c),rt=c.addPage.bind(c),lt=[];c.addPage=(...ct)=>{const et=this.getPdfCurrentPage(c)+1;return et<=W?c.setPage(et):rt(...ct),lt.push(this.getPdfCurrentPage(c)),c};try{q=await this.renderNoteEntry(c,A[ot],q,U,d,i,f,!0,K)}finally{c.addPage=rt}for(const ct of lt){c.setPage(ct),c.setDrawColor(120),c.setLineWidth(.75);const et=(K.get(ct)??U.marginTopPt)-tt.verticalPaddingPx*this.PX_TO_PT*2;c.line(U.marginLeftPt,et,U.marginLeftPt+U.contentWidthPt,et)}c.setPage(lt[lt.length-1]??Q)}}c.setPage(this.getPdfPageCount(c))}if(N.length>0){const S=new P({orientation:r.orientation,unit:"pt",format:[r.pageWidthPt,1e4]});await this.registerDocumentFonts(S,t,d);let w=tt.separatorToContentPx*this.PX_TO_PT;for(let H=0;H<N.length;H++){H>0&&(w+=tt.blockSpacingPx*this.PX_TO_PT);const j={...r,pageHeightPt:1e4,marginTopPt:0,marginBottomPt:0};w+=await this.renderNoteEntry(S,N[H],0,j,d,i,f,!1)}const C=this.getPdfPageCount(c);let D=s,V=0;for(const[H,j]of v)H<=C&&H>=V&&(D=j,V=H);const k=I+tt.inlineEndnoteGapPx*this.PX_TO_PT,R=k+w<=D.pageHeightPt-D.marginBottomPt-(p.get(C)??0);let G;R?(c.setPage(C),G=k):(c.addPage(),G=D.marginTopPt+tt.newPageSeparatorOffsetPx*this.PX_TO_PT),c.setDrawColor(120),c.setLineWidth(.75),c.line(D.marginLeftPt,G,D.marginLeftPt+Math.max(tt.separatorWidthMinPx*this.PX_TO_PT,D.contentWidthPt*tt.separatorWidthFraction),G),G+=tt.separatorToContentPx*this.PX_TO_PT;for(let H=0;H<N.length;H++)H>0&&(G+=tt.blockSpacingPx*this.PX_TO_PT),G=await this.renderNoteEntry(c,N[H],G,D,d,i,f,!0)}return await this.renderHeaderFooterChrome(c,t,r,d,v,M),this.renderBodyLineNumbers(c,u,v,t),c.output("blob")}static measureLineAdvancePt(t,e,a,i){let r=0,o=0;for(const h of t)h.latexImage?o=Math.max(o,h.latexImage.contentHeight*this.PX_TO_PT):r=Math.max(r,h.marks?.fontSize?h.marks.fontSize*this.PX_TO_PT:e);r===0&&(r=e);const l=i??(a?this.LINE_HEIGHT_MULTIPLIERS.heading:this.LINE_HEIGHT_MULTIPLIERS.paragraph),n=r*l;return o>n*1.25?o:n}static parseParagraphDecoration(t){const e=t.shading&&t.shading!=="transparent"?t.shading:void 0;if(!e&&!t.borders)return null;let a;if(t.borders)try{a=JSON.parse(t.borders)}catch{a=void 0}return!e&&!a?null:{...e?{shading:e}:{},...a?{edges:a}:{}}}static drawParagraphDecorationSlice(t,e,a,i,r,o,l,n){if(e.shading){const f=this.hexToRgb(e.shading);t.setFillColor(f.r,f.g,f.b),t.rect(a,i,r,o+(n?0:.5),"F")}const h=e.edges;if(!h)return;const s=(f,T,m,x,F)=>{const b=h[f];if(!b||b.style==="none")return;const B=Math.max(.4,(b.width??1)*this.PX_TO_PT),N=m===F,v=this.hexToRgb(b.color??"#000000");if(t.setDrawColor(v.r,v.g,v.b),t.setLineWidth(B),N&&oa(b.style)){const u=na(T,x,this.PX_TO_PT);for(const p of u.lines)t.line(p.from,m,p.to,m);t.setFillColor(v.r,v.g,v.b);for(const p of u.ornaments)if(b.style==="stars")for(const S of ra(p.cx,m,p.radius))t.line(S.x1,S.y1,S.x2,S.y2);else{const S=sa(p.cx,m,p.radius);t.lines([[S[1].x-S[0].x,S[1].y-S[0].y],[S[2].x-S[1].x,S[2].y-S[1].y],[S[3].x-S[2].x,S[3].y-S[2].y]],S[0].x,S[0].y,[1,1],"F",!0)}return}const M=typeof t.setLineDashPattern=="function";M&&(b.style==="dashed"?t.setLineDashPattern([4.5,2.25],0):b.style==="dotted"?t.setLineDashPattern([1.5,1.5],0):t.setLineDashPattern([],0));const I=u=>{t.line(T+(N?0:u),m+(N?u:0),x+(N?0:u),F+(N?u:0))};b.style==="double"?(I(-B),I(B)):I(0),M&&t.setLineDashPattern([],0)},g=n?0:.5,P=f=>Math.max(0,h[f]?.space??0)*this.PX_TO_PT,c=a-P("left"),d=a+r+P("right");if(s("left",c,i,c,i+o+g),s("right",d,i,d,i+o+g),l){const f=i-P("top");s("top",a,f,a+r,f)}if(n){const f=i+o+P("bottom");s("bottom",a,f,a+r,f)}}static measureParagraphLineAdvances(t,e,a,i){const r=this.createCanvasTextContext();if(!r)return[this.getParagraphLineHeight(t)];const o=this.createLayoutForWrapping(e,a,i),l=Jt(this.paragraphForPdfOutput(t),r,o);if(l.length===0)return[this.getEmptyParagraphLineHeight(t)];const n=this.getParagraphFontSize(t),h=this.getLineSpacingMultiplier(t);return l.map(s=>this.measureLineAdvancePt(s.segments.map(g=>({marks:g.marks})),n,!!t.heading,h))}static paragraphForPdfOutput(t){const e=t.children.filter(a=>a.type!=="text"||!a.marks?.hidden||!!a.marks.footnoteRef);return e.length===t.children.length?t:{...t,children:e}}static getParagraphDirection(t){let e="";for(const a of t.children)e+=a.text??"";return Re(t.direction,e)}static getEffectiveParagraphAlignment(t,e){return t.align||(e==="rtl"?"right":"left")}static getRequiredParagraphStartHeight(t,e,a,i,r){const o=t[e];if(!o||o.type!=="paragraph")return{required:0,firstLineAdvance:0};const l=vt(o),n=this.measureParagraphLineAdvances(o,a,i,r),h=this.paragraphForPdfOutput(o).children.every(c=>c.type==="text"&&c.text==="")||n.length===0?this.getEmptyParagraphLineHeight(o):n[0],s=c=>c.reduce((d,f)=>d+Math.max(0,f),0);let g=0;if(l.keepLines?g=s(n):l.widowControl&&n.length>=2&&(g=n[0]+n[1]),!l.keepNext)return{required:g,firstLineAdvance:h};let P=0;for(let c=0;c<qt;c++){const d=t[e+c+1];if(!d||d.type!=="paragraph")break;const f=this.measureParagraphLineAdvances(d,a,i,r);if(f.length===0)break;const T=t[e+c];P+=st.pdfSpaceBeforePt(d,r,T)+st.pdfSpaceAfterPt(T,d);const m=vt(d);if(m.keepNext&&c<qt-1){P+=s(f);continue}P+=f[0],m.widowControl&&f.length>=2&&(P+=f[1]);break}return{required:Math.max(g,s(n)+P),firstLineAdvance:h}}static async renderParagraph(t,e,a,i,r,o,l=this.resolveIndentStepPx(),n=this.getDefaultPdfLayoutMetrics(),h){let s=a;const g=this.paragraphForPdfOutput(e),P=this.getParagraphFontSize(e),c=this.getParagraphLineHeight(e),d=this.getLineSpacingMultiplier(e);let f=Number.isFinite(o)&&o>0?o:this.getPdfFlowBottom(t,n),T=n.marginLeftPt;const m=()=>{const M=this.advancePdfFlowRegion(t,n);s=M.y,T=M.x,f=this.getPdfFlowBottom(t,n)},x=(M=c)=>{if(s+M>f){if(s===n.marginTopPt)return;m()}},F=()=>t.getCurrentPageInfo?.()?.pageNumber??t.getNumberOfPages(),b=this.getParagraphDirection(g),B=this.getEffectiveParagraphAlignment(e,b),N=this.parseParagraphDecoration(e);if(g.children.length===0||g.children.length===1&&g.children[0].type==="text"&&g.children[0].text===""){const M=this.getEmptyParagraphLineHeight(e);return N&&(x(M),this.drawParagraphDecorationSlice(t,N,T,s,i,M,!0,!0)),s+M}const v=this.createCanvasTextContext();if(v){const M=this.createLayoutForWrapping(i,l,n),I=Jt(g,v,M),u=await this.prepareLatexImages(g,P),p=I.map(w=>w.segments.map(C=>C.marks?.latex?{text:C.text,marks:C.marks,latexImage:u.get(C.text)}:{text:C.text,marks:C.marks,font:C.marks?.fontFamily})),S=vt(e);for(let w=0;w<I.length;w++){const C=I[w],D=p[w];if(D.length>0){const V=this.getParagraphLineIndentPt(e,w,l),k=Math.max(1,i-V),R=this.measureLineAdvancePt(D,P,!!e.heading,d),G=p[w+1];if(S.widowControl&&I.length>=3&&w===I.length-2&&G&&s+R<=f){const j=this.measureLineAdvancePt(G,P,!!e.heading,d);s+R+j>f&&s!==n.marginTopPt&&m()}x(R);const H=b==="rtl"?T:T+V;N&&this.drawParagraphDecorationSlice(t,N,T,s,i,R,w===0,w===I.length-1),h?.push({pageNumber:F(),y:s,height:R}),s=this.renderLine(t,D,s,H,k,B,P,r,!!e.heading,d,w===I.length-1,{direction:b,...C.tabLayout?{tabLayoutPx:C.tabLayout.segments,...C.tabLayout.rtl?{tabRtl:!0,tabWidthPx:C.tabLayout.width}:{}}:{},...C.hyphenTrailing?{hyphenTrailing:!0}:{}})}}return s}return this.renderParagraphWithJsPDFWrapping(t,g,a,i,r,o,l,n)}static async prepareLatexImages(t,e){const a=new Map;for(const i of t.children)if(i.type==="text"&&i.marks?.latex){const r=await this.renderLatexToImage(i.text,!1,e);r&&a.set(i.text,r)}return a}static async renderParagraphWithJsPDFWrapping(t,e,a,i,r,o,l=this.resolveIndentStepPx(),n=this.getDefaultPdfLayoutMetrics()){let h=a;const s=this.getParagraphFontSize(e),g=this.getParagraphLineHeight(e),P=this.getLineSpacingMultiplier(e);let c=Number.isFinite(o)&&o>0?o:this.getPdfFlowBottom(t,n),d=n.marginLeftPt;const f=()=>{if(h+g>c){if(h===n.marginTopPt)return;const M=this.advancePdfFlowRegion(t,n);h=M.y,d=M.x,c=this.getPdfFlowBottom(t,n)}},T=this.getParagraphDirection(e),m=this.getEffectiveParagraphAlignment(e,T),x=await this.processTextNodesWithLatex(e.children,s);if(x.length===0)return h+this.getEmptyParagraphLineHeight(e);let F=[],b=0,B=0;const N=()=>Math.max(1,i-this.getParagraphLineIndentPt(e,B,l)),v=(M=!1)=>{if(F.length===0)return;f();const I=this.getParagraphLineIndentPt(e,B,l);h=this.renderLine(t,F,h,T==="rtl"?d:d+I,Math.max(1,i-I),m,s,r,!!e.heading,P,M,{direction:T}),F=[],b=0,B+=1};if(x.length===1&&x[0].text==="")return a+this.getEmptyParagraphLineHeight(e);for(const M of x){if(M.latexImage){const u=M.latexImage.contentWidth*this.PX_TO_PT;b+u>N()&&F.length>0&&v(),F.push({text:M.text,marks:M.marks,font:M.font||M.marks?.fontFamily,latexImage:M.latexImage}),b+=u;continue}this.setRunFont(t,M,r),t.setFontSize(this.getRunEffectiveFontSizePt(M.marks,s));const I=M.text.split(`
2
- `);for(let u=0;u<I.length;u++){const p=I[u];u>0&&F.length>0&&v();const S=p.split(/(\s+)/);for(const w of S){const C=this.measureRunDisplayWidthPt(t,w,M.marks);b+C>N()&&F.length>0&&v(),(w.trim()||F.length>0)&&(F.push({text:w,marks:M.marks,font:M.font||M.marks?.fontFamily}),b+=C)}}}return F.length>0&&v(!0),h}static getLineSpacingMultiplier(t){return Qt(t)}static async renderListBlock(t,e,a,i,r,o=this.getDefaultPdfLayoutMetrics(),l,n){if(!e.children.length)return a;let h=a;const s=this.getPdfFlowBottom(t,o),g=l??Ee(e),P={...g.counters};let c;if(e.variant==="ordered"&&e.numberingFormat)try{t.setFont(this.mapFontFamily(r),"normal"),t.setFontSize(this.FONT_SIZES.normal);let d=0;for(const T of Ie(e,g))d=Math.max(d,t.getTextWidth(T)/this.PX_TO_PT);const f=this.ORDERED_LIST_INDENT_PT/this.PX_TO_PT;c=Math.min(Math.max(f,Math.ceil(d)+10),240)*this.PX_TO_PT}catch{c=void 0}for(let d=0;d<e.children.length;d++){const f=e.children[d],T=this.getListIndentLevel(f);let m;e.variant==="ordered"?m={type:"ordered",label:this.computeOrderedMarkerLabel(P,T,g.start,ve(e.numberingFormat))}:e.variant==="todo"?m={type:"todo",checked:!!f.checked}:m={type:"bullet",indentLevel:T},h=await this.renderListItem(t,f,e,m,h,i,s,r,o,n,c)}return h}static async renderListItem(t,e,a,i,r,o,l,n,h=this.getDefaultPdfLayoutMetrics(),s,g){let P=r+Math.max(0,e.spaceBefore??0)*this.PX_TO_PT;const c=this.getListIndentLevel(e)*this.SUBLIST_INDENT_PT,d=n,f=this.FONT_SIZES.normal,T=this.mapFontFamily(d);t.setFont(T,"normal"),t.setFontSize(f);const m=g??this.getListIndentPt(a.variant);let x=h.marginLeftPt,F=x+c+m,b=l;const B=()=>{const _=this.advancePdfFlowRegion(t,h);P=_.y,x=_.x,F=x+c+m,b=this.getPdfFlowBottom(t,h)};let N=o-c-m;(!Number.isFinite(N)||N<=0)&&(N=Math.max(o*.3,o*.1));let v="";for(const _ of e.children)v+=_.text??"";const M=Be(v)??"ltr",I=M==="rtl",u=()=>I?x:F,p=()=>I?x+N:F,S=e.lineSpacing??a.lineSpacing??this.LINE_HEIGHT_MULTIPLIERS.paragraph,w=f*S,C=await this.processTextNodesWithLatex(e.children,f);let D=C.length>0?C:[{text:""}];a.variant==="todo"&&e.checked&&(D=D.map(_=>_.latexImage?_:{..._,marks:{..._.marks,strikethrough:!0,color:Lt.todoCheckedText}}));const V=new Set(Object.values(this.SCRIPT_FALLBACK_FONTS).map(_=>_.family)),k=[...C].reverse().find(_=>!_.latexImage&&!_.marks?.latex&&_.text.length>0&&!V.has(_.marks?.fontFamily??""))?.marks;let R=[],G=0,H=!1;const j=()=>{H||(P+w>b&&P!==h.marginTopPt&&B(),this.drawListMarker(t,i,p(),P,w,f,d,n,I,k),H=!0)},y=()=>{R.length!==0&&(P+w>b&&P!==h.marginTopPt&&B(),j(),s?.push({pageNumber:t.getCurrentPageInfo?.().pageNumber??t.getNumberOfPages(),y:P,height:this.measureLineAdvancePt(R,f,!1,S)}),P=this.renderLine(t,R,P,u(),N,I?"right":"left",f,d,!1,S,!0,{direction:M}),R=[],G=0)};for(const _ of D){if(_.latexImage){const O=_.latexImage.contentWidth*this.PX_TO_PT;G+O>N&&R.length>0&&y(),R.push({text:_.text,marks:_.marks,font:_.font,latexImage:_.latexImage}),G+=O;continue}this.setRunFont(t,_,d||n),t.setFontSize(this.getRunEffectiveFontSizePt(_.marks,f));const X=_.text.split(`
3
- `);for(let O=0;O<X.length;O++){const K=X[O];O>0&&(R.length>0?y():(j(),P+=w));const W=K.split(/(\s+)/);for(const L of W){const A=this.measureRunDisplayWidthPt(t,L,_.marks);G+A>N&&R.length>0&&y(),(L.trim()||R.length>0)&&(R.push({text:L,marks:_.marks,font:_.font}),G+=A)}}}return R.length>0&&y(),H||(j(),P+=w),P+Math.max(0,e.spaceAfter??0)*this.PX_TO_PT}static drawListMarker(t,e,a,i,r,o,l,n,h,s){t.setDrawColor(0,0,0);const g=(d,f=0)=>h?2*a-d-f:d,P=a-this.BULLET_MARKER_WIDTH_PT,c=i+r/2;switch(e.type){case"bullet":{const d=g(P+this.BULLET_CENTER_OFFSET_PT),f=this.BULLET_RADIUS_PT;if(e.indentLevel<=0)t.circle(d,c,f,"F");else if(e.indentLevel===1)t.circle(d,c,f,"S");else{const T=this.BULLET_SQUARE_HALF_PT*2,m=g(P+this.BULLET_SQUARE_INSET_PT,T),x=c-this.BULLET_SQUARE_HALF_PT+this.BULLET_SQUARE_VERTICAL_ADJUST_PT;t.rect(m,x,T,T,"S")}break}case"todo":{const d=this.TODO_CHECKBOX_SIZE_PT,f=g(P-this.TODO_CHECKBOX_OFFSET_PT,d),T=c-d/2;t.setLineWidth(.8),typeof t.roundedRect=="function"?t.roundedRect(f,T,d,d,this.TODO_CHECKBOX_RADIUS_PT,this.TODO_CHECKBOX_RADIUS_PT,"S"):t.rect(f,T,d,d,"S"),e.checked&&(t.setLineWidth(1.2),t.line(f+d*.15,T+d*.55,f+d*.4,T+d*.75),t.line(f+d*.4,T+d*.75,f+d*.85,T+d*.25));break}case"ordered":{const d=e.label,f=s?{fontFamily:s.fontFamily,fontSize:s.fontSize,bold:s.bold,italic:s.italic,code:s.code,superscript:s.superscript,subscript:s.subscript}:void 0;this.setRunFont(t,{text:d,marks:f},l||n);const T=this.getRunEffectiveFontSizePt(f,o);t.setFontSize(T);const m=t.getTextWidth(d),x=h?a+this.ORDERED_LABEL_GAP_PT:a-this.ORDERED_LABEL_GAP_PT-m;t.text(d,x,i+T);break}}t.setLineWidth(.5),t.setTextColor(0,0,0)}static async renderTableBlock(t,e,a,i,r,o=It,l=!1,n=this.getDefaultPdfLayoutMetrics()){if(!e.children||e.children.length===0)return a;const h=this.getPdfFlowBottom(t,n);let s=a;const g=e.borderWidth??Bt.borderWidthPx,P=e.borderColor??Bt.borderColor,c=this.hexToRgb(P),d=Number.isFinite(e.cellPadding)?Math.max(0,Math.round(e.cellPadding)):Bt.cellPaddingPx,f=d*this.PX_TO_PT,T=De(e.borders),m=Xe(e),x=m.cols,F=Math.min(e.tableWidth?e.tableWidth*this.PX_TO_PT:i,i),b=e.align==="center"?(i-F)/2:e.align==="right"?i-F:0;let B=n.marginLeftPt+b;const N=Ae(e.columnWidths??[],x).map(y=>y/100*F),v=[0];for(let y=0;y<x;y++)v.push(v[y]+N[y]);const M=y=>v[Math.min(y.col+y.colSpan,x)]-v[y.col],I=new Map;for(const y of m.cells){const _=We(d,y.cell.padding),X={top:_.top*this.PX_TO_PT,right:_.right*this.PX_TO_PT,bottom:_.bottom*this.PX_TO_PT,left:_.left*this.PX_TO_PT},O=M(y)-X.left-X.right,K=this.extractCellBlocks(y.cell);let W=this.FONT_SIZES.normal*this.LINE_HEIGHT_MULTIPLIERS.paragraph;if(K.length>0){const A=await import("./jspdf.es.min-DlTF8uTw.js").then(Z=>Z.j),z=A.jsPDF??A.default,U=new z({orientation:"portrait",unit:"pt",format:[Math.max(72,O),this.UNBOUNDED_CELL_FLOW_BOTTOM_PT]});await this.registerCurrentPdfFonts(U,l);const Y={...n,keepFirstBlockDeclaredSpaceBefore:!0,pageWidthPt:Math.max(72,O),pageHeightPt:this.UNBOUNDED_CELL_FLOW_BOTTOM_PT,marginTopPt:0,marginRightPt:0,marginBottomPt:0,marginLeftPt:0,contentWidthPt:Math.max(1,O)};W=(await this.renderBodyBlocks(U,K,Y,o,l,r,void 0,void 0,void 0,0)).finalY}const L=X.top+W+X.bottom;I.set(y.cell.id,{blocks:K,width:O,flowHeight:W,contentHeight:L,pad:X})}const u=e.children.map((y,_)=>{let X=0;for(const O of y.children){const K=m.byId.get(O.id);K&&K.rowSpan>1||(X=Math.max(X,I.get(O.id)?.contentHeight??0))}return X}),p=m.cells.filter(y=>y.rowSpan>1).sort((y,_)=>y.rowSpan-_.rowSpan);for(const y of p){const _=I.get(y.cell.id);if(!_)continue;let X=0;for(let O=y.row;O<y.row+y.rowSpan;O++)X+=u[O];_.contentHeight>X&&(u[y.row+y.rowSpan-1]+=_.contentHeight-X)}const S=y=>{let _=0;for(let X=y.row;X<y.row+y.rowSpan;X++)_+=u[X];return _},w=[],C=()=>{if(w.length===0)return;const y=this.getPdfCurrentPage(t);for(const{page:_,draw:X}of w)t.setPage(_),X();w.length=0,t.setPage(y)},D=(y,_,X,O,K,W,L)=>{const A=y.backgroundColor?this.hexToRgb(y.backgroundColor):L?{r:249,g:250,b:251}:{r:255,g:255,b:255};(y.backgroundColor||L)&&(t.setFillColor(A.r,A.g,A.b),t.rect(X,K,O,W,"F"));const z=this.getPdfCurrentPage(t),U=ca(y.borders);if(T||U){const Y=ha({tableBorders:T,cellBorders:U,flags:{isTopRow:(_?.row??0)===0,isBottomRow:_?_.row+_.rowSpan===m.rows:!1,isLeftCol:(_?.col??0)===0,isRightCol:_?_.col+_.colSpan===m.cols:!1},fallback:{style:"single",width:g,color:P}}),Z=X+O,q=K+W;w.push({page:z,draw:()=>{this.drawPdfBorderEdge(t,Y.top,X,K,Z,K),this.drawPdfBorderEdge(t,Y.bottom,X,q,Z,q),this.drawPdfBorderEdge(t,Y.left,X,K,X,q),this.drawPdfBorderEdge(t,Y.right,Z,K,Z,q)}})}else g>0&&w.push({page:z,draw:()=>{t.setDrawColor(c.r,c.g,c.b),t.setLineWidth(g*this.PX_TO_PT),t.rect(X,K,O,W,"S")}})},V=async(y,_,X,O)=>{const K=!!e.hasHeader&&_===0,W=u[_],L=this.getPdfCurrentPage(t);for(const A of y.children){t.setPage(L);const z=m.byId.get(A.id),U=B+(z?v[z.col]:0),Y=z?M(z):F/x,Z=O||!z?W:S(z);D(A,z,U,Y,X,Z,K);const q=I.get(A.id),ot=q?.blocks??this.extractCellBlocks(A),Q=q?.pad.left??f,rt=q?.pad.right??f,lt=q?.pad.top??f,ct=q?.pad.bottom??f,et=q?.width??Y-Q-rt,nt=q?.flowHeight??this.FONT_SIZES.normal*this.LINE_HEIGHT_MULTIPLIERS.paragraph,ft=Math.max(0,Z-lt-ct-nt),ut=A.verticalAlign==="bottom"?ft:A.verticalAlign==="middle"?ft/2:0,Ot=X+lt+ut;if(ot.length>0){const Ct={...n,keepFirstBlockDeclaredSpaceBefore:!0,columnCount:1,columnFlow:void 0,marginTopPt:Ot,marginRightPt:Math.max(0,n.pageWidthPt-(U+Q+et)),marginBottomPt:n.pageHeightPt-this.UNBOUNDED_CELL_FLOW_BOTTOM_PT,marginLeftPt:U+Q,pageMarginLeftPt:U+Q,contentWidthPt:Math.max(1,et),fullContentWidthPt:Math.max(1,et),columnStridePt:Math.max(1,et)};await this.renderBodyBlocks(t,ot,Ct,o,l,r,void 0,void 0,void 0,Ot)}}t.setPage(L)},k=(y,_)=>y.idx!==_.idx?y.idx>_.idx?y:_:y.y>=_.y?y:_,R=async(y,_,X,O,K,W)=>{const L=I.get(_.id),A=L?.blocks??this.extractCellBlocks(_),z=L?.pad.left??f,U=L?.pad.bottom??f,Y=X?M(X):F/x,Z=L?.width??Y-z-(L?.pad.right??f),q=X?v[X.col]:0;let ot=O.idx;if(A.length===0){const nt=L?.flowHeight??this.FONT_SIZES.normal*this.LINE_HEIGHT_MULTIPLIERS.paragraph;return{idx:ot,y:Math.min(W,O.y+nt+U)}}const Q=(nt,ft)=>{const ut=nt.left+q+z;ft.marginTopPt=nt.top,ft.marginLeftPt=ut,ft.pageMarginLeftPt=ut,ft.marginRightPt=Math.max(0,n.pageWidthPt-(ut+Z))},rt={...n,keepFirstBlockDeclaredSpaceBefore:!0,columnCount:1,columnFlow:void 0,marginBottomPt:n.pageHeightPt-W,reservedInsetForPage:void 0,contentWidthPt:Math.max(1,Z),fullContentWidthPt:Math.max(1,Z),columnStridePt:Math.max(1,Z)},lt=K(ot);Q(lt,rt),y.setPage(lt.page);const ct=y.addPage;y.addPage=()=>{ot+=1;const nt=K(ot);return Q(nt,rt),y.setPage(nt.page),y};let et=O.y;try{et=(await this.renderBodyBlocks(y,A,rt,o,l,r,void 0,void 0,void 0,O.y)).finalY}finally{y.addPage=ct}return{idx:ot,y:Math.min(W,et+U)}},G=async(y,_,X)=>{const O=h,K=H&&y>0?u[0]:0,W=n.marginTopPt+K,L=await import("./jspdf.es.min-DlTF8uTw.js").then($=>$.j),A=L.jsPDF??L.default,z=new A({orientation:n.orientation,unit:"pt",format:[n.pageWidthPt,n.pageHeightPt]});await this.registerCurrentPdfFonts(z,l);const U=z.addPage.bind(z),Y=[{page:1,top:n.marginTopPt,left:B}],Z=$=>{for(;Y.length<=$;)U(),Y.push({page:Y.length+1,top:W,left:B});return Y[$]},q=($,at)=>{let{idx:pt,y:ht}=$,gt=at;for(;;){const mt=Math.max(0,O-ht);if(gt<=mt+.01)return{idx:pt,y:ht+gt};gt-=mt,pt+=1,ht=W}},ot=[],Q=[],rt=new Map,lt=[];let ct={idx:0,y:X};for(let $=y;$<_;$++){const at=ct;ot[$-y]=at;for(const gt of e.children[$].children){const mt=m.byId.get(gt.id),xt=I.get(gt.id)?.pad.top??f,kt=at.y+xt>O+.01?{idx:at.idx+1,y:W+xt}:{idx:at.idx,y:at.y+xt};rt.set(gt.id,kt);const Tt=await R(z,gt,mt,kt,Z,O),yt=Math.min(_-1,$+(mt?.rowSpan??1)-1),_t=lt[yt-y];lt[yt-y]=_t?k(_t,Tt):Tt}const pt=q(at,u[$]),ht=lt[$-y];ct=ht?k(pt,ht):pt,Q[$-y]=ct}let et=ct.idx;for(const $ of rt.values())et=Math.max(et,$.idx);et=Math.max(et,Y.length-1);const nt=[{page:this.getPdfCurrentPage(t),top:n.marginTopPt,left:B}],ft=t.addPage,ut=()=>{const $=this.advancePdfFlowRegion(t,n);return B=$.x+b,{page:this.getPdfCurrentPage(t),top:$.y+K,left:B}};for(let $=1;$<=et;$++){const at=ut();nt.push(at),K>0&&await V(e.children[0],0,at.top-K,!0)}const Ot=$=>{for(;nt.length<=$;){const at=t.addPage;t.addPage=ft;try{nt.push(ut())}finally{t.addPage=at}}return nt[$]};for(let $=y;$<_;$++){const at=!!e.hasHeader&&$===0;for(const pt of e.children[$].children){const ht=m.byId.get(pt.id),gt=Math.min(_-1,$+(ht?.rowSpan??1)-1),mt=ot[$-y],xt=Q[gt-y],kt=ht?M(ht):F/x;for(let Tt=mt.idx;Tt<=xt.idx;Tt++){const yt=nt[Tt],_t=Tt===mt.idx?mt.y:yt.top,Wt=Tt===xt.idx?xt.y:O;Wt-_t<=.01||(t.setPage(yt.page),D(pt,ht,yt.left+(ht?v[ht.col]:0),kt,_t,Wt-_t,at))}}}for(let $=y;$<_;$++)for(const at of e.children[$].children)await R(t,at,m.byId.get(at.id),rt.get(at.id),Ot,O);const Ct=Q[Q.length-1],At=nt[Math.min(Ct.idx,nt.length-1)];return t.setPage(At.page),B=At.left,Ct.y},H=e.hasHeader===!0&&e.children.length>1&&!m.cells.some(y=>y.row===0&&y.rowSpan>1),j=e.children.map(()=>[]);for(const y of m.cells)j[y.row]?.push(y);for(let y=0;y<e.children.length;){let _=y+1,X=0;for(let L=y;L<_;L++){X+=u[L];for(const A of j[L])_=Math.min(e.children.length,Math.max(_,A.row+A.rowSpan))}const O=H&&y>0?u[0]:0,K=h-n.marginTopPt-O,W=X>K;if((W?s>=h-.01:s+X>h)&&s!==n.marginTopPt){const L=this.advancePdfFlowRegion(t,n);s=L.y,B=L.x+b,H&&y>0&&(await V(e.children[0],0,s,!0),s+=u[0])}if(W)s=await G(y,_,s);else for(let L=y;L<_;L++)await V(e.children[L],L,s,!1),s+=u[L];y=_}return C(),s}static async renderCodeBlock(t,e,a,i,r,o=this.MARGIN_LEFT,l=It,n=!1,h=this.getDefaultPdfLayoutMetrics(),s){const g=o-h.marginLeftPt;let P=o;const c=e.language||"",d=He(c);if(d&&e.renderDiagram!==!1&&d)return this.renderDiagramCodeBlock(t,e,a,i,r,P,d,l,n,h);const f=n?"SourceCodePro":"courier",T=e.content||"",m=c?await Ge(T,c,l):null,x=dt.fontSizePx*this.PX_TO_PT,F=x*dt.lineHeightMultiplier,b=dt.paddingPx*this.PX_TO_PT,B=dt.borderRadiusPx*this.PX_TO_PT,N=this.hexToRgb(l.background),v=this.hexToRgb(l.default);t.setFont(f,"normal"),t.setFontSize(x);const M=Math.max(1,i-b*2),I=te(T,k=>t.getTextWidth(k),M),u=[];let p=0;for(const k of m??[])u.push({start:p,end:p+k.text.length,color:k.color}),p+=k.text.length;const S=k=>{if(u.length===0)return[{text:k.text,color:l.default}];const R=[];for(const G of u){const H=Math.max(k.startCharOffset,G.start),j=Math.min(k.endCharOffset,G.end);j<=H||R.push({text:T.slice(H,j),color:G.color})}return R.length>0?R:[{text:k.text,color:l.default}]};let w=a,C=0,D=r;const V=()=>{const k=this.advancePdfFlowRegion(t,h);w=k.y,P=k.x+g,D=this.getPdfFlowBottom(t,h)};for(;C<I.length;){const k=C===0,R=k?b:0,G=R+F+(I.length===C+1?b:0);w+G>D&&w!==h.marginTopPt&&V();let H=C,j=R;for(;H<I.length;){const _=H===I.length-1,X=j+F+(_?b:0);if(w+X>D&&H>C)break;j+=F,H+=1}const y=H===I.length;y&&(j+=b),t.setFillColor(N.r,N.g,N.b),k&&y?this.drawRoundedRect(t,P,w,i,j,B):t.rect(P,w,i,j,"F"),t.setFont(f,"normal"),t.setFontSize(x);for(let _=C;_<H;_++){const X=_===0,O=_===I.length-1,K=w+R+(_-C)*F;s?.push({pageNumber:t.getCurrentPageInfo?.().pageNumber??t.getNumberOfPages(),y:K-(X?b:0),height:F+(X?b:0)+(O?b:0)});let W=P+b;const L=w+R+(_-C)*F+x;for(const A of S(I[_])){const z=A.color?this.hexToRgb(A.color):v;t.setTextColor(z.r,z.g,z.b),A.text&&t.text(A.text,W,L),W+=t.getTextWidth(A.text)}}w+=j,C=H,y||V()}return w}static async renderDiagramCodeBlock(t,e,a,i,r,o,l,n,h,s){const g=o-s.marginLeftPt;let P=o;const c=dt.paddingPx*this.PX_TO_PT,d=dt.diagramSourceGapPx*this.PX_TO_PT,f=ee(),T=Math.max(120,Math.round((i-c*2)/this.PX_TO_PT)),m=await Ue({protocol:l,source:e.content||"",theme:f,maxWidth:T}),x=Math.max(1,m.width*this.PX_TO_PT),F=Math.max(dt.diagramMinHeightPx,m.height)*this.PX_TO_PT,b=F+c*2,B=e.showDiagramSource!==!1,N=h?"SourceCodePro":"courier",v=dt.fontSizePx*this.PX_TO_PT;t.setFont(N,"normal"),t.setFontSize(v);const M=te(e.content||"",R=>t.getTextWidth(R),Math.max(1,i-c*2)),I=c*2+M.length*v*dt.lineHeightMultiplier,u=(B?I+d:0)+b;let p=a;if(p+u>r&&p!==s.marginTopPt){const R=this.advancePdfFlowRegion(t,s);p=R.y,P=R.x+g}B&&(p=await this.renderCodeBlock(t,{...e,renderDiagram:!1},p,i,r,P,n,h,s),p+=d);const S=this.hexToRgb(f.codeBorder||"#e0e0e0"),w=dt.borderRadiusPx*this.PX_TO_PT;t.setDrawColor(S.r,S.g,S.b),t.setLineWidth(this.BLOCK_BORDER_WIDTH_PT),this.drawRoundedRect(t,P,p,i,b,w,"S");const C=Math.min(i-c*2,x),D=Math.min(b-c*2,F),V=P+(i-C)/2,k=p+(b-D)/2;if(m.svg){const R=await this.svgToPng(m.svg,Math.max(1,Math.round(m.width)),Math.max(1,Math.round(m.height)),2);if(R)return t.addImage(R,"PNG",V,k,C,D),p+b}return t.setTextColor(220,38,38),t.setFont("helvetica","normal"),t.setFontSize(10),t.text("Diagram unavailable",P+c,p+c+10),p+b}static renderCellParagraph(t,e,a,i,r,o,l=!1){const n=this.getParagraphFontSize(e),h=this.getParagraphDirection(e),s=this.getEffectiveParagraphAlignment(e,h),g=this.getLineSpacingMultiplier(e),P=this.processTextNodes(e.children);let c=i,d=[],f=0;const T=m=>{d.length!==0&&(l?c+=this.measureLineAdvancePt(d,n,!!e.heading,g):c=this.renderLine(t,d,c,a,r,s,n,o,!!e.heading,g,m,{direction:h}),d=[],f=0)};for(const m of P){this.setRunFont(t,m,o),t.setFontSize(this.getRunEffectiveFontSizePt(m.marks,n));const x=m.text.split(`
4
- `);for(let F=0;F<x.length;F++){F>0&&T(!1);const b=x[F].split(/(\s+)/);for(const B of b){const N=this.measureRunDisplayWidthPt(t,B,m.marks);f+N>r&&d.length>0&&T(!1),(B.trim()||d.length>0)&&(d.push({text:B,marks:m.marks,font:m.marks?.fontFamily}),f+=N)}}}return T(!0),c===i&&(c+=this.getEmptyParagraphLineHeight(e)),c}static extractCellBlocks(t){return t.children}static drawRoundedRect(t,e,a,i,r,o,l="F"){const n=Math.min(o,i/2,r/2);t.roundedRect(e,a,i,r,n,n,l)}static getListIndentPt(t){switch(t){case"todo":return this.TODO_LIST_INDENT_PT;case"ordered":return this.ORDERED_LIST_INDENT_PT;case"unordered":default:return this.UNORDERED_LIST_INDENT_PT}}static getListIndentLevel(t){const e=t.indentLevel??0;if(!Number.isFinite(e))return 0;const a=Math.floor(e);return Math.max(0,Math.min(a,this.MAX_LIST_INDENT_LEVEL))}static computeOrderedMarkerLabel(t,e,a,i){return ze(t,a,e,i)}static getRunLetterSpacingPt(t){return(typeof t?.letterSpacing=="number"&&Number.isFinite(t.letterSpacing)?t.letterSpacing:0)*this.PX_TO_PT}static getRunEffectiveFontSizePt(t,e){const a=t?.fontSize?t.fontSize*this.PX_TO_PT:e;return t?.superscript||t?.subscript?Math.round(a/this.PX_TO_PT*.7)*this.PX_TO_PT:a}static setRunFont(t,e,a){if(e.marks?.code){t.setFont(this.inlineCodeFontFamily,"normal");return}const i=this.mapFontFamily(e.font||e.marks?.fontFamily||a),r=this.resolveFontStyle(e.marks),o=this.scriptFallbackFor(t,e.text,i);if(o){t.setFont(o,r==="bold"||r==="bolditalic"?"bold":"normal");return}t.setFont(i,r)}static measureRunDisplayWidthPt(t,e,a){const i=o=>{const l=t.getFont?.()?.fontName,n=l?this.shapingFonts.get(l):void 0;return n?n.layout(o).advanceWidth*t.getFontSize()/n.unitsPerEm:t.getTextWidth(o)},r=Ke(a);return r?Ut(e,{...r,letterSpacingPx:this.getRunLetterSpacingPt(a)},i):i(e)}static drawShapedText(t,e,a,i,r,o,l){const n=t.getFont?.()?.fontName,h=n?this.shapingFonts.get(n):void 0;if(!h)return null;const s=h.layout(e);Array.from(e).every(f=>(f.codePointAt(0)??0)<=65535)&&t.text(e,a,i,{renderingMode:"invisible"}),t.setFillColor(l.r,l.g,l.b);const g=r/h.unitsPerEm;let P=0,c=0,d=0;for(let f=0;f<s.glyphs.length;f++){const T=s.glyphs[f],m=s.positions[f],x=[];let F=0,b=0;const B=v=>a+d+(P+m.xOffset+v)*g,N=v=>i-(c+m.yOffset+v)*g;for(const v of T.path.commands)if(v.command==="moveTo")[F,b]=v.args,x.push({op:"m",c:[B(F),N(b)]});else if(v.command==="lineTo")[F,b]=v.args,x.push({op:"l",c:[B(F),N(b)]});else if(v.command==="bezierCurveTo"){const[M,I,u,p,S,w]=v.args;x.push({op:"c",c:[B(M),N(I),B(u),N(p),B(S),N(w)]}),F=S,b=w}else if(v.command==="quadraticCurveTo"){const[M,I,u,p]=v.args,S=F+(M-F)*2/3,w=b+(I-b)*2/3,C=u+(M-u)*2/3,D=p+(I-p)*2/3;x.push({op:"c",c:[B(S),N(w),B(C),N(D),B(u),N(p)]}),F=u,b=p}else v.command==="closePath"&&x.push({op:"h",c:[]});x.length>0&&(t.path(x),t.fill()),P+=m.xAdvance,c+=m.yAdvance,d+=o*Math.max(1,T.codePoints?.length??1)}return s.advanceWidth*r/h.unitsPerEm+o*[...e].length}static renderLine(t,e,a,i,r,o,l,n,h,s,g=!0,P){e=e.filter(u=>!u.marks?.hidden||!!u.marks.footnoteRef);let c=P?.tabLayoutPx;const d=u=>u.marks?.fontSize?u.marks.fontSize*this.PX_TO_PT:l,f=P?.direction??"ltr";if(!c&&e.length>0&&!e.some(u=>u.latexImage||u.marks?.latex)){const u=e,p={segments:u.map(w=>({text:w.text}))},S=ae(p,f);if(S){const w=(D,V)=>{let k=0,R=0;for(const G of u){const H=Math.max(D,R),j=Math.min(V,R+G.text.length);if(H<j){const y=G.text.slice(H-R,j-R);this.setRunFont(t,{...G,text:y},n),t.setFontSize(this.getRunEffectiveFontSizePt(G.marks,l)),k+=this.measureRunDisplayWidthPt(t,y,G.marks)}R+=G.text.length}return k},C=u.map(D=>D.text).join("");e=ie(p,S,w,o==="justify"&&!g).map(D=>({...u[D.segmentIndex],text:C.slice(D.start,D.end),rtl:D.rtl}))}}if(P?.tabRtl&&c&&c.length>0){const u=e,p=c,S=[],w=[];let C=0;for(;C<u.length;){const D=u[C];if(D.text===" "){S.push(D),w.push(p[C]??{startX:0,endX:0}),C++;continue}const V=C;let k=Number.NEGATIVE_INFINITY;for(;C<u.length&&u[C].text!==" ";){const O=p[C];O&&(k=Math.max(k,O.endX)),C++}const R=u.slice(V,C),G=R.map(O=>O.text).join("");if(!G)continue;Number.isFinite(k)||(k=0);const H={segments:R.map(O=>({text:O.text}))},j=ae(H,"rtl");if(!j){for(let O=V;O<C;O++)S.push(u[O]),w.push(p[O]??{startX:0,endX:0});continue}const y=ie(H,j,(O,K)=>{let W=0,L=0;for(const A of R){const z=Math.max(O,L),U=Math.min(K,L+A.text.length);if(z<U){const Y=A.text.slice(z-L,U-L);this.setRunFont(t,{...A,text:Y},n),t.setFontSize(this.getRunEffectiveFontSizePt(A.marks,l)),W+=this.measureRunDisplayWidthPt(t,Y,A.marks)}L+=A.text.length}return W}),_=y.reduce((O,K)=>O+K.width,0),X=k*this.PX_TO_PT-_;for(const O of y)S.push({...R[O.segmentIndex],text:G.slice(O.start,O.end),rtl:O.rtl}),w.push({startX:(X+O.x)/this.PX_TO_PT,endX:(X+O.x+O.width)/this.PX_TO_PT})}e=S,c=w}let T=0,m=0;for(const u of e)if(u.latexImage){const p=u.latexImage.contentHeight*this.PX_TO_PT;p>m&&(m=p)}else{const p=d(u);p>T&&(T=p)}T===0&&(T=l);const x=a+T;let F=0;if(c&&c.length>0)F=P?.tabRtl?(P.tabWidthPx??Math.max(...c.map(u=>u.endX)))*this.PX_TO_PT:c[c.length-1].endX*this.PX_TO_PT;else for(const u of e)u.latexImage?F+=u.latexImage.contentWidth*this.PX_TO_PT:(this.setRunFont(t,u,n),t.setFontSize(this.getRunEffectiveFontSizePt(u.marks,l)),F+=this.measureRunDisplayWidthPt(t,u.text,u.marks));let b=i;o==="center"?b=i+(r-F)/2:(o==="right"||o==="justify"&&f==="rtl"&&(g||c))&&(b=i+r-F),P?.tabRtl&&c&&(b=i);let B=0;if(o==="justify"&&!g&&!c){let u=0;for(const p of e)p.latexImage||p.marks?.latex||(u+=(p.text.match(/ /g)||[]).length);u>0&&(B=Math.max(0,(r-F)/u))}const N=b;for(let u=0;u<e.length;u++){const p=e[u],S=c?.[u];if(S&&(b=N+S.startX*this.PX_TO_PT,p.text===" ")){if(S.leader){const W=this.getRunEffectiveFontSizePt(p.marks,l),L=p.marks?.color?this.hexToRgb(p.marks.color):{r:0,g:0,b:0};this.renderTabLeaderPdf(t,N+S.startX*this.PX_TO_PT,N+S.endX*this.PX_TO_PT,x,S.leader,W,L)}b=N+S.endX*this.PX_TO_PT;continue}if(p.latexImage){const W=p.latexImage.width*this.PX_TO_PT,L=p.latexImage.height*this.PX_TO_PT,A=p.latexImage.contentWidth*this.PX_TO_PT,z=p.latexImage.contentHeight*this.PX_TO_PT,U=(W-A)/2,Y=b-U,Z=x-z*.7-U;try{t.addImage(p.latexImage.dataUrl,"PNG",Y,Z,W,L)}catch(q){console.error("Failed to add inline latex image to PDF:",q)}b+=A;continue}this.setRunFont(t,p,n);const w=d(p),C=this.getRunEffectiveFontSizePt(p.marks,l),D=C/this.PX_TO_PT;t.setFontSize(C);const V=!!p.marks?.link;let k={r:0,g:0,b:0};V?k={r:37,g:99,b:235}:p.marks?.color?k=this.hexToRgb(p.marks.color):p.marks?.code&&(k=this.hexToRgb(Lt.codeText)),t.setTextColor(k.r,k.g,k.b);const R=!!(p.marks?.smallCaps&&!p.marks?.allCaps),G=this.getRunLetterSpacingPt(p.marks),H=p.rtl?{isInputVisual:!1,isOutputVisual:!0,isInputRtl:!0,isOutputRtl:!1}:void 0,j=G!==0||H?{...G!==0?{charSpace:G}:{},...H}:void 0,y=this.measureRunDisplayWidthPt(t,p.text,p.marks),_=B>0?(p.text.match(/ /g)||[]).length:0,X=y+_*B;if(p.marks?.backgroundColor){const W=je(p.marks.backgroundColor)??p.marks.backgroundColor,L=this.hexToRgb(W);t.setFillColor(L.r,L.g,L.b),t.rect(b,x-w*.8,X,w*1.1,"F"),t.setTextColor(k.r,k.g,k.b)}else if(p.marks?.code){const W=this.hexToRgb(Lt.codeBackground);t.setFillColor(W.r,W.g,W.b),this.drawRoundedRect(t,b-2*this.PX_TO_PT,x-w*.93,X+4*this.PX_TO_PT,w+4*this.PX_TO_PT,3*this.PX_TO_PT),t.setTextColor(k.r,k.g,k.b)}let O=x;p.marks?.superscript?O=x-w*.4:p.marks?.subscript&&(O=x+w*.15),(p.marks?.underline||V)&&!p.marks?.code&&(V?t.setDrawColor(37,99,235):t.setDrawColor(0,0,0),t.setLineWidth(.5),t.line(b,O+2,b+X,O+2));const K=(W,L)=>{const A=p.marks?.allCaps?Xt(W,p.marks.lang):W,z=this.drawShapedText(t,A,L,O,C,G,k);if(z!==null)return z;if(R){let U=L;for(const Y of la(W,p.marks?.lang)){const Z=Y.lower?t.getTextWidth(Xt(Y.text,p.marks?.lang))*oe:t.getTextWidth(Y.text);Y.lower?(t.setFontSize(C*oe),t.text(Xt(Y.text,p.marks?.lang),U,O,j),t.setFontSize(C)):t.text(Y.text,U,O,j),U+=Z+G*Y.text.length}return U-L}return t.text(A,L,O,j),this.measureRunDisplayWidthPt(t,W,p.marks)};if(B>0){let W=b;for(const L of p.text.split(/( +)/))L&&(W+=K(L,W),L[0]===" "&&(W+=B*L.length))}else K(p.text,b);if(p.marks?.strikethrough||p.marks?.doubleStrikethrough){t.setDrawColor(k.r,k.g,k.b),t.setLineWidth(Math.max(1,Math.round(D*.04))*this.PX_TO_PT);const W=L=>{const A=L-C*.3;t.line(b,A,b+X,A)};p.marks?.doubleStrikethrough?(W(O+C*.09),W(O-C*.09)):W(O)}if(V&&p.marks?.link){const W=x-w*.8,L=w*1.1;t.link(b,W,X,L,{url:p.marks.link})}b+=X}if(P?.hyphenTrailing){const u=e[e.length-1];if(u&&!u.marks?.latex){this.setRunFont(t,u,n),t.setFontSize(this.getRunEffectiveFontSizePt(u.marks,l));const p=u.marks?.color?this.hexToRgb(u.marks.color):{r:0,g:0,b:0};t.setTextColor(p.r,p.g,p.b),t.text("-",b,x)}}const v=s??(h?this.LINE_HEIGHT_MULTIPLIERS.heading:this.LINE_HEIGHT_MULTIPLIERS.paragraph),M=T*v,I=m>M*1.25?m:M;return a+I}static renderTabLeaderPdf(t,e,a,i,r,o,l){const n=Math.max(1.5,o*.12),h=e+n,s=a-n;if(s-h<1)return;if(t.setFillColor(l.r,l.g,l.b),r==="underscore"){const P=i+Math.max(1,o*.08),c=Math.max(.75,o*.055);t.rect(h,P,s-h,c,"F");return}const g=Math.max(2.25,o*.33);if(r==="dot"){const P=Math.max(.45,o*.045),c=i-P;for(let d=Math.ceil(h/g)*g;d<=s;d+=g)t.circle(d,c,P,"F")}else{const P=Math.max(1.5,o*.18),c=i-o*.28,d=Math.max(.75,o*.055);for(let f=Math.ceil(h/g)*g;f+P<=s;f+=g)t.rect(f,c,P,d,"F")}}static processTextNodes(t){const e=[];for(const a of t)if(a.type==="text"){const i=a;if(i.marks?.hidden&&!i.marks.footnoteRef)continue;e.push({text:i.text,marks:i.marks,font:i.marks?.fontFamily})}return e}static async processTextNodesWithLatex(t,e){const a=[];for(let o=0;o<t.length;o++){const l=t[o];if(l.type==="text"){const n=l;if(n.marks?.hidden&&!n.marks.footnoteRef)continue;n.marks?.latex?a.push({index:o,node:n,latexPromise:this.renderLatexToImage(n.text,!1,e)}):a.push({index:o,node:n})}}const i=await Promise.all(a.map(o=>o.latexPromise||Promise.resolve(null))),r=[];for(let o=0;o<a.length;o++){const{node:l}=a[o],n=i[o];r.push({text:l.text,marks:l.marks,font:l.marks?.fontFamily,latexImage:n||void 0})}return r}static getParagraphFontSize(t){return Ye(t)*this.PX_TO_PT}static getParagraphLineHeight(t){return this.getParagraphFontSize(t)*Qt(t)}static getEmptyParagraphLineHeight(t){return this.measureLineAdvancePt(this.paragraphForPdfOutput(t).children.map(e=>({marks:e.type==="text"?e.marks:void 0})),this.getParagraphFontSize(t),!!t.heading,this.getLineSpacingMultiplier(t))}static async embedLocalFonts(t,e){if(this.embeddedFamilyNames.clear(),typeof window>"u")return;const a=new Set(["sans-serif","sans","serif","monospace","system-ui","system ui","ui-sans-serif","ui-serif","ui-monospace"]),i=Nt(e).map(o=>o.family).filter(o=>{const l=o.toLowerCase();return!a.has(l)&&this.FONT_MAP[l]!=="KaTeX_Main"});if(i.length===0)return;let r;for(const o of i){const l=o.toLowerCase();let n=this.localFontFiles.get(l);if(n===void 0){if(r===void 0&&(r=await $e().catch(()=>null)),!r)return;try{n=await this.buildLocalFontFiles(o,r)}catch{n=null}this.localFontFiles.set(l,n)}if(n)try{for(const h of n)t.addFileToVFS(h.vfsName,h.base64),t.addFont(h.vfsName,o,h.style);this.embeddedFamilyNames.set(l,o)}catch(h){console.warn(`Failed to embed font "${o}" in PDF:`,h),this.localFontFiles.set(l,null)}}}static async buildLocalFontFiles(t,e){const a=t.toLowerCase(),i=e.filter(c=>c.family?.trim().toLowerCase()===a&&c.blob);if(i.length===0)return null;const r=i.map(c=>({entry:c,...Ve(c.style),specificity:(c.style??"").length})),o=(c,d)=>r.filter(f=>f.bold===c&&f.italic===d).sort((f,T)=>f.specificity-T.specificity)[0]?.entry,l=o(!1,!1)??r[0].entry,n=[{style:"normal",entry:l},{style:"bold",entry:o(!0,!1)??l},{style:"italic",entry:o(!1,!0)??l},{style:"bolditalic",entry:o(!0,!0)??o(!0,!1)??l}],h=new Map;for(const{entry:c}of n){if(h.has(c))continue;const d=await(await c.blob()).arrayBuffer(),f=Ht(new Uint8Array(d));h.set(c,f==="ttf"?this.arrayBufferToBase64(d):null)}if(!h.get(l))return null;const s=a.replace(/[^a-z0-9]+/g,"-"),g=new Map;let P=0;return n.map(({style:c,entry:d})=>{const f=h.get(d)?d:l;let T=g.get(f);return T||(T=`${s}-${P++}.ttf`,g.set(f,T)),{vfsName:T,base64:h.get(f),style:c}})}static mapFontFamily(t){const e=this.mapFontFamilyToStandard(t);return this.bundledGenreFamilies.get(e)??(e==="SourceSerif4"?"times":e)}static mapFontFamilyToStandard(t){if(!t)return"helvetica";const e=new Set(["helvetica","times","courier"]),a=t.split(",").map(r=>r.trim().replace(/^['"]|['"]$/g,"")).filter(r=>r.length>0);a.length===0&&a.push(t);for(const r of a){const o=r.toLowerCase(),l=this.embeddedFamilyNames.get(o);if(l)return l;if(e.has(o))return o;const n=this.FONT_MAP[o];if(n)return n}const i=Ze(a[0]);return i==="serif"?"times":i==="monospace"?"courier":"helvetica"}static resolveFontStyle(t){const e=!!t?.bold,a=!!t?.italic;return e&&a?"bolditalic":e?"bold":a?"italic":"normal"}static drawPdfBorderEdge(t,e,a,i,r,o){if(e.style==="none"||e.width<=0)return;const l=this.hexToRgb(e.color);t.setDrawColor(l.r,l.g,l.b);const n=Je(e).map(h=>h*this.PX_TO_PT);if(n.length>0&&typeof t.setLineDashPattern=="function"&&t.setLineDashPattern(n,0),e.style==="double"){const h=Math.max(e.width/3,.5)*this.PX_TO_PT,s=e.width*2/3/2*this.PX_TO_PT;t.setLineWidth(h);const g=i===o,P=g?0:s,c=g?s:0;t.line(a-P,i-c,r-P,o-c),t.line(a+P,i+c,r+P,o+c)}else t.setLineWidth(e.width*this.PX_TO_PT),t.line(a,i,r,o);n.length>0&&typeof t.setLineDashPattern=="function"&&t.setLineDashPattern([],0)}static hexToRgb(t){return qe(t)??{r:0,g:0,b:0}}static async renderImageBlock(t,e,a,i,r=this.getDefaultPdfLayoutMetrics()){if(!e.src)return{nextY:a};const o=this.getPdfFlowBottom(t,r);let l=Math.max(e.width||1,1)*this.PX_TO_PT,n=Math.max(e.height||1,1)*this.PX_TO_PT;if(l>i){const c=i/l;l=i,n*=c}(n<=0||!Number.isFinite(n))&&(n=72);let h=r.marginLeftPt;if(a+n>o&&a!==r.marginTopPt){const c=this.advancePdfFlowRegion(t,r);a=c.y,h=c.x}const s=e.align||"left";let g=h;if(s==="center"?g=h+(i-l)/2:s==="right"&&(g=h+i-l),e.originalFormat)return t.setFillColor(243,244,246),t.setDrawColor(209,213,219),t.setLineWidth(.75),t.rect(g,a,l,n,"FD"),t.setFont(this.mapFontFamily(void 0),"normal"),t.setFontSize(14*this.PX_TO_PT),t.setTextColor(107,114,128),t.text(`${e.originalFormat.toUpperCase()} image`,g+l/2,a+n/2,{align:"center",baseline:"middle"}),{nextY:a+n};const P=await this.resolveImageData(e.src);if(!P)return{nextY:a+n};try{t.addImage(P.data,P.format,g,a,l,n)}catch(c){return console.error("Failed to add image to PDF",c),{nextY:a+n}}return{nextY:a+n}}static async resolveImageData(t){const e=t.match(/^data:image\/([a-zA-Z0-9+.-]+);base64,/);if(e){const o=this.normalizeImageFormat(e[1]);return{data:t,format:o}}const a=await this.fetchImageAsBlob(t);if(!a)return null;const{blob:i,format:r}=a;return{data:await this.blobToDataUrl(i,r),format:r}}static async fetchImageAsBlob(t){try{const e=await fetch(t);if(!e.ok)throw new Error(`Failed to fetch image: ${e.status}`);const a=await e.blob(),i=this.extractImageFormat(a.type);return{blob:a,format:i}}catch(e){return console.error("Failed to load image for PDF export",e),null}}static async blobToDataUrl(t,e){const a=await t.arrayBuffer(),i=this.arrayBufferToBase64(a);return`data:${this.formatToMime(e)};base64,${i}`}static arrayBufferToBase64(t){const e=globalThis?.Buffer;if(e)return e.from(t).toString("base64");let a="";const i=new Uint8Array(t),r=32768;for(let o=0;o<i.length;o+=r){const l=i.subarray(o,o+r);a+=String.fromCharCode.apply(null,Array.from(l))}return btoa(a)}static formatToMime(t){const e=t.toLowerCase();return e==="jpeg"||e==="jpg"?"image/jpeg":e==="png"?"image/png":e==="webp"?"image/webp":`image/${e}`}static extractImageFormat(t){if(!t)return"PNG";const e=t.match(/^image\/([a-zA-Z0-9+.-]+)/);return e?this.normalizeImageFormat(e[1]):"PNG"}static normalizeImageFormat(t){const e=t.toLowerCase();return e==="jpg"||e==="jpeg"?"JPEG":e==="png"?"PNG":e==="webp"?"WEBP":e.toUpperCase()}static async renderMathBlock(t,e,a,i,r,o=this.getDefaultPdfLayoutMetrics()){if(!e.content||e.content.trim()==="")return{nextY:a};const l=e.displayMode!=="inline",n=await this.renderLatexToImage(e.content,l);if(!n)return{nextY:a+20};let h=n.width*this.PX_TO_PT,s=n.height*this.PX_TO_PT;const g=i-this.MATH_BLOCK_PADDING*2;if(h>g){const x=g/h;h=g,s*=x}const P=Math.max(this.MATH_BLOCK_MIN_HEIGHT,s)+this.MATH_BLOCK_PADDING*2;let c=o.marginLeftPt;if(a+P>r&&a!==o.marginTopPt){const x=this.advancePdfFlowRegion(t,o);a=x.y,c=x.x}const d=this.hexToRgb(ee().codeBorder||"#e0e0e0");t.setDrawColor(d.r,d.g,d.b),t.setLineWidth(this.BLOCK_BORDER_WIDTH_PT),typeof t.roundedRect=="function"?t.roundedRect(c,a,i,P,this.MATH_BLOCK_BORDER_RADIUS,this.MATH_BLOCK_BORDER_RADIUS,"S"):t.rect(c,a,i,P,"S");const f=e.align||"center";let T=c+this.MATH_BLOCK_PADDING;f==="center"?T=c+(i-h)/2:f==="right"&&(T=c+i-h-this.MATH_BLOCK_PADDING);const m=a+(P-s)/2;try{t.addImage(n.dataUrl,"PNG",T,m,h,s)}catch(x){console.error("Failed to add math image to PDF:",x)}return{nextY:a+P}}static async getHtml2Canvas(){return this.html2canvasModule?this.html2canvasModule:this.html2canvasLoading?this.html2canvasLoading:(this.html2canvasLoading=import("./html2canvas.esm-CntiHiYW.js").then(t=>(this.html2canvasModule=t.default,t.default)),this.html2canvasLoading)}static async renderLatexToImage(t,e,a=12){const i=this.getLatexSvgFromCache(t,e);if(i){const r=await this.svgToPng(i.svg,i.width,i.height,3);if(r){const o=e?1:this.INLINE_MATH_SCALE;return{dataUrl:r,width:i.width*o,height:i.height*o,contentWidth:i.contentWidth*o,contentHeight:i.contentHeight*o}}}try{const r=await this.getHtml2Canvas(),o=this.preprocessLaTeX(t),l=(await Qe()).renderToString(o,{displayMode:e,throwOnError:!1,errorColor:"#ef4444",trust:!1,strict:!1});this.ensureKaTeXStyles();const n=a/this.PX_TO_PT,h=e?20:n*this.INLINE_MATH_SCALE,s=4,g=document.createElement("div");g.style.cssText=`
5
- position: fixed;
6
- top: -9999px;
7
- left: -9999px;
8
- font-size: ${h}px;
9
- line-height: 1.2;
10
- background: transparent;
11
- padding: ${s}px;
12
- z-index: -9999;
13
- `,g.innerHTML=l,document.body.appendChild(g),document.fonts?.ready&&await document.fonts.ready;const P=4,c=await r(g,{backgroundColor:null,scale:P,logging:!1,useCORS:!0,allowTaint:!1});document.body.removeChild(g);const d=c.toDataURL("image/png"),f=c.width/P,T=c.height/P,m=f-s*2,x=T-s*2;return{dataUrl:d,width:f,height:T,contentWidth:m,contentHeight:x}}catch(r){return console.error("Failed to render LaTeX for PDF:",r),null}}static preprocessLaTeX(t){if(!t.includes(`
14
- `)||["align","aligned","gather","gathered","split","cases","matrix","pmatrix","bmatrix","array"].some(a=>t.includes(`\\begin{${a}}`)||t.includes(`\\begin{${a}*}`)))return t;const e=t.split(`
15
- `).map(a=>a.trim()).filter(a=>a.length>0);return e.length<=1?t:`\\begin{gathered}
16
- ${e.join(` \\\\
17
- `)}
18
- \\end{gathered}`}static ensureKaTeXStyles(){if(this.katexStylesLoaded)return;if(document.querySelector('link[href*="katex"]')){this.katexStylesLoaded=!0;return}const t=document.createElement("link");t.rel="stylesheet",t.href=Ft("katex.min.css"),document.head.appendChild(t),this.katexStylesLoaded=!0}static async parseFile(t){const e=await import("./pdf-BLWDCiFF.js");e.GlobalWorkerOptions.workerSrc=Ft("pdfjs/worker.js");const a=await t.arrayBuffer();try{const i=await e.getDocument(a).promise;let r="";for(let h=1;h<=i.numPages;h++){const s=(await(await i.getPage(h)).getTextContent()).items.map(g=>g.str).join(" ");r+=s+`
19
-
20
- `}const o=r.trim().split(`
21
- `),l=[];let n=[];for(let h=0;h<o.length;h++){const s=o[h].trim();if(s===""){if(n.length>0){const g=n.join(" ").trim();g&&l.push(wt([{type:"text",text:g}])),n=[]}}else{const g=s.length<60,P=s===s.toUpperCase()&&/[A-Z]/.test(s),c=/[.!?]$/.test(s),d=h+1<o.length&&o[h+1].trim()==="";if(g&&(P||d&&!c)){if(n.length>0){const f=n.join(" ").trim();f&&l.push(wt([{type:"text",text:f}])),n=[]}l.push(wt([{type:"text",text:s}]))}else n.push(s)}}if(n.length>0){const h=n.join(" ").trim();h&&l.push(wt([{type:"text",text:h}]))}return l.length===0&&l.push(wt()),{type:"doc",children:l}}catch(i){throw console.error("Failed to parse PDF:",i),new Error(`Failed to parse PDF: ${i instanceof Error?i.message:"Unknown error"}`)}}};E.PAGE_WIDTH=612,E.PAGE_HEIGHT=792,E.MARGIN_LEFT=72,E.MARGIN_RIGHT=72,E.MARGIN_TOP=72,E.MARGIN_BOTTOM=72,E.PX_TO_PT=re,E.UNBOUNDED_CELL_FLOW_BOTTOM_PT=1e4,E.DEFAULT_BODY_FONT="Arial, sans-serif",E.LINE_HEIGHT_MULTIPLIERS=se,E.FONT_SIZES={h1:bt.h1*E.PX_TO_PT,h2:bt.h2*E.PX_TO_PT,h3:bt.h3*E.PX_TO_PT,h4:bt.h4*E.PX_TO_PT,h5:bt.h5*E.PX_TO_PT,h6:bt.h6*E.PX_TO_PT,normal:bt.paragraph*E.PX_TO_PT},E.FONT_MAP={arial:"helvetica",helvetica:"helvetica","helvetica neue":"helvetica","times new roman":"times",georgia:"times","source serif 4":"SourceSerif4",times:"times",courier:"courier","courier new":"courier",monospace:"courier",verdana:"helvetica",tahoma:"helvetica",inter:"helvetica","system-ui":"helvetica","system ui":"helvetica","ui-sans-serif":"helvetica","ui-serif":"times","ui-monospace":"courier","sans-serif":"helvetica",sans:"helvetica",serif:"times",katex_main:"KaTeX_Main",computermodern:"KaTeX_Main","computer modern":"KaTeX_Main"},E.TODO_LIST_INDENT_PT=Pt.variantIndentPx.todo*E.PX_TO_PT,E.ORDERED_LIST_INDENT_PT=Pt.variantIndentPx.ordered*E.PX_TO_PT,E.UNORDERED_LIST_INDENT_PT=Pt.variantIndentPx.unordered*E.PX_TO_PT,E.SUBLIST_INDENT_PT=Pt.sublistIndentPx*E.PX_TO_PT,E.BULLET_MARKER_WIDTH_PT=Pt.markerWidthPx*E.PX_TO_PT,E.BULLET_CENTER_OFFSET_PT=8*E.PX_TO_PT,E.BULLET_RADIUS_PT=2.5*E.PX_TO_PT,E.BULLET_SQUARE_INSET_PT=5*E.PX_TO_PT,E.BULLET_SQUARE_HALF_PT=5*E.PX_TO_PT,E.BULLET_SQUARE_VERTICAL_ADJUST_PT=1*E.PX_TO_PT,E.ORDERED_LABEL_GAP_PT=6*E.PX_TO_PT,E.TODO_CHECKBOX_SIZE_PT=Pt.todoCheckboxSizePx*E.PX_TO_PT,E.TODO_CHECKBOX_RADIUS_PT=Pt.todoCheckboxRadiusPx*E.PX_TO_PT,E.TODO_CHECKBOX_OFFSET_PT=Pt.todoCheckboxOffsetPx*E.PX_TO_PT,E.MAX_LIST_INDENT_LEVEL=Pt.maxIndentLevel,E.MATH_BLOCK_PADDING=16*E.PX_TO_PT,E.MATH_BLOCK_MIN_HEIGHT=40*E.PX_TO_PT,E.MATH_BLOCK_BORDER_RADIUS=4*E.PX_TO_PT,E.BLOCK_BORDER_WIDTH_PT=1*E.PX_TO_PT,E.INLINE_MATH_SCALE=.85,E.BUNDLED_GENRE_FONTS={SourceSerif4:{family:"SourceSerif4",files:{normal:"SourceSerif4-Regular.ttf",bold:"SourceSerif4-Bold.ttf",italic:"SourceSerif4-It.ttf",bolditalic:"SourceSerif4-BoldIt.ttf"}},helvetica:{family:"LiberationSans",files:{normal:"LiberationSans-Regular.ttf",bold:"LiberationSans-Bold.ttf",italic:"LiberationSans-Italic.ttf",bolditalic:"LiberationSans-BoldItalic.ttf"}},times:{family:"LiberationSerif",files:{normal:"LiberationSerif-Regular.ttf",bold:"LiberationSerif-Bold.ttf",italic:"LiberationSerif-Italic.ttf",bolditalic:"LiberationSerif-BoldItalic.ttf"}},courier:{family:"LiberationMono",files:{normal:"LiberationMono-Regular.ttf",bold:"LiberationMono-Bold.ttf",italic:"LiberationMono-Italic.ttf",bolditalic:"LiberationMono-BoldItalic.ttf"}}},E.bundledGenreFamilies=new Map,E.SCRIPT_FALLBACK_FONTS=Pa,E.scriptFallbackFamilies=new Map,E.scriptFontCoverageCache=new Map,E.fallbackCharsetCache=new Map,E.shapingFonts=new Map,E.inlineCodeFontFamily="courier",E.fontFileData=new Map,E.localFontFiles=new Map,E.embeddedFamilyNames=new Map,E.COLUMN_BALANCE_SLACK_PT=1.5,E.html2canvasModule=null,E.html2canvasLoading=null,E.katexStylesLoaded=!1;let ua=E;export{ua as PdfConverter};
@@ -1,14 +0,0 @@
1
- import{V as q,W as L,X as _,Y as C,Z as D,_ as H,$ as M,a0 as O}from"./index-C-4H81OE.js";const E=new Set(["fonttbl","colortbl","stylesheet","info","pict","object","header","footer","headerl","headerr","headerf","footerl","footerr","footerf","footnote","annotation","xmlnstbl","themedata","colorschememapping","latentstyles","datastore","listtable","listoverridetable","revtbl","generator","filetbl"]),T={emdash:"—",endash:"–",lquote:"‘",rquote:"’",ldblquote:"“",rdblquote:"”",bullet:"•",tab:" ",line:`
2
- `,"~":" ",_:"-","-":""};function v(h){const t=/\\ansicpg(\d+)/i.exec(h)?.[1]??"1252";return{65001:"utf-8",932:"shift_jis",936:"gb18030",949:"euc-kr",950:"big5"}[t]??`windows-${t}`}function S(h,t){try{return new TextDecoder(t).decode(h)}catch{return new TextDecoder("windows-1252").decode(h)}}const $=class{static async parseFile(t){const e=await t.arrayBuffer(),r=new Uint8Array(e),n=new TextDecoder("windows-1252").decode(r.subarray(0,512)),d=S(r,v(n));return this.fromRtf(d)}static fromRtf(t){const e=v(t),r=[];let n=[],d="",p={},o,b={},k=null;const g=[];let s={marks:{},skip:!1,unicodeSkip:1};const y=()=>{d&&(n.push({type:"text",text:d,marks:{...p}}),d="")},R=(c,l)=>{s.skip||!!s.marks[c]===l||(y(),l?s.marks[c]=!0:delete s.marks[c],p={...s.marks})},N=()=>{y();const c=n.filter(x=>x.text.length>0),l=q(c.length>0?c:[{type:"text",text:"",marks:{}}]);o&&(l.align=o),Object.keys(b).length>0&&(l.borders=JSON.stringify(b)),r.push(l),n=[]},w=c=>{s.skip||!c||(d+=c)};let i=0;const j=t.length;for(;i<j;){const c=t[i];if(c==="{"){y(),g.push(s),s={marks:{...s.marks},align:s.align,skip:s.skip,unicodeSkip:s.unicodeSkip},p={...s.marks},i++;continue}if(c==="}"){y(),s=g.pop()??{marks:{},skip:!1,unicodeSkip:1},p={...s.marks},i++;continue}if(c==="\\"){const l=t[i+1];if(l==="\\"||l==="{"||l==="}"){w(l),i+=2;continue}if(l==="'"){const u=[];for(;t.startsWith("\\'",i);){const f=parseInt(t.slice(i+2,i+4),16);if(Number.isNaN(f))break;u.push(f),i+=4}if(u.length===0){i+=2;continue}w(S(new Uint8Array(u),e));continue}if(l==="~"||l==="-"||l==="_"){w(T[l]??""),i+=2;continue}if(l===`
3
- `||l==="\r"){s.skip||N(),i+=2;continue}const x=/^\\([a-zA-Z]+)(-?\d+)? ?/.exec(t.slice(i));if(x){const u=x[1],f=x[2]!==void 0?parseInt(x[2],10):null;if(i+=x[0].length,E.has(u)){s.skip=!0;continue}switch(u){case"par":s.skip||N();break;case"pard":o=void 0,b={},k=null;break;case"brdrt":case"brdrb":case"brdrl":case"brdrr":{if(s.skip)break;const a={brdrt:"top",brdrb:"bottom",brdrl:"left",brdrr:"right"}[u];k=a,b[a]={style:"single",width:1,color:"#000000"};break}case"brdrs":case"brdrth":case"brdrdb":case"brdrdash":case"brdrdashsm":case"brdrdot":case"brdrnone":{if(s.skip||!k)break;const a=b[k];if(!a)break;u==="brdrnone"?(delete b[k],k=null):u==="brdrdb"?a.style="double":u==="brdrdash"||u==="brdrdashsm"?a.style="dashed":u==="brdrdot"?a.style="dotted":u==="brdrth"?(a.style="single",a.width=Math.max(a.width,2)):a.style="single";break}case"brdrw":{if(s.skip||!k||f===null)break;const a=b[k];if(!a)break;a.width=Math.min(8,Math.max(1,Math.round(f/15)));break}case"qc":o="center";break;case"qr":o="right";break;case"ql":case"qj":o=void 0;break;case"plain":y(),s.marks={},p={};break;case"b":R("bold",f!==0);break;case"i":R("italic",f!==0);break;case"ul":R("underline",f!==0);break;case"ulnone":R("underline",!1);break;case"strike":R("strikethrough",f!==0);break;case"uc":s.unicodeSkip=f??1;break;case"u":{if(f!==null&&!s.skip){const I=f<0?f+65536:f;w(String.fromCharCode(I))}let a=s.unicodeSkip;for(;a>0&&i<j;)t.startsWith("\\'",i)?i+=4:i+=1,a--;break}default:if(u in T){const a=T[u];a===`
4
- `?s.skip||N():w(a===" "?" ":a)}break}continue}if(l==="*"){s.skip=!0,i+=2;continue}i++;continue}if(c===`
5
- `||c==="\r"){i++;continue}w(c),i++}for(y(),n.some(c=>c.text.trim().length>0)&&N();r.length>0&&A(r[0]);)r.shift();for(;r.length>0&&A(r[r.length-1]);)r.pop();return r.length===0&&r.push(q()),{type:"doc",children:r}}static toRtf(t){t=L(t),this.exportListNumbering=_(t);const e=[];for(const r of t.children){const n=this.blockToRtf(r,t);n!==null&&e.push(n)}return this.exportListNumbering=null,`{\\rtf1\\ansi\\ansicpg1252\\deff0\\uc1{\\fonttbl{\\f0\\froman Times New Roman;}{\\f1\\fmodern Courier New;}}
6
- \\f0\\fs24
7
- `+e.join(`
8
- `)+`
9
- }`}static blockToRtf(t,e){switch(t.type){case"paragraph":return H(t)?"\\pard\\brdrb\\brdrs\\brdrw15 \\par":this.paragraphToRtf(t);case"list":return this.listToRtf(t);case"table":return this.tableToRtf(t);case"code":return"\\pard{\\f1\\fs20 "+m(t.content).replace(/\n/g,"\\line ")+"}\\par";case"math":return"\\pard "+m(t.content)+"\\par";case"toc":{const r=C(e,D(t));return r.length===0?null:r.map(n=>`\\pard${t.direction==="rtl"?"\\rtlpar":"\\ltrpar"}${t.align==="justify"?"\\qj":t.align==="center"?"\\qc":(t.align??(t.direction==="rtl"?"right":"left"))==="right"?"\\qr":"\\ql"}\\${t.direction==="rtl"?"ri":"li"}${(n.level-1)*360} `+m(n.text)+"\\par").join(`
10
- `)}case"image":return"\\pard{\\i [Image"+(t.alt?`: ${m(t.alt)}`:"")+"]}\\par";case"page-break":return"\\page";case"container":return t.children.map(r=>this.blockToRtf(r,e)).filter(r=>r!==null).join(`
11
- `);default:return null}}static paragraphToRtf(t){let e="\\pard";t.align==="center"?e+="\\qc":t.align==="right"?e+="\\qr":t.align==="justify"&&(e+="\\qj");let r=this.inlineNodesToRtf(t.children);return t.heading&&(r=`{\\b\\fs${this.HEADING_HALF_POINTS[t.heading-1]} ${r}}`),`${e} ${r}\\par`}static listToRtf(t){const e=this.exportListNumbering?.get(t.id);let r=e?M(e):t.startNumber??1;const n=[];for(const d of t.children){if(d.type!=="list-item")continue;const p=((d.indentLevel??0)+1)*360;let o;t.variant==="ordered"?(o=`${r}. `,r++):t.variant==="todo"?o=d.checked?"[x] ":"[ ] ":o="\\bullet ",n.push(`\\pard\\li${p} ${o}`+this.inlineNodesToRtf(d.children)+"\\par")}return n.join(`
12
- `)}static tableToRtf(t){if(!t.children||t.children.length===0)return"";const e=O(t),r=9360,n=[];for(let d=0;d<e.rows;d++){const p=["\\trowd\\trgaph108"];for(let o=0;o<e.cols;o++)p.push(`\\cellx${Math.round(r*(o+1)/e.cols)}`);for(let o=0;o<e.cols;o++){const b=e.occupancy[d][o];let k="";b&&b.row===d&&b.col===o&&(k=b.cell.children.map(g=>g.type==="paragraph"?this.inlineNodesToRtf(g.children):g.type==="code"?m(g.content):"").filter(g=>g.length>0).join("\\line ")),p.push(`\\pard\\intbl ${k}\\cell`)}p.push("\\row"),n.push(p.join(""))}return n.join(`
13
- `)+`
14
- \\pard`}static inlineNodesToRtf(t){return t.map(e=>this.textNodeToRtf(e)).join("")}static textNodeToRtf(t){if(t.marks?.footnoteRef)return`{\\super ${m(t.text)}}`;const e=m(t.text).replace(/\n/g,"\\line ");if(!t.marks)return e;const r=[];t.marks.bold&&r.push("\\b"),t.marks.italic&&r.push("\\i"),t.marks.underline&&r.push("\\ul"),t.marks.strikethrough&&r.push("\\strike"),t.marks.superscript&&r.push("\\super"),t.marks.subscript&&r.push("\\sub"),t.marks.code&&r.push("\\f1");const n=r.length>0?`{${r.join("")} ${e}}`:e;return t.marks.link?`{\\field{\\*\\fldinst HYPERLINK "${m(t.marks.link)}"}{\\fldrslt ${n}}}`:n}};$.exportListNumbering=null,$.HEADING_HALF_POINTS=[32,28,26,24,22,22];let P=$;function m(h){let t="";for(let e=0;e<h.length;e++){const r=h[e];if(r==="\\"||r==="{"||r==="}"){t+="\\"+r;continue}const n=h.charCodeAt(e);if(n<128){t+=r;continue}t+=`\\u${n>32767?n-65536:n}?`}return t}function A(h){return h.borders?!1:h.children.every(t=>t.type==="text"&&t.text.trim()==="")}export{P as RtfConverter,m as escapeRtfText};
@@ -1,14 +0,0 @@
1
- import{V as q,W as L,X as _,Y as C,Z as D,_ as H,$ as M,a0 as O}from"./index-iZC8xN0t.js";const E=new Set(["fonttbl","colortbl","stylesheet","info","pict","object","header","footer","headerl","headerr","headerf","footerl","footerr","footerf","footnote","annotation","xmlnstbl","themedata","colorschememapping","latentstyles","datastore","listtable","listoverridetable","revtbl","generator","filetbl"]),T={emdash:"—",endash:"–",lquote:"‘",rquote:"’",ldblquote:"“",rdblquote:"”",bullet:"•",tab:" ",line:`
2
- `,"~":" ",_:"-","-":""};function v(h){const t=/\\ansicpg(\d+)/i.exec(h)?.[1]??"1252";return{65001:"utf-8",932:"shift_jis",936:"gb18030",949:"euc-kr",950:"big5"}[t]??`windows-${t}`}function S(h,t){try{return new TextDecoder(t).decode(h)}catch{return new TextDecoder("windows-1252").decode(h)}}const $=class{static async parseFile(t){const e=await t.arrayBuffer(),r=new Uint8Array(e),n=new TextDecoder("windows-1252").decode(r.subarray(0,512)),d=S(r,v(n));return this.fromRtf(d)}static fromRtf(t){const e=v(t),r=[];let n=[],d="",p={},o,b={},k=null;const g=[];let s={marks:{},skip:!1,unicodeSkip:1};const y=()=>{d&&(n.push({type:"text",text:d,marks:{...p}}),d="")},R=(c,l)=>{s.skip||!!s.marks[c]===l||(y(),l?s.marks[c]=!0:delete s.marks[c],p={...s.marks})},N=()=>{y();const c=n.filter(x=>x.text.length>0),l=q(c.length>0?c:[{type:"text",text:"",marks:{}}]);o&&(l.align=o),Object.keys(b).length>0&&(l.borders=JSON.stringify(b)),r.push(l),n=[]},w=c=>{s.skip||!c||(d+=c)};let i=0;const j=t.length;for(;i<j;){const c=t[i];if(c==="{"){y(),g.push(s),s={marks:{...s.marks},align:s.align,skip:s.skip,unicodeSkip:s.unicodeSkip},p={...s.marks},i++;continue}if(c==="}"){y(),s=g.pop()??{marks:{},skip:!1,unicodeSkip:1},p={...s.marks},i++;continue}if(c==="\\"){const l=t[i+1];if(l==="\\"||l==="{"||l==="}"){w(l),i+=2;continue}if(l==="'"){const u=[];for(;t.startsWith("\\'",i);){const f=parseInt(t.slice(i+2,i+4),16);if(Number.isNaN(f))break;u.push(f),i+=4}if(u.length===0){i+=2;continue}w(S(new Uint8Array(u),e));continue}if(l==="~"||l==="-"||l==="_"){w(T[l]??""),i+=2;continue}if(l===`
3
- `||l==="\r"){s.skip||N(),i+=2;continue}const x=/^\\([a-zA-Z]+)(-?\d+)? ?/.exec(t.slice(i));if(x){const u=x[1],f=x[2]!==void 0?parseInt(x[2],10):null;if(i+=x[0].length,E.has(u)){s.skip=!0;continue}switch(u){case"par":s.skip||N();break;case"pard":o=void 0,b={},k=null;break;case"brdrt":case"brdrb":case"brdrl":case"brdrr":{if(s.skip)break;const a={brdrt:"top",brdrb:"bottom",brdrl:"left",brdrr:"right"}[u];k=a,b[a]={style:"single",width:1,color:"#000000"};break}case"brdrs":case"brdrth":case"brdrdb":case"brdrdash":case"brdrdashsm":case"brdrdot":case"brdrnone":{if(s.skip||!k)break;const a=b[k];if(!a)break;u==="brdrnone"?(delete b[k],k=null):u==="brdrdb"?a.style="double":u==="brdrdash"||u==="brdrdashsm"?a.style="dashed":u==="brdrdot"?a.style="dotted":u==="brdrth"?(a.style="single",a.width=Math.max(a.width,2)):a.style="single";break}case"brdrw":{if(s.skip||!k||f===null)break;const a=b[k];if(!a)break;a.width=Math.min(8,Math.max(1,Math.round(f/15)));break}case"qc":o="center";break;case"qr":o="right";break;case"ql":case"qj":o=void 0;break;case"plain":y(),s.marks={},p={};break;case"b":R("bold",f!==0);break;case"i":R("italic",f!==0);break;case"ul":R("underline",f!==0);break;case"ulnone":R("underline",!1);break;case"strike":R("strikethrough",f!==0);break;case"uc":s.unicodeSkip=f??1;break;case"u":{if(f!==null&&!s.skip){const I=f<0?f+65536:f;w(String.fromCharCode(I))}let a=s.unicodeSkip;for(;a>0&&i<j;)t.startsWith("\\'",i)?i+=4:i+=1,a--;break}default:if(u in T){const a=T[u];a===`
4
- `?s.skip||N():w(a===" "?" ":a)}break}continue}if(l==="*"){s.skip=!0,i+=2;continue}i++;continue}if(c===`
5
- `||c==="\r"){i++;continue}w(c),i++}for(y(),n.some(c=>c.text.trim().length>0)&&N();r.length>0&&A(r[0]);)r.shift();for(;r.length>0&&A(r[r.length-1]);)r.pop();return r.length===0&&r.push(q()),{type:"doc",children:r}}static toRtf(t){t=L(t),this.exportListNumbering=_(t);const e=[];for(const r of t.children){const n=this.blockToRtf(r,t);n!==null&&e.push(n)}return this.exportListNumbering=null,`{\\rtf1\\ansi\\ansicpg1252\\deff0\\uc1{\\fonttbl{\\f0\\froman Times New Roman;}{\\f1\\fmodern Courier New;}}
6
- \\f0\\fs24
7
- `+e.join(`
8
- `)+`
9
- }`}static blockToRtf(t,e){switch(t.type){case"paragraph":return H(t)?"\\pard\\brdrb\\brdrs\\brdrw15 \\par":this.paragraphToRtf(t);case"list":return this.listToRtf(t);case"table":return this.tableToRtf(t);case"code":return"\\pard{\\f1\\fs20 "+m(t.content).replace(/\n/g,"\\line ")+"}\\par";case"math":return"\\pard "+m(t.content)+"\\par";case"toc":{const r=C(e,D(t));return r.length===0?null:r.map(n=>`\\pard${t.direction==="rtl"?"\\rtlpar":"\\ltrpar"}${t.align==="justify"?"\\qj":t.align==="center"?"\\qc":(t.align??(t.direction==="rtl"?"right":"left"))==="right"?"\\qr":"\\ql"}\\${t.direction==="rtl"?"ri":"li"}${(n.level-1)*360} `+m(n.text)+"\\par").join(`
10
- `)}case"image":return"\\pard{\\i [Image"+(t.alt?`: ${m(t.alt)}`:"")+"]}\\par";case"page-break":return"\\page";case"container":return t.children.map(r=>this.blockToRtf(r,e)).filter(r=>r!==null).join(`
11
- `);default:return null}}static paragraphToRtf(t){let e="\\pard";t.align==="center"?e+="\\qc":t.align==="right"?e+="\\qr":t.align==="justify"&&(e+="\\qj");let r=this.inlineNodesToRtf(t.children);return t.heading&&(r=`{\\b\\fs${this.HEADING_HALF_POINTS[t.heading-1]} ${r}}`),`${e} ${r}\\par`}static listToRtf(t){const e=this.exportListNumbering?.get(t.id);let r=e?M(e):t.startNumber??1;const n=[];for(const d of t.children){if(d.type!=="list-item")continue;const p=((d.indentLevel??0)+1)*360;let o;t.variant==="ordered"?(o=`${r}. `,r++):t.variant==="todo"?o=d.checked?"[x] ":"[ ] ":o="\\bullet ",n.push(`\\pard\\li${p} ${o}`+this.inlineNodesToRtf(d.children)+"\\par")}return n.join(`
12
- `)}static tableToRtf(t){if(!t.children||t.children.length===0)return"";const e=O(t),r=9360,n=[];for(let d=0;d<e.rows;d++){const p=["\\trowd\\trgaph108"];for(let o=0;o<e.cols;o++)p.push(`\\cellx${Math.round(r*(o+1)/e.cols)}`);for(let o=0;o<e.cols;o++){const b=e.occupancy[d][o];let k="";b&&b.row===d&&b.col===o&&(k=b.cell.children.map(g=>g.type==="paragraph"?this.inlineNodesToRtf(g.children):g.type==="code"?m(g.content):"").filter(g=>g.length>0).join("\\line ")),p.push(`\\pard\\intbl ${k}\\cell`)}p.push("\\row"),n.push(p.join(""))}return n.join(`
13
- `)+`
14
- \\pard`}static inlineNodesToRtf(t){return t.map(e=>this.textNodeToRtf(e)).join("")}static textNodeToRtf(t){if(t.marks?.footnoteRef)return`{\\super ${m(t.text)}}`;const e=m(t.text).replace(/\n/g,"\\line ");if(!t.marks)return e;const r=[];t.marks.bold&&r.push("\\b"),t.marks.italic&&r.push("\\i"),t.marks.underline&&r.push("\\ul"),t.marks.strikethrough&&r.push("\\strike"),t.marks.superscript&&r.push("\\super"),t.marks.subscript&&r.push("\\sub"),t.marks.code&&r.push("\\f1");const n=r.length>0?`{${r.join("")} ${e}}`:e;return t.marks.link?`{\\field{\\*\\fldinst HYPERLINK "${m(t.marks.link)}"}{\\fldrslt ${n}}}`:n}};$.exportListNumbering=null,$.HEADING_HALF_POINTS=[32,28,26,24,22,22];let P=$;function m(h){let t="";for(let e=0;e<h.length;e++){const r=h[e];if(r==="\\"||r==="{"||r==="}"){t+="\\"+r;continue}const n=h.charCodeAt(e);if(n<128){t+=r;continue}t+=`\\u${n>32767?n-65536:n}?`}return t}function A(h){return h.borders?!1:h.children.every(t=>t.type==="text"&&t.text.trim()==="")}export{P as RtfConverter,m as escapeRtfText};
@@ -1,45 +0,0 @@
1
- import{C as q,aP as L,f as _,aQ as C}from"./backend-BIhAX-Gi.js";import{f as D}from"./footnoteFlatten-Bekh8ZfM.js";import{a as H,e as M}from"./ListNumbering-Qlu6AuRZ.js";import{b as O}from"./TableGrid-DbroRucl.js";
2
- const P=new Set(["fonttbl","colortbl","stylesheet","info","pict","object","header","footer","headerl","headerr","headerf","footerl","footerr","footerf","footnote","annotation","xmlnstbl","themedata","\
3
- colorschememapping","latentstyles","datastore","listtable","listoverridetable","revtbl","generator","filetbl"]),T={emdash:"—",endash:"–",lquote:"‘",rquote:"’",ldblquote:"“",rdblquote:"”",bullet:"\
4
- •",tab:" ",line:`
5
- `,"~":" ",_:"-","-":""};function v(p){const t=/\\ansicpg(\d+)/i.exec(p)?.[1]??"1252";return{65001:"utf-8",932:"shift_jis",936:"gb18030",949:"euc-kr",950:"big5"}[t]??`windows-${t}`}function S(p,t){try{
6
- return new TextDecoder(t).decode(p)}catch{return new TextDecoder("windows-1252").decode(p)}}const $=class{static async parseFile(t){const e=await t.arrayBuffer(),r=new Uint8Array(e),n=new TextDecoder(
7
- "windows-1252").decode(r.subarray(0,512)),d=S(r,v(n));return this.fromRtf(d)}static fromRtf(t){const e=v(t),r=[];let n=[],d="",h={},o,b={},k=null;const m=[];let s={marks:{},skip:!1,unicodeSkip:1};const y=()=>{
8
- d&&(n.push({type:"text",text:d,marks:{...h}}),d="")},R=(c,l)=>{s.skip||!!s.marks[c]===l||(y(),l?s.marks[c]=!0:delete s.marks[c],h={...s.marks})},N=()=>{y();const c=n.filter(x=>x.text.length>0),l=q(c.length>
9
- 0?c:[{type:"text",text:"",marks:{}}]);o&&(l.align=o),Object.keys(b).length>0&&(l.borders=JSON.stringify(b)),r.push(l),n=[]},w=c=>{s.skip||!c||(d+=c)};let i=0;const j=t.length;for(;i<j;){const c=t[i];if(c===
10
- "{"){y(),m.push(s),s={marks:{...s.marks},align:s.align,skip:s.skip,unicodeSkip:s.unicodeSkip},h={...s.marks},i++;continue}if(c==="}"){y(),s=m.pop()??{marks:{},skip:!1,unicodeSkip:1},h={...s.marks},i++;
11
- continue}if(c==="\\"){const l=t[i+1];if(l==="\\"||l==="{"||l==="}"){w(l),i+=2;continue}if(l==="'"){const u=[];for(;t.startsWith("\\'",i);){const f=parseInt(t.slice(i+2,i+4),16);if(Number.isNaN(f))break;
12
- u.push(f),i+=4}if(u.length===0){i+=2;continue}w(S(new Uint8Array(u),e));continue}if(l==="~"||l==="-"||l==="_"){w(T[l]??""),i+=2;continue}if(l===`
13
- `||l==="\r"){s.skip||N(),i+=2;continue}const x=/^\\([a-zA-Z]+)(-?\d+)? ?/.exec(t.slice(i));if(x){const u=x[1],f=x[2]!==void 0?parseInt(x[2],10):null;if(i+=x[0].length,P.has(u)){s.skip=!0;continue}switch(u){case"\
14
- par":s.skip||N();break;case"pard":o=void 0,b={},k=null;break;case"brdrt":case"brdrb":case"brdrl":case"brdrr":{if(s.skip)break;const a={brdrt:"top",brdrb:"bottom",brdrl:"left",brdrr:"right"}[u];k=a,b[a]=
15
- {style:"single",width:1,color:"#000000"};break}case"brdrs":case"brdrth":case"brdrdb":case"brdrdash":case"brdrdashsm":case"brdrdot":case"brdrnone":{if(s.skip||!k)break;const a=b[k];if(!a)break;u==="brd\
16
- rnone"?(delete b[k],k=null):u==="brdrdb"?a.style="double":u==="brdrdash"||u==="brdrdashsm"?a.style="dashed":u==="brdrdot"?a.style="dotted":u==="brdrth"?(a.style="single",a.width=Math.max(a.width,2)):a.
17
- style="single";break}case"brdrw":{if(s.skip||!k||f===null)break;const a=b[k];if(!a)break;a.width=Math.min(8,Math.max(1,Math.round(f/15)));break}case"qc":o="center";break;case"qr":o="right";break;case"\
18
- ql":case"qj":o=void 0;break;case"plain":y(),s.marks={},h={};break;case"b":R("bold",f!==0);break;case"i":R("italic",f!==0);break;case"ul":R("underline",f!==0);break;case"ulnone":R("underline",!1);break;case"\
19
- strike":R("strikethrough",f!==0);break;case"uc":s.unicodeSkip=f??1;break;case"u":{if(f!==null&&!s.skip){const I=f<0?f+65536:f;w(String.fromCharCode(I))}let a=s.unicodeSkip;for(;a>0&&i<j;)t.startsWith(
20
- "\\'",i)?i+=4:i+=1,a--;break}default:if(u in T){const a=T[u];a===`
21
- `?s.skip||N():w(a===" "?" ":a)}break}continue}if(l==="*"){s.skip=!0,i+=2;continue}i++;continue}if(c===`
22
- `||c==="\r"){i++;continue}w(c),i++}for(y(),n.some(c=>c.text.trim().length>0)&&N();r.length>0&&A(r[0]);)r.shift();for(;r.length>0&&A(r[r.length-1]);)r.pop();return r.length===0&&r.push(q()),{type:"doc",
23
- children:r}}static toRtf(t){t=D(t),this.exportListNumbering=H(t);const e=[];for(const r of t.children){const n=this.blockToRtf(r,t);n!==null&&e.push(n)}return this.exportListNumbering=null,`{\\rtf1\\ans\
24
- i\\ansicpg1252\\deff0\\uc1{\\fonttbl{\\f0\\froman Times New Roman;}{\\f1\\fmodern Courier New;}}
25
- \\f0\\fs24
26
- `+e.join(`
27
- `)+`
28
- }`}static blockToRtf(t,e){switch(t.type){case"paragraph":return C(t)?"\\pard\\brdrb\\brdrs\\brdrw15 \\par":this.paragraphToRtf(t);case"list":return this.listToRtf(t);case"table":return this.tableToRtf(
29
- t);case"code":return"\\pard{\\f1\\fs20 "+g(t.content).replace(/\n/g,"\\line ")+"}\\par";case"math":return"\\pard "+g(t.content)+"\\par";case"toc":{const r=L(e,_(t));return r.length===0?null:r.map(n=>`\
30
- \\pard${t.direction==="rtl"?"\\rtlpar":"\\ltrpar"}${t.align==="justify"?"\\qj":t.align==="center"?"\\qc":(t.align??(t.direction==="rtl"?"right":"left"))==="right"?"\\qr":"\\ql"}\\${t.direction==="rtl"?
31
- "ri":"li"}${(n.level-1)*360} `+g(n.text)+"\\par").join(`
32
- `)}case"image":return"\\pard{\\i [Image"+(t.alt?`: ${g(t.alt)}`:"")+"]}\\par";case"page-break":return"\\page";case"container":return t.children.map(r=>this.blockToRtf(r,e)).filter(r=>r!==null).join(`
33
- `);default:return null}}static paragraphToRtf(t){let e="\\pard";t.align==="center"?e+="\\qc":t.align==="right"?e+="\\qr":t.align==="justify"&&(e+="\\qj");let r=this.inlineNodesToRtf(t.children);return t.
34
- heading&&(r=`{\\b\\fs${this.HEADING_HALF_POINTS[t.heading-1]} ${r}}`),`${e} ${r}\\par`}static listToRtf(t){const e=this.exportListNumbering?.get(t.id);let r=e?M(e):t.startNumber??1;const n=[];for(const d of t.
35
- children){if(d.type!=="list-item")continue;const h=((d.indentLevel??0)+1)*360;let o;t.variant==="ordered"?(o=`${r}. `,r++):t.variant==="todo"?o=d.checked?"[x] ":"[ ] ":o="\\bullet ",n.push(`\\pard\\li${h}\
36
- ${o}`+this.inlineNodesToRtf(d.children)+"\\par")}return n.join(`
37
- `)}static tableToRtf(t){if(!t.children||t.children.length===0)return"";const e=O(t),r=9360,n=[];for(let d=0;d<e.rows;d++){const h=["\\trowd\\trgaph108"];for(let o=0;o<e.cols;o++)h.push(`\\cellx${Math.
38
- round(r*(o+1)/e.cols)}`);for(let o=0;o<e.cols;o++){const b=e.occupancy[d][o];let k="";b&&b.row===d&&b.col===o&&(k=b.cell.children.map(m=>m.type==="paragraph"?this.inlineNodesToRtf(m.children):m.type===
39
- "code"?g(m.content):"").filter(m=>m.length>0).join("\\line ")),h.push(`\\pard\\intbl ${k}\\cell`)}h.push("\\row"),n.push(h.join(""))}return n.join(`
40
- `)+`
41
- \\pard`}static inlineNodesToRtf(t){return t.map(e=>this.textNodeToRtf(e)).join("")}static textNodeToRtf(t){if(t.marks?.footnoteRef)return`{\\super ${g(t.text)}}`;const e=g(t.text).replace(/\n/g,"\\line\
42
- ");if(!t.marks)return e;const r=[];t.marks.bold&&r.push("\\b"),t.marks.italic&&r.push("\\i"),t.marks.underline&&r.push("\\ul"),t.marks.strikethrough&&r.push("\\strike"),t.marks.superscript&&r.push("\\\
43
- super"),t.marks.subscript&&r.push("\\sub"),t.marks.code&&r.push("\\f1");const n=r.length>0?`{${r.join("")} ${e}}`:e;return t.marks.link?`{\\field{\\*\\fldinst HYPERLINK "${g(t.marks.link)}"}{\\fldrslt ${n}\
44
- }}`:n}};$.exportListNumbering=null,$.HEADING_HALF_POINTS=[32,28,26,24,22,22];let E=$;function g(p){let t="";for(let e=0;e<p.length;e++){const r=p[e];if(r==="\\"||r==="{"||r==="}"){t+="\\"+r;continue}const n=p.
45
- charCodeAt(e);if(n<128){t+=r;continue}t+=`\\u${n>32767?n-65536:n}?`}return t}function A(p){return p.borders?!1:p.children.every(t=>t.type==="text"&&t.text.trim()==="")}export{E as RtfConverter,g as escapeRtfText};
@@ -1,70 +0,0 @@
1
- import{Y as ee,w as te}from"./backend-BIhAX-Gi.js";import{b as ne}from"./TableGrid-DbroRucl.js";import{a as K}from"./ParagraphDiffAnalysis-DrmStvmz.js";const U=p=>p.children.map(e=>e.text).join(""),$=({
2
- id:p,children:e,...n})=>JSON.stringify(n),j=(p={})=>Object.fromEntries(ee.filter(e=>p[e]!==void 0).map(e=>[e,p[e]])),se=p=>({...p,children:p.children.map(e=>({...e,marks:j(e.marks)}))});function re(p,e,n){
3
- const t=(u,c)=>u.length>0&&u.every(m=>m.type==="paragraph"&&m.children.length>0&&m.children.every(N=>N.marks?.[c]&&!N.marks.layeredInsertion));if(!t(p,"deletion")||!t(e,"insertion"))return null;const s=p,
4
- o=e;if(s.length*o.length>8e6)return null;const h=s.map(U),d=o.map(U),r=[],l=(u,c,m)=>({[u]:!0,suggestionId:m,suggestionSource:"manual",suggestionAuthorType:"human",suggestionLabel:"Revise bill",...c?.
5
- suggestionAuthorName?{suggestionAuthorName:c.suggestionAuthorName}:{}}),a=(u,c)=>{const m=n(),N=se(u),A={id:m,blockId:u.id,source:"manual",authorType:"human",label:c==="insert"?"Insert":"Delete",agentName:u.
6
- children[0]?.marks?.suggestionAuthorName},E=c==="insert"?{...A,type:"block-insert"}:{...A,type:"block-delete",beforeBlock:N};r.push({...N,structuralSuggestionId:m,structuralSuggestionKind:c,structuralSuggestionRecord:JSON.
7
- stringify(E)})},i=(u,c,m)=>{const N=[];let A=0;for(const E of u.children){const w=Math.max(c-A,0),f=Math.min(c+m-A,E.text.length);if(f>w&&N.push({...E,text:E.text.slice(w,f)}),A+=E.text.length,A>=c+m)
8
- break}return N},g=(u,c)=>{const m=U(u),N=U(c);if($(u)!==$(c)||m.split(/\s+/).length*N.split(/\s+/).length>1e6){a(u,"delete"),a(c,"insert");return}const A=[];let E=0,w=0,f="";const k=(x,b)=>{f||(f=n()),
9
- A.push(...x.map(S=>({...S,marks:{...j(S.marks),...l(b,S.marks,f)}})))};for(const[x,b]of K(m,N).diffs){if(x===-1)k(i(u,E,b.length),"deletion");else if(x===1)k(i(c,w,b.length),"insertion");else{const S=i(
10
- u,E,b.length),X=i(c,w,b.length);let I=0,L=0,B=0,O=0;for(;I<S.length&&L<X.length;){const D=Math.min(S[I].text.length-B,X[L].text.length-O),Y={...S[I],text:S[I].text.slice(B,B+D)},F={...X[L],text:X[L].text.
11
- slice(O,O+D)},{bookmark:ce,...V}=j(Y.marks),{bookmark:he,...Z}=j(F.marks);JSON.stringify(V)===JSON.stringify(Z)?(f="",A.push({...F,marks:j(F.marks)})):(k([Y],"deletion"),k([F],"insertion")),B+=D,O+=D,
12
- B===S[I].text.length&&(I++,B=0),O===X[L].text.length&&(L++,O=0)}}x!==1&&(E+=b.length),x!==-1&&(w+=b.length)}r.push({...c,children:A})},y=new Map,q=u=>{const c=$(u)+U(u);return y.has(c)||y.set(c,`p${y.
13
- size}`),y.get(c)+" "},J=K(s.map(q).join(""),o.map(q).join("")).diffs;let C=0,v=0,P=C,z=v;const H=()=>{const u=s.slice(P,C),c=o.slice(z,v),m=x=>new Set(x.toLowerCase().match(/[\p{L}\p{N}]+/gu)??[]),N=h.
14
- slice(P,C).map(m),A=d.slice(z,v).map(m),E=u.map((x,b)=>c.map((S,X)=>{if($(x)!==$(S))return 0;let I=0;for(const B of N[b])A[X].has(B)&&I++;const L=2*I/(N[b].size+A[X].size||1);return L>=.5?L:0})),w=Array.
15
- from({length:u.length+1},()=>new Float64Array(c.length+1));for(let x=u.length-1;x>=0;x--)for(let b=c.length-1;b>=0;b--)w[x][b]=Math.max(w[x+1][b],w[x][b+1],E[x][b]+w[x+1][b+1]);let f=0,k=0;for(;f<u.length||
16
- k<c.length;)f<u.length&&k<c.length&&E[f][k]>0&&w[f][k]===E[f][k]+w[f+1][k+1]?g(u[f++],c[k++]):f<u.length&&(k===c.length||w[f+1][k]>=w[f][k+1])?a(u[f++],"delete"):a(c[k++],"insert")};for(const[u,c]of J){
17
- const m=c.trim().split(/\s+/).filter(Boolean).length;if(u===0){H();for(let N=0;N<m;N++)g(s[C++],o[v++]);P=C,z=v}else u===-1?C+=m:v+=m}return H(),r}const G={division:0,title:0,subtitle:0,chapter:0,subchapter:0,
18
- part:0,subpart:0,section:0,subsection:1,paragraph:2,subparagraph:3,clause:4,subclause:5,item:6,subitem:7},Q={division:"Division",title:"Title",subtitle:"Subtitle",chapter:"Chapter",subchapter:"Subchap\
19
- ter",part:"Part",subpart:"Subpart",section:"Sec."},W=new Set(["added-phrase","deleted-phrase","bold","italic","underline","strike","superscript","subscript","quote","term","short-title","act-name","ex\
20
- ternal-xref","internal-xref","enum-in-header","header-in-text","definition","linebreak","nobreak","sponsor","cosponsor","committee-name","text-to-insert","text-to-strike-out","omitted-text","inline-co\
21
- mment"]),ie=new Set(["graphic","formula","footnote","footnote-ref","spanspec","entrytbl"]),M=p=>Array.from(p.children),T=(p,e)=>M(p).find(n=>n.localName===e),R=p=>p.replace(/[\t\r\n ]+/g," "),oe={id:"\
22
- us-congress-bill",label:"U.S. Congressional bills (bill.dtd)",matches(p){const e=p.documentElement;if(e.localName!=="bill"||e.namespaceURI||!T(e,"legis-body"))return!1;const n=p.doctype;if(n)return n.
23
- name==="bill"&&(n.publicId==="-//US Congress//DTDs/bill.dtd//EN"||!n.publicId&&/(?:^|\/)bill\.dtd$/i.test(n.systemId));const t=T(e,"form");return!!t&&!!T(t,"congress")&&!!T(t,"legis-num")},parse(p){return new le().
24
- parse(p)}};class le{constructor(){this.revisionCount=0,this.revisions=new WeakMap,this.committees=new Map,this.usedIds=new Set}id(){let e;do e=te();while(this.usedIds.has(e));return this.usedIds.add(e),
25
- e}parse(e){const n=e.documentElement;for(const i of Array.from(n.getElementsByTagName("committee-name"))){const g=i.getAttribute("committee-id");g&&this.committees.set(g,R(i.textContent??"").trim())}for(const i of Array.
26
- from(n.getElementsByTagName("*")))if(ie.has(i.localName))throw new Error(`Unsupported Congressional XML element: <${i.localName}>. This bill requires content the XML importer does not yet support.`);const t=this.
27
- context(n,{marks:{},indent:0,quoted:0}),s=[],o=M(n),h=o.map(i=>this.blocks(i,t));for(let i=0;i<o.length;i++){const g=o[i],y=h[i],q=o[i+1];if(g.localName==="legis-body"&&q?.localName==="legis-body"&&q.
28
- getAttribute("display-enacting-clause")==="no-display-enacting-clause"){const J=h[i+1],C=g.getAttribute("display-enacting-clause")!=="no-display-enacting-clause"?1:0,v=re(y.slice(C),J,()=>`congressdif\
29
- f-${++this.revisionCount}`);if(v){s.push(...y.slice(0,C),...v),i++;continue}}s.push(...y)}if(!s.length)throw new Error("The Congressional XML bill contains no readable content.");const d=T(n,"form"),r=d&&
30
- T(d,"legis-num")?.textContent?.trim(),l=n.getElementsByTagName("short-title")[0]?.textContent?.trim(),a=r?[r,l].filter(Boolean).join(" — "):e.getElementsByTagNameNS("http://purl.org/dc/elements/1.1/",
31
- "title")[0]?.textContent?.trim();return{type:"doc",children:s,...a?{title:a}:{}}}context(e,n){const t={...n.marks},s=e.localName,o=e.getAttribute("changed")??(s==="added-phrase"?"added":s==="deleted-p\
32
- hrase"?"deleted":null);if(o==="added"||o==="deleted"){const d=o==="added"?"insertion":"deletion",r=e.getAttribute("reporting-committee")||e.getAttribute("committee-id"),l=r?this.committees.get(r)??r:void 0;
33
- if(!t[d]||l&&l!==t.suggestionAuthorName){if(t.deletion&&d==="insertion")throw new Error("Unsupported Congressional XML revision: insertion nested inside a deletion.");let a=this.revisions.get(e);a||(a=
34
- {[d]:!0,suggestionId:`congressrev-${++this.revisionCount}`,suggestionSource:"manual",suggestionAuthorType:"human",suggestionLabel:d==="insertion"?"Insert":"Delete",...l?{suggestionAuthorName:l}:{}},this.
35
- revisions.set(e,a)),t.insertion&&d==="deletion"&&(t.layeredInsertion=JSON.stringify({id:t.suggestionId,source:t.suggestionSource,authorType:t.suggestionAuthorType,authorName:t.suggestionAuthorName,label:t.
36
- suggestionLabel})),delete t.insertion,delete t.deletion,delete t.suggestionAuthorName,Object.assign(t,a)}}s==="bold"&&(t.bold=!0),s==="italic"&&(t.italic=!0),s==="underline"&&(t.underline=!0),s==="sup\
37
- erscript"&&(t.superscript=!0),s==="subscript"&&(t.subscript=!0);const h=e.getAttribute("href");return h&&/^(https?:\/\/|#)/i.test(h.trim())&&(t.link=h.trim()),s==="internal-xref"&&e.getAttribute("idre\
38
- f")&&(t.link=`#${e.getAttribute("idref")}`),{...n,marks:t,style:e.getAttribute("style")??n.style}}text(e,n){return{type:"text",text:e,marks:{...n.marks}}}inline(e,n){const t=this.context(e,n);if(e.localName===
39
- "linebreak")return[this.text(`
40
- `,t)];const s=[],o=e.localName==="quote"||e.localName==="term";o&&s.push(this.text(t.quoted?"‘":"“",t));for(const h of Array.from(e.childNodes))h.nodeType===3||h.nodeType===4?s.push(this.text(R(h.
41
- textContent??""),t)):h.nodeType===1&&s.push(...this.inline(h,o?{...t,quoted:t.quoted+1}:t));return o&&s.push(this.text(t.quoted?"’":"”",t)),s}paragraph(e,n,t,s){for(;e.length&&!e[0].text.trim();)e.
42
- shift();for(;e.length&&!e[e.length-1].text.trim();)e.pop();if(!e.length)return null;e[0].text=e[0].text.replace(/^ +/,""),e[e.length-1].text=e[e.length-1].text.replace(/ +$/,""),n.quoted&&e.unshift(this.
43
- text(n.quoted>1?"‘":"“",n));const o=t?.getAttribute("id");return o&&(e[0].marks={...e[0].marks,bookmark:o}),{type:"paragraph",id:this.id(),children:e,...s?{heading:s,keepNext:!0}:{},...n.indent?{leftIndent:Math.
44
- min(n.indent,6)}:{}}}blocks(e,n){const t=e.localName;if(t==="metadata")return[];const s=this.context(e,n);if(Object.prototype.hasOwnProperty.call(G,t))return this.structure(e,{...s,indent:G[t]+(s.quoted?
45
- 1:0)});if(t==="table")return M(e).filter(r=>r.localName==="tgroup").length?M(e).flatMap(r=>r.localName==="tgroup"?[this.table(r,this.context(r,s))]:this.blocks(r,s)):[this.table(e,s)];if(t==="quoted-b\
46
- lock"){const r=M(e).filter(i=>i.localName!=="after-quoted-block").flatMap(i=>this.blocks(i,{...s,quoted:s.quoted+1,indent:s.indent+1})),l=r[r.length-1],a=T(e,"after-quoted-block");if(l?.type==="paragr\
47
- aph")l.children.push(this.text(s.quoted?"’":"”",s)),a&&l.children.push(...this.inline(a,s));else if(a){const i=this.paragraph([this.text(s.quoted?"’":"”",s),...this.inline(a,s)],s);i&&r.push(i)}
48
- return r}if(!M(e).some(r=>!W.has(r.localName))){const r=this.paragraph(this.inline(e,n),s,e);if(r&&(t==="legis-num"||t==="legis-type")){r.align="center";for(const l of r.children)l.marks={...l.marks,bold:!0}}
49
- return r?[r]:[]}const o=[];if(t==="legis-body"&&e.getAttribute("display-enacting-clause")!=="no-display-enacting-clause"){const r=this.paragraph([this.text("Be it enacted by the Senate and House of Re\
50
- presentatives of the United States of America in Congress assembled,",s)],s);r&&o.push(r)}let h=[];const d=()=>{const r=this.paragraph(h,s);r&&o.push(r),h=[]};for(const r of Array.from(e.childNodes))if(r.
51
- nodeType===3||r.nodeType===4)h.push(this.text(R(r.textContent??""),s));else if(r.nodeType===1){const l=r;W.has(l.localName)?h.push(...this.inline(l,s)):(d(),o.push(...this.blocks(l,s)))}return d(),o}structure(e,n){
52
- const t=[],s=Object.prototype.hasOwnProperty.call(Q,e.localName),o=T(e,"enum"),h=T(e,"header");let d=[];if(o&&(s&&d.push(this.text(e.localName==="section"&&n.style==="USC"?"§ ":`${Q[e.localName]} `,n)),
53
- d.push(...this.inline(o,n),this.text(" ",n))),h){const a=this.inline(h,n);for(const i of a)i.marks={...i.marks,bold:!0};d.push(...a)}const r=(a=!1)=>{const i=this.paragraph(d,n,t.length?void 0:e,a?e.localName===
54
- "section"?2:1:void 0);i&&t.push(i),d=[]};s&&r(!0);let l=!0;for(const a of Array.from(e.childNodes))if(!(a===o||a===h)){if(a.nodeType===3||a.nodeType===4)a.textContent?.trim()&&d.push(this.text(R(a.textContent),
55
- n));else if(a.nodeType===1){const i=a;if(i.localName==="text")l||r(),l&&!s&&h&&d.push(this.text(".—",n)),d.push(...this.inline(i,n)),l=!1;else if(W.has(i.localName))d.push(...this.inline(i,n));else{
56
- r();const g=this.blocks(i,n),y=t[t.length-1];i.getAttribute("display-inline")==="yes-display-inline"&&y?.type==="paragraph"&&!y.heading&&g[0]?.type==="paragraph"&&(y.children.push(this.text(" ",n),...g[0].
57
- children),g.shift()),t.push(...g)}}}return r(),t}table(e,n){const t=T(e,"tgroup")??e,s=new Map(M(t).filter(r=>r.localName==="colspec").map((r,l)=>[r.getAttribute("colname"),Number(r.getAttribute("coln\
58
- um"))||l+1])),o=M(t).flatMap(r=>r.localName==="row"?[r]:["thead","tbody","tfoot"].includes(r.localName)?M(r).filter(l=>l.localName==="row"):[]);if(!o.length)throw new Error("Unsupported Congressional \
59
- XML table: no rows.");const h={type:"table",id:this.id(),columnWidths:[],children:o.map(r=>({type:"table-row",id:this.id(),children:M(r).filter(l=>l.localName==="entry").map(l=>{const a=s.get(l.getAttribute(
60
- "namest")),i=s.get(l.getAttribute("nameend")),g=a&&i?i-a+1:1,y=Number(l.getAttribute("morerows")??0)+1;if(l.hasAttribute("namest")&&(!a||!i)||!Number.isInteger(g)||g<1||g>100||!Number.isInteger(y)||y<
61
- 1||y>o.length)throw new Error("Unsupported Congressional XML table: invalid cell span.");const q=this.blocks(l,{...this.context(r,r.parentElement&&r.parentElement!==t?this.context(r.parentElement,n):n),
62
- indent:0});return{type:"table-cell",id:this.id(),children:q.length?q:[{type:"paragraph",id:this.id(),children:[{type:"text",text:""}]}],...g>1?{colSpan:g}:{},...y>1?{rowSpan:y}:{}}})}))},d=ne(h).cols;
63
- if(!d||d>100)throw new Error("Unsupported Congressional XML table: invalid column count.");return h.columnWidths=Array(d).fill(100/d),h}}const _=[oe];class ae{static async parseFile(e){return this.fromBytes(
64
- new Uint8Array(await e.arrayBuffer()))}static fromBytes(e){let n="utf-8";if(e[0]===255&&e[1]===254||e[0]===60&&e[1]===0&&e[2]===63&&e[3]===0)n="utf-16le";else if(e[0]===254&&e[1]===255||e[0]===0&&e[1]===
65
- 60&&e[2]===0&&e[3]===63)n="utf-16be";else if(!(e[0]===239&&e[1]===187&&e[2]===191)){const s=new TextDecoder("windows-1252").decode(e.subarray(0,512));n=/^<\?xml\s[^?]*\bencoding\s*=\s*["']([^"']+)["']/i.
66
- exec(s)?.[1]??n}let t;try{t=new TextDecoder(n,{fatal:!0}).decode(e)}catch{throw new Error(`Invalid or unsupported XML encoding: ${n}.`)}return this.fromXml(t)}static fromXml(e){if(/<!ENTITY\s/i.test(e))
67
- throw new Error("XML entity declarations are not supported.");const n=new DOMParser().parseFromString(e.replace(/^\uFEFF/,""),"application/xml");if(!n.documentElement||n.getElementsByTagName("parserer\
68
- ror").length)throw new Error("Invalid XML: the document is not well-formed.");const t=[[n.documentElement,0]];for(;t.length;){const[o,h]=t.pop();if(h>128)throw new Error("XML nesting exceeds the suppo\
69
- rted depth (128).");for(const d of Array.from(o.children))t.push([d,h+1])}const s=_.find(o=>o.matches(n));if(!s)throw new Error(`Unsupported XML schema: <${n.documentElement.tagName}>. Supported: ${_.
70
- map(o=>o.label).join(", ")}.`);return s.parse(n)}}export{_ as XML_SCHEMA_PARSERS,ae as XmlConverter};
@@ -1,2 +0,0 @@
1
- import{aX as K,aY as ee,a1 as te,a0 as ne}from"./index-iZC8xN0t.js";const U=p=>p.children.map(e=>e.text).join(""),$=({id:p,children:e,...n})=>JSON.stringify(n),j=(p={})=>Object.fromEntries(ee.filter(e=>p[e]!==void 0).map(e=>[e,p[e]])),se=p=>({...p,children:p.children.map(e=>({...e,marks:j(e.marks)}))});function re(p,e,n){const t=(u,c)=>u.length>0&&u.every(m=>m.type==="paragraph"&&m.children.length>0&&m.children.every(N=>N.marks?.[c]&&!N.marks.layeredInsertion));if(!t(p,"deletion")||!t(e,"insertion"))return null;const s=p,o=e;if(s.length*o.length>8e6)return null;const h=s.map(U),d=o.map(U),r=[],l=(u,c,m)=>({[u]:!0,suggestionId:m,suggestionSource:"manual",suggestionAuthorType:"human",suggestionLabel:"Revise bill",...c?.suggestionAuthorName?{suggestionAuthorName:c.suggestionAuthorName}:{}}),a=(u,c)=>{const m=n(),N=se(u),A={id:m,blockId:u.id,source:"manual",authorType:"human",label:c==="insert"?"Insert":"Delete",agentName:u.children[0]?.marks?.suggestionAuthorName},E=c==="insert"?{...A,type:"block-insert"}:{...A,type:"block-delete",beforeBlock:N};r.push({...N,structuralSuggestionId:m,structuralSuggestionKind:c,structuralSuggestionRecord:JSON.stringify(E)})},i=(u,c,m)=>{const N=[];let A=0;for(const E of u.children){const w=Math.max(c-A,0),f=Math.min(c+m-A,E.text.length);if(f>w&&N.push({...E,text:E.text.slice(w,f)}),A+=E.text.length,A>=c+m)break}return N},g=(u,c)=>{const m=U(u),N=U(c);if($(u)!==$(c)||m.split(/\s+/).length*N.split(/\s+/).length>1e6){a(u,"delete"),a(c,"insert");return}const A=[];let E=0,w=0,f="";const k=(x,b)=>{f||(f=n()),A.push(...x.map(S=>({...S,marks:{...j(S.marks),...l(b,S.marks,f)}})))};for(const[x,b]of K(m,N).diffs){if(x===-1)k(i(u,E,b.length),"deletion");else if(x===1)k(i(c,w,b.length),"insertion");else{const S=i(u,E,b.length),q=i(c,w,b.length);let I=0,L=0,B=0,O=0;for(;I<S.length&&L<q.length;){const D=Math.min(S[I].text.length-B,q[L].text.length-O),Y={...S[I],text:S[I].text.slice(B,B+D)},F={...q[L],text:q[L].text.slice(O,O+D)},{bookmark:ce,...V}=j(Y.marks),{bookmark:he,...Z}=j(F.marks);JSON.stringify(V)===JSON.stringify(Z)?(f="",A.push({...F,marks:j(F.marks)})):(k([Y],"deletion"),k([F],"insertion")),B+=D,O+=D,B===S[I].text.length&&(I++,B=0),O===q[L].text.length&&(L++,O=0)}}x!==1&&(E+=b.length),x!==-1&&(w+=b.length)}r.push({...c,children:A})},y=new Map,X=u=>{const c=$(u)+U(u);return y.has(c)||y.set(c,`p${y.size}`),y.get(c)+" "},J=K(s.map(X).join(""),o.map(X).join("")).diffs;let C=0,v=0,P=C,z=v;const H=()=>{const u=s.slice(P,C),c=o.slice(z,v),m=x=>new Set(x.toLowerCase().match(/[\p{L}\p{N}]+/gu)??[]),N=h.slice(P,C).map(m),A=d.slice(z,v).map(m),E=u.map((x,b)=>c.map((S,q)=>{if($(x)!==$(S))return 0;let I=0;for(const B of N[b])A[q].has(B)&&I++;const L=2*I/(N[b].size+A[q].size||1);return L>=.5?L:0})),w=Array.from({length:u.length+1},()=>new Float64Array(c.length+1));for(let x=u.length-1;x>=0;x--)for(let b=c.length-1;b>=0;b--)w[x][b]=Math.max(w[x+1][b],w[x][b+1],E[x][b]+w[x+1][b+1]);let f=0,k=0;for(;f<u.length||k<c.length;)f<u.length&&k<c.length&&E[f][k]>0&&w[f][k]===E[f][k]+w[f+1][k+1]?g(u[f++],c[k++]):f<u.length&&(k===c.length||w[f+1][k]>=w[f][k+1])?a(u[f++],"delete"):a(c[k++],"insert")};for(const[u,c]of J){const m=c.trim().split(/\s+/).filter(Boolean).length;if(u===0){H();for(let N=0;N<m;N++)g(s[C++],o[v++]);P=C,z=v}else u===-1?C+=m:v+=m}return H(),r}const G={division:0,title:0,subtitle:0,chapter:0,subchapter:0,part:0,subpart:0,section:0,subsection:1,paragraph:2,subparagraph:3,clause:4,subclause:5,item:6,subitem:7},Q={division:"Division",title:"Title",subtitle:"Subtitle",chapter:"Chapter",subchapter:"Subchapter",part:"Part",subpart:"Subpart",section:"Sec."},W=new Set(["added-phrase","deleted-phrase","bold","italic","underline","strike","superscript","subscript","quote","term","short-title","act-name","external-xref","internal-xref","enum-in-header","header-in-text","definition","linebreak","nobreak","sponsor","cosponsor","committee-name","text-to-insert","text-to-strike-out","omitted-text","inline-comment"]),ie=new Set(["graphic","formula","footnote","footnote-ref","spanspec","entrytbl"]),M=p=>Array.from(p.children),T=(p,e)=>M(p).find(n=>n.localName===e),R=p=>p.replace(/[\t\r\n ]+/g," "),oe={id:"us-congress-bill",label:"U.S. Congressional bills (bill.dtd)",matches(p){const e=p.documentElement;if(e.localName!=="bill"||e.namespaceURI||!T(e,"legis-body"))return!1;const n=p.doctype;if(n)return n.name==="bill"&&(n.publicId==="-//US Congress//DTDs/bill.dtd//EN"||!n.publicId&&/(?:^|\/)bill\.dtd$/i.test(n.systemId));const t=T(e,"form");return!!t&&!!T(t,"congress")&&!!T(t,"legis-num")},parse(p){return new le().parse(p)}};class le{constructor(){this.revisionCount=0,this.revisions=new WeakMap,this.committees=new Map,this.usedIds=new Set}id(){let e;do e=te();while(this.usedIds.has(e));return this.usedIds.add(e),e}parse(e){const n=e.documentElement;for(const i of Array.from(n.getElementsByTagName("committee-name"))){const g=i.getAttribute("committee-id");g&&this.committees.set(g,R(i.textContent??"").trim())}for(const i of Array.from(n.getElementsByTagName("*")))if(ie.has(i.localName))throw new Error(`Unsupported Congressional XML element: <${i.localName}>. This bill requires content the XML importer does not yet support.`);const t=this.context(n,{marks:{},indent:0,quoted:0}),s=[],o=M(n),h=o.map(i=>this.blocks(i,t));for(let i=0;i<o.length;i++){const g=o[i],y=h[i],X=o[i+1];if(g.localName==="legis-body"&&X?.localName==="legis-body"&&X.getAttribute("display-enacting-clause")==="no-display-enacting-clause"){const J=h[i+1],C=g.getAttribute("display-enacting-clause")!=="no-display-enacting-clause"?1:0,v=re(y.slice(C),J,()=>`congressdiff-${++this.revisionCount}`);if(v){s.push(...y.slice(0,C),...v),i++;continue}}s.push(...y)}if(!s.length)throw new Error("The Congressional XML bill contains no readable content.");const d=T(n,"form"),r=d&&T(d,"legis-num")?.textContent?.trim(),l=n.getElementsByTagName("short-title")[0]?.textContent?.trim(),a=r?[r,l].filter(Boolean).join(" — "):e.getElementsByTagNameNS("http://purl.org/dc/elements/1.1/","title")[0]?.textContent?.trim();return{type:"doc",children:s,...a?{title:a}:{}}}context(e,n){const t={...n.marks},s=e.localName,o=e.getAttribute("changed")??(s==="added-phrase"?"added":s==="deleted-phrase"?"deleted":null);if(o==="added"||o==="deleted"){const d=o==="added"?"insertion":"deletion",r=e.getAttribute("reporting-committee")||e.getAttribute("committee-id"),l=r?this.committees.get(r)??r:void 0;if(!t[d]||l&&l!==t.suggestionAuthorName){if(t.deletion&&d==="insertion")throw new Error("Unsupported Congressional XML revision: insertion nested inside a deletion.");let a=this.revisions.get(e);a||(a={[d]:!0,suggestionId:`congressrev-${++this.revisionCount}`,suggestionSource:"manual",suggestionAuthorType:"human",suggestionLabel:d==="insertion"?"Insert":"Delete",...l?{suggestionAuthorName:l}:{}},this.revisions.set(e,a)),t.insertion&&d==="deletion"&&(t.layeredInsertion=JSON.stringify({id:t.suggestionId,source:t.suggestionSource,authorType:t.suggestionAuthorType,authorName:t.suggestionAuthorName,label:t.suggestionLabel})),delete t.insertion,delete t.deletion,delete t.suggestionAuthorName,Object.assign(t,a)}}s==="bold"&&(t.bold=!0),s==="italic"&&(t.italic=!0),s==="underline"&&(t.underline=!0),s==="superscript"&&(t.superscript=!0),s==="subscript"&&(t.subscript=!0);const h=e.getAttribute("href");return h&&/^(https?:\/\/|#)/i.test(h.trim())&&(t.link=h.trim()),s==="internal-xref"&&e.getAttribute("idref")&&(t.link=`#${e.getAttribute("idref")}`),{...n,marks:t,style:e.getAttribute("style")??n.style}}text(e,n){return{type:"text",text:e,marks:{...n.marks}}}inline(e,n){const t=this.context(e,n);if(e.localName==="linebreak")return[this.text(`
2
- `,t)];const s=[],o=e.localName==="quote"||e.localName==="term";o&&s.push(this.text(t.quoted?"‘":"“",t));for(const h of Array.from(e.childNodes))h.nodeType===3||h.nodeType===4?s.push(this.text(R(h.textContent??""),t)):h.nodeType===1&&s.push(...this.inline(h,o?{...t,quoted:t.quoted+1}:t));return o&&s.push(this.text(t.quoted?"’":"”",t)),s}paragraph(e,n,t,s){for(;e.length&&!e[0].text.trim();)e.shift();for(;e.length&&!e[e.length-1].text.trim();)e.pop();if(!e.length)return null;e[0].text=e[0].text.replace(/^ +/,""),e[e.length-1].text=e[e.length-1].text.replace(/ +$/,""),n.quoted&&e.unshift(this.text(n.quoted>1?"‘":"“",n));const o=t?.getAttribute("id");return o&&(e[0].marks={...e[0].marks,bookmark:o}),{type:"paragraph",id:this.id(),children:e,...s?{heading:s,keepNext:!0}:{},...n.indent?{leftIndent:Math.min(n.indent,6)}:{}}}blocks(e,n){const t=e.localName;if(t==="metadata")return[];const s=this.context(e,n);if(Object.prototype.hasOwnProperty.call(G,t))return this.structure(e,{...s,indent:G[t]+(s.quoted?1:0)});if(t==="table")return M(e).filter(r=>r.localName==="tgroup").length?M(e).flatMap(r=>r.localName==="tgroup"?[this.table(r,this.context(r,s))]:this.blocks(r,s)):[this.table(e,s)];if(t==="quoted-block"){const r=M(e).filter(i=>i.localName!=="after-quoted-block").flatMap(i=>this.blocks(i,{...s,quoted:s.quoted+1,indent:s.indent+1})),l=r[r.length-1],a=T(e,"after-quoted-block");if(l?.type==="paragraph")l.children.push(this.text(s.quoted?"’":"”",s)),a&&l.children.push(...this.inline(a,s));else if(a){const i=this.paragraph([this.text(s.quoted?"’":"”",s),...this.inline(a,s)],s);i&&r.push(i)}return r}if(!M(e).some(r=>!W.has(r.localName))){const r=this.paragraph(this.inline(e,n),s,e);if(r&&(t==="legis-num"||t==="legis-type")){r.align="center";for(const l of r.children)l.marks={...l.marks,bold:!0}}return r?[r]:[]}const o=[];if(t==="legis-body"&&e.getAttribute("display-enacting-clause")!=="no-display-enacting-clause"){const r=this.paragraph([this.text("Be it enacted by the Senate and House of Representatives of the United States of America in Congress assembled,",s)],s);r&&o.push(r)}let h=[];const d=()=>{const r=this.paragraph(h,s);r&&o.push(r),h=[]};for(const r of Array.from(e.childNodes))if(r.nodeType===3||r.nodeType===4)h.push(this.text(R(r.textContent??""),s));else if(r.nodeType===1){const l=r;W.has(l.localName)?h.push(...this.inline(l,s)):(d(),o.push(...this.blocks(l,s)))}return d(),o}structure(e,n){const t=[],s=Object.prototype.hasOwnProperty.call(Q,e.localName),o=T(e,"enum"),h=T(e,"header");let d=[];if(o&&(s&&d.push(this.text(e.localName==="section"&&n.style==="USC"?"§ ":`${Q[e.localName]} `,n)),d.push(...this.inline(o,n),this.text(" ",n))),h){const a=this.inline(h,n);for(const i of a)i.marks={...i.marks,bold:!0};d.push(...a)}const r=(a=!1)=>{const i=this.paragraph(d,n,t.length?void 0:e,a?e.localName==="section"?2:1:void 0);i&&t.push(i),d=[]};s&&r(!0);let l=!0;for(const a of Array.from(e.childNodes))if(!(a===o||a===h)){if(a.nodeType===3||a.nodeType===4)a.textContent?.trim()&&d.push(this.text(R(a.textContent),n));else if(a.nodeType===1){const i=a;if(i.localName==="text")l||r(),l&&!s&&h&&d.push(this.text(".—",n)),d.push(...this.inline(i,n)),l=!1;else if(W.has(i.localName))d.push(...this.inline(i,n));else{r();const g=this.blocks(i,n),y=t[t.length-1];i.getAttribute("display-inline")==="yes-display-inline"&&y?.type==="paragraph"&&!y.heading&&g[0]?.type==="paragraph"&&(y.children.push(this.text(" ",n),...g[0].children),g.shift()),t.push(...g)}}}return r(),t}table(e,n){const t=T(e,"tgroup")??e,s=new Map(M(t).filter(r=>r.localName==="colspec").map((r,l)=>[r.getAttribute("colname"),Number(r.getAttribute("colnum"))||l+1])),o=M(t).flatMap(r=>r.localName==="row"?[r]:["thead","tbody","tfoot"].includes(r.localName)?M(r).filter(l=>l.localName==="row"):[]);if(!o.length)throw new Error("Unsupported Congressional XML table: no rows.");const h={type:"table",id:this.id(),columnWidths:[],children:o.map(r=>({type:"table-row",id:this.id(),children:M(r).filter(l=>l.localName==="entry").map(l=>{const a=s.get(l.getAttribute("namest")),i=s.get(l.getAttribute("nameend")),g=a&&i?i-a+1:1,y=Number(l.getAttribute("morerows")??0)+1;if(l.hasAttribute("namest")&&(!a||!i)||!Number.isInteger(g)||g<1||g>100||!Number.isInteger(y)||y<1||y>o.length)throw new Error("Unsupported Congressional XML table: invalid cell span.");const X=this.blocks(l,{...this.context(r,r.parentElement&&r.parentElement!==t?this.context(r.parentElement,n):n),indent:0});return{type:"table-cell",id:this.id(),children:X.length?X:[{type:"paragraph",id:this.id(),children:[{type:"text",text:""}]}],...g>1?{colSpan:g}:{},...y>1?{rowSpan:y}:{}}})}))},d=ne(h).cols;if(!d||d>100)throw new Error("Unsupported Congressional XML table: invalid column count.");return h.columnWidths=Array(d).fill(100/d),h}}const _=[oe];class ae{static async parseFile(e){return this.fromBytes(new Uint8Array(await e.arrayBuffer()))}static fromBytes(e){let n="utf-8";if(e[0]===255&&e[1]===254||e[0]===60&&e[1]===0&&e[2]===63&&e[3]===0)n="utf-16le";else if(e[0]===254&&e[1]===255||e[0]===0&&e[1]===60&&e[2]===0&&e[3]===63)n="utf-16be";else if(!(e[0]===239&&e[1]===187&&e[2]===191)){const s=new TextDecoder("windows-1252").decode(e.subarray(0,512));n=/^<\?xml\s[^?]*\bencoding\s*=\s*["']([^"']+)["']/i.exec(s)?.[1]??n}let t;try{t=new TextDecoder(n,{fatal:!0}).decode(e)}catch{throw new Error(`Invalid or unsupported XML encoding: ${n}.`)}return this.fromXml(t)}static fromXml(e){if(/<!ENTITY\s/i.test(e))throw new Error("XML entity declarations are not supported.");const n=new DOMParser().parseFromString(e.replace(/^\uFEFF/,""),"application/xml");if(!n.documentElement||n.getElementsByTagName("parsererror").length)throw new Error("Invalid XML: the document is not well-formed.");const t=[[n.documentElement,0]];for(;t.length;){const[o,h]=t.pop();if(h>128)throw new Error("XML nesting exceeds the supported depth (128).");for(const d of Array.from(o.children))t.push([d,h+1])}const s=_.find(o=>o.matches(n));if(!s)throw new Error(`Unsupported XML schema: <${n.documentElement.tagName}>. Supported: ${_.map(o=>o.label).join(", ")}.`);return s.parse(n)}}export{_ as XML_SCHEMA_PARSERS,ae as XmlConverter};
@@ -1,2 +0,0 @@
1
- import{aX as K,aY as ee,a1 as te,a0 as ne}from"./index-C-4H81OE.js";const U=p=>p.children.map(e=>e.text).join(""),$=({id:p,children:e,...n})=>JSON.stringify(n),j=(p={})=>Object.fromEntries(ee.filter(e=>p[e]!==void 0).map(e=>[e,p[e]])),se=p=>({...p,children:p.children.map(e=>({...e,marks:j(e.marks)}))});function re(p,e,n){const t=(u,c)=>u.length>0&&u.every(m=>m.type==="paragraph"&&m.children.length>0&&m.children.every(N=>N.marks?.[c]&&!N.marks.layeredInsertion));if(!t(p,"deletion")||!t(e,"insertion"))return null;const s=p,o=e;if(s.length*o.length>8e6)return null;const h=s.map(U),d=o.map(U),r=[],l=(u,c,m)=>({[u]:!0,suggestionId:m,suggestionSource:"manual",suggestionAuthorType:"human",suggestionLabel:"Revise bill",...c?.suggestionAuthorName?{suggestionAuthorName:c.suggestionAuthorName}:{}}),a=(u,c)=>{const m=n(),N=se(u),A={id:m,blockId:u.id,source:"manual",authorType:"human",label:c==="insert"?"Insert":"Delete",agentName:u.children[0]?.marks?.suggestionAuthorName},E=c==="insert"?{...A,type:"block-insert"}:{...A,type:"block-delete",beforeBlock:N};r.push({...N,structuralSuggestionId:m,structuralSuggestionKind:c,structuralSuggestionRecord:JSON.stringify(E)})},i=(u,c,m)=>{const N=[];let A=0;for(const E of u.children){const w=Math.max(c-A,0),f=Math.min(c+m-A,E.text.length);if(f>w&&N.push({...E,text:E.text.slice(w,f)}),A+=E.text.length,A>=c+m)break}return N},g=(u,c)=>{const m=U(u),N=U(c);if($(u)!==$(c)||m.split(/\s+/).length*N.split(/\s+/).length>1e6){a(u,"delete"),a(c,"insert");return}const A=[];let E=0,w=0,f="";const k=(x,b)=>{f||(f=n()),A.push(...x.map(S=>({...S,marks:{...j(S.marks),...l(b,S.marks,f)}})))};for(const[x,b]of K(m,N).diffs){if(x===-1)k(i(u,E,b.length),"deletion");else if(x===1)k(i(c,w,b.length),"insertion");else{const S=i(u,E,b.length),q=i(c,w,b.length);let I=0,L=0,B=0,O=0;for(;I<S.length&&L<q.length;){const D=Math.min(S[I].text.length-B,q[L].text.length-O),Y={...S[I],text:S[I].text.slice(B,B+D)},F={...q[L],text:q[L].text.slice(O,O+D)},{bookmark:ce,...V}=j(Y.marks),{bookmark:he,...Z}=j(F.marks);JSON.stringify(V)===JSON.stringify(Z)?(f="",A.push({...F,marks:j(F.marks)})):(k([Y],"deletion"),k([F],"insertion")),B+=D,O+=D,B===S[I].text.length&&(I++,B=0),O===q[L].text.length&&(L++,O=0)}}x!==1&&(E+=b.length),x!==-1&&(w+=b.length)}r.push({...c,children:A})},y=new Map,X=u=>{const c=$(u)+U(u);return y.has(c)||y.set(c,`p${y.size}`),y.get(c)+" "},J=K(s.map(X).join(""),o.map(X).join("")).diffs;let C=0,v=0,P=C,z=v;const H=()=>{const u=s.slice(P,C),c=o.slice(z,v),m=x=>new Set(x.toLowerCase().match(/[\p{L}\p{N}]+/gu)??[]),N=h.slice(P,C).map(m),A=d.slice(z,v).map(m),E=u.map((x,b)=>c.map((S,q)=>{if($(x)!==$(S))return 0;let I=0;for(const B of N[b])A[q].has(B)&&I++;const L=2*I/(N[b].size+A[q].size||1);return L>=.5?L:0})),w=Array.from({length:u.length+1},()=>new Float64Array(c.length+1));for(let x=u.length-1;x>=0;x--)for(let b=c.length-1;b>=0;b--)w[x][b]=Math.max(w[x+1][b],w[x][b+1],E[x][b]+w[x+1][b+1]);let f=0,k=0;for(;f<u.length||k<c.length;)f<u.length&&k<c.length&&E[f][k]>0&&w[f][k]===E[f][k]+w[f+1][k+1]?g(u[f++],c[k++]):f<u.length&&(k===c.length||w[f+1][k]>=w[f][k+1])?a(u[f++],"delete"):a(c[k++],"insert")};for(const[u,c]of J){const m=c.trim().split(/\s+/).filter(Boolean).length;if(u===0){H();for(let N=0;N<m;N++)g(s[C++],o[v++]);P=C,z=v}else u===-1?C+=m:v+=m}return H(),r}const G={division:0,title:0,subtitle:0,chapter:0,subchapter:0,part:0,subpart:0,section:0,subsection:1,paragraph:2,subparagraph:3,clause:4,subclause:5,item:6,subitem:7},Q={division:"Division",title:"Title",subtitle:"Subtitle",chapter:"Chapter",subchapter:"Subchapter",part:"Part",subpart:"Subpart",section:"Sec."},W=new Set(["added-phrase","deleted-phrase","bold","italic","underline","strike","superscript","subscript","quote","term","short-title","act-name","external-xref","internal-xref","enum-in-header","header-in-text","definition","linebreak","nobreak","sponsor","cosponsor","committee-name","text-to-insert","text-to-strike-out","omitted-text","inline-comment"]),ie=new Set(["graphic","formula","footnote","footnote-ref","spanspec","entrytbl"]),M=p=>Array.from(p.children),T=(p,e)=>M(p).find(n=>n.localName===e),R=p=>p.replace(/[\t\r\n ]+/g," "),oe={id:"us-congress-bill",label:"U.S. Congressional bills (bill.dtd)",matches(p){const e=p.documentElement;if(e.localName!=="bill"||e.namespaceURI||!T(e,"legis-body"))return!1;const n=p.doctype;if(n)return n.name==="bill"&&(n.publicId==="-//US Congress//DTDs/bill.dtd//EN"||!n.publicId&&/(?:^|\/)bill\.dtd$/i.test(n.systemId));const t=T(e,"form");return!!t&&!!T(t,"congress")&&!!T(t,"legis-num")},parse(p){return new le().parse(p)}};class le{constructor(){this.revisionCount=0,this.revisions=new WeakMap,this.committees=new Map,this.usedIds=new Set}id(){let e;do e=te();while(this.usedIds.has(e));return this.usedIds.add(e),e}parse(e){const n=e.documentElement;for(const i of Array.from(n.getElementsByTagName("committee-name"))){const g=i.getAttribute("committee-id");g&&this.committees.set(g,R(i.textContent??"").trim())}for(const i of Array.from(n.getElementsByTagName("*")))if(ie.has(i.localName))throw new Error(`Unsupported Congressional XML element: <${i.localName}>. This bill requires content the XML importer does not yet support.`);const t=this.context(n,{marks:{},indent:0,quoted:0}),s=[],o=M(n),h=o.map(i=>this.blocks(i,t));for(let i=0;i<o.length;i++){const g=o[i],y=h[i],X=o[i+1];if(g.localName==="legis-body"&&X?.localName==="legis-body"&&X.getAttribute("display-enacting-clause")==="no-display-enacting-clause"){const J=h[i+1],C=g.getAttribute("display-enacting-clause")!=="no-display-enacting-clause"?1:0,v=re(y.slice(C),J,()=>`congressdiff-${++this.revisionCount}`);if(v){s.push(...y.slice(0,C),...v),i++;continue}}s.push(...y)}if(!s.length)throw new Error("The Congressional XML bill contains no readable content.");const d=T(n,"form"),r=d&&T(d,"legis-num")?.textContent?.trim(),l=n.getElementsByTagName("short-title")[0]?.textContent?.trim(),a=r?[r,l].filter(Boolean).join(" — "):e.getElementsByTagNameNS("http://purl.org/dc/elements/1.1/","title")[0]?.textContent?.trim();return{type:"doc",children:s,...a?{title:a}:{}}}context(e,n){const t={...n.marks},s=e.localName,o=e.getAttribute("changed")??(s==="added-phrase"?"added":s==="deleted-phrase"?"deleted":null);if(o==="added"||o==="deleted"){const d=o==="added"?"insertion":"deletion",r=e.getAttribute("reporting-committee")||e.getAttribute("committee-id"),l=r?this.committees.get(r)??r:void 0;if(!t[d]||l&&l!==t.suggestionAuthorName){if(t.deletion&&d==="insertion")throw new Error("Unsupported Congressional XML revision: insertion nested inside a deletion.");let a=this.revisions.get(e);a||(a={[d]:!0,suggestionId:`congressrev-${++this.revisionCount}`,suggestionSource:"manual",suggestionAuthorType:"human",suggestionLabel:d==="insertion"?"Insert":"Delete",...l?{suggestionAuthorName:l}:{}},this.revisions.set(e,a)),t.insertion&&d==="deletion"&&(t.layeredInsertion=JSON.stringify({id:t.suggestionId,source:t.suggestionSource,authorType:t.suggestionAuthorType,authorName:t.suggestionAuthorName,label:t.suggestionLabel})),delete t.insertion,delete t.deletion,delete t.suggestionAuthorName,Object.assign(t,a)}}s==="bold"&&(t.bold=!0),s==="italic"&&(t.italic=!0),s==="underline"&&(t.underline=!0),s==="superscript"&&(t.superscript=!0),s==="subscript"&&(t.subscript=!0);const h=e.getAttribute("href");return h&&/^(https?:\/\/|#)/i.test(h.trim())&&(t.link=h.trim()),s==="internal-xref"&&e.getAttribute("idref")&&(t.link=`#${e.getAttribute("idref")}`),{...n,marks:t,style:e.getAttribute("style")??n.style}}text(e,n){return{type:"text",text:e,marks:{...n.marks}}}inline(e,n){const t=this.context(e,n);if(e.localName==="linebreak")return[this.text(`
2
- `,t)];const s=[],o=e.localName==="quote"||e.localName==="term";o&&s.push(this.text(t.quoted?"‘":"“",t));for(const h of Array.from(e.childNodes))h.nodeType===3||h.nodeType===4?s.push(this.text(R(h.textContent??""),t)):h.nodeType===1&&s.push(...this.inline(h,o?{...t,quoted:t.quoted+1}:t));return o&&s.push(this.text(t.quoted?"’":"”",t)),s}paragraph(e,n,t,s){for(;e.length&&!e[0].text.trim();)e.shift();for(;e.length&&!e[e.length-1].text.trim();)e.pop();if(!e.length)return null;e[0].text=e[0].text.replace(/^ +/,""),e[e.length-1].text=e[e.length-1].text.replace(/ +$/,""),n.quoted&&e.unshift(this.text(n.quoted>1?"‘":"“",n));const o=t?.getAttribute("id");return o&&(e[0].marks={...e[0].marks,bookmark:o}),{type:"paragraph",id:this.id(),children:e,...s?{heading:s,keepNext:!0}:{},...n.indent?{leftIndent:Math.min(n.indent,6)}:{}}}blocks(e,n){const t=e.localName;if(t==="metadata")return[];const s=this.context(e,n);if(Object.prototype.hasOwnProperty.call(G,t))return this.structure(e,{...s,indent:G[t]+(s.quoted?1:0)});if(t==="table")return M(e).filter(r=>r.localName==="tgroup").length?M(e).flatMap(r=>r.localName==="tgroup"?[this.table(r,this.context(r,s))]:this.blocks(r,s)):[this.table(e,s)];if(t==="quoted-block"){const r=M(e).filter(i=>i.localName!=="after-quoted-block").flatMap(i=>this.blocks(i,{...s,quoted:s.quoted+1,indent:s.indent+1})),l=r[r.length-1],a=T(e,"after-quoted-block");if(l?.type==="paragraph")l.children.push(this.text(s.quoted?"’":"”",s)),a&&l.children.push(...this.inline(a,s));else if(a){const i=this.paragraph([this.text(s.quoted?"’":"”",s),...this.inline(a,s)],s);i&&r.push(i)}return r}if(!M(e).some(r=>!W.has(r.localName))){const r=this.paragraph(this.inline(e,n),s,e);if(r&&(t==="legis-num"||t==="legis-type")){r.align="center";for(const l of r.children)l.marks={...l.marks,bold:!0}}return r?[r]:[]}const o=[];if(t==="legis-body"&&e.getAttribute("display-enacting-clause")!=="no-display-enacting-clause"){const r=this.paragraph([this.text("Be it enacted by the Senate and House of Representatives of the United States of America in Congress assembled,",s)],s);r&&o.push(r)}let h=[];const d=()=>{const r=this.paragraph(h,s);r&&o.push(r),h=[]};for(const r of Array.from(e.childNodes))if(r.nodeType===3||r.nodeType===4)h.push(this.text(R(r.textContent??""),s));else if(r.nodeType===1){const l=r;W.has(l.localName)?h.push(...this.inline(l,s)):(d(),o.push(...this.blocks(l,s)))}return d(),o}structure(e,n){const t=[],s=Object.prototype.hasOwnProperty.call(Q,e.localName),o=T(e,"enum"),h=T(e,"header");let d=[];if(o&&(s&&d.push(this.text(e.localName==="section"&&n.style==="USC"?"§ ":`${Q[e.localName]} `,n)),d.push(...this.inline(o,n),this.text(" ",n))),h){const a=this.inline(h,n);for(const i of a)i.marks={...i.marks,bold:!0};d.push(...a)}const r=(a=!1)=>{const i=this.paragraph(d,n,t.length?void 0:e,a?e.localName==="section"?2:1:void 0);i&&t.push(i),d=[]};s&&r(!0);let l=!0;for(const a of Array.from(e.childNodes))if(!(a===o||a===h)){if(a.nodeType===3||a.nodeType===4)a.textContent?.trim()&&d.push(this.text(R(a.textContent),n));else if(a.nodeType===1){const i=a;if(i.localName==="text")l||r(),l&&!s&&h&&d.push(this.text(".—",n)),d.push(...this.inline(i,n)),l=!1;else if(W.has(i.localName))d.push(...this.inline(i,n));else{r();const g=this.blocks(i,n),y=t[t.length-1];i.getAttribute("display-inline")==="yes-display-inline"&&y?.type==="paragraph"&&!y.heading&&g[0]?.type==="paragraph"&&(y.children.push(this.text(" ",n),...g[0].children),g.shift()),t.push(...g)}}}return r(),t}table(e,n){const t=T(e,"tgroup")??e,s=new Map(M(t).filter(r=>r.localName==="colspec").map((r,l)=>[r.getAttribute("colname"),Number(r.getAttribute("colnum"))||l+1])),o=M(t).flatMap(r=>r.localName==="row"?[r]:["thead","tbody","tfoot"].includes(r.localName)?M(r).filter(l=>l.localName==="row"):[]);if(!o.length)throw new Error("Unsupported Congressional XML table: no rows.");const h={type:"table",id:this.id(),columnWidths:[],children:o.map(r=>({type:"table-row",id:this.id(),children:M(r).filter(l=>l.localName==="entry").map(l=>{const a=s.get(l.getAttribute("namest")),i=s.get(l.getAttribute("nameend")),g=a&&i?i-a+1:1,y=Number(l.getAttribute("morerows")??0)+1;if(l.hasAttribute("namest")&&(!a||!i)||!Number.isInteger(g)||g<1||g>100||!Number.isInteger(y)||y<1||y>o.length)throw new Error("Unsupported Congressional XML table: invalid cell span.");const X=this.blocks(l,{...this.context(r,r.parentElement&&r.parentElement!==t?this.context(r.parentElement,n):n),indent:0});return{type:"table-cell",id:this.id(),children:X.length?X:[{type:"paragraph",id:this.id(),children:[{type:"text",text:""}]}],...g>1?{colSpan:g}:{},...y>1?{rowSpan:y}:{}}})}))},d=ne(h).cols;if(!d||d>100)throw new Error("Unsupported Congressional XML table: invalid column count.");return h.columnWidths=Array(d).fill(100/d),h}}const _=[oe];class ae{static async parseFile(e){return this.fromBytes(new Uint8Array(await e.arrayBuffer()))}static fromBytes(e){let n="utf-8";if(e[0]===255&&e[1]===254||e[0]===60&&e[1]===0&&e[2]===63&&e[3]===0)n="utf-16le";else if(e[0]===254&&e[1]===255||e[0]===0&&e[1]===60&&e[2]===0&&e[3]===63)n="utf-16be";else if(!(e[0]===239&&e[1]===187&&e[2]===191)){const s=new TextDecoder("windows-1252").decode(e.subarray(0,512));n=/^<\?xml\s[^?]*\bencoding\s*=\s*["']([^"']+)["']/i.exec(s)?.[1]??n}let t;try{t=new TextDecoder(n,{fatal:!0}).decode(e)}catch{throw new Error(`Invalid or unsupported XML encoding: ${n}.`)}return this.fromXml(t)}static fromXml(e){if(/<!ENTITY\s/i.test(e))throw new Error("XML entity declarations are not supported.");const n=new DOMParser().parseFromString(e.replace(/^\uFEFF/,""),"application/xml");if(!n.documentElement||n.getElementsByTagName("parsererror").length)throw new Error("Invalid XML: the document is not well-formed.");const t=[[n.documentElement,0]];for(;t.length;){const[o,h]=t.pop();if(h>128)throw new Error("XML nesting exceeds the supported depth (128).");for(const d of Array.from(o.children))t.push([d,h+1])}const s=_.find(o=>o.matches(n));if(!s)throw new Error(`Unsupported XML schema: <${n.documentElement.tagName}>. Supported: ${_.map(o=>o.label).join(", ")}.`);return s.parse(n)}}export{_ as XML_SCHEMA_PARSERS,ae as XmlConverter};