@mdaemon/html-editor 1.0.11 → 1.0.12

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.
package/dist/index.d.ts CHANGED
@@ -471,6 +471,7 @@ export declare class Toolbar {
471
471
  private state;
472
472
  private buttonElements;
473
473
  private dropdowns;
474
+ private bodyMenus;
474
475
  private charMap;
475
476
  private emojiPicker;
476
477
  private imageUpload;
@@ -521,6 +522,7 @@ export declare class Toolbar {
521
522
  private toggleFullscreen;
522
523
  rebuild(): void;
523
524
  destroy(): void;
525
+ private removeBodyMenus;
524
526
  }
525
527
 
526
528
  export declare interface ToolbarButtonAPI {
package/dist/index.js CHANGED
@@ -42788,6 +42788,7 @@ class Toolbar {
42788
42788
  state;
42789
42789
  buttonElements = /* @__PURE__ */ new Map();
42790
42790
  dropdowns = /* @__PURE__ */ new Map();
42791
+ bodyMenus = [];
42791
42792
  charMap = null;
42792
42793
  emojiPicker = null;
42793
42794
  imageUpload = null;
@@ -43160,7 +43161,7 @@ class Toolbar {
43160
43161
  button.title = label;
43161
43162
  button.innerHTML = `
43162
43163
  <span class="md-toolbar-dropdown-label">${label}</span>
43163
- <span class="md-toolbar-dropdown-arrow">▼</span>
43164
+ <span class="md-toolbar-dropdown-arrow"><svg width="8" height="8" viewBox="0 0 8 8" fill="currentColor"><path d="M0 2l4 4 4-4z"/></svg></span>
43164
43165
  `;
43165
43166
  const menu = document.createElement("div");
43166
43167
  menu.className = "md-toolbar-dropdown-menu";
@@ -43192,11 +43193,12 @@ class Toolbar {
43192
43193
  e.stopPropagation();
43193
43194
  this.dropdowns.forEach((dropdown, key) => {
43194
43195
  if (key !== name) {
43195
- dropdown.classList.remove("md-toolbar-dropdown-open");
43196
- const m = dropdown.querySelector(".md-toolbar-dropdown-menu");
43197
- if (m) m.style.display = "none";
43196
+ dropdown.classList.remove("md-toolbar-dropdown-open", "md-toolbar-colorpicker-open");
43198
43197
  }
43199
43198
  });
43199
+ this.bodyMenus.forEach((m) => {
43200
+ if (m !== menu) m.style.display = "none";
43201
+ });
43200
43202
  const isOpen = menu.style.display !== "none";
43201
43203
  menu.style.display = isOpen ? "none" : "block";
43202
43204
  wrapper.classList.toggle("md-toolbar-dropdown-open", !isOpen);
@@ -43212,7 +43214,8 @@ class Toolbar {
43212
43214
  }
43213
43215
  });
43214
43216
  wrapper.appendChild(button);
43215
- wrapper.appendChild(menu);
43217
+ document.body.appendChild(menu);
43218
+ this.bodyMenus.push(menu);
43216
43219
  this.dropdowns.set(name, wrapper);
43217
43220
  return wrapper;
43218
43221
  }
@@ -43227,7 +43230,7 @@ class Toolbar {
43227
43230
  button.innerHTML = `
43228
43231
  <span class="md-toolbar-colorpicker-icon md-icon-${name}">A</span>
43229
43232
  <span class="md-toolbar-colorpicker-preview" style="background-color: ${name === "forecolor" ? "#000" : "#ff0"}"></span>
43230
- <span class="md-toolbar-dropdown-arrow">▼</span>
43233
+ <span class="md-toolbar-dropdown-arrow"><svg width="8" height="8" viewBox="0 0 8 8" fill="currentColor"><path d="M0 2l4 4 4-4z"/></svg></span>
43231
43234
  `;
43232
43235
  const menu = document.createElement("div");
43233
43236
  menu.className = "md-toolbar-colorpicker-menu";
@@ -43278,6 +43281,14 @@ class Toolbar {
43278
43281
  button.addEventListener("click", (e) => {
43279
43282
  e.preventDefault();
43280
43283
  e.stopPropagation();
43284
+ this.dropdowns.forEach((dropdown, key) => {
43285
+ if (key !== name) {
43286
+ dropdown.classList.remove("md-toolbar-dropdown-open", "md-toolbar-colorpicker-open");
43287
+ }
43288
+ });
43289
+ this.bodyMenus.forEach((m) => {
43290
+ if (m !== menu) m.style.display = "none";
43291
+ });
43281
43292
  const isOpen = menu.style.display !== "none";
43282
43293
  menu.style.display = isOpen ? "none" : "block";
43283
43294
  wrapper.classList.toggle("md-toolbar-colorpicker-open", !isOpen);
@@ -43286,7 +43297,8 @@ class Toolbar {
43286
43297
  }
43287
43298
  });
43288
43299
  wrapper.appendChild(button);
43289
- wrapper.appendChild(menu);
43300
+ document.body.appendChild(menu);
43301
+ this.bodyMenus.push(menu);
43290
43302
  this.dropdowns.set(name, wrapper);
43291
43303
  return wrapper;
43292
43304
  }
@@ -43294,7 +43306,9 @@ class Toolbar {
43294
43306
  this.unbindEvents();
43295
43307
  this.boundClickHandler = (e) => {
43296
43308
  const target = e.target;
43297
- if (!target.closest(".md-toolbar-dropdown, .md-toolbar-colorpicker")) {
43309
+ const inDropdown = target.closest(".md-toolbar-dropdown, .md-toolbar-colorpicker");
43310
+ const inBodyMenu = this.bodyMenus.some((m) => m.contains(target));
43311
+ if (!inDropdown && !inBodyMenu) {
43298
43312
  this.closeAllDropdowns();
43299
43313
  }
43300
43314
  };
@@ -43338,10 +43352,9 @@ class Toolbar {
43338
43352
  closeAllDropdowns() {
43339
43353
  this.dropdowns.forEach((dropdown) => {
43340
43354
  dropdown.classList.remove("md-toolbar-dropdown-open", "md-toolbar-colorpicker-open");
43341
- const menu = dropdown.querySelector(".md-toolbar-dropdown-menu, .md-toolbar-colorpicker-menu");
43342
- if (menu) {
43343
- menu.style.display = "none";
43344
- }
43355
+ });
43356
+ this.bodyMenus.forEach((menu) => {
43357
+ menu.style.display = "none";
43345
43358
  });
43346
43359
  }
43347
43360
  startStateUpdates() {
@@ -43507,6 +43520,7 @@ class Toolbar {
43507
43520
  this.searchReplace = null;
43508
43521
  this.buttonElements.clear();
43509
43522
  this.dropdowns.clear();
43523
+ this.removeBodyMenus();
43510
43524
  this.buttonsEl = null;
43511
43525
  this.toggleBtn = null;
43512
43526
  this.render();
@@ -43527,8 +43541,15 @@ class Toolbar {
43527
43541
  this.searchReplace?.destroy();
43528
43542
  this.buttonElements.clear();
43529
43543
  this.dropdowns.clear();
43544
+ this.removeBodyMenus();
43530
43545
  this.container.innerHTML = "";
43531
43546
  }
43547
+ removeBodyMenus() {
43548
+ this.bodyMenus.forEach((menu) => {
43549
+ menu.remove();
43550
+ });
43551
+ this.bodyMenus = [];
43552
+ }
43532
43553
  }
43533
43554
  const SVG_ALIGN_LEFT = '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="3" y1="6" x2="21" y2="6"/><line x1="3" y1="12" x2="15" y2="12"/><line x1="3" y1="18" x2="21" y2="18"/></svg>';
43534
43555
  const SVG_ALIGN_CENTER = '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="3" y1="6" x2="21" y2="6"/><line x1="6" y1="12" x2="18" y2="12"/><line x1="3" y1="18" x2="21" y2="18"/></svg>';
package/dist/index.mjs CHANGED
@@ -42786,6 +42786,7 @@ class Toolbar {
42786
42786
  state;
42787
42787
  buttonElements = /* @__PURE__ */ new Map();
42788
42788
  dropdowns = /* @__PURE__ */ new Map();
42789
+ bodyMenus = [];
42789
42790
  charMap = null;
42790
42791
  emojiPicker = null;
42791
42792
  imageUpload = null;
@@ -43158,7 +43159,7 @@ class Toolbar {
43158
43159
  button.title = label;
43159
43160
  button.innerHTML = `
43160
43161
  <span class="md-toolbar-dropdown-label">${label}</span>
43161
- <span class="md-toolbar-dropdown-arrow">▼</span>
43162
+ <span class="md-toolbar-dropdown-arrow"><svg width="8" height="8" viewBox="0 0 8 8" fill="currentColor"><path d="M0 2l4 4 4-4z"/></svg></span>
43162
43163
  `;
43163
43164
  const menu = document.createElement("div");
43164
43165
  menu.className = "md-toolbar-dropdown-menu";
@@ -43190,11 +43191,12 @@ class Toolbar {
43190
43191
  e.stopPropagation();
43191
43192
  this.dropdowns.forEach((dropdown, key) => {
43192
43193
  if (key !== name) {
43193
- dropdown.classList.remove("md-toolbar-dropdown-open");
43194
- const m = dropdown.querySelector(".md-toolbar-dropdown-menu");
43195
- if (m) m.style.display = "none";
43194
+ dropdown.classList.remove("md-toolbar-dropdown-open", "md-toolbar-colorpicker-open");
43196
43195
  }
43197
43196
  });
43197
+ this.bodyMenus.forEach((m) => {
43198
+ if (m !== menu) m.style.display = "none";
43199
+ });
43198
43200
  const isOpen = menu.style.display !== "none";
43199
43201
  menu.style.display = isOpen ? "none" : "block";
43200
43202
  wrapper.classList.toggle("md-toolbar-dropdown-open", !isOpen);
@@ -43210,7 +43212,8 @@ class Toolbar {
43210
43212
  }
43211
43213
  });
43212
43214
  wrapper.appendChild(button);
43213
- wrapper.appendChild(menu);
43215
+ document.body.appendChild(menu);
43216
+ this.bodyMenus.push(menu);
43214
43217
  this.dropdowns.set(name, wrapper);
43215
43218
  return wrapper;
43216
43219
  }
@@ -43225,7 +43228,7 @@ class Toolbar {
43225
43228
  button.innerHTML = `
43226
43229
  <span class="md-toolbar-colorpicker-icon md-icon-${name}">A</span>
43227
43230
  <span class="md-toolbar-colorpicker-preview" style="background-color: ${name === "forecolor" ? "#000" : "#ff0"}"></span>
43228
- <span class="md-toolbar-dropdown-arrow">▼</span>
43231
+ <span class="md-toolbar-dropdown-arrow"><svg width="8" height="8" viewBox="0 0 8 8" fill="currentColor"><path d="M0 2l4 4 4-4z"/></svg></span>
43229
43232
  `;
43230
43233
  const menu = document.createElement("div");
43231
43234
  menu.className = "md-toolbar-colorpicker-menu";
@@ -43276,6 +43279,14 @@ class Toolbar {
43276
43279
  button.addEventListener("click", (e) => {
43277
43280
  e.preventDefault();
43278
43281
  e.stopPropagation();
43282
+ this.dropdowns.forEach((dropdown, key) => {
43283
+ if (key !== name) {
43284
+ dropdown.classList.remove("md-toolbar-dropdown-open", "md-toolbar-colorpicker-open");
43285
+ }
43286
+ });
43287
+ this.bodyMenus.forEach((m) => {
43288
+ if (m !== menu) m.style.display = "none";
43289
+ });
43279
43290
  const isOpen = menu.style.display !== "none";
43280
43291
  menu.style.display = isOpen ? "none" : "block";
43281
43292
  wrapper.classList.toggle("md-toolbar-colorpicker-open", !isOpen);
@@ -43284,7 +43295,8 @@ class Toolbar {
43284
43295
  }
43285
43296
  });
43286
43297
  wrapper.appendChild(button);
43287
- wrapper.appendChild(menu);
43298
+ document.body.appendChild(menu);
43299
+ this.bodyMenus.push(menu);
43288
43300
  this.dropdowns.set(name, wrapper);
43289
43301
  return wrapper;
43290
43302
  }
@@ -43292,7 +43304,9 @@ class Toolbar {
43292
43304
  this.unbindEvents();
43293
43305
  this.boundClickHandler = (e) => {
43294
43306
  const target = e.target;
43295
- if (!target.closest(".md-toolbar-dropdown, .md-toolbar-colorpicker")) {
43307
+ const inDropdown = target.closest(".md-toolbar-dropdown, .md-toolbar-colorpicker");
43308
+ const inBodyMenu = this.bodyMenus.some((m) => m.contains(target));
43309
+ if (!inDropdown && !inBodyMenu) {
43296
43310
  this.closeAllDropdowns();
43297
43311
  }
43298
43312
  };
@@ -43336,10 +43350,9 @@ class Toolbar {
43336
43350
  closeAllDropdowns() {
43337
43351
  this.dropdowns.forEach((dropdown) => {
43338
43352
  dropdown.classList.remove("md-toolbar-dropdown-open", "md-toolbar-colorpicker-open");
43339
- const menu = dropdown.querySelector(".md-toolbar-dropdown-menu, .md-toolbar-colorpicker-menu");
43340
- if (menu) {
43341
- menu.style.display = "none";
43342
- }
43353
+ });
43354
+ this.bodyMenus.forEach((menu) => {
43355
+ menu.style.display = "none";
43343
43356
  });
43344
43357
  }
43345
43358
  startStateUpdates() {
@@ -43505,6 +43518,7 @@ class Toolbar {
43505
43518
  this.searchReplace = null;
43506
43519
  this.buttonElements.clear();
43507
43520
  this.dropdowns.clear();
43521
+ this.removeBodyMenus();
43508
43522
  this.buttonsEl = null;
43509
43523
  this.toggleBtn = null;
43510
43524
  this.render();
@@ -43525,8 +43539,15 @@ class Toolbar {
43525
43539
  this.searchReplace?.destroy();
43526
43540
  this.buttonElements.clear();
43527
43541
  this.dropdowns.clear();
43542
+ this.removeBodyMenus();
43528
43543
  this.container.innerHTML = "";
43529
43544
  }
43545
+ removeBodyMenus() {
43546
+ this.bodyMenus.forEach((menu) => {
43547
+ menu.remove();
43548
+ });
43549
+ this.bodyMenus = [];
43550
+ }
43530
43551
  }
43531
43552
  const SVG_ALIGN_LEFT = '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="3" y1="6" x2="21" y2="6"/><line x1="3" y1="12" x2="15" y2="12"/><line x1="3" y1="18" x2="21" y2="18"/></svg>';
43532
43553
  const SVG_ALIGN_CENTER = '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="3" y1="6" x2="21" y2="6"/><line x1="6" y1="12" x2="18" y2="12"/><line x1="3" y1="18" x2="21" y2="18"/></svg>';
package/dist/styles.css CHANGED
@@ -175,9 +175,39 @@
175
175
  }
176
176
 
177
177
  .md-toolbar-dropdown-arrow {
178
- font-size: 8px;
178
+ display: inline-flex;
179
+ align-items: center;
179
180
  opacity: 0.6;
180
181
  }
182
+ .md-toolbar-dropdown-arrow svg {
183
+ display: block;
184
+ width: 8px;
185
+ height: 8px;
186
+ }
187
+
188
+ .md-toolbar-dropdown-menu,
189
+ .md-toolbar-colorpicker-menu {
190
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
191
+ font-size: 14px;
192
+ box-sizing: border-box;
193
+ }
194
+ .md-toolbar-dropdown-menu *, .md-toolbar-dropdown-menu *::before, .md-toolbar-dropdown-menu *::after,
195
+ .md-toolbar-colorpicker-menu *,
196
+ .md-toolbar-colorpicker-menu *::before,
197
+ .md-toolbar-colorpicker-menu *::after {
198
+ box-sizing: border-box;
199
+ }
200
+ .md-toolbar-dropdown-menu button:not([class]),
201
+ .md-toolbar-colorpicker-menu button:not([class]) {
202
+ appearance: none;
203
+ font: inherit;
204
+ color: inherit;
205
+ background: transparent;
206
+ border: none;
207
+ padding: 0;
208
+ margin: 0;
209
+ cursor: pointer;
210
+ }
181
211
 
182
212
  .md-toolbar-dropdown-menu {
183
213
  position: fixed;
@@ -191,7 +221,7 @@
191
221
  z-index: 1000;
192
222
  }
193
223
 
194
- .md-editor .md-toolbar-dropdown-item {
224
+ .md-toolbar-dropdown-item {
195
225
  display: block;
196
226
  margin-top: 2px;
197
227
  margin-bottom: 2px;
@@ -204,10 +234,10 @@
204
234
  font-size: 13px;
205
235
  color: #222;
206
236
  }
207
- .md-editor .md-toolbar-dropdown-item:hover {
237
+ .md-toolbar-dropdown-item:hover {
208
238
  background: #f0f0f0;
209
239
  }
210
- .md-editor .md-toolbar-dropdown-item.md-toolbar-dropdown-item-selected {
240
+ .md-toolbar-dropdown-item.md-toolbar-dropdown-item-selected {
211
241
  background: #2271b2;
212
242
  color: #fff;
213
243
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mdaemon/html-editor",
3
- "version": "1.0.11",
3
+ "version": "1.0.12",
4
4
  "description": "A TinyMCE-compatible HTML editor built on TipTap",
5
5
  "homepage": "https://github.com/mdaemon-technologies/MDHTMLEditor",
6
6
  "repository": {