nativescript-vue 3.0.0-beta.0 → 3.0.0-beta.10

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 (72) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +59 -0
  3. package/devtools.js +33 -0
  4. package/dist/compiler.d.ts +1 -1
  5. package/dist/compiler.js +1 -1
  6. package/dist/compiler.js.map +1 -1
  7. package/dist/components/ActionBar.d.ts +1 -1
  8. package/dist/components/ActionBar.js +6 -5
  9. package/dist/components/ActionBar.js.map +1 -1
  10. package/dist/components/ListView.d.ts +2 -2
  11. package/dist/components/ListView.js +11 -12
  12. package/dist/components/ListView.js.map +1 -1
  13. package/dist/components/index.d.ts +6 -2
  14. package/dist/components/index.js +3 -2
  15. package/dist/components/index.js.map +1 -1
  16. package/dist/directives/vModel.d.ts +8 -0
  17. package/dist/directives/vModel.js +38 -0
  18. package/dist/directives/vModel.js.map +1 -0
  19. package/dist/directives/vShow.d.ts +2 -2
  20. package/dist/directives/vShow.js +4 -4
  21. package/dist/dom/index.d.ts +1 -1
  22. package/dist/dom/index.js +7 -8
  23. package/dist/dom/index.js.map +1 -1
  24. package/dist/index.d.ts +19 -10
  25. package/dist/index.js +50 -15
  26. package/dist/index.js.map +1 -1
  27. package/dist/nativescript/elements.js +56 -53
  28. package/dist/nativescript/elements.js.map +1 -1
  29. package/dist/nativescript/index.d.ts +3 -3
  30. package/dist/nativescript/index.js +3 -4
  31. package/dist/nativescript/index.js.map +1 -1
  32. package/dist/plugins/modals.d.ts +9 -5
  33. package/dist/plugins/modals.js +50 -32
  34. package/dist/plugins/modals.js.map +1 -1
  35. package/dist/plugins/navigation.d.ts +7 -7
  36. package/dist/plugins/navigation.js +59 -78
  37. package/dist/plugins/navigation.js.map +1 -1
  38. package/dist/plugins/templates.d.ts +10 -0
  39. package/dist/plugins/templates.js +12 -0
  40. package/dist/plugins/templates.js.map +1 -0
  41. package/dist/registry/index.d.ts +3 -3
  42. package/dist/registry/index.js +2 -2
  43. package/dist/registry/index.js.map +1 -1
  44. package/dist/renderer/index.js +3 -3
  45. package/dist/renderer/modules/attrs.d.ts +1 -1
  46. package/dist/renderer/modules/attrs.js +3 -3
  47. package/dist/renderer/modules/class.d.ts +1 -1
  48. package/dist/renderer/modules/class.js +2 -2
  49. package/dist/renderer/modules/events.d.ts +3 -3
  50. package/dist/renderer/modules/events.js +8 -2
  51. package/dist/renderer/modules/events.js.map +1 -1
  52. package/dist/renderer/modules/style.d.ts +3 -2
  53. package/dist/renderer/modules/style.js +66 -20
  54. package/dist/renderer/modules/style.js.map +1 -1
  55. package/dist/renderer/nodeOps.d.ts +3 -2
  56. package/dist/renderer/nodeOps.js +7 -4
  57. package/dist/renderer/nodeOps.js.map +1 -1
  58. package/dist/renderer/patchProp.d.ts +1 -1
  59. package/dist/renderer/patchProp.js +27 -10
  60. package/dist/renderer/patchProp.js.map +1 -1
  61. package/dist/runtimeHelpers.d.ts +26 -0
  62. package/dist/runtimeHelpers.js +42 -3
  63. package/dist/runtimeHelpers.js.map +1 -1
  64. package/dist/types.d.ts +1 -1
  65. package/dist/withCompiler.js +1 -1
  66. package/dist/withCompiler.js.map +1 -1
  67. package/nativescript.webpack.js +122 -12
  68. package/package.json +35 -12
  69. package/dist/components/ListView.working.d.ts +0 -44
  70. package/dist/components/ListView.working.js +0 -126
  71. package/dist/components/ListView.working.js.map +0 -1
  72. package/dist/index.mjs.map +0 -7
@@ -1,19 +1,118 @@
1
- const { VueLoaderPlugin } = require("vue-loader");
1
+ const { VueLoaderPlugin } = require('vue-loader');
2
+ const spawn = require('cross-spawn');
3
+
4
+ function findFreePort(startingPort = 8098) {
5
+ let found = false;
6
+ let port = startingPort;
7
+
8
+ const isPortFree = (port) =>
9
+ new Promise((resolve) => {
10
+ const server = require('http')
11
+ .createServer()
12
+ .listen(port, '0.0.0.0', () => {
13
+ server.close();
14
+ resolve(true);
15
+ })
16
+ .on('error', () => {
17
+ resolve(false);
18
+ });
19
+ });
20
+
21
+ const findFreePort = () => {
22
+ isPortFree(port).then((isFree) => {
23
+ if (!isFree) {
24
+ port++;
25
+ return findFreePort();
26
+ }
27
+ found = true;
28
+ });
29
+ };
30
+
31
+ findFreePort();
32
+
33
+ while (!found) {
34
+ process._tickCallback();
35
+ const start = Date.now();
36
+ while (Date.now() - start < 100) {
37
+ // busy wait... not ideal, but we need to find a port synchronously...
38
+ }
39
+ }
40
+
41
+ return port;
42
+ }
43
+
44
+ function startVueDevtools(port, isAndroid = false) {
45
+ console.log(`[VueDevtools] Starting standalone Vue Devtools on port ${port}`);
46
+ if (isAndroid) {
47
+ console.log(
48
+ `[VueDevtools] If the app doesn't automatically connect, check if http traffic is allowed. (e.g. on Android, you may need to set android:usesCleartextTraffic="true" in AndroidManifest.xml)`,
49
+ );
50
+ }
51
+ spawn(require.resolve('@vue/devtools/bin.js'), [], {
52
+ stdio: 'ignore',
53
+ env: {
54
+ ...process.env,
55
+ PORT: port,
56
+ },
57
+ });
58
+ }
2
59
 
3
60
  /**
4
61
  * @param {typeof import("@nativescript/webpack")} webpack
5
62
  */
6
63
  module.exports = (webpack) => {
7
- webpack.useConfig("vue");
64
+ webpack.useConfig('vue');
65
+
66
+ webpack.chainWebpack((config, env) => {
67
+ const additionalDefines = {
68
+ __VUE_PROD_DEVTOOLS__: false,
69
+ };
8
70
 
9
- webpack.chainWebpack((config) => {
10
- config.plugin("VueLoaderPlugin").use(VueLoaderPlugin);
71
+ // todo: support configuring the devtools host/port from the nativescript.config.ts...
72
+ if (!!env.vueDevtools) {
73
+ // find a free port for the devtools
74
+ const vueDevtoolsPort = findFreePort(8098);
75
+ const isAndroid = webpack.Utils.platform.getPlatformName() === 'android';
11
76
 
12
- config.module
13
- .rule("vue")
14
- .test(/\.vue$/)
15
- .use("vue-loader")
16
- .loader(require.resolve("vue-loader"))
77
+ // on android simulators, localhost is not the host machine...
78
+ const vueDevtoolsHost = isAndroid
79
+ ? 'http://10.0.2.2'
80
+ : 'http://localhost';
81
+
82
+ additionalDefines['__VUE_PROD_DEVTOOLS__'] = true;
83
+ additionalDefines['__NS_VUE_DEVTOOLS_HOST__'] =
84
+ JSON.stringify(vueDevtoolsHost);
85
+ additionalDefines['__NS_VUE_DEVTOOLS_PORT__'] = vueDevtoolsPort;
86
+
87
+ const devtoolsEntryPath = require.resolve('./devtools.js');
88
+ const entryPath = webpack.Utils.platform.getEntryPath();
89
+ const paths = config.entry('bundle').values();
90
+ const entryIndex = paths.indexOf(entryPath);
91
+
92
+ if (entryIndex === -1) {
93
+ // if the app entry is not found, add the devtools entry at the beginning - generally should not happen, but just in case.
94
+ paths.unshift(entryPath);
95
+ } else {
96
+ // insert devtools entry before the app entry, but after globals etc.
97
+ paths.splice(entryIndex, 0, devtoolsEntryPath);
98
+ }
99
+
100
+ config.entry('bundle').clear().merge(paths);
101
+
102
+ // start the devtools...
103
+ startVueDevtools(vueDevtoolsPort, isAndroid);
104
+ }
105
+
106
+ // resolve any imports from "vue" to "nativescript-vue"
107
+ config.resolve.alias.set('vue', 'nativescript-vue');
108
+
109
+ config.plugins.get('VueLoaderPlugin').use(VueLoaderPlugin);
110
+
111
+ // use "vue-loader" from "nativescript-vue" deps rather than the one from @nativescript/webpack
112
+ config.module.rules
113
+ .get('vue')
114
+ .uses.get('vue-loader')
115
+ .loader(require.resolve('vue-loader'))
17
116
  .tap((options) => {
18
117
  return {
19
118
  ...options,
@@ -25,17 +124,27 @@ module.exports = (webpack) => {
25
124
  };
26
125
  });
27
126
 
28
- config.plugin("DefinePlugin").tap((args) => {
127
+ config.module.rules
128
+ .get('css')
129
+ .uses.get('vue-css-loader')
130
+ .loader(require.resolve('vue-loader/dist/stylePostLoader.js'));
131
+
132
+ config.module.rules
133
+ .get('scss')
134
+ .uses.get('vue-css-loader')
135
+ .loader(require.resolve('vue-loader/dist/stylePostLoader.js'));
136
+
137
+ config.plugin('DefinePlugin').tap((args) => {
29
138
  Object.assign(args[0], {
30
139
  __VUE_OPTIONS_API__: true,
31
- __VUE_PROD_DEVTOOLS__: false,
140
+ ...additionalDefines,
32
141
  });
33
142
 
34
143
  return args;
35
144
  });
36
145
 
37
146
  // disable vue fork ts checker, as it doesn't work with vue3 yet?
38
- config.plugin("ForkTsCheckerWebpackPlugin").tap((args) => {
147
+ config.plugin('ForkTsCheckerWebpackPlugin').tap((args) => {
39
148
  args[0] = webpack.merge(args[0], {
40
149
  typescript: {
41
150
  extensions: {
@@ -45,6 +154,7 @@ module.exports = (webpack) => {
45
154
  },
46
155
  },
47
156
  });
157
+
48
158
  return args;
49
159
  });
50
160
  });
package/package.json CHANGED
@@ -1,29 +1,52 @@
1
1
  {
2
2
  "name": "nativescript-vue",
3
- "version": "3.0.0-beta.0",
3
+ "version": "3.0.0-beta.10",
4
4
  "main": "dist/index.js",
5
5
  "files": [
6
6
  "dist/",
7
+ "devtools.js",
7
8
  "nativescript.webpack.js"
8
9
  ],
9
10
  "license": "MIT",
10
11
  "scripts": {
11
12
  "build": "tsc",
12
- "prepack": "npm run build"
13
+ "format": "prettier --write .",
14
+ "format:check": "prettier --check .",
15
+ "prepare": "simple-git-hooks",
16
+ "pack:template": "npm pack ./packages/template-blank",
17
+ "prepack": "npm run build && npm run pack:template"
13
18
  },
14
19
  "dependencies": {
15
- "@vue/compiler-dom": "^3.2.41",
16
- "@vue/runtime-dom": "^3.2.41",
17
- "@vue/compiler-sfc": "^3.2.41",
20
+ "@vue/compiler-sfc": "^3.3.4",
21
+ "@vue/devtools": "^6.5.0",
22
+ "@vue/runtime-core": "^3.3.4",
23
+ "@vue/shared": "^3.3.4",
24
+ "cross-spawn": "^7.0.3",
18
25
  "set-value": "^4.1.0",
19
- "vue-loader": "^17.0.0"
26
+ "vue-loader": "^17.2.2"
20
27
  },
21
28
  "devDependencies": {
22
- "@nativescript/core": "^8.3.5",
23
- "@nativescript/webpack": "~5.0.12",
24
- "esbuild": "^0.15.12",
25
- "tsx": "^3.11.0",
26
- "typescript": "^4.8.4",
27
- "vue": "^3.2.41"
29
+ "@commitlint/cli": "^17.7.1",
30
+ "@commitlint/config-conventional": "^17.7.0",
31
+ "@nativescript/core": "~8.5.9",
32
+ "@nativescript/webpack": "~5.0.17",
33
+ "esbuild": "^0.19.2",
34
+ "lint-staged": "^14.0.1",
35
+ "prettier": "^3.0.3",
36
+ "simple-git-hooks": "^2.9.0",
37
+ "typescript": "^5.2.2"
38
+ },
39
+ "simple-git-hooks": {
40
+ "pre-commit": "npx --no-install lint-staged --config=package.json",
41
+ "commit-msg": "npx --no-install commitlint --edit"
42
+ },
43
+ "lint-staged": {
44
+ "*": [
45
+ "prettier --ignore-unknown --write"
46
+ ]
47
+ },
48
+ "prettier": {
49
+ "useTabs": false,
50
+ "singleQuote": true
28
51
  }
29
52
  }
@@ -1,44 +0,0 @@
1
- import { VNode } from "..";
2
- declare global {
3
- interface ListItem<T = any> {
4
- item: T;
5
- index: number;
6
- even: boolean;
7
- odd: boolean;
8
- }
9
- }
10
- export declare const ListView: import("@vue/runtime-core").DefineComponent<{
11
- items: {
12
- (arrayLength: number): any[];
13
- (...items: any[]): any[];
14
- new (arrayLength: number): any[];
15
- new (...items: any[]): any[];
16
- isArray(arg: any): arg is any[];
17
- readonly prototype: any[];
18
- from<T>(arrayLike: ArrayLike<T>): T[];
19
- from<T_1, U>(arrayLike: ArrayLike<T_1>, mapfn: (v: T_1, k: number) => U, thisArg?: any): U[];
20
- from<T_2>(iterable: Iterable<T_2> | ArrayLike<T_2>): T_2[];
21
- from<T_3, U_1>(iterable: Iterable<T_3> | ArrayLike<T_3>, mapfn: (v: T_3, k: number) => U_1, thisArg?: any): U_1[];
22
- of<T_4>(...items: T_4[]): T_4[];
23
- readonly [Symbol.species]: ArrayConstructor;
24
- };
25
- itemTemplateSelector: FunctionConstructor;
26
- }, () => VNode<import("@vue/runtime-core").RendererNode, import("@vue/runtime-core").RendererElement, {
27
- [key: string]: any;
28
- }>, unknown, {}, {}, import("@vue/runtime-core").ComponentOptionsMixin, import("@vue/runtime-core").ComponentOptionsMixin, {}, string, import("@vue/runtime-core").VNodeProps & import("@vue/runtime-core").AllowedComponentProps & import("@vue/runtime-core").ComponentCustomProps, Readonly<import("@vue/runtime-core").ExtractPropTypes<{
29
- items: {
30
- (arrayLength: number): any[];
31
- (...items: any[]): any[];
32
- new (arrayLength: number): any[];
33
- new (...items: any[]): any[];
34
- isArray(arg: any): arg is any[];
35
- readonly prototype: any[];
36
- from<T>(arrayLike: ArrayLike<T>): T[];
37
- from<T_1, U>(arrayLike: ArrayLike<T_1>, mapfn: (v: T_1, k: number) => U, thisArg?: any): U[];
38
- from<T_2>(iterable: Iterable<T_2> | ArrayLike<T_2>): T_2[];
39
- from<T_3, U_1>(iterable: Iterable<T_3> | ArrayLike<T_3>, mapfn: (v: T_3, k: number) => U_1, thisArg?: any): U_1[];
40
- of<T_4>(...items: T_4[]): T_4[];
41
- readonly [Symbol.species]: ArrayConstructor;
42
- };
43
- itemTemplateSelector: FunctionConstructor;
44
- }>>, {}>;
@@ -1,126 +0,0 @@
1
- import { defineComponent, h, warn } from "@vue/runtime-core";
2
- import { ListView as NSCListView, ObservableArray, StackLayout, } from "@nativescript/core";
3
- import { getCurrentInstance, ref, watch, onBeforeUpdate, onUpdated, } from "..";
4
- import { registerElement } from "../registry";
5
- import { ELEMENT_REF } from "../runtimeHelpers";
6
- registerElement("NSCListView", () => NSCListView, {
7
- viewFlags: 8 /* NSVViewFlags.NO_CHILDREN */,
8
- });
9
- registerElement("NSCListViewDummyHolder", () => StackLayout);
10
- function getListItem(item, index) {
11
- return {
12
- item,
13
- index,
14
- even: index % 2 === 0,
15
- odd: index % 2 !== 0,
16
- };
17
- }
18
- const LIST_CELL_ID = Symbol("list_cell_id");
19
- export const ListView = /*#__PURE__*/ defineComponent({
20
- props: {
21
- items: (Array),
22
- itemTemplateSelector: Function,
23
- },
24
- setup(props, ctx) {
25
- const itemTemplates = Object.keys(ctx.slots).map((slotName) => {
26
- return {
27
- key: slotName,
28
- createView() {
29
- // no need to return anything here
30
- },
31
- };
32
- });
33
- const getSlotName = (itemCtx) => props.itemTemplateSelector?.(itemCtx) ?? "default";
34
- const listView = ref(null);
35
- const vm = getCurrentInstance();
36
- watch(props, () => {
37
- console.log("props changed?");
38
- try {
39
- const lv = listView.value?.nativeView;
40
- lv?.refresh();
41
- }
42
- catch (err) {
43
- console.log(err);
44
- }
45
- });
46
- let cellId = 0;
47
- const cells = ref({});
48
- function onitemLoading(event) {
49
- const el = event.view?.[ELEMENT_REF];
50
- const id = el?.nativeView[LIST_CELL_ID] ?? `LIST_CELL_${cellId++}`;
51
- const itemCtx = getListItem(props.items instanceof ObservableArray
52
- ? props.items.getItem(event.index)
53
- : props.items[event.index], event.index);
54
- // update the cell data with the current row
55
- cells.value[id] = {
56
- itemCtx,
57
- slotName: getSlotName(itemCtx),
58
- };
59
- // trigger an update!
60
- vm.update();
61
- // find the vnode rendering this cell
62
- const vnode = vm.subTree.children.find((vnode) => {
63
- return vnode.key === id;
64
- });
65
- // store the cell id on the Element itself so we can retrieve it when recycling kicks in
66
- const cellEl = vnode.el.nativeView;
67
- cellEl[LIST_CELL_ID] = id;
68
- // finally, set the event.view to the rendered cellEl
69
- event.view = cellEl;
70
- // event.view = new Label();
71
- }
72
- function itemTemplateSelector(item, index) {
73
- // pass on the template selector call with the ListItem context
74
- return getSlotName(getListItem(item, index));
75
- }
76
- onBeforeUpdate(() => {
77
- console.time("update");
78
- });
79
- onUpdated(() => {
80
- console.timeEnd("update");
81
- });
82
- return () => {
83
- console.log("RENDER");
84
- // return h("StackLayout", [
85
- // h("NSCListView", {
86
- // ref: listView,
87
- // items: props.items,
88
- // itemTemplates,
89
- // itemTemplateSelector,
90
- // onitemLoading,
91
- // }),
92
- // ...Object.entries(cells.value).map(([id, child]) => {
93
- // const vnodes: VNode[] = ctx.slots[child.slotName](child.itemCtx);
94
- // if (vnodes.length > 1) {
95
- // warn(
96
- // `ListView template must contain a single root element. Found: ${vnodes.length}. Only the first one will be used.`
97
- // );
98
- // }
99
- // const vnode: VNode = vnodes[0];
100
- // // set the key to the list cell id, so we can find this cell later...
101
- // vnode.key = id;
102
- // return vnode;
103
- // }),
104
- // ]);
105
- return h("NSCListView", {
106
- ref: listView,
107
- items: props.items,
108
- itemTemplates,
109
- itemTemplateSelector,
110
- onitemLoading,
111
- },
112
- // render all realized templates as children
113
- Object.entries(cells.value).map(([id, child]) => {
114
- const vnodes = ctx.slots[child.slotName](child.itemCtx);
115
- if (vnodes.length > 1) {
116
- warn(`ListView template must contain a single root element. Found: ${vnodes.length}. Only the first one will be used.`);
117
- }
118
- const vnode = vnodes[0];
119
- // set the key to the list cell id, so we can find this cell later...
120
- vnode.key = id;
121
- return vnode;
122
- }));
123
- };
124
- },
125
- });
126
- //# sourceMappingURL=ListView.working.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ListView.working.js","sourceRoot":"","sources":["../../src/components/ListView.working.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAGL,QAAQ,IAAI,WAAW,EACvB,eAAe,EACf,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,kBAAkB,EAClB,GAAG,EAEH,KAAK,EACL,cAAc,EACd,SAAS,GACV,MAAM,IAAI,CAAC;AAEZ,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,eAAe,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE;IAChD,SAAS,kCAA0B;CACpC,CAAC,CAAC;AAEH,eAAe,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC;AAW7D,SAAS,WAAW,CAAC,IAAI,EAAE,KAAK;IAC9B,OAAO;QACL,IAAI;QACJ,KAAK;QACL,IAAI,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC;QACrB,GAAG,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAE5C,MAAM,CAAC,MAAM,QAAQ,GAAG,aAAa,CAAC,eAAe,CAAC;IACpD,KAAK,EAAE;QACL,KAAK,EAAE,CAAA,KAAU,CAAA;QACjB,oBAAoB,EAAE,QAAQ;KAC/B;IACD,KAAK,CAAC,KAAK,EAAE,GAAG;QACd,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC5D,OAAO;gBACL,GAAG,EAAE,QAAQ;gBACb,UAAU;oBACR,kCAAkC;gBACpC,CAAC;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,CAAC,OAAiB,EAAE,EAAE,CACxC,KAAK,CAAC,oBAAoB,EAAE,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;QAErD,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;QAE3B,MAAM,EAAE,GAAG,kBAAkB,EAAE,CAAC;QAEhC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE;YAChB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAC9B,IAAI;gBACF,MAAM,EAAE,GAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;gBACnD,EAAE,EAAE,OAAO,EAAE,CAAC;aACf;YAAC,OAAO,GAAG,EAAE;gBACZ,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aAClB;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,MAAM,GAAG,CAAC,CAAC;QAKf,MAAM,KAAK,GAAG,GAAG,CAA+B,EAAE,CAAC,CAAC;QAEpD,SAAS,aAAa,CAAC,KAAoB;YACzC,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,CAAe,CAAC;YACnD,MAAM,EAAE,GAAG,EAAE,EAAE,UAAU,CAAC,YAAY,CAAC,IAAI,aAAa,MAAM,EAAE,EAAE,CAAC;YAEnE,MAAM,OAAO,GAAa,WAAW,CACnC,KAAK,CAAC,KAAK,YAAY,eAAe;gBACpC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;gBAClC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAC5B,KAAK,CAAC,KAAK,CACZ,CAAC;YAEF,4CAA4C;YAC5C,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG;gBAChB,OAAO;gBACP,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC;aAC/B,CAAC;YAEF,qBAAqB;YACrB,EAAE,CAAC,MAAM,EAAE,CAAC;YAEZ,qCAAqC;YACrC,MAAM,KAAK,GAAI,EAAE,CAAC,OAAO,CAAC,QAAoB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC5D,OAAO,KAAK,CAAC,GAAG,KAAK,EAAE,CAAC;YAC1B,CAAC,CAAC,CAAC;YAEH,wFAAwF;YACxF,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC;YACnC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;YAE1B,qDAAqD;YACrD,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC;YACpB,4BAA4B;QAC9B,CAAC;QAED,SAAS,oBAAoB,CAAC,IAAI,EAAE,KAAK;YACvC,+DAA+D;YAC/D,OAAO,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,cAAc,CAAC,GAAG,EAAE;YAClB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,GAAG,EAAE;YACb,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACtB,4BAA4B;YAC5B,uBAAuB;YACvB,qBAAqB;YACrB,0BAA0B;YAC1B,qBAAqB;YACrB,4BAA4B;YAC5B,qBAAqB;YACrB,QAAQ;YACR,0DAA0D;YAC1D,wEAAwE;YAExE,+BAA+B;YAC/B,cAAc;YACd,4HAA4H;YAC5H,WAAW;YACX,QAAQ;YAER,sCAAsC;YACtC,4EAA4E;YAC5E,sBAAsB;YAEtB,oBAAoB;YACpB,QAAQ;YACR,MAAM;YACN,OAAO,CAAC,CACN,aAAa,EACb;gBACE,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,aAAa;gBACb,oBAAoB;gBACpB,aAAa;aACd;YACD,4CAA4C;YAC5C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE;gBAC9C,MAAM,MAAM,GAAY,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAEjE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;oBACrB,IAAI,CACF,gEAAgE,MAAM,CAAC,MAAM,oCAAoC,CAClH,CAAC;iBACH;gBAED,MAAM,KAAK,GAAU,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC/B,qEAAqE;gBACrE,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC;gBAEf,OAAO,KAAK,CAAC;YACf,CAAC,CAAC,CACH,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}