@editora/core 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/README.md +9 -0
  2. package/dist/A11yCheckerPlugin.native-CZKpi3uF.mjs +475 -0
  3. package/dist/A11yCheckerPlugin.native-CZKpi3uF.mjs.map +1 -0
  4. package/dist/AnchorPlugin.native-7es9PVZ9.mjs +340 -0
  5. package/dist/AnchorPlugin.native-7es9PVZ9.mjs.map +1 -0
  6. package/dist/BackgroundColorPlugin.native-Dip5uqTg.mjs +449 -0
  7. package/dist/BackgroundColorPlugin.native-Dip5uqTg.mjs.map +1 -0
  8. package/dist/BlockquotePlugin.native-JFmOLsxN.mjs +48 -0
  9. package/dist/BlockquotePlugin.native-JFmOLsxN.mjs.map +1 -0
  10. package/dist/BoldPlugin.native-BAzzoqU5.mjs +45 -0
  11. package/dist/BoldPlugin.native-BAzzoqU5.mjs.map +1 -0
  12. package/dist/CapitalizationPlugin.native-DOMsh5R7.mjs +79 -0
  13. package/dist/CapitalizationPlugin.native-DOMsh5R7.mjs.map +1 -0
  14. package/dist/ChecklistPlugin.native-Dccs3nLe.mjs +153 -0
  15. package/dist/ChecklistPlugin.native-Dccs3nLe.mjs.map +1 -0
  16. package/dist/ClearFormattingPlugin.native-BZPDHswo.mjs +27 -0
  17. package/dist/ClearFormattingPlugin.native-BZPDHswo.mjs.map +1 -0
  18. package/dist/CodePlugin.native-DD9xFIid.mjs +1679 -0
  19. package/dist/CodePlugin.native-DD9xFIid.mjs.map +1 -0
  20. package/dist/CodeSamplePlugin.native-DMbEdO9j.mjs +326 -0
  21. package/dist/CodeSamplePlugin.native-DMbEdO9j.mjs.map +1 -0
  22. package/dist/CommentsPlugin.native-2zQV8Ia4.mjs +473 -0
  23. package/dist/CommentsPlugin.native-2zQV8Ia4.mjs.map +1 -0
  24. package/dist/DirectionPlugin.native-Be7wCzkI.mjs +59 -0
  25. package/dist/DirectionPlugin.native-Be7wCzkI.mjs.map +1 -0
  26. package/dist/DocumentManagerPlugin.native-BvZL5CSG.mjs +116 -0
  27. package/dist/DocumentManagerPlugin.native-BvZL5CSG.mjs.map +1 -0
  28. package/dist/EmbedIframePlugin.native-ifr9KLdN.mjs +461 -0
  29. package/dist/EmbedIframePlugin.native-ifr9KLdN.mjs.map +1 -0
  30. package/dist/EmojisPlugin.native-D6mJSnSR.mjs +1033 -0
  31. package/dist/EmojisPlugin.native-D6mJSnSR.mjs.map +1 -0
  32. package/dist/FontFamilyPlugin.native-BzS_9qbM.mjs +106 -0
  33. package/dist/FontFamilyPlugin.native-BzS_9qbM.mjs.map +1 -0
  34. package/dist/FontSizePlugin.native-DkLMLPue.mjs +186 -0
  35. package/dist/FontSizePlugin.native-DkLMLPue.mjs.map +1 -0
  36. package/dist/FootnotePlugin.native-BciVc9W6.mjs +128 -0
  37. package/dist/FootnotePlugin.native-BciVc9W6.mjs.map +1 -0
  38. package/dist/FullscreenPlugin.native-ChXyxeNw.mjs +77 -0
  39. package/dist/FullscreenPlugin.native-ChXyxeNw.mjs.map +1 -0
  40. package/dist/HeadingPlugin.native-DrLYwQnQ.mjs +64 -0
  41. package/dist/HeadingPlugin.native-DrLYwQnQ.mjs.map +1 -0
  42. package/dist/HistoryPlugin.native-DoDRifCf.mjs +89 -0
  43. package/dist/HistoryPlugin.native-DoDRifCf.mjs.map +1 -0
  44. package/dist/IndentPlugin.native-CbFugPoi.mjs +133 -0
  45. package/dist/IndentPlugin.native-CbFugPoi.mjs.map +1 -0
  46. package/dist/ItalicPlugin.native-CQjjDyUL.mjs +43 -0
  47. package/dist/ItalicPlugin.native-CQjjDyUL.mjs.map +1 -0
  48. package/dist/LineHeightPlugin.native-CWQT2FIa.mjs +73 -0
  49. package/dist/LineHeightPlugin.native-CWQT2FIa.mjs.map +1 -0
  50. package/dist/LinkPlugin.native-BdAOV-iu.mjs +206 -0
  51. package/dist/LinkPlugin.native-BdAOV-iu.mjs.map +1 -0
  52. package/dist/ListPlugin.native-CLFU5AUQ.mjs +59 -0
  53. package/dist/ListPlugin.native-CLFU5AUQ.mjs.map +1 -0
  54. package/dist/MathPlugin.native-DE_ii-LA.mjs +182 -0
  55. package/dist/MathPlugin.native-DE_ii-LA.mjs.map +1 -0
  56. package/dist/MediaManagerPlugin.native-DaYFDzNM.mjs +533 -0
  57. package/dist/MediaManagerPlugin.native-DaYFDzNM.mjs.map +1 -0
  58. package/dist/MergeTagPlugin.native-CrxyThyn.mjs +178 -0
  59. package/dist/MergeTagPlugin.native-CrxyThyn.mjs.map +1 -0
  60. package/dist/PageBreakPlugin.native-DDjcDyRW.mjs +172 -0
  61. package/dist/PageBreakPlugin.native-DDjcDyRW.mjs.map +1 -0
  62. package/dist/PreviewPlugin.native-DBvfpmIv.mjs +322 -0
  63. package/dist/PreviewPlugin.native-DBvfpmIv.mjs.map +1 -0
  64. package/dist/PrintPlugin.native-BUpm52VJ.mjs +311 -0
  65. package/dist/PrintPlugin.native-BUpm52VJ.mjs.map +1 -0
  66. package/dist/SpecialCharactersPlugin.native-x7a2SWXc.mjs +731 -0
  67. package/dist/SpecialCharactersPlugin.native-x7a2SWXc.mjs.map +1 -0
  68. package/dist/SpellCheckPlugin.native-B7yTh0iE.mjs +465 -0
  69. package/dist/SpellCheckPlugin.native-B7yTh0iE.mjs.map +1 -0
  70. package/dist/StrikethroughPlugin.native-ChaZLaXw.mjs +43 -0
  71. package/dist/StrikethroughPlugin.native-ChaZLaXw.mjs.map +1 -0
  72. package/dist/TablePlugin.native-EEWXn1-s.mjs +491 -0
  73. package/dist/TablePlugin.native-EEWXn1-s.mjs.map +1 -0
  74. package/dist/TemplatePlugin.native-BlSn1c9h.mjs +564 -0
  75. package/dist/TemplatePlugin.native-BlSn1c9h.mjs.map +1 -0
  76. package/dist/TextAlignmentPlugin.native-CQIs1m7R.mjs +97 -0
  77. package/dist/TextAlignmentPlugin.native-CQIs1m7R.mjs.map +1 -0
  78. package/dist/TextColorPlugin.native-D6SmTglm.mjs +432 -0
  79. package/dist/TextColorPlugin.native-D6SmTglm.mjs.map +1 -0
  80. package/dist/UnderlinePlugin.native-QpIcK4L2.mjs +35 -0
  81. package/dist/UnderlinePlugin.native-QpIcK4L2.mjs.map +1 -0
  82. package/dist/documentManager-irzj9n3V.mjs +37627 -0
  83. package/dist/documentManager-irzj9n3V.mjs.map +1 -0
  84. package/dist/editorContainerHelpers-C7kdWnS0.mjs +27 -0
  85. package/dist/editorContainerHelpers-C7kdWnS0.mjs.map +1 -0
  86. package/dist/editora.min.js +14 -12
  87. package/dist/editora.min.js.map +1 -1
  88. package/dist/editora.umd.js +14 -12
  89. package/dist/editora.umd.js.map +1 -1
  90. package/dist/index-BF5RBhL9.js +4 -0
  91. package/dist/index-BF5RBhL9.js.map +1 -0
  92. package/dist/{index-BS4zT-KN.mjs → index-BPsf460l.mjs} +286 -162
  93. package/dist/index-BPsf460l.mjs.map +1 -0
  94. package/dist/index.cjs.js +3 -3
  95. package/dist/index.cjs.js.map +1 -1
  96. package/dist/index.es-CuicffkQ.mjs +6665 -0
  97. package/dist/index.es-CuicffkQ.mjs.map +1 -0
  98. package/dist/index.esm.js +117 -112
  99. package/dist/index.esm.js.map +1 -1
  100. package/dist/plugin-loader.js +55 -0
  101. package/dist/plugin-loader.js.map +1 -0
  102. package/dist/purify.es-CKpwg8Tk.mjs +471 -0
  103. package/dist/purify.es-CKpwg8Tk.mjs.map +1 -0
  104. package/dist/webcomponent-core.js +1243 -0
  105. package/dist/webcomponent-core.js.map +1 -0
  106. package/dist/webcomponent-core.min.css +1 -0
  107. package/dist/webcomponent-core.min.js +597 -0
  108. package/dist/webcomponent-core.min.js.map +1 -0
  109. package/dist/webcomponent.cjs.js +1 -1
  110. package/dist/webcomponent.esm.js +3 -3
  111. package/dist/webcomponent.js +1286 -0
  112. package/dist/webcomponent.js.map +1 -0
  113. package/dist/webcomponent.min.css +1 -0
  114. package/dist/webcomponent.min.js +337 -334
  115. package/dist/webcomponent.min.js.map +1 -1
  116. package/package.json +16 -4
  117. package/dist/index-BK2lHfHK.js +0 -2
  118. package/dist/index-BK2lHfHK.js.map +0 -1
  119. package/dist/index-BS4zT-KN.mjs.map +0 -1
  120. package/dist/webcomponent.umd.js +0 -4073
  121. package/dist/webcomponent.umd.js.map +0 -1
@@ -0,0 +1,79 @@
1
+ const i = () => {
2
+ const o = () => {
3
+ try {
4
+ const e = window.getSelection();
5
+ if (e && e.rangeCount > 0 && !e.isCollapsed) {
6
+ const t = e.getRangeAt(0), r = t.toString().toUpperCase();
7
+ return t.deleteContents(), t.insertNode(document.createTextNode(r)), !0;
8
+ }
9
+ return !1;
10
+ } catch (e) {
11
+ return console.error("Failed to convert to uppercase:", e), !1;
12
+ }
13
+ }, a = () => {
14
+ try {
15
+ const e = window.getSelection();
16
+ if (e && e.rangeCount > 0 && !e.isCollapsed) {
17
+ const t = e.getRangeAt(0), r = t.toString().toLowerCase();
18
+ return t.deleteContents(), t.insertNode(document.createTextNode(r)), !0;
19
+ }
20
+ return !1;
21
+ } catch (e) {
22
+ return console.error("Failed to convert to lowercase:", e), !1;
23
+ }
24
+ }, n = () => {
25
+ try {
26
+ const e = window.getSelection();
27
+ if (e && e.rangeCount > 0 && !e.isCollapsed) {
28
+ const t = e.getRangeAt(0), r = t.toString().replace(/\w\S*/g, (l) => l.charAt(0).toUpperCase() + l.substr(1).toLowerCase());
29
+ return t.deleteContents(), t.insertNode(document.createTextNode(r)), !0;
30
+ }
31
+ return !1;
32
+ } catch (e) {
33
+ return console.error("Failed to convert to title case:", e), !1;
34
+ }
35
+ };
36
+ return {
37
+ name: "capitalization",
38
+ toolbar: [
39
+ {
40
+ label: "Capitalization",
41
+ command: "setCapitalization",
42
+ type: "inline-menu",
43
+ options: [
44
+ { label: "lowercase", value: "lowercase" },
45
+ { label: "UPPERCASE", value: "uppercase" },
46
+ { label: "Title Case", value: "titlecase" }
47
+ ],
48
+ icon: '<svg fill="#000000" width="24" height="24" viewBox="0 0 32.00 32.00" id="icon" xmlns="http://www.w3.org/2000/svg"><g id="SVGRepo_bgCarrier" stroke-width="0"></g><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round" stroke="#CCCCCC" stroke-width="0.192"></g><g id="SVGRepo_iconCarrier"><defs><style>.cls-1{fill:none;}</style></defs><title>letter--Aa</title><path d="M23,13H18v2h5v2H19a2,2,0,0,0-2,2v2a2,2,0,0,0,2,2h6V15A2,2,0,0,0,23,13Zm0,8H19V19h4Z"></path><path d="M13,9H9a2,2,0,0,0-2,2V23H9V18h4v5h2V11A2,2,0,0,0,13,9ZM9,16V11h4v5Z"></path><rect id="_Transparent_Rectangle_" data-name="&lt;Transparent Rectangle&gt;" class="cls-1" width="32" height="32"></rect></g></svg>'
49
+ }
50
+ ],
51
+ commands: {
52
+ setCapitalization: (e) => {
53
+ if (!e) return !1;
54
+ switch (e) {
55
+ case "uppercase":
56
+ return o();
57
+ case "lowercase":
58
+ return a();
59
+ case "titlecase":
60
+ return n();
61
+ default:
62
+ return !1;
63
+ }
64
+ },
65
+ toUpperCase: o,
66
+ toLowerCase: a,
67
+ toTitleCase: n
68
+ },
69
+ keymap: {
70
+ "Mod-Shift-u": "toUpperCase",
71
+ "Mod-Shift-k": "toLowerCase",
72
+ "Mod-Shift-t": "toTitleCase"
73
+ }
74
+ };
75
+ };
76
+ export {
77
+ i as CapitalizationPlugin
78
+ };
79
+ //# sourceMappingURL=CapitalizationPlugin.native-DOMsh5R7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CapitalizationPlugin.native-DOMsh5R7.mjs","sources":["../../plugins/capitalization/src/CapitalizationPlugin.native.ts"],"sourcesContent":["import type { Plugin } from '@editora/core';\n\n/**\n * CapitalizationPlugin - Native implementation for text case transformations\n * \n * Features:\n * - Convert text to UPPERCASE\n * - Convert text to lowercase\n * - Convert text to Title Case\n * - Useful for formatting headings, names, acronyms\n * \n * Commands:\n * - toUpperCase: Convert selection to UPPERCASE\n * - toLowerCase: Convert selection to lowercase\n * - toTitleCase: Convert selection to Title Case\n */\nexport const CapitalizationPlugin = (): Plugin => {\n // Define the actual transformation functions\n const toUpperCaseImpl = () => {\n try {\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0 && !selection.isCollapsed) {\n const range = selection.getRangeAt(0);\n const text = range.toString();\n const upperText = text.toUpperCase();\n\n range.deleteContents();\n range.insertNode(document.createTextNode(upperText));\n\n return true;\n }\n return false;\n } catch (error) {\n console.error(\"Failed to convert to uppercase:\", error);\n return false;\n }\n };\n\n const toLowerCaseImpl = () => {\n try {\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0 && !selection.isCollapsed) {\n const range = selection.getRangeAt(0);\n const text = range.toString();\n const lowerText = text.toLowerCase();\n\n range.deleteContents();\n range.insertNode(document.createTextNode(lowerText));\n\n return true;\n }\n return false;\n } catch (error) {\n console.error(\"Failed to convert to lowercase:\", error);\n return false;\n }\n };\n\n const toTitleCaseImpl = () => {\n try {\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0 && !selection.isCollapsed) {\n const range = selection.getRangeAt(0);\n const text = range.toString();\n\n // Convert to title case (capitalize first letter of each word)\n const titleText = text.replace(/\\w\\S*/g, (word) => {\n return (\n word.charAt(0).toUpperCase() + word.substr(1).toLowerCase()\n );\n });\n\n range.deleteContents();\n range.insertNode(document.createTextNode(titleText));\n\n return true;\n }\n return false;\n } catch (error) {\n console.error(\"Failed to convert to title case:\", error);\n return false;\n }\n };\n\n return {\n name: \"capitalization\",\n\n toolbar: [\n {\n label: \"Capitalization\",\n command: \"setCapitalization\",\n type: \"inline-menu\",\n options: [\n { label: \"lowercase\", value: \"lowercase\" },\n { label: \"UPPERCASE\", value: \"uppercase\" },\n { label: \"Title Case\", value: \"titlecase\" },\n ],\n icon: '<svg fill=\"#000000\" width=\"24\" height=\"24\" viewBox=\"0 0 32.00 32.00\" id=\"icon\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke=\"#CCCCCC\" stroke-width=\"0.192\"></g><g id=\"SVGRepo_iconCarrier\"><defs><style>.cls-1{fill:none;}</style></defs><title>letter--Aa</title><path d=\"M23,13H18v2h5v2H19a2,2,0,0,0-2,2v2a2,2,0,0,0,2,2h6V15A2,2,0,0,0,23,13Zm0,8H19V19h4Z\"></path><path d=\"M13,9H9a2,2,0,0,0-2,2V23H9V18h4v5h2V11A2,2,0,0,0,13,9ZM9,16V11h4v5Z\"></path><rect id=\"_Transparent_Rectangle_\" data-name=\"&lt;Transparent Rectangle&gt;\" class=\"cls-1\" width=\"32\" height=\"32\"></rect></g></svg>',\n },\n ],\n\n commands: {\n setCapitalization: (value?: string) => {\n if (!value) return false;\n \n switch (value) {\n case 'uppercase':\n return toUpperCaseImpl();\n case 'lowercase':\n return toLowerCaseImpl();\n case 'titlecase':\n return toTitleCaseImpl();\n default:\n return false;\n }\n },\n\n toUpperCase: toUpperCaseImpl,\n toLowerCase: toLowerCaseImpl,\n toTitleCase: toTitleCaseImpl,\n },\n\n keymap: {\n \"Mod-Shift-u\": \"toUpperCase\",\n \"Mod-Shift-k\": \"toLowerCase\",\n \"Mod-Shift-t\": \"toTitleCase\",\n },\n };\n};\n"],"names":["CapitalizationPlugin","toUpperCaseImpl","selection","range","upperText","error","toLowerCaseImpl","lowerText","toTitleCaseImpl","titleText","word","value"],"mappings":"AAgBO,MAAMA,IAAuB,MAAc;AAEhD,QAAMC,IAAkB,MAAM;AAC5B,QAAI;AACF,YAAMC,IAAY,OAAO,aAAA;AACzB,UAAIA,KAAaA,EAAU,aAAa,KAAK,CAACA,EAAU,aAAa;AACnE,cAAMC,IAAQD,EAAU,WAAW,CAAC,GAE9BE,IADOD,EAAM,SAAA,EACI,YAAA;AAEvB,eAAAA,EAAM,eAAA,GACNA,EAAM,WAAW,SAAS,eAAeC,CAAS,CAAC,GAE5C;AAAA,MACT;AACA,aAAO;AAAA,IACT,SAASC,GAAO;AACd,qBAAQ,MAAM,mCAAmCA,CAAK,GAC/C;AAAA,IACT;AAAA,EACF,GAEMC,IAAkB,MAAM;AAC5B,QAAI;AACF,YAAMJ,IAAY,OAAO,aAAA;AACzB,UAAIA,KAAaA,EAAU,aAAa,KAAK,CAACA,EAAU,aAAa;AACnE,cAAMC,IAAQD,EAAU,WAAW,CAAC,GAE9BK,IADOJ,EAAM,SAAA,EACI,YAAA;AAEvB,eAAAA,EAAM,eAAA,GACNA,EAAM,WAAW,SAAS,eAAeI,CAAS,CAAC,GAE5C;AAAA,MACT;AACA,aAAO;AAAA,IACT,SAASF,GAAO;AACd,qBAAQ,MAAM,mCAAmCA,CAAK,GAC/C;AAAA,IACT;AAAA,EACF,GAEMG,IAAkB,MAAM;AAC5B,QAAI;AACF,YAAMN,IAAY,OAAO,aAAA;AACzB,UAAIA,KAAaA,EAAU,aAAa,KAAK,CAACA,EAAU,aAAa;AACnE,cAAMC,IAAQD,EAAU,WAAW,CAAC,GAI9BO,IAHON,EAAM,SAAA,EAGI,QAAQ,UAAU,CAACO,MAEtCA,EAAK,OAAO,CAAC,EAAE,gBAAgBA,EAAK,OAAO,CAAC,EAAE,YAAA,CAEjD;AAED,eAAAP,EAAM,eAAA,GACNA,EAAM,WAAW,SAAS,eAAeM,CAAS,CAAC,GAE5C;AAAA,MACT;AACA,aAAO;AAAA,IACT,SAASJ,GAAO;AACd,qBAAQ,MAAM,oCAAoCA,CAAK,GAChD;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IAEN,SAAS;AAAA,MACP;AAAA,QACE,OAAO;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,QACN,SAAS;AAAA,UACP,EAAE,OAAO,aAAa,OAAO,YAAA;AAAA,UAC7B,EAAE,OAAO,aAAa,OAAO,YAAA;AAAA,UAC7B,EAAE,OAAO,cAAc,OAAO,YAAA;AAAA,QAAY;AAAA,QAE5C,MAAM;AAAA,MAAA;AAAA,IACR;AAAA,IAGF,UAAU;AAAA,MACR,mBAAmB,CAACM,MAAmB;AACrC,YAAI,CAACA,EAAO,QAAO;AAEnB,gBAAQA,GAAA;AAAA,UACN,KAAK;AACH,mBAAOV,EAAA;AAAA,UACT,KAAK;AACH,mBAAOK,EAAA;AAAA,UACT,KAAK;AACH,mBAAOE,EAAA;AAAA,UACT;AACE,mBAAO;AAAA,QAAA;AAAA,MAEb;AAAA,MAEA,aAAaP;AAAA,MACb,aAAaK;AAAA,MACb,aAAaE;AAAA,IAAA;AAAA,IAGf,QAAQ;AAAA,MACN,eAAe;AAAA,MACf,eAAe;AAAA,MACf,eAAe;AAAA,IAAA;AAAA,EACjB;AAEJ;"}
@@ -0,0 +1,153 @@
1
+ const A = () => {
2
+ const c = window.getSelection();
3
+ if (c && c.rangeCount > 0) {
4
+ let e = c.getRangeAt(0).startContainer;
5
+ for (; e && e !== document.body; ) {
6
+ if (e.nodeType === Node.ELEMENT_NODE) {
7
+ const n = e;
8
+ if (n.getAttribute("contenteditable") === "true")
9
+ return n;
10
+ }
11
+ e = e.parentNode;
12
+ }
13
+ }
14
+ const t = document.activeElement;
15
+ if (t) {
16
+ if (t.getAttribute("contenteditable") === "true")
17
+ return t;
18
+ const e = t.closest('[contenteditable="true"]');
19
+ if (e) return e;
20
+ }
21
+ return document.querySelector('[contenteditable="true"]');
22
+ }, w = () => ({
23
+ name: "checklist",
24
+ // Initialize click handler when plugin is loaded
25
+ init: () => {
26
+ if (typeof document != "undefined" && typeof window != "undefined") {
27
+ const c = (t) => {
28
+ const n = t.target.closest('li[data-type="checklist-item"]');
29
+ if (n) {
30
+ const a = n.getBoundingClientRect();
31
+ if (t.clientX - a.left < 32) {
32
+ t.preventDefault(), t.stopPropagation();
33
+ const k = n.getAttribute("data-checked") === "true";
34
+ n.setAttribute("data-checked", (!k).toString());
35
+ }
36
+ }
37
+ };
38
+ document.addEventListener("click", c);
39
+ }
40
+ },
41
+ // Schema definition for checklist nodes
42
+ nodes: {
43
+ checklist: {
44
+ content: "checklistItem+",
45
+ group: "block",
46
+ parseDOM: [{ tag: 'ul[data-type="checklist"]' }],
47
+ toDOM: () => ["ul", { "data-type": "checklist" }, 0]
48
+ },
49
+ checklistItem: {
50
+ content: "paragraph",
51
+ attrs: {
52
+ checked: { default: !1 }
53
+ },
54
+ parseDOM: [
55
+ {
56
+ tag: 'li[data-type="checklist-item"]',
57
+ getAttrs: (c) => ({
58
+ checked: c.getAttribute("data-checked") === "true"
59
+ })
60
+ }
61
+ ],
62
+ toDOM: (c) => {
63
+ var t;
64
+ return [
65
+ "li",
66
+ {
67
+ "data-type": "checklist-item",
68
+ "data-checked": (t = c == null ? void 0 : c.attrs) != null && t.checked ? "true" : "false"
69
+ },
70
+ 0
71
+ ];
72
+ }
73
+ }
74
+ },
75
+ toolbar: [
76
+ {
77
+ label: "Checklist",
78
+ command: "toggleChecklist",
79
+ icon: '<svg width="24px" height="24px" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#000000"><g id="SVGRepo_bgCarrier" stroke-width="0"></g><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g><g id="SVGRepo_iconCarrier"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.75 4.48h-.71L2 3.43l.71-.7.69.68L4.81 2l.71.71-1.77 1.77zM6.99 3h8v1h-8V3zm0 3h8v1h-8V6zm8 3h-8v1h8V9zm-8 3h8v1h-8v-1zM3.04 7.48h.71l1.77-1.77-.71-.7L3.4 6.42l-.69-.69-.71.71 1.04 1.04zm.71 3.01h-.71L2 9.45l.71-.71.69.69 1.41-1.42.71.71-1.77 1.77zm-.71 3.01h.71l1.77-1.77-.71-.71-1.41 1.42-.69-.69-.71.7 1.04 1.05z"></path></g></svg>',
80
+ shortcut: "Mod-Shift-9"
81
+ }
82
+ ],
83
+ commands: {
84
+ toggleChecklist: () => {
85
+ var c, t;
86
+ try {
87
+ const e = A();
88
+ if (!e) return !1;
89
+ const n = window.getSelection();
90
+ if (!n || n.rangeCount === 0) return !1;
91
+ const a = n.getRangeAt(0);
92
+ if (!e.contains(a.commonAncestorContainer)) return !1;
93
+ const i = a.commonAncestorContainer.nodeType === Node.TEXT_NODE ? a.commonAncestorContainer.parentElement : a.commonAncestorContainer, o = (c = i == null ? void 0 : i.closest("li")) == null ? void 0 : c.closest("ul, ol");
94
+ if (o) {
95
+ const C = o.hasAttribute("data-type") && o.getAttribute("data-type") === "checklist", f = o.tagName.toLowerCase() === "ol", m = o.tagName.toLowerCase() === "ul" && !o.hasAttribute("data-type");
96
+ if (C) {
97
+ const l = o.querySelectorAll('li[data-type="checklist-item"]'), u = Array.from(l).map((r) => `<p>${r.innerHTML}</p>`).join("");
98
+ return o.outerHTML = u, setTimeout(() => {
99
+ const r = window.getSelection();
100
+ if (r && e)
101
+ try {
102
+ const s = e.querySelectorAll("p"), d = i == null ? void 0 : i.closest('li[data-type="checklist-item"]'), h = d ? Array.from(l).indexOf(d) : -1;
103
+ if (s[h] && h >= 0) {
104
+ const p = s[h], y = document.createRange();
105
+ y.setStart(p, p.childNodes.length), y.setEnd(p, p.childNodes.length), r.removeAllRanges(), r.addRange(y);
106
+ }
107
+ } catch (s) {
108
+ console.warn("Could not restore selection after checklist removal");
109
+ }
110
+ }, 10), !0;
111
+ } else if (f || m)
112
+ return o.setAttribute("data-type", "checklist"), o.querySelectorAll("li").forEach((l) => {
113
+ l.setAttribute("data-type", "checklist-item"), l.setAttribute("data-checked", "false");
114
+ }), !0;
115
+ }
116
+ const k = a.toString().trim(), g = i == null ? void 0 : i.closest("p, div, h1, h2, h3, h4, h5, h6");
117
+ if (g) {
118
+ const f = `<ul data-type="checklist"><li data-type="checklist-item" data-checked="false"><p>${k || g.innerHTML}</p></li></ul>`, m = document.createElement("div");
119
+ m.innerHTML = f;
120
+ const l = m.firstElementChild;
121
+ return (t = g.parentNode) == null || t.replaceChild(l, g), setTimeout(() => {
122
+ var r;
123
+ const u = window.getSelection();
124
+ if (u)
125
+ try {
126
+ const s = l.querySelector('li[data-type="checklist-item"]');
127
+ if (s) {
128
+ const d = s.querySelector("p");
129
+ if (d && d.firstChild) {
130
+ const h = document.createRange();
131
+ h.setStart(d.firstChild, ((r = d.textContent) == null ? void 0 : r.length) || 0), h.collapse(!0), u.removeAllRanges(), u.addRange(h);
132
+ }
133
+ }
134
+ } catch (s) {
135
+ console.warn("Could not restore selection after checklist insertion:", s);
136
+ }
137
+ }, 10), !0;
138
+ } else
139
+ return console.warn("[ChecklistPlugin] No block element found"), !1;
140
+ return !0;
141
+ } catch (e) {
142
+ return console.error("Failed to toggle checklist:", e), !1;
143
+ }
144
+ }
145
+ },
146
+ keymap: {
147
+ "Mod-Shift-9": "toggleChecklist"
148
+ }
149
+ });
150
+ export {
151
+ w as ChecklistPlugin
152
+ };
153
+ //# sourceMappingURL=ChecklistPlugin.native-Dccs3nLe.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChecklistPlugin.native-Dccs3nLe.mjs","sources":["../../plugins/checklist/src/ChecklistPlugin.native.ts"],"sourcesContent":["import type { Plugin } from '@editora/core';\n\n/**\n * ChecklistPlugin - Native implementation for interactive todo lists\n * \n * Features:\n * - Creates checkbox list items\n * - Toggle checkboxes on/off\n * - Convert regular list to checklist\n * - Useful for task lists, requirements, shopping lists\n * \n * Commands:\n * - toggleChecklist: Convert to/from checklist\n */\n\n/**\n * Find the active editor element\n */\nconst findActiveEditor = (): HTMLElement | null => {\n // Try to find editor from current selection\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n let node: Node | null = selection.getRangeAt(0).startContainer;\n while (node && node !== document.body) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n if (element.getAttribute('contenteditable') === 'true') {\n return element;\n }\n }\n node = node.parentNode;\n }\n }\n \n // Try active element\n const activeElement = document.activeElement;\n if (activeElement) {\n if (activeElement.getAttribute('contenteditable') === 'true') {\n return activeElement as HTMLElement;\n }\n const editor = activeElement.closest('[contenteditable=\"true\"]');\n if (editor) return editor as HTMLElement;\n }\n \n // Fallback to first editor\n return document.querySelector('[contenteditable=\"true\"]');\n};\n\nexport const ChecklistPlugin = (): Plugin => {\n return {\n name: 'checklist',\n \n // Initialize click handler when plugin is loaded\n init: () => {\n if (typeof document !== 'undefined' && typeof window !== 'undefined') {\n const handleChecklistClick = (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n \n // Find the closest checklist item\n const checklistItem = target.closest('li[data-type=\"checklist-item\"]') as HTMLElement;\n \n if (checklistItem) {\n // Calculate if click is in the checkbox area (left 2em where checkbox is positioned)\n const rect = checklistItem.getBoundingClientRect();\n const clickX = event.clientX - rect.left;\n \n // Checkbox is in the first 2em (approximately 32px at default font size)\n const isCheckboxArea = clickX < 32;\n \n if (isCheckboxArea) {\n event.preventDefault();\n event.stopPropagation();\n \n // Toggle the checked state\n const isChecked = checklistItem.getAttribute(\"data-checked\") === \"true\";\n checklistItem.setAttribute(\"data-checked\", (!isChecked).toString());\n }\n }\n };\n \n // Set up the click handler\n document.addEventListener(\"click\", handleChecklistClick);\n }\n },\n \n // Schema definition for checklist nodes\n nodes: {\n checklist: {\n content: \"checklistItem+\",\n group: \"block\",\n parseDOM: [{ tag: 'ul[data-type=\"checklist\"]' }],\n toDOM: () => [\"ul\", { \"data-type\": \"checklist\" }, 0],\n },\n checklistItem: {\n content: \"paragraph\",\n attrs: {\n checked: { default: false },\n },\n parseDOM: [\n {\n tag: 'li[data-type=\"checklist-item\"]',\n getAttrs: (dom) => ({\n checked: (dom as HTMLElement).getAttribute(\"data-checked\") === \"true\",\n }),\n },\n ],\n toDOM: (node) => [\n \"li\",\n {\n \"data-type\": \"checklist-item\",\n \"data-checked\": node?.attrs?.checked ? \"true\" : \"false\",\n },\n 0,\n ],\n },\n },\n\n toolbar: [\n {\n label: 'Checklist',\n command: 'toggleChecklist',\n icon: '<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"#000000\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M3.75 4.48h-.71L2 3.43l.71-.7.69.68L4.81 2l.71.71-1.77 1.77zM6.99 3h8v1h-8V3zm0 3h8v1h-8V6zm8 3h-8v1h8V9zm-8 3h8v1h-8v-1zM3.04 7.48h.71l1.77-1.77-.71-.7L3.4 6.42l-.69-.69-.71.71 1.04 1.04zm.71 3.01h-.71L2 9.45l.71-.71.69.69 1.41-1.42.71.71-1.77 1.77zm-.71 3.01h.71l1.77-1.77-.71-.71-1.41 1.42-.69-.69-.71.7 1.04 1.05z\"></path></g></svg>',\n shortcut: 'Mod-Shift-9'\n }\n ],\n\n commands: {\n toggleChecklist: () => {\n try {\n const editorElement = findActiveEditor();\n if (!editorElement) return false;\n\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) return false;\n\n const range = selection.getRangeAt(0);\n \n // Verify selection is within the active editor\n if (!editorElement.contains(range.commonAncestorContainer)) return false;\n\n const container = range.commonAncestorContainer.nodeType === Node.TEXT_NODE\n ? (range.commonAncestorContainer.parentElement as HTMLElement)\n : (range.commonAncestorContainer as HTMLElement);\n\n // Check if we're in a list\n const listElement = container?.closest(\"li\")?.closest(\"ul, ol\");\n \n if (listElement) {\n const isChecklist = listElement.hasAttribute(\"data-type\") && \n listElement.getAttribute(\"data-type\") === \"checklist\";\n const isOrderedList = listElement.tagName.toLowerCase() === \"ol\";\n const isBulletList = listElement.tagName.toLowerCase() === \"ul\" && \n !listElement.hasAttribute(\"data-type\");\n\n // Convert checklist back to paragraphs\n if (isChecklist) {\n const checklistItems = listElement.querySelectorAll('li[data-type=\"checklist-item\"]');\n const paragraphs = Array.from(checklistItems)\n .map((item) => `<p>${item.innerHTML}</p>`)\n .join(\"\");\n \n listElement.outerHTML = paragraphs;\n \n // Restore selection\n setTimeout(() => {\n const sel = window.getSelection();\n if (sel && editorElement) {\n try {\n const allParagraphs = editorElement.querySelectorAll(\"p\");\n const originalItem = container?.closest('li[data-type=\"checklist-item\"]');\n const itemIndex = originalItem ? Array.from(checklistItems).indexOf(originalItem) : -1;\n \n if (allParagraphs[itemIndex] && itemIndex >= 0) {\n const targetP = allParagraphs[itemIndex];\n const newRange = document.createRange();\n newRange.setStart(targetP, targetP.childNodes.length);\n newRange.setEnd(targetP, targetP.childNodes.length);\n sel.removeAllRanges();\n sel.addRange(newRange);\n }\n } catch {\n console.warn(\"Could not restore selection after checklist removal\");\n }\n }\n }, 10);\n return true;\n } \n // Convert ordered/bullet list to checklist\n else if (isOrderedList || isBulletList) {\n listElement.setAttribute(\"data-type\", \"checklist\");\n listElement.querySelectorAll(\"li\").forEach((li) => {\n li.setAttribute(\"data-type\", \"checklist-item\");\n li.setAttribute(\"data-checked\", \"false\");\n });\n return true;\n }\n }\n\n // Convert paragraph to checklist or create new checklist\n const selectedText = range.toString().trim();\n \n // Find the block element containing the selection\n const blockElement = container?.closest(\"p, div, h1, h2, h3, h4, h5, h6\");\n \n if (blockElement) {\n // Use selected text if any, otherwise use block content\n const contentHTML = selectedText || blockElement.innerHTML;\n const checklistHTML = `<ul data-type=\"checklist\"><li data-type=\"checklist-item\" data-checked=\"false\"><p>${contentHTML}</p></li></ul>`;\n \n // Create the checklist element\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = checklistHTML;\n const checklistElement = tempDiv.firstElementChild as HTMLElement;\n \n // Replace the block element\n blockElement.parentNode?.replaceChild(checklistElement, blockElement);\n \n // Restore selection\n setTimeout(() => {\n const sel = window.getSelection();\n if (sel) {\n try {\n const checklistItem = checklistElement.querySelector('li[data-type=\"checklist-item\"]');\n if (checklistItem) {\n const p = checklistItem.querySelector(\"p\");\n if (p && p.firstChild) {\n const newRange = document.createRange();\n newRange.setStart(p.firstChild, p.textContent?.length || 0);\n newRange.collapse(true);\n sel.removeAllRanges();\n sel.addRange(newRange);\n }\n }\n } catch (e) {\n console.warn(\"Could not restore selection after checklist insertion:\", e);\n }\n }\n }, 10);\n return true;\n } else {\n console.warn('[ChecklistPlugin] No block element found');\n return false;\n }\n\n return true;\n } catch (error) {\n console.error('Failed to toggle checklist:', error);\n return false;\n }\n }\n },\n\n keymap: {\n 'Mod-Shift-9': 'toggleChecklist'\n }\n };\n};\n"],"names":["findActiveEditor","selection","node","element","activeElement","editor","ChecklistPlugin","handleChecklistClick","event","checklistItem","rect","isChecked","dom","_a","_b","editorElement","range","container","listElement","isChecklist","isOrderedList","isBulletList","checklistItems","paragraphs","item","sel","allParagraphs","originalItem","itemIndex","targetP","newRange","e","li","selectedText","blockElement","checklistHTML","tempDiv","checklistElement","p","error"],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ const a = () => ({
2
+ name: "clearFormatting",
3
+ // Toolbar button configuration
4
+ toolbar: [
5
+ {
6
+ label: "Clear Formatting",
7
+ command: "clearFormatting",
8
+ icon: '<svg width="24" height="24" focusable="false"><path d="M13.2 6a1 1 0 0 1 0 .2l-2.6 10a1 1 0 0 1-1 .8h-.2a.8.8 0 0 1-.8-1l2.6-10H8a1 1 0 1 1 0-2h9a1 1 0 0 1 0 2h-3.8ZM5 18h7a1 1 0 0 1 0 2H5a1 1 0 0 1 0-2Zm13 1.5L16.5 18 15 19.5a.7.7 0 0 1-1-1l1.5-1.5-1.5-1.5a.7.7 0 0 1 1-1l1.5 1.5 1.5-1.5a.7.7 0 0 1 1 1L17.5 17l1.5 1.5a.7.7 0 0 1-1 1Z" fill-rule="evenodd"></path></svg>',
9
+ shortcut: "Mod-\\"
10
+ }
11
+ ],
12
+ // Native command implementations
13
+ commands: {
14
+ /**
15
+ * Remove all formatting from current selection
16
+ */
17
+ clearFormatting: () => (document.execCommand("removeFormat", !1), !0)
18
+ },
19
+ // Keyboard shortcuts
20
+ keymap: {
21
+ "Mod-\\": "clearFormatting"
22
+ }
23
+ });
24
+ export {
25
+ a as ClearFormattingPlugin
26
+ };
27
+ //# sourceMappingURL=ClearFormattingPlugin.native-BZPDHswo.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClearFormattingPlugin.native-BZPDHswo.mjs","sources":["../../plugins/clear-formatting/src/ClearFormattingPlugin.native.ts"],"sourcesContent":["import { Plugin } from '@editora/core';\n\n/**\n * Clear Formatting Plugin - Framework Agnostic\n * \n * Removes all formatting from selected text with native command implementation.\n * No React dependency required.\n */\nexport const ClearFormattingPlugin = (): Plugin => ({\n name: \"clearFormatting\",\n\n // Toolbar button configuration\n toolbar: [\n {\n label: \"Clear Formatting\",\n command: \"clearFormatting\",\n icon: '<svg width=\"24\" height=\"24\" focusable=\"false\"><path d=\"M13.2 6a1 1 0 0 1 0 .2l-2.6 10a1 1 0 0 1-1 .8h-.2a.8.8 0 0 1-.8-1l2.6-10H8a1 1 0 1 1 0-2h9a1 1 0 0 1 0 2h-3.8ZM5 18h7a1 1 0 0 1 0 2H5a1 1 0 0 1 0-2Zm13 1.5L16.5 18 15 19.5a.7.7 0 0 1-1-1l1.5-1.5-1.5-1.5a.7.7 0 0 1 1-1l1.5 1.5 1.5-1.5a.7.7 0 0 1 1 1L17.5 17l1.5 1.5a.7.7 0 0 1-1 1Z\" fill-rule=\"evenodd\"></path></svg>',\n shortcut: \"Mod-\\\\\",\n },\n ],\n\n // Native command implementations\n commands: {\n /**\n * Remove all formatting from current selection\n */\n clearFormatting: () => {\n document.execCommand(\"removeFormat\", false);\n return true;\n },\n },\n\n // Keyboard shortcuts\n keymap: {\n \"Mod-\\\\\": \"clearFormatting\",\n },\n});\n"],"names":["ClearFormattingPlugin"],"mappings":"AAQO,MAAMA,IAAwB,OAAe;AAAA,EAClD,MAAM;AAAA;AAAA,EAGN,SAAS;AAAA,IACP;AAAA,MACE,OAAO;AAAA,MACP,SAAS;AAAA,MACT,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,EACZ;AAAA;AAAA,EAIF,UAAU;AAAA;AAAA;AAAA;AAAA,IAIR,iBAAiB,OACf,SAAS,YAAY,gBAAgB,EAAK,GACnC;AAAA,EACT;AAAA;AAAA,EAIF,QAAQ;AAAA,IACN,UAAU;AAAA,EAAA;AAEd;"}