@inpageedit/core 0.4.1 → 0.5.1

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 (61) hide show
  1. package/dist/ActionButton-BgbTKTg7.js +24 -0
  2. package/dist/ActionButton-BgbTKTg7.js.map +1 -0
  3. package/dist/{RadioBox-BZFhTEo5.js → RadioBox-CaA8VgLu.js} +16 -16
  4. package/dist/{RadioBox-BZFhTEo5.js.map → RadioBox-CaA8VgLu.js.map} +1 -1
  5. package/dist/components/TwinSwapInput/index.d.ts +1 -0
  6. package/dist/components/index.js +21 -22
  7. package/dist/components/index.js.map +1 -1
  8. package/dist/index-BIgWRk98.js +4826 -0
  9. package/dist/index-BIgWRk98.js.map +1 -0
  10. package/dist/index-BMmKF_kG.js +165 -0
  11. package/dist/index-BMmKF_kG.js.map +1 -0
  12. package/dist/{index-BPsDFq9U.js → index-Bh70Udzi.js} +14 -13
  13. package/dist/index-Bh70Udzi.js.map +1 -0
  14. package/dist/index-CBphMyYJ.js +5170 -0
  15. package/dist/index-CBphMyYJ.js.map +1 -0
  16. package/dist/{index-X1X416tZ.js → index-CJLKdEqr.js} +41 -25
  17. package/dist/index-CJLKdEqr.js.map +1 -0
  18. package/dist/{index-BsYzf3Yw.js → index-CX5H4xCe.js} +12 -12
  19. package/dist/index-CX5H4xCe.js.map +1 -0
  20. package/dist/{index-BByzm2Fz.js → index-DNm9SNqM.js} +128 -120
  21. package/dist/{index-BByzm2Fz.js.map → index-DNm9SNqM.js.map} +1 -1
  22. package/dist/{index-Ch5DJDZZ.js → index-Djd6Ddcm.js} +125 -121
  23. package/dist/index-Djd6Ddcm.js.map +1 -0
  24. package/dist/index-Dk3xR25y.js +96 -0
  25. package/dist/index-Dk3xR25y.js.map +1 -0
  26. package/dist/{index-D-zQLFuZ.js → index-QF8lvEam.js} +14 -21
  27. package/dist/index-QF8lvEam.js.map +1 -0
  28. package/dist/index.js +9 -4639
  29. package/dist/index.js.map +1 -1
  30. package/dist/models/WikiPage/index.d.ts +5 -4
  31. package/dist/plugins/BasePlugin.d.ts +12 -4
  32. package/dist/plugins/_debug/index.d.ts +1 -1
  33. package/dist/plugins/quick-diff/PluginQuickDiffCore.d.ts +2 -1
  34. package/dist/plugins/quick-edit/index.d.ts +2 -1
  35. package/dist/plugins/quick-move/index.d.ts +1 -1
  36. package/dist/plugins/quick-preview/index.d.ts +4 -3
  37. package/dist/plugins/quick-redirect/index.d.ts +1 -1
  38. package/dist/plugins/toolbox/index.d.ts +2 -2
  39. package/dist/services/ModalService/IPEModal.d.ts +235 -0
  40. package/dist/services/ModalService/index.d.ts +35 -0
  41. package/dist/style.css +1 -1
  42. package/dist/utils/interpolate.d.ts +20 -0
  43. package/dist/utils/interpolate.spec.d.ts +1 -0
  44. package/lib/index.umd.js +32 -32
  45. package/lib/index.umd.js.map +1 -1
  46. package/lib/style.css +1 -1
  47. package/package.json +24 -25
  48. package/dist/ActionButton-ByMKIthQ.js +0 -24
  49. package/dist/ActionButton-ByMKIthQ.js.map +0 -1
  50. package/dist/index-BPsDFq9U.js.map +0 -1
  51. package/dist/index-BTngTj1f.js +0 -4682
  52. package/dist/index-BTngTj1f.js.map +0 -1
  53. package/dist/index-BsYzf3Yw.js.map +0 -1
  54. package/dist/index-Ch5DJDZZ.js.map +0 -1
  55. package/dist/index-Cq9xxVsu.js +0 -149
  56. package/dist/index-Cq9xxVsu.js.map +0 -1
  57. package/dist/index-D-zQLFuZ.js.map +0 -1
  58. package/dist/index-HyxA2rYz.js +0 -87
  59. package/dist/index-HyxA2rYz.js.map +0 -1
  60. package/dist/index-X1X416tZ.js.map +0 -1
  61. package/dist/services/SsiModalService.d.ts +0 -36
@@ -1,9 +1,8 @@
1
1
  import { j as e, P as l } from "./index-CvhkVj_L.js";
2
- import { BasePlugin as d } from "./index.js";
3
- import { T as h } from "./index-BPsDFq9U.js";
4
- import { I as m, C as u } from "./InputBox-FIzJ-rPN.js";
5
- import { A as g } from "./ActionButton-ByMKIthQ.js";
6
- class b extends d {
2
+ import { B as d } from "./index-CBphMyYJ.js";
3
+ import { T as m } from "./index-Bh70Udzi.js";
4
+ import { I as u, C as h } from "./InputBox-FIzJ-rPN.js";
5
+ class v extends d {
7
6
  constructor(t) {
8
7
  super(t, {}, "quick-redirect"), this.ctx = t;
9
8
  }
@@ -58,7 +57,7 @@ class b extends d {
58
57
  const r = this.ctx.modal.createObject({
59
58
  title: "Quick Redirect",
60
59
  content: /* @__PURE__ */ e(l, {}),
61
- className: "quick-redirect",
60
+ className: "quick-redirect compact-buttons",
62
61
  sizeClass: "medium",
63
62
  center: !0
64
63
  }).init();
@@ -74,14 +73,22 @@ class b extends d {
74
73
  gap: "1rem"
75
74
  },
76
75
  onSubmit: (o) => {
77
- o.preventDefault();
78
- const a = new FormData(i), c = {
79
- from: a.get("from"),
80
- to: a.get("to"),
76
+ if (o.preventDefault(), i?.checkValidity(), !i?.reportValidity())
77
+ return;
78
+ const a = new FormData(i), s = {
79
+ from: a.get("from")?.toString().trim(),
80
+ to: a.get("to")?.toString().trim(),
81
81
  reason: a.get("reason") || "",
82
82
  overwrite: a.get("overwrite") === "on"
83
83
  };
84
- r.setLoadingState(!0), this.redirectPage(c).then((n) => {
84
+ if (!s.from || !s.to) {
85
+ this.ctx.modal.notify("error", {
86
+ title: "Failed to redirect",
87
+ content: "From and to are required."
88
+ });
89
+ return;
90
+ }
91
+ r.setLoadingState(!0), this.redirectPage(s).then((n) => {
85
92
  r.close(), this.ctx.modal.notify("success", {
86
93
  title: "Redirect successful",
87
94
  content: "The redirect has been created."
@@ -95,34 +102,43 @@ class b extends d {
95
102
  },
96
103
  children: [
97
104
  /* @__PURE__ */ e(
98
- h,
105
+ m,
99
106
  {
100
107
  inputs: [
101
108
  {
102
109
  label: "From",
103
110
  name: "from",
104
- value: t?.from
111
+ value: t?.from,
112
+ required: !0
105
113
  },
106
114
  {
107
115
  label: "To",
108
116
  name: "to",
109
- value: t?.to
117
+ value: t?.to,
118
+ required: !0
110
119
  }
111
120
  ]
112
121
  }
113
122
  ),
114
- /* @__PURE__ */ e(m, { label: "Reason", id: "reason", name: "reason", value: t?.reason }),
115
- /* @__PURE__ */ e("div", { children: /* @__PURE__ */ e(u, { name: "overwrite", id: "overwrite", checked: t?.overwrite, children: "Force create redirect even if the from page already exists" }) }),
116
- /* @__PURE__ */ e(g, { type: "primary", style: { width: "100%" }, children: "Create Redirect" })
123
+ /* @__PURE__ */ e(u, { label: "Reason", id: "reason", name: "reason", value: t?.reason }),
124
+ /* @__PURE__ */ e("div", { children: /* @__PURE__ */ e(h, { name: "overwrite", id: "overwrite", checked: t?.overwrite, children: "Force create redirect even if the from page already exists" }) })
117
125
  ]
118
126
  }
119
127
  )
120
- ), r.show();
128
+ ), r.setButtons([
129
+ {
130
+ label: "Create Redirect",
131
+ className: "is-primary is-ghost",
132
+ method: () => {
133
+ i?.dispatchEvent(new Event("submit"));
134
+ }
135
+ }
136
+ ]), r.show();
121
137
  }
122
138
  async redirectPage(t) {
123
- const { from: r, to: i, reason: o = "", overwrite: a = !1 } = t, c = await this.ctx.wikiPage.newBlankPage({
139
+ const { from: r, to: i, reason: o = "", overwrite: a = !1 } = t, s = await this.ctx.wikiPage.newBlankPage({
124
140
  title: r
125
- }), n = `#REDIRECT [[:${i}]]`, s = await c.edit(
141
+ }), n = `#REDIRECT [[:${i}]]`, c = await s.edit(
126
142
  {
127
143
  text: n,
128
144
  summary: o
@@ -131,12 +147,12 @@ class b extends d {
131
147
  createonly: !a
132
148
  }
133
149
  );
134
- if (s.data?.errors)
135
- throw new Error(s.data.errors[0].text, { cause: s });
136
- return s;
150
+ if (c.data?.errors)
151
+ throw new Error(c.data.errors[0].text, { cause: c });
152
+ return c;
137
153
  }
138
154
  }
139
155
  export {
140
- b as PluginQuickRedirect
156
+ v as PluginQuickRedirect
141
157
  };
142
- //# sourceMappingURL=index-X1X416tZ.js.map
158
+ //# sourceMappingURL=index-CJLKdEqr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CJLKdEqr.js","sources":["../src/plugins/quick-redirect/index.tsx"],"sourcesContent":["import { InPageEdit } from '@/InPageEdit'\r\n\r\ndeclare module '@/InPageEdit' {\r\n interface InPageEdit {\r\n quickRedirect: PluginQuickRedirect['quickRedirect']\r\n redirectPage: PluginQuickRedirect['redirectPage']\r\n }\r\n}\r\n\r\nexport interface RedirectPageOptions {\r\n from: string\r\n to: string\r\n reason?: string\r\n overwrite?: boolean\r\n}\r\nexport interface QuickRedirectOptions extends Partial<RedirectPageOptions> {}\r\n\r\nexport class PluginQuickRedirect extends BasePlugin {\r\n static readonly inject = ['api', 'wikiPage', 'modal']\r\n\r\n constructor(public ctx: InPageEdit) {\r\n super(ctx, {}, 'quick-redirect')\r\n }\r\n\r\n protected start(): Promise<void> | void {\r\n this.ctx.set('quickRedirect', this.quickRedirect.bind(this))\r\n this.ctx.set('redirectPage', this.redirectPage.bind(this))\r\n\r\n const curPageName = window.mw?.config.get('wgPageName') || ''\r\n const canEdit = window.mw?.config.get('wgIsProbablyEditable')\r\n this.ctx.inject(['toolbox'], (ctx) => {\r\n this.ctx = ctx\r\n ctx.toolbox.addButton({\r\n id: 'quick-redirect',\r\n icon: (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-file-symlink\"\r\n >\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path d=\"M4 21v-4a3 3 0 0 1 3 -3h5\" />\r\n <path d=\"M9 17l3 -3l-3 -3\" />\r\n <path d=\"M14 3v4a1 1 0 0 0 1 1h4\" />\r\n <path d=\"M5 11v-6a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2h-9.5\" />\r\n </svg>\r\n ) as HTMLElement,\r\n tooltip: 'Quick Redirect',\r\n group: 'group1',\r\n onClick: () => {\r\n this.quickRedirect(\r\n canEdit\r\n ? {\r\n to: curPageName,\r\n }\r\n : {}\r\n )\r\n },\r\n })\r\n this.addDisposeHandler((ctx) => {\r\n ctx.toolbox.removeButton('quick-redirect')\r\n })\r\n })\r\n }\r\n\r\n protected stop(): Promise<void> | void {}\r\n\r\n quickRedirect(options?: Partial<QuickRedirectOptions>) {\r\n const modal = this.ctx.modal\r\n .createObject({\r\n title: 'Quick Redirect',\r\n content: (<ProgressBar />) as HTMLElement,\r\n className: 'quick-redirect compact-buttons',\r\n sizeClass: 'medium',\r\n center: true,\r\n })\r\n .init()\r\n\r\n let formRef: HTMLFormElement | null = null\r\n modal.setContent(\r\n (\r\n <form\r\n ref={(el) => (formRef = el)}\r\n style={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '1rem',\r\n }}\r\n onSubmit={(e) => {\r\n e.preventDefault()\r\n formRef?.checkValidity()\r\n if (!formRef?.reportValidity()) {\r\n return\r\n }\r\n const formData = new FormData(formRef!)\r\n const options = {\r\n from: formData.get('from')?.toString().trim()!,\r\n to: formData.get('to')?.toString().trim()!,\r\n reason: (formData.get('reason') as string) || '',\r\n overwrite: formData.get('overwrite') === 'on',\r\n }\r\n if (!options.from || !options.to) {\r\n this.ctx.modal.notify('error', {\r\n title: 'Failed to redirect',\r\n content: 'From and to are required.',\r\n })\r\n return\r\n }\r\n modal.setLoadingState(true)\r\n this.redirectPage(options)\r\n .then((res) => {\r\n modal.close()\r\n this.ctx.modal.notify('success', {\r\n title: 'Redirect successful',\r\n content: 'The redirect has been created.',\r\n })\r\n })\r\n .catch((error) => {\r\n modal.setLoadingState(false)\r\n this.ctx.modal.notify('error', {\r\n title: 'Failed to redirect',\r\n content: error instanceof Error ? error.message : String(error),\r\n })\r\n })\r\n }}\r\n >\r\n <TwinSwapInput\r\n inputs={[\r\n {\r\n label: 'From',\r\n name: 'from',\r\n value: options?.from,\r\n required: true,\r\n },\r\n {\r\n label: 'To',\r\n name: 'to',\r\n value: options?.to,\r\n required: true,\r\n },\r\n ]}\r\n />\r\n <InputBox label=\"Reason\" id=\"reason\" name=\"reason\" value={options?.reason} />\r\n <div>\r\n <CheckBox name=\"overwrite\" id=\"overwrite\" checked={options?.overwrite}>\r\n Force create redirect even if the from page already exists\r\n </CheckBox>\r\n </div>\r\n </form>\r\n ) as HTMLFormElement\r\n )\r\n modal.setButtons([\r\n {\r\n label: 'Create Redirect',\r\n className: 'is-primary is-ghost',\r\n method: () => {\r\n formRef?.dispatchEvent(new Event('submit'))\r\n },\r\n },\r\n ])\r\n\r\n return modal.show()\r\n }\r\n\r\n async redirectPage(options: RedirectPageOptions) {\r\n const { from, to, reason = '', overwrite = false } = options\r\n const wikiPage = await this.ctx.wikiPage.newBlankPage({\r\n title: from,\r\n })\r\n const content = `#REDIRECT [[:${to}]]`\r\n const res = await wikiPage.edit(\r\n {\r\n text: content,\r\n summary: reason,\r\n },\r\n {\r\n createonly: !overwrite,\r\n }\r\n )\r\n if (res.data?.errors) {\r\n throw new Error(res.data.errors[0].text, { cause: res })\r\n }\r\n return res\r\n }\r\n}\r\n"],"names":["PluginQuickRedirect","BasePlugin","ctx","curPageName","canEdit","jsxs","jsx","options","modal","ProgressBar","formRef","el","e","formData","res","error","TwinSwapInput","InputBox","CheckBox","from","to","reason","overwrite","wikiPage","content"],"mappings":"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"}
@@ -1,23 +1,23 @@
1
1
  import { j as n } from "./index-CvhkVj_L.js";
2
- import { Service as C, Inject as A, Schema as v } from "./index.js";
2
+ import { b as C, a as A, S as v } from "./index-CBphMyYJ.js";
3
3
  import { R as B } from "./Preferences-Bg3J5Ur9.js";
4
4
  import { s as I } from "./sleep-DpyIipK-.js";
5
5
  var j = Object.create, x = Object.defineProperty, q = Object.getOwnPropertyDescriptor, w = (t, e) => (e = Symbol[t]) ? e : Symbol.for("Symbol." + t), _ = (t) => {
6
6
  throw TypeError(t);
7
- }, z = (t, e, o) => e in t ? x(t, e, { enumerable: !0, configurable: !0, writable: !0, value: o }) : t[e] = o, M = (t, e) => x(t, "name", { value: e, configurable: !0 }), E = (t) => [, , , j(t?.[w("metadata")] ?? null)], $ = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], y = (t) => t !== void 0 && typeof t != "function" ? _("Function expected") : t, N = (t, e, o, i, r) => ({ kind: $[t], name: e, metadata: i, addInitializer: (l) => o._ ? _("Already initialized") : r.push(y(l || null)) }), O = (t, e) => z(e, w("metadata"), t[3]), T = (t, e, o, i) => {
7
+ }, z = (t, e, o) => e in t ? x(t, e, { enumerable: !0, configurable: !0, writable: !0, value: o }) : t[e] = o, M = (t, e) => x(t, "name", { value: e, configurable: !0 }), E = (t) => [, , , j(t?.[w("metadata")] ?? null)], T = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], y = (t) => t !== void 0 && typeof t != "function" ? _("Function expected") : t, $ = (t, e, o, i, r) => ({ kind: T[t], name: e, metadata: i, addInitializer: (l) => o._ ? _("Already initialized") : r.push(y(l || null)) }), N = (t, e) => z(e, w("metadata"), t[3]), O = (t, e, o, i) => {
8
8
  for (var r = 0, l = t[e >> 1], d = l && l.length; r < d; r++) l[r].call(o);
9
9
  return i;
10
10
  }, L = (t, e, o, i, r, l) => {
11
- var d, b, u, a = e & 7, s = !1, c = 0, g = t[c] || (t[c] = []), p = a && (r = r.prototype, a < 5 && (a > 3 || !s) && q(r, o));
11
+ var d, b, p, a = e & 7, s = !1, c = 0, g = t[c] || (t[c] = []), u = a && (r = r.prototype, a < 5 && (a > 3 || !s) && q(r, o));
12
12
  M(r, o);
13
13
  for (var h = i.length - 1; h >= 0; h--)
14
- u = N(a, o, b = {}, t[3], g), d = (0, i[h])(r, u), b._ = 1, y(d) && (r = d);
15
- return O(t, r), p && x(r, o, p), s ? a ^ 4 ? l : p : r;
14
+ p = $(a, o, b = {}, t[3], g), d = (0, i[h])(r, p), b._ = 1, y(d) && (r = d);
15
+ return N(t, r), u && x(r, o, u), s ? a ^ 4 ? l : u : r;
16
16
  }, S, m, k;
17
17
  S = [B(
18
18
  v.object({
19
19
  toolboxAlwaysShow: v.boolean().description("Make the toolbox opened by default").default(!1)
20
- }),
20
+ }).description("Toolbox preferences"),
21
21
  {
22
22
  toolboxAlwaysShow: !1
23
23
  }
@@ -109,14 +109,14 @@ class f extends (k = C) {
109
109
  return e || (e = Math.random().toString(36).substring(2, 8)), `ipe-toolbox__${e.trim()}`.replace(/\s\.#/g, "-");
110
110
  }
111
111
  addButton(e) {
112
- let { id: o, group: i, icon: r, tooltip: l, buttonProps: d, onClick: b, index: u } = e;
112
+ let { id: o, group: i, icon: r, tooltip: l, buttonProps: d, onClick: b, index: p } = e;
113
113
  o = this.normalizeButtonId(o);
114
114
  const a = this.container.querySelector(`#${o}`);
115
115
  a && (this.ctx.logger("toolbox").warn(`Button with id ${o} already exists, replacing it.`), a.remove());
116
116
  let s = null;
117
117
  if (typeof i > "u" || i === "auto") {
118
- const g = this.container.querySelector(".btn-group.group1"), p = this.container.querySelector(".btn-group.group2"), h = g?.children.length || 0, P = p?.children.length || 0;
119
- s = h <= P ? g : p;
118
+ const g = this.container.querySelector(".btn-group.group1"), u = this.container.querySelector(".btn-group.group2"), h = g?.children.length || 0, P = u?.children.length || 0;
119
+ s = h <= P ? g : u;
120
120
  } else
121
121
  s = this.container.querySelector(`.btn-group.${i}`);
122
122
  if (!s) throw new Error(`Button group ${i} not found`);
@@ -124,7 +124,7 @@ class f extends (k = C) {
124
124
  /* @__PURE__ */ n("div", { class: "btn-tip", children: l }),
125
125
  /* @__PURE__ */ n("button", { id: `${o}-btn`, class: "ipe-toolbox-btn", ...d, children: r })
126
126
  ] });
127
- return typeof u == "number" ? u <= 0 ? s.prepend(c) : u >= s.children.length ? s.appendChild(c) : s.children[u]?.before(c) : s.appendChild(c), this.ctx.emit("toolbox/button/added", {
127
+ return typeof p == "number" ? p <= 0 ? s.prepend(c) : p >= s.children.length ? s.appendChild(c) : s.children[p]?.before(c) : s.appendChild(c), this.ctx.emit("toolbox/button/added", {
128
128
  ctx: this.ctx,
129
129
  button: c
130
130
  }), c;
@@ -135,8 +135,8 @@ class f extends (k = C) {
135
135
  }
136
136
  m = E(k);
137
137
  f = L(m, 0, "PluginToolbox", S, f);
138
- T(m, 1, f);
138
+ O(m, 1, f);
139
139
  export {
140
140
  f as PluginToolbox
141
141
  };
142
- //# sourceMappingURL=index-BsYzf3Yw.js.map
142
+ //# sourceMappingURL=index-CX5H4xCe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CX5H4xCe.js","sources":["../src/plugins/toolbox/index.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema, Service } from '@/InPageEdit'\r\nimport { ReactElement } from 'jsx-dom'\r\nimport './styles.scss'\r\n\r\ndeclare module '@/InPageEdit' {\r\n interface InPageEdit {\r\n toolbox: PluginToolbox\r\n }\r\n interface Events {\r\n 'toolbox/button/added'(payload: { ctx: InPageEdit; button: HTMLElement }): void\r\n 'toolbox/button/removed'(payload: { ctx: InPageEdit; id: string }): void\r\n }\r\n}\r\n\r\n@RegisterPreferences(\r\n Schema.object({\r\n toolboxAlwaysShow: Schema.boolean()\r\n .description('Make the toolbox opened by default')\r\n .default(false),\r\n }).description('Toolbox preferences'),\r\n {\r\n toolboxAlwaysShow: false,\r\n }\r\n)\r\n@Inject(['preferences'])\r\nexport class PluginToolbox extends Service {\r\n container!: HTMLElement\r\n private forceShow = false\r\n\r\n constructor(public ctx: InPageEdit) {\r\n super(ctx, 'toolbox', false)\r\n }\r\n\r\n protected async start(): Promise<void> {\r\n if (mw && mw.config.get('wgIsArticle') === false && !this.forceShow) {\r\n this.container = this.createIndicatorForNotArticlePage()\r\n } else {\r\n this.container = this.createToolbox()\r\n }\r\n document.body.appendChild(this.container)\r\n await sleep(0) // wait nextTick\r\n this.ctx.preferences.get('toolboxAlwaysShow').then((val) => {\r\n if (val) {\r\n this.container.querySelector('#toolbox-toggle')?.classList.add('opened')\r\n this.container.querySelectorAll('.btn-group').forEach((el) => {\r\n el.classList.add('opened')\r\n })\r\n }\r\n })\r\n }\r\n\r\n protected stop(): void | Promise<void> {\r\n this.container?.remove()\r\n }\r\n\r\n private createToolbox() {\r\n const toggler = (\r\n <button\r\n className=\"ipe-toolbox-btn\"\r\n id=\"toolbox-toggle\"\r\n onClick={function (e) {\r\n const isOpened = this.classList.contains('opened')\r\n this.classList.toggle('opened', !isOpened)\r\n element.querySelectorAll('.btn-group').forEach((el) => {\r\n el.classList.toggle('opened', !isOpened)\r\n })\r\n }}\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-plus\"\r\n >\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path d=\"M12 5l0 14\" />\r\n <path d=\"M5 12l14 0\" />\r\n </svg>\r\n </button>\r\n )\r\n const element = (\r\n <div id=\"ipe-edit-toolbox\">\r\n <ul className=\"btn-group group1\" style={{ display: 'flex', flexDirection: 'column' }}></ul>\r\n <ul className=\"btn-group group2\" style={{ display: 'flex', flexDirection: 'row' }}></ul>\r\n {toggler}\r\n </div>\r\n )\r\n\r\n return element as HTMLElement\r\n }\r\n\r\n private createIndicatorForNotArticlePage() {\r\n const indicator = (\r\n <div id=\"ipe-edit-toolbox\">\r\n <div\r\n id=\"ipe-toolbox-placeholder\"\r\n style=\"width: 0.75rem; height: 0.75rem; border-radius: 50%; background: #3f51b5; color: #fff; pointer-events: none;\"\r\n >\r\n <svg\r\n style=\"width: 0.5em; height: 0.5em; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"4\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-check\"\r\n >\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path d=\"M5 12l5 5l10 -10\" />\r\n </svg>\r\n </div>\r\n </div>\r\n )\r\n return indicator as HTMLElement\r\n }\r\n\r\n private normalizeButtonId(id: string) {\r\n if (!id) {\r\n id = Math.random().toString(36).substring(2, 8)\r\n }\r\n return `ipe-toolbox__${id.trim()}`.replace(/\\s\\.#/g, '-')\r\n }\r\n\r\n addButton(payload: {\r\n id: string\r\n group?: 'auto' | 'group1' | 'group2'\r\n icon: string | HTMLElement | SVGElement | ReactElement\r\n tooltip?: string | HTMLElement\r\n buttonProps?: Record<string, any>\r\n onClick?: (event: MouseEvent) => void\r\n index?: number\r\n }) {\r\n let { id, group, icon, tooltip, buttonProps, onClick, index } = payload\r\n id = this.normalizeButtonId(id)\r\n\r\n const existingButton = this.container.querySelector(`#${id}`)\r\n if (existingButton) {\r\n this.ctx.logger('toolbox').warn(`Button with id ${id} already exists, replacing it.`)\r\n existingButton.remove()\r\n }\r\n\r\n let groupEl: HTMLElement | null = null\r\n if (typeof group === 'undefined' || group === 'auto') {\r\n // 选择按钮最少的那一组,一样多就选第一组\r\n const group1 = this.container.querySelector('.btn-group.group1') as HTMLElement\r\n const group2 = this.container.querySelector('.btn-group.group2') as HTMLElement\r\n const group1Count = group1?.children.length || 0\r\n const group2Count = group2?.children.length || 0\r\n groupEl = group1Count <= group2Count ? group1 : group2\r\n } else {\r\n groupEl = this.container.querySelector(`.btn-group.${group}`)\r\n }\r\n if (!groupEl) throw new Error(`Button group ${group} not found`)\r\n\r\n const button = (\r\n <li class=\"btn-tip-group\" id={id} onClick={onClick}>\r\n <div class=\"btn-tip\">{tooltip}</div>\r\n <button id={`${id}-btn`} class=\"ipe-toolbox-btn\" {...buttonProps}>\r\n {icon}\r\n </button>\r\n </li>\r\n )\r\n\r\n if (typeof index === 'number') {\r\n if (index <= 0) {\r\n groupEl.prepend(button)\r\n } else if (index >= groupEl.children.length) {\r\n groupEl.appendChild(button)\r\n } else {\r\n groupEl.children[index]?.before(button)\r\n }\r\n } else {\r\n groupEl.appendChild(button)\r\n }\r\n\r\n this.ctx.emit('toolbox/button/added', {\r\n ctx: this.ctx,\r\n button: button as HTMLElement,\r\n })\r\n\r\n return button as HTMLElement\r\n }\r\n\r\n removeButton(id: string) {\r\n const button = this.container.querySelector(`.ipe-toolbox-btn#${id}`)\r\n button?.remove()\r\n this.ctx.emit('toolbox/button/removed', { ctx: this.ctx, id })\r\n }\r\n}\r\n"],"names":["_PluginToolbox_decorators","_init","_a","RegisterPreferences","Schema","Inject","PluginToolbox","Service","ctx","sleep","val","el","element","jsxs","jsx","e","isOpened","id","payload","group","icon","tooltip","buttonProps","onClick","index","existingButton","groupEl","group1","group2","group1Count","group2Count","button","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}