@vue/compat 3.5.22 → 3.5.24

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/compat v3.5.22
2
+ * @vue/compat v3.5.24
3
3
  * (c) 2018-present Yuxi (Evan) You and Vue contributors
4
4
  * @license MIT
5
5
  **/
@@ -4744,14 +4744,16 @@ Server rendered element contains more child nodes than client vdom.`
4744
4744
  if (clientText[0] === "\n" && (el.tagName === "PRE" || el.tagName === "TEXTAREA")) {
4745
4745
  clientText = clientText.slice(1);
4746
4746
  }
4747
- if (el.textContent !== clientText) {
4747
+ const { textContent } = el;
4748
+ if (textContent !== clientText && // innerHTML normalize \r\n or \r into a single \n in the DOM
4749
+ textContent !== clientText.replace(/\r\n|\r/g, "\n")) {
4748
4750
  if (!isMismatchAllowed(el, 0 /* TEXT */)) {
4749
4751
  (!!(process.env.NODE_ENV !== "production") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(
4750
4752
  `Hydration text content mismatch on`,
4751
4753
  el,
4752
4754
  `
4753
- - rendered on server: ${el.textContent}
4754
- - expected on client: ${vnode.children}`
4755
+ - rendered on server: ${textContent}
4756
+ - expected on client: ${clientText}`
4755
4757
  );
4756
4758
  logMismatchError();
4757
4759
  }
@@ -5357,7 +5359,10 @@ function defineAsyncComponent(source) {
5357
5359
  error: error.value
5358
5360
  });
5359
5361
  } else if (loadingComponent && !delayed.value) {
5360
- return createVNode(loadingComponent);
5362
+ return createInnerComp(
5363
+ loadingComponent,
5364
+ instance
5365
+ );
5361
5366
  }
5362
5367
  };
5363
5368
  }
@@ -6456,7 +6461,7 @@ const PublicInstanceProxyHandlers = {
6456
6461
  } else if (hasSetupBinding(setupState, key)) {
6457
6462
  accessCache[key] = 1 /* SETUP */;
6458
6463
  return setupState[key];
6459
- } else if (data !== EMPTY_OBJ && hasOwn(data, key)) {
6464
+ } else if (__VUE_OPTIONS_API__ && data !== EMPTY_OBJ && hasOwn(data, key)) {
6460
6465
  accessCache[key] = 2 /* DATA */;
6461
6466
  return data[key];
6462
6467
  } else if (
@@ -6528,7 +6533,7 @@ const PublicInstanceProxyHandlers = {
6528
6533
  } else if (!!(process.env.NODE_ENV !== "production") && setupState.__isScriptSetup && hasOwn(setupState, key)) {
6529
6534
  warn$1(`Cannot mutate <script setup> binding "${key}" from Options API.`);
6530
6535
  return false;
6531
- } else if (data !== EMPTY_OBJ && hasOwn(data, key)) {
6536
+ } else if (__VUE_OPTIONS_API__ && data !== EMPTY_OBJ && hasOwn(data, key)) {
6532
6537
  data[key] = value;
6533
6538
  return true;
6534
6539
  } else if (hasOwn(instance.props, key)) {
@@ -6557,7 +6562,7 @@ const PublicInstanceProxyHandlers = {
6557
6562
  _: { data, setupState, accessCache, ctx, appContext, propsOptions, type }
6558
6563
  }, key) {
6559
6564
  let normalizedProps, cssModules;
6560
- return !!(accessCache[key] || data !== EMPTY_OBJ && key[0] !== "$" && hasOwn(data, key) || hasSetupBinding(setupState, key) || (normalizedProps = propsOptions[0]) && hasOwn(normalizedProps, key) || hasOwn(ctx, key) || hasOwn(publicPropertiesMap, key) || hasOwn(appContext.config.globalProperties, key) || (cssModules = type.__cssModules) && cssModules[key]);
6565
+ return !!(accessCache[key] || __VUE_OPTIONS_API__ && data !== EMPTY_OBJ && key[0] !== "$" && hasOwn(data, key) || hasSetupBinding(setupState, key) || (normalizedProps = propsOptions[0]) && hasOwn(normalizedProps, key) || hasOwn(ctx, key) || hasOwn(publicPropertiesMap, key) || hasOwn(appContext.config.globalProperties, key) || (cssModules = type.__cssModules) && cssModules[key]);
6561
6566
  },
6562
6567
  defineProperty(target, key, descriptor) {
6563
6568
  if (descriptor.get != null) {
@@ -7304,7 +7309,7 @@ function createCompatVue$1(createApp, createSingletonApp) {
7304
7309
  return vm;
7305
7310
  }
7306
7311
  }
7307
- Vue.version = `2.6.14-compat:${"3.5.22"}`;
7312
+ Vue.version = `2.6.14-compat:${"3.5.24"}`;
7308
7313
  Vue.config = singletonApp.config;
7309
7314
  Vue.use = (plugin, ...options) => {
7310
7315
  if (plugin && isFunction(plugin.install)) {
@@ -8779,15 +8784,25 @@ function baseCreateRenderer(options, createHydrationFns) {
8779
8784
  optimized
8780
8785
  );
8781
8786
  } else {
8782
- patchElement(
8783
- n1,
8784
- n2,
8785
- parentComponent,
8786
- parentSuspense,
8787
- namespace,
8788
- slotScopeIds,
8789
- optimized
8790
- );
8787
+ const customElement = !!(n1.el && n1.el._isVueCE) ? n1.el : null;
8788
+ try {
8789
+ if (customElement) {
8790
+ customElement._beginPatch();
8791
+ }
8792
+ patchElement(
8793
+ n1,
8794
+ n2,
8795
+ parentComponent,
8796
+ parentSuspense,
8797
+ namespace,
8798
+ slotScopeIds,
8799
+ optimized
8800
+ );
8801
+ } finally {
8802
+ if (customElement) {
8803
+ customElement._endPatch();
8804
+ }
8805
+ }
8791
8806
  }
8792
8807
  };
8793
8808
  const mountElement = (vnode, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {
@@ -11103,7 +11118,8 @@ function createSuspenseBoundary(vnode, parentSuspense, parentComponent, containe
11103
11118
  pendingId,
11104
11119
  effects,
11105
11120
  parentComponent: parentComponent2,
11106
- container: container2
11121
+ container: container2,
11122
+ isInFallback
11107
11123
  } = suspense;
11108
11124
  let delayEnter = false;
11109
11125
  if (suspense.isHydrating) {
@@ -11120,6 +11136,9 @@ function createSuspenseBoundary(vnode, parentSuspense, parentComponent, containe
11120
11136
  0
11121
11137
  );
11122
11138
  queuePostFlushCb(effects);
11139
+ if (isInFallback && vnode2.ssFallback) {
11140
+ vnode2.ssFallback.el = null;
11141
+ }
11123
11142
  }
11124
11143
  };
11125
11144
  }
@@ -11128,6 +11147,9 @@ function createSuspenseBoundary(vnode, parentSuspense, parentComponent, containe
11128
11147
  anchor = next(activeBranch);
11129
11148
  }
11130
11149
  unmount(activeBranch, parentComponent2, suspense, true);
11150
+ if (!delayEnter && isInFallback && vnode2.ssFallback) {
11151
+ vnode2.ssFallback.el = null;
11152
+ }
11131
11153
  }
11132
11154
  if (!delayEnter) {
11133
11155
  move(pendingBranch, container2, anchor, 0);
@@ -11246,6 +11268,7 @@ function createSuspenseBoundary(vnode, parentSuspense, parentComponent, containe
11246
11268
  optimized2
11247
11269
  );
11248
11270
  if (placeholder) {
11271
+ vnode2.placeholder = null;
11249
11272
  remove(placeholder);
11250
11273
  }
11251
11274
  updateHOCHostEl(instance, vnode2.el);
@@ -12514,7 +12537,7 @@ function isMemoSame(cached, memo) {
12514
12537
  return true;
12515
12538
  }
12516
12539
 
12517
- const version = "3.5.22";
12540
+ const version = "3.5.24";
12518
12541
  const warn = !!(process.env.NODE_ENV !== "production") ? warn$1 : NOOP;
12519
12542
  const ErrorTypeStrings = ErrorTypeStrings$1 ;
12520
12543
  const devtools = !!(process.env.NODE_ENV !== "production") || true ? devtools$1 : void 0;
@@ -13424,6 +13447,9 @@ function shouldSetAsProp(el, key, value, isSVG) {
13424
13447
  if (key === "spellcheck" || key === "draggable" || key === "translate" || key === "autocorrect") {
13425
13448
  return false;
13426
13449
  }
13450
+ if (key === "sandbox" && el.tagName === "IFRAME") {
13451
+ return false;
13452
+ }
13427
13453
  if (key === "form") {
13428
13454
  return false;
13429
13455
  }
@@ -13484,6 +13510,8 @@ class VueElement extends BaseClass {
13484
13510
  this._nonce = this._def.nonce;
13485
13511
  this._connected = false;
13486
13512
  this._resolved = false;
13513
+ this._patching = false;
13514
+ this._dirty = false;
13487
13515
  this._numberProps = null;
13488
13516
  this._styleChildren = /* @__PURE__ */ new WeakSet();
13489
13517
  this._ob = null;
@@ -13659,7 +13687,7 @@ class VueElement extends BaseClass {
13659
13687
  return this._getProp(key);
13660
13688
  },
13661
13689
  set(val) {
13662
- this._setProp(key, val, true, true);
13690
+ this._setProp(key, val, true, !this._patching);
13663
13691
  }
13664
13692
  });
13665
13693
  }
@@ -13685,6 +13713,7 @@ class VueElement extends BaseClass {
13685
13713
  */
13686
13714
  _setProp(key, val, shouldReflect = true, shouldUpdate = false) {
13687
13715
  if (val !== this._props[key]) {
13716
+ this._dirty = true;
13688
13717
  if (val === REMOVAL) {
13689
13718
  delete this._props[key];
13690
13719
  } else {
@@ -13839,10 +13868,14 @@ class VueElement extends BaseClass {
13839
13868
  if (this._teleportTargets) {
13840
13869
  roots.push(...this._teleportTargets);
13841
13870
  }
13842
- return roots.reduce((res, i) => {
13843
- res.push(...Array.from(i.querySelectorAll("slot")));
13844
- return res;
13845
- }, []);
13871
+ const slots = /* @__PURE__ */ new Set();
13872
+ for (const root of roots) {
13873
+ const found = root.querySelectorAll("slot");
13874
+ for (let i = 0; i < found.length; i++) {
13875
+ slots.add(found[i]);
13876
+ }
13877
+ }
13878
+ return Array.from(slots);
13846
13879
  }
13847
13880
  /**
13848
13881
  * @internal
@@ -13850,6 +13883,22 @@ class VueElement extends BaseClass {
13850
13883
  _injectChildStyle(comp) {
13851
13884
  this._applyStyles(comp.styles, comp);
13852
13885
  }
13886
+ /**
13887
+ * @internal
13888
+ */
13889
+ _beginPatch() {
13890
+ this._patching = true;
13891
+ this._dirty = false;
13892
+ }
13893
+ /**
13894
+ * @internal
13895
+ */
13896
+ _endPatch() {
13897
+ this._patching = false;
13898
+ if (this._dirty && this._instance) {
13899
+ this._update();
13900
+ }
13901
+ }
13853
13902
  /**
13854
13903
  * @internal
13855
13904
  */
@@ -13993,10 +14042,10 @@ const TransitionGroupImpl = /* @__PURE__ */ decorate({
13993
14042
  instance
13994
14043
  )
13995
14044
  );
13996
- positionMap.set(
13997
- child,
13998
- child.el.getBoundingClientRect()
13999
- );
14045
+ positionMap.set(child, {
14046
+ left: child.el.offsetLeft,
14047
+ top: child.el.offsetTop
14048
+ });
14000
14049
  }
14001
14050
  }
14002
14051
  }
@@ -14027,7 +14076,10 @@ function callPendingCbs(c) {
14027
14076
  }
14028
14077
  }
14029
14078
  function recordPosition(c) {
14030
- newPositionMap.set(c, c.el.getBoundingClientRect());
14079
+ newPositionMap.set(c, {
14080
+ left: c.el.offsetLeft,
14081
+ top: c.el.offsetTop
14082
+ });
14031
14083
  }
14032
14084
  function applyTranslation(c) {
14033
14085
  const oldPos = positionMap.get(c);
@@ -14073,24 +14125,22 @@ function onCompositionEnd(e) {
14073
14125
  }
14074
14126
  }
14075
14127
  const assignKey = Symbol("_assign");
14128
+ function castValue(value, trim, number) {
14129
+ if (trim) value = value.trim();
14130
+ if (number) value = looseToNumber(value);
14131
+ return value;
14132
+ }
14076
14133
  const vModelText = {
14077
14134
  created(el, { modifiers: { lazy, trim, number } }, vnode) {
14078
14135
  el[assignKey] = getModelAssigner(vnode);
14079
14136
  const castToNumber = number || vnode.props && vnode.props.type === "number";
14080
14137
  addEventListener(el, lazy ? "change" : "input", (e) => {
14081
14138
  if (e.target.composing) return;
14082
- let domValue = el.value;
14083
- if (trim) {
14084
- domValue = domValue.trim();
14085
- }
14086
- if (castToNumber) {
14087
- domValue = looseToNumber(domValue);
14088
- }
14089
- el[assignKey](domValue);
14139
+ el[assignKey](castValue(el.value, trim, castToNumber));
14090
14140
  });
14091
- if (trim) {
14141
+ if (trim || castToNumber) {
14092
14142
  addEventListener(el, "change", () => {
14093
- el.value = el.value.trim();
14143
+ el.value = castValue(el.value, trim, castToNumber);
14094
14144
  });
14095
14145
  }
14096
14146
  if (!lazy) {
@@ -19971,7 +20021,8 @@ const transformMemo = (node, context) => {
19971
20021
  const transformVBindShorthand = (node, context) => {
19972
20022
  if (node.type === 1) {
19973
20023
  for (const prop of node.props) {
19974
- if (prop.type === 7 && prop.name === "bind" && !prop.exp) {
20024
+ if (prop.type === 7 && prop.name === "bind" && (!prop.exp || // #13930 :foo in in-DOM templates will be parsed into :foo="" by browser
20025
+ prop.exp.type === 4 && !prop.exp.content.trim()) && prop.arg) {
19975
20026
  const arg = prop.arg;
19976
20027
  if (arg.type !== 4 || !arg.isStatic) {
19977
20028
  context.onError(
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @vue/compat v3.5.22
2
+ * @vue/compat v3.5.24
3
3
  * (c) 2018-present Yuxi (Evan) You and Vue contributors
4
4
  * @license MIT
5
5
  **/
@@ -4728,14 +4728,16 @@ Server rendered element contains more child nodes than client vdom.`
4728
4728
  if (clientText[0] === "\n" && (el.tagName === "PRE" || el.tagName === "TEXTAREA")) {
4729
4729
  clientText = clientText.slice(1);
4730
4730
  }
4731
- if (el.textContent !== clientText) {
4731
+ const { textContent } = el;
4732
+ if (textContent !== clientText && // innerHTML normalize \r\n or \r into a single \n in the DOM
4733
+ textContent !== clientText.replace(/\r\n|\r/g, "\n")) {
4732
4734
  if (!isMismatchAllowed(el, 0 /* TEXT */)) {
4733
4735
  warn$1(
4734
4736
  `Hydration text content mismatch on`,
4735
4737
  el,
4736
4738
  `
4737
- - rendered on server: ${el.textContent}
4738
- - expected on client: ${vnode.children}`
4739
+ - rendered on server: ${textContent}
4740
+ - expected on client: ${clientText}`
4739
4741
  );
4740
4742
  logMismatchError();
4741
4743
  }
@@ -5330,7 +5332,10 @@ Server rendered element contains fewer child nodes than client vdom.`
5330
5332
  error: error.value
5331
5333
  });
5332
5334
  } else if (loadingComponent && !delayed.value) {
5333
- return createVNode(loadingComponent);
5335
+ return createInnerComp(
5336
+ loadingComponent,
5337
+ instance
5338
+ );
5334
5339
  }
5335
5340
  };
5336
5341
  }
@@ -7266,7 +7271,7 @@ If this is a native custom element, make sure to exclude it from component resol
7266
7271
  return vm;
7267
7272
  }
7268
7273
  }
7269
- Vue.version = `2.6.14-compat:${"3.5.22"}`;
7274
+ Vue.version = `2.6.14-compat:${"3.5.24"}`;
7270
7275
  Vue.config = singletonApp.config;
7271
7276
  Vue.use = (plugin, ...options) => {
7272
7277
  if (plugin && isFunction(plugin.install)) {
@@ -8712,15 +8717,25 @@ If you want to remount the same app, move your app creation logic into a factory
8712
8717
  optimized
8713
8718
  );
8714
8719
  } else {
8715
- patchElement(
8716
- n1,
8717
- n2,
8718
- parentComponent,
8719
- parentSuspense,
8720
- namespace,
8721
- slotScopeIds,
8722
- optimized
8723
- );
8720
+ const customElement = !!(n1.el && n1.el._isVueCE) ? n1.el : null;
8721
+ try {
8722
+ if (customElement) {
8723
+ customElement._beginPatch();
8724
+ }
8725
+ patchElement(
8726
+ n1,
8727
+ n2,
8728
+ parentComponent,
8729
+ parentSuspense,
8730
+ namespace,
8731
+ slotScopeIds,
8732
+ optimized
8733
+ );
8734
+ } finally {
8735
+ if (customElement) {
8736
+ customElement._endPatch();
8737
+ }
8738
+ }
8724
8739
  }
8725
8740
  };
8726
8741
  const mountElement = (vnode, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {
@@ -10997,7 +11012,8 @@ If you want to remount the same app, move your app creation logic into a factory
10997
11012
  pendingId,
10998
11013
  effects,
10999
11014
  parentComponent: parentComponent2,
11000
- container: container2
11015
+ container: container2,
11016
+ isInFallback
11001
11017
  } = suspense;
11002
11018
  let delayEnter = false;
11003
11019
  if (suspense.isHydrating) {
@@ -11014,6 +11030,9 @@ If you want to remount the same app, move your app creation logic into a factory
11014
11030
  0
11015
11031
  );
11016
11032
  queuePostFlushCb(effects);
11033
+ if (isInFallback && vnode2.ssFallback) {
11034
+ vnode2.ssFallback.el = null;
11035
+ }
11017
11036
  }
11018
11037
  };
11019
11038
  }
@@ -11022,6 +11041,9 @@ If you want to remount the same app, move your app creation logic into a factory
11022
11041
  anchor = next(activeBranch);
11023
11042
  }
11024
11043
  unmount(activeBranch, parentComponent2, suspense, true);
11044
+ if (!delayEnter && isInFallback && vnode2.ssFallback) {
11045
+ vnode2.ssFallback.el = null;
11046
+ }
11025
11047
  }
11026
11048
  if (!delayEnter) {
11027
11049
  move(pendingBranch, container2, anchor, 0);
@@ -11140,6 +11162,7 @@ If you want to remount the same app, move your app creation logic into a factory
11140
11162
  optimized2
11141
11163
  );
11142
11164
  if (placeholder) {
11165
+ vnode2.placeholder = null;
11143
11166
  remove(placeholder);
11144
11167
  }
11145
11168
  updateHOCHostEl(instance, vnode2.el);
@@ -12380,7 +12403,7 @@ Component that was made reactive: `,
12380
12403
  return true;
12381
12404
  }
12382
12405
 
12383
- const version = "3.5.22";
12406
+ const version = "3.5.24";
12384
12407
  const warn = warn$1 ;
12385
12408
  const ErrorTypeStrings = ErrorTypeStrings$1 ;
12386
12409
  const devtools = devtools$1 ;
@@ -13271,6 +13294,9 @@ Expected function or array of functions, received type ${typeof value}.`
13271
13294
  if (key === "spellcheck" || key === "draggable" || key === "translate" || key === "autocorrect") {
13272
13295
  return false;
13273
13296
  }
13297
+ if (key === "sandbox" && el.tagName === "IFRAME") {
13298
+ return false;
13299
+ }
13274
13300
  if (key === "form") {
13275
13301
  return false;
13276
13302
  }
@@ -13331,6 +13357,8 @@ Expected function or array of functions, received type ${typeof value}.`
13331
13357
  this._nonce = this._def.nonce;
13332
13358
  this._connected = false;
13333
13359
  this._resolved = false;
13360
+ this._patching = false;
13361
+ this._dirty = false;
13334
13362
  this._numberProps = null;
13335
13363
  this._styleChildren = /* @__PURE__ */ new WeakSet();
13336
13364
  this._ob = null;
@@ -13506,7 +13534,7 @@ Expected function or array of functions, received type ${typeof value}.`
13506
13534
  return this._getProp(key);
13507
13535
  },
13508
13536
  set(val) {
13509
- this._setProp(key, val, true, true);
13537
+ this._setProp(key, val, true, !this._patching);
13510
13538
  }
13511
13539
  });
13512
13540
  }
@@ -13532,6 +13560,7 @@ Expected function or array of functions, received type ${typeof value}.`
13532
13560
  */
13533
13561
  _setProp(key, val, shouldReflect = true, shouldUpdate = false) {
13534
13562
  if (val !== this._props[key]) {
13563
+ this._dirty = true;
13535
13564
  if (val === REMOVAL) {
13536
13565
  delete this._props[key];
13537
13566
  } else {
@@ -13686,10 +13715,14 @@ Expected function or array of functions, received type ${typeof value}.`
13686
13715
  if (this._teleportTargets) {
13687
13716
  roots.push(...this._teleportTargets);
13688
13717
  }
13689
- return roots.reduce((res, i) => {
13690
- res.push(...Array.from(i.querySelectorAll("slot")));
13691
- return res;
13692
- }, []);
13718
+ const slots = /* @__PURE__ */ new Set();
13719
+ for (const root of roots) {
13720
+ const found = root.querySelectorAll("slot");
13721
+ for (let i = 0; i < found.length; i++) {
13722
+ slots.add(found[i]);
13723
+ }
13724
+ }
13725
+ return Array.from(slots);
13693
13726
  }
13694
13727
  /**
13695
13728
  * @internal
@@ -13697,6 +13730,22 @@ Expected function or array of functions, received type ${typeof value}.`
13697
13730
  _injectChildStyle(comp) {
13698
13731
  this._applyStyles(comp.styles, comp);
13699
13732
  }
13733
+ /**
13734
+ * @internal
13735
+ */
13736
+ _beginPatch() {
13737
+ this._patching = true;
13738
+ this._dirty = false;
13739
+ }
13740
+ /**
13741
+ * @internal
13742
+ */
13743
+ _endPatch() {
13744
+ this._patching = false;
13745
+ if (this._dirty && this._instance) {
13746
+ this._update();
13747
+ }
13748
+ }
13700
13749
  /**
13701
13750
  * @internal
13702
13751
  */
@@ -13828,10 +13877,10 @@ Expected function or array of functions, received type ${typeof value}.`
13828
13877
  instance
13829
13878
  )
13830
13879
  );
13831
- positionMap.set(
13832
- child,
13833
- child.el.getBoundingClientRect()
13834
- );
13880
+ positionMap.set(child, {
13881
+ left: child.el.offsetLeft,
13882
+ top: child.el.offsetTop
13883
+ });
13835
13884
  }
13836
13885
  }
13837
13886
  }
@@ -13862,7 +13911,10 @@ Expected function or array of functions, received type ${typeof value}.`
13862
13911
  }
13863
13912
  }
13864
13913
  function recordPosition(c) {
13865
- newPositionMap.set(c, c.el.getBoundingClientRect());
13914
+ newPositionMap.set(c, {
13915
+ left: c.el.offsetLeft,
13916
+ top: c.el.offsetTop
13917
+ });
13866
13918
  }
13867
13919
  function applyTranslation(c) {
13868
13920
  const oldPos = positionMap.get(c);
@@ -13908,24 +13960,22 @@ Expected function or array of functions, received type ${typeof value}.`
13908
13960
  }
13909
13961
  }
13910
13962
  const assignKey = Symbol("_assign");
13963
+ function castValue(value, trim, number) {
13964
+ if (trim) value = value.trim();
13965
+ if (number) value = looseToNumber(value);
13966
+ return value;
13967
+ }
13911
13968
  const vModelText = {
13912
13969
  created(el, { modifiers: { lazy, trim, number } }, vnode) {
13913
13970
  el[assignKey] = getModelAssigner(vnode);
13914
13971
  const castToNumber = number || vnode.props && vnode.props.type === "number";
13915
13972
  addEventListener(el, lazy ? "change" : "input", (e) => {
13916
13973
  if (e.target.composing) return;
13917
- let domValue = el.value;
13918
- if (trim) {
13919
- domValue = domValue.trim();
13920
- }
13921
- if (castToNumber) {
13922
- domValue = looseToNumber(domValue);
13923
- }
13924
- el[assignKey](domValue);
13974
+ el[assignKey](castValue(el.value, trim, castToNumber));
13925
13975
  });
13926
- if (trim) {
13976
+ if (trim || castToNumber) {
13927
13977
  addEventListener(el, "change", () => {
13928
- el.value = el.value.trim();
13978
+ el.value = castValue(el.value, trim, castToNumber);
13929
13979
  });
13930
13980
  }
13931
13981
  if (!lazy) {
@@ -19768,7 +19818,8 @@ Use a v-bind binding combined with a v-on listener that emits update:x event ins
19768
19818
  const transformVBindShorthand = (node, context) => {
19769
19819
  if (node.type === 1) {
19770
19820
  for (const prop of node.props) {
19771
- if (prop.type === 7 && prop.name === "bind" && !prop.exp) {
19821
+ if (prop.type === 7 && prop.name === "bind" && (!prop.exp || // #13930 :foo in in-DOM templates will be parsed into :foo="" by browser
19822
+ prop.exp.type === 4 && !prop.exp.content.trim()) && prop.arg) {
19772
19823
  const arg = prop.arg;
19773
19824
  if (arg.type !== 4 || !arg.isStatic) {
19774
19825
  context.onError(