@vue/runtime-core 3.4.0-beta.4 → 3.4.0-rc.2

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.
@@ -12,7 +12,7 @@ function pushWarningContext(vnode) {
12
12
  function popWarningContext() {
13
13
  stack.pop();
14
14
  }
15
- function warn(msg, ...args) {
15
+ function warn$1(msg, ...args) {
16
16
  reactivity.pauseTracking();
17
17
  const instance = stack.length ? stack[stack.length - 1].component : null;
18
18
  const appWarnHandler = instance && instance.appContext.config.warnHandler;
@@ -113,9 +113,9 @@ function assertNumber(val, type) {
113
113
  if (val === void 0) {
114
114
  return;
115
115
  } else if (typeof val !== "number") {
116
- warn(`${type} is not a valid number - got ${JSON.stringify(val)}.`);
116
+ warn$1(`${type} is not a valid number - got ${JSON.stringify(val)}.`);
117
117
  } else if (isNaN(val)) {
118
- warn(`${type} is NaN - the duration expression might be incorrect.`);
118
+ warn$1(`${type} is NaN - the duration expression might be incorrect.`);
119
119
  }
120
120
  }
121
121
 
@@ -243,7 +243,7 @@ function logError(err, type, contextVNode, throwInDev = true) {
243
243
  if (contextVNode) {
244
244
  pushWarningContext(contextVNode);
245
245
  }
246
- warn(`Unhandled error${info ? ` during execution of ${info}` : ``}`);
246
+ warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`);
247
247
  if (contextVNode) {
248
248
  popWarningContext();
249
249
  }
@@ -541,22 +541,22 @@ function tryWrap(fn) {
541
541
  };
542
542
  }
543
543
 
544
- exports.devtools = void 0;
544
+ let devtools$1;
545
545
  let buffer = [];
546
546
  let devtoolsNotInstalled = false;
547
547
  function emit$1(event, ...args) {
548
- if (exports.devtools) {
549
- exports.devtools.emit(event, ...args);
548
+ if (devtools$1) {
549
+ devtools$1.emit(event, ...args);
550
550
  } else if (!devtoolsNotInstalled) {
551
551
  buffer.push({ event, args });
552
552
  }
553
553
  }
554
- function setDevtoolsHook(hook, target) {
554
+ function setDevtoolsHook$1(hook, target) {
555
555
  var _a, _b;
556
- exports.devtools = hook;
557
- if (exports.devtools) {
558
- exports.devtools.enabled = true;
559
- buffer.forEach(({ event, args }) => exports.devtools.emit(event, ...args));
556
+ devtools$1 = hook;
557
+ if (devtools$1) {
558
+ devtools$1.enabled = true;
559
+ buffer.forEach(({ event, args }) => devtools$1.emit(event, ...args));
560
560
  buffer = [];
561
561
  } else if (
562
562
  // handle late devtools injection - only do this if we are in an actual
@@ -568,10 +568,10 @@ function setDevtoolsHook(hook, target) {
568
568
  ) {
569
569
  const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || [];
570
570
  replay.push((newHook) => {
571
- setDevtoolsHook(newHook, target);
571
+ setDevtoolsHook$1(newHook, target);
572
572
  });
573
573
  setTimeout(() => {
574
- if (!exports.devtools) {
574
+ if (!devtools$1) {
575
575
  target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;
576
576
  devtoolsNotInstalled = true;
577
577
  buffer = [];
@@ -601,8 +601,8 @@ const _devtoolsComponentRemoved = /* @__PURE__ */ createDevtoolsComponentHook(
601
601
  "component:removed" /* COMPONENT_REMOVED */
602
602
  );
603
603
  const devtoolsComponentRemoved = (component) => {
604
- if (exports.devtools && typeof exports.devtools.cleanupBuffer === "function" && // remove the component if it wasn't buffered
605
- !exports.devtools.cleanupBuffer(component)) {
604
+ if (devtools$1 && typeof devtools$1.cleanupBuffer === "function" && // remove the component if it wasn't buffered
605
+ !devtools$1.cleanupBuffer(component)) {
606
606
  _devtoolsComponentRemoved(component);
607
607
  }
608
608
  };
@@ -650,7 +650,7 @@ function emit(instance, event, ...rawArgs) {
650
650
  if (emitsOptions) {
651
651
  if (!(event in emitsOptions) && true) {
652
652
  if (!propsOptions || !(shared.toHandlerKey(event) in propsOptions)) {
653
- warn(
653
+ warn$1(
654
654
  `Component emitted event "${event}" but it is neither declared in the emits option nor as an "${shared.toHandlerKey(event)}" prop.`
655
655
  );
656
656
  }
@@ -659,7 +659,7 @@ function emit(instance, event, ...rawArgs) {
659
659
  if (shared.isFunction(validator)) {
660
660
  const isValid = validator(...rawArgs);
661
661
  if (!isValid) {
662
- warn(
662
+ warn$1(
663
663
  `Invalid event arguments: event validation failed for event "${event}".`
664
664
  );
665
665
  }
@@ -686,7 +686,7 @@ function emit(instance, event, ...rawArgs) {
686
686
  {
687
687
  const lowerCaseEvent = event.toLowerCase();
688
688
  if (lowerCaseEvent !== event && props[shared.toHandlerKey(lowerCaseEvent)]) {
689
- warn(
689
+ warn$1(
690
690
  `Event "${lowerCaseEvent}" is emitted in component ${formatComponentName(
691
691
  instance,
692
692
  instance.type
@@ -854,7 +854,7 @@ function renderComponentRoot(instance) {
854
854
  const proxyToUse = withProxy || proxy;
855
855
  const thisProxy = setupState.__isScriptSetup ? new Proxy(proxyToUse, {
856
856
  get(target, key, receiver) {
857
- warn(
857
+ warn$1(
858
858
  `Property '${String(
859
859
  key
860
860
  )}' was accessed via 'this'. Avoid using 'this' in templates.`
@@ -935,12 +935,12 @@ function renderComponentRoot(instance) {
935
935
  }
936
936
  }
937
937
  if (extraAttrs.length) {
938
- warn(
938
+ warn$1(
939
939
  `Extraneous non-props attributes (${extraAttrs.join(", ")}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes.`
940
940
  );
941
941
  }
942
942
  if (eventAttrs.length) {
943
- warn(
943
+ warn$1(
944
944
  `Extraneous non-emits event listeners (${eventAttrs.join(", ")}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes. If the listener is intended to be a component custom event listener only, declare it using the "emits" option.`
945
945
  );
946
946
  }
@@ -949,7 +949,7 @@ function renderComponentRoot(instance) {
949
949
  }
950
950
  if (vnode.dirs) {
951
951
  if (!isElementRoot(root)) {
952
- warn(
952
+ warn$1(
953
953
  `Runtime directive used on component with non-element root node. The directives will not function as intended.`
954
954
  );
955
955
  }
@@ -958,7 +958,7 @@ function renderComponentRoot(instance) {
958
958
  }
959
959
  if (vnode.transition) {
960
960
  if (!isElementRoot(root)) {
961
- warn(
961
+ warn$1(
962
962
  `Component inside <Transition> renders non-element root node that cannot be animated.`
963
963
  );
964
964
  }
@@ -1151,11 +1151,11 @@ function resolveAsset(type, name, warnMissing = true, maybeSelfReference = false
1151
1151
  if (warnMissing && !res) {
1152
1152
  const extra = type === COMPONENTS ? `
1153
1153
  If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``;
1154
- warn(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`);
1154
+ warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`);
1155
1155
  }
1156
1156
  return res;
1157
1157
  } else {
1158
- warn(
1158
+ warn$1(
1159
1159
  `resolve${shared.capitalize(type.slice(0, -1))} can only be used in render() or setup().`
1160
1160
  );
1161
1161
  }
@@ -1711,7 +1711,7 @@ function normalizeSuspenseSlot(s) {
1711
1711
  if (shared.isArray(s)) {
1712
1712
  const singleChild = filterSingleRoot(s);
1713
1713
  if (!singleChild && s.filter((child) => child !== NULL_DYNAMIC_COMPONENT).length > 0) {
1714
- warn(`<Suspense> slots expect a single root node.`);
1714
+ warn$1(`<Suspense> slots expect a single root node.`);
1715
1715
  }
1716
1716
  s = singleChild;
1717
1717
  }
@@ -1766,7 +1766,7 @@ function watchSyncEffect(effect, options) {
1766
1766
  const INITIAL_WATCHER_VALUE = {};
1767
1767
  function watch(source, cb, options) {
1768
1768
  if (!shared.isFunction(cb)) {
1769
- warn(
1769
+ warn$1(
1770
1770
  `\`watch(fn, options?)\` signature has been moved to a separate API. Use \`watchEffect(fn, options?)\` instead. \`watch\` now only supports \`watch(source, cb, options?) signature.`
1771
1771
  );
1772
1772
  }
@@ -1783,23 +1783,23 @@ function doWatch(source, cb, { immediate, deep, flush, once, onTrack, onTrigger
1783
1783
  }
1784
1784
  if (!cb) {
1785
1785
  if (immediate !== void 0) {
1786
- warn(
1786
+ warn$1(
1787
1787
  `watch() "immediate" option is only respected when using the watch(source, callback, options?) signature.`
1788
1788
  );
1789
1789
  }
1790
1790
  if (deep !== void 0) {
1791
- warn(
1791
+ warn$1(
1792
1792
  `watch() "deep" option is only respected when using the watch(source, callback, options?) signature.`
1793
1793
  );
1794
1794
  }
1795
1795
  if (once !== void 0) {
1796
- warn(
1796
+ warn$1(
1797
1797
  `watch() "once" option is only respected when using the watch(source, callback, options?) signature.`
1798
1798
  );
1799
1799
  }
1800
1800
  }
1801
1801
  const warnInvalidSource = (s) => {
1802
- warn(
1802
+ warn$1(
1803
1803
  `Invalid watch source: `,
1804
1804
  s,
1805
1805
  `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.`
@@ -2005,13 +2005,13 @@ function traverse(value, seen) {
2005
2005
 
2006
2006
  function validateDirectiveName(name) {
2007
2007
  if (shared.isBuiltInDirective(name)) {
2008
- warn("Do not use built-in directive ids as custom directive id: " + name);
2008
+ warn$1("Do not use built-in directive ids as custom directive id: " + name);
2009
2009
  }
2010
2010
  }
2011
2011
  function withDirectives(vnode, directives) {
2012
2012
  const internalInstance = currentRenderingInstance;
2013
2013
  if (internalInstance === null) {
2014
- warn(`withDirectives can only be used inside render functions.`);
2014
+ warn$1(`withDirectives can only be used inside render functions.`);
2015
2015
  return vnode;
2016
2016
  }
2017
2017
  const instance = getExposeProxy(internalInstance) || internalInstance.proxy;
@@ -2118,7 +2118,7 @@ const BaseTransitionImpl = {
2118
2118
  for (const c of children) {
2119
2119
  if (c.type !== Comment) {
2120
2120
  if (hasFound) {
2121
- warn(
2121
+ warn$1(
2122
2122
  "<transition> can only be used on a single element or component. Use <transition-group> for lists."
2123
2123
  );
2124
2124
  break;
@@ -2131,7 +2131,7 @@ const BaseTransitionImpl = {
2131
2131
  const rawProps = reactivity.toRaw(props);
2132
2132
  const { mode } = rawProps;
2133
2133
  if (mode && mode !== "in-out" && mode !== "out-in" && mode !== "default") {
2134
- warn(`invalid <transition> mode: ${mode}`);
2134
+ warn$1(`invalid <transition> mode: ${mode}`);
2135
2135
  }
2136
2136
  if (state.isLeaving) {
2137
2137
  return emptyPlaceholder(child);
@@ -2446,7 +2446,7 @@ function defineAsyncComponent(source) {
2446
2446
  return pendingRequest;
2447
2447
  }
2448
2448
  if (!comp) {
2449
- warn(
2449
+ warn$1(
2450
2450
  `Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.`
2451
2451
  );
2452
2452
  }
@@ -2686,7 +2686,7 @@ const KeepAliveImpl = {
2686
2686
  const rawVNode = children[0];
2687
2687
  if (children.length > 1) {
2688
2688
  {
2689
- warn(`KeepAlive should contain exactly one component child.`);
2689
+ warn$1(`KeepAlive should contain exactly one component child.`);
2690
2690
  }
2691
2691
  current = null;
2692
2692
  return children;
@@ -2815,7 +2815,7 @@ function injectHook(type, hook, target = currentInstance, prepend = false) {
2815
2815
  return wrappedHook;
2816
2816
  } else {
2817
2817
  const apiName = shared.toHandlerKey(ErrorTypeStrings$1[type].replace(/ hook$/, ""));
2818
- warn(
2818
+ warn$1(
2819
2819
  `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup().` + (` If you are using async setup(), make sure to register lifecycle hooks before the first await statement.` )
2820
2820
  );
2821
2821
  }
@@ -2851,7 +2851,7 @@ function renderList(source, renderItem, cache, index) {
2851
2851
  }
2852
2852
  } else if (typeof source === "number") {
2853
2853
  if (!Number.isInteger(source)) {
2854
- warn(`The v-for range expect an integer value but got ${source}.`);
2854
+ warn$1(`The v-for range expect an integer value but got ${source}.`);
2855
2855
  }
2856
2856
  ret = new Array(source);
2857
2857
  for (let i = 0; i < source; i++) {
@@ -2907,7 +2907,7 @@ function renderSlot(slots, name, props = {}, fallback, noSlotted) {
2907
2907
  }
2908
2908
  let slot = slots[name];
2909
2909
  if (slot && slot.length > 1) {
2910
- warn(
2910
+ warn$1(
2911
2911
  `SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template.`
2912
2912
  );
2913
2913
  slot = () => [];
@@ -2950,7 +2950,7 @@ function ensureValidVNode(vnodes) {
2950
2950
  function toHandlers(obj, preserveCaseIfNecessary) {
2951
2951
  const ret = {};
2952
2952
  if (!shared.isObject(obj)) {
2953
- warn(`v-on with no argument expects an object value.`);
2953
+ warn$1(`v-on with no argument expects an object value.`);
2954
2954
  return ret;
2955
2955
  }
2956
2956
  for (const key in obj) {
@@ -3060,13 +3060,13 @@ const PublicInstanceProxyHandlers = {
3060
3060
  // to infinite warning loop
3061
3061
  key.indexOf("__v") !== 0)) {
3062
3062
  if (data !== shared.EMPTY_OBJ && isReservedPrefix(key[0]) && shared.hasOwn(data, key)) {
3063
- warn(
3063
+ warn$1(
3064
3064
  `Property ${JSON.stringify(
3065
3065
  key
3066
3066
  )} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.`
3067
3067
  );
3068
3068
  } else if (instance === currentRenderingInstance) {
3069
- warn(
3069
+ warn$1(
3070
3070
  `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.`
3071
3071
  );
3072
3072
  }
@@ -3078,17 +3078,17 @@ const PublicInstanceProxyHandlers = {
3078
3078
  setupState[key] = value;
3079
3079
  return true;
3080
3080
  } else if (setupState.__isScriptSetup && shared.hasOwn(setupState, key)) {
3081
- warn(`Cannot mutate <script setup> binding "${key}" from Options API.`);
3081
+ warn$1(`Cannot mutate <script setup> binding "${key}" from Options API.`);
3082
3082
  return false;
3083
3083
  } else if (data !== shared.EMPTY_OBJ && shared.hasOwn(data, key)) {
3084
3084
  data[key] = value;
3085
3085
  return true;
3086
3086
  } else if (shared.hasOwn(instance.props, key)) {
3087
- warn(`Attempting to mutate prop "${key}". Props are readonly.`);
3087
+ warn$1(`Attempting to mutate prop "${key}". Props are readonly.`);
3088
3088
  return false;
3089
3089
  }
3090
3090
  if (key[0] === "$" && key.slice(1) in instance) {
3091
- warn(
3091
+ warn$1(
3092
3092
  `Attempting to mutate public property "${key}". Properties starting with $ are reserved and readonly.`
3093
3093
  );
3094
3094
  return false;
@@ -3122,7 +3122,7 @@ const PublicInstanceProxyHandlers = {
3122
3122
  };
3123
3123
  {
3124
3124
  PublicInstanceProxyHandlers.ownKeys = (target) => {
3125
- warn(
3125
+ warn$1(
3126
3126
  `Avoid app logic that relies on enumerating keys on a component instance. The keys will be empty in production mode to avoid performance overhead.`
3127
3127
  );
3128
3128
  return Reflect.ownKeys(target);
@@ -3141,7 +3141,7 @@ const RuntimeCompiledPublicInstanceProxyHandlers = /* @__PURE__ */ shared.extend
3141
3141
  has(_, key) {
3142
3142
  const has = key[0] !== "_" && !shared.isGloballyAllowed(key);
3143
3143
  if (!has && PublicInstanceProxyHandlers.has(_, key)) {
3144
- warn(
3144
+ warn$1(
3145
3145
  `Property ${JSON.stringify(
3146
3146
  key
3147
3147
  )} should not start with _ which is a reserved prefix for Vue internals.`
@@ -3191,7 +3191,7 @@ function exposeSetupStateOnRenderContext(instance) {
3191
3191
  Object.keys(reactivity.toRaw(setupState)).forEach((key) => {
3192
3192
  if (!setupState.__isScriptSetup) {
3193
3193
  if (isReservedPrefix(key[0])) {
3194
- warn(
3194
+ warn$1(
3195
3195
  `setup() return property ${JSON.stringify(
3196
3196
  key
3197
3197
  )} should not start with "$" or "_" which are reserved prefixes for Vue internals.`
@@ -3208,7 +3208,7 @@ function exposeSetupStateOnRenderContext(instance) {
3208
3208
  });
3209
3209
  }
3210
3210
 
3211
- const warnRuntimeUsage = (method) => warn(
3211
+ const warnRuntimeUsage = (method) => warn$1(
3212
3212
  `${method}() is a compiler-hint helper that is only usable inside <script setup> of a single file component. Its arguments should be compiled away and passing it at runtime has no effect.`
3213
3213
  );
3214
3214
  function defineProps() {
@@ -3259,11 +3259,11 @@ function useAttrs() {
3259
3259
  function useModel(props, name) {
3260
3260
  const i = getCurrentInstance();
3261
3261
  if (!i) {
3262
- warn(`useModel() called without active instance.`);
3262
+ warn$1(`useModel() called without active instance.`);
3263
3263
  return reactivity.ref();
3264
3264
  }
3265
3265
  if (!i.propsOptions[0][name]) {
3266
- warn(`useModel() called with prop "${name}" which is not declared.`);
3266
+ warn$1(`useModel() called with prop "${name}" which is not declared.`);
3267
3267
  return reactivity.ref();
3268
3268
  }
3269
3269
  return reactivity.customRef((track, trigger) => {
@@ -3294,7 +3294,7 @@ function useModel(props, name) {
3294
3294
  function getContext() {
3295
3295
  const i = getCurrentInstance();
3296
3296
  if (!i) {
3297
- warn(`useContext() called without active instance.`);
3297
+ warn$1(`useContext() called without active instance.`);
3298
3298
  }
3299
3299
  return i.setupContext || (i.setupContext = createSetupContext(i));
3300
3300
  }
@@ -3319,7 +3319,7 @@ function mergeDefaults(raw, defaults) {
3319
3319
  } else if (opt === null) {
3320
3320
  opt = props[key] = { default: defaults[key] };
3321
3321
  } else {
3322
- warn(`props default key "${key}" has no corresponding declaration.`);
3322
+ warn$1(`props default key "${key}" has no corresponding declaration.`);
3323
3323
  }
3324
3324
  if (opt && defaults[`__skip_${key}`]) {
3325
3325
  opt.skipFactory = true;
@@ -3349,7 +3349,7 @@ function createPropsRestProxy(props, excludedKeys) {
3349
3349
  function withAsyncContext(getAwaitable) {
3350
3350
  const ctx = getCurrentInstance();
3351
3351
  if (!ctx) {
3352
- warn(
3352
+ warn$1(
3353
3353
  `withAsyncContext called without active current instance. This is likely a bug.`
3354
3354
  );
3355
3355
  }
@@ -3368,7 +3368,7 @@ function createDuplicateChecker() {
3368
3368
  const cache = /* @__PURE__ */ Object.create(null);
3369
3369
  return (type, key) => {
3370
3370
  if (cache[key]) {
3371
- warn(`${type} property "${key}" is already defined in ${cache[key]}.`);
3371
+ warn$1(`${type} property "${key}" is already defined in ${cache[key]}.`);
3372
3372
  } else {
3373
3373
  cache[key] = type;
3374
3374
  }
@@ -3444,7 +3444,7 @@ function applyOptions(instance) {
3444
3444
  checkDuplicateProperties("Methods" /* METHODS */, key);
3445
3445
  }
3446
3446
  } else {
3447
- warn(
3447
+ warn$1(
3448
3448
  `Method "${key}" has type "${typeof methodHandler}" in the component definition. Did you reference the function correctly?`
3449
3449
  );
3450
3450
  }
@@ -3452,18 +3452,18 @@ function applyOptions(instance) {
3452
3452
  }
3453
3453
  if (dataOptions) {
3454
3454
  if (!shared.isFunction(dataOptions)) {
3455
- warn(
3455
+ warn$1(
3456
3456
  `The data option must be a function. Plain object usage is no longer supported.`
3457
3457
  );
3458
3458
  }
3459
3459
  const data = dataOptions.call(publicThis, publicThis);
3460
3460
  if (shared.isPromise(data)) {
3461
- warn(
3461
+ warn$1(
3462
3462
  `data() returned a Promise - note data() cannot be async; If you intend to perform data fetching before component renders, use async setup() + <Suspense>.`
3463
3463
  );
3464
3464
  }
3465
3465
  if (!shared.isObject(data)) {
3466
- warn(`data() should return an object.`);
3466
+ warn$1(`data() should return an object.`);
3467
3467
  } else {
3468
3468
  instance.data = reactivity.reactive(data);
3469
3469
  {
@@ -3487,10 +3487,10 @@ function applyOptions(instance) {
3487
3487
  const opt = computedOptions[key];
3488
3488
  const get = shared.isFunction(opt) ? opt.bind(publicThis, publicThis) : shared.isFunction(opt.get) ? opt.get.bind(publicThis, publicThis) : shared.NOOP;
3489
3489
  if (get === shared.NOOP) {
3490
- warn(`Computed property "${key}" has no getter.`);
3490
+ warn$1(`Computed property "${key}" has no getter.`);
3491
3491
  }
3492
3492
  const set = !shared.isFunction(opt) && shared.isFunction(opt.set) ? opt.set.bind(publicThis) : () => {
3493
- warn(
3493
+ warn$1(
3494
3494
  `Write operation failed: computed property "${key}" is readonly.`
3495
3495
  );
3496
3496
  } ;
@@ -3616,7 +3616,7 @@ function createWatcher(raw, ctx, publicThis, key) {
3616
3616
  if (shared.isFunction(handler)) {
3617
3617
  watch(getter, handler);
3618
3618
  } else {
3619
- warn(`Invalid watch handler specified by key "${raw}"`, handler);
3619
+ warn$1(`Invalid watch handler specified by key "${raw}"`, handler);
3620
3620
  }
3621
3621
  } else if (shared.isFunction(raw)) {
3622
3622
  watch(getter, raw.bind(publicThis));
@@ -3628,11 +3628,11 @@ function createWatcher(raw, ctx, publicThis, key) {
3628
3628
  if (shared.isFunction(handler)) {
3629
3629
  watch(getter, handler, raw);
3630
3630
  } else {
3631
- warn(`Invalid watch handler specified by key "${raw.handler}"`, handler);
3631
+ warn$1(`Invalid watch handler specified by key "${raw.handler}"`, handler);
3632
3632
  }
3633
3633
  }
3634
3634
  } else {
3635
- warn(`Invalid watch option: "${key}"`, raw);
3635
+ warn$1(`Invalid watch option: "${key}"`, raw);
3636
3636
  }
3637
3637
  }
3638
3638
  function resolveMergedOptions(instance) {
@@ -3677,7 +3677,7 @@ function mergeOptions(to, from, strats, asMixin = false) {
3677
3677
  }
3678
3678
  for (const key in from) {
3679
3679
  if (asMixin && key === "expose") {
3680
- warn(
3680
+ warn$1(
3681
3681
  `"expose" option is ignored when declared in mixins or extends. It should only be declared in the base component itself.`
3682
3682
  );
3683
3683
  } else {
@@ -3805,7 +3805,7 @@ function createAppAPI(render, hydrate) {
3805
3805
  rootComponent = shared.extend({}, rootComponent);
3806
3806
  }
3807
3807
  if (rootProps != null && !shared.isObject(rootProps)) {
3808
- warn(`root props passed to app.mount() must be an object.`);
3808
+ warn$1(`root props passed to app.mount() must be an object.`);
3809
3809
  rootProps = null;
3810
3810
  }
3811
3811
  const context = createAppContext();
@@ -3824,14 +3824,14 @@ function createAppAPI(render, hydrate) {
3824
3824
  },
3825
3825
  set config(v) {
3826
3826
  {
3827
- warn(
3827
+ warn$1(
3828
3828
  `app.config cannot be replaced. Modify individual options instead.`
3829
3829
  );
3830
3830
  }
3831
3831
  },
3832
3832
  use(plugin, ...options) {
3833
3833
  if (installedPlugins.has(plugin)) {
3834
- warn(`Plugin has already been applied to target app.`);
3834
+ warn$1(`Plugin has already been applied to target app.`);
3835
3835
  } else if (plugin && shared.isFunction(plugin.install)) {
3836
3836
  installedPlugins.add(plugin);
3837
3837
  plugin.install(app, ...options);
@@ -3839,7 +3839,7 @@ function createAppAPI(render, hydrate) {
3839
3839
  installedPlugins.add(plugin);
3840
3840
  plugin(app, ...options);
3841
3841
  } else {
3842
- warn(
3842
+ warn$1(
3843
3843
  `A plugin must either be a function or an object with an "install" function.`
3844
3844
  );
3845
3845
  }
@@ -3850,7 +3850,7 @@ function createAppAPI(render, hydrate) {
3850
3850
  if (!context.mixins.includes(mixin)) {
3851
3851
  context.mixins.push(mixin);
3852
3852
  } else {
3853
- warn(
3853
+ warn$1(
3854
3854
  "Mixin has already been applied to target app" + (mixin.name ? `: ${mixin.name}` : "")
3855
3855
  );
3856
3856
  }
@@ -3865,7 +3865,7 @@ function createAppAPI(render, hydrate) {
3865
3865
  return context.components[name];
3866
3866
  }
3867
3867
  if (context.components[name]) {
3868
- warn(`Component "${name}" has already been registered in target app.`);
3868
+ warn$1(`Component "${name}" has already been registered in target app.`);
3869
3869
  }
3870
3870
  context.components[name] = component;
3871
3871
  return app;
@@ -3878,7 +3878,7 @@ function createAppAPI(render, hydrate) {
3878
3878
  return context.directives[name];
3879
3879
  }
3880
3880
  if (context.directives[name]) {
3881
- warn(`Directive "${name}" has already been registered in target app.`);
3881
+ warn$1(`Directive "${name}" has already been registered in target app.`);
3882
3882
  }
3883
3883
  context.directives[name] = directive;
3884
3884
  return app;
@@ -3886,7 +3886,7 @@ function createAppAPI(render, hydrate) {
3886
3886
  mount(rootContainer, isHydrate, namespace) {
3887
3887
  if (!isMounted) {
3888
3888
  if (rootContainer.__vue_app__) {
3889
- warn(
3889
+ warn$1(
3890
3890
  `There is already an app instance mounted on the host container.
3891
3891
  If you want to mount another app on the same host container, you need to unmount the previous app by calling \`app.unmount()\` first.`
3892
3892
  );
@@ -3921,7 +3921,7 @@ function createAppAPI(render, hydrate) {
3921
3921
  }
3922
3922
  return getExposeProxy(vnode.component) || vnode.component.proxy;
3923
3923
  } else {
3924
- warn(
3924
+ warn$1(
3925
3925
  `App has already been mounted.
3926
3926
  If you want to remount the same app, move your app creation logic into a factory function and create fresh app instances for each mount - e.g. \`const createMyApp = () => createApp(App)\``
3927
3927
  );
@@ -3936,12 +3936,12 @@ If you want to remount the same app, move your app creation logic into a factory
3936
3936
  }
3937
3937
  delete app._container.__vue_app__;
3938
3938
  } else {
3939
- warn(`Cannot unmount an app that is not mounted.`);
3939
+ warn$1(`Cannot unmount an app that is not mounted.`);
3940
3940
  }
3941
3941
  },
3942
3942
  provide(key, value) {
3943
3943
  if (key in context.provides) {
3944
- warn(
3944
+ warn$1(
3945
3945
  `App already provides property with key "${String(key)}". It will be overwritten with the new value.`
3946
3946
  );
3947
3947
  }
@@ -3965,7 +3965,7 @@ let currentApp = null;
3965
3965
  function provide(key, value) {
3966
3966
  if (!currentInstance) {
3967
3967
  {
3968
- warn(`provide() can only be used inside setup().`);
3968
+ warn$1(`provide() can only be used inside setup().`);
3969
3969
  }
3970
3970
  } else {
3971
3971
  let provides = currentInstance.provides;
@@ -3985,10 +3985,10 @@ function inject(key, defaultValue, treatDefaultAsFactory = false) {
3985
3985
  } else if (arguments.length > 1) {
3986
3986
  return treatDefaultAsFactory && shared.isFunction(defaultValue) ? defaultValue.call(instance && instance.proxy) : defaultValue;
3987
3987
  } else {
3988
- warn(`injection "${String(key)}" not found.`);
3988
+ warn$1(`injection "${String(key)}" not found.`);
3989
3989
  }
3990
3990
  } else {
3991
- warn(`inject() can only be used inside setup() or functional components.`);
3991
+ warn$1(`inject() can only be used inside setup() or functional components.`);
3992
3992
  }
3993
3993
  }
3994
3994
  function hasInjectionContext() {
@@ -4232,7 +4232,7 @@ function normalizePropsOptions(comp, appContext, asMixin = false) {
4232
4232
  if (shared.isArray(raw)) {
4233
4233
  for (let i = 0; i < raw.length; i++) {
4234
4234
  if (!shared.isString(raw[i])) {
4235
- warn(`props must be strings when using array syntax.`, raw[i]);
4235
+ warn$1(`props must be strings when using array syntax.`, raw[i]);
4236
4236
  }
4237
4237
  const normalizedKey = shared.camelize(raw[i]);
4238
4238
  if (validatePropName(normalizedKey)) {
@@ -4241,7 +4241,7 @@ function normalizePropsOptions(comp, appContext, asMixin = false) {
4241
4241
  }
4242
4242
  } else if (raw) {
4243
4243
  if (!shared.isObject(raw)) {
4244
- warn(`invalid props options`, raw);
4244
+ warn$1(`invalid props options`, raw);
4245
4245
  }
4246
4246
  for (const key in raw) {
4247
4247
  const normalizedKey = shared.camelize(key);
@@ -4270,7 +4270,7 @@ function validatePropName(key) {
4270
4270
  if (key[0] !== "$") {
4271
4271
  return true;
4272
4272
  } else {
4273
- warn(`Invalid prop name: "${key}" is a reserved property.`);
4273
+ warn$1(`Invalid prop name: "${key}" is a reserved property.`);
4274
4274
  }
4275
4275
  return false;
4276
4276
  }
@@ -4308,7 +4308,7 @@ function validateProps(rawProps, props, instance) {
4308
4308
  function validateProp(name, value, prop, props, isAbsent) {
4309
4309
  const { type, required, validator, skipCheck } = prop;
4310
4310
  if (required && isAbsent) {
4311
- warn('Missing required prop: "' + name + '"');
4311
+ warn$1('Missing required prop: "' + name + '"');
4312
4312
  return;
4313
4313
  }
4314
4314
  if (value == null && !required) {
@@ -4324,12 +4324,12 @@ function validateProp(name, value, prop, props, isAbsent) {
4324
4324
  isValid = valid;
4325
4325
  }
4326
4326
  if (!isValid) {
4327
- warn(getInvalidTypeMessage(name, value, expectedTypes));
4327
+ warn$1(getInvalidTypeMessage(name, value, expectedTypes));
4328
4328
  return;
4329
4329
  }
4330
4330
  }
4331
4331
  if (validator && !validator(value, props)) {
4332
- warn('Invalid prop: custom validator check failed for prop "' + name + '".');
4332
+ warn$1('Invalid prop: custom validator check failed for prop "' + name + '".');
4333
4333
  }
4334
4334
  }
4335
4335
  const isSimpleType = /* @__PURE__ */ shared.makeMap(
@@ -4401,7 +4401,7 @@ const normalizeSlot = (key, rawSlot, ctx) => {
4401
4401
  }
4402
4402
  const normalized = withCtx((...args) => {
4403
4403
  if (currentInstance) {
4404
- warn(
4404
+ warn$1(
4405
4405
  `Slot "${key}" invoked outside of the render function: this will not track dependencies used in the slot. Invoke the slot function inside the render function instead.`
4406
4406
  );
4407
4407
  }
@@ -4420,7 +4420,7 @@ const normalizeObjectSlots = (rawSlots, slots, instance) => {
4420
4420
  slots[key] = normalizeSlot(key, value, ctx);
4421
4421
  } else if (value != null) {
4422
4422
  {
4423
- warn(
4423
+ warn$1(
4424
4424
  `Non-function value encountered for slot "${key}". Prefer function slots for better performance.`
4425
4425
  );
4426
4426
  }
@@ -4431,7 +4431,7 @@ const normalizeObjectSlots = (rawSlots, slots, instance) => {
4431
4431
  };
4432
4432
  const normalizeVNodeSlots = (instance, children) => {
4433
4433
  if (!isKeepAlive(instance.vnode) && true) {
4434
- warn(
4434
+ warn$1(
4435
4435
  `Non-function value encountered for default slot. Prefer function slots for better performance.`
4436
4436
  );
4437
4437
  }
@@ -4513,7 +4513,7 @@ function setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {
4513
4513
  const value = isUnmount ? null : refValue;
4514
4514
  const { i: owner, r: ref } = rawRef;
4515
4515
  if (!owner) {
4516
- warn(
4516
+ warn$1(
4517
4517
  `Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function.`
4518
4518
  );
4519
4519
  return;
@@ -4568,7 +4568,7 @@ function setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {
4568
4568
  if (rawRef.k)
4569
4569
  refs[rawRef.k] = value;
4570
4570
  } else {
4571
- warn("Invalid template ref type:", ref, `(${typeof ref})`);
4571
+ warn$1("Invalid template ref type:", ref, `(${typeof ref})`);
4572
4572
  }
4573
4573
  };
4574
4574
  if (value) {
@@ -4578,7 +4578,7 @@ function setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {
4578
4578
  doSet();
4579
4579
  }
4580
4580
  } else {
4581
- warn("Invalid template ref type:", ref, `(${typeof ref})`);
4581
+ warn$1("Invalid template ref type:", ref, `(${typeof ref})`);
4582
4582
  }
4583
4583
  }
4584
4584
  }
@@ -4610,7 +4610,7 @@ function createHydrationFunctions(rendererInternals) {
4610
4610
  } = rendererInternals;
4611
4611
  const hydrate = (vnode, container) => {
4612
4612
  if (!container.hasChildNodes()) {
4613
- warn(
4613
+ warn$1(
4614
4614
  `Attempting to hydrate existing markup but container is empty. Performing full mount instead.`
4615
4615
  );
4616
4616
  patch(null, vnode, container);
@@ -4670,7 +4670,7 @@ function createHydrationFunctions(rendererInternals) {
4670
4670
  } else {
4671
4671
  if (node.data !== vnode.children) {
4672
4672
  hasMismatch = true;
4673
- warn(
4673
+ warn$1(
4674
4674
  `Hydration text mismatch in`,
4675
4675
  node.parentNode,
4676
4676
  `
@@ -4805,7 +4805,7 @@ function createHydrationFunctions(rendererInternals) {
4805
4805
  hydrateNode
4806
4806
  );
4807
4807
  } else {
4808
- warn("Invalid HostVNode type:", type, `(${typeof type})`);
4808
+ warn$1("Invalid HostVNode type:", type, `(${typeof type})`);
4809
4809
  }
4810
4810
  }
4811
4811
  if (ref != null) {
@@ -4846,7 +4846,7 @@ function createHydrationFunctions(rendererInternals) {
4846
4846
  while (next) {
4847
4847
  hasMismatch = true;
4848
4848
  if (!hasWarned) {
4849
- warn(
4849
+ warn$1(
4850
4850
  `Hydration children mismatch on`,
4851
4851
  el,
4852
4852
  `
@@ -4861,7 +4861,7 @@ Server rendered element contains more child nodes than client vdom.`
4861
4861
  } else if (shapeFlag & 8) {
4862
4862
  if (el.textContent !== vnode.children) {
4863
4863
  hasMismatch = true;
4864
- warn(
4864
+ warn$1(
4865
4865
  `Hydration text content mismatch on`,
4866
4866
  el,
4867
4867
  `
@@ -4930,7 +4930,7 @@ Server rendered element contains more child nodes than client vdom.`
4930
4930
  } else {
4931
4931
  hasMismatch = true;
4932
4932
  if (!hasWarned) {
4933
- warn(
4933
+ warn$1(
4934
4934
  `Hydration children mismatch on`,
4935
4935
  container,
4936
4936
  `
@@ -4977,7 +4977,7 @@ Server rendered element contains fewer child nodes than client vdom.`
4977
4977
  };
4978
4978
  const handleMismatch = (node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragment) => {
4979
4979
  hasMismatch = true;
4980
- warn(
4980
+ warn$1(
4981
4981
  `Hydration node mismatch:
4982
4982
  - rendered on server:`,
4983
4983
  node,
@@ -5055,9 +5055,9 @@ function propHasMismatch(el, key, clientValue) {
5055
5055
  let actual;
5056
5056
  let expected;
5057
5057
  if (key === "class") {
5058
- actual = el.getAttribute("class");
5059
- expected = shared.normalizeClass(clientValue);
5060
- if (actual !== expected) {
5058
+ actual = toClassSet(el.getAttribute("class") || "");
5059
+ expected = toClassSet(shared.normalizeClass(clientValue));
5060
+ if (!isSetEqual(actual, expected)) {
5061
5061
  mismatchType = mismatchKey = `class`;
5062
5062
  }
5063
5063
  } else if (key === "style") {
@@ -5076,7 +5076,7 @@ function propHasMismatch(el, key, clientValue) {
5076
5076
  }
5077
5077
  if (mismatchType) {
5078
5078
  const format = (v) => v === false ? `(not rendered)` : `${mismatchKey}="${v}"`;
5079
- warn(
5079
+ warn$1(
5080
5080
  `Hydration ${mismatchType} mismatch on`,
5081
5081
  el,
5082
5082
  `
@@ -5089,6 +5089,20 @@ function propHasMismatch(el, key, clientValue) {
5089
5089
  }
5090
5090
  return false;
5091
5091
  }
5092
+ function toClassSet(str) {
5093
+ return new Set(str.trim().split(/\s+/));
5094
+ }
5095
+ function isSetEqual(a, b) {
5096
+ if (a.size !== b.size) {
5097
+ return false;
5098
+ }
5099
+ for (const s of a) {
5100
+ if (!b.has(s)) {
5101
+ return false;
5102
+ }
5103
+ }
5104
+ return true;
5105
+ }
5092
5106
 
5093
5107
  let supported;
5094
5108
  let perf;
@@ -5141,7 +5155,7 @@ function baseCreateRenderer(options, createHydrationFns) {
5141
5155
  const target = shared.getGlobalThis();
5142
5156
  target.__VUE__ = true;
5143
5157
  {
5144
- setDevtoolsHook(target.__VUE_DEVTOOLS_GLOBAL_HOOK__, target);
5158
+ setDevtoolsHook$1(target.__VUE_DEVTOOLS_GLOBAL_HOOK__, target);
5145
5159
  }
5146
5160
  const {
5147
5161
  insert: hostInsert,
@@ -5250,7 +5264,7 @@ function baseCreateRenderer(options, createHydrationFns) {
5250
5264
  internals
5251
5265
  );
5252
5266
  } else {
5253
- warn("Invalid VNode type:", type, `(${typeof type})`);
5267
+ warn$1("Invalid VNode type:", type, `(${typeof type})`);
5254
5268
  }
5255
5269
  }
5256
5270
  if (ref != null && parentComponent) {
@@ -6219,7 +6233,7 @@ function baseCreateRenderer(options, createHydrationFns) {
6219
6233
  const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);
6220
6234
  if (nextChild.key != null) {
6221
6235
  if (keyToNewIndexMap.has(nextChild.key)) {
6222
- warn(
6236
+ warn$1(
6223
6237
  `Duplicate keys found during update:`,
6224
6238
  JSON.stringify(nextChild.key),
6225
6239
  `Make sure keys are unique.`
@@ -6648,14 +6662,14 @@ const resolveTarget = (props, select) => {
6648
6662
  const targetSelector = props && props.to;
6649
6663
  if (shared.isString(targetSelector)) {
6650
6664
  if (!select) {
6651
- warn(
6665
+ warn$1(
6652
6666
  `Current renderer does not support string target for Teleports. (missing querySelector renderer option)`
6653
6667
  );
6654
6668
  return null;
6655
6669
  } else {
6656
6670
  const target = select(targetSelector);
6657
6671
  if (!target) {
6658
- warn(
6672
+ warn$1(
6659
6673
  `Failed to locate Teleport target with selector "${targetSelector}". Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree.`
6660
6674
  );
6661
6675
  }
@@ -6663,7 +6677,7 @@ const resolveTarget = (props, select) => {
6663
6677
  }
6664
6678
  } else {
6665
6679
  if (!targetSelector && !isTeleportDisabled(props)) {
6666
- warn(`Invalid Teleport target: ${targetSelector}`);
6680
+ warn$1(`Invalid Teleport target: ${targetSelector}`);
6667
6681
  }
6668
6682
  return targetSelector;
6669
6683
  }
@@ -6699,7 +6713,7 @@ const TeleportImpl = {
6699
6713
  namespace = "mathml";
6700
6714
  }
6701
6715
  } else if (!disabled) {
6702
- warn("Invalid Teleport target on mount:", target, `(${typeof target})`);
6716
+ warn$1("Invalid Teleport target on mount:", target, `(${typeof target})`);
6703
6717
  }
6704
6718
  const mount = (container2, anchor2) => {
6705
6719
  if (shapeFlag & 16) {
@@ -6786,7 +6800,7 @@ const TeleportImpl = {
6786
6800
  0
6787
6801
  );
6788
6802
  } else {
6789
- warn(
6803
+ warn$1(
6790
6804
  "Invalid Teleport target on update:",
6791
6805
  target,
6792
6806
  `(${typeof target})`
@@ -7036,7 +7050,7 @@ function createBaseVNode(type, props = null, children = null, patchFlag = 0, dyn
7036
7050
  vnode.shapeFlag |= shared.isString(children) ? 8 : 16;
7037
7051
  }
7038
7052
  if (vnode.key !== vnode.key) {
7039
- warn(`VNode created with invalid key (NaN). VNode type:`, vnode.type);
7053
+ warn$1(`VNode created with invalid key (NaN). VNode type:`, vnode.type);
7040
7054
  }
7041
7055
  if (isBlockTreeEnabled > 0 && // avoid a block node from tracking itself
7042
7056
  !isBlockNode && // has current parent block
@@ -7055,7 +7069,7 @@ const createVNode = createVNodeWithArgsTransform ;
7055
7069
  function _createVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, isBlockNode = false) {
7056
7070
  if (!type || type === NULL_DYNAMIC_COMPONENT) {
7057
7071
  if (!type) {
7058
- warn(`Invalid vnode type when creating vnode: ${type}.`);
7072
+ warn$1(`Invalid vnode type when creating vnode: ${type}.`);
7059
7073
  }
7060
7074
  type = Comment;
7061
7075
  }
@@ -7098,7 +7112,7 @@ function _createVNode(type, props = null, children = null, patchFlag = 0, dynami
7098
7112
  const shapeFlag = shared.isString(type) ? 1 : isSuspense(type) ? 128 : isTeleport(type) ? 64 : shared.isObject(type) ? 4 : shared.isFunction(type) ? 2 : 0;
7099
7113
  if (shapeFlag & 4 && reactivity.isProxy(type)) {
7100
7114
  type = reactivity.toRaw(type);
7101
- warn(
7115
+ warn$1(
7102
7116
  `Vue received a Component that was made a reactive object. This can lead to unnecessary performance overhead and should be avoided by marking the component with \`markRaw\` or using \`shallowRef\` instead of \`ref\`.`,
7103
7117
  `
7104
7118
  Component that was made reactive: `,
@@ -7411,7 +7425,7 @@ const isBuiltInTag = /* @__PURE__ */ shared.makeMap("slot,component");
7411
7425
  function validateComponentName(name, config) {
7412
7426
  const appIsNativeTag = config.isNativeTag || shared.NO;
7413
7427
  if (isBuiltInTag(name) || appIsNativeTag(name)) {
7414
- warn(
7428
+ warn$1(
7415
7429
  "Do not use built-in or reserved HTML elements as component id: " + name
7416
7430
  );
7417
7431
  }
@@ -7450,7 +7464,7 @@ function setupStatefulComponent(instance, isSSR) {
7450
7464
  }
7451
7465
  }
7452
7466
  if (Component.compilerOptions && isRuntimeOnly()) {
7453
- warn(
7467
+ warn$1(
7454
7468
  `"compilerOptions" is only supported when using a build of Vue that includes the runtime compiler. Since you are using a runtime-only build, the options should be passed via your build tool config instead.`
7455
7469
  );
7456
7470
  }
@@ -7485,7 +7499,7 @@ function setupStatefulComponent(instance, isSSR) {
7485
7499
  instance.asyncDep = setupResult;
7486
7500
  if (!instance.suspense) {
7487
7501
  const name = (_a = Component.name) != null ? _a : "Anonymous";
7488
- warn(
7502
+ warn$1(
7489
7503
  `Component <${name}>: setup function returned a promise, but no <Suspense> boundary was found in the parent component tree. A component with async setup() must be nested in a <Suspense> in order to be rendered.`
7490
7504
  );
7491
7505
  }
@@ -7506,7 +7520,7 @@ function handleSetupResult(instance, setupResult, isSSR) {
7506
7520
  }
7507
7521
  } else if (shared.isObject(setupResult)) {
7508
7522
  if (isVNode(setupResult)) {
7509
- warn(
7523
+ warn$1(
7510
7524
  `setup() should not return VNodes directly - return a render function instead.`
7511
7525
  );
7512
7526
  }
@@ -7518,7 +7532,7 @@ function handleSetupResult(instance, setupResult, isSSR) {
7518
7532
  exposeSetupStateOnRenderContext(instance);
7519
7533
  }
7520
7534
  } else if (setupResult !== void 0) {
7521
- warn(
7535
+ warn$1(
7522
7536
  `setup() should return an object. Received: ${setupResult === null ? "null" : typeof setupResult}`
7523
7537
  );
7524
7538
  }
@@ -7579,12 +7593,12 @@ function finishComponentSetup(instance, isSSR, skipOptions) {
7579
7593
  }
7580
7594
  if (!Component.render && instance.render === shared.NOOP && !isSSR) {
7581
7595
  if (!compile && Component.template) {
7582
- warn(
7596
+ warn$1(
7583
7597
  `Component provided template option but runtime compilation is not supported in this build of Vue.` + (``)
7584
7598
  /* should not happen */
7585
7599
  );
7586
7600
  } else {
7587
- warn(`Component is missing template or render function.`);
7601
+ warn$1(`Component is missing template or render function.`);
7588
7602
  }
7589
7603
  }
7590
7604
  }
@@ -7598,11 +7612,11 @@ function getAttrsProxy(instance) {
7598
7612
  return target[key];
7599
7613
  },
7600
7614
  set() {
7601
- warn(`setupContext.attrs is readonly.`);
7615
+ warn$1(`setupContext.attrs is readonly.`);
7602
7616
  return false;
7603
7617
  },
7604
7618
  deleteProperty() {
7605
- warn(`setupContext.attrs is readonly.`);
7619
+ warn$1(`setupContext.attrs is readonly.`);
7606
7620
  return false;
7607
7621
  }
7608
7622
  }
@@ -7620,7 +7634,7 @@ function createSetupContext(instance) {
7620
7634
  const expose = (exposed) => {
7621
7635
  {
7622
7636
  if (instance.exposed) {
7623
- warn(`expose() should be called only once per setup().`);
7637
+ warn$1(`expose() should be called only once per setup().`);
7624
7638
  }
7625
7639
  if (exposed != null) {
7626
7640
  let exposedType = typeof exposed;
@@ -7632,7 +7646,7 @@ function createSetupContext(instance) {
7632
7646
  }
7633
7647
  }
7634
7648
  if (exposedType !== "object") {
7635
- warn(
7649
+ warn$1(
7636
7650
  `expose() should be passed a plain object, received ${exposedType}.`
7637
7651
  );
7638
7652
  }
@@ -7732,7 +7746,7 @@ const useSSRContext = () => {
7732
7746
  {
7733
7747
  const ctx = inject(ssrContextKey);
7734
7748
  if (!ctx) {
7735
- warn(
7749
+ warn$1(
7736
7750
  `Server rendering context not provided. Make sure to only call useSSRContext() conditionally in the server build.`
7737
7751
  );
7738
7752
  }
@@ -7945,8 +7959,11 @@ function isMemoSame(cached, memo) {
7945
7959
  return true;
7946
7960
  }
7947
7961
 
7948
- const version = "3.4.0-beta.4";
7962
+ const version = "3.4.0-rc.2";
7963
+ const warn = warn$1 ;
7949
7964
  const ErrorTypeStrings = ErrorTypeStrings$1 ;
7965
+ const devtools = devtools$1 ;
7966
+ const setDevtoolsHook = setDevtoolsHook$1 ;
7950
7967
  const _ssrUtils = {
7951
7968
  createComponentInstance,
7952
7969
  setupComponent,
@@ -8033,6 +8050,7 @@ exports.defineModel = defineModel;
8033
8050
  exports.defineOptions = defineOptions;
8034
8051
  exports.defineProps = defineProps;
8035
8052
  exports.defineSlots = defineSlots;
8053
+ exports.devtools = devtools;
8036
8054
  exports.getCurrentInstance = getCurrentInstance;
8037
8055
  exports.getTransitionRawChildren = getTransitionRawChildren;
8038
8056
  exports.guardReactiveProps = guardReactiveProps;