@editora/core 1.0.0 → 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 (119) 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/core.css +1 -0
  83. package/dist/documentManager-irzj9n3V.mjs +37627 -0
  84. package/dist/documentManager-irzj9n3V.mjs.map +1 -0
  85. package/dist/editorContainerHelpers-C7kdWnS0.mjs +27 -0
  86. package/dist/editorContainerHelpers-C7kdWnS0.mjs.map +1 -0
  87. package/dist/editora.min.js +519 -4
  88. package/dist/editora.min.js.map +1 -0
  89. package/dist/editora.umd.js +519 -4
  90. package/dist/editora.umd.js.map +1 -0
  91. package/dist/index-BF5RBhL9.js +4 -0
  92. package/dist/index-BF5RBhL9.js.map +1 -0
  93. package/dist/index-BPsf460l.mjs +1243 -0
  94. package/dist/index-BPsf460l.mjs.map +1 -0
  95. package/dist/index.cjs.js +517 -4
  96. package/dist/index.cjs.js.map +1 -0
  97. package/dist/index.es-CuicffkQ.mjs +6665 -0
  98. package/dist/index.es-CuicffkQ.mjs.map +1 -0
  99. package/dist/index.esm.js +1403 -122
  100. package/dist/index.esm.js.map +1 -0
  101. package/dist/plugin-loader.js +55 -0
  102. package/dist/plugin-loader.js.map +1 -0
  103. package/dist/purify.es-CKpwg8Tk.mjs +471 -0
  104. package/dist/purify.es-CKpwg8Tk.mjs.map +1 -0
  105. package/dist/webcomponent-core.js +1243 -0
  106. package/dist/webcomponent-core.js.map +1 -0
  107. package/dist/webcomponent-core.min.css +1 -0
  108. package/dist/webcomponent-core.min.js +597 -0
  109. package/dist/webcomponent-core.min.js.map +1 -0
  110. package/dist/webcomponent.cjs.js +2 -0
  111. package/dist/webcomponent.cjs.js.map +1 -0
  112. package/dist/webcomponent.esm.js +6 -0
  113. package/dist/webcomponent.esm.js.map +1 -0
  114. package/dist/webcomponent.js +1286 -0
  115. package/dist/webcomponent.js.map +1 -0
  116. package/dist/webcomponent.min.css +1 -0
  117. package/dist/webcomponent.min.js +4076 -0
  118. package/dist/webcomponent.min.js.map +1 -0
  119. package/package.json +64 -6
@@ -0,0 +1,27 @@
1
+ function i() {
2
+ const t = window.getSelection();
3
+ if (!t || !t.rangeCount)
4
+ return null;
5
+ const e = t.getRangeAt(0).startContainer, r = e.nodeType === Node.TEXT_NODE ? e.parentElement : e;
6
+ return o(r);
7
+ }
8
+ function o(t) {
9
+ if (!t) return null;
10
+ if (t.hasAttribute("data-editora-editor"))
11
+ return t;
12
+ let n = t.parentElement;
13
+ for (; n; ) {
14
+ if (n.hasAttribute("data-editora-editor"))
15
+ return n;
16
+ n = n.parentElement;
17
+ }
18
+ return null;
19
+ }
20
+ function a(t) {
21
+ return t ? t.querySelector(".rte-content") : (console.warn("[Editora] Editor container not found"), null);
22
+ }
23
+ export {
24
+ i as f,
25
+ a as g
26
+ };
27
+ //# sourceMappingURL=editorContainerHelpers-C7kdWnS0.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editorContainerHelpers-C7kdWnS0.mjs","sources":["../../plugins/shared/editorContainerHelpers.ts"],"sourcesContent":["/**\n * Utility functions for plugins to access the editor container in a multi-instance safe way\n * \n * These functions help plugins find their parent editor container and perform scoped DOM queries\n * instead of using global selectors that only work with the first editor instance on a page.\n */\n\n/**\n * Find the editor container from the current selection\n * This is the most reliable way to find the active editor when executing commands\n * \n * @returns The editor container div or null if no selection or editor not found\n */\nexport function findEditorContainerFromSelection(): HTMLDivElement | null {\n const selection = window.getSelection();\n if (!selection || !selection.rangeCount) {\n return null;\n }\n \n const range = selection.getRangeAt(0);\n const node = range.startContainer;\n \n // Get the element (text nodes need their parent)\n const element = node.nodeType === Node.TEXT_NODE \n ? node.parentElement \n : node as HTMLElement;\n \n return findEditorContainer(element);\n}\n\n/**\n * Find the parent editor container for a given element\n * Walks up the DOM tree looking for [data-editora-editor] attribute\n * \n * @param element - Starting element to search from (usually a toolbar, plugin element, etc)\n * @returns The editor container div or null if not found\n */\nexport function findEditorContainer(element: HTMLElement | null): HTMLDivElement | null {\n if (!element) return null;\n \n // If element itself is the editor container, return it\n if (element.hasAttribute('data-editora-editor')) {\n return element as HTMLDivElement;\n }\n \n // Walk up the DOM tree looking for editor container\n let current = element.parentElement;\n while (current) {\n if (current.hasAttribute('data-editora-editor')) {\n return current as HTMLDivElement;\n }\n current = current.parentElement;\n }\n \n return null;\n}\n\n/**\n * Get the content element (.rte-content) for a given editor container\n * Uses scoped selector instead of global document.querySelector\n * \n * @param editorContainer - The editor container element\n * @returns The content element or null if not found\n */\nexport function getContentElement(editorContainer: HTMLDivElement | null): HTMLElement | null {\n if (!editorContainer) {\n console.warn('[Editora] Editor container not found');\n return null;\n }\n return editorContainer.querySelector('.rte-content') as HTMLElement | null;\n}\n\n/**\n * Get the content element by first finding the parent editor container from a given element\n * This is the most common usage pattern in plugins\n * \n * @param fromElement - Element to start searching from (e.g., this in event handler)\n * @returns The content element or null if not found\n */\nexport function findContentElement(fromElement: HTMLElement | null): HTMLElement | null {\n const container = findEditorContainer(fromElement);\n return getContentElement(container);\n}\n\n/**\n * Query elements within the editor container scope\n * Useful for finding specific elements like footnotes, merge tags, anchors, etc.\n * \n * @param editorContainer - The editor container element\n * @param selector - CSS selector to find within the container\n * @returns NodeList of matching elements\n */\nexport function queryScopedElements(\n editorContainer: HTMLDivElement | null,\n selector: string\n): NodeListOf<Element> {\n if (!editorContainer) {\n // Fallback to global selector for backward compatibility, but warn\n console.warn(`[Editora] Editor container not found, using global selector fallback for \"${selector}\"`);\n return document.querySelectorAll(selector);\n }\n return editorContainer.querySelectorAll(selector);\n}\n\n/**\n * Get a single scoped element\n * \n * @param editorContainer - The editor container element\n * @param selector - CSS selector to find within the container\n * @returns First matching element or null\n */\nexport function queryScopedElement(\n editorContainer: HTMLDivElement | null,\n selector: string\n): Element | null {\n if (!editorContainer) {\n // Fallback to global selector for backward compatibility, but warn\n console.warn(`[Editora] Editor container not found, using global selector fallback for \"${selector}\"`);\n return document.querySelector(selector);\n }\n return editorContainer.querySelector(selector);\n}\n\n/**\n * Get an element by ID within editor container scope\n * IDs like footnote IDs, anchor IDs, merge tag IDs should be scoped to the editor\n * \n * @param editorContainer - The editor container element\n * @param id - Element ID to find\n * @returns Element with that ID or null\n */\nexport function getScopedElementById(\n editorContainer: HTMLDivElement | null,\n id: string\n): HTMLElement | null {\n if (!editorContainer) {\n // Fallback for backward compatibility\n return document.getElementById(id);\n }\n \n // Use querySelector with ID selector within container scope\n return editorContainer.querySelector(`#${id}`) as HTMLElement | null;\n}\n\n/**\n * Event handler helper - Extract editor container from event and get content element\n * Common pattern: In event handlers, get the target element and find the editor container\n * \n * @param event - DOM event\n * @returns Object with editorContainer and contentElement\n */\nexport function getEditorElementsFromEvent(event: Event): {\n editorContainer: HTMLDivElement | null;\n contentElement: HTMLElement | null;\n} {\n const target = event.target as HTMLElement;\n const editorContainer = findEditorContainer(target);\n const contentElement = getContentElement(editorContainer);\n return { editorContainer, contentElement };\n}\n\n/**\n * Check if an element is within an editor instance\n * \n * @param element - Element to check\n * @returns True if element is inside an editor container\n */\nexport function isInEditor(element: HTMLElement | null): boolean {\n return findEditorContainer(element) !== null;\n}\n\n/**\n * Helper for getting selection from a specific editor\n * Ensures selection is within the correct editor instance\n * \n * @param editorContainer - The editor container element\n * @returns Selection if it's within this editor, or null otherwise\n */\nexport function getEditorSelection(editorContainer: HTMLDivElement | null): Selection | null {\n const selection = window.getSelection();\n if (!selection || !editorContainer) return null;\n \n const contentElement = getContentElement(editorContainer);\n if (!contentElement) return null;\n \n // Check if selection is within this editor's content\n if (selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n if (contentElement.contains(range.startContainer) && contentElement.contains(range.endContainer)) {\n return selection;\n }\n }\n \n return null;\n}\n\n/**\n * Helper for commands that need to know which editor they're being executed on\n * Extract editor context from toolbar button or command origin\n * \n * @param element - Button or element that triggered the command\n * @returns Editor container or null\n */\nexport function getEditorContextFromCommand(element: HTMLElement | null): HTMLDivElement | null {\n // First, try to find the editor container directly\n const fromElement = findEditorContainer(element);\n if (fromElement) return fromElement;\n \n // If element is a toolbar button, it might be outside editor container\n // Try to find it through document.activeElement (the focused editor)\n const activeElement = document.activeElement as HTMLElement;\n if (activeElement && activeElement.classList?.contains('rte-content')) {\n return findEditorContainer(activeElement);\n }\n \n return null;\n}\n"],"names":["findEditorContainerFromSelection","selection","node","element","findEditorContainer","current","getContentElement","editorContainer"],"mappings":"AAaO,SAASA,IAA0D;AACxE,QAAMC,IAAY,OAAO,aAAA;AACzB,MAAI,CAACA,KAAa,CAACA,EAAU;AAC3B,WAAO;AAIT,QAAMC,IADQD,EAAU,WAAW,CAAC,EACjB,gBAGbE,IAAUD,EAAK,aAAa,KAAK,YACnCA,EAAK,gBACLA;AAEJ,SAAOE,EAAoBD,CAAO;AACpC;AASO,SAASC,EAAoBD,GAAoD;AACtF,MAAI,CAACA,EAAS,QAAO;AAGrB,MAAIA,EAAQ,aAAa,qBAAqB;AAC5C,WAAOA;AAIT,MAAIE,IAAUF,EAAQ;AACtB,SAAOE,KAAS;AACd,QAAIA,EAAQ,aAAa,qBAAqB;AAC5C,aAAOA;AAET,IAAAA,IAAUA,EAAQ;AAAA,EACpB;AAEA,SAAO;AACT;AASO,SAASC,EAAkBC,GAA4D;AAC5F,SAAKA,IAIEA,EAAgB,cAAc,cAAc,KAHjD,QAAQ,KAAK,sCAAsC,GAC5C;AAGX;"}