@inpageedit/core 0.1.1 → 0.3.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.
Files changed (67) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +55 -55
  3. package/dist/ActionButton-ByMKIthQ.js +24 -0
  4. package/dist/ActionButton-ByMKIthQ.js.map +1 -0
  5. package/dist/InPageEdit.d.ts +7 -2
  6. package/dist/{CheckBox-ROZZIK-t.js → InputBox-FIzJ-rPN.js} +11 -11
  7. package/dist/InputBox-FIzJ-rPN.js.map +1 -0
  8. package/dist/Preferences-Bg3J5Ur9.js.map +1 -1
  9. package/dist/{RadioBox-Bt5tAniV.js → RadioBox-BZFhTEo5.js} +2 -2
  10. package/dist/RadioBox-BZFhTEo5.js.map +1 -0
  11. package/dist/components/ActionButton.d.ts +6 -9
  12. package/dist/components/SchemaForm/index.d.ts +142 -0
  13. package/dist/components/index.d.ts +8 -0
  14. package/dist/components/index.js +79 -0
  15. package/dist/components/index.js.map +1 -0
  16. package/dist/{index-M4USLRId.js → index-BByzm2Fz.js} +169 -167
  17. package/dist/index-BByzm2Fz.js.map +1 -0
  18. package/dist/{index-BI0z4WfP.js → index-BPsDFq9U.js} +2 -2
  19. package/dist/index-BPsDFq9U.js.map +1 -0
  20. package/dist/{index-Bz9ciRCe.js → index-BsYzf3Yw.js} +9 -8
  21. package/dist/index-BsYzf3Yw.js.map +1 -0
  22. package/dist/{index-DIovbA02.js → index-CMqk2ovP.js} +14 -14
  23. package/dist/index-CMqk2ovP.js.map +1 -0
  24. package/dist/{index-DPXRKwGM.js → index-Ch5DJDZZ.js} +20 -19
  25. package/dist/index-Ch5DJDZZ.js.map +1 -0
  26. package/dist/index-Cq1Q9Xau.js +4635 -0
  27. package/dist/index-Cq1Q9Xau.js.map +1 -0
  28. package/dist/{index-01GVXg9H.js → index-Cq9xxVsu.js} +20 -30
  29. package/dist/index-Cq9xxVsu.js.map +1 -0
  30. package/dist/index-CvhkVj_L.js +361 -0
  31. package/dist/index-CvhkVj_L.js.map +1 -0
  32. package/dist/{index-jJ3Ut97G.js → index-HyxA2rYz.js} +20 -19
  33. package/dist/index-HyxA2rYz.js.map +1 -0
  34. package/dist/{index-BY3hO6sZ.js → index-X1X416tZ.js} +36 -34
  35. package/dist/index-X1X416tZ.js.map +1 -0
  36. package/dist/index.d.ts +16 -1
  37. package/dist/index.js +5187 -5
  38. package/dist/index.js.map +1 -1
  39. package/dist/plugins/BasePlugin.d.ts +2 -2
  40. package/dist/plugins/preferences/{PluginPreferencesUI.d.ts → ui/index.d.ts} +3 -2
  41. package/dist/sleep-DpyIipK-.js.map +1 -1
  42. package/dist/style.css +1 -1
  43. package/dist/{plugins/preferences/components/hooks.d.ts → utils/vueHooks.d.ts} +1 -1
  44. package/lib/index.umd.js +57 -2620
  45. package/lib/index.umd.js.map +1 -0
  46. package/lib/style.css +1 -1
  47. package/package.json +42 -4
  48. package/dist/ActionButton-B9JniHy6.js +0 -33
  49. package/dist/ActionButton-B9JniHy6.js.map +0 -1
  50. package/dist/CheckBox-ROZZIK-t.js.map +0 -1
  51. package/dist/PluginPreferencesUI-7u9JClgy.js +0 -33921
  52. package/dist/PluginPreferencesUI-7u9JClgy.js.map +0 -1
  53. package/dist/RadioBox-Bt5tAniV.js.map +0 -1
  54. package/dist/i18n/languages.json +0 -1527
  55. package/dist/index-01GVXg9H.js.map +0 -1
  56. package/dist/index-BI0z4WfP.js.map +0 -1
  57. package/dist/index-BY3hO6sZ.js.map +0 -1
  58. package/dist/index-Bz9ciRCe.js.map +0 -1
  59. package/dist/index-CGg-JS5d.js +0 -5466
  60. package/dist/index-CGg-JS5d.js.map +0 -1
  61. package/dist/index-DIovbA02.js.map +0 -1
  62. package/dist/index-DPXRKwGM.js.map +0 -1
  63. package/dist/index-M4USLRId.js.map +0 -1
  64. package/dist/index-jJ3Ut97G.js.map +0 -1
  65. package/dist/utils/schemaValidator.d.ts +0 -12
  66. package/lib/i18n/languages.json +0 -1527
  67. /package/dist/components/TabView/{TabView.d.ts → index.d.ts} +0 -0
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2025 dragon-fish
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
1
+ MIT License
2
+
3
+ Copyright (c) 2025 dragon-fish
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  SOFTWARE.
package/README.md CHANGED
@@ -1,55 +1,55 @@
1
- <div align="center">
2
-
3
- [![InPageEdit Logo](https://ipe.js.org/images/logo/InPageEdit.png)](https://ipe.js.org/images/logo/InPageEdit.png)
4
-
5
- # InPageEdit NEXT
6
-
7
- 🚀 MediaWiki 的模块化、可扩展超级增强插件
8
-
9
- **InPageEdit NEXT**是由机智的小鱼君开发的一款 MediaWiki 多功能插件。主要功能旨在使许多 MediaWiki 的功能在不打开新标签页的情况下完成(包括但不限于编辑),极大加快维护 wiki 的速度。模块化设计、类型定义清晰完整,插件可自由热插拔。
10
-
11
- </div>
12
-
13
- ## 快速上手 / Quick Start
14
-
15
- [![](https://data.jsdelivr.com/v1/package/npm/@inpageedit/core/badge)](https://www.jsdelivr.com/package/npm/@inpageedit/core)
16
-
17
- 在*个人 JS 页*添加以下代码:
18
-
19
- <!-- prettier-ignore -->
20
- ```javascript
21
- // InPageEdit NEXT
22
- $('<script src="https://unpkg.com/@inpageedit/core" type="module"></script>').appendTo('body')
23
- ```
24
-
25
- ## 特色功能 / Features
26
-
27
- **编辑者视角 / For wiki editors**
28
-
29
- - 快速编辑 / Quick Edit
30
- - 快速移动 / Quick Move
31
- - 快速重定向 / Quick Redirect
32
- - 快速差异 / Quick Diff
33
- - 快速预览 / Quick Preview
34
-
35
- **开发者视角 / For developers**
36
-
37
- - 可热插拔的模块化设计
38
- - 完全使用 TypeScript 编写
39
- - 超简单的扩展能力,示例插件:[hello-world](./examples/plugins/hello-world.js)
40
-
41
- ## Supported languages
42
-
43
- > [!NOTE]
44
- >
45
- > Currently only English is supported. We're working on i18n support.
46
-
47
- ---
48
-
49
- 🚀 Modular, Extensible Supercharged Plugin for MediaWiki.
50
-
51
- > [MIT License](https://opensource.org/licenses/MIT)
52
- >
53
- > InPageEdit-NEXT Copyright © 2025-present dragon-fish
54
-
55
- See more: [GitHub](https://github.com/inpageedit/inpageedit-next) | [Update logs](https://ipe.js.org/update/) | [File issues](https://github.com/inpageedit/inpageedit-next/issues)
1
+ <div align="center">
2
+
3
+ [![InPageEdit Logo](https://ipe.js.org/images/logo/InPageEdit.png)](https://ipe.js.org/images/logo/InPageEdit.png)
4
+
5
+ # InPageEdit NEXT
6
+
7
+ 🚀 MediaWiki 的模块化、可扩展超级增强插件
8
+
9
+ **InPageEdit NEXT**是由机智的小鱼君开发的一款 MediaWiki 多功能插件。主要功能旨在使许多 MediaWiki 的功能在不打开新标签页的情况下完成(包括但不限于编辑),极大加快维护 wiki 的速度。模块化设计、类型定义清晰完整,插件可自由热插拔。
10
+
11
+ </div>
12
+
13
+ ## 快速上手 / Quick Start
14
+
15
+ [![](https://data.jsdelivr.com/v1/package/npm/@inpageedit/core/badge)](https://www.jsdelivr.com/package/npm/@inpageedit/core)
16
+
17
+ 在*个人 JS 页*添加以下代码:
18
+
19
+ <!-- prettier-ignore -->
20
+ ```javascript
21
+ // InPageEdit NEXT
22
+ $('<script src="https://unpkg.com/@inpageedit/core" type="module"></script>').appendTo('body')
23
+ ```
24
+
25
+ ## 特色功能 / Features
26
+
27
+ **编辑者视角 / For wiki editors**
28
+
29
+ - 快速编辑 / Quick Edit
30
+ - 快速移动 / Quick Move
31
+ - 快速重定向 / Quick Redirect
32
+ - 快速差异 / Quick Diff
33
+ - 快速预览 / Quick Preview
34
+
35
+ **开发者视角 / For developers**
36
+
37
+ - 可热插拔的模块化设计
38
+ - 完全使用 TypeScript 编写
39
+ - 超简单的扩展能力,示例插件:[hello-world](./docs/.templates/examples/plugins/hello-world.js)
40
+
41
+ ## Supported languages
42
+
43
+ > [!NOTE]
44
+ >
45
+ > Currently only English is supported. We're working on i18n support.
46
+
47
+ ---
48
+
49
+ 🚀 Modular, Extensible Supercharged Plugin for MediaWiki.
50
+
51
+ > [MIT License](https://opensource.org/licenses/MIT)
52
+ >
53
+ > InPageEdit-NEXT Copyright © 2025-present dragon-fish
54
+
55
+ See more: [GitHub](https://github.com/inpageedit/inpageedit-next) | [Update logs](https://ipe.js.org/update/) | [File issues](https://github.com/inpageedit/inpageedit-next/issues)
@@ -0,0 +1,24 @@
1
+ import { c as s } from "./index-CvhkVj_L.js";
2
+ const c = window?.location?.origin, p = ({
3
+ type: n,
4
+ tag: t,
5
+ href: o,
6
+ target: i,
7
+ children: a,
8
+ ...e
9
+ }) => (t = t || (o ? "a" : "button"), typeof i > "u" && o && o.startsWith("http") && !o.startsWith(c) && (i = "_blank"), s(
10
+ t,
11
+ {
12
+ className: `theme-ipe ipe-action-button btn btn-${n || "default"}`,
13
+ // @ts-ignore
14
+ href: t === "a" ? o : void 0,
15
+ target: t === "a" ? i : void 0,
16
+ "data-href": t !== "a" ? o : void 0,
17
+ ...e
18
+ },
19
+ a
20
+ ));
21
+ export {
22
+ p as A
23
+ };
24
+ //# sourceMappingURL=ActionButton-ByMKIthQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionButton-ByMKIthQ.js","sources":["../src/components/ActionButton.tsx"],"sourcesContent":["import { h, JSX, ReactNode } from 'jsx-dom'\r\n\r\nexport interface ActionButtonProps {\r\n type?: 'primary' | 'secondary' | 'danger' | 'default'\r\n tag?: 'a' | 'button' | 'div'\r\n}\r\n\r\nconst origin = window?.location?.origin\r\n\r\nexport const ActionButton = ({\r\n type,\r\n tag,\r\n href,\r\n target,\r\n children,\r\n ...rest\r\n}: ActionButtonProps &\r\n Omit<JSX.IntrinsicElements['button'], 'type'> &\r\n JSX.IntrinsicElements['a']) => {\r\n tag = tag || (href ? 'a' : 'button')\r\n if (\r\n typeof target === 'undefined' &&\r\n href &&\r\n href.startsWith('http') &&\r\n !href.startsWith(origin)\r\n ) {\r\n target = '_blank'\r\n }\r\n return h(\r\n tag,\r\n {\r\n className: `theme-ipe ipe-action-button btn btn-${type || 'default'}`,\r\n // @ts-ignore\r\n href: tag === 'a' ? href : undefined,\r\n target: tag === 'a' ? target : undefined,\r\n 'data-href': tag !== 'a' ? href : undefined,\r\n ...rest,\r\n },\r\n children\r\n )\r\n}\r\n"],"names":["origin","ActionButton","type","tag","href","target","children","rest","h"],"mappings":";AAOA,MAAMA,IAAS,QAAQ,UAAU,QAEpBC,IAAe,CAAC;AAAA,EAC3B,MAAAC;AAAA,EACA,KAAAC;AAAA,EACA,MAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,OAGEJ,IAAMA,MAAQC,IAAO,MAAM,WAEzB,OAAOC,IAAW,OAClBD,KACAA,EAAK,WAAW,MAAM,KACtB,CAACA,EAAK,WAAWJ,CAAM,MAEvBK,IAAS,WAEJG;AAAAA,EACLL;AAAA,EACA;AAAA,IACE,WAAW,uCAAuCD,KAAQ,SAAS;AAAA;AAAA,IAEnE,MAAMC,MAAQ,MAAMC,IAAO;AAAA,IAC3B,QAAQD,MAAQ,MAAME,IAAS;AAAA,IAC/B,aAAaF,MAAQ,MAAMC,IAAO;AAAA,IAClC,GAAGG;AAAA,EAAA;AAAA,EAELD;AAAA;"}
@@ -1,9 +1,8 @@
1
- import { Context, Inject } from 'cordis';
1
+ import { Context, Inject, Events as CordisEvents } from 'cordis';
2
2
  export interface InPageEditCoreConfig {
3
3
  baseURL: string | URL;
4
4
  legacyPreferences: Record<string, any>;
5
5
  }
6
- export * from 'cordis';
7
6
  /**
8
7
  * ✏️ InPageEdit NEXT
9
8
  *
@@ -23,3 +22,9 @@ export declare class InPageEdit extends Context {
23
22
  constructor(config?: Partial<InPageEditCoreConfig>);
24
23
  useScope(inject: Inject): Promise<this>;
25
24
  }
25
+ export { Inject, Schema, Service } from 'cordis';
26
+ export interface Events<C extends InPageEdit = InPageEdit> extends CordisEvents<C> {
27
+ }
28
+ export interface InPageEdit {
29
+ [InPageEdit.events]: Events<this>;
30
+ }
@@ -1,5 +1,12 @@
1
- import { j as e } from "./index-CGg-JS5d.js";
1
+ import { j as e } from "./index-CvhkVj_L.js";
2
2
  const h = (s) => {
3
+ const { id: t, name: l, label: a, checked: c, inputProps: i, labelProps: n, children: p, ...o } = s;
4
+ return /* @__PURE__ */ e("label", { className: "theme-ipe ipe-checkbox", ...o, children: [
5
+ /* @__PURE__ */ e("input", { type: "checkbox", id: t, name: l, checked: c, ...i }),
6
+ /* @__PURE__ */ e("span", { className: "ipe-checkbox-box" }),
7
+ /* @__PURE__ */ e("span", { ...n, children: a || p })
8
+ ] });
9
+ }, b = (s) => {
3
10
  const { label: t, id: l, name: a, value: c, disabled: i, labelProps: n, inputProps: p, ...o } = s;
4
11
  return /* @__PURE__ */ e("div", { className: "theme-ipe ipe-input-box", ...o, children: [
5
12
  /* @__PURE__ */ e("label", { htmlFor: l, style: { display: "block" }, ...n, children: t }),
@@ -15,16 +22,9 @@ const h = (s) => {
15
22
  }
16
23
  )
17
24
  ] });
18
- }, b = (s) => {
19
- const { id: t, name: l, label: a, checked: c, inputProps: i, labelProps: n, children: p, ...o } = s;
20
- return /* @__PURE__ */ e("label", { className: "theme-ipe ipe-checkbox", ...o, children: [
21
- /* @__PURE__ */ e("input", { type: "checkbox", id: t, name: l, checked: c, ...i }),
22
- /* @__PURE__ */ e("span", { className: "ipe-checkbox-box" }),
23
- /* @__PURE__ */ e("span", { ...n, children: a || p })
24
- ] });
25
25
  };
26
26
  export {
27
- b as C,
28
- h as I
27
+ h as C,
28
+ b as I
29
29
  };
30
- //# sourceMappingURL=CheckBox-ROZZIK-t.js.map
30
+ //# sourceMappingURL=InputBox-FIzJ-rPN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputBox-FIzJ-rPN.js","sources":["../src/components/CheckBox.tsx","../src/components/InputBox.tsx"],"sourcesContent":["import { JSX, ReactNode } from 'jsx-dom'\r\n\r\nexport type CheckBoxProps = {\r\n id?: string\r\n name: string\r\n label?: string | HTMLElement\r\n checked?: boolean\r\n inputProps?: JSX.IntrinsicElements['input']\r\n labelProps?: JSX.IntrinsicElements['span']\r\n} & JSX.IntrinsicElements['label']\r\n\r\nexport const CheckBox = (props: CheckBoxProps) => {\r\n const { id, name, label, checked, inputProps, labelProps, children, ...rest } = props\r\n return (\r\n <label className=\"theme-ipe ipe-checkbox\" {...rest}>\r\n <input type=\"checkbox\" id={id} name={name} checked={checked} {...inputProps} />\r\n <span className=\"ipe-checkbox-box\"></span>\r\n <span {...labelProps}>{label || children}</span>\r\n </label>\r\n )\r\n}\r\n","import { JSX } from 'jsx-dom'\r\n\r\nexport type InputBoxProps = {\r\n label: string\r\n id?: string\r\n name: string\r\n value?: string\r\n disabled?: boolean\r\n labelProps?: JSX.IntrinsicElements['label']\r\n inputProps?: JSX.IntrinsicElements['input']\r\n} & JSX.IntrinsicElements['div']\r\n\r\nexport const InputBox = (props: InputBoxProps) => {\r\n const { label, id, name, value, disabled, labelProps, inputProps, ...rest } = props\r\n return (\r\n <div className=\"theme-ipe ipe-input-box\" {...rest}>\r\n <label htmlFor={id} style={{ display: 'block' }} {...labelProps}>\r\n {label}\r\n </label>\r\n <input\r\n id={id}\r\n name={name}\r\n value={value}\r\n disabled={disabled}\r\n style={{ width: '100%' }}\r\n {...inputProps}\r\n />\r\n </div>\r\n )\r\n}\r\n"],"names":["CheckBox","props","id","name","label","checked","inputProps","labelProps","children","rest","jsxs","jsx","InputBox","value","disabled"],"mappings":";AAWO,MAAMA,IAAW,CAACC,MAAyB;AAChD,QAAM,EAAE,IAAAC,GAAI,MAAAC,GAAM,OAAAC,GAAO,SAAAC,GAAS,YAAAC,GAAY,YAAAC,GAAY,UAAAC,GAAU,GAAGC,EAAA,IAASR;AAChF,SACES,gBAAAA,EAAC,SAAA,EAAM,WAAU,0BAA0B,GAAGD,GAC5C,UAAA;AAAA,IAAA,gBAAAE,EAAC,WAAM,MAAK,YAAW,IAAAT,GAAQ,MAAAC,GAAY,SAAAE,GAAmB,GAAGC,GAAY;AAAA,IAC7E,gBAAAK,EAAC,QAAA,EAAK,WAAU,mBAAA,CAAmB;AAAA,IACnC,gBAAAA,EAAC,QAAA,EAAM,GAAGJ,GAAa,eAASC,EAAA,CAAS;AAAA,EAAA,GAC3C;AAEJ,GCRaI,IAAW,CAACX,MAAyB;AAChD,QAAM,EAAE,OAAAG,GAAO,IAAAF,GAAI,MAAAC,GAAM,OAAAU,GAAO,UAAAC,GAAU,YAAAP,GAAY,YAAAD,GAAY,GAAGG,EAAA,IAASR;AAC9E,SACES,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BAA2B,GAAGD,GAC3C,UAAA;AAAA,IAAA,gBAAAE,EAAC,SAAA,EAAM,SAAST,GAAI,OAAO,EAAE,SAAS,QAAA,GAAY,GAAGK,GAClD,UAAAH,EAAA,CACH;AAAA,IACA,gBAAAO;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAAT;AAAA,QACA,MAAAC;AAAA,QACA,OAAAU;AAAA,QACA,UAAAC;AAAA,QACA,OAAO,EAAE,OAAO,OAAA;AAAA,QACf,GAAGR;AAAA,MAAA;AAAA,IAAA;AAAA,EACN,GACF;AAEJ;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Preferences-Bg3J5Ur9.js","sources":["../src/decorators/Preferences.ts"],"sourcesContent":["import Schema from 'schemastery'\n\ntype AnyConstructor<T = any> = new (...args: any[]) => T\n\nexport type PreferenceAugmented<C extends AnyConstructor, D extends Record<string, any>> = C & {\n PreferencesSchema: Schema<D>\n PreferencesDefaults: D\n}\n\n/**\n * Decorator for registering preferences\n *\n * ```ts\n * @RegisterPreferences(\n * Schema.object({\n * foo: Schema.string().description('Foo description'),\n * }),\n * {\n * foo: 'default foo value',\n * }\n * )\n * class Foo {}\n * ```\n *\n * same as:\n *\n * ```ts\n * class Foo {\n * static ConfigSchema = Schema.object({\n * foo: Schema.string().description('Foo description')\n * })\n * static ConfigDefaults = {\n * foo: 'default foo value'\n * }\n * }\n * ```\n */\nexport function RegisterPreferences<D extends Record<string, any>>(schema: Schema<D>, defaults: D) {\n return function <T extends AnyConstructor>(target: T): PreferenceAugmented<T, D> {\n ;(target as any).PreferencesSchema = schema\n ;(target as any).PreferencesDefaults = defaults\n return target as PreferenceAugmented<T, D>\n }\n}\n"],"names":["RegisterPreferences","schema","defaults","target"],"mappings":"AAqCO,SAASA,EAAmDC,GAAmBC,GAAa;AACjG,SAAO,SAAoCC,GAAsC;AAC7E,WAAAA,EAAe,oBAAoBF,GACnCE,EAAe,sBAAsBD,GAChCC;AAAA,EACT;AACF;"}
1
+ {"version":3,"file":"Preferences-Bg3J5Ur9.js","sources":["../src/decorators/Preferences.ts"],"sourcesContent":["import Schema from 'schemastery'\r\n\r\ntype AnyConstructor<T = any> = new (...args: any[]) => T\r\n\r\nexport type PreferenceAugmented<C extends AnyConstructor, D extends Record<string, any>> = C & {\r\n PreferencesSchema: Schema<D>\r\n PreferencesDefaults: D\r\n}\r\n\r\n/**\r\n * Decorator for registering preferences\r\n *\r\n * ```ts\r\n * @RegisterPreferences(\r\n * Schema.object({\r\n * foo: Schema.string().description('Foo description'),\r\n * }),\r\n * {\r\n * foo: 'default foo value',\r\n * }\r\n * )\r\n * class Foo {}\r\n * ```\r\n *\r\n * same as:\r\n *\r\n * ```ts\r\n * class Foo {\r\n * static ConfigSchema = Schema.object({\r\n * foo: Schema.string().description('Foo description')\r\n * })\r\n * static ConfigDefaults = {\r\n * foo: 'default foo value'\r\n * }\r\n * }\r\n * ```\r\n */\r\nexport function RegisterPreferences<D extends Record<string, any>>(schema: Schema<D>, defaults: D) {\r\n return function <T extends AnyConstructor>(target: T): PreferenceAugmented<T, D> {\r\n ;(target as any).PreferencesSchema = schema\r\n ;(target as any).PreferencesDefaults = defaults\r\n return target as PreferenceAugmented<T, D>\r\n }\r\n}\r\n"],"names":["RegisterPreferences","schema","defaults","target"],"mappings":"AAqCO,SAASA,EAAmDC,GAAmBC,GAAa;AACjG,SAAO,SAAoCC,GAAsC;AAC7E,WAAAA,EAAe,oBAAoBF,GACnCE,EAAe,sBAAsBD,GAChCC;AAAA,EACT;AACF;"}
@@ -1,4 +1,4 @@
1
- import { j as e } from "./index-CGg-JS5d.js";
1
+ import { j as e } from "./index-CvhkVj_L.js";
2
2
  const f = "_mbox_v5fz5_1", u = "_title_v5fz5_12", v = "_content_v5fz5_19", _ = "_close_v5fz5_27", s = {
3
3
  mbox: f,
4
4
  title: u,
@@ -51,4 +51,4 @@ export {
51
51
  P as M,
52
52
  g as R
53
53
  };
54
- //# sourceMappingURL=RadioBox-Bt5tAniV.js.map
54
+ //# sourceMappingURL=RadioBox-BZFhTEo5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadioBox-BZFhTEo5.js","sources":["../src/components/MBox/index.tsx","../src/components/RadioBox.tsx"],"sourcesContent":["import { ReactNode } from 'jsx-dom'\r\nimport { JSX } from 'jsx-dom/jsx-runtime'\r\nimport styles from './styles.module.sass'\r\n\r\nexport type MBoxProps = {\r\n type?:\r\n | ''\r\n | 'default'\r\n | 'note'\r\n | 'info'\r\n | 'tip'\r\n | 'success'\r\n | 'important'\r\n | 'done'\r\n | 'warning'\r\n | 'caution'\r\n | 'error'\r\n title?: ReactNode\r\n content?: ReactNode\r\n closeable?: boolean\r\n titleProps?: JSX.IntrinsicElements['div']\r\n contentProps?: JSX.IntrinsicElements['div']\r\n} & JSX.IntrinsicElements['div']\r\n\r\nexport type MBoxElement = HTMLElement & {\r\n close: () => Promise<void>\r\n}\r\n\r\nexport const MBox = (props: MBoxProps) => {\r\n const {\r\n type = 'default',\r\n title,\r\n content,\r\n closeable = true,\r\n titleProps,\r\n contentProps,\r\n children,\r\n ...rest\r\n } = props\r\n let titleContent = title\r\n if (typeof title === 'undefined' && type !== 'default') {\r\n titleContent = type[0].toUpperCase() + type.slice(1).toLowerCase()\r\n }\r\n\r\n const close = async () => {\r\n if (!box) {\r\n return Promise.resolve()\r\n }\r\n const { promise, resolve } = Promise.withResolvers<void>()\r\n\r\n const animation = box.animate(\r\n [\r\n { opacity: '1', height: box.clientHeight + 'px' },\r\n { opacity: '0', height: '0px', margin: '0px' },\r\n ],\r\n {\r\n duration: 300,\r\n easing: 'ease',\r\n }\r\n )\r\n\r\n animation.addEventListener('finish', () => {\r\n box.remove()\r\n resolve()\r\n })\r\n\r\n return promise\r\n }\r\n\r\n const box = (\r\n <div className={`theme-ipe ipe-mbox mbox-type-${type || 'default'} ${styles.mbox}`} {...rest}>\r\n {titleContent && (\r\n <div className={`ipe-mbox-title ${styles.title}`} {...titleProps}>\r\n {titleContent}\r\n </div>\r\n )}\r\n <div className={`ipe-mbox-content ${styles.content}`} {...contentProps}>\r\n {children || content}\r\n </div>\r\n {closeable && (\r\n <a onClick={close} className={`ipe-mbox-close ${styles.close}`}>\r\n ×\r\n </a>\r\n )}\r\n </div>\r\n ) as MBoxElement\r\n box.close = close\r\n return box\r\n}\r\n","import { JSX, ReactNode } from 'jsx-dom'\r\n\r\nexport type RadioBoxProps = {\r\n id?: string\r\n name: string\r\n value: string\r\n label?: string | HTMLElement\r\n inputProps?: JSX.IntrinsicElements['input']\r\n labelProps?: JSX.IntrinsicElements['span']\r\n} & JSX.IntrinsicElements['label']\r\n\r\nexport const RadioBox = (props: RadioBoxProps) => {\r\n const { id, name, value, label, inputProps, labelProps, children, ...rest } = props\r\n return (\r\n <label className=\"theme-ipe ipe-radio-box\" {...rest}>\r\n <input type=\"radio\" id={id} name={name} value={value} {...inputProps} />\r\n <span className=\"ipe-checkbox-box\"></span>\r\n <span {...labelProps}>{label || children}</span>\r\n </label>\r\n )\r\n}\r\n"],"names":["MBox","props","type","title","content","closeable","titleProps","contentProps","children","rest","titleContent","close","box","promise","resolve","jsxs","styles","jsx","RadioBox","id","name","value","label","inputProps","labelProps"],"mappings":";;;;;;GA4BaA,IAAO,CAACC,MAAqB;AACxC,QAAM;AAAA,IACJ,MAAAC,IAAO;AAAA,IACP,OAAAC;AAAA,IACA,SAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,YAAAC;AAAA,IACA,cAAAC;AAAA,IACA,UAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,IACDR;AACJ,MAAIS,IAAeP;AACnB,EAAI,OAAOA,IAAU,OAAeD,MAAS,cAC3CQ,IAAeR,EAAK,CAAC,EAAE,YAAA,IAAgBA,EAAK,MAAM,CAAC,EAAE,YAAA;AAGvD,QAAMS,IAAQ,YAAY;AACxB,QAAI,CAACC;AACH,aAAO,QAAQ,QAAA;AAEjB,UAAM,EAAE,SAAAC,GAAS,SAAAC,MAAY,QAAQ,cAAA;AAarC,WAXkBF,EAAI;AAAA,MACpB;AAAA,QACE,EAAE,SAAS,KAAK,QAAQA,EAAI,eAAe,KAAA;AAAA,QAC3C,EAAE,SAAS,KAAK,QAAQ,OAAO,QAAQ,MAAA;AAAA,MAAM;AAAA,MAE/C;AAAA,QACE,UAAU;AAAA,QACV,QAAQ;AAAA,MAAA;AAAA,IACV,EAGQ,iBAAiB,UAAU,MAAM;AACzC,MAAAA,EAAI,OAAA,GACJE,EAAA;AAAA,IACF,CAAC,GAEMD;AAAA,EACT,GAEMD,IACJG,gBAAAA,EAAC,OAAA,EAAI,WAAW,gCAAgCb,KAAQ,SAAS,IAAIc,EAAO,IAAI,IAAK,GAAGP,GACrF,UAAA;AAAA,IAAAC,KACC,gBAAAO,EAAC,SAAI,WAAW,kBAAkBD,EAAO,KAAK,IAAK,GAAGV,GACnD,UAAAI,EAAA,CACH;AAAA,IAEF,gBAAAO,EAAC,OAAA,EAAI,WAAW,oBAAoBD,EAAO,OAAO,IAAK,GAAGT,GACvD,UAAAC,KAAYJ,EAAA,CACf;AAAA,IACCC,KACC,gBAAAY,EAAC,KAAA,EAAE,SAASN,GAAO,WAAW,kBAAkBK,EAAO,KAAK,IAAI,UAAA,IAAA,CAEhE;AAAA,EAAA,GAEJ;AAEF,SAAAJ,EAAI,QAAQD,GACLC;AACT,GC7EaM,IAAW,CAACjB,MAAyB;AAChD,QAAM,EAAE,IAAAkB,GAAI,MAAAC,GAAM,OAAAC,GAAO,OAAAC,GAAO,YAAAC,GAAY,YAAAC,GAAY,UAAAhB,GAAU,GAAGC,EAAA,IAASR;AAC9E,SACEc,gBAAAA,EAAC,SAAA,EAAM,WAAU,2BAA2B,GAAGN,GAC7C,UAAA;AAAA,IAAA,gBAAAQ,EAAC,WAAM,MAAK,SAAQ,IAAAE,GAAQ,MAAAC,GAAY,OAAAC,GAAe,GAAGE,GAAY;AAAA,IACtE,gBAAAN,EAAC,QAAA,EAAK,WAAU,mBAAA,CAAmB;AAAA,IACnC,gBAAAA,EAAC,QAAA,EAAM,GAAGO,GAAa,eAAShB,EAAA,CAAS;AAAA,EAAA,GAC3C;AAEJ;"}
@@ -1,9 +1,6 @@
1
- import { JSX, ReactNode } from 'jsx-dom';
2
- export declare const ActionButton: ({ type, link, target, buttonProps, anchorProps, children, }: {
3
- type?: "primary" | "secondary" | "danger";
4
- link?: string;
5
- target?: string;
6
- anchorProps?: JSX.IntrinsicElements["a"];
7
- buttonProps?: JSX.IntrinsicElements["button"];
8
- children?: ReactNode;
9
- }) => import('jsx-dom').ReactElement;
1
+ import { JSX } from 'jsx-dom';
2
+ export interface ActionButtonProps {
3
+ type?: 'primary' | 'secondary' | 'danger' | 'default';
4
+ tag?: 'a' | 'button' | 'div';
5
+ }
6
+ export declare const ActionButton: ({ type, tag, href, target, children, ...rest }: ActionButtonProps & Omit<JSX.IntrinsicElements["button"], "type"> & JSX.IntrinsicElements["a"]) => HTMLAnchorElement;
@@ -0,0 +1,142 @@
1
+ import { default as Schema } from 'schemastery';
2
+ export interface SchemaFormI18n {
3
+ arrayAdd?: string;
4
+ arrayMoveUp?: string;
5
+ arrayMoveDown?: string;
6
+ arrayRemove?: string;
7
+ dictAdd?: string;
8
+ dictRemove?: string;
9
+ rootLabel?: string;
10
+ }
11
+ export declare const DEFAULT_I18N: Required<SchemaFormI18n>;
12
+ export type JSONValue = string | number | boolean | null | JSONValue[] | {
13
+ [k: string]: JSONValue;
14
+ };
15
+ export interface SchemaFormChangeDetail<T = any> {
16
+ path: (string | number)[];
17
+ value: any;
18
+ state: T;
19
+ }
20
+ export type SchemaFormChangeEvent<T = any> = Event & {
21
+ detail: SchemaFormChangeDetail<T>;
22
+ };
23
+ type PathSeg = string | number;
24
+ declare abstract class BaseFieldElement<T = any> extends HTMLElement {
25
+ /** Schemastery 子 schema(泛型) */ protected _schema: Schema<T>;
26
+ /** 字段路径(用于 data-path 与事件)*/ protected _path: PathSeg[];
27
+ /** 当前值(UI 原始值)*/ protected _value: T;
28
+ /** ShadowRoot */ protected $root: ShadowRoot;
29
+ /** 显示标签 */ protected _label?: string;
30
+ /** i18n 文本 */ protected _i18n: Required<SchemaFormI18n>;
31
+ constructor();
32
+ /** 初始化公共容器(带类名与 data-path) */
33
+ protected makeFieldContainer(typeClass: string, description?: string): HTMLDivElement;
34
+ /** 外部设置 schema/path/label/value */
35
+ set schema(v: Schema<T>);
36
+ get schema(): Schema<T>;
37
+ set path(p: PathSeg[]);
38
+ get path(): PathSeg[];
39
+ set label(v: string | undefined);
40
+ get label(): string | undefined;
41
+ set i18n(v: Partial<SchemaFormI18n> | undefined);
42
+ get i18n(): Partial<SchemaFormI18n> | undefined;
43
+ setValue(v: T): void;
44
+ getValue(): T;
45
+ /** 子类实现具体渲染 */
46
+ protected abstract render(): void;
47
+ /** 触发变更事件(冒泡) */
48
+ protected emitChange(value: T): void;
49
+ }
50
+ declare class SchemaFormString extends BaseFieldElement<string | undefined> {
51
+ private $input?;
52
+ protected render(): void;
53
+ }
54
+ declare class SchemaFormNumber extends BaseFieldElement<number | undefined> {
55
+ private $input?;
56
+ protected render(): void;
57
+ }
58
+ declare class SchemaFormBoolean extends BaseFieldElement<boolean> {
59
+ protected render(): void;
60
+ }
61
+ declare class SchemaFormDate extends BaseFieldElement<Date | undefined> {
62
+ private $input?;
63
+ protected render(): void;
64
+ }
65
+ declare class SchemaFormConst extends BaseFieldElement<any> {
66
+ protected render(): void;
67
+ }
68
+ declare class SchemaFormUnion extends BaseFieldElement<any> {
69
+ protected render(): void;
70
+ }
71
+ declare class SchemaFormTuple extends BaseFieldElement<any[]> {
72
+ protected render(): void;
73
+ }
74
+ declare class SchemaFormObject extends BaseFieldElement<Record<string, any>> {
75
+ protected render(): void;
76
+ }
77
+ declare class SchemaFormArray extends BaseFieldElement<any[]> {
78
+ protected render(): void;
79
+ }
80
+ declare class SchemaFormDict extends BaseFieldElement<Record<string, any>> {
81
+ protected render(): void;
82
+ }
83
+ export declare class SchemaForm<T extends any = unknown> extends HTMLElement {
84
+ private _schema;
85
+ private _state;
86
+ private $root;
87
+ private _i18n;
88
+ constructor();
89
+ set schema(value: Schema<T>);
90
+ get schema(): Schema<T>;
91
+ set schemaJSON(value: JSONValue);
92
+ get schemaJSON(): any;
93
+ setData(data: Partial<T>, opts?: {
94
+ validate?: boolean;
95
+ autofix?: boolean;
96
+ }): void;
97
+ getData(opts?: {
98
+ validate?: boolean;
99
+ autofix?: boolean;
100
+ }): T;
101
+ reset(): void;
102
+ refresh(): void;
103
+ set i18n(v: Partial<SchemaFormI18n>);
104
+ get i18n(): Partial<SchemaFormI18n>;
105
+ private render;
106
+ }
107
+ export interface FormInstance<T> {
108
+ /** 底层元素 */ el: SchemaForm<T>;
109
+ /** 设置数据(可选校验)*/ setData: (v: Partial<T>, opts?: {
110
+ validate?: boolean;
111
+ }) => void;
112
+ /** 获取数据(默认校验)*/ getData: (opts?: {
113
+ validate?: boolean;
114
+ }) => T;
115
+ /** 卸载/清理 */ destroy: () => void;
116
+ }
117
+ /**
118
+ * 创建一个带强类型提示的 Schemastery 表单实例。
119
+ * @param schema Schemastery schema(函数调用返回 T)
120
+ * @param options 初始值与 onChange 回调
121
+ */
122
+ export declare function createSchemasteryForm<T = any>(schema: Schema<T>, options?: {
123
+ value?: Partial<T>;
124
+ onChange?: (val: T) => void;
125
+ i18n?: Partial<SchemaFormI18n>;
126
+ }): FormInstance<T>;
127
+ declare global {
128
+ interface HTMLElementTagNameMap {
129
+ 'schema-form': SchemaForm<any>;
130
+ 'schema-form-string': SchemaFormString;
131
+ 'schema-form-number': SchemaFormNumber;
132
+ 'schema-form-boolean': SchemaFormBoolean;
133
+ 'schema-form-date': SchemaFormDate;
134
+ 'schema-form-const': SchemaFormConst;
135
+ 'schema-form-union': SchemaFormUnion;
136
+ 'schema-form-tuple': SchemaFormTuple;
137
+ 'schema-form-object': SchemaFormObject;
138
+ 'schema-form-array': SchemaFormArray;
139
+ 'schema-form-dict': SchemaFormDict;
140
+ }
141
+ }
142
+ export {};
@@ -0,0 +1,8 @@
1
+ export * from './MBox/index';
2
+ export * from './ProgressBar/index';
3
+ export * from './TabView/index';
4
+ export * from './TwinSwapInput';
5
+ export * from './ActionButton';
6
+ export * from './CheckBox';
7
+ export * from './InputBox';
8
+ export * from './RadioBox';
@@ -0,0 +1,79 @@
1
+ import { M as y, R as x } from "../RadioBox-BZFhTEo5.js";
2
+ import { j as i } from "../index-CvhkVj_L.js";
3
+ import { P as L } from "../index-CvhkVj_L.js";
4
+ import { T as A } from "../index-BPsDFq9U.js";
5
+ import { A as N } from "../ActionButton-ByMKIthQ.js";
6
+ import { C as z, I as $ } from "../InputBox-FIzJ-rPN.js";
7
+ const r = "_tabview_zlbug_1", _ = "_labels_container_zlbug_4", b = "_label_zlbug_4", d = "_active_zlbug_32", m = "_contents_container_zlbug_35", t = {
8
+ tabview: r,
9
+ labels_container: _,
10
+ label: b,
11
+ active: d,
12
+ contents_container: m
13
+ };
14
+ console.log(t);
15
+ function h({
16
+ tabs: n = [],
17
+ defaultActiveIndex: l = 0
18
+ }) {
19
+ const c = /* @__PURE__ */ i("div", { className: `ipe-tabView ${t.tabview}`, children: [
20
+ /* @__PURE__ */ i("ul", { className: `ipe-tabView__labels-container ${t.labels_container}`, children: n.map((a) => /* @__PURE__ */ i(f, { name: a.name, children: a.children }, a.name)) }),
21
+ /* @__PURE__ */ i("div", { className: `ipe-tabView__contents ${t.contents_container}`, children: n.map((a) => /* @__PURE__ */ i(p, { name: a.name, children: a.content }, a.name)) })
22
+ ] }), s = c.querySelector(
23
+ `.ipe-tabView__labels-container > .ipe-tabView__label:nth-child(${l + 1})`
24
+ );
25
+ return s && s.click(), c;
26
+ }
27
+ function f({ name: n, children: l }) {
28
+ return /* @__PURE__ */ i(
29
+ "li",
30
+ {
31
+ "data-tab-name": n,
32
+ className: `ipe-tabView__label ${t.label}`,
33
+ onClick: function(c) {
34
+ c.preventDefault();
35
+ const s = this.closest(".ipe-tabView");
36
+ if (!s) return;
37
+ const a = Array.from(s.children).find(
38
+ (e) => e.classList.contains("ipe-tabView__labels")
39
+ )?.children;
40
+ a && Array.from(a).forEach((e) => {
41
+ e.classList.remove(t.active);
42
+ }), this.classList.add(t.active);
43
+ const o = Array.from(s.children).find(
44
+ (e) => e.classList.contains("ipe-tabView__contents")
45
+ )?.children;
46
+ o && Array.from(o).forEach((e) => {
47
+ e instanceof HTMLElement && (e.dataset.tabName === n ? (e.style.display = "", e.classList.add(t.active)) : (e.style.display = "none", e.classList.remove(t.active)));
48
+ });
49
+ },
50
+ children: /* @__PURE__ */ i("a", { children: l || n })
51
+ }
52
+ );
53
+ }
54
+ function p({ name: n, children: l }) {
55
+ return /* @__PURE__ */ i(
56
+ "div",
57
+ {
58
+ "data-tab-name": n,
59
+ className: "ipe-tabView__content-body",
60
+ style: {
61
+ display: "none"
62
+ },
63
+ children: l
64
+ }
65
+ );
66
+ }
67
+ export {
68
+ N as ActionButton,
69
+ z as CheckBox,
70
+ $ as InputBox,
71
+ y as MBox,
72
+ L as ProgressBar,
73
+ x as RadioBox,
74
+ p as TabContent,
75
+ f as TabLabel,
76
+ h as TabView,
77
+ A as TwinSwapInput
78
+ };
79
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/components/TabView/index.tsx"],"sourcesContent":["import { ReactNode } from 'jsx-dom'\r\nimport styles from './styles.module.sass'\r\n\r\nexport interface TabViewLabelOptions {\r\n name: string\r\n children: ReactNode\r\n}\r\n\r\nconsole.log(styles)\r\n\r\nexport function TabView({\r\n tabs = [],\r\n defaultActiveIndex = 0,\r\n}: {\r\n tabs: (TabViewLabelOptions & { content: ReactNode })[]\r\n defaultActiveIndex?: number\r\n}) {\r\n const el = (\r\n <div className={`ipe-tabView ${styles.tabview}`}>\r\n <ul className={`ipe-tabView__labels-container ${styles.labels_container}`}>\r\n {tabs.map((tab) => (\r\n <TabLabel key={tab.name} name={tab.name}>\r\n {tab.children}\r\n </TabLabel>\r\n ))}\r\n </ul>\r\n <div className={`ipe-tabView__contents ${styles.contents_container}`}>\r\n {tabs.map((tab) => (\r\n <TabContent key={tab.name} name={tab.name}>\r\n {tab.content}\r\n </TabContent>\r\n ))}\r\n </div>\r\n </div>\r\n )\r\n\r\n const defaultActiveLabel = el.querySelector<HTMLAnchorElement>(\r\n `.ipe-tabView__labels-container > .ipe-tabView__label:nth-child(${defaultActiveIndex + 1})`\r\n )\r\n if (defaultActiveLabel) {\r\n defaultActiveLabel.click()\r\n }\r\n\r\n return el\r\n}\r\n\r\nexport function TabLabel({ name, children }: { name: string; children: ReactNode }) {\r\n return (\r\n <li\r\n data-tab-name={name}\r\n className={`ipe-tabView__label ${styles.label}`}\r\n onClick={function (e) {\r\n e.preventDefault()\r\n const container = this.closest('.ipe-tabView')\r\n if (!container) return\r\n const labels = Array.from(container.children).find((el) =>\r\n el.classList.contains('ipe-tabView__labels')\r\n )?.children\r\n if (labels) {\r\n Array.from(labels).forEach((label) => {\r\n label.classList.remove(styles.active)\r\n })\r\n }\r\n this.classList.add(styles.active)\r\n const contents = Array.from(container.children).find((el) =>\r\n el.classList.contains('ipe-tabView__contents')\r\n )?.children\r\n if (contents) {\r\n Array.from(contents).forEach((content) => {\r\n if (content instanceof HTMLElement) {\r\n if (content.dataset.tabName === name) {\r\n content.style.display = ''\r\n content.classList.add(styles.active)\r\n } else {\r\n content.style.display = 'none'\r\n content.classList.remove(styles.active)\r\n }\r\n }\r\n })\r\n }\r\n }}\r\n >\r\n <a>{children || name}</a>\r\n </li>\r\n )\r\n}\r\n\r\nexport function TabContent({ name, children }: { name: string; children: ReactNode }) {\r\n return (\r\n <div\r\n data-tab-name={name}\r\n className=\"ipe-tabView__content-body\"\r\n style={{\r\n display: 'none',\r\n }}\r\n >\r\n {children}\r\n </div>\r\n )\r\n}\r\n"],"names":["styles","TabView","tabs","defaultActiveIndex","el","jsxs","jsx","tab","TabLabel","TabContent","defaultActiveLabel","name","children","e","container","labels","label","contents","content"],"mappings":";;;;;;;;;;;;;AAQA,QAAQ,IAAIA,CAAM;AAEX,SAASC,EAAQ;AAAA,EACtB,MAAAC,IAAO,CAAA;AAAA,EACP,oBAAAC,IAAqB;AACvB,GAGG;AACD,QAAMC,IACJC,gBAAAA,EAAC,OAAA,EAAI,WAAW,eAAeL,EAAO,OAAO,IAC3C,UAAA;AAAA,IAAA,gBAAAM,EAAC,MAAA,EAAG,WAAW,iCAAiCN,EAAO,gBAAgB,IACpE,UAAAE,EAAK,IAAI,CAACK,wBACRC,GAAA,EAAwB,MAAMD,EAAI,MAChC,UAAAA,EAAI,YADQA,EAAI,IAEnB,CACD,EAAA,CACH;AAAA,IACA,gBAAAD,EAAC,SAAI,WAAW,yBAAyBN,EAAO,kBAAkB,IAC/D,YAAK,IAAI,CAACO,MACT,gBAAAD,EAACG,GAAA,EAA0B,MAAMF,EAAI,MAClC,YAAI,QAAA,GADUA,EAAI,IAErB,CACD,EAAA,CACH;AAAA,EAAA,GACF,GAGIG,IAAqBN,EAAG;AAAA,IAC5B,kEAAkED,IAAqB,CAAC;AAAA,EAAA;AAE1F,SAAIO,KACFA,EAAmB,MAAA,GAGdN;AACT;AAEO,SAASI,EAAS,EAAE,MAAAG,GAAM,UAAAC,KAAmD;AAClF,SACE,gBAAAN;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,iBAAeK;AAAA,MACf,WAAW,sBAAsBX,EAAO,KAAK;AAAA,MAC7C,SAAS,SAAUa,GAAG;AACpB,QAAAA,EAAE,eAAA;AACF,cAAMC,IAAY,KAAK,QAAQ,cAAc;AAC7C,YAAI,CAACA,EAAW;AAChB,cAAMC,IAAS,MAAM,KAAKD,EAAU,QAAQ,EAAE;AAAA,UAAK,CAACV,MAClDA,EAAG,UAAU,SAAS,qBAAqB;AAAA,QAAA,GAC1C;AACH,QAAIW,KACF,MAAM,KAAKA,CAAM,EAAE,QAAQ,CAACC,MAAU;AACpC,UAAAA,EAAM,UAAU,OAAOhB,EAAO,MAAM;AAAA,QACtC,CAAC,GAEH,KAAK,UAAU,IAAIA,EAAO,MAAM;AAChC,cAAMiB,IAAW,MAAM,KAAKH,EAAU,QAAQ,EAAE;AAAA,UAAK,CAACV,MACpDA,EAAG,UAAU,SAAS,uBAAuB;AAAA,QAAA,GAC5C;AACH,QAAIa,KACF,MAAM,KAAKA,CAAQ,EAAE,QAAQ,CAACC,MAAY;AACxC,UAAIA,aAAmB,gBACjBA,EAAQ,QAAQ,YAAYP,KAC9BO,EAAQ,MAAM,UAAU,IACxBA,EAAQ,UAAU,IAAIlB,EAAO,MAAM,MAEnCkB,EAAQ,MAAM,UAAU,QACxBA,EAAQ,UAAU,OAAOlB,EAAO,MAAM;AAAA,QAG5C,CAAC;AAAA,MAEL;AAAA,MAEA,UAAA,gBAAAM,EAAC,KAAA,EAAG,UAAAM,KAAYD,EAAA,CAAK;AAAA,IAAA;AAAA,EAAA;AAG3B;AAEO,SAASF,EAAW,EAAE,MAAAE,GAAM,UAAAC,KAAmD;AACpF,SACE,gBAAAN;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,iBAAeK;AAAA,MACf,WAAU;AAAA,MACV,OAAO;AAAA,QACL,SAAS;AAAA,MAAA;AAAA,MAGV,UAAAC;AAAA,IAAA;AAAA,EAAA;AAGP;"}