@editora/plugins 1.0.6 → 1.0.8

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 (58) hide show
  1. package/README.md +57 -4
  2. package/dist/_commonjsHelpers-BH3jXuIh.js +1 -0
  3. package/dist/_commonjsHelpers-ByX85dGu.mjs +33 -0
  4. package/dist/anchor.cjs.js +11 -11
  5. package/dist/anchor.esm.js +130 -107
  6. package/dist/anchoredPopover-BzqGPOAE.js +1 -0
  7. package/dist/anchoredPopover-Dts0IrgU.mjs +106 -0
  8. package/dist/background-color.cjs.js +3 -3
  9. package/dist/background-color.esm.js +116 -119
  10. package/dist/code.cjs.js +82 -102
  11. package/dist/code.esm.js +1172 -662
  12. package/dist/comments.cjs.js +10 -10
  13. package/dist/comments.esm.js +195 -177
  14. package/dist/document-manager.cjs.js +1 -1
  15. package/dist/document-manager.esm.js +1 -1
  16. package/dist/documentManager-CTqRftU8.mjs +8369 -0
  17. package/dist/documentManager-Jf0RbSks.js +17 -0
  18. package/dist/embed-iframe.cjs.js +2 -2
  19. package/dist/embed-iframe.esm.js +8 -5
  20. package/dist/emojis.cjs.js +64 -39
  21. package/dist/emojis.esm.js +133 -104
  22. package/dist/html2canvas.esm-B5qzocYs.js +5 -0
  23. package/dist/html2canvas.esm-BWVIUcAF.mjs +4802 -0
  24. package/dist/{index-Bskk414V.mjs → index-BFsKNTTj.mjs} +50 -50
  25. package/dist/index-CvJk4DKa.js +221 -0
  26. package/dist/index-D3CycEFU.mjs +16543 -0
  27. package/dist/index-tqLTHcO6.js +1 -0
  28. package/dist/index.cjs.js +1 -1
  29. package/dist/{index.es-Cz1qItab.js → index.es-CE_A4QSm.js} +5 -5
  30. package/dist/{index.es-DEcRmSTY.mjs → index.es-DQ78mYYo.mjs} +4 -3
  31. package/dist/index.esm.js +87 -79
  32. package/dist/jspdf.es.min-BoS80556.js +77 -0
  33. package/dist/jspdf.es.min-DQCoX5yh.mjs +7889 -0
  34. package/dist/link.cjs.js +6 -6
  35. package/dist/link.esm.js +41 -39
  36. package/dist/math.cjs.js +21 -21
  37. package/dist/math.esm.js +151 -112
  38. package/dist/media-manager.cjs.js +15 -15
  39. package/dist/media-manager.esm.js +227 -206
  40. package/dist/merge-tag.cjs.js +44 -12
  41. package/dist/merge-tag.esm.js +368 -241
  42. package/dist/page-break.cjs.js +2 -2
  43. package/dist/page-break.esm.js +77 -69
  44. package/dist/special-characters.cjs.js +83 -45
  45. package/dist/special-characters.esm.js +149 -100
  46. package/dist/spell-check.cjs.js +9 -9
  47. package/dist/spell-check.esm.js +235 -216
  48. package/dist/template.cjs.js +14 -14
  49. package/dist/template.esm.js +157 -131
  50. package/dist/text-color.cjs.js +9 -9
  51. package/dist/text-color.esm.js +131 -115
  52. package/index.d.ts +51 -1
  53. package/package.json +6 -4
  54. package/dist/colorSelectionApply-C0iOfMWb.js +0 -1
  55. package/dist/colorSelectionApply-D8r_gV32.mjs +0 -63
  56. package/dist/documentManager-DRUc1-Cs.mjs +0 -37581
  57. package/dist/documentManager-_tQQfQi9.js +0 -317
  58. package/dist/index-D3pJyAsj.js +0 -1
@@ -1,4 +1,4 @@
1
- const d = {
1
+ const p = {
2
2
  all: {
3
3
  name: "All",
4
4
  emojis: [
@@ -540,7 +540,7 @@ const d = {
540
540
  "🇳🇿"
541
541
  ]
542
542
  }
543
- }, p = {
543
+ }, x = {
544
544
  "💙": "blue heart",
545
545
  "💚": "green heart",
546
546
  "💛": "yellow heart",
@@ -688,8 +688,8 @@ const d = {
688
688
  "🧹": "broom",
689
689
  "🧸": "teddy bear"
690
690
  };
691
- let c = null, n = "all", l = "", s = null;
692
- const j = '[data-theme="dark"], .dark, .editora-theme-dark', k = () => ({
691
+ let g = null, s = "all", u = "", n = null, l = null, d = null;
692
+ const k = '[data-theme="dark"], .dark, .editora-theme-dark', A = () => ({
693
693
  name: "emojis",
694
694
  toolbar: [
695
695
  {
@@ -701,16 +701,16 @@ const j = '[data-theme="dark"], .dark, .editora-theme-dark', k = () => ({
701
701
  }
702
702
  ],
703
703
  commands: {
704
- openEmojiDialog: (o, t) => {
705
- const e = t?.contentElement || u();
706
- return e ? (h(e), !0) : !1;
704
+ openEmojiDialog: (t, r) => {
705
+ const e = r?.contentElement || b();
706
+ return e ? (w(e), !0) : !1;
707
707
  },
708
- insertEmoji: (o, t) => {
709
- if (!o) return !1;
710
- const e = t?.contentElement || u();
708
+ insertEmoji: (t, r) => {
709
+ if (!t) return !1;
710
+ const e = r?.contentElement || b();
711
711
  if (!e) return !1;
712
712
  try {
713
- return f(o, e), !0;
713
+ return v(t, e), !0;
714
714
  } catch {
715
715
  return !1;
716
716
  }
@@ -720,16 +720,16 @@ const j = '[data-theme="dark"], .dark, .editora-theme-dark', k = () => ({
720
720
  "Mod-Shift-j": "openEmojiDialog"
721
721
  }
722
722
  });
723
- function h(o) {
724
- n = "all", l = "";
725
- const t = window.getSelection();
726
- s = null, t && t.rangeCount > 0 && o.contains(t.anchorNode) && (s = t.getRangeAt(0).cloneRange());
723
+ function w(t) {
724
+ m(), s = "all", u = "";
725
+ const r = window.getSelection();
726
+ l = null, r && r.rangeCount > 0 && t.contains(r.anchorNode) && (l = r.getRangeAt(0).cloneRange());
727
727
  const e = document.createElement("div");
728
- e.className = "emojis-overlay", w(o) && e.classList.add("rte-ui-theme-dark"), e.onclick = g;
729
- const r = document.createElement("div");
730
- r.className = "emojis-dialog", r.setAttribute("role", "dialog"), r.setAttribute("aria-modal", "true"), r.onclick = (a) => a.stopPropagation();
731
- const i = Object.keys(d);
732
- r.innerHTML = `
728
+ e.className = "emojis-overlay", z(t) && e.classList.add("rte-ui-theme-dark"), e.onclick = m;
729
+ const o = document.createElement("div");
730
+ o.className = "emojis-dialog", o.setAttribute("role", "dialog"), o.setAttribute("aria-modal", "true"), o.onclick = (a) => a.stopPropagation();
731
+ const i = Object.keys(p);
732
+ o.innerHTML = `
733
733
  <div class="rte-dialog-header emojis-header">
734
734
  <h3>Insert Emojis</h3>
735
735
  <button class="rte-dialog-close emojis-close">×</button>
@@ -737,8 +737,8 @@ function h(o) {
737
737
  <div class="rte-dialog-body emojis-content">
738
738
  <div class="emojis-tabs">
739
739
  ${i.map((a) => `
740
- <button class="emojis-tab ${a === n ? "active" : ""}" data-category="${a}">
741
- ${d[a].name}
740
+ <button class="emojis-tab ${a === s ? "active" : ""}" data-category="${a}">
741
+ ${p[a].name}
742
742
  </button>
743
743
  `).join("")}
744
744
  </div>
@@ -756,80 +756,84 @@ function h(o) {
756
756
  />
757
757
  </div>
758
758
  <div class="emojis-grid" id="emojis-grid">
759
- ${b(n, l)}
759
+ ${j(s, u)}
760
760
  </div>
761
761
  </div>
762
762
  </div>
763
- `, e.appendChild(r), document.body.appendChild(e), c = e, x(r, o), y(), setTimeout(() => {
764
- r.querySelector("#emoji-search-input")?.focus();
765
- }, 100);
763
+ `, e.appendChild(o), document.body.appendChild(e), g = e, d = (a) => {
764
+ a.key === "Escape" && (a.preventDefault(), a.stopPropagation(), m());
765
+ }, document.addEventListener("keydown", d, !0), y(o, t), S(), requestAnimationFrame(() => {
766
+ o.querySelector("#emoji-search-input")?.focus();
767
+ });
766
768
  }
767
- function x(o, t) {
768
- o.querySelector(".emojis-close")?.addEventListener("click", g), o.querySelectorAll(".emojis-tab").forEach((r) => {
769
- r.addEventListener("click", (i) => {
770
- const a = i.target.getAttribute("data-category");
771
- a && v(o, a, t);
769
+ function y(t, r) {
770
+ t.querySelector(".emojis-close")?.addEventListener("click", m), t.querySelectorAll(".emojis-tab").forEach((i) => {
771
+ i.addEventListener("click", (a) => {
772
+ const c = a.target.getAttribute("data-category");
773
+ c && E(t, c);
772
774
  });
773
- }), o.querySelector("#emoji-search-input")?.addEventListener("input", (r) => {
774
- l = r.target.value, m(o, t);
775
- }), m(o, t);
775
+ }), t.querySelector("#emoji-search-input")?.addEventListener("input", (i) => {
776
+ u = i.target.value, n !== null && window.clearTimeout(n), n = window.setTimeout(() => {
777
+ n = null, h(t);
778
+ }, 90);
779
+ }), t.querySelector("#emojis-grid")?.addEventListener("click", (i) => {
780
+ const c = i.target.closest(".emojis-item");
781
+ if (!c) return;
782
+ const f = c.getAttribute("data-emoji") || c.textContent?.trim() || "";
783
+ f && (v(f, r), m());
784
+ });
776
785
  }
777
- function v(o, t, e) {
778
- n = t, o.querySelectorAll(".emojis-tab").forEach((r) => {
779
- r.classList.toggle("active", r.getAttribute("data-category") === t);
780
- }), m(o, e);
786
+ function E(t, r) {
787
+ s = r, t.querySelectorAll(".emojis-tab").forEach((e) => {
788
+ e.classList.toggle("active", e.getAttribute("data-category") === r);
789
+ }), h(t);
781
790
  }
782
- function m(o, t) {
783
- const e = o.querySelector("#emojis-grid");
784
- e && (e.innerHTML = b(n, l), e.querySelectorAll(".emojis-item").forEach((r) => {
785
- r.addEventListener("click", () => {
786
- const i = r.textContent?.trim() || "";
787
- i && (f(i, t), g());
788
- });
789
- }));
791
+ function h(t) {
792
+ const r = t.querySelector("#emojis-grid");
793
+ r && (r.innerHTML = j(s, u));
790
794
  }
791
- function b(o, t) {
792
- let e = d[o].emojis;
793
- return t.trim() && (e = e.filter((r) => r.toLowerCase().includes(t.toLowerCase()) ? !0 : (p[r] || "").toLowerCase().includes(t.toLowerCase()))), e.length === 0 && t.trim() ? `<div class="emojis-no-results">No emojis found for "${t}"</div>` : e.map((r, i) => `
795
+ function j(t, r) {
796
+ let e = p[t].emojis;
797
+ return r.trim() && (e = e.filter((o) => o.toLowerCase().includes(r.toLowerCase()) ? !0 : (x[o] || "").toLowerCase().includes(r.toLowerCase()))), e.length === 0 && r.trim() ? `<div class="emojis-no-results">No emojis found for "${r}"</div>` : e.map((o, i) => `
794
798
  <button
795
799
  class="emojis-item"
796
- title="Insert ${r}"
797
- data-emoji="${r}"
800
+ title="Insert ${o}"
801
+ data-emoji="${o}"
798
802
  >
799
- ${r}
803
+ ${o}
800
804
  </button>
801
805
  `).join("");
802
806
  }
803
- function g() {
804
- c && (document.body.removeChild(c), c = null);
807
+ function m() {
808
+ d && (document.removeEventListener("keydown", d, !0), d = null), n !== null && (window.clearTimeout(n), n = null), g && (g.remove(), g = null);
805
809
  }
806
- function f(o, t) {
807
- t.focus();
810
+ function v(t, r) {
811
+ r.focus();
808
812
  let e = window.getSelection();
809
- if (s && (e?.removeAllRanges(), e?.addRange(s), s = null), e = window.getSelection(), e && e.rangeCount > 0) {
810
- const r = e.getRangeAt(0);
811
- r.deleteContents();
812
- const i = document.createTextNode(o);
813
- r.insertNode(i), r.setStartAfter(i), r.setEndAfter(i), e.removeAllRanges(), e.addRange(r);
813
+ if (l && (e?.removeAllRanges(), e?.addRange(l), l = null), e = window.getSelection(), e && e.rangeCount > 0) {
814
+ const o = e.getRangeAt(0);
815
+ o.deleteContents();
816
+ const i = document.createTextNode(t);
817
+ o.insertNode(i), o.setStartAfter(i), o.setEndAfter(i), e.removeAllRanges(), e.addRange(o);
814
818
  }
815
819
  }
816
- function u() {
817
- const o = window.getSelection();
818
- if (o && o.rangeCount > 0) {
819
- const e = o.anchorNode, i = (e instanceof HTMLElement ? e : e?.parentElement)?.closest(".editora-content, .rte-content");
820
+ function b() {
821
+ const t = window.getSelection();
822
+ if (t && t.rangeCount > 0) {
823
+ const e = t.anchorNode, i = (e instanceof HTMLElement ? e : e?.parentElement)?.closest(".editora-content, .rte-content");
820
824
  if (i) return i;
821
825
  }
822
- const t = document.activeElement;
823
- return t && (t.classList.contains("editora-content") || t.classList.contains("rte-content")) ? t : document.querySelector(".editora-content, .rte-content");
826
+ const r = document.activeElement;
827
+ return r && (r.classList.contains("editora-content") || r.classList.contains("rte-content")) ? r : document.querySelector(".editora-content, .rte-content");
824
828
  }
825
- function w(o) {
826
- const t = o || u();
827
- return t ? !!t.closest(j) : !1;
829
+ function z(t) {
830
+ const r = t || b();
831
+ return r ? !!r.closest(k) : !1;
828
832
  }
829
- function y() {
833
+ function S() {
830
834
  if (document.getElementById("emojis-dialog-styles")) return;
831
- const o = document.createElement("style");
832
- o.id = "emojis-dialog-styles", o.textContent = `
835
+ const t = document.createElement("style");
836
+ t.id = "emojis-dialog-styles", t.textContent = `
833
837
  .emojis-overlay {
834
838
  --rte-emoji-overlay-bg: rgba(15, 23, 36, 0.56);
835
839
  --rte-emoji-dialog-bg: #ffffff;
@@ -841,6 +845,26 @@ function y() {
841
845
  --rte-emoji-accent: #1f75fe;
842
846
  --rte-emoji-accent-strong: #165fd6;
843
847
  --rte-emoji-ring: rgba(31, 117, 254, 0.18);
848
+ --rte-picker-dialog-width: min(640px, 96vw);
849
+ --rte-picker-dialog-max-height: min(560px, 86vh);
850
+ --rte-picker-dialog-radius: 12px;
851
+ --rte-picker-search-wrap-padding: 12px;
852
+ --rte-picker-search-height: 38px;
853
+ --rte-picker-search-font-size: 13px;
854
+ --rte-picker-search-radius: 8px;
855
+ --rte-picker-tabs-width: 156px;
856
+ --rte-picker-tab-padding-y: 10px;
857
+ --rte-picker-tab-padding-x: 12px;
858
+ --rte-picker-tab-font-size: 13px;
859
+ --rte-picker-grid-padding: 12px;
860
+ --rte-picker-grid-gap: 6px;
861
+ --rte-picker-cell-size: 34px;
862
+ --rte-picker-cell-font-size: 17px;
863
+ --rte-picker-cell-radius: 7px;
864
+ --rte-picker-mobile-tab-min-width: 82px;
865
+ --rte-picker-mobile-cell-size: 32px;
866
+ --rte-picker-mobile-grid-gap: 5px;
867
+ --rte-picker-mobile-dialog-max-height: 88vh;
844
868
  position: fixed;
845
869
  top: 0;
846
870
  left: 0;
@@ -851,7 +875,7 @@ function y() {
851
875
  display: flex;
852
876
  align-items: center;
853
877
  justify-content: center;
854
- z-index: 1000;
878
+ z-index: 10000;
855
879
  padding: 16px;
856
880
  box-sizing: border-box;
857
881
  }
@@ -873,11 +897,10 @@ function y() {
873
897
  background: var(--rte-emoji-dialog-bg);
874
898
  color: var(--rte-emoji-dialog-text);
875
899
  border: 1px solid var(--rte-emoji-border);
876
- border-radius: 12px;
900
+ border-radius: var(--rte-picker-dialog-radius);
877
901
  box-shadow: 0 24px 48px rgba(10, 15, 24, 0.28);
878
- max-width: 800px;
879
- width: 90%;
880
- max-height: 80vh;
902
+ width: var(--rte-picker-dialog-width);
903
+ max-height: var(--rte-picker-dialog-max-height);
881
904
  display: flex;
882
905
  flex-direction: column;
883
906
  overflow: hidden;
@@ -915,31 +938,34 @@ function y() {
915
938
  display: flex;
916
939
  flex-direction: column;
917
940
  overflow: hidden;
941
+ min-width: 0;
918
942
  }
919
943
 
920
944
  .emojis-search {
921
- padding: 16px 16px 0 16px;
945
+ padding: var(--rte-picker-search-wrap-padding) var(--rte-picker-search-wrap-padding) 0 var(--rte-picker-search-wrap-padding);
922
946
  position: relative;
923
947
  }
924
948
 
925
949
  .emojis-search-icon {
926
950
  position: absolute;
927
- left: 28px;
928
- top: 27px;
951
+ left: 24px;
952
+ top: 22px;
929
953
  color: var(--rte-emoji-muted-text);
930
954
  pointer-events: none;
931
955
  z-index: 1;
932
956
  }
933
957
 
934
958
  .emojis-search-input {
935
- width: calc(100% - 24px);
936
- padding: 10px 12px 10px 40px;
959
+ width: 100%;
960
+ height: var(--rte-picker-search-height);
961
+ padding: 8px 12px 8px 36px;
937
962
  border: 1px solid var(--rte-emoji-border);
938
- border-radius: 8px;
939
- font-size: 14px;
963
+ border-radius: var(--rte-picker-search-radius);
964
+ font-size: var(--rte-picker-search-font-size);
940
965
  color: var(--rte-emoji-dialog-text);
941
966
  background-color: var(--rte-emoji-subtle-bg);
942
967
  transition: border-color 0.2s ease, box-shadow 0.2s ease;
968
+ box-sizing: border-box;
943
969
  }
944
970
 
945
971
  .emojis-search-input:focus {
@@ -959,21 +985,23 @@ function y() {
959
985
  .emojis-tabs {
960
986
  display: flex;
961
987
  flex-direction: column;
962
- width: 180px;
988
+ width: var(--rte-picker-tabs-width);
963
989
  border-right: 1px solid var(--rte-emoji-border);
964
990
  background-color: var(--rte-emoji-subtle-bg);
991
+ overflow-y: auto;
965
992
  }
966
993
 
967
994
  .emojis-tab {
968
- padding: 12px 16px;
995
+ padding: var(--rte-picker-tab-padding-y) var(--rte-picker-tab-padding-x);
969
996
  border: none;
970
997
  background: none;
971
998
  text-align: left;
972
999
  cursor: pointer;
973
- font-size: 14px;
1000
+ font-size: var(--rte-picker-tab-font-size);
974
1001
  color: var(--rte-emoji-muted-text);
975
1002
  border-bottom: 1px solid var(--rte-emoji-border);
976
1003
  transition: all 0.2s ease;
1004
+ line-height: 1.25;
977
1005
  }
978
1006
 
979
1007
  .emojis-tab:hover {
@@ -992,24 +1020,25 @@ function y() {
992
1020
  }
993
1021
 
994
1022
  .emojis-grid {
995
- padding: 16px;
1023
+ padding: var(--rte-picker-grid-padding);
996
1024
  overflow-y: auto;
997
1025
  display: grid;
998
- grid-template-columns: repeat(auto-fill, minmax(40px, 1fr));
999
- gap: 8px;
1026
+ grid-template-columns: repeat(auto-fill, minmax(var(--rte-picker-cell-size), 1fr));
1027
+ gap: var(--rte-picker-grid-gap);
1028
+ contain: content;
1000
1029
  }
1001
1030
 
1002
1031
  .emojis-item {
1003
- width: 40px;
1004
- height: 40px;
1032
+ width: var(--rte-picker-cell-size);
1033
+ height: var(--rte-picker-cell-size);
1005
1034
  display: flex;
1006
1035
  align-items: center;
1007
1036
  justify-content: center;
1008
1037
  border: 1px solid var(--rte-emoji-border);
1009
1038
  background: var(--rte-emoji-subtle-bg);
1010
- border-radius: 8px;
1039
+ border-radius: var(--rte-picker-cell-radius);
1011
1040
  cursor: pointer;
1012
- font-size: 18px;
1041
+ font-size: var(--rte-picker-cell-font-size);
1013
1042
  transition: all 0.2s ease;
1014
1043
  color: var(--rte-emoji-dialog-text);
1015
1044
  }
@@ -1039,8 +1068,8 @@ function y() {
1039
1068
  /* Responsive design */
1040
1069
  @media (max-width: 768px) {
1041
1070
  .emojis-dialog {
1042
- width: 95%;
1043
- max-height: 90vh;
1071
+ width: 96%;
1072
+ max-height: var(--rte-picker-mobile-dialog-max-height);
1044
1073
  }
1045
1074
 
1046
1075
  .emojis-content {
@@ -1059,22 +1088,22 @@ function y() {
1059
1088
  border-bottom: none;
1060
1089
  border-right: 1px solid var(--rte-emoji-border);
1061
1090
  white-space: nowrap;
1062
- min-width: 80px;
1091
+ min-width: var(--rte-picker-mobile-tab-min-width);
1063
1092
  }
1064
1093
 
1065
1094
  .emojis-grid {
1066
- grid-template-columns: repeat(auto-fill, minmax(36px, 1fr));
1067
- gap: 6px;
1095
+ grid-template-columns: repeat(auto-fill, minmax(var(--rte-picker-mobile-cell-size), 1fr));
1096
+ gap: var(--rte-picker-mobile-grid-gap);
1068
1097
  }
1069
1098
 
1070
1099
  .emojis-item {
1071
- width: 36px;
1072
- height: 36px;
1100
+ width: var(--rte-picker-mobile-cell-size);
1101
+ height: var(--rte-picker-mobile-cell-size);
1073
1102
  font-size: 16px;
1074
1103
  }
1075
1104
  }
1076
- `, document.head.appendChild(o);
1105
+ `, document.head.appendChild(t);
1077
1106
  }
1078
1107
  export {
1079
- k as EmojisPlugin
1108
+ A as EmojisPlugin
1080
1109
  };