@viewfly/core 2.1.0 → 3.0.0-alpha.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 (59) hide show
  1. package/README.md +67 -4
  2. package/dist/_utils/make-error.d.ts +1 -0
  3. package/dist/base/_api.d.ts +12 -0
  4. package/dist/base/_utils.d.ts +46 -0
  5. package/dist/base/component.d.ts +77 -0
  6. package/dist/base/context.d.ts +112 -0
  7. package/dist/base/dep.d.ts +9 -0
  8. package/dist/base/injection-tokens.d.ts +20 -0
  9. package/dist/base/jsx-element.d.ts +64 -0
  10. package/dist/base/lifecycle.d.ts +54 -0
  11. package/dist/base/ref.d.ts +50 -0
  12. package/dist/base/renderer.d.ts +4 -0
  13. package/dist/base/root.component.d.ts +9 -0
  14. package/dist/base/types.d.ts +29 -0
  15. package/dist/di/_api.d.ts +10 -0
  16. package/dist/di/forward-ref.d.ts +10 -0
  17. package/dist/di/injectable.d.ts +20 -0
  18. package/dist/di/injection-token.d.ts +8 -0
  19. package/dist/di/injector.d.ts +26 -0
  20. package/dist/di/metadata.d.ts +43 -0
  21. package/dist/di/null-injector.d.ts +6 -0
  22. package/dist/di/provider.d.ts +30 -0
  23. package/dist/di/reflective-injector.d.ts +30 -0
  24. package/dist/di/reflective-provider.d.ts +20 -0
  25. package/dist/di/type.d.ts +7 -0
  26. package/dist/di/utils/_api.d.ts +3 -0
  27. package/dist/di/utils/annotations.d.ts +33 -0
  28. package/dist/di/utils/decorators.d.ts +17 -0
  29. package/dist/di/utils/stringify.d.ts +1 -0
  30. package/dist/index.d.ts +5 -0
  31. package/dist/index.esm.js +2302 -0
  32. package/dist/index.js +2940 -0
  33. package/dist/jsx-runtime/index.d.ts +7 -0
  34. package/dist/jsx-runtime/index.esm.js +2 -0
  35. package/dist/jsx-runtime/index.js +26 -0
  36. package/dist/jsx-runtime.d.ts +7 -0
  37. package/dist/reactive/_api.d.ts +7 -0
  38. package/dist/reactive/_help.d.ts +15 -0
  39. package/dist/reactive/array-handlers.d.ts +30 -0
  40. package/dist/reactive/computed.d.ts +10 -0
  41. package/dist/reactive/effect.d.ts +13 -0
  42. package/dist/reactive/iterable-iterator.d.ts +5 -0
  43. package/dist/reactive/map-handlers.d.ts +12 -0
  44. package/dist/reactive/reactive.d.ts +141 -0
  45. package/dist/reactive/set-handlers.d.ts +11 -0
  46. package/dist/reactive/shallow-reactive.d.ts +6 -0
  47. package/dist/reactive/signal.d.ts +38 -0
  48. package/dist/reactive/watch-effect.d.ts +7 -0
  49. package/dist/reactive/watch.d.ts +8 -0
  50. package/dist/viewfly.d.ts +30 -0
  51. package/package.json +29 -29
  52. package/bundles/index.d.ts +0 -768
  53. package/bundles/index.esm.js +0 -2700
  54. package/bundles/index.js +0 -2777
  55. package/jsx-runtime/index.d.ts +0 -25
  56. package/jsx-runtime/index.esm.js +0 -11
  57. package/jsx-runtime/index.js +0 -14
  58. package/jsx-runtime/package.json +0 -29
  59. package/rollup-d.config.ts +0 -14
package/dist/index.js ADDED
@@ -0,0 +1,2940 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ require("reflect-metadata");
3
+ //#region src/di/forward-ref.ts
4
+ var ForwardRef = class {
5
+ constructor(forwardRefFn) {
6
+ this.forwardRefFn = forwardRefFn;
7
+ }
8
+ getRef() {
9
+ return this.forwardRefFn();
10
+ }
11
+ };
12
+ /**
13
+ * 引用后声明的类的工具函数
14
+ * @param fn
15
+ */
16
+ function forwardRef(fn) {
17
+ return new ForwardRef(fn);
18
+ }
19
+ //#endregion
20
+ //#region src/di/utils/annotations.ts
21
+ /**
22
+ * 用于保存 class 的元数据
23
+ */
24
+ var Annotations = class {
25
+ classes = /* @__PURE__ */ new Map();
26
+ props = /* @__PURE__ */ new Map();
27
+ params = /* @__PURE__ */ new Map();
28
+ setClassMetadata(token, params) {
29
+ this.classes.set(token, params);
30
+ }
31
+ getClassMetadata(token) {
32
+ return this.classes.get(token);
33
+ }
34
+ pushParamMetadata(token, params) {
35
+ if (this.params.has(token)) this.params.get(token).push(params);
36
+ else this.params.set(token, [params]);
37
+ }
38
+ getParamMetadata(token) {
39
+ return this.params.get(token);
40
+ }
41
+ getPropMetadataKeys() {
42
+ return Array.from(this.props.keys());
43
+ }
44
+ pushPropMetadata(token, params) {
45
+ if (this.props.has(token)) this.props.get(token).push(params);
46
+ else this.props.set(token, [params]);
47
+ }
48
+ getPropMetadata(token) {
49
+ return this.props.get(token);
50
+ }
51
+ };
52
+ //#endregion
53
+ //#region src/di/utils/decorators.ts
54
+ /**
55
+ * 创建参数装饰器的工厂函数
56
+ */
57
+ function makeParamDecorator(token, metadata) {
58
+ return function(target, propertyKey, parameterIndex) {
59
+ getAnnotations(target).pushParamMetadata(token, {
60
+ propertyKey,
61
+ parameterIndex,
62
+ metadata
63
+ });
64
+ };
65
+ }
66
+ /**
67
+ * 创建属性装饰器的工厂函数
68
+ */
69
+ function makePropertyDecorator(token, injectToken, contextCallback) {
70
+ return function(target, propertyKey) {
71
+ getAnnotations(target.constructor).pushPropMetadata(token, {
72
+ injectToken: injectToken || Reflect.getMetadata("design:type", target, propertyKey),
73
+ propertyKey,
74
+ contextCallback
75
+ });
76
+ };
77
+ }
78
+ /**
79
+ * 创建类装饰器的工厂函数
80
+ */
81
+ function makeClassDecorator(token, metadata) {
82
+ return function(target) {
83
+ getAnnotations(target).setClassMetadata(token, {
84
+ paramTypes: Reflect.getMetadata("design:paramtypes", target),
85
+ metadata
86
+ });
87
+ };
88
+ }
89
+ /**
90
+ * 获取类注解的工具函数
91
+ */
92
+ function getAnnotations(target) {
93
+ const key = "__annotations__";
94
+ if (!target.hasOwnProperty(key)) target[key] = new Annotations();
95
+ return target[key];
96
+ }
97
+ //#endregion
98
+ //#region src/di/injectable.ts
99
+ var Scope = class {
100
+ constructor(name) {
101
+ this.name = name;
102
+ }
103
+ toString() {
104
+ return this.name || "[anonymous provide scope]";
105
+ }
106
+ };
107
+ /**
108
+ * 可注入类的装饰器
109
+ */
110
+ var Injectable = function InjectableDecorator(options) {
111
+ if (this instanceof InjectableDecorator) this.provideIn = options?.provideIn || null;
112
+ else return makeClassDecorator(Injectable, new Injectable(options));
113
+ };
114
+ //#endregion
115
+ //#region src/di/injection-token.ts
116
+ /**
117
+ * 生成自定义依赖注入 token 的类
118
+ */
119
+ var InjectionToken = class {
120
+ constructor(description) {
121
+ this.description = description;
122
+ }
123
+ toString() {
124
+ return this.description || "[anonymous injection token]";
125
+ }
126
+ };
127
+ //#endregion
128
+ //#region src/di/injector.ts
129
+ /**
130
+ * 查找规则
131
+ */
132
+ var InjectFlags = /* @__PURE__ */ function(InjectFlags) {
133
+ /** 默认查找规则 */
134
+ InjectFlags["Default"] = "Default";
135
+ /** 锁定当前容器 */
136
+ InjectFlags["Self"] = "Self";
137
+ /** 跳过当前容器 */
138
+ InjectFlags["SkipSelf"] = "SkipSelf";
139
+ /** 可选查找 */
140
+ InjectFlags["Optional"] = "Optional";
141
+ return InjectFlags;
142
+ }({});
143
+ /**
144
+ * DI 容器抽象基类
145
+ */
146
+ var Injector = class {};
147
+ //#endregion
148
+ //#region src/di/metadata.ts
149
+ /**
150
+ * 构造函数参数装饰器,用于改变注入 token
151
+ */
152
+ var Inject = function InjectDecorator(token) {
153
+ if (this instanceof Inject) this.token = token;
154
+ else return makeParamDecorator(Inject, new Inject(token));
155
+ };
156
+ var Self = function SelfDecorator() {
157
+ if (!(this instanceof Self)) return makeParamDecorator(Self, new Self());
158
+ };
159
+ var SkipSelf = function SkipSelfDecorator() {
160
+ if (!(this instanceof SkipSelf)) return makeParamDecorator(SkipSelf, new SkipSelf());
161
+ };
162
+ var Optional = function OptionalDecorator() {
163
+ if (!(this instanceof Optional)) return makeParamDecorator(Optional, new Optional());
164
+ };
165
+ var Prop = function PropDecorator(token, notFoundValue, flags) {
166
+ if (!(this instanceof Prop)) return makePropertyDecorator(Prop, token, function(instance, propertyName, token, injector) {
167
+ instance[propertyName] = injector.get(token instanceof ForwardRef ? token.getRef() : token, notFoundValue, flags);
168
+ });
169
+ };
170
+ //#endregion
171
+ //#region src/di/utils/stringify.ts
172
+ function stringify(token) {
173
+ if (typeof token === "string") return token;
174
+ if (Array.isArray(token)) return "[" + token.map(stringify).join(", ") + "]";
175
+ if (token == null) return "" + token;
176
+ if (token.name) return `${token.name}`;
177
+ if (token.token) return `${token.token}`;
178
+ const res = token.toString();
179
+ if (res == null) return "" + res;
180
+ const newLineIndex = res.indexOf("\n");
181
+ return newLineIndex === -1 ? res : res.substring(0, newLineIndex);
182
+ }
183
+ //#endregion
184
+ //#region src/_utils/make-error.ts
185
+ function makeError(name) {
186
+ return function viewflyError(message) {
187
+ const error = new Error(message);
188
+ error.name = `[ViewflyError: ${name}]`;
189
+ error.stack = error.stack.replace(/\n.*?(?=\n)/, "");
190
+ return error;
191
+ };
192
+ }
193
+ //#endregion
194
+ //#region src/di/null-injector.ts
195
+ var THROW_IF_NOT_FOUND = { __debug_value__: "THROW_IF_NOT_FOUND" };
196
+ var nullInjectorErrorFn = (token) => {
197
+ return makeError("NullInjector")(`No provide for \`${stringify(token)}\`!`);
198
+ };
199
+ var NullInjector = class {
200
+ parentInjector = null;
201
+ get(token, notFoundValue = THROW_IF_NOT_FOUND, _) {
202
+ if (notFoundValue === THROW_IF_NOT_FOUND) throw nullInjectorErrorFn(token);
203
+ return notFoundValue;
204
+ }
205
+ };
206
+ //#endregion
207
+ //#region src/di/reflective-provider.ts
208
+ /**
209
+ * 标准化 provide,并返回统一数据结构
210
+ * @param provider
211
+ */
212
+ function normalizeProvider(provider) {
213
+ if (provider.useValue) return normalizeValueProviderFactory(provider);
214
+ if (provider.useClass) return normalizeClassProviderFactory(provider);
215
+ if (provider.useExisting) return normalizeExistingProviderFactory(provider);
216
+ if (provider.useFactory) return normalizeFactoryProviderFactory(provider);
217
+ if (provider.provide) {
218
+ if (provider.provide instanceof InjectionToken) return normalizeValueProviderFactory(provider);
219
+ return normalizeConstructorProviderFactory(provider);
220
+ }
221
+ return normalizeTypeProviderFactory(provider);
222
+ }
223
+ function normalizeValueProviderFactory(provider) {
224
+ return {
225
+ provide: provider.provide,
226
+ scope: null,
227
+ generateFactory() {
228
+ return function() {
229
+ return provider.useValue;
230
+ };
231
+ },
232
+ deps: []
233
+ };
234
+ }
235
+ function normalizeClassProviderFactory(provider) {
236
+ let deps;
237
+ let provideIn = null;
238
+ if (provider.deps) deps = normalizeDeps(provider.provide, provider.deps);
239
+ else {
240
+ const resolvedClass = resolveClassParams(provider.useClass);
241
+ provideIn = resolvedClass.scope;
242
+ deps = normalizeDeps(provider.provide, resolvedClass.deps);
243
+ }
244
+ return {
245
+ provide: provider.provide,
246
+ scope: provideIn,
247
+ deps,
248
+ generateFactory(injector, cacheFn) {
249
+ return function(...args) {
250
+ const instance = new provider.useClass(...args);
251
+ cacheFn(provider.provide, instance);
252
+ getAnnotations(provider.useClass).getPropMetadataKeys().forEach((key) => {
253
+ getAnnotations(provider.useClass).getPropMetadata(key).forEach((item) => {
254
+ item.contextCallback(instance, item.propertyKey, item.injectToken, injector);
255
+ });
256
+ });
257
+ return instance;
258
+ };
259
+ }
260
+ };
261
+ }
262
+ function normalizeExistingProviderFactory(provider) {
263
+ return {
264
+ provide: provider.provide,
265
+ scope: null,
266
+ generateFactory(injector) {
267
+ return function() {
268
+ return injector.get(provider.useExisting);
269
+ };
270
+ },
271
+ deps: []
272
+ };
273
+ }
274
+ function normalizeFactoryProviderFactory(provider) {
275
+ return {
276
+ provide: provider.provide,
277
+ scope: null,
278
+ generateFactory() {
279
+ return function(...args) {
280
+ return provider.useFactory(...args);
281
+ };
282
+ },
283
+ deps: normalizeDeps(provider.provide, provider.deps || [])
284
+ };
285
+ }
286
+ function normalizeConstructorProviderFactory(provider) {
287
+ return normalizeClassProviderFactory({
288
+ ...provider,
289
+ useClass: provider.provide
290
+ });
291
+ }
292
+ function normalizeTypeProviderFactory(provider) {
293
+ return normalizeClassProviderFactory({
294
+ provide: provider,
295
+ useClass: provider
296
+ });
297
+ }
298
+ function resolveClassParams(construct) {
299
+ const annotations = getAnnotations(construct);
300
+ const metadata = annotations.getClassMetadata(Injectable);
301
+ if (typeof metadata === "undefined") throw new Error(`Class \`${stringify(construct)}\` is not injectable!`);
302
+ const deps = (metadata.paramTypes || []).map((i) => [i]);
303
+ [
304
+ Inject,
305
+ Self,
306
+ SkipSelf,
307
+ Optional
308
+ ].forEach((key) => {
309
+ (annotations.getParamMetadata(key) || []).forEach((item) => {
310
+ deps[item.parameterIndex].push(item.metadata);
311
+ });
312
+ });
313
+ return {
314
+ scope: metadata.metadata.provideIn,
315
+ deps
316
+ };
317
+ }
318
+ function normalizeDeps(provide, deps) {
319
+ return deps.map((dep, index) => {
320
+ const r = {
321
+ injectKey: null,
322
+ optional: false,
323
+ visibility: null
324
+ };
325
+ if (!Array.isArray(dep)) r.injectKey = dep;
326
+ else for (let i = 0; i < dep.length; i++) {
327
+ const item = dep[i];
328
+ if (item instanceof Inject) r.injectKey = item.token;
329
+ else if (item instanceof Self || item instanceof SkipSelf) r.visibility = item;
330
+ else if (item instanceof Optional) r.optional = true;
331
+ else r.injectKey = item;
332
+ }
333
+ if (typeof r.injectKey === "undefined") throw new Error(`The ${index} th dependent parameter type of \`${stringify(provide)}\` was not obtained, if the dependency is declared later, you can refer to it using \`constructor(@Inject(forwardRef(() => [Type|InjectionToken])) paramName: [Type]) {}\``);
334
+ return r;
335
+ });
336
+ }
337
+ //#endregion
338
+ //#region src/di/reflective-injector.ts
339
+ var reflectiveInjectorErrorFn = (token) => {
340
+ return makeError("ReflectiveInjector")(`No provide for \`${stringify(token)}\`!`);
341
+ };
342
+ var provideScopeError = (token) => {
343
+ return makeError("ProvideScope")(`Can not found provide scope \`${stringify(token)}\`!`);
344
+ };
345
+ /**
346
+ * 反射注入器
347
+ */
348
+ var ReflectiveInjector = class {
349
+ normalizedProviders;
350
+ recordValues = /* @__PURE__ */ new Map();
351
+ constructor(parentInjector, staticProviders, scope) {
352
+ this.parentInjector = parentInjector;
353
+ this.scope = scope;
354
+ this.normalizedProviders = staticProviders.map((provide) => {
355
+ return normalizeProvider(provide);
356
+ });
357
+ }
358
+ /**
359
+ * 用于获取当前注入器上下文内的实例、对象或数据
360
+ * @param token 访问 token
361
+ * @param notFoundValue 如未查找到的返回值
362
+ * @param flags 查询规则
363
+ */
364
+ get(token, notFoundValue = THROW_IF_NOT_FOUND, flags) {
365
+ flags = flags || InjectFlags.Default;
366
+ if (flags === InjectFlags.SkipSelf) {
367
+ if (this.parentInjector) return this.parentInjector.get(token, notFoundValue);
368
+ if (notFoundValue !== THROW_IF_NOT_FOUND) return notFoundValue;
369
+ throw reflectiveInjectorErrorFn(token);
370
+ }
371
+ if (this.recordValues.has(token)) return this.recordValues.get(token);
372
+ for (let i = 0; i < this.normalizedProviders.length; i++) {
373
+ const normalizedProvider = this.normalizedProviders[i];
374
+ if (normalizedProvider.provide === token) return this.getValue(token, normalizedProvider);
375
+ }
376
+ if (!(token instanceof InjectionToken)) {
377
+ const scope = getAnnotations(token).getClassMetadata(Injectable)?.metadata.provideIn;
378
+ if (scope) {
379
+ const normalizedProvider = normalizeProvider(token);
380
+ if (this.scope === scope) {
381
+ this.normalizedProviders.push(normalizedProvider);
382
+ return this.getValue(token, normalizedProvider);
383
+ }
384
+ const parentInjector = this.parentInjector;
385
+ if (!parentInjector || parentInjector instanceof NullInjector) {
386
+ if (normalizedProvider.scope === "root") {
387
+ this.normalizedProviders.push(normalizedProvider);
388
+ return this.getValue(token, normalizedProvider);
389
+ }
390
+ if (notFoundValue !== THROW_IF_NOT_FOUND) return notFoundValue;
391
+ throw provideScopeError(normalizedProvider.scope);
392
+ }
393
+ }
394
+ }
395
+ if (flags === InjectFlags.Self) {
396
+ if (notFoundValue === THROW_IF_NOT_FOUND) throw reflectiveInjectorErrorFn(token);
397
+ return notFoundValue;
398
+ }
399
+ if (this.parentInjector) return this.parentInjector.get(token, notFoundValue, flags === InjectFlags.Optional ? InjectFlags.Optional : InjectFlags.Default);
400
+ if (notFoundValue === THROW_IF_NOT_FOUND) throw reflectiveInjectorErrorFn(token);
401
+ return notFoundValue;
402
+ }
403
+ getValue(token, normalizedProvider) {
404
+ const { generateFactory, deps } = normalizedProvider;
405
+ const params = this.resolveDeps(deps);
406
+ let value = this.recordValues.get(token);
407
+ if (value) return value;
408
+ value = generateFactory(this, (token, value) => {
409
+ this.recordValues.set(token, value);
410
+ })(...params);
411
+ this.recordValues.set(token, value);
412
+ return value;
413
+ }
414
+ /**
415
+ * 解决并获取依赖参数
416
+ * @param deps 依赖规则
417
+ * @private
418
+ */
419
+ resolveDeps(deps) {
420
+ return deps.map((dep) => {
421
+ let reflectiveValue;
422
+ const tryValue = {};
423
+ const injectToken = dep.injectKey instanceof ForwardRef ? dep.injectKey.getRef() : dep.injectKey;
424
+ if (dep.visibility instanceof Self) reflectiveValue = this.get(injectToken, tryValue, InjectFlags.Self);
425
+ else if (dep.visibility instanceof SkipSelf) if (this.parentInjector) reflectiveValue = this.parentInjector.get(injectToken, tryValue);
426
+ else {
427
+ if (dep.optional) return null;
428
+ throw reflectiveInjectorErrorFn(injectToken);
429
+ }
430
+ else reflectiveValue = this.get(injectToken, tryValue);
431
+ if (reflectiveValue === tryValue) {
432
+ if (dep.optional) return null;
433
+ throw reflectiveInjectorErrorFn(injectToken);
434
+ }
435
+ return reflectiveValue;
436
+ });
437
+ }
438
+ };
439
+ //#endregion
440
+ //#region src/di/type.ts
441
+ var Type = Function;
442
+ //#endregion
443
+ //#region src/base/lifecycle.ts
444
+ /**
445
+ * 当组件挂载后调用回调函数
446
+ * @param callback 回调函数
447
+ * @returns 一个函数,用于停止监听
448
+ * @example
449
+ * ```tsx
450
+ * function App() {
451
+ * onMounted(() => {
452
+ * console.log('App mounted!')
453
+ * return () => {
454
+ * console.log('destroy prev mount!')
455
+ * }
456
+ * })
457
+ * return () => <div>...</div>
458
+ * }
459
+ * ```
460
+ */
461
+ function onMounted(callback) {
462
+ const component = getSetupContext();
463
+ if (!component.mountCallbacks) component.mountCallbacks = [];
464
+ component.mountCallbacks.push(callback);
465
+ }
466
+ /**
467
+ * 当组件视图更新后调用回调函数
468
+ * @param callback 回调函数
469
+ * @returns 一个函数,用于停止监听
470
+ * @example
471
+ * ```tsx
472
+ * function App() {
473
+ * onUpdated(() => {
474
+ * console.log('App updated!')
475
+ * return () => {
476
+ * console.log('destroy prev update!')
477
+ * }
478
+ * })
479
+ * return () => <div>...</div>
480
+ * }
481
+ * ```
482
+ */
483
+ function onUpdated(callback) {
484
+ const component = getSetupContext();
485
+ if (!component.updatedCallbacks) component.updatedCallbacks = [];
486
+ component.updatedCallbacks.push(callback);
487
+ return () => {
488
+ const index = component.updatedCallbacks.indexOf(callback);
489
+ if (index > -1) component.updatedCallbacks.splice(index, 1);
490
+ };
491
+ }
492
+ /**
493
+ * 当组件销毁后调用回调函数
494
+ * @param callback 回调函数
495
+ * @returns 一个函数,用于停止监听
496
+ * @example
497
+ * ```tsx
498
+ * function App() {
499
+ * onUnmounted(() => {
500
+ * console.log('App unmounted!')
501
+ * })
502
+ * return () => <div>...</div>
503
+ * }
504
+ * ```
505
+ */
506
+ function onUnmounted(callback) {
507
+ const component = getSetupContext();
508
+ if (!component.unmountedCallbacks) component.unmountedCallbacks = [];
509
+ component.unmountedCallbacks.push(callback);
510
+ }
511
+ //#endregion
512
+ //#region src/reactive/_help.ts
513
+ var toStr$1 = Object.prototype.toString;
514
+ function getStringType$1(v) {
515
+ return toStr$1.call(v);
516
+ }
517
+ function isArray$1(v) {
518
+ return Array.isArray(v);
519
+ }
520
+ var hasOwnProperty$1 = Object.prototype.hasOwnProperty;
521
+ function hasOwn$1(target, key) {
522
+ return hasOwnProperty$1.call(target, key);
523
+ }
524
+ //#endregion
525
+ //#region src/base/dep.ts
526
+ var Dep = class {
527
+ destroyCallbacks = [];
528
+ constructor(effect) {
529
+ this.effect = effect;
530
+ }
531
+ destroy() {
532
+ this.destroyCallbacks.forEach((callback) => callback());
533
+ this.destroyCallbacks = [];
534
+ }
535
+ };
536
+ var deps$1 = [];
537
+ function getDepContext() {
538
+ return deps$1.at(-1);
539
+ }
540
+ function pushDepContext(dep) {
541
+ deps$1.push(dep);
542
+ }
543
+ function popDepContext() {
544
+ deps$1.pop();
545
+ }
546
+ //#endregion
547
+ //#region src/reactive/effect.ts
548
+ var subscribers$1 = /* @__PURE__ */ new WeakMap();
549
+ function getSubscriber$1(target) {
550
+ let subscriber = subscribers$1.get(target);
551
+ if (!subscriber) {
552
+ subscriber = /* @__PURE__ */ new Map();
553
+ subscribers$1.set(target, subscriber);
554
+ }
555
+ return subscriber;
556
+ }
557
+ var TrackOpTypes = /* @__PURE__ */ function(TrackOpTypes) {
558
+ TrackOpTypes["Get"] = "Get";
559
+ TrackOpTypes["Has"] = "Has";
560
+ TrackOpTypes["Iterate"] = "Iterate";
561
+ return TrackOpTypes;
562
+ }({});
563
+ var TriggerOpTypes = /* @__PURE__ */ function(TriggerOpTypes) {
564
+ TriggerOpTypes["Set"] = "Set";
565
+ TriggerOpTypes["Add"] = "Add";
566
+ TriggerOpTypes["Delete"] = "Delete";
567
+ TriggerOpTypes["Clear"] = "Clear";
568
+ return TriggerOpTypes;
569
+ }({});
570
+ var unKnownKey$1 = Symbol("unKnownKey");
571
+ function track(target, type, key = unKnownKey$1) {
572
+ const dep = getDepContext();
573
+ if (dep) {
574
+ const subscriber = getSubscriber$1(target);
575
+ let record = subscriber.get(type);
576
+ if (!record) {
577
+ record = /* @__PURE__ */ new Map();
578
+ subscriber.set(type, record);
579
+ }
580
+ let effects = record.get(key);
581
+ if (!effects) {
582
+ effects = new Set([dep]);
583
+ record.set(key, effects);
584
+ dep.destroyCallbacks.push(() => {
585
+ effects.delete(dep);
586
+ });
587
+ } else if (!effects.has(dep)) {
588
+ dep.destroyCallbacks.push(() => {
589
+ effects.delete(dep);
590
+ });
591
+ effects.add(dep);
592
+ }
593
+ }
594
+ }
595
+ function runEffect$1(key, record) {
596
+ if (!record) return;
597
+ const effects = record.get(key);
598
+ if (effects) [...effects].forEach((i) => i.effect());
599
+ }
600
+ function trigger(target, type, key = unKnownKey$1) {
601
+ const subscriber = getSubscriber$1(target);
602
+ if (subscriber) switch (type) {
603
+ case TriggerOpTypes.Set:
604
+ if (isArray$1(target)) runEffect$1(unKnownKey$1, subscriber.get(TrackOpTypes.Iterate));
605
+ runEffect$1(key, subscriber.get(TrackOpTypes.Get));
606
+ runEffect$1(key, subscriber.get(TrackOpTypes.Has));
607
+ break;
608
+ case TriggerOpTypes.Add:
609
+ case TriggerOpTypes.Clear:
610
+ case TriggerOpTypes.Delete:
611
+ runEffect$1(unKnownKey$1, subscriber.get(TrackOpTypes.Iterate));
612
+ runEffect$1(key, subscriber.get(TrackOpTypes.Has));
613
+ runEffect$1(key, subscriber.get(TrackOpTypes.Get));
614
+ break;
615
+ }
616
+ }
617
+ //#endregion
618
+ //#region src/reactive/iterable-iterator.ts
619
+ function createIterableIterator$1(wrapper) {
620
+ return {
621
+ *entries() {
622
+ const target = toRaw(this);
623
+ track(target, TrackOpTypes.Iterate);
624
+ for (const [key, value] of target.entries()) yield [wrapper(key), wrapper(value)];
625
+ },
626
+ *keys() {
627
+ const target = toRaw(this);
628
+ track(target, TrackOpTypes.Iterate);
629
+ for (const item of target.keys()) yield wrapper(item);
630
+ },
631
+ *values() {
632
+ const target = toRaw(this);
633
+ track(target, TrackOpTypes.Iterate);
634
+ for (const item of target.values()) yield wrapper(item);
635
+ }
636
+ };
637
+ }
638
+ //#endregion
639
+ //#region src/reactive/array-handlers.ts
640
+ function applyPredicateMethod$1(self, methodName, predicate, wrapper, thisArg) {
641
+ const target = toRaw(self);
642
+ track(target, TrackOpTypes.Iterate);
643
+ return target[methodName]((value, index, array) => {
644
+ return predicate.call(target, wrapper(value), index, array);
645
+ }, thisArg);
646
+ }
647
+ function applySearchMethod$1(self, methodName, args) {
648
+ const target = toRaw(self);
649
+ track(target, TrackOpTypes.Iterate);
650
+ return target[methodName](...args.map(toRaw));
651
+ }
652
+ function createArrayHandlers$1(wrapper) {
653
+ return {
654
+ concat(...items) {
655
+ const target = toRaw(this);
656
+ trigger(target, TriggerOpTypes.Add);
657
+ return target.concat(...items);
658
+ },
659
+ every(predicate, thisArg) {
660
+ return applyPredicateMethod$1(this, "every", predicate, wrapper, thisArg);
661
+ },
662
+ filter(predicate, thisArg) {
663
+ return applyPredicateMethod$1(this, "filter", predicate, wrapper, thisArg);
664
+ },
665
+ find(predicate, thisArg) {
666
+ return applyPredicateMethod$1(this, "find", predicate, wrapper, thisArg);
667
+ },
668
+ findIndex(predicate, thisArg) {
669
+ return applyPredicateMethod$1(this, "findIndex", predicate, wrapper, thisArg);
670
+ },
671
+ findLast(predicate, thisArg) {
672
+ return applyPredicateMethod$1(this, "findLast", predicate, wrapper, thisArg);
673
+ },
674
+ findLastIndex(predicate, thisArg) {
675
+ return applyPredicateMethod$1(this, "findLastIndex", predicate, wrapper, thisArg);
676
+ },
677
+ forEach(callbackfn, thisArg) {
678
+ return applyPredicateMethod$1(this, "forEach", callbackfn, wrapper, thisArg);
679
+ },
680
+ includes(...args) {
681
+ return applySearchMethod$1(this, "includes", args);
682
+ },
683
+ indexOf(...args) {
684
+ return applySearchMethod$1(this, "indexOf", args);
685
+ },
686
+ join(separator) {
687
+ const target = toRaw(this);
688
+ track(target, TrackOpTypes.Iterate);
689
+ return target.join(separator);
690
+ },
691
+ lastIndexOf(...args) {
692
+ return applySearchMethod$1(this, "lastIndexOf", args);
693
+ },
694
+ map(callbackFn, thisArg) {
695
+ return applyPredicateMethod$1(this, "map", callbackFn, wrapper, thisArg);
696
+ },
697
+ pop() {
698
+ const target = toRaw(this);
699
+ trigger(target, TriggerOpTypes.Delete);
700
+ return target.pop();
701
+ },
702
+ push(...items) {
703
+ const target = toRaw(this);
704
+ trigger(target, TriggerOpTypes.Add);
705
+ return target.push(...items);
706
+ },
707
+ reduce(callbackFn, ...args) {
708
+ const target = toRaw(this);
709
+ track(target, TrackOpTypes.Iterate);
710
+ return target.reduce((p, c, i, a) => {
711
+ if (args.length > 0) return callbackFn(p, wrapper(c), i, a);
712
+ return callbackFn(wrapper(p), wrapper(c), i, a);
713
+ }, ...args);
714
+ },
715
+ reduceRight(callbackFn, ...args) {
716
+ const target = toRaw(this);
717
+ track(target, TrackOpTypes.Iterate);
718
+ return target.reduceRight((p, c, i, a) => {
719
+ if (args.length > 0) return callbackFn(p, wrapper(c), i, a);
720
+ return callbackFn(wrapper(p), wrapper(c), i, a);
721
+ }, ...args);
722
+ },
723
+ shift() {
724
+ const target = toRaw(this);
725
+ trigger(target, TriggerOpTypes.Delete);
726
+ return target.shift();
727
+ },
728
+ some(predicate, thisArg) {
729
+ return applyPredicateMethod$1(this, "some", predicate, wrapper, thisArg);
730
+ },
731
+ splice(start, deleteCount) {
732
+ const target = toRaw(this);
733
+ trigger(target, TriggerOpTypes.Set);
734
+ trigger(target, TriggerOpTypes.Add);
735
+ trigger(target, TriggerOpTypes.Delete);
736
+ return target.splice(start, deleteCount).map((i) => wrapper(i));
737
+ },
738
+ toReversed() {
739
+ const target = toRaw(this);
740
+ track(target, TrackOpTypes.Iterate);
741
+ return target.toReversed();
742
+ },
743
+ toSorted(compareFn) {
744
+ const target = toRaw(this);
745
+ track(target, TrackOpTypes.Iterate);
746
+ return target.toSorted(compareFn);
747
+ },
748
+ toSpliced(start, deleteCount, ...items) {
749
+ const target = toRaw(this);
750
+ track(target, TrackOpTypes.Iterate);
751
+ return target.toSpliced(start, deleteCount, ...items);
752
+ },
753
+ unshift(...items) {
754
+ const target = toRaw(this);
755
+ trigger(target, TriggerOpTypes.Add);
756
+ return target.unshift(...items);
757
+ },
758
+ [Symbol.iterator]() {
759
+ return this.values();
760
+ },
761
+ ...createIterableIterator$1(wrapper)
762
+ };
763
+ }
764
+ //#endregion
765
+ //#region src/reactive/map-handlers.ts
766
+ function createMapHandlers$1(wrapper) {
767
+ return {
768
+ get(key) {
769
+ const target = toRaw(this);
770
+ track(target, TrackOpTypes.Get, key);
771
+ return wrapper(target.get(key));
772
+ },
773
+ set(key, value) {
774
+ const target = toRaw(this);
775
+ key = toRaw(key);
776
+ value = toRaw(value);
777
+ const has = target.has(key);
778
+ const r = target.set(key, value);
779
+ trigger(target, has ? TriggerOpTypes.Set : TriggerOpTypes.Add, key);
780
+ return r;
781
+ },
782
+ has(key) {
783
+ const target = toRaw(this);
784
+ key = toRaw(key);
785
+ track(target, TrackOpTypes.Has, key);
786
+ return target.has(key);
787
+ },
788
+ delete(key) {
789
+ const target = toRaw(this);
790
+ key = toRaw(key);
791
+ const r = target.delete(key);
792
+ trigger(target, TriggerOpTypes.Delete, key);
793
+ return r;
794
+ },
795
+ forEach(callbackFn, thisArg) {
796
+ const target = toRaw(this);
797
+ track(target, TrackOpTypes.Iterate, void 0);
798
+ target.forEach((v, k, m) => {
799
+ callbackFn.call(this, wrapper(v), wrapper(k), m);
800
+ }, thisArg);
801
+ },
802
+ clear() {
803
+ const target = toRaw(this);
804
+ target.clear();
805
+ trigger(target, TriggerOpTypes.Clear, void 0);
806
+ },
807
+ [Symbol.iterator]() {
808
+ return this.entries();
809
+ },
810
+ ...createIterableIterator$1(wrapper)
811
+ };
812
+ }
813
+ //#endregion
814
+ //#region src/reactive/set-handlers.ts
815
+ function createSetHandlers$1(wrapper) {
816
+ return {
817
+ add(value) {
818
+ const target = toRaw(this);
819
+ value = toRaw(value);
820
+ if (!target.has(value)) {
821
+ target.add(value);
822
+ trigger(target, TriggerOpTypes.Add, void 0);
823
+ }
824
+ return this;
825
+ },
826
+ delete(value) {
827
+ const target = toRaw(this);
828
+ value = toRaw(value);
829
+ const has = target.has(value);
830
+ const b = target.delete(value);
831
+ if (!has) trigger(target, TriggerOpTypes.Delete, void 0);
832
+ return b;
833
+ },
834
+ has(key) {
835
+ const target = toRaw(this);
836
+ key = toRaw(key);
837
+ track(target, TrackOpTypes.Has, key);
838
+ return target.has(key);
839
+ },
840
+ forEach(callbackFn, thisArg) {
841
+ const target = toRaw(this);
842
+ track(target, TrackOpTypes.Iterate, void 0);
843
+ target.forEach((v, k, m) => {
844
+ callbackFn.call(this, wrapper(v), wrapper(k), m);
845
+ }, thisArg);
846
+ },
847
+ clear() {
848
+ const target = toRaw(this);
849
+ if (target.size !== 0) {
850
+ target.clear();
851
+ trigger(target, TriggerOpTypes.Clear, void 0);
852
+ }
853
+ },
854
+ [Symbol.iterator]() {
855
+ return this.values();
856
+ },
857
+ ...createIterableIterator$1(wrapper)
858
+ };
859
+ }
860
+ //#endregion
861
+ //#region src/reactive/reactive.ts
862
+ var reactiveErrorFn$1 = makeError("reactive");
863
+ var rawToProxyCache = /* @__PURE__ */ new WeakMap();
864
+ var proxyToRawCache = /* @__PURE__ */ new WeakMap();
865
+ /**
866
+ * 将响应式对象转换为原始对象
867
+ * @param value 响应式对象
868
+ * @returns 原始对象
869
+ * @example
870
+ * ```tsx
871
+ * const obj = reactive({
872
+ * name: 'John',
873
+ * age: 18
874
+ * })
875
+ * console.log(toRaw(obj))
876
+ * ```
877
+ */
878
+ function toRaw(value) {
879
+ if (proxyToRawCache.has(value)) return proxyToRawCache.get(value);
880
+ return value;
881
+ }
882
+ /**
883
+ * 检查对象是否是响应式对象
884
+ * @param value 要检查的对象
885
+ * @returns 是否是响应式对象
886
+ * @example
887
+ * ```tsx
888
+ * const obj = reactive({
889
+ * name: 'John',
890
+ * age: 18
891
+ * })
892
+ * console.log(isReactive(obj))
893
+ * ```
894
+ */
895
+ function isReactive(value) {
896
+ return proxyToRawCache.has(value);
897
+ }
898
+ var fromInternalWrite$1 = false;
899
+ /**
900
+ * 内部写入,用于避免类型为只读的响应式对象写入报错
901
+ * @param fn 要执行的函数
902
+ * @internal
903
+ */
904
+ function internalWrite(fn) {
905
+ fromInternalWrite$1 = true;
906
+ fn();
907
+ fromInternalWrite$1 = false;
908
+ }
909
+ var ObjectReactiveHandler = class {
910
+ isShallow;
911
+ isReadonly;
912
+ constructor(config) {
913
+ this.isReadonly = config.readonly;
914
+ this.isShallow = config.shallow;
915
+ }
916
+ set(target, p, newValue, receiver) {
917
+ if (this.isReadonly && !fromInternalWrite$1) throw reactiveErrorFn$1("Object is readonly!");
918
+ const rawValue = toRaw(newValue);
919
+ const oldValue = target[p];
920
+ const v = this.isShallow ? newValue : rawValue;
921
+ if (oldValue === rawValue) return Reflect.set(target, p, v, receiver);
922
+ const b = Reflect.set(target, p, v, receiver);
923
+ fromInternalWrite$1 = false;
924
+ if (hasOwn$1(target, p)) trigger(target, TriggerOpTypes.Set, p);
925
+ else trigger(target, TriggerOpTypes.Add, p);
926
+ return b;
927
+ }
928
+ get(target, p, receiver) {
929
+ track(target, TrackOpTypes.Get, p);
930
+ const value = Reflect.get(target, p, receiver);
931
+ if (this.isShallow) return value;
932
+ return reactive(value);
933
+ }
934
+ deleteProperty(target, p) {
935
+ const b = Reflect.deleteProperty(target, p);
936
+ trigger(target, TriggerOpTypes.Delete, p);
937
+ return b;
938
+ }
939
+ ownKeys(target) {
940
+ track(target, TrackOpTypes.Iterate);
941
+ return Reflect.ownKeys(target);
942
+ }
943
+ };
944
+ function noReactive$1(v) {
945
+ return v;
946
+ }
947
+ var ArrayReactiveHandler = class extends ObjectReactiveHandler {
948
+ interceptors = createArrayHandlers$1(this.isShallow ? noReactive$1 : reactive);
949
+ constructor(config) {
950
+ super(config);
951
+ }
952
+ get(target, p, receiver) {
953
+ if (Reflect.has(this.interceptors, p) && p in target) return this.interceptors[p];
954
+ return super.get(target, p, receiver);
955
+ }
956
+ };
957
+ var MapReactiveHandler = class extends ObjectReactiveHandler {
958
+ interceptors = createMapHandlers$1(this.isShallow ? noReactive$1 : reactive);
959
+ constructor(config) {
960
+ super(config);
961
+ }
962
+ get(target, p, receiver) {
963
+ if (Reflect.has(this.interceptors, p) && p in target) return this.interceptors[p];
964
+ if (p === "size") {
965
+ track(target, TrackOpTypes.Iterate, p);
966
+ return Reflect.get(target, p);
967
+ }
968
+ return super.get(target, p, receiver);
969
+ }
970
+ };
971
+ var SetReactiveHandler = class extends ObjectReactiveHandler {
972
+ interceptors = createSetHandlers$1(this.isShallow ? noReactive$1 : reactive);
973
+ constructor(config) {
974
+ super(config);
975
+ }
976
+ get(target, p, receiver) {
977
+ if (Reflect.has(this.interceptors, p) && p in target) return this.interceptors[p];
978
+ if (p === "size") {
979
+ track(target, TrackOpTypes.Iterate, p);
980
+ return Reflect.get(target, p);
981
+ }
982
+ return super.get(target, p, receiver);
983
+ }
984
+ };
985
+ var defaultObjectReactiveHandler = new ObjectReactiveHandler({
986
+ readonly: false,
987
+ shallow: false
988
+ });
989
+ var defaultArrayReactiveHandler = new ArrayReactiveHandler({
990
+ readonly: false,
991
+ shallow: false
992
+ });
993
+ var defaultMapReactiveHandler = new MapReactiveHandler({
994
+ readonly: false,
995
+ shallow: false
996
+ });
997
+ var defaultSetReactiveHandler = new SetReactiveHandler({
998
+ readonly: false,
999
+ shallow: false
1000
+ });
1001
+ var readonlyProxyHandler = new ObjectReactiveHandler({
1002
+ shallow: true,
1003
+ readonly: true
1004
+ });
1005
+ function createShallowReadonlyProxy(value) {
1006
+ return new Proxy(value, readonlyProxyHandler);
1007
+ }
1008
+ /**
1009
+ * 创建一个响应式对象
1010
+ * @param raw 原始对象
1011
+ * @returns 响应式对象
1012
+ * @example
1013
+ * ```tsx
1014
+ * const obj = reactive({
1015
+ * name: 'John',
1016
+ * age: 18,
1017
+ * children: [
1018
+ * {
1019
+ * name: 'Jane',
1020
+ * age: 16
1021
+ * }
1022
+ * ]
1023
+ * })
1024
+ * console.log(obj.name)
1025
+ * console.log(obj.children[0].name)
1026
+ * ```
1027
+ */
1028
+ function reactive(raw) {
1029
+ if (isReactive(raw)) return raw;
1030
+ let proxy = rawToProxyCache.get(raw);
1031
+ if (proxy) return proxy;
1032
+ switch (getStringType$1(raw)) {
1033
+ case "[object Object]":
1034
+ proxy = new Proxy(raw, defaultObjectReactiveHandler);
1035
+ break;
1036
+ case "[object Array]":
1037
+ proxy = new Proxy(raw, defaultArrayReactiveHandler);
1038
+ break;
1039
+ case "[object Set]":
1040
+ case "[object WeakSet]":
1041
+ proxy = new Proxy(raw, defaultSetReactiveHandler);
1042
+ break;
1043
+ case "[object Map]":
1044
+ case "[object WeakMap]":
1045
+ proxy = new Proxy(raw, defaultMapReactiveHandler);
1046
+ break;
1047
+ default: return raw;
1048
+ }
1049
+ rawToProxyCache.set(raw, proxy);
1050
+ proxyToRawCache.set(proxy, raw);
1051
+ return proxy;
1052
+ }
1053
+ //#endregion
1054
+ //#region src/base/_utils.ts
1055
+ function hasChange(newProps, oldProps) {
1056
+ const newKeys = Object.keys(oldProps);
1057
+ const oldKeys = Object.keys(newProps);
1058
+ if (oldKeys.length !== newKeys.length) return true;
1059
+ const len = oldKeys.length;
1060
+ for (let i = 0; i < len; i++) {
1061
+ const key = newKeys[i];
1062
+ if (newProps[key] !== oldProps[key]) return true;
1063
+ }
1064
+ return false;
1065
+ }
1066
+ function comparePropsWithCallbacks(oldProps, newProps, onDeleted, onAdded, onUpdated) {
1067
+ for (const key in oldProps) if (!(key in newProps)) onDeleted(key, oldProps[key]);
1068
+ for (const key in newProps) if (!(key in oldProps)) onAdded(key, newProps[key]);
1069
+ else if (oldProps[key] !== newProps[key]) onUpdated(key, newProps[key], oldProps[key]);
1070
+ }
1071
+ function classToString(config) {
1072
+ if (typeof config === "string") return config;
1073
+ if (!config) return "";
1074
+ if (Array.isArray(config)) {
1075
+ const classes = [];
1076
+ for (const i of config) {
1077
+ const v = classToString(i);
1078
+ if (v) classes.push(v);
1079
+ }
1080
+ return classes.join(" ");
1081
+ }
1082
+ if (typeof config === "object") {
1083
+ if (config.toString !== Object.prototype.toString && !config.toString.toString().includes("[native code]")) return config.toString();
1084
+ const classes = [];
1085
+ for (const key in config) if ({}.hasOwnProperty.call(config, key) && config[key]) classes.push(key);
1086
+ return classes.join(" ");
1087
+ }
1088
+ return "";
1089
+ }
1090
+ function styleToObject(style) {
1091
+ if (typeof style !== "string") return style || {};
1092
+ const obj = {};
1093
+ style.split(";").map((s) => s.split(":")).forEach((v) => {
1094
+ if (!v[0] || !v[1]) return;
1095
+ obj[v[0].trim()] = v[1].trim();
1096
+ });
1097
+ return obj;
1098
+ }
1099
+ var TextAtomType = Symbol("Text");
1100
+ var ElementAtomType = Symbol("Element");
1101
+ var ComponentAtomType = Symbol("Component");
1102
+ //#endregion
1103
+ //#region src/base/ref.ts
1104
+ var refErrorFn$1 = makeError("Ref");
1105
+ /**
1106
+ * 创建一个动态 ref,当 ref 的绑定的元素或组件初始化后,会调用副作用函数,并把元素或组件的实例作为参数传入。
1107
+ * @param effect 用于接收实例的副作用函数,该函数还可以返回一个清理副作用的函数,当元素或组件销毁时调用
1108
+ * @returns 一个函数,用于清理副作用
1109
+ * @example
1110
+ * ```tsx
1111
+ * function App() {
1112
+ * const ref = createDynamicRef<HTMLDivElement>((node) => {
1113
+ * console.log(node)
1114
+ * return () => {
1115
+ * console.log('destroy')
1116
+ * }
1117
+ * })
1118
+ * return () => {
1119
+ * return <div ref={ref}>test</div>
1120
+ * }
1121
+ * }
1122
+ * ```
1123
+ */
1124
+ function createDynamicRef(effect) {
1125
+ return effect;
1126
+ }
1127
+ /**
1128
+ * 创建一个引用对象,并添加到 JSX 节点上属性上,当组件渲染后,即可通过 .value 获取到绑定节点的实例
1129
+ * - 当绑定到虚拟 DOM 元素节点上时,value 为当前节点的 DOM 元素
1130
+ * - 当绑定到组件节点上时,value 为组件函数返回的对象
1131
+ * @example
1132
+ * ```tsx
1133
+ * function App() {
1134
+ * const ref = createRef<HTMLDivElement>()
1135
+ * onMounted(() => {
1136
+ * console.log(ref.value)
1137
+ * })
1138
+ * return () => {
1139
+ * return <div ref={ref}>...</div>
1140
+ * }
1141
+ * }
1142
+ * ```
1143
+ */
1144
+ function createRef() {
1145
+ return createShallowReadonlyProxy({ value: null });
1146
+ }
1147
+ function applyRefs(ref, value, refEffects) {
1148
+ if (!ref) return;
1149
+ const refs = toRefs(ref);
1150
+ const length = refs.length;
1151
+ for (let i = 0; i < length; i++) bindRefs(refs[i], value, refEffects);
1152
+ }
1153
+ function updateRefs(ref, value, refEffects) {
1154
+ if (!ref) {
1155
+ refEffects.forEach((fn, oldRef) => {
1156
+ refEffects.delete(oldRef);
1157
+ if (typeof fn === "function") fn();
1158
+ });
1159
+ return;
1160
+ }
1161
+ const newRefs = toRefs(ref);
1162
+ refEffects.forEach((fn, oldRef) => {
1163
+ if (newRefs.includes(oldRef)) return;
1164
+ refEffects.delete(oldRef);
1165
+ if (typeof fn === "function") fn();
1166
+ });
1167
+ const len = newRefs.length;
1168
+ for (let i = 0; i < len; i++) {
1169
+ const newRef = newRefs[i];
1170
+ if (refEffects.has(newRef)) continue;
1171
+ bindRefs(newRef, value, refEffects);
1172
+ }
1173
+ }
1174
+ function toRefs(ref) {
1175
+ return Array.isArray(ref) ? ref : [ref];
1176
+ }
1177
+ function bindRefs(ref, value, refEffects) {
1178
+ const type = typeof ref;
1179
+ if (type === "function") {
1180
+ const fn = ref(value);
1181
+ refEffects.set(ref, fn);
1182
+ } else if (type === "object") {
1183
+ internalWrite(() => {
1184
+ ref.value = value;
1185
+ });
1186
+ refEffects.set(ref, () => {
1187
+ internalWrite(() => {
1188
+ ref.value = null;
1189
+ });
1190
+ });
1191
+ } else throw refErrorFn$1("ref must be a function or `Ref<T>` object!");
1192
+ }
1193
+ //#endregion
1194
+ //#region src/base/component.ts
1195
+ var componentSetupStack$1 = [];
1196
+ var componentErrorFn$1 = makeError("component");
1197
+ function getSetupContext(need = true) {
1198
+ const current = componentSetupStack$1[componentSetupStack$1.length - 1];
1199
+ if (!current && need) throw componentErrorFn$1("cannot be called outside the component!");
1200
+ return current;
1201
+ }
1202
+ /**
1203
+ * Viewfly 组件管理类,用于管理组件的生命周期,上下文等
1204
+ */
1205
+ var Component = class {
1206
+ get dirty() {
1207
+ return this._dirty;
1208
+ }
1209
+ get changed() {
1210
+ return this._changed;
1211
+ }
1212
+ constructor(parentComponent, type, props, key) {
1213
+ this.parentComponent = parentComponent;
1214
+ this.type = type;
1215
+ this.props = props;
1216
+ this.key = key;
1217
+ this.instance = null;
1218
+ this.changedSubComponents = /* @__PURE__ */ new Set();
1219
+ this.viewMetadata = null;
1220
+ this.unmountedCallbacks = null;
1221
+ this.mountCallbacks = null;
1222
+ this.updatedCallbacks = null;
1223
+ this.updatedDestroyCallbacks = null;
1224
+ this._dirty = true;
1225
+ this._changed = false;
1226
+ this.isFirstRendering = true;
1227
+ this.rawProps = props;
1228
+ this.props = createShallowReadonlyProxy({ ...props });
1229
+ this.refEffects = /* @__PURE__ */ new Map();
1230
+ this.listener = new Dep(() => {
1231
+ this.markAsDirtied();
1232
+ });
1233
+ }
1234
+ markAsDirtied() {
1235
+ this._dirty = true;
1236
+ this.markAsChanged();
1237
+ }
1238
+ markAsChanged(changedComponent) {
1239
+ if (changedComponent) this.changedSubComponents.add(changedComponent);
1240
+ if (this._changed) return;
1241
+ this._changed = true;
1242
+ if (this.parentComponent) this.parentComponent.markAsChanged(this);
1243
+ }
1244
+ render(update) {
1245
+ componentSetupStack$1.push(this);
1246
+ const render = this.type(this.props);
1247
+ const isRenderFn = typeof render === "function";
1248
+ this.instance = isRenderFn ? { $render: render } : render;
1249
+ onMounted(() => {
1250
+ applyRefs(this.props.ref, this.instance, this.refEffects);
1251
+ return () => {
1252
+ this.refEffects.forEach((fn) => {
1253
+ if (typeof fn === "function") fn();
1254
+ });
1255
+ };
1256
+ });
1257
+ componentSetupStack$1.pop();
1258
+ pushDepContext(this.listener);
1259
+ const template = this.instance.$render();
1260
+ popDepContext();
1261
+ update(template, this.instance.$portalHost);
1262
+ this.rendered();
1263
+ }
1264
+ updateProps(newProps) {
1265
+ const oldProps = this.rawProps;
1266
+ this.rawProps = newProps;
1267
+ const newRefs = newProps.ref;
1268
+ comparePropsWithCallbacks(oldProps, newProps, (key) => {
1269
+ internalWrite(() => {
1270
+ Reflect.deleteProperty(oldProps, key);
1271
+ });
1272
+ }, (key, value) => {
1273
+ internalWrite(() => {
1274
+ this.props[key] = value;
1275
+ });
1276
+ }, (key, value) => {
1277
+ internalWrite(() => {
1278
+ this.props[key] = value;
1279
+ });
1280
+ });
1281
+ updateRefs(newRefs, this.instance, this.refEffects);
1282
+ }
1283
+ rerender() {
1284
+ this.listener.destroy();
1285
+ pushDepContext(this.listener);
1286
+ const template = this.instance.$render();
1287
+ popDepContext();
1288
+ return template;
1289
+ }
1290
+ destroy() {
1291
+ this.listener.destroy();
1292
+ if (this.updatedDestroyCallbacks) this.updatedDestroyCallbacks.forEach((fn) => {
1293
+ fn();
1294
+ });
1295
+ if (this.unmountedCallbacks) this.unmountedCallbacks.forEach((fn) => {
1296
+ fn();
1297
+ });
1298
+ this.parentComponent = this.updatedDestroyCallbacks = this.mountCallbacks = this.updatedCallbacks = this.unmountedCallbacks = null;
1299
+ }
1300
+ rendered() {
1301
+ this.changedSubComponents.clear();
1302
+ const is = this.isFirstRendering;
1303
+ this.isFirstRendering = false;
1304
+ this._dirty = this._changed = false;
1305
+ this.invokeUpdatedHooks();
1306
+ if (is) this.invokeMountHooks();
1307
+ if (this.changed) Promise.resolve().then(() => {
1308
+ if (this.parentComponent) this.parentComponent.markAsChanged(this);
1309
+ });
1310
+ }
1311
+ invokeMountHooks() {
1312
+ const unmountedCallbacks = [];
1313
+ if (this.mountCallbacks) {
1314
+ const len = this.mountCallbacks.length;
1315
+ for (let i = 0; i < len; ++i) {
1316
+ const fn = this.mountCallbacks[i];
1317
+ const destroyFn = fn();
1318
+ if (typeof destroyFn === "function") unmountedCallbacks.push(destroyFn);
1319
+ }
1320
+ }
1321
+ if (unmountedCallbacks.length) if (this.unmountedCallbacks) this.unmountedCallbacks.push(...unmountedCallbacks);
1322
+ else this.unmountedCallbacks = unmountedCallbacks;
1323
+ this.mountCallbacks = null;
1324
+ }
1325
+ invokeUpdatedHooks() {
1326
+ if (this.updatedCallbacks) {
1327
+ if (this.updatedDestroyCallbacks) this.updatedDestroyCallbacks.forEach((fn) => {
1328
+ fn();
1329
+ });
1330
+ const updatedDestroyCallbacks = [];
1331
+ const len = this.updatedCallbacks.length;
1332
+ for (let i = 0; i < len; ++i) {
1333
+ const fn = this.updatedCallbacks[i];
1334
+ const destroyFn = fn();
1335
+ if (typeof destroyFn === "function") updatedDestroyCallbacks.push(destroyFn);
1336
+ }
1337
+ this.updatedDestroyCallbacks = updatedDestroyCallbacks.length ? updatedDestroyCallbacks : null;
1338
+ }
1339
+ }
1340
+ };
1341
+ /**
1342
+ * 获取当前组件实例
1343
+ * @returns 当前组件实例
1344
+ * @example
1345
+ * ```tsx
1346
+ * function App() {
1347
+ * const instance = getCurrentInstance()
1348
+ * console.log(instance)
1349
+ * return () => <div>...</div>
1350
+ * }
1351
+ * ```
1352
+ */
1353
+ function getCurrentInstance() {
1354
+ return getSetupContext();
1355
+ }
1356
+ /**
1357
+ * 注册组件销毁回调函数
1358
+ * @param fn 要注册的回调函数
1359
+ * @internal
1360
+ */
1361
+ function registryComponentDestroyCallback(fn) {
1362
+ const component = getSetupContext(false);
1363
+ if (component) {
1364
+ if (!component.unmountedCallbacks) component.unmountedCallbacks = [];
1365
+ component.unmountedCallbacks.push(fn);
1366
+ }
1367
+ }
1368
+ //#endregion
1369
+ //#region src/base/jsx-element.ts
1370
+ function Fragment(props) {
1371
+ return () => {
1372
+ return props.children;
1373
+ };
1374
+ }
1375
+ function jsx(type, props, key) {
1376
+ return JSXNodeFactory.createNode(type, props, key);
1377
+ }
1378
+ var jsxs = jsx;
1379
+ var JSXNodeFactory = { createNode(type, props, key) {
1380
+ return {
1381
+ type,
1382
+ props,
1383
+ key
1384
+ };
1385
+ } };
1386
+ /**
1387
+ * 给组件的视图元素节点添加自定义属性标记
1388
+ * @param marks
1389
+ * @param setup
1390
+ * @example
1391
+ * ```tsx
1392
+ * const App = withMark('mark', function(props) {
1393
+ * return () => {
1394
+ * return <div>...</div>
1395
+ * }
1396
+ * })
1397
+ * ```
1398
+ */
1399
+ function withMark(marks, setup) {
1400
+ if (!marks) return setup;
1401
+ return function(props) {
1402
+ const componentRenderFn = setup(props);
1403
+ if (typeof componentRenderFn === "function") return function() {
1404
+ return applyMark(marks, componentRenderFn);
1405
+ };
1406
+ const oldRender = componentRenderFn.$render;
1407
+ componentRenderFn.$render = function() {
1408
+ return applyMark(marks, () => {
1409
+ return oldRender.call(componentRenderFn);
1410
+ });
1411
+ };
1412
+ return componentRenderFn;
1413
+ };
1414
+ }
1415
+ /**
1416
+ * 内部使用
1417
+ * @internal
1418
+ * @param mark
1419
+ * @param render
1420
+ */
1421
+ function applyMark(mark, render) {
1422
+ const oldCreateNote = JSXNodeFactory.createNode;
1423
+ const spaces = Array.isArray(mark) ? mark : [mark];
1424
+ JSXNodeFactory.createNode = function(name, props, key) {
1425
+ for (const scopedId of spaces) props[scopedId] = "";
1426
+ return oldCreateNote.apply(JSXNodeFactory, [
1427
+ name,
1428
+ props,
1429
+ key
1430
+ ]);
1431
+ };
1432
+ const vDom = render();
1433
+ JSXNodeFactory.createNode = oldCreateNote;
1434
+ return vDom;
1435
+ }
1436
+ /**
1437
+ * 将子节点渲染到指定节点
1438
+ * @param props
1439
+ * @example
1440
+ * ```tsx
1441
+ * function App() {
1442
+ * const modal = document.getElementById('modal')!
1443
+ * return () => {
1444
+ * return (
1445
+ * <div>
1446
+ * <Portal host={modal}>
1447
+ * 这里的内容将渲染到 modal 节点
1448
+ * </Portal>
1449
+ * </div>
1450
+ * )
1451
+ * }
1452
+ * }
1453
+ * ```
1454
+ */
1455
+ function Portal(props) {
1456
+ return {
1457
+ $portalHost: props.host,
1458
+ $render() {
1459
+ return props.children;
1460
+ }
1461
+ };
1462
+ }
1463
+ //#endregion
1464
+ //#region dist/index.esm.js
1465
+ function makeError$1(name) {
1466
+ return function viewflyError(message) {
1467
+ const error = new Error(message);
1468
+ error.name = `[ViewflyError: ${name}]`;
1469
+ error.stack = error.stack.replace(/\n.*?(?=\n)/, "");
1470
+ return error;
1471
+ };
1472
+ }
1473
+ var toStr = Object.prototype.toString;
1474
+ function getStringType(v) {
1475
+ return toStr.call(v);
1476
+ }
1477
+ function isArray(v) {
1478
+ return Array.isArray(v);
1479
+ }
1480
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
1481
+ function hasOwn(target, key) {
1482
+ return hasOwnProperty.call(target, key);
1483
+ }
1484
+ var Dep$1 = class {
1485
+ destroyCallbacks = [];
1486
+ constructor(effect) {
1487
+ this.effect = effect;
1488
+ }
1489
+ destroy() {
1490
+ this.destroyCallbacks.forEach((callback) => callback());
1491
+ this.destroyCallbacks = [];
1492
+ }
1493
+ };
1494
+ var deps = [];
1495
+ function getDepContext$1() {
1496
+ return deps.at(-1);
1497
+ }
1498
+ function pushDepContext$1(dep) {
1499
+ deps.push(dep);
1500
+ }
1501
+ function popDepContext$1() {
1502
+ deps.pop();
1503
+ }
1504
+ var subscribers = /* @__PURE__ */ new WeakMap();
1505
+ function getSubscriber(target) {
1506
+ let subscriber = subscribers.get(target);
1507
+ if (!subscriber) {
1508
+ subscriber = /* @__PURE__ */ new Map();
1509
+ subscribers.set(target, subscriber);
1510
+ }
1511
+ return subscriber;
1512
+ }
1513
+ var TrackOpTypes$1 = /* @__PURE__ */ function(TrackOpTypes) {
1514
+ TrackOpTypes["Get"] = "Get";
1515
+ TrackOpTypes["Has"] = "Has";
1516
+ TrackOpTypes["Iterate"] = "Iterate";
1517
+ return TrackOpTypes;
1518
+ }({});
1519
+ var TriggerOpTypes$1 = /* @__PURE__ */ function(TriggerOpTypes) {
1520
+ TriggerOpTypes["Set"] = "Set";
1521
+ TriggerOpTypes["Add"] = "Add";
1522
+ TriggerOpTypes["Delete"] = "Delete";
1523
+ TriggerOpTypes["Clear"] = "Clear";
1524
+ return TriggerOpTypes;
1525
+ }({});
1526
+ var unKnownKey = Symbol("unKnownKey");
1527
+ function track$1(target, type, key = unKnownKey) {
1528
+ const dep = getDepContext$1();
1529
+ if (dep) {
1530
+ const subscriber = getSubscriber(target);
1531
+ let record = subscriber.get(type);
1532
+ if (!record) {
1533
+ record = /* @__PURE__ */ new Map();
1534
+ subscriber.set(type, record);
1535
+ }
1536
+ let effects = record.get(key);
1537
+ if (!effects) {
1538
+ effects = new Set([dep]);
1539
+ record.set(key, effects);
1540
+ dep.destroyCallbacks.push(() => {
1541
+ effects.delete(dep);
1542
+ });
1543
+ } else if (!effects.has(dep)) {
1544
+ dep.destroyCallbacks.push(() => {
1545
+ effects.delete(dep);
1546
+ });
1547
+ effects.add(dep);
1548
+ }
1549
+ }
1550
+ }
1551
+ function runEffect(key, record) {
1552
+ if (!record) return;
1553
+ const effects = record.get(key);
1554
+ if (effects) [...effects].forEach((i) => i.effect());
1555
+ }
1556
+ function trigger$1(target, type, key = unKnownKey) {
1557
+ const subscriber = getSubscriber(target);
1558
+ if (subscriber) switch (type) {
1559
+ case TriggerOpTypes$1.Set:
1560
+ if (isArray(target)) runEffect(unKnownKey, subscriber.get(TrackOpTypes$1.Iterate));
1561
+ runEffect(key, subscriber.get(TrackOpTypes$1.Get));
1562
+ runEffect(key, subscriber.get(TrackOpTypes$1.Has));
1563
+ break;
1564
+ case TriggerOpTypes$1.Add:
1565
+ case TriggerOpTypes$1.Clear:
1566
+ case TriggerOpTypes$1.Delete:
1567
+ runEffect(unKnownKey, subscriber.get(TrackOpTypes$1.Iterate));
1568
+ runEffect(key, subscriber.get(TrackOpTypes$1.Has));
1569
+ runEffect(key, subscriber.get(TrackOpTypes$1.Get));
1570
+ break;
1571
+ }
1572
+ }
1573
+ function createIterableIterator(wrapper) {
1574
+ return {
1575
+ *entries() {
1576
+ const target = toRaw$1(this);
1577
+ track$1(target, TrackOpTypes$1.Iterate);
1578
+ for (const [key, value] of target.entries()) yield [wrapper(key), wrapper(value)];
1579
+ },
1580
+ *keys() {
1581
+ const target = toRaw$1(this);
1582
+ track$1(target, TrackOpTypes$1.Iterate);
1583
+ for (const item of target.keys()) yield wrapper(item);
1584
+ },
1585
+ *values() {
1586
+ const target = toRaw$1(this);
1587
+ track$1(target, TrackOpTypes$1.Iterate);
1588
+ for (const item of target.values()) yield wrapper(item);
1589
+ }
1590
+ };
1591
+ }
1592
+ function applyPredicateMethod(self, methodName, predicate, wrapper, thisArg) {
1593
+ const target = toRaw$1(self);
1594
+ track$1(target, TrackOpTypes$1.Iterate);
1595
+ return target[methodName]((value, index, array) => {
1596
+ return predicate.call(target, wrapper(value), index, array);
1597
+ }, thisArg);
1598
+ }
1599
+ function applySearchMethod(self, methodName, args) {
1600
+ const target = toRaw$1(self);
1601
+ track$1(target, TrackOpTypes$1.Iterate);
1602
+ return target[methodName](...args.map(toRaw$1));
1603
+ }
1604
+ function createArrayHandlers(wrapper) {
1605
+ return {
1606
+ concat(...items) {
1607
+ const target = toRaw$1(this);
1608
+ trigger$1(target, TriggerOpTypes$1.Add);
1609
+ return target.concat(...items);
1610
+ },
1611
+ every(predicate, thisArg) {
1612
+ return applyPredicateMethod(this, "every", predicate, wrapper, thisArg);
1613
+ },
1614
+ filter(predicate, thisArg) {
1615
+ return applyPredicateMethod(this, "filter", predicate, wrapper, thisArg);
1616
+ },
1617
+ find(predicate, thisArg) {
1618
+ return applyPredicateMethod(this, "find", predicate, wrapper, thisArg);
1619
+ },
1620
+ findIndex(predicate, thisArg) {
1621
+ return applyPredicateMethod(this, "findIndex", predicate, wrapper, thisArg);
1622
+ },
1623
+ findLast(predicate, thisArg) {
1624
+ return applyPredicateMethod(this, "findLast", predicate, wrapper, thisArg);
1625
+ },
1626
+ findLastIndex(predicate, thisArg) {
1627
+ return applyPredicateMethod(this, "findLastIndex", predicate, wrapper, thisArg);
1628
+ },
1629
+ forEach(callbackfn, thisArg) {
1630
+ return applyPredicateMethod(this, "forEach", callbackfn, wrapper, thisArg);
1631
+ },
1632
+ includes(...args) {
1633
+ return applySearchMethod(this, "includes", args);
1634
+ },
1635
+ indexOf(...args) {
1636
+ return applySearchMethod(this, "indexOf", args);
1637
+ },
1638
+ join(separator) {
1639
+ const target = toRaw$1(this);
1640
+ track$1(target, TrackOpTypes$1.Iterate);
1641
+ return target.join(separator);
1642
+ },
1643
+ lastIndexOf(...args) {
1644
+ return applySearchMethod(this, "lastIndexOf", args);
1645
+ },
1646
+ map(callbackFn, thisArg) {
1647
+ return applyPredicateMethod(this, "map", callbackFn, wrapper, thisArg);
1648
+ },
1649
+ pop() {
1650
+ const target = toRaw$1(this);
1651
+ trigger$1(target, TriggerOpTypes$1.Delete);
1652
+ return target.pop();
1653
+ },
1654
+ push(...items) {
1655
+ const target = toRaw$1(this);
1656
+ trigger$1(target, TriggerOpTypes$1.Add);
1657
+ return target.push(...items);
1658
+ },
1659
+ reduce(callbackFn, ...args) {
1660
+ const target = toRaw$1(this);
1661
+ track$1(target, TrackOpTypes$1.Iterate);
1662
+ return target.reduce((p, c, i, a) => {
1663
+ if (args.length > 0) return callbackFn(p, wrapper(c), i, a);
1664
+ return callbackFn(wrapper(p), wrapper(c), i, a);
1665
+ }, ...args);
1666
+ },
1667
+ reduceRight(callbackFn, ...args) {
1668
+ const target = toRaw$1(this);
1669
+ track$1(target, TrackOpTypes$1.Iterate);
1670
+ return target.reduceRight((p, c, i, a) => {
1671
+ if (args.length > 0) return callbackFn(p, wrapper(c), i, a);
1672
+ return callbackFn(wrapper(p), wrapper(c), i, a);
1673
+ }, ...args);
1674
+ },
1675
+ shift() {
1676
+ const target = toRaw$1(this);
1677
+ trigger$1(target, TriggerOpTypes$1.Delete);
1678
+ return target.shift();
1679
+ },
1680
+ some(predicate, thisArg) {
1681
+ return applyPredicateMethod(this, "some", predicate, wrapper, thisArg);
1682
+ },
1683
+ splice(start, deleteCount) {
1684
+ const target = toRaw$1(this);
1685
+ trigger$1(target, TriggerOpTypes$1.Set);
1686
+ trigger$1(target, TriggerOpTypes$1.Add);
1687
+ trigger$1(target, TriggerOpTypes$1.Delete);
1688
+ return target.splice(start, deleteCount).map((i) => wrapper(i));
1689
+ },
1690
+ toReversed() {
1691
+ const target = toRaw$1(this);
1692
+ track$1(target, TrackOpTypes$1.Iterate);
1693
+ return target.toReversed();
1694
+ },
1695
+ toSorted(compareFn) {
1696
+ const target = toRaw$1(this);
1697
+ track$1(target, TrackOpTypes$1.Iterate);
1698
+ return target.toSorted(compareFn);
1699
+ },
1700
+ toSpliced(start, deleteCount, ...items) {
1701
+ const target = toRaw$1(this);
1702
+ track$1(target, TrackOpTypes$1.Iterate);
1703
+ return target.toSpliced(start, deleteCount, ...items);
1704
+ },
1705
+ unshift(...items) {
1706
+ const target = toRaw$1(this);
1707
+ trigger$1(target, TriggerOpTypes$1.Add);
1708
+ return target.unshift(...items);
1709
+ },
1710
+ [Symbol.iterator]() {
1711
+ return this.values();
1712
+ },
1713
+ ...createIterableIterator(wrapper)
1714
+ };
1715
+ }
1716
+ function createMapHandlers(wrapper) {
1717
+ return {
1718
+ get(key) {
1719
+ const target = toRaw$1(this);
1720
+ track$1(target, TrackOpTypes$1.Get, key);
1721
+ return wrapper(target.get(key));
1722
+ },
1723
+ set(key, value) {
1724
+ const target = toRaw$1(this);
1725
+ key = toRaw$1(key);
1726
+ value = toRaw$1(value);
1727
+ const has = target.has(key);
1728
+ const r = target.set(key, value);
1729
+ trigger$1(target, has ? TriggerOpTypes$1.Set : TriggerOpTypes$1.Add, key);
1730
+ return r;
1731
+ },
1732
+ has(key) {
1733
+ const target = toRaw$1(this);
1734
+ key = toRaw$1(key);
1735
+ track$1(target, TrackOpTypes$1.Has, key);
1736
+ return target.has(key);
1737
+ },
1738
+ delete(key) {
1739
+ const target = toRaw$1(this);
1740
+ key = toRaw$1(key);
1741
+ const r = target.delete(key);
1742
+ trigger$1(target, TriggerOpTypes$1.Delete, key);
1743
+ return r;
1744
+ },
1745
+ forEach(callbackFn, thisArg) {
1746
+ const target = toRaw$1(this);
1747
+ track$1(target, TrackOpTypes$1.Iterate, void 0);
1748
+ target.forEach((v, k, m) => {
1749
+ callbackFn.call(this, wrapper(v), wrapper(k), m);
1750
+ }, thisArg);
1751
+ },
1752
+ clear() {
1753
+ const target = toRaw$1(this);
1754
+ target.clear();
1755
+ trigger$1(target, TriggerOpTypes$1.Clear, void 0);
1756
+ },
1757
+ [Symbol.iterator]() {
1758
+ return this.entries();
1759
+ },
1760
+ ...createIterableIterator(wrapper)
1761
+ };
1762
+ }
1763
+ function createSetHandlers(wrapper) {
1764
+ return {
1765
+ add(value) {
1766
+ const target = toRaw$1(this);
1767
+ value = toRaw$1(value);
1768
+ if (!target.has(value)) {
1769
+ target.add(value);
1770
+ trigger$1(target, TriggerOpTypes$1.Add, void 0);
1771
+ }
1772
+ return this;
1773
+ },
1774
+ delete(value) {
1775
+ const target = toRaw$1(this);
1776
+ value = toRaw$1(value);
1777
+ const has = target.has(value);
1778
+ const b = target.delete(value);
1779
+ if (!has) trigger$1(target, TriggerOpTypes$1.Delete, void 0);
1780
+ return b;
1781
+ },
1782
+ has(key) {
1783
+ const target = toRaw$1(this);
1784
+ key = toRaw$1(key);
1785
+ track$1(target, TrackOpTypes$1.Has, key);
1786
+ return target.has(key);
1787
+ },
1788
+ forEach(callbackFn, thisArg) {
1789
+ const target = toRaw$1(this);
1790
+ track$1(target, TrackOpTypes$1.Iterate, void 0);
1791
+ target.forEach((v, k, m) => {
1792
+ callbackFn.call(this, wrapper(v), wrapper(k), m);
1793
+ }, thisArg);
1794
+ },
1795
+ clear() {
1796
+ const target = toRaw$1(this);
1797
+ if (target.size !== 0) {
1798
+ target.clear();
1799
+ trigger$1(target, TriggerOpTypes$1.Clear, void 0);
1800
+ }
1801
+ },
1802
+ [Symbol.iterator]() {
1803
+ return this.values();
1804
+ },
1805
+ ...createIterableIterator(wrapper)
1806
+ };
1807
+ }
1808
+ var reactiveErrorFn = makeError$1("reactive");
1809
+ var rawToProxyCache$1 = /* @__PURE__ */ new WeakMap();
1810
+ var proxyToRawCache$1 = /* @__PURE__ */ new WeakMap();
1811
+ /**
1812
+ * 将响应式对象转换为原始对象
1813
+ * @param value 响应式对象
1814
+ * @returns 原始对象
1815
+ * @example
1816
+ * ```tsx
1817
+ * const obj = reactive({
1818
+ * name: 'John',
1819
+ * age: 18
1820
+ * })
1821
+ * console.log(toRaw(obj))
1822
+ * ```
1823
+ */
1824
+ function toRaw$1(value) {
1825
+ if (proxyToRawCache$1.has(value)) return proxyToRawCache$1.get(value);
1826
+ return value;
1827
+ }
1828
+ /**
1829
+ * 检查对象是否是响应式对象
1830
+ * @param value 要检查的对象
1831
+ * @returns 是否是响应式对象
1832
+ * @example
1833
+ * ```tsx
1834
+ * const obj = reactive({
1835
+ * name: 'John',
1836
+ * age: 18
1837
+ * })
1838
+ * console.log(isReactive(obj))
1839
+ * ```
1840
+ */
1841
+ function isReactive$1(value) {
1842
+ return proxyToRawCache$1.has(value);
1843
+ }
1844
+ var fromInternalWrite = false;
1845
+ var ObjectReactiveHandler$1 = class {
1846
+ isShallow;
1847
+ isReadonly;
1848
+ constructor(config) {
1849
+ this.isReadonly = config.readonly;
1850
+ this.isShallow = config.shallow;
1851
+ }
1852
+ set(target, p, newValue, receiver) {
1853
+ if (this.isReadonly && !fromInternalWrite) throw reactiveErrorFn("Object is readonly!");
1854
+ const rawValue = toRaw$1(newValue);
1855
+ const oldValue = target[p];
1856
+ const v = this.isShallow ? newValue : rawValue;
1857
+ if (oldValue === rawValue) return Reflect.set(target, p, v, receiver);
1858
+ const b = Reflect.set(target, p, v, receiver);
1859
+ fromInternalWrite = false;
1860
+ if (hasOwn(target, p)) trigger$1(target, TriggerOpTypes$1.Set, p);
1861
+ else trigger$1(target, TriggerOpTypes$1.Add, p);
1862
+ return b;
1863
+ }
1864
+ get(target, p, receiver) {
1865
+ track$1(target, TrackOpTypes$1.Get, p);
1866
+ const value = Reflect.get(target, p, receiver);
1867
+ if (this.isShallow) return value;
1868
+ return reactive$1(value);
1869
+ }
1870
+ deleteProperty(target, p) {
1871
+ const b = Reflect.deleteProperty(target, p);
1872
+ trigger$1(target, TriggerOpTypes$1.Delete, p);
1873
+ return b;
1874
+ }
1875
+ ownKeys(target) {
1876
+ track$1(target, TrackOpTypes$1.Iterate);
1877
+ return Reflect.ownKeys(target);
1878
+ }
1879
+ };
1880
+ function noReactive(v) {
1881
+ return v;
1882
+ }
1883
+ var ArrayReactiveHandler$1 = class extends ObjectReactiveHandler$1 {
1884
+ interceptors = createArrayHandlers(this.isShallow ? noReactive : reactive$1);
1885
+ constructor(config) {
1886
+ super(config);
1887
+ }
1888
+ get(target, p, receiver) {
1889
+ if (Reflect.has(this.interceptors, p) && p in target) return this.interceptors[p];
1890
+ return super.get(target, p, receiver);
1891
+ }
1892
+ };
1893
+ var MapReactiveHandler$1 = class extends ObjectReactiveHandler$1 {
1894
+ interceptors = createMapHandlers(this.isShallow ? noReactive : reactive$1);
1895
+ constructor(config) {
1896
+ super(config);
1897
+ }
1898
+ get(target, p, receiver) {
1899
+ if (Reflect.has(this.interceptors, p) && p in target) return this.interceptors[p];
1900
+ if (p === "size") {
1901
+ track$1(target, TrackOpTypes$1.Iterate, p);
1902
+ return Reflect.get(target, p);
1903
+ }
1904
+ return super.get(target, p, receiver);
1905
+ }
1906
+ };
1907
+ var SetReactiveHandler$1 = class extends ObjectReactiveHandler$1 {
1908
+ interceptors = createSetHandlers(this.isShallow ? noReactive : reactive$1);
1909
+ constructor(config) {
1910
+ super(config);
1911
+ }
1912
+ get(target, p, receiver) {
1913
+ if (Reflect.has(this.interceptors, p) && p in target) return this.interceptors[p];
1914
+ if (p === "size") {
1915
+ track$1(target, TrackOpTypes$1.Iterate, p);
1916
+ return Reflect.get(target, p);
1917
+ }
1918
+ return super.get(target, p, receiver);
1919
+ }
1920
+ };
1921
+ var defaultObjectReactiveHandler$1 = new ObjectReactiveHandler$1({
1922
+ readonly: false,
1923
+ shallow: false
1924
+ });
1925
+ var defaultArrayReactiveHandler$1 = new ArrayReactiveHandler$1({
1926
+ readonly: false,
1927
+ shallow: false
1928
+ });
1929
+ var defaultMapReactiveHandler$1 = new MapReactiveHandler$1({
1930
+ readonly: false,
1931
+ shallow: false
1932
+ });
1933
+ var defaultSetReactiveHandler$1 = new SetReactiveHandler$1({
1934
+ readonly: false,
1935
+ shallow: false
1936
+ });
1937
+ new ObjectReactiveHandler$1({
1938
+ shallow: true,
1939
+ readonly: true
1940
+ });
1941
+ /**
1942
+ * 创建一个响应式对象
1943
+ * @param raw 原始对象
1944
+ * @returns 响应式对象
1945
+ * @example
1946
+ * ```tsx
1947
+ * const obj = reactive({
1948
+ * name: 'John',
1949
+ * age: 18,
1950
+ * children: [
1951
+ * {
1952
+ * name: 'Jane',
1953
+ * age: 16
1954
+ * }
1955
+ * ]
1956
+ * })
1957
+ * console.log(obj.name)
1958
+ * console.log(obj.children[0].name)
1959
+ * ```
1960
+ */
1961
+ function reactive$1(raw) {
1962
+ if (isReactive$1(raw)) return raw;
1963
+ let proxy = rawToProxyCache$1.get(raw);
1964
+ if (proxy) return proxy;
1965
+ switch (getStringType(raw)) {
1966
+ case "[object Object]":
1967
+ proxy = new Proxy(raw, defaultObjectReactiveHandler$1);
1968
+ break;
1969
+ case "[object Array]":
1970
+ proxy = new Proxy(raw, defaultArrayReactiveHandler$1);
1971
+ break;
1972
+ case "[object Set]":
1973
+ case "[object WeakSet]":
1974
+ proxy = new Proxy(raw, defaultSetReactiveHandler$1);
1975
+ break;
1976
+ case "[object Map]":
1977
+ case "[object WeakMap]":
1978
+ proxy = new Proxy(raw, defaultMapReactiveHandler$1);
1979
+ break;
1980
+ default: return raw;
1981
+ }
1982
+ rawToProxyCache$1.set(raw, proxy);
1983
+ proxyToRawCache$1.set(proxy, raw);
1984
+ return proxy;
1985
+ }
1986
+ makeError$1("Ref");
1987
+ var componentSetupStack = [];
1988
+ var componentErrorFn = makeError$1("component");
1989
+ function getSetupContext$1(need = true) {
1990
+ const current = componentSetupStack[componentSetupStack.length - 1];
1991
+ if (!current && need) throw componentErrorFn("cannot be called outside the component!");
1992
+ return current;
1993
+ }
1994
+ /**
1995
+ * 注册组件销毁回调函数
1996
+ * @param fn 要注册的回调函数
1997
+ * @internal
1998
+ */
1999
+ function registryComponentDestroyCallback$1(fn) {
2000
+ const component = getSetupContext$1(false);
2001
+ if (component) {
2002
+ if (!component.unmountedCallbacks) component.unmountedCallbacks = [];
2003
+ component.unmountedCallbacks.push(fn);
2004
+ }
2005
+ }
2006
+ makeError$1("Viewfly");
2007
+ new ObjectReactiveHandler$1({
2008
+ readonly: false,
2009
+ shallow: true
2010
+ });
2011
+ new ArrayReactiveHandler$1({
2012
+ readonly: false,
2013
+ shallow: true
2014
+ });
2015
+ new MapReactiveHandler$1({
2016
+ readonly: false,
2017
+ shallow: true
2018
+ });
2019
+ new SetReactiveHandler$1({
2020
+ readonly: false,
2021
+ shallow: true
2022
+ });
2023
+ //#endregion
2024
+ //#region src/reactive/watch-effect.ts
2025
+ /**
2026
+ * 创建一个 watchEffect,立即执行 effect 函数,当依赖的值发生变化时,会再次执行 effect 函数。
2027
+ * watchEffect 会返回一个函数,用于停止监听
2028
+ * @param effect 执行的函数
2029
+ * @returns 一个函数,用于停止监听
2030
+ */
2031
+ function watchEffect(effect) {
2032
+ const dep = new Dep$1(function() {
2033
+ pushDepContext$1(dep);
2034
+ effect();
2035
+ popDepContext$1();
2036
+ });
2037
+ pushDepContext$1(dep);
2038
+ effect();
2039
+ popDepContext$1();
2040
+ function unWatch() {
2041
+ dep.destroy();
2042
+ }
2043
+ registryComponentDestroyCallback$1(unWatch);
2044
+ return unWatch;
2045
+ }
2046
+ //#endregion
2047
+ //#region src/reactive/watch.ts
2048
+ /**
2049
+ * 创建一个 watch,当依赖的值发生变化时,会执行 callback 函数。
2050
+ * watch 会返回一个函数,用于停止监听。
2051
+ * @param trigger 触发函数,用于获取依赖的值
2052
+ * @param callback 回调函数,当依赖的值发生变化时,会执行 callback 函数
2053
+ * @returns 一个函数,用于停止监听
2054
+ */
2055
+ function watch(trigger, callback) {
2056
+ const initValue = {};
2057
+ let oldValue = initValue;
2058
+ const unWatch = watchEffect(function() {
2059
+ if (oldValue === initValue) {
2060
+ oldValue = trigger();
2061
+ return;
2062
+ }
2063
+ const newValue = trigger();
2064
+ if (newValue !== oldValue) {
2065
+ callback(newValue, oldValue);
2066
+ oldValue = newValue;
2067
+ }
2068
+ });
2069
+ registryComponentDestroyCallback(unWatch);
2070
+ return unWatch;
2071
+ }
2072
+ //#endregion
2073
+ //#region src/base/context.ts
2074
+ var injectMap = /* @__PURE__ */ new WeakMap();
2075
+ function getInjector(start) {
2076
+ while (start) {
2077
+ const injector = injectMap.get(start);
2078
+ if (injector) return injector;
2079
+ start = start.parentComponent;
2080
+ }
2081
+ return new NullInjector();
2082
+ }
2083
+ /**
2084
+ * 创建一个上下文,用于在组件之间共享数据
2085
+ * @param providers 提供者,用于提供数据
2086
+ * @param scope 作用域,用于限制提供者的作用域
2087
+ * @param parentInjector 父注入器,用于自定义父注入器,默认从当前组件树中自动获取
2088
+ * @returns 一个上下文组件,组件的子元素都可以通过 inject 获取到提供者提供的数据
2089
+ * @example
2090
+ * ```tsx
2091
+ * @Injectable()
2092
+ * class ExampleService {}
2093
+ *
2094
+ * function Child(props) {
2095
+ * const exampleService = inject(ExampleService)
2096
+ * console.log(exampleService)
2097
+ * return () => {
2098
+ * return <div>{props.children}</div>
2099
+ * }
2100
+ * }
2101
+ * function App() {
2102
+ * const Context = createContext([
2103
+ * ExampleService
2104
+ * ])
2105
+ * return () => {
2106
+ * return <Context>
2107
+ * <Child>test</Child>
2108
+ * </Context>
2109
+ * }
2110
+ * }
2111
+ * ```
2112
+ */
2113
+ function createContext(providers, scope, parentInjector) {
2114
+ return function context(props) {
2115
+ const instance = getCurrentInstance();
2116
+ const injector = new ReflectiveInjector(parentInjector || getInjector(instance), providers, scope);
2117
+ injectMap.set(instance, injector);
2118
+ return () => {
2119
+ return props.children;
2120
+ };
2121
+ };
2122
+ }
2123
+ /**
2124
+ * 创建一个上下文提供者组件,组件的子元素都可以通过 inject 获取到提供者提供的数据
2125
+ * @param params 提供者参数
2126
+ * @returns 一个上下文提供者组件,组件的子元素都可以通过 inject 获取到提供者提供的数据
2127
+ * @example
2128
+ * ```tsx
2129
+ * const ExampleService = createContextProvider({
2130
+ * provide: ExampleService
2131
+ * })
2132
+ *
2133
+ * function Child() {
2134
+ * const exampleService = inject(ExampleService)
2135
+ * console.log(exampleService)
2136
+ * return () => {
2137
+ * return <div>{exampleService.name}</div>
2138
+ * }
2139
+ * }
2140
+ *
2141
+ * function App() {
2142
+ * const value = new ExampleService()
2143
+ * return () => {
2144
+ * return <ExampleService useValue={value}>
2145
+ * <Child/>
2146
+ * </ExampleService>
2147
+ * }
2148
+ * }
2149
+ */
2150
+ function createContextProvider(params) {
2151
+ return function contextProvider(props) {
2152
+ let Context = createContext([{
2153
+ provide: params.provide,
2154
+ ...props
2155
+ }]);
2156
+ watch(() => {
2157
+ return props.useClass || props.useFactory || props.useValue || props.useExisting;
2158
+ }, () => {
2159
+ Context = createContext([{
2160
+ provide: params.provide,
2161
+ ...props
2162
+ }]);
2163
+ });
2164
+ return () => {
2165
+ return jsx(Context, { children: props.children });
2166
+ };
2167
+ };
2168
+ }
2169
+ /**
2170
+ * 通过组件上下文获取 IoC 容器内数据的勾子方法
2171
+ * @param token 注入的 token
2172
+ * @param notFoundValue 未找到时的值
2173
+ * @param flags 注入标志
2174
+ * @returns 注入的值
2175
+ * @example
2176
+ * ```tsx
2177
+ * function ChildComponent() {
2178
+ * const exampleService = inject(ExampleService)
2179
+ * console.log(exampleService)
2180
+ * return () => {
2181
+ * return <div>{exampleService.name}</div>
2182
+ * }
2183
+ * }
2184
+ */
2185
+ function inject(token, notFoundValue = THROW_IF_NOT_FOUND, flags) {
2186
+ return getInjector(getCurrentInstance()).get(token, notFoundValue, flags);
2187
+ }
2188
+ /**
2189
+ * 给组件添加注解
2190
+ * @param annotation
2191
+ * @param componentSetup
2192
+ * @example
2193
+ * ```ts
2194
+ * export customScope = new Scope('scopeName')
2195
+ * export const App = withAnnotation({
2196
+ * scope: customScope,
2197
+ * providers: [
2198
+ * ExampleService
2199
+ * ]
2200
+ * }, function(props: Props) {
2201
+ * return () => {
2202
+ * return <div>...</div>
2203
+ * }
2204
+ * })
2205
+ * ```
2206
+ */
2207
+ function withAnnotation(annotation, componentSetup) {
2208
+ return function(props) {
2209
+ const instance = getCurrentInstance();
2210
+ const injector = new ReflectiveInjector(injectMap.get(instance) || getInjector(instance.parentComponent), [{
2211
+ provide: Injector,
2212
+ useFactory() {
2213
+ return injector;
2214
+ }
2215
+ }, ...annotation.providers || []], annotation.scope);
2216
+ injectMap.set(instance, injector);
2217
+ return componentSetup(props);
2218
+ };
2219
+ }
2220
+ //#endregion
2221
+ //#region src/base/injection-tokens.ts
2222
+ var NativeRenderer = class {};
2223
+ //#endregion
2224
+ //#region src/base/renderer.ts
2225
+ var listenerReg = /^on[A-Z]/;
2226
+ var nativeNodeRefRecord = /* @__PURE__ */ new Map();
2227
+ function createRenderer(component, nativeRenderer, namespace) {
2228
+ let isInit = true;
2229
+ return function render(host) {
2230
+ if (isInit) {
2231
+ isInit = false;
2232
+ componentRender(nativeRenderer, component, {
2233
+ type: ComponentAtomType,
2234
+ index: 0,
2235
+ nodeType: component.type,
2236
+ jsxNode: component,
2237
+ sibling: null,
2238
+ child: null,
2239
+ nativeNode: null,
2240
+ namespace
2241
+ }, {
2242
+ isParent: true,
2243
+ host,
2244
+ rootHost: host
2245
+ });
2246
+ } else deepUpdateByComponentDirtyTree(nativeRenderer, component, false);
2247
+ };
2248
+ }
2249
+ function buildView(nativeRenderer, parentComponent, atom, context) {
2250
+ const { jsxNode, type } = atom;
2251
+ if (type === ComponentAtomType) {
2252
+ const component = new Component(parentComponent, jsxNode.type, jsxNode.props, jsxNode.key);
2253
+ atom.jsxNode = component;
2254
+ componentRender(nativeRenderer, component, atom, context);
2255
+ } else if (type === ElementAtomType) createElement(nativeRenderer, atom, parentComponent, context);
2256
+ else createTextNode(nativeRenderer, atom, context);
2257
+ }
2258
+ function buildElementChildren(atom, nativeRenderer, parentComponent, context) {
2259
+ let child = atom.child;
2260
+ while (child) {
2261
+ buildView(nativeRenderer, parentComponent, child, context);
2262
+ child = child.sibling;
2263
+ }
2264
+ }
2265
+ function patchComponent(nativeRenderer, component, oldChildAtom, newAtom, context, needMove) {
2266
+ newAtom.child = createChildChain(component.rerender(), nativeRenderer, newAtom.namespace);
2267
+ diff(nativeRenderer, component, newAtom.child, oldChildAtom, context, needMove);
2268
+ }
2269
+ function deepUpdateByComponentDirtyTree(nativeRenderer, component, needMove) {
2270
+ if (component.dirty) {
2271
+ const { atom, host, isParent, rootHost } = component.viewMetadata;
2272
+ const context = {
2273
+ host,
2274
+ isParent,
2275
+ rootHost
2276
+ };
2277
+ const diffAtom = atom.child;
2278
+ patchComponent(nativeRenderer, component, diffAtom, atom, context, needMove);
2279
+ const next = atom.sibling;
2280
+ if (next && next.jsxNode instanceof Component) {
2281
+ const view = next.jsxNode.viewMetadata;
2282
+ view.host = context.host;
2283
+ view.isParent = context.isParent;
2284
+ }
2285
+ component.rendered();
2286
+ } else if (component.changed) {
2287
+ component.changedSubComponents.forEach((child) => {
2288
+ deepUpdateByComponentDirtyTree(nativeRenderer, child, needMove);
2289
+ });
2290
+ component.rendered();
2291
+ }
2292
+ }
2293
+ function diff(nativeRenderer, parentComponent, newAtom, oldAtom, context, needMove) {
2294
+ const commits = [];
2295
+ while (newAtom) {
2296
+ oldAtom = createChanges(newAtom, oldAtom, commits);
2297
+ newAtom = newAtom.sibling;
2298
+ }
2299
+ let dirtyDiffAtom = oldAtom;
2300
+ while (dirtyDiffAtom) {
2301
+ cleanView(nativeRenderer, dirtyDiffAtom, true);
2302
+ dirtyDiffAtom = dirtyDiffAtom.sibling;
2303
+ }
2304
+ let offset = 0;
2305
+ const len = commits.length;
2306
+ for (let i = 0; i < len; i++) {
2307
+ while (oldAtom) {
2308
+ if (oldAtom.index <= i) {
2309
+ offset--;
2310
+ oldAtom = oldAtom.sibling;
2311
+ continue;
2312
+ }
2313
+ break;
2314
+ }
2315
+ const { dirtyAtom, newAtom } = commits[i];
2316
+ if (dirtyAtom) switch (dirtyAtom.type) {
2317
+ case ElementAtomType:
2318
+ updateElement(nativeRenderer, context, parentComponent, offset, needMove, newAtom, dirtyAtom);
2319
+ break;
2320
+ case TextAtomType:
2321
+ updateText(nativeRenderer, context, offset, needMove, newAtom, dirtyAtom);
2322
+ break;
2323
+ case ComponentAtomType:
2324
+ updateComponent(nativeRenderer, context, offset, needMove, newAtom, dirtyAtom);
2325
+ break;
2326
+ }
2327
+ else {
2328
+ buildView(nativeRenderer, parentComponent, newAtom, context);
2329
+ offset++;
2330
+ }
2331
+ }
2332
+ }
2333
+ function createChanges(newAtom, oldAtom, commits) {
2334
+ const startDiffAtom = oldAtom;
2335
+ let prev = null;
2336
+ while (oldAtom) {
2337
+ if (oldAtom.type === newAtom.type && oldAtom.nodeType === newAtom.nodeType && oldAtom.key === newAtom.key) {
2338
+ commits.push({
2339
+ dirtyAtom: oldAtom,
2340
+ newAtom
2341
+ });
2342
+ const next = oldAtom.sibling;
2343
+ if (!prev) return next;
2344
+ prev.sibling = next;
2345
+ return startDiffAtom;
2346
+ }
2347
+ prev = oldAtom;
2348
+ oldAtom = oldAtom.sibling;
2349
+ }
2350
+ commits.push({
2351
+ dirtyAtom: null,
2352
+ newAtom
2353
+ });
2354
+ return startDiffAtom;
2355
+ }
2356
+ function updateText(nativeRenderer, context, offset, needMove, newAtom, oldAtom) {
2357
+ const nativeNode = oldAtom.nativeNode;
2358
+ newAtom.nativeNode = nativeNode;
2359
+ if (needMove || newAtom.index - offset !== oldAtom.index) insertNode(nativeRenderer, newAtom, context);
2360
+ context.host = nativeNode;
2361
+ context.isParent = false;
2362
+ }
2363
+ function updateElement(nativeRenderer, context, parentComponent, offset, needMove, newAtom, oldAtom) {
2364
+ const nativeNode = oldAtom.nativeNode;
2365
+ newAtom.nativeNode = nativeNode;
2366
+ if (needMove || newAtom.index - offset !== oldAtom.index) insertNode(nativeRenderer, newAtom, context);
2367
+ context.host = nativeNode;
2368
+ context.isParent = false;
2369
+ updateNativeNodeProperties(nativeRenderer, newAtom, oldAtom, parentComponent, {
2370
+ host: nativeNode,
2371
+ isParent: true,
2372
+ rootHost: context.rootHost
2373
+ });
2374
+ }
2375
+ function updateComponent(nativeRenderer, context, offset, needMove, newAtom, oldAtom) {
2376
+ const component = oldAtom.jsxNode;
2377
+ const portalHost = component.instance.$portalHost;
2378
+ context = portalHost ? {
2379
+ isParent: true,
2380
+ host: portalHost,
2381
+ rootHost: portalHost
2382
+ } : context;
2383
+ component.viewMetadata = {
2384
+ atom: newAtom,
2385
+ ...context
2386
+ };
2387
+ const newProps = newAtom.jsxNode.props;
2388
+ newAtom.jsxNode = component;
2389
+ needMove = needMove || newAtom.index - offset !== oldAtom.index;
2390
+ const propsIsChanged = hasChange(newProps, component.props);
2391
+ if (propsIsChanged) component.updateProps(newProps);
2392
+ if (propsIsChanged || component.dirty) {
2393
+ patchComponent(nativeRenderer, component, oldAtom.child, newAtom, context, needMove);
2394
+ const next = oldAtom.sibling;
2395
+ if (next && next.jsxNode instanceof Component) {
2396
+ const view = next.jsxNode.viewMetadata;
2397
+ view.host = context.host;
2398
+ view.isParent = context.isParent;
2399
+ }
2400
+ } else {
2401
+ newAtom.child = oldAtom.child;
2402
+ reuseComponentView(nativeRenderer, newAtom.child, context, needMove, !component.changedSubComponents.size);
2403
+ }
2404
+ component.rendered();
2405
+ }
2406
+ function reuseComponentView(nativeRenderer, child, context, moveView, skipSubComponentDiff) {
2407
+ const updateContext = (atom) => {
2408
+ const jsxNode = atom.jsxNode;
2409
+ if (jsxNode instanceof Component) {
2410
+ reuseComponentView(nativeRenderer, atom.child, context, moveView, skipSubComponentDiff);
2411
+ if (!skipSubComponentDiff) deepUpdateByComponentDirtyTree(nativeRenderer, jsxNode, moveView);
2412
+ } else {
2413
+ if (moveView) insertNode(nativeRenderer, atom, context);
2414
+ if (!skipSubComponentDiff) reuseElementChildrenView(nativeRenderer, atom, context);
2415
+ context.isParent = false;
2416
+ context.host = atom.nativeNode;
2417
+ }
2418
+ };
2419
+ while (child) {
2420
+ updateContext(child);
2421
+ child = child.sibling;
2422
+ }
2423
+ }
2424
+ function reuseElementChildrenView(nativeRenderer, atom, context) {
2425
+ let child = atom.child;
2426
+ while (child) {
2427
+ if (child.jsxNode instanceof Component) deepUpdateByComponentDirtyTree(nativeRenderer, child.jsxNode, false);
2428
+ else reuseElementChildrenView(nativeRenderer, child, context);
2429
+ child = child.sibling;
2430
+ }
2431
+ }
2432
+ function cleanElementChildren(atom, nativeRenderer) {
2433
+ let child = atom.child;
2434
+ nativeRenderer.cleanChildren(atom.nativeNode, atom.namespace);
2435
+ while (child) {
2436
+ cleanView(nativeRenderer, child, false);
2437
+ child = child.sibling;
2438
+ }
2439
+ }
2440
+ function cleanView(nativeRenderer, atom, needClean) {
2441
+ if (atom.type === ComponentAtomType) {
2442
+ const jsxNode = atom.jsxNode;
2443
+ if (jsxNode.instance.$portalHost) needClean = true;
2444
+ cleanChildren(atom, nativeRenderer, needClean);
2445
+ jsxNode.destroy();
2446
+ return;
2447
+ }
2448
+ if (needClean) {
2449
+ nativeRenderer.remove(atom.nativeNode, atom.namespace);
2450
+ needClean = false;
2451
+ }
2452
+ if (atom.type === ElementAtomType) {
2453
+ const record = nativeNodeRefRecord.get(atom);
2454
+ if (record) record.forEach((fn) => {
2455
+ if (typeof fn === "function") fn();
2456
+ });
2457
+ }
2458
+ cleanChildren(atom, nativeRenderer, needClean);
2459
+ }
2460
+ function cleanChildren(atom, nativeRenderer, needClean) {
2461
+ let child = atom.child;
2462
+ while (child) {
2463
+ cleanView(nativeRenderer, child, needClean);
2464
+ child = child.sibling;
2465
+ }
2466
+ }
2467
+ function componentRender(nativeRenderer, component, from, context) {
2468
+ component.render((template, portalHost) => {
2469
+ from.child = createChildChain(template, nativeRenderer, from.namespace);
2470
+ context = portalHost ? {
2471
+ isParent: true,
2472
+ host: portalHost,
2473
+ rootHost: portalHost
2474
+ } : context;
2475
+ component.viewMetadata = {
2476
+ atom: from,
2477
+ ...context
2478
+ };
2479
+ let child = from.child;
2480
+ while (child) {
2481
+ buildView(nativeRenderer, component, child, context);
2482
+ child = child.sibling;
2483
+ }
2484
+ });
2485
+ }
2486
+ function createChainByJSXNode(type, jsxNode, nodeType, prevAtom, namespace, key) {
2487
+ const atom = {
2488
+ type,
2489
+ index: prevAtom.index + 1,
2490
+ jsxNode,
2491
+ sibling: null,
2492
+ child: null,
2493
+ nativeNode: null,
2494
+ namespace,
2495
+ nodeType,
2496
+ key
2497
+ };
2498
+ prevAtom.sibling = atom;
2499
+ return atom;
2500
+ }
2501
+ function createChainByNode(jsxNode, prevAtom, nativeRenderer, elementNamespace) {
2502
+ const type = typeof jsxNode;
2503
+ if (jsxNode != null && type !== "boolean") {
2504
+ if (type === "string") return createChainByJSXNode(TextAtomType, jsxNode, jsxNode, prevAtom, elementNamespace);
2505
+ if (type === "object") {
2506
+ if (Array.isArray(jsxNode)) return createChainByChildren(jsxNode, prevAtom, nativeRenderer, elementNamespace);
2507
+ const nodeType = typeof jsxNode.type;
2508
+ if (nodeType === "string") return createChainByJSXNode(ElementAtomType, jsxNode, jsxNode.type, prevAtom, nativeRenderer.getNameSpace(jsxNode.type, elementNamespace), jsxNode.key);
2509
+ else if (nodeType === "function") return createChainByJSXNode(ComponentAtomType, jsxNode, jsxNode.type, prevAtom, elementNamespace, jsxNode.key);
2510
+ }
2511
+ const text = String(jsxNode);
2512
+ return createChainByJSXNode(TextAtomType, text, text, prevAtom, elementNamespace);
2513
+ }
2514
+ return prevAtom;
2515
+ }
2516
+ function createChainByChildren(children, prevAtom, nativeRenderer, elementNamespace) {
2517
+ const len = children.length;
2518
+ for (let i = 0; i < len; i++) {
2519
+ const item = children[i];
2520
+ prevAtom = createChainByNode(item, prevAtom, nativeRenderer, elementNamespace);
2521
+ }
2522
+ return prevAtom;
2523
+ }
2524
+ function createChildChain(template, nativeRenderer, namespace) {
2525
+ const beforeAtom = {
2526
+ sibling: null,
2527
+ index: -1
2528
+ };
2529
+ createChainByNode(template, beforeAtom, nativeRenderer, namespace);
2530
+ return beforeAtom.sibling;
2531
+ }
2532
+ function insertNode(nativeRenderer, atom, context) {
2533
+ if (context.isParent) if (context.host === context.rootHost) nativeRenderer.appendChild(context.host, atom.nativeNode, atom.namespace);
2534
+ else nativeRenderer.prependChild(context.host, atom.nativeNode, atom.namespace);
2535
+ else nativeRenderer.insertAfter(atom.nativeNode, context.host, atom.namespace);
2536
+ }
2537
+ function createElementChildren(type, children, nativeRenderer, namespace) {
2538
+ return createChildChain(children, nativeRenderer, nativeRenderer.getNameSpace(type, namespace));
2539
+ }
2540
+ function createElement(nativeRenderer, atom, parentComponent, context) {
2541
+ const { namespace, jsxNode } = atom;
2542
+ const nativeNode = nativeRenderer.createElement(jsxNode.type, namespace);
2543
+ const props = jsxNode.props;
2544
+ let bindingRefs;
2545
+ for (const key in props) {
2546
+ if (key === "children") {
2547
+ atom.child = createElementChildren(jsxNode.type, props.children, nativeRenderer, namespace);
2548
+ continue;
2549
+ }
2550
+ if (key === "class") {
2551
+ const className = classToString(props[key]);
2552
+ if (className) nativeRenderer.setClass(nativeNode, className, namespace);
2553
+ continue;
2554
+ }
2555
+ if (key === "style") {
2556
+ const style = styleToObject(props.style);
2557
+ for (const key in style) nativeRenderer.setStyle(nativeNode, key, style[key], namespace);
2558
+ continue;
2559
+ }
2560
+ if (listenerReg.test(key)) {
2561
+ const listener = props[key];
2562
+ if (typeof listener === "function") nativeRenderer.listen(nativeNode, key, listener, namespace);
2563
+ continue;
2564
+ }
2565
+ if (key === "ref") {
2566
+ bindingRefs = props[key];
2567
+ continue;
2568
+ }
2569
+ nativeRenderer.setProperty(nativeNode, key, props[key], namespace);
2570
+ }
2571
+ atom.nativeNode = nativeNode;
2572
+ insertNode(nativeRenderer, atom, context);
2573
+ buildElementChildren(atom, nativeRenderer, parentComponent, {
2574
+ isParent: true,
2575
+ host: nativeNode,
2576
+ rootHost: context.rootHost
2577
+ });
2578
+ context.host = nativeNode;
2579
+ context.isParent = false;
2580
+ const refEffects = /* @__PURE__ */ new Map();
2581
+ nativeNodeRefRecord.set(atom, refEffects);
2582
+ applyRefs(bindingRefs, nativeNode, refEffects);
2583
+ }
2584
+ function createTextNode(nativeRenderer, atom, context) {
2585
+ const nativeNode = nativeRenderer.createTextNode(atom.jsxNode, atom.namespace);
2586
+ atom.nativeNode = nativeNode;
2587
+ insertNode(nativeRenderer, atom, context);
2588
+ context.host = nativeNode;
2589
+ context.isParent = false;
2590
+ }
2591
+ function updateNativeNodeProperties(nativeRenderer, newAtom, oldAtom, parentComponent, context) {
2592
+ const newVNode = newAtom.jsxNode;
2593
+ const isSvg = newAtom.namespace;
2594
+ const nativeNode = newAtom.nativeNode;
2595
+ const oldVNode = oldAtom.jsxNode;
2596
+ if (newVNode === oldVNode) {
2597
+ newAtom.child = oldAtom.child;
2598
+ reuseElementChildrenView(nativeRenderer, newAtom, context);
2599
+ return;
2600
+ }
2601
+ let bindRefs;
2602
+ let updatedChildren = false;
2603
+ comparePropsWithCallbacks(oldVNode.props, newVNode.props, (key, oldValue) => {
2604
+ if (key === "children") {
2605
+ updatedChildren = true;
2606
+ cleanElementChildren(oldAtom, nativeRenderer);
2607
+ return;
2608
+ }
2609
+ if (key === "class") {
2610
+ nativeRenderer.setClass(nativeNode, "", isSvg);
2611
+ return;
2612
+ }
2613
+ if (key === "style") {
2614
+ for (const styleName in styleToObject(oldValue)) nativeRenderer.removeStyle(nativeNode, styleName, isSvg);
2615
+ return;
2616
+ }
2617
+ if (listenerReg.test(key)) {
2618
+ if (typeof oldValue === "function") nativeRenderer.unListen(nativeNode, key, oldValue, isSvg);
2619
+ return;
2620
+ }
2621
+ if (key === "ref") return;
2622
+ nativeRenderer.removeProperty(nativeNode, key, isSvg);
2623
+ }, (key, value) => {
2624
+ if (key === "children") {
2625
+ updatedChildren = true;
2626
+ newAtom.child = createElementChildren(newVNode.type, value, nativeRenderer, isSvg);
2627
+ buildElementChildren(newAtom, nativeRenderer, parentComponent, context);
2628
+ return;
2629
+ }
2630
+ if (key === "class") {
2631
+ nativeRenderer.setClass(nativeNode, classToString(value), isSvg);
2632
+ return;
2633
+ }
2634
+ if (key === "style") {
2635
+ const styleObj = styleToObject(value);
2636
+ for (const styleName in styleObj) nativeRenderer.setStyle(nativeNode, styleName, styleObj[styleName], isSvg);
2637
+ return;
2638
+ }
2639
+ if (listenerReg.test(key)) {
2640
+ if (typeof value === "function") nativeRenderer.listen(nativeNode, key, value, isSvg);
2641
+ return;
2642
+ }
2643
+ if (key === "ref") {
2644
+ bindRefs = value;
2645
+ return;
2646
+ }
2647
+ nativeRenderer.setProperty(nativeNode, key, value, isSvg);
2648
+ }, (key, newValue, oldValue) => {
2649
+ if (key === "children") {
2650
+ updatedChildren = true;
2651
+ newAtom.child = createElementChildren(newVNode.type, newValue, nativeRenderer, isSvg);
2652
+ if (!newAtom.child) cleanElementChildren(oldAtom, nativeRenderer);
2653
+ else if (!oldAtom.child) buildElementChildren(newAtom, nativeRenderer, parentComponent, context);
2654
+ else diff(nativeRenderer, parentComponent, newAtom.child, oldAtom.child, context, false);
2655
+ return;
2656
+ }
2657
+ if (key === "class") {
2658
+ const oldClassName = classToString(oldValue);
2659
+ const newClassName = classToString(newValue);
2660
+ if (oldClassName !== newClassName) nativeRenderer.setClass(nativeNode, newClassName, isSvg);
2661
+ return;
2662
+ }
2663
+ if (key === "style") {
2664
+ comparePropsWithCallbacks(styleToObject(oldValue), styleToObject(newValue), (styleName) => {
2665
+ nativeRenderer.removeStyle(nativeNode, styleName, isSvg);
2666
+ }, (styleName, styleValue) => {
2667
+ nativeRenderer.setStyle(nativeNode, styleName, styleValue, isSvg);
2668
+ }, (styleName, styleValue) => {
2669
+ nativeRenderer.setStyle(nativeNode, styleName, styleValue, isSvg);
2670
+ });
2671
+ return;
2672
+ }
2673
+ if (listenerReg.test(key)) {
2674
+ nativeRenderer.unListen(nativeNode, key, oldValue, isSvg);
2675
+ nativeRenderer.listen(nativeNode, key, newValue, isSvg);
2676
+ return;
2677
+ }
2678
+ if (key === "ref") {
2679
+ bindRefs = newValue;
2680
+ return;
2681
+ }
2682
+ nativeRenderer.setProperty(nativeNode, key, newValue, isSvg);
2683
+ });
2684
+ if (!updatedChildren) newAtom.child = oldAtom.child;
2685
+ let refEffects = nativeNodeRefRecord.get(oldAtom);
2686
+ if (!refEffects) refEffects = /* @__PURE__ */ new Map();
2687
+ nativeNodeRefRecord.delete(oldAtom);
2688
+ nativeNodeRefRecord.set(newAtom, refEffects);
2689
+ updateRefs(bindRefs, nativeNode, refEffects);
2690
+ }
2691
+ //#endregion
2692
+ //#region src/base/root.component.ts
2693
+ /**
2694
+ * Viewfly 根组件,用于实现组件状态更新事件通知
2695
+ */
2696
+ var RootComponent = class extends Component {
2697
+ constructor(factory, refresh) {
2698
+ super(null, factory, {});
2699
+ this.refresh = refresh;
2700
+ }
2701
+ markAsChanged(changedComponent) {
2702
+ this._changed = true;
2703
+ if (changedComponent) this.changedSubComponents.add(changedComponent);
2704
+ this.refresh();
2705
+ }
2706
+ };
2707
+ //#endregion
2708
+ //#region src/viewfly.ts
2709
+ var viewflyErrorFn = makeError("Viewfly");
2710
+ function viewfly(config) {
2711
+ const { context, nativeRenderer, autoUpdate, root } = Object.assign({ autoUpdate: true }, config);
2712
+ const modules = [];
2713
+ let destroyed = false;
2714
+ let appHost = null;
2715
+ const rootProviders = [];
2716
+ const rootComponent = new RootComponent(() => {
2717
+ const rootContext = createContext(rootProviders, null, context);
2718
+ return () => {
2719
+ return jsx(rootContext, { children: destroyed ? null : root });
2720
+ };
2721
+ }, function() {
2722
+ if (destroyed || !autoUpdate) return;
2723
+ nextTick(() => {
2724
+ render(appHost);
2725
+ });
2726
+ });
2727
+ const render = createRenderer(rootComponent, nativeRenderer, config.elementNamespace);
2728
+ let isStarted = false;
2729
+ let task = null;
2730
+ function nextTick(callback) {
2731
+ if (task !== null) return;
2732
+ task = Promise.resolve().then(() => {
2733
+ task = null;
2734
+ callback();
2735
+ });
2736
+ }
2737
+ const app = {
2738
+ provide(providers) {
2739
+ providers = Array.isArray(providers) ? providers : [providers];
2740
+ rootProviders.push(...providers);
2741
+ return app;
2742
+ },
2743
+ use(module) {
2744
+ if (Array.isArray(module)) modules.push(...module);
2745
+ else modules.push(module);
2746
+ return app;
2747
+ },
2748
+ mount(host) {
2749
+ if (isStarted) throw viewflyErrorFn("application has already started.");
2750
+ for (const module of modules) module.setup?.(app);
2751
+ isStarted = true;
2752
+ appHost = host;
2753
+ render(host);
2754
+ for (const module of modules) module.onAfterStartup?.(app);
2755
+ if (!autoUpdate) return app;
2756
+ return app;
2757
+ },
2758
+ render() {
2759
+ if (appHost) render(appHost);
2760
+ return app;
2761
+ },
2762
+ destroy() {
2763
+ destroyed = true;
2764
+ rootComponent.markAsDirtied();
2765
+ app.render();
2766
+ for (const module of modules) module.onDestroy?.();
2767
+ }
2768
+ };
2769
+ return app;
2770
+ }
2771
+ //#endregion
2772
+ //#region src/reactive/computed.ts
2773
+ /**
2774
+ * 创建一个 computed,当依赖的值发生变化时,会重新计算值。
2775
+ * computed 会返回一个对象,对象的 value 属性是计算的值。
2776
+ * @param getter 计算函数,用于计算值
2777
+ * @returns 一个对象,对象的 value 属性是计算的值
2778
+ */
2779
+ function computed(getter) {
2780
+ return { get value() {
2781
+ return getter();
2782
+ } };
2783
+ }
2784
+ //#endregion
2785
+ //#region src/reactive/shallow-reactive.ts
2786
+ var defaultShallowObjectReactiveHandler = new ObjectReactiveHandler({
2787
+ readonly: false,
2788
+ shallow: true
2789
+ });
2790
+ var defaultShallowArrayReactiveHandler = new ArrayReactiveHandler({
2791
+ readonly: false,
2792
+ shallow: true
2793
+ });
2794
+ var defaultShallowMapReactiveHandler = new MapReactiveHandler({
2795
+ readonly: false,
2796
+ shallow: true
2797
+ });
2798
+ var defaultShallowSetReactiveHandler = new SetReactiveHandler({
2799
+ readonly: false,
2800
+ shallow: true
2801
+ });
2802
+ function shallowReactive(raw) {
2803
+ if (isReactive(raw)) return raw;
2804
+ let proxy = rawToProxyCache.get(raw);
2805
+ if (proxy) return proxy;
2806
+ switch (getStringType$1(raw)) {
2807
+ case "[object Object]":
2808
+ proxy = new Proxy(raw, defaultShallowObjectReactiveHandler);
2809
+ break;
2810
+ case "[object Array]":
2811
+ proxy = new Proxy(raw, defaultShallowArrayReactiveHandler);
2812
+ break;
2813
+ case "[object Set]":
2814
+ case "[object WeakSet]":
2815
+ proxy = new Proxy(raw, defaultShallowSetReactiveHandler);
2816
+ break;
2817
+ case "[object Map]":
2818
+ case "[object WeakMap]":
2819
+ proxy = new Proxy(raw, defaultShallowMapReactiveHandler);
2820
+ break;
2821
+ default: return raw;
2822
+ }
2823
+ rawToProxyCache.set(raw, proxy);
2824
+ proxyToRawCache.set(proxy, raw);
2825
+ return proxy;
2826
+ }
2827
+ //#endregion
2828
+ //#region src/reactive/signal.ts
2829
+ /**
2830
+ * 组件状态管理器
2831
+ * @param state 初始状态
2832
+ * @example
2833
+ * ```tsx
2834
+ * function App() {
2835
+ * // 初始化状态
2836
+ * const state = createSignal(1)
2837
+ *
2838
+ * return () => {
2839
+ * <div>
2840
+ * <div>当前值为:{state()}</div>
2841
+ * <div>
2842
+ * <button type="button" onClick={() => {
2843
+ * // 当点击时更新状态
2844
+ * state.set(state() + 1)
2845
+ * }
2846
+ * }>updateState</button>
2847
+ * </div>
2848
+ * </div>
2849
+ * }
2850
+ * }
2851
+ */
2852
+ function createSignal(state) {
2853
+ const ref = shallowReactive({ value: state });
2854
+ function signal() {
2855
+ return ref.value;
2856
+ }
2857
+ signal.set = function(newValue) {
2858
+ ref.value = newValue;
2859
+ };
2860
+ return signal;
2861
+ }
2862
+ //#endregion
2863
+ exports.ArrayReactiveHandler = ArrayReactiveHandler;
2864
+ exports.Component = Component;
2865
+ exports.Dep = Dep;
2866
+ exports.ForwardRef = ForwardRef;
2867
+ exports.Fragment = Fragment;
2868
+ exports.Inject = Inject;
2869
+ exports.InjectFlags = InjectFlags;
2870
+ exports.Injectable = Injectable;
2871
+ exports.InjectionToken = InjectionToken;
2872
+ exports.Injector = Injector;
2873
+ exports.JSXNodeFactory = JSXNodeFactory;
2874
+ exports.MapReactiveHandler = MapReactiveHandler;
2875
+ exports.NativeRenderer = NativeRenderer;
2876
+ exports.NullInjector = NullInjector;
2877
+ exports.ObjectReactiveHandler = ObjectReactiveHandler;
2878
+ exports.Optional = Optional;
2879
+ exports.Portal = Portal;
2880
+ exports.Prop = Prop;
2881
+ exports.ReflectiveInjector = ReflectiveInjector;
2882
+ exports.RootComponent = RootComponent;
2883
+ exports.Scope = Scope;
2884
+ exports.Self = Self;
2885
+ exports.SetReactiveHandler = SetReactiveHandler;
2886
+ exports.SkipSelf = SkipSelf;
2887
+ exports.THROW_IF_NOT_FOUND = THROW_IF_NOT_FOUND;
2888
+ exports.TrackOpTypes = TrackOpTypes;
2889
+ exports.TriggerOpTypes = TriggerOpTypes;
2890
+ exports.Type = Type;
2891
+ exports.applyMark = applyMark;
2892
+ exports.applyRefs = applyRefs;
2893
+ exports.comparePropsWithCallbacks = comparePropsWithCallbacks;
2894
+ exports.computed = computed;
2895
+ exports.createContext = createContext;
2896
+ exports.createContextProvider = createContextProvider;
2897
+ exports.createDynamicRef = createDynamicRef;
2898
+ exports.createRef = createRef;
2899
+ exports.createRenderer = createRenderer;
2900
+ exports.createShallowReadonlyProxy = createShallowReadonlyProxy;
2901
+ exports.createSignal = createSignal;
2902
+ exports.defaultArrayReactiveHandler = defaultArrayReactiveHandler;
2903
+ exports.defaultMapReactiveHandler = defaultMapReactiveHandler;
2904
+ exports.defaultObjectReactiveHandler = defaultObjectReactiveHandler;
2905
+ exports.defaultSetReactiveHandler = defaultSetReactiveHandler;
2906
+ exports.defaultShallowArrayReactiveHandler = defaultShallowArrayReactiveHandler;
2907
+ exports.defaultShallowMapReactiveHandler = defaultShallowMapReactiveHandler;
2908
+ exports.defaultShallowObjectReactiveHandler = defaultShallowObjectReactiveHandler;
2909
+ exports.defaultShallowSetReactiveHandler = defaultShallowSetReactiveHandler;
2910
+ exports.forwardRef = forwardRef;
2911
+ exports.getCurrentInstance = getCurrentInstance;
2912
+ exports.getDepContext = getDepContext;
2913
+ exports.getSetupContext = getSetupContext;
2914
+ exports.inject = inject;
2915
+ exports.internalWrite = internalWrite;
2916
+ exports.isReactive = isReactive;
2917
+ exports.jsx = jsx;
2918
+ exports.jsxs = jsxs;
2919
+ exports.makeError = makeError;
2920
+ exports.normalizeProvider = normalizeProvider;
2921
+ exports.onMounted = onMounted;
2922
+ exports.onUnmounted = onUnmounted;
2923
+ exports.onUpdated = onUpdated;
2924
+ exports.popDepContext = popDepContext;
2925
+ exports.proxyToRawCache = proxyToRawCache;
2926
+ exports.pushDepContext = pushDepContext;
2927
+ exports.rawToProxyCache = rawToProxyCache;
2928
+ exports.reactive = reactive;
2929
+ exports.readonlyProxyHandler = readonlyProxyHandler;
2930
+ exports.registryComponentDestroyCallback = registryComponentDestroyCallback;
2931
+ exports.shallowReactive = shallowReactive;
2932
+ exports.toRaw = toRaw;
2933
+ exports.track = track;
2934
+ exports.trigger = trigger;
2935
+ exports.updateRefs = updateRefs;
2936
+ exports.viewfly = viewfly;
2937
+ exports.watch = watch;
2938
+ exports.watchEffect = watchEffect;
2939
+ exports.withAnnotation = withAnnotation;
2940
+ exports.withMark = withMark;