@inpageedit/core 0.1.0
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/LICENSE +21 -0
- package/README.md +55 -0
- package/dist/ActionButton-BhcZX7rl.js +33 -0
- package/dist/ActionButton-BhcZX7rl.js.map +1 -0
- package/dist/CheckBox-B7zLOm55.js +30 -0
- package/dist/CheckBox-B7zLOm55.js.map +1 -0
- package/dist/InPageEdit.d.ts +25 -0
- package/dist/PluginPreferencesUI-CqQKXQkn.js +33921 -0
- package/dist/PluginPreferencesUI-CqQKXQkn.js.map +1 -0
- package/dist/Preferences-Bg3J5Ur9.js +9 -0
- package/dist/Preferences-Bg3J5Ur9.js.map +1 -0
- package/dist/RadioBox-Dl-VRoW0.js +54 -0
- package/dist/RadioBox-Dl-VRoW0.js.map +1 -0
- package/dist/components/ActionButton.d.ts +9 -0
- package/dist/components/CheckBox.d.ts +10 -0
- package/dist/components/InputBox.d.ts +11 -0
- package/dist/components/MBox/index.d.ts +14 -0
- package/dist/components/MwUserLinks.d.ts +4 -0
- package/dist/components/ProgressBar/index.d.ts +7 -0
- package/dist/components/RadioBox.d.ts +10 -0
- package/dist/components/TabView/TabView.d.ts +19 -0
- package/dist/components/TwinSwapInput/index.d.ts +18 -0
- package/dist/components/utils.d.ts +4 -0
- package/dist/constants/endpoints.d.ts +10 -0
- package/dist/decorators/Preferences.d.ts +36 -0
- package/dist/i18n/languages.json +1527 -0
- package/dist/index-BEDkPsz1.js +86 -0
- package/dist/index-BEDkPsz1.js.map +1 -0
- package/dist/index-Bi1eJIjL.js +83 -0
- package/dist/index-Bi1eJIjL.js.map +1 -0
- package/dist/index-Bz4cBa1Z.js +1130 -0
- package/dist/index-Bz4cBa1Z.js.map +1 -0
- package/dist/index-CL0NhE5n.js +155 -0
- package/dist/index-CL0NhE5n.js.map +1 -0
- package/dist/index-CuEf9G7f.js +5459 -0
- package/dist/index-CuEf9G7f.js.map +1 -0
- package/dist/index-DA5i7w02.js +141 -0
- package/dist/index-DA5i7w02.js.map +1 -0
- package/dist/index-Hed2P8uH.js +159 -0
- package/dist/index-Hed2P8uH.js.map +1 -0
- package/dist/index-LoZLvK3o.js +409 -0
- package/dist/index-LoZLvK3o.js.map +1 -0
- package/dist/index-sORwn1Vt.js +140 -0
- package/dist/index-sORwn1Vt.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/models/WikiPage/index.d.ts +63 -0
- package/dist/models/WikiPage/types/PageInfo.d.ts +56 -0
- package/dist/models/WikiPage/types/PageParseData.d.ts +17 -0
- package/dist/models/WikiPage/types/WatchlistAction.d.ts +6 -0
- package/dist/models/WikiTitle/index.d.ts +12 -0
- package/dist/plugins/BasePlugin.d.ts +19 -0
- package/dist/plugins/_debug/index.d.ts +8 -0
- package/dist/plugins/preferences/PluginPreferencesUI.d.ts +11 -0
- package/dist/plugins/preferences/components/hooks.d.ts +5 -0
- package/dist/plugins/preferences/index.d.ts +37 -0
- package/dist/plugins/quick-diff/JsDiffService.d.ts +23 -0
- package/dist/plugins/quick-diff/PluginQuickDiffCore.d.ts +69 -0
- package/dist/plugins/quick-diff/components/DiffTable.d.ts +6 -0
- package/dist/plugins/quick-diff/index.d.ts +6 -0
- package/dist/plugins/quick-edit/PluginQuickEditInArticleLinks.d.ts +14 -0
- package/dist/plugins/quick-edit/index.d.ts +52 -0
- package/dist/plugins/quick-move/index.d.ts +27 -0
- package/dist/plugins/quick-preview/index.d.ts +32 -0
- package/dist/plugins/quick-redirect/index.d.ts +24 -0
- package/dist/plugins/toolbox/index.d.ts +38 -0
- package/dist/polyfills/Promise.withResolvers.d.ts +5 -0
- package/dist/polyfills/index.d.ts +0 -0
- package/dist/services/ApiService.d.ts +14 -0
- package/dist/services/ResourceLoaderService.d.ts +13 -0
- package/dist/services/SiteMetadataService.d.ts +53 -0
- package/dist/services/SsiModalService.d.ts +35 -0
- package/dist/services/StorageService.d.ts +56 -0
- package/dist/services/WikiPageService.d.ts +19 -0
- package/dist/sleep-DpyIipK-.js +5 -0
- package/dist/sleep-DpyIipK-.js.map +1 -0
- package/dist/style.css +1 -0
- package/dist/types/SiteMetadata.d.ts +133 -0
- package/dist/utils/defineAsyncPlugin.d.ts +2 -0
- package/dist/utils/noop.d.ts +1 -0
- package/dist/utils/schemaValidator.d.ts +12 -0
- package/dist/utils/sleep.d.ts +1 -0
- package/dist/utils/string.d.ts +7 -0
- package/dist/utils/vueReactivity.d.ts +2 -0
- package/package.json +81 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { B as q, j as l, P as j, a as E } from "./index-CuEf9G7f.js";
|
|
2
|
+
var y = Object.create, _ = Object.defineProperty, O = Object.getOwnPropertyDescriptor, k = (e, t) => (t = Symbol[e]) ? t : Symbol.for("Symbol." + e), x = (e) => {
|
|
3
|
+
throw TypeError(e);
|
|
4
|
+
}, Q = (e, t, r) => t in e ? _(e, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[t] = r, S = (e, t) => _(e, "name", { value: t, configurable: !0 }), z = (e) => [, , , y(e?.[k("metadata")] ?? null)], B = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], m = (e) => e !== void 0 && typeof e != "function" ? x("Function expected") : e, I = (e, t, r, a, i) => ({ kind: B[e], name: t, metadata: a, addInitializer: (c) => r._ ? x("Already initialized") : i.push(m(c || null)) }), C = (e, t) => Q(t, k("metadata"), e[3]), N = (e, t, r, a) => {
|
|
5
|
+
for (var i = 0, c = e[t >> 1], s = c && c.length; i < s; i++) c[i].call(r);
|
|
6
|
+
return a;
|
|
7
|
+
}, T = (e, t, r, a, i, c) => {
|
|
8
|
+
var s, n, p, o = t & 7, h = !1, P = 0, g = e[P] || (e[P] = []), d = o && (i = i.prototype, o < 5 && (o > 3 || !h) && O(i, r));
|
|
9
|
+
S(i, r);
|
|
10
|
+
for (var u = a.length - 1; u >= 0; u--)
|
|
11
|
+
p = I(o, r, n = {}, e[3], g), s = (0, a[u])(i, p), n._ = 1, m(s) && (i = s);
|
|
12
|
+
return C(e, i), d && _(i, r, d), h ? o ^ 4 ? c : d : i;
|
|
13
|
+
}, f, w, b;
|
|
14
|
+
f = [E(["api", "wikiPage", "modal"])];
|
|
15
|
+
class v extends (b = q) {
|
|
16
|
+
constructor(t) {
|
|
17
|
+
super(t, {}, "quickPreview"), this.ctx = t;
|
|
18
|
+
}
|
|
19
|
+
start() {
|
|
20
|
+
this.ctx.set("quickPreview", this.quickPreview.bind(this)), this.ctx.on("quickEdit/wikiPage", this.injectQuickEdit.bind(this));
|
|
21
|
+
}
|
|
22
|
+
stop() {
|
|
23
|
+
this.ctx.off("quickEdit/wikiPage", this.injectQuickEdit.bind(this));
|
|
24
|
+
}
|
|
25
|
+
injectQuickEdit({ ctx: t, modal: r, wikiPage: a }) {
|
|
26
|
+
r.setButtons([
|
|
27
|
+
{
|
|
28
|
+
label: "Preview",
|
|
29
|
+
side: "left",
|
|
30
|
+
className: "btn btn-secondary",
|
|
31
|
+
method: () => {
|
|
32
|
+
this.quickPreview(
|
|
33
|
+
r.get$content().find("textarea.editArea").val() || "",
|
|
34
|
+
void 0,
|
|
35
|
+
a
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
]);
|
|
40
|
+
}
|
|
41
|
+
async quickPreview(t, r, a) {
|
|
42
|
+
a || (a = this.ctx.wikiPage.newBlankPage({
|
|
43
|
+
title: "API"
|
|
44
|
+
}));
|
|
45
|
+
const i = this.ctx.modal.createObject({
|
|
46
|
+
className: "in-page-edit ipe-quickPreview",
|
|
47
|
+
sizeClass: "large"
|
|
48
|
+
}).init();
|
|
49
|
+
i.setTitle("Preview loading..."), i.setContent(
|
|
50
|
+
/* @__PURE__ */ l("section", { children: /* @__PURE__ */ l(j, {}) })
|
|
51
|
+
), i.show(), this.ctx.emit("quickPreview/showModal", {
|
|
52
|
+
ctx: this.ctx,
|
|
53
|
+
text: t,
|
|
54
|
+
modal: i,
|
|
55
|
+
wikiPage: a
|
|
56
|
+
});
|
|
57
|
+
const {
|
|
58
|
+
data: { parse: c }
|
|
59
|
+
} = await a.preview(t, r);
|
|
60
|
+
i.setTitle(`Preview - ${c.title}`);
|
|
61
|
+
let s = null;
|
|
62
|
+
i.setContent(
|
|
63
|
+
/* @__PURE__ */ l("section", { children: /* @__PURE__ */ l(
|
|
64
|
+
"div",
|
|
65
|
+
{
|
|
66
|
+
ref: (n) => s = n,
|
|
67
|
+
className: "mw-parser-output",
|
|
68
|
+
innerHTML: c.text
|
|
69
|
+
}
|
|
70
|
+
) })
|
|
71
|
+
), window.mw?.hook("wikipage.content").fire($(s)), this.ctx.emit("quickPreview/loaded", {
|
|
72
|
+
ctx: this.ctx,
|
|
73
|
+
modal: i,
|
|
74
|
+
wikiPage: a,
|
|
75
|
+
text: t,
|
|
76
|
+
parseData: c
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
w = z(b);
|
|
81
|
+
v = T(w, 0, "PluginQuickPreview", f, v);
|
|
82
|
+
N(w, 1, v);
|
|
83
|
+
export {
|
|
84
|
+
v as PluginQuickPreview
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=index-BEDkPsz1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-BEDkPsz1.js","sources":["../src/plugins/quick-preview/index.tsx"],"sourcesContent":["import { Inject, InPageEdit } from '@/InPageEdit'\nimport { type QuickEditInitPayload } from '@/plugins/quick-edit'\nimport { WikiPage } from '@/models/WikiPage'\nimport { MwApiParams } from 'wiki-saikou'\nimport { PageParseData } from '@/models/WikiPage/types/PageParseData'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickPreview: PluginQuickPreview['quickPreview']\n }\n interface Events {\n 'quickPreview/showModal'(payload: {\n ctx: InPageEdit\n text: string\n modal: SsiModal\n wikiPage: WikiPage\n }): void\n 'quickPreview/loaded'(payload: {\n ctx: InPageEdit\n modal: SsiModal\n wikiPage: WikiPage\n text: string\n parseData: PageParseData\n }): void\n }\n}\n\n@Inject(['api', 'wikiPage', 'modal'])\nexport class PluginQuickPreview extends BasePlugin {\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quickPreview')\n }\n\n protected start(): Promise<void> | void {\n this.ctx.set('quickPreview', this.quickPreview.bind(this))\n this.ctx.on('quickEdit/wikiPage', this.injectQuickEdit.bind(this))\n }\n\n protected stop(): Promise<void> | void {\n this.ctx.off('quickEdit/wikiPage', this.injectQuickEdit.bind(this))\n }\n\n private injectQuickEdit({ ctx, modal, wikiPage }: QuickEditInitPayload) {\n modal.setButtons([\n {\n label: 'Preview',\n side: 'left',\n className: 'btn btn-secondary',\n method: () => {\n this.quickPreview(\n (modal.get$content().find('textarea.editArea').val() as string) || '',\n undefined,\n wikiPage\n )\n },\n },\n ])\n }\n\n async quickPreview(text: string, params?: MwApiParams, wikiPage?: WikiPage) {\n wikiPage ||= this.ctx.wikiPage.newBlankPage({\n title: 'API',\n })\n\n const modal = this.ctx.modal\n .createObject({\n className: 'in-page-edit ipe-quickPreview',\n sizeClass: 'large',\n })\n .init()\n modal.setTitle('Preview loading...')\n modal.setContent(\n (\n <section>\n <ProgressBar />\n </section>\n ) as HTMLElement\n )\n modal.show()\n this.ctx.emit('quickPreview/showModal', {\n ctx: this.ctx,\n text,\n modal,\n wikiPage,\n })\n\n const {\n data: { parse },\n } = await wikiPage.preview(text, params)\n modal.setTitle(`Preview - ${parse.title}`)\n let outputRef: HTMLElement | null = null\n modal.setContent(\n (\n <section>\n <div\n ref={(el) => (outputRef = el)}\n className=\"mw-parser-output\"\n innerHTML={parse.text}\n ></div>\n </section>\n ) as HTMLElement\n )\n window.mw?.hook('wikipage.content').fire($(outputRef!))\n this.ctx.emit('quickPreview/loaded', {\n ctx: this.ctx,\n modal,\n wikiPage,\n text,\n parseData: parse,\n })\n }\n}\n"],"names":["_PluginQuickPreview_decorators","_init","_a","Inject","PluginQuickPreview","BasePlugin","ctx","modal","wikiPage","text","params","jsx","ProgressBar","parse","outputRef","el","__decoratorStart","__decorateElement","__runInitializers"],"mappings":";;;;;;;;;;;;GAAAA,GAAAC,GAAAC;AA2BAF,IAAA,CAACG,EAAO,CAAC,OAAO,YAAY,OAAO,CAAC,CAAA;AAC7B,MAAMC,WAA2BF,IAAAG,GAAW;AAAA,EACjD,YAAmBC,GAAiB;AAClC,UAAMA,GAAK,CAAA,GAAI,cAAc,GADZ,KAAA,MAAAA;AAAA,EAEnB;AAAA,EAEU,QAA8B;AACtC,SAAK,IAAI,IAAI,gBAAgB,KAAK,aAAa,KAAK,IAAI,CAAC,GACzD,KAAK,IAAI,GAAG,sBAAsB,KAAK,gBAAgB,KAAK,IAAI,CAAC;AAAA,EACnE;AAAA,EAEU,OAA6B;AACrC,SAAK,IAAI,IAAI,sBAAsB,KAAK,gBAAgB,KAAK,IAAI,CAAC;AAAA,EACpE;AAAA,EAEQ,gBAAgB,EAAE,KAAAA,GAAK,OAAAC,GAAO,UAAAC,KAAkC;AACtE,IAAAD,EAAM,WAAW;AAAA,MACf;AAAA,QACE,OAAO;AAAA,QACP,MAAM;AAAA,QACN,WAAW;AAAA,QACX,QAAQ,MAAM;AACZ,eAAK;AAAA,YACFA,EAAM,YAAA,EAAc,KAAK,mBAAmB,EAAE,SAAoB;AAAA,YACnE;AAAA,YACAC;AAAA,UAAA;AAAA,QAEJ;AAAA,MAAA;AAAA,IACF,CACD;AAAA,EACH;AAAA,EAEA,MAAM,aAAaC,GAAcC,GAAsBF,GAAqB;AAC1E,IAAAA,UAAa,KAAK,IAAI,SAAS,aAAa;AAAA,MAC1C,OAAO;AAAA,IAAA,CACR;AAED,UAAMD,IAAQ,KAAK,IAAI,MACpB,aAAa;AAAA,MACZ,WAAW;AAAA,MACX,WAAW;AAAA,IAAA,CACZ,EACA,KAAA;AACH,IAAAA,EAAM,SAAS,oBAAoB,GACnCA,EAAM;AAAA,MAEF,gBAAAI,EAAC,WAAA,EACC,UAAA,gBAAAA,EAACC,GAAA,CAAA,CAAY,EAAA,CACf;AAAA,IAAA,GAGJL,EAAM,KAAA,GACN,KAAK,IAAI,KAAK,0BAA0B;AAAA,MACtC,KAAK,KAAK;AAAA,MACV,MAAAE;AAAA,MACA,OAAAF;AAAA,MACA,UAAAC;AAAA,IAAA,CACD;AAED,UAAM;AAAA,MACJ,MAAM,EAAE,OAAAK,EAAA;AAAA,IAAM,IACZ,MAAML,EAAS,QAAQC,GAAMC,CAAM;AACvC,IAAAH,EAAM,SAAS,aAAaM,EAAM,KAAK,EAAE;AACzC,QAAIC,IAAgC;AACpC,IAAAP,EAAM;AAAA,wBAED,WAAA,EACC,UAAA,gBAAAI;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAK,CAACI,MAAQD,IAAYC;AAAA,UAC1B,WAAU;AAAA,UACV,WAAWF,EAAM;AAAA,QAAA;AAAA,MAAA,EAClB,CACH;AAAA,IAAA,GAGJ,OAAO,IAAI,KAAK,kBAAkB,EAAE,KAAK,EAAEC,CAAU,CAAC,GACtD,KAAK,IAAI,KAAK,uBAAuB;AAAA,MACnC,KAAK,KAAK;AAAA,MACV,OAAAP;AAAA,MACA,UAAAC;AAAA,MACA,MAAAC;AAAA,MACA,WAAWI;AAAA,IAAA,CACZ;AAAA,EACH;AACF;AAnFOZ,IAAAe,EAAAd,CAAA;AAAME,IAANa,8BADPjB,GACaI,CAAA;AAANc,EAAAjB,GAAA,GAAMG,CAAA;"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { j as n } from "./index-CuEf9G7f.js";
|
|
2
|
+
const x = "_twinSwapInput_1gdgl_9", y = "_inputWrapper_1gdgl_23", L = "_inputLeft_1gdgl_27", W = "_inputRight_1gdgl_30", $ = "_swapButton_1gdgl_46", i = {
|
|
3
|
+
twinSwapInput: x,
|
|
4
|
+
inputWrapper: y,
|
|
5
|
+
inputLeft: L,
|
|
6
|
+
inputRight: W,
|
|
7
|
+
swapButton: $
|
|
8
|
+
}, C = (f) => {
|
|
9
|
+
const { inputs: l, enableSwap: b = !0, ...v } = f, _ = l?.length === 2 ? l : [l?.[0] ?? {}, l?.[1] ?? {}], s = [null, null];
|
|
10
|
+
let c = 0, o = null, p = null;
|
|
11
|
+
const d = () => s.some((t) => t && t.disabled), w = () => {
|
|
12
|
+
if (!s[0] || !s[1] || d()) return;
|
|
13
|
+
const t = s[0], e = s[1], a = t.value, u = e.value;
|
|
14
|
+
t.value = u, e.value = a, t.dispatchEvent(new Event("change")), e.dispatchEvent(new Event("change")), c++, p && (p.style.transform = `rotateY(${c * -180}deg)`, p.style.transition = "transform 200ms ease");
|
|
15
|
+
}, m = (t) => {
|
|
16
|
+
if (!o) return;
|
|
17
|
+
const e = t ?? !o.disabled;
|
|
18
|
+
o.disabled = !e, e && s.forEach((a) => {
|
|
19
|
+
a && (a.disabled = !1);
|
|
20
|
+
});
|
|
21
|
+
}, I = /* @__PURE__ */ n(
|
|
22
|
+
"button",
|
|
23
|
+
{
|
|
24
|
+
type: "button",
|
|
25
|
+
"aria-label": "Swap values",
|
|
26
|
+
onClick: w,
|
|
27
|
+
disabled: d() || !b,
|
|
28
|
+
ref: (t) => o = t,
|
|
29
|
+
children: /* @__PURE__ */ n(
|
|
30
|
+
"svg",
|
|
31
|
+
{
|
|
32
|
+
ref: (t) => p = t,
|
|
33
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
34
|
+
width: "24",
|
|
35
|
+
height: "24",
|
|
36
|
+
viewBox: "0 0 24 24",
|
|
37
|
+
fill: "none",
|
|
38
|
+
stroke: "currentColor",
|
|
39
|
+
"stroke-width": "2",
|
|
40
|
+
"stroke-linecap": "round",
|
|
41
|
+
"stroke-linejoin": "round",
|
|
42
|
+
class: "icon-tabler icons-tabler-outline icon-tabler-transfer",
|
|
43
|
+
children: [
|
|
44
|
+
/* @__PURE__ */ n("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }),
|
|
45
|
+
/* @__PURE__ */ n("path", { d: "M20 10h-16l5.5 -6" }),
|
|
46
|
+
/* @__PURE__ */ n("path", { d: "M4 14h16l-5.5 6" })
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
), r = /* @__PURE__ */ n("div", { className: `twin-swap-input ${i.twinSwapInput}`, ...v, children: [
|
|
52
|
+
_.map((t, e) => {
|
|
53
|
+
const { label: a, id: u, name: h, value: S, disabled: k, inputProps: B } = t, E = e === 0, g = u || h;
|
|
54
|
+
return /* @__PURE__ */ n(
|
|
55
|
+
"div",
|
|
56
|
+
{
|
|
57
|
+
className: `${i.inputWrapper} ${E ? i.inputLeft : i.inputRight}`,
|
|
58
|
+
children: [
|
|
59
|
+
a && /* @__PURE__ */ n("label", { htmlFor: g, children: a }),
|
|
60
|
+
/* @__PURE__ */ n(
|
|
61
|
+
"input",
|
|
62
|
+
{
|
|
63
|
+
ref: (R) => s[e] = R,
|
|
64
|
+
type: "text",
|
|
65
|
+
id: g,
|
|
66
|
+
name: h,
|
|
67
|
+
value: S,
|
|
68
|
+
disabled: k,
|
|
69
|
+
...B
|
|
70
|
+
}
|
|
71
|
+
)
|
|
72
|
+
]
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
}),
|
|
76
|
+
/* @__PURE__ */ n("div", { className: i.swapButton, children: I })
|
|
77
|
+
] });
|
|
78
|
+
return r.swap = w, r.toggleEnableSwap = m, r;
|
|
79
|
+
};
|
|
80
|
+
export {
|
|
81
|
+
C as T
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=index-Bi1eJIjL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-Bi1eJIjL.js","sources":["../src/components/TwinSwapInput/index.tsx"],"sourcesContent":["import { JSX } from 'jsx-dom/jsx-runtime'\nimport styles from './styles.module.sass'\n\nexport type TwinSwapInputProps = {\n inputs: [TwinSwapInputInput, TwinSwapInputInput]\n enableSwap?: boolean\n} & JSX.IntrinsicElements['div']\n\nexport interface TwinSwapInputInput {\n label?: string\n id?: string\n name: string\n value?: string\n disabled?: boolean\n inputProps?: Omit<JSX.IntrinsicElements['input'], 'name' | 'value'>\n}\n\nexport type TwinSwapElement = HTMLDivElement & {\n swap: () => void\n toggleEnableSwap: (enable?: boolean) => void\n}\n\nexport const TwinSwapInput = (props: TwinSwapInputProps) => {\n const { inputs, enableSwap = true, ...rest } = props\n\n const normalizedInputs =\n inputs?.length === 2\n ? inputs\n : ([inputs?.[0] ?? {}, inputs?.[1] ?? {}] as [TwinSwapInputInput, TwinSwapInputInput])\n\n // 内部稳定引用\n const inputRefs: [HTMLInputElement | null, HTMLInputElement | null] = [null, null]\n\n let swapCount = 0\n let swapBtnRef: HTMLButtonElement | null = null\n let svgRef: SVGElement | null = null\n\n const checkIfInputDisabled = () => inputRefs.some((el) => el && el.disabled)\n\n const swap = () => {\n if (!inputRefs[0] || !inputRefs[1]) return\n if (checkIfInputDisabled()) return\n\n const a = inputRefs[0]\n const b = inputRefs[1]\n const va = a.value\n const vb = b.value\n a.value = vb\n b.value = va\n\n // 与原实现一致:派发 change(不冒泡)\n a.dispatchEvent(new Event('change'))\n b.dispatchEvent(new Event('change'))\n\n swapCount++\n if (svgRef) {\n svgRef.style.transform = `rotateY(${swapCount * -180}deg)`\n svgRef.style.transition = 'transform 200ms ease'\n }\n }\n\n const toggleEnableSwap = (enable?: boolean) => {\n if (!swapBtnRef) return\n const next = enable ?? !swapBtnRef.disabled\n swapBtnRef.disabled = !next\n if (next) {\n // 与原实现一致:开启时把 inputs 解禁\n inputRefs.forEach((el) => {\n if (el) el.disabled = false\n })\n }\n }\n\n const swapButton = (\n <button\n type=\"button\"\n aria-label=\"Swap values\"\n onClick={swap}\n disabled={checkIfInputDisabled() || !enableSwap}\n ref={(el) => (swapBtnRef = el as HTMLButtonElement)}\n >\n <svg\n ref={(el) => (svgRef = el as unknown as SVGElement)}\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"icon-tabler icons-tabler-outline icon-tabler-transfer\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M20 10h-16l5.5 -6\" />\n <path d=\"M4 14h16l-5.5 6\" />\n </svg>\n </button>\n ) as HTMLButtonElement\n\n const container = (\n <div className={`twin-swap-input ${styles.twinSwapInput}`} {...rest}>\n {normalizedInputs.map((input, index) => {\n const { label, id, name, value, disabled, inputProps } = input\n const isLeft = index === 0\n const inputId = id || name\n\n return (\n <div\n className={`${styles.inputWrapper} ${isLeft ? styles.inputLeft : styles.inputRight}`}\n >\n {label && <label htmlFor={inputId}>{label}</label>}\n <input\n ref={(el) => (inputRefs[index] = el as HTMLInputElement)}\n type=\"text\"\n id={inputId}\n name={name}\n value={value}\n disabled={disabled}\n {...inputProps}\n />\n </div>\n )\n })}\n\n <div className={styles.swapButton}>{swapButton}</div>\n </div>\n ) as TwinSwapElement\n\n container.swap = swap\n container.toggleEnableSwap = toggleEnableSwap\n\n return container\n}\n"],"names":["TwinSwapInput","props","inputs","enableSwap","rest","normalizedInputs","inputRefs","swapCount","swapBtnRef","svgRef","checkIfInputDisabled","el","swap","a","b","va","vb","toggleEnableSwap","enable","next","swapButton","jsx","jsxs","container","styles","input","index","label","id","name","value","disabled","inputProps","isLeft","inputId"],"mappings":"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"}
|