@wukong-kit/extension 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/README.md ADDED
@@ -0,0 +1,10 @@
1
+ # @wukong-kit/extension
2
+
3
+ Cocos Creator editor extension for Wukong Kit.
4
+
5
+ Features:
6
+
7
+ - List supported Wukong modules from `assets/config/wukong.modules.json`.
8
+ - Compare installed npm dependency versions with npm registry versions.
9
+ - Install or update optional modules from the editor panel.
10
+ - Create module scripts and config files under `assets/modules`.
package/dist/main.d.ts ADDED
@@ -0,0 +1,40 @@
1
+ export declare const methods: {
2
+ openPanel(): void;
3
+ listModules(): Promise<import("./services/ModuleRegistryService").ModuleStatus[]>;
4
+ listProjectModules(): import("./services/ModuleRegistryService").ProjectModuleInfo[];
5
+ diagnoseProject(): import("./services/ModuleRegistryService").ProjectDiagnosticIssue[];
6
+ installModule(npmPackage: string): Promise<import("./services/ModuleRegistryService").ModuleStatus[]>;
7
+ uninstallModule(npmPackage: string): Promise<import("./services/ModuleRegistryService").ModuleStatus[]>;
8
+ updateLibraryState(options: {
9
+ id?: string;
10
+ enabled?: boolean;
11
+ order?: number;
12
+ }): Promise<import("./services/ModuleRegistryService").ModuleStatus[]>;
13
+ updateModule(npmPackage: string): Promise<import("./services/ModuleRegistryService").ModuleStatus[]>;
14
+ createModule(options: {
15
+ name?: string;
16
+ withView?: boolean;
17
+ order?: number;
18
+ }): Promise<import("./services/ModuleRegistryService").CreatedModuleResult>;
19
+ updateModuleOrder(options: {
20
+ moduleName?: string;
21
+ order?: number;
22
+ }): Promise<import("./services/ModuleRegistryService").ProjectModuleInfo[]>;
23
+ createManager(options: {
24
+ name?: string;
25
+ }): Promise<import("./services/ModuleRegistryService").CreatedModuleResult>;
26
+ createView(options: {
27
+ moduleName?: string;
28
+ viewName?: string;
29
+ layer?: string;
30
+ cache?: boolean;
31
+ }): Promise<import("./services/ModuleRegistryService").CreatedModuleResult>;
32
+ deleteView(options: {
33
+ moduleName?: string;
34
+ viewName?: string;
35
+ className?: string;
36
+ }): Promise<import("./services/ModuleRegistryService").ProjectModuleInfo[]>;
37
+ };
38
+ export declare function load(): void;
39
+ export declare function unload(): void;
40
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,OAAO;iBACL,IAAI;;;;8BAgBS,MAAM;gCAIJ,MAAM;gCAIN;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;6BAIrD,MAAM;0BAIT;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;+BAIhD;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;2BAI3C;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE;wBAIpB;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;wBAK3E;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;CAGnF,CAAC;AAEF,wBAAgB,IAAI,IAAI,IAAI,CAAG;AAE/B,wBAAgB,MAAM,IAAI,IAAI,CAAG"}
package/dist/main.js ADDED
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.methods = void 0;
4
+ exports.load = load;
5
+ exports.unload = unload;
6
+ const ModuleRegistryService_1 = require("./services/ModuleRegistryService");
7
+ console.log('[WK] main.ts loaded');
8
+ const registry = new ModuleRegistryService_1.ModuleRegistryService();
9
+ exports.methods = {
10
+ openPanel() {
11
+ Editor.Panel.open('wukong.default');
12
+ },
13
+ listModules() {
14
+ return registry.listModules();
15
+ },
16
+ listProjectModules() {
17
+ return registry.listProjectModules();
18
+ },
19
+ diagnoseProject() {
20
+ return registry.diagnoseProject();
21
+ },
22
+ installModule(npmPackage) {
23
+ return registry.installModule(npmPackage);
24
+ },
25
+ uninstallModule(npmPackage) {
26
+ return registry.uninstallModule(npmPackage);
27
+ },
28
+ updateLibraryState(options) {
29
+ return registry.updateLibraryState(options);
30
+ },
31
+ updateModule(npmPackage) {
32
+ return registry.installModule(`${npmPackage}@latest`);
33
+ },
34
+ createModule(options) {
35
+ return registry.createModule(options);
36
+ },
37
+ updateModuleOrder(options) {
38
+ return registry.updateModuleOrder(options);
39
+ },
40
+ createManager(options) {
41
+ return registry.createManager(options);
42
+ },
43
+ createView(options) {
44
+ console.log('[WK] main.createView called', options);
45
+ return registry.createView(options);
46
+ },
47
+ deleteView(options) {
48
+ return registry.deleteView(options);
49
+ },
50
+ };
51
+ function load() { }
52
+ function unload() { }
53
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;;AA6DA,oBAA+B;AAE/B,wBAAiC;AA/DjC,4EAAyE;AAEzE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AAEnC,MAAM,QAAQ,GAAG,IAAI,6CAAqB,EAAE,CAAC;AAEhC,QAAA,OAAO,GAAG;IACrB,SAAS;QACP,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACtC,CAAC;IAED,WAAW;QACT,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC;IAChC,CAAC;IAED,kBAAkB;QAChB,OAAO,QAAQ,CAAC,kBAAkB,EAAE,CAAC;IACvC,CAAC;IAED,eAAe;QACb,OAAO,QAAQ,CAAC,eAAe,EAAE,CAAC;IACpC,CAAC;IAED,aAAa,CAAC,UAAkB;QAC9B,OAAO,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED,eAAe,CAAC,UAAkB;QAChC,OAAO,QAAQ,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED,kBAAkB,CAAC,OAA2D;QAC5E,OAAO,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,YAAY,CAAC,UAAkB;QAC7B,OAAO,QAAQ,CAAC,aAAa,CAAC,GAAG,UAAU,SAAS,CAAC,CAAC;IACxD,CAAC;IAED,YAAY,CAAC,OAA8D;QACzE,OAAO,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,iBAAiB,CAAC,OAAgD;QAChE,OAAO,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,aAAa,CAAC,OAA0B;QACtC,OAAO,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,UAAU,CAAC,OAAoF;QAC7F,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;QACpD,OAAO,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,UAAU,CAAC,OAAuE;QAChF,OAAO,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;CACF,CAAC;AAEF,SAAgB,IAAI,KAAU,CAAC;AAE/B,SAAgB,MAAM,KAAU,CAAC"}
@@ -0,0 +1,80 @@
1
+ export declare const template = "\n<div class=\"wukong-panel\">\n <header class=\"topbar\">\n <div>\n <h2>Wukong Kit</h2>\n <p>2D MVC workflow tools</p>\n </div>\n <ui-button id=\"refresh\">Refresh</ui-button>\n </header>\n\n <nav class=\"tabs\">\n <ui-button id=\"moduleTab\" class=\"tab active\">Modules</ui-button>\n <ui-button id=\"managerTab\" class=\"tab\">Managers</ui-button>\n <ui-button id=\"librariesTab\" class=\"tab\">Libraries</ui-button>\n <ui-button id=\"diagnosticsTab\" class=\"tab\">Diagnostics</ui-button>\n </nav>\n\n <section id=\"modulePage\" class=\"page active\">\n <aside class=\"module-list\">\n <ui-button id=\"newModule\" class=\"new-module\">+ New Module</ui-button>\n <div id=\"projectModules\"></div>\n </aside>\n\n <main class=\"module-detail\">\n <section id=\"createModulePanel\" class=\"surface\">\n <div class=\"section-head\">\n <div>\n <h3>Create Module</h3>\n <p>Create a logic module, optionally with an initial View.</p>\n </div>\n </div>\n <div class=\"form-row\">\n <label>Module Name</label>\n <ui-input id=\"moduleName\" placeholder=\"battle\"></ui-input>\n </div>\n <div class=\"form-row\">\n <label>Init Order</label>\n <ui-input id=\"moduleOrder\" placeholder=\"100\" value=\"100\"></ui-input>\n </div>\n <label class=\"check-row\">\n <input id=\"withView\" type=\"checkbox\" />\n <span>Create initial View</span>\n </label>\n <ui-button id=\"create\">Create Module</ui-button>\n <p id=\"status\"></p>\n </section>\n\n <section id=\"moduleInfoPanel\" class=\"surface hidden\">\n <div class=\"section-head\">\n <div>\n <h3 id=\"selectedTitle\">Module</h3>\n <p id=\"selectedPath\"></p>\n </div>\n </div>\n <div class=\"order-editor\">\n <div class=\"form-row\">\n <label>Init Order</label>\n <ui-input id=\"selectedOrder\" placeholder=\"100\"></ui-input>\n </div>\n <ui-button id=\"saveOrder\">Save Order</ui-button>\n </div>\n <div id=\"moduleFiles\" class=\"file-list\"></div>\n\n <div class=\"subhead\">\n <h3>Views</h3>\n </div>\n <div id=\"moduleViews\" class=\"view-list\"></div>\n\n <div class=\"add-view\">\n <div class=\"form-row\">\n <label>View Name</label>\n <ui-input id=\"viewName\" placeholder=\"Panel\"></ui-input>\n </div>\n <div class=\"form-grid\">\n <div class=\"form-row\">\n <label>Layer</label>\n <select id=\"viewLayer\">\n <option value=\"UI\">UI</option>\n <option value=\"Popup\">Popup</option>\n <option value=\"Tip\">Tip</option>\n <option value=\"Game\">Game</option>\n <option value=\"Scene\">Scene</option>\n </select>\n </div>\n <label class=\"check-row\">\n <input id=\"viewCache\" type=\"checkbox\" checked />\n <span>Cache View</span>\n </label>\n </div>\n <ui-button id=\"addView\">Add View</ui-button>\n </div>\n </section>\n </main>\n </section>\n\n <section id=\"managerPage\" class=\"page manager-page\">\n <section class=\"surface manager-card\">\n <div class=\"section-head\">\n <div>\n <h3>Create Manager</h3>\n <p>Generate a singleton manager under scripts/core/managers.</p>\n </div>\n </div>\n <div class=\"form-row\">\n <label>Manager Name</label>\n <ui-input id=\"managerName\" placeholder=\"audio\"></ui-input>\n </div>\n <ui-button id=\"createManager\">Create Manager</ui-button>\n <p id=\"managerStatus\"></p>\n </section>\n </section>\n\n <section id=\"librariesPage\" class=\"page\">\n <div class=\"section-head\">\n <div>\n <h3>Libraries</h3>\n <p>Optional npm modules supported by this project.</p>\n </div>\n </div>\n <div id=\"modules\"></div>\n </section>\n\n <section id=\"diagnosticsPage\" class=\"page diagnostics-page\">\n <section class=\"surface\">\n <div class=\"section-head\">\n <div>\n <h3>Project Diagnostics</h3>\n <p>Check Wukong modules, views, prefabs, and optional libraries.</p>\n </div>\n <ui-button id=\"runDiagnostics\">Run Check</ui-button>\n </div>\n <div id=\"diagnostics\"></div>\n </section>\n </section>\n</div>\n";
2
+ export declare const style = "\n.wukong-panel {\n box-sizing: border-box;\n height: 100%;\n padding: 14px;\n color: var(--color-normal-contrast);\n background: var(--color-normal-fill);\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n.topbar {\n flex: 0 0 auto;\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 12px;\n padding-bottom: 12px;\n border-bottom: 1px solid var(--color-normal-border);\n}\n.tabs {\n flex: 0 0 auto;\n display: flex;\n gap: 8px;\n margin-top: 14px;\n padding: 4px;\n border: 1px solid var(--color-normal-border);\n border-radius: 6px;\n background: var(--color-normal-fill-emphasis);\n}\n.tab {\n flex: 1;\n}\n.tab.active {\n border-color: var(--color-primary-fill);\n}\nh2, h3, p {\n margin: 0;\n}\nh2 {\n font-size: 16px;\n font-weight: 600;\n}\nh3 {\n font-size: 13px;\n font-weight: 600;\n}\n.topbar p,\n.section-head p,\n#status,\n.muted,\n.module p {\n color: var(--color-normal-contrast-weaker);\n}\n.topbar p,\n.section-head p {\n margin-top: 4px;\n font-size: 12px;\n}\n.page {\n display: none;\n flex: 1 1 auto;\n min-height: 0;\n margin-top: 14px;\n}\n.page.active {\n display: flex;\n overflow-y: auto;\n overflow-x: hidden;\n}\n.manager-page.active {\n display: block;\n}\n.diagnostics-page.active {\n display: block;\n}\n#librariesPage.active {\n display: block;\n padding: 12px;\n border: 1px solid var(--color-normal-border);\n border-radius: 6px;\n background: var(--color-normal-fill-emphasis);\n}\n.module-list {\n flex: 0 0 220px;\n min-width: 0;\n padding: 10px;\n border: 1px solid var(--color-normal-border);\n border-radius: 6px;\n background: var(--color-normal-fill-emphasis);\n overflow-y: auto;\n}\n.new-module {\n width: 100%;\n margin-bottom: 10px;\n}\n.module-item {\n display: block;\n width: 100%;\n margin-top: 8px;\n padding: 9px;\n border: 1px solid var(--color-normal-border);\n border-radius: 6px;\n background: var(--color-normal-fill);\n color: var(--color-normal-contrast);\n text-align: left;\n}\n.module-item.active {\n border-color: var(--color-primary-fill);\n}\n.module-item strong,\n.module-item span {\n display: block;\n}\n.module-item strong {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.module-item span {\n margin-top: 4px;\n font-size: 12px;\n color: var(--color-normal-contrast-weaker);\n}\n.module-meta {\n display: flex;\n justify-content: space-between;\n gap: 8px;\n}\n.module-detail {\n flex: 1 1 auto;\n min-width: 0;\n margin-left: 12px;\n overflow-y: auto;\n}\n.surface {\n padding: 12px;\n border: 1px solid var(--color-normal-border);\n border-radius: 6px;\n background: var(--color-normal-fill-emphasis);\n}\n.hidden {\n display: none;\n}\n.section-head {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 12px;\n margin-bottom: 12px;\n}\n.form-row {\n display: flex;\n flex-direction: column;\n gap: 6px;\n margin-bottom: 10px;\n}\n.form-row label,\n.check-row {\n font-size: 12px;\n color: var(--color-normal-contrast-weaker);\n}\n.check-row {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 8px 0 12px;\n}\n.form-grid {\n display: grid;\n grid-template-columns: 1fr 140px;\n gap: 10px;\n align-items: end;\n}\n.order-editor {\n display: grid;\n grid-template-columns: minmax(120px, 180px) auto;\n gap: 10px;\n align-items: end;\n margin-bottom: 12px;\n}\nselect {\n height: 24px;\n color: var(--color-normal-contrast);\n background: var(--color-normal-fill);\n border: 1px solid var(--color-normal-border);\n border-radius: 4px;\n}\n#status {\n min-height: 18px;\n margin-top: 8px;\n font-size: 12px;\n}\n#managerStatus {\n min-height: 18px;\n margin-top: 8px;\n font-size: 12px;\n color: var(--color-normal-contrast-weaker);\n}\n.manager-card {\n max-width: 520px;\n}\n.file-list,\n.view-list {\n display: grid;\n gap: 8px;\n}\n.file-pill,\n.view-pill {\n padding: 8px;\n border: 1px solid var(--color-normal-border);\n border-radius: 6px;\n background: var(--color-normal-fill);\n}\n.view-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 10px;\n}\n.view-row .muted {\n display: inline-block;\n max-width: 360px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.subhead {\n margin: 16px 0 8px;\n}\n.add-view {\n margin-top: 16px;\n padding-top: 12px;\n border-top: 1px solid var(--color-normal-border);\n}\n#modules {\n display: block;\n min-height: 0;\n}\n.module {\n border: 1px solid var(--color-normal-border);\n border-radius: 6px;\n padding: 10px;\n margin-top: 8px;\n background: var(--color-normal-fill);\n}\n.module-title {\n display: flex;\n justify-content: space-between;\n gap: 8px;\n align-items: center;\n margin-bottom: 8px;\n}\n.module-title span {\n font-size: 12px;\n color: var(--color-normal-contrast-weaker);\n}\n.module p {\n margin-bottom: 10px;\n line-height: 1.4;\n}\n.module-actions,\n.lib-meta {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 8px;\n}\n.lib-settings {\n display: grid;\n grid-template-columns: minmax(100px, 1fr) 90px auto;\n gap: 8px;\n align-items: center;\n margin-bottom: 10px;\n}\n.lib-settings label {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.lib-meta {\n margin-bottom: 10px;\n color: var(--color-normal-contrast-weaker);\n font-size: 12px;\n}\n.empty {\n margin-top: 8px;\n color: var(--color-normal-contrast-weaker);\n}\n.diagnostic {\n padding: 10px;\n margin-top: 8px;\n border: 1px solid var(--color-normal-border);\n border-radius: 6px;\n background: var(--color-normal-fill);\n}\n.diagnostic strong {\n display: block;\n margin-bottom: 4px;\n}\n.diagnostic.error {\n border-color: var(--color-danger-fill);\n}\n.diagnostic.warn {\n border-color: var(--color-warn-fill);\n}\n.diagnostic.info {\n border-color: var(--color-success-fill);\n}\n";
3
+ export declare const $: {
4
+ refresh: string;
5
+ moduleTab: string;
6
+ managerTab: string;
7
+ librariesTab: string;
8
+ diagnosticsTab: string;
9
+ modulePage: string;
10
+ managerPage: string;
11
+ librariesPage: string;
12
+ diagnosticsPage: string;
13
+ newModule: string;
14
+ createModulePanel: string;
15
+ moduleInfoPanel: string;
16
+ projectModules: string;
17
+ selectedTitle: string;
18
+ selectedPath: string;
19
+ moduleFiles: string;
20
+ moduleViews: string;
21
+ create: string;
22
+ moduleName: string;
23
+ moduleOrder: string;
24
+ withView: string;
25
+ status: string;
26
+ selectedOrder: string;
27
+ saveOrder: string;
28
+ viewName: string;
29
+ viewLayer: string;
30
+ viewCache: string;
31
+ addView: string;
32
+ managerName: string;
33
+ createManager: string;
34
+ managerStatus: string;
35
+ modules: string;
36
+ runDiagnostics: string;
37
+ diagnostics: string;
38
+ };
39
+ interface ProjectModuleInfo {
40
+ name: string;
41
+ className: string;
42
+ order: number;
43
+ folderPath: string;
44
+ displayPath: string;
45
+ modelPath: string | null;
46
+ controllerPath: string | null;
47
+ modulePath: string | null;
48
+ displayFiles: string[];
49
+ views: Array<{
50
+ name: string;
51
+ className: string;
52
+ scriptPath: string;
53
+ displayPath: string;
54
+ }>;
55
+ }
56
+ interface PanelContext {
57
+ $: Record<string, HTMLElement & {
58
+ value?: string;
59
+ checked?: boolean;
60
+ }>;
61
+ projectModules: ProjectModuleInfo[];
62
+ selectedModuleName: string | null;
63
+ renderModules(): Promise<void>;
64
+ renderProjectModules(): Promise<void>;
65
+ renderModuleDetail(module: ProjectModuleInfo | null): void;
66
+ renderDiagnostics(): Promise<void>;
67
+ escapeHtml(text: string): string;
68
+ showTab(tab: 'module' | 'manager' | 'libraries' | 'diagnostics'): void;
69
+ }
70
+ export declare function ready(this: PanelContext): void;
71
+ export declare const methods: {
72
+ showTab(this: PanelContext, tab: "module" | "manager" | "libraries" | "diagnostics"): void;
73
+ renderProjectModules(this: PanelContext): Promise<void>;
74
+ renderModuleDetail(this: PanelContext, module: ProjectModuleInfo | null): void;
75
+ escapeHtml(text: string): string;
76
+ renderDiagnostics(this: PanelContext): Promise<void>;
77
+ renderModules(this: PanelContext): Promise<void>;
78
+ };
79
+ export {};
80
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/panels/default/index.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,qjJAuIpB,CAAC;AAEF,eAAO,MAAM,KAAK,21LAqTjB,CAAC;AAEF,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCb,CAAC;AAEF,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5F;AAED,UAAU,YAAY;IACpB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACvE,cAAc,EAAE,iBAAiB,EAAE,CAAC;IACpC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAAC;IAC3D,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,GAAG,IAAI,CAAC;CACxE;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAgG9C;AAED,eAAO,MAAM,OAAO;kBACJ,YAAY,OAAO,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,GAAG,IAAI;+BAazD,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;6BAkCpC,YAAY,UAAU,iBAAiB,GAAG,IAAI,GAAG,IAAI;qBA4C7D,MAAM,GAAG,MAAM;4BAaF,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;wBAqBhC,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CA8FvD,CAAC"}