@vue/runtime-dom 3.6.0-rc.11 → 3.6.0-rc.13

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.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @vue/runtime-dom v3.6.0-rc.11
2
+ * @vue/runtime-dom v3.6.0-rc.13
3
3
  * (c) 2018-present Yuxi (Evan) You and Vue contributors
4
4
  * @license MIT
5
5
  **/
@@ -221,9 +221,10 @@ const isMathMLTag = /*@__PURE__*/ makeMap(MATH_TAGS);
221
221
  * - ismap -> isMap
222
222
  * - nomodule -> noModule
223
223
  * - novalidate -> noValidate
224
+ * - playsinline -> playsInline
224
225
  * - readonly -> readOnly
225
226
  */
226
- const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;
227
+ const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,playsinline,readonly`;
227
228
  const isSpecialBooleanAttr = /*@__PURE__*/ makeMap(specialBooleanAttrs);
228
229
  /**
229
230
  * The full list is needed during SSR to produce the correct initial markup.
@@ -914,17 +915,33 @@ const arrayInstrumentations = {
914
915
  };
915
916
  function iterator(self, method, wrapValue) {
916
917
  const arr = shallowReadArray(self);
917
- const iter = arr[method]();
918
+ const methodFn = arr[method];
919
+ const iter = methodFn.call(arr);
918
920
  if (arr !== self && !/* @__PURE__ */ isShallow(self)) {
921
+ if (iter[Symbol.toStringTag] === "Array Iterator") {
922
+ const wrapped = Object.create(Object.getPrototypeOf(iter));
923
+ wrapped.next = () => wrapResult(iter.next(), wrapValue);
924
+ if (methodFn !== arrayProto[method]) Object.defineProperties(wrapped, {
925
+ return: { get() {
926
+ const fn = iter.return;
927
+ return typeof fn === "function" ? fn.bind(iter) : fn;
928
+ } },
929
+ throw: { get() {
930
+ const fn = iter.throw;
931
+ return typeof fn === "function" ? fn.bind(iter) : fn;
932
+ } }
933
+ });
934
+ return wrapped;
935
+ }
919
936
  iter._next = iter.next;
920
- iter.next = () => {
921
- const result = iter._next();
922
- if (!result.done) result.value = wrapValue(result.value);
923
- return result;
924
- };
937
+ iter.next = () => wrapResult(iter._next(), wrapValue);
925
938
  }
926
939
  return iter;
927
940
  }
941
+ function wrapResult(result, wrapValue) {
942
+ if (!result.done) result.value = wrapValue(result.value);
943
+ return result;
944
+ }
928
945
  const arrayProto = Array.prototype;
929
946
  function apply(self, method, fn, thisArg, wrappedRetFn, args) {
930
947
  const arr = shallowReadArray(self);
@@ -1242,6 +1259,7 @@ function createInstrumentationGetter(isReadonly, shallow) {
1242
1259
  return (target, key, receiver) => {
1243
1260
  if (key === "__v_isReactive") return !isReadonly;
1244
1261
  else if (key === "__v_isReadonly") return isReadonly;
1262
+ else if (key === "__v_isShallow") return shallow;
1245
1263
  else if (key === "__v_raw") return target;
1246
1264
  return Reflect.get(hasOwn(instrumentations, key) && key in target ? instrumentations : target, key, receiver);
1247
1265
  };
@@ -2151,8 +2169,9 @@ function getCurrentWatcher() {
2151
2169
  function onWatcherCleanup(cleanupFn, failSilently = false, owner = activeWatcher) {
2152
2170
  if (owner) {
2153
2171
  const { call } = owner.options;
2154
- if (call) owner.cleanups[owner.cleanupsLength++] = () => call(cleanupFn, 4);
2155
- else owner.cleanups[owner.cleanupsLength++] = cleanupFn;
2172
+ const cleanup = call ? () => call(cleanupFn, 4) : cleanupFn;
2173
+ if (owner.cb) (owner.cbCleanups || (owner.cbCleanups = [])).push(cleanup);
2174
+ else owner.cleanups[owner.cleanupsLength++] = cleanup;
2156
2175
  } else if (!failSilently) warn$2("onWatcherCleanup() was called when there was no active watcher to associate with.");
2157
2176
  }
2158
2177
  var WatcherEffect = class extends ReactiveEffect {
@@ -2213,9 +2232,11 @@ var WatcherEffect = class extends ReactiveEffect {
2213
2232
  if (once && cb) {
2214
2233
  const _cb = cb;
2215
2234
  cb = (...args) => {
2216
- const res = _cb(...args);
2217
- this.stop();
2218
- return res;
2235
+ try {
2236
+ return _cb(...args);
2237
+ } finally {
2238
+ this.stop();
2239
+ }
2219
2240
  };
2220
2241
  }
2221
2242
  this.cb = cb;
@@ -2223,6 +2244,19 @@ var WatcherEffect = class extends ReactiveEffect {
2223
2244
  this.onTrack = options.onTrack;
2224
2245
  this.onTrigger = options.onTrigger;
2225
2246
  }
2247
+ cleanupCallback() {
2248
+ const cleanups = this.cbCleanups;
2249
+ if (cleanups) {
2250
+ this.cbCleanups = void 0;
2251
+ for (let i = 0, l = cleanups.length; i < l; i++) cleanups[i]();
2252
+ }
2253
+ }
2254
+ stop() {
2255
+ if (this.active) {
2256
+ super.stop();
2257
+ this.cleanupCallback();
2258
+ }
2259
+ }
2226
2260
  run(initialRun = false) {
2227
2261
  const oldValue = this.oldValue;
2228
2262
  const newValue = this.oldValue = super.run();
@@ -2230,10 +2264,11 @@ var WatcherEffect = class extends ReactiveEffect {
2230
2264
  const { immediate, deep, call } = this.options;
2231
2265
  if (initialRun && !immediate) return;
2232
2266
  if (initialRun || deep || this.forceTrigger || (this.isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue))) {
2233
- cleanup(this);
2234
2267
  const currentWatcher = activeWatcher;
2235
- activeWatcher = this;
2268
+ const prevSub = setActiveSub();
2236
2269
  try {
2270
+ this.cleanupCallback();
2271
+ activeWatcher = this;
2237
2272
  const args = [
2238
2273
  newValue,
2239
2274
  oldValue === INITIAL_WATCHER_VALUE ? void 0 : this.isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue,
@@ -2242,6 +2277,7 @@ var WatcherEffect = class extends ReactiveEffect {
2242
2277
  call ? call(this.cb, 3, args) : this.cb(...args);
2243
2278
  } finally {
2244
2279
  activeWatcher = currentWatcher;
2280
+ setActiveSub(prevSub);
2245
2281
  }
2246
2282
  }
2247
2283
  }
@@ -2572,15 +2608,15 @@ function queuePostFlushCb(jobs, id = Infinity) {
2572
2608
  } else for (let i = 0; i < jobs.length; i++) queueJobWorker(jobs[i], id, postJobs, postJobs.length, 0);
2573
2609
  queueFlush();
2574
2610
  }
2575
- function flushPreFlushCbs(instance, seen) {
2611
+ function flushPreFlushCbs(instance, minUid, seen) {
2576
2612
  seen = seen || /* @__PURE__ */ new Map();
2577
2613
  for (let i = flushIndex; i < jobsLength; i++) {
2578
2614
  const cb = jobs[i];
2579
2615
  if (cb.order & 1 || cb.order === Infinity) continue;
2580
- if (instance && cb.order !== instance.uid * 2) continue;
2616
+ if (instance && cb.order !== instance.uid * 2 || minUid !== void 0 && !(cb.order >= minUid * 2)) continue;
2581
2617
  if (checkRecursiveUpdates(seen, cb)) continue;
2582
2618
  jobs.splice(i, 1);
2583
- i--;
2619
+ i = instance ? i - 1 : flushIndex - 1;
2584
2620
  jobsLength--;
2585
2621
  if (cb.flags & 2) cb.flags &= -2;
2586
2622
  try {
@@ -2590,15 +2626,24 @@ function flushPreFlushCbs(instance, seen) {
2590
2626
  }
2591
2627
  }
2592
2628
  }
2593
- function flushPostFlushCbs(seen) {
2629
+ function flushPostFlushCbs(seen, skip, minUid = 0) {
2594
2630
  if (postJobs.length) {
2631
+ let cbs = postJobs;
2632
+ if (skip) {
2633
+ cbs = [];
2634
+ let kept = 0;
2635
+ for (let i = 0; i < postJobs.length; i++) {
2636
+ const cb = postJobs[i];
2637
+ if (cb.i !== void 0 ? !cb.i || cb.i.uid < minUid : skip.has(cb)) postJobs[kept++] = cb;
2638
+ else cbs.push(cb);
2639
+ }
2640
+ postJobs.length = kept;
2641
+ } else postJobs = [];
2595
2642
  if (activePostJobs) {
2596
- for (let i = 0; i < postJobs.length; i++) activePostJobs.push(postJobs[i]);
2597
- postJobs.length = 0;
2643
+ for (let i = 0; i < cbs.length; i++) activePostJobs.push(cbs[i]);
2598
2644
  return;
2599
2645
  }
2600
- activePostJobs = postJobs;
2601
- postJobs = [];
2646
+ activePostJobs = cbs;
2602
2647
  seen = seen || /* @__PURE__ */ new Map();
2603
2648
  try {
2604
2649
  while (postFlushIndex < activePostJobs.length) {
@@ -2620,17 +2665,28 @@ function flushPostFlushCbs(seen) {
2620
2665
  }
2621
2666
  let isFlushing = false;
2622
2667
  /**
2668
+ * Run a root render, then flush the jobs it is responsible for. A mount or
2669
+ * unmount (`minUid` given) only flushes the jobs of the components it created
2670
+ * and the post cbs it queued, so pre watchers triggered in setup run before
2671
+ * mounted (#5721) while the jobs of other components stay in the queue and
2672
+ * keep their order (#6728). A root update keeps flushing all pending pre jobs
2673
+ * and post cbs, as the jobs of the components it re-renders may predate it.
2674
+ *
2623
2675
  * @internal
2624
2676
  */
2625
- function flushOnAppMount(instance) {
2626
- if (!isFlushing) {
2627
- isFlushing = true;
2628
- try {
2629
- flushPreFlushCbs(instance);
2630
- flushPostFlushCbs();
2631
- } finally {
2632
- isFlushing = false;
2633
- }
2677
+ function flushOnAppMount(fn, minUid) {
2678
+ if (isFlushing) {
2679
+ fn();
2680
+ return;
2681
+ }
2682
+ const queued = minUid === void 0 ? void 0 : new Set(postJobs);
2683
+ fn();
2684
+ isFlushing = true;
2685
+ try {
2686
+ flushPreFlushCbs(void 0, minUid);
2687
+ flushPostFlushCbs(void 0, queued, minUid);
2688
+ } finally {
2689
+ isFlushing = false;
2634
2690
  }
2635
2691
  }
2636
2692
  function flushJobs(seen) {
@@ -3098,7 +3154,7 @@ var RenderWatcherEffect = class extends WatcherEffect {
3098
3154
  this.flags |= 128;
3099
3155
  job.flags |= 2;
3100
3156
  }
3101
- if (instance) job.i = instance;
3157
+ job.i = instance;
3102
3158
  this.job = job;
3103
3159
  }
3104
3160
  notify() {
@@ -3155,6 +3211,16 @@ function createPathGetter(ctx, path) {
3155
3211
  };
3156
3212
  }
3157
3213
  //#endregion
3214
+ //#region packages/runtime-core/src/vaporInteropState.ts
3215
+ /**
3216
+ * Set by `vaporInteropPlugin`. Stays false in apps that never import the
3217
+ * plugin, so bundlers drop the vapor-in-vdom branches of the renderer.
3218
+ */
3219
+ let isVaporInteropEnabled = false;
3220
+ function setVaporInteropEnabled() {
3221
+ isVaporInteropEnabled = true;
3222
+ }
3223
+ //#endregion
3158
3224
  //#region packages/runtime-core/src/components/Teleport.ts
3159
3225
  const pendingMounts = /* @__PURE__ */ new WeakMap();
3160
3226
  const TeleportEndKey = Symbol("_vte");
@@ -3291,7 +3357,11 @@ const TeleportImpl = {
3291
3357
  hydrate: hydrateTeleport
3292
3358
  };
3293
3359
  function moveTeleport(vnode, container, parentAnchor, { o: { insert }, m: move }, parentComponent, moveType = 2) {
3294
- if (moveType === 0) insert(vnode.targetAnchor, container, parentAnchor);
3360
+ if (moveType === 0) {
3361
+ if (vnode.targetStart) insert(vnode.targetStart, container, parentAnchor);
3362
+ insert(vnode.targetAnchor, container, parentAnchor);
3363
+ parentAnchor = vnode.targetAnchor;
3364
+ }
3295
3365
  const { el, anchor, shapeFlag, children, props } = vnode;
3296
3366
  const isReorder = moveType === 2;
3297
3367
  if (isReorder) insert(el, container, parentAnchor);
@@ -3410,9 +3480,18 @@ const BaseTransitionPropsValidators = {
3410
3480
  onAfterAppear: TransitionHookValidator,
3411
3481
  onAppearCancelled: TransitionHookValidator
3412
3482
  };
3483
+ let isTransitionEnabled = false;
3484
+ function withTransitionEnabled(value) {
3485
+ isTransitionEnabled = true;
3486
+ return value;
3487
+ }
3413
3488
  function isEmptyTransitionChild(vnode, instance) {
3414
3489
  if (vnode.type === Comment) return true;
3415
- if (vnode.type === VaporSlot || isVaporComponent(vnode.type)) return !getVaporInterface(instance, vnode).hasTransitionChild(vnode);
3490
+ if (vnode.type === Fragment) {
3491
+ const child = isArray(vnode.children) && filterSingleRoot(vnode.children, false);
3492
+ return !child || isEmptyTransitionChild(child, instance);
3493
+ }
3494
+ if (isVaporInteropEnabled && (vnode.type === VaporSlot || isVaporComponent(vnode.type))) return !getVaporInterface(instance, vnode).hasTransitionChild(vnode);
3416
3495
  return !!vnode.component && isEmptyTransitionChild(vnode.component.subTree, instance);
3417
3496
  }
3418
3497
  const BaseTransitionImpl = {
@@ -3429,7 +3508,7 @@ const BaseTransitionImpl = {
3429
3508
  const { mode } = rawProps;
3430
3509
  checkTransitionMode(mode);
3431
3510
  return prepareTransitionSwitch(instance.subTree, child, rawProps, state, instance, mode === "out-in" ? resumeAfterLeave || (resumeAfterLeave = () => {
3432
- if (!(instance.job.flags & 4)) instance.update();
3511
+ if (!(instance.effect.flags & 1024)) instance.update();
3433
3512
  }) : NOOP);
3434
3513
  };
3435
3514
  }
@@ -3449,7 +3528,7 @@ function findNonCommentChild(children) {
3449
3528
  }
3450
3529
  return child;
3451
3530
  }
3452
- const BaseTransition = BaseTransitionImpl;
3531
+ const BaseTransition = /*@__PURE__*/ withTransitionEnabled(BaseTransitionImpl);
3453
3532
  function getLeavingNodesForType(state, vnode) {
3454
3533
  const { leavingNodes } = state;
3455
3534
  let leavingVNodesCache = leavingNodes.get(vnode.type);
@@ -3472,7 +3551,14 @@ function resolveTransitionHooks(vnode, props, state, instance, postClone) {
3472
3551
  },
3473
3552
  earlyRemove: () => {
3474
3553
  const leavingVNode = leavingVNodesCache[key];
3475
- if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el[leaveCbKey]) leavingVNode.el[leaveCbKey]();
3554
+ if (leavingVNode && isSameVNodeType(vnode, leavingVNode)) {
3555
+ let leavingCb = leavingVNode.el[leaveCbKey];
3556
+ if (!leavingCb) {
3557
+ const leavingRoot = getTransitionRoot(leavingVNode);
3558
+ leavingCb = leavingRoot && leavingRoot.el[leaveCbKey];
3559
+ }
3560
+ if (leavingCb) leavingCb();
3561
+ }
3476
3562
  },
3477
3563
  cloneHooks: (vnode) => {
3478
3564
  const hooks = resolveTransitionHooks(vnode, props, state, instance, postClone);
@@ -3480,7 +3566,7 @@ function resolveTransitionHooks(vnode, props, state, instance, postClone) {
3480
3566
  return hooks;
3481
3567
  }
3482
3568
  }, props, state, instance);
3483
- if (vnode.type === VaporSlot) extend(hooks, {
3569
+ if (isVaporInteropEnabled && vnode.type === VaporSlot) extend(hooks, {
3484
3570
  __vapor: true,
3485
3571
  props,
3486
3572
  state,
@@ -3657,7 +3743,7 @@ function applyTransitionModeSwitch(leavingVNode, leavingHooks, getEnterHooks, pr
3657
3743
  function setTransitionHooks(vnode, hooks) {
3658
3744
  if (vnode.shapeFlag & 6 && vnode.component) {
3659
3745
  vnode.transition = hooks;
3660
- if (isVaporComponent(vnode.type)) getVaporInterface(vnode.component, vnode).setTransitionHooks(vnode.component, hooks);
3746
+ if (isVaporInteropEnabled && isVaporComponent(vnode.type)) getVaporInterface(vnode.component, vnode).setTransitionHooks(vnode.component, hooks);
3661
3747
  else {
3662
3748
  const subTree = vnode.component.subTree;
3663
3749
  return setTransitionHooks(isTeleport(subTree.type) ? getInnerChild$1(subTree) || subTree : subTree, hooks);
@@ -3666,7 +3752,13 @@ function setTransitionHooks(vnode, hooks) {
3666
3752
  const contentHooks = vnode.ssContent.transition = hooks.clone(vnode.ssContent);
3667
3753
  const fallbackHooks = vnode.ssFallback.transition = hooks.clone(vnode.ssFallback);
3668
3754
  return vnode.suspense && vnode.suspense.activeBranch === vnode.ssFallback ? fallbackHooks : contentHooks;
3669
- } else vnode.transition = hooks;
3755
+ } else {
3756
+ vnode.transition = hooks;
3757
+ if (vnode.type === Fragment && isArray(vnode.children)) {
3758
+ const child = filterSingleRoot(vnode.children, false);
3759
+ if (child) setTransitionHooks(child, hooks);
3760
+ }
3761
+ }
3670
3762
  return hooks;
3671
3763
  }
3672
3764
  function getTransitionRawChildren(children, keepComment = false, parentKey) {
@@ -3689,6 +3781,14 @@ function getTransitionRawChildren(children, keepComment = false, parentKey) {
3689
3781
  function checkTransitionMode(mode) {
3690
3782
  if (mode && mode !== "in-out" && mode !== "out-in" && mode !== "default") warn$1(`invalid <transition> mode: ${mode}`);
3691
3783
  }
3784
+ function getTransitionRoot(vnode) {
3785
+ if (vnode.component && (!isVaporInteropEnabled || !isVaporComponent(vnode.type))) return getTransitionRoot(vnode.component.subTree);
3786
+ if (vnode.type === Fragment) {
3787
+ const child = isArray(vnode.children) && filterSingleRoot(vnode.children, false);
3788
+ return child ? getTransitionRoot(child) : void 0;
3789
+ }
3790
+ if (vnode.type !== Comment) return vnode;
3791
+ }
3692
3792
  //#endregion
3693
3793
  //#region packages/runtime-core/src/apiDefineComponent.ts
3694
3794
  /*@__NO_SIDE_EFFECTS__*/
@@ -3942,7 +4042,7 @@ function createHydrationFunctions(rendererInternals) {
3942
4042
  else nextNode = hydrateFragment(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized);
3943
4043
  break;
3944
4044
  case VaporSlot:
3945
- nextNode = getVaporInterface(parentComponent, vnode).hydrateSlot(vnode, node, parentComponent, parentSuspense, slotScopeIds);
4045
+ if (isVaporInteropEnabled) nextNode = getVaporInterface(parentComponent, vnode).hydrateSlot(vnode, node, parentComponent, parentSuspense, slotScopeIds);
3946
4046
  break;
3947
4047
  default: if (shapeFlag & 1) {
3948
4048
  if ((domType !== 1 || vnode.type.toLowerCase() !== node.tagName.toLowerCase()) && !isTemplateNode(node)) nextNode = onMismatch();
@@ -4074,7 +4174,7 @@ function createHydrationFunctions(rendererInternals) {
4074
4174
  if (fragmentSlotScopeIds) slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds;
4075
4175
  const container = parentNode(node);
4076
4176
  const first = nextSibling(node);
4077
- const next = vnode.vo && node.data === "(" ? getVaporInterface(parentComponent, vnode).hydrateSlotOutlet(vnode, node, parentComponent, parentSuspense, slotScopeIds) : hydrateChildren(first, vnode, container, parentComponent, parentSuspense, slotScopeIds, optimized);
4177
+ const next = isVaporInteropEnabled && vnode.vo && node.data === "(" ? getVaporInterface(parentComponent, vnode).hydrateSlotOutlet(vnode, node, parentComponent, parentSuspense, slotScopeIds) : hydrateChildren(first, vnode, container, parentComponent, parentSuspense, slotScopeIds, optimized);
4078
4178
  if (next && isComment(next) && next.data === (node.data === "(" ? ")" : "]")) return nextSibling(vnode.anchor = next);
4079
4179
  else {
4080
4180
  logMismatchError();
@@ -4318,14 +4418,20 @@ const hydrateOnVisible = (opts) => (hydrate, forEach) => {
4318
4418
  break;
4319
4419
  }
4320
4420
  }, opts);
4321
- forEach((el) => {
4322
- if (!(el instanceof Element)) return;
4421
+ const observe = (el) => {
4323
4422
  if (elementIsVisibleInViewport(el)) {
4324
4423
  hydrate();
4325
4424
  ob.disconnect();
4326
4425
  return false;
4327
4426
  }
4427
+ if (getComputedStyle(el).display === "contents") {
4428
+ for (let i = 0; i < el.children.length; i++) if (observe(el.children[i]) === false) return false;
4429
+ }
4328
4430
  ob.observe(el);
4431
+ };
4432
+ forEach((el) => {
4433
+ if (!(el instanceof Element)) return;
4434
+ return observe(el);
4329
4435
  });
4330
4436
  return () => ob.disconnect();
4331
4437
  };
@@ -4475,7 +4581,7 @@ function createAsyncComponentContext(source) {
4475
4581
  setPendingRequest: (request) => pendingRequest = request
4476
4582
  };
4477
4583
  }
4478
- const useAsyncComponentState = (delay, timeout, onError, instance = currentInstance) => {
4584
+ const useAsyncComponentState = (delay = 200, timeout, onError, instance = currentInstance) => {
4479
4585
  const loaded = /* @__PURE__ */ ref(false);
4480
4586
  const error = /* @__PURE__ */ ref();
4481
4587
  const delayed = /* @__PURE__ */ ref(!!delay);
@@ -4532,7 +4638,12 @@ function performAsyncHydrate(el, instance, hydrate, getResolvedComp, load, hydra
4532
4638
  //#endregion
4533
4639
  //#region packages/runtime-core/src/components/KeepAlive.ts
4534
4640
  const isKeepAlive = (vnode) => vnode.type.__isKeepAlive;
4535
- const KeepAlive = {
4641
+ let isKeepAliveEnabled = false;
4642
+ function withKeepAliveEnabled(value) {
4643
+ isKeepAliveEnabled = true;
4644
+ return value;
4645
+ }
4646
+ const KeepAlive = /*@__PURE__*/ withKeepAliveEnabled({
4536
4647
  name: `KeepAlive`,
4537
4648
  __isKeepAlive: true,
4538
4649
  props: {
@@ -4583,7 +4694,10 @@ const KeepAlive = {
4583
4694
  function pruneCacheEntry(key) {
4584
4695
  const cached = cache.get(key);
4585
4696
  if (cached && (!current || !isSameVNodeType(cached, current))) unmount(cached);
4586
- else if (current) resetShapeFlag(current);
4697
+ else if (current) {
4698
+ resetShapeFlag(current);
4699
+ if (cached) resetShapeFlag(cached);
4700
+ }
4587
4701
  cache.delete(key);
4588
4702
  keys.delete(key);
4589
4703
  }
@@ -4668,7 +4782,7 @@ const KeepAlive = {
4668
4782
  return isSuspense(rawVNode.type) ? rawVNode : vnode;
4669
4783
  };
4670
4784
  }
4671
- };
4785
+ });
4672
4786
  function matches(pattern, name) {
4673
4787
  if (isArray(pattern)) return pattern.some((p) => matches(p, name));
4674
4788
  else if (isString(pattern)) return pattern.split(",").includes(name);
@@ -4900,16 +5014,22 @@ const rawVaporSlotKey = Symbol(`rawVaporSlot`);
4900
5014
  function renderSlot(slots, name, props, fallback, noSlotted, branchKey) {
4901
5015
  if (props == null) props = {};
4902
5016
  let slot = slots[name];
4903
- const vaporSlot = slot && slot[rawVaporSlotKey];
5017
+ const vaporSlot = isVaporInteropEnabled && slot && slot[rawVaporSlotKey];
4904
5018
  if (vaporSlot) {
4905
5019
  const ret = (openBlock(), createBlock(VaporSlot, props));
4906
5020
  ret.vs = {
4907
5021
  slot: vaporSlot,
5022
+ name,
4908
5023
  outlets: fallback ? [{
4909
5024
  fallback,
4910
5025
  owner: currentRenderingInstance
4911
5026
  }] : void 0
4912
5027
  };
5028
+ if (branchKey != null && props.key == null) {
5029
+ ret.vs.props = ret.props;
5030
+ ret.props = extend({}, ret.props, { key: branchKey });
5031
+ ret.key = branchKey;
5032
+ }
4913
5033
  if (!noSlotted && ret.scopeId) ret.slotScopeIds = [ret.scopeId + "-s"];
4914
5034
  return ret;
4915
5035
  }
@@ -4930,7 +5050,7 @@ function renderSlot(slots, name, props, fallback, noSlotted, branchKey) {
4930
5050
  try {
4931
5051
  const validSlotContent = slot && ensureValidVNode(slot(props));
4932
5052
  let attached = false;
4933
- if (fallback && validSlotContent && currentRenderingInstance) {
5053
+ if (isVaporInteropEnabled && fallback && validSlotContent && currentRenderingInstance) {
4934
5054
  const interop = currentRenderingInstance.appContext.vapor;
4935
5055
  if (interop) attached = interop.attachSlotOutlet(validSlotContent, fallback, currentRenderingInstance);
4936
5056
  }
@@ -6101,7 +6221,7 @@ function hasPropsChanged(prevProps, nextProps, emitsOptions) {
6101
6221
  if (nextKeys.length !== Object.keys(prevProps).length) return true;
6102
6222
  for (let i = 0; i < nextKeys.length; i++) {
6103
6223
  const key = nextKeys[i];
6104
- if (hasPropValueChanged(nextProps, prevProps, key) && !isEmitListener(emitsOptions, key)) return true;
6224
+ if (!hasOwn(prevProps, key) || hasPropValueChanged(nextProps, prevProps, key) && !isEmitListener(emitsOptions, key)) return true;
6105
6225
  }
6106
6226
  return false;
6107
6227
  }
@@ -6614,7 +6734,7 @@ function baseCreateRenderer(options, createHydrationFns) {
6614
6734
  processFragment(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized);
6615
6735
  break;
6616
6736
  case VaporSlot:
6617
- getVaporInterface(parentComponent, n2).slot(n1, n2, container, anchor, parentComponent, parentSuspense, slotScopeIds);
6737
+ if (isVaporInteropEnabled) getVaporInterface(parentComponent, n2).slot(n1, n2, container, anchor, parentComponent, parentSuspense, slotScopeIds);
6618
6738
  break;
6619
6739
  default: if (shapeFlag & 1) processElement(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized);
6620
6740
  else if (shapeFlag & 6) processComponent(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized);
@@ -6748,7 +6868,7 @@ function baseCreateRenderer(options, createHydrationFns) {
6748
6868
  let vnodeHook;
6749
6869
  parentComponent && toggleRecurse(parentComponent, false);
6750
6870
  if (vnodeHook = newProps.onVnodeBeforeUpdate) invokeVNodeHook(vnodeHook, parentComponent, n2, n1);
6751
- if (n2.ibu) n2.ibu();
6871
+ if (isVaporInteropEnabled && n2.ibu) n2.ibu();
6752
6872
  if (dirs) invokeDirectiveHook(n2, n1, parentComponent, "beforeUpdate");
6753
6873
  parentComponent && toggleRecurse(parentComponent, true);
6754
6874
  if (isHmrUpdating || dynamicChildren && (!n1.dynamicChildren || n1.dynamicChildren.length !== dynamicChildren.length)) {
@@ -6782,9 +6902,9 @@ function baseCreateRenderer(options, createHydrationFns) {
6782
6902
  if (n1.children !== n2.children) hostSetElementText(el, n2.children);
6783
6903
  }
6784
6904
  } else if (!optimized && dynamicChildren == null) patchProps(el, oldProps, newProps, parentComponent, namespace);
6785
- if ((vnodeHook = newProps.onVnodeUpdated) || dirs || n2.iu) queuePostRenderEffect(() => {
6905
+ if ((vnodeHook = newProps.onVnodeUpdated) || dirs || isVaporInteropEnabled && n2.iu) queuePostRenderEffect(() => {
6786
6906
  vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, n2, n1);
6787
- n2.iu && n2.iu();
6907
+ isVaporInteropEnabled && n2.iu && n2.iu();
6788
6908
  dirs && invokeDirectiveHook(n2, n1, parentComponent, "updated");
6789
6909
  }, void 0, parentSuspense);
6790
6910
  };
@@ -6792,7 +6912,8 @@ function baseCreateRenderer(options, createHydrationFns) {
6792
6912
  for (let i = 0; i < newChildren.length; i++) {
6793
6913
  const oldVNode = oldChildren[i];
6794
6914
  const newVNode = newChildren[i];
6795
- const container = oldVNode.el && (oldVNode.type === Fragment || !isSameVNodeType(oldVNode, newVNode) || oldVNode.shapeFlag & 198) ? hostParentNode(oldVNode.el) : fallbackContainer;
6915
+ const oldEl = oldVNode.el || resolveAsyncComponentPlaceholder(oldVNode);
6916
+ const container = oldEl && (oldVNode.type === Fragment || !isSameVNodeType(oldVNode, newVNode) || oldVNode.shapeFlag & 198) ? hostParentNode(oldEl) : fallbackContainer;
6796
6917
  patch(oldVNode, newVNode, container, null, parentComponent, parentSuspense, namespace, slotScopeIds, true);
6797
6918
  }
6798
6919
  };
@@ -6884,6 +7005,7 @@ function baseCreateRenderer(options, createHydrationFns) {
6884
7005
  if (instance.asyncDep && !instance.asyncResolved) {
6885
7006
  pushWarningContext(n2);
6886
7007
  n2.el = n1.el;
7008
+ n2.placeholder = n1.placeholder;
6887
7009
  updateComponentPreRender(instance, n2, optimized);
6888
7010
  popWarningContext();
6889
7011
  return;
@@ -6893,6 +7015,7 @@ function baseCreateRenderer(options, createHydrationFns) {
6893
7015
  }
6894
7016
  } else {
6895
7017
  n2.el = n1.el;
7018
+ n2.placeholder = n1.placeholder;
6896
7019
  instance.vnode = n2;
6897
7020
  }
6898
7021
  };
@@ -6989,7 +7112,7 @@ function baseCreateRenderer(options, createHydrationFns) {
6989
7112
  } else next = vnode;
6990
7113
  if (bu) invokeArrayFns(bu);
6991
7114
  if (vnodeHook = next.props && next.props.onVnodeBeforeUpdate) invokeVNodeHook(vnodeHook, parent, next, vnode);
6992
- if (next.ibu) next.ibu();
7115
+ if (isVaporInteropEnabled && next.ibu) next.ibu();
6993
7116
  toggleRecurse(instance, true);
6994
7117
  startMeasure(instance, `render`);
6995
7118
  const nextTree = renderComponentRoot(instance);
@@ -7002,9 +7125,9 @@ function baseCreateRenderer(options, createHydrationFns) {
7002
7125
  next.el = nextTree.el;
7003
7126
  if (originNext === null) updateHOCHostEl(instance, nextTree.el);
7004
7127
  if (u) queuePostRenderEffect(u, void 0, parentSuspense);
7005
- if ((vnodeHook = next.props && next.props.onVnodeUpdated) || next.iu) queuePostRenderEffect(() => {
7128
+ if ((vnodeHook = next.props && next.props.onVnodeUpdated) || isVaporInteropEnabled && next.iu) queuePostRenderEffect(() => {
7006
7129
  vnodeHook && invokeVNodeHook(vnodeHook, parent, next, vnode);
7007
- next.iu && next.iu();
7130
+ isVaporInteropEnabled && next.iu && next.iu();
7008
7131
  }, void 0, parentSuspense);
7009
7132
  devtoolsComponentUpdated(instance);
7010
7133
  popWarningContext();
@@ -7156,7 +7279,7 @@ function baseCreateRenderer(options, createHydrationFns) {
7156
7279
  };
7157
7280
  const move = (vnode, container, anchor, moveType, parentComponent, parentSuspense = null) => {
7158
7281
  const { el, type, transition, children, shapeFlag } = vnode;
7159
- if (isVaporComponent(type) || type === VaporSlot) {
7282
+ if (isVaporInteropEnabled && (isVaporComponent(type) || type === VaporSlot)) {
7160
7283
  getVaporInterface(parentComponent, vnode).move(vnode, container, anchor, moveType, parentSuspense);
7161
7284
  return;
7162
7285
  }
@@ -7200,11 +7323,11 @@ function baseCreateRenderer(options, createHydrationFns) {
7200
7323
  }
7201
7324
  if (cacheIndex != null && (!vnode.ctx || vnode.ctx === parentComponent)) parentComponent.renderCache[cacheIndex] = void 0;
7202
7325
  if (shapeFlag & 256) {
7203
- if (isVaporComponent(vnode.type)) getVaporInterface(parentComponent, vnode).deactivate(vnode, parentComponent.ctx.getStorageContainer(), parentSuspense);
7326
+ if (isVaporInteropEnabled && isVaporComponent(vnode.type)) getVaporInterface(parentComponent, vnode).deactivate(vnode, parentComponent.ctx.getStorageContainer(), parentSuspense);
7204
7327
  else parentComponent.ctx.deactivate(vnode);
7205
7328
  return;
7206
7329
  }
7207
- if (shapeFlag & 6 && isVaporComponent(type)) {
7330
+ if (isVaporInteropEnabled && shapeFlag & 6 && isVaporComponent(type)) {
7208
7331
  getVaporInterface(parentComponent, vnode).unmount(vnode, doRemove, parentSuspense);
7209
7332
  return;
7210
7333
  }
@@ -7222,7 +7345,7 @@ function baseCreateRenderer(options, createHydrationFns) {
7222
7345
  if (shapeFlag & 64) vnode.type.remove(vnode, parentComponent, parentSuspense, internals, doRemove);
7223
7346
  else if (dynamicChildren && !dynamicChildren.hasOnce && (type !== Fragment || patchFlag > 0 && patchFlag & 64)) unmountChildren(dynamicChildren, parentComponent, parentSuspense, false, true);
7224
7347
  else if (type === Fragment && patchFlag & 384 || !optimized && shapeFlag & 16) unmountChildren(children, parentComponent, parentSuspense);
7225
- if (type === VaporSlot) {
7348
+ if (isVaporInteropEnabled && type === VaporSlot) {
7226
7349
  getVaporInterface(parentComponent, vnode).unmount(vnode, doRemove, parentSuspense);
7227
7350
  return;
7228
7351
  }
@@ -7237,12 +7360,9 @@ function baseCreateRenderer(options, createHydrationFns) {
7237
7360
  };
7238
7361
  const remove = (vnode) => {
7239
7362
  const { type, el, anchor, transition } = vnode;
7240
- if (type === Fragment) {
7241
- if (vnode.patchFlag > 0 && vnode.patchFlag & 2048 && transition && !transition.persisted) vnode.children.forEach((child) => {
7242
- if (child.type === Comment) hostRemove(child.el);
7243
- else remove(child);
7244
- });
7245
- else removeFragment(el, anchor);
7363
+ const isFragment = type === Fragment;
7364
+ if (isFragment && !transition) {
7365
+ removeFragment(el, anchor);
7246
7366
  return;
7247
7367
  }
7248
7368
  if (type === Static) {
@@ -7250,8 +7370,21 @@ function baseCreateRenderer(options, createHydrationFns) {
7250
7370
  if (transition && !transition.persisted && transition.afterLeave) transition.afterLeave();
7251
7371
  return;
7252
7372
  }
7253
- if (transition) performTransitionLeave(el, transition, () => hostRemove(el), !!(vnode.shapeFlag & 1));
7254
- else hostRemove(el);
7373
+ const leavingNode = isFragment ? getTransitionRoot(vnode) : vnode;
7374
+ const performRemove = () => {
7375
+ if (isFragment) {
7376
+ if (hostParentNode(el)) removeFragment(el, anchor);
7377
+ } else hostRemove(el);
7378
+ };
7379
+ if (transition) {
7380
+ let leavingEl = leavingNode && leavingNode.el;
7381
+ let isElement = !!(leavingNode && leavingNode.shapeFlag & 1);
7382
+ if (isVaporInteropEnabled && isFragment && leavingNode && isVaporComponent(leavingNode.type)) {
7383
+ leavingEl = getVaporInterface(leavingNode.component, leavingNode).getTransitionElement(leavingNode);
7384
+ isElement = !!leavingEl;
7385
+ }
7386
+ performTransitionLeave(leavingEl || el, transition, performRemove, isElement);
7387
+ } else performRemove();
7255
7388
  };
7256
7389
  const removeFragment = (cur, end) => {
7257
7390
  let next;
@@ -7285,7 +7418,7 @@ function baseCreateRenderer(options, createHydrationFns) {
7285
7418
  };
7286
7419
  const getNextHostNode = (vnode) => {
7287
7420
  if (vnode.shapeFlag & 6) {
7288
- if (isVaporComponent(vnode.type)) return hostNextSibling(vnode.anchor);
7421
+ if (isVaporInteropEnabled && isVaporComponent(vnode.type)) return hostNextSibling(vnode.anchor);
7289
7422
  return getNextHostNode(vnode.component.subTree);
7290
7423
  }
7291
7424
  if (vnode.shapeFlag & 128) return vnode.suspense.next();
@@ -7294,15 +7427,12 @@ function baseCreateRenderer(options, createHydrationFns) {
7294
7427
  return teleportEnd ? hostNextSibling(teleportEnd) : el;
7295
7428
  };
7296
7429
  const render = (vnode, container, namespace) => {
7297
- let instance;
7298
- if (vnode == null) {
7299
- if (container._vnode) {
7300
- unmount(container._vnode, null, null, true);
7301
- instance = container._vnode.component;
7302
- }
7303
- } else patch(container._vnode || null, vnode, container, null, null, null, namespace);
7304
- container._vnode = vnode;
7305
- flushOnAppMount(instance);
7430
+ flushOnAppMount(() => {
7431
+ if (vnode == null) {
7432
+ if (container._vnode) unmount(container._vnode, null, null, true);
7433
+ } else patch(container._vnode || null, vnode, container, null, null, null, namespace);
7434
+ container._vnode = vnode;
7435
+ }, vnode && container._vnode ? void 0 : vnode && vnode.component ? vnode.component.uid : getNextUid());
7306
7436
  };
7307
7437
  const internals = {
7308
7438
  p: patch,
@@ -7349,7 +7479,7 @@ function resolveChildrenNamespace({ type, props }, currentNamespace) {
7349
7479
  return currentNamespace === "svg" && type === "foreignObject" || currentNamespace === "mathml" && type === "annotation-xml" && props && props.encoding && props.encoding.includes("html") ? void 0 : currentNamespace;
7350
7480
  }
7351
7481
  function toggleRecurse({ effect, job, vapor }, allowed) {
7352
- if (!vapor) {
7482
+ if (!isVaporInteropEnabled || !vapor) {
7353
7483
  if (allowed) {
7354
7484
  effect.flags |= 128;
7355
7485
  job.flags |= 2;
@@ -7461,7 +7591,7 @@ function getInheritedScopeIds(vnode, parentComponent, includeVaporRootIds = true
7461
7591
  currentParent = currentParent.parent;
7462
7592
  } else break;
7463
7593
  }
7464
- const vaporScopeIds = includeVaporRootIds && currentVNode.vaporScopeIds;
7594
+ const vaporScopeIds = isVaporInteropEnabled && includeVaporRootIds && currentVNode.vaporScopeIds;
7465
7595
  if (vaporScopeIds) inheritedScopeIds.push(...vaporScopeIds);
7466
7596
  return inheritedScopeIds;
7467
7597
  }
@@ -7474,8 +7604,13 @@ function resolveAsyncComponentPlaceholder(anchorVnode) {
7474
7604
  //#endregion
7475
7605
  //#region packages/runtime-core/src/components/Suspense.ts
7476
7606
  const isSuspense = (type) => type.__isSuspense;
7607
+ let isSuspenseEnabled = false;
7608
+ function withSuspenseEnabled(value) {
7609
+ isSuspenseEnabled = true;
7610
+ return value;
7611
+ }
7477
7612
  let suspenseId = 0;
7478
- const Suspense = {
7613
+ const Suspense = /*@__PURE__*/ withSuspenseEnabled({
7479
7614
  name: "Suspense",
7480
7615
  __isSuspense: true,
7481
7616
  process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals) {
@@ -7492,7 +7627,7 @@ const Suspense = {
7492
7627
  },
7493
7628
  hydrate: hydrateSuspense,
7494
7629
  normalize: normalizeSuspenseChildren
7495
- };
7630
+ });
7496
7631
  function triggerEvent(vnode, name) {
7497
7632
  const eventListener = vnode.props && vnode.props[name];
7498
7633
  if (isFunction(eventListener)) eventListener();
@@ -7695,13 +7830,12 @@ function createSuspenseBoundary(vnode, parentSuspense, parentComponent, containe
7695
7830
  registerDep(instance, onResolve) {
7696
7831
  const isInPendingSuspense = !!suspense.pendingBranch;
7697
7832
  if (isInPendingSuspense) suspense.deps++;
7698
- const hydratedEl = instance.vnode && instance.vnode.el;
7699
7833
  instance.asyncDep.catch((err) => {
7700
7834
  handleError(err, instance, 0);
7701
7835
  }).then((asyncSetupResult) => {
7702
7836
  if (instance.isUnmounted || suspense.isUnmounted || suspense.pendingId !== instance.suspenseId) return;
7703
7837
  setCurrentInstance(null, void 0);
7704
- if (hydratedEl && !instance.scope.active) {
7838
+ if (!instance.scope.active) {
7705
7839
  if (isInPendingSuspense && --suspense.deps === 0) suspense.resolve();
7706
7840
  return;
7707
7841
  }
@@ -8014,7 +8148,7 @@ function cloneVNode(vnode, extraProps, mergeRef = false, cloneTransition = false
8014
8148
  ctx: vnode.ctx,
8015
8149
  ce: vnode.ce,
8016
8150
  vi: vnode.vi,
8017
- vs: cloneVaporSlotMeta(vnode),
8151
+ vs: cloneVaporSlotMeta(vnode, extraProps),
8018
8152
  vb: vnode.vb,
8019
8153
  ibu: vnode.ibu,
8020
8154
  iu: vnode.iu,
@@ -8023,13 +8157,29 @@ function cloneVNode(vnode, extraProps, mergeRef = false, cloneTransition = false
8023
8157
  if (transition && cloneTransition) setTransitionHooks(cloned, transition.clone(cloned));
8024
8158
  return cloned;
8025
8159
  }
8026
- function cloneVaporSlotMeta(vnode) {
8160
+ function cloneVaporSlotMeta(vnode, extraProps) {
8027
8161
  const vaporSlot = vnode.vs;
8028
8162
  if (!vaporSlot) return vaporSlot;
8029
8163
  const cloned = {
8030
8164
  slot: vaporSlot.slot,
8031
- outlets: vaporSlot.outlets
8165
+ name: vaporSlot.name,
8166
+ outlets: vaporSlot.outlets,
8167
+ props: vaporSlot.props,
8168
+ attrs: vaporSlot.attrs && vaporSlot.attrs === EMPTY_OBJ ? {} : vaporSlot.attrs,
8169
+ group: vaporSlot.group
8032
8170
  };
8171
+ const attrs = cloned.attrs;
8172
+ if (extraProps && vaporSlot.props) {
8173
+ let extraSlotProps;
8174
+ for (const key in extraProps) if (attrs ? !isReservedProp(key) : key !== "key") {
8175
+ if (!extraSlotProps) extraSlotProps = {};
8176
+ extraSlotProps[key] = extraProps[key];
8177
+ }
8178
+ if (extraSlotProps) {
8179
+ if (attrs) cloned.attrs = mergeProps(attrs, extraSlotProps);
8180
+ else cloned.props = mergeProps(vaporSlot.props, extraSlotProps);
8181
+ }
8182
+ }
8033
8183
  if (vnode.el) {
8034
8184
  cloned.state = vaporSlot.state;
8035
8185
  cloned.ref = vaporSlot.ref;
@@ -8212,6 +8362,9 @@ const useInstanceOption = (key, silent = false) => {
8212
8362
  //#region packages/runtime-core/src/component.ts
8213
8363
  const emptyAppContext = /*@__PURE__*/ createAppContext();
8214
8364
  let uid = 0;
8365
+ function getNextUid() {
8366
+ return uid;
8367
+ }
8215
8368
  function createComponentInstance(vnode, parent, suspense) {
8216
8369
  const type = vnode.type;
8217
8370
  const appContext = (parent ? parent.appContext : vnode.appContext) || emptyAppContext;
@@ -8298,7 +8451,7 @@ function setupComponent(instance, isSSR = false, optimized = false) {
8298
8451
  isSSR && setInSSRSetupState(isSSR);
8299
8452
  const { props, children, vi } = instance.vnode;
8300
8453
  const isStateful = isStatefulComponent(instance);
8301
- if (vi) vi(instance);
8454
+ if (isVaporInteropEnabled && vi) vi(instance);
8302
8455
  else {
8303
8456
  initProps(instance, props, isStateful, isSSR);
8304
8457
  initSlots(instance, children, optimized || isSSR);
@@ -8716,7 +8869,7 @@ function isMemoSame(cached, memo) {
8716
8869
  }
8717
8870
  //#endregion
8718
8871
  //#region packages/runtime-core/src/index.ts
8719
- const version = "3.6.0-rc.11";
8872
+ const version = "3.6.0-rc.13";
8720
8873
  const warn = warn$1;
8721
8874
  /**
8722
8875
  * Runtime error messages. Only exposed in dev or esm builds.
@@ -9129,14 +9282,14 @@ function setVarsOnVNode(vnode, vars) {
9129
9282
  }
9130
9283
  while (vnode.component) {
9131
9284
  const component = vnode.component;
9132
- if (component.vapor) {
9285
+ if (isVaporInteropEnabled && component.vapor) {
9133
9286
  component.appContext.vapor.applyCssVars(vnode, vars);
9134
9287
  return;
9135
9288
  }
9136
9289
  vnode = vnode.component.subTree;
9137
9290
  }
9138
9291
  if (vnode.shapeFlag & 1 && vnode.el) setVarsOnNode(vnode.el, vars);
9139
- else if (vnode.vb) vnode.ctx.appContext.vapor.applyCssVars(vnode, vars);
9292
+ else if (isVaporInteropEnabled && vnode.vb) vnode.ctx.appContext.vapor.applyCssVars(vnode, vars);
9140
9293
  else if (vnode.type === Fragment) vnode.children.forEach((c) => setVarsOnVNode(c, vars));
9141
9294
  else if (vnode.type === Static) {
9142
9295
  let { el, anchor } = vnode;
@@ -9199,7 +9352,7 @@ function patchStyle(el, prev, next) {
9199
9352
  else el.removeAttribute("style");
9200
9353
  }
9201
9354
  if (vShowOriginalDisplay in el) {
9202
- el[vShowOriginalDisplay] = hasControlledDisplay ? style.display : "";
9355
+ if (!isCssString || prev !== next) el[vShowOriginalDisplay] = hasControlledDisplay ? style.display : "";
9203
9356
  if (el[vShowHidden]) style.display = "none";
9204
9357
  }
9205
9358
  }
@@ -9504,7 +9657,7 @@ var VueElementBase = class VueElementBase extends BaseClass {
9504
9657
  this._resolveProps(def);
9505
9658
  if (this.shadowRoot) this._applyStyles(styles);
9506
9659
  else if (styles) warn("Custom element style injection is not supported when using shadowRoot: false");
9507
- this._mountComponent(def);
9660
+ if (this._connected) this._mountComponent(def);
9508
9661
  };
9509
9662
  const asyncDef = this._def.__asyncLoader;
9510
9663
  if (asyncDef) {
@@ -9822,6 +9975,7 @@ const positionMap = /* @__PURE__ */ new WeakMap();
9822
9975
  const newPositionMap = /* @__PURE__ */ new WeakMap();
9823
9976
  const moveCbKey = Symbol("_moveCb");
9824
9977
  const enterCbKey = Symbol("_enterCb");
9978
+ const pendingGroups = /* @__PURE__ */ new WeakMap();
9825
9979
  /**
9826
9980
  * Wrap logic that modifies TransitionGroup properties in a function
9827
9981
  * so that it can be annotated as pure
@@ -9830,7 +9984,7 @@ const decorate = (t) => {
9830
9984
  delete t.props.mode;
9831
9985
  return t;
9832
9986
  };
9833
- const TransitionGroup = /* @__PURE__ */ decorate({
9987
+ const TransitionGroup = /*@__PURE__*/ withTransitionEnabled(/* @__PURE__ */ decorate({
9834
9988
  name: "TransitionGroup",
9835
9989
  props: /*@__PURE__*/ extend({}, TransitionPropsValidators, {
9836
9990
  tag: String,
@@ -9839,17 +9993,31 @@ const TransitionGroup = /* @__PURE__ */ decorate({
9839
9993
  setup(props, { slots }) {
9840
9994
  const instance = getCurrentInstance();
9841
9995
  const state = useTransitionState();
9996
+ const group = {
9997
+ props: {},
9998
+ state,
9999
+ instance
10000
+ };
9842
10001
  let prevChildren;
9843
10002
  let children;
10003
+ let origins;
10004
+ let moves;
10005
+ const willMove = () => {
10006
+ if (moves === void 0) moves = prevChildren.length > 0 && hasCSSTransform(prevChildren[0].el, instance.vnode.el, resolveMoveClass(props));
10007
+ return moves;
10008
+ };
9844
10009
  onUpdated(() => {
9845
- if (!prevChildren.length) return;
9846
- const moveClass = props.moveClass || `${props.name || "v"}-move`;
9847
- if (!hasCSSTransform(prevChildren[0].el, instance.vnode.el, moveClass)) {
10010
+ pendingGroups.delete(instance);
10011
+ if (!willMove()) {
9848
10012
  prevChildren = [];
10013
+ origins = void 0;
9849
10014
  return;
9850
10015
  }
10016
+ const moveClass = resolveMoveClass(props);
9851
10017
  prevChildren.forEach((vnode) => callPendingCbs(vnode.el));
9852
- prevChildren.forEach(recordPosition);
10018
+ const shift = origins && getOriginShift(origins, instance.vnode.el);
10019
+ origins = void 0;
10020
+ prevChildren.forEach((c) => recordPosition(c, shift));
9853
10021
  const movedChildren = prevChildren.filter(applyTranslation);
9854
10022
  forceReflow(instance.vnode.el);
9855
10023
  movedChildren.forEach((c) => {
@@ -9860,33 +10028,50 @@ const TransitionGroup = /* @__PURE__ */ decorate({
9860
10028
  });
9861
10029
  return () => {
9862
10030
  const rawProps = /* @__PURE__ */ toRaw(props);
9863
- const cssTransitionProps = resolveTransitionProps(rawProps);
10031
+ const cssTransitionProps = group.props = resolveTransitionProps(rawProps);
9864
10032
  let tag = rawProps.tag || Fragment;
9865
10033
  prevChildren = [];
10034
+ moves = void 0;
9866
10035
  if (children) for (let i = 0; i < children.length; i++) {
9867
10036
  const child = children[i];
9868
10037
  if (child.el && child.el instanceof Element && !child.el[vShowHidden]) {
9869
10038
  prevChildren.push(child);
9870
10039
  setTransitionHooks(child, resolveTransitionHooks(child, cssTransitionProps, state, instance));
9871
10040
  positionMap.set(child, getPosition(child.el));
9872
- }
10041
+ } else if (isVaporInteropEnabled && child.vs && child.vb) instance.appContext.vapor.forEachGroupChild(child, (el) => {
10042
+ const row = { el };
10043
+ prevChildren.push(row);
10044
+ positionMap.set(row, getPosition(el));
10045
+ });
9873
10046
  }
9874
10047
  children = slots.default ? getTransitionRawChildren(slots.default()) : [];
9875
10048
  for (let i = 0; i < children.length; i++) {
9876
10049
  const child = children[i];
9877
- if (child.key != null) setTransitionHooks(child, resolveTransitionHooks(child, cssTransitionProps, state, instance));
10050
+ if (isVaporInteropEnabled && child.vs) child.vs.group = group;
10051
+ else if (child.key != null) setTransitionHooks(child, resolveTransitionHooks(child, cssTransitionProps, state, instance));
9878
10052
  else if (child.type !== Text) warn(`<TransitionGroup> children must be keyed.`);
9879
10053
  }
10054
+ if (prevChildren.length) {
10055
+ const root = instance.vnode.el;
10056
+ origins = getOrigins(instance, root);
10057
+ pendingGroups.set(instance, {
10058
+ root,
10059
+ willMove
10060
+ });
10061
+ }
9880
10062
  return createVNode(tag, null, children);
9881
10063
  };
9882
10064
  }
9883
- });
10065
+ }));
9884
10066
  function callPendingCbs(el) {
9885
10067
  if (el[moveCbKey]) el[moveCbKey]();
9886
10068
  if (el[enterCbKey]) el[enterCbKey]();
9887
10069
  }
9888
- function recordPosition(c) {
9889
- newPositionMap.set(c, getPosition(c.el));
10070
+ function resolveMoveClass(props) {
10071
+ return props.moveClass || `${props.name || "v"}-move`;
10072
+ }
10073
+ function recordPosition(c, shift) {
10074
+ newPositionMap.set(c, getPosition(c.el, shift));
9890
10075
  }
9891
10076
  function applyTranslation(c) {
9892
10077
  if (baseApplyTranslation(positionMap.get(c), newPositionMap.get(c), c.el)) return c;
@@ -9911,13 +10096,36 @@ function baseApplyTranslation(oldPos, newPos, el) {
9911
10096
  }
9912
10097
  return false;
9913
10098
  }
9914
- function getPosition(el) {
10099
+ function getPosition(el, shift) {
9915
10100
  const rect = el.getBoundingClientRect();
9916
10101
  return {
9917
- left: rect.left,
9918
- top: rect.top
10102
+ left: rect.left - (shift ? shift.left : 0),
10103
+ top: rect.top - (shift ? shift.top : 0)
9919
10104
  };
9920
10105
  }
10106
+ function getOrigins(instance, root) {
10107
+ let origins;
10108
+ for (let group = instance.parent; group; group = group.parent) {
10109
+ const pending = pendingGroups.get(group);
10110
+ if (pending) {
10111
+ const item = findItem(pending.root, root);
10112
+ if (item) (origins || (origins = [])).push(extend(getPosition(item), {
10113
+ item,
10114
+ willMove: pending.willMove
10115
+ }));
10116
+ }
10117
+ }
10118
+ return origins;
10119
+ }
10120
+ function findItem(root, node) {
10121
+ const container = root.nodeType === 1 ? root : root.parentNode;
10122
+ while (node && node.parentNode !== container) node = node.parentNode;
10123
+ if (node && node.nodeType === 1) return node;
10124
+ }
10125
+ function getOriginShift(origins, root) {
10126
+ const origin = origins.find((o) => o.willMove() && o.item.contains(root));
10127
+ return origin && getPosition(origin.item, origin);
10128
+ }
9921
10129
  function hasCSSTransform(el, root, moveClass) {
9922
10130
  const clone = el.cloneNode();
9923
10131
  const _vtc = el[vtcKey];
@@ -9998,7 +10206,7 @@ const vModelTextInit = (el, trim, number, lazy, set) => {
9998
10206
  if (e.target.composing) return;
9999
10207
  (set || el[assignKey])(castValue(el.value, trim, number || el.type === "number"));
10000
10208
  });
10001
- if (trim || number) addEventListener(el, "change", () => {
10209
+ if (trim || number || el.type === "number") addEventListener(el, "change", () => {
10002
10210
  el.value = castValue(el.value, trim, number || el.type === "number");
10003
10211
  });
10004
10212
  if (!lazy) {
@@ -10369,4 +10577,4 @@ function normalizeContainer(container) {
10369
10577
  */
10370
10578
  const initDirectivesForSSR = NOOP;
10371
10579
  //#endregion
10372
- export { BaseTransition, BaseTransitionPropsValidators, Comment, DeprecationTypes, EffectScope, ErrorCodes, ErrorTypeStrings, Fragment, KeepAlive, MoveType, NULL_DYNAMIC_COMPONENT, ReactiveEffect, Static, Suspense, Teleport, Text, TrackOpTypes, Transition, TransitionGroup, TriggerOpTypes, VueElement, VueElementBase, assertNumber, callWithAsyncErrorHandling, callWithErrorHandling, camelize, capitalize, cloneVNode, compatUtils, computed, createApp, createBlock, createCommentVNode, createElementBlock, createBaseVNode as createElementVNode, createHydrationRenderer, createPropsRestProxy, createRenderer, createSSRApp, createSlots, createStaticVNode, createTextVNode, createVNode, customRef, defineAsyncComponent, defineComponent, defineCustomElement, defineEmits, defineExpose, defineModel, defineOptions, defineProps, defineSSRCustomElement, defineSlots, devtools, effect, effectScope, getCurrentInstance, getCurrentScope, getCurrentWatcher, getTransitionRawChildren, guardReactiveProps, h, handleError, hasInjectionContext, hydrate, hydrateOnIdle, hydrateOnInteraction, hydrateOnMediaQuery, hydrateOnVisible, initCustomFormatter, initDirectivesForSSR, inject, isMemoSame, isProxy, isReactive, isReadonly, isRef, isRuntimeOnly, isShallow, isVNode, markRaw, mergeDefaults, mergeModels, mergeProps, nextTick, nodeOps, normalizeClass, normalizeProps, normalizeStyle, onActivated, onBeforeMount, onBeforeUnmount, onBeforeUpdate, onDeactivated, onErrorCaptured, onMounted, onRenderTracked, onRenderTriggered, onScopeDispose, onServerPrefetch, onUnmounted, onUpdated, onWatcherCleanup, openBlock, patchProp, popScopeId, provide, proxyRefs, pushScopeId, queuePostFlushCb, reactive, readonly, ref, registerRuntimeCompiler, render, renderList, renderSlot, resolveComponent, resolveDirective, resolveDynamicComponent, resolveFilter, resolveTransitionHooks, setBlockTracking, setDevtoolsHook, setIsHydratingEnabled, setTransitionHooks, shallowReactive, shallowReadonly, shallowRef, ssrContextKey, ssrUtils, stop, toDisplayString, toHandlerKey, toHandlers, toRaw, toRef, toRefs, toValue, transformVNodeArgs, triggerRef, unref, useAttrs, useCssModule, useCssVars, useHost, useId, useInstanceOption, useModel, useSSRContext, useShadowRoot, useSlots, useTemplateRef, useTransitionState, vModelCheckbox, vModelDynamic, vModelRadio, vModelSelect, vModelText, vShow, version, warn, watch, watchEffect, watchPostEffect, watchSyncEffect, withAsyncContext, withCtx, withDefaults, withDirectives, withKeys, withMemo, withModifiers, withScopeId };
10580
+ export { BaseTransition, BaseTransitionPropsValidators, Comment, DeprecationTypes, EffectScope, ErrorCodes, ErrorTypeStrings, Fragment, KeepAlive, MoveType, NULL_DYNAMIC_COMPONENT, ReactiveEffect, Static, Suspense, Teleport, Text, TrackOpTypes, Transition, TransitionGroup, TriggerOpTypes, VueElement, VueElementBase, assertNumber, callWithAsyncErrorHandling, callWithErrorHandling, camelize, capitalize, cloneVNode, compatUtils, computed, createApp, createBlock, createCommentVNode, createElementBlock, createBaseVNode as createElementVNode, createHydrationRenderer, createPropsRestProxy, createRenderer, createSSRApp, createSlots, createStaticVNode, createTextVNode, createVNode, customRef, defineAsyncComponent, defineComponent, defineCustomElement, defineEmits, defineExpose, defineModel, defineOptions, defineProps, defineSSRCustomElement, defineSlots, devtools, effect, effectScope, getCurrentInstance, getCurrentScope, getCurrentWatcher, getTransitionRawChildren, guardReactiveProps, h, handleError, hasInjectionContext, hydrate, hydrateOnIdle, hydrateOnInteraction, hydrateOnMediaQuery, hydrateOnVisible, initCustomFormatter, initDirectivesForSSR, inject, isKeepAliveEnabled, isMemoSame, isProxy, isReactive, isReadonly, isRef, isRuntimeOnly, isShallow, isSuspenseEnabled, isTransitionEnabled, isVNode, isVaporInteropEnabled, markRaw, mergeDefaults, mergeModels, mergeProps, nextTick, nodeOps, normalizeClass, normalizeProps, normalizeStyle, onActivated, onBeforeMount, onBeforeUnmount, onBeforeUpdate, onDeactivated, onErrorCaptured, onMounted, onRenderTracked, onRenderTriggered, onScopeDispose, onServerPrefetch, onUnmounted, onUpdated, onWatcherCleanup, openBlock, patchProp, popScopeId, provide, proxyRefs, pushScopeId, queuePostFlushCb, reactive, readonly, ref, registerRuntimeCompiler, render, renderList, renderSlot, resolveComponent, resolveDirective, resolveDynamicComponent, resolveFilter, resolveTransitionHooks, setBlockTracking, setDevtoolsHook, setIsHydratingEnabled, setTransitionHooks, setVaporInteropEnabled, shallowReactive, shallowReadonly, shallowRef, ssrContextKey, ssrUtils, stop, toDisplayString, toHandlerKey, toHandlers, toRaw, toRef, toRefs, toValue, transformVNodeArgs, triggerRef, unref, useAttrs, useCssModule, useCssVars, useHost, useId, useInstanceOption, useModel, useSSRContext, useShadowRoot, useSlots, useTemplateRef, useTransitionState, vModelCheckbox, vModelDynamic, vModelRadio, vModelSelect, vModelText, vShow, version, warn, watch, watchEffect, watchPostEffect, watchSyncEffect, withAsyncContext, withCtx, withDefaults, withDirectives, withKeepAliveEnabled, withKeys, withMemo, withModifiers, withScopeId, withSuspenseEnabled, withTransitionEnabled };