@primeui/texteditor-core 0.0.1-alpha.1 → 1.0.0-rc.1

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 (141) hide show
  1. package/LICENSE.md +35 -0
  2. package/README.md +12 -0
  3. package/dist/{chunk-GG56GLXC.mjs → chunks/chunk-25Y5HLDY.mjs} +2 -2
  4. package/dist/chunks/chunk-25Y5HLDY.mjs.map +1 -0
  5. package/dist/{chunk-PT2O4RV7.mjs → chunks/chunk-4BI7WWVV.mjs} +6 -5
  6. package/dist/chunks/chunk-4BI7WWVV.mjs.map +1 -0
  7. package/dist/{chunk-72T5I4O4.mjs → chunks/chunk-4C4R23A3.mjs} +2 -2
  8. package/dist/chunks/chunk-4C4R23A3.mjs.map +1 -0
  9. package/dist/{chunk-PT5V6UYE.mjs → chunks/chunk-4NWX3EPS.mjs} +2 -2
  10. package/dist/chunks/chunk-4NWX3EPS.mjs.map +1 -0
  11. package/dist/{chunk-XKY2VYPW.mjs → chunks/chunk-75IVOL6Q.mjs} +2 -2
  12. package/dist/chunks/chunk-75IVOL6Q.mjs.map +1 -0
  13. package/dist/{chunk-7QCHSEN2.mjs → chunks/chunk-C2TRJCIH.mjs} +2 -2
  14. package/dist/chunks/chunk-C2TRJCIH.mjs.map +1 -0
  15. package/dist/{chunk-AJOKUIQD.mjs → chunks/chunk-C6CEVLOL.mjs} +2 -2
  16. package/dist/chunks/chunk-C6CEVLOL.mjs.map +1 -0
  17. package/dist/{chunk-H3RFOYCT.mjs → chunks/chunk-DAVC2Z22.mjs} +2 -2
  18. package/dist/chunks/chunk-DAVC2Z22.mjs.map +1 -0
  19. package/dist/{chunk-NWRVBNBW.mjs → chunks/chunk-F2THMQFM.mjs} +3 -3
  20. package/dist/chunks/chunk-F2THMQFM.mjs.map +1 -0
  21. package/dist/{chunk-TBQVZVKA.mjs → chunks/chunk-F4KBJIZJ.mjs} +43 -31
  22. package/dist/chunks/chunk-F4KBJIZJ.mjs.map +1 -0
  23. package/dist/{chunk-J5LGTIGS.mjs → chunks/chunk-FLGC65SR.mjs} +2 -2
  24. package/dist/{chunk-J5LGTIGS.mjs.map → chunks/chunk-FLGC65SR.mjs.map} +1 -1
  25. package/dist/{chunk-3RKMABZR.mjs → chunks/chunk-KA3KNPLZ.mjs} +4 -4
  26. package/dist/chunks/chunk-KA3KNPLZ.mjs.map +1 -0
  27. package/dist/{chunk-OGEMGWLR.mjs → chunks/chunk-LHZDU6AA.mjs} +5 -5
  28. package/dist/chunks/chunk-LHZDU6AA.mjs.map +1 -0
  29. package/dist/{chunk-PRFYR67X.mjs → chunks/chunk-LYB4TGKX.mjs} +2 -2
  30. package/dist/chunks/chunk-LYB4TGKX.mjs.map +1 -0
  31. package/dist/{chunk-MNKMKFLQ.mjs → chunks/chunk-MMU3VGMT.mjs} +3 -3
  32. package/dist/chunks/chunk-MMU3VGMT.mjs.map +1 -0
  33. package/dist/{chunk-6YDCG63C.mjs → chunks/chunk-MMY4F74E.mjs} +9 -9
  34. package/dist/chunks/chunk-MMY4F74E.mjs.map +1 -0
  35. package/dist/{chunk-6GY64GPU.mjs → chunks/chunk-MSPB65AH.mjs} +2 -2
  36. package/dist/chunks/chunk-MSPB65AH.mjs.map +1 -0
  37. package/dist/{chunk-KNZAMA6H.mjs → chunks/chunk-NZCWIEXE.mjs} +3 -3
  38. package/dist/chunks/chunk-NZCWIEXE.mjs.map +1 -0
  39. package/dist/{chunk-DXPG5XMX.mjs → chunks/chunk-P4N6CW2J.mjs} +2 -2
  40. package/dist/chunks/chunk-P4N6CW2J.mjs.map +1 -0
  41. package/dist/{chunk-FFCQLWS5.mjs → chunks/chunk-PRW2CBOO.mjs} +2 -2
  42. package/dist/chunks/chunk-PRW2CBOO.mjs.map +1 -0
  43. package/dist/{chunk-IUQKSDKG.mjs → chunks/chunk-PSOP5GNT.mjs} +3 -3
  44. package/dist/chunks/chunk-PSOP5GNT.mjs.map +1 -0
  45. package/dist/{chunk-RH45QRSV.mjs → chunks/chunk-Q7MBG5CT.mjs} +2 -2
  46. package/dist/chunks/chunk-Q7MBG5CT.mjs.map +1 -0
  47. package/dist/{chunk-AUTGNC2Q.mjs → chunks/chunk-QMEKZ64Z.mjs} +6 -6
  48. package/dist/chunks/chunk-QMEKZ64Z.mjs.map +1 -0
  49. package/dist/{chunk-YHMP6AN3.mjs → chunks/chunk-QZUFYVD5.mjs} +4 -4
  50. package/dist/chunks/chunk-QZUFYVD5.mjs.map +1 -0
  51. package/dist/{chunk-22B454VC.mjs → chunks/chunk-RE46J3VH.mjs} +2 -2
  52. package/dist/chunks/chunk-RE46J3VH.mjs.map +1 -0
  53. package/dist/{chunk-MWT5PK3Z.mjs → chunks/chunk-SFUE4QBU.mjs} +2 -2
  54. package/dist/chunks/chunk-SFUE4QBU.mjs.map +1 -0
  55. package/dist/{chunk-TB7ZSSR2.mjs → chunks/chunk-UHENKXGQ.mjs} +2 -2
  56. package/dist/chunks/chunk-UHENKXGQ.mjs.map +1 -0
  57. package/dist/{chunk-GGPBV4BM.mjs → chunks/chunk-UN74246B.mjs} +2 -2
  58. package/dist/chunks/chunk-UN74246B.mjs.map +1 -0
  59. package/dist/{chunk-6ZN5XRH2.mjs → chunks/chunk-UORFAHNO.mjs} +2 -2
  60. package/dist/chunks/chunk-UORFAHNO.mjs.map +1 -0
  61. package/dist/{chunk-E2KXUP3F.mjs → chunks/chunk-VXO6D7N5.mjs} +2 -2
  62. package/dist/chunks/chunk-VXO6D7N5.mjs.map +1 -0
  63. package/dist/{chunk-RQ2HHNI6.mjs → chunks/chunk-XO4UUELZ.mjs} +3 -3
  64. package/dist/chunks/chunk-XO4UUELZ.mjs.map +1 -0
  65. package/dist/{chunk-EA2YI7LA.mjs → chunks/chunk-XOMJOYJG.mjs} +2 -2
  66. package/dist/chunks/chunk-XOMJOYJG.mjs.map +1 -0
  67. package/dist/{chunk-VWGQMUPD.mjs → chunks/chunk-YXOJODMQ.mjs} +3 -3
  68. package/dist/chunks/chunk-YXOJODMQ.mjs.map +1 -0
  69. package/dist/{chunk-XSVIGDQR.mjs → chunks/chunk-Z7KBTB2P.mjs} +2 -2
  70. package/dist/chunks/chunk-Z7KBTB2P.mjs.map +1 -0
  71. package/dist/{chunk-F7BJWPT6.mjs → chunks/chunk-ZSXWDZMQ.mjs} +6 -6
  72. package/dist/chunks/chunk-ZSXWDZMQ.mjs.map +1 -0
  73. package/dist/{chunk-CRAB2MFE.mjs → chunks/chunk-ZUZABDZC.mjs} +2 -2
  74. package/dist/chunks/chunk-ZUZABDZC.mjs.map +1 -0
  75. package/dist/commands/index.mjs +11 -11
  76. package/dist/createTextEditor.mjs +29 -29
  77. package/dist/index.mjs +31 -31
  78. package/dist/plugins/columnWidthPin.mjs +2 -2
  79. package/dist/plugins/contextToolbar.mjs +3 -3
  80. package/dist/plugins/defineTextEditorPlugin.mjs +2 -2
  81. package/dist/plugins/inputRules.mjs +6 -6
  82. package/dist/plugins/keymap.mjs +4 -4
  83. package/dist/plugins/mention.mjs +4 -3
  84. package/dist/plugins/mentionController.mjs +2 -2
  85. package/dist/plugins/placeholder.mjs +3 -3
  86. package/dist/plugins/registry.mjs +2 -2
  87. package/dist/plugins/selectionHighlight.mjs +3 -3
  88. package/dist/plugins/slashCommands.mjs +3 -3
  89. package/dist/plugins/tableOverlay.mjs +4 -4
  90. package/dist/plugins/trailingNode.mjs +2 -2
  91. package/dist/schema/index.mjs +6 -6
  92. package/dist/serialization/index.mjs +3 -3
  93. package/dist/texteditor.classes.mjs +2 -2
  94. package/dist/texteditor.constants.mjs +2 -2
  95. package/dist/texteditor.props.mjs +2 -2
  96. package/dist/texteditor.refs.mjs +2 -2
  97. package/dist/texteditor.state.mjs +2 -2
  98. package/dist/ui/focus.mjs +2 -2
  99. package/dist/ui/index.mjs +7 -7
  100. package/dist/ui/keyboard.mjs +2 -2
  101. package/dist/ui/menu.mjs +2 -2
  102. package/dist/ui/positioning.mjs +3 -3
  103. package/dist/ui/scroll.mjs +2 -2
  104. package/dist/utils/index.mjs +4 -4
  105. package/package.json +6 -10
  106. package/LICENSE +0 -23
  107. package/dist/chunk-22B454VC.mjs.map +0 -1
  108. package/dist/chunk-3RKMABZR.mjs.map +0 -1
  109. package/dist/chunk-6GY64GPU.mjs.map +0 -1
  110. package/dist/chunk-6YDCG63C.mjs.map +0 -1
  111. package/dist/chunk-6ZN5XRH2.mjs.map +0 -1
  112. package/dist/chunk-72T5I4O4.mjs.map +0 -1
  113. package/dist/chunk-7QCHSEN2.mjs.map +0 -1
  114. package/dist/chunk-AJOKUIQD.mjs.map +0 -1
  115. package/dist/chunk-AUTGNC2Q.mjs.map +0 -1
  116. package/dist/chunk-CRAB2MFE.mjs.map +0 -1
  117. package/dist/chunk-DXPG5XMX.mjs.map +0 -1
  118. package/dist/chunk-E2KXUP3F.mjs.map +0 -1
  119. package/dist/chunk-EA2YI7LA.mjs.map +0 -1
  120. package/dist/chunk-F7BJWPT6.mjs.map +0 -1
  121. package/dist/chunk-FFCQLWS5.mjs.map +0 -1
  122. package/dist/chunk-GG56GLXC.mjs.map +0 -1
  123. package/dist/chunk-GGPBV4BM.mjs.map +0 -1
  124. package/dist/chunk-H3RFOYCT.mjs.map +0 -1
  125. package/dist/chunk-IUQKSDKG.mjs.map +0 -1
  126. package/dist/chunk-KNZAMA6H.mjs.map +0 -1
  127. package/dist/chunk-MNKMKFLQ.mjs.map +0 -1
  128. package/dist/chunk-MWT5PK3Z.mjs.map +0 -1
  129. package/dist/chunk-NWRVBNBW.mjs.map +0 -1
  130. package/dist/chunk-OGEMGWLR.mjs.map +0 -1
  131. package/dist/chunk-PRFYR67X.mjs.map +0 -1
  132. package/dist/chunk-PT2O4RV7.mjs.map +0 -1
  133. package/dist/chunk-PT5V6UYE.mjs.map +0 -1
  134. package/dist/chunk-RH45QRSV.mjs.map +0 -1
  135. package/dist/chunk-RQ2HHNI6.mjs.map +0 -1
  136. package/dist/chunk-TB7ZSSR2.mjs.map +0 -1
  137. package/dist/chunk-TBQVZVKA.mjs.map +0 -1
  138. package/dist/chunk-VWGQMUPD.mjs.map +0 -1
  139. package/dist/chunk-XKY2VYPW.mjs.map +0 -1
  140. package/dist/chunk-XSVIGDQR.mjs.map +0 -1
  141. package/dist/chunk-YHMP6AN3.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/formatting.ts","../src/commands/lists.ts","../src/commands/tableHelpers.ts","../src/commands/tables.ts","../src/commands/markRange.ts","../src/commands/content.ts","../src/commands/editor.ts","../src/commands/index.ts"],"names":["tr","CellSelection","TextSelection","addColumnAfter"],"mappings":";;;;;;;;;;;;;AAQA,SAAS,iBAAA,CAAkB,MAAkB,QAAA,EAAoB;AAC7D,EAAA,UAAA,CAAW,QAAQ,CAAA,CAAE,IAAA,CAAK,KAAA,EAAO,KAAK,QAAQ,CAAA;AAC9C,EAAA,IAAA,CAAK,KAAA,EAAM;AACf;AAGA,SAAS,kBAAkB,EAAA,EAAiB,QAAA,EAAoB,IAAA,EAAc,KAAA,EAAsB,MAAc,EAAA,EAAY;AAC1H,EAAA,MAAM,SAAyE,EAAC;AAEhF,EAAA,EAAA,CAAG,IAAI,YAAA,CAAa,IAAA,EAAM,EAAA,EAAI,CAAC,MAAM,GAAA,KAAQ;AACzC,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAElB,IAAA,MAAM,YAAA,GAAe,QAAA,CAAS,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA;AAChD,IAAA,MAAM,gBAAgB,YAAA,GAAe,EAAE,GAAG,YAAA,CAAa,KAAA,KAAU,EAAC;AAClE,IAAA,MAAM,WAAA,GAAc,EAAE,GAAG,aAAA,EAAe,CAAC,IAAI,GAAG,SAAS,IAAA,EAAK;AAE9D,IAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,KAAK,GAAA,CAAI,GAAA,EAAK,IAAI,CAAA,EAAG,EAAA,EAAI,IAAA,CAAK,GAAA,CAAI,MAAM,IAAA,CAAK,QAAA,EAAU,EAAE,CAAA,EAAG,KAAA,EAAO,aAAa,CAAA;AAAA,EACxG,CAAC,CAAA;AAED,EAAA,EAAA,CAAG,UAAA,CAAW,IAAA,EAAM,EAAA,EAAI,QAAQ,CAAA;AAEhC,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AACxB,IAAA,IAAI,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,CAAE,KAAK,CAAC,CAAA,KAAM,CAAA,IAAK,IAAI,CAAA,EAAG;AACnD,MAAA,EAAA,CAAG,OAAA,CAAQ,MAAM,IAAA,EAAM,KAAA,CAAM,IAAI,QAAA,CAAS,MAAA,CAAO,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,IACjE;AAAA,EACJ;AAGA,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,IAAK,KAAA,EAAO;AAC9B,IAAA,EAAA,CAAG,OAAA,CAAQ,IAAA,EAAM,EAAA,EAAI,QAAA,CAAS,MAAA,CAAO,EAAE,CAAC,IAAI,GAAG,KAAA,EAAO,CAAC,CAAA;AAAA,EAC3D;AACJ;AAEA,SAAS,cAAA,CAAe,IAAA,EAAkB,MAAA,EAAgB,IAAA,EAAc,KAAA,EAAsB;AAC1F,EAAA,MAAM,QAAA,GAAW,OAAO,KAAA,CAAM,SAAA;AAC9B,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,IAAA,CAAK,KAAA;AAC3B,EAAA,MAAM,EAAE,OAAM,GAAI,SAAA;AAElB,EAAA,IAAI,KAAA,EAAO;AAEP,IAAA,MAAM,eAAe,YAAA,CAAa,IAAA,CAAK,KAAA,EAAO,QAAQ,KAAK,EAAC;AAC5D,IAAA,MAAM,QAAA,GAAW,EAAE,GAAG,YAAA,EAAc,CAAC,IAAI,GAAG,SAAS,IAAA,EAAK;AAC1D,IAAA,MAAM,QAAA,GAAW,OAAO,MAAA,CAAO,QAAQ,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,IAAK,IAAI,CAAA;AAC9D,IAAA,MAAMA,GAAAA,GAAK,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,GAAG,aAAA,CAAc,QAAA,CAAS,MAAA,CAAO,QAAQ,CAAC,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,EAAA,CAAG,iBAAiB,QAAQ,CAAA;AAEtH,IAAA,IAAA,CAAK,SAASA,GAAE,CAAA;AAChB,IAAA,IAAA,CAAK,KAAA,EAAM;AAEX,IAAA;AAAA,EACJ;AAEA,EAAA,MAAM,EAAA,GAAK,KAAK,KAAA,CAAM,EAAA;AAEtB,EAAA,IAAI,qBAAqB,aAAA,EAAe;AAEpC,IAAA,SAAA,CAAU,WAAA,CAAY,CAAC,IAAA,EAAM,GAAA,KAAQ;AACjC,MAAA,iBAAA,CAAkB,EAAA,EAAI,UAAU,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA,EAAG,GAAA,GAAM,IAAA,CAAK,QAAA,GAAW,CAAC,CAAA;AAAA,IACjF,CAAC,CAAA;AAAA,EACL,CAAA,MAAO;AACH,IAAA,iBAAA,CAAkB,IAAI,QAAA,EAAU,IAAA,EAAM,OAAO,SAAA,CAAU,IAAA,EAAM,UAAU,EAAE,CAAA;AAAA,EAC7E;AAEA,EAAA,IAAA,CAAK,SAAS,EAAE,CAAA;AAChB,EAAA,IAAA,CAAK,KAAA,EAAM;AACf;AAEA,SAAS,iBAAA,CAAkB,MAAkB,MAAA,EAAyB;AAClE,EAAA,MAAM,QAAQ,YAAA,CAAa,IAAA,CAAK,KAAA,EAAO,MAAA,CAAO,MAAM,SAAS,CAAA;AAE7D,EAAA,OAAO,CAAC,CAAC,KAAA,EAAO,eAAA;AACpB;AAEO,SAAS,wBAAA,CAAyB,IAAA,EAAkB,MAAA,EAAgB,OAAA,EAA8C;AACrH,EAAA,MAAM,cAAA,GAAiB,SAAS,cAAA,IAAkB,uBAAA;AAElD,EAAA,OAAO;AAAA,IACH,MAAM,MAAM,iBAAA,CAAkB,IAAA,EAAM,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,IACrD,QAAQ,MAAM,iBAAA,CAAkB,IAAA,EAAM,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,IACzD,WAAW,MAAM,iBAAA,CAAkB,IAAA,EAAM,MAAA,CAAO,MAAM,SAAS,CAAA;AAAA,IAC/D,eAAe,MAAM,iBAAA,CAAkB,IAAA,EAAM,MAAA,CAAO,MAAM,aAAa,CAAA;AAAA,IACvE,WAAW,MAAM,iBAAA,CAAkB,IAAA,EAAM,MAAA,CAAO,MAAM,SAAS,CAAA;AAAA,IAC/D,aAAa,MAAM,iBAAA,CAAkB,IAAA,EAAM,MAAA,CAAO,MAAM,WAAW,CAAA;AAAA,IACnE,MAAM,MAAM,iBAAA,CAAkB,IAAA,EAAM,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,IACrD,YAAY,CAAC,MAAA,KAA0B,eAAe,IAAA,EAAM,MAAA,EAAQ,cAAc,MAAM,CAAA;AAAA,IACxF,UAAU,CAAC,IAAA,KAAwB,eAAe,IAAA,EAAM,MAAA,EAAQ,YAAY,IAAI,CAAA;AAAA,IAChF,iBAAiB,CAAC,KAAA,KAAyB,eAAe,IAAA,EAAM,MAAA,EAAQ,SAAS,KAAK,CAAA;AAAA,IACtF,iBAAiB,CAAC,KAAA,KAAyB,eAAe,IAAA,EAAM,MAAA,EAAQ,mBAAmB,KAAK,CAAA;AAAA,IAChG,SAAA,EAAW,MAAM,cAAA,CAAe,IAAA,EAAM,MAAA,EAAQ,iBAAA,EAAmB,iBAAA,CAAkB,IAAA,EAAM,MAAM,CAAA,GAAI,IAAA,GAAO,cAAc;AAAA,GAC5H;AACJ;AC3FA,SAAS,mBAAA,CAAoB,MAAkB,MAAA,EAAiC;AAC5E,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,IAAA,CAAK,KAAA,CAAM,SAAA;AAE7B,EAAA,KAAA,IAAS,KAAA,GAAQ,KAAA,CAAM,KAAA,EAAO,KAAA,GAAQ,GAAG,KAAA,EAAA,EAAS;AAC9C,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA;AAE7B,IAAA,IAAI,KAAK,IAAA,KAAS,MAAA,CAAO,MAAM,SAAA,EAAW,OAAO,OAAO,KAAA,CAAM,SAAA;AAC9D,IAAA,IAAI,KAAK,IAAA,KAAS,MAAA,CAAO,MAAM,eAAA,EAAiB,OAAO,OAAO,KAAA,CAAM,eAAA;AAAA,EACxE;AAEA,EAAA,OAAO,IAAA;AACX;AAKA,SAAS,QAAA,CAAS,MAAkB,MAAA,EAAmE;AACnG,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,IAAA,CAAK,KAAA,CAAM,SAAA;AAC7B,EAAA,MAAM,SAAA,GAAY,CAAC,MAAA,CAAO,KAAA,CAAM,WAAA,EAAa,OAAO,KAAA,CAAM,YAAA,EAAc,MAAA,CAAO,KAAA,CAAM,UAAU,CAAA;AAG/F,EAAA,KAAA,IAAS,KAAA,GAAQ,KAAA,CAAM,KAAA,EAAO,KAAA,GAAQ,GAAG,KAAA,EAAA,EAAS;AAC9C,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA;AAE7B,IAAA,IAAI,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG;AAC/B,MAAA,OAAO,EAAE,GAAA,EAAK,KAAA,CAAM,OAAO,KAAK,CAAA,EAAG,MAAM,KAAA,EAAM;AAAA,IACnD;AAAA,EACJ;AAGA,EAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAG,GAAI,KAAK,KAAA,CAAM,SAAA;AAChC,EAAA,IAAI,KAAA,GAA2D,IAAA;AAE/D,EAAA,IAAA,CAAK,MAAM,GAAA,CAAI,YAAA,CAAa,MAAM,EAAA,EAAI,CAAC,MAAM,GAAA,KAAQ;AACjD,IAAA,IAAI,OAAO,OAAO,KAAA;AAElB,IAAA,IAAI,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG;AAC/B,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,GAAG,CAAA;AAEvC,MAAA,KAAA,GAAQ,EAAE,GAAA,EAAK,IAAA,EAAM,KAAA,EAAO,KAAK,KAAA,EAAM;AAEvC,MAAA,OAAO,KAAA;AAAA,IACX;AAEA,IAAA,OAAO,MAAA;AAAA,EACX,CAAC,CAAA;AAED,EAAA,OAAO,KAAA;AACX;AAOA,SAAS,WAAA,CAAY,IAAA,EAAY,cAAA,EAA0B,cAAA,EAA0B,MAAA,EAAsB;AACvG,EAAA,MAAM,SAAA,GAAY,CAAC,MAAA,CAAO,KAAA,CAAM,WAAA,EAAa,OAAO,KAAA,CAAM,YAAA,EAAc,MAAA,CAAO,KAAA,CAAM,UAAU,CAAA;AAC/F,EAAA,MAAM,YAAY,CAAC,MAAA,CAAO,MAAM,SAAA,EAAW,MAAA,CAAO,MAAM,eAAe,CAAA;AAEvE,EAAA,IAAI,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG;AAC/B,IAAA,MAAM,WAAmB,EAAC;AAE1B,IAAA,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,CAAC,KAAA,KAAU,QAAA,CAAS,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,cAAA,EAAgB,cAAA,EAAgB,MAAM,CAAC,CAAC,CAAA;AAEzG,IAAA,OAAO,cAAA,CAAe,MAAA,CAAO,IAAA,EAAM,QAAQ,CAAA;AAAA,EAC/C;AAEA,EAAA,IAAI,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG;AAC/B,IAAA,MAAM,QAAgB,EAAC;AAEvB,IAAA,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,CAAC,KAAA,KAAU,KAAA,CAAM,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,cAAA,EAAgB,cAAA,EAAgB,MAAM,CAAC,CAAC,CAAA;AACtG,IAAA,MAAM,KAAA,GAAQ,mBAAmB,MAAA,CAAO,KAAA,CAAM,kBAAkB,EAAE,OAAA,EAAS,OAAM,GAAI,IAAA;AAErF,IAAA,OAAO,cAAA,CAAe,MAAA,CAAO,KAAA,EAAO,KAAA,EAAO,KAAK,KAAK,CAAA;AAAA,EACzD;AAEA,EAAA,OAAO,IAAA;AACX;AAEA,SAAS,YAAA,CAAa,OAAA,EAAmB,cAAA,EAA0B,cAAA,EAA0B,MAAA,EAAwB;AACjH,EAAA,MAAM,QAAgB,EAAC;AAEvB,EAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,KAAA,KAAU,KAAA,CAAM,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,cAAA,EAAgB,cAAA,EAAgB,MAAM,CAAC,CAAC,CAAA;AAEjG,EAAA,OAAO,KAAA;AACX;AAEA,SAAS,YAAA,CAAa,MAAkB,MAAA,EAA8D;AAClG,EAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAG,GAAI,KAAK,KAAA,CAAM,SAAA;AAChC,EAAA,MAAM,SAAA,GAAY,CAAC,MAAA,CAAO,KAAA,CAAM,WAAA,EAAa,OAAO,KAAA,CAAM,YAAA,EAAc,MAAA,CAAO,KAAA,CAAM,UAAU,CAAA;AAC/F,EAAA,MAAM,UAAwD,EAAC;AAE/D,EAAA,IAAA,CAAK,MAAM,GAAA,CAAI,YAAA,CAAa,MAAM,EAAA,EAAI,CAAC,MAAM,GAAA,KAAQ;AACjD,IAAA,IAAI,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG;AAC/B,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,GAAG,CAAA;AAEvC,MAAA,OAAA,CAAQ,KAAK,EAAE,GAAA,EAAK,MAAM,KAAA,EAAO,IAAA,CAAK,OAAO,CAAA;AAE7C,MAAA,OAAO,KAAA;AAAA,IACX;AAEA,IAAA,OAAO,MAAA;AAAA,EACX,CAAC,CAAA;AAED,EAAA,OAAO,OAAA;AACX;AAEA,SAAS,UAAA,CAAW,IAAA,EAAkB,MAAA,EAAgB,cAAA,EAA0B,cAAA,EAA0B;AACtG,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,IAAA,EAAM,MAAM,CAAA;AAEtC,EAAA,IAAI,QAAA,IAAY,QAAA,CAAS,IAAA,CAAK,IAAA,KAAS,cAAA,EAAgB;AAEnD,IAAA,MAAM,QAAA,GAAW,mBAAA,CAAoB,IAAA,EAAM,MAAM,CAAA,IAAK,cAAA;AAEtD,IAAA,YAAA,CAAa,QAAQ,CAAA,CAAE,IAAA,CAAK,KAAA,EAAO,KAAK,QAAQ,CAAA;AAChD,IAAA,IAAA,CAAK,KAAA,EAAM;AAEX,IAAA;AAAA,EACJ;AAEA,EAAA,IAAI,QAAA,EAAU;AAEV,IAAA,MAAM,QAAA,GAAW,YAAA,CAAa,IAAA,EAAM,MAAM,CAAA;AAE1C,IAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACrB,MAAA,MAAM,EAAA,GAAK,KAAK,KAAA,CAAM,EAAA;AACtB,MAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAK,GAAI,KAAK,KAAA,CAAM,SAAA;AAEpC,MAAA,KAAA,IAAS,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAC3C,QAAA,MAAM,IAAA,GAAO,SAAS,CAAC,CAAA;AACvB,QAAA,MAAM,OAAA,GAAU,cAAA,CAAe,MAAA,CAAO,IAAA,EAAM,YAAA,CAAa,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,cAAA,EAAgB,cAAA,EAAgB,MAAM,CAAC,CAAA;AAEnH,QAAA,EAAA,CAAG,WAAA,CAAY,KAAK,GAAA,EAAK,IAAA,CAAK,MAAM,IAAA,CAAK,IAAA,CAAK,UAAU,OAAO,CAAA;AAAA,MACnE;AAMA,MAAA,IAAI;AACA,QAAA,EAAA,CAAG,YAAA,CAAa,aAAA,CAAc,OAAA,CAAQ,EAAA,CAAG,GAAA,CAAI,OAAA,CAAQ,MAAM,CAAA,EAAG,EAAA,CAAG,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAC,CAAC,CAAA;AAAA,MACvF,CAAA,CAAA,MAAQ;AAAA,MAER;AAEA,MAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAG,cAAA,EAAgB,CAAA;AACjC,MAAA,IAAA,CAAK,KAAA,EAAM;AAEX,MAAA;AAAA,IACJ;AAAA,EACJ;AAGA,EAAA,oBAAA,CAAqB,IAAA,EAAM,QAAQ,cAAc,CAAA;AACjD,EAAA,IAAA,CAAK,KAAA,EAAM;AACf;AAEO,SAAS,kBAAA,CAAmB,MAAkB,MAAA,EAAgB;AACjE,EAAA,OAAO;AAAA,IACH,UAAA,EAAY,MAAM,UAAA,CAAW,IAAA,EAAM,MAAA,EAAQ,OAAO,KAAA,CAAM,WAAA,EAAa,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA;AAAA,IAC3F,WAAA,EAAa,MAAM,UAAA,CAAW,IAAA,EAAM,MAAA,EAAQ,OAAO,KAAA,CAAM,YAAA,EAAc,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA;AAAA,IAC7F,SAAA,EAAW,MAAM,UAAA,CAAW,IAAA,EAAM,MAAA,EAAQ,OAAO,KAAA,CAAM,UAAA,EAAY,MAAA,CAAO,KAAA,CAAM,eAAe;AAAA,GACnG;AACJ;AC5JO,SAAS,UAAU,IAAA,EAAkB;AACxC,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,IAAA,CAAK,KAAA,CAAM,SAAA;AAE7B,EAAA,KAAA,IAAS,KAAA,GAAQ,KAAA,CAAM,KAAA,EAAO,KAAA,GAAQ,GAAG,KAAA,EAAA,EAAS;AAC9C,IAAA,IAAI,MAAM,IAAA,CAAK,KAAK,CAAA,CAAE,IAAA,CAAK,SAAS,OAAA,EAAS;AACzC,MAAA,OAAO,EAAE,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA,EAAG,KAAA,EAAO,KAAA,CAAM,MAAA,CAAO,KAAK,CAAA,GAAI,CAAA,EAAE;AAAA,IACrE;AAAA,EACJ;AAEA,EAAA,OAAO,IAAA;AACX;AAGO,SAAS,YAAA,CAAa,MAAkB,QAAA,EAAkB;AAC7D,EAAA,MAAM,KAAA,GAAQ,UAAU,IAAI,CAAA;AAE5B,EAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AAEnC,EAAA,IAAI,QAAA,IAAY,IAAI,KAAA,EAAO;AAE3B,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,KAAA,GAAQ,GAAA,CAAI,IAAI,QAAQ,CAAA;AACnD,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,KAAA,GAAQ,GAAA,CAAI,GAAA,CAAA,CAAK,IAAI,MAAA,GAAS,CAAA,IAAK,GAAA,CAAI,KAAA,GAAQ,QAAQ,CAAA;AACjF,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,YAAY,CAAA;AAClD,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,WAAW,CAAA;AAEhD,EAAA,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,EAAA,CAAG,aAAaC,aAAAA,CAAc,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,CAAO,GAAA,EAAK,KAAA,CAAM,GAAG,CAAC,CAAC,CAAA;AACzG;AAGO,SAAS,SAAA,CAAU,MAAkB,QAAA,EAAkB;AAC1D,EAAA,MAAM,KAAA,GAAQ,UAAU,IAAI,CAAA;AAE5B,EAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AAEnC,EAAA,IAAI,QAAA,IAAY,IAAI,MAAA,EAAQ;AAE5B,EAAA,MAAM,eAAe,KAAA,CAAM,KAAA,GAAQ,IAAI,GAAA,CAAI,QAAA,GAAW,IAAI,KAAK,CAAA;AAC/D,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,KAAA,GAAQ,GAAA,CAAI,GAAA,CAAI,WAAW,GAAA,CAAI,KAAA,IAAS,GAAA,CAAI,KAAA,GAAQ,CAAA,CAAE,CAAA;AAChF,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,YAAY,CAAA;AAClD,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,WAAW,CAAA;AAEhD,EAAA,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,EAAA,CAAG,aAAaA,aAAAA,CAAc,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,CAAO,GAAA,EAAK,KAAA,CAAM,GAAG,CAAC,CAAC,CAAA;AACzG;AAGO,SAAS,UAAA,CAAW,IAAA,EAAkB,QAAA,EAAkB,SAAA,EAAmB;AAC9E,EAAA,MAAM,KAAA,GAAQ,UAAU,IAAI,CAAA;AAE5B,EAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AACnC,EAAA,MAAM,YAAY,QAAA,GAAW,SAAA;AAE7B,EAAA,IAAI,SAAA,GAAY,CAAA,IAAK,SAAA,IAAa,GAAA,CAAI,KAAA,EAAO;AAE7C,EAAA,MAAM,EAAA,GAAK,KAAK,KAAA,CAAM,EAAA;AAGtB,EAAA,KAAA,IAAS,MAAM,GAAA,CAAI,MAAA,GAAS,CAAA,EAAG,GAAA,IAAO,GAAG,GAAA,EAAA,EAAO;AAC5C,IAAA,MAAM,WAAA,GAAc,MAAM,KAAA,GAAQ,GAAA,CAAI,IAAI,GAAA,GAAM,GAAA,CAAI,QAAQ,QAAQ,CAAA;AACpE,IAAA,MAAM,SAAA,GAAY,MAAM,KAAA,GAAQ,GAAA,CAAI,IAAI,GAAA,GAAM,GAAA,CAAI,QAAQ,SAAS,CAAA;AACnE,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,OAAO,WAAW,CAAA;AAClD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,OAAO,SAAS,CAAA;AAE9C,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,MAAA,EAAQ;AAC1B,IAAA,IAAA,CAAK,SAAS,KAAA,CAAM,OAAA,IAAW,KAAK,CAAA,IAAA,CAAM,MAAA,CAAO,MAAM,OAAA,IAAW,CAAA,IAAK,MAAM,QAAA,CAAS,KAAA,CAAM,WAAW,CAAA,IAAK,CAAA,IAAA,CAAM,OAAO,KAAA,CAAM,OAAA,IAAW,KAAK,CAAA,EAAG;AAGlJ,IAAA,MAAM,CAAC,QAAA,EAAU,SAAA,EAAW,WAAW,UAAU,CAAA,GAAI,cAAc,SAAA,GAAY,CAAC,WAAA,EAAa,QAAA,EAAU,WAAW,MAAM,CAAA,GAAI,CAAC,SAAA,EAAW,MAAA,EAAQ,aAAa,QAAQ,CAAA;AAErK,IAAA,EAAA,CAAG,YAAY,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,SAAS,GAAG,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,SAAA,GAAY,WAAW,QAAQ,CAAA,EAAG,UAAU,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA;AAC5H,IAAA,EAAA,CAAG,YAAY,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,QAAQ,GAAG,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,QAAA,GAAW,UAAU,QAAQ,CAAA,EAAG,WAAW,IAAA,CAAK,UAAA,CAAW,OAAO,CAAC,CAAA;AAAA,EAC/H;AAEA,EAAA,IAAI,GAAG,UAAA,EAAY;AACf,IAAA,IAAA,CAAK,SAAS,EAAE,CAAA;AAChB,IAAA,IAAA,CAAK,KAAA,EAAM;AAAA,EACf;AACJ;AAGO,SAAS,OAAA,CAAQ,IAAA,EAAkB,QAAA,EAAkB,SAAA,EAAmB;AAC3E,EAAA,MAAM,KAAA,GAAQ,UAAU,IAAI,CAAA;AAE5B,EAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,EAAA,MAAM,YAAY,QAAA,GAAW,SAAA;AAE7B,EAAA,IAAI,SAAA,GAAY,CAAA,IAAK,SAAA,IAAa,KAAA,CAAM,KAAK,UAAA,EAAY;AAEzD,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AACzC,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAGxC,EAAA,IAAI,OAAA,CAAQ,UAAA,KAAe,KAAA,CAAM,UAAA,EAAY;AAE7C,EAAA,KAAA,IAAS,GAAA,GAAM,CAAA,EAAG,GAAA,GAAM,OAAA,CAAQ,YAAY,GAAA,EAAA,EAAO;AAC/C,IAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA;AAC3B,IAAA,MAAM,CAAA,GAAI,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA;AAEzB,IAAA,IAAA,CAAK,EAAE,KAAA,CAAM,OAAA,IAAW,KAAK,CAAA,IAAA,CAAM,CAAA,CAAE,MAAM,OAAA,IAAW,CAAA,IAAK,MAAM,CAAA,CAAE,KAAA,CAAM,WAAW,CAAA,IAAK,CAAA,IAAA,CAAM,EAAE,KAAA,CAAM,OAAA,IAAW,KAAK,CAAA,EAAG;AAAA,EAC9H;AAEA,EAAA,IAAI,aAAa,KAAA,CAAM,KAAA;AAEvB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AAC/B,IAAA,UAAA,IAAc,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,QAAA;AAAA,EACtC;AAEA,EAAA,IAAI,WAAW,KAAA,CAAM,KAAA;AAErB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAChC,IAAA,QAAA,IAAY,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,QAAA;AAAA,EACpC;AAEA,EAAA,MAAM,EAAA,GAAK,KAAK,KAAA,CAAM,EAAA;AAGtB,EAAA,MAAM,CAAC,QAAA,EAAU,QAAA,EAAU,WAAW,SAAS,CAAA,GAAI,aAAa,QAAA,GAAW,CAAC,UAAA,EAAY,OAAA,EAAS,UAAU,KAAK,CAAA,GAAI,CAAC,QAAA,EAAU,KAAA,EAAO,YAAY,OAAO,CAAA;AAEzJ,EAAA,EAAA,CAAG,WAAA,CAAY,WAAW,SAAA,GAAY,SAAA,CAAU,UAAU,QAAA,CAAS,IAAA,CAAK,QAAA,CAAS,OAAO,CAAC,CAAA;AACzF,EAAA,EAAA,CAAG,WAAA,CAAY,UAAU,QAAA,GAAW,QAAA,CAAS,UAAU,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA;AAExF,EAAA,IAAI,GAAG,UAAA,EAAY;AACf,IAAA,IAAA,CAAK,SAAS,EAAE,CAAA;AAChB,IAAA,IAAA,CAAK,KAAA,EAAM;AAAA,EACf;AACJ;AAGA,SAAS,SAAA,CAAU,EAAA,EAAiB,OAAA,EAAiB,GAAA,EAAa,SAAA,EAAmB;AACjF,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,MAAA,CAAO,OAAO,CAAA;AAE/B,EAAA,IAAI,CAAC,IAAA,EAAM;AAEX,EAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,KAAA,EAAO,MAAA,KAAW;AAC5B,IAAA,IAAI,MAAM,IAAA,CAAK,IAAA,KAAS,eAAe,KAAA,CAAM,IAAA,CAAK,SAAS,SAAA,EAAW;AAClE,MAAA,MAAM,GAAA,GAAM,UAAU,CAAA,GAAI,MAAA;AAE1B,MAAA,EAAA,CAAG,cAAc,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,GAAG,GAAG,IAAA,EAAM,EAAE,GAAG,KAAA,CAAM,OAAO,SAAA,EAAW,SAAA,KAAc,MAAA,GAAS,IAAA,GAAO,WAAW,CAAA;AAAA,IACtH;AAAA,EACJ,CAAC,CAAA;AACL;AAGO,SAAS,WAAA,CAAY,IAAA,EAAkB,QAAA,EAAkB,SAAA,EAAmB;AAC/E,EAAA,MAAM,KAAA,GAAQ,UAAU,IAAI,CAAA;AAE5B,EAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AACnC,EAAA,MAAM,EAAA,GAAK,KAAK,KAAA,CAAM,EAAA;AAEtB,EAAA,KAAA,IAAS,GAAA,GAAM,CAAA,EAAG,GAAA,GAAM,GAAA,CAAI,QAAQ,GAAA,EAAA,EAAO;AACvC,IAAA,MAAM,OAAA,GAAU,MAAM,KAAA,GAAQ,GAAA,CAAI,IAAI,GAAA,GAAM,GAAA,CAAI,QAAQ,QAAQ,CAAA;AAEhE,IAAA,SAAA,CAAU,EAAA,EAAI,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,KAAK,SAAS,CAAA;AAAA,EACpD;AAEA,EAAA,IAAI,GAAG,UAAA,EAAY;AACf,IAAA,IAAA,CAAK,SAAS,EAAE,CAAA;AAChB,IAAA,IAAA,CAAK,KAAA,EAAM;AAAA,EACf;AACJ;AAGO,SAAS,QAAA,CAAS,IAAA,EAAkB,QAAA,EAAkB,SAAA,EAAmB;AAC5E,EAAA,MAAM,KAAA,GAAQ,UAAU,IAAI,CAAA;AAE5B,EAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AACnC,EAAA,MAAM,EAAA,GAAK,KAAK,KAAA,CAAM,EAAA;AAEtB,EAAA,KAAA,IAAS,GAAA,GAAM,CAAA,EAAG,GAAA,GAAM,GAAA,CAAI,OAAO,GAAA,EAAA,EAAO;AACtC,IAAA,MAAM,OAAA,GAAU,MAAM,KAAA,GAAQ,GAAA,CAAI,IAAI,QAAA,GAAW,GAAA,CAAI,QAAQ,GAAG,CAAA;AAEhE,IAAA,SAAA,CAAU,EAAA,EAAI,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,KAAK,SAAS,CAAA;AAAA,EACpD;AAEA,EAAA,IAAI,GAAG,UAAA,EAAY;AACf,IAAA,IAAA,CAAK,SAAS,EAAE,CAAA;AAChB,IAAA,IAAA,CAAK,KAAA,EAAM;AAAA,EACf;AACJ;AAGO,SAAS,gBAAA,CAAiB,MAAkB,SAAA,EAAmB;AAClE,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,IAAA,CAAK,KAAA,CAAM,SAAA;AAE7B,EAAA,KAAA,IAAS,KAAA,GAAQ,KAAA,CAAM,KAAA,EAAO,KAAA,GAAQ,GAAG,KAAA,EAAA,EAAS;AAC9C,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA;AAE7B,IAAA,IAAI,KAAK,IAAA,CAAK,IAAA,KAAS,gBAAgB,IAAA,CAAK,IAAA,CAAK,SAAS,cAAA,EAAgB;AACtE,MAAA,MAAM,OAAA,GAAU,KAAA,CAAM,MAAA,CAAO,KAAK,CAAA;AAClC,MAAA,MAAM,EAAA,GAAK,KAAK,KAAA,CAAM,EAAA;AAEtB,MAAA,SAAA,CAAU,EAAA,EAAI,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,KAAK,SAAS,CAAA;AAEhD,MAAA,IAAI,GAAG,UAAA,EAAY;AACf,QAAA,IAAA,CAAK,SAAS,EAAE,CAAA;AAChB,QAAA,IAAA,CAAK,KAAA,EAAM;AAAA,MACf;AAEA,MAAA;AAAA,IACJ;AAAA,EACJ;AACJ;AAGA,SAAS,sBAAA,CAAuB,EAAA,EAAiB,OAAA,EAAiB,KAAA,EAAsB;AACpF,EAAA,MAAM,IAAA,GAAO,GAAG,GAAA,CAAI,MAAA,CAAO,GAAG,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAC,CAAA;AAElD,EAAA,IAAI,CAAC,IAAA,EAAM;AAEX,EAAA,EAAA,CAAG,aAAA,CAAc,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,EAAG,IAAA,EAAM,EAAE,GAAG,IAAA,CAAK,KAAA,EAAO,eAAA,EAAiB,OAAO,CAAA;AAC7F;AAGA,SAAS,sBAAA,CAAuB,IAAA,EAAkB,OAAA,EAAiB,KAAA,EAAe;AAC9E,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,OAAO,OAAO,CAAA;AAE1C,EAAA,IAAI,CAAC,IAAA,EAAM;AAEX,EAAA,MAAM,OAAO,OAAA,GAAU,CAAA;AACvB,EAAA,MAAM,EAAA,GAAK,OAAA,GAAU,IAAA,CAAK,QAAA,GAAW,CAAA;AACrC,EAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,SAAA;AAE9C,EAAA,IAAI,CAAC,aAAA,EAAe;AAEpB,EAAA,MAAM,EAAA,GAAK,KAAK,KAAA,CAAM,EAAA;AAEtB,EAAA,IAAI,KAAA,EAAO;AACP,IAAA,EAAA,CAAG,OAAA,CAAQ,MAAM,EAAA,EAAI,aAAA,CAAc,OAAO,EAAE,KAAA,EAAO,CAAC,CAAA;AAAA,EACxD,CAAA,MAAO;AACH,IAAA,EAAA,CAAG,UAAA,CAAW,IAAA,EAAM,EAAA,EAAI,aAAa,CAAA;AAAA,EACzC;AAEA,EAAA,IAAA,CAAK,SAAS,EAAE,CAAA;AACpB;AAGO,SAAS,WAAA,CAAY,IAAA,EAAkB,QAAA,EAAkB,KAAA,EAAe,QAAA,EAAuC;AAClH,EAAA,MAAM,KAAA,GAAQ,UAAU,IAAI,CAAA;AAE5B,EAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AAEnC,EAAA,IAAI,aAAa,iBAAA,EAAmB;AAChC,IAAA,MAAM,EAAA,GAAK,KAAK,KAAA,CAAM,EAAA;AAEtB,IAAA,KAAA,IAAS,GAAA,GAAM,CAAA,EAAG,GAAA,GAAM,GAAA,CAAI,QAAQ,GAAA,EAAA,EAAO;AACvC,MAAA,sBAAA,CAAuB,EAAA,EAAI,KAAA,CAAM,KAAA,GAAQ,GAAA,CAAI,GAAA,CAAI,GAAA,GAAM,GAAA,CAAI,KAAA,GAAQ,QAAQ,CAAA,EAAG,KAAA,IAAS,IAAI,CAAA;AAAA,IAC/F;AAEA,IAAA,IAAI,EAAA,CAAG,UAAA,EAAY,IAAA,CAAK,QAAA,CAAS,EAAE,CAAA;AAAA,EACvC,CAAA,MAAO;AACH,IAAA,KAAA,IAAS,GAAA,GAAM,CAAA,EAAG,GAAA,GAAM,GAAA,CAAI,QAAQ,GAAA,EAAA,EAAO;AACvC,MAAA,sBAAA,CAAuB,IAAA,EAAM,KAAA,CAAM,KAAA,GAAQ,GAAA,CAAI,GAAA,CAAI,MAAM,GAAA,CAAI,KAAA,GAAQ,QAAQ,CAAA,EAAG,KAAK,CAAA;AAAA,IACzF;AAAA,EACJ;AAEA,EAAA,IAAA,CAAK,KAAA,EAAM;AACf;AAGO,SAAS,QAAA,CAAS,IAAA,EAAkB,QAAA,EAAkB,KAAA,EAAe,QAAA,EAAuC;AAC/G,EAAA,MAAM,KAAA,GAAQ,UAAU,IAAI,CAAA;AAE5B,EAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AAEnC,EAAA,IAAI,aAAa,iBAAA,EAAmB;AAChC,IAAA,MAAM,EAAA,GAAK,KAAK,KAAA,CAAM,EAAA;AAEtB,IAAA,KAAA,IAAS,GAAA,GAAM,CAAA,EAAG,GAAA,GAAM,GAAA,CAAI,OAAO,GAAA,EAAA,EAAO;AACtC,MAAA,sBAAA,CAAuB,EAAA,EAAI,KAAA,CAAM,KAAA,GAAQ,GAAA,CAAI,GAAA,CAAI,QAAA,GAAW,GAAA,CAAI,KAAA,GAAQ,GAAG,CAAA,EAAG,KAAA,IAAS,IAAI,CAAA;AAAA,IAC/F;AAEA,IAAA,IAAI,EAAA,CAAG,UAAA,EAAY,IAAA,CAAK,QAAA,CAAS,EAAE,CAAA;AAAA,EACvC,CAAA,MAAO;AACH,IAAA,KAAA,IAAS,GAAA,GAAM,CAAA,EAAG,GAAA,GAAM,GAAA,CAAI,OAAO,GAAA,EAAA,EAAO;AACtC,MAAA,sBAAA,CAAuB,IAAA,EAAM,KAAA,CAAM,KAAA,GAAQ,GAAA,CAAI,GAAA,CAAI,WAAW,GAAA,CAAI,KAAA,GAAQ,GAAG,CAAA,EAAG,KAAK,CAAA;AAAA,IACzF;AAAA,EACJ;AAEA,EAAA,IAAA,CAAK,KAAA,EAAM;AACf;AAGO,SAAS,gBAAA,CAAiB,IAAA,EAAkB,KAAA,EAAe,QAAA,EAAuC;AACrG,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,IAAA,CAAK,KAAA,CAAM,SAAA;AAE7B,EAAA,KAAA,IAAS,KAAA,GAAQ,KAAA,CAAM,KAAA,EAAO,KAAA,GAAQ,GAAG,KAAA,EAAA,EAAS;AAC9C,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA;AAE7B,IAAA,IAAI,KAAK,IAAA,CAAK,IAAA,KAAS,gBAAgB,IAAA,CAAK,IAAA,CAAK,SAAS,cAAA,EAAgB;AACtE,MAAA,MAAM,OAAA,GAAU,KAAA,CAAM,MAAA,CAAO,KAAK,CAAA;AAElC,MAAA,IAAI,aAAa,iBAAA,EAAmB;AAChC,QAAA,MAAM,EAAA,GAAK,KAAK,KAAA,CAAM,EAAA;AAEtB,QAAA,sBAAA,CAAuB,EAAA,EAAI,OAAA,EAAS,KAAA,IAAS,IAAI,CAAA;AAEjD,QAAA,IAAI,EAAA,CAAG,UAAA,EAAY,IAAA,CAAK,QAAA,CAAS,EAAE,CAAA;AAAA,MACvC,CAAA,MAAO;AACH,QAAA,sBAAA,CAAuB,IAAA,EAAM,SAAS,KAAK,CAAA;AAAA,MAC/C;AAEA,MAAA,IAAA,CAAK,KAAA,EAAM;AAEX,MAAA;AAAA,IACJ;AAAA,EACJ;AACJ;AAGO,SAAS,eAAA,CAAgB,MAAkB,QAAA,EAAkB;AAChE,EAAA,MAAM,MAAA,GAAS,UAAU,IAAI,CAAA;AAE7B,EAAA,IAAI,CAAC,MAAA,EAAQ;AAGb,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA;AAE1C,EAAA,KAAA,IAAS,GAAA,GAAM,CAAA,EAAG,GAAA,GAAM,SAAA,CAAU,QAAQ,GAAA,EAAA,EAAO;AAC7C,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,MAAA,CAAO,MAAA,CAAO,KAAA,GAAQ,SAAA,CAAU,GAAA,CAAI,GAAA,GAAM,SAAA,CAAU,KAAA,GAAQ,QAAQ,CAAC,CAAA;AAEjG,IAAA,IAAI,IAAA,KAAA,CAAU,IAAA,CAAK,KAAA,CAAM,OAAA,IAAW,CAAA,IAAK,MAAM,IAAA,CAAK,KAAA,CAAM,OAAA,IAAW,CAAA,IAAK,CAAA,CAAA,EAAI;AAAA,EAClF;AAEA,EAAA,cAAA,CAAe,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA;AAGxC,EAAA,MAAM,KAAA,GAAQ,UAAU,IAAI,CAAA;AAE5B,EAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AACnC,EAAA,MAAM,EAAA,GAAK,KAAK,KAAA,CAAM,EAAA;AAEtB,EAAA,KAAA,IAAS,GAAA,GAAM,CAAA,EAAG,GAAA,GAAM,GAAA,CAAI,QAAQ,GAAA,EAAA,EAAO;AACvC,IAAA,MAAM,aAAA,GAAgB,MAAM,KAAA,GAAQ,GAAA,CAAI,IAAI,GAAA,GAAM,GAAA,CAAI,QAAQ,QAAQ,CAAA;AACtE,IAAA,MAAM,aAAA,GAAgB,MAAM,KAAA,GAAQ,GAAA,CAAI,IAAI,GAAA,GAAM,GAAA,CAAI,KAAA,GAAQ,QAAA,GAAW,CAAC,CAAA;AAC1E,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,OAAO,aAAa,CAAA;AACtD,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,OAAO,aAAa,CAAA;AAEtD,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,UAAA,EAAY;AAGhC,IAAA,EAAA,CAAG,YAAY,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,aAAA,GAAgB,CAAC,CAAA,EAAG,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,gBAAgB,UAAA,CAAW,QAAA,GAAW,CAAC,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACjI;AAEA,EAAA,IAAI,GAAG,UAAA,EAAY;AACf,IAAA,IAAA,CAAK,SAAS,EAAE,CAAA;AAAA,EACpB;AAEA,EAAA,IAAA,CAAK,KAAA,EAAM;AACf;AAGO,SAAS,YAAA,CAAa,MAAkB,QAAA,EAAkB;AAC7D,EAAA,MAAM,KAAA,GAAQ,UAAU,IAAI,CAAA;AAE5B,EAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AAGrC,EAAA,IAAI,YAAY,KAAA,CAAM,KAAA;AAEtB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,IAAK,QAAA,EAAU,CAAA,EAAA,EAAK;AAChC,IAAA,SAAA,IAAa,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,QAAA;AAAA,EACrC;AAEA,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,EAAA,CAAG,MAAA,CAAO,WAAW,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,OAAO,CAAC,CAAA;AAEhE,EAAA,IAAA,CAAK,SAAS,EAAE,CAAA;AAChB,EAAA,IAAA,CAAK,KAAA,EAAM;AACf;;;AChYO,SAAS,YAAY,IAAA,EAAkB,MAAA,EAAgB,OAAe,CAAA,EAAG,IAAA,GAAe,GAAG,gBAAA,EAA2B;AACzH,EAAA,MAAM,QAA6D,EAAC;AACpE,EAAA,MAAM,YAAY,gBAAA,GAAmB,EAAE,UAAU,CAAC,gBAAgB,GAAE,GAAI,IAAA;AAExE,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,EAAM,CAAA,EAAA,EAAK;AAC3B,IAAA,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,UAAA,CAAW,MAAA,CAAO,SAAA,EAAW,MAAA,CAAO,KAAA,CAAM,SAAA,CAAU,MAAA,EAAQ,CAAC,CAAA;AAAA,EACzF;AAEA,EAAA,MAAM,YAAgE,EAAC;AAEvE,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,EAAM,CAAA,EAAA,EAAK;AAC3B,IAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CAAI,CAAC,SAAS,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,OAAO,CAAC,CAAA;AAE5D,IAAA,SAAA,CAAU,KAAK,MAAA,CAAO,KAAA,CAAM,UAAU,MAAA,CAAO,IAAA,EAAM,QAAQ,CAAC,CAAA;AAAA,EAChE;AAEA,EAAA,MAAM,QAAQ,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,MAAA,CAAO,MAAM,SAAS,CAAA;AACvD,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,KAAA;AACnC,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AACrC,EAAA,MAAM,EAAA,GAAK,KAAK,KAAA,CAAM,EAAA;AACtB,EAAA,IAAI,QAAA;AAEJ,EAAA,IAAI,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AAEjD,IAAA,QAAA,GAAW,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AACnC,IAAA,EAAA,CAAG,WAAA,CAAY,QAAA,EAAU,QAAA,GAAW,MAAA,CAAO,UAAU,KAAK,CAAA;AAAA,EAC9D,CAAA,MAAO;AAEH,IAAA,QAAA,GAAW,KAAA,CAAM,MAAM,CAAC,CAAA;AACxB,IAAA,EAAA,CAAG,MAAA,CAAO,UAAU,KAAK,CAAA;AAAA,EAC7B;AAGA,EAAA,MAAM,mBAAmB,QAAA,GAAW,CAAA;AACpC,EAAA,MAAM,SAAA,GAAYC,cAAc,QAAA,CAAS,EAAA,CAAG,IAAI,OAAA,CAAQ,gBAAgB,CAAA,EAAG,CAAA,EAAG,IAAI,CAAA;AAElF,EAAA,IAAI,SAAA,EAAW,EAAA,CAAG,YAAA,CAAa,SAAS,CAAA;AAExC,EAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAG,cAAA,EAAgB,CAAA;AACjC,EAAA,IAAA,CAAK,KAAA,EAAM;AACf;AAKO,SAAS,yBAAA,CAA0B,IAAA,EAAkB,MAAA,EAAgB,SAAA,EAAmB,SAAA,EAAsD;AACjJ,EAAA,MAAM,GAAA,GAAM,CAAC,GAAA,KAAgF;AACzF,IAAA,GAAA,CAAI,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA;AAC7B,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,SAAA,EAAU;AAAA,EACd,CAAA;AAEA,EAAA,OAAO;AAAA,IACH,YAAA,EAAc,MAAM,GAAA,CAAI,eAAe,CAAA;AAAA,IACvC,WAAA,EAAa,MAAM,GAAA,CAAIC,cAAc,CAAA;AAAA,IACrC,MAAA,EAAQ,MAAM,GAAA,CAAI,YAAY,CAAA;AAAA,IAC9B,UAAU,MAAM;AACZ,MAAA,UAAA,CAAW,IAAA,EAAM,WAAW,EAAE,CAAA;AAC9B,MAAA,YAAA,CAAa,IAAA,EAAM,YAAY,CAAC,CAAA;AAChC,MAAA,SAAA,EAAU;AAAA,IACd,CAAA;AAAA,IACA,WAAW,MAAM;AACb,MAAA,UAAA,CAAW,IAAA,EAAM,WAAW,CAAC,CAAA;AAC7B,MAAA,YAAA,CAAa,IAAA,EAAM,YAAY,CAAC,CAAA;AAChC,MAAA,SAAA,EAAU;AAAA,IACd,CAAA;AAAA,IACA,WAAW,MAAM;AACb,MAAA,eAAA,CAAgB,MAAM,SAAS,CAAA;AAC/B,MAAA,SAAA,EAAU;AAAA,IACd,CAAA;AAAA,IACA,KAAA,EAAO,CAAC,KAAA,KAAkB;AACtB,MAAA,WAAA,CAAY,IAAA,EAAM,WAAW,KAAK,CAAA;AAClC,MAAA,SAAA,EAAU;AAAA,IACd,CAAA;AAAA,IACA,YAAA,EAAc,MAAM,GAAA,CAAI,kBAAkB,CAAA;AAAA,IAC1C,eAAA,EAAiB,CAAC,KAAA,KAAkB;AAChC,MAAA,WAAA,CAAY,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,OAAO,CAAA;AAC3C,MAAA,SAAA,EAAU;AAAA,IACd,CAAA;AAAA,IACA,eAAA,EAAiB,CAAC,KAAA,KAAkB;AAChC,MAAA,WAAA,CAAY,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,iBAAiB,CAAA;AACrD,MAAA,SAAA,EAAU;AAAA,IACd;AAAA,GACJ;AACJ;AAKO,SAAS,sBAAA,CAAuB,IAAA,EAAkB,MAAA,EAAgB,SAAA,EAAmB,SAAA,EAAmD;AAC3I,EAAA,MAAM,GAAA,GAAM,CAAC,GAAA,KAAgF;AACzF,IAAA,GAAA,CAAI,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA;AAC7B,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,SAAA,EAAU;AAAA,EACd,CAAA;AAEA,EAAA,OAAO;AAAA,IACH,YAAA,EAAc,MAAM,GAAA,CAAI,YAAY,CAAA;AAAA,IACpC,WAAA,EAAa,MAAM,GAAA,CAAI,WAAW,CAAA;AAAA,IAClC,MAAA,EAAQ,MAAM,GAAA,CAAI,SAAS,CAAA;AAAA,IAC3B,QAAQ,MAAM;AACV,MAAA,OAAA,CAAQ,IAAA,EAAM,WAAW,EAAE,CAAA;AAC3B,MAAA,SAAA,CAAU,IAAA,EAAM,YAAY,CAAC,CAAA;AAC7B,MAAA,SAAA,EAAU;AAAA,IACd,CAAA;AAAA,IACA,UAAU,MAAM;AACZ,MAAA,OAAA,CAAQ,IAAA,EAAM,WAAW,CAAC,CAAA;AAC1B,MAAA,SAAA,CAAU,IAAA,EAAM,YAAY,CAAC,CAAA;AAC7B,MAAA,SAAA,EAAU;AAAA,IACd,CAAA;AAAA,IACA,WAAW,MAAM;AACb,MAAA,YAAA,CAAa,MAAM,SAAS,CAAA;AAC5B,MAAA,SAAA,EAAU;AAAA,IACd,CAAA;AAAA,IACA,WAAA,EAAa,MAAM,GAAA,CAAI,WAAW,CAAA;AAAA,IAClC,KAAA,EAAO,CAAC,KAAA,KAAkB;AACtB,MAAA,QAAA,CAAS,IAAA,EAAM,WAAW,KAAK,CAAA;AAC/B,MAAA,SAAA,EAAU;AAAA,IACd,CAAA;AAAA,IACA,YAAA,EAAc,MAAM,GAAA,CAAI,eAAe,CAAA;AAAA,IACvC,eAAA,EAAiB,CAAC,KAAA,KAAkB;AAChC,MAAA,QAAA,CAAS,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,OAAO,CAAA;AACxC,MAAA,SAAA,EAAU;AAAA,IACd,CAAA;AAAA,IACA,eAAA,EAAiB,CAAC,KAAA,KAAkB;AAChC,MAAA,QAAA,CAAS,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,iBAAiB,CAAA;AAClD,MAAA,SAAA,EAAU;AAAA,IACd;AAAA,GACJ;AACJ;AAKO,SAAS,uBAAA,CAAwB,IAAA,EAAkB,MAAA,EAAgB,SAAA,EAAoD;AAC1H,EAAA,OAAO;AAAA,IACH,eAAe,MAAM;AAEjB,MAAA,MAAM,EAAE,KAAA,EAAM,GAAI,IAAA,CAAK,KAAA,CAAM,SAAA;AAE7B,MAAA,KAAA,IAAS,KAAA,GAAQ,KAAA,CAAM,KAAA,EAAO,KAAA,GAAQ,GAAG,KAAA,EAAA,EAAS;AAC9C,QAAA,IAAI,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA,CAAE,SAAS,MAAA,CAAO,KAAA,CAAM,UAAA,IAAc,KAAA,CAAM,KAAK,KAAK,CAAA,CAAE,IAAA,KAAS,MAAA,CAAO,MAAM,YAAA,EAAc;AAC5G,UAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,CAAM,KAAK,CAAA;AACnC,UAAA,MAAM,OAAA,GAAU,KAAA,CAAM,GAAA,CAAI,KAAK,CAAA;AAC/B,UAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,EAAA,CAAG,WAAA,CAAY,SAAA,EAAW,OAAA,EAAS,MAAA,CAAO,KAAA,CAAM,SAAA,CAAU,MAAA,EAAQ,CAAA;AAExF,UAAA,IAAA,CAAK,SAAS,EAAE,CAAA;AAChB,UAAA;AAAA,QACJ;AAAA,MACJ;AAEA,MAAA,IAAA,CAAK,KAAA,EAAM;AACX,MAAA,SAAA,EAAU;AAAA,IACd,CAAA;AAAA,IACA,KAAA,EAAO,CAAC,KAAA,KAAkB;AACtB,MAAA,gBAAA,CAAiB,MAAM,KAAK,CAAA;AAC5B,MAAA,SAAA,EAAU;AAAA,IACd,CAAA;AAAA,IACA,YAAY,MAAM;AACd,MAAA,UAAA,CAAW,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA;AACpC,MAAA,IAAA,CAAK,KAAA,EAAM;AACX,MAAA,SAAA,EAAU;AAAA,IACd,CAAA;AAAA,IACA,WAAW,MAAM;AACb,MAAA,SAAA,CAAU,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA;AACnC,MAAA,IAAA,CAAK,KAAA,EAAM;AACX,MAAA,SAAA,EAAU;AAAA,IACd,CAAA;AAAA,IACA,cAAc,MAAM;AAChB,MAAA,gBAAA,CAAiB,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA;AAC1C,MAAA,IAAA,CAAK,KAAA,EAAM;AACX,MAAA,SAAA,EAAU;AAAA,IACd,CAAA;AAAA,IACA,eAAA,EAAiB,CAAC,KAAA,KAAkB;AAChC,MAAA,gBAAA,CAAiB,IAAA,EAAM,OAAO,OAAO,CAAA;AACrC,MAAA,SAAA,EAAU;AAAA,IACd,CAAA;AAAA,IACA,eAAA,EAAiB,CAAC,KAAA,KAAkB;AAChC,MAAA,gBAAA,CAAiB,IAAA,EAAM,OAAO,iBAAiB,CAAA;AAC/C,MAAA,SAAA,EAAU;AAAA,IACd;AAAA,GACJ;AACJ;;;ACjMO,SAAS,aAAA,CAAc,GAAA,EAAa,GAAA,EAAa,QAAA,EAAyD;AAC7G,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA;AAC5B,EAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,EAAA,MAAM,WAAA,GAAc,KAAK,KAAA,EAAM;AAC/B,EAAA,MAAM,SAAS,CAAC,CAAA,KAAe,CAAA,IAAK,CAAA,IAAK,IAAI,MAAA,CAAO,UAAA,GAAa,QAAA,CAAS,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAC,CAAA,CAAE,KAAK,KAAK,IAAA,GAAO,IAAA;AAEnH,EAAA,IAAI,KAAA,GAAQ,KAAK,KAAA,EAAM;AACvB,EAAA,IAAI,MAAA,GAAS,OAAO,KAAK,CAAA;AAEzB,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA,EAAG;AAC9B,IAAA,KAAA,IAAS,CAAA;AACT,IAAA,MAAA,GAAS,OAAO,KAAK,CAAA;AAAA,EACzB;AAEA,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAEpB,EAAA,MAAM,QAAA,GAAW,CAAC,CAAA,KAAc;AAC5B,IAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAElB,IAAA,OAAO,CAAC,CAAC,CAAA,IAAK,CAAA,CAAE,GAAG,MAAO,CAAA;AAAA,EAC9B,CAAA;AAEA,EAAA,IAAI,KAAA,GAAQ,KAAA;AACZ,EAAA,IAAI,GAAA,GAAM,KAAA;AAEV,EAAA,OAAO,KAAA,GAAQ,CAAA,IAAK,QAAA,CAAS,KAAA,GAAQ,CAAC,CAAA,EAAG,KAAA,EAAA;AACzC,EAAA,OAAO,MAAM,MAAA,CAAO,UAAA,GAAa,KAAK,QAAA,CAAS,GAAA,GAAM,CAAC,CAAA,EAAG,GAAA,EAAA;AAEzD,EAAA,IAAI,IAAA,GAAO,WAAA;AAEX,EAAA,KAAA,IAAS,CAAA,GAAI,GAAG,CAAA,GAAI,KAAA,EAAO,KAAK,IAAA,IAAQ,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,CAAE,QAAA;AAExD,EAAA,IAAI,EAAA,GAAK,IAAA;AAET,EAAA,KAAA,IAAS,CAAA,GAAI,OAAO,CAAA,IAAK,GAAA,EAAK,KAAK,EAAA,IAAM,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,CAAE,QAAA;AAEzD,EAAA,OAAO,EAAE,MAAM,EAAA,EAAG;AACtB;;;ACjCO,SAAS,qBAAA,CAAsB,MAAkB,MAAA,EAAgB;AACpE,EAAA,MAAM,eAAe,MAAoC;AACrD,IAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAI,KAAA,EAAM,GAAI,KAAK,KAAA,CAAM,SAAA;AAEvC,IAAA,IAAI,CAAC,KAAA,EAAO,OAAO,EAAE,MAAM,EAAA,EAAG;AAE9B,IAAA,OAAO,aAAA,CAAc,IAAA,CAAK,KAAA,CAAM,GAAA,EAAK,IAAA,EAAM,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,IAAK,EAAE,IAAA,EAAM,EAAA,EAAG;AAAA,EAChF,CAAA;AAEA,EAAA,OAAO;AAAA,IACH,UAAA,EAAY,CAAC,GAAA,EAAa,IAAA,KAAkB;AACxC,MAAA,MAAM,IAAA,GAAO,YAAY,GAAG,CAAA;AAG5B,MAAA,IAAI,QAAQ,IAAA,EAAM;AAElB,MAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAI,KAAA,EAAM,GAAI,KAAK,KAAA,CAAM,SAAA;AACvC,MAAA,MAAM,WAAW,MAAA,CAAO,KAAA,CAAM,KAAK,MAAA,CAAO,EAAE,MAAM,CAAA;AAElD,MAAA,IAAI,SAAS,IAAA,EAAM;AACf,QAAA,MAAM,WAAW,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,CAAC,QAAQ,CAAC,CAAA;AAE7C,QAAA,IAAA,CAAK,SAAS,IAAA,CAAK,KAAA,CAAM,GAAG,oBAAA,CAAqB,QAAA,EAAU,KAAK,CAAC,CAAA;AAAA,MACrE,WAAW,KAAA,EAAO;AACd,QAAA,MAAM,WAAA,GAAc,IAAA;AACpB,QAAA,MAAM,WAAW,MAAA,CAAO,IAAA,CAAK,WAAA,EAAa,CAAC,QAAQ,CAAC,CAAA;AAEpD,QAAA,IAAA,CAAK,SAAS,IAAA,CAAK,KAAA,CAAM,GAAG,oBAAA,CAAqB,QAAA,EAAU,KAAK,CAAC,CAAA;AAAA,MACrE,CAAA,MAAO;AACH,QAAA,IAAA,CAAK,QAAA,CAAS,KAAK,KAAA,CAAM,EAAA,CAAG,QAAQ,IAAA,EAAM,EAAA,EAAI,QAAQ,CAAC,CAAA;AAAA,MAC3D;AAEA,MAAA,IAAA,CAAK,KAAA,EAAM;AAAA,IACf,CAAA;AAAA,IAEA,UAAA,EAAY,CAAC,GAAA,KAAgB;AACzB,MAAA,MAAM,IAAA,GAAO,YAAY,GAAG,CAAA;AAG5B,MAAA,IAAI,QAAQ,IAAA,EAAM;AAElB,MAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAG,GAAI,YAAA,EAAa;AAClC,MAAA,MAAM,EAAA,GAAK,KAAK,KAAA,CAAM,EAAA;AAEtB,MAAA,EAAA,CAAG,UAAA,CAAW,IAAA,EAAM,EAAA,EAAI,MAAA,CAAO,MAAM,IAAI,CAAA;AACzC,MAAA,EAAA,CAAG,OAAA,CAAQ,IAAA,EAAM,EAAA,EAAI,MAAA,CAAO,KAAA,CAAM,KAAK,MAAA,CAAO,EAAE,IAAA,EAAM,CAAC,CAAA;AACvD,MAAA,IAAA,CAAK,SAAS,EAAE,CAAA;AAChB,MAAA,IAAA,CAAK,KAAA,EAAM;AAAA,IACf,CAAA;AAAA,IAEA,YAAY,MAAM;AACd,MAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAG,GAAI,YAAA,EAAa;AAElC,MAAA,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,EAAA,CAAG,UAAA,CAAW,MAAM,EAAA,EAAI,MAAA,CAAO,KAAA,CAAM,IAAI,CAAC,CAAA;AACnE,MAAA,IAAA,CAAK,KAAA,EAAM;AAAA,IACf,CAAA;AAAA,IAEA,UAAU,MAAM;AACZ,MAAA,MAAM,EAAE,KAAA,EAAM,GAAI,IAAA,CAAK,KAAA,CAAM,SAAA;AAC7B,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,KAAA,EAAO,CAAA,IAAK,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,KAAK,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAA,CAAM,GAAA,GAAM,CAAC,CAAC,CAAA,CAAE,KAAA,EAAO,CAAA;AACjJ,MAAA,MAAM,IAAA,GAAO,UAAU,KAAA,CAAM,IAAA,GAAO,YAAY,QAAA,CAAS,KAAA,CAAM,IAAc,CAAA,GAAI,IAAA;AAEjF,MAAA,IAAI,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,UAAU,qBAAqB,CAAA;AAAA,IAC/D,CAAA;AAAA,IAEA,WAAA,EAAa,CAAC,GAAA,EAAa,KAAA,KAA4B;AACnD,MAAA,MAAM,OAAA,GAAU,iBAAiB,GAAG,CAAA;AAEpC,MAAA,IAAI,WAAW,IAAA,EAAM;AAGrB,MAAA,MAAM,SAAA,GAAY,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,MAAA,CAAO;AAAA,QACxC,GAAA,EAAK,OAAA;AAAA,QACL,GAAA,EAAK,gBAAA,CAAiB,KAAA,EAAO,GAAG,CAAA,IAAK,IAAA;AAAA,QACrC,KAAA,EAAO,eAAe,KAAA,EAAO,KAAA,IAAS,OAAO,IAAA,GAAO,MAAA,CAAO,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,QACvE,MAAA,EAAQ,eAAe,KAAA,EAAO,MAAA,IAAU,OAAO,IAAA,GAAO,MAAA,CAAO,KAAA,CAAM,MAAM,CAAC;AAAA,OAC7E,CAAA;AAED,MAAA,IAAA,CAAK,SAAS,IAAA,CAAK,KAAA,CAAM,EAAA,CAAG,oBAAA,CAAqB,SAAS,CAAC,CAAA;AAC3D,MAAA,IAAA,CAAK,KAAA,EAAM;AAAA,IACf;AAAA,GACJ;AACJ;AC7EO,SAAS,oBAAA,CAAqB,IAAA,EAAkB,MAAA,EAAgB,SAAA,EAAoC;AACvG,EAAA,MAAM,uBAAA,GAA0B,CAAC,eAAA,EAA+D,QAAA,KAA0B;AACtH,IAAA,IAAI,MAAA,GAAS,KAAA;AAEb,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,WAAA,CAAY,CAAC,IAAA,KAAS;AACjC,MAAA,IAAI,IAAA,CAAK,IAAA,KAAS,eAAA,EAAiB,MAAA,GAAS,IAAA;AAAA,IAChD,CAAC,CAAA;AAED,IAAA,IAAI,MAAA,EAAQ;AAEZ,IAAA,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,EAAA,CAAG,oBAAA,CAAqB,gBAAgB,MAAA,EAAQ,CAAA,CAAE,cAAA,EAAgB,CAAA;AAC3F,IAAA,QAAA,IAAW;AAAA,EACf,CAAA;AAEA,EAAA,OAAO;AAAA,IACH,iBAAiB,MAAM;AACnB,MAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAI,KAAA,EAAM,GAAI,KAAK,KAAA,CAAM,SAAA;AAEvC,MAAA,IAAI,KAAA,EAAO;AAEX,MAAA,MAAM,EAAA,GAAK,KAAK,KAAA,CAAM,EAAA;AAEtB,MAAA,KAAA,MAAW,QAAA,IAAY,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA,EAAG;AAChD,QAAA,EAAA,CAAG,UAAA,CAAW,IAAA,EAAM,EAAA,EAAI,QAAQ,CAAA;AAAA,MACpC;AAEA,MAAA,IAAA,CAAK,MAAM,GAAA,CAAI,YAAA,CAAa,MAAM,EAAA,EAAI,CAAC,MAAM,GAAA,KAAQ;AACjD,QAAA,IAAI,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,IAAA,KAAS,MAAA,CAAO,KAAA,CAAM,SAAA,IAAa,IAAA,CAAK,IAAA,KAAS,MAAA,CAAO,KAAA,CAAM,UAAA,EAAY;AACnG,UAAA,EAAA,CAAG,aAAA,CAAc,GAAA,EAAK,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA;AAAA,QAChD;AAAA,MACJ,CAAC,CAAA;AAED,MAAA,IAAA,CAAK,SAAS,EAAE,CAAA;AAChB,MAAA,IAAA,CAAK,KAAA,EAAM;AAAA,IACf,CAAA;AAAA,IAEA,OAAO,MAAM;AACT,MAAA,MAAM,OAAA,GAAU,SAAA,CAAU,IAAA,CAAK,KAAA,CAAM,KAAK,MAAM,CAAA;AAChD,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAE9C,MAAA,MAAA,CAAO,YAAA,CAAa,WAAW,gCAAgC,CAAA;AAC/D,MAAA,MAAA,CAAO,MAAM,QAAA,GAAW,OAAA;AACxB,MAAA,MAAA,CAAO,MAAM,KAAA,GAAQ,GAAA;AACrB,MAAA,MAAA,CAAO,MAAM,KAAA,GAAQ,GAAA;AACrB,MAAA,MAAA,CAAO,MAAM,MAAA,GAAS,GAAA;AACtB,MAAA,MAAA,CAAO,MAAM,MAAA,GAAS,MAAA;AACtB,MAAA,QAAA,CAAS,IAAA,CAAK,YAAY,MAAM,CAAA;AAEhC,MAAA,MAAM,MAAM,MAAA,CAAO,eAAA;AAEnB,MAAA,IAAI,GAAA,EAAK;AACL,QAAA,GAAA,CAAI,IAAA,EAAK;AACT,QAAA,GAAA,CAAI,KAAA;AAAA,UACA,sQAAsQ,OAAO,CAAA,cAAA;AAAA,SACjR;AACA,QAAA,GAAA,CAAI,KAAA,EAAM;AAEV,QAAA,MAAA,CAAO,eAAe,KAAA,EAAM;AAC5B,QAAA,MAAA,CAAO,eAAe,KAAA,EAAM;AAAA,MAChC;AAEA,MAAA,UAAA,CAAW,MAAM,MAAA,CAAO,MAAA,EAAO,EAAG,GAAI,CAAA;AAAA,IAC1C,CAAA;AAAA,IAEA,cAAc,MAAM,uBAAA,CAAwB,OAAO,KAAA,CAAM,wBAAA,EAA0B,WAAW,cAAc,CAAA;AAAA,IAC5G,iBAAiB,MAAM,uBAAA,CAAwB,OAAO,KAAA,CAAM,2BAAA,EAA6B,WAAW,iBAAiB,CAAA;AAAA,IAErH,MAAM,MAAM;AACR,MAAA,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA;AAC9B,MAAA,IAAA,CAAK,KAAA,EAAM;AAAA,IACf,CAAA;AAAA,IACA,MAAM,MAAM;AACR,MAAA,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA;AAC9B,MAAA,IAAA,CAAK,KAAA,EAAM;AAAA,IACf;AAAA,GACJ;AACJ;;;AC3EO,SAAS,cAAA,CAAe,IAAA,EAAkB,MAAA,EAAgB,SAAA,EAA6E,OAAA,EAA6F;AACvO,EAAA,MAAM,UAAA,GAAa,yBAAyB,IAAA,EAAM,MAAA,EAAQ,EAAE,cAAA,EAAgB,OAAA,EAAS,gBAAgB,CAAA;AACrG,EAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,IAAA,EAAM,MAAM,CAAA;AAC/C,EAAA,MAAM,KAAA,GAAQ,kBAAA,CAAmB,IAAA,EAAM,MAAM,CAAA;AAC7C,EAAA,MAAM,OAAA,GAAU,qBAAA,CAAsB,IAAA,EAAM,MAAM,CAAA;AAClD,EAAA,MAAM,UAAA,GAAa,oBAAA,CAAqB,IAAA,EAAM,MAAA,EAAQ,SAAS,CAAA;AAE/D,EAAA,OAAO;AAAA;AAAA,IAEH,MAAM,UAAA,CAAW,IAAA;AAAA,IACjB,QAAQ,UAAA,CAAW,MAAA;AAAA,IACnB,WAAW,UAAA,CAAW,SAAA;AAAA,IACtB,eAAe,UAAA,CAAW,aAAA;AAAA,IAC1B,WAAW,UAAA,CAAW,SAAA;AAAA,IACtB,aAAa,UAAA,CAAW,WAAA;AAAA,IACxB,MAAM,UAAA,CAAW,IAAA;AAAA,IACjB,WAAW,UAAA,CAAW,SAAA;AAAA,IACtB,iBAAiB,UAAA,CAAW,eAAA;AAAA;AAAA,IAG5B,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,WAAW,MAAA,CAAO,SAAA;AAAA,IAClB,WAAW,MAAA,CAAO,SAAA;AAAA,IAClB,YAAY,MAAA,CAAO,UAAA;AAAA,IACnB,sBAAsB,MAAA,CAAO,oBAAA;AAAA,IAC7B,WAAW,MAAA,CAAO,SAAA;AAAA;AAAA,IAGlB,YAAY,UAAA,CAAW,UAAA;AAAA,IACvB,UAAU,UAAA,CAAW,QAAA;AAAA,IACrB,iBAAiB,UAAA,CAAW,eAAA;AAAA,IAC5B,iBAAiB,UAAA,CAAW,eAAA;AAAA;AAAA,IAG5B,YAAY,KAAA,CAAM,UAAA;AAAA,IAClB,aAAa,KAAA,CAAM,WAAA;AAAA,IACnB,WAAW,KAAA,CAAM,SAAA;AAAA;AAAA,IAGjB,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,aAAa,OAAA,CAAQ,WAAA;AAAA;AAAA,IAGrB,KAAA,EAAO,CAAC,IAAA,EAAe,IAAA,KAAkB,WAAA,CAAY,IAAA,EAAM,MAAA,EAAQ,IAAA,IAAQ,CAAA,EAAG,IAAA,IAAQ,CAAA,EAAG,OAAA,EAAS,gBAAgB,CAAA;AAAA;AAAA,IAGlH,OAAO,UAAA,CAAW,KAAA;AAAA,IAClB,cAAc,UAAA,CAAW,YAAA;AAAA,IACzB,iBAAiB,UAAA,CAAW,eAAA;AAAA;AAAA,IAG5B,MAAM,UAAA,CAAW,IAAA;AAAA,IACjB,MAAM,UAAA,CAAW,IAAA;AAAA;AAAA,IAGjB,iBAAA,EAAmB,MAAM,iBAAA,CAAkB,IAAI,CAAA;AAAA;AAAA,IAG/C,QAAA,EAAU;AAAA,MACN,MAAM,MAAM;AACR,QAAA,YAAA,CAAa,OAAO,KAAA,CAAM,SAAS,EAAE,IAAA,CAAK,KAAA,EAAO,KAAK,QAAQ,CAAA;AAC9D,QAAA,IAAA,CAAK,KAAA,EAAM;AAAA,MACf,CAAA;AAAA,MACA,UAAU,MAAM;AACZ,QAAA,YAAA,CAAa,MAAA,CAAO,KAAA,CAAM,OAAA,EAAS,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA;AAC1E,QAAA,IAAA,CAAK,KAAA,EAAM;AAAA,MACf,CAAA;AAAA,MACA,UAAU,MAAM;AACZ,QAAA,YAAA,CAAa,MAAA,CAAO,KAAA,CAAM,OAAA,EAAS,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA;AAC1E,QAAA,IAAA,CAAK,KAAA,EAAM;AAAA,MACf,CAAA;AAAA,MACA,UAAU,MAAM;AACZ,QAAA,YAAA,CAAa,MAAA,CAAO,KAAA,CAAM,OAAA,EAAS,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA;AAC1E,QAAA,IAAA,CAAK,KAAA,EAAM;AAAA,MACf,CAAA;AAAA,MACA,YAAY,MAAM;AACd,QAAA,oBAAA,CAAqB,IAAA,EAAM,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,WAAW,CAAA;AAC3D,QAAA,IAAA,CAAK,KAAA,EAAM;AAAA,MACf,CAAA;AAAA,MACA,aAAa,MAAM;AACf,QAAA,oBAAA,CAAqB,IAAA,EAAM,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA;AAC5D,QAAA,IAAA,CAAK,KAAA,EAAM;AAAA,MACf,CAAA;AAAA,MACA,WAAW,MAAM;AACb,QAAA,oBAAA,CAAqB,IAAA,EAAM,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,UAAU,CAAA;AAC1D,QAAA,IAAA,CAAK,KAAA,EAAM;AAAA,MACf,CAAA;AAAA,MACA,YAAY,MAAM;AACd,QAAA,0BAAA,CAA2B,MAAM,MAAM,CAAA;AACvC,QAAA,IAAA,CAAK,KAAA,EAAM;AAAA,MACf,CAAA;AAAA,MACA,WAAW,MAAM;AACb,QAAA,YAAA,CAAa,OAAO,KAAA,CAAM,UAAU,EAAE,IAAA,CAAK,KAAA,EAAO,KAAK,QAAQ,CAAA;AAC/D,QAAA,IAAA,CAAK,KAAA,EAAM;AAAA,MACf;AAAA;AACJ,GACJ;AACJ","file":"chunk-6YDCG63C.mjs","sourcesContent":["import type { EditorView } from 'prosemirror-view';\nimport type { MarkType, Schema } from 'prosemirror-model';\nimport type { Transaction } from 'prosemirror-state';\nimport { toggleMark } from 'prosemirror-commands';\nimport { CellSelection } from 'prosemirror-tables';\nimport { getMarkAttrs } from '../state/selection';\nimport { DEFAULT_HIGHLIGHT_COLOR } from './constants';\n\nfunction toggleMarkCommand(view: EditorView, markType: MarkType) {\n toggleMark(markType)(view.state, view.dispatch);\n view.focus();\n}\n\n// Apply a textStyle attr over [from,to], preserving each node's other attrs.\nfunction applyStyleToRange(tr: Transaction, markType: MarkType, attr: string, value: string | null, from: number, to: number) {\n const ranges: { from: number; to: number; attrs: Record<string, unknown> }[] = [];\n\n tr.doc.nodesBetween(from, to, (node, pos) => {\n if (!node.isText) return;\n\n const existingMark = markType.isInSet(node.marks);\n const existingAttrs = existingMark ? { ...existingMark.attrs } : {};\n const mergedAttrs = { ...existingAttrs, [attr]: value || null };\n\n ranges.push({ from: Math.max(pos, from), to: Math.min(pos + node.nodeSize, to), attrs: mergedAttrs });\n });\n\n tr.removeMark(from, to, markType);\n\n for (const range of ranges) {\n if (Object.values(range.attrs).some((v) => v != null)) {\n tr.addMark(range.from, range.to, markType.create(range.attrs));\n }\n }\n\n // Fallback: empty cell/range but setting a value — apply directly.\n if (ranges.length === 0 && value) {\n tr.addMark(from, to, markType.create({ [attr]: value }));\n }\n}\n\nfunction applyTextStyle(view: EditorView, schema: Schema, attr: string, value: string | null) {\n const markType = schema.marks.textStyle;\n const { selection } = view.state;\n const { empty } = selection;\n\n if (empty) {\n // Apply to stored marks for next typed content\n const currentAttrs = getMarkAttrs(view.state, markType) || {};\n const newAttrs = { ...currentAttrs, [attr]: value || null };\n const hasValue = Object.values(newAttrs).some((v) => v != null);\n const tr = hasValue ? view.state.tr.addStoredMark(markType.create(newAttrs)) : view.state.tr.removeStoredMark(markType);\n\n view.dispatch(tr);\n view.focus();\n\n return;\n }\n\n const tr = view.state.tr;\n\n if (selection instanceof CellSelection) {\n // Apply to every selected cell, not just the flat anchor→head range.\n selection.forEachCell((cell, pos) => {\n applyStyleToRange(tr, markType, attr, value, pos + 1, pos + cell.nodeSize - 1);\n });\n } else {\n applyStyleToRange(tr, markType, attr, value, selection.from, selection.to);\n }\n\n view.dispatch(tr);\n view.focus();\n}\n\nfunction isHighlightActive(view: EditorView, schema: Schema): boolean {\n const attrs = getMarkAttrs(view.state, schema.marks.textStyle);\n\n return !!attrs?.backgroundColor;\n}\n\nexport function createFormattingCommands(view: EditorView, schema: Schema, options?: { highlightColor?: string | null }) {\n const highlightColor = options?.highlightColor || DEFAULT_HIGHLIGHT_COLOR;\n\n return {\n bold: () => toggleMarkCommand(view, schema.marks.bold),\n italic: () => toggleMarkCommand(view, schema.marks.italic),\n underline: () => toggleMarkCommand(view, schema.marks.underline),\n strikethrough: () => toggleMarkCommand(view, schema.marks.strikethrough),\n subscript: () => toggleMarkCommand(view, schema.marks.subscript),\n superscript: () => toggleMarkCommand(view, schema.marks.superscript),\n code: () => toggleMarkCommand(view, schema.marks.code),\n fontFamily: (family: string | null) => applyTextStyle(view, schema, 'fontFamily', family),\n fontSize: (size: string | null) => applyTextStyle(view, schema, 'fontSize', size),\n foregroundColor: (color: string | null) => applyTextStyle(view, schema, 'color', color),\n backgroundColor: (color: string | null) => applyTextStyle(view, schema, 'backgroundColor', color),\n highlight: () => applyTextStyle(view, schema, 'backgroundColor', isHighlightActive(view, schema) ? null : highlightColor)\n };\n}\n","import type { Fragment, Node, NodeType, Schema } from 'prosemirror-model';\nimport { TextSelection } from 'prosemirror-state';\nimport { liftListItem } from 'prosemirror-schema-list';\nimport type { EditorView } from 'prosemirror-view';\nimport { wrapInListNormalized } from './normalize';\n\nfunction currentListItemType(view: EditorView, schema: Schema): NodeType | null {\n const { $from } = view.state.selection;\n\n for (let depth = $from.depth; depth > 0; depth--) {\n const node = $from.node(depth);\n\n if (node.type === schema.nodes.list_item) return schema.nodes.list_item;\n if (node.type === schema.nodes.check_list_item) return schema.nodes.check_list_item;\n }\n\n return null;\n}\n\n/**\n * Find the list node around the cursor/selection.\n */\nfunction findList(view: EditorView, schema: Schema): { pos: number; node: Node; depth: number } | null {\n const { $from } = view.state.selection;\n const listTypes = [schema.nodes.bullet_list, schema.nodes.ordered_list, schema.nodes.check_list];\n\n // Walk up from cursor position\n for (let depth = $from.depth; depth > 0; depth--) {\n const node = $from.node(depth);\n\n if (listTypes.includes(node.type)) {\n return { pos: $from.before(depth), node, depth };\n }\n }\n\n // Selection at doc level (e.g. select all) — scan for first list in selection range\n const { from, to } = view.state.selection;\n let found: { pos: number; node: Node; depth: number } | null = null;\n\n view.state.doc.nodesBetween(from, to, (node, pos) => {\n if (found) return false;\n\n if (listTypes.includes(node.type)) {\n const $pos = view.state.doc.resolve(pos);\n\n found = { pos, node, depth: $pos.depth };\n\n return false;\n }\n\n return undefined;\n });\n\n return found;\n}\n\n/**\n * Recursively convert a node to the target list type: list items are re-typed\n * and any nested sub-list is converted too, so switching e.g. bullet→ordered\n * doesn't leave nested sub-lists in the old type.\n */\nfunction convertNode(node: Node, targetListType: NodeType, targetItemType: NodeType, schema: Schema): Node {\n const listTypes = [schema.nodes.bullet_list, schema.nodes.ordered_list, schema.nodes.check_list];\n const itemTypes = [schema.nodes.list_item, schema.nodes.check_list_item];\n\n if (listTypes.includes(node.type)) {\n const children: Node[] = [];\n\n node.content.forEach((child) => children.push(convertNode(child, targetListType, targetItemType, schema)));\n\n return targetListType.create(null, children);\n }\n\n if (itemTypes.includes(node.type)) {\n const inner: Node[] = [];\n\n node.content.forEach((child) => inner.push(convertNode(child, targetListType, targetItemType, schema)));\n const attrs = targetItemType === schema.nodes.check_list_item ? { checked: false } : null;\n\n return targetItemType.create(attrs, inner, node.marks);\n }\n\n return node;\n}\n\nfunction convertItems(content: Fragment, targetListType: NodeType, targetItemType: NodeType, schema: Schema): Node[] {\n const items: Node[] = [];\n\n content.forEach((child) => items.push(convertNode(child, targetListType, targetItemType, schema)));\n\n return items;\n}\n\nfunction findAllLists(view: EditorView, schema: Schema): { pos: number; node: Node; depth: number }[] {\n const { from, to } = view.state.selection;\n const listTypes = [schema.nodes.bullet_list, schema.nodes.ordered_list, schema.nodes.check_list];\n const results: { pos: number; node: Node; depth: number }[] = [];\n\n view.state.doc.nodesBetween(from, to, (node, pos) => {\n if (listTypes.includes(node.type)) {\n const $pos = view.state.doc.resolve(pos);\n\n results.push({ pos, node, depth: $pos.depth });\n\n return false;\n }\n\n return undefined;\n });\n\n return results;\n}\n\nfunction toggleList(view: EditorView, schema: Schema, targetListType: NodeType, targetItemType: NodeType) {\n const existing = findList(view, schema);\n\n if (existing && existing.node.type === targetListType) {\n // Already in this list type — unwrap\n const itemType = currentListItemType(view, schema) || targetItemType;\n\n liftListItem(itemType)(view.state, view.dispatch);\n view.focus();\n\n return;\n }\n\n if (existing) {\n // Convert all lists in the selection to the target type\n const allLists = findAllLists(view, schema);\n\n if (allLists.length > 0) {\n const tr = view.state.tr;\n const { anchor, head } = view.state.selection;\n\n for (let i = allLists.length - 1; i >= 0; i--) {\n const list = allLists[i];\n const newList = targetListType.create(null, convertItems(list.node.content, targetListType, targetItemType, schema));\n\n tr.replaceWith(list.pos, list.pos + list.node.nodeSize, newList);\n }\n\n // A type conversion replaces each list node with one of identical inner\n // structure/size, so absolute cursor positions are unchanged. Mapping through\n // the replace collapses interior positions to a list boundary (cursor would\n // jump to the first item), so restore the original positions directly.\n try {\n tr.setSelection(TextSelection.between(tr.doc.resolve(anchor), tr.doc.resolve(head)));\n } catch {\n /* keep mapped default if resolve fails */\n }\n\n view.dispatch(tr.scrollIntoView());\n view.focus();\n\n return;\n }\n }\n\n // Not in any list — wrap in a new list (normalizing non-paragraph blocks).\n wrapInListNormalized(view, schema, targetListType);\n view.focus();\n}\n\nexport function createListCommands(view: EditorView, schema: Schema) {\n return {\n bulletList: () => toggleList(view, schema, schema.nodes.bullet_list, schema.nodes.list_item),\n orderedList: () => toggleList(view, schema, schema.nodes.ordered_list, schema.nodes.list_item),\n checkList: () => toggleList(view, schema, schema.nodes.check_list, schema.nodes.check_list_item)\n };\n}\n","import type { EditorView } from 'prosemirror-view';\nimport type { Node as PMNode } from 'prosemirror-model';\nimport type { Transaction } from 'prosemirror-state';\nimport { addColumnAfter, CellSelection, TableMap } from 'prosemirror-tables';\n\n/**\n * Internal table helpers shared by the public table commands in `tables.ts`.\n * Split out to keep `tables.ts` focused on the public surface (insertTable,\n * select*, and the three command factories). None of these are part of the\n * package's public API.\n */\n\n/** Find the table node and start position from the current selection. */\nexport function findTable(view: EditorView) {\n const { $from } = view.state.selection;\n\n for (let depth = $from.depth; depth > 0; depth--) {\n if ($from.node(depth).type.name === 'table') {\n return { node: $from.node(depth), start: $from.before(depth) + 1 };\n }\n }\n\n return null;\n}\n\n/** Select an entire column by creating a CellSelection from the first to last cell. */\nexport function selectColumn(view: EditorView, colIndex: number) {\n const table = findTable(view);\n\n if (!table) return;\n\n const map = TableMap.get(table.node);\n\n if (colIndex >= map.width) return;\n\n const firstCellPos = table.start + map.map[colIndex];\n const lastCellPos = table.start + map.map[(map.height - 1) * map.width + colIndex];\n const $first = view.state.doc.resolve(firstCellPos);\n const $last = view.state.doc.resolve(lastCellPos);\n\n view.dispatch(view.state.tr.setSelection(CellSelection.create(view.state.doc, $first.pos, $last.pos)));\n}\n\n/** Select an entire row by creating a CellSelection from the first to last cell. */\nexport function selectRow(view: EditorView, rowIndex: number) {\n const table = findTable(view);\n\n if (!table) return;\n\n const map = TableMap.get(table.node);\n\n if (rowIndex >= map.height) return;\n\n const firstCellPos = table.start + map.map[rowIndex * map.width];\n const lastCellPos = table.start + map.map[rowIndex * map.width + (map.width - 1)];\n const $first = view.state.doc.resolve(firstCellPos);\n const $last = view.state.doc.resolve(lastCellPos);\n\n view.dispatch(view.state.tr.setSelection(CellSelection.create(view.state.doc, $first.pos, $last.pos)));\n}\n\n/** Move a column left or right by swapping cell content in each row. */\nexport function moveColumn(view: EditorView, colIndex: number, direction: -1 | 1) {\n const table = findTable(view);\n\n if (!table) return;\n\n const map = TableMap.get(table.node);\n const targetCol = colIndex + direction;\n\n if (targetCol < 0 || targetCol >= map.width) return;\n\n const tr = view.state.tr;\n\n // Process rows bottom-to-top to avoid position shifting\n for (let row = map.height - 1; row >= 0; row--) {\n const fromCellPos = table.start + map.map[row * map.width + colIndex];\n const toCellPos = table.start + map.map[row * map.width + targetCol];\n const fromCell = view.state.doc.nodeAt(fromCellPos);\n const toCell = view.state.doc.nodeAt(toCellPos);\n\n if (!fromCell || !toCell) return;\n if ((fromCell.attrs.colspan ?? 1) > 1 || (toCell.attrs.colspan ?? 1) > 1 || (fromCell.attrs.rowspan ?? 1) > 1 || (toCell.attrs.rowspan ?? 1) > 1) return;\n\n // Swap by replacing both cells — do the later position first to avoid mapping issues\n const [firstPos, firstCell, secondPos, secondCell] = fromCellPos < toCellPos ? [fromCellPos, fromCell, toCellPos, toCell] : [toCellPos, toCell, fromCellPos, fromCell];\n\n tr.replaceWith(tr.mapping.map(secondPos), tr.mapping.map(secondPos + secondCell.nodeSize), firstCell.copy(firstCell.content));\n tr.replaceWith(tr.mapping.map(firstPos), tr.mapping.map(firstPos + firstCell.nodeSize), secondCell.copy(secondCell.content));\n }\n\n if (tr.docChanged) {\n view.dispatch(tr);\n view.focus();\n }\n}\n\n/** Move a row up or down by swapping row nodes. */\nexport function moveRow(view: EditorView, rowIndex: number, direction: -1 | 1) {\n const table = findTable(view);\n\n if (!table) return;\n\n const targetRow = rowIndex + direction;\n\n if (targetRow < 0 || targetRow >= table.node.childCount) return;\n\n const fromRow = table.node.child(rowIndex);\n const toRow = table.node.child(targetRow);\n\n // Merged cells make the two rows structurally different — refuse to swap.\n if (fromRow.childCount !== toRow.childCount) return;\n\n for (let col = 0; col < fromRow.childCount; col++) {\n const a = fromRow.child(col);\n const b = toRow.child(col);\n\n if ((a.attrs.rowspan ?? 1) > 1 || (b.attrs.rowspan ?? 1) > 1 || (a.attrs.colspan ?? 1) > 1 || (b.attrs.colspan ?? 1) > 1) return;\n }\n\n let fromRowPos = table.start;\n\n for (let i = 0; i < rowIndex; i++) {\n fromRowPos += table.node.child(i).nodeSize;\n }\n\n let toRowPos = table.start;\n\n for (let i = 0; i < targetRow; i++) {\n toRowPos += table.node.child(i).nodeSize;\n }\n\n const tr = view.state.tr;\n\n // Swap: replace the later row first, then the earlier one\n const [firstPos, firstRow, secondPos, secondRow] = fromRowPos < toRowPos ? [fromRowPos, fromRow, toRowPos, toRow] : [toRowPos, toRow, fromRowPos, fromRow];\n\n tr.replaceWith(secondPos, secondPos + secondRow.nodeSize, firstRow.copy(firstRow.content));\n tr.replaceWith(firstPos, firstPos + firstRow.nodeSize, secondRow.copy(secondRow.content));\n\n if (tr.docChanged) {\n view.dispatch(tr);\n view.focus();\n }\n}\n\n/** Set text-align on all paragraph/heading nodes within a cell at the given position. */\nfunction alignCell(tr: Transaction, cellPos: number, doc: PMNode, alignment: string) {\n const cell = doc.nodeAt(cellPos);\n\n if (!cell) return;\n\n cell.forEach((child, offset) => {\n if (child.type.name === 'paragraph' || child.type.name === 'heading') {\n const pos = cellPos + 1 + offset;\n\n tr.setNodeMarkup(tr.mapping.map(pos), null, { ...child.attrs, textAlign: alignment === 'left' ? null : alignment });\n }\n });\n}\n\n/** Set text-align on all cells in a column. */\nexport function alignColumn(view: EditorView, colIndex: number, alignment: string) {\n const table = findTable(view);\n\n if (!table) return;\n\n const map = TableMap.get(table.node);\n const tr = view.state.tr;\n\n for (let row = 0; row < map.height; row++) {\n const cellPos = table.start + map.map[row * map.width + colIndex];\n\n alignCell(tr, cellPos, view.state.doc, alignment);\n }\n\n if (tr.docChanged) {\n view.dispatch(tr);\n view.focus();\n }\n}\n\n/** Set text-align on all cells in a row. */\nexport function alignRow(view: EditorView, rowIndex: number, alignment: string) {\n const table = findTable(view);\n\n if (!table) return;\n\n const map = TableMap.get(table.node);\n const tr = view.state.tr;\n\n for (let col = 0; col < map.width; col++) {\n const cellPos = table.start + map.map[rowIndex * map.width + col];\n\n alignCell(tr, cellPos, view.state.doc, alignment);\n }\n\n if (tr.docChanged) {\n view.dispatch(tr);\n view.focus();\n }\n}\n\n/** Set text-align on the current cell (the one containing the cursor). */\nexport function alignCurrentCell(view: EditorView, alignment: string) {\n const { $from } = view.state.selection;\n\n for (let depth = $from.depth; depth > 0; depth--) {\n const node = $from.node(depth);\n\n if (node.type.name === 'table_cell' || node.type.name === 'table_header') {\n const cellPos = $from.before(depth);\n const tr = view.state.tr;\n\n alignCell(tr, cellPos, view.state.doc, alignment);\n\n if (tr.docChanged) {\n view.dispatch(tr);\n view.focus();\n }\n\n return;\n }\n }\n}\n\n/** Apply background color to a cell by setting its backgroundColor attr. */\nfunction setCellBackgroundColor(tr: Transaction, cellPos: number, color: string | null) {\n const cell = tr.doc.nodeAt(tr.mapping.map(cellPos));\n\n if (!cell) return;\n\n tr.setNodeMarkup(tr.mapping.map(cellPos), null, { ...cell.attrs, backgroundColor: color });\n}\n\n/** Apply foreground color to all text in a cell using the textStyle mark. */\nfunction setCellForegroundColor(view: EditorView, cellPos: number, color: string) {\n const cell = view.state.doc.nodeAt(cellPos);\n\n if (!cell) return;\n\n const from = cellPos + 1;\n const to = cellPos + cell.nodeSize - 1;\n const textStyleType = view.state.schema.marks.textStyle;\n\n if (!textStyleType) return;\n\n const tr = view.state.tr;\n\n if (color) {\n tr.addMark(from, to, textStyleType.create({ color }));\n } else {\n tr.removeMark(from, to, textStyleType);\n }\n\n view.dispatch(tr);\n}\n\n/** Apply color to cells in a column. */\nexport function colorColumn(view: EditorView, colIndex: number, color: string, property: 'color' | 'backgroundColor') {\n const table = findTable(view);\n\n if (!table) return;\n\n const map = TableMap.get(table.node);\n\n if (property === 'backgroundColor') {\n const tr = view.state.tr;\n\n for (let row = 0; row < map.height; row++) {\n setCellBackgroundColor(tr, table.start + map.map[row * map.width + colIndex], color || null);\n }\n\n if (tr.docChanged) view.dispatch(tr);\n } else {\n for (let row = 0; row < map.height; row++) {\n setCellForegroundColor(view, table.start + map.map[row * map.width + colIndex], color);\n }\n }\n\n view.focus();\n}\n\n/** Apply color to cells in a row. */\nexport function colorRow(view: EditorView, rowIndex: number, color: string, property: 'color' | 'backgroundColor') {\n const table = findTable(view);\n\n if (!table) return;\n\n const map = TableMap.get(table.node);\n\n if (property === 'backgroundColor') {\n const tr = view.state.tr;\n\n for (let col = 0; col < map.width; col++) {\n setCellBackgroundColor(tr, table.start + map.map[rowIndex * map.width + col], color || null);\n }\n\n if (tr.docChanged) view.dispatch(tr);\n } else {\n for (let col = 0; col < map.width; col++) {\n setCellForegroundColor(view, table.start + map.map[rowIndex * map.width + col], color);\n }\n }\n\n view.focus();\n}\n\n/** Apply color to the current cell. */\nexport function colorCurrentCell(view: EditorView, color: string, property: 'color' | 'backgroundColor') {\n const { $from } = view.state.selection;\n\n for (let depth = $from.depth; depth > 0; depth--) {\n const node = $from.node(depth);\n\n if (node.type.name === 'table_cell' || node.type.name === 'table_header') {\n const cellPos = $from.before(depth);\n\n if (property === 'backgroundColor') {\n const tr = view.state.tr;\n\n setCellBackgroundColor(tr, cellPos, color || null);\n\n if (tr.docChanged) view.dispatch(tr);\n } else {\n setCellForegroundColor(view, cellPos, color);\n }\n\n view.focus();\n\n return;\n }\n }\n}\n\n/** Duplicate a column: add a new column after and copy cell content from the source. */\nexport function duplicateColumn(view: EditorView, colIndex: number) {\n const source = findTable(view);\n\n if (!source) return;\n\n // Bail on merged cells in the source column — the duplicate would lose data.\n const sourceMap = TableMap.get(source.node);\n\n for (let row = 0; row < sourceMap.height; row++) {\n const cell = view.state.doc.nodeAt(source.start + sourceMap.map[row * sourceMap.width + colIndex]);\n\n if (cell && ((cell.attrs.colspan ?? 1) > 1 || (cell.attrs.rowspan ?? 1) > 1)) return;\n }\n\n addColumnAfter(view.state, view.dispatch);\n\n // Now copy content from source column to the new column (colIndex + 1)\n const table = findTable(view);\n\n if (!table) return;\n\n const map = TableMap.get(table.node);\n const tr = view.state.tr;\n\n for (let row = 0; row < map.height; row++) {\n const sourceCellPos = table.start + map.map[row * map.width + colIndex];\n const targetCellPos = table.start + map.map[row * map.width + colIndex + 1];\n const sourceCell = view.state.doc.nodeAt(sourceCellPos);\n const targetCell = view.state.doc.nodeAt(targetCellPos);\n\n if (!sourceCell || !targetCell) continue;\n\n // Replace the target cell's content with a copy of the source cell's content\n tr.replaceWith(tr.mapping.map(targetCellPos + 1), tr.mapping.map(targetCellPos + targetCell.nodeSize - 1), sourceCell.content);\n }\n\n if (tr.docChanged) {\n view.dispatch(tr);\n }\n\n view.focus();\n}\n\n/** Duplicate a row: insert a copy of the row after the current one. */\nexport function duplicateRow(view: EditorView, rowIndex: number) {\n const table = findTable(view);\n\n if (!table) return;\n\n const row = table.node.child(rowIndex);\n\n // Calculate the position after the current row\n let rowEndPos = table.start;\n\n for (let i = 0; i <= rowIndex; i++) {\n rowEndPos += table.node.child(i).nodeSize;\n }\n\n const tr = view.state.tr.insert(rowEndPos, row.copy(row.content));\n\n view.dispatch(tr);\n view.focus();\n}\n","import type { EditorView } from 'prosemirror-view';\nimport type { Schema } from 'prosemirror-model';\nimport type { TextEditorTableColumnCommands, TextEditorTableRowCommands, TextEditorTableCellCommands } from '@primeui/texteditor-types';\nimport { addColumnAfter, addColumnBefore, addRowAfter, addRowBefore, deleteColumn, deleteRow, deleteTable, mergeCells, splitCell, toggleHeaderCell, toggleHeaderColumn, toggleHeaderRow } from 'prosemirror-tables';\nimport { TextSelection } from 'prosemirror-state';\nimport { alignColumn, alignCurrentCell, alignRow, colorColumn, colorCurrentCell, colorRow, duplicateColumn, duplicateRow, moveColumn, moveRow, selectColumn, selectRow } from './tableHelpers';\n\n// selectColumn/selectRow live in tableHelpers (shared with move*), but are part\n// of the public command surface — re-export so consumers keep importing from here.\nexport { selectColumn, selectRow };\n\n/**\n * Insert a table with the given number of rows and columns.\n */\nexport function insertTable(view: EditorView, schema: Schema, rows: number = 3, cols: number = 3, defaultCellWidth?: number) {\n const cells: ReturnType<typeof schema.nodes.table_cell.create>[] = [];\n const cellAttrs = defaultCellWidth ? { colwidth: [defaultCellWidth] } : null;\n\n for (let i = 0; i < cols; i++) {\n cells.push(schema.nodes.table_cell.create(cellAttrs, schema.nodes.paragraph.create()));\n }\n\n const tableRows: ReturnType<typeof schema.nodes.table_row.create>[] = [];\n\n for (let i = 0; i < rows; i++) {\n const rowCells = cells.map((cell) => cell.copy(cell.content));\n\n tableRows.push(schema.nodes.table_row.create(null, rowCells));\n }\n\n const table = schema.nodes.table.create(null, tableRows);\n const $from = view.state.selection.$from;\n const parent = $from.node($from.depth);\n const tr = view.state.tr;\n let tablePos: number;\n\n if (parent.isTextblock && parent.content.size === 0) {\n // Empty block — replace it with the table\n tablePos = $from.before($from.depth);\n tr.replaceWith(tablePos, tablePos + parent.nodeSize, table);\n } else {\n // Non-empty block — insert table after the current top-level block\n tablePos = $from.after(1);\n tr.insert(tablePos, table);\n }\n\n // Place cursor inside the first cell's paragraph (table > tr > td > p, +3 from table pos)\n const cellParagraphPos = tablePos + 3;\n const selection = TextSelection.findFrom(tr.doc.resolve(cellParagraphPos), 1, true);\n\n if (selection) tr.setSelection(selection);\n\n view.dispatch(tr.scrollIntoView());\n view.focus();\n}\n\n/**\n * Create table column commands for the downloadable UI components.\n */\nexport function createTableColumnCommands(view: EditorView, schema: Schema, _colIndex: number, onDismiss: () => void): TextEditorTableColumnCommands {\n const run = (cmd: (state: typeof view.state, dispatch?: typeof view.dispatch) => boolean) => {\n cmd(view.state, view.dispatch);\n view.focus();\n onDismiss();\n };\n\n return {\n insertBefore: () => run(addColumnBefore),\n insertAfter: () => run(addColumnAfter),\n delete: () => run(deleteColumn),\n moveLeft: () => {\n moveColumn(view, _colIndex, -1);\n selectColumn(view, _colIndex - 1);\n onDismiss();\n },\n moveRight: () => {\n moveColumn(view, _colIndex, 1);\n selectColumn(view, _colIndex + 1);\n onDismiss();\n },\n duplicate: () => {\n duplicateColumn(view, _colIndex);\n onDismiss();\n },\n align: (value: string) => {\n alignColumn(view, _colIndex, value);\n onDismiss();\n },\n toggleHeader: () => run(toggleHeaderColumn),\n foregroundColor: (color: string) => {\n colorColumn(view, _colIndex, color, 'color');\n onDismiss();\n },\n backgroundColor: (color: string) => {\n colorColumn(view, _colIndex, color, 'backgroundColor');\n onDismiss();\n }\n };\n}\n\n/**\n * Create table row commands for the downloadable UI components.\n */\nexport function createTableRowCommands(view: EditorView, schema: Schema, _rowIndex: number, onDismiss: () => void): TextEditorTableRowCommands {\n const run = (cmd: (state: typeof view.state, dispatch?: typeof view.dispatch) => boolean) => {\n cmd(view.state, view.dispatch);\n view.focus();\n onDismiss();\n };\n\n return {\n insertBefore: () => run(addRowBefore),\n insertAfter: () => run(addRowAfter),\n delete: () => run(deleteRow),\n moveUp: () => {\n moveRow(view, _rowIndex, -1);\n selectRow(view, _rowIndex - 1);\n onDismiss();\n },\n moveDown: () => {\n moveRow(view, _rowIndex, 1);\n selectRow(view, _rowIndex + 1);\n onDismiss();\n },\n duplicate: () => {\n duplicateRow(view, _rowIndex);\n onDismiss();\n },\n deleteTable: () => run(deleteTable),\n align: (value: string) => {\n alignRow(view, _rowIndex, value);\n onDismiss();\n },\n toggleHeader: () => run(toggleHeaderRow),\n foregroundColor: (color: string) => {\n colorRow(view, _rowIndex, color, 'color');\n onDismiss();\n },\n backgroundColor: (color: string) => {\n colorRow(view, _rowIndex, color, 'backgroundColor');\n onDismiss();\n }\n };\n}\n\n/**\n * Create table cell commands for the downloadable UI components.\n */\nexport function createTableCellCommands(view: EditorView, schema: Schema, onDismiss: () => void): TextEditorTableCellCommands {\n return {\n clearContents: () => {\n // Replace cell content with empty paragraph\n const { $from } = view.state.selection;\n\n for (let depth = $from.depth; depth > 0; depth--) {\n if ($from.node(depth).type === schema.nodes.table_cell || $from.node(depth).type === schema.nodes.table_header) {\n const cellStart = $from.start(depth);\n const cellEnd = $from.end(depth);\n const tr = view.state.tr.replaceWith(cellStart, cellEnd, schema.nodes.paragraph.create());\n\n view.dispatch(tr);\n break;\n }\n }\n\n view.focus();\n onDismiss();\n },\n align: (value: string) => {\n alignCurrentCell(view, value);\n onDismiss();\n },\n mergeCells: () => {\n mergeCells(view.state, view.dispatch);\n view.focus();\n onDismiss();\n },\n splitCell: () => {\n splitCell(view.state, view.dispatch);\n view.focus();\n onDismiss();\n },\n toggleHeader: () => {\n toggleHeaderCell(view.state, view.dispatch);\n view.focus();\n onDismiss();\n },\n foregroundColor: (color: string) => {\n colorCurrentCell(view, color, 'color');\n onDismiss();\n },\n backgroundColor: (color: string) => {\n colorCurrentCell(view, color, 'backgroundColor');\n onDismiss();\n }\n };\n}\n","import type { MarkType, Node as PMNode } from 'prosemirror-model';\n\n// Returns the full {from,to} extent of `markType` (matching attrs) covering `pos`, or null if absent.\nexport function findMarkRange(doc: PMNode, pos: number, markType: MarkType): { from: number; to: number } | null {\n const $pos = doc.resolve(pos);\n const parent = $pos.parent;\n const parentStart = $pos.start();\n const markAt = (i: number) => (i >= 0 && i < parent.childCount ? markType.isInSet(parent.child(i).marks) || null : null);\n\n let index = $pos.index();\n let anchor = markAt(index);\n\n if (!anchor && markAt(index - 1)) {\n index -= 1;\n anchor = markAt(index);\n }\n\n if (!anchor) return null;\n\n const sameMark = (i: number) => {\n const m = markAt(i);\n\n return !!m && m.eq(anchor!);\n };\n\n let start = index;\n let end = index;\n\n while (start > 0 && sameMark(start - 1)) start--;\n while (end < parent.childCount - 1 && sameMark(end + 1)) end++;\n\n let from = parentStart;\n\n for (let i = 0; i < start; i++) from += parent.child(i).nodeSize;\n\n let to = from;\n\n for (let i = start; i <= end; i++) to += parent.child(i).nodeSize;\n\n return { from, to };\n}\n","import type { EditorView } from 'prosemirror-view';\nimport type { Schema } from 'prosemirror-model';\nimport type { ImageAttributes } from '@primeui/texteditor-types';\nimport { sanitizeUrl, sanitizeImageUrl, sanitizeTextAttr } from '../utils/url';\nimport { parseDimension } from '../schema/nodes';\nimport { findMarkRange } from './markRange';\n\nexport function createContentCommands(view: EditorView, schema: Schema) {\n const getLinkRange = (): { from: number; to: number } => {\n const { from, to, empty } = view.state.selection;\n\n if (!empty) return { from, to };\n\n return findMarkRange(view.state.doc, from, schema.marks.link) ?? { from, to };\n };\n\n return {\n insertLink: (url: string, text?: string) => {\n const href = sanitizeUrl(url);\n\n // Refuse to create a link with an unsafe scheme.\n if (href == null) return;\n\n const { from, to, empty } = view.state.selection;\n const linkMark = schema.marks.link.create({ href });\n\n if (empty && text) {\n const textNode = schema.text(text, [linkMark]);\n\n view.dispatch(view.state.tr.replaceSelectionWith(textNode, false));\n } else if (empty) {\n const displayText = href;\n const textNode = schema.text(displayText, [linkMark]);\n\n view.dispatch(view.state.tr.replaceSelectionWith(textNode, false));\n } else {\n view.dispatch(view.state.tr.addMark(from, to, linkMark));\n }\n\n view.focus();\n },\n\n updateLink: (url: string) => {\n const href = sanitizeUrl(url);\n\n // Refuse to update a link to an unsafe scheme.\n if (href == null) return;\n\n const { from, to } = getLinkRange();\n const tr = view.state.tr;\n\n tr.removeMark(from, to, schema.marks.link);\n tr.addMark(from, to, schema.marks.link.create({ href }));\n view.dispatch(tr);\n view.focus();\n },\n\n removeLink: () => {\n const { from, to } = getLinkRange();\n\n view.dispatch(view.state.tr.removeMark(from, to, schema.marks.link));\n view.focus();\n },\n\n openLink: () => {\n const { $from } = view.state.selection;\n const linkMark = schema.marks.link.isInSet($from.marks()) ?? schema.marks.link.isInSet(view.state.doc.resolve(Math.max(0, $from.pos - 1)).marks());\n const href = linkMark?.attrs.href ? sanitizeUrl(linkMark.attrs.href as string) : null;\n\n if (href) window.open(href, '_blank', 'noopener,noreferrer');\n },\n\n insertImage: (src: string, attrs?: ImageAttributes) => {\n const safeSrc = sanitizeImageUrl(src);\n\n if (safeSrc == null) return;\n\n // Sanitize attrs like the parse path (command path also feeds getJSON).\n const imageNode = schema.nodes.image.create({\n src: safeSrc,\n alt: sanitizeTextAttr(attrs?.alt) || null,\n width: parseDimension(attrs?.width == null ? null : String(attrs.width)),\n height: parseDimension(attrs?.height == null ? null : String(attrs.height))\n });\n\n view.dispatch(view.state.tr.replaceSelectionWith(imageNode));\n view.focus();\n }\n };\n}\n","import type { EditorView } from 'prosemirror-view';\nimport type { Schema } from 'prosemirror-model';\nimport { undo, redo } from 'prosemirror-history';\nimport { docToHtml } from '../serialization/htmlSerializer';\n\nexport interface EditorCommandCallbacks {\n onUploadImages?: () => void;\n onUploadDocuments?: () => void;\n}\n\n// Editor-level commands (clear formatting, print, upload placeholders, history).\n// Kept out of the aggregator so index.ts stays a thin assembler.\nexport function createEditorCommands(view: EditorView, schema: Schema, callbacks?: EditorCommandCallbacks) {\n const insertUploadPlaceholder = (placeholderType: typeof schema.nodes.image_upload_placeholder, onInsert?: () => void) => {\n let exists = false;\n\n view.state.doc.descendants((node) => {\n if (node.type === placeholderType) exists = true;\n });\n\n if (exists) return;\n\n view.dispatch(view.state.tr.replaceSelectionWith(placeholderType.create()).scrollIntoView());\n onInsert?.();\n };\n\n return {\n clearFormatting: () => {\n const { from, to, empty } = view.state.selection;\n\n if (empty) return;\n\n const tr = view.state.tr;\n\n for (const markType of Object.values(schema.marks)) {\n tr.removeMark(from, to, markType);\n }\n\n view.state.doc.nodesBetween(from, to, (node, pos) => {\n if (node.isTextblock && node.type !== schema.nodes.paragraph && node.type !== schema.nodes.code_block) {\n tr.setNodeMarkup(pos, schema.nodes.paragraph);\n }\n });\n\n view.dispatch(tr);\n view.focus();\n },\n\n print: () => {\n const content = docToHtml(view.state.doc, schema);\n const iframe = document.createElement('iframe');\n\n iframe.setAttribute('sandbox', 'allow-modals allow-same-origin');\n iframe.style.position = 'fixed';\n iframe.style.inset = '0';\n iframe.style.width = '0';\n iframe.style.height = '0';\n iframe.style.border = 'none';\n document.body.appendChild(iframe);\n\n const doc = iframe.contentDocument;\n\n if (doc) {\n doc.open();\n doc.write(\n `<!DOCTYPE html><html><head><style>body { font-family: system-ui, sans-serif; padding: 2rem; line-height: 1.6; } img { max-width: 100%; } table { border-collapse: collapse; width: 100%; } td, th { border: 1px solid #ccc; padding: 0.5rem; }</style></head><body>${content}</body></html>`\n );\n doc.close();\n\n iframe.contentWindow?.focus();\n iframe.contentWindow?.print();\n }\n\n setTimeout(() => iframe.remove(), 1000);\n },\n\n uploadImages: () => insertUploadPlaceholder(schema.nodes.image_upload_placeholder, callbacks?.onUploadImages),\n uploadDocuments: () => insertUploadPlaceholder(schema.nodes.document_upload_placeholder, callbacks?.onUploadDocuments),\n\n undo: () => {\n undo(view.state, view.dispatch);\n view.focus();\n },\n redo: () => {\n redo(view.state, view.dispatch);\n view.focus();\n }\n };\n}\n","import type { EditorView } from 'prosemirror-view';\nimport type { Schema } from 'prosemirror-model';\nimport type { TextEditorCommands } from '@primeui/texteditor-types';\nimport { setBlockType } from 'prosemirror-commands';\nimport { preserveSelection } from '../plugins/selectionHighlight';\nimport { wrapInBlockquoteNormalized, wrapInListNormalized } from './normalize';\nimport { createFormattingCommands } from './formatting';\nimport { createBlockCommands } from './blocks';\nimport { createListCommands } from './lists';\nimport { insertTable } from './tables';\nimport { createContentCommands } from './content';\nimport { createEditorCommands } from './editor';\n\nexport function createCommands(view: EditorView, schema: Schema, callbacks?: { onUploadImages?: () => void; onUploadDocuments?: () => void }, options?: { defaultCellWidth?: number; highlightColor?: string | null }): TextEditorCommands {\n const formatting = createFormattingCommands(view, schema, { highlightColor: options?.highlightColor });\n const blocks = createBlockCommands(view, schema);\n const lists = createListCommands(view, schema);\n const content = createContentCommands(view, schema);\n const editorCmds = createEditorCommands(view, schema, callbacks);\n\n return {\n // Formatting marks\n bold: formatting.bold,\n italic: formatting.italic,\n underline: formatting.underline,\n strikethrough: formatting.strikethrough,\n subscript: formatting.subscript,\n superscript: formatting.superscript,\n code: formatting.code,\n highlight: formatting.highlight,\n clearFormatting: editorCmds.clearFormatting,\n\n // Block types\n heading: blocks.heading,\n paragraph: blocks.paragraph,\n codeBlock: blocks.codeBlock,\n blockquote: blocks.blockquote,\n insertHorizontalRule: blocks.insertHorizontalRule,\n textAlign: blocks.textAlign,\n\n // Formatting styles\n fontFamily: formatting.fontFamily,\n fontSize: formatting.fontSize,\n foregroundColor: formatting.foregroundColor,\n backgroundColor: formatting.backgroundColor,\n\n // Lists\n bulletList: lists.bulletList,\n orderedList: lists.orderedList,\n checkList: lists.checkList,\n\n // Content\n insertLink: content.insertLink,\n updateLink: content.updateLink,\n removeLink: content.removeLink,\n openLink: content.openLink,\n insertImage: content.insertImage,\n\n // Table\n table: (rows?: number, cols?: number) => insertTable(view, schema, rows || 3, cols || 3, options?.defaultCellWidth),\n\n // Features\n print: editorCmds.print,\n uploadImages: editorCmds.uploadImages,\n uploadDocuments: editorCmds.uploadDocuments,\n\n // History\n undo: editorCmds.undo,\n redo: editorCmds.redo,\n\n // Selection highlight\n preserveSelection: () => preserveSelection(view),\n\n // Turn into (non-toggle: always sets the type)\n turnInto: {\n text: () => {\n setBlockType(schema.nodes.paragraph)(view.state, view.dispatch);\n view.focus();\n },\n heading1: () => {\n setBlockType(schema.nodes.heading, { level: 1 })(view.state, view.dispatch);\n view.focus();\n },\n heading2: () => {\n setBlockType(schema.nodes.heading, { level: 2 })(view.state, view.dispatch);\n view.focus();\n },\n heading3: () => {\n setBlockType(schema.nodes.heading, { level: 3 })(view.state, view.dispatch);\n view.focus();\n },\n bulletList: () => {\n wrapInListNormalized(view, schema, schema.nodes.bullet_list);\n view.focus();\n },\n orderedList: () => {\n wrapInListNormalized(view, schema, schema.nodes.ordered_list);\n view.focus();\n },\n checkList: () => {\n wrapInListNormalized(view, schema, schema.nodes.check_list);\n view.focus();\n },\n blockquote: () => {\n wrapInBlockquoteNormalized(view, schema);\n view.focus();\n },\n codeBlock: () => {\n setBlockType(schema.nodes.code_block)(view.state, view.dispatch);\n view.focus();\n }\n }\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/serialization/placeholders.ts","../src/serialization/htmlSerializer.ts"],"names":[],"mappings":";;;AAGO,SAAS,mBAAA,CAAoB,SAAmB,MAAA,EAA0B;AAC7E,EAAA,MAAM,eAAe,CAAC,MAAA,CAAO,MAAM,wBAAA,EAA0B,MAAA,CAAO,MAAM,2BAA2B,CAAA;AACrG,EAAA,MAAM,OAAe,EAAC;AAEtB,EAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,KAAA,KAAU;AACvB,IAAA,IAAI,YAAA,CAAa,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA,EAAG;AAEvC,IAAA,IAAI,KAAA,CAAM,UAAA,GAAa,CAAA,IAAK,CAAC,MAAM,MAAA,EAAQ;AACvC,MAAA,IAAA,CAAK,IAAA,CAAK,MAAM,IAAA,CAAK,mBAAA,CAAoB,MAAM,OAAA,EAAS,MAAM,CAAC,CAAC,CAAA;AAAA,IACpE,CAAA,MAAO;AACH,MAAA,IAAA,CAAK,KAAK,KAAK,CAAA;AAAA,IACnB;AAAA,EACJ,CAAC,CAAA;AAED,EAAA,OAAO,QAAA,CAAS,UAAU,IAAI,CAAA;AAClC;;;ACfA,IAAM,eAAA,uBAAsB,OAAA,EAA+B;AAE3D,SAAS,cAAc,MAAA,EAA+B;AAClD,EAAA,IAAI,UAAA,GAAa,eAAA,CAAgB,GAAA,CAAI,MAAM,CAAA;AAE3C,EAAA,IAAI,CAAC,UAAA,EAAY;AACb,IAAA,UAAA,GAAa,aAAA,CAAc,WAAW,MAAM,CAAA;AAC5C,IAAA,eAAA,CAAgB,GAAA,CAAI,QAAQ,UAAU,CAAA;AAAA,EAC1C;AAEA,EAAA,OAAO,UAAA;AACX;AAEO,SAAS,SAAA,CAAU,KAAW,MAAA,EAAwB;AACzD,EAAA,MAAM,UAAA,GAAa,cAAc,MAAM,CAAA;AACvC,EAAA,MAAM,WAAW,UAAA,CAAW,iBAAA,CAAkB,oBAAoB,GAAA,CAAI,OAAA,EAAS,MAAM,CAAC,CAAA;AACtF,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAE9C,EAAA,SAAA,CAAU,YAAY,QAAQ,CAAA;AAE9B,EAAA,OAAO,SAAA,CAAU,SAAA;AACrB;AAQO,SAAS,UAAA,CAAW,MAAY,MAAA,EAAwB;AAC3D,EAAA,MAAM,UAAA,GAAa,cAAc,MAAM,CAAA;AACvC,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,aAAA,CAAc,IAAI,CAAA;AACzC,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAE9C,EAAA,SAAA,CAAU,YAAY,GAAG,CAAA;AAEzB,EAAA,OAAO,SAAA,CAAU,SAAA;AACrB","file":"chunk-6ZN5XRH2.mjs","sourcesContent":["import { Fragment, type Node, type Schema } from 'prosemirror-model';\n\n// Drops transient upload-placeholder nodes so they never leak into emitted output.\nexport function withoutPlaceholders(content: Fragment, schema: Schema): Fragment {\n const placeholders = [schema.nodes.image_upload_placeholder, schema.nodes.document_upload_placeholder];\n const kept: Node[] = [];\n\n content.forEach((child) => {\n if (placeholders.includes(child.type)) return;\n\n if (child.childCount > 0 && !child.isText) {\n kept.push(child.copy(withoutPlaceholders(child.content, schema)));\n } else {\n kept.push(child);\n }\n });\n\n return Fragment.fromArray(kept);\n}\n","import { DOMSerializer, type Node, type Schema } from 'prosemirror-model';\nimport { withoutPlaceholders } from './placeholders';\n\nconst serializerCache = new WeakMap<Schema, DOMSerializer>();\n\nfunction getSerializer(schema: Schema): DOMSerializer {\n let serializer = serializerCache.get(schema);\n\n if (!serializer) {\n serializer = DOMSerializer.fromSchema(schema);\n serializerCache.set(schema, serializer);\n }\n\n return serializer;\n}\n\nexport function docToHtml(doc: Node, schema: Schema): string {\n const serializer = getSerializer(schema);\n const fragment = serializer.serializeFragment(withoutPlaceholders(doc.content, schema));\n const container = document.createElement('div');\n\n container.appendChild(fragment);\n\n return container.innerHTML;\n}\n\n/**\n * Serialize a single node to HTML via the schema's own toDOM. Used as a lossless\n * fallback when a target format (e.g. Markdown) cannot represent the node —\n * embedding raw HTML preserves its structure and attrs rather than flattening\n * it to plain text.\n */\nexport function nodeToHtml(node: Node, schema: Schema): string {\n const serializer = getSerializer(schema);\n const dom = serializer.serializeNode(node);\n const container = document.createElement('div');\n\n container.appendChild(dom);\n\n return container.innerHTML;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/state/selection.ts"],"names":[],"mappings":";AAKO,SAAS,YAAA,CAAa,OAAoB,QAAA,EAA6B;AAC1E,EAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,EAAA,EAAI,KAAA,KAAU,KAAA,CAAM,SAAA;AAEzC,EAAA,IAAI,KAAA,EAAO;AACP,IAAA,IAAI,KAAA,CAAM,aAAa,OAAO,CAAC,CAAC,QAAA,CAAS,OAAA,CAAQ,MAAM,WAAW,CAAA;AAKlE,IAAA,IAAI,SAAS,OAAA,CAAQ,KAAA,CAAM,KAAA,EAAO,GAAG,OAAO,IAAA;AAE5C,IAAA,MAAM,QAAQ,KAAA,CAAM,SAAA;AAEpB,IAAA,OAAO,CAAC,EAAE,KAAA,IAAS,QAAA,CAAS,OAAA,CAAQ,MAAM,KAAK,CAAA,CAAA;AAAA,EACnD;AAGA,EAAA,IAAI,OAAA,GAAU,KAAA;AACd,EAAA,IAAI,OAAA,GAAU,IAAA;AAEd,EAAA,KAAA,CAAM,GAAA,CAAI,YAAA,CAAa,IAAA,EAAM,EAAA,EAAI,CAAC,IAAA,KAAS;AACvC,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAClB,IAAA,OAAA,GAAU,IAAA;AACV,IAAA,IAAI,CAAC,QAAA,CAAS,OAAA,CAAQ,IAAA,CAAK,KAAK,GAAG,OAAA,GAAU,KAAA;AAAA,EACjD,CAAC,CAAA;AAED,EAAA,OAAO,OAAA,IAAW,OAAA;AACtB;AAEO,SAAS,YAAA,CAAa,OAAoB,QAAA,EAAoD;AACjG,EAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,EAAA,EAAI,KAAA,KAAU,KAAA,CAAM,SAAA;AAEzC,EAAA,IAAI,KAAA,EAAO;AACP,IAAA,MAAM,OAAO,QAAA,CAAS,OAAA,CAAQ,MAAM,WAAA,IAAe,KAAA,CAAM,OAAO,CAAA,KAAM,CAAC,KAAA,CAAM,WAAA,IAAe,MAAM,SAAA,GAAY,QAAA,CAAS,QAAQ,KAAA,CAAM,SAAA,CAAU,KAAK,CAAA,GAAI,IAAA,CAAA;AAExJ,IAAA,OAAO,IAAA,GAAO,KAAK,KAAA,GAAQ,IAAA;AAAA,EAC/B;AAGA,EAAA,IAAI,IAAA,GAAO,KAAA;AACX,EAAA,MAAM,SAAkC,EAAC;AAEzC,EAAA,KAAA,CAAM,GAAA,CAAI,YAAA,CAAa,IAAA,EAAM,EAAA,EAAI,CAAC,IAAA,KAAS;AACvC,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAElB,IAAA,MAAM,QAAS,QAAA,CAAS,OAAA,CAAQ,KAAK,KAAK,CAAA,EAAG,SAAS,EAAC;AACvD,IAAA,MAAM,IAAA,mBAAO,IAAI,GAAA,CAAI,CAAC,GAAG,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAG,GAAG,MAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAC,CAAA;AAEpE,IAAA,IAAI,CAAC,IAAA,EAAM;AACP,MAAA,IAAA,GAAO,IAAA;AACP,MAAA,MAAA,CAAO,MAAA,CAAO,QAAQ,KAAK,CAAA;AAE3B,MAAA;AAAA,IACJ;AAEA,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACpB,MAAA,IAAI,MAAA,CAAO,GAAG,CAAA,KAAM,KAAA,CAAM,GAAG,CAAA,EAAG,MAAA,CAAO,GAAG,CAAA,GAAI,IAAA;AAAA,IAClD;AAAA,EACJ,CAAC,CAAA;AAED,EAAA,OAAO,OAAO,MAAA,GAAS,IAAA;AAC3B;AAEO,SAAS,mBAAA,CAAoB,OAAoB,QAAA,EAAsG;AAC1J,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,KAAA,CAAM,SAAA;AAExB,EAAA,KAAA,IAAS,KAAA,GAAQ,KAAA,CAAM,KAAA,EAAO,KAAA,GAAQ,GAAG,KAAA,EAAA,EAAS;AAC9C,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA;AAE7B,IAAA,IAAI,IAAA,CAAK,SAAS,QAAA,EAAU;AACxB,MAAA,OAAO,EAAE,IAAA,EAAM,GAAA,EAAK,MAAM,MAAA,CAAO,KAAK,GAAG,KAAA,EAAM;AAAA,IACnD;AAAA,EACJ;AAEA,EAAA,OAAO,IAAA;AACX;AAEO,SAAS,YAAA,CAAa,KAAA,EAAoB,QAAA,EAAoB,KAAA,EAA0C;AAC3G,EAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,KAAA,EAAO,QAAQ,CAAA;AAElD,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AAEpB,EAAA,IAAI,KAAA,EAAO;AACP,IAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,MAAM,CAAC,CAAC,GAAA,EAAK,GAAG,MAAM,MAAA,CAAO,IAAA,EAAM,KAAA,CAAM,GAAG,MAAM,GAAG,CAAA;AAAA,EACtF;AAEA,EAAA,OAAO,IAAA;AACX;AAEO,SAAS,qBAAqB,IAAA,EAAwC;AACzE,EAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAG,GAAI,KAAK,KAAA,CAAM,SAAA;AAEhC,EAAA,IAAI,IAAA,KAAS,IAAI,OAAO,IAAA;AAExB,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA;AACnC,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,WAAA,CAAY,EAAE,CAAA;AAE/B,EAAA,OAAO;AAAA,IACH,KAAK,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,GAAA,EAAK,IAAI,GAAG,CAAA;AAAA,IAChC,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,QAAQ,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,MAAA,EAAQ,IAAI,MAAM,CAAA;AAAA,IACzC,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,MAAA,EAAQ,GAAA,CAAI,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,GAAA,EAAK,IAAI,GAAG,CAAA;AAAA,IACxE,OAAO,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,IAAA,GAAO,MAAM,IAAI;AAAA,GACzC;AACJ","file":"chunk-72T5I4O4.mjs","sourcesContent":["import type { EditorState } from 'prosemirror-state';\nimport type { EditorView } from 'prosemirror-view';\nimport type { MarkType, NodeType } from 'prosemirror-model';\nimport type { CaretPosition } from '@primeui/texteditor-types';\n\nexport function isMarkActive(state: EditorState, markType: MarkType): boolean {\n const { from, $from, to, empty } = state.selection;\n\n if (empty) {\n if (state.storedMarks) return !!markType.isInSet(state.storedMarks);\n\n // At a boundary, $from.marks() reflects the char before the cursor, so a\n // cursor at the left edge of a code span misses it. Also check the mark\n // on the character immediately after the cursor.\n if (markType.isInSet($from.marks())) return true;\n\n const after = $from.nodeAfter;\n\n return !!(after && markType.isInSet(after.marks));\n }\n\n // Active only when the mark fully covers the selection.\n let hasText = false;\n let covered = true;\n\n state.doc.nodesBetween(from, to, (node) => {\n if (!node.isText) return;\n hasText = true;\n if (!markType.isInSet(node.marks)) covered = false;\n });\n\n return hasText && covered;\n}\n\nexport function getMarkAttrs(state: EditorState, markType: MarkType): Record<string, unknown> | null {\n const { from, $from, to, empty } = state.selection;\n\n if (empty) {\n const mark = markType.isInSet(state.storedMarks || $from.marks()) || (!state.storedMarks && $from.nodeAfter ? markType.isInSet($from.nodeAfter.marks) : null);\n\n return mark ? mark.attrs : null;\n }\n\n // Report an attr only when uniform across the selection; mixed -> null.\n let seen = false;\n const merged: Record<string, unknown> = {};\n\n state.doc.nodesBetween(from, to, (node) => {\n if (!node.isText) return;\n\n const attrs = (markType.isInSet(node.marks)?.attrs ?? {}) as Record<string, unknown>;\n const keys = new Set([...Object.keys(merged), ...Object.keys(attrs)]);\n\n if (!seen) {\n seen = true;\n Object.assign(merged, attrs);\n\n return;\n }\n\n for (const key of keys) {\n if (merged[key] !== attrs[key]) merged[key] = null;\n }\n });\n\n return seen ? merged : null;\n}\n\nexport function getParentNodeOfType(state: EditorState, nodeType: NodeType): { node: ReturnType<typeof state.doc.nodeAt>; pos: number; depth: number } | null {\n const { $from } = state.selection;\n\n for (let depth = $from.depth; depth > 0; depth--) {\n const node = $from.node(depth);\n\n if (node.type === nodeType) {\n return { node, pos: $from.before(depth), depth };\n }\n }\n\n return null;\n}\n\nexport function isNodeActive(state: EditorState, nodeType: NodeType, attrs?: Record<string, unknown>): boolean {\n const result = getParentNodeOfType(state, nodeType);\n\n if (!result) return false;\n\n if (attrs) {\n return Object.entries(attrs).every(([key, val]) => result.node?.attrs[key] === val);\n }\n\n return true;\n}\n\nexport function getSelectionPosition(view: EditorView): CaretPosition | null {\n const { from, to } = view.state.selection;\n\n if (from === to) return null;\n\n const start = view.coordsAtPos(from);\n const end = view.coordsAtPos(to);\n\n return {\n top: Math.min(start.top, end.top),\n left: start.left,\n bottom: Math.max(start.bottom, end.bottom),\n height: Math.max(start.bottom, end.bottom) - Math.min(start.top, end.top),\n width: Math.abs(end.left - start.left)\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/css.ts"],"names":[],"mappings":";AAEO,SAAS,iBAAiB,KAAA,EAAiD;AAC9E,EAAA,IAAI,KAAA,IAAS,MAAM,OAAO,IAAA;AAE1B,EAAA,MAAM,CAAA,GAAI,MAAM,IAAA,EAAK;AAErB,EAAA,IAAI,CAAA,KAAM,IAAI,OAAO,IAAA;AAIrB,EAAA,IAAI,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,EAAG,OAAO,IAAA;AAE9B,EAAA,MAAM,KAAA,GAAQ,EAAE,WAAA,EAAY;AAE5B,EAAA,IACI,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,IACrB,MAAM,QAAA,CAAS,YAAY,CAAA,IAC3B,KAAA,CAAM,SAAS,aAAa,CAAA,IAC5B,KAAA,CAAM,QAAA,CAAS,UAAU,CAAA,IACzB,KAAA,CAAM,QAAA,CAAS,cAAc,KAC7B,KAAA,CAAM,QAAA,CAAS,SAAS,CAAA,IACxB,MAAM,QAAA,CAAS,IAAI,CAAA,IACnB,KAAA,CAAM,SAAS,GAAG,CAAA,IAClB,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EACpB;AACE,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,OAAO,CAAA;AACX","file":"chunk-7QCHSEN2.mjs","sourcesContent":["// Rejects a CSS value that could inject extra declarations, trigger requests,\n// or break out of the style attribute / serialized markup (mXSS hardening).\nexport function sanitizeCssValue(value: string | null | undefined): string | null {\n if (value == null) return null;\n\n const v = value.trim();\n\n if (v === '') return null;\n\n // Markup/template breakout chars (angle brackets, backtick, backslash).\n // Quotes are allowed: they are legitimate CSS string delimiters (e.g. font-family).\n if (/[<>`\\\\]/.test(v)) return null;\n\n const lower = v.toLowerCase();\n\n if (\n lower.includes('url(') ||\n lower.includes('expression') ||\n lower.includes('javascript:') ||\n lower.includes('behavior') ||\n lower.includes('-moz-binding') ||\n lower.includes('@import') ||\n lower.includes('/*') ||\n lower.includes('}') ||\n lower.includes(';')\n ) {\n return null;\n }\n\n return v;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/texteditor.props.ts"],"names":[],"mappings":";AAEO,IAAM,sBAAA,GAA0C;AAAA,EACnD,KAAA,EAAO,IAAA;AAAA,EACP,IAAA,EAAM,IAAA;AAAA,EACN,WAAA,EAAa,IAAA;AAAA,EACb,SAAA,EAAW,MAAA;AAAA,EACX,cAAA,EAAgB,MAAA;AAAA,EAChB,gBAAA,EAAkB,IAAA;AAAA,EAClB,oBAAA,EAAsB,IAAA;AAAA,EACtB,iBAAA,EAAmB,MAAA;AAAA,EACnB,oBAAA,EAAsB,MAAA;AAAA,EACtB,iBAAA,EAAmB,IAAA;AAAA,EACnB,gBAAA,EAAkB,IAAA;AAAA,EAClB,oBAAA,EAAsB,IAAA;AAAA,EACtB,mBAAA,EAAqB,IAAA;AAAA,EACrB,SAAA,EAAW,KAAA;AAAA,EACX,QAAA,EAAU,KAAA;AAAA,EACV,mBAAA,EAAqB,IAAA;AAAA,EACrB,mBAAA,EAAqB,IAAA;AAAA,EACrB,uBAAA,EAAyB,IAAA;AAAA,EACzB,qBAAA,EAAuB,IAAA;AAAA,EACvB,aAAA,EAAe,MAAA;AAAA,EACf,kBAAA,EAAoB,MAAA;AAAA,EACpB,qBAAA,EAAuB,MAAA;AAAA,EACvB,cAAA,EAAgB,MAAA;AAAA,EAChB,kBAAA,EAAoB,MAAA;AAAA,EACpB,eAAA,EAAiB,MAAA;AAAA,EACjB,OAAA,EAAS;AACb","file":"chunk-AJOKUIQD.mjs","sourcesContent":["import type { TextEditorProps } from '@primeui/texteditor-types';\n\nexport const defaultTextEditorProps: TextEditorProps = {\n value: null,\n mode: null,\n placeholder: null,\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n slashPlaceholder: null,\n checklistPlaceholder: null,\n allowedImageTypes: undefined,\n allowedDocumentTypes: undefined,\n imageMaxFileCount: null,\n imageMaxFileSize: null,\n documentMaxFileCount: null,\n documentMaxFileSize: null,\n navigator: false,\n markdown: false,\n valueChangeDebounce: null,\n minTableColumnWidth: null,\n defaultTableColumnWidth: null,\n defaultHighlightColor: null,\n uploadHandler: undefined,\n imageUploadHandler: undefined,\n documentUploadHandler: undefined,\n mentionHandler: undefined,\n mentionFilterField: undefined,\n mentionTemplate: undefined,\n plugins: undefined\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/schema/marks.ts","../src/schema/index.ts"],"names":[],"mappings":"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","file":"chunk-AUTGNC2Q.mjs","sourcesContent":["import type { MarkSpec } from 'prosemirror-model';\nimport { sanitizeUrl } from '../utils/url';\nimport { sanitizeCssValue } from '../utils/css';\n\nconst TARGETS = ['_blank', '_self', '_parent', '_top'];\nconst safeTarget = (t: string | null) => (t && TARGETS.includes(t) ? t : '_blank');\n\nexport const bold: MarkSpec = {\n parseDOM: [\n { tag: 'strong' },\n { tag: 'b', getAttrs: (node) => (node as HTMLElement).style.fontWeight !== 'normal' && null },\n { style: 'font-weight=bold' },\n { style: 'font-weight', getAttrs: (value) => /^(bold(er)?|[5-9]\\d{2,})$/.test(value as string) && null }\n ],\n toDOM() {\n return ['strong', 0];\n }\n};\n\nexport const italic: MarkSpec = {\n parseDOM: [{ tag: 'i' }, { tag: 'em' }, { style: 'font-style=italic' }],\n toDOM() {\n return ['em', 0];\n }\n};\n\nexport const underline: MarkSpec = {\n parseDOM: [{ tag: 'u' }, { style: 'text-decoration=underline' }],\n toDOM() {\n return ['u', 0];\n }\n};\n\nexport const strikethrough: MarkSpec = {\n parseDOM: [{ tag: 's' }, { tag: 'del' }, { tag: 'strike' }, { style: 'text-decoration=line-through' }],\n toDOM() {\n return ['s', 0];\n }\n};\n\nexport const subscript: MarkSpec = {\n excludes: 'superscript',\n parseDOM: [{ tag: 'sub' }],\n toDOM() {\n return ['sub', 0];\n }\n};\n\nexport const superscript: MarkSpec = {\n excludes: 'subscript',\n parseDOM: [{ tag: 'sup' }],\n toDOM() {\n return ['sup', 0];\n }\n};\n\nexport const code: MarkSpec = {\n parseDOM: [{ tag: 'code' }],\n toDOM() {\n return ['code', 0];\n }\n};\n\nexport const link: MarkSpec = {\n attrs: {\n href: {},\n target: { default: '_blank' }\n },\n inclusive: false,\n parseDOM: [\n {\n tag: 'a[href]',\n getAttrs(node) {\n const el = node as HTMLAnchorElement;\n const href = sanitizeUrl(el.getAttribute('href'));\n\n // Drop the link mark (keep the text) when the href is unsafe.\n if (href == null) return false;\n\n return { href, target: safeTarget(el.getAttribute('target')) };\n }\n }\n ],\n toDOM(mark) {\n const href = sanitizeUrl(mark.attrs.href);\n\n return ['a', href == null ? { rel: 'noopener noreferrer' } : { href, target: safeTarget(mark.attrs.target), rel: 'noopener noreferrer' }, 0];\n }\n};\n\nexport const textStyle: MarkSpec = {\n attrs: {\n fontFamily: { default: null },\n fontSize: { default: null },\n color: { default: null },\n backgroundColor: { default: null }\n },\n parseDOM: [\n {\n tag: 'span',\n getAttrs(node) {\n const el = node as HTMLElement;\n // Sanitize at parse time so a dirty CSS value never enters the model.\n const fontFamily = sanitizeCssValue(el.style.fontFamily);\n const fontSize = sanitizeCssValue(el.style.fontSize);\n const color = sanitizeCssValue(el.style.color);\n const backgroundColor = sanitizeCssValue(el.style.backgroundColor);\n\n if (!fontFamily && !fontSize && !color && !backgroundColor) return false;\n\n return { fontFamily, fontSize, color, backgroundColor };\n }\n }\n ],\n toDOM(mark) {\n const style: string[] = [];\n const fontFamily = sanitizeCssValue(mark.attrs.fontFamily);\n const fontSize = sanitizeCssValue(mark.attrs.fontSize);\n const color = sanitizeCssValue(mark.attrs.color);\n const backgroundColor = sanitizeCssValue(mark.attrs.backgroundColor);\n\n if (fontFamily) style.push(`font-family: ${fontFamily}`);\n if (fontSize) style.push(`font-size: ${fontSize}`);\n if (color) style.push(`color: ${color}`);\n if (backgroundColor) style.push(`background-color: ${backgroundColor}`);\n\n return ['span', { style: style.join('; ') }, 0];\n }\n};\n","import { Schema, type NodeSpec, type MarkSpec } from 'prosemirror-model';\nimport * as nodes from './nodes';\nimport * as marks from './marks';\n\nexport { nodes, marks };\n\n/**\n * Derive a NodeSpec from a base one with shallow `attrs` merge — lets a plugin\n * enrich an existing node (e.g. add `id` to `heading`) without copying its spec.\n */\nexport function extendNodeSpec(base: NodeSpec, override: Partial<NodeSpec>): NodeSpec {\n return {\n ...base,\n ...override,\n attrs: { ...base.attrs, ...override.attrs }\n };\n}\n\nexport const baseNodes: Record<string, NodeSpec> = {\n doc: nodes.doc,\n paragraph: nodes.paragraph,\n text: nodes.text,\n heading: nodes.heading,\n blockquote: nodes.blockquote,\n code_block: nodes.code_block,\n horizontal_rule: nodes.horizontal_rule,\n hard_break: nodes.hard_break,\n image: nodes.image,\n mention: nodes.mention,\n image_upload_placeholder: nodes.image_upload_placeholder,\n document_upload_placeholder: nodes.document_upload_placeholder,\n bullet_list: nodes.bullet_list,\n ordered_list: nodes.ordered_list,\n list_item: nodes.list_item,\n check_list: nodes.check_list,\n check_list_item: nodes.check_list_item,\n table: nodes.table,\n table_row: nodes.table_row,\n table_cell: nodes.table_cell,\n table_header: nodes.table_header\n};\n\nexport const baseMarks: Record<string, MarkSpec> = {\n bold: marks.bold,\n italic: marks.italic,\n underline: marks.underline,\n strikethrough: marks.strikethrough,\n subscript: marks.subscript,\n superscript: marks.superscript,\n code: marks.code,\n link: marks.link,\n textStyle: marks.textStyle\n};\n\nexport interface SchemaExtension {\n nodes?: Record<string, NodeSpec>;\n marks?: Record<string, MarkSpec>;\n}\n\n// Surface a silent node/mark name collision between extensions (a legitimate\n// override via extendNodeSpec is fine; two plugins clobbering the same name is a bug).\nfunction warnOnOverride(kind: 'node' | 'mark', existing: Record<string, unknown>, incoming?: Record<string, unknown>) {\n if (!incoming || typeof console === 'undefined') return;\n\n for (const name of Object.keys(incoming)) {\n if (name in existing) {\n // eslint-disable-next-line no-console\n console.warn(`[PrimeUI TextEditor] schema ${kind} \"${name}\" is being overridden by a plugin extension. If this is intentional (e.g. extendNodeSpec), ignore; otherwise two extensions may be colliding.`);\n }\n }\n}\n\n// Builds a Schema from the base specs plus any extension-contributed nodes/marks.\nexport function createEditorSchema(extensions?: SchemaExtension[]): Schema {\n if (!extensions || extensions.length === 0) return new Schema({ nodes: baseNodes, marks: baseMarks });\n\n const extNodes = { ...baseNodes };\n const extMarks = { ...baseMarks };\n\n for (const ext of extensions) {\n warnOnOverride('node', extNodes, ext.nodes);\n warnOnOverride('mark', extMarks, ext.marks);\n Object.assign(extNodes, ext.nodes);\n Object.assign(extMarks, ext.marks);\n }\n\n return new Schema({ nodes: extNodes, marks: extMarks });\n}\n\nlet _defaultSchema: Schema | null = null;\n\n// Lazily-built, memoized default schema. Lazy so importing this module has no\n// side effect (no eager `new Schema()`), keeping `sideEffects:false` honest.\nexport function getEditorSchema(): Schema {\n return (_defaultSchema ??= createEditorSchema());\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/ui/keyboard.ts"],"names":[],"mappings":";AAAO,SAAS,oBAAA,CAAqB,UAAA,EAAoB,SAAA,EAAmB,GAAA,EAA4B;AACpG,EAAA,IAAI,SAAA,KAAc,GAAG,OAAO,EAAA;AAE5B,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAChB,IAAA,OAAO,UAAA,GAAa,CAAA,GAAI,CAAA,GAAA,CAAK,UAAA,GAAa,CAAA,IAAK,SAAA;AAAA,EACnD;AAEA,EAAA,OAAO,aAAa,CAAA,GAAI,SAAA,GAAY,CAAA,GAAA,CAAK,UAAA,GAAa,IAAI,SAAA,IAAa,SAAA;AAC3E;AAEO,SAAS,sBAAA,CAAuB,SAAA,EAAmB,UAAA,EAAoB,KAAA,EAAwB;AAClG,EAAA,IAAI,SAAA,KAAc,GAAG,OAAO,EAAA;AAE5B,EAAA,IAAI,KAAA,EAAO;AACP,IAAA,OAAO,UAAA,IAAc,CAAA,GAAI,SAAA,GAAY,CAAA,GAAI,UAAA,GAAa,CAAA;AAAA,EAC1D;AAEA,EAAA,OAAO,eAAe,EAAA,IAAM,UAAA,KAAe,SAAA,GAAY,CAAA,GAAI,IAAI,UAAA,GAAa,CAAA;AAChF","file":"chunk-CRAB2MFE.mjs","sourcesContent":["export function computeArrowNavIndex(currentIdx: number, itemCount: number, dir: 'up' | 'down'): number {\n if (itemCount === 0) return -1;\n\n if (dir === 'down') {\n return currentIdx < 0 ? 0 : (currentIdx + 1) % itemCount;\n }\n\n return currentIdx < 0 ? itemCount - 1 : (currentIdx - 1 + itemCount) % itemCount;\n}\n\nexport function computeFocusTrapTarget(itemCount: number, focusedIdx: number, shift: boolean): number {\n if (itemCount === 0) return -1;\n\n if (shift) {\n return focusedIdx <= 0 ? itemCount - 1 : focusedIdx - 1;\n }\n\n return focusedIdx === -1 || focusedIdx === itemCount - 1 ? 0 : focusedIdx + 1;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/ui/scroll.ts"],"names":[],"mappings":";AAAO,SAAS,sBAAA,CAAuB,OAAA,EAAiB,IAAA,EAAuC,SAAA,EAAmB,QAAA,EAA0B;AACxI,EAAA,MAAM,OAAA,GAAU,UAAU,IAAA,CAAK,GAAA;AAC/B,EAAA,MAAM,UAAA,GAAa,KAAK,MAAA,GAAS,OAAA;AAEjC,EAAA,IAAI,UAAU,SAAA,EAAW;AACrB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAA,CAAI,SAAA,GAAY,OAAA,IAAW,SAAS,CAAC,CAAA;AAExE,IAAA,OAAO,CAAC,IAAA,CAAK,IAAA,CAAK,KAAA,GAAQ,QAAQ,CAAA;AAAA,EACtC;AAEA,EAAA,IAAI,aAAa,SAAA,EAAW;AACxB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAA,CAAI,SAAA,GAAY,UAAA,IAAc,SAAS,CAAC,CAAA;AAE3E,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,KAAA,GAAQ,QAAQ,CAAA;AAAA,EACrC;AAEA,EAAA,OAAO,CAAA;AACX","file":"chunk-DXPG5XMX.mjs","sourcesContent":["export function computeEdgeScrollSpeed(clientY: number, rect: { top: number; bottom: number }, threshold: number, maxSpeed: number): number {\n const fromTop = clientY - rect.top;\n const fromBottom = rect.bottom - clientY;\n\n if (fromTop < threshold) {\n const ratio = Math.max(0, Math.min(1, (threshold - fromTop) / threshold));\n\n return -Math.ceil(ratio * maxSpeed);\n }\n\n if (fromBottom < threshold) {\n const ratio = Math.max(0, Math.min(1, (threshold - fromBottom) / threshold));\n\n return Math.ceil(ratio * maxSpeed);\n }\n\n return 0;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/texteditor.refs.ts"],"names":[],"mappings":";AAEO,IAAM,qBAAA,GAAwC;AAAA,EACjD,OAAA,EAAS,MAAA;AAAA,EACT,gBAAA,EAAkB;AACtB","file":"chunk-E2KXUP3F.mjs","sourcesContent":["import type { TextEditorRefs } from '@primeui/texteditor-types';\n\nexport const defaultTextEditorRefs: TextEditorRefs = {\n element: undefined,\n fileInputElement: undefined\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/plugins/trailingNode.ts"],"names":[],"mappings":";;;AAGA,IAAM,eAAA,GAAkB,IAAI,SAAA,CAAU,cAAc,CAAA;AAE7C,SAAS,yBAAyB,MAAA,EAAgB;AACrD,EAAA,MAAM,aAAA,GAAgB,OAAO,KAAA,CAAM,SAAA;AAEnC,EAAA,OAAO,IAAI,MAAA,CAAO;AAAA,IACd,GAAA,EAAK,eAAA;AAAA,IACL,iBAAA,CAAkB,YAAA,EAAc,SAAA,EAAW,QAAA,EAAU;AACjD,MAAA,IAAI,CAAC,aAAa,IAAA,CAAK,CAAC,OAAO,EAAA,CAAG,UAAU,GAAG,OAAO,IAAA;AAEtD,MAAA,MAAM,EAAE,KAAI,GAAI,QAAA;AAChB,MAAA,MAAM,WAAW,GAAA,CAAI,SAAA;AAErB,MAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,IAAA,KAAS,aAAA,EAAe;AAC9C,QAAA,OAAO,QAAA,CAAS,GAAG,MAAA,CAAO,GAAA,CAAI,QAAQ,IAAA,EAAM,aAAA,CAAc,QAAQ,CAAA;AAAA,MACtE;AAEA,MAAA,OAAO,IAAA;AAAA,IACX;AAAA,GACH,CAAA;AACL","file":"chunk-EA2YI7LA.mjs","sourcesContent":["import { Plugin, PluginKey } from 'prosemirror-state';\nimport type { Schema } from 'prosemirror-model';\n\nconst trailingNodeKey = new PluginKey('trailingNode');\n\nexport function createTrailingNodePlugin(schema: Schema) {\n const paragraphType = schema.nodes.paragraph;\n\n return new Plugin({\n key: trailingNodeKey,\n appendTransaction(transactions, _oldState, newState) {\n if (!transactions.some((tr) => tr.docChanged)) return null;\n\n const { doc } = newState;\n const lastNode = doc.lastChild;\n\n if (!lastNode || lastNode.type !== paragraphType) {\n return newState.tr.insert(doc.content.size, paragraphType.create());\n }\n\n return null;\n }\n });\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/schema/nodes.ts"],"names":[],"mappings":"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","file":"chunk-F7BJWPT6.mjs","sourcesContent":["import type { DOMOutputSpec, NodeSpec } from 'prosemirror-model';\nimport { textEditorClasses as classes } from '../texteditor.classes';\nimport { sanitizeImageUrl, sanitizeTextAttr } from '../utils/url';\nimport { sanitizeCssValue } from '../utils/css';\n\n// Recursively strip <> from string values in parsed mention data.\nfunction stripMarkupFromJson(value: unknown): unknown {\n if (typeof value === 'string') return value.replace(/[<>]/g, '');\n if (Array.isArray(value)) return value.map(stripMarkupFromJson);\n\n if (value && typeof value === 'object') {\n return Object.fromEntries(Object.entries(value as Record<string, unknown>).map(([k, v]) => [k, stripMarkupFromJson(v)]));\n }\n\n return value;\n}\n\n// Parse data-colwidth into finite numbers only; null if none valid.\nfunction parseColwidth(raw: string | null): number[] | null {\n if (!raw) return null;\n\n const widths = raw.split(',').map(Number).filter(Number.isFinite);\n\n return widths.length > 0 ? widths : null;\n}\n\n// Upper bound on a mention's serialized data payload (defense against DoS).\nconst MENTION_DATA_MAX_LENGTH = 64 * 1024;\n\n// Parse an image width/height into a non-negative finite number string; null otherwise.\nexport function parseDimension(raw: string | null): string | null {\n if (!raw) return null;\n\n const n = Number(raw);\n\n return Number.isFinite(n) && n >= 0 ? String(n) : null;\n}\n\nexport const doc: NodeSpec = {\n content: 'block+'\n};\n\nexport const text: NodeSpec = {\n group: 'inline'\n};\n\nexport const paragraph: NodeSpec = {\n content: 'inline*',\n group: 'block',\n attrs: {\n textAlign: { default: null }\n },\n parseDOM: [\n {\n tag: 'p',\n getAttrs(node) {\n return { textAlign: (node as HTMLElement).style.textAlign || null };\n }\n }\n ],\n toDOM(node) {\n const attrs: Record<string, string> = {};\n\n const align = ['left', 'center', 'right', 'justify'].includes(node.attrs.textAlign) ? node.attrs.textAlign : null;\n\n if (align) attrs.style = `text-align: ${align}`;\n\n return ['p', attrs, 0];\n }\n};\n\nexport const heading: NodeSpec = {\n content: 'inline*',\n group: 'block',\n attrs: {\n level: { default: 1 },\n textAlign: { default: null }\n },\n defining: true,\n parseDOM: [1, 2, 3, 4, 5, 6].map((level) => ({\n tag: `h${level}`,\n attrs: { level },\n getAttrs(node) {\n return { level, textAlign: (node as HTMLElement).style.textAlign || null };\n }\n })),\n toDOM(node) {\n const attrs: Record<string, string> = {};\n\n const align = ['left', 'center', 'right', 'justify'].includes(node.attrs.textAlign) ? node.attrs.textAlign : null;\n\n if (align) attrs.style = `text-align: ${align}`;\n\n return [`h${node.attrs.level}`, attrs, 0];\n }\n};\n\nexport const blockquote: NodeSpec = {\n content: 'block+',\n group: 'block',\n defining: true,\n parseDOM: [{ tag: 'blockquote' }],\n toDOM() {\n return ['blockquote', 0];\n }\n};\n\nexport const code_block: NodeSpec = {\n content: 'text*',\n marks: '',\n group: 'block',\n code: true,\n defining: true,\n attrs: { language: { default: null } },\n parseDOM: [\n {\n tag: 'pre',\n preserveWhitespace: 'full',\n getAttrs(node) {\n const el = node as HTMLElement;\n const code = el.querySelector('code') ?? el;\n const cls = code.getAttribute('class') || el.getAttribute('class') || '';\n const match = cls.match(/language-([\\w-]+)/);\n\n return { language: match ? match[1] : el.getAttribute('data-language') || null };\n }\n }\n ],\n toDOM(node) {\n const lang = node.attrs.language;\n\n return lang ? ['pre', { 'data-language': lang }, ['code', { class: `language-${lang}` }, 0]] : ['pre', ['code', 0]];\n }\n};\n\nexport const horizontal_rule: NodeSpec = {\n group: 'block',\n parseDOM: [{ tag: 'hr' }],\n toDOM() {\n return ['hr'];\n }\n};\n\nexport const hard_break: NodeSpec = {\n inline: true,\n group: 'inline',\n selectable: false,\n parseDOM: [{ tag: 'br' }],\n toDOM() {\n return ['br'];\n }\n};\n\nexport const image: NodeSpec = {\n inline: true,\n group: 'inline',\n draggable: true,\n attrs: {\n src: {},\n alt: { default: null },\n width: { default: null },\n height: { default: null }\n },\n parseDOM: [\n {\n tag: 'img[src]',\n getAttrs(node) {\n const el = node as HTMLImageElement;\n const src = sanitizeImageUrl(el.getAttribute('src'));\n\n if (src == null) return false;\n\n return {\n src,\n alt: sanitizeTextAttr(el.getAttribute('alt')),\n width: parseDimension(el.getAttribute('width')),\n height: parseDimension(el.getAttribute('height'))\n };\n }\n }\n ],\n toDOM(node) {\n const src = sanitizeImageUrl(node.attrs.src);\n const attrs: Record<string, string> = { src: src ?? '' };\n\n if (node.attrs.alt) attrs.alt = node.attrs.alt;\n if (node.attrs.width) attrs.width = node.attrs.width;\n if (node.attrs.height) attrs.height = node.attrs.height;\n\n return ['img', attrs];\n }\n};\n\nexport const mention: NodeSpec = {\n inline: true,\n group: 'inline',\n atom: true,\n attrs: {\n id: { default: null },\n label: {},\n data: { default: null }\n },\n parseDOM: [\n {\n tag: 'span[data-p-mention]',\n getAttrs(node) {\n const el = node as HTMLElement;\n const rawData = el.getAttribute('data-p-mention-data');\n let data: unknown = null;\n\n // Cap the payload so a hostile document can't DoS the parser with a huge JSON blob.\n if (rawData && rawData.length <= MENTION_DATA_MAX_LENGTH) {\n try {\n data = stripMarkupFromJson(JSON.parse(rawData));\n } catch {\n data = null;\n }\n }\n\n return {\n id: sanitizeTextAttr(el.getAttribute('data-p-mention-id')),\n label: sanitizeTextAttr(el.textContent),\n data\n };\n }\n }\n ],\n toDOM(node) {\n const attrs: Record<string, string> = { class: classes.mention, 'data-p-mention': '', 'data-p-mention-id': node.attrs.id || '' };\n\n if (node.attrs.data != null) attrs['data-p-mention-data'] = JSON.stringify(node.attrs.data);\n\n return ['span', attrs, node.attrs.label];\n }\n};\n\nexport const image_upload_placeholder: NodeSpec = {\n group: 'block',\n atom: true,\n selectable: false,\n parseDOM: [{ tag: 'div[data-p-image-upload]' }],\n toDOM() {\n return ['div', { 'data-p-image-upload': '', class: classes.imageUploadPlaceholder }];\n }\n};\n\nexport const document_upload_placeholder: NodeSpec = {\n group: 'block',\n atom: true,\n selectable: false,\n parseDOM: [{ tag: 'div[data-p-document-upload]' }],\n toDOM() {\n return ['div', { 'data-p-document-upload': '', class: classes.documentUploadPlaceholder }];\n }\n};\n\n// Lists\n\nexport const bullet_list: NodeSpec = {\n content: 'list_item+',\n group: 'block',\n parseDOM: [{ tag: 'ul', getAttrs: (node) => !(node as HTMLElement).hasAttribute('data-p-checked-list') && null }],\n toDOM() {\n return ['ul', 0];\n }\n};\n\nexport const ordered_list: NodeSpec = {\n content: 'list_item+',\n group: 'block',\n attrs: { start: { default: 1 } },\n parseDOM: [\n {\n tag: 'ol',\n getAttrs(node) {\n return { start: (node as HTMLOListElement).start || 1 };\n }\n }\n ],\n toDOM(node) {\n return node.attrs.start === 1 ? ['ol', 0] : ['ol', { start: node.attrs.start }, 0];\n }\n};\n\nexport const list_item: NodeSpec = {\n content: 'paragraph block*',\n parseDOM: [{ tag: 'li', getAttrs: (node) => !(node as HTMLElement).hasAttribute('data-p-checked') && null }],\n toDOM() {\n return ['li', 0];\n },\n defining: true\n};\n\nexport const check_list: NodeSpec = {\n content: 'check_list_item+',\n group: 'block',\n parseDOM: [{ tag: 'ul[data-p-checked-list]' }],\n toDOM() {\n return ['ul', { 'data-p-checked-list': '' }, 0];\n }\n};\n\nexport const check_list_item: NodeSpec = {\n content: 'paragraph block*',\n attrs: {\n checked: { default: false }\n },\n parseDOM: [\n {\n tag: 'li[data-p-checked]',\n getAttrs(node) {\n return { checked: (node as HTMLElement).getAttribute('data-p-checked') === 'true' };\n }\n }\n ],\n toDOM(node) {\n return ['li', { 'data-p-checked': node.attrs.checked ? 'true' : 'false' }, 0];\n }\n};\n\n// Tables\n\nexport const table: NodeSpec = {\n content: 'table_row+',\n group: 'block',\n tableRole: 'table',\n isolating: true,\n parseDOM: [{ tag: 'table' }],\n toDOM(node) {\n // Emit <colgroup> from the first row's widths so exported HTML keeps column sizes.\n const cols: DOMOutputSpec[] = [];\n const firstRow = node.firstChild;\n\n if (firstRow) {\n firstRow.forEach((cell) => {\n const span = cell.attrs.colspan ?? 1;\n const widths = cell.attrs.colwidth as number[] | null;\n\n for (let i = 0; i < span; i++) {\n const w = widths?.[i];\n\n cols.push(w ? ['col', { style: `width: ${w}px` }] : ['col', {}]);\n }\n });\n }\n\n return cols.length ? ['table', ['colgroup', ...cols], ['tbody', 0]] : ['table', ['tbody', 0]];\n }\n};\n\nexport const table_row: NodeSpec = {\n content: '(table_cell | table_header)*',\n tableRole: 'row',\n parseDOM: [{ tag: 'tr' }],\n toDOM() {\n return ['tr', 0];\n }\n};\n\nexport const table_cell: NodeSpec = {\n content: 'block+',\n attrs: {\n colspan: { default: 1 },\n rowspan: { default: 1 },\n colwidth: { default: null },\n backgroundColor: { default: null }\n },\n tableRole: 'cell',\n isolating: true,\n parseDOM: [\n {\n tag: 'td',\n getAttrs(node) {\n const el = node as HTMLTableCellElement;\n\n return {\n colspan: el.colSpan || 1,\n rowspan: el.rowSpan || 1,\n colwidth: parseColwidth(el.getAttribute('data-colwidth')),\n backgroundColor: sanitizeCssValue(el.style.backgroundColor)\n };\n }\n }\n ],\n toDOM(node) {\n const attrs: Record<string, string | number> = {};\n\n if (node.attrs.colspan !== 1) attrs.colspan = node.attrs.colspan;\n if (node.attrs.rowspan !== 1) attrs.rowspan = node.attrs.rowspan;\n if (node.attrs.colwidth) attrs['data-colwidth'] = node.attrs.colwidth.join(',');\n const bg = sanitizeCssValue(node.attrs.backgroundColor);\n\n if (bg) attrs.style = `background-color: ${bg}`;\n\n return ['td', attrs, 0];\n }\n};\n\nexport const table_header: NodeSpec = {\n content: 'block+',\n attrs: {\n colspan: { default: 1 },\n rowspan: { default: 1 },\n colwidth: { default: null },\n backgroundColor: { default: null },\n scope: { default: 'col' }\n },\n tableRole: 'header_cell',\n isolating: true,\n parseDOM: [\n {\n tag: 'th',\n getAttrs(node) {\n const el = node as HTMLTableCellElement;\n const rawScope = el.getAttribute('scope');\n\n return {\n colspan: el.colSpan || 1,\n rowspan: el.rowSpan || 1,\n colwidth: parseColwidth(el.getAttribute('data-colwidth')),\n backgroundColor: sanitizeCssValue(el.style.backgroundColor),\n scope: rawScope === 'row' || rawScope === 'col' ? rawScope : 'col'\n };\n }\n }\n ],\n toDOM(node) {\n const attrs: Record<string, string | number> = { scope: node.attrs.scope === 'row' ? 'row' : 'col' };\n\n if (node.attrs.colspan !== 1) attrs.colspan = node.attrs.colspan;\n if (node.attrs.rowspan !== 1) attrs.rowspan = node.attrs.rowspan;\n if (node.attrs.colwidth) attrs['data-colwidth'] = node.attrs.colwidth.join(',');\n const bg = sanitizeCssValue(node.attrs.backgroundColor);\n\n if (bg) attrs.style = `background-color: ${bg}`;\n\n return ['th', attrs, 0];\n }\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/ui/positioning.ts"],"names":[],"mappings":";AAwBO,SAAS,sBAAA,CAAuB,MAAA,EAAoB,WAAA,EAAmB,QAAA,EAAoB,IAAA,EAA0D;AACxJ,EAAA,IAAI,GAAA,GAAM,MAAA,CAAO,MAAA,GAAS,IAAA,CAAK,MAAA;AAE/B,EAAA,IAAI,MAAM,WAAA,CAAY,MAAA,GAAS,QAAA,CAAS,MAAA,GAAS,KAAK,MAAA,EAAQ;AAC1D,IAAA,GAAA,GAAM,MAAA,CAAO,GAAA,GAAM,WAAA,CAAY,MAAA,GAAS,IAAA,CAAK,MAAA;AAAA,EACjD;AAEA,EAAA,IAAI,GAAA,GAAM,IAAA,CAAK,MAAA,EAAQ,GAAA,GAAM,IAAA,CAAK,MAAA;AAElC,EAAA,MAAM,eAAe,IAAA,CAAK,KAAA,GAAQ,OAAO,IAAA,GAAO,WAAA,CAAY,QAAQ,MAAA,CAAO,IAAA;AAC3E,EAAA,MAAM,IAAA,GAAO,WAAW,YAAA,EAAc,WAAA,CAAY,OAAO,IAAA,CAAK,MAAA,EAAQ,SAAS,KAAK,CAAA;AAEpF,EAAA,OAAO,EAAE,KAAK,IAAA,EAAK;AACvB;AAEO,SAAS,sBAAA,CAAuB,OAAA,EAAqB,WAAA,EAAmB,QAAA,EAAoB,IAAA,EAA0D;AACzJ,EAAA,IAAI,MAAM,OAAA,CAAQ,GAAA;AAElB,EAAA,IAAI,MAAM,WAAA,CAAY,MAAA,GAAS,QAAA,CAAS,MAAA,GAAS,KAAK,MAAA,EAAQ;AAC1D,IAAA,GAAA,GAAM,QAAA,CAAS,MAAA,GAAS,WAAA,CAAY,MAAA,GAAS,IAAA,CAAK,MAAA;AAAA,EACtD;AAEA,EAAA,IAAI,GAAA,GAAM,IAAA,CAAK,MAAA,EAAQ,GAAA,GAAM,IAAA,CAAK,MAAA;AAElC,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,GAAQ,OAAA,CAAQ,IAAA,GAAO,WAAA,CAAY,KAAA,GAAQ,IAAA,CAAK,MAAA,GAAS,OAAA,CAAQ,KAAA,GAAQ,IAAA,CAAK,MAAA;AACnG,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,GAAQ,OAAA,CAAQ,KAAA,GAAQ,IAAA,CAAK,MAAA,GAAS,OAAA,CAAQ,IAAA,GAAO,WAAA,CAAY,KAAA,GAAQ,IAAA,CAAK,MAAA;AACrG,EAAA,MAAM,YAAA,GAAe,UAAU,WAAA,CAAY,KAAA,GAAQ,SAAS,KAAA,GAAQ,IAAA,CAAK,MAAA,IAAU,OAAA,GAAU,IAAA,CAAK,MAAA;AAClG,EAAA,MAAM,IAAA,GAAO,eAAe,SAAA,GAAY,OAAA;AAExC,EAAA,OAAO,EAAE,KAAK,IAAA,EAAK;AACvB;AAEA,SAAS,UAAA,CAAW,IAAA,EAAc,OAAA,EAAiB,MAAA,EAAgB,aAAA,EAA+B;AAC9F,EAAA,IAAI,IAAA,GAAO,QAAQ,OAAO,MAAA;AAC1B,EAAA,IAAI,OAAO,OAAA,GAAU,aAAA,GAAgB,MAAA,EAAQ,OAAO,gBAAgB,OAAA,GAAU,MAAA;AAE9E,EAAA,OAAO,IAAA;AACX","file":"chunk-FFCQLWS5.mjs","sourcesContent":["import { clampToViewport } from '../utils/position';\n\nexport interface Size {\n width: number;\n height: number;\n}\n\nexport interface Viewport {\n width: number;\n height: number;\n}\n\nexport interface AnchorRect {\n top: number;\n bottom: number;\n left: number;\n right: number;\n}\n\nexport interface PopoverPositionOpts {\n margin: number;\n isRtl: boolean;\n}\n\nexport function computePopoverPosition(anchor: AnchorRect, popoverSize: Size, viewport: Viewport, opts: PopoverPositionOpts): { top: number; left: number } {\n let top = anchor.bottom + opts.margin;\n\n if (top + popoverSize.height > viewport.height - opts.margin) {\n top = anchor.top - popoverSize.height - opts.margin;\n }\n\n if (top < opts.margin) top = opts.margin;\n\n const physicalLeft = opts.isRtl ? anchor.left - popoverSize.width : anchor.left;\n const left = clampWidth(physicalLeft, popoverSize.width, opts.margin, viewport.width);\n\n return { top, left };\n}\n\nexport function computeSubmenuPosition(trigger: AnchorRect, popoverSize: Size, viewport: Viewport, opts: PopoverPositionOpts): { top: number; left: number } {\n let top = trigger.top;\n\n if (top + popoverSize.height > viewport.height - opts.margin) {\n top = viewport.height - popoverSize.height - opts.margin;\n }\n\n if (top < opts.margin) top = opts.margin;\n\n const endLeft = opts.isRtl ? trigger.left - popoverSize.width - opts.margin : trigger.right + opts.margin;\n const startLeft = opts.isRtl ? trigger.right + opts.margin : trigger.left - popoverSize.width - opts.margin;\n const overflowsEnd = endLeft + popoverSize.width > viewport.width - opts.margin || endLeft < opts.margin;\n const left = overflowsEnd ? startLeft : endLeft;\n\n return { top, left };\n}\n\nfunction clampWidth(left: number, elWidth: number, margin: number, viewportWidth: number): number {\n if (left < margin) return margin;\n if (left + elWidth > viewportWidth - margin) return viewportWidth - elWidth - margin;\n\n return left;\n}\n\nexport { clampToViewport };\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/texteditor.classes.ts"],"names":[],"mappings":";AAAO,IAAM,iBAAA,GAAoB;AAAA,EAC7B,IAAA,EAAM,eAAA;AAAA,EACN,OAAA,EAAS,uBAAA;AAAA,EACT,IAAA,EAAM,oBAAA;AAAA,EACN,OAAA,EAAS,uBAAA;AAAA;AAAA,EAGT,KAAA,EAAO,qBAAA;AAAA,EACP,YAAA,EAAc,6BAAA;AAAA,EACd,aAAA,EAAe,8BAAA;AAAA,EACf,kBAAA,EAAoB,oCAAA;AAAA,EACpB,gBAAA,EAAkB,iCAAA;AAAA;AAAA,EAGlB,SAAA,EAAW,yBAAA;AAAA,EACX,YAAA,EAAc,6BAAA;AAAA,EACd,gBAAA,EAAkB,iCAAA;AAAA;AAAA,EAGlB,cAAA,EAAgB,+BAAA;AAAA,EAChB,WAAA,EAAa,4BAAA;AAAA,EACb,cAAA,EAAgB,+BAAA;AAAA,EAChB,WAAA,EAAa,2BAAA;AAAA;AAAA,EAGb,qBAAA,EAAuB,uCAAA;AAAA,EACvB,YAAA,EAAc,6BAAA;AAAA,EACd,gBAAA,EAAkB,kCAAA;AAAA,EAClB,eAAA,EAAiB,iCAAA;AAAA,EACjB,eAAA,EAAiB,iCAAA;AAAA,EACjB,QAAA,EAAU,yBAAA;AAAA,EACV,WAAA,EAAa,6BAAA;AAAA,EACb,WAAA,EAAa,6BAAA;AAAA;AAAA,EAGb,aAAA,EAAe,8BAAA;AAAA,EACf,OAAA,EAAS,uBAAA;AAAA,EACT,WAAA,EAAa,4BAAA;AAAA,EACb,SAAA,EAAW,yBAAA;AAAA,EACX,sBAAA,EAAwB,wCAAA;AAAA,EACxB,yBAAA,EAA2B;AAC/B","file":"chunk-GG56GLXC.mjs","sourcesContent":["export const textEditorClasses = {\n root: 'p-text-editor',\n toolbar: 'p-text-editor-toolbar',\n body: 'p-text-editor-body',\n content: 'p-text-editor-content',\n\n // Block mode\n block: 'p-text-editor-block',\n blockContent: 'p-text-editor-block-content',\n blockControls: 'p-text-editor-block-controls',\n blockDropIndicator: 'p-text-editor-block-drop-indicator',\n blockPlaceholder: 'p-text-editor-block-placeholder',\n\n // Navigator\n navigator: 'p-text-editor-navigator',\n navigatorBar: 'p-text-editor-navigator-bar',\n navigatorPopover: 'p-text-editor-navigator-popover',\n\n // Overlays\n contextToolbar: 'p-text-editor-context-toolbar',\n popoverMenu: 'p-text-editor-popover-menu',\n popoverSubmenu: 'p-text-editor-popover-submenu',\n placeholder: 'p-text-editor-placeholder',\n\n // Table\n tableSelectionOutline: 'p-text-editor-table-selection-outline',\n tableTrigger: 'p-text-editor-table-trigger',\n tableTriggerCell: 'p-text-editor-table-trigger-cell',\n tableTriggerCol: 'p-text-editor-table-trigger-col',\n tableTriggerRow: 'p-text-editor-table-trigger-row',\n tableAdd: 'p-text-editor-table-add',\n tableAddCol: 'p-text-editor-table-add-col',\n tableAddRow: 'p-text-editor-table-add-row',\n\n // Inline decorations\n mentionTyping: 'p-text-editor-mention-typing',\n mention: 'p-text-editor-mention',\n slashTyping: 'p-text-editor-slash-typing',\n selection: 'p-text-editor-selection',\n imageUploadPlaceholder: 'p-text-editor-image-upload-placeholder',\n documentUploadPlaceholder: 'p-text-editor-document-upload-placeholder'\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/plugins/mentionController.ts"],"names":[],"mappings":";AAaO,SAAS,wBAAwB,IAAA,EAAgC;AACpE,EAAA,IAAI,QAAmB,EAAC;AACxB,EAAA,IAAI,MAAA,GAAS,KAAA;AACb,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,OAAO;AAAA,IACH,MAAM,SAAS,MAAA,EAAsC;AACjD,MAAA,MAAM,IAAI,EAAE,KAAA;AAEZ,MAAA,IAAI,CAAC,OAAO,MAAA,EAAQ;AAChB,QAAA,MAAA,GAAS,KAAA;AACT,QAAA,KAAA,GAAQ,EAAC;AACT,QAAA,IAAA,CAAK,KAAK,MAAM,CAAA;AAEhB,QAAA;AAAA,MACJ;AAEA,MAAA,IAAI,CAAC,MAAA,EAAQ;AACT,QAAA,MAAM,OAAA,GAAU,KAAK,UAAA,EAAW;AAEhC,QAAA,IAAI,OAAA,EAAS;AACT,UAAA,MAAM,OAAA,GAAU,MAAM,OAAA,EAAQ;AAE9B,UAAA,IAAI,MAAM,KAAA,EAAO;AAEjB,UAAA,KAAA,GAAQ,OAAA;AAAA,QACZ;AAEA,QAAA,MAAA,GAAS,IAAA;AAAA,MACb;AAEA,MAAA,MAAM,KAAA,GAAQ,KAAK,cAAA,EAAe;AAClC,MAAA,MAAM,WAAW,MAAA,CAAO,IAAA,GAClB,KAAA,CAAM,MAAA,CAAO,CAAC,IAAA,KAAS;AACnB,QAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,UAAU,OAAO,KAAA;AAE9C,QAAA,OAAO,MAAA,CAAQ,IAAA,CAAiC,KAAK,CAAA,IAAK,EAAE,CAAA,CACvD,WAAA,EAAY,CACZ,QAAA,CAAS,MAAA,CAAO,IAAA,CAAK,WAAA,EAAa,CAAA;AAAA,MAC3C,CAAC,CAAA,GACD,KAAA;AAEN,MAAA,IAAI,MAAM,KAAA,EAAO;AAEjB,MAAA,IAAA,CAAK,KAAK,EAAE,GAAG,MAAA,EAAQ,KAAA,EAAO,UAAU,CAAA;AAAA,IAC5C;AAAA,GACJ;AACJ","file":"chunk-GGPBV4BM.mjs","sourcesContent":["export interface MentionUpdate {\n active: boolean;\n text: string;\n}\n\nexport interface MentionControllerOptions {\n getHandler: () => (() => unknown[] | Promise<unknown[]>) | undefined;\n getFilterField: () => string;\n emit: (update: MentionUpdate & { items?: unknown[] }) => void;\n}\n\n// Race-safe mention state machine: fetches items once per @-session, drops stale\n// fetches, and never leaves the list permanently empty after a superseded fetch.\nexport function createMentionController(opts: MentionControllerOptions) {\n let items: unknown[] = [];\n let active = false;\n let token = 0;\n\n return {\n async onUpdate(update: MentionUpdate): Promise<void> {\n const t = ++token;\n\n if (!update.active) {\n active = false;\n items = [];\n opts.emit(update);\n\n return;\n }\n\n if (!active) {\n const handler = opts.getHandler();\n\n if (handler) {\n const fetched = await handler();\n\n if (t !== token) return;\n\n items = fetched;\n }\n\n active = true;\n }\n\n const field = opts.getFilterField();\n const filtered = update.text\n ? items.filter((item) => {\n if (!item || typeof item !== 'object') return false;\n\n return String((item as Record<string, unknown>)[field] || '')\n .toLowerCase()\n .includes(update.text.toLowerCase());\n })\n : items;\n\n if (t !== token) return;\n\n opts.emit({ ...update, items: filtered });\n }\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/texteditor.constants.ts"],"names":[],"mappings":";AAOA,IAAM,EAAA,GAAK,IAAA;AACX,IAAM,KAAK,EAAA,GAAK,IAAA;AAMT,IAAM,qBAAA,GAAwB;AAAA,EACjC,QAAQ,CAAA,GAAI,EAAA;AAAA,EACZ,QAAQ,CAAA,GAAI,EAAA;AAAA,EACZ,UAAU,CAAA,GAAI,EAAA;AAAA,EACd,SAAS,CAAA,GAAI,EAAA;AAAA,EACb,SAAS,CAAA,GAAI,EAAA;AAAA,EACb,QAAQ,CAAA,GAAI,EAAA;AAAA,EACZ,UAAU,CAAA,GAAI,EAAA;AAAA,EACd,UAAU,CAAA,GAAI,EAAA;AAAA,EACd,SAAS,CAAA,GAAI,EAAA;AAAA,EACb,QAAQ,EAAA,GAAK,EAAA;AAAA,EACb,gBAAgB,EAAA,GAAK,EAAA;AAAA,EACrB,UAAU,EAAA,GAAK;AACnB;AAMO,IAAM,yBAAA,GAA4B;AAAA,EACrC,UAAA,EAAY,SAAA;AAAA,EACZ,aAAA,EAAe,2CAAA;AAAA,EACf,gBAAA,EAAkB,sDAAA;AAAA,EAClB,kBAAA,EAAoB;AACxB","file":"chunk-H3RFOYCT.mjs","sourcesContent":["/**\n * Public, named constants — exported from `@primeui/texteditor-core` and\n * re-exported by every framework adapter. Demos and customer code should\n * use these instead of inline magic numbers so call sites stay readable\n * and the units of measure are obvious from the identifier.\n */\n\nconst KB = 1024;\nconst MB = KB * 1024;\n\n/**\n * File-size constants in bytes. Use these for `:maxFileSize` on\n * `<TextEditor.ImageUpload>` and `<TextEditor.DocumentUpload>`.\n */\nexport const TEXT_EDITOR_FILE_SIZE = {\n ONE_MB: 1 * MB,\n TWO_MB: 2 * MB,\n THREE_MB: 3 * MB,\n FOUR_MB: 4 * MB,\n FIVE_MB: 5 * MB,\n SIX_MB: 6 * MB,\n SEVEN_MB: 7 * MB,\n EIGHT_MB: 8 * MB,\n NINE_MB: 9 * MB,\n TEN_MB: 10 * MB,\n TWENTY_FIVE_MB: 25 * MB,\n FIFTY_MB: 50 * MB\n} as const;\n\n/**\n * Default upload allow-lists. Override these per-instance via\n * `:allowedTypes` when the application has stricter or laxer rules.\n */\nexport const TEXT_EDITOR_ALLOWED_TYPES = {\n IMAGES_ANY: 'image/*',\n IMAGES_COMMON: 'image/jpeg,image/png,image/gif,image/webp',\n DOCUMENTS_OFFICE: '.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.txt,.csv,.zip',\n DOCUMENTS_PDF_ONLY: '.pdf'\n} as const;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/plugins/contextToolbar.ts"],"names":[],"mappings":";;;AAQO,SAAS,2BAA2B,SAAA,EAAoC;AAC3E,EAAA,OAAO,IAAI,MAAA,CAAO;AAAA,IACd,KAAA,EAAO;AAAA,MACH,eAAA,EAAiB;AAAA,QACb,MAAM,IAAA,EAAM;AACR,UAAA,IAAI,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,KAAA,EAAO,OAAO,KAAA;AAEvC,UAAA,MAAM,QAAA,GAAW,qBAAqB,IAAI,CAAA;AAE1C,UAAA,IAAI,QAAA,EAAU;AACV,YAAA,SAAA,CAAU,UAAU,QAAQ,CAAA;AAAA,UAChC;AAEA,UAAA,OAAO,KAAA;AAAA,QACX;AAAA;AACJ;AACJ,GACH,CAAA;AACL","file":"chunk-IUQKSDKG.mjs","sourcesContent":["import { Plugin } from 'prosemirror-state';\nimport type { CaretPosition } from '@primeui/texteditor-types';\nimport { getSelectionPosition } from '../state/selection';\n\ninterface ContextToolbarCallbacks {\n onRequest: (position: CaretPosition) => void;\n}\n\nexport function createContextToolbarPlugin(callbacks: ContextToolbarCallbacks) {\n return new Plugin({\n props: {\n handleDOMEvents: {\n keyup(view) {\n if (view.state.selection.empty) return false;\n\n const position = getSelectionPosition(view);\n\n if (position) {\n callbacks.onRequest(position);\n }\n\n return false;\n }\n }\n }\n });\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/plugins/slashCommands.ts"],"names":["topNode"],"mappings":";;;;;AAOO,IAAM,cAAA,GAAiB,IAAI,SAAA,CAAU,eAAe;AAa3D,SAAS,cAAA,CAAe,MAAkB,GAAA,EAA4B;AAClE,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA;AAEnC,EAAA,OAAO;AAAA,IACH,KAAK,MAAA,CAAO,GAAA;AAAA,IACZ,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,MAAA,EAAQ,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO,GAAA;AAAA,IAC/B,KAAA,EAAO;AAAA,GACX;AACJ;AAMA,SAAS,gBAAA,CAAiB,KAAa,SAAA,EAA2B;AAC9D,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,OAAA,CAAQ,SAAS,CAAA;AAGlC,EAAA,KAAA,IAAS,KAAA,GAAQ,IAAA,CAAK,KAAA,EAAO,KAAA,GAAQ,GAAG,KAAA,EAAA,EAAS;AAC7C,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,KAAK,EAAE,IAAA,CAAK,IAAA;AAEnC,IAAA,IAAI,IAAA,KAAS,YAAA,IAAgB,IAAA,KAAS,YAAA,EAAc,OAAO,EAAA;AAAA,EAC/D;AAEA,EAAA,MAAM,eAAe,IAAA,CAAK,YAAA;AAC1B,EAAA,MAAM,aAAa,IAAA,CAAK,MAAA,CAAO,YAAY,CAAA,EAAG,YAAA,EAAc,QAAW,QAAQ,CAAA;AAG/E,EAAA,KAAA,IAAS,IAAI,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAC7C,IAAA,MAAM,IAAA,GAAO,WAAW,CAAC,CAAA;AAGzB,IAAA,IAAI,SAAS,GAAA,IAAO,IAAA,KAAS,IAAA,IAAQ,IAAA,KAAS,QAAU,OAAO,EAAA;AAE/D,IAAA,IAAI,SAAS,GAAA,EAAK;AAEd,MAAA,IAAI,MAAM,CAAA,IAAK,UAAA,CAAW,CAAA,GAAI,CAAC,MAAM,GAAA,IAAO,UAAA,CAAW,CAAA,GAAI,CAAC,MAAM,IAAA,IAAQ,UAAA,CAAW,CAAA,GAAI,CAAC,MAAM,MAAA,EAAU;AAEtG,QAAA,OAAO,IAAA,CAAK,OAAM,GAAI,CAAA;AAAA,MAC1B;AAEA,MAAA,OAAO,EAAA;AAAA,IACX;AAAA,EACJ;AAEA,EAAA,OAAO,EAAA;AACX;AAEO,SAAS,kBAAkB,SAAA,EAA+B;AAC7D,EAAA,IAAI,SAAA,GAAY,KAAA;AAEhB,EAAA,OAAO,IAAI,MAAA,CAAO;AAAA,IACd,GAAA,EAAK,cAAA;AAAA,IACL,KAAA,EAAO;AAAA,MACH,eAAA,EAAiB;AAAA,QACb,OAAA,CAAQ,MAAM,KAAA,EAAO;AACjB,UAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,QAAA,IAAY,SAAA,EAAW;AACrC,YAAA,SAAA,GAAY,KAAA;AAEZ,YAAA,SAAA,CAAU,QAAA,CAAS,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,EAAA,EAAI,QAAA,EAAU,MAAM,CAAA;AAC9D,YAAA,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,EAAE,CAAA;AAAA,UAC/B;AAEA,UAAA,OAAO,KAAA;AAAA,QACX,CAAA;AAAA,QACA,KAAK,IAAA,EAAM;AACP,UAAA,IAAI,SAAA,EAAW;AACX,YAAA,SAAA,GAAY,KAAA;AACZ,YAAA,SAAA,CAAU,QAAA,CAAS,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,EAAA,EAAI,QAAA,EAAU,MAAM,CAAA;AAC9D,YAAA,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,EAAE,CAAA;AAAA,UAC/B;AAEA,UAAA,OAAO,KAAA;AAAA,QACX;AAAA,OACJ;AAAA,MACA,eAAA,CAAgB,KAAA,EAAO,KAAA,EAAO,GAAA,EAAK,IAAA,EAAM;AACrC,QAAA,IAAI,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AACpB,UAAA,SAAA,GAAY,IAAA;AAAA,QAChB;AAEA,QAAA,OAAO,KAAA;AAAA,MACX,CAAA;AAAA,MACA,YAAY,KAAA,EAAO;AACf,QAAA,IAAI,CAAC,SAAA,EAAW,OAAO,aAAA,CAAc,KAAA;AAErC,QAAA,MAAM,EAAE,IAAA,EAAK,GAAI,KAAA,CAAM,SAAA;AACvB,QAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,KAAA,CAAM,GAAA,EAAK,IAAI,CAAA;AAEnD,QAAA,IAAI,UAAA,GAAa,CAAA,EAAG,OAAO,aAAA,CAAc,KAAA;AAEzC,QAAA,MAAM,aAAA,GAAgB,OAAO,UAAA,GAAa,CAAA;AAC1C,QAAA,MAAM,KAAA,GAAgC;AAAA,UAClC,OAAO,iBAAA,CAAQ,WAAA;AAAA,UACf,kBAAA,EAAoB;AAAA,SACxB;AAEA,QAAA,IAAI,CAAC,aAAA,IAAiB,SAAA,CAAU,WAAA,EAAa;AACzC,UAAA,KAAA,CAAM,kBAAkB,IAAI,SAAA,CAAU,WAAA;AAAA,QAC1C;AAEA,QAAA,MAAM,IAAA,GAAO,UAAA,CAAW,MAAA,CAAO,UAAA,EAAY,MAAM,KAAK,CAAA;AAEtD,QAAA,OAAO,cAAc,MAAA,CAAO,KAAA,CAAM,GAAA,EAAK,CAAC,IAAI,CAAC,CAAA;AAAA,MACjD;AAAA,KACJ;AAAA,IACA,IAAA,GAAO;AACH,MAAA,OAAO;AAAA,QACH,OAAO,IAAA,EAAM;AACT,UAAA,IAAI,CAAC,SAAA,EAAW;AAEhB,UAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAG,GAAI,KAAK,KAAA,CAAM,SAAA;AAGhC,UAAA,IAAI,SAAS,EAAA,EAAI;AACb,YAAA,SAAA,GAAY,KAAA;AACZ,YAAA,SAAA,CAAU,QAAA,CAAS,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,EAAA,EAAI,QAAA,EAAU,MAAM,CAAA;AAE9D,YAAA;AAAA,UACJ;AAEA,UAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,IAAA,CAAK,KAAA,CAAM,KAAK,IAAI,CAAA;AAExD,UAAA,IAAI,cAAc,CAAA,EAAG;AACjB,YAAA,MAAM,IAAA,GAAO,IAAA,GAAO,UAAA,GAAa,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,WAAA,CAAY,UAAA,GAAa,CAAA,EAAG,IAAA,EAAM,MAAA,EAAW,QAAQ,CAAA,GAAI,EAAA;AAE7G,YAAA,SAAA,CAAU,QAAA,CAAS;AAAA,cACf,MAAA,EAAQ,IAAA;AAAA,cACR,IAAA;AAAA,cACA,QAAA,EAAU,cAAA,CAAe,IAAA,EAAM,UAAU;AAAA,aAC5C,CAAA;AAAA,UACL,CAAA,MAAO;AACH,YAAA,SAAA,GAAY,KAAA;AACZ,YAAA,SAAA,CAAU,QAAA,CAAS,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,EAAA,EAAI,QAAA,EAAU,MAAM,CAAA;AAAA,UAClE;AAAA,QACJ;AAAA,OACJ;AAAA,IACJ;AAAA,GACH,CAAA;AACL;AAMO,SAAS,yBAAA,CAA0B,MAAkB,QAAA,EAAsB;AAC9E,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,IAAA,CAAK,KAAA,CAAM,SAAA;AAC5B,EAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,IAAA,CAAK,KAAA,CAAM,KAAK,IAAI,CAAA;AAExD,EAAA,IAAI,aAAa,CAAA,EAAG;AAEpB,EAAA,MAAM,KAAK,IAAA,CAAK,KAAA,CAAM,EAAA,CAAG,MAAA,CAAO,YAAY,IAAI,CAAA;AAEhD,EAAA,IAAA,CAAK,SAAS,EAAE,CAAA;AAChB,EAAA,IAAA,CAAK,KAAA,EAAM;AACX,EAAA,QAAA,EAAS;AACb;AAOO,SAAS,mBAAA,CAAoB,MAAkB,QAAA,EAAsB;AACxE,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,IAAA,CAAK,KAAA,CAAM,SAAA;AAC5B,EAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,IAAA,CAAK,KAAA,CAAM,KAAK,IAAI,CAAA;AAExD,EAAA,IAAI,aAAa,CAAA,EAAG;AAEpB,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,UAAU,CAAA;AAC9C,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AAC3B,EAAA,MAAM,cAAc,IAAA,GAAO,UAAA;AAC3B,EAAA,MAAM,mBAAmB,OAAA,CAAQ,IAAA,CAAK,SAAS,WAAA,IAAe,OAAA,CAAQ,QAAQ,IAAA,KAAS,WAAA;AAEvF,EAAA,IAAI,gBAAA,EAAkB;AAElB,IAAA,MAAM,KAAK,IAAA,CAAK,KAAA,CAAM,EAAA,CAAG,MAAA,CAAO,YAAY,IAAI,CAAA;AAEhD,IAAA,IAAA,CAAK,SAAS,EAAE,CAAA;AAChB,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,QAAA,EAAS;AAAA,EACb,CAAA,MAAA,IAAW,IAAA,CAAK,KAAA,GAAQ,CAAA,EAAG;AAEvB,IAAA,MAAMA,QAAAA,GAAU,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AAC3B,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA;AAC5B,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAC3B,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAC9B,IAAA,MAAM,YAAYA,QAAAA,CAAQ,UAAA;AAC1B,IAAA,MAAM,WAAA,GAAcA,QAAAA,CAAQ,KAAA,CAAM,SAAS,CAAA;AAC3C,IAAA,MAAM,gBAAA,GAAmB,WAAA,CAAY,WAAA,CAAY,MAAA,KAAW,WAAA;AAE5D,IAAA,MAAM,MAAA,GAAS,KAAK,KAAA,CAAM,MAAA;AAC1B,IAAA,MAAM,EAAA,GAAK,KAAK,KAAA,CAAM,EAAA;AACtB,IAAA,MAAM,QAAkB,EAAC;AAGzB,IAAA,MAAM,WAAA,GAAc,gBAAA,GAAmB,SAAA,GAAY,SAAA,GAAY,CAAA;AAE/D,IAAA,IAAI,cAAc,CAAA,EAAG;AACjB,MAAA,MAAM,cAAwB,EAAC;AAE/B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,EAAa,CAAA,EAAA,EAAK;AAClC,QAAA,MAAM,IAAA,GAAOA,QAAAA,CAAQ,KAAA,CAAM,CAAC,CAAA;AAI5B,QAAA,IAAI,CAAA,KAAM,SAAA,IAAa,CAAC,gBAAA,EAAkB;AACtC,UAAA,MAAM,aAAa,IAAA,CAAK,UAAA;AAExB,UAAA,IAAI,UAAA,IAAc,WAAW,WAAA,EAAa;AACtC,YAAA,MAAM,OAAA,GAAU,UAAA,CAAW,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,UAAA,CAAW,OAAA,CAAQ,IAAA,GAAO,WAAW,CAAC,CAAA;AACpF,YAAA,MAAM,OAAiB,EAAC;AAExB,YAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,EAAG,EAAA,EAAI,EAAA,KAAO;AACxB,cAAA,IAAI,EAAA,GAAK,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AAAA,YAC3B,CAAC,CAAA;AACD,YAAA,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,CAAC,OAAA,EAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AAE7D,YAAA;AAAA,UACJ;AAAA,QACJ;AAEA,QAAA,WAAA,CAAY,KAAK,IAAI,CAAA;AAAA,MACzB;AAEA,MAAA,KAAA,CAAM,KAAKA,QAAAA,CAAQ,IAAA,CAAK,OAAOA,QAAAA,CAAQ,KAAA,EAAO,WAAW,CAAC,CAAA;AAAA,IAC9D;AAGA,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,KAAA,CAAM,SAAA,CAAU,MAAA,EAAO;AAEnD,IAAA,KAAA,CAAM,KAAK,YAAY,CAAA;AAGvB,IAAA,MAAM,UAAA,GAAa,gBAAA,GAAmB,SAAA,GAAY,CAAA,GAAI,SAAA,GAAY,CAAA;AAElE,IAAA,IAAI,aAAa,SAAA,EAAW;AACxB,MAAA,MAAM,aAAuB,EAAC;AAE9B,MAAA,KAAA,IAAS,CAAA,GAAI,UAAA,EAAY,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AACzC,QAAA,UAAA,CAAW,IAAA,CAAKA,QAAAA,CAAQ,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,MACpC;AAEA,MAAA,KAAA,CAAM,KAAKA,QAAAA,CAAQ,IAAA,CAAK,OAAOA,QAAAA,CAAQ,KAAA,EAAO,UAAU,CAAC,CAAA;AAAA,IAC7D;AAGA,IAAA,EAAA,CAAG,WAAA,CAAY,MAAA,EAAQ,MAAA,EAAQ,KAAK,CAAA;AAGpC,IAAA,IAAI,SAAA,GAAY,MAAA;AAEhB,IAAA,IAAI,cAAc,CAAA,EAAG;AACjB,MAAA,SAAA,IAAa,KAAA,CAAM,CAAC,CAAA,CAAE,QAAA;AAAA,IAC1B;AAEA,IAAA,SAAA,IAAa,CAAA;AAEb,IAAA,EAAA,CAAG,aAAa,aAAA,CAAc,MAAA,CAAO,EAAA,CAAG,GAAA,EAAK,SAAS,CAAC,CAAA;AACvD,IAAA,IAAA,CAAK,SAAS,EAAE,CAAA;AAChB,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,QAAA,EAAS;AAAA,EACb,CAAA,MAAO;AAEH,IAAA,MAAM,KAAK,IAAA,CAAK,KAAA,CAAM,EAAA,CAAG,MAAA,CAAO,YAAY,IAAI,CAAA;AAChD,IAAA,MAAM,cAAc,EAAA,CAAG,OAAA,CAAQ,IAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAA;AAC9C,IAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,UAAU,MAAA,EAAO;AAE3D,IAAA,EAAA,CAAG,MAAA,CAAO,WAAA,GAAc,CAAA,EAAG,SAAS,CAAA;AACpC,IAAA,EAAA,CAAG,aAAa,aAAA,CAAc,MAAA,CAAO,GAAG,GAAA,EAAK,WAAA,GAAc,CAAC,CAAC,CAAA;AAC7D,IAAA,IAAA,CAAK,SAAS,EAAE,CAAA;AAChB,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,QAAA,EAAS;AAAA,EACb;AACJ","file":"chunk-KNZAMA6H.mjs","sourcesContent":["import type { CaretPosition } from '@primeui/texteditor-types';\nimport { Fragment, type Node as PMNode } from 'prosemirror-model';\nimport { Plugin, PluginKey, TextSelection } from 'prosemirror-state';\nimport type { EditorView } from 'prosemirror-view';\nimport { Decoration, DecorationSet } from 'prosemirror-view';\nimport { textEditorClasses as classes } from '../texteditor.classes';\n\nexport const slashPluginKey = new PluginKey('slashCommands');\n\nexport interface SlashUpdate {\n active: boolean;\n text: string;\n position: CaretPosition | null;\n}\n\ninterface SlashPluginOptions {\n onUpdate: (update: SlashUpdate) => void;\n placeholder?: string;\n}\n\nfunction getCaretCoords(view: EditorView, pos: number): CaretPosition {\n const coords = view.coordsAtPos(pos);\n\n return {\n top: coords.top,\n left: coords.left,\n bottom: coords.bottom,\n height: coords.bottom - coords.top,\n width: 0\n };\n}\n\n/**\n * Scan backwards from cursor to find '/' preceded by whitespace or start of block.\n * Returns the document position of '/' if found, or -1.\n */\nfunction findSlashTrigger(doc: PMNode, cursorPos: number): number {\n const $pos = doc.resolve(cursorPos);\n\n // Don't activate inside blockquotes or code blocks\n for (let depth = $pos.depth; depth > 0; depth--) {\n const name = $pos.node(depth).type.name;\n\n if (name === 'blockquote' || name === 'code_block') return -1;\n }\n\n const parentOffset = $pos.parentOffset;\n const parentText = $pos.parent.textBetween(0, parentOffset, undefined, '\\ufffc');\n\n // Scan backwards from cursor to find '/'\n for (let i = parentText.length - 1; i >= 0; i--) {\n const char = parentText[i];\n\n // Found a space before finding '/' — no slash command\n if (char === ' ' || char === '\\n' || char === '\\u00A0') return -1;\n\n if (char === '/') {\n // '/' must be at start of text or preceded by whitespace\n if (i === 0 || parentText[i - 1] === ' ' || parentText[i - 1] === '\\n' || parentText[i - 1] === '\\u00A0') {\n // Convert parent-relative offset to document position\n return $pos.start() + i;\n }\n\n return -1;\n }\n }\n\n return -1;\n}\n\nexport function createSlashPlugin(callbacks: SlashPluginOptions) {\n let activated = false;\n\n return new Plugin({\n key: slashPluginKey,\n props: {\n handleDOMEvents: {\n keydown(view, event) {\n if (event.key === 'Escape' && activated) {\n activated = false;\n // Notify directly — the view.update hook early-returns on !activated and can't emit it.\n callbacks.onUpdate({ active: false, text: '', position: null });\n view.dispatch(view.state.tr);\n }\n\n return false;\n },\n blur(view) {\n if (activated) {\n activated = false;\n callbacks.onUpdate({ active: false, text: '', position: null });\n view.dispatch(view.state.tr);\n }\n\n return false;\n }\n },\n handleTextInput(_view, _from, _to, text) {\n if (text.endsWith('/')) {\n activated = true;\n }\n\n return false;\n },\n decorations(state) {\n if (!activated) return DecorationSet.empty;\n\n const { from } = state.selection;\n const triggerPos = findSlashTrigger(state.doc, from);\n\n if (triggerPos < 0) return DecorationSet.empty;\n\n const hasFilterText = from > triggerPos + 1;\n const attrs: Record<string, string> = {\n class: classes.slashTyping,\n 'data-slash-query': 'true'\n };\n\n if (!hasFilterText && callbacks.placeholder) {\n attrs['data-placeholder'] = callbacks.placeholder;\n }\n\n const deco = Decoration.inline(triggerPos, from, attrs);\n\n return DecorationSet.create(state.doc, [deco]);\n }\n },\n view() {\n return {\n update(view) {\n if (!activated) return;\n\n const { from, to } = view.state.selection;\n\n // Deactivate on range selection\n if (from !== to) {\n activated = false;\n callbacks.onUpdate({ active: false, text: '', position: null });\n\n return;\n }\n\n const triggerPos = findSlashTrigger(view.state.doc, from);\n\n if (triggerPos >= 0) {\n const text = from > triggerPos + 1 ? view.state.doc.textBetween(triggerPos + 1, from, undefined, '\\ufffc') : '';\n\n callbacks.onUpdate({\n active: true,\n text,\n position: getCaretCoords(view, triggerPos)\n });\n } else {\n activated = false;\n callbacks.onUpdate({ active: false, text: '', position: null });\n }\n }\n };\n }\n });\n}\n\n/**\n * Execute an inline slash command: remove the '/query' text and run the callback in place.\n * Does not create a new block — stays in the current block.\n */\nexport function executeSlashCommandInline(view: EditorView, callback: () => void) {\n const { from } = view.state.selection;\n const triggerPos = findSlashTrigger(view.state.doc, from);\n\n if (triggerPos < 0) return;\n\n const tr = view.state.tr.delete(triggerPos, from);\n\n view.dispatch(tr);\n view.focus();\n callback();\n}\n\n/**\n * Execute a slash command.\n * - Empty paragraph: delete '/query' and convert in place (Notion behavior).\n * - Any other case: create a new block after the current one and convert that.\n */\nexport function executeSlashCommand(view: EditorView, callback: () => void) {\n const { from } = view.state.selection;\n const triggerPos = findSlashTrigger(view.state.doc, from);\n\n if (triggerPos < 0) return;\n\n const $pos = view.state.doc.resolve(triggerPos);\n const topNode = $pos.node(1);\n const slashLength = from - triggerPos;\n const isEmptyParagraph = topNode.type.name === 'paragraph' && topNode.content.size === slashLength;\n\n if (isEmptyParagraph) {\n // Empty paragraph with only '/query' — delete and convert in place\n const tr = view.state.tr.delete(triggerPos, from);\n\n view.dispatch(tr);\n view.focus();\n callback();\n } else if ($pos.depth > 1) {\n // Nested block (list/blockquote) — split around the current item\n const topNode = $pos.node(1);\n const topPos = $pos.before(1);\n const topEnd = $pos.after(1);\n const itemIndex = $pos.index(1);\n const itemCount = topNode.childCount;\n const currentItem = topNode.child(itemIndex);\n const currentItemEmpty = currentItem.textContent.length === slashLength;\n\n const schema = view.state.schema;\n const tr = view.state.tr;\n const nodes: PMNode[] = [];\n\n // Items before (and including current if it has other content) → keep as a list\n const beforeCount = currentItemEmpty ? itemIndex : itemIndex + 1;\n\n if (beforeCount > 0) {\n const beforeItems: PMNode[] = [];\n\n for (let i = 0; i < beforeCount; i++) {\n const item = topNode.child(i);\n\n // The current (non-empty) item keeps its content but must shed the\n // trailing \"/query\" trigger text, which otherwise leaks into the list.\n if (i === itemIndex && !currentItemEmpty) {\n const firstChild = item.firstChild;\n\n if (firstChild && firstChild.isTextblock) {\n const trimmed = firstChild.cut(0, Math.max(0, firstChild.content.size - slashLength));\n const rest: PMNode[] = [];\n\n item.forEach((c, _o, ci) => {\n if (ci > 0) rest.push(c);\n });\n beforeItems.push(item.copy(Fragment.from([trimmed, ...rest])));\n\n continue;\n }\n }\n\n beforeItems.push(item);\n }\n\n nodes.push(topNode.type.create(topNode.attrs, beforeItems));\n }\n\n // New paragraph for the slash command\n const newParagraph = schema.nodes.paragraph.create();\n\n nodes.push(newParagraph);\n\n // Items after the current item → keep as a list\n const afterStart = currentItemEmpty ? itemIndex + 1 : itemIndex + 1;\n\n if (afterStart < itemCount) {\n const afterItems: PMNode[] = [];\n\n for (let i = afterStart; i < itemCount; i++) {\n afterItems.push(topNode.child(i));\n }\n\n nodes.push(topNode.type.create(topNode.attrs, afterItems));\n }\n\n // Replace the entire list with the split parts\n tr.replaceWith(topPos, topEnd, nodes);\n\n // Find the new paragraph position and place cursor there\n let cursorPos = topPos;\n\n if (beforeCount > 0) {\n cursorPos += nodes[0].nodeSize;\n }\n\n cursorPos += 1; // inside the new paragraph\n\n tr.setSelection(TextSelection.create(tr.doc, cursorPos));\n view.dispatch(tr);\n view.focus();\n callback();\n } else {\n // Top-level non-empty block — create a new block after\n const tr = view.state.tr.delete(triggerPos, from);\n const topBlockEnd = tr.mapping.map($pos.end(1));\n const paragraph = view.state.schema.nodes.paragraph.create();\n\n tr.insert(topBlockEnd + 1, paragraph);\n tr.setSelection(TextSelection.create(tr.doc, topBlockEnd + 2));\n view.dispatch(tr);\n view.focus();\n callback();\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/url.ts"],"names":[],"mappings":";AACO,SAAS,iBAAiB,KAAA,EAAiD;AAC9E,EAAA,IAAI,KAAA,IAAS,MAAM,OAAO,IAAA;AAE1B,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AACpC;AAGA,IAAM,iBAAiB,CAAC,OAAA,EAAS,QAAA,EAAU,SAAA,EAAW,QAAQ,MAAM,CAAA;AAGpE,IAAM,aAAA,GAAgB,IAAI,MAAA,CAAO,2CAAA,EAAwD,GAAG,CAAA;AAGrF,SAAS,YAAY,GAAA,EAA+C;AACvE,EAAA,IAAI,GAAA,IAAO,MAAM,OAAO,IAAA;AAExB,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,OAAA,CAAQ,aAAA,EAAe,EAAE,CAAA;AAE9C,EAAA,IAAI,QAAA,KAAa,IAAI,OAAO,IAAA;AAE5B,EAAA,MAAM,WAAA,GAAc,wBAAA,CAAyB,IAAA,CAAK,QAAQ,CAAA;AAE1D,EAAA,IAAI,CAAC,aAAa,OAAO,QAAA;AAEzB,EAAA,MAAM,WAAW,CAAA,EAAG,WAAA,CAAY,CAAC,CAAA,CAAE,aAAa,CAAA,CAAA,CAAA;AAEhD,EAAA,OAAO,cAAA,CAAe,QAAA,CAAS,QAAQ,CAAA,GAAI,QAAA,GAAW,IAAA;AAC1D;AAGO,SAAS,iBAAiB,GAAA,EAA+C;AAC5E,EAAA,IAAI,GAAA,IAAO,MAAM,OAAO,IAAA;AAExB,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,OAAA,CAAQ,aAAA,EAAe,EAAE,CAAA;AAI9C,EAAA,IAAI,oEAAA,CAAqE,IAAA,CAAK,QAAQ,CAAA,EAAG,OAAO,QAAA;AAChG,EAAA,IAAI,SAAA,CAAU,IAAA,CAAK,QAAQ,CAAA,EAAG,OAAO,IAAA;AAErC,EAAA,OAAO,YAAY,GAAG,CAAA;AAC1B","file":"chunk-MNKMKFLQ.mjs","sourcesContent":["// Strip <> from a free-text attribute (alt, mention label/id).\nexport function sanitizeTextAttr(value: string | null | undefined): string | null {\n if (value == null) return null;\n\n return value.replace(/[<>]/g, '');\n}\n\n// URL scheme allowlist shared by link getAttrs/toDOM and the link commands.\nconst SAFE_PROTOCOLS = ['http:', 'https:', 'mailto:', 'tel:', 'ftp:'];\n\n// eslint-disable-next-line no-control-regex\nconst IGNORED_CHARS = new RegExp('[\\u0000-\\u0020\\u007f\\u200b-\\u200f\\u2028\\u2029\\ufeff]', 'g');\n\n// Returns a safe href, or null for a disallowed scheme. Relative/fragment URLs are allowed.\nexport function sanitizeUrl(url: string | null | undefined): string | null {\n if (url == null) return null;\n\n const stripped = url.replace(IGNORED_CHARS, '');\n\n if (stripped === '') return null;\n\n const schemeMatch = /^([a-z][a-z0-9+.-]*):/i.exec(stripped);\n\n if (!schemeMatch) return stripped;\n\n const protocol = `${schemeMatch[1].toLowerCase()}:`;\n\n return SAFE_PROTOCOLS.includes(protocol) ? stripped : null;\n}\n\n// Like sanitizeUrl but also allows data:image/* (raster only; svg excluded).\nexport function sanitizeImageUrl(url: string | null | undefined): string | null {\n if (url == null) return null;\n\n const stripped = url.replace(IGNORED_CHARS, '');\n\n // Allow only well-formed base64 raster data URIs; reject svg and any\n // malformed/foreign data:image body (e.g. data:image/png,<svg ...>).\n if (/^data:image\\/(png|jpe?g|gif|webp|avif|bmp);base64,[a-z0-9+/=\\s]+$/i.test(stripped)) return stripped;\n if (/^data:/i.test(stripped)) return null;\n\n return sanitizeUrl(url);\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/plugins/columnWidthPin.ts"],"names":["tr"],"mappings":";;;;AAOO,SAAS,0BAAA,GAA6B;AACzC,EAAA,IAAI,IAAA,GAA0B,IAAA;AAE9B,EAAA,OAAO,IAAI,MAAA,CAAO;AAAA,IACd,KAAK,UAAA,EAAY;AACb,MAAA,IAAA,GAAO,UAAA;AAEP,MAAA,OAAO;AAAA,QACH,OAAA,GAAU;AACN,UAAA,IAAA,GAAO,IAAA;AAAA,QACX;AAAA,OACJ;AAAA,IACJ,CAAA;AAAA,IACA,iBAAA,CAAkB,YAAA,EAAc,SAAA,EAAW,QAAA,EAAU;AAEjD,MAAA,MAAM,aAAA,GAAgB,aAAa,IAAA,CAAK,CAACA,QAAOA,GAAAA,CAAG,OAAA,CAAQ,uBAAuB,CAAA,EAAG,WAAW,CAAA;AAEhG,MAAA,IAAI,CAAC,aAAA,IAAiB,CAAC,IAAA,EAAM,OAAO,IAAA;AAEpC,MAAA,MAAM,SAAA,GAAY,cAAA,CAAe,QAAA,CAAS,MAAM,CAAA,CAAE,KAAA;AAClD,MAAA,MAAM,KAAK,QAAA,CAAS,EAAA;AACpB,MAAA,IAAI,OAAA,GAAU,KAAA;AAEd,MAAA,QAAA,CAAS,GAAA,CAAI,WAAA,CAAY,CAAC,IAAA,EAAM,GAAA,KAAQ;AACpC,QAAA,IAAI,IAAA,CAAK,IAAA,KAAS,SAAA,EAAW,OAAO,KAAA;AAEpC,QAAA,IAAI,SAAS,IAAA,EAAM,GAAA,EAAK,IAAA,EAAO,EAAE,GAAG,OAAA,GAAU,IAAA;AAE9C,QAAA,OAAO,KAAA;AAAA,MACX,CAAC,CAAA;AAED,MAAA,OAAO,UAAU,EAAA,GAAK,IAAA;AAAA,IAC1B;AAAA,GACH,CAAA;AACL;AAGA,SAAS,QAAA,CAAS,KAAA,EAAa,QAAA,EAAkB,IAAA,EAAkB,EAAA,EAA0B;AACzF,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA;AAC9B,EAAA,MAAM,QAAQ,QAAA,GAAW,CAAA;AACzB,EAAA,IAAI,OAAA,GAAU,KAAA;AAEd,EAAA,KAAA,IAAS,GAAA,GAAM,CAAA,EAAG,GAAA,GAAM,GAAA,CAAI,OAAO,GAAA,EAAA,EAAO;AACtC,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA;AAC3B,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,MAAA,CAAO,OAAO,CAAA;AAEjC,IAAA,IAAI,CAAC,IAAA,IAAA,CAAS,IAAA,CAAK,KAAA,CAAM,OAAA,IAAW,OAAO,CAAA,EAAG;AAC9C,IAAA,IAAI,KAAK,KAAA,CAAM,QAAA,IAAY,KAAK,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA,EAAG;AAEnD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,GAAQ,OAAO,CAAA;AACxC,IAAA,MAAM,KAAA,GAAQ,GAAA,EAAK,qBAAA,EAAsB,CAAE,KAAA;AAE3C,IAAA,IAAI,KAAA,IAAS,QAAQ,CAAA,EAAG;AACpB,MAAA,EAAA,CAAG,gBAAA,CAAiB,QAAQ,OAAA,EAAS,UAAA,EAAY,CAAC,IAAA,CAAK,KAAA,CAAM,KAAK,CAAC,CAAC,CAAA;AACpE,MAAA,OAAA,GAAU,IAAA;AAAA,IACd;AAAA,EACJ;AAEA,EAAA,OAAO,OAAA;AACX","file":"chunk-MWT5PK3Z.mjs","sourcesContent":["import type { Node } from 'prosemirror-model';\nimport { Plugin, type Transaction } from 'prosemirror-state';\nimport type { EditorView } from 'prosemirror-view';\nimport { columnResizingPluginKey, TableMap, tableNodeTypes } from 'prosemirror-tables';\n\n// On resize start, pin every unsized column to its rendered width so only the\n// dragged column changes (otherwise unsized columns jump to defaultCellMinWidth).\nexport function createColumnWidthPinPlugin() {\n let view: EditorView | null = null;\n\n return new Plugin({\n view(editorView) {\n view = editorView;\n\n return {\n destroy() {\n view = null;\n }\n };\n },\n appendTransaction(transactions, _oldState, newState) {\n // The columnResizing plugin sets `setDragging` meta on mousedown.\n const startedResize = transactions.some((tr) => tr.getMeta(columnResizingPluginKey)?.setDragging);\n\n if (!startedResize || !view) return null;\n\n const tableType = tableNodeTypes(newState.schema).table;\n const tr = newState.tr;\n let changed = false;\n\n newState.doc.descendants((node, pos) => {\n if (node.type !== tableType) return false;\n\n if (pinTable(node, pos, view!, tr)) changed = true;\n\n return false; // tables don't nest\n });\n\n return changed ? tr : null;\n }\n });\n}\n\n/** Pin each unsized, single-column cell of a table to its rendered width. */\nfunction pinTable(table: Node, tablePos: number, view: EditorView, tr: Transaction): boolean {\n const map = TableMap.get(table);\n const start = tablePos + 1;\n let changed = false;\n\n for (let col = 0; col < map.width; col++) {\n const cellRel = map.map[col]; // first row's cell in this column\n const cell = table.nodeAt(cellRel);\n\n if (!cell || (cell.attrs.colspan ?? 1) !== 1) continue;\n if (cell.attrs.colwidth && cell.attrs.colwidth[0]) continue;\n\n const dom = view.nodeDOM(start + cellRel) as HTMLElement | null;\n const width = dom?.getBoundingClientRect().width;\n\n if (width && width > 0) {\n tr.setNodeAttribute(start + cellRel, 'colwidth', [Math.round(width)]);\n changed = true;\n }\n }\n\n return changed;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/plugins/placeholder.ts"],"names":[],"mappings":"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","file":"chunk-NWRVBNBW.mjs","sourcesContent":["import { Plugin } from 'prosemirror-state';\nimport { Decoration, DecorationSet } from 'prosemirror-view';\nimport { textEditorClasses as classes } from '../texteditor.classes';\n\ninterface PlaceholderOptions {\n text: () => string | null | undefined;\n blockMode?: boolean;\n}\n\nexport function createPlaceholderPlugin(options: PlaceholderOptions) {\n return new Plugin({\n props: {\n decorations(state) {\n const text = options.text();\n\n if (!text) return DecorationSet.empty;\n\n const { doc, selection } = state;\n\n if (options.blockMode) {\n // Block mode: show placeholder widget inside the focused empty block\n const decorations: Decoration[] = [];\n const { $from } = selection;\n\n // Find the position inside the empty textblock to place the widget\n const addPlaceholderWidget = (insidePos: number) => {\n const widget = Decoration.widget(\n insidePos,\n () => {\n const span = document.createElement('span');\n\n span.className = classes.blockPlaceholder;\n span.textContent = text!;\n\n return span;\n },\n { side: -1 }\n );\n\n decorations.push(widget);\n };\n\n const compoundTypes = ['bullet_list', 'ordered_list', 'blockquote'];\n\n doc.forEach((node, pos) => {\n // Only show on the focused block\n const isFocused = $from.pos >= pos && $from.pos <= pos + node.nodeSize;\n\n if (!isFocused) return;\n\n if (node.isTextblock && node.content.size === 0) {\n // Direct textblock (paragraph, heading, code_block)\n addPlaceholderWidget(pos + 1);\n } else if (compoundTypes.includes(node.type.name) && node.firstChild) {\n // Lists/blockquote — find the innermost empty textblock\n let child = node.firstChild;\n let childPos = pos + 1;\n\n while (child && !child.isTextblock) {\n childPos += 1;\n child = child.firstChild!;\n }\n\n if (child?.isTextblock && child.content.size === 0) {\n addPlaceholderWidget(childPos + 1);\n }\n }\n });\n\n return decorations.length > 0 ? DecorationSet.create(doc, decorations) : DecorationSet.empty;\n }\n\n // Simple mode: only show when document is empty (single empty paragraph)\n if (doc.childCount > 1) return DecorationSet.empty;\n\n const firstChild = doc.firstChild;\n\n if (!firstChild || firstChild.type.name !== 'paragraph' || firstChild.content.size > 0) {\n return DecorationSet.empty;\n }\n\n const decoration = Decoration.node(0, firstChild.nodeSize, {\n class: classes.placeholder,\n 'data-placeholder': text\n });\n\n return DecorationSet.create(doc, [decoration]);\n }\n }\n });\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/plugins/inputRules.ts"],"names":[],"mappings":"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","file":"chunk-OGEMGWLR.mjs","sourcesContent":["import { InputRule, inputRules, textblockTypeInputRule, wrappingInputRule } from 'prosemirror-inputrules';\nimport type { MarkType, NodeType, Schema } from 'prosemirror-model';\nimport { clearTypographyMarks } from '../commands/blocks';\nimport { DEFAULT_HIGHLIGHT_COLOR } from '../commands/constants';\nimport { sanitizeImageUrl, sanitizeTextAttr, sanitizeUrl } from '../utils/url';\n\n// --- Block rules ---\n\n// Markdown \"# \" -> heading. Clears explicit font-size/font-family so the\n// heading owns its typography, matching the toolbar heading command.\nfunction headingRule(schema: Schema, nodeType: NodeType, maxLevel: number) {\n return new InputRule(new RegExp(`^(#{1,${maxLevel}})\\\\s$`), (state, match, start, end) => {\n const level = match[1].length;\n const $start = state.doc.resolve(start);\n\n if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), nodeType)) return null;\n\n const tr = state.tr.delete(start, end).setBlockType(start, start, nodeType, { level });\n const $pos = tr.doc.resolve(start);\n\n clearTypographyMarks(tr, schema, $pos.start(), $pos.end());\n\n return tr;\n });\n}\n\nfunction blockquoteRule(nodeType: NodeType) {\n return wrappingInputRule(/^>\\s$/, nodeType);\n}\n\nfunction bulletListRule(nodeType: NodeType) {\n return wrappingInputRule(/^[-*+]\\s$/, nodeType);\n}\n\nfunction orderedListRule(nodeType: NodeType) {\n return wrappingInputRule(\n /^(\\d+)\\.\\s$/,\n nodeType,\n (match) => ({ start: +match[1] }),\n (match, node) => node.childCount + node.attrs.start === +match[1]\n );\n}\n\nfunction checkListRule(nodeType: NodeType, itemType: NodeType, schema: Schema) {\n return new InputRule(/^\\[([xX ])?\\]\\s$/, (state, match, start, end) => {\n const checked = match[1] === 'x' || match[1] === 'X';\n const listItem = itemType.create({ checked }, schema.nodes.paragraph.create());\n const list = nodeType.create(null, listItem);\n\n return state.tr.replaceWith(start - 1, end, list);\n });\n}\n\nfunction codeBlockRule(nodeType: NodeType) {\n // ``` / ~~~ (or with a trailing lang) at the start of a line opens a code\n // block, capturing the optional language so it survives into serialization.\n return textblockTypeInputRule(/^(?:```|~~~)([\\w-]*)$/, nodeType, (match) => ({ language: match[1] || null }));\n}\n\nfunction horizontalRuleRule(nodeType: NodeType) {\n return new InputRule(/^---$/, (state, _match, start, end) => {\n return state.tr.replaceWith(start - 1, end, nodeType.create());\n });\n}\n\n// --- Inline mark rules ---\n\n/**\n * Creates an input rule that wraps text between delimiters with a mark.\n * Pattern must have two capture groups: (openingDelimiter)(content)\n * The closing delimiter is part of the regex but not captured.\n */\nfunction markInputRule(regexp: RegExp, markType: MarkType) {\n return new InputRule(regexp, (state, match, start, end) => {\n const [fullMatch, openDelim, content] = match;\n\n if (!content) return null;\n\n const textStart = start + fullMatch.indexOf(openDelim);\n const tr = state.tr;\n\n tr.replaceWith(textStart, end, state.schema.text(content, [markType.create()]));\n tr.removeStoredMark(markType);\n\n return tr;\n });\n}\n\n// Markdown autolink \"<https://...>\" -> clickable link over the URL.\nfunction autolinkRule(schema: Schema, markType: MarkType) {\n return new InputRule(/<((?:https?|mailto):[^>\\s]+)>$/, (state, match, start, end) => {\n const raw = match[1];\n const href = sanitizeUrl(raw);\n\n if (!href) return null;\n\n const tr = state.tr;\n\n tr.replaceWith(start, end, schema.text(raw, [markType.create({ href })]));\n tr.removeStoredMark(markType);\n\n return tr;\n });\n}\n\n// Markdown \"[text](url)\" -> linked text.\nfunction linkRule(schema: Schema, markType: MarkType) {\n return new InputRule(/(?:^|[^!])\\[([^\\]]+)\\]\\(([^)\\s]+)\\)$/, (state, match, start, end) => {\n const [fullMatch, text, rawHref] = match;\n const href = sanitizeUrl(rawHref);\n\n if (!text || !href) return null;\n\n // Skip the optional leading non-\"!\" char the regex consumed.\n const linkStart = start + fullMatch.indexOf('[');\n const tr = state.tr;\n\n tr.replaceWith(linkStart, end, schema.text(text, [markType.create({ href })]));\n tr.removeStoredMark(markType);\n\n return tr;\n });\n}\n\n// Markdown \"![alt](url)\" -> image.\nfunction imageRule(schema: Schema, nodeType: NodeType) {\n return new InputRule(/!\\[([^\\]]*)\\]\\(([^)\\s]+)\\)$/, (state, match, start, end) => {\n const [, alt, rawSrc] = match;\n const src = sanitizeImageUrl(rawSrc);\n\n if (!src) return null;\n\n return state.tr.replaceWith(start, end, nodeType.create({ src, alt: sanitizeTextAttr(alt) || null }));\n });\n}\n\n// Markdown \"==text==\" -> highlighted text (default highlight color via textStyle).\nfunction highlightRule(schema: Schema) {\n return new InputRule(/(?:^|\\s)(==)([^=]+)==$/, (state, match, start, end) => {\n const [fullMatch, openDelim, content] = match;\n\n if (!content || !schema.marks.textStyle) return null;\n\n const textStart = start + fullMatch.indexOf(openDelim);\n\n return state.tr.replaceWith(textStart, end, state.schema.text(content, [schema.marks.textStyle.create({ backgroundColor: DEFAULT_HIGHLIGHT_COLOR })]));\n });\n}\n\n// Markdown \"***text***\" -> bold + italic.\nfunction boldItalicRule(schema: Schema, bold: MarkType, italic: MarkType) {\n return new InputRule(/(?:^|\\s)(\\*\\*\\*)([^*]+)\\*\\*\\*$/, (state, match, start, end) => {\n const [fullMatch, openDelim, content] = match;\n\n if (!content) return null;\n\n const textStart = start + fullMatch.indexOf(openDelim);\n const tr = state.tr;\n\n tr.replaceWith(textStart, end, state.schema.text(content, [bold.create(), italic.create()]));\n tr.removeStoredMark(bold);\n tr.removeStoredMark(italic);\n\n return tr;\n });\n}\n\n// Markdown table header \"| a | b |\" + trailing space -> table seeded with the\n// header cells. Requires at least two columns so a lone \"| x |\" in prose (a\n// single cell) doesn't prematurely convert; the inner pipe disambiguates intent.\nfunction tableRule(schema: Schema) {\n return new InputRule(/^\\|(.+\\|.+)\\|\\s$/, (state, match, start) => {\n if (!schema.nodes.table) return null;\n\n const labels = match[1].split('|').map((h) => h.trim());\n\n // Need genuine columns: at least two cells and no fully-empty header.\n if (labels.length < 2 || labels.every((l) => !l)) return null;\n\n const headerCells = labels.map((label) => schema.nodes.table_header.create(null, label ? schema.nodes.paragraph.create(null, schema.text(label)) : schema.nodes.paragraph.create()));\n const bodyCells = labels.map(() => schema.nodes.table_cell.create(null, schema.nodes.paragraph.create()));\n const rows = [schema.nodes.table_row.create(null, headerCells), schema.nodes.table_row.create(null, bodyCells)];\n const table = schema.nodes.table.create(null, rows);\n\n const $start = state.doc.resolve(start);\n\n return state.tr.replaceWith($start.before(), $start.after(), table);\n });\n}\n\n/**\n * Create all markdown input rules for the given schema.\n */\nexport function createMarkdownInputRules(schema: Schema) {\n const rules: InputRule[] = [];\n\n // Block rules\n if (schema.nodes.heading) {\n rules.push(headingRule(schema, schema.nodes.heading, 6));\n }\n\n if (schema.nodes.blockquote) {\n rules.push(blockquoteRule(schema.nodes.blockquote));\n }\n\n if (schema.nodes.bullet_list) {\n rules.push(bulletListRule(schema.nodes.bullet_list));\n }\n\n if (schema.nodes.ordered_list) {\n rules.push(orderedListRule(schema.nodes.ordered_list));\n }\n\n if (schema.nodes.check_list && schema.nodes.check_list_item) {\n rules.push(checkListRule(schema.nodes.check_list, schema.nodes.check_list_item, schema));\n }\n\n if (schema.nodes.code_block) {\n rules.push(codeBlockRule(schema.nodes.code_block));\n }\n\n if (schema.nodes.horizontal_rule) {\n rules.push(horizontalRuleRule(schema.nodes.horizontal_rule));\n }\n\n if (schema.nodes.table && schema.nodes.table_row && schema.nodes.table_header && schema.nodes.table_cell) {\n rules.push(tableRule(schema));\n }\n\n // Image before link: \"![alt](url)\" contains \"[alt](url)\", so the image rule\n // must win or the link rule would fire on the inner pattern.\n if (schema.nodes.image) {\n rules.push(imageRule(schema, schema.nodes.image));\n }\n\n if (schema.marks.link) {\n rules.push(linkRule(schema, schema.marks.link));\n rules.push(autolinkRule(schema, schema.marks.link));\n }\n\n if (schema.marks.textStyle) {\n rules.push(highlightRule(schema));\n }\n\n // Inline mark rules — *** (bold+italic) before ** before * to avoid conflicts.\n if (schema.marks.bold && schema.marks.italic) {\n rules.push(boldItalicRule(schema, schema.marks.bold, schema.marks.italic));\n }\n\n if (schema.marks.bold) {\n rules.push(markInputRule(/(?:^|\\s)(\\*\\*)(.+?)\\*\\*$/, schema.marks.bold));\n // __text__ -> bold; leading boundary keeps intra-word underscores intact.\n rules.push(markInputRule(/(?:^|\\s)(__)(.+?)__$/, schema.marks.bold));\n }\n\n if (schema.marks.italic) {\n rules.push(markInputRule(/(?:^|[^*])(\\*)([^*]+)\\*$/, schema.marks.italic));\n // _text_ -> italic; requires a boundary before \"_\" so foo_bar_baz stays plain.\n rules.push(markInputRule(/(?:^|\\s)(_)([^_]+)_$/, schema.marks.italic));\n }\n\n if (schema.marks.code) {\n rules.push(markInputRule(/(?:^|\\s)(`)([^`]+)`$/, schema.marks.code));\n }\n\n if (schema.marks.strikethrough) {\n rules.push(markInputRule(/(?:^|\\s)(~~)(.+?)~~$/, schema.marks.strikethrough));\n }\n\n return inputRules({ rules });\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/serialization/htmlParser.ts"],"names":["ProseMirrorDOMParser"],"mappings":";;;AAEA,IAAM,WAAA,uBAAkB,OAAA,EAAsC;AAE9D,SAAS,UAAU,MAAA,EAAsC;AACrD,EAAA,IAAI,MAAA,GAAS,WAAA,CAAY,GAAA,CAAI,MAAM,CAAA;AAEnC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACT,IAAA,MAAA,GAASA,SAAA,CAAqB,WAAW,MAAM,CAAA;AAC/C,IAAA,WAAA,CAAY,GAAA,CAAI,QAAQ,MAAM,CAAA;AAAA,EAClC;AAEA,EAAA,OAAO,MAAA;AACX;AAKA,IAAM,eAAA,GAAkB,GAAA;AAIxB,IAAM,cAAA,GAAiB,GAAA;AAEvB,SAAS,eAAA,CAAgB,MAAc,GAAA,EAAsB;AACzD,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,CAAA,GAAI,EAAA;AAER,EAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA,GAAI,CAAC,OAAO,EAAA,EAAI;AAC1C,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,CAAA,GAAI,CAAC,CAAA;AAGlC,IAAA,IAAI,IAAA,KAAS,MAAQ,IAAA,KAAS,EAAA,IAAQ,SAAS,EAAA,IAAQ,EAAE,KAAA,GAAQ,GAAA,EAAK,OAAO,IAAA;AAAA,EACjF;AAEA,EAAA,OAAO,KAAA;AACX;AAEA,SAAS,eAAA,CAAgB,MAAkB,GAAA,EAAsB;AAE7D,EAAA,MAAM,QAA+C,EAAC;AAEtD,EAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,GAAG,CAAA;AAEjF,EAAA,OAAO,MAAM,MAAA,EAAQ;AACjB,IAAA,MAAM,EAAE,EAAA,EAAI,KAAA,EAAM,GAAI,MAAM,GAAA,EAAI;AAEhC,IAAA,IAAI,KAAA,GAAQ,KAAK,OAAO,IAAA;AAExB,IAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,IAAA,CAAK,EAAA,CAAG,QAAQ,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,KAAA,GAAQ,GAAG,CAAA;AAAA,EAC3F;AAEA,EAAA,OAAO,KAAA;AACX;AAGO,SAAS,oBAAoB,IAAA,EAAuB;AACvD,EAAA,IAAI,eAAA,CAAgB,IAAA,EAAM,cAAc,CAAA,EAAG,OAAO,IAAA;AAElD,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,aAAA,CAAc,UAAU,CAAA;AAE7C,EAAA,GAAA,CAAI,SAAA,GAAY,IAAA;AAEhB,EAAA,OAAO,eAAA,CAAgB,GAAA,CAAI,OAAA,EAAS,eAAe,CAAA;AACvD;AAKO,SAAS,oBAAoB,IAAA,EAAgC;AAChE,EAAA,IAAI,eAAA,CAAgB,IAAA,EAAM,cAAc,CAAA,EAAG;AACvC,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,4BAAA,EAA+B,cAAc,CAAA,KAAA,CAAO,CAAA;AAAA,EAC7E;AAEA,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,aAAA,CAAc,UAAU,CAAA;AAE7C,EAAA,GAAA,CAAI,SAAA,GAAY,IAAA;AAEhB,EAAA,IAAI,eAAA,CAAgB,GAAA,CAAI,OAAA,EAAS,eAAe,CAAA,EAAG;AAC/C,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,0CAAA,EAA6C,eAAe,CAAA,CAAE,CAAA;AAAA,EACvF;AAEA,EAAA,OAAO,GAAA,CAAI,OAAA;AACf;AAEO,SAAS,SAAA,CAAU,MAAc,MAAA,EAAgB;AACpD,EAAA,OAAO,UAAU,MAAM,CAAA,CAAE,KAAA,CAAM,mBAAA,CAAoB,IAAI,CAAC,CAAA;AAC5D;AAWO,SAAS,WAAA,CAAY,MAAc,MAAA,EAAuB;AAC7D,EAAA,OAAO,SAAA,CAAU,MAAM,CAAA,CAAE,UAAA,CAAW,mBAAA,CAAoB,IAAI,CAAA,EAAG,EAAE,kBAAA,EAAoB,IAAA,EAAM,CAAA;AAC/F","file":"chunk-PRFYR67X.mjs","sourcesContent":["import { DOMParser as ProseMirrorDOMParser, Slice, type Schema } from 'prosemirror-model';\n\nconst parserCache = new WeakMap<Schema, ProseMirrorDOMParser>();\n\nfunction getParser(schema: Schema): ProseMirrorDOMParser {\n let parser = parserCache.get(schema);\n\n if (!parser) {\n parser = ProseMirrorDOMParser.fromSchema(schema);\n parserCache.set(schema, parser);\n }\n\n return parser;\n}\n\n// Maximum element nesting depth allowed in incoming HTML. Pathologically deep\n// input (thousands of nested nodes) overflows the parser/renderer call stack and\n// crashes the editor; reject it before it reaches ProseMirror.\nconst MAX_PARSE_DEPTH = 200;\n// Cheap pre-parse cap on total open tags. Parsing the DOM tree itself is the\n// expensive step (super-linear for huge/deep input), so reject obviously\n// oversized HTML by counting tags in the string before ever building a tree.\nconst MAX_PARSE_TAGS = 50000;\n\nfunction tagCountExceeds(html: string, max: number): boolean {\n let count = 0;\n let i = -1;\n\n while ((i = html.indexOf('<', i + 1)) !== -1) {\n const next = html.charCodeAt(i + 1);\n\n // Count element open tags only (skip '</', '<!', '<?').\n if (next !== 0x2f && next !== 0x21 && next !== 0x3f && ++count > max) return true;\n }\n\n return false;\n}\n\nfunction exceedsMaxDepth(root: ParentNode, max: number): boolean {\n // Iterative DFS (no recursion — recursion would overflow on the very input we guard against).\n const stack: Array<{ el: Element; depth: number }> = [];\n\n for (const child of Array.from(root.children)) stack.push({ el: child, depth: 1 });\n\n while (stack.length) {\n const { el, depth } = stack.pop()!;\n\n if (depth > max) return true;\n\n for (const child of Array.from(el.children)) stack.push({ el: child, depth: depth + 1 });\n }\n\n return false;\n}\n\n// True when an HTML string is too large or nests deeper than MAX_PARSE_DEPTH.\nexport function htmlExceedsMaxDepth(html: string): boolean {\n if (tagCountExceeds(html, MAX_PARSE_TAGS)) return true;\n\n const tpl = document.createElement('template');\n\n tpl.innerHTML = html;\n\n return exceedsMaxDepth(tpl.content, MAX_PARSE_DEPTH);\n}\n\n// Parse untrusted HTML into an INERT fragment. A <template>'s content document\n// is inert: <img>/<iframe> resources are never fetched and event handlers like\n// onerror never fire, so no side effect runs before ProseMirror strips bad attrs.\nexport function htmlToInertFragment(html: string): DocumentFragment {\n if (tagCountExceeds(html, MAX_PARSE_TAGS)) {\n throw new RangeError(`HTML exceeds the maximum of ${MAX_PARSE_TAGS} tags`);\n }\n\n const tpl = document.createElement('template');\n\n tpl.innerHTML = html;\n\n if (exceedsMaxDepth(tpl.content, MAX_PARSE_DEPTH)) {\n throw new RangeError(`HTML nesting depth exceeds the maximum of ${MAX_PARSE_DEPTH}`);\n }\n\n return tpl.content;\n}\n\nexport function htmlToDoc(html: string, schema: Schema) {\n return getParser(schema).parse(htmlToInertFragment(html));\n}\n\n/**\n * Parse HTML into a maximally-open {@link Slice}, suitable for\n * `tr.replaceSelection(slice)` at any cursor position.\n *\n * Unlike `htmlToDoc(...).content` — which yields closed block nodes and throws\n * `RangeError: Invalid content for node` when spliced into an inline position —\n * an open slice lets ProseMirror fit block OR inline content into the current\n * selection context.\n */\nexport function htmlToSlice(html: string, schema: Schema): Slice {\n return getParser(schema).parseSlice(htmlToInertFragment(html), { preserveWhitespace: true });\n}\n"]}