@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
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/plugins/inputRules.ts"],"names":[],"mappings":";;;;;AAUA,SAAS,WAAA,CAAY,MAAA,EAAgB,QAAA,EAAoB,QAAA,EAAkB;AACvE,EAAA,OAAO,IAAI,SAAA,CAAU,IAAI,MAAA,CAAO,CAAA,MAAA,EAAS,QAAQ,CAAA,MAAA,CAAQ,CAAA,EAAG,CAAC,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,GAAA,KAAQ;AACtF,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA;AACvB,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,KAAK,CAAA;AAEtC,IAAA,IAAI,CAAC,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA,CAAE,eAAe,MAAA,CAAO,KAAA,CAAM,EAAE,CAAA,EAAG,OAAO,UAAA,CAAW,EAAE,CAAA,EAAG,QAAQ,GAAG,OAAO,IAAA;AAE/F,IAAA,MAAM,EAAA,GAAK,KAAA,CAAM,EAAA,CAAG,MAAA,CAAO,KAAA,EAAO,GAAG,CAAA,CAAE,YAAA,CAAa,KAAA,EAAO,KAAA,EAAO,QAAA,EAAU,EAAE,OAAO,CAAA;AACrF,IAAA,MAAM,IAAA,GAAO,EAAA,CAAG,GAAA,CAAI,OAAA,CAAQ,KAAK,CAAA;AAEjC,IAAA,oBAAA,CAAqB,IAAI,MAAA,EAAQ,IAAA,CAAK,OAAM,EAAG,IAAA,CAAK,KAAK,CAAA;AAEzD,IAAA,OAAO,EAAA;AAAA,EACX,CAAC,CAAA;AACL;AAEA,SAAS,eAAe,QAAA,EAAoB;AACxC,EAAA,OAAO,iBAAA,CAAkB,SAAS,QAAQ,CAAA;AAC9C;AAEA,SAAS,eAAe,QAAA,EAAoB;AACxC,EAAA,OAAO,iBAAA,CAAkB,aAAa,QAAQ,CAAA;AAClD;AAEA,SAAS,gBAAgB,QAAA,EAAoB;AACzC,EAAA,OAAO,iBAAA;AAAA,IACH,aAAA;AAAA,IACA,QAAA;AAAA,IACA,CAAC,KAAA,MAAW,EAAE,OAAO,CAAC,KAAA,CAAM,CAAC,CAAA,EAAE,CAAA;AAAA,IAC/B,CAAC,KAAA,EAAO,IAAA,KAAS,IAAA,CAAK,UAAA,GAAa,KAAK,KAAA,CAAM,KAAA,KAAU,CAAC,KAAA,CAAM,CAAC;AAAA,GACpE;AACJ;AAEA,SAAS,aAAA,CAAc,QAAA,EAAoB,QAAA,EAAoB,MAAA,EAAgB;AAC3E,EAAA,OAAO,IAAI,SAAA,CAAU,kBAAA,EAAoB,CAAC,KAAA,EAAO,KAAA,EAAO,OAAO,GAAA,KAAQ;AACnE,IAAA,MAAM,UAAU,KAAA,CAAM,CAAC,MAAM,GAAA,IAAO,KAAA,CAAM,CAAC,CAAA,KAAM,GAAA;AACjD,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,MAAA,CAAO,EAAE,OAAA,IAAW,MAAA,CAAO,KAAA,CAAM,SAAA,CAAU,MAAA,EAAQ,CAAA;AAC7E,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,MAAA,CAAO,IAAA,EAAM,QAAQ,CAAA;AAE3C,IAAA,OAAO,MAAM,EAAA,CAAG,WAAA,CAAY,KAAA,GAAQ,CAAA,EAAG,KAAK,IAAI,CAAA;AAAA,EACpD,CAAC,CAAA;AACL;AAEA,SAAS,cAAc,QAAA,EAAoB;AAGvC,EAAA,OAAO,sBAAA,CAAuB,uBAAA,EAAyB,QAAA,EAAU,CAAC,KAAA,MAAW,EAAE,QAAA,EAAU,KAAA,CAAM,CAAC,CAAA,IAAK,IAAA,EAAK,CAAE,CAAA;AAChH;AAEA,SAAS,mBAAmB,QAAA,EAAoB;AAC5C,EAAA,OAAO,IAAI,SAAA,CAAU,OAAA,EAAS,CAAC,KAAA,EAAO,MAAA,EAAQ,OAAO,GAAA,KAAQ;AACzD,IAAA,OAAO,KAAA,CAAM,GAAG,WAAA,CAAY,KAAA,GAAQ,GAAG,GAAA,EAAK,QAAA,CAAS,QAAQ,CAAA;AAAA,EACjE,CAAC,CAAA;AACL;AASA,SAAS,aAAA,CAAc,QAAgB,QAAA,EAAoB;AACvD,EAAA,OAAO,IAAI,SAAA,CAAU,MAAA,EAAQ,CAAC,KAAA,EAAO,KAAA,EAAO,OAAO,GAAA,KAAQ;AACvD,IAAA,MAAM,CAAC,SAAA,EAAW,SAAA,EAAW,OAAO,CAAA,GAAI,KAAA;AAExC,IAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAErB,IAAA,MAAM,SAAA,GAAY,KAAA,GAAQ,SAAA,CAAU,OAAA,CAAQ,SAAS,CAAA;AACrD,IAAA,MAAM,KAAK,KAAA,CAAM,EAAA;AAEjB,IAAA,EAAA,CAAG,WAAA,CAAY,SAAA,EAAW,GAAA,EAAK,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,OAAA,EAAS,CAAC,QAAA,CAAS,MAAA,EAAQ,CAAC,CAAC,CAAA;AAC9E,IAAA,EAAA,CAAG,iBAAiB,QAAQ,CAAA;AAE5B,IAAA,OAAO,EAAA;AAAA,EACX,CAAC,CAAA;AACL;AAGA,SAAS,YAAA,CAAa,QAAgB,QAAA,EAAoB;AACtD,EAAA,OAAO,IAAI,SAAA,CAAU,gCAAA,EAAkC,CAAC,KAAA,EAAO,KAAA,EAAO,OAAO,GAAA,KAAQ;AACjF,IAAA,MAAM,GAAA,GAAM,MAAM,CAAC,CAAA;AACnB,IAAA,MAAM,IAAA,GAAO,YAAY,GAAG,CAAA;AAE5B,IAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,IAAA,MAAM,KAAK,KAAA,CAAM,EAAA;AAEjB,IAAA,EAAA,CAAG,WAAA,CAAY,KAAA,EAAO,GAAA,EAAK,MAAA,CAAO,KAAK,GAAA,EAAK,CAAC,QAAA,CAAS,MAAA,CAAO,EAAE,IAAA,EAAM,CAAC,CAAC,CAAC,CAAA;AACxE,IAAA,EAAA,CAAG,iBAAiB,QAAQ,CAAA;AAE5B,IAAA,OAAO,EAAA;AAAA,EACX,CAAC,CAAA;AACL;AAGA,SAAS,QAAA,CAAS,QAAgB,QAAA,EAAoB;AAClD,EAAA,OAAO,IAAI,SAAA,CAAU,sCAAA,EAAwC,CAAC,KAAA,EAAO,KAAA,EAAO,OAAO,GAAA,KAAQ;AACvF,IAAA,MAAM,CAAC,SAAA,EAAW,IAAA,EAAM,OAAO,CAAA,GAAI,KAAA;AACnC,IAAA,MAAM,IAAA,GAAO,YAAY,OAAO,CAAA;AAEhC,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,IAAA,EAAM,OAAO,IAAA;AAG3B,IAAA,MAAM,SAAA,GAAY,KAAA,GAAQ,SAAA,CAAU,OAAA,CAAQ,GAAG,CAAA;AAC/C,IAAA,MAAM,KAAK,KAAA,CAAM,EAAA;AAEjB,IAAA,EAAA,CAAG,WAAA,CAAY,SAAA,EAAW,GAAA,EAAK,MAAA,CAAO,KAAK,IAAA,EAAM,CAAC,QAAA,CAAS,MAAA,CAAO,EAAE,IAAA,EAAM,CAAC,CAAC,CAAC,CAAA;AAC7E,IAAA,EAAA,CAAG,iBAAiB,QAAQ,CAAA;AAE5B,IAAA,OAAO,EAAA;AAAA,EACX,CAAC,CAAA;AACL;AAGA,SAAS,SAAA,CAAU,QAAgB,QAAA,EAAoB;AACnD,EAAA,OAAO,IAAI,SAAA,CAAU,6BAAA,EAA+B,CAAC,KAAA,EAAO,KAAA,EAAO,OAAO,GAAA,KAAQ;AAC9E,IAAA,MAAM,GAAG,GAAA,EAAK,MAAM,CAAA,GAAI,KAAA;AACxB,IAAA,MAAM,GAAA,GAAM,iBAAiB,MAAM,CAAA;AAEnC,IAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AAEjB,IAAA,OAAO,KAAA,CAAM,EAAA,CAAG,WAAA,CAAY,KAAA,EAAO,KAAK,QAAA,CAAS,MAAA,CAAO,EAAE,GAAA,EAAK,KAAK,gBAAA,CAAiB,GAAG,CAAA,IAAK,IAAA,EAAM,CAAC,CAAA;AAAA,EACxG,CAAC,CAAA;AACL;AAGA,SAAS,cAAc,MAAA,EAAgB;AACnC,EAAA,OAAO,IAAI,SAAA,CAAU,wBAAA,EAA0B,CAAC,KAAA,EAAO,KAAA,EAAO,OAAO,GAAA,KAAQ;AACzE,IAAA,MAAM,CAAC,SAAA,EAAW,SAAA,EAAW,OAAO,CAAA,GAAI,KAAA;AAExC,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,MAAA,CAAO,KAAA,CAAM,WAAW,OAAO,IAAA;AAEhD,IAAA,MAAM,SAAA,GAAY,KAAA,GAAQ,SAAA,CAAU,OAAA,CAAQ,SAAS,CAAA;AAErD,IAAA,OAAO,KAAA,CAAM,GAAG,WAAA,CAAY,SAAA,EAAW,KAAK,KAAA,CAAM,MAAA,CAAO,KAAK,OAAA,EAAS,CAAC,OAAO,KAAA,CAAM,SAAA,CAAU,OAAO,EAAE,eAAA,EAAiB,yBAAyB,CAAC,CAAC,CAAC,CAAA;AAAA,EACzJ,CAAC,CAAA;AACL;AAGA,SAAS,cAAA,CAAe,MAAA,EAAgB,IAAA,EAAgB,MAAA,EAAkB;AACtE,EAAA,OAAO,IAAI,SAAA,CAAU,gCAAA,EAAkC,CAAC,KAAA,EAAO,KAAA,EAAO,OAAO,GAAA,KAAQ;AACjF,IAAA,MAAM,CAAC,SAAA,EAAW,SAAA,EAAW,OAAO,CAAA,GAAI,KAAA;AAExC,IAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAErB,IAAA,MAAM,SAAA,GAAY,KAAA,GAAQ,SAAA,CAAU,OAAA,CAAQ,SAAS,CAAA;AACrD,IAAA,MAAM,KAAK,KAAA,CAAM,EAAA;AAEjB,IAAA,EAAA,CAAG,WAAA,CAAY,SAAA,EAAW,GAAA,EAAK,KAAA,CAAM,OAAO,IAAA,CAAK,OAAA,EAAS,CAAC,IAAA,CAAK,QAAO,EAAG,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAC,CAAA;AAC3F,IAAA,EAAA,CAAG,iBAAiB,IAAI,CAAA;AACxB,IAAA,EAAA,CAAG,iBAAiB,MAAM,CAAA;AAE1B,IAAA,OAAO,EAAA;AAAA,EACX,CAAC,CAAA;AACL;AAKA,SAAS,UAAU,MAAA,EAAgB;AAC/B,EAAA,OAAO,IAAI,SAAA,CAAU,kBAAA,EAAoB,CAAC,KAAA,EAAO,OAAO,KAAA,KAAU;AAC9D,IAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,KAAA,EAAO,OAAO,IAAA;AAEhC,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,CAAC,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA;AAGtD,IAAA,IAAI,MAAA,CAAO,MAAA,GAAS,CAAA,IAAK,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA,EAAG,OAAO,IAAA;AAEzD,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,MAAA,CAAO,KAAA,CAAM,YAAA,CAAa,MAAA,CAAO,IAAA,EAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,UAAU,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAA,GAAI,MAAA,CAAO,KAAA,CAAM,SAAA,CAAU,MAAA,EAAQ,CAAC,CAAA;AACnL,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,GAAA,CAAI,MAAM,OAAO,KAAA,CAAM,UAAA,CAAW,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,KAAA,CAAM,SAAA,CAAU,MAAA,EAAQ,CAAC,CAAA;AACxG,IAAA,MAAM,IAAA,GAAO,CAAC,MAAA,CAAO,KAAA,CAAM,UAAU,MAAA,CAAO,IAAA,EAAM,WAAW,CAAA,EAAG,OAAO,KAAA,CAAM,SAAA,CAAU,MAAA,CAAO,IAAA,EAAM,SAAS,CAAC,CAAA;AAC9G,IAAA,MAAM,QAAQ,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,MAAA,CAAO,MAAM,IAAI,CAAA;AAElD,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,KAAK,CAAA;AAEtC,IAAA,OAAO,KAAA,CAAM,GAAG,WAAA,CAAY,MAAA,CAAO,QAAO,EAAG,MAAA,CAAO,KAAA,EAAM,EAAG,KAAK,CAAA;AAAA,EACtE,CAAC,CAAA;AACL;AAKO,SAAS,yBAAyB,MAAA,EAAgB;AACrD,EAAA,MAAM,QAAqB,EAAC;AAG5B,EAAA,IAAI,MAAA,CAAO,MAAM,OAAA,EAAS;AACtB,IAAA,KAAA,CAAM,KAAK,WAAA,CAAY,MAAA,EAAQ,OAAO,KAAA,CAAM,OAAA,EAAS,CAAC,CAAC,CAAA;AAAA,EAC3D;AAEA,EAAA,IAAI,MAAA,CAAO,MAAM,UAAA,EAAY;AACzB,IAAA,KAAA,CAAM,IAAA,CAAK,cAAA,CAAe,MAAA,CAAO,KAAA,CAAM,UAAU,CAAC,CAAA;AAAA,EACtD;AAEA,EAAA,IAAI,MAAA,CAAO,MAAM,WAAA,EAAa;AAC1B,IAAA,KAAA,CAAM,IAAA,CAAK,cAAA,CAAe,MAAA,CAAO,KAAA,CAAM,WAAW,CAAC,CAAA;AAAA,EACvD;AAEA,EAAA,IAAI,MAAA,CAAO,MAAM,YAAA,EAAc;AAC3B,IAAA,KAAA,CAAM,IAAA,CAAK,eAAA,CAAgB,MAAA,CAAO,KAAA,CAAM,YAAY,CAAC,CAAA;AAAA,EACzD;AAEA,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,UAAA,IAAc,MAAA,CAAO,MAAM,eAAA,EAAiB;AACzD,IAAA,KAAA,CAAM,IAAA,CAAK,cAAc,MAAA,CAAO,KAAA,CAAM,YAAY,MAAA,CAAO,KAAA,CAAM,eAAA,EAAiB,MAAM,CAAC,CAAA;AAAA,EAC3F;AAEA,EAAA,IAAI,MAAA,CAAO,MAAM,UAAA,EAAY;AACzB,IAAA,KAAA,CAAM,IAAA,CAAK,aAAA,CAAc,MAAA,CAAO,KAAA,CAAM,UAAU,CAAC,CAAA;AAAA,EACrD;AAEA,EAAA,IAAI,MAAA,CAAO,MAAM,eAAA,EAAiB;AAC9B,IAAA,KAAA,CAAM,IAAA,CAAK,kBAAA,CAAmB,MAAA,CAAO,KAAA,CAAM,eAAe,CAAC,CAAA;AAAA,EAC/D;AAEA,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,KAAA,IAAS,MAAA,CAAO,KAAA,CAAM,SAAA,IAAa,MAAA,CAAO,KAAA,CAAM,YAAA,IAAgB,MAAA,CAAO,KAAA,CAAM,UAAA,EAAY;AACtG,IAAA,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,EAChC;AAIA,EAAA,IAAI,MAAA,CAAO,MAAM,KAAA,EAAO;AACpB,IAAA,KAAA,CAAM,KAAK,SAAA,CAAU,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,EACpD;AAEA,EAAA,IAAI,MAAA,CAAO,MAAM,IAAA,EAAM;AACnB,IAAA,KAAA,CAAM,KAAK,QAAA,CAAS,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAC,CAAA;AAC9C,IAAA,KAAA,CAAM,KAAK,YAAA,CAAa,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,EACtD;AAEA,EAAA,IAAI,MAAA,CAAO,MAAM,SAAA,EAAW;AACxB,IAAA,KAAA,CAAM,IAAA,CAAK,aAAA,CAAc,MAAM,CAAC,CAAA;AAAA,EACpC;AAGA,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,IAAA,IAAQ,MAAA,CAAO,MAAM,MAAA,EAAQ;AAC1C,IAAA,KAAA,CAAM,IAAA,CAAK,eAAe,MAAA,EAAQ,MAAA,CAAO,MAAM,IAAA,EAAM,MAAA,CAAO,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,EAC7E;AAEA,EAAA,IAAI,MAAA,CAAO,MAAM,IAAA,EAAM;AACnB,IAAA,KAAA,CAAM,KAAK,aAAA,CAAc,0BAAA,EAA4B,MAAA,CAAO,KAAA,CAAM,IAAI,CAAC,CAAA;AAEvE,IAAA,KAAA,CAAM,KAAK,aAAA,CAAc,sBAAA,EAAwB,MAAA,CAAO,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,EACvE;AAEA,EAAA,IAAI,MAAA,CAAO,MAAM,MAAA,EAAQ;AACrB,IAAA,KAAA,CAAM,KAAK,aAAA,CAAc,0BAAA,EAA4B,MAAA,CAAO,KAAA,CAAM,MAAM,CAAC,CAAA;AAEzE,IAAA,KAAA,CAAM,KAAK,aAAA,CAAc,sBAAA,EAAwB,MAAA,CAAO,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,EACzE;AAEA,EAAA,IAAI,MAAA,CAAO,MAAM,IAAA,EAAM;AACnB,IAAA,KAAA,CAAM,KAAK,aAAA,CAAc,sBAAA,EAAwB,MAAA,CAAO,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,EACvE;AAEA,EAAA,IAAI,MAAA,CAAO,MAAM,aAAA,EAAe;AAC5B,IAAA,KAAA,CAAM,KAAK,aAAA,CAAc,sBAAA,EAAwB,MAAA,CAAO,KAAA,CAAM,aAAa,CAAC,CAAA;AAAA,EAChF;AAEA,EAAA,OAAO,UAAA,CAAW,EAAE,KAAA,EAAO,CAAA;AAC/B","file":"chunk-LHZDU6AA.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"]}
@@ -56,5 +56,5 @@ function htmlToSlice(html, schema) {
56
56
  }
57
57
 
58
58
  export { htmlExceedsMaxDepth, htmlToDoc, htmlToInertFragment, htmlToSlice };
59
- //# sourceMappingURL=chunk-PRFYR67X.mjs.map
60
- //# sourceMappingURL=chunk-PRFYR67X.mjs.map
59
+ //# sourceMappingURL=chunk-LYB4TGKX.mjs.map
60
+ //# sourceMappingURL=chunk-LYB4TGKX.mjs.map
@@ -0,0 +1 @@
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-LYB4TGKX.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"]}
@@ -19,9 +19,9 @@ function sanitizeImageUrl(url) {
19
19
  const stripped = url.replace(IGNORED_CHARS, "");
20
20
  if (/^data:image\/(png|jpe?g|gif|webp|avif|bmp);base64,[a-z0-9+/=\s]+$/i.test(stripped)) return stripped;
21
21
  if (/^data:/i.test(stripped)) return null;
22
- return sanitizeUrl(url);
22
+ return sanitizeUrl(stripped);
23
23
  }
24
24
 
25
25
  export { sanitizeImageUrl, sanitizeTextAttr, sanitizeUrl };
26
- //# sourceMappingURL=chunk-MNKMKFLQ.mjs.map
27
- //# sourceMappingURL=chunk-MNKMKFLQ.mjs.map
26
+ //# sourceMappingURL=chunk-MMU3VGMT.mjs.map
27
+ //# sourceMappingURL=chunk-MMU3VGMT.mjs.map
@@ -0,0 +1 @@
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,QAAQ,CAAA;AAC/B","file":"chunk-MMU3VGMT.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(stripped);\n}\n"]}
@@ -1,10 +1,10 @@
1
- import { createBlockCommands, wrapInBlockquoteNormalized, wrapInListNormalized } from './chunk-VWGQMUPD.mjs';
2
- import { DEFAULT_HIGHLIGHT_COLOR } from './chunk-TB7ZSSR2.mjs';
3
- import { getMarkAttrs } from './chunk-72T5I4O4.mjs';
4
- import { preserveSelection } from './chunk-RQ2HHNI6.mjs';
5
- import { docToHtml } from './chunk-6ZN5XRH2.mjs';
6
- import { parseDimension } from './chunk-F7BJWPT6.mjs';
7
- import { sanitizeImageUrl, sanitizeTextAttr, sanitizeUrl } from './chunk-MNKMKFLQ.mjs';
1
+ import { createBlockCommands, wrapInBlockquoteNormalized, wrapInListNormalized } from './chunk-YXOJODMQ.mjs';
2
+ import { DEFAULT_HIGHLIGHT_COLOR } from './chunk-UHENKXGQ.mjs';
3
+ import { getMarkAttrs } from './chunk-4C4R23A3.mjs';
4
+ import { preserveSelection } from './chunk-XO4UUELZ.mjs';
5
+ import { docToHtml } from './chunk-UORFAHNO.mjs';
6
+ import { parseDimension } from './chunk-ZSXWDZMQ.mjs';
7
+ import { sanitizeImageUrl, sanitizeTextAttr, sanitizeUrl } from './chunk-MMU3VGMT.mjs';
8
8
  import { setBlockType, toggleMark } from 'prosemirror-commands';
9
9
  import { TableMap, CellSelection, toggleHeaderCell, splitCell, mergeCells, toggleHeaderColumn, deleteColumn, addColumnAfter, addColumnBefore, toggleHeaderRow, deleteTable, deleteRow, addRowAfter, addRowBefore } from 'prosemirror-tables';
10
10
  import { TextSelection } from 'prosemirror-state';
@@ -829,5 +829,5 @@ function createCommands(view, schema, callbacks, options) {
829
829
  }
830
830
 
831
831
  export { createCommands, createTableCellCommands, createTableColumnCommands, createTableRowCommands, selectColumn, selectRow };
832
- //# sourceMappingURL=chunk-6YDCG63C.mjs.map
833
- //# sourceMappingURL=chunk-6YDCG63C.mjs.map
832
+ //# sourceMappingURL=chunk-MMY4F74E.mjs.map
833
+ //# sourceMappingURL=chunk-MMY4F74E.mjs.map
@@ -0,0 +1 @@
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":"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","file":"chunk-MMY4F74E.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"]}
@@ -14,5 +14,5 @@ function removeProseMirrorPlugin(view, plugin) {
14
14
  }
15
15
 
16
16
  export { addProseMirrorPlugin, removeProseMirrorPlugin };
17
- //# sourceMappingURL=chunk-6GY64GPU.mjs.map
18
- //# sourceMappingURL=chunk-6GY64GPU.mjs.map
17
+ //# sourceMappingURL=chunk-MSPB65AH.mjs.map
18
+ //# sourceMappingURL=chunk-MSPB65AH.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/plugins/registry.ts"],"names":[],"mappings":";AAIO,SAAS,oBAAA,CAAqB,MAAkB,MAAA,EAA4B;AAC/E,EAAA,MAAM,OAAA,GAAU,KAAK,KAAA,CAAM,OAAA;AAE3B,EAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA,EAAG;AAC3B,IAAA,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,EAAE,OAAA,EAAS,CAAC,GAAG,OAAA,EAAS,MAAM,CAAA,EAAG,CAAC,CAAA;AAAA,EAC9E;AAEA,EAAA,OAAO,MAAM,uBAAA,CAAwB,IAAA,EAAM,MAAM,CAAA;AACrD;AAEO,SAAS,uBAAA,CAAwB,MAAkB,MAAA,EAAsB;AAC5E,EAAA,MAAM,IAAA,GAAO,KAAK,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAC,CAAA,KAAM,MAAM,MAAM,CAAA;AAE1D,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,IAAA,CAAK,KAAA,CAAM,QAAQ,MAAA,EAAQ;AAC3C,IAAA,IAAA,CAAK,WAAA,CAAY,KAAK,KAAA,CAAM,WAAA,CAAY,EAAE,OAAA,EAAS,IAAA,EAAM,CAAC,CAAA;AAAA,EAC9D;AACJ","file":"chunk-MSPB65AH.mjs","sourcesContent":["import type { Plugin } from 'prosemirror-state';\nimport type { EditorView } from 'prosemirror-view';\n\n// Attaches a ProseMirror plugin to a live view (preserving doc/selection); returns a remover.\nexport function addProseMirrorPlugin(view: EditorView, plugin: Plugin): () => void {\n const current = view.state.plugins;\n\n if (!current.includes(plugin)) {\n view.updateState(view.state.reconfigure({ plugins: [...current, plugin] }));\n }\n\n return () => removeProseMirrorPlugin(view, plugin);\n}\n\nexport function removeProseMirrorPlugin(view: EditorView, plugin: Plugin): void {\n const next = view.state.plugins.filter((p) => p !== plugin);\n\n if (next.length !== view.state.plugins.length) {\n view.updateState(view.state.reconfigure({ plugins: next }));\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { textEditorClasses } from './chunk-GG56GLXC.mjs';
1
+ import { textEditorClasses } from './chunk-25Y5HLDY.mjs';
2
2
  import { Fragment } from 'prosemirror-model';
3
3
  import { PluginKey, Plugin, TextSelection } from 'prosemirror-state';
4
4
  import { DecorationSet, Decoration } from 'prosemirror-view';
@@ -194,5 +194,5 @@ function executeSlashCommand(view, callback) {
194
194
  }
195
195
 
196
196
  export { createSlashPlugin, executeSlashCommand, executeSlashCommandInline, slashPluginKey };
197
- //# sourceMappingURL=chunk-KNZAMA6H.mjs.map
198
- //# sourceMappingURL=chunk-KNZAMA6H.mjs.map
197
+ //# sourceMappingURL=chunk-NZCWIEXE.mjs.map
198
+ //# sourceMappingURL=chunk-NZCWIEXE.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/plugins/slashCommands.ts"],"names":["topNode"],"mappings":"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","file":"chunk-NZCWIEXE.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"]}
@@ -14,5 +14,5 @@ function computeEdgeScrollSpeed(clientY, rect, threshold, maxSpeed) {
14
14
  }
15
15
 
16
16
  export { computeEdgeScrollSpeed };
17
- //# sourceMappingURL=chunk-DXPG5XMX.mjs.map
18
- //# sourceMappingURL=chunk-DXPG5XMX.mjs.map
17
+ //# sourceMappingURL=chunk-P4N6CW2J.mjs.map
18
+ //# sourceMappingURL=chunk-P4N6CW2J.mjs.map
@@ -0,0 +1 @@
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-P4N6CW2J.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"]}
@@ -28,5 +28,5 @@ function clampWidth(left, elWidth, margin, viewportWidth) {
28
28
  }
29
29
 
30
30
  export { computePopoverPosition, computeSubmenuPosition };
31
- //# sourceMappingURL=chunk-FFCQLWS5.mjs.map
32
- //# sourceMappingURL=chunk-FFCQLWS5.mjs.map
31
+ //# sourceMappingURL=chunk-PRW2CBOO.mjs.map
32
+ //# sourceMappingURL=chunk-PRW2CBOO.mjs.map
@@ -0,0 +1 @@
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-PRW2CBOO.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,4 +1,4 @@
1
- import { getSelectionPosition } from './chunk-72T5I4O4.mjs';
1
+ import { getSelectionPosition } from './chunk-4C4R23A3.mjs';
2
2
  import { Plugin } from 'prosemirror-state';
3
3
 
4
4
  function createContextToolbarPlugin(callbacks) {
@@ -19,5 +19,5 @@ function createContextToolbarPlugin(callbacks) {
19
19
  }
20
20
 
21
21
  export { createContextToolbarPlugin };
22
- //# sourceMappingURL=chunk-IUQKSDKG.mjs.map
23
- //# sourceMappingURL=chunk-IUQKSDKG.mjs.map
22
+ //# sourceMappingURL=chunk-PSOP5GNT.mjs.map
23
+ //# sourceMappingURL=chunk-PSOP5GNT.mjs.map
@@ -0,0 +1 @@
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-PSOP5GNT.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"]}
@@ -22,5 +22,5 @@ function assignActiveDescendantId(item, idPrefix, counter) {
22
22
  }
23
23
 
24
24
  export { assignActiveDescendantId, filterMenuItemsByText, getVisibleMenuItems };
25
- //# sourceMappingURL=chunk-RH45QRSV.mjs.map
26
- //# sourceMappingURL=chunk-RH45QRSV.mjs.map
25
+ //# sourceMappingURL=chunk-Q7MBG5CT.mjs.map
26
+ //# sourceMappingURL=chunk-Q7MBG5CT.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ui/menu.ts"],"names":[],"mappings":";AAAA,IAAM,kBAAA,GAAqB,uFAAA;AAEpB,SAAS,oBAAoB,SAAA,EAAuC;AACvE,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,gBAAA,CAA8B,kBAAkB,CAAC,CAAA;AACjF;AAEO,SAAS,qBAAA,CAAsB,OAAsB,KAAA,EAAgE;AACxH,EAAA,MAAM,CAAA,GAAI,KAAA,CAAM,IAAA,EAAK,CAAE,WAAA,EAAY;AACnC,EAAA,MAAM,UAAyB,EAAC;AAChC,EAAA,IAAI,WAAA,GAAc,CAAA;AAElB,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACtB,IAAA,MAAM,KAAA,GAAQ,MAAM,EAAA,IAAA,CAAO,IAAA,CAAK,eAAe,EAAA,EAAI,WAAA,EAAY,CAAE,QAAA,CAAS,CAAC,CAAA;AAE3E,IAAA,IAAA,CAAK,SAAS,CAAC,KAAA;AAEf,IAAA,IAAI,KAAA,EAAO,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AAAA,SACvB,WAAA,EAAA;AAAA,EACT;AAEA,EAAA,OAAO,EAAE,SAAS,WAAA,EAAY;AAClC;AAEO,SAAS,wBAAA,CAAyB,IAAA,EAA0B,QAAA,EAAkB,OAAA,EAA2C;AAC5H,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,EAAA,IAAI,CAAC,IAAA,CAAK,EAAA,EAAI,IAAA,CAAK,EAAA,GAAK,GAAG,QAAQ,CAAA,QAAA,EAAW,EAAE,OAAA,CAAQ,KAAK,CAAA,CAAA;AAE7D,EAAA,OAAO,IAAA,CAAK,EAAA;AAChB","file":"chunk-Q7MBG5CT.mjs","sourcesContent":["const MENU_ITEM_SELECTOR = 'button:not([hidden]):not([disabled]), [role=\"menuitem\"]:not([hidden]):not([disabled])';\n\nexport function getVisibleMenuItems(container: HTMLElement): HTMLElement[] {\n return Array.from(container.querySelectorAll<HTMLElement>(MENU_ITEM_SELECTOR));\n}\n\nexport function filterMenuItemsByText(items: HTMLElement[], query: string): { visible: HTMLElement[]; hiddenCount: number } {\n const q = query.trim().toLowerCase();\n const visible: HTMLElement[] = [];\n let hiddenCount = 0;\n\n for (const item of items) {\n const match = q === '' || (item.textContent ?? '').toLowerCase().includes(q);\n\n item.hidden = !match;\n\n if (match) visible.push(item);\n else hiddenCount++;\n }\n\n return { visible, hiddenCount };\n}\n\nexport function assignActiveDescendantId(item: HTMLElement | null, idPrefix: string, counter: { value: number }): string | null {\n if (!item) return null;\n\n if (!item.id) item.id = `${idPrefix}-option-${++counter.value}`;\n\n return item.id;\n}\n"]}
@@ -1,7 +1,7 @@
1
- import { table_header, table_cell, table_row, table, check_list_item, check_list, list_item, ordered_list, bullet_list, document_upload_placeholder, image_upload_placeholder, mention, image, hard_break, horizontal_rule, code_block, blockquote, heading, text, paragraph, doc } from './chunk-F7BJWPT6.mjs';
2
- import { sanitizeCssValue } from './chunk-7QCHSEN2.mjs';
3
- import { sanitizeUrl } from './chunk-MNKMKFLQ.mjs';
4
- import { __export } from './chunk-J5LGTIGS.mjs';
1
+ import { table_header, table_cell, table_row, table, check_list_item, check_list, list_item, ordered_list, bullet_list, document_upload_placeholder, image_upload_placeholder, mention, image, hard_break, horizontal_rule, code_block, blockquote, heading, text, paragraph, doc } from './chunk-ZSXWDZMQ.mjs';
2
+ import { sanitizeCssValue } from './chunk-C2TRJCIH.mjs';
3
+ import { sanitizeUrl } from './chunk-MMU3VGMT.mjs';
4
+ import { __export } from './chunk-FLGC65SR.mjs';
5
5
  import { Schema } from 'prosemirror-model';
6
6
 
7
7
  // src/schema/marks.ts
@@ -193,5 +193,5 @@ function getEditorSchema() {
193
193
  }
194
194
 
195
195
  export { baseMarks, baseNodes, createEditorSchema, extendNodeSpec, getEditorSchema, marks_exports };
196
- //# sourceMappingURL=chunk-AUTGNC2Q.mjs.map
197
- //# sourceMappingURL=chunk-AUTGNC2Q.mjs.map
196
+ //# sourceMappingURL=chunk-QMEKZ64Z.mjs.map
197
+ //# sourceMappingURL=chunk-QMEKZ64Z.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/schema/marks.ts","../../src/schema/index.ts"],"names":[],"mappings":";;;;;;;AAAA,IAAA,aAAA,GAAA;AAAA,QAAA,CAAA,aAAA,EAAA;AAAA,EAAA,IAAA,EAAA,MAAA,IAAA;AAAA,EAAA,IAAA,EAAA,MAAA,IAAA;AAAA,EAAA,MAAA,EAAA,MAAA,MAAA;AAAA,EAAA,IAAA,EAAA,MAAA,IAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,SAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAIA,IAAM,OAAA,GAAU,CAAC,QAAA,EAAU,OAAA,EAAS,WAAW,MAAM,CAAA;AACrD,IAAM,UAAA,GAAa,CAAC,CAAA,KAAsB,CAAA,IAAK,QAAQ,QAAA,CAAS,CAAC,IAAI,CAAA,GAAI,QAAA;AAElE,IAAM,IAAA,GAAiB;AAAA,EAC1B,QAAA,EAAU;AAAA,IACN,EAAE,KAAK,QAAA,EAAS;AAAA,IAChB,EAAE,GAAA,EAAK,GAAA,EAAK,QAAA,EAAU,CAAC,SAAU,IAAA,CAAqB,KAAA,CAAM,UAAA,KAAe,QAAA,IAAY,IAAA,EAAK;AAAA,IAC5F,EAAE,OAAO,kBAAA,EAAmB;AAAA,IAC5B,EAAE,KAAA,EAAO,aAAA,EAAe,QAAA,EAAU,CAAC,UAAU,2BAAA,CAA4B,IAAA,CAAK,KAAe,CAAA,IAAK,IAAA;AAAK,GAC3G;AAAA,EACA,KAAA,GAAQ;AACJ,IAAA,OAAO,CAAC,UAAU,CAAC,CAAA;AAAA,EACvB;AACJ,CAAA;AAEO,IAAM,MAAA,GAAmB;AAAA,EAC5B,QAAA,EAAU,CAAC,EAAE,GAAA,EAAK,GAAA,EAAI,EAAG,EAAE,GAAA,EAAK,IAAA,EAAK,EAAG,EAAE,KAAA,EAAO,qBAAqB,CAAA;AAAA,EACtE,KAAA,GAAQ;AACJ,IAAA,OAAO,CAAC,MAAM,CAAC,CAAA;AAAA,EACnB;AACJ,CAAA;AAEO,IAAM,SAAA,GAAsB;AAAA,EAC/B,QAAA,EAAU,CAAC,EAAE,GAAA,EAAK,KAAI,EAAG,EAAE,KAAA,EAAO,2BAAA,EAA6B,CAAA;AAAA,EAC/D,KAAA,GAAQ;AACJ,IAAA,OAAO,CAAC,KAAK,CAAC,CAAA;AAAA,EAClB;AACJ,CAAA;AAEO,IAAM,aAAA,GAA0B;AAAA,EACnC,UAAU,CAAC,EAAE,GAAA,EAAK,GAAA,IAAO,EAAE,GAAA,EAAK,KAAA,EAAM,EAAG,EAAE,GAAA,EAAK,QAAA,IAAY,EAAE,KAAA,EAAO,gCAAgC,CAAA;AAAA,EACrG,KAAA,GAAQ;AACJ,IAAA,OAAO,CAAC,KAAK,CAAC,CAAA;AAAA,EAClB;AACJ,CAAA;AAEO,IAAM,SAAA,GAAsB;AAAA,EAC/B,QAAA,EAAU,aAAA;AAAA,EACV,QAAA,EAAU,CAAC,EAAE,GAAA,EAAK,OAAO,CAAA;AAAA,EACzB,KAAA,GAAQ;AACJ,IAAA,OAAO,CAAC,OAAO,CAAC,CAAA;AAAA,EACpB;AACJ,CAAA;AAEO,IAAM,WAAA,GAAwB;AAAA,EACjC,QAAA,EAAU,WAAA;AAAA,EACV,QAAA,EAAU,CAAC,EAAE,GAAA,EAAK,OAAO,CAAA;AAAA,EACzB,KAAA,GAAQ;AACJ,IAAA,OAAO,CAAC,OAAO,CAAC,CAAA;AAAA,EACpB;AACJ,CAAA;AAEO,IAAM,IAAA,GAAiB;AAAA,EAC1B,QAAA,EAAU,CAAC,EAAE,GAAA,EAAK,QAAQ,CAAA;AAAA,EAC1B,KAAA,GAAQ;AACJ,IAAA,OAAO,CAAC,QAAQ,CAAC,CAAA;AAAA,EACrB;AACJ,CAAA;AAEO,IAAM,IAAA,GAAiB;AAAA,EAC1B,KAAA,EAAO;AAAA,IACH,MAAM,EAAC;AAAA,IACP,MAAA,EAAQ,EAAE,OAAA,EAAS,QAAA;AAAS,GAChC;AAAA,EACA,SAAA,EAAW,KAAA;AAAA,EACX,QAAA,EAAU;AAAA,IACN;AAAA,MACI,GAAA,EAAK,SAAA;AAAA,MACL,SAAS,IAAA,EAAM;AACX,QAAA,MAAM,EAAA,GAAK,IAAA;AACX,QAAA,MAAM,IAAA,GAAO,WAAA,CAAY,EAAA,CAAG,YAAA,CAAa,MAAM,CAAC,CAAA;AAGhD,QAAA,IAAI,IAAA,IAAQ,MAAM,OAAO,KAAA;AAEzB,QAAA,OAAO,EAAE,MAAM,MAAA,EAAQ,UAAA,CAAW,GAAG,YAAA,CAAa,QAAQ,CAAC,CAAA,EAAE;AAAA,MACjE;AAAA;AACJ,GACJ;AAAA,EACA,MAAM,IAAA,EAAM;AACR,IAAA,MAAM,IAAA,GAAO,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAExC,IAAA,OAAO,CAAC,GAAA,EAAK,IAAA,IAAQ,OAAO,EAAE,GAAA,EAAK,uBAAsB,GAAI,EAAE,MAAM,MAAA,EAAQ,UAAA,CAAW,KAAK,KAAA,CAAM,MAAM,GAAG,GAAA,EAAK,qBAAA,IAAyB,CAAC,CAAA;AAAA,EAC/I;AACJ,CAAA;AAEO,IAAM,SAAA,GAAsB;AAAA,EAC/B,KAAA,EAAO;AAAA,IACH,UAAA,EAAY,EAAE,OAAA,EAAS,IAAA,EAAK;AAAA,IAC5B,QAAA,EAAU,EAAE,OAAA,EAAS,IAAA,EAAK;AAAA,IAC1B,KAAA,EAAO,EAAE,OAAA,EAAS,IAAA,EAAK;AAAA,IACvB,eAAA,EAAiB,EAAE,OAAA,EAAS,IAAA;AAAK,GACrC;AAAA,EACA,QAAA,EAAU;AAAA,IACN;AAAA,MACI,GAAA,EAAK,MAAA;AAAA,MACL,SAAS,IAAA,EAAM;AACX,QAAA,MAAM,EAAA,GAAK,IAAA;AAEX,QAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,EAAA,CAAG,KAAA,CAAM,UAAU,CAAA;AACvD,QAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,EAAA,CAAG,KAAA,CAAM,QAAQ,CAAA;AACnD,QAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,EAAA,CAAG,KAAA,CAAM,KAAK,CAAA;AAC7C,QAAA,MAAM,eAAA,GAAkB,gBAAA,CAAiB,EAAA,CAAG,KAAA,CAAM,eAAe,CAAA;AAEjE,QAAA,IAAI,CAAC,cAAc,CAAC,QAAA,IAAY,CAAC,KAAA,IAAS,CAAC,iBAAiB,OAAO,KAAA;AAEnE,QAAA,OAAO,EAAE,UAAA,EAAY,QAAA,EAAU,KAAA,EAAO,eAAA,EAAgB;AAAA,MAC1D;AAAA;AACJ,GACJ;AAAA,EACA,MAAM,IAAA,EAAM;AACR,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA;AACzD,IAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AACrD,IAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAC/C,IAAA,MAAM,eAAA,GAAkB,gBAAA,CAAiB,IAAA,CAAK,KAAA,CAAM,eAAe,CAAA;AAEnE,IAAA,IAAI,UAAA,EAAY,KAAA,CAAM,IAAA,CAAK,CAAA,aAAA,EAAgB,UAAU,CAAA,CAAE,CAAA;AACvD,IAAA,IAAI,QAAA,EAAU,KAAA,CAAM,IAAA,CAAK,CAAA,WAAA,EAAc,QAAQ,CAAA,CAAE,CAAA;AACjD,IAAA,IAAI,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,CAAA;AACvC,IAAA,IAAI,eAAA,EAAiB,KAAA,CAAM,IAAA,CAAK,CAAA,kBAAA,EAAqB,eAAe,CAAA,CAAE,CAAA;AAEtE,IAAA,OAAO,CAAC,QAAQ,EAAE,KAAA,EAAO,MAAM,IAAA,CAAK,IAAI,CAAA,EAAE,EAAG,CAAC,CAAA;AAAA,EAClD;AACJ,CAAA;;;ACtHO,SAAS,cAAA,CAAe,MAAgB,QAAA,EAAuC;AAClF,EAAA,OAAO;AAAA,IACH,GAAG,IAAA;AAAA,IACH,GAAG,QAAA;AAAA,IACH,OAAO,EAAE,GAAG,KAAK,KAAA,EAAO,GAAG,SAAS,KAAA;AAAM,GAC9C;AACJ;AAEO,IAAM,SAAA,GAAsC;AAAA,EAC/C,GAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,wBAAA;AAAA,EACA,2BAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,eAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA;AACJ;AAEO,IAAM,SAAA,GAAsC;AAAA,EAC/C,IAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA;AACJ;AASA,SAAS,cAAA,CAAe,IAAA,EAAuB,QAAA,EAAmC,QAAA,EAAoC;AAClH,EAAA,IAAI,CAAC,QAAA,IAAY,OAAO,OAAA,KAAY,WAAA,EAAa;AAEjD,EAAA,KAAA,MAAW,IAAA,IAAQ,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,EAAG;AACtC,IAAA,IAAI,QAAQ,QAAA,EAAU;AAElB,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,4BAAA,EAA+B,IAAI,CAAA,EAAA,EAAK,IAAI,CAAA,6IAAA,CAA+I,CAAA;AAAA,IAC5M;AAAA,EACJ;AACJ;AAGO,SAAS,mBAAmB,UAAA,EAAwC;AACvE,EAAA,IAAI,CAAC,UAAA,IAAc,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG,OAAO,IAAI,MAAA,CAAO,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,WAAW,CAAA;AAEpG,EAAA,MAAM,QAAA,GAAW,EAAE,GAAG,SAAA,EAAU;AAChC,EAAA,MAAM,QAAA,GAAW,EAAE,GAAG,SAAA,EAAU;AAEhC,EAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC1B,IAAA,cAAA,CAAe,MAAA,EAAQ,QAAA,EAAU,GAAA,CAAI,KAAK,CAAA;AAC1C,IAAA,cAAA,CAAe,MAAA,EAAQ,QAAA,EAAU,GAAA,CAAI,KAAK,CAAA;AAC1C,IAAA,MAAA,CAAO,MAAA,CAAO,QAAA,EAAU,GAAA,CAAI,KAAK,CAAA;AACjC,IAAA,MAAA,CAAO,MAAA,CAAO,QAAA,EAAU,GAAA,CAAI,KAAK,CAAA;AAAA,EACrC;AAEA,EAAA,OAAO,IAAI,MAAA,CAAO,EAAE,OAAO,QAAA,EAAU,KAAA,EAAO,UAAU,CAAA;AAC1D;AAEA,IAAI,cAAA,GAAgC,IAAA;AAI7B,SAAS,eAAA,GAA0B;AACtC,EAAA,OAAQ,oCAAmB,kBAAA,EAAmB,CAAA;AAClD","file":"chunk-QMEKZ64Z.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,5 +1,5 @@
1
- import { DEFAULT_HIGHLIGHT_COLOR } from './chunk-TB7ZSSR2.mjs';
2
- import { isNodeActive } from './chunk-72T5I4O4.mjs';
1
+ import { DEFAULT_HIGHLIGHT_COLOR } from './chunk-UHENKXGQ.mjs';
2
+ import { isNodeActive } from './chunk-4C4R23A3.mjs';
3
3
  import { keymap } from 'prosemirror-keymap';
4
4
  export { keymap } from 'prosemirror-keymap';
5
5
  import { redo, undo } from 'prosemirror-history';
@@ -227,5 +227,5 @@ function createEditorKeymap(schema, options) {
227
227
  }
228
228
 
229
229
  export { blockSelectAll, createEditorKeymap };
230
- //# sourceMappingURL=chunk-YHMP6AN3.mjs.map
231
- //# sourceMappingURL=chunk-YHMP6AN3.mjs.map
230
+ //# sourceMappingURL=chunk-QZUFYVD5.mjs.map
231
+ //# sourceMappingURL=chunk-QZUFYVD5.mjs.map