@vue/compat 3.2.30 → 3.2.33

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.
@@ -351,8 +351,17 @@ var Vue = (function () {
351
351
  let activeEffectScope;
352
352
  class EffectScope {
353
353
  constructor(detached = false) {
354
+ /**
355
+ * @internal
356
+ */
354
357
  this.active = true;
358
+ /**
359
+ * @internal
360
+ */
355
361
  this.effects = [];
362
+ /**
363
+ * @internal
364
+ */
356
365
  this.cleanups = [];
357
366
  if (!detached && activeEffectScope) {
358
367
  this.parent = activeEffectScope;
@@ -362,21 +371,30 @@ var Vue = (function () {
362
371
  }
363
372
  run(fn) {
364
373
  if (this.active) {
374
+ const currentEffectScope = activeEffectScope;
365
375
  try {
366
376
  activeEffectScope = this;
367
377
  return fn();
368
378
  }
369
379
  finally {
370
- activeEffectScope = this.parent;
380
+ activeEffectScope = currentEffectScope;
371
381
  }
372
382
  }
373
383
  else {
374
384
  warn(`cannot run an inactive effect scope.`);
375
385
  }
376
386
  }
387
+ /**
388
+ * This should only be called on non-detached scopes
389
+ * @internal
390
+ */
377
391
  on() {
378
392
  activeEffectScope = this;
379
393
  }
394
+ /**
395
+ * This should only be called on non-detached scopes
396
+ * @internal
397
+ */
380
398
  off() {
381
399
  activeEffectScope = this.parent;
382
400
  }
@@ -518,10 +536,17 @@ var Vue = (function () {
518
536
  activeEffect = this.parent;
519
537
  shouldTrack = lastShouldTrack;
520
538
  this.parent = undefined;
539
+ if (this.deferStop) {
540
+ this.stop();
541
+ }
521
542
  }
522
543
  }
523
544
  stop() {
524
- if (this.active) {
545
+ // stopped while running itself - defer the cleanup
546
+ if (activeEffect === this) {
547
+ this.deferStop = true;
548
+ }
549
+ else if (this.active) {
525
550
  cleanupEffect(this);
526
551
  if (this.onStop) {
527
552
  this.onStop();
@@ -600,9 +625,7 @@ var Vue = (function () {
600
625
  dep.add(activeEffect);
601
626
  activeEffect.deps.push(dep);
602
627
  if (activeEffect.onTrack) {
603
- activeEffect.onTrack(Object.assign({
604
- effect: activeEffect
605
- }, debuggerEventExtraInfo));
628
+ activeEffect.onTrack(Object.assign({ effect: activeEffect }, debuggerEventExtraInfo));
606
629
  }
607
630
  }
608
631
  }
@@ -698,7 +721,9 @@ var Vue = (function () {
698
721
  }
699
722
 
700
723
  const isNonTrackableKeys = /*#__PURE__*/ makeMap(`__proto__,__v_isRef,__isVue`);
701
- const builtInSymbols = new Set(Object.getOwnPropertyNames(Symbol)
724
+ const builtInSymbols = new Set(
725
+ /*#__PURE__*/
726
+ Object.getOwnPropertyNames(Symbol)
702
727
  .map(key => Symbol[key])
703
728
  .filter(isSymbol));
704
729
  const get = /*#__PURE__*/ createGetter();
@@ -850,13 +875,13 @@ var Vue = (function () {
850
875
  get: readonlyGet,
851
876
  set(target, key) {
852
877
  {
853
- console.warn(`Set operation on key "${String(key)}" failed: target is readonly.`, target);
878
+ warn(`Set operation on key "${String(key)}" failed: target is readonly.`, target);
854
879
  }
855
880
  return true;
856
881
  },
857
882
  deleteProperty(target, key) {
858
883
  {
859
- console.warn(`Delete operation on key "${String(key)}" failed: target is readonly.`, target);
884
+ warn(`Delete operation on key "${String(key)}" failed: target is readonly.`, target);
860
885
  }
861
886
  return true;
862
887
  }
@@ -1684,7 +1709,7 @@ var Vue = (function () {
1684
1709
  const pendingPostFlushCbs = [];
1685
1710
  let activePostFlushCbs = null;
1686
1711
  let postFlushIndex = 0;
1687
- const resolvedPromise = Promise.resolve();
1712
+ const resolvedPromise = /*#__PURE__*/ Promise.resolve();
1688
1713
  let currentFlushPromise = null;
1689
1714
  let currentPreFlushParentJob = null;
1690
1715
  const RECURSION_LIMIT = 100;
@@ -2618,6 +2643,8 @@ var Vue = (function () {
2618
2643
  }
2619
2644
 
2620
2645
  function emit$2(instance, event, ...rawArgs) {
2646
+ if (instance.isUnmounted)
2647
+ return;
2621
2648
  const props = instance.vnode.props || EMPTY_OBJ;
2622
2649
  {
2623
2650
  const { emitsOptions, propsOptions: [propsOptions] } = instance;
@@ -3635,12 +3662,10 @@ var Vue = (function () {
3635
3662
  return doWatch(effect, null, options);
3636
3663
  }
3637
3664
  function watchPostEffect(effect, options) {
3638
- return doWatch(effect, null, (Object.assign(options || {}, { flush: 'post' })
3639
- ));
3665
+ return doWatch(effect, null, (Object.assign(Object.assign({}, options), { flush: 'post' }) ));
3640
3666
  }
3641
3667
  function watchSyncEffect(effect, options) {
3642
- return doWatch(effect, null, (Object.assign(options || {}, { flush: 'sync' })
3643
- ));
3668
+ return doWatch(effect, null, (Object.assign(Object.assign({}, options), { flush: 'sync' }) ));
3644
3669
  }
3645
3670
  // initial value for watchers to trigger on undefined initial values
3646
3671
  const INITIAL_WATCHER_VALUE = {};
@@ -3939,10 +3964,22 @@ var Vue = (function () {
3939
3964
  if (!children || !children.length) {
3940
3965
  return;
3941
3966
  }
3942
- // warn multiple elements
3967
+ let child = children[0];
3943
3968
  if (children.length > 1) {
3944
- warn$1('<transition> can only be used on a single element or component. Use ' +
3945
- '<transition-group> for lists.');
3969
+ let hasFound = false;
3970
+ // locate first non-comment child
3971
+ for (const c of children) {
3972
+ if (c.type !== Comment) {
3973
+ if (hasFound) {
3974
+ // warn more than one non-comment child
3975
+ warn$1('<transition> can only be used on a single element or component. ' +
3976
+ 'Use <transition-group> for lists.');
3977
+ break;
3978
+ }
3979
+ child = c;
3980
+ hasFound = true;
3981
+ }
3982
+ }
3946
3983
  }
3947
3984
  // there's no need to track reactivity for these props so use the raw
3948
3985
  // props for a bit better perf
@@ -3950,11 +3987,11 @@ var Vue = (function () {
3950
3987
  const { mode } = rawProps;
3951
3988
  // check mode
3952
3989
  if (mode &&
3953
- mode !== 'in-out' && mode !== 'out-in' && mode !== 'default') {
3990
+ mode !== 'in-out' &&
3991
+ mode !== 'out-in' &&
3992
+ mode !== 'default') {
3954
3993
  warn$1(`invalid <transition> mode: ${mode}`);
3955
3994
  }
3956
- // at this point children has a guaranteed length of 1.
3957
- const child = children[0];
3958
3995
  if (state.isLeaving) {
3959
3996
  return emptyPlaceholder(child);
3960
3997
  }
@@ -4180,20 +4217,24 @@ var Vue = (function () {
4180
4217
  vnode.transition = hooks;
4181
4218
  }
4182
4219
  }
4183
- function getTransitionRawChildren(children, keepComment = false) {
4220
+ function getTransitionRawChildren(children, keepComment = false, parentKey) {
4184
4221
  let ret = [];
4185
4222
  let keyedFragmentCount = 0;
4186
4223
  for (let i = 0; i < children.length; i++) {
4187
- const child = children[i];
4224
+ let child = children[i];
4225
+ // #5360 inherit parent key in case of <template v-for>
4226
+ const key = parentKey == null
4227
+ ? child.key
4228
+ : String(parentKey) + String(child.key != null ? child.key : i);
4188
4229
  // handle fragment children case, e.g. v-for
4189
4230
  if (child.type === Fragment) {
4190
4231
  if (child.patchFlag & 128 /* KEYED_FRAGMENT */)
4191
4232
  keyedFragmentCount++;
4192
- ret = ret.concat(getTransitionRawChildren(child.children, keepComment));
4233
+ ret = ret.concat(getTransitionRawChildren(child.children, keepComment, key));
4193
4234
  }
4194
4235
  // comment placeholders should be skipped, e.g. v-if
4195
4236
  else if (keepComment || child.type !== Comment) {
4196
- ret.push(child);
4237
+ ret.push(key != null ? cloneVNode(child, { key }) : child);
4197
4238
  }
4198
4239
  }
4199
4240
  // #1126 if a transition children list contains multiple sub fragments, these
@@ -5251,6 +5292,10 @@ var Vue = (function () {
5251
5292
  const propsToUpdate = instance.vnode.dynamicProps;
5252
5293
  for (let i = 0; i < propsToUpdate.length; i++) {
5253
5294
  let key = propsToUpdate[i];
5295
+ // skip if the prop key is a declared emit event listener
5296
+ if (isEmitListener(instance.emitsOptions, key)) {
5297
+ continue;
5298
+ }
5254
5299
  // PROPS flag guarantees rawProps to be non-null
5255
5300
  const value = rawProps[key];
5256
5301
  if (options) {
@@ -5836,7 +5881,8 @@ var Vue = (function () {
5836
5881
  warn$1(`withDirectives can only be used inside render functions.`);
5837
5882
  return vnode;
5838
5883
  }
5839
- const instance = internalInstance.proxy;
5884
+ const instance = getExposeProxy(internalInstance) ||
5885
+ internalInstance.proxy;
5840
5886
  const bindings = vnode.dirs || (vnode.dirs = []);
5841
5887
  for (let i = 0; i < directives.length; i++) {
5842
5888
  let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];
@@ -5956,7 +6002,7 @@ var Vue = (function () {
5956
6002
  return vm;
5957
6003
  }
5958
6004
  }
5959
- Vue.version = `2.6.14-compat:${"3.2.30"}`;
6005
+ Vue.version = `2.6.14-compat:${"3.2.33"}`;
5960
6006
  Vue.config = singletonApp.config;
5961
6007
  Vue.use = (p, ...options) => {
5962
6008
  if (p && isFunction(p.install)) {
@@ -6383,6 +6429,9 @@ var Vue = (function () {
6383
6429
  let uid = 0;
6384
6430
  function createAppAPI(render, hydrate) {
6385
6431
  return function createApp(rootComponent, rootProps = null) {
6432
+ if (!isFunction(rootComponent)) {
6433
+ rootComponent = Object.assign({}, rootComponent);
6434
+ }
6386
6435
  if (rootProps != null && !isObject(rootProps)) {
6387
6436
  warn$1(`root props passed to app.mount() must be an object.`);
6388
6437
  rootProps = null;
@@ -6582,6 +6631,9 @@ var Vue = (function () {
6582
6631
  if (!isArray(existing)) {
6583
6632
  if (_isString) {
6584
6633
  refs[ref] = [refValue];
6634
+ if (hasOwn(setupState, ref)) {
6635
+ setupState[ref] = refs[ref];
6636
+ }
6585
6637
  }
6586
6638
  else {
6587
6639
  ref.value = [refValue];
@@ -6780,7 +6832,8 @@ var Vue = (function () {
6780
6832
  // e.g. <option :value="obj">, <input type="checkbox" :true-value="1">
6781
6833
  const forcePatchValue = (type === 'input' && dirs) || type === 'option';
6782
6834
  // skip props & children if this is hoisted static nodes
6783
- if (forcePatchValue || patchFlag !== -1 /* HOISTED */) {
6835
+ // #5405 in dev, always hydrate children for HMR
6836
+ {
6784
6837
  if (dirs) {
6785
6838
  invokeDirectiveHook(vnode, null, parentComponent, 'created');
6786
6839
  }
@@ -6953,7 +7006,7 @@ var Vue = (function () {
6953
7006
  perf.mark(`vue-${type}-${instance.uid}`);
6954
7007
  }
6955
7008
  {
6956
- devtoolsPerfStart(instance, type, supported ? perf.now() : Date.now());
7009
+ devtoolsPerfStart(instance, type, isSupported() ? perf.now() : Date.now());
6957
7010
  }
6958
7011
  }
6959
7012
  function endMeasure(instance, type) {
@@ -6966,7 +7019,7 @@ var Vue = (function () {
6966
7019
  perf.clearMarks(endTag);
6967
7020
  }
6968
7021
  {
6969
- devtoolsPerfEnd(instance, type, supported ? perf.now() : Date.now());
7022
+ devtoolsPerfEnd(instance, type, isSupported() ? perf.now() : Date.now());
6970
7023
  }
6971
7024
  }
6972
7025
  function isSupported() {
@@ -8113,7 +8166,22 @@ var Vue = (function () {
8113
8166
  const remove = vnode => {
8114
8167
  const { type, el, anchor, transition } = vnode;
8115
8168
  if (type === Fragment) {
8116
- removeFragment(el, anchor);
8169
+ if (vnode.patchFlag > 0 &&
8170
+ vnode.patchFlag & 2048 /* DEV_ROOT_FRAGMENT */ &&
8171
+ transition &&
8172
+ !transition.persisted) {
8173
+ vnode.children.forEach(child => {
8174
+ if (child.type === Comment) {
8175
+ hostRemove(child.el);
8176
+ }
8177
+ else {
8178
+ remove(child);
8179
+ }
8180
+ });
8181
+ }
8182
+ else {
8183
+ removeFragment(el, anchor);
8184
+ }
8117
8185
  return;
8118
8186
  }
8119
8187
  if (type === Static) {
@@ -9506,7 +9574,10 @@ var Vue = (function () {
9506
9574
  // this is not a user-facing function, so the fallback is always generated by
9507
9575
  // the compiler and guaranteed to be a function returning an array
9508
9576
  fallback, noSlotted) {
9509
- if (currentRenderingInstance.isCE) {
9577
+ if (currentRenderingInstance.isCE ||
9578
+ (currentRenderingInstance.parent &&
9579
+ isAsyncWrapper(currentRenderingInstance.parent) &&
9580
+ currentRenderingInstance.parent.isCE)) {
9510
9581
  return createVNode('slot', name === 'default' ? null : { name }, fallback && fallback());
9511
9582
  }
9512
9583
  let slot = slots[name];
@@ -9796,7 +9867,10 @@ var Vue = (function () {
9796
9867
  return getExposeProxy(i) || i.proxy;
9797
9868
  return getPublicInstance(i.parent);
9798
9869
  };
9799
- const publicPropertiesMap = extend(Object.create(null), {
9870
+ const publicPropertiesMap =
9871
+ // Move PURE marker to new line to workaround compiler discarding it
9872
+ // due to type annotation
9873
+ /*#__PURE__*/ extend(Object.create(null), {
9800
9874
  $: i => i,
9801
9875
  $el: i => i.vnode.el,
9802
9876
  $data: i => i.data,
@@ -9909,7 +9983,9 @@ var Vue = (function () {
9909
9983
  }
9910
9984
  else {
9911
9985
  const val = globalProperties[key];
9912
- return isFunction(val) ? val.bind(instance.proxy) : val;
9986
+ return isFunction(val)
9987
+ ? Object.assign(val.bind(instance.proxy), val)
9988
+ : val;
9913
9989
  }
9914
9990
  }
9915
9991
  }
@@ -9934,9 +10010,11 @@ var Vue = (function () {
9934
10010
  const { data, setupState, ctx } = instance;
9935
10011
  if (setupState !== EMPTY_OBJ && hasOwn(setupState, key)) {
9936
10012
  setupState[key] = value;
10013
+ return true;
9937
10014
  }
9938
10015
  else if (data !== EMPTY_OBJ && hasOwn(data, key)) {
9939
10016
  data[key] = value;
10017
+ return true;
9940
10018
  }
9941
10019
  else if (hasOwn(instance.props, key)) {
9942
10020
  warn$1(`Attempting to mutate prop "${key}". Props are readonly.`, instance);
@@ -9970,6 +10048,16 @@ var Vue = (function () {
9970
10048
  hasOwn(ctx, key) ||
9971
10049
  hasOwn(publicPropertiesMap, key) ||
9972
10050
  hasOwn(appContext.config.globalProperties, key));
10051
+ },
10052
+ defineProperty(target, key, descriptor) {
10053
+ if (descriptor.get != null) {
10054
+ // invalidate key cache of a getter based property #5417
10055
+ target._.accessCache[key] = 0;
10056
+ }
10057
+ else if (hasOwn(descriptor, 'value')) {
10058
+ this.set(target, key, descriptor.value, null);
10059
+ }
10060
+ return Reflect.defineProperty(target, key, descriptor);
9973
10061
  }
9974
10062
  };
9975
10063
  {
@@ -10172,6 +10260,7 @@ var Vue = (function () {
10172
10260
  return setupResult;
10173
10261
  }
10174
10262
  function setupStatefulComponent(instance, isSSR) {
10263
+ var _a;
10175
10264
  const Component = instance.type;
10176
10265
  {
10177
10266
  if (Component.name) {
@@ -10229,6 +10318,13 @@ var Vue = (function () {
10229
10318
  // async setup returned Promise.
10230
10319
  // bail here and wait for re-entry.
10231
10320
  instance.asyncDep = setupResult;
10321
+ if (!instance.suspense) {
10322
+ const name = (_a = Component.name) !== null && _a !== void 0 ? _a : 'Anonymous';
10323
+ warn$1(`Component <${name}>: setup function returned a promise, but no ` +
10324
+ `<Suspense> boundary was found in the parent component tree. ` +
10325
+ `A component with async setup() must be nested in a <Suspense> ` +
10326
+ `in order to be rendered.`);
10327
+ }
10232
10328
  }
10233
10329
  }
10234
10330
  else {
@@ -10855,7 +10951,7 @@ var Vue = (function () {
10855
10951
  }
10856
10952
 
10857
10953
  // Core API ------------------------------------------------------------------
10858
- const version = "3.2.30";
10954
+ const version = "3.2.33";
10859
10955
  /**
10860
10956
  * SSR utils for \@vue/server-renderer. Only exposed in cjs builds.
10861
10957
  * @internal
@@ -10879,7 +10975,7 @@ var Vue = (function () {
10879
10975
 
10880
10976
  const svgNS = 'http://www.w3.org/2000/svg';
10881
10977
  const doc = (typeof document !== 'undefined' ? document : null);
10882
- const templateContainer = doc && doc.createElement('template');
10978
+ const templateContainer = doc && /*#__PURE__*/ doc.createElement('template');
10883
10979
  const nodeOps = {
10884
10980
  insert: (child, parent, anchor) => {
10885
10981
  parent.insertBefore(child, anchor || null);
@@ -11030,6 +11126,8 @@ var Vue = (function () {
11030
11126
  val.forEach(v => setStyle(style, name, v));
11031
11127
  }
11032
11128
  else {
11129
+ if (val == null)
11130
+ val = '';
11033
11131
  if (name.startsWith('--')) {
11034
11132
  // custom property definition
11035
11133
  style.setProperty(name, val);
@@ -11151,41 +11249,39 @@ var Vue = (function () {
11151
11249
  }
11152
11250
  return;
11153
11251
  }
11252
+ let needRemove = false;
11154
11253
  if (value === '' || value == null) {
11155
11254
  const type = typeof el[key];
11156
11255
  if (type === 'boolean') {
11157
11256
  // e.g. <select multiple> compiles to { multiple: '' }
11158
- el[key] = includeBooleanAttr(value);
11159
- return;
11257
+ value = includeBooleanAttr(value);
11160
11258
  }
11161
11259
  else if (value == null && type === 'string') {
11162
11260
  // e.g. <div :id="null">
11163
- el[key] = '';
11164
- el.removeAttribute(key);
11165
- return;
11261
+ value = '';
11262
+ needRemove = true;
11166
11263
  }
11167
11264
  else if (type === 'number') {
11168
11265
  // e.g. <img :width="null">
11169
11266
  // the value of some IDL attr must be greater than 0, e.g. input.size = 0 -> error
11170
- try {
11171
- el[key] = 0;
11172
- }
11173
- catch (_a) { }
11174
- el.removeAttribute(key);
11175
- return;
11267
+ value = 0;
11268
+ needRemove = true;
11176
11269
  }
11177
11270
  }
11178
- if (value === false &&
11179
- compatUtils.isCompatEnabled("ATTR_FALSE_VALUE" /* ATTR_FALSE_VALUE */, parentComponent)) {
11180
- const type = typeof el[key];
11181
- if (type === 'string' || type === 'number') {
11182
- compatUtils.warnDeprecation("ATTR_FALSE_VALUE" /* ATTR_FALSE_VALUE */, parentComponent, key);
11183
- el[key] = type === 'number' ? 0 : '';
11184
- el.removeAttribute(key);
11185
- return;
11271
+ else {
11272
+ if (value === false &&
11273
+ compatUtils.isCompatEnabled("ATTR_FALSE_VALUE" /* ATTR_FALSE_VALUE */, parentComponent)) {
11274
+ const type = typeof el[key];
11275
+ if (type === 'string' || type === 'number') {
11276
+ compatUtils.warnDeprecation("ATTR_FALSE_VALUE" /* ATTR_FALSE_VALUE */, parentComponent, key);
11277
+ value = type === 'number' ? 0 : '';
11278
+ needRemove = true;
11279
+ }
11186
11280
  }
11187
11281
  }
11188
- // some properties perform value validation and throw
11282
+ // some properties perform value validation and throw,
11283
+ // some properties has getter, no setter, will error in 'use strict'
11284
+ // eg. <select :type="null"></select> <select :willValidate="null"></select>
11189
11285
  try {
11190
11286
  el[key] = value;
11191
11287
  }
@@ -11195,31 +11291,35 @@ var Vue = (function () {
11195
11291
  `value ${value} is invalid.`, e);
11196
11292
  }
11197
11293
  }
11294
+ needRemove && el.removeAttribute(key);
11198
11295
  }
11199
11296
 
11200
11297
  // Async edge case fix requires storing an event listener's attach timestamp.
11201
- let _getNow = Date.now;
11202
- let skipTimestampCheck = false;
11203
- if (typeof window !== 'undefined') {
11204
- // Determine what event timestamp the browser is using. Annoyingly, the
11205
- // timestamp can either be hi-res (relative to page load) or low-res
11206
- // (relative to UNIX epoch), so in order to compare time we have to use the
11207
- // same timestamp type when saving the flush timestamp.
11208
- if (_getNow() > document.createEvent('Event').timeStamp) {
11209
- // if the low-res timestamp which is bigger than the event timestamp
11210
- // (which is evaluated AFTER) it means the event is using a hi-res timestamp,
11211
- // and we need to use the hi-res version for event listeners as well.
11212
- _getNow = () => performance.now();
11213
- }
11214
- // #3485: Firefox <= 53 has incorrect Event.timeStamp implementation
11215
- // and does not fire microtasks in between event propagation, so safe to exclude.
11216
- const ffMatch = navigator.userAgent.match(/firefox\/(\d+)/i);
11217
- skipTimestampCheck = !!(ffMatch && Number(ffMatch[1]) <= 53);
11218
- }
11298
+ const [_getNow, skipTimestampCheck] = /*#__PURE__*/ (() => {
11299
+ let _getNow = Date.now;
11300
+ let skipTimestampCheck = false;
11301
+ if (typeof window !== 'undefined') {
11302
+ // Determine what event timestamp the browser is using. Annoyingly, the
11303
+ // timestamp can either be hi-res (relative to page load) or low-res
11304
+ // (relative to UNIX epoch), so in order to compare time we have to use the
11305
+ // same timestamp type when saving the flush timestamp.
11306
+ if (Date.now() > document.createEvent('Event').timeStamp) {
11307
+ // if the low-res timestamp which is bigger than the event timestamp
11308
+ // (which is evaluated AFTER) it means the event is using a hi-res timestamp,
11309
+ // and we need to use the hi-res version for event listeners as well.
11310
+ _getNow = () => performance.now();
11311
+ }
11312
+ // #3485: Firefox <= 53 has incorrect Event.timeStamp implementation
11313
+ // and does not fire microtasks in between event propagation, so safe to exclude.
11314
+ const ffMatch = navigator.userAgent.match(/firefox\/(\d+)/i);
11315
+ skipTimestampCheck = !!(ffMatch && Number(ffMatch[1]) <= 53);
11316
+ }
11317
+ return [_getNow, skipTimestampCheck];
11318
+ })();
11219
11319
  // To avoid the overhead of repeatedly calling performance.now(), we cache
11220
11320
  // and use the same timestamp for all event listeners attached in the same tick.
11221
11321
  let cachedNow = 0;
11222
- const p = Promise.resolve();
11322
+ const p = /*#__PURE__*/ Promise.resolve();
11223
11323
  const reset = () => {
11224
11324
  cachedNow = 0;
11225
11325
  };
@@ -11344,13 +11444,13 @@ var Vue = (function () {
11344
11444
  }
11345
11445
  return false;
11346
11446
  }
11347
- // spellcheck and draggable are numerated attrs, however their
11348
- // corresponding DOM properties are actually booleans - this leads to
11349
- // setting it with a string "false" value leading it to be coerced to
11350
- // `true`, so we need to always treat them as attributes.
11447
+ // these are enumerated attrs, however their corresponding DOM properties
11448
+ // are actually booleans - this leads to setting it with a string "false"
11449
+ // value leading it to be coerced to `true`, so we need to always treat
11450
+ // them as attributes.
11351
11451
  // Note that `contentEditable` doesn't have this problem: its DOM
11352
11452
  // property is also enumerated string values.
11353
- if (key === 'spellcheck' || key === 'draggable') {
11453
+ if (key === 'spellcheck' || key === 'draggable' || key === 'translate') {
11354
11454
  return false;
11355
11455
  }
11356
11456
  // #1787, #2840 form property on form elements is readonly and must be set as
@@ -12480,7 +12580,7 @@ var Vue = (function () {
12480
12580
  el.style.display = value ? el._vod : 'none';
12481
12581
  }
12482
12582
 
12483
- const rendererOptions = extend({ patchProp }, nodeOps);
12583
+ const rendererOptions = /*#__PURE__*/ extend({ patchProp }, nodeOps);
12484
12584
  // lazy create the renderer - this makes core renderer logic tree-shakable
12485
12585
  // in case the user only imports reactivity utilities from Vue.
12486
12586
  let renderer;