@hanzogui/tauri 8.0.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 (51) hide show
  1. package/dist/cjs/TitleBar.cjs +97 -0
  2. package/dist/cjs/TitleBar.native.js +109 -0
  3. package/dist/cjs/TitleBar.native.js.map +1 -0
  4. package/dist/cjs/index.cjs +41 -0
  5. package/dist/cjs/index.native.js +44 -0
  6. package/dist/cjs/index.native.js.map +1 -0
  7. package/dist/cjs/isTauri.cjs +30 -0
  8. package/dist/cjs/isTauri.native.js +33 -0
  9. package/dist/cjs/isTauri.native.js.map +1 -0
  10. package/dist/cjs/shortcuts.cjs +70 -0
  11. package/dist/cjs/shortcuts.native.js +73 -0
  12. package/dist/cjs/shortcuts.native.js.map +1 -0
  13. package/dist/cjs/system.cjs +65 -0
  14. package/dist/cjs/system.native.js +68 -0
  15. package/dist/cjs/system.native.js.map +1 -0
  16. package/dist/cjs/window.cjs +81 -0
  17. package/dist/cjs/window.native.js +106 -0
  18. package/dist/cjs/window.native.js.map +1 -0
  19. package/dist/esm/TitleBar.mjs +72 -0
  20. package/dist/esm/TitleBar.mjs.map +1 -0
  21. package/dist/esm/TitleBar.native.js +81 -0
  22. package/dist/esm/TitleBar.native.js.map +1 -0
  23. package/dist/esm/index.js +7 -0
  24. package/dist/esm/index.js.map +1 -0
  25. package/dist/esm/index.mjs +7 -0
  26. package/dist/esm/index.mjs.map +1 -0
  27. package/dist/esm/index.native.js +7 -0
  28. package/dist/esm/index.native.js.map +1 -0
  29. package/dist/esm/isTauri.mjs +5 -0
  30. package/dist/esm/isTauri.mjs.map +1 -0
  31. package/dist/esm/isTauri.native.js +5 -0
  32. package/dist/esm/isTauri.native.js.map +1 -0
  33. package/dist/esm/shortcuts.mjs +32 -0
  34. package/dist/esm/shortcuts.mjs.map +1 -0
  35. package/dist/esm/shortcuts.native.js +32 -0
  36. package/dist/esm/shortcuts.native.js.map +1 -0
  37. package/dist/esm/system.mjs +27 -0
  38. package/dist/esm/system.mjs.map +1 -0
  39. package/dist/esm/system.native.js +27 -0
  40. package/dist/esm/system.native.js.map +1 -0
  41. package/dist/esm/window.mjs +44 -0
  42. package/dist/esm/window.mjs.map +1 -0
  43. package/dist/esm/window.native.js +66 -0
  44. package/dist/esm/window.native.js.map +1 -0
  45. package/package.json +53 -0
  46. package/src/TitleBar.tsx +71 -0
  47. package/src/index.ts +13 -0
  48. package/src/isTauri.ts +12 -0
  49. package/src/shortcuts.ts +37 -0
  50. package/src/system.ts +27 -0
  51. package/src/window.ts +51 -0
@@ -0,0 +1,81 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all) __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: true
11
+ });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
16
+ get: () => from[key],
17
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
18
+ });
19
+ }
20
+ return to;
21
+ };
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
23
+ // If the importer is in node compatibility mode or this is not an ESM
24
+ // file that has been converted to a CommonJS file using a Babel-
25
+ // compatible transform (i.e. "__esModule" has not been set), then set
26
+ // "default" to the CommonJS "module.exports" for node compatibility.
27
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
28
+ value: mod,
29
+ enumerable: true
30
+ }) : target, mod));
31
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
32
+ value: true
33
+ }), mod);
34
+ var window_exports = {};
35
+ __export(window_exports, {
36
+ useWindowControls: () => useWindowControls,
37
+ windowControls: () => windowControls
38
+ });
39
+ module.exports = __toCommonJS(window_exports);
40
+ var import_react = require("react");
41
+ var import_isTauri = require("./isTauri.cjs");
42
+ async function currentWindow() {
43
+ if (!(0, import_isTauri.isTauri)()) return null;
44
+ const {
45
+ getCurrentWindow
46
+ } = await import("@tauri-apps/api/window");
47
+ return getCurrentWindow();
48
+ }
49
+ const windowControls = {
50
+ minimize: async () => (await currentWindow())?.minimize(),
51
+ toggleMaximize: async () => (await currentWindow())?.toggleMaximize(),
52
+ close: async () => (await currentWindow())?.close(),
53
+ hide: async () => (await currentWindow())?.hide(),
54
+ startDragging: async () => (await currentWindow())?.startDragging(),
55
+ isMaximized: async () => (await currentWindow())?.isMaximized() ?? false,
56
+ setFullscreen: async v => (await currentWindow())?.setFullscreen(v)
57
+ };
58
+ function useWindowControls() {
59
+ const [isMaximized, setIsMaximized] = (0, import_react.useState)(false);
60
+ (0, import_react.useEffect)(() => {
61
+ if (!(0, import_isTauri.isTauri)()) return;
62
+ let unlisten;
63
+ let active = true;
64
+ (async () => {
65
+ const win = await currentWindow();
66
+ if (!win || !active) return;
67
+ setIsMaximized(await win.isMaximized());
68
+ unlisten = await win.onResized(async () => {
69
+ setIsMaximized(await win.isMaximized());
70
+ });
71
+ })();
72
+ return () => {
73
+ active = false;
74
+ unlisten?.();
75
+ };
76
+ }, []);
77
+ return {
78
+ ...windowControls,
79
+ isMaximized
80
+ };
81
+ }
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all) __defProp(target, name, {
11
+ get: all[name],
12
+ enumerable: true
13
+ });
14
+ };
15
+ var __copyProps = (to, from, except, desc) => {
16
+ if (from && typeof from === "object" || typeof from === "function") {
17
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
18
+ get: () => from[key],
19
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
20
+ });
21
+ }
22
+ return to;
23
+ };
24
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
25
+ // If the importer is in node compatibility mode or this is not an ESM
26
+ // file that has been converted to a CommonJS file using a Babel-
27
+ // compatible transform (i.e. "__esModule" has not been set), then set
28
+ // "default" to the CommonJS "module.exports" for node compatibility.
29
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
30
+ value: mod,
31
+ enumerable: true
32
+ }) : target, mod));
33
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
34
+ value: true
35
+ }), mod);
36
+ var window_exports = {};
37
+ __export(window_exports, {
38
+ useWindowControls: () => useWindowControls,
39
+ windowControls: () => windowControls
40
+ });
41
+ module.exports = __toCommonJS(window_exports);
42
+ var import_react = require("react");
43
+ var import_isTauri = require("./isTauri.native.js");
44
+ async function currentWindow() {
45
+ if (!(0, import_isTauri.isTauri)()) return null;
46
+ var {
47
+ getCurrentWindow
48
+ } = await import("@tauri-apps/api/window");
49
+ return getCurrentWindow();
50
+ }
51
+ var windowControls = {
52
+ minimize: async function () {
53
+ var _this;
54
+ return (_this = await currentWindow()) === null || _this === void 0 ? void 0 : _this.minimize();
55
+ },
56
+ toggleMaximize: async function () {
57
+ var _this;
58
+ return (_this = await currentWindow()) === null || _this === void 0 ? void 0 : _this.toggleMaximize();
59
+ },
60
+ close: async function () {
61
+ var _this;
62
+ return (_this = await currentWindow()) === null || _this === void 0 ? void 0 : _this.close();
63
+ },
64
+ hide: async function () {
65
+ var _this;
66
+ return (_this = await currentWindow()) === null || _this === void 0 ? void 0 : _this.hide();
67
+ },
68
+ startDragging: async function () {
69
+ var _this;
70
+ return (_this = await currentWindow()) === null || _this === void 0 ? void 0 : _this.startDragging();
71
+ },
72
+ isMaximized: async function () {
73
+ var _this;
74
+ var _isMaximized;
75
+ return (_isMaximized = (_this = await currentWindow()) === null || _this === void 0 ? void 0 : _this.isMaximized()) !== null && _isMaximized !== void 0 ? _isMaximized : false;
76
+ },
77
+ setFullscreen: async function (v) {
78
+ var _this;
79
+ return (_this = await currentWindow()) === null || _this === void 0 ? void 0 : _this.setFullscreen(v);
80
+ }
81
+ };
82
+ function useWindowControls() {
83
+ var [isMaximized, setIsMaximized] = (0, import_react.useState)(false);
84
+ (0, import_react.useEffect)(function () {
85
+ if (!(0, import_isTauri.isTauri)()) return;
86
+ var unlisten;
87
+ var active = true;
88
+ (async function () {
89
+ var win = await currentWindow();
90
+ if (!win || !active) return;
91
+ setIsMaximized(await win.isMaximized());
92
+ unlisten = await win.onResized(async function () {
93
+ setIsMaximized(await win.isMaximized());
94
+ });
95
+ })();
96
+ return function () {
97
+ active = false;
98
+ unlisten === null || unlisten === void 0 ? void 0 : unlisten();
99
+ };
100
+ }, []);
101
+ return {
102
+ ...windowControls,
103
+ isMaximized
104
+ };
105
+ }
106
+ //# sourceMappingURL=window.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","window_exports","__export","useWindowControls","windowControls","module","exports","import_react","require","import_isTauri","currentWindow","isTauri","getCurrentWindow","minimize","_this","toggleMaximize","close","hide","startDragging","isMaximized","_isMaximized","setFullscreen","v"],"sources":["../../src/window.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,cAAA;AAAAC,QAAA,CAAAD,cAAA;EAAAE,iBAAA,EAAAA,CAAA,KAAAA,iBAAA;EAAAC,cAAA,EAAAA,CAAA,KAAAA;AAAA;AAAAC,MAAA,CAAAC,OAAA,GAAAV,YAAoC,CAAAK,cAAA;AACpC,IAAAM,YAAA,GAAAC,OAAwB;AAOxB,IAAAC,cAAe,GAAAD,OAAA,sBAAgB;AAC7B,eAAKE,cAAA;EACL,MAAM,GAAED,cAAA,CAAAE,OAAqB,KAAM,OAAO;EAC1C;IAAAC;EAAO,CAAiB;EAC1B,OAAAA,gBAAA;AAEO;AAAuB,IAC5BR,cAAU;EACVS,QAAA,iBAAAA,CAAA,EAAgB;IAChB,IAAAC,KAAO;IACP,OAAM,CAAAA,KAAA,SAAaJ,aAAM,EAAc,MAAI,IAAK,IAAAI,KAAA,uBAAAA,KAAA,CAAAD,QAAA;EAChD;EACAE,cAAa,iBAAAA,CAAA,EAAmB;IAChC,IAAAD,KAAA;IACF,QAAAA,KAAA,SAAAJ,aAAA,gBAAAI,KAAA,uBAAAA,KAAA,CAAAC,cAAA;EAMO;EACLC,KAAA,EAAO,eAAAA,CAAA,EAAa;IAEpB,IAAAF,KAAA;IACE,OAAI,CAAAA,KAAC,SAAAJ,aAAW,gBAAAI,KAAA,uBAAAA,KAAA,CAAAE,KAAA;EAChB;EACAC,IAAA,EAAI,eAAAA,CAAA,EAAS;IACZ,IAACH,KAAA;IACA,QAAMA,KAAA,GAAM,MAAMJ,aAAc,gBAAAI,KAAA,uBAAAA,KAAA,CAAAG,IAAA;EAChC;EACAC,aAAA,iBAAAA,CAAA,EAAyB;IACzB,IAAAJ,KAAA;IACE,QAAAA,KAAA,SAAeJ,aAAU,QAAa,QAAAI,KAAA,uBAAAA,KAAA,CAAAI,aAAA;EAAA;EACvCC,WACA,iBAAAA,CAAA;IACH,IAAAL,KAAO;IACL,IAAAM,YAAS;IACT,QAAAA,YAAW,IAAAN,KAAA,SAAAJ,aAAA,gBAAAI,KAAA,uBAAAA,KAAA,CAAAK,WAAA,gBAAAC,YAAA,cAAAA,YAAA;EAAA;EAEfC,aAAK,iBAAAA,CAAAC,CAAA;IAEL,IAAAR,KAAS;IACX,QAAAA,KAAA,SAAAJ,aAAA,gBAAAI,KAAA,uBAAAA,KAAA,CAAAO,aAAA,CAAAC,CAAA","ignoreList":[]}
@@ -0,0 +1,72 @@
1
+ import { Text, XStack, styled } from "@hanzo/gui";
2
+ import { useWindowControls } from "./window.mjs";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ const Control = styled(XStack, {
5
+ width: 46,
6
+ height: 32,
7
+ alignItems: "center",
8
+ justifyContent: "center",
9
+ cursor: "pointer",
10
+ hoverStyle: {
11
+ backgroundColor: "$color4"
12
+ },
13
+ pressStyle: {
14
+ backgroundColor: "$color5"
15
+ },
16
+ animation: "quick"
17
+ });
18
+ const Glyph = styled(Text, {
19
+ fontFamily: "$mono",
20
+ fontSize: 13,
21
+ lineHeight: 13,
22
+ color: "$color11"
23
+ });
24
+ function TitleBar({
25
+ title = ""
26
+ }) {
27
+ const {
28
+ minimize,
29
+ toggleMaximize,
30
+ close
31
+ } = useWindowControls();
32
+ return /* @__PURE__ */jsxs(XStack, {
33
+ "data-tauri-drag-region": true,
34
+ height: 40,
35
+ alignItems: "center",
36
+ backgroundColor: "$background",
37
+ borderBottomWidth: 1,
38
+ borderBottomColor: "$borderColor",
39
+ userSelect: "none",
40
+ children: [/* @__PURE__ */jsx(Text, {
41
+ flex: 1,
42
+ paddingLeft: "$3",
43
+ fontFamily: "$body",
44
+ fontSize: 13,
45
+ color: "$color11",
46
+ "data-tauri-drag-region": true,
47
+ children: title
48
+ }), /* @__PURE__ */jsxs(XStack, {
49
+ children: [/* @__PURE__ */jsx(Control, {
50
+ onPress: () => minimize(),
51
+ children: /* @__PURE__ */jsx(Glyph, {
52
+ children: "\u2014"
53
+ })
54
+ }), /* @__PURE__ */jsx(Control, {
55
+ onPress: () => toggleMaximize(),
56
+ children: /* @__PURE__ */jsx(Glyph, {
57
+ children: "\u25A2"
58
+ })
59
+ }), /* @__PURE__ */jsx(Control, {
60
+ onPress: () => close(),
61
+ hoverStyle: {
62
+ backgroundColor: "$red9"
63
+ },
64
+ children: /* @__PURE__ */jsx(Glyph, {
65
+ children: "\u2715"
66
+ })
67
+ })]
68
+ })]
69
+ });
70
+ }
71
+ export { TitleBar };
72
+ //# sourceMappingURL=TitleBar.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Text","XStack","styled","useWindowControls","jsx","jsxs","Control","width","height","alignItems","justifyContent","cursor","hoverStyle","backgroundColor","pressStyle","animation","Glyph","fontFamily","fontSize","lineHeight","color","TitleBar","title","minimize","toggleMaximize","close","borderBottomWidth","borderBottomColor","userSelect","children","flex","paddingLeft","onPress"],"sources":["../../src/TitleBar.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,IAAA,EAAMC,MAAA,EAAQC,MAAA,QAAc;AACrC,SAASC,iBAAA,QAAyB;AA4C5B,SAAAC,GAAA,EAYAC,IAAA,QAZA;AApCN,MAAMC,OAAA,GAAUJ,MAAA,CAAOD,MAAA,EAAQ;EAC7BM,KAAA,EAAO;EACPC,MAAA,EAAQ;EACRC,UAAA,EAAY;EACZC,cAAA,EAAgB;EAChBC,MAAA,EAAQ;EACRC,UAAA,EAAY;IAAEC,eAAA,EAAiB;EAAU;EACzCC,UAAA,EAAY;IAAED,eAAA,EAAiB;EAAU;EACzCE,SAAA,EAAW;AACb,CAAC;AAED,MAAMC,KAAA,GAAQd,MAAA,CAAOF,IAAA,EAAM;EACzBiB,UAAA,EAAY;EACZC,QAAA,EAAU;EACVC,UAAA,EAAY;EACZC,KAAA,EAAO;AACT,CAAC;AAMM,SAASC,SAAS;EAAEC,KAAA,GAAQ;AAAG,GAAkB;EACtD,MAAM;IAAEC,QAAA;IAAUC,cAAA;IAAgBC;EAAM,IAAItB,iBAAA,CAAkB;EAE9D,OACE,eAAAE,IAAA,CAACJ,MAAA;IAEC,0BAAsB;IACtBO,MAAA,EAAQ;IACRC,UAAA,EAAW;IACXI,eAAA,EAAgB;IAChBa,iBAAA,EAAmB;IACnBC,iBAAA,EAAkB;IAClBC,UAAA,EAAW;IAEXC,QAAA,kBAAAzB,GAAA,CAACJ,IAAA;MACC8B,IAAA,EAAM;MACNC,WAAA,EAAY;MACZd,UAAA,EAAW;MACXC,QAAA,EAAU;MACVE,KAAA,EAAM;MAEN,0BAAsB;MAErBS,QAAA,EAAAP;IAAA,CACH,GAEA,eAAAjB,IAAA,CAACJ,MAAA;MACC4B,QAAA,kBAAAzB,GAAA,CAACE,OAAA;QAAQ0B,OAAA,EAASA,CAAA,KAAMT,QAAA,CAAS;QAC/BM,QAAA,iBAAAzB,GAAA,CAACY,KAAA;UAAMa,QAAA;QAAA,CAAC;MAAA,CACV,GACA,eAAAzB,GAAA,CAACE,OAAA;QAAQ0B,OAAA,EAASA,CAAA,KAAMR,cAAA,CAAe;QACrCK,QAAA,iBAAAzB,GAAA,CAACY,KAAA;UAAMa,QAAA;QAAA,CAAC;MAAA,CACV,GACA,eAAAzB,GAAA,CAACE,OAAA;QAAQ0B,OAAA,EAASA,CAAA,KAAMP,KAAA,CAAM;QAAGb,UAAA,EAAY;UAAEC,eAAA,EAAiB;QAAQ;QACtEgB,QAAA,iBAAAzB,GAAA,CAACY,KAAA;UAAMa,QAAA;QAAA,CAAC;MAAA,CACV;IAAA,CACF;EAAA,CACF;AAEJ","ignoreList":[]}
@@ -0,0 +1,81 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Text, XStack, styled } from "@hanzo/gui";
3
+ import { useWindowControls } from "./window.native.js";
4
+ var Control = styled(XStack, {
5
+ width: 46,
6
+ height: 32,
7
+ alignItems: "center",
8
+ justifyContent: "center",
9
+ cursor: "pointer",
10
+ hoverStyle: {
11
+ backgroundColor: "$color4"
12
+ },
13
+ pressStyle: {
14
+ backgroundColor: "$color5"
15
+ },
16
+ animation: "quick"
17
+ });
18
+ var Glyph = styled(Text, {
19
+ fontFamily: "$mono",
20
+ fontSize: 13,
21
+ lineHeight: 13,
22
+ color: "$color11"
23
+ });
24
+ function TitleBar(param) {
25
+ var {
26
+ title = ""
27
+ } = param;
28
+ var {
29
+ minimize,
30
+ toggleMaximize,
31
+ close
32
+ } = useWindowControls();
33
+ return /* @__PURE__ */_jsxs(XStack, {
34
+ // @ts-expect-error — Tauri drag region is a raw DOM attribute (web/webview)
35
+ "data-tauri-drag-region": true,
36
+ height: 40,
37
+ alignItems: "center",
38
+ backgroundColor: "$background",
39
+ borderBottomWidth: 1,
40
+ borderBottomColor: "$borderColor",
41
+ userSelect: "none",
42
+ children: [/* @__PURE__ */_jsx(Text, {
43
+ flex: 1,
44
+ paddingLeft: "$3",
45
+ fontFamily: "$body",
46
+ fontSize: 13,
47
+ color: "$color11",
48
+ // @ts-expect-error — raw DOM attribute so clicks on the title still drag
49
+ "data-tauri-drag-region": true,
50
+ children: title
51
+ }), /* @__PURE__ */_jsxs(XStack, {
52
+ children: [/* @__PURE__ */_jsx(Control, {
53
+ onPress: function () {
54
+ return minimize();
55
+ },
56
+ children: /* @__PURE__ */_jsx(Glyph, {
57
+ children: "\u2014"
58
+ })
59
+ }), /* @__PURE__ */_jsx(Control, {
60
+ onPress: function () {
61
+ return toggleMaximize();
62
+ },
63
+ children: /* @__PURE__ */_jsx(Glyph, {
64
+ children: "\u25A2"
65
+ })
66
+ }), /* @__PURE__ */_jsx(Control, {
67
+ onPress: function () {
68
+ return close();
69
+ },
70
+ hoverStyle: {
71
+ backgroundColor: "$red9"
72
+ },
73
+ children: /* @__PURE__ */_jsx(Glyph, {
74
+ children: "\u2715"
75
+ })
76
+ })]
77
+ })]
78
+ });
79
+ }
80
+ export { TitleBar };
81
+ //# sourceMappingURL=TitleBar.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["jsx","_jsx","jsxs","_jsxs","Text","XStack","styled","useWindowControls","Control","width","height","alignItems","justifyContent","cursor","hoverStyle","backgroundColor","pressStyle","animation","Glyph","fontFamily","fontSize","lineHeight","color","TitleBar","param","title","minimize","toggleMaximize","close","borderBottomWidth","borderBottomColor","userSelect","children","flex","paddingLeft","onPress"],"sources":["../../src/TitleBar.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,GAAA,IAAMC,IAAA,EAAAC,IAAQ,IAAAC,KAAA,QAAc;AACrC,SAASC,IAAA,EAAAC,MAAA,EAAAC,MAAA,QAAyB;AA4C5B,SAAAC,iBAAA;AApCN,IAAAC,OAAM,GAAAF,MAAU,CAAAD,MAAO;EACrBI,KAAA,EAAO;EACPC,MAAA,EAAQ;EACRC,UAAA,EAAY;EACZC,cAAA,EAAgB;EAChBC,MAAA,EAAQ;EACRC,UAAA,EAAY;IACZC,eAAc;EACd;EACDC,UAAA;IAEDD,eAAc,EAAO;EACnB;EACAE,SAAA,EAAU;AAAA,EACV;AAAY,IACZC,KAAO,GAAAZ,MAAA,CAAAF,IAAA;EACRe,UAAA;EAMMC,QAAS;EACdC,UAAQ;EAERC,KAAA,EACE;AAAA;AAAC,SAAAC,SAAAC,KAAA;EAAA,IAEC;IAAAC,KAAA;EAAA,IAAAD,KAAA;EAAsB,IACtB;IAAAE,QAAQ;IAAAC,cAAA;IAAAC;EAAA,IAAArB,iBAAA;EAAA,OACR,eAAWJ,KAAA,CAAAE,MAAA;IAAA;IACK,wBACG;IAAAK,MACnB;IAAkBC,UAClB,UAAW;IAAAI,eAEX;IAAAc,iBAAA;IAAAC,iBAAC;IAAAC,UAAA;IAAAC,QACC,GAAM,eACN/B,IAAY,CAAAG,IAAA;MAAA6B,IACZ;MAAWC,WACX,MAAU;MAAAf,UACV,EAAM;MAAAC,QAEN;MAAsBE,KAErB;MAAA;MACH;MAEAU,QAAA,EAAAP;IACE,IAEA,eACAtB,KAAA,CAAAE,MAAC;MAED2B,QACA,GAEA,eACF/B,IAAA,CAAAO,OAAA;QAAA2B,OAAA,WAAAA,CAAA;UAAA,OAAAT,QAAA;QACF;QAEJM,QAAA,iBAAA/B,IAAA,CAAAiB,KAAA","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ import { isTauri } from "./isTauri.mjs";
2
+ import { windowControls, useWindowControls } from "./window.mjs";
3
+ import { registerShortcut, unregisterShortcut, useGlobalShortcut } from "./shortcuts.mjs";
4
+ import { readTextFile, writeTextFile, openExternal } from "./system.mjs";
5
+ import { TitleBar } from "./TitleBar.mjs";
6
+ export { TitleBar, isTauri, openExternal, readTextFile, registerShortcut, unregisterShortcut, useGlobalShortcut, useWindowControls, windowControls, writeTextFile };
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isTauri","windowControls","useWindowControls","registerShortcut","unregisterShortcut","useGlobalShortcut","readTextFile","writeTextFile","openExternal","TitleBar"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAQA,SAASA,OAAA,QAAe;AACxB,SAASC,cAAA,EAAgBC,iBAAA,QAAyB;AAClD,SAASC,gBAAA,EAAkBC,kBAAA,EAAoBC,iBAAA,QAAyB;AACxE,SAASC,YAAA,EAAcC,aAAA,EAAeC,YAAA,QAAoB;AAC1D,SAASC,QAAA,QAAoC","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ import { isTauri } from "./isTauri.mjs";
2
+ import { windowControls, useWindowControls } from "./window.mjs";
3
+ import { registerShortcut, unregisterShortcut, useGlobalShortcut } from "./shortcuts.mjs";
4
+ import { readTextFile, writeTextFile, openExternal } from "./system.mjs";
5
+ import { TitleBar } from "./TitleBar.mjs";
6
+ export { TitleBar, isTauri, openExternal, readTextFile, registerShortcut, unregisterShortcut, useGlobalShortcut, useWindowControls, windowControls, writeTextFile };
7
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isTauri","windowControls","useWindowControls","registerShortcut","unregisterShortcut","useGlobalShortcut","readTextFile","writeTextFile","openExternal","TitleBar"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAQA,SAASA,OAAA,QAAe;AACxB,SAASC,cAAA,EAAgBC,iBAAA,QAAyB;AAClD,SAASC,gBAAA,EAAkBC,kBAAA,EAAoBC,iBAAA,QAAyB;AACxE,SAASC,YAAA,EAAcC,aAAA,EAAeC,YAAA,QAAoB;AAC1D,SAASC,QAAA,QAAoC","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ import { isTauri } from "./isTauri.native.js";
2
+ import { windowControls, useWindowControls } from "./window.native.js";
3
+ import { registerShortcut, unregisterShortcut, useGlobalShortcut } from "./shortcuts.native.js";
4
+ import { readTextFile, writeTextFile, openExternal } from "./system.native.js";
5
+ import { TitleBar } from "./TitleBar.native.js";
6
+ export { TitleBar, isTauri, openExternal, readTextFile, registerShortcut, unregisterShortcut, useGlobalShortcut, useWindowControls, windowControls, writeTextFile };
7
+ //# sourceMappingURL=index.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isTauri","windowControls","useWindowControls","registerShortcut","unregisterShortcut","useGlobalShortcut","readTextFile","writeTextFile","openExternal","TitleBar"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAQA,SAASA,OAAA,QAAe;AACxB,SAASC,cAAA,EAAgBC,iBAAA,QAAyB;AAClD,SAASC,gBAAA,EAAkBC,kBAAA,EAAoBC,iBAAA,QAAyB;AACxE,SAASC,YAAA,EAAcC,aAAA,EAAeC,YAAA,QAAoB;AAC1D,SAASC,QAAA,QAAoC","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ function isTauri() {
2
+ return typeof window !== "undefined" && (!!window.__TAURI_INTERNALS__ || window.isTauri === true);
3
+ }
4
+ export { isTauri };
5
+ //# sourceMappingURL=isTauri.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isTauri","window","__TAURI_INTERNALS__"],"sources":["../../src/isTauri.ts"],"sourcesContent":[null],"mappings":"AAMO,SAASA,QAAA,EAAmB;EACjC,OACE,OAAOC,MAAA,KAAW,gBACjB,CAAC,CAAEA,MAAA,CAAeC,mBAAA,IAAwBD,MAAA,CAAeD,OAAA,KAAY;AAE1E","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ function isTauri() {
2
+ return typeof window !== "undefined" && (!!window.__TAURI_INTERNALS__ || window.isTauri === true);
3
+ }
4
+ export { isTauri };
5
+ //# sourceMappingURL=isTauri.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isTauri","window","__TAURI_INTERNALS__"],"sources":["../../src/isTauri.ts"],"sourcesContent":[null],"mappings":"AAMO,SAASA,QAAA,EAAmB;EACjC,OACE,OAAOC,MAAA,KAAW,gBACjB,CAAC,CAAEA,MAAA,CAAeC,mBAAA,IAAwBD,MAAA,CAAeD,OAAA,KAAY;AAE1E","ignoreList":[]}
@@ -0,0 +1,32 @@
1
+ import { useEffect } from "react";
2
+ import { isTauri } from "./isTauri.mjs";
3
+ async function registerShortcut(accelerator, handler) {
4
+ if (!isTauri()) return;
5
+ const {
6
+ register
7
+ } = await import("@tauri-apps/plugin-global-shortcut");
8
+ await register(accelerator, event => {
9
+ if (event.state === "Pressed") handler();
10
+ });
11
+ }
12
+ async function unregisterShortcut(accelerator) {
13
+ if (!isTauri()) return;
14
+ const {
15
+ unregister
16
+ } = await import("@tauri-apps/plugin-global-shortcut");
17
+ await unregister(accelerator);
18
+ }
19
+ function useGlobalShortcut(accelerator, handler) {
20
+ useEffect(() => {
21
+ if (!isTauri()) return;
22
+ let cancelled = false;
23
+ registerShortcut(accelerator, handler).catch(() => {});
24
+ return () => {
25
+ cancelled = true;
26
+ void cancelled;
27
+ unregisterShortcut(accelerator).catch(() => {});
28
+ };
29
+ }, [accelerator, handler]);
30
+ }
31
+ export { registerShortcut, unregisterShortcut, useGlobalShortcut };
32
+ //# sourceMappingURL=shortcuts.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","isTauri","registerShortcut","accelerator","handler","register","event","state","unregisterShortcut","unregister","useGlobalShortcut","cancelled","catch"],"sources":["../../src/shortcuts.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,SAAA,QAAiB;AAC1B,SAASC,OAAA,QAAe;AAMxB,eAAsBC,iBACpBC,WAAA,EACAC,OAAA,EACe;EACf,IAAI,CAACH,OAAA,CAAQ,GAAG;EAChB,MAAM;IAAEI;EAAS,IAAI,MAAM,OAAO,oCAAoC;EACtE,MAAMA,QAAA,CAASF,WAAA,EAAcG,KAAA,IAAU;IACrC,IAAIA,KAAA,CAAMC,KAAA,KAAU,WAAWH,OAAA,CAAQ;EACzC,CAAC;AACH;AAEA,eAAsBI,mBAAmBL,WAAA,EAAoC;EAC3E,IAAI,CAACF,OAAA,CAAQ,GAAG;EAChB,MAAM;IAAEQ;EAAW,IAAI,MAAM,OAAO,oCAAoC;EACxE,MAAMA,UAAA,CAAWN,WAAW;AAC9B;AAGO,SAASO,kBAAkBP,WAAA,EAAqBC,OAAA,EAAqB;EAC1EJ,SAAA,CAAU,MAAM;IACd,IAAI,CAACC,OAAA,CAAQ,GAAG;IAChB,IAAIU,SAAA,GAAY;IAChBT,gBAAA,CAAiBC,WAAA,EAAaC,OAAO,EAAEQ,KAAA,CAAM,MAAM,CAAC,CAAC;IACrD,OAAO,MAAM;MACXD,SAAA,GAAY;MACZ,KAAKA,SAAA;MACLH,kBAAA,CAAmBL,WAAW,EAAES,KAAA,CAAM,MAAM,CAAC,CAAC;IAChD;EACF,GAAG,CAACT,WAAA,EAAaC,OAAO,CAAC;AAC3B","ignoreList":[]}
@@ -0,0 +1,32 @@
1
+ import { useEffect } from "react";
2
+ import { isTauri } from "./isTauri.native.js";
3
+ async function registerShortcut(accelerator, handler) {
4
+ if (!isTauri()) return;
5
+ var {
6
+ register
7
+ } = await import("@tauri-apps/plugin-global-shortcut");
8
+ await register(accelerator, function (event) {
9
+ if (event.state === "Pressed") handler();
10
+ });
11
+ }
12
+ async function unregisterShortcut(accelerator) {
13
+ if (!isTauri()) return;
14
+ var {
15
+ unregister
16
+ } = await import("@tauri-apps/plugin-global-shortcut");
17
+ await unregister(accelerator);
18
+ }
19
+ function useGlobalShortcut(accelerator, handler) {
20
+ useEffect(function () {
21
+ if (!isTauri()) return;
22
+ var cancelled = false;
23
+ registerShortcut(accelerator, handler).catch(function () {});
24
+ return function () {
25
+ cancelled = true;
26
+ void cancelled;
27
+ unregisterShortcut(accelerator).catch(function () {});
28
+ };
29
+ }, [accelerator, handler]);
30
+ }
31
+ export { registerShortcut, unregisterShortcut, useGlobalShortcut };
32
+ //# sourceMappingURL=shortcuts.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","isTauri","registerShortcut","accelerator","handler","register","event","state","unregisterShortcut","unregister","useGlobalShortcut","cancelled","catch"],"sources":["../../src/shortcuts.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,SAAA,QAAiB;AAC1B,SAASC,OAAA,QAAe;AAMxB,eAAsBC,iBACpBC,WAAA,EACAC,OAAA,EACe;EACf,IAAI,CAACH,OAAA,CAAQ,GAAG;EAChB;IAAMI;EAAE,IAAS,MAAI,MAAM,qCAAO;EAClC,MAAMA,QAAA,CAASF,WAAA,EAAa,UAACG,KAAU;IACrC,IAAIA,KAAA,CAAMC,KAAA,KAAU,WAAWH,OAAA,CAAQ;EACzC,CAAC;AACH;AAEA,eAAsBI,mBAAmBL,WAAA,EAAoC;EAC3E,IAAI,CAACF,OAAA,CAAQ,GAAG;EAChB;IAAMQ;EAAE,IAAW,MAAI,MAAM,qCAAO;EACpC,MAAMA,UAAA,CAAWN,WAAW;AAC9B;AAGO,SAASO,kBAAkBP,WAAA,EAAqBC,OAAA,EAAqB;EAC1EJ,SAAA,CAAU,YAAM;IACd,IAAI,CAACC,OAAA,CAAQ,GAAG;IAChB,IAAIU,SAAA,GAAY;IAChBT,gBAAA,CAAiBC,WAAA,EAAaC,OAAO,EAAEQ,KAAA,CAAM,YAAM,CAAC,CAAC;IACrD,OAAO,YAAM;MACXD,SAAA,GAAY;MACZ,KAAKA,SAAA;MACLH,kBAAA,CAAmBL,WAAW,EAAES,KAAA,CAAM,YAAM,CAAC,CAAC;IAChD;EACF,GAAG,CACLT,WAAA,E","ignoreList":[]}
@@ -0,0 +1,27 @@
1
+ import { isTauri } from "./isTauri.mjs";
2
+ async function readTextFile(path) {
3
+ if (!isTauri()) throw new Error("readTextFile is only available under Tauri");
4
+ const {
5
+ readTextFile: readTextFile2
6
+ } = await import("@tauri-apps/plugin-fs");
7
+ return readTextFile2(path);
8
+ }
9
+ async function writeTextFile(path, contents) {
10
+ if (!isTauri()) throw new Error("writeTextFile is only available under Tauri");
11
+ const {
12
+ writeTextFile: writeTextFile2
13
+ } = await import("@tauri-apps/plugin-fs");
14
+ return writeTextFile2(path, contents);
15
+ }
16
+ async function openExternal(url) {
17
+ if (!isTauri()) {
18
+ if (typeof window !== "undefined") window.open(url, "_blank", "noopener");
19
+ return;
20
+ }
21
+ const {
22
+ open
23
+ } = await import("@tauri-apps/plugin-shell");
24
+ await open(url);
25
+ }
26
+ export { openExternal, readTextFile, writeTextFile };
27
+ //# sourceMappingURL=system.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isTauri","readTextFile","path","Error","readTextFile2","writeTextFile","contents","writeTextFile2","openExternal","url","window","open"],"sources":["../../src/system.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,OAAA,QAAe;AAMxB,eAAsBC,aAAaC,IAAA,EAA+B;EAChE,IAAI,CAACF,OAAA,CAAQ,GAAG,MAAM,IAAIG,KAAA,CAAM,4CAA4C;EAC5E,MAAM;IAAEF,YAAA,EAAAG;EAAa,IAAI,MAAM,OAAO,uBAAuB;EAC7D,OAAOH,aAAA,CAAaC,IAAI;AAC1B;AAEA,eAAsBG,cAAcH,IAAA,EAAcI,QAAA,EAAiC;EACjF,IAAI,CAACN,OAAA,CAAQ,GAAG,MAAM,IAAIG,KAAA,CAAM,6CAA6C;EAC7E,MAAM;IAAEE,aAAA,EAAAE;EAAc,IAAI,MAAM,OAAO,uBAAuB;EAC9D,OAAOF,cAAA,CAAcH,IAAA,EAAMI,QAAQ;AACrC;AAGA,eAAsBE,aAAaC,GAAA,EAA4B;EAC7D,IAAI,CAACT,OAAA,CAAQ,GAAG;IACd,IAAI,OAAOU,MAAA,KAAW,aAAaA,MAAA,CAAOC,IAAA,CAAKF,GAAA,EAAK,UAAU,UAAU;IACxE;EACF;EACA,MAAM;IAAEE;EAAK,IAAI,MAAM,OAAO,0BAA0B;EACxD,MAAMA,IAAA,CAAKF,GAAG;AAChB","ignoreList":[]}
@@ -0,0 +1,27 @@
1
+ import { isTauri } from "./isTauri.native.js";
2
+ async function readTextFile(path) {
3
+ if (!isTauri()) throw new Error("readTextFile is only available under Tauri");
4
+ var {
5
+ readTextFile: readTextFile2
6
+ } = await import("@tauri-apps/plugin-fs");
7
+ return readTextFile2(path);
8
+ }
9
+ async function writeTextFile(path, contents) {
10
+ if (!isTauri()) throw new Error("writeTextFile is only available under Tauri");
11
+ var {
12
+ writeTextFile: writeTextFile2
13
+ } = await import("@tauri-apps/plugin-fs");
14
+ return writeTextFile2(path, contents);
15
+ }
16
+ async function openExternal(url) {
17
+ if (!isTauri()) {
18
+ if (typeof window !== "undefined") window.open(url, "_blank", "noopener");
19
+ return;
20
+ }
21
+ var {
22
+ open
23
+ } = await import("@tauri-apps/plugin-shell");
24
+ await open(url);
25
+ }
26
+ export { openExternal, readTextFile, writeTextFile };
27
+ //# sourceMappingURL=system.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isTauri","readTextFile","path","Error","readTextFile2","writeTextFile","contents","writeTextFile2","openExternal","url","window","open"],"sources":["../../src/system.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,OAAA,QAAe;AAMxB,eAAsBC,aAAaC,IAAA,EAA+B;EAChE,IAAI,CAACF,OAAA,CAAQ,GAAG,MAAM,IAAIG,KAAA,CAAM,4CAA4C;EAC5E;IAAMF,YAAE,EAAAG;EAAA,IAAa,MAAI,MAAM,wBAAO;EACtC,OAAOH,aAAA,CAAaC,IAAI;AAC1B;AAEA,eAAsBG,cAAcH,IAAA,EAAcI,QAAA,EAAiC;EACjF,IAAI,CAACN,OAAA,CAAQ,GAAG,MAAM,IAAIG,KAAA,CAAM,6CAA6C;EAC7E;IAAME,aAAE,EAAAE;EAAA,IAAc,MAAI,MAAM,wBAAO;EACvC,OAAOF,cAAA,CAAcH,IAAA,EAAMI,QAAQ;AACrC;AAGA,eAAsBE,aAAaC,GAAA,EAA4B;EAC7D,IAAI,CAACT,OAAA,CAAQ,GAAG;IACd,IAAI,OAAOU,MAAA,KAAW,aAAaA,MAAA,CAAOC,IAAA,CAAKF,GAAA,EAAK,UAAU,UAAU;IACxE;EACF;EACA;IAAME;EAAE,IAAK,MAAI,MAAM,2BAAO;EAC9B,MAAMA,IAAA,CAAKF,GAAG;AAChB","ignoreList":[]}
@@ -0,0 +1,44 @@
1
+ import { useEffect, useState } from "react";
2
+ import { isTauri } from "./isTauri.mjs";
3
+ async function currentWindow() {
4
+ if (!isTauri()) return null;
5
+ const {
6
+ getCurrentWindow
7
+ } = await import("@tauri-apps/api/window");
8
+ return getCurrentWindow();
9
+ }
10
+ const windowControls = {
11
+ minimize: async () => (await currentWindow())?.minimize(),
12
+ toggleMaximize: async () => (await currentWindow())?.toggleMaximize(),
13
+ close: async () => (await currentWindow())?.close(),
14
+ hide: async () => (await currentWindow())?.hide(),
15
+ startDragging: async () => (await currentWindow())?.startDragging(),
16
+ isMaximized: async () => (await currentWindow())?.isMaximized() ?? false,
17
+ setFullscreen: async v => (await currentWindow())?.setFullscreen(v)
18
+ };
19
+ function useWindowControls() {
20
+ const [isMaximized, setIsMaximized] = useState(false);
21
+ useEffect(() => {
22
+ if (!isTauri()) return;
23
+ let unlisten;
24
+ let active = true;
25
+ (async () => {
26
+ const win = await currentWindow();
27
+ if (!win || !active) return;
28
+ setIsMaximized(await win.isMaximized());
29
+ unlisten = await win.onResized(async () => {
30
+ setIsMaximized(await win.isMaximized());
31
+ });
32
+ })();
33
+ return () => {
34
+ active = false;
35
+ unlisten?.();
36
+ };
37
+ }, []);
38
+ return {
39
+ ...windowControls,
40
+ isMaximized
41
+ };
42
+ }
43
+ export { useWindowControls, windowControls };
44
+ //# sourceMappingURL=window.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useState","isTauri","currentWindow","getCurrentWindow","windowControls","minimize","toggleMaximize","close","hide","startDragging","isMaximized","setFullscreen","v","useWindowControls","setIsMaximized","unlisten","active","win","onResized"],"sources":["../../src/window.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,SAAA,EAAWC,QAAA,QAAgB;AACpC,SAASC,OAAA,QAAe;AAOxB,eAAeC,cAAA,EAAgB;EAC7B,IAAI,CAACD,OAAA,CAAQ,GAAG,OAAO;EACvB,MAAM;IAAEE;EAAiB,IAAI,MAAM,OAAO,wBAAwB;EAClE,OAAOA,gBAAA,CAAiB;AAC1B;AAEO,MAAMC,cAAA,GAAiB;EAC5BC,QAAA,EAAU,MAAAA,CAAA,MAAa,MAAMH,aAAA,CAAc,IAAIG,QAAA,CAAS;EACxDC,cAAA,EAAgB,MAAAA,CAAA,MAAa,MAAMJ,aAAA,CAAc,IAAII,cAAA,CAAe;EACpEC,KAAA,EAAO,MAAAA,CAAA,MAAa,MAAML,aAAA,CAAc,IAAIK,KAAA,CAAM;EAClDC,IAAA,EAAM,MAAAA,CAAA,MAAa,MAAMN,aAAA,CAAc,IAAIM,IAAA,CAAK;EAChDC,aAAA,EAAe,MAAAA,CAAA,MAAa,MAAMP,aAAA,CAAc,IAAIO,aAAA,CAAc;EAClEC,WAAA,EAAa,MAAAA,CAAA,MAAa,MAAMR,aAAA,CAAc,IAAIQ,WAAA,CAAY,KAAK;EACnEC,aAAA,EAAe,MAAOC,CAAA,KAAgB,MAAMV,aAAA,CAAc,IAAIS,aAAA,CAAcC,CAAC;AAC/E;AAMO,SAASC,kBAAA,EAAoB;EAClC,MAAM,CAACH,WAAA,EAAaI,cAAc,IAAId,QAAA,CAAS,KAAK;EAEpDD,SAAA,CAAU,MAAM;IACd,IAAI,CAACE,OAAA,CAAQ,GAAG;IAChB,IAAIc,QAAA;IACJ,IAAIC,MAAA,GAAS;IACZ,CAAC,YAAY;MACZ,MAAMC,GAAA,GAAM,MAAMf,aAAA,CAAc;MAChC,IAAI,CAACe,GAAA,IAAO,CAACD,MAAA,EAAQ;MACrBF,cAAA,CAAe,MAAMG,GAAA,CAAIP,WAAA,CAAY,CAAC;MACtCK,QAAA,GAAW,MAAME,GAAA,CAAIC,SAAA,CAAU,YAAY;QACzCJ,cAAA,CAAe,MAAMG,GAAA,CAAIP,WAAA,CAAY,CAAC;MACxC,CAAC;IACH,GAAG;IACH,OAAO,MAAM;MACXM,MAAA,GAAS;MACTD,QAAA,GAAW;IACb;EACF,GAAG,EAAE;EAEL,OAAO;IAAE,GAAGX,cAAA;IAAgBM;EAAY;AAC1C","ignoreList":[]}