forge-edit 0.1.0-beta.14 → 0.1.0-beta.15

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 (2) hide show
  1. package/dist/index.js +89 -36
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -4076,33 +4076,44 @@ function nn(e, t, n = {}) {
4076
4076
  //#endregion
4077
4077
  //#region src/components/shared/toolbar/Style/Hooks/styleLogic.jsx
4078
4078
  function rn(e) {
4079
+ let t = window.getSelection(), n = document.createRange(), r = e;
4080
+ for (; r.lastChild && r.lastChild.nodeName !== "BR";) r = r.lastChild;
4081
+ r.nodeType === 3 ? (n.setStart(r, r.textContent.length), n.collapse(!0)) : r.lastChild && r.lastChild.nodeName === "BR" ? (n.setStart(r, r.childNodes.length - 1), n.collapse(!0)) : (n.selectNodeContents(r), n.collapse(!1)), t.removeAllRanges(), t.addRange(n);
4082
+ }
4083
+ function an(e) {
4079
4084
  let t = window.getSelection();
4080
4085
  if (!t || !t.rangeCount) return;
4081
4086
  let n = t.getRangeAt(0).commonAncestorContainer;
4082
4087
  n.nodeType === 3 && (n = n.parentElement);
4083
4088
  let r = n.closest("p, h1, h2, h3, h4, h5, h6, blockquote, pre");
4084
4089
  if (r) {
4085
- let n = document.createElement(e);
4086
- for (; r.firstChild;) n.appendChild(r.firstChild);
4087
- r.replaceWith(n);
4088
- let i = document.createRange();
4089
- i.selectNodeContents(n), i.collapse(!1), t.removeAllRanges(), t.addRange(i);
4090
+ let t = r.textContent.trim().length > 0, n = document.createElement(e);
4091
+ if (t) for (; r.firstChild;) {
4092
+ let e = r.firstChild;
4093
+ if (e.nodeName === "BR" && r.childNodes.length === 1) {
4094
+ r.removeChild(e);
4095
+ continue;
4096
+ }
4097
+ n.appendChild(e);
4098
+ }
4099
+ else n.innerHTML = "<br>";
4100
+ r.replaceWith(n), rn(n);
4090
4101
  }
4091
4102
  }
4092
- function an(e) {
4103
+ function Z(e) {
4093
4104
  if (!e) return;
4094
4105
  let t = e.querySelector("[data-command='style']"), n = e.querySelector(".forge-dropdown-style");
4095
4106
  !t || !n || (Qe(t, n), n.querySelectorAll(".forge-dropdown-item").forEach((e) => {
4096
4107
  e.addEventListener("mousedown", (r) => {
4097
4108
  r.preventDefault(), r.stopPropagation();
4098
4109
  let i = e.dataset.value || e.getAttribute("data-value");
4099
- i && rn(i), n.classList.remove("is-open"), t.classList.remove("is-active");
4110
+ i && an(i), n.classList.remove("is-open"), t.classList.remove("is-active");
4100
4111
  });
4101
4112
  }));
4102
4113
  }
4103
4114
  //#endregion
4104
4115
  //#region src/components/shared/i18n/index.js
4105
- var Z = {
4116
+ var on = {
4106
4117
  en: {
4107
4118
  style: "Style",
4108
4119
  normal: "Normal",
@@ -4175,28 +4186,70 @@ var Z = {
4175
4186
  codeview: "عرض الكود",
4176
4187
  help: "مساعدة"
4177
4188
  }
4178
- }, on = "en";
4179
- function sn(e, t) {
4180
- return (Z[e] || Z[on])[t] || Z[on][t] || t;
4189
+ }, sn = "en";
4190
+ function cn(e, t) {
4191
+ return (on[e] || on[sn])[t] || on[sn][t] || t;
4181
4192
  }
4182
4193
  //#endregion
4183
4194
  //#region src/components/shared/i18n/apply.js
4184
- function cn(e, t) {
4195
+ function ln(e, t) {
4185
4196
  e.querySelectorAll("[data-i18n]").forEach((e) => {
4186
- e.textContent = sn(t, e.getAttribute("data-i18n"));
4197
+ e.textContent = cn(t, e.getAttribute("data-i18n"));
4187
4198
  });
4188
4199
  }
4189
4200
  //#endregion
4190
4201
  //#region src/components/shared/toolbar/Style/Utils/ensureParagraph.jsx
4191
- function ln(e) {
4202
+ function un(e) {
4192
4203
  if (e && !(e.children.length > 0 || e.textContent.trim().length > 0)) {
4193
4204
  let t = document.createElement("p");
4194
4205
  t.innerHTML = "<br>", e.appendChild(t);
4195
4206
  }
4196
4207
  }
4197
4208
  //#endregion
4209
+ //#region src/components/shared/toolbar/Style/Utils/enterKeyHandler.jsx
4210
+ var dn = [
4211
+ "h1",
4212
+ "h2",
4213
+ "h3",
4214
+ "h4",
4215
+ "h5",
4216
+ "h6",
4217
+ "blockquote",
4218
+ "pre"
4219
+ ];
4220
+ function fn(e, t) {
4221
+ let n = e.nodeType === 3 ? e.parentNode : e;
4222
+ for (; n && n !== t;) {
4223
+ if (n.nodeType === 1 && dn.includes(n.tagName.toLowerCase())) return n;
4224
+ n = n.parentNode;
4225
+ }
4226
+ return null;
4227
+ }
4228
+ function pn(e) {
4229
+ let t = window.getSelection(), n = document.createRange();
4230
+ n.selectNodeContents(e), n.collapse(!0), t.removeAllRanges(), t.addRange(n);
4231
+ }
4232
+ function mn(e) {
4233
+ if (!e) return () => {};
4234
+ let t = (t) => {
4235
+ if (t.key !== "Enter" || t.shiftKey) return;
4236
+ let n = window.getSelection();
4237
+ if (!n || !n.rangeCount) return;
4238
+ let r = n.getRangeAt(0), i = fn(r.startContainer, e);
4239
+ if (!i) return;
4240
+ t.preventDefault();
4241
+ let a = document.createRange();
4242
+ a.setStart(r.endContainer, r.endOffset), a.setEndAfter(i.lastChild || i);
4243
+ let o = a.extractContents(), s = document.createElement("p");
4244
+ o.textContent.trim().length === 0 ? s.innerHTML = "<br>" : s.appendChild(o), i.nextSibling ? i.parentNode.insertBefore(s, i.nextSibling) : i.parentNode.appendChild(s), i.textContent.trim().length === 0 && i.childNodes.length === 0 && (i.innerHTML = "<br>"), pn(s);
4245
+ };
4246
+ return e.addEventListener("keydown", t), () => {
4247
+ e.removeEventListener("keydown", t);
4248
+ };
4249
+ }
4250
+ //#endregion
4198
4251
  //#region src/components/shared/toolbar/Hooks/contentClick.js
4199
- function un(e) {
4252
+ function hn(e) {
4200
4253
  e.addEventListener("click", (t) => {
4201
4254
  if (t.target === e) {
4202
4255
  let t = window.getSelection();
@@ -4213,7 +4266,7 @@ function un(e) {
4213
4266
  }
4214
4267
  //#endregion
4215
4268
  //#region src/components/shared/toolbar/ImagePopover/Components/ImagePopover.jsx
4216
- function dn({ target: e, onClose: t, onResize: n, onFloat: r, onRemove: i }) {
4269
+ function gn({ target: e, onClose: t, onResize: n, onFloat: r, onRemove: i }) {
4217
4270
  let a = q(null);
4218
4271
  if (!e) return null;
4219
4272
  let o = e.getBoundingClientRect(), s = {
@@ -4348,7 +4401,7 @@ function dn({ target: e, onClose: t, onResize: n, onFloat: r, onRemove: i }) {
4348
4401
  }
4349
4402
  //#endregion
4350
4403
  //#region src/components/shared/toolbar/ImagePopover/Hooks/useImagePopover.jsx
4351
- function fn() {
4404
+ function _n() {
4352
4405
  let [e, t] = G(null), [n, r] = G(!1);
4353
4406
  return K(() => {
4354
4407
  let e = (e) => {
@@ -4383,12 +4436,12 @@ function fn() {
4383
4436
  }
4384
4437
  //#endregion
4385
4438
  //#region src/components/shared/toolbar/ImagePopover/Components/index.jsx
4386
- function pn() {
4387
- return /* @__PURE__ */ R(dn, { ...fn() });
4439
+ function vn() {
4440
+ return /* @__PURE__ */ R(gn, { ..._n() });
4388
4441
  }
4389
4442
  //#endregion
4390
4443
  //#region src/components/light/index.jsx
4391
- function mn(e) {
4444
+ function yn(e) {
4392
4445
  return {
4393
4446
  getHTML() {
4394
4447
  return e.innerHTML;
@@ -4405,7 +4458,7 @@ function mn(e) {
4405
4458
  }
4406
4459
  };
4407
4460
  }
4408
- function hn(e) {
4461
+ function bn(e) {
4409
4462
  let t = e.lang || "en", n = e.dir || "ltr", r = { current: null }, i = /* @__PURE__ */ R("div", {
4410
4463
  className: "forge-editor forge-editor--light flex flex-col w-full rounded-[3px] border border-[#ddd] bg-white box-border align-top min-h-[120px]",
4411
4464
  lang: t,
@@ -4418,28 +4471,28 @@ function hn(e) {
4418
4471
  "data-placeholder": e.placeholder || ""
4419
4472
  }),
4420
4473
  /* @__PURE__ */ R(en, {}),
4421
- /* @__PURE__ */ R(pn, {})
4474
+ /* @__PURE__ */ R(vn, {})
4422
4475
  ]
4423
4476
  }), a = document.createElement("div");
4424
4477
  I(i, a);
4425
4478
  let o = a.firstElementChild, s = o.querySelector(".forge-editor__content");
4426
- r.current = s, ln(s), un(s);
4479
+ r.current = s, un(s), hn(s), mn(s);
4427
4480
  let c = o.querySelector(".forge-toolbar-style");
4428
- c && an(c);
4481
+ c && Z(c);
4429
4482
  let l = o.querySelector(".forge-editor__toolbar");
4430
- l && cn(l, t);
4483
+ l && ln(l, t);
4431
4484
  let u = o.querySelector(".forge-statusbar");
4432
4485
  return u && nn(u, o, { minHeight: 120 }), {
4433
4486
  element: o,
4434
- ...mn(s)
4487
+ ...yn(s)
4435
4488
  };
4436
4489
  }
4437
4490
  //#endregion
4438
4491
  //#region src/main/index.jsx
4439
- function gn(e) {
4492
+ function xn(e) {
4440
4493
  let t = l(e);
4441
4494
  if (t.type === "light") {
4442
- let { element: n, getHTML: r, setHTML: i, getText: a, getSelection: o } = hn(t);
4495
+ let { element: n, getHTML: r, setHTML: i, getText: a, getSelection: o } = bn(t);
4443
4496
  return e.innerHTML = "", e.appendChild(n), n.style.width = t.width, n.style.height = t.height, {
4444
4497
  element: n,
4445
4498
  getHTML: r,
@@ -4452,13 +4505,13 @@ function gn(e) {
4452
4505
  }
4453
4506
  //#endregion
4454
4507
  //#region src/main/main.jsx
4455
- var _n = document.querySelectorAll("forge-editor"), vn = [];
4456
- _n.forEach((e) => {
4457
- let t = gn(e);
4458
- t && vn.push(t);
4459
- }), window.forgeEditors = vn;
4460
- var yn = document.getElementById("get-html-btn"), bn = document.getElementById("html-output");
4461
- yn && bn && vn[0] && yn.addEventListener("click", () => {
4462
- bn.value = vn[0].getHTML();
4508
+ var Sn = document.querySelectorAll("forge-editor"), Cn = [];
4509
+ Sn.forEach((e) => {
4510
+ let t = xn(e);
4511
+ t && Cn.push(t);
4512
+ }), window.forgeEditors = Cn;
4513
+ var wn = document.getElementById("get-html-btn"), Tn = document.getElementById("html-output");
4514
+ wn && Tn && Cn[0] && wn.addEventListener("click", () => {
4515
+ Tn.value = Cn[0].getHTML();
4463
4516
  });
4464
4517
  //#endregion
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forge-edit",
3
- "version": "0.1.0-beta.14",
3
+ "version": "0.1.0-beta.15",
4
4
  "description": "A lightweight WYSIWYG editor built with Preact",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",