@spcsn/taro-mini-runner 1.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 (154) hide show
  1. package/README.md +103 -0
  2. package/dist/entrypoints/mini-runner.d.ts +2 -0
  3. package/dist/entrypoints/mini-runner.js +96 -0
  4. package/dist/entrypoints/mini-runner.js.map +1 -0
  5. package/dist/index.d.ts +5 -0
  6. package/dist/index.js +9 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/mini-program/config.d.ts +3 -0
  9. package/dist/mini-program/config.js +237 -0
  10. package/dist/mini-program/config.js.map +1 -0
  11. package/dist/mini-program/default-config.d.ts +3 -0
  12. package/dist/mini-program/default-config.js +49 -0
  13. package/dist/mini-program/default-config.js.map +1 -0
  14. package/dist/mini-program/emit.d.ts +3 -0
  15. package/dist/mini-program/emit.js +247 -0
  16. package/dist/mini-program/emit.js.map +1 -0
  17. package/dist/mini-program/entry.d.ts +3 -0
  18. package/dist/mini-program/entry.js +142 -0
  19. package/dist/mini-program/entry.js.map +1 -0
  20. package/dist/mini-program/index.d.ts +3 -0
  21. package/dist/mini-program/index.js +29 -0
  22. package/dist/mini-program/index.js.map +1 -0
  23. package/dist/mini-program/native-support.d.ts +6 -0
  24. package/dist/mini-program/native-support.js +160 -0
  25. package/dist/mini-program/native-support.js.map +1 -0
  26. package/dist/mini-program/page.d.ts +4 -0
  27. package/dist/mini-program/page.js +223 -0
  28. package/dist/mini-program/page.js.map +1 -0
  29. package/dist/mini-program/pipeline.d.ts +3 -0
  30. package/dist/mini-program/pipeline.js +46 -0
  31. package/dist/mini-program/pipeline.js.map +1 -0
  32. package/dist/mini-program/postcss.d.ts +6 -0
  33. package/dist/mini-program/postcss.js +26 -0
  34. package/dist/mini-program/postcss.js.map +1 -0
  35. package/dist/mini-program/style.d.ts +3 -0
  36. package/dist/mini-program/style.js +67 -0
  37. package/dist/mini-program/style.js.map +1 -0
  38. package/dist/plugins/rollup-plugin-increment.d.ts +8 -0
  39. package/dist/plugins/rollup-plugin-increment.js +52 -0
  40. package/dist/plugins/rollup-plugin-increment.js.map +1 -0
  41. package/dist/plugins/vite-plugin-assets.d.ts +3 -0
  42. package/dist/plugins/vite-plugin-assets.js +135 -0
  43. package/dist/plugins/vite-plugin-assets.js.map +1 -0
  44. package/dist/plugins/vite-plugin-multi-platform.d.ts +3 -0
  45. package/dist/plugins/vite-plugin-multi-platform.js +71 -0
  46. package/dist/plugins/vite-plugin-multi-platform.js.map +1 -0
  47. package/dist/react-framework/index.d.ts +27 -0
  48. package/dist/react-framework/index.js +36 -0
  49. package/dist/react-framework/index.js.map +1 -0
  50. package/dist/react-framework/loader-meta.d.ts +3 -0
  51. package/dist/react-framework/loader-meta.js +151 -0
  52. package/dist/react-framework/loader-meta.js.map +1 -0
  53. package/dist/react-framework/runtime/connect-native.d.ts +10 -0
  54. package/dist/react-framework/runtime/connect-native.js +392 -0
  55. package/dist/react-framework/runtime/connect-native.js.map +1 -0
  56. package/dist/react-framework/runtime/connect.d.ts +14 -0
  57. package/dist/react-framework/runtime/connect.js +313 -0
  58. package/dist/react-framework/runtime/connect.js.map +1 -0
  59. package/dist/react-framework/runtime/hooks.d.ts +30 -0
  60. package/dist/react-framework/runtime/hooks.js +87 -0
  61. package/dist/react-framework/runtime/hooks.js.map +1 -0
  62. package/dist/react-framework/runtime/index.d.ts +3 -0
  63. package/dist/react-framework/runtime/index.js +49 -0
  64. package/dist/react-framework/runtime/index.js.map +1 -0
  65. package/dist/react-framework/runtime/react-meta.d.ts +7 -0
  66. package/dist/react-framework/runtime/react-meta.js +9 -0
  67. package/dist/react-framework/runtime/react-meta.js.map +1 -0
  68. package/dist/react-framework/runtime/utils.d.ts +13 -0
  69. package/dist/react-framework/runtime/utils.js +45 -0
  70. package/dist/react-framework/runtime/utils.js.map +1 -0
  71. package/dist/react-framework/vite.mini.d.ts +3 -0
  72. package/dist/react-framework/vite.mini.js +135 -0
  73. package/dist/react-framework/vite.mini.js.map +1 -0
  74. package/dist/react-runtime/component-tree.d.ts +19 -0
  75. package/dist/react-runtime/component-tree.js +65 -0
  76. package/dist/react-runtime/component-tree.js.map +1 -0
  77. package/dist/react-runtime/constant.d.ts +7 -0
  78. package/dist/react-runtime/constant.js +78 -0
  79. package/dist/react-runtime/constant.js.map +1 -0
  80. package/dist/react-runtime/dom-input.d.ts +12 -0
  81. package/dist/react-runtime/dom-input.js +86 -0
  82. package/dist/react-runtime/dom-input.js.map +1 -0
  83. package/dist/react-runtime/event.d.ts +13 -0
  84. package/dist/react-runtime/event.js +83 -0
  85. package/dist/react-runtime/event.js.map +1 -0
  86. package/dist/react-runtime/index.d.ts +33 -0
  87. package/dist/react-runtime/index.js +75 -0
  88. package/dist/react-runtime/index.js.map +1 -0
  89. package/dist/react-runtime/input-value-tracking.d.ts +3 -0
  90. package/dist/react-runtime/input-value-tracking.js +84 -0
  91. package/dist/react-runtime/input-value-tracking.js.map +1 -0
  92. package/dist/react-runtime/props.d.ts +7 -0
  93. package/dist/react-runtime/props.js +153 -0
  94. package/dist/react-runtime/props.js.map +1 -0
  95. package/dist/react-runtime/reconciler.d.ts +5 -0
  96. package/dist/react-runtime/reconciler.js +217 -0
  97. package/dist/react-runtime/reconciler.js.map +1 -0
  98. package/dist/react-runtime/render.d.ts +25 -0
  99. package/dist/react-runtime/render.js +97 -0
  100. package/dist/react-runtime/render.js.map +1 -0
  101. package/dist/react-runtime/work-tags.d.ts +26 -0
  102. package/dist/react-runtime/work-tags.js +29 -0
  103. package/dist/react-runtime/work-tags.js.map +1 -0
  104. package/dist/shared/compiler/base.d.ts +41 -0
  105. package/dist/shared/compiler/base.js +170 -0
  106. package/dist/shared/compiler/base.js.map +1 -0
  107. package/dist/shared/compiler/mini.d.ts +20 -0
  108. package/dist/shared/compiler/mini.js +147 -0
  109. package/dist/shared/compiler/mini.js.map +1 -0
  110. package/dist/shared/component.d.ts +2 -0
  111. package/dist/shared/component.js +21 -0
  112. package/dist/shared/component.js.map +1 -0
  113. package/dist/shared/constants.d.ts +47 -0
  114. package/dist/shared/constants.js +51 -0
  115. package/dist/shared/constants.js.map +1 -0
  116. package/dist/shared/create-filter.d.ts +7 -0
  117. package/dist/shared/create-filter.js +97 -0
  118. package/dist/shared/create-filter.js.map +1 -0
  119. package/dist/shared/html.d.ts +1 -0
  120. package/dist/shared/html.js +19 -0
  121. package/dist/shared/html.js.map +1 -0
  122. package/dist/shared/index.d.ts +39 -0
  123. package/dist/shared/index.js +258 -0
  124. package/dist/shared/index.js.map +1 -0
  125. package/dist/shared/logger.d.ts +7 -0
  126. package/dist/shared/logger.js +146 -0
  127. package/dist/shared/logger.js.map +1 -0
  128. package/dist/shared/map.d.ts +11 -0
  129. package/dist/shared/map.js +41 -0
  130. package/dist/shared/map.js.map +1 -0
  131. package/dist/shared/profile.d.ts +9 -0
  132. package/dist/shared/profile.js +52 -0
  133. package/dist/shared/profile.js.map +1 -0
  134. package/dist/shared/rollup.d.ts +8 -0
  135. package/dist/shared/rollup.js +40 -0
  136. package/dist/shared/rollup.js.map +1 -0
  137. package/dist/shared/runner/constant.d.ts +5 -0
  138. package/dist/shared/runner/constant.js +53 -0
  139. package/dist/shared/runner/constant.js.map +1 -0
  140. package/dist/shared/runner/index.d.ts +2 -0
  141. package/dist/shared/runner/index.js +19 -0
  142. package/dist/shared/runner/index.js.map +1 -0
  143. package/dist/shared/runner/vite.d.ts +3 -0
  144. package/dist/shared/runner/vite.js +10 -0
  145. package/dist/shared/runner/vite.js.map +1 -0
  146. package/dist/style-transforms/html-transform.d.ts +14 -0
  147. package/dist/style-transforms/html-transform.js +124 -0
  148. package/dist/style-transforms/html-transform.js.map +1 -0
  149. package/dist/style-transforms/px-transform.d.ts +40 -0
  150. package/dist/style-transforms/px-transform.js +252 -0
  151. package/dist/style-transforms/px-transform.js.map +1 -0
  152. package/dist/templates/comp.js +5 -0
  153. package/dist/templates/custom-wrapper.js +5 -0
  154. package/package.json +67 -0
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.miniVitePlugin = miniVitePlugin;
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const taro_helper_1 = require("@spcsn/taro-helper");
10
+ const loader_meta_1 = require("./loader-meta");
11
+ const JSX_DEV_RUNTIME_SHIM_ID = '\0taro-react-jsx-dev-runtime-shim';
12
+ function miniVitePlugin(ctx, framework) {
13
+ return [injectLoaderMeta(ctx, framework), aliasPlugin(ctx)];
14
+ }
15
+ function injectLoaderMeta(ctx, framework) {
16
+ return {
17
+ name: 'taro-react:loader-meta',
18
+ buildStart() {
19
+ const { runnerUtils } = ctx;
20
+ const { getViteMiniCompilerContext } = runnerUtils;
21
+ const viteCompilerContext = getViteMiniCompilerContext(this);
22
+ if (viteCompilerContext) {
23
+ viteCompilerContext.loaderMeta ||= {};
24
+ Object.assign(viteCompilerContext.loaderMeta, (0, loader_meta_1.getLoaderMeta)(framework));
25
+ }
26
+ },
27
+ };
28
+ }
29
+ function resolvePackageDir(id, resolveOptions, extraBasedirs = []) {
30
+ for (const basedir of [resolveOptions.basedir, ...extraBasedirs, __dirname, node_path_1.default.resolve(__dirname, '../../')]) {
31
+ try {
32
+ return node_path_1.default.dirname(require.resolve(`${id}/package.json`, { paths: [basedir] }));
33
+ }
34
+ catch (_error) {
35
+ // fallback to @spcsn/taro-helper resolver below
36
+ }
37
+ const pkgPath = (0, taro_helper_1.resolveSync)(`${id}/package.json`, { ...resolveOptions, basedir });
38
+ if (pkgPath) {
39
+ return node_path_1.default.dirname(pkgPath);
40
+ }
41
+ }
42
+ throw new Error(`Cannot resolve package: ${id}`);
43
+ }
44
+ function resolvePackageFile(packageDir, candidates) {
45
+ for (const candidate of candidates) {
46
+ const filePath = node_path_1.default.join(packageDir, candidate);
47
+ if (node_fs_1.default.existsSync(filePath)) {
48
+ return filePath;
49
+ }
50
+ }
51
+ throw new Error(`Cannot resolve package file from: ${packageDir}`);
52
+ }
53
+ function aliasPlugin(ctx) {
54
+ let jsxDevRuntimeShim = '';
55
+ const taroReactFile = node_path_1.default.resolve(__dirname, '../react-runtime/index.js');
56
+ return {
57
+ name: 'taro-react:alias',
58
+ config(config) {
59
+ const mainFields = ['unpkg', ...taro_helper_1.defaultMainFields];
60
+ const resolveOptions = {
61
+ basedir: process.cwd(),
62
+ mainFields,
63
+ };
64
+ const alias = [
65
+ { find: /react-dom$/, replacement: taroReactFile },
66
+ { find: /react-dom\/client$/, replacement: taroReactFile },
67
+ ];
68
+ const isProd = config.mode === 'production';
69
+ if (!isProd && ctx.initialConfig.mini?.debugReact !== true) {
70
+ const reactDir = resolvePackageDir('react', resolveOptions);
71
+ const reactDomDir = resolvePackageDir('react-dom', resolveOptions);
72
+ const reconcilerDir = resolvePackageDir('react-reconciler', resolveOptions, [node_path_1.default.resolve(__dirname, '..')]);
73
+ const schedulerDir = resolvePackageDir('scheduler', resolveOptions, [
74
+ node_path_1.default.resolve(__dirname, '..'),
75
+ reactDomDir,
76
+ ]);
77
+ // 开发模式下默认使用 production 版本的 react 减小体积。debugReact 时保留 dev 版本。
78
+ alias.push({
79
+ find: /^react-reconciler$/,
80
+ replacement: resolvePackageFile(reconcilerDir, [
81
+ 'cjs/react-reconciler.production.min.js',
82
+ 'cjs/react-reconciler.production.js',
83
+ ]),
84
+ });
85
+ alias.push({
86
+ find: /^react$/,
87
+ replacement: resolvePackageFile(reactDir, ['cjs/react.production.min.js', 'cjs/react.production.js']),
88
+ });
89
+ alias.push({
90
+ find: /^scheduler$/,
91
+ replacement: resolvePackageFile(schedulerDir, [
92
+ 'cjs/scheduler.production.min.js',
93
+ 'cjs/scheduler.production.js',
94
+ ]),
95
+ });
96
+ alias.push({
97
+ find: /^react\/jsx-runtime$/,
98
+ replacement: resolvePackageFile(reactDir, [
99
+ 'cjs/react-jsx-runtime.production.min.js',
100
+ 'cjs/react-jsx-runtime.production.js',
101
+ ]),
102
+ });
103
+ const jsxRuntimeFile = resolvePackageFile(reactDir, [
104
+ 'cjs/react-jsx-runtime.production.min.js',
105
+ 'cjs/react-jsx-runtime.production.js',
106
+ ]);
107
+ jsxDevRuntimeShim = [
108
+ `import { Fragment, jsx, jsxs } from ${JSON.stringify(jsxRuntimeFile)}`,
109
+ 'export { Fragment }',
110
+ 'export function jsxDEV(type, props, key, isStaticChildren) {',
111
+ ' return isStaticChildren ? jsxs(type, props, key) : jsx(type, props, key)',
112
+ '}',
113
+ ].join('\n');
114
+ alias.push({
115
+ find: /^react\/jsx-dev-runtime$/,
116
+ replacement: JSX_DEV_RUNTIME_SHIM_ID,
117
+ });
118
+ }
119
+ return {
120
+ resolve: {
121
+ alias,
122
+ },
123
+ };
124
+ },
125
+ resolveId(id) {
126
+ if (id === JSX_DEV_RUNTIME_SHIM_ID)
127
+ return id;
128
+ },
129
+ load(id) {
130
+ if (id === JSX_DEV_RUNTIME_SHIM_ID)
131
+ return jsxDevRuntimeShim;
132
+ },
133
+ };
134
+ }
135
+ //# sourceMappingURL=vite.mini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite.mini.js","sourceRoot":"","sources":["../../src/react-framework/vite.mini.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { TaroElement, TaroText } from '@spcsn/taro-runtime';
2
+ import type { Fiber } from 'react-reconciler';
3
+ import type { Props } from './props';
4
+ export declare function precacheFiberNode(hostInst: Fiber, node: TaroElement | TaroText): void;
5
+ export declare function markContainerAsRoot(hostRoot: Fiber, node: TaroElement | TaroText): void;
6
+ export declare function unmarkContainerAsRoot(node: TaroElement | TaroText): void;
7
+ export declare function isContainerMarkedAsRoot(node: TaroElement | TaroText): boolean;
8
+ /**
9
+ * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent
10
+ * instance, or null if the node was not rendered by this React.
11
+ */
12
+ export declare function getInstanceFromNode(node: TaroElement | TaroText): Fiber | null;
13
+ /**
14
+ * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding
15
+ * DOM node.
16
+ */
17
+ export declare function getNodeFromInstance(inst: Fiber): any;
18
+ export declare function getFiberCurrentPropsFromNode(node: TaroElement | TaroText): Props;
19
+ export declare function updateFiberProps(node: TaroElement | TaroText, props: Props): void;
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.precacheFiberNode = precacheFiberNode;
4
+ exports.markContainerAsRoot = markContainerAsRoot;
5
+ exports.unmarkContainerAsRoot = unmarkContainerAsRoot;
6
+ exports.isContainerMarkedAsRoot = isContainerMarkedAsRoot;
7
+ exports.getInstanceFromNode = getInstanceFromNode;
8
+ exports.getNodeFromInstance = getNodeFromInstance;
9
+ exports.getFiberCurrentPropsFromNode = getFiberCurrentPropsFromNode;
10
+ exports.updateFiberProps = updateFiberProps;
11
+ /**
12
+ * 给 TaroElement 绑定 react fiber、react props 等属性
13
+ * 提供 fiber -> element、element -> fiber、element -> props 的方法
14
+ */
15
+ const constant_1 = require("./constant");
16
+ const work_tags_1 = require("./work-tags");
17
+ function precacheFiberNode(hostInst, node) {
18
+ node[constant_1.internalInstanceKey] = hostInst;
19
+ }
20
+ function markContainerAsRoot(hostRoot, node) {
21
+ node[constant_1.internalContainerInstanceKey] = hostRoot;
22
+ }
23
+ function unmarkContainerAsRoot(node) {
24
+ node[constant_1.internalContainerInstanceKey] = null;
25
+ }
26
+ function isContainerMarkedAsRoot(node) {
27
+ return !!node[constant_1.internalContainerInstanceKey];
28
+ }
29
+ /**
30
+ * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent
31
+ * instance, or null if the node was not rendered by this React.
32
+ */
33
+ function getInstanceFromNode(node) {
34
+ const inst = node[constant_1.internalInstanceKey] || node[constant_1.internalContainerInstanceKey];
35
+ if (inst) {
36
+ if (inst.tag === work_tags_1.HostComponent ||
37
+ inst.tag === work_tags_1.HostText ||
38
+ inst.tag === work_tags_1.SuspenseComponent ||
39
+ inst.tag === work_tags_1.HostRoot) {
40
+ return inst;
41
+ }
42
+ else {
43
+ return null;
44
+ }
45
+ }
46
+ return null;
47
+ }
48
+ /**
49
+ * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding
50
+ * DOM node.
51
+ */
52
+ function getNodeFromInstance(inst) {
53
+ if (inst.tag === work_tags_1.HostComponent || inst.tag === work_tags_1.HostText) {
54
+ // In Fiber this, is just the state node right now. We assume it will be
55
+ // a host component or host text.
56
+ return inst.stateNode;
57
+ }
58
+ }
59
+ function getFiberCurrentPropsFromNode(node) {
60
+ return node[constant_1.internalPropsKey] || null;
61
+ }
62
+ function updateFiberProps(node, props) {
63
+ node[constant_1.internalPropsKey] = props;
64
+ }
65
+ //# sourceMappingURL=component-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-tree.js","sourceRoot":"","sources":["../../src/react-runtime/component-tree.ts"],"names":[],"mappings":";;AAWA,8CAEC;AAED,kDAEC;AAED,sDAEC;AAED,0DAEC;AAMD,kDAgBC;AAMD,kDAMC;AAED,oEAEC;AAED,4CAEC;AAnED;;;GAGG;AACH,yCAAiG;AACjG,2CAAmF;AAMnF,SAAgB,iBAAiB,CAAC,QAAe,EAAE,IAA4B;IAC7E,IAAI,CAAC,8BAAmB,CAAC,GAAG,QAAQ,CAAC;AACvC,CAAC;AAED,SAAgB,mBAAmB,CAAC,QAAe,EAAE,IAA4B;IAC/E,IAAI,CAAC,uCAA4B,CAAC,GAAG,QAAQ,CAAC;AAChD,CAAC;AAED,SAAgB,qBAAqB,CAAC,IAA4B;IAChE,IAAI,CAAC,uCAA4B,CAAC,GAAG,IAAI,CAAC;AAC5C,CAAC;AAED,SAAgB,uBAAuB,CAAC,IAA4B;IAClE,OAAO,CAAC,CAAC,IAAI,CAAC,uCAA4B,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,IAA4B;IAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,8BAAmB,CAAC,IAAI,IAAI,CAAC,uCAA4B,CAAC,CAAC;IAE7E,IAAI,IAAI,EAAE,CAAC;QACT,IACE,IAAI,CAAC,GAAG,KAAK,yBAAa;YAC1B,IAAI,CAAC,GAAG,KAAK,oBAAQ;YACrB,IAAI,CAAC,GAAG,KAAK,6BAAiB;YAC9B,IAAI,CAAC,GAAG,KAAK,oBAAQ,EACrB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,IAAW;IAC7C,IAAI,IAAI,CAAC,GAAG,KAAK,yBAAa,IAAI,IAAI,CAAC,GAAG,KAAK,oBAAQ,EAAE,CAAC;QACxD,wEAAwE;QACxE,iCAAiC;QACjC,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;AACH,CAAC;AAED,SAAgB,4BAA4B,CAAC,IAA4B;IACvE,OAAO,IAAI,CAAC,2BAAgB,CAAC,IAAI,IAAI,CAAC;AACxC,CAAC;AAED,SAAgB,gBAAgB,CAAC,IAA4B,EAAE,KAAY;IACzE,IAAI,CAAC,2BAAgB,CAAC,GAAG,KAAK,CAAC;AACjC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare const supportedInputTypes: {
2
+ [key: string]: boolean;
3
+ };
4
+ export declare function getEventPriority(domEventName: any): 1 | 4 | 16;
5
+ export declare const internalPropsKey: string;
6
+ export declare const internalInstanceKey: string;
7
+ export declare const internalContainerInstanceKey: string;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.internalContainerInstanceKey = exports.internalInstanceKey = exports.internalPropsKey = exports.supportedInputTypes = void 0;
4
+ exports.getEventPriority = getEventPriority;
5
+ const constants_1 = require("react-reconciler/constants");
6
+ exports.supportedInputTypes = {
7
+ color: true,
8
+ date: true,
9
+ datetime: true,
10
+ 'datetime-local': true,
11
+ email: true,
12
+ month: true,
13
+ number: true,
14
+ password: true,
15
+ range: true,
16
+ search: true,
17
+ tel: true,
18
+ text: true,
19
+ time: true,
20
+ url: true,
21
+ week: true,
22
+ };
23
+ function getEventPriority(domEventName) {
24
+ switch (domEventName) {
25
+ case 'cancel':
26
+ case 'click':
27
+ case 'close':
28
+ case 'contextmenu':
29
+ case 'copy':
30
+ case 'cut':
31
+ case 'dragend':
32
+ case 'dragstart':
33
+ case 'drop':
34
+ case 'input':
35
+ case 'paste':
36
+ case 'pause':
37
+ case 'play':
38
+ case 'pointercancel':
39
+ case 'pointerdown':
40
+ case 'pointerup':
41
+ case 'reset':
42
+ case 'resize':
43
+ case 'submit':
44
+ case 'touchcancel':
45
+ case 'touchend':
46
+ case 'touchstart':
47
+ case 'change':
48
+ case 'blur':
49
+ case 'focus':
50
+ case 'select':
51
+ case 'selectstart':
52
+ return constants_1.DiscreteEventPriority;
53
+ case 'drag':
54
+ case 'dragenter':
55
+ case 'dragexit':
56
+ case 'dragleave':
57
+ case 'dragover':
58
+ case 'pointermove':
59
+ case 'pointerout':
60
+ case 'pointerover':
61
+ case 'scroll':
62
+ case 'toggle':
63
+ case 'touchmove':
64
+ case 'pointerenter':
65
+ case 'pointerleave':
66
+ return constants_1.ContinuousEventPriority;
67
+ default:
68
+ return constants_1.DefaultEventPriority;
69
+ }
70
+ }
71
+ const randomKey = Math.random().toString(36).slice(2);
72
+ exports.internalPropsKey = '__reactProps$' + randomKey;
73
+ exports.internalInstanceKey = '__reactFiber$' + randomKey;
74
+ exports.internalContainerInstanceKey = '__reactContainer$' + randomKey;
75
+ // const internalEventHandlersKey = '__reactEvents$' + randomKey
76
+ // const internalEventHandlerListenersKey = '__reactListeners$' + randomKey
77
+ // const internalEventHandlesSetKey = '__reactHandles$' + randomKey
78
+ //# sourceMappingURL=constant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constant.js","sourceRoot":"","sources":["../../src/react-runtime/constant.ts"],"names":[],"mappings":";;;AAoBA,4CA+CC;AAnED,0DAAkH;AAErG,QAAA,mBAAmB,GAA+B;IAC7D,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,IAAI;IACd,gBAAgB,EAAE,IAAI;IACtB,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,GAAG,EAAE,IAAI;IACT,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,GAAG,EAAE,IAAI;IACT,IAAI,EAAE,IAAI;CACX,CAAC;AAEF,SAAgB,gBAAgB,CAAC,YAAY;IAC3C,QAAQ,YAAY,EAAE,CAAC;QACrB,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO,CAAC;QACb,KAAK,OAAO,CAAC;QACb,KAAK,aAAa,CAAC;QACnB,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK,CAAC;QACX,KAAK,SAAS,CAAC;QACf,KAAK,WAAW,CAAC;QACjB,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO,CAAC;QACb,KAAK,OAAO,CAAC;QACb,KAAK,OAAO,CAAC;QACb,KAAK,MAAM,CAAC;QACZ,KAAK,eAAe,CAAC;QACrB,KAAK,aAAa,CAAC;QACnB,KAAK,WAAW,CAAC;QACjB,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,aAAa,CAAC;QACnB,KAAK,UAAU,CAAC;QAChB,KAAK,YAAY,CAAC;QAClB,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ,CAAC;QACd,KAAK,aAAa;YAChB,OAAO,iCAAqB,CAAC;QAC/B,KAAK,MAAM,CAAC;QACZ,KAAK,WAAW,CAAC;QACjB,KAAK,UAAU,CAAC;QAChB,KAAK,WAAW,CAAC;QACjB,KAAK,UAAU,CAAC;QAChB,KAAK,aAAa,CAAC;QACnB,KAAK,YAAY,CAAC;QAClB,KAAK,aAAa,CAAC;QACnB,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,WAAW,CAAC;QACjB,KAAK,cAAc,CAAC;QACpB,KAAK,cAAc;YACjB,OAAO,mCAAuB,CAAC;QACjC;YACE,OAAO,gCAAoB,CAAC;IAChC,CAAC;AACH,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEzC,QAAA,gBAAgB,GAAG,eAAe,GAAG,SAAS,CAAC;AAC/C,QAAA,mBAAmB,GAAG,eAAe,GAAG,SAAS,CAAC;AAClD,QAAA,4BAA4B,GAAG,mBAAmB,GAAG,SAAS,CAAC;AAC5E,gEAAgE;AAChE,2EAA2E;AAC3E,mEAAmE"}
@@ -0,0 +1,12 @@
1
+ import { Props } from './props';
2
+ import type { FormElement, TaroElement } from '@spcsn/taro-runtime';
3
+ import type { RestoreType } from './event';
4
+ declare function updateInputWrapper(element: TaroElement, oldValue: RestoreType, props: Props): void;
5
+ export declare function getToStringValue(value: any): any;
6
+ export declare function toString(value: any): string;
7
+ export declare function updateWrapper(element: TaroElement, oldValue: RestoreType, props: Props): void;
8
+ export declare function setNodeValue(node: FormElement, oldValue: RestoreType, value: any, type?: string): void;
9
+ export declare function isTextInputElement(elem: TaroElement): boolean;
10
+ export declare const ReactDOMTextareaRestoreControlledState: typeof updateWrapper;
11
+ export declare const ReactDOMInputRestoreControlledState: typeof updateInputWrapper;
12
+ export {};
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReactDOMInputRestoreControlledState = exports.ReactDOMTextareaRestoreControlledState = void 0;
4
+ exports.getToStringValue = getToStringValue;
5
+ exports.toString = toString;
6
+ exports.updateWrapper = updateWrapper;
7
+ exports.setNodeValue = setNodeValue;
8
+ exports.isTextInputElement = isTextInputElement;
9
+ const constant_1 = require("./constant");
10
+ // 从 props 中,更新 input 组件的 value 值
11
+ function updateInputWrapper(element, oldValue, props) {
12
+ const node = element;
13
+ const checked = props.checked;
14
+ if (checked != null) {
15
+ console.warn('updateCheck is not supported for mini controlled inputs', node);
16
+ return;
17
+ }
18
+ updateWrapper(element, oldValue, props);
19
+ updateNamedCousins(element, props);
20
+ }
21
+ // react 中原本处理 type=radio 的逻辑;mini 运行时保留 no-op 兼容分支。
22
+ function updateNamedCousins(rootNode, props) {
23
+ const name = props.name;
24
+ if (props.type === 'radio' && name != null) {
25
+ console.warn('radio updateNamedCousins is not supported for mini controlled inputs', rootNode, props);
26
+ }
27
+ }
28
+ function getToStringValue(value) {
29
+ const isEmptyType = typeof value === 'function' || typeof value === 'symbol';
30
+ return isEmptyType ? '' : value;
31
+ }
32
+ function toString(value) {
33
+ return '' + value;
34
+ }
35
+ function updateWrapper(element, oldValue, props) {
36
+ const node = element;
37
+ const value = getToStringValue(props.value);
38
+ const type = props.type;
39
+ setNodeValue(node, oldValue, value, type);
40
+ }
41
+ // oldValue 为 event.detail.value,value 为 fiber.props.value
42
+ // 如果 oldValue 和 value 不相等,代表受控组件需要更新
43
+ // 更新的原则为,fiber.props.value 永远为用户所需要的值,因此 node.value = toString(value)
44
+ function hasDifferentNumericValue(oldValue, value) {
45
+ if (oldValue === value) {
46
+ return false;
47
+ }
48
+ const previousNumericValue = Number(oldValue);
49
+ const nextNumericValue = Number(value);
50
+ if (!Number.isNaN(previousNumericValue) && !Number.isNaN(nextNumericValue)) {
51
+ return previousNumericValue !== nextNumericValue;
52
+ }
53
+ return String(oldValue) !== String(value);
54
+ }
55
+ function setNodeValue(node, oldValue, value, type = 'string') {
56
+ if (value != null) {
57
+ if (type === 'number') {
58
+ if ((value === 0 && node.value === '') || hasDifferentNumericValue(oldValue, value)) {
59
+ node.value = toString(value);
60
+ }
61
+ }
62
+ else if (oldValue !== toString(value)) {
63
+ node.value = toString(value);
64
+ }
65
+ }
66
+ else if (type === 'submit' || type === 'reset') {
67
+ // Submit/reset inputs need the attribute removed completely to avoid
68
+ // blank-text buttons.
69
+ node.removeAttribute('value');
70
+ }
71
+ }
72
+ // 判断当前 TaroElement 是否为 supportedInputTypes input 或 textarea
73
+ function isTextInputElement(elem) {
74
+ const nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();
75
+ if (nodeName === 'input') {
76
+ const type = elem.type;
77
+ return !type || !!constant_1.supportedInputTypes[type];
78
+ }
79
+ if (nodeName === 'textarea') {
80
+ return true;
81
+ }
82
+ return false;
83
+ }
84
+ exports.ReactDOMTextareaRestoreControlledState = updateWrapper;
85
+ exports.ReactDOMInputRestoreControlledState = updateInputWrapper;
86
+ //# sourceMappingURL=dom-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom-input.js","sourceRoot":"","sources":["../../src/react-runtime/dom-input.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { TaroElement, TaroEvent } from '@spcsn/taro-runtime';
2
+ import type { Fiber } from 'react-reconciler';
3
+ export type RestoreType = string | number | boolean | any[];
4
+ interface RestoreItem {
5
+ target: TaroElement;
6
+ value: RestoreType;
7
+ }
8
+ export declare function getTargetInstForInputOrChangeEvent(e: TaroEvent, node: TaroElement): false | Fiber | undefined;
9
+ export declare function enqueueStateRestore(target: RestoreItem): void;
10
+ export declare function needsStateRestore(): boolean;
11
+ export declare function finishEventHandler(): void;
12
+ export declare function restoreStateIfNeeded(): void;
13
+ export {};
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTargetInstForInputOrChangeEvent = getTargetInstForInputOrChangeEvent;
4
+ exports.enqueueStateRestore = enqueueStateRestore;
5
+ exports.needsStateRestore = needsStateRestore;
6
+ exports.finishEventHandler = finishEventHandler;
7
+ exports.restoreStateIfNeeded = restoreStateIfNeeded;
8
+ const component_tree_1 = require("./component-tree");
9
+ const dom_input_1 = require("./dom-input");
10
+ const input_value_tracking_1 = require("./input-value-tracking");
11
+ const reconciler_1 = require("./reconciler");
12
+ let restoreQueue = null;
13
+ // 对比 TaroElement tracker 下的 value 和事件下的 value,判断 element 的值是否存在更改
14
+ function getTargetInstForInputOrChangeEvent(e, node) {
15
+ const targetInst = (0, component_tree_1.getInstanceFromNode)(node);
16
+ const domEventName = e.type;
17
+ if (!targetInst || !(0, dom_input_1.isTextInputElement)(node))
18
+ return;
19
+ if (domEventName === 'input' || domEventName === 'change') {
20
+ const nextValue = (0, dom_input_1.toString)(e.mpEvent?.detail?.value);
21
+ return getInstIfValueChanged(targetInst, nextValue);
22
+ }
23
+ }
24
+ function getInstIfValueChanged(targetInst, nextValue) {
25
+ const targetNode = (0, component_tree_1.getNodeFromInstance)(targetInst);
26
+ if (!targetNode)
27
+ return false;
28
+ if ((0, input_value_tracking_1.updateValueIfChanged)(targetNode, nextValue)) {
29
+ return targetInst;
30
+ }
31
+ }
32
+ // 把 target 塞入更新队列中
33
+ function enqueueStateRestore(target) {
34
+ if (restoreQueue) {
35
+ restoreQueue.push(target);
36
+ }
37
+ else {
38
+ restoreQueue = [target];
39
+ }
40
+ }
41
+ // 判断是否需要恢复 target(input、textarea) 的状态
42
+ function needsStateRestore() {
43
+ return restoreQueue !== null;
44
+ }
45
+ function finishEventHandler() {
46
+ const controlledComponentsHavePendingUpdates = needsStateRestore();
47
+ if (controlledComponentsHavePendingUpdates) {
48
+ reconciler_1.TaroReconciler.flushSync();
49
+ restoreStateIfNeeded();
50
+ }
51
+ }
52
+ // 遍历 restoreQueue、restoreTarget,恢复其状态
53
+ function restoreStateIfNeeded() {
54
+ if (!restoreQueue) {
55
+ return;
56
+ }
57
+ const queuedTargets = restoreQueue;
58
+ restoreQueue = null;
59
+ for (let i = 0; i < queuedTargets.length; i++) {
60
+ restoreStateOfTarget(queuedTargets[i]);
61
+ }
62
+ }
63
+ function restoreImpl(domElement, tag, oldValue, props) {
64
+ switch (tag) {
65
+ case 'input':
66
+ (0, dom_input_1.ReactDOMInputRestoreControlledState)(domElement, oldValue, props);
67
+ break;
68
+ case 'textarea':
69
+ (0, dom_input_1.ReactDOMTextareaRestoreControlledState)(domElement, oldValue, props);
70
+ break;
71
+ }
72
+ }
73
+ function restoreStateOfTarget(item) {
74
+ const internalInstance = (0, component_tree_1.getInstanceFromNode)(item.target);
75
+ if (!internalInstance)
76
+ return;
77
+ const { stateNode, type } = internalInstance;
78
+ if (stateNode) {
79
+ const props = (0, component_tree_1.getFiberCurrentPropsFromNode)(stateNode);
80
+ restoreImpl(stateNode, type, item.value, props);
81
+ }
82
+ }
83
+ //# sourceMappingURL=event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.js","sourceRoot":"","sources":["../../src/react-runtime/event.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { internalInstanceKey } from './constant';
2
+ import { createRoot, render } from './render';
3
+ import type { TaroElement } from '@spcsn/taro-runtime';
4
+ import type { ReactNode } from 'react';
5
+ declare const unstable_batchedUpdates: (fn: any, a: any) => any;
6
+ declare function unmountComponentAtNode(dom: TaroElement): boolean;
7
+ declare function findDOMNode(comp?: TaroElement | ReactNode): string | number | bigint | boolean | TaroElement | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | null;
8
+ declare function createPortal(children: ReactNode, containerInfo: TaroElement, key?: string): {
9
+ $$typeof: number | symbol;
10
+ key: string | null;
11
+ children: ReactNode;
12
+ containerInfo: TaroElement;
13
+ implementation: null;
14
+ };
15
+ declare const flushSync: {
16
+ (): void;
17
+ <R>(fn: () => R): R;
18
+ };
19
+ export { createPortal, createRoot, findDOMNode, flushSync, internalInstanceKey, render, unmountComponentAtNode, unstable_batchedUpdates, };
20
+ declare const _default: {
21
+ render: typeof render;
22
+ flushSync: {
23
+ (): void;
24
+ <R>(fn: () => R): R;
25
+ };
26
+ createRoot: typeof createRoot;
27
+ unstable_batchedUpdates: (fn: any, a: any) => any;
28
+ unmountComponentAtNode: typeof unmountComponentAtNode;
29
+ findDOMNode: typeof findDOMNode;
30
+ createPortal: typeof createPortal;
31
+ internalInstanceKey: string;
32
+ };
33
+ export default _default;
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.unstable_batchedUpdates = exports.render = exports.internalInstanceKey = exports.flushSync = exports.createRoot = void 0;
4
+ exports.createPortal = createPortal;
5
+ exports.findDOMNode = findDOMNode;
6
+ exports.unmountComponentAtNode = unmountComponentAtNode;
7
+ const taro_shared_1 = require("@spcsn/taro-shared");
8
+ const constant_1 = require("./constant");
9
+ Object.defineProperty(exports, "internalInstanceKey", { enumerable: true, get: function () { return constant_1.internalInstanceKey; } });
10
+ const event_1 = require("./event");
11
+ const reconciler_1 = require("./reconciler");
12
+ const render_1 = require("./render");
13
+ Object.defineProperty(exports, "createRoot", { enumerable: true, get: function () { return render_1.createRoot; } });
14
+ Object.defineProperty(exports, "render", { enumerable: true, get: function () { return render_1.render; } });
15
+ let isInsideEventHandler = false;
16
+ // 重新包裹 batchedUpdates,使其可以在触发事件后执行 finishEventHandler
17
+ const unstable_batchedUpdates = (fn, a) => {
18
+ if (isInsideEventHandler) {
19
+ return fn(a);
20
+ }
21
+ isInsideEventHandler = true;
22
+ try {
23
+ return reconciler_1.TaroReconciler.batchedUpdates(fn, a);
24
+ }
25
+ finally {
26
+ isInsideEventHandler = false;
27
+ (0, event_1.finishEventHandler)();
28
+ }
29
+ };
30
+ exports.unstable_batchedUpdates = unstable_batchedUpdates;
31
+ function unmountComponentAtNode(dom) {
32
+ (0, taro_shared_1.ensure)(dom && [1, 8, 9, 11].includes(dom.nodeType), 'unmountComponentAtNode(...): Target container is not a DOM element.');
33
+ const root = render_1.ContainerMap.get(dom);
34
+ if (!root)
35
+ return false;
36
+ unstable_batchedUpdates(() => {
37
+ root.unmount(() => {
38
+ render_1.ContainerMap.delete(dom);
39
+ });
40
+ }, null);
41
+ return true;
42
+ }
43
+ function findDOMNode(comp) {
44
+ if (comp == null) {
45
+ return null;
46
+ }
47
+ const nodeType = comp.nodeType;
48
+ if (nodeType === 1 || nodeType === 3) {
49
+ return comp;
50
+ }
51
+ return reconciler_1.TaroReconciler.findHostInstance(comp);
52
+ }
53
+ const portalType = (0, taro_shared_1.isFunction)(Symbol) && Symbol.for ? Symbol.for('react.portal') : 0xeaca;
54
+ function createPortal(children, containerInfo, key) {
55
+ return {
56
+ $$typeof: portalType,
57
+ key: key == null ? null : String(key),
58
+ children,
59
+ containerInfo,
60
+ implementation: null,
61
+ };
62
+ }
63
+ const flushSync = reconciler_1.TaroReconciler.flushSync;
64
+ exports.flushSync = flushSync;
65
+ exports.default = {
66
+ render: render_1.render,
67
+ flushSync,
68
+ createRoot: render_1.createRoot,
69
+ unstable_batchedUpdates,
70
+ unmountComponentAtNode,
71
+ findDOMNode,
72
+ createPortal,
73
+ internalInstanceKey: constant_1.internalInstanceKey,
74
+ };
75
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react-runtime/index.ts"],"names":[],"mappings":";;;AA2EE,oCAAY;AAEZ,kCAAW;AAIX,wDAAsB;AAjFxB,oDAAwD;AAExD,yCAAiD;AA6E/C,oGA7EO,8BAAmB,OA6EP;AA5ErB,mCAA6C;AAC7C,6CAA8C;AAC9C,qCAA4D;AAuE1D,2FAvEqB,mBAAU,OAuErB;AAIV,uFA3EiC,eAAM,OA2EjC;AAtER,IAAI,oBAAoB,GAAG,KAAK,CAAC;AAEjC,sDAAsD;AACtD,MAAM,uBAAuB,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;IACxC,IAAI,oBAAoB,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IACf,CAAC;IAED,oBAAoB,GAAG,IAAI,CAAC;IAE5B,IAAI,CAAC;QACH,OAAO,2BAAc,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;YAAS,CAAC;QACT,oBAAoB,GAAG,KAAK,CAAC;QAC7B,IAAA,0BAAkB,GAAE,CAAC;IACvB,CAAC;AACH,CAAC,CAAC;AAwDA,0DAAuB;AAtDzB,SAAS,sBAAsB,CAAC,GAAgB;IAC9C,IAAA,oBAAM,EACJ,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAC3C,qEAAqE,CACtE,CAAC;IAEF,MAAM,IAAI,GAAG,qBAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAEnC,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAExB,uBAAuB,CAAC,GAAG,EAAE;QAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YAChB,qBAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,IAAI,CAAC,CAAC;IAET,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAAC,IAA8B;IACjD,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAI,IAAoB,CAAC,QAAQ,CAAC;IAChD,IAAI,QAAQ,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,2BAAc,CAAC,gBAAgB,CAAC,IAA2B,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,GAAG,IAAA,wBAAU,EAAC,MAAM,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAE1F,SAAS,YAAY,CAAC,QAAmB,EAAE,aAA0B,EAAE,GAAY;IACjF,OAAO;QACL,QAAQ,EAAE,UAAU;QACpB,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QACrC,QAAQ;QACR,aAAa;QACb,cAAc,EAAE,IAAI;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,SAAS,GAAG,2BAAc,CAAC,SAAS,CAAC;AAMzC,8BAAS;AAOX,kBAAe;IACb,MAAM,EAAN,eAAM;IACN,SAAS;IACT,UAAU,EAAV,mBAAU;IACV,uBAAuB;IACvB,sBAAsB;IACtB,WAAW;IACX,YAAY;IACZ,mBAAmB,EAAnB,8BAAmB;CACpB,CAAC"}