@vue/runtime-dom 3.6.0-rc.1 → 3.6.0-rc.3

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.1
2
+ * @vue/runtime-dom v3.6.0-rc.3
3
3
  * (c) 2018-present Yuxi (Evan) You and Vue contributors
4
4
  * @license MIT
5
5
  **/
@@ -635,7 +635,7 @@ var VueElementBase = class VueElementBase extends BaseClass {
635
635
  if (!this._instance) if (this._resolved) this._mountComponent(this._def);
636
636
  else if (parent && parent._pendingResolve) this._pendingResolve = parent._pendingResolve.then(() => {
637
637
  this._pendingResolve = void 0;
638
- this._resolveDef();
638
+ if (this.isConnected) return this._resolveDef();
639
639
  });
640
640
  else this._resolveDef();
641
641
  }
@@ -671,7 +671,7 @@ var VueElementBase = class VueElementBase extends BaseClass {
671
671
  * resolve inner component definition (handle possible async component)
672
672
  */
673
673
  _resolveDef() {
674
- if (this._pendingResolve) return;
674
+ if (this._pendingResolve) return this._pendingResolve;
675
675
  for (let i = 0; i < this.attributes.length; i++) this._setAttr(this.attributes[i].name);
676
676
  this._ob = new MutationObserver(this._processMutations.bind(this));
677
677
  this._ob.observe(this, { attributes: true });
@@ -701,6 +701,7 @@ var VueElementBase = class VueElementBase extends BaseClass {
701
701
  this._def = def;
702
702
  resolve(def);
703
703
  });
704
+ return this._pendingResolve;
704
705
  } else resolve(this._def);
705
706
  }
706
707
  _mountComponent(def) {
@@ -739,14 +740,17 @@ var VueElementBase = class VueElementBase extends BaseClass {
739
740
  const { props } = def;
740
741
  const declaredPropKeys = (0, _vue_shared.isArray)(props) ? props : Object.keys(props || {});
741
742
  for (const key of Object.keys(this)) if (key[0] !== "_" && declaredPropKeys.includes(key)) this._setProp(key, this[key]);
742
- for (const key of declaredPropKeys.map(_vue_shared.camelize)) Object.defineProperty(this, key, {
743
- get() {
744
- return this._getProp(key);
745
- },
746
- set(val) {
747
- this._setProp(key, val, true, !this._patching);
748
- }
749
- });
743
+ for (const key of declaredPropKeys.map(_vue_shared.camelize)) {
744
+ if (key in Object.getPrototypeOf(this)) (0, _vue_runtime_core.warn)(`Custom element prop "${key}" conflicts with an existing property on the element and will overwrite it.`);
745
+ Object.defineProperty(this, key, {
746
+ get() {
747
+ return this._getProp(key);
748
+ },
749
+ set(val) {
750
+ this._setProp(key, val, true, !this._patching);
751
+ }
752
+ });
753
+ }
750
754
  }
751
755
  _setAttr(key) {
752
756
  if (key.startsWith("data-v-")) return;
@@ -1162,13 +1166,22 @@ function onCompositionEnd(e) {
1162
1166
  }
1163
1167
  }
1164
1168
  const assignKey = Symbol("_assign");
1169
+ const initialValueKey = Symbol("_initialValue");
1165
1170
  const vModelText = {
1166
1171
  created(el, { modifiers: { lazy, trim, number } }, vnode) {
1172
+ if (el.parentNode) {
1173
+ if (el.type === "text") el[initialValueKey] = el.defaultValue.replace(/[\r\n]/g, "");
1174
+ else if (el.type === "textarea") el[initialValueKey] = el.defaultValue.replace(/\r\n?/g, "\n");
1175
+ }
1167
1176
  el[assignKey] = getModelAssigner(vnode);
1168
1177
  vModelTextInit(el, trim, number || !!(vnode.props && vnode.props.type === "number"), lazy);
1169
1178
  },
1170
- mounted(el, { value }) {
1171
- el.value = value == null ? "" : value;
1179
+ mounted(el, { value, modifiers: { trim, number } }) {
1180
+ const newValue = value == null ? "" : value;
1181
+ const initialValue = el[initialValueKey];
1182
+ delete el[initialValueKey];
1183
+ if (initialValue !== void 0 && (el.type === "text" || el.type === "textarea") && el.value !== initialValue) el[assignKey](castValue(el.value, trim, number));
1184
+ else el.value = newValue;
1172
1185
  },
1173
1186
  beforeUpdate(el, { value, oldValue, modifiers: { lazy, trim, number } }, vnode) {
1174
1187
  el[assignKey] = getModelAssigner(vnode);
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @vue/runtime-dom v3.6.0-rc.1
2
+ * @vue/runtime-dom v3.6.0-rc.3
3
3
  * (c) 2018-present Yuxi (Evan) You and Vue contributors
4
4
  * @license MIT
5
5
  **/
@@ -622,7 +622,7 @@ var VueElementBase = class VueElementBase extends BaseClass {
622
622
  if (!this._instance) if (this._resolved) this._mountComponent(this._def);
623
623
  else if (parent && parent._pendingResolve) this._pendingResolve = parent._pendingResolve.then(() => {
624
624
  this._pendingResolve = void 0;
625
- this._resolveDef();
625
+ if (this.isConnected) return this._resolveDef();
626
626
  });
627
627
  else this._resolveDef();
628
628
  }
@@ -658,7 +658,7 @@ var VueElementBase = class VueElementBase extends BaseClass {
658
658
  * resolve inner component definition (handle possible async component)
659
659
  */
660
660
  _resolveDef() {
661
- if (this._pendingResolve) return;
661
+ if (this._pendingResolve) return this._pendingResolve;
662
662
  for (let i = 0; i < this.attributes.length; i++) this._setAttr(this.attributes[i].name);
663
663
  this._ob = new MutationObserver(this._processMutations.bind(this));
664
664
  this._ob.observe(this, { attributes: true });
@@ -687,6 +687,7 @@ var VueElementBase = class VueElementBase extends BaseClass {
687
687
  this._def = def;
688
688
  resolve(def);
689
689
  });
690
+ return this._pendingResolve;
690
691
  } else resolve(this._def);
691
692
  }
692
693
  _mountComponent(def) {
@@ -1105,13 +1106,22 @@ function onCompositionEnd(e) {
1105
1106
  }
1106
1107
  }
1107
1108
  const assignKey = Symbol("_assign");
1109
+ const initialValueKey = Symbol("_initialValue");
1108
1110
  const vModelText = {
1109
1111
  created(el, { modifiers: { lazy, trim, number } }, vnode) {
1112
+ if (el.parentNode) {
1113
+ if (el.type === "text") el[initialValueKey] = el.defaultValue.replace(/[\r\n]/g, "");
1114
+ else if (el.type === "textarea") el[initialValueKey] = el.defaultValue.replace(/\r\n?/g, "\n");
1115
+ }
1110
1116
  el[assignKey] = getModelAssigner(vnode);
1111
1117
  vModelTextInit(el, trim, number || !!(vnode.props && vnode.props.type === "number"), lazy);
1112
1118
  },
1113
- mounted(el, { value }) {
1114
- el.value = value == null ? "" : value;
1119
+ mounted(el, { value, modifiers: { trim, number } }) {
1120
+ const newValue = value == null ? "" : value;
1121
+ const initialValue = el[initialValueKey];
1122
+ delete el[initialValueKey];
1123
+ if (initialValue !== void 0 && (el.type === "text" || el.type === "textarea") && el.value !== initialValue) el[assignKey](castValue(el.value, trim, number));
1124
+ else el.value = newValue;
1115
1125
  },
1116
1126
  beforeUpdate(el, { value, oldValue, modifiers: { lazy, trim, number } }, vnode) {
1117
1127
  el[assignKey] = getModelAssigner(vnode);
@@ -87,8 +87,10 @@ type VOnDirective = Directive<any, any, VOnModifiers>;
87
87
  //#region temp/packages/runtime-dom/src/directives/vModel.d.ts
88
88
  type AssignerFn = (value: any) => void;
89
89
  declare const assignKey: unique symbol;
90
+ declare const initialValueKey: unique symbol;
90
91
  type ModelDirective<T, Modifiers extends string = string> = ObjectDirective<T & {
91
92
  [assignKey]: AssignerFn;
93
+ [initialValueKey]?: string;
92
94
  _assigning?: boolean;
93
95
  }, any, Modifiers>;
94
96
  export declare const vModelText: ModelDirective<HTMLInputElement | HTMLTextAreaElement, "trim" | "number" | "lazy">;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @vue/runtime-dom v3.6.0-rc.1
2
+ * @vue/runtime-dom v3.6.0-rc.3
3
3
  * (c) 2018-present Yuxi (Evan) You and Vue contributors
4
4
  * @license MIT
5
5
  **/
@@ -228,7 +228,7 @@ const isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs);
228
228
  /**
229
229
  * The full list is needed during SSR to produce the correct initial markup.
230
230
  */
231
- const isBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs + ",async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected");
231
+ const isBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs + ",async,autofocus,autoplay,controls,default,defer,disabled,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected");
232
232
  /**
233
233
  * Boolean attributes should be included if the value is truthy or ''.
234
234
  * e.g. `<select multiple>` compiles to `{ multiple: '' }`
@@ -2510,7 +2510,7 @@ function queueFlush() {
2510
2510
  function queuePostFlushCb(jobs, id = Infinity) {
2511
2511
  if (!isArray(jobs)) if (activePostJobs && id === -1) activePostJobs.splice(postFlushIndex, 0, jobs);
2512
2512
  else queueJobWorker(jobs, id, postJobs, postJobs.length, 0);
2513
- else for (const job of jobs) queueJobWorker(job, id, postJobs, postJobs.length, 0);
2513
+ else for (let i = 0; i < jobs.length; i++) queueJobWorker(jobs[i], id, postJobs, postJobs.length, 0);
2514
2514
  queueFlush();
2515
2515
  }
2516
2516
  function flushPreFlushCbs(instance, seen) {
@@ -2531,7 +2531,7 @@ function flushPreFlushCbs(instance, seen) {
2531
2531
  function flushPostFlushCbs(seen) {
2532
2532
  if (postJobs.length) {
2533
2533
  if (activePostJobs) {
2534
- activePostJobs.push(...postJobs);
2534
+ for (let i = 0; i < postJobs.length; i++) activePostJobs.push(postJobs[i]);
2535
2535
  postJobs.length = 0;
2536
2536
  return;
2537
2537
  }
@@ -3071,7 +3071,7 @@ function instanceWatch(source, value, options) {
3071
3071
  }
3072
3072
  const prev = setCurrentInstance(this);
3073
3073
  const res = doWatch(getter, cb.bind(publicThis), options);
3074
- setCurrentInstance(...prev);
3074
+ restoreCurrentInstance(prev);
3075
3075
  return res;
3076
3076
  }
3077
3077
  function createPathGetter(ctx, path) {
@@ -3344,49 +3344,16 @@ const BaseTransitionImpl = {
3344
3344
  setup(props, { slots }) {
3345
3345
  const instance = getCurrentInstance();
3346
3346
  const state = useTransitionState();
3347
+ let resumeAfterLeave;
3347
3348
  return () => {
3348
- const children = slots.default && getTransitionRawChildren(slots.default(), true);
3349
- const child = children && children.length ? findNonCommentChild(children) : instance.subTree ? createCommentVNode() : void 0;
3349
+ const child = resolveTransitionChild(slots.default && slots.default(), !!instance.subTree);
3350
3350
  if (!child) return;
3351
3351
  const rawProps = /* @__PURE__ */ toRaw(props);
3352
3352
  const { mode } = rawProps;
3353
3353
  checkTransitionMode(mode);
3354
- if (state.isLeaving) return emptyPlaceholder(child);
3355
- const innerChild = getInnerChild$1(child);
3356
- if (!innerChild) return emptyPlaceholder(child);
3357
- let enterHooks = resolveTransitionHooks(innerChild, rawProps, state, instance, (hooks) => enterHooks = hooks);
3358
- if (innerChild.type !== Comment) setTransitionHooks(innerChild, enterHooks);
3359
- let oldInnerChild = instance.subTree && getInnerChild$1(instance.subTree);
3360
- if (oldInnerChild && oldInnerChild.type !== Comment && !isSameVNodeType(oldInnerChild, innerChild) && recursiveGetSubtree(instance).type !== Comment) {
3361
- let leavingHooks = resolveTransitionHooks(oldInnerChild, rawProps, state, instance);
3362
- setTransitionHooks(oldInnerChild, leavingHooks);
3363
- if (mode === "out-in" && innerChild.type !== Comment) {
3364
- state.isLeaving = true;
3365
- leavingHooks.afterLeave = () => {
3366
- state.isLeaving = false;
3367
- if (!(instance.job.flags & 4)) instance.update();
3368
- delete leavingHooks.afterLeave;
3369
- oldInnerChild = void 0;
3370
- };
3371
- return emptyPlaceholder(child);
3372
- } else if (mode === "in-out" && innerChild.type !== Comment) leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => {
3373
- const leavingVNodesCache = getLeavingNodesForType(state, oldInnerChild);
3374
- leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild;
3375
- el[leaveCbKey] = () => {
3376
- earlyRemove();
3377
- el[leaveCbKey] = void 0;
3378
- delete enterHooks.delayedLeave;
3379
- oldInnerChild = void 0;
3380
- };
3381
- enterHooks.delayedLeave = () => {
3382
- delayedLeave();
3383
- delete enterHooks.delayedLeave;
3384
- oldInnerChild = void 0;
3385
- };
3386
- };
3387
- else oldInnerChild = void 0;
3388
- } else if (oldInnerChild) oldInnerChild = void 0;
3389
- return child;
3354
+ return prepareTransitionSwitch(instance.subTree, child, rawProps, state, instance, mode === "out-in" ? resumeAfterLeave || (resumeAfterLeave = () => {
3355
+ if (!(instance.job.flags & 4)) instance.update();
3356
+ }) : NOOP);
3390
3357
  };
3391
3358
  }
3392
3359
  };
@@ -3528,16 +3495,91 @@ function getInnerChild$1(vnode) {
3528
3495
  if (shapeFlag & 32 && isFunction(children.default)) return children.default();
3529
3496
  }
3530
3497
  }
3498
+ function resolveTransitionChild(children, renderEmpty = false) {
3499
+ const branches = children && getTransitionRawChildren(children, true);
3500
+ return branches && branches.length ? findNonCommentChild(branches) : renderEmpty ? createCommentVNode() : void 0;
3501
+ }
3502
+ /**
3503
+ * @internal
3504
+ */
3505
+ function prepareTransitionSwitch(previous, next, props, state, instance, resumeAfterLeave, delayedLeaveSource) {
3506
+ if (state.isLeaving) return emptyPlaceholder(next);
3507
+ const nextInner = getInnerChild$1(next);
3508
+ if (!nextInner) return emptyPlaceholder(next);
3509
+ let enterHooks = resolveTransitionHooks(nextInner, props, state, instance, (hooks) => {
3510
+ if (delayedLeaveSource) forwardDelayedLeave(hooks, delayedLeaveSource);
3511
+ enterHooks = hooks;
3512
+ });
3513
+ if (delayedLeaveSource) forwardDelayedLeave(enterHooks, delayedLeaveSource);
3514
+ if (nextInner.type !== Comment) setTransitionHooks(nextInner, enterHooks);
3515
+ const mode = props.mode;
3516
+ const previousInner = previous && getInnerChild$1(previous);
3517
+ if (previous && previousInner && previousInner.type !== Comment && !isSameVNodeType(previousInner, nextInner) && (!previous.component || recursiveGetSubtree(previous.component).type !== Comment)) {
3518
+ const leavingHooks = prepareLeavingTransitionHooks(previousInner, props, state, instance);
3519
+ if (nextInner.type !== Comment && (mode === "out-in" || mode === "in-out") && applyTransitionModeSwitch(previousInner, leavingHooks, mode === "in-out" ? () => enterHooks : void 0, props, state, resumeAfterLeave)) return emptyPlaceholder(next);
3520
+ }
3521
+ return next;
3522
+ }
3523
+ function forwardDelayedLeave(hooks, source) {
3524
+ const delayedLeave = source && source.delayedLeave;
3525
+ if (!delayedLeave) return;
3526
+ hooks.delayedLeave = () => {
3527
+ if (source.delayedLeave === delayedLeave) delayedLeave();
3528
+ delete hooks.delayedLeave;
3529
+ };
3530
+ }
3531
+ function prepareLeavingTransitionHooks(previousInner, props, state, instance) {
3532
+ return setTransitionHooks(previousInner, resolveTransitionHooks(previousInner, props, state, instance));
3533
+ }
3534
+ function applyTransitionModeSwitch(leavingVNode, leavingHooks, getEnterHooks, props, state, resumeAfterLeave) {
3535
+ if (props.mode === "out-in") {
3536
+ state.isLeaving = true;
3537
+ leavingHooks.afterLeave = () => {
3538
+ state.isLeaving = false;
3539
+ resumeAfterLeave();
3540
+ delete leavingHooks.afterLeave;
3541
+ };
3542
+ return true;
3543
+ } else if (props.mode === "in-out" && getEnterHooks) {
3544
+ let delayedLeavingVNode = leavingVNode;
3545
+ leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => {
3546
+ const enterHooks = getEnterHooks();
3547
+ if (!enterHooks) {
3548
+ delayedLeave();
3549
+ return;
3550
+ }
3551
+ const vnode = delayedLeavingVNode;
3552
+ const leavingVNodesCache = getLeavingNodesForType(state, vnode);
3553
+ leavingVNodesCache[String(vnode.key)] = vnode;
3554
+ el[leaveCbKey] = () => {
3555
+ earlyRemove();
3556
+ el[leaveCbKey] = void 0;
3557
+ delete enterHooks.delayedLeave;
3558
+ delayedLeavingVNode = void 0;
3559
+ };
3560
+ enterHooks.delayedLeave = () => {
3561
+ delayedLeave();
3562
+ delete enterHooks.delayedLeave;
3563
+ delayedLeavingVNode = void 0;
3564
+ };
3565
+ };
3566
+ }
3567
+ return false;
3568
+ }
3531
3569
  function setTransitionHooks(vnode, hooks) {
3532
- if (vnode.shapeFlag & 6 && vnode.component) if (isVaporComponent(vnode.type)) getVaporInterface(vnode.component, vnode).setTransitionHooks(vnode.component, hooks);
3533
- else {
3570
+ if (vnode.shapeFlag & 6 && vnode.component) {
3534
3571
  vnode.transition = hooks;
3535
- setTransitionHooks(vnode.component.subTree, hooks);
3536
- }
3537
- else if (vnode.shapeFlag & 128) {
3538
- vnode.ssContent.transition = hooks.clone(vnode.ssContent);
3539
- vnode.ssFallback.transition = hooks.clone(vnode.ssFallback);
3572
+ if (isVaporComponent(vnode.type)) getVaporInterface(vnode.component, vnode).setTransitionHooks(vnode.component, hooks);
3573
+ else {
3574
+ const subTree = vnode.component.subTree;
3575
+ return setTransitionHooks(isTeleport(subTree.type) ? getInnerChild$1(subTree) || subTree : subTree, hooks);
3576
+ }
3577
+ } else if (vnode.shapeFlag & 128) {
3578
+ const contentHooks = vnode.ssContent.transition = hooks.clone(vnode.ssContent);
3579
+ const fallbackHooks = vnode.ssFallback.transition = hooks.clone(vnode.ssFallback);
3580
+ return vnode.suspense && vnode.suspense.activeBranch === vnode.ssFallback ? fallbackHooks : contentHooks;
3540
3581
  } else vnode.transition = hooks;
3582
+ return hooks;
3541
3583
  }
3542
3584
  function getTransitionRawChildren(children, keepComment = false, parentKey) {
3543
3585
  let ret = [];
@@ -3889,7 +3931,10 @@ function createHydrationFunctions(rendererInternals) {
3889
3931
  const namespace = el.namespaceURI.includes("svg") ? "svg" : el.namespaceURI.includes("MathML") ? "mathml" : void 0;
3890
3932
  for (const key in props) {
3891
3933
  if (!(dirs && dirs.some((d) => d.dir.created)) && propHasMismatch(el, key, props[key], vnode, parentComponent)) logMismatchError();
3892
- if (forcePatch && (key.endsWith("value") || key === "indeterminate") || isOn(key) && !isReservedProp(key) || key[0] === "." || isCustomElement && !isReservedProp(key) || dynamicProps && dynamicProps.includes(key)) patchProp(el, key, null, props[key], namespace, parentComponent);
3934
+ if (forcePatch && (key.endsWith("value") || key === "indeterminate") || isOn(key) && !isReservedProp(key) || key[0] === "." || isCustomElement && !isReservedProp(key) || dynamicProps && dynamicProps.includes(key)) {
3935
+ if (isUnchangedResourceProp(el, key, props[key])) continue;
3936
+ patchProp(el, key, null, props[key], namespace, parentComponent);
3937
+ }
3893
3938
  }
3894
3939
  }
3895
3940
  let vnodeHooks;
@@ -3998,6 +4043,16 @@ const isTemplateNode = (node) => {
3998
4043
  /**
3999
4044
  * Dev only
4000
4045
  */
4046
+ const resourceProps = /* @__PURE__ */ new Set([
4047
+ "src",
4048
+ "srcset",
4049
+ "href",
4050
+ "poster"
4051
+ ]);
4052
+ function isUnchangedResourceProp(el, key, clientValue) {
4053
+ if (!resourceProps.has(key)) return false;
4054
+ return el.getAttribute(key) === (clientValue == null ? null : `${clientValue}`);
4055
+ }
4001
4056
  function propHasMismatch(el, key, clientValue, vnode, instance) {
4002
4057
  let mismatchType;
4003
4058
  let mismatchKey;
@@ -4038,7 +4093,10 @@ function propHasMismatch(el, key, clientValue, vnode, instance) {
4038
4093
  function getAttributeMismatch(el, key, clientValue) {
4039
4094
  let actual;
4040
4095
  let expected;
4041
- if (isBooleanAttr(key)) {
4096
+ if (key === "hidden") {
4097
+ actual = normalizeHiddenValue(el.getAttribute(key));
4098
+ expected = normalizeHiddenValue(clientValue);
4099
+ } else if (isBooleanAttr(key)) {
4042
4100
  actual = el.hasAttribute(key);
4043
4101
  expected = includeBooleanAttr(clientValue);
4044
4102
  } else if (clientValue == null) {
@@ -4066,6 +4124,11 @@ function warnPropMismatch(el, mismatchKey, mismatchType, actual, expected) {
4066
4124
  }
4067
4125
  return false;
4068
4126
  }
4127
+ function normalizeHiddenValue(value) {
4128
+ if (!isRenderableAttrValue(value)) return false;
4129
+ if (isString(value)) return value.toLowerCase() === "until-found" ? "until-found" : "";
4130
+ return includeBooleanAttr(value) ? "" : false;
4131
+ }
4069
4132
  function toClassSet(str) {
4070
4133
  return new Set(str.trim().split(/\s+/));
4071
4134
  }
@@ -4597,7 +4660,7 @@ function injectHook(type, hook, target = currentInstance, prepend = false) {
4597
4660
  try {
4598
4661
  return callWithAsyncErrorHandling(hook, target, type, args);
4599
4662
  } finally {
4600
- setCurrentInstance(...prev);
4663
+ restoreCurrentInstance(prev);
4601
4664
  setActiveSub(prevSub);
4602
4665
  }
4603
4666
  });
@@ -4726,7 +4789,8 @@ function createSlots(slots, dynamicSlots) {
4726
4789
  * Compiler runtime helper for rendering `<slot/>`
4727
4790
  * @private
4728
4791
  */
4729
- function renderSlot(slots, name, props = {}, fallback, noSlotted, branchKey) {
4792
+ function renderSlot(slots, name, props, fallback, noSlotted, branchKey) {
4793
+ if (props == null) props = {};
4730
4794
  let slot = slots[name];
4731
4795
  if (fallback) fallback.__vdom = true;
4732
4796
  const vaporSlot = slot && (slot.__vs || (slot.__vapor ? slot : null));
@@ -5779,8 +5843,9 @@ function renderComponentRoot(instance) {
5779
5843
  root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs;
5780
5844
  }
5781
5845
  if (vnode.transition) {
5782
- if (!isElementRoot(root)) warn$1("Component inside <Transition> renders non-element root node that cannot be animated.");
5783
- setTransitionHooks(root, vnode.transition);
5846
+ const child = isTeleport(root.type) ? getInnerChild$1(root) || root : root;
5847
+ if (!isElementRoot(child)) warn$1("Component inside <Transition> renders non-element root node that cannot be animated.");
5848
+ setTransitionHooks(child, vnode.transition);
5784
5849
  }
5785
5850
  if (setRoot) setRoot(root);
5786
5851
  else result = root;
@@ -5840,9 +5905,10 @@ function filterSingleRoot(children, recurse = true) {
5840
5905
  }
5841
5906
  return singleRoot;
5842
5907
  }
5908
+ const isFunctionalFallthroughKey = (key) => key === "class" || key === "style" || isOn(key);
5843
5909
  const getFunctionalFallthrough = (attrs) => {
5844
5910
  let res;
5845
- for (const key in attrs) if (key === "class" || key === "style" || isOn(key)) (res || (res = {}))[key] = attrs[key];
5911
+ for (const key in attrs) if (isFunctionalFallthroughKey(key)) (res || (res = {}))[key] = attrs[key];
5846
5912
  return res;
5847
5913
  };
5848
5914
  const filterModelListeners = (attrs, props) => {
@@ -6042,7 +6108,7 @@ function baseResolveDefault(factory, instance, key) {
6042
6108
  const prev = setCurrentInstance(instance);
6043
6109
  const props = /* @__PURE__ */ toRaw(instance.props);
6044
6110
  value = factory.call(null, props);
6045
- setCurrentInstance(...prev);
6111
+ restoreCurrentInstance(prev);
6046
6112
  return value;
6047
6113
  }
6048
6114
  const mixinPropsCache = /* @__PURE__ */ new WeakMap();
@@ -6602,7 +6668,7 @@ function baseCreateRenderer(options, createHydrationFns) {
6602
6668
  };
6603
6669
  const processComponent = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {
6604
6670
  n2.slotScopeIds = slotScopeIds;
6605
- if (n2.type.__vapor) if (n1 == null) if (n2.shapeFlag & 512) getVaporInterface(parentComponent, n2).activate(n2, container, anchor, parentComponent);
6671
+ if (n2.type.__vapor) if (n1 == null) if (n2.shapeFlag & 512) getVaporInterface(parentComponent, n2).activate(n2, container, anchor, parentComponent, parentSuspense);
6606
6672
  else {
6607
6673
  const vnodeBeforeMountHook = !isAsyncWrapper(n2) && n2.props && n2.props.onVnodeBeforeMount;
6608
6674
  getVaporInterface(parentComponent, n2).mount(n2, container, anchor, parentComponent, parentSuspense, () => {
@@ -6945,7 +7011,7 @@ function baseCreateRenderer(options, createHydrationFns) {
6945
7011
  const move = (vnode, container, anchor, moveType, parentComponent, parentSuspense = null) => {
6946
7012
  const { el, type, transition, children, shapeFlag } = vnode;
6947
7013
  if (isVaporComponent(type) || type === VaporSlot) {
6948
- getVaporInterface(parentComponent, vnode).move(vnode, container, anchor, moveType);
7014
+ getVaporInterface(parentComponent, vnode).move(vnode, container, anchor, moveType, parentSuspense);
6949
7015
  return;
6950
7016
  }
6951
7017
  if (shapeFlag & 6) {
@@ -7001,7 +7067,7 @@ function baseCreateRenderer(options, createHydrationFns) {
7001
7067
  }
7002
7068
  if (cacheIndex != null) parentComponent.renderCache[cacheIndex] = void 0;
7003
7069
  if (shapeFlag & 256) {
7004
- if (isVaporComponent(vnode.type)) getVaporInterface(parentComponent, vnode).deactivate(vnode, parentComponent.ctx.getStorageContainer());
7070
+ if (isVaporComponent(vnode.type)) getVaporInterface(parentComponent, vnode).deactivate(vnode, parentComponent.ctx.getStorageContainer(), parentSuspense);
7005
7071
  else parentComponent.ctx.deactivate(vnode);
7006
7072
  return;
7007
7073
  }
@@ -7011,7 +7077,7 @@ function baseCreateRenderer(options, createHydrationFns) {
7011
7077
  if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeBeforeUnmount)) invokeVNodeHook(vnodeHook, parentComponent, vnode);
7012
7078
  if (shapeFlag & 6) if (isVaporComponent(type)) {
7013
7079
  if (dirs) invokeDirectiveHook(vnode, null, parentComponent, "beforeUnmount");
7014
- getVaporInterface(parentComponent, vnode).unmount(vnode, doRemove);
7080
+ getVaporInterface(parentComponent, vnode).unmount(vnode, doRemove, parentSuspense);
7015
7081
  if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeUnmounted) || dirs) queuePostRenderEffect(() => {
7016
7082
  dirs && invokeDirectiveHook(vnode, null, parentComponent, "unmounted");
7017
7083
  vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);
@@ -7028,7 +7094,7 @@ function baseCreateRenderer(options, createHydrationFns) {
7028
7094
  else if (dynamicChildren && !dynamicChildren.hasOnce && (type !== Fragment || patchFlag > 0 && patchFlag & 64)) unmountChildren(dynamicChildren, parentComponent, parentSuspense, false, true);
7029
7095
  else if (type === Fragment && patchFlag & 384 || !optimized && shapeFlag & 16) unmountChildren(children, parentComponent, parentSuspense);
7030
7096
  if (type === VaporSlot) {
7031
- getVaporInterface(parentComponent, vnode).unmount(vnode, doRemove);
7097
+ getVaporInterface(parentComponent, vnode).unmount(vnode, doRemove, parentSuspense);
7032
7098
  return;
7033
7099
  }
7034
7100
  if (doRemove) remove(vnode);
@@ -7327,6 +7393,10 @@ function patchSuspense(n1, n2, container, anchor, parentComponent, namespace, sl
7327
7393
  suspense.activeBranch = pendingBranch;
7328
7394
  } else unmount(pendingBranch, parentComponent, suspense);
7329
7395
  suspense.deps = 0;
7396
+ for (let i = 0; i < suspense.effects.length; i++) {
7397
+ const effect = suspense.effects[i];
7398
+ if (effect.flags & 8) queuePostFlushCb(effect);
7399
+ }
7330
7400
  suspense.effects.length = 0;
7331
7401
  suspense.hiddenContainer = createElement("div");
7332
7402
  if (isInFallback) {
@@ -7434,7 +7504,7 @@ function createSuspenseBoundary(vnode, parentSuspense, parentComponent, containe
7434
7504
  let hasUnresolvedAncestor = false;
7435
7505
  while (parent) {
7436
7506
  if (parent.pendingBranch) {
7437
- parent.effects.push(...effects);
7507
+ for (let i = 0; i < effects.length; i++) parent.effects.push(effects[i]);
7438
7508
  hasUnresolvedAncestor = true;
7439
7509
  break;
7440
7510
  }
@@ -7704,9 +7774,24 @@ function createBaseVNode(type, props = null, children = null, patchFlag = 0, dyn
7704
7774
  if (shapeFlag & 128) type.normalize(vnode);
7705
7775
  } else if (children) vnode.shapeFlag |= isString(children) ? 8 : 16;
7706
7776
  if (vnode.key !== vnode.key) warn$1(`VNode created with invalid key (NaN). VNode type:`, vnode.type);
7777
+ if (props && vnode.shapeFlag & 1) {
7778
+ const overwritingProp = props.innerHTML != null ? "innerHTML" : props.textContent != null ? "textContent" : null;
7779
+ if (overwritingProp && hasContentChildren(vnode.children)) warn$1(`The \`${overwritingProp}\` prop on <${vnode.type}> will override its children. Remove either the \`${overwritingProp}\` prop or the children.`);
7780
+ }
7707
7781
  if (isBlockTreeEnabled > 0 && !isBlockNode && currentBlock && (vnode.patchFlag > 0 || shapeFlag & 6) && vnode.patchFlag !== 32) currentBlock.push(vnode);
7708
7782
  return vnode;
7709
7783
  }
7784
+ /**
7785
+ * dev only
7786
+ * Whether children would actually render something. Empty text and empty
7787
+ * arrays are ignored, mirroring the compiler's `node.children.length` check
7788
+ * for `v-html` / `v-text`.
7789
+ */
7790
+ function hasContentChildren(children) {
7791
+ if (isString(children)) return children !== "";
7792
+ if (isArray(children)) return children.length > 0;
7793
+ return false;
7794
+ }
7710
7795
  const createVNode = createVNodeWithArgsTransform;
7711
7796
  function _createVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, isBlockNode = false) {
7712
7797
  if (!type || type === NULL_DYNAMIC_COMPONENT) {
@@ -7926,6 +8011,16 @@ const setCurrentInstance = (instance, scope = instance !== null ? instance.scope
7926
8011
  simpleSetCurrentInstance(instance);
7927
8012
  }
7928
8013
  };
8014
+ /**
8015
+ * Restores a snapshot returned by {@link setCurrentInstance}. Unlike calling
8016
+ * `setCurrentInstance(...prev)`, an `undefined` saved scope is restored
8017
+ * verbatim instead of re-triggering the `instance.scope` default.
8018
+ * @internal
8019
+ */
8020
+ const restoreCurrentInstance = (prev) => {
8021
+ setCurrentScope(prev[1]);
8022
+ simpleSetCurrentInstance(prev[0]);
8023
+ };
7929
8024
  const internalOptions = [
7930
8025
  "ce",
7931
8026
  "type",
@@ -8077,7 +8172,7 @@ function setupStatefulComponent(instance, isSSR) {
8077
8172
  const setupResult = callWithErrorHandling(setup, instance, 0, [/* @__PURE__ */ shallowReadonly(instance.props), setupContext]);
8078
8173
  const isAsyncSetup = isPromise(setupResult);
8079
8174
  setActiveSub(prevSub);
8080
- setCurrentInstance(...prev);
8175
+ restoreCurrentInstance(prev);
8081
8176
  if ((isAsyncSetup || instance.sp) && !isAsyncWrapper(instance)) markAsyncBoundary(instance);
8082
8177
  if (isAsyncSetup) {
8083
8178
  const unsetCurrentInstance = () => {
@@ -8085,7 +8180,12 @@ function setupStatefulComponent(instance, isSSR) {
8085
8180
  };
8086
8181
  setupResult.then(unsetCurrentInstance, unsetCurrentInstance);
8087
8182
  if (isSSR) return setupResult.then((resolvedResult) => {
8088
- handleSetupResult(instance, resolvedResult, isSSR);
8183
+ setInSSRSetupState(true);
8184
+ try {
8185
+ handleSetupResult(instance, resolvedResult, isSSR);
8186
+ } finally {
8187
+ setInSSRSetupState(false);
8188
+ }
8089
8189
  }).catch((e) => {
8090
8190
  handleError(e, instance, 0);
8091
8191
  });
@@ -8146,7 +8246,7 @@ function finishComponentSetup(instance, isSSR, skipOptions) {
8146
8246
  applyOptions(instance);
8147
8247
  } finally {
8148
8248
  setActiveSub(prevSub);
8149
- setCurrentInstance(...prevInstance);
8249
+ restoreCurrentInstance(prevInstance);
8150
8250
  }
8151
8251
  }
8152
8252
  if (!Component.render && instance.render === NOOP && !isSSR) if (!compile && Component.template)
@@ -8456,7 +8556,7 @@ function isMemoSame(cached, memo) {
8456
8556
  }
8457
8557
  //#endregion
8458
8558
  //#region packages/runtime-core/src/index.ts
8459
- const version = "3.6.0-rc.1";
8559
+ const version = "3.6.0-rc.3";
8460
8560
  const warn = warn$1;
8461
8561
  /**
8462
8562
  * Runtime error messages. Only exposed in dev or esm builds.
@@ -9177,7 +9277,7 @@ var VueElementBase = class VueElementBase extends BaseClass {
9177
9277
  if (!this._instance) if (this._resolved) this._mountComponent(this._def);
9178
9278
  else if (parent && parent._pendingResolve) this._pendingResolve = parent._pendingResolve.then(() => {
9179
9279
  this._pendingResolve = void 0;
9180
- this._resolveDef();
9280
+ if (this.isConnected) return this._resolveDef();
9181
9281
  });
9182
9282
  else this._resolveDef();
9183
9283
  }
@@ -9213,7 +9313,7 @@ var VueElementBase = class VueElementBase extends BaseClass {
9213
9313
  * resolve inner component definition (handle possible async component)
9214
9314
  */
9215
9315
  _resolveDef() {
9216
- if (this._pendingResolve) return;
9316
+ if (this._pendingResolve) return this._pendingResolve;
9217
9317
  for (let i = 0; i < this.attributes.length; i++) this._setAttr(this.attributes[i].name);
9218
9318
  this._ob = new MutationObserver(this._processMutations.bind(this));
9219
9319
  this._ob.observe(this, { attributes: true });
@@ -9243,6 +9343,7 @@ var VueElementBase = class VueElementBase extends BaseClass {
9243
9343
  this._def = def;
9244
9344
  resolve(def);
9245
9345
  });
9346
+ return this._pendingResolve;
9246
9347
  } else resolve(this._def);
9247
9348
  }
9248
9349
  _mountComponent(def) {
@@ -9281,14 +9382,17 @@ var VueElementBase = class VueElementBase extends BaseClass {
9281
9382
  const { props } = def;
9282
9383
  const declaredPropKeys = isArray(props) ? props : Object.keys(props || {});
9283
9384
  for (const key of Object.keys(this)) if (key[0] !== "_" && declaredPropKeys.includes(key)) this._setProp(key, this[key]);
9284
- for (const key of declaredPropKeys.map(camelize)) Object.defineProperty(this, key, {
9285
- get() {
9286
- return this._getProp(key);
9287
- },
9288
- set(val) {
9289
- this._setProp(key, val, true, !this._patching);
9290
- }
9291
- });
9385
+ for (const key of declaredPropKeys.map(camelize)) {
9386
+ if (key in Object.getPrototypeOf(this)) warn(`Custom element prop "${key}" conflicts with an existing property on the element and will overwrite it.`);
9387
+ Object.defineProperty(this, key, {
9388
+ get() {
9389
+ return this._getProp(key);
9390
+ },
9391
+ set(val) {
9392
+ this._setProp(key, val, true, !this._patching);
9393
+ }
9394
+ });
9395
+ }
9292
9396
  }
9293
9397
  _setAttr(key) {
9294
9398
  if (key.startsWith("data-v-")) return;
@@ -9704,13 +9808,22 @@ function onCompositionEnd(e) {
9704
9808
  }
9705
9809
  }
9706
9810
  const assignKey = Symbol("_assign");
9811
+ const initialValueKey = Symbol("_initialValue");
9707
9812
  const vModelText = {
9708
9813
  created(el, { modifiers: { lazy, trim, number } }, vnode) {
9814
+ if (el.parentNode) {
9815
+ if (el.type === "text") el[initialValueKey] = el.defaultValue.replace(/[\r\n]/g, "");
9816
+ else if (el.type === "textarea") el[initialValueKey] = el.defaultValue.replace(/\r\n?/g, "\n");
9817
+ }
9709
9818
  el[assignKey] = getModelAssigner(vnode);
9710
9819
  vModelTextInit(el, trim, number || !!(vnode.props && vnode.props.type === "number"), lazy);
9711
9820
  },
9712
- mounted(el, { value }) {
9713
- el.value = value == null ? "" : value;
9821
+ mounted(el, { value, modifiers: { trim, number } }) {
9822
+ const newValue = value == null ? "" : value;
9823
+ const initialValue = el[initialValueKey];
9824
+ delete el[initialValueKey];
9825
+ if (initialValue !== void 0 && (el.type === "text" || el.type === "textarea") && el.value !== initialValue) el[assignKey](castValue(el.value, trim, number));
9826
+ else el.value = newValue;
9714
9827
  },
9715
9828
  beforeUpdate(el, { value, oldValue, modifiers: { lazy, trim, number } }, vnode) {
9716
9829
  el[assignKey] = getModelAssigner(vnode);